@push.rocks/smartarchive 4.2.2 → 4.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartarchive',
6
- version: '4.2.2',
6
+ version: '4.2.4',
7
7
  description: 'A library for working with archive files, providing utilities for compressing and decompressing data.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHVHQUF1RztDQUNySCxDQUFBIn0=
@@ -51,7 +51,7 @@ export class SmartArchive {
51
51
  return urlStream;
52
52
  }
53
53
  if (this.sourceFilePath) {
54
- const fileStream = plugins.smartfile.fs.toReadStream(this.sourceFilePath);
54
+ const fileStream = plugins.fs.createReadStream(this.sourceFilePath);
55
55
  return fileStream;
56
56
  }
57
57
  }
@@ -73,10 +73,10 @@ export class SmartArchive {
73
73
  : 'no relative path');
74
74
  const streamFile = streamFileArg;
75
75
  const readStream = await streamFile.createReadStream();
76
- await plugins.smartfile.fs.ensureDir(targetDir);
76
+ await plugins.fsPromises.mkdir(targetDir, { recursive: true });
77
77
  const writePath = plugins.path.join(targetDir, streamFile.relativeFilePath || fileNameArg);
78
- await plugins.smartfile.fs.ensureDir(plugins.path.dirname(writePath));
79
- const writeStream = plugins.smartfile.fsStream.createWriteStream(writePath);
78
+ await plugins.fsPromises.mkdir(plugins.path.dirname(writePath), { recursive: true });
79
+ const writeStream = plugins.fs.createWriteStream(writePath);
80
80
  readStream.pipe(writeStream);
