@push.rocks/smartarchive 4.0.14 → 4.0.18
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/bzip2/index.js +12 -5
- package/dist_ts/classes.archiveanalyzer.d.ts +1 -1
- package/dist_ts/classes.archiveanalyzer.js +8 -9
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/bzip2/index.ts +11 -5
- package/ts/classes.archiveanalyzer.ts +8 -9
|
@@ -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.18',
|
|
7
7
|
description: 'work with archives'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLG9CQUFvQjtDQUNsQyxDQUFBIn0=
|
package/dist_ts/bzip2/index.js
CHANGED
|
@@ -47,12 +47,16 @@ export function unbzip2Stream() {
|
|
|
47
47
|
catch (e) {
|
|
48
48
|
console.error(e);
|
|
49
49
|
broken = true;
|
|
50
|
-
return false;
|
|
51
50
|
}
|
|
52
51
|
};
|
|
52
|
+
let counter = 0;
|
|
53
53
|
return new plugins.smartstream.SmartDuplex({
|
|
54
|
+
objectMode: true,
|
|
55
|
+
name: 'bzip2',
|
|
56
|
+
debug: false,
|
|
57
|
+
highWaterMark: 1,
|
|
54
58
|
writeFunction: async function (data, streamTools) {
|
|
55
|
-
//console.
|
|
59
|
+
// console.log(`got chunk ${counter++}`)
|
|
56
60
|
bufferQueue.push(data);
|
|
57
61
|
hasBytes += data.length;
|
|
58
62
|
if (bitReader === null) {
|
|
@@ -63,6 +67,10 @@ export function unbzip2Stream() {
|
|
|
63
67
|
while (!broken && hasBytes - bitReader.bytesRead + 1 >= (25000 + 100000 * blockSize || 4)) {
|
|
64
68
|
//console.error('decompressing with', hasBytes - bitReader.bytesRead + 1, 'bytes in buffer');
|
|
65
69
|
const result = await decompressAndPush();
|
|
70
|
+
if (!result) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
// console.log(result.toString());
|
|
66
74
|
await streamTools.push(result);
|
|
67
75
|
}
|
|
68
76
|
},
|
|
@@ -70,14 +78,13 @@ export function unbzip2Stream() {
|
|
|
70
78
|
//console.error(x,'last compressing with', hasBytes, 'bytes in buffer');
|
|
71
79
|
while (!broken && bitReader && hasBytes > bitReader.bytesRead) {
|
|
72
80
|
const result = await decompressAndPush();
|
|
73
|
-
streamTools.push(result);
|
|
81
|
+
await streamTools.push(result);
|
|
74
82
|
}
|
|
75
83
|
if (!broken) {
|
|
76
84
|
if (streamCRC !== null)
|
|
77
85
|
this.emit('error', new Error('input stream ended prematurely'));
|
|
78
|
-
this.queue(null);
|
|
79
86
|
}
|
|
80
87
|
},
|
|
81
88
|
});
|
|
82
89
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9iemlwMi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFNLFVBQVUsYUFBYTtJQUMzQixNQUFNLGFBQWEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNyQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztJQUVyQixTQUFTLGVBQWU7UUFDdEIsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLFNBQVMsR0FBRyxDQUFDLENBQUM7U0FDZjthQUFNO1lBQ0wsSUFBSSxPQUFPLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNqQyxJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVsQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7Z0JBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUFDO1lBRUYsU0FBUyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxH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
|
|
@@ -5,7 +5,7 @@ import * as plugins from './plugins.js';
|
|
|
5
5
|
export interface IAnalyzedResult {
|
|
6
6
|
fileType: plugins.fileType.FileTypeResult;
|
|
7
7
|
isArchive: boolean;
|
|
8
|
-
resultStream: plugins.smartstream.
|
|
8
|
+
resultStream: plugins.smartstream.SmartDuplex;
|
|
9
9
|
decompressionStream: plugins.stream.Transform | plugins.stream.Duplex | plugins.tarStream.Extract;
|
|
10
10
|
}
|
|
11
11
|
export declare class ArchiveAnalyzer {
|
|
@@ -25,30 +25,29 @@ export class ArchiveAnalyzer {
|
|
|
25
25
|
return this.smartArchiveRef.tarTools.getDecompressionStream(); // replace with your own tar decompression stream
|
|
26
26
|
default:
|
|
27
27
|
// Handle unsupported formats or no decompression needed
|
|
28
|
-
return
|
|
28
|
+
return plugins.smartstream.createPassThrough();
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
getAnalyzedStream() {
|
|
32
32
|
let firstRun = true;
|
|
33
|
-
const resultStream =
|
|
33
|
+
const resultStream = plugins.smartstream.createPassThrough();
|
|
34
34
|
const analyzerstream = new plugins.smartstream.SmartDuplex({
|
|
35
35
|
readableObjectMode: true,
|
|
36
36
|
writeFunction: async (chunkArg, streamtools) => {
|
|
37
|
-
const fileType = await plugins.fileType.fileTypeFromBuffer(chunkArg);
|
|
38
|
-
const decompressionStream = await this.getDecompressionStream(fileType?.mime);
|
|
39
|
-
resultStream.push(chunkArg);
|
|
40
37
|
if (firstRun) {
|
|
41
38
|
firstRun = false;
|
|
39
|
+
const fileType = await plugins.fileType.fileTypeFromBuffer(chunkArg);
|
|
40
|
+
const decompressionStream = await this.getDecompressionStream(fileType?.mime);
|
|
42
41
|
const result = {
|
|
43
42
|
fileType,
|
|
44
43
|
isArchive: await this.mimeTypeIsArchive(fileType?.mime),
|
|
45
44
|
resultStream,
|
|
46
45
|
decompressionStream,
|
|
47
46
|
};
|
|
48
|
-
streamtools.push(result);
|
|
49
|
-
streamtools.push(null);
|
|
50
|
-
return null;
|
|
47
|
+
await streamtools.push(result);
|
|
51
48
|
}
|
|
49
|
+
await resultStream.backpressuredPush(chunkArg);
|
|
50
|
+
return null;
|
|
52
51
|
},
|
|
53
52
|
finalFunction: async (tools) => {
|
|
54
53
|
resultStream.push(null);
|
|
@@ -58,4 +57,4 @@ export class ArchiveAnalyzer {
|
|
|
58
57
|
return analyzerstream;
|
|
59
58
|
}
|
|
60
59
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hcmNoaXZlYW5hbHl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmFyY2hpdmVhbmFseXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQVN4QyxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUFZLGtCQUFnQztRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0lBQzVDLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBZ0I7UUFDOUMsTUFBTSxnQkFBZ0IsR0FBZ0IsSUFBSSxHQUFHLENBQUM7WUFDNUMsaUJBQWlCO1lBQ2pCLDhCQUE4QjtZQUM5QixtQkFBbUI7WUFDbkIsa0JBQWtCO1lBQ2xCLDZCQUE2QjtZQUM3QixxQkFBcUI7WUFDckIsb0NBQW9DO1NBQ3JDLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFHTyxLQUFLLENBQUMsc0JBQXNCLENBQ2xDLFdBQW9EO1FBRXBELFFBQVEsV0FBVyxFQUFFO1lBQ25CLEtBQUssa0JBQWtCO2dCQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDakUsS0FBSyxxQkFBcUI7Z0JBQ3hCLE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsbURBQW1EO1lBQzVILEtBQUssbUJBQW1CO2dCQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxpREFBaUQ7WUFDbEg7Z0JBQ0Usd0RBQXdEO2dCQUN4RCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3RCxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUEwQjtZQUNsRixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBZ0IsRUFBRSxXQUFXLEVBQUUsRUFBRTtnQkFDckQsSUFBSSxRQUFRLEVBQUU7b0JBQ1osUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDakIsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNyRSxNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxJQUFXLENBQUMsQ0FBQztvQkFDckYsTUFBTSxNQUFNLEdBQW9CO3dCQUM5QixRQUFRO3dCQUNSLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO3dCQUN2RCxZQUFZO3dCQUNaLG1CQUFtQjtxQkFDcEIsQ0FBQztvQkFDRixNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ2hDO2dCQUNELE1BQU0sWUFBWSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartarchive",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.18",
|
|
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.21",
|
|
28
28
|
"@push.rocks/smartrx": "^3.0.7",
|
|
29
|
-
"@push.rocks/smartstream": "^3.0.
|
|
29
|
+
"@push.rocks/smartstream": "^3.0.30",
|
|
30
30
|
"@push.rocks/smartunique": "^3.0.6",
|
|
31
31
|
"@push.rocks/smarturl": "^3.0.7",
|
|
32
32
|
"@types/tar-stream": "^3.1.3",
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/bzip2/index.ts
CHANGED
|
@@ -49,13 +49,16 @@ export function unbzip2Stream() {
|
|
|
49
49
|
} catch (e) {
|
|
50
50
|
console.error(e);
|
|
51
51
|
broken = true;
|
|
52
|
-
return false;
|
|
53
52
|
}
|
|
54
53
|
};
|
|
55
|
-
|
|
54
|
+
let counter = 0;
|
|
56
55
|
return new plugins.smartstream.SmartDuplex({
|
|
56
|
+
objectMode: true,
|
|
57
|
+
name: 'bzip2',
|
|
58
|
+
debug: false,
|
|
59
|
+
highWaterMark: 1,
|
|
57
60
|
writeFunction: async function (data, streamTools) {
|
|
58
|
-
//console.
|
|
61
|
+
// console.log(`got chunk ${counter++}`)
|
|
59
62
|
bufferQueue.push(data);
|
|
60
63
|
hasBytes += data.length;
|
|
61
64
|
if (bitReader === null) {
|
|
@@ -66,6 +69,10 @@ export function unbzip2Stream() {
|
|
|
66
69
|
while (!broken && hasBytes - bitReader.bytesRead + 1 >= (25000 + 100000 * blockSize || 4)) {
|
|
67
70
|
//console.error('decompressing with', hasBytes - bitReader.bytesRead + 1, 'bytes in buffer');
|
|
68
71
|
const result = await decompressAndPush();
|
|
72
|
+
if (!result) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
// console.log(result.toString());
|
|
69
76
|
await streamTools.push(result);
|
|
70
77
|
}
|
|
71
78
|
},
|
|
@@ -73,11 +80,10 @@ export function unbzip2Stream() {
|
|
|
73
80
|
//console.error(x,'last compressing with', hasBytes, 'bytes in buffer');
|
|
74
81
|
while (!broken && bitReader && hasBytes > bitReader.bytesRead) {
|
|
75
82
|
const result = await decompressAndPush();
|
|
76
|
-
streamTools.push(result);
|
|
83
|
+
await streamTools.push(result);
|
|
77
84
|
}
|
|
78
85
|
if (!broken) {
|
|
79
86
|
if (streamCRC !== null) this.emit('error', new Error('input stream ended prematurely'));
|
|
80
|
-
this.queue(null);
|
|
81
87
|
}
|
|
82
88
|
},
|
|
83
89
|
});
|
|
@@ -4,7 +4,7 @@ import * as plugins from './plugins.js';
|
|
|
4
4
|
export interface IAnalyzedResult {
|
|
5
5
|
fileType: plugins.fileType.FileTypeResult;
|
|
6
6
|
isArchive: boolean;
|
|
7
|
-
resultStream: plugins.smartstream.
|
|
7
|
+
resultStream: plugins.smartstream.SmartDuplex;
|
|
8
8
|
decompressionStream: plugins.stream.Transform | plugins.stream.Duplex | plugins.tarStream.Extract;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -42,31 +42,30 @@ export class ArchiveAnalyzer {
|
|
|
42
42
|
return this.smartArchiveRef.tarTools.getDecompressionStream(); // replace with your own tar decompression stream
|
|
43
43
|
default:
|
|
44
44
|
// Handle unsupported formats or no decompression needed
|
|
45
|
-
return
|
|
45
|
+
return plugins.smartstream.createPassThrough();
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
public getAnalyzedStream() {
|
|
50
50
|
let firstRun = true;
|
|
51
|
-
const resultStream =
|
|
51
|
+
const resultStream = plugins.smartstream.createPassThrough();
|
|
52
52
|
const analyzerstream = new plugins.smartstream.SmartDuplex<Buffer, IAnalyzedResult>({
|
|
53
53
|
readableObjectMode: true,
|
|
54
54
|
writeFunction: async (chunkArg: Buffer, streamtools) => {
|
|
55
|
-
const fileType = await plugins.fileType.fileTypeFromBuffer(chunkArg);
|
|
56
|
-
const decompressionStream = await this.getDecompressionStream(fileType?.mime as any);
|
|
57
|
-
resultStream.push(chunkArg);
|
|
58
55
|
if (firstRun) {
|
|
59
56
|
firstRun = false;
|
|
57
|
+
const fileType = await plugins.fileType.fileTypeFromBuffer(chunkArg);
|
|
58
|
+
const decompressionStream = await this.getDecompressionStream(fileType?.mime as any);
|
|
60
59
|
const result: IAnalyzedResult = {
|
|
61
60
|
fileType,
|
|
62
61
|
isArchive: await this.mimeTypeIsArchive(fileType?.mime),
|
|
63
62
|
resultStream,
|
|
64
63
|
decompressionStream,
|
|
65
64
|
};
|
|
66
|
-
streamtools.push(result);
|
|
67
|
-
streamtools.push(null);
|
|
68
|
-
return null;
|
|
65
|
+
await streamtools.push(result);
|
|
69
66
|
}
|
|
67
|
+
await resultStream.backpressuredPush(chunkArg);
|
|
68
|
+
return null;
|
|
70
69
|
},
|
|
71
70
|
finalFunction: async (tools) => {
|
|
72
71
|
resultStream.push(null);
|