@push.rocks/smartarchive 4.0.2 → 4.0.5
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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.archiveanalyzer.js +7 -3
- package/dist_ts/classes.smartarchive.d.ts +1 -1
- package/dist_ts/classes.smartarchive.js +14 -10
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.archiveanalyzer.ts +6 -2
- package/ts/classes.smartarchive.ts +15 -11
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartarchive',
|
|
6
|
-
version: '4.0.
|
|
6
|
+
version: '4.0.5',
|
|
7
7
|
description: 'work with archives'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLG9CQUFvQjtDQUNsQyxDQUFBIn0=
|
|
@@ -35,13 +35,13 @@ export class ArchiveAnalyzer {
|
|
|
35
35
|
readableObjectMode: true,
|
|
36
36
|
writeAndTransformFunction: async (chunkArg, streamtools) => {
|
|
37
37
|
const fileType = await plugins.fileType.fileTypeFromBuffer(chunkArg);
|
|
38
|
-
const decompressionStream = this.getDecompressionStream(fileType
|
|
38
|
+
const decompressionStream = this.getDecompressionStream(fileType?.mime);
|
|
39
39
|
resultStream.push(chunkArg);
|
|
40
40
|
if (firstRun) {
|
|
41
41
|
firstRun = false;
|
|
42
42
|
const result = {
|
|
43
43
|
fileType,
|
|
44
|
-
isArchive: await this.mimeTypeIsArchive(fileType
|
|
44
|
+
isArchive: await this.mimeTypeIsArchive(fileType?.mime),
|
|
45
45
|
resultStream,
|
|
46
46
|
decompressionStream,
|
|
47
47
|
};
|
|
@@ -50,8 +50,12 @@ export class ArchiveAnalyzer {
|
|
|
50
50
|
return null;
|
|
51
51
|
}
|
|
52
52
|
},
|
|
53
|
+
finalFunction: async (tools) => {
|
|
54
|
+
resultStream.push(null);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
53
57
|
});
|
|
54
58
|
return analyzerstream;
|
|
55
59
|
}
|
|
56
60
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hcmNoaXZlYW5hbHl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmFyY2hpdmVhbmFseXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQVN4QyxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUFZLGtCQUFnQztRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0lBQzVDLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBZ0I7UUFDOUMsTUFBTSxnQkFBZ0IsR0FBZ0IsSUFBSSxHQUFHLENBQUM7WUFDNUMsaUJBQWlCO1lBQ2pCLDhCQUE4QjtZQUM5QixtQkFBbUI7WUFDbkIsa0JBQWtCO1lBQ2xCLDZCQUE2QjtZQUM3QixxQkFBcUI7WUFDckIsb0NBQW9DO1NBQ3JDLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFHTyxzQkFBc0IsQ0FDNUIsV0FBb0Q7UUFFcEQsUUFBUSxXQUFXLEVBQUU7WUFDbkIsS0FBSyxrQkFBa0I7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNqRSxLQUFLLHFCQUFxQjtnQkFDeEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsbURBQW1EO1lBQ3RILEtBQUssbUJBQW1CO2dCQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxpREFBaUQ7WUFDbEg7Z0JBQ0Usd0RBQXdEO2dCQUN4RCxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzRCxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUEwQjtZQUNsRixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLHlCQUF5QixFQUFFLEtBQUssRUFBRSxRQUFnQixFQUFFLFdBQVcsRUFBRSxFQUFFO2dCQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxJQUFXLENBQUMsQ0FBQztnQkFDL0UsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxRQUFRLEVBQUU7b0JBQ1osUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDakIsTUFBTSxNQUFNLEdBQW9CO3dCQUM5QixRQUFRO3dCQUNSLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO3dCQUN2RCxZQUFZO3dCQUNaLG1CQUFtQjtxQkFDcEIsQ0FBQztvQkFDRixXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QixPQUFPLElBQUksQ0FBQztpQkFDYjtZQUNILENBQUM7WUFDRCxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
|
|
@@ -26,6 +26,6 @@ export declare class SmartArchive {
|
|
|
26
26
|
*/
|
|
27
27
|
getArchiveStream(): Promise<plugins.stream.Readable | plugins.stream.Duplex>;
|
|
28
28
|
exportToTarGzStream(): Promise<void>;
|
|
29
|
-
exportToFs(targetDir: string): Promise<void>;
|
|
29
|
+
exportToFs(targetDir: string, fileNameArg?: string): Promise<void>;
|
|
30
30
|
exportToStreamOfStreamFiles(): Promise<plugins.smartstream.StreamIntake<plugins.smartfile.StreamFile>>;
|
|
31
31
|
}
|
|
@@ -54,7 +54,7 @@ export class SmartArchive {
|
|
|
54
54
|
// const archiveStream = tarPackStream.pipe(gzipStream);
|
|
55
55
|
// return archiveStream;
|
|
56
56
|
}
|
|
57
|
-
async exportToFs(targetDir) {
|
|
57
|
+
async exportToFs(targetDir, fileNameArg) {
|
|
58
58
|
const done = plugins.smartpromise.defer();
|
|
59
59
|
const streamFileStream = await this.exportToStreamOfStreamFiles();
|
|
60
60
|
streamFileStream.pipe(new plugins.smartstream.SmartDuplex({
|
|
@@ -63,14 +63,15 @@ export class SmartArchive {
|
|
|
63
63
|
console.log(chunkArg.relativeFilePath);
|
|
64
64
|
const streamFile = chunkArg;
|
|
65
65
|
const readStream = await streamFile.createReadStream();
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
await plugins.smartfile.fs.ensureDir(plugins.path.dirname(
|
|
66
|
+
await plugins.smartfile.fs.ensureDir(targetDir);
|
|
67
|
+
const writePath = plugins.path.join(targetDir, (streamFile.relativeFilePath || fileNameArg));
|
|
68
|
+
await plugins.smartfile.fs.ensureDir(plugins.path.dirname(writePath));
|
|
69
69
|
const writeStream = plugins.smartfile.fsStream.createWriteStream(writePath);
|
|
70
|
-
readStream.pipe(writeStream)
|
|
71
|
-
done.resolve();
|
|
72
|
-
});
|
|
70
|
+
readStream.pipe(writeStream);
|
|
73
71
|
},
|
|
72
|
+
finalFunction: async () => {
|
|
73
|
+
done.resolve();
|
|
74
|
+
}
|
|
74
75
|
}));
|
|
75
76
|
return done.promise;
|
|
76
77
|
}
|
|
@@ -82,7 +83,7 @@ export class SmartArchive {
|
|
|
82
83
|
const createAnalyzedStream = () => this.archiveAnalyzer.getAnalyzedStream();
|
|
83
84
|
// lets create a function that can be called multiple times to unpack layers of archives
|
|
84
85
|
const createUnpackStream = () => plugins.smartstream.createTransformFunction(async (analyzedResultChunk) => {
|
|
85
|
-
if (analyzedResultChunk.fileType
|
|
86
|
+
if (analyzedResultChunk.fileType?.mime === 'application/x-tar') {
|
|
86
87
|
const tarStream = analyzedResultChunk.decompressionStream;
|
|
87
88
|
tarStream.on('entry', async (header, stream, next) => {
|
|
88
89
|
const streamfile = plugins.smartfile.StreamFile.fromStream(stream, header.name);
|
|
@@ -90,8 +91,10 @@ export class SmartArchive {
|
|
|
90
91
|
stream.on('end', function () {
|
|
91
92
|
next(); // ready for next entry
|
|
92
93
|
});
|
|
94
|
+
stream.resume(); // just auto drain the stream
|
|
93
95
|
});
|
|
94
96
|
tarStream.on('finish', function () {
|
|
97
|
+
console.log('finished');
|
|
95
98
|
streamFileIntake.signalEnd();
|
|
96
99
|
});
|
|
97
100
|
analyzedResultChunk.resultStream.pipe(analyzedResultChunk.decompressionStream);
|
|
@@ -103,12 +106,13 @@ export class SmartArchive {
|
|
|
103
106
|
.pipe(createUnpackStream());
|
|
104
107
|
}
|
|
105
108
|
else {
|
|
106
|
-
const streamFile = plugins.smartfile.StreamFile.fromStream(analyzedResultChunk.resultStream, analyzedResultChunk.fileType
|
|
109
|
+
const streamFile = plugins.smartfile.StreamFile.fromStream(analyzedResultChunk.resultStream, analyzedResultChunk.fileType?.ext);
|
|
107
110
|
streamFileIntake.push(streamFile);
|
|
111
|
+
streamFileIntake.signalEnd();
|
|
108
112
|
}
|
|
109
113
|
});
|
|
110
114
|
archiveStream.pipe(createAnalyzedStream()).pipe(createUnpackStream());
|
|
111
115
|
return streamFileIntake;
|
|
112
116
|
}
|
|
113
117
|
}
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zbWFydGFyY2hpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnNtYXJ0YXJjaGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUF3QixNQUFNLDhCQUE4QixDQUFDO0FBSXJGLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFNBQVM7SUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFjO1FBQy9DLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3hDLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQW1CO1FBQ3JELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO1FBQ2xELE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQ25DLFNBQXFGO1FBRXJGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlDLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQW1CRDtRQWpCQSxXQUFXO1FBQ0osYUFB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartarchive",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.5",
|
|
4
4
|
"description": "work with archives",
|
|
5
5
|
"main": "dist_ts/index.js",
|
|
6
6
|
"typings": "dist_ts/index.d.ts",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@push.rocks/smartpromise": "^4.0.3",
|
|
27
27
|
"@push.rocks/smartrequest": "^2.0.20",
|
|
28
28
|
"@push.rocks/smartrx": "^3.0.7",
|
|
29
|
-
"@push.rocks/smartstream": "^3.0.
|
|
29
|
+
"@push.rocks/smartstream": "^3.0.11",
|
|
30
30
|
"@push.rocks/smartunique": "^3.0.6",
|
|
31
31
|
"@push.rocks/smarturl": "^3.0.7",
|
|
32
32
|
"@types/tar-stream": "^3.1.2",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -53,13 +53,13 @@ export class ArchiveAnalyzer {
|
|
|
53
53
|
readableObjectMode: true,
|
|
54
54
|
writeAndTransformFunction: async (chunkArg: Buffer, streamtools) => {
|
|
55
55
|
const fileType = await plugins.fileType.fileTypeFromBuffer(chunkArg);
|
|
56
|
-
const decompressionStream = this.getDecompressionStream(fileType
|
|
56
|
+
const decompressionStream = this.getDecompressionStream(fileType?.mime as any);
|
|
57
57
|
resultStream.push(chunkArg);
|
|
58
58
|
if (firstRun) {
|
|
59
59
|
firstRun = false;
|
|
60
60
|
const result: IAnalyzedResult = {
|
|
61
61
|
fileType,
|
|
62
|
-
isArchive: await this.mimeTypeIsArchive(fileType
|
|
62
|
+
isArchive: await this.mimeTypeIsArchive(fileType?.mime),
|
|
63
63
|
resultStream,
|
|
64
64
|
decompressionStream,
|
|
65
65
|
};
|
|
@@ -68,6 +68,10 @@ export class ArchiveAnalyzer {
|
|
|
68
68
|
return null;
|
|
69
69
|
}
|
|
70
70
|
},
|
|
71
|
+
finalFunction: async (tools) => {
|
|
72
|
+
resultStream.push(null);
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
71
75
|
});
|
|
72
76
|
return analyzerstream;
|
|
73
77
|
}
|
|
@@ -74,7 +74,7 @@ export class SmartArchive {
|
|
|
74
74
|
// return archiveStream;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
public async exportToFs(targetDir: string): Promise<void> {
|
|
77
|
+
public async exportToFs(targetDir: string, fileNameArg?: string): Promise<void> {
|
|
78
78
|
const done = plugins.smartpromise.defer<void>();
|
|
79
79
|
const streamFileStream = await this.exportToStreamOfStreamFiles();
|
|
80
80
|
streamFileStream.pipe(new plugins.smartstream.SmartDuplex({
|
|
@@ -83,14 +83,15 @@ export class SmartArchive {
|
|
|
83
83
|
console.log(chunkArg.relativeFilePath);
|
|
84
84
|
const streamFile = chunkArg;
|
|
85
85
|
const readStream = await streamFile.createReadStream();
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
await plugins.smartfile.fs.ensureDir(plugins.path.dirname(
|
|
86
|
+
await plugins.smartfile.fs.ensureDir(targetDir);
|
|
87
|
+
const writePath = plugins.path.join(targetDir, (streamFile.relativeFilePath || fileNameArg));
|
|
88
|
+
await plugins.smartfile.fs.ensureDir(plugins.path.dirname(writePath));
|
|
89
89
|
const writeStream = plugins.smartfile.fsStream.createWriteStream(writePath);
|
|
90
|
-
readStream.pipe(writeStream)
|
|
91
|
-
done.resolve();
|
|
92
|
-
});
|
|
90
|
+
readStream.pipe(writeStream);
|
|
93
91
|
},
|
|
92
|
+
finalFunction: async () => {
|
|
93
|
+
done.resolve();
|
|
94
|
+
}
|
|
94
95
|
}));
|
|
95
96
|
return done.promise;
|
|
96
97
|
}
|
|
@@ -106,7 +107,7 @@ export class SmartArchive {
|
|
|
106
107
|
const createUnpackStream = () =>
|
|
107
108
|
plugins.smartstream.createTransformFunction<IAnalyzedResult, any>(
|
|
108
109
|
async (analyzedResultChunk) => {
|
|
109
|
-
if (analyzedResultChunk.fileType
|
|
110
|
+
if (analyzedResultChunk.fileType?.mime === 'application/x-tar') {
|
|
110
111
|
const tarStream = analyzedResultChunk.decompressionStream as plugins.tarStream.Extract;
|
|
111
112
|
tarStream.on(
|
|
112
113
|
'entry',
|
|
@@ -116,11 +117,13 @@ export class SmartArchive {
|
|
|
116
117
|
stream.on('end', function () {
|
|
117
118
|
next(); // ready for next entry
|
|
118
119
|
});
|
|
120
|
+
stream.resume(); // just auto drain the stream
|
|
119
121
|
}
|
|
120
122
|
);
|
|
121
123
|
tarStream.on('finish', function () {
|
|
124
|
+
console.log('finished');
|
|
122
125
|
streamFileIntake.signalEnd();
|
|
123
|
-
})
|
|
126
|
+
});
|
|
124
127
|
analyzedResultChunk.resultStream.pipe(analyzedResultChunk.decompressionStream);
|
|
125
128
|
} else if (analyzedResultChunk.isArchive && analyzedResultChunk.decompressionStream) {
|
|
126
129
|
analyzedResultChunk.resultStream
|
|
@@ -130,11 +133,12 @@ export class SmartArchive {
|
|
|
130
133
|
} else {
|
|
131
134
|
const streamFile = plugins.smartfile.StreamFile.fromStream(
|
|
132
135
|
analyzedResultChunk.resultStream,
|
|
133
|
-
analyzedResultChunk.fileType
|
|
136
|
+
analyzedResultChunk.fileType?.ext
|
|
134
137
|
);
|
|
135
138
|
streamFileIntake.push(streamFile);
|
|
139
|
+
streamFileIntake.signalEnd();
|
|
136
140
|
}
|
|
137
|
-
}
|
|
141
|
+
},
|
|
138
142
|
);
|
|
139
143
|
|
|
140
144
|
archiveStream.pipe(createAnalyzedStream()).pipe(createUnpackStream());
|