81
81
  writeStream.on('finish', () => {
82
82
  done.resolve();
@@ -161,4 +161,4 @@ export class SmartArchive {
161
161
  return streamFileIntake;
162
162
  }
163
163
  }
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zbWFydGFyY2hpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnNtYXJ0YXJjaGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxFQUNMLGVBQWUsR0FFaEIsTUFBTSw4QkFBOEIsQ0FBQztBQUl0QyxNQUFNLE9BQU8sWUFBWTtJQUN2QixTQUFTO0lBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBYztRQUMvQyxNQUFNLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEQsb0JBQW9CLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUN4QyxPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDakMsV0FBbUI7UUFFbkIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hELG9CQUFvQixDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUM7UUFDbEQsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FDbkMsU0FHNEI7UUFFNUIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hELG9CQUFvQixDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDOUMsT0FBTyxvQkFB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
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zbWFydGFyY2hpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnNtYXJ0YXJjaGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxFQUNMLGVBQWUsR0FFaEIsTUFBTSw4QkFBOEIsQ0FBQztBQUl0QyxNQUFNLE9BQU8sWUFBWTtJQUN2QixTQUFTO0lBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBYztRQUMvQyxNQUFNLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEQsb0JBQW9CLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUN4QyxPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDakMsV0FBbUI7UUFFbkIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hELG9CQUFvQixDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUM7UUFDbEQsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FDbkMsU0FHNEI7UUFFNUIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hELG9CQUFvQixDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDOUMsT0FBTyxvQkFB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
@@ -42,7 +42,7 @@ export class TarTools {
42
42
  console.warn('@push.rocks/smartarchive: When streaming, it is recommended to provide byteLength, if known.');
43
43
  }
44
44
  else if (optionsArg.filePath) {
45
- const fileStat = await plugins.smartfile.fs.stat(optionsArg.filePath);
45
+ const fileStat = await plugins.fsPromises.stat(optionsArg.filePath);
46
46
  contentByteLength = fileStat.size;
47
47
  }
48
48
  /**
@@ -88,16 +88,16 @@ export class TarTools {
88
88
  * @param directoryPath
89
89
  */
90
90
  async packDirectory(directoryPath) {
91
- const fileTree = await plugins.smartfile.fs.listFileTree(directoryPath, '**/*');
91
+ const fileTree = await plugins.listFileTree(directoryPath, '**/*');
92
92
  const pack = await this.getPackStream();
93
93
  for (const filePath of fileTree) {
94
94
  const absolutePath = plugins.path.join(directoryPath, filePath);
95
- const fileStat = await plugins.smartfile.fs.stat(absolutePath);
95
+ const fileStat = await plugins.fsPromises.stat(absolutePath);
96
96
  await this.addFileToPack(pack, {
97
97
  byteLength: fileStat.size,
98
98
  filePath: absolutePath,
99
99
  fileName: filePath,
100
- content: plugins.smartfile.fsStream.createReadStream(absolutePath),
100
+ content: plugins.fs.createReadStream(absolutePath),
101
101
  });
102
102
  }
103
103
  return pack;
@@ -111,4 +111,4 @@ export class TarTools {
111
111
  return plugins.tarStream.extract();
112
112
  }
113
113
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50YXJ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMudGFydG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsTUFBTSxPQUFPLFFBQVE7SUFDbkIsV0FBVztJQUNYLGdCQUFlLENBQUM7SUFFaEIsVUFBVTtJQUNILEtBQUssQ0FBQyxhQUFhLENBQ3hCLElBQTRCLEVBQzVCLFVBVUM7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDakQsSUFBSSxRQUFRLEdBQWtCLElBQUksQ0FBQztZQUVuQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEIsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDakMsQ0FBQztpQkFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckUsUUFBUSxHQUFJLFVBQVUsQ0FBQyxPQUF1QyxDQUFDLFFBQVEsQ0FBQztZQUMxRSxDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0RSxRQUFRLEdBQUksVUFBVSxDQUFDLE9BQXdDO3FCQUM1RCxnQkFBZ0IsQ0FBQztZQUN0QixDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxDQUFDO1lBRUQ7O2VBRUc7WUFDSCxJQUFJLGlCQUF5QixDQUFDO1lBQzlCLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMxQixpQkFBaUIsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQzVDLENBQUM7aUJBQU0sSUFB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
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50YXJ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMudGFydG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsTUFBTSxPQUFPLFFBQVE7SUFDbkIsV0FBVztJQUNYLGdCQUFlLENBQUM7SUFFaEIsVUFBVTtJQUNILEtBQUssQ0FBQyxhQUFhLENBQ3hCLElBQTRCLEVBQzVCLFVBVUM7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDakQsSUFBSSxRQUFRLEdBQWtCLElBQUksQ0FBQztZQUVuQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEIsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDakMsQ0FBQztpQkFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckUsUUFBUSxHQUFJLFVBQVUsQ0FBQyxPQUF1QyxDQUFDLFFBQVEsQ0FBQztZQUMxRSxDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0RSxRQUFRLEdBQUksVUFBVSxDQUFDLE9BQXdDO3FCQUM1RCxnQkFBZ0IsQ0FBQztZQUN0QixDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxDQUFDO1lBRUQ7O2VBRUc7WUFDSCxJQUFJLGlCQUF5QixDQUFDO1lBQzlCLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMxQixpQkFBaUIsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQzVDLENBQUM7aUJBQU0sSUFBSSxPQUFPLFVBQVUsQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2xELGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwRSxDQUFDO2lCQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDaEQsQ0FBQztpQkFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckUsaUJBQWlCLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsd0NBQXdDO1lBQ2xHLENBQUM7aUJBQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxZQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RFLGlCQUFpQixHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLHlDQUF5QztZQUNuRyxDQUFDO2lCQUFNLElBQ0wsVUFBVSxDQUFDLE9BQU8sWUFBWSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQ2pFLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FDViw4RkFBOEYsQ0FDL0YsQ0FBQztZQUNKLENBQUM7aUJBQU0sSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ3BDLENBQUM7WUFFRDs7ZUFFRztZQUNILElBQUksT0FBNEMsQ0FBQztZQUNqRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6RSxDQUFDO2lCQUFNLElBQUksT0FBTyxVQUFVLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNsRCxPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQ2hDLENBQUM7WUFDSixDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyRSxPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQzVCLENBQUM7WUFDSixDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0RSxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEQsQ0FBQztpQkFBTSxJQUNMLFVBQVUsQ0FBQyxPQUFPLFlBQVksT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNqRSxDQUFDO2dCQUNELE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQy9CLENBQUM7WUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN0QjtnQkFDRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxHQUFHLENBQUMsaUJBQWlCO29CQUNuQixDQUFDLENBQUM7d0JBQ0UsSUFBSSxFQUFFLGlCQUFpQjtxQkFDeEI7b0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUNWLEVBQ0QsQ0FBQyxHQUFVLEVBQUUsRUFBRTtnQkFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNSLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQztZQUNILENBQUMsQ0FDRixDQUFDO1lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBcUI7UUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxLQUFLLE1BQU0sUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7Z0JBQzdCLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDekIsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7YUFDbkQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsYUFBYTtJQUNiLHNCQUFzQjtRQUNwQixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQztDQUNGIn0=
@@ -1,6 +1,12 @@
1
- import * as path from 'path';
2
- import * as stream from 'stream';
3
- export { path, stream };
1
+ import * as path from 'node:path';
2
+ import * as stream from 'node:stream';
3
+ import * as fs from 'node:fs';
4
+ import * as fsPromises from 'node:fs/promises';
5
+ export { path, stream, fs, fsPromises };
6
+ /**
7
+ * List files in a directory recursively, returning relative paths
8
+ */
9
+ export declare function listFileTree(dirPath: string, _pattern?: string): Promise<string[]>;
4
10
  import * as smartfile from '@push.rocks/smartfile';
5
11
  import * as smartdelay from '@push.rocks/smartdelay';
6
12
  import * as smartpath from '@push.rocks/smartpath';
@@ -1,7 +1,30 @@
1
1
  // node native scope
2
- import * as path from 'path';
3
- import * as stream from 'stream';
4
- export { path, stream };
2
+ import * as path from 'node:path';
3
+ import * as stream from 'node:stream';
4
+ import * as fs from 'node:fs';
5
+ import * as fsPromises from 'node:fs/promises';
6
+ export { path, stream, fs, fsPromises };
7
+ /**
8
+ * List files in a directory recursively, returning relative paths
9
+ */
10
+ export async function listFileTree(dirPath, _pattern = '**/*') {
11
+ const results = [];
12
+ async function walkDir(currentPath, relativePath = '') {
13
+ const entries = await fsPromises.readdir(currentPath, { withFileTypes: true });
14
+ for (const entry of entries) {
15
+ const entryRelPath = relativePath ? path.join(relativePath, entry.name) : entry.name;
16
+ const entryFullPath = path.join(currentPath, entry.name);
17
+ if (entry.isDirectory()) {
18
+ await walkDir(entryFullPath, entryRelPath);
19
+ }
20
+ else if (entry.isFile()) {
21
+ results.push(entryRelPath);
22
+ }
23
+ }
24
+ }
25
+ await walkDir(dirPath);
26
+ return results;
27
+ }
5
28
  // @pushrocks scope
6
29
  import * as smartfile from '@push.rocks/smartfile';
7
30
  import * as smartdelay from '@push.rocks/smartdelay';
@@ -18,4 +41,4 @@ import * as fileType from 'file-type';
18
41
  import * as fflate from 'fflate';
19
42
  import tarStream from 'tar-stream';
20
43
  export { fileType, fflate, tarStream };
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFFeEIsbUJBQW1CO0FBQ25CLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxXQUFXLEVBQ1gsT0FBTyxFQUNQLFFBQVEsR0FDVCxDQUFDO0FBRUYsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUVuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyJ9
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsT0FBZSxFQUFFLFdBQW1CLE1BQU07SUFDM0UsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLEtBQUssVUFBVSxPQUFPLENBQUMsV0FBbUIsRUFBRSxlQUF1QixFQUFFO1FBQ25FLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3JGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV6RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUN4QixNQUFNLE9BQU8sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxtQkFBbUI7QUFDbkIsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxFQUNYLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxHQUNULENBQUM7QUFFRixvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@push.rocks/smartarchive",
3
- "version": "4.2.2",
3
+ "version": "4.2.4",
4
4
  "description": "A library for working with archive files, providing utilities for compressing and decompressing data.",
5
5
  "main": "dist_ts/index.js",
6
6
  "typings": "dist_ts/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  "homepage": "https://code.foss.global/push.rocks/smartarchive#readme",
18
18
  "dependencies": {
19
19
  "@push.rocks/smartdelay": "^3.0.5",
20
- "@push.rocks/smartfile": "^11.2.7",
20
+ "@push.rocks/smartfile": "^13.0.0",
21
21
  "@push.rocks/smartpath": "^6.0.0",
22
22
  "@push.rocks/smartpromise": "^4.2.3",
23
23
  "@push.rocks/smartrequest": "^4.2.2",
@@ -28,13 +28,12 @@
28
28
  "@types/tar-stream": "^3.1.4",
29
29
  "fflate": "^0.8.2",
30
30
  "file-type": "^21.0.0",
31
- "tar-stream": "^3.1.7",
32
- "through": "^2.3.8"
31
+ "tar-stream": "^3.1.7"
33
32
  },
34
33
  "devDependencies": {
35
- "@git.zone/tsbuild": "^2.6.6",
36
- "@git.zone/tsrun": "^1.3.3",
37
- "@git.zone/tstest": "^2.3.4"
34
+ "@git.zone/tsbuild": "^3.1.0",
35
+ "@git.zone/tsrun": "^2.0.0",
36
+ "@git.zone/tstest": "^3.1.3"
38
37
  },
39
38
  "private": false,
40
39
  "files": [
package/readme.hints.md CHANGED
@@ -1 +1,38 @@
1
-
1
+ # Smartarchive Development Hints
2
+
3
+ ## Dependency Upgrades (2025-01-25)
4
+
5
+ ### Completed Upgrades
6
+ - **@git.zone/tsbuild**: ^2.6.6 → ^3.1.0
7
+ - **@git.zone/tsrun**: ^1.3.3 → ^2.0.0
8
+ - **@git.zone/tstest**: ^2.3.4 → ^3.1.3
9
+ - **@push.rocks/smartfile**: ^11.2.7 → ^13.0.0
10
+
11
+ ### Migration Notes
12
+
13
+ #### Smartfile v13 Migration
14
+ Smartfile v13 removed filesystem operations (`fs`, `memory`, `fsStream` namespaces). These were replaced with Node.js native `fs` and `fs/promises`:
15
+
16
+ **Replacements made:**
17
+ - `smartfile.fs.ensureDir(path)` → `fsPromises.mkdir(path, { recursive: true })`
18
+ - `smartfile.fs.stat(path)` → `fsPromises.stat(path)`
19
+ - `smartfile.fs.toReadStream(path)` → `fs.createReadStream(path)`
20
+ - `smartfile.fs.toStringSync(path)` → `fsPromises.readFile(path, 'utf8')`
21
+ - `smartfile.fs.listFileTree(dir, pattern)` → custom `listFileTree()` helper
22
+ - `smartfile.fsStream.createReadStream(path)` → `fs.createReadStream(path)`
23
+ - `smartfile.fsStream.createWriteStream(path)` → `fs.createWriteStream(path)`
24
+ - `smartfile.memory.toFs(content, path)` → `fsPromises.writeFile(path, content)`
25
+
26
+ **Still using from smartfile v13:**
27
+ - `SmartFile` class (in-memory file representation)
28
+ - `StreamFile` class (streaming file handling)
29
+
30
+ ### Removed Dependencies
31
+ - `through@2.3.8` - was unused in the codebase
32
+
33
+ ## Architecture Notes
34
+
35
+ - Uses `fflate` for ZIP/GZIP compression (pure JS, works in browser)
36
+ - Uses `tar-stream` for TAR archive handling
37
+ - Uses `file-type` for MIME type detection
38
+ - Custom BZIP2 implementation in `ts/bzip2/` directory
package/readme.md CHANGED
@@ -1,29 +1,32 @@
1
1
  # @push.rocks/smartarchive 📦
2
2
 
3
- **Powerful archive manipulation for modern Node.js applications**
3
+ Powerful archive manipulation for modern Node.js applications.
4
4
 
5
5
  `@push.rocks/smartarchive` is a versatile library for handling archive files with a focus on developer experience. Work with **zip**, **tar**, **gzip**, and **bzip2** formats through a unified, streaming-optimized API.
6
6
 
7
+ ## Issue Reporting and Security
8
+
9
+ For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.
10
+
7
11
  ## Features 🚀
8
12
 
9
- - 📁 **Multi-format support** - Handle `.zip`, `.tar`, `.tar.gz`, `.tgz`, and `.bz2` archives
10
- - 🌊 **Streaming-first architecture** - Process large archives without memory constraints
11
- - 🔄 **Unified API** - Consistent interface across different archive formats
12
- - 🎯 **Smart detection** - Automatically identifies archive types
13
- - ⚡ **High performance** - Optimized for speed with parallel processing where possible
14
- - 🔧 **Flexible I/O** - Work with files, URLs, and streams seamlessly
15
- - 📊 **Archive analysis** - Inspect contents without extraction
16
- - 🛠️ **Modern TypeScript** - Full type safety and excellent IDE support
13
+ - 📁 **Multi-format support** Handle `.zip`, `.tar`, `.tar.gz`, `.tgz`, and `.bz2` archives
14
+ - 🌊 **Streaming-first architecture** Process large archives without memory constraints
15
+ - 🔄 **Unified API** Consistent interface across different archive formats
16
+ - 🎯 **Smart detection** Automatically identifies archive types via magic bytes
17
+ - ⚡ **High performance** Built on `tar-stream` and `fflate` for speed
18
+ - 🔧 **Flexible I/O** Work with files, URLs, and streams seamlessly
19
+ - 🛠️ **Modern TypeScript** Full type safety and excellent IDE support
17
20
 
18
21
  ## Installation 📥
19
22
 
20
23
  ```bash
21
- # Using npm
22
- npm install @push.rocks/smartarchive
23
-
24
24
  # Using pnpm (recommended)
25
25
  pnpm add @push.rocks/smartarchive
26
26
 
27
+ # Using npm
28
+ npm install @push.rocks/smartarchive
29
+
27
30
  # Using yarn
28
31
  yarn add @push.rocks/smartarchive
29
32
  ```
@@ -37,7 +40,7 @@ import { SmartArchive } from '@push.rocks/smartarchive';
37
40
 
38
41
  // Extract a .tar.gz archive from a URL directly to the filesystem
39
42
  const archive = await SmartArchive.fromArchiveUrl(
40
- 'https://github.com/some/repo/archive/main.tar.gz'
43
+ 'https://registry.npmjs.org/some-package/-/some-package-1.0.0.tgz'
41
44
  );
42
45
  await archive.exportToFs('./extracted');
43
46
  ```
@@ -52,10 +55,15 @@ const archive = await SmartArchive.fromArchiveFile('./large-archive.zip');
52
55
  const streamOfFiles = await archive.exportToStreamOfStreamFiles();
53
56
 
54
57
  // Process each file in the archive
55
- streamOfFiles.on('data', (fileStream) => {
56
- console.log(`Processing ${fileStream.path}`);
58
+ streamOfFiles.on('data', async (streamFile) => {
59
+ console.log(`Processing ${streamFile.relativeFilePath}`);
60
+ const readStream = await streamFile.createReadStream();
57
61
  // Handle individual file stream
58
62
  });
63
+
64
+ streamOfFiles.on('end', () => {
65
+ console.log('Extraction complete');
66
+ });
59
67
  ```
60
68
 
61
69
  ## Core Concepts 💡
@@ -64,17 +72,18 @@ streamOfFiles.on('data', (fileStream) => {
64
72
 
65
73
  `SmartArchive` accepts archives from three sources:
66
74
 
67
- 1. **URL** - Download and process archives from the web
68
- 2. **File** - Load archives from the local filesystem
69
- 3. **Stream** - Process archives from any Node.js stream
75
+ | Source | Method | Use Case |
76
+ |--------|--------|----------|
77
+ | **URL** | `SmartArchive.fromArchiveUrl(url)` | Download and process archives from the web |
78
+ | **File** | `SmartArchive.fromArchiveFile(path)` | Load archives from the local filesystem |
79
+ | **Stream** | `SmartArchive.fromArchiveStream(stream)` | Process archives from any Node.js stream |
70
80
 
71
81
  ### Export Destinations
72
82
 
73
- Extract archives to multiple destinations:
74
-
75
- 1. **Filesystem** - Extract directly to a directory
76
- 2. **Stream of files** - Process files individually as streams
77
- 3. **Archive stream** - Re-stream as different format
83
+ | Destination | Method | Use Case |
84
+ |-------------|--------|----------|
85
+ | **Filesystem** | `exportToFs(targetDir, fileName?)` | Extract directly to a directory |
86
+ | **Stream of files** | `exportToStreamOfStreamFiles()` | Process files individually as `StreamFile` objects |
78
87
 
79
88
  ## Usage Examples 🔨
80
89
 
@@ -89,10 +98,11 @@ await zipArchive.exportToFs('./output');
89
98
 
90
99
  // Stream ZIP contents for processing
91
100
  const fileStream = await zipArchive.exportToStreamOfStreamFiles();
92
- fileStream.on('data', (file) => {
93
- if (file.path.endsWith('.json')) {
101
+
102
+ fileStream.on('data', async (streamFile) => {
103
+ if (streamFile.relativeFilePath.endsWith('.json')) {
104
+ const readStream = await streamFile.createReadStream();
94
105
  // Process JSON files from the archive
95
- file.pipe(jsonProcessor);
96
106
  }
97
107
  });
98
108
  ```
@@ -106,58 +116,75 @@ import { SmartArchive, TarTools } from '@push.rocks/smartarchive';
106
116
  const tarGzArchive = await SmartArchive.fromArchiveFile('./archive.tar.gz');
107
117
  await tarGzArchive.exportToFs('./extracted');
108
118
 
109
- // Create a TAR archive (using TarTools directly)
119
+ // Create a TAR archive using TarTools directly
110
120
  const tarTools = new TarTools();
111
- const packStream = await tarTools.packDirectory('./source-directory');
112
- packStream.pipe(createWriteStream('./output.tar'));
121
+ const pack = await tarTools.getPackStream();
122
+
123
+ // Add files to the pack
124
+ await tarTools.addFileToPack(pack, {
125
+ fileName: 'hello.txt',
126
+ content: 'Hello, World!'
127
+ });
128
+
129
+ await tarTools.addFileToPack(pack, {
130
+ fileName: 'data.json',
131
+ content: Buffer.from(JSON.stringify({ foo: 'bar' }))
132
+ });
133
+
134
+ // Finalize and pipe to destination
135
+ pack.finalize();
136
+ pack.pipe(createWriteStream('./output.tar'));
113
137
  ```
114
138
 
115
- ### Extracting from URLs
139
+ ### Pack a directory into TAR
116
140
 
117
141
  ```typescript
118
- import { SmartArchive } from '@push.rocks/smartarchive';
119
-
120
- // Download and extract in one operation
121
- const remoteArchive = await SmartArchive.fromArchiveUrl(
122
- 'https://example.com/data.tar.gz'
123
- );
142
+ import { TarTools } from '@push.rocks/smartarchive';
143
+ import { createWriteStream } from 'fs';
124
144
 
125
- // Extract to filesystem
126
- await remoteArchive.exportToFs('./local-dir');
145
+ const tarTools = new TarTools();
127
146
 
128
- // Or process as stream
129
- const stream = await remoteArchive.exportToStreamOfStreamFiles();
147
+ // Pack an entire directory
148
+ const pack = await tarTools.packDirectory('./src');
149
+ pack.finalize();
150
+ pack.pipe(createWriteStream('./source.tar'));
130
151
  ```
131
152
 
132
- ### Analyzing archive contents
153
+ ### Extracting from URLs
133
154
 
134
155
  ```typescript
135
156
  import { SmartArchive } from '@push.rocks/smartarchive';
136
157
 
137
- // Analyze without extracting
138
- const archive = await SmartArchive.fromArchiveFile('./archive.zip');
139
- const analyzer = archive.archiveAnalyzer;
158
+ // Download and extract npm packages
159
+ const npmPackage = await SmartArchive.fromArchiveUrl(
160
+ 'https://registry.npmjs.org/@push.rocks/smartfile/-/smartfile-11.2.7.tgz'
161
+ );
162
+ await npmPackage.exportToFs('./node_modules/@push.rocks/smartfile');
140
163
 
141
- // Use the analyzer to inspect contents
142
- // (exact implementation depends on analyzer methods)
164
+ // Or process as stream for memory efficiency
165
+ const stream = await npmPackage.exportToStreamOfStreamFiles();
166
+ stream.on('data', async (file) => {
167
+ console.log(`Extracted: ${file.relativeFilePath}`);
168
+ });
143
169
  ```
144
170
 
145
171
  ### Working with GZIP files
146
172
 
147
173
  ```typescript
148
174
  import { SmartArchive, GzipTools } from '@push.rocks/smartarchive';
175
+ import { createReadStream, createWriteStream } from 'fs';
149
176
 
150
- // Decompress a .gz file
177
+ // Decompress a .gz file - provide filename since gzip doesn't store it
151
178
  const gzipArchive = await SmartArchive.fromArchiveFile('./data.json.gz');
152
179
  await gzipArchive.exportToFs('./decompressed', 'data.json');
153
180
 
154
- // Use GzipTools directly for streaming
181
+ // Use GzipTools directly for streaming decompression
155
182
  const gzipTools = new GzipTools();
156
183
  const decompressStream = gzipTools.getDecompressionStream();
157
184
 
158
185
  createReadStream('./compressed.gz')
159
186
  .pipe(decompressStream)
160
- .pipe(createWriteStream('./decompressed'));
187
+ .pipe(createWriteStream('./decompressed.txt'));
161
188
  ```
162
189
 
163
190
  ### Working with BZIP2 files
@@ -172,115 +199,175 @@ const bzipArchive = await SmartArchive.fromArchiveUrl(
172
199
  await bzipArchive.exportToFs('./extracted', 'data.txt');
173
200
  ```
174
201
 
175
- ### Advanced streaming operations
202
+ ### In-memory processing (no filesystem)
176
203
 
177
204
  ```typescript
178
205
  import { SmartArchive } from '@push.rocks/smartarchive';
179
- import { pipeline } from 'stream/promises';
206
+ import { Readable } from 'stream';
180
207
 
181
- // Chain operations with streams
182
- const archive = await SmartArchive.fromArchiveFile('./archive.tar.gz');
183
- const exportStream = await archive.exportToStreamOfStreamFiles();
208
+ // Process archives entirely in memory
209
+ const compressedBuffer = await fetchCompressedData();
210
+ const memoryStream = Readable.from(compressedBuffer);
184
211
 
185
- // Process each file in the archive
186
- await pipeline(
187
- exportStream,
188
- async function* (source) {
189
- for await (const file of source) {
190
- if (file.path.endsWith('.log')) {
191
- // Process log files
192
- yield processLogFile(file);
193
- }
194
- }
195
- },
196
- createWriteStream('./processed-logs.txt')
197
- );
212
+ const archive = await SmartArchive.fromArchiveStream(memoryStream);
213
+ const streamFiles = await archive.exportToStreamOfStreamFiles();
214
+
215
+ const extractedFiles: Array<{ name: string; content: Buffer }> = [];
216
+
217
+ streamFiles.on('data', async (streamFile) => {
218
+ const chunks: Buffer[] = [];
219
+ const readStream = await streamFile.createReadStream();
220
+
221
+ for await (const chunk of readStream) {
222
+ chunks.push(chunk);
223
+ }
224
+
225
+ extractedFiles.push({
226
+ name: streamFile.relativeFilePath,
227
+ content: Buffer.concat(chunks)
228
+ });
229
+ });
230
+
231
+ await new Promise((resolve) => streamFiles.on('end', resolve));
232
+ console.log(`Extracted ${extractedFiles.length} files in memory`);
198
233
  ```
199
234
 
200
- ### Creating archives (advanced)
235
+ ### Nested archive handling (e.g., .tar.gz)
236
+
237
+ The library automatically handles nested compression. A `.tar.gz` file is:
238
+ 1. First decompressed from gzip
239
+ 2. Then unpacked from tar
240
+
241
+ This happens transparently:
201
242
 
202
243
  ```typescript
203
244
  import { SmartArchive } from '@push.rocks/smartarchive';
204
- import { TarTools } from '@push.rocks/smartarchive';
205
245
 
206
- // Using SmartArchive to create an archive
207
- const archive = new SmartArchive();
246
+ // Automatically handles gzip tar extraction chain
247
+ const tgzArchive = await SmartArchive.fromArchiveFile('./package.tar.gz');
248
+ await tgzArchive.exportToFs('./extracted');
249
+ ```
250
+
251
+ ## API Reference 📚
252
+
253
+ ### SmartArchive Class
254
+
255
+ The main entry point for archive operations.
208
256
 
209
- // Add content to the archive
210
- archive.addedDirectories.push('./src');
211
- archive.addedFiles.push('./readme.md');
212
- archive.addedFiles.push('./package.json');
257
+ #### Static Factory Methods
213
258
 
214
- // Export as TAR.GZ
215
- const tarGzStream = await archive.exportToTarGzStream();
216
- tarGzStream.pipe(createWriteStream('./output.tar.gz'));
259
+ ```typescript
260
+ // Create from URL - downloads and processes archive
261
+ SmartArchive.fromArchiveUrl(url: string): Promise<SmartArchive>
262
+
263
+ // Create from local file path
264
+ SmartArchive.fromArchiveFile(path: string): Promise<SmartArchive>
265
+
266
+ // Create from any Node.js readable stream
267
+ SmartArchive.fromArchiveStream(stream: Readable | Duplex | Transform): Promise<SmartArchive>
217
268
  ```
218
269
 
219
- ### Extract and transform
270
+ #### Instance Methods
220
271
 
221
272
  ```typescript
222
- import { SmartArchive } from '@push.rocks/smartarchive';
223
- import { Transform } from 'stream';
273
+ // Extract all files to a directory
274
+ // fileName is optional - used for single-file archives (like .gz) that don't store filename
275
+ exportToFs(targetDir: string, fileName?: string): Promise<void>
224
276
 
225
- // Extract and transform files in one pipeline
226
- const archive = await SmartArchive.fromArchiveUrl(
227
- 'https://example.com/source-code.tar.gz'
228
- );
277
+ // Get a stream that emits StreamFile objects for each file in the archive
278
+ exportToStreamOfStreamFiles(): Promise<StreamIntake<StreamFile>>
229
279
 
230
- const extractStream = await archive.exportToStreamOfStreamFiles();
280
+ // Get the raw archive stream (useful for piping)
281
+ getArchiveStream(): Promise<Readable>
282
+ ```
231
283
 
232
- // Transform TypeScript to JavaScript during extraction
233
- extractStream.on('data', (fileStream) => {
234
- if (fileStream.path.endsWith('.ts')) {
235
- fileStream
236
- .pipe(typescriptTranspiler())
237
- .pipe(createWriteStream(fileStream.path.replace('.ts', '.js')));
238
- } else {
239
- fileStream.pipe(createWriteStream(fileStream.path));
240
- }
284
+ #### Instance Properties
285
+
286
+ ```typescript
287
+ archive.tarTools // TarTools instance for TAR-specific operations
288
+ archive.zipTools // ZipTools instance for ZIP-specific operations
289
+ archive.gzipTools // GzipTools instance for GZIP-specific operations
290
+ archive.bzip2Tools // Bzip2Tools instance for BZIP2-specific operations
291
+ archive.archiveAnalyzer // ArchiveAnalyzer for inspecting archive type
292
+ ```
293
+
294
+ ### TarTools Class
295
+
296
+ TAR-specific operations for creating and extracting TAR archives.
297
+
298
+ ```typescript
299
+ import { TarTools } from '@push.rocks/smartarchive';
300
+
301
+ const tarTools = new TarTools();
302
+
303
+ // Get a tar pack stream for creating archives
304
+ const pack = await tarTools.getPackStream();
305
+
306
+ // Add files to a pack stream
307
+ await tarTools.addFileToPack(pack, {
308
+ fileName: 'file.txt', // Name in archive
309
+ content: 'Hello World', // String, Buffer, Readable, SmartFile, or StreamFile
310
+ byteLength?: number, // Optional: specify size for streams
311
+ filePath?: string // Optional: path to file on disk
241
312
  });
313
+
314
+ // Pack an entire directory
315
+ const pack = await tarTools.packDirectory('./src');
316
+
317
+ // Get extraction stream
318
+ const extract = tarTools.getDecompressionStream();
242
319
  ```
243
320
 
244
- ## API Reference 📚
321
+ ### ZipTools Class
245
322
 
246
- ### SmartArchive Class
323
+ ZIP-specific operations.
247
324
 
248
- #### Static Methods
325
+ ```typescript
326
+ import { ZipTools } from '@push.rocks/smartarchive';
249
327
 
250
- - `SmartArchive.fromArchiveUrl(url: string)` - Create from URL
251
- - `SmartArchive.fromArchiveFile(path: string)` - Create from file
252
- - `SmartArchive.fromArchiveStream(stream: NodeJS.ReadableStream)` - Create from stream
328
+ const zipTools = new ZipTools();
253
329
 
254
- #### Instance Methods
330
+ // Get compression stream (for creating ZIP)
331
+ const compressor = zipTools.getCompressionStream();
332
+
333
+ // Get decompression stream (for extracting ZIP)
334
+ const decompressor = zipTools.getDecompressionStream();
335
+ ```
336
+
337
+ ### GzipTools Class
255
338
 
256
- - `exportToFs(targetDir: string, fileName?: string)` - Extract to filesystem
257
- - `exportToStreamOfStreamFiles()` - Get a stream of file streams
258
- - `exportToTarGzStream()` - Export as TAR.GZ stream
259
- - `getArchiveStream()` - Get the raw archive stream
339
+ GZIP compression/decompression streams.
260
340
 
261
- #### Properties
341
+ ```typescript
342
+ import { GzipTools } from '@push.rocks/smartarchive';
343
+
344
+ const gzipTools = new GzipTools();
262
345
 
263
- - `archiveAnalyzer` - Analyze archive contents
264
- - `tarTools` - TAR-specific operations
265
- - `zipTools` - ZIP-specific operations
266
- - `gzipTools` - GZIP-specific operations
267
- - `bzip2Tools` - BZIP2-specific operations
346
+ // Get compression stream
347
+ const compressor = gzipTools.getCompressionStream();
268
348
 
269
- ### Specialized Tools
349
+ // Get decompression stream
350
+ const decompressor = gzipTools.getDecompressionStream();
351
+ ```
270
352
 
271
- Each tool class provides format-specific operations:
353
+ ## Supported Formats 📋
272
354
 
273
- - **TarTools** - Pack/unpack TAR archives
274
- - **ZipTools** - Handle ZIP compression
275
- - **GzipTools** - GZIP compression/decompression
276
- - **Bzip2Tools** - BZIP2 operations
355
+ | Format | Extension(s) | Extract | Create |
356
+ |--------|--------------|---------|--------|
357
+ | TAR | `.tar` | ✅ | ✅ |
358
+ | TAR.GZ / TGZ | `.tar.gz`, `.tgz` | ✅ | ⚠️ |
359
+ | ZIP | `.zip` | ✅ | ⚠️ |
360
+ | GZIP | `.gz` | ✅ | ✅ |
361
+ | BZIP2 | `.bz2` | ✅ | ❌ |
362
+
363
+ ✅ Full support | ⚠️ Partial/basic support | ❌ Not supported
277
364
 
278
365
  ## Performance Tips 🏎️
279
366
 
280
- 1. **Use streaming for large files** - Avoid loading entire archives into memory
281
- 2. **Process files in parallel** - Utilize stream operations for concurrent processing
282
- 3. **Choose the right format** - TAR.GZ for Unix systems, ZIP for cross-platform compatibility
283
- 4. **Enable compression wisely** - Balance between file size and CPU usage
367
+ 1. **Use streaming for large files** Avoid loading entire archives into memory with `exportToStreamOfStreamFiles()`
368
+ 2. **Provide byte lengths when known** When adding streams to TAR, provide `byteLength` for better performance
369
+ 3. **Process files as they stream** Don't collect all files into an array unless necessary
370
+ 4. **Choose the right format** TAR.GZ for Unix/compression, ZIP for cross-platform compatibility
284
371
 
285
372
  ## Error Handling 🛡️
286
373
 
@@ -295,6 +382,8 @@ try {
295
382
  console.error('Archive file not found');
296
383
  } else if (error.code === 'EACCES') {
297
384
  console.error('Permission denied');
385
+ } else if (error.message.includes('fetch')) {
386
+ console.error('Network error downloading archive');
298
387
  } else {
299
388
  console.error('Archive extraction failed:', error.message);
300
389
  }
@@ -303,35 +392,57 @@ try {
303
392
 
304
393
  ## Real-World Use Cases 🌍
305
394
 
306
- ### Backup System
307
- ```typescript
308
- // Automated backup extraction
309
- const backup = await SmartArchive.fromArchiveFile('./backup.tar.gz');
310
- await backup.exportToFs('/restore/location');
311
- ```
395
+ ### CI/CD: Download & Extract Build Artifacts
312
396
 
313
- ### CI/CD Pipeline
314
397
  ```typescript
315
- // Download and extract build artifacts
316
398
  const artifacts = await SmartArchive.fromArchiveUrl(
317
399
  `${CI_SERVER}/artifacts/build-${BUILD_ID}.zip`
318
400
  );
319
401
  await artifacts.exportToFs('./dist');
320
402
  ```
321
403
 
322
- ### Data Processing
404
+ ### Backup System: Restore from Archive
405
+
406
+ ```typescript
407
+ const backup = await SmartArchive.fromArchiveFile('./backup-2024.tar.gz');
408
+ await backup.exportToFs('/restore/location');
409
+ ```
410
+
411
+ ### NPM Package Inspection
412
+
413
+ ```typescript
414
+ const pkg = await SmartArchive.fromArchiveUrl(
415
+ 'https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz'
416
+ );
417
+ const files = await pkg.exportToStreamOfStreamFiles();
418
+
419
+ files.on('data', async (file) => {
420
+ if (file.relativeFilePath.includes('package.json')) {
421
+ const stream = await file.createReadStream();
422
+ // Read and analyze package.json
423
+ }
424
+ });
425
+ ```
426
+
427
+ ### Data Pipeline: Process Compressed Datasets
428
+
323
429
  ```typescript
324
- // Process compressed datasets
325
430
  const dataset = await SmartArchive.fromArchiveUrl(
326
- 'https://data.source/dataset.tar.bz2'
431
+ 'https://data.source/dataset.tar.gz'
327
432
  );
433
+
328
434
  const files = await dataset.exportToStreamOfStreamFiles();
329
- // Process each file in the dataset
435
+ files.on('data', async (file) => {
436
+ if (file.relativeFilePath.endsWith('.csv')) {
437
+ const stream = await file.createReadStream();
438
+ // Stream CSV processing
439
+ }
440
+ });
330
441
  ```
331
442
 
332
443
  ## License and Legal Information
333
444
 
334
- This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository.
445
+ This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository.
335
446
 
336
447
  **Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
337
448
 
@@ -341,9 +452,9 @@ This project is owned and maintained by Task Venture Capital GmbH. The names and
341
452
 
342
453
  ### Company Information
343
454
 
344
- Task Venture Capital GmbH
455
+ Task Venture Capital GmbH
345
456
  Registered at District court Bremen HRB 35230 HB, Germany
346
457
 
347
458
  For any legal inquiries or if you require further information, please contact us via email at hello@task.vc.
348
459
 
349
- By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
460
+ By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartarchive',
6
- version: '4.2.2',
6
+ version: '4.2.4',
7
7
  description: 'A library for working with archive files, providing utilities for compressing and decompressing data.'
8
8
  }
@@ -83,7 +83,7 @@ export class SmartArchive {
83
83
  return urlStream;
84
84
  }
85
85
  if (this.sourceFilePath) {
86
- const fileStream = plugins.smartfile.fs.toReadStream(this.sourceFilePath);
86
+ const fileStream = plugins.fs.createReadStream(this.sourceFilePath);
87
87
  return fileStream;
88
88
  }
89
89
  }
@@ -116,14 +116,13 @@ export class SmartArchive {
116
116
  );
117
117
  const streamFile = streamFileArg;
118
118
  const readStream = await streamFile.createReadStream();
119
- await plugins.smartfile.fs.ensureDir(targetDir);
119
+ await plugins.fsPromises.mkdir(targetDir, { recursive: true });
120
120
  const writePath = plugins.path.join(
121
121
  targetDir,
122
122
  streamFile.relativeFilePath || fileNameArg,
123
123
  );
124
- await plugins.smartfile.fs.ensureDir(plugins.path.dirname(writePath));
125
- const writeStream =
126
- plugins.smartfile.fsStream.createWriteStream(writePath);
124
+ await plugins.fsPromises.mkdir(plugins.path.dirname(writePath), { recursive: true });
125
+ const writeStream = plugins.fs.createWriteStream(writePath);
127
126
  readStream.pipe(writeStream);
128
127
  writeStream.on('finish', () => {
129
128
  done.resolve();
@@ -55,7 +55,7 @@ export class TarTools {
55
55
  '@push.rocks/smartarchive: When streaming, it is recommended to provide byteLength, if known.',
56
56
  );
57
57
  } else if (optionsArg.filePath) {
58
- const fileStat = await plugins.smartfile.fs.stat(optionsArg.filePath);
58
+ const fileStat = await plugins.fsPromises.stat(optionsArg.filePath);
59
59
  contentByteLength = fileStat.size;
60
60
  }
61
61
 
@@ -109,19 +109,16 @@ export class TarTools {
109
109
  * @param directoryPath
110
110
  */
111
111
  public async packDirectory(directoryPath: string) {
112
- const fileTree = await plugins.smartfile.fs.listFileTree(
113
- directoryPath,
114
- '**/*',
115
- );
112
+ const fileTree = await plugins.listFileTree(directoryPath, '**/*');
116
113
  const pack = await this.getPackStream();
117
114
  for (const filePath of fileTree) {
118
115
  const absolutePath = plugins.path.join(directoryPath, filePath);
119
- const fileStat = await plugins.smartfile.fs.stat(absolutePath);
116
+ const fileStat = await plugins.fsPromises.stat(absolutePath);
120
117
  await this.addFileToPack(pack, {
121
118
  byteLength: fileStat.size,
122
119
  filePath: absolutePath,
123
120
  fileName: filePath,
124
- content: plugins.smartfile.fsStream.createReadStream(absolutePath),
121
+ content: plugins.fs.createReadStream(absolutePath),
125
122
  });
126
123
  }
127
124
  return pack;
package/ts/plugins.ts CHANGED
@@ -1,8 +1,34 @@
1
1
  // node native scope
2
- import * as path from 'path';
3
- import * as stream from 'stream';
2
+ import * as path from 'node:path';
3
+ import * as stream from 'node:stream';
4
+ import * as fs from 'node:fs';
5
+ import * as fsPromises from 'node:fs/promises';
4
6
 
5
- export { path, stream };
7
+ export { path, stream, fs, fsPromises };
8
+
9
+ /**
10
+ * List files in a directory recursively, returning relative paths
11
+ */
12
+ export async function listFileTree(dirPath: string, _pattern: string = '**/*'): Promise<string[]> {
13
+ const results: string[] = [];
14
+
15
+ async function walkDir(currentPath: string, relativePath: string = '') {
16
+ const entries = await fsPromises.readdir(currentPath, { withFileTypes: true });
17
+ for (const entry of entries) {
18
+ const entryRelPath = relativePath ? path.join(relativePath, entry.name) : entry.name;
19
+ const entryFullPath = path.join(currentPath, entry.name);
20
+
21
+ if (entry.isDirectory()) {
22
+ await walkDir(entryFullPath, entryRelPath);
23
+ } else if (entry.isFile()) {
24
+ results.push(entryRelPath);
25
+ }
26
+ }
27
+ }
28
+
29
+ await walkDir(dirPath);
30
+ return results;
31
+ }
6
32
 
7
33
  // @pushrocks scope
8
34
  import * as smartfile from '@push.rocks/smartfile';