@push.rocks/smartarchive 4.2.3 → 5.0.0
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/bititerator.d.ts +6 -1
- package/dist_ts/bzip2/bititerator.js +30 -24
- package/dist_ts/bzip2/bzip2.d.ts +27 -12
- package/dist_ts/bzip2/bzip2.js +325 -263
- package/dist_ts/bzip2/index.d.ts +4 -1
- package/dist_ts/bzip2/index.js +36 -38
- package/dist_ts/classes.archiveanalyzer.d.ts +25 -5
- package/dist_ts/classes.archiveanalyzer.js +19 -8
- package/dist_ts/classes.bzip2tools.d.ts +1 -1
- package/dist_ts/classes.gziptools.d.ts +39 -6
- package/dist_ts/classes.gziptools.js +85 -24
- package/dist_ts/classes.smartarchive.d.ts +101 -16
- package/dist_ts/classes.smartarchive.js +398 -61
- package/dist_ts/classes.tartools.d.ts +31 -4
- package/dist_ts/classes.tartools.js +97 -36
- package/dist_ts/classes.ziptools.d.ts +47 -12
- package/dist_ts/classes.ziptools.js +142 -23
- package/dist_ts/errors.d.ts +44 -0
- package/dist_ts/errors.js +62 -0
- package/dist_ts/index.d.ts +4 -0
- package/dist_ts/index.js +9 -1
- package/dist_ts/interfaces.d.ts +115 -0
- package/dist_ts/interfaces.js +2 -0
- package/dist_ts/plugins.d.ts +9 -3
- package/dist_ts/plugins.js +27 -4
- package/package.json +3 -4
- package/readme.hints.md +38 -1
- package/readme.md +248 -137
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/bzip2/bititerator.ts +43 -27
- package/ts/bzip2/bzip2.ts +289 -171
- package/ts/bzip2/index.ts +52 -50
- package/ts/classes.archiveanalyzer.ts +42 -28
- package/ts/classes.gziptools.ts +96 -33
- package/ts/classes.smartarchive.ts +472 -122
- package/ts/classes.tartools.ts +128 -59
- package/ts/classes.ziptools.ts +160 -34
- package/ts/errors.ts +70 -0
- package/ts/index.ts +11 -0
- package/ts/interfaces.ts +131 -0
- package/ts/plugins.ts +29 -3
package/dist_ts/bzip2/index.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import * as plugins from '../plugins.js';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Creates a streaming BZIP2 decompression transform
|
|
4
|
+
*/
|
|
5
|
+
export declare function unbzip2Stream(): plugins.smartstream.SmartDuplex<Buffer, Buffer>;
|
package/dist_ts/bzip2/index.js
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
import * as plugins from '../plugins.js';
|
|
2
|
+
import { Bzip2Error, BZIP2_ERROR_CODES } from '../errors.js';
|
|
2
3
|
import { Bzip2 } from './bzip2.js';
|
|
3
4
|
import { bitIterator } from './bititerator.js';
|
|
5
|
+
/**
|
|
6
|
+
* Creates a streaming BZIP2 decompression transform
|
|
7
|
+
*/
|
|
4
8
|
export function unbzip2Stream() {
|
|
5
9
|
const bzip2Instance = new Bzip2();
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var streamCRC = null;
|
|
10
|
+
const bufferQueue = [];
|
|
11
|
+
let hasBytes = 0;
|
|
12
|
+
let blockSize = 0;
|
|
13
|
+
let broken = false;
|
|
14
|
+
let bitReader = null;
|
|
15
|
+
let streamCRC = null;
|
|
13
16
|
function decompressBlock() {
|
|
14
17
|
if (!blockSize) {
|
|
15
18
|
blockSize = bzip2Instance.header(bitReader);
|
|
16
19
|
streamCRC = 0;
|
|
20
|
+
return undefined;
|
|
17
21
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
return Buffer.from(chunk);
|
|
33
|
-
}
|
|
22
|
+
const bufsize = 100000 * blockSize;
|
|
23
|
+
const buf = new Int32Array(bufsize);
|
|
24
|
+
const chunk = [];
|
|
25
|
+
const outputFunc = (b) => {
|
|
26
|
+
chunk.push(b);
|
|
27
|
+
};
|
|
28
|
+
streamCRC = bzip2Instance.decompress(bitReader, outputFunc, buf, bufsize, streamCRC);
|
|
29
|
+
if (streamCRC === null) {
|
|
30
|
+
// Reset for next bzip2 header
|
|
31
|
+
blockSize = 0;
|
|
32
|
+
return undefined;
|
|
34
33
|
}
|
|
34
|
+
return Buffer.from(chunk);
|
|
35
35
|
}
|
|
36
|
-
|
|
36
|
+
let outlength = 0;
|
|
37
37
|
const decompressAndPush = async () => {
|
|
38
38
|
if (broken)
|
|
39
|
-
return;
|
|
39
|
+
return undefined;
|
|
40
40
|
try {
|
|
41
41
|
const resultChunk = decompressBlock();
|
|
42
42
|
if (resultChunk) {
|
|
@@ -45,18 +45,18 @@ export function unbzip2Stream() {
|
|
|
45
45
|
return resultChunk;
|
|
46
46
|
}
|
|
47
47
|
catch (e) {
|
|
48
|
-
console.error(e);
|
|
49
48
|
broken = true;
|
|
49
|
+
if (e instanceof Error) {
|
|
50
|
+
throw new Bzip2Error(`Decompression failed: ${e.message}`, BZIP2_ERROR_CODES.INVALID_BLOCK_DATA);
|
|
51
|
+
}
|
|
52
|
+
throw e;
|
|
50
53
|
}
|
|
51
54
|
};
|
|
52
|
-
let counter = 0;
|
|
53
55
|
return new plugins.smartstream.SmartDuplex({
|
|
54
56
|
objectMode: true,
|
|
55
57
|
name: 'bzip2',
|
|
56
|
-
debug: false,
|
|
57
58
|
highWaterMark: 1,
|
|
58
59
|
writeFunction: async function (data, streamTools) {
|
|
59
|
-
// console.log(`got chunk ${counter++}`)
|
|
60
60
|
bufferQueue.push(data);
|
|
61
61
|
hasBytes += data.length;
|
|
62
62
|
if (bitReader === null) {
|
|
@@ -64,19 +64,17 @@ export function unbzip2Stream() {
|
|
|
64
64
|
return bufferQueue.shift();
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
//console.error('decompressing with', hasBytes - bitReader.bytesRead + 1, 'bytes in buffer');
|
|
67
|
+
const threshold = 25000 + 100000 * blockSize || 4;
|
|
68
|
+
while (!broken && hasBytes - bitReader.bytesRead + 1 >= threshold) {
|
|
70
69
|
const result = await decompressAndPush();
|
|
71
70
|
if (!result) {
|
|
72
71
|
continue;
|
|
73
72
|
}
|
|
74
|
-
// console.log(result.toString());
|
|
75
73
|
await streamTools.push(result);
|
|
76
74
|
}
|
|
75
|
+
return null;
|
|
77
76
|
},
|
|
78
77
|
finalFunction: async function (streamTools) {
|
|
79
|
-
//console.error(x,'last compressing with', hasBytes, 'bytes in buffer');
|
|
80
78
|
while (!broken && bitReader && hasBytes > bitReader.bytesRead) {
|
|
81
79
|
const result = await decompressAndPush();
|
|
82
80
|
if (!result) {
|
|
@@ -84,11 +82,11 @@ export function unbzip2Stream() {
|
|
|
84
82
|
}
|
|
85
83
|
await streamTools.push(result);
|
|
86
84
|
}
|
|
87
|
-
if (!broken) {
|
|
88
|
-
|
|
89
|
-
this.emit('error', new Error('input stream ended prematurely'));
|
|
85
|
+
if (!broken && streamCRC !== null) {
|
|
86
|
+
this.emit('error', new Bzip2Error('Input stream ended prematurely', BZIP2_ERROR_CODES.PREMATURE_END));
|
|
90
87
|
}
|
|
88
|
+
return null;
|
|
91
89
|
},
|
|
92
90
|
});
|
|
93
91
|
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9iemlwMi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzdELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWE7SUFDM0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7SUFDakMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDbkIsSUFBSSxTQUFTLEdBQXNCLElBQUksQ0FBQztJQUN4QyxJQUFJLFNBQVMsR0FBa0IsSUFBSSxDQUFDO0lBRXBDLFNBQVMsZUFBZTtRQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixTQUFTLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFVLENBQUMsQ0FBQztZQUM3QyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBUyxFQUFRLEVBQUU7WUFDckMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztR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
|
|
@@ -1,15 +1,35 @@
|
|
|
1
1
|
import type { SmartArchive } from './classes.smartarchive.js';
|
|
2
2
|
import * as plugins from './plugins.js';
|
|
3
|
+
/**
|
|
4
|
+
* Type for decompression streams
|
|
5
|
+
*/
|
|
6
|
+
export type TDecompressionStream = plugins.stream.Transform | plugins.stream.Duplex | plugins.tarStream.Extract;
|
|
7
|
+
/**
|
|
8
|
+
* Result of archive analysis
|
|
9
|
+
*/
|
|
3
10
|
export interface IAnalyzedResult {
|
|
4
|
-
fileType: plugins.fileType.FileTypeResult;
|
|
11
|
+
fileType: plugins.fileType.FileTypeResult | undefined;
|
|
5
12
|
isArchive: boolean;
|
|
6
|
-
resultStream: plugins.smartstream.SmartDuplex
|
|
7
|
-
decompressionStream:
|
|
13
|
+
resultStream: plugins.smartstream.SmartDuplex<Buffer, Buffer>;
|
|
14
|
+
decompressionStream: TDecompressionStream;
|
|
8
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Analyzes archive streams to detect format and provide decompression
|
|
18
|
+
*/
|
|
9
19
|
export declare class ArchiveAnalyzer {
|
|
10
|
-
smartArchiveRef
|
|
20
|
+
private smartArchiveRef;
|
|
11
21
|
constructor(smartArchiveRefArg: SmartArchive);
|
|
22
|
+
/**
|
|
23
|
+
* Check if a MIME type represents an archive format
|
|
24
|
+
*/
|
|
12
25
|
private mimeTypeIsArchive;
|
|
26
|
+
/**
|
|
27
|
+
* Get the appropriate decompression stream for a MIME type
|
|
28
|
+
*/
|
|
13
29
|
private getDecompressionStream;
|
|
14
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Create an analyzed stream that detects archive type and provides decompression
|
|
32
|
+
* Emits a single IAnalyzedResult object
|
|
33
|
+
*/
|
|
34
|
+
getAnalyzedStream(): plugins.smartstream.SmartDuplex<Buffer, IAnalyzedResult>;
|
|
15
35
|
}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Analyzes archive streams to detect format and provide decompression
|
|
4
|
+
*/
|
|
2
5
|
export class ArchiveAnalyzer {
|
|
3
6
|
constructor(smartArchiveRefArg) {
|
|
4
7
|
this.smartArchiveRef = smartArchiveRefArg;
|
|
5
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Check if a MIME type represents an archive format
|
|
11
|
+
*/
|
|
6
12
|
async mimeTypeIsArchive(mimeType) {
|
|
13
|
+
if (!mimeType)
|
|
14
|
+
return false;
|
|
7
15
|
const archiveMimeTypes = new Set([
|
|
8
16
|
'application/zip',
|
|
9
17
|
'application/x-rar-compressed',
|
|
@@ -11,10 +19,12 @@ export class ArchiveAnalyzer {
|
|
|
11
19
|
'application/gzip',
|
|
12
20
|
'application/x-7z-compressed',
|
|
13
21
|
'application/x-bzip2',
|
|
14
|
-
// Add other archive mime types here
|
|
15
22
|
]);
|
|
16
23
|
return archiveMimeTypes.has(mimeType);
|
|
17
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the appropriate decompression stream for a MIME type
|
|
27
|
+
*/
|
|
18
28
|
async getDecompressionStream(mimeTypeArg) {
|
|
19
29
|
switch (mimeTypeArg) {
|
|
20
30
|
case 'application/gzip':
|
|
@@ -22,14 +32,18 @@ export class ArchiveAnalyzer {
|
|
|
22
32
|
case 'application/zip':
|
|
23
33
|
return this.smartArchiveRef.zipTools.getDecompressionStream();
|
|
24
34
|
case 'application/x-bzip2':
|
|
25
|
-
return
|
|
35
|
+
return this.smartArchiveRef.bzip2Tools.getDecompressionStream();
|
|
26
36
|
case 'application/x-tar':
|
|
27
|
-
return this.smartArchiveRef.tarTools.getDecompressionStream();
|
|
37
|
+
return this.smartArchiveRef.tarTools.getDecompressionStream();
|
|
28
38
|
default:
|
|
29
39
|
// Handle unsupported formats or no decompression needed
|
|
30
40
|
return plugins.smartstream.createPassThrough();
|
|
31
41
|
}
|
|
32
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Create an analyzed stream that detects archive type and provides decompression
|
|
45
|
+
* Emits a single IAnalyzedResult object
|
|
46
|
+
*/
|
|
33
47
|
getAnalyzedStream() {
|
|
34
48
|
let firstRun = true;
|
|
35
49
|
const resultStream = plugins.smartstream.createPassThrough();
|
|
@@ -40,9 +54,6 @@ export class ArchiveAnalyzer {
|
|
|
40
54
|
firstRun = false;
|
|
41
55
|
const fileType = await plugins.fileType.fileTypeFromBuffer(chunkArg);
|
|
42
56
|
const decompressionStream = await this.getDecompressionStream(fileType?.mime);
|
|
43
|
-
/**
|
|
44
|
-
* analyzed stream emits once with this object
|
|
45
|
-
*/
|
|
46
57
|
const result = {
|
|
47
58
|
fileType,
|
|
48
59
|
isArchive: await this.mimeTypeIsArchive(fileType?.mime),
|
|
@@ -54,7 +65,7 @@ export class ArchiveAnalyzer {
|
|
|
54
65
|
await resultStream.backpressuredPush(chunkArg);
|
|
55
66
|
return null;
|
|
56
67
|
},
|
|
57
|
-
finalFunction: async (
|
|
68
|
+
finalFunction: async () => {
|
|
58
69
|
resultStream.push(null);
|
|
59
70
|
return null;
|
|
60
71
|
},
|
|
@@ -62,4 +73,4 @@ export class ArchiveAnalyzer {
|
|
|
62
73
|
return analyzerstream;
|
|
63
74
|
}
|
|
64
75
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hcmNoaXZlYW5hbHl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmFyY2hpdmVhbmFseXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQW9CeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUFZLGtCQUFnQztRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUE0QjtRQUMxRCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTVCLE1BQU0sZ0JBQWdCLEdBQWdCLElBQUksR0FBRyxDQUFDO1lBQzVDLGlCQUFpQjtZQUNqQiw4QkFBOEI7WUFDOUIsbUJBQW1CO1lBQ25CLGtCQUFrQjtZQUNsQiw2QkFBNkI7WUFDN0IscUJBQXFCO1NBQ3RCLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxXQUEyQjtRQUM5RCxRQUFRLFdBQVcsRUFBRSxDQUFDO1lBQ3BCLEtBQUssa0JBQWtCO2dCQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDakUsS0FBSyxpQkFBaUI7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNoRSxLQUFLLHFCQUFxQjtnQkFDeEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2xFLEtBQUssbUJBQW1CO2dCQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEU7Z0JBQ0Usd0RBQXdEO2dCQUN4RCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQjtRQUN0QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRTdELE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQTBCO1lBQ2xGLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFnQixFQUFFLFdBQVcsRUFBRSxFQUFFO2dCQUNyRCxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNiLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ2pCLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDckUsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsSUFBc0IsQ0FBQyxDQUFDO29CQUVoRyxNQUFNLE1BQU0sR0FBb0I7d0JBQzlCLFFBQVE7d0JBQ1IsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7d0JBQ3ZELFlBQVk7d0JBQ1osbUJBQW1CO3FCQUNwQixDQUFDO29CQUNGLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakMsQ0FBQztnQkFDRCxNQUFNLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsYUFBYSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUN4QixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
|
|
@@ -3,5 +3,5 @@ import * as plugins from './plugins.js';
|
|
|
3
3
|
export declare class Bzip2Tools {
|
|
4
4
|
smartArchiveRef: SmartArchive;
|
|
5
5
|
constructor(smartArchiveRefArg: SmartArchive);
|
|
6
|
-
getDecompressionStream(): plugins.smartstream.SmartDuplex<
|
|
6
|
+
getDecompressionStream(): plugins.smartstream.SmartDuplex<Buffer<ArrayBufferLike>, Buffer<ArrayBufferLike>>;
|
|
7
7
|
}
|
|
@@ -1,16 +1,49 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import type { TCompressionLevel } from './interfaces.js';
|
|
3
|
+
/**
|
|
4
|
+
* Transform stream for GZIP compression using fflate
|
|
5
|
+
*/
|
|
6
|
+
export declare class GzipCompressionTransform extends plugins.stream.Transform {
|
|
7
|
+
private gzip;
|
|
8
|
+
constructor(level?: TCompressionLevel);
|
|
4
9
|
_transform(chunk: Buffer, encoding: BufferEncoding, callback: plugins.stream.TransformCallback): void;
|
|
10
|
+
_flush(callback: plugins.stream.TransformCallback): void;
|
|
5
11
|
}
|
|
6
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Transform stream for GZIP decompression using fflate
|
|
14
|
+
*/
|
|
15
|
+
export declare class GzipDecompressionTransform extends plugins.stream.Transform {
|
|
7
16
|
private gunzip;
|
|
8
17
|
constructor();
|
|
9
18
|
_transform(chunk: Buffer, encoding: BufferEncoding, callback: plugins.stream.TransformCallback): void;
|
|
10
19
|
_flush(callback: plugins.stream.TransformCallback): void;
|
|
11
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* GZIP compression and decompression utilities
|
|
23
|
+
*/
|
|
12
24
|
export declare class GzipTools {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Get a streaming compression transform
|
|
27
|
+
*/
|
|
28
|
+
getCompressionStream(level?: TCompressionLevel): plugins.stream.Transform;
|
|
29
|
+
/**
|
|
30
|
+
* Get a streaming decompression transform
|
|
31
|
+
*/
|
|
32
|
+
getDecompressionStream(): plugins.stream.Transform;
|
|
33
|
+
/**
|
|
34
|
+
* Compress data synchronously
|
|
35
|
+
*/
|
|
36
|
+
compressSync(data: Buffer, level?: TCompressionLevel): Buffer;
|
|
37
|
+
/**
|
|
38
|
+
* Decompress data synchronously
|
|
39
|
+
*/
|
|
40
|
+
decompressSync(data: Buffer): Buffer;
|
|
41
|
+
/**
|
|
42
|
+
* Compress data asynchronously
|
|
43
|
+
*/
|
|
44
|
+
compress(data: Buffer, level?: TCompressionLevel): Promise<Buffer>;
|
|
45
|
+
/**
|
|
46
|
+
* Decompress data asynchronously
|
|
47
|
+
*/
|
|
48
|
+
decompress(data: Buffer): Promise<Buffer>;
|
|
16
49
|
}
|
|
@@ -1,39 +1,53 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Transform stream for GZIP compression using fflate
|
|
4
|
+
*/
|
|
5
|
+
export class GzipCompressionTransform extends plugins.stream.Transform {
|
|
6
|
+
constructor(level = 6) {
|
|
5
7
|
super();
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
if (
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
this.push(decompressed);
|
|
14
|
-
callback();
|
|
8
|
+
// Create a streaming Gzip compressor
|
|
9
|
+
this.gzip = new plugins.fflate.Gzip({ level }, (chunk, final) => {
|
|
10
|
+
this.push(Buffer.from(chunk));
|
|
11
|
+
if (final) {
|
|
12
|
+
this.push(null);
|
|
15
13
|
}
|
|
16
14
|
});
|
|
17
15
|
}
|
|
16
|
+
_transform(chunk, encoding, callback) {
|
|
17
|
+
try {
|
|
18
|
+
this.gzip.push(chunk, false);
|
|
19
|
+
callback();
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
callback(err);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
_flush(callback) {
|
|
26
|
+
try {
|
|
27
|
+
this.gzip.push(new Uint8Array(0), true);
|
|
28
|
+
callback();
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
callback(err);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
18
34
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Transform stream for GZIP decompression using fflate
|
|
37
|
+
*/
|
|
38
|
+
export class GzipDecompressionTransform extends plugins.stream.Transform {
|
|
22
39
|
constructor() {
|
|
23
40
|
super();
|
|
24
41
|
// Create a streaming Gunzip decompressor
|
|
25
42
|
this.gunzip = new plugins.fflate.Gunzip((chunk, final) => {
|
|
26
|
-
// Push decompressed chunks to the output stream
|
|
27
43
|
this.push(Buffer.from(chunk));
|
|
28
44
|
if (final) {
|
|
29
|
-
// Signal end of stream when decompression is complete
|
|
30
45
|
this.push(null);
|
|
31
46
|
}
|
|
32
47
|
});
|
|
33
48
|
}
|
|
34
49
|
_transform(chunk, encoding, callback) {
|
|
35
50
|
try {
|
|
36
|
-
// Feed chunks to the gunzip stream
|
|
37
51
|
this.gunzip.push(chunk, false);
|
|
38
52
|
callback();
|
|
39
53
|
}
|
|
@@ -43,7 +57,6 @@ export class DecompressGunzipTransform extends plugins.stream.Transform {
|
|
|
43
57
|
}
|
|
44
58
|
_flush(callback) {
|
|
45
59
|
try {
|
|
46
|
-
// Signal end of input to gunzip
|
|
47
60
|
this.gunzip.push(new Uint8Array(0), true);
|
|
48
61
|
callback();
|
|
49
62
|
}
|
|
@@ -52,13 +65,61 @@ export class DecompressGunzipTransform extends plugins.stream.Transform {
|
|
|
52
65
|
}
|
|
53
66
|
}
|
|
54
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* GZIP compression and decompression utilities
|
|
70
|
+
*/
|
|
55
71
|
export class GzipTools {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Get a streaming compression transform
|
|
74
|
+
*/
|
|
75
|
+
getCompressionStream(level) {
|
|
76
|
+
return new GzipCompressionTransform(level);
|
|
59
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Get a streaming decompression transform
|
|
80
|
+
*/
|
|
60
81
|
getDecompressionStream() {
|
|
61
|
-
return new
|
|
82
|
+
return new GzipDecompressionTransform();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Compress data synchronously
|
|
86
|
+
*/
|
|
87
|
+
compressSync(data, level) {
|
|
88
|
+
const options = level !== undefined ? { level } : undefined;
|
|
89
|
+
return Buffer.from(plugins.fflate.gzipSync(data, options));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Decompress data synchronously
|
|
93
|
+
*/
|
|
94
|
+
decompressSync(data) {
|
|
95
|
+
return Buffer.from(plugins.fflate.gunzipSync(data));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Compress data asynchronously
|
|
99
|
+
*/
|
|
100
|
+
async compress(data, level) {
|
|
101
|
+
return new Promise((resolve, reject) => {
|
|
102
|
+
const options = level !== undefined ? { level } : undefined;
|
|
103
|
+
plugins.fflate.gzip(data, options, (err, result) => {
|
|
104
|
+
if (err)
|
|
105
|
+
reject(err);
|
|
106
|
+
else
|
|
107
|
+
resolve(Buffer.from(result));
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Decompress data asynchronously
|
|
113
|
+
*/
|
|
114
|
+
async decompress(data) {
|
|
115
|
+
return new Promise((resolve, reject) => {
|
|
116
|
+
plugins.fflate.gunzip(data, (err, result) => {
|
|
117
|
+
if (err)
|
|
118
|
+
reject(err);
|
|
119
|
+
else
|
|
120
|
+
resolve(Buffer.from(result));
|
|
121
|
+
});
|
|
122
|
+
});
|
|
62
123
|
}
|
|
63
124
|
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nemlwdG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmd6aXB0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUd4Qzs7R0FFRztBQUNILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFHcEUsWUFBWSxRQUEyQixDQUFDO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRVIscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUNSLEtBQWEsRUFDYixRQUF3QixFQUN4QixRQUEwQztRQUUxQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0IsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxHQUFZLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUEwQztRQUMvQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMs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QyxHQUFHLENBQUMsQ0FBQzs7b0JBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxHQUFHO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7b0JBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiJ9
|
|
@@ -1,32 +1,117 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
+
import type { IArchiveCreationOptions, IArchiveEntry, IArchiveExtractionOptions, IArchiveEntryInfo, IArchiveInfo } from './interfaces.js';
|
|
2
3
|
import { Bzip2Tools } from './classes.bzip2tools.js';
|
|
3
4
|
import { GzipTools } from './classes.gziptools.js';
|
|
4
5
|
import { TarTools } from './classes.tartools.js';
|
|
5
6
|
import { ZipTools } from './classes.ziptools.js';
|
|
6
7
|
import { ArchiveAnalyzer } from './classes.archiveanalyzer.js';
|
|
8
|
+
/**
|
|
9
|
+
* Main class for archive manipulation
|
|
10
|
+
* Supports TAR, ZIP, GZIP, and BZIP2 formats
|
|
11
|
+
*/
|
|
7
12
|
export declare class SmartArchive {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Create SmartArchive from a URL
|
|
15
|
+
*/
|
|
16
|
+
static fromUrl(urlArg: string): Promise<SmartArchive>;
|
|
17
|
+
/**
|
|
18
|
+
* Create SmartArchive from a local file path
|
|
19
|
+
*/
|
|
20
|
+
static fromFile(filePathArg: string): Promise<SmartArchive>;
|
|
21
|
+
/**
|
|
22
|
+
* Create SmartArchive from a readable stream
|
|
23
|
+
*/
|
|
24
|
+
static fromStream(streamArg: plugins.stream.Readable | plugins.stream.Duplex | plugins.stream.Transform): Promise<SmartArchive>;
|
|
25
|
+
/**
|
|
26
|
+
* Create SmartArchive from an in-memory buffer
|
|
27
|
+
*/
|
|
28
|
+
static fromBuffer(buffer: Buffer): Promise<SmartArchive>;
|
|
29
|
+
/**
|
|
30
|
+
* Create a new archive from a directory
|
|
31
|
+
*/
|
|
32
|
+
static fromDirectory(directoryPath: string, options: IArchiveCreationOptions): Promise<SmartArchive>;
|
|
33
|
+
/**
|
|
34
|
+
* Create a new archive from an array of entries
|
|
35
|
+
*/
|
|
36
|
+
static fromFiles(files: IArchiveEntry[], options: IArchiveCreationOptions): Promise<SmartArchive>;
|
|
37
|
+
/**
|
|
38
|
+
* Start building an archive incrementally using a builder pattern
|
|
39
|
+
*/
|
|
40
|
+
static create(options: IArchiveCreationOptions): SmartArchive;
|
|
41
|
+
/**
|
|
42
|
+
* Helper to convert a stream to buffer
|
|
43
|
+
*/
|
|
44
|
+
private static streamToBuffer;
|
|
11
45
|
tarTools: TarTools;
|
|
12
46
|
zipTools: ZipTools;
|
|
13
47
|
gzipTools: GzipTools;
|
|
14
48
|
bzip2Tools: Bzip2Tools;
|
|
15
49
|
archiveAnalyzer: ArchiveAnalyzer;
|
|
16
|
-
sourceUrl
|
|
17
|
-
sourceFilePath
|
|
18
|
-
sourceStream
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
addedFiles: (plugins.smartfile.SmartFile | plugins.smartfile.StreamFile)[];
|
|
23
|
-
addedUrls: string[];
|
|
50
|
+
sourceUrl?: string;
|
|
51
|
+
sourceFilePath?: string;
|
|
52
|
+
sourceStream?: plugins.stream.Readable | plugins.stream.Duplex | plugins.stream.Transform;
|
|
53
|
+
private archiveBuffer?;
|
|
54
|
+
private creationOptions?;
|
|
55
|
+
private pendingEntries?;
|
|
24
56
|
constructor();
|
|
25
57
|
/**
|
|
26
|
-
*
|
|
58
|
+
* Add a file to the archive (builder pattern)
|
|
59
|
+
*/
|
|
60
|
+
addFile(archivePath: string, content: string | Buffer): this;
|
|
61
|
+
/**
|
|
62
|
+
* Add a SmartFile to the archive (builder pattern)
|
|
63
|
+
*/
|
|
64
|
+
addSmartFile(file: plugins.smartfile.SmartFile, archivePath?: string): this;
|
|
65
|
+
/**
|
|
66
|
+
* Add a StreamFile to the archive (builder pattern)
|
|
67
|
+
*/
|
|
68
|
+
addStreamFile(file: plugins.smartfile.StreamFile, archivePath?: string): this;
|
|
69
|
+
/**
|
|
70
|
+
* Build the archive from pending entries
|
|
71
|
+
*/
|
|
72
|
+
build(): Promise<SmartArchive>;
|
|
73
|
+
/**
|
|
74
|
+
* Get the original archive stream
|
|
75
|
+
*/
|
|
76
|
+
toStream(): Promise<plugins.stream.Readable>;
|
|
77
|
+
/**
|
|
78
|
+
* Get archive as a Buffer
|
|
79
|
+
*/
|
|
80
|
+
toBuffer(): Promise<Buffer>;
|
|
81
|
+
/**
|
|
82
|
+
* Write archive to a file
|
|
83
|
+
*/
|
|
84
|
+
toFile(filePath: string): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Extract archive to filesystem
|
|
87
|
+
*/
|
|
88
|
+
extractToDirectory(targetDir: string, options?: Partial<IArchiveExtractionOptions>): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Extract archive to a stream of StreamFile objects
|
|
91
|
+
*/
|
|
92
|
+
extractToStream(): Promise<plugins.smartstream.StreamIntake<plugins.smartfile.StreamFile>>;
|
|
93
|
+
/**
|
|
94
|
+
* Extract archive to an array of SmartFile objects (in-memory)
|
|
95
|
+
*/
|
|
96
|
+
extractToSmartFiles(): Promise<plugins.smartfile.SmartFile[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Extract a single file from the archive by path
|
|
99
|
+
*/
|
|
100
|
+
extractFile(filePath: string): Promise<plugins.smartfile.SmartFile | null>;
|
|
101
|
+
/**
|
|
102
|
+
* Analyze the archive and return metadata
|
|
103
|
+
*/
|
|
104
|
+
analyze(): Promise<IArchiveInfo>;
|
|
105
|
+
/**
|
|
106
|
+
* List all entries in the archive without extracting
|
|
107
|
+
*/
|
|
108
|
+
listEntries(): Promise<IArchiveEntryInfo[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Check if a specific file exists in the archive
|
|
111
|
+
*/
|
|
112
|
+
hasFile(filePath: string): Promise<boolean>;
|
|
113
|
+
/**
|
|
114
|
+
* Helper to read first chunk from stream
|
|
27
115
|
*/
|
|
28
|
-
|
|
29
|
-
exportToTarGzStream(): Promise<void>;
|
|
30
|
-
exportToFs(targetDir: string, fileNameArg?: string): Promise<void>;
|
|
31
|
-
exportToStreamOfStreamFiles(): Promise<plugins.smartstream.StreamIntake<plugins.smartfile.StreamFile>>;
|
|
116
|
+
private readFirstChunk;
|
|
32
117
|
}
|