Jelajahi Sumber

use finished and sync pipeline

reiji-h 1 tahun lalu
induk
melakukan
06cf390092

+ 3 - 3
apps/app/src/server/service/growi-bridge/index.ts

@@ -1,7 +1,7 @@
 import fs from 'fs';
 import fs from 'fs';
 import path from 'path';
 import path from 'path';
 import { pipeline } from 'stream';
 import { pipeline } from 'stream';
-import { pipeline as pipelinePromise } from 'stream/promises';
+import { finished } from 'stream/promises';
 
 
 import unzipStream, { type Entry } from 'unzip-stream';
 import unzipStream, { type Entry } from 'unzip-stream';
 
 
@@ -80,7 +80,7 @@ class GrowiBridgeService {
 
 
     const readStream = fs.createReadStream(zipFile);
     const readStream = fs.createReadStream(zipFile);
     const parseStream = unzipStream.Parse();
     const parseStream = unzipStream.Parse();
-    const unzipEntryStream = pipeline(readStream, parseStream);
+    const unzipEntryStream = pipeline(readStream, parseStream, () => {});
 
 
     let tapPromise;
     let tapPromise;
 
 
@@ -103,7 +103,7 @@ class GrowiBridgeService {
     });
     });
 
 
     try {
     try {
-      await pipelinePromise([unzipEntryStream]);
+      await finished(unzipEntryStream);
       await tapPromise;
       await tapPromise;
     }
     }
     // if zip is broken
     // if zip is broken

+ 5 - 5
apps/app/src/server/service/import/import.ts

@@ -2,7 +2,7 @@ import fs from 'fs';
 import path from 'path';
 import path from 'path';
 import type { EventEmitter } from 'stream';
 import type { EventEmitter } from 'stream';
 import { Writable, Transform, pipeline } from 'stream';
 import { Writable, Transform, pipeline } from 'stream';
-import { pipeline as pipelinePromise } from 'stream/promises';
+import { finished, pipeline as pipelinePromise } from 'stream/promises';
 
 
 import JSONStream from 'JSONStream';
 import JSONStream from 'JSONStream';
 import gc from 'expose-gc/function';
 import gc from 'expose-gc/function';
@@ -344,10 +344,10 @@ export class ImportService {
   async unzip(zipFile) {
   async unzip(zipFile) {
     const readStream = fs.createReadStream(zipFile);
     const readStream = fs.createReadStream(zipFile);
     const parseStream = unzipStream.Parse();
     const parseStream = unzipStream.Parse();
-    const unzipStreamPipe = pipeline(readStream, parseStream);
+    const unzipEntryStream = pipeline(readStream, parseStream, () => {});
     const files: string[] = [];
     const files: string[] = [];
 
 
-    const unzipEntryStream = unzipStreamPipe.on('entry', (/** @type {Entry} */ entry) => {
+    unzipEntryStream.on('entry', (/** @type {Entry} */ entry) => {
       const fileName = entry.path;
       const fileName = entry.path;
       // https://regex101.com/r/mD4eZs/6
       // https://regex101.com/r/mD4eZs/6
       // prevent from unexpecting attack doing unzip file (path traversal attack)
       // prevent from unexpecting attack doing unzip file (path traversal attack)
@@ -365,12 +365,12 @@ export class ImportService {
       else {
       else {
         const jsonFile = path.join(this.baseDir, fileName);
         const jsonFile = path.join(this.baseDir, fileName);
         const writeStream = fs.createWriteStream(jsonFile, { encoding: this.growiBridgeService.getEncoding() });
         const writeStream = fs.createWriteStream(jsonFile, { encoding: this.growiBridgeService.getEncoding() });
-        pipeline(entry, writeStream);
+        pipeline(entry, writeStream, () => {});
         files.push(jsonFile);
         files.push(jsonFile);
       }
       }
     });
     });
 
 
-    await pipelinePromise([unzipEntryStream]);
+    await finished(unzipEntryStream);
 
 
     return files;
     return files;
   }
   }