@push.rocks/smartarchive 5.1.0 → 5.2.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/classes.smartarchive.js +26 -21
- package/dist_ts/classes.tartools.d.ts +79 -4
- package/dist_ts/classes.tartools.js +201 -15
- package/dist_ts/index.d.ts +1 -1
- package/dist_ts/index.js +2 -2
- package/dist_ts/plugins.d.ts +2 -0
- package/dist_ts/plugins.js +4 -1
- package/dist_ts_shared/bzip2/bititerator.d.ts +6 -0
- package/dist_ts_shared/bzip2/bititerator.js +50 -0
- package/dist_ts_shared/bzip2/bzip2.d.ts +29 -0
- package/dist_ts_shared/bzip2/bzip2.js +398 -0
- package/dist_ts_shared/bzip2/index.d.ts +5 -0
- package/dist_ts_shared/bzip2/index.js +92 -0
- package/dist_ts_shared/classes.bzip2tools.d.ts +10 -0
- package/dist_ts_shared/classes.bzip2tools.js +14 -0
- package/dist_ts_shared/classes.gziptools.d.ts +26 -0
- package/dist_ts_shared/classes.gziptools.js +38 -0
- package/dist_ts_shared/classes.tartools.d.ts +30 -0
- package/dist_ts_shared/classes.tartools.js +78 -0
- package/dist_ts_shared/classes.ziptools.d.ts +31 -0
- package/dist_ts_shared/classes.ziptools.js +103 -0
- package/dist_ts_shared/errors.d.ts +44 -0
- package/dist_ts_shared/errors.js +62 -0
- package/dist_ts_shared/index.d.ts +8 -0
- package/dist_ts_shared/index.js +14 -0
- package/dist_ts_shared/interfaces.d.ts +129 -0
- package/dist_ts_shared/interfaces.js +2 -0
- package/dist_ts_shared/plugins.d.ts +9 -0
- package/dist_ts_shared/plugins.js +14 -0
- package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
- package/dist_ts_web/00_commitinfo_data.js +9 -0
- package/dist_ts_web/index.d.ts +1 -0
- package/dist_ts_web/index.js +4 -0
- package/dist_ts_web/plugins.d.ts +1 -0
- package/dist_ts_web/plugins.js +4 -0
- package/package.json +5 -3
- package/readme.md +154 -46
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.smartarchive.ts +28 -23
- package/ts/classes.tartools.ts +235 -14
- package/ts/index.ts +2 -2
- package/ts/plugins.ts +4 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { TCompressionLevel } from './interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* GZIP compression and decompression utilities (browser-compatible)
|
|
4
|
+
*/
|
|
5
|
+
export declare class GzipTools {
|
|
6
|
+
/**
|
|
7
|
+
* Compress data synchronously
|
|
8
|
+
*/
|
|
9
|
+
compressSync(data: Uint8Array, level?: TCompressionLevel): Uint8Array;
|
|
10
|
+
/**
|
|
11
|
+
* Decompress data synchronously
|
|
12
|
+
*/
|
|
13
|
+
decompressSync(data: Uint8Array): Uint8Array;
|
|
14
|
+
/**
|
|
15
|
+
* Compress data asynchronously
|
|
16
|
+
* Note: Uses sync version for Deno compatibility (fflate async uses Web Workers
|
|
17
|
+
* which have issues in Deno)
|
|
18
|
+
*/
|
|
19
|
+
compress(data: Uint8Array, level?: TCompressionLevel): Promise<Uint8Array>;
|
|
20
|
+
/**
|
|
21
|
+
* Decompress data asynchronously
|
|
22
|
+
* Note: Uses sync version for Deno compatibility (fflate async uses Web Workers
|
|
23
|
+
* which have issues in Deno)
|
|
24
|
+
*/
|
|
25
|
+
decompress(data: Uint8Array): Promise<Uint8Array>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* GZIP compression and decompression utilities (browser-compatible)
|
|
4
|
+
*/
|
|
5
|
+
export class GzipTools {
|
|
6
|
+
/**
|
|
7
|
+
* Compress data synchronously
|
|
8
|
+
*/
|
|
9
|
+
compressSync(data, level) {
|
|
10
|
+
const options = level !== undefined ? { level } : undefined;
|
|
11
|
+
return plugins.fflate.gzipSync(data, options);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Decompress data synchronously
|
|
15
|
+
*/
|
|
16
|
+
decompressSync(data) {
|
|
17
|
+
return plugins.fflate.gunzipSync(data);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Compress data asynchronously
|
|
21
|
+
* Note: Uses sync version for Deno compatibility (fflate async uses Web Workers
|
|
22
|
+
* which have issues in Deno)
|
|
23
|
+
*/
|
|
24
|
+
async compress(data, level) {
|
|
25
|
+
// Use sync version wrapped in Promise for cross-runtime compatibility
|
|
26
|
+
return this.compressSync(data, level);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Decompress data asynchronously
|
|
30
|
+
* Note: Uses sync version for Deno compatibility (fflate async uses Web Workers
|
|
31
|
+
* which have issues in Deno)
|
|
32
|
+
*/
|
|
33
|
+
async decompress(data) {
|
|
34
|
+
// Use sync version wrapped in Promise for cross-runtime compatibility
|
|
35
|
+
return this.decompressSync(data);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nemlwdG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvY2xhc3Nlcy5nemlwdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFHeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNwQjs7T0FFRztJQUNJLFlBQVksQ0FBQyxJQUFnQixFQUFFLEtBQXlCO1FBQzdELE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM1RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsSUFBZ0I7UUFDcEMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBZ0IsRUFBRSxLQUF5QjtRQUMvRCxzRUFBc0U7UUFDdEUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBZ0I7UUFDdEMsc0VBQXNFO1FBQ3RFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { IArchiveEntry, TCompressionLevel } from './interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* TAR archive creation and extraction utilities using modern-tar (browser-compatible)
|
|
4
|
+
*/
|
|
5
|
+
export declare class TarTools {
|
|
6
|
+
/**
|
|
7
|
+
* Pack files into a TAR buffer
|
|
8
|
+
*/
|
|
9
|
+
packFiles(files: IArchiveEntry[]): Promise<Uint8Array>;
|
|
10
|
+
/**
|
|
11
|
+
* Extract a TAR buffer to an array of entries
|
|
12
|
+
*/
|
|
13
|
+
extractTar(data: Uint8Array): Promise<Array<{
|
|
14
|
+
path: string;
|
|
15
|
+
content: Uint8Array;
|
|
16
|
+
isDirectory: boolean;
|
|
17
|
+
}>>;
|
|
18
|
+
/**
|
|
19
|
+
* Pack files into a TAR.GZ buffer
|
|
20
|
+
*/
|
|
21
|
+
packFilesToTarGz(files: IArchiveEntry[], compressionLevel?: TCompressionLevel): Promise<Uint8Array>;
|
|
22
|
+
/**
|
|
23
|
+
* Extract a TAR.GZ buffer to an array of entries
|
|
24
|
+
*/
|
|
25
|
+
extractTarGz(data: Uint8Array): Promise<Array<{
|
|
26
|
+
path: string;
|
|
27
|
+
content: Uint8Array;
|
|
28
|
+
isDirectory: boolean;
|
|
29
|
+
}>>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import { GzipTools } from './classes.gziptools.js';
|
|
3
|
+
/**
|
|
4
|
+
* TAR archive creation and extraction utilities using modern-tar (browser-compatible)
|
|
5
|
+
*/
|
|
6
|
+
export class TarTools {
|
|
7
|
+
/**
|
|
8
|
+
* Pack files into a TAR buffer
|
|
9
|
+
*/
|
|
10
|
+
async packFiles(files) {
|
|
11
|
+
const entries = [];
|
|
12
|
+
for (const file of files) {
|
|
13
|
+
let data;
|
|
14
|
+
if (typeof file.content === 'string') {
|
|
15
|
+
data = new TextEncoder().encode(file.content);
|
|
16
|
+
}
|
|
17
|
+
else if (file.content instanceof Uint8Array) {
|
|
18
|
+
data = file.content;
|
|
19
|
+
}
|
|
20
|
+
else if (file.content instanceof plugins.smartfile.SmartFile) {
|
|
21
|
+
data = new Uint8Array(file.content.contents);
|
|
22
|
+
}
|
|
23
|
+
else if (file.content instanceof plugins.smartfile.StreamFile) {
|
|
24
|
+
const buffer = await file.content.getContentAsBuffer();
|
|
25
|
+
data = new Uint8Array(buffer);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw new Error('Unsupported content type for TAR entry');
|
|
29
|
+
}
|
|
30
|
+
entries.push({
|
|
31
|
+
header: {
|
|
32
|
+
name: file.archivePath,
|
|
33
|
+
size: data.length,
|
|
34
|
+
type: 'file',
|
|
35
|
+
mode: file.mode,
|
|
36
|
+
mtime: file.mtime,
|
|
37
|
+
},
|
|
38
|
+
body: data,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return plugins.modernTar.packTar(entries);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Extract a TAR buffer to an array of entries
|
|
45
|
+
*/
|
|
46
|
+
async extractTar(data) {
|
|
47
|
+
const entries = await plugins.modernTar.unpackTar(data);
|
|
48
|
+
const result = [];
|
|
49
|
+
for (const entry of entries) {
|
|
50
|
+
const isDirectory = entry.header.type === 'directory' || entry.header.name.endsWith('/');
|
|
51
|
+
// modern-tar uses 'data' property, not 'body'
|
|
52
|
+
const content = entry.data ?? new Uint8Array(0);
|
|
53
|
+
result.push({
|
|
54
|
+
path: entry.header.name,
|
|
55
|
+
content,
|
|
56
|
+
isDirectory,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Pack files into a TAR.GZ buffer
|
|
63
|
+
*/
|
|
64
|
+
async packFilesToTarGz(files, compressionLevel) {
|
|
65
|
+
const tarBuffer = await this.packFiles(files);
|
|
66
|
+
const gzipTools = new GzipTools();
|
|
67
|
+
return gzipTools.compress(tarBuffer, compressionLevel);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract a TAR.GZ buffer to an array of entries
|
|
71
|
+
*/
|
|
72
|
+
async extractTarGz(data) {
|
|
73
|
+
const gzipTools = new GzipTools();
|
|
74
|
+
const tarBuffer = await gzipTools.decompress(data);
|
|
75
|
+
return this.extractTar(tarBuffer);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50YXJ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3NoYXJlZC9jbGFzc2VzLnRhcnRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVuRDs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ25COztPQUVHO0lBQ0ksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFzQjtRQUMzQyxNQUFNLE9BQU8sR0FBZ0IsRUFBRSxDQUFDO1FBRWhDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFnQixDQUFDO1lBRXJCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxZQUFZLFVBQVUsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0QixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMvRCxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoRSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUVELE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNqQixJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2lCQUNsQjtnQkFDRCxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBZ0I7UUFDdEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBdUUsRUFBRSxDQUFDO1FBRXRGLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV6Riw4Q0FBOEM7WUFDOUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoRCxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUk7Z0JBQ3ZCLE9BQU87Z0JBQ1AsV0FBVzthQUNaLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsZ0JBQWdCLENBQzNCLEtBQXNCLEVBQ3RCLGdCQUFvQztRQUVwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNsQyxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFnQjtRQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import type { IArchiveEntry, TCompressionLevel } from './interfaces.js';
|
|
3
|
+
/**
|
|
4
|
+
* Transform stream for ZIP decompression using fflate
|
|
5
|
+
* Emits StreamFile objects for each file in the archive
|
|
6
|
+
*/
|
|
7
|
+
export declare class ZipDecompressionTransform extends plugins.smartstream.SmartDuplex<Uint8Array, plugins.smartfile.StreamFile> {
|
|
8
|
+
private streamtools;
|
|
9
|
+
private unzipper;
|
|
10
|
+
constructor();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* ZIP compression and decompression utilities
|
|
14
|
+
*/
|
|
15
|
+
export declare class ZipTools {
|
|
16
|
+
/**
|
|
17
|
+
* Get a streaming decompression transform for extracting ZIP archives
|
|
18
|
+
*/
|
|
19
|
+
getDecompressionStream(): ZipDecompressionTransform;
|
|
20
|
+
/**
|
|
21
|
+
* Create a ZIP archive from an array of entries
|
|
22
|
+
*/
|
|
23
|
+
createZip(entries: IArchiveEntry[], compressionLevel?: TCompressionLevel): Promise<Uint8Array>;
|
|
24
|
+
/**
|
|
25
|
+
* Extract a ZIP buffer to an array of entries
|
|
26
|
+
*/
|
|
27
|
+
extractZip(data: Uint8Array): Promise<Array<{
|
|
28
|
+
path: string;
|
|
29
|
+
content: Uint8Array;
|
|
30
|
+
}>>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Transform stream for ZIP decompression using fflate
|
|
4
|
+
* Emits StreamFile objects for each file in the archive
|
|
5
|
+
*/
|
|
6
|
+
export class ZipDecompressionTransform extends plugins.smartstream.SmartDuplex {
|
|
7
|
+
constructor() {
|
|
8
|
+
super({
|
|
9
|
+
objectMode: true,
|
|
10
|
+
writeFunction: async (chunkArg, streamtoolsArg) => {
|
|
11
|
+
this.streamtools ? null : (this.streamtools = streamtoolsArg);
|
|
12
|
+
const chunk = chunkArg instanceof Uint8Array ? chunkArg : new Uint8Array(chunkArg);
|
|
13
|
+
this.unzipper.push(chunk, false);
|
|
14
|
+
return null;
|
|
15
|
+
},
|
|
16
|
+
finalFunction: async () => {
|
|
17
|
+
this.unzipper.push(new Uint8Array(0), true);
|
|
18
|
+
await plugins.smartdelay.delayFor(0);
|
|
19
|
+
await this.streamtools.push(null);
|
|
20
|
+
return null;
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
this.unzipper = new plugins.fflate.Unzip(async (fileArg) => {
|
|
24
|
+
let resultBuffer;
|
|
25
|
+
fileArg.ondata = async (_flateError, dat, final) => {
|
|
26
|
+
if (resultBuffer) {
|
|
27
|
+
const combined = new Uint8Array(resultBuffer.length + dat.length);
|
|
28
|
+
combined.set(resultBuffer);
|
|
29
|
+
combined.set(dat, resultBuffer.length);
|
|
30
|
+
resultBuffer = combined;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
resultBuffer = new Uint8Array(dat);
|
|
34
|
+
}
|
|
35
|
+
if (final) {
|
|
36
|
+
const streamFile = plugins.smartfile.StreamFile.fromBuffer(Buffer.from(resultBuffer));
|
|
37
|
+
streamFile.relativeFilePath = fileArg.name;
|
|
38
|
+
this.streamtools.push(streamFile);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
fileArg.start();
|
|
42
|
+
});
|
|
43
|
+
this.unzipper.register(plugins.fflate.UnzipInflate);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* ZIP compression and decompression utilities
|
|
48
|
+
*/
|
|
49
|
+
export class ZipTools {
|
|
50
|
+
/**
|
|
51
|
+
* Get a streaming decompression transform for extracting ZIP archives
|
|
52
|
+
*/
|
|
53
|
+
getDecompressionStream() {
|
|
54
|
+
return new ZipDecompressionTransform();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create a ZIP archive from an array of entries
|
|
58
|
+
*/
|
|
59
|
+
async createZip(entries, compressionLevel) {
|
|
60
|
+
const filesObj = {};
|
|
61
|
+
for (const entry of entries) {
|
|
62
|
+
let data;
|
|
63
|
+
if (typeof entry.content === 'string') {
|
|
64
|
+
data = new TextEncoder().encode(entry.content);
|
|
65
|
+
}
|
|
66
|
+
else if (entry.content instanceof Uint8Array) {
|
|
67
|
+
data = entry.content;
|
|
68
|
+
}
|
|
69
|
+
else if (entry.content instanceof plugins.smartfile.SmartFile) {
|
|
70
|
+
data = new Uint8Array(entry.content.contents);
|
|
71
|
+
}
|
|
72
|
+
else if (entry.content instanceof plugins.smartfile.StreamFile) {
|
|
73
|
+
const buffer = await entry.content.getContentAsBuffer();
|
|
74
|
+
data = new Uint8Array(buffer);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
throw new Error('Unsupported content type for ZIP entry');
|
|
78
|
+
}
|
|
79
|
+
if (compressionLevel !== undefined) {
|
|
80
|
+
filesObj[entry.archivePath] = [data, { level: compressionLevel }];
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
filesObj[entry.archivePath] = data;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Use sync version for Deno compatibility (fflate async uses Web Workers)
|
|
87
|
+
const result = plugins.fflate.zipSync(filesObj);
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Extract a ZIP buffer to an array of entries
|
|
92
|
+
*/
|
|
93
|
+
async extractZip(data) {
|
|
94
|
+
// Use sync version for Deno compatibility (fflate async uses Web Workers)
|
|
95
|
+
const result = plugins.fflate.unzipSync(data);
|
|
96
|
+
const entries = [];
|
|
97
|
+
for (const [path, content] of Object.entries(result)) {
|
|
98
|
+
entries.push({ path, content });
|
|
99
|
+
}
|
|
100
|
+
return entries;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy56aXB0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3NoYXJlZC9jbGFzc2VzLnppcHRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBR3hDOzs7R0FHRztBQUNILE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQXFEO0lBc0J0SDtRQUNFLEtBQUssQ0FBQztZQUNKLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxhQUFhLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7U0FDRixDQUFDLENBQUM7UUFuQ0csYUFBUSxH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
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base error class for smartarchive
|
|
3
|
+
*/
|
|
4
|
+
export declare class SmartArchiveError extends Error {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
constructor(message: string, code: string);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* BZIP2-specific decompression errors
|
|
10
|
+
*/
|
|
11
|
+
export declare class Bzip2Error extends SmartArchiveError {
|
|
12
|
+
constructor(message: string, code?: string);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Archive format detection errors
|
|
16
|
+
*/
|
|
17
|
+
export declare class ArchiveFormatError extends SmartArchiveError {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Stream processing errors
|
|
22
|
+
*/
|
|
23
|
+
export declare class StreamError extends SmartArchiveError {
|
|
24
|
+
constructor(message: string);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* BZIP2 error codes for programmatic error handling
|
|
28
|
+
*/
|
|
29
|
+
export declare const BZIP2_ERROR_CODES: {
|
|
30
|
+
readonly NO_MAGIC_NUMBER: "BZIP2_NO_MAGIC";
|
|
31
|
+
readonly INVALID_ARCHIVE: "BZIP2_INVALID_ARCHIVE";
|
|
32
|
+
readonly CRC_MISMATCH: "BZIP2_CRC_MISMATCH";
|
|
33
|
+
readonly INVALID_BLOCK_DATA: "BZIP2_INVALID_BLOCK";
|
|
34
|
+
readonly BUFFER_OVERFLOW: "BZIP2_BUFFER_OVERFLOW";
|
|
35
|
+
readonly INVALID_HUFFMAN: "BZIP2_INVALID_HUFFMAN";
|
|
36
|
+
readonly INVALID_SELECTOR: "BZIP2_INVALID_SELECTOR";
|
|
37
|
+
readonly INVALID_POSITION: "BZIP2_INVALID_POSITION";
|
|
38
|
+
readonly PREMATURE_END: "BZIP2_PREMATURE_END";
|
|
39
|
+
};
|
|
40
|
+
export type TBzip2ErrorCode = typeof BZIP2_ERROR_CODES[keyof typeof BZIP2_ERROR_CODES];
|
|
41
|
+
/**
|
|
42
|
+
* Throw a BZIP2 error with a specific code
|
|
43
|
+
*/
|
|
44
|
+
export declare function throwBzip2Error(message: string, code: TBzip2ErrorCode): never;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base error class for smartarchive
|
|
3
|
+
*/
|
|
4
|
+
export class SmartArchiveError extends Error {
|
|
5
|
+
constructor(message, code) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'SmartArchiveError';
|
|
8
|
+
this.code = code;
|
|
9
|
+
// Maintains proper stack trace for where error was thrown (V8)
|
|
10
|
+
if (Error.captureStackTrace) {
|
|
11
|
+
Error.captureStackTrace(this, this.constructor);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* BZIP2-specific decompression errors
|
|
17
|
+
*/
|
|
18
|
+
export class Bzip2Error extends SmartArchiveError {
|
|
19
|
+
constructor(message, code = 'BZIP2_ERROR') {
|
|
20
|
+
super(message, code);
|
|
21
|
+
this.name = 'Bzip2Error';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Archive format detection errors
|
|
26
|
+
*/
|
|
27
|
+
export class ArchiveFormatError extends SmartArchiveError {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message, 'ARCHIVE_FORMAT_ERROR');
|
|
30
|
+
this.name = 'ArchiveFormatError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Stream processing errors
|
|
35
|
+
*/
|
|
36
|
+
export class StreamError extends SmartArchiveError {
|
|
37
|
+
constructor(message) {
|
|
38
|
+
super(message, 'STREAM_ERROR');
|
|
39
|
+
this.name = 'StreamError';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* BZIP2 error codes for programmatic error handling
|
|
44
|
+
*/
|
|
45
|
+
export const BZIP2_ERROR_CODES = {
|
|
46
|
+
NO_MAGIC_NUMBER: 'BZIP2_NO_MAGIC',
|
|
47
|
+
INVALID_ARCHIVE: 'BZIP2_INVALID_ARCHIVE',
|
|
48
|
+
CRC_MISMATCH: 'BZIP2_CRC_MISMATCH',
|
|
49
|
+
INVALID_BLOCK_DATA: 'BZIP2_INVALID_BLOCK',
|
|
50
|
+
BUFFER_OVERFLOW: 'BZIP2_BUFFER_OVERFLOW',
|
|
51
|
+
INVALID_HUFFMAN: 'BZIP2_INVALID_HUFFMAN',
|
|
52
|
+
INVALID_SELECTOR: 'BZIP2_INVALID_SELECTOR',
|
|
53
|
+
INVALID_POSITION: 'BZIP2_INVALID_POSITION',
|
|
54
|
+
PREMATURE_END: 'BZIP2_PREMATURE_END',
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Throw a BZIP2 error with a specific code
|
|
58
|
+
*/
|
|
59
|
+
export function throwBzip2Error(message, code) {
|
|
60
|
+
throw new Bzip2Error(message, code);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2hhcmVkL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxLQUFLO0lBRzFDLFlBQVksT0FBZSxFQUFFLElBQVk7UUFDdkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQiwrREFBK0Q7UUFDL0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBVyxTQUFRLGlCQUFpQjtJQUMvQyxZQUFZLE9BQWUsRUFBRSxPQUFlLGFBQWE7UUFDdkQsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUFDdkQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVksU0FBUSxpQkFBaUI7SUFDaEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixlQUFlLEVBQUUsZ0JBQWdCO0lBQ2pDLGVBQWUsRUFBRSx1QkFBdUI7SUFDeEMsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQyxrQkFBa0IsRUFBRSxxQkFBcUI7SUFDekMsZUFBZSxFQUFFLHVCQUF1QjtJQUN4QyxlQUFlLEVBQUUsdUJBQXVCO0lBQ3hDLGdCQUFnQixFQUFFLHdCQUF3QjtJQUMxQyxnQkFBZ0IsRUFBRSx3QkFBd0I7SUFDMUMsYUFBYSxFQUFFLHFCQUFxQjtDQUM1QixDQUFDO0FBSVg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE9BQWUsRUFBRSxJQUFxQjtJQUNwRSxNQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0QyxDQUFDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './interfaces.js';
|
|
2
|
+
export * from './errors.js';
|
|
3
|
+
export { ZipTools, ZipDecompressionTransform } from './classes.ziptools.js';
|
|
4
|
+
export { GzipTools } from './classes.gziptools.js';
|
|
5
|
+
export { TarTools } from './classes.tartools.js';
|
|
6
|
+
export { Bzip2Tools } from './classes.bzip2tools.js';
|
|
7
|
+
export { unbzip2Stream } from './bzip2/index.js';
|
|
8
|
+
export { Bzip2 } from './bzip2/bzip2.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// ts_shared - Browser-compatible shared code
|
|
2
|
+
// Interfaces and types
|
|
3
|
+
export * from './interfaces.js';
|
|
4
|
+
// Error classes
|
|
5
|
+
export * from './errors.js';
|
|
6
|
+
// Tool classes
|
|
7
|
+
export { ZipTools, ZipDecompressionTransform } from './classes.ziptools.js';
|
|
8
|
+
export { GzipTools } from './classes.gziptools.js';
|
|
9
|
+
export { TarTools } from './classes.tartools.js';
|
|
10
|
+
export { Bzip2Tools } from './classes.bzip2tools.js';
|
|
11
|
+
// BZIP2 internals (for advanced usage)
|
|
12
|
+
export { unbzip2Stream } from './bzip2/index.js';
|
|
13
|
+
export { Bzip2 } from './bzip2/bzip2.js';
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkNBQTZDO0FBRTdDLHVCQUF1QjtBQUN2QixjQUFjLGlCQUFpQixDQUFDO0FBRWhDLGdCQUFnQjtBQUNoQixjQUFjLGFBQWEsQ0FBQztBQUU1QixlQUFlO0FBQ2YsT0FBTyxFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJELHVDQUF1QztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDIn0=
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { SmartFile, StreamFile } from '@push.rocks/smartfile';
|
|
2
|
+
/**
|
|
3
|
+
* Supported archive formats
|
|
4
|
+
*/
|
|
5
|
+
export type TArchiveFormat = 'tar' | 'tar.gz' | 'tgz' | 'zip' | 'gz' | 'bz2';
|
|
6
|
+
/**
|
|
7
|
+
* Compression level (0 = no compression, 9 = maximum compression)
|
|
8
|
+
*/
|
|
9
|
+
export type TCompressionLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
|
|
10
|
+
/**
|
|
11
|
+
* Supported MIME types for archive detection
|
|
12
|
+
*/
|
|
13
|
+
export type TSupportedMime = 'application/gzip' | 'application/zip' | 'application/x-bzip2' | 'application/x-tar' | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Entry to add to an archive during creation (browser-compatible)
|
|
16
|
+
*/
|
|
17
|
+
export interface IArchiveEntry {
|
|
18
|
+
/** Path within the archive */
|
|
19
|
+
archivePath: string;
|
|
20
|
+
/** Content: string, Buffer/Uint8Array, SmartFile, or StreamFile */
|
|
21
|
+
content: string | Uint8Array | SmartFile | StreamFile;
|
|
22
|
+
/** Optional size hint for streams (improves performance) */
|
|
23
|
+
size?: number;
|
|
24
|
+
/** Optional file mode/permissions */
|
|
25
|
+
mode?: number;
|
|
26
|
+
/** Optional modification time */
|
|
27
|
+
mtime?: Date;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Options for creating archives
|
|
31
|
+
*/
|
|
32
|
+
export interface IArchiveCreationOptions {
|
|
33
|
+
/** Target archive format */
|
|
34
|
+
format: TArchiveFormat;
|
|
35
|
+
/** Compression level (0-9, default depends on format) */
|
|
36
|
+
compressionLevel?: TCompressionLevel;
|
|
37
|
+
/** Base path to strip from file paths in archive */
|
|
38
|
+
basePath?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Options for extracting archives
|
|
42
|
+
*/
|
|
43
|
+
export interface IArchiveExtractionOptions {
|
|
44
|
+
/** Target directory for extraction */
|
|
45
|
+
targetDir: string;
|
|
46
|
+
/** Optional filename for single-file archives (gz, bz2) */
|
|
47
|
+
fileName?: string;
|
|
48
|
+
/** Number of leading path components to strip */
|
|
49
|
+
stripComponents?: number;
|
|
50
|
+
/** Filter function to select which entries to extract */
|
|
51
|
+
filter?: (entry: IArchiveEntryInfo) => boolean;
|
|
52
|
+
/** Whether to overwrite existing files */
|
|
53
|
+
overwrite?: boolean;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Information about an archive entry
|
|
57
|
+
*/
|
|
58
|
+
export interface IArchiveEntryInfo {
|
|
59
|
+
/** Path of the entry within the archive */
|
|
60
|
+
path: string;
|
|
61
|
+
/** Size in bytes */
|
|
62
|
+
size: number;
|
|
63
|
+
/** Whether this entry is a directory */
|
|
64
|
+
isDirectory: boolean;
|
|
65
|
+
/** Whether this entry is a file */
|
|
66
|
+
isFile: boolean;
|
|
67
|
+
/** Modification time */
|
|
68
|
+
mtime?: Date;
|
|
69
|
+
/** File mode/permissions */
|
|
70
|
+
mode?: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Result of archive analysis
|
|
74
|
+
*/
|
|
75
|
+
export interface IArchiveInfo {
|
|
76
|
+
/** Detected archive format */
|
|
77
|
+
format: TArchiveFormat | null;
|
|
78
|
+
/** Whether the archive is compressed */
|
|
79
|
+
isCompressed: boolean;
|
|
80
|
+
/** Whether this is a recognized archive format */
|
|
81
|
+
isArchive: boolean;
|
|
82
|
+
/** List of entries (if available without full extraction) */
|
|
83
|
+
entries?: IArchiveEntryInfo[];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Options for adding a file to a TAR pack stream
|
|
87
|
+
*/
|
|
88
|
+
export interface IAddFileOptions {
|
|
89
|
+
/** Filename within the archive */
|
|
90
|
+
fileName?: string;
|
|
91
|
+
/** File content */
|
|
92
|
+
content?: string | Uint8Array | SmartFile | StreamFile;
|
|
93
|
+
/** Size in bytes (required for streams) */
|
|
94
|
+
byteLength?: number;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Bit reader interface for BZIP2 decompression
|
|
98
|
+
*/
|
|
99
|
+
export interface IBitReader {
|
|
100
|
+
(n: number | null): number | void;
|
|
101
|
+
bytesRead: number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Huffman group for BZIP2 decompression
|
|
105
|
+
*/
|
|
106
|
+
export interface IHuffmanGroup {
|
|
107
|
+
permute: Int32Array;
|
|
108
|
+
limit: Int32Array;
|
|
109
|
+
base: Int32Array;
|
|
110
|
+
minLen: number;
|
|
111
|
+
maxLen: number;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Entry filter predicate for fluent API
|
|
115
|
+
*/
|
|
116
|
+
export type TEntryFilter = (entry: IArchiveEntryInfo) => boolean;
|
|
117
|
+
/**
|
|
118
|
+
* TAR entry for modern-tar compatibility
|
|
119
|
+
*/
|
|
120
|
+
export interface ITarEntry {
|
|
121
|
+
header: {
|
|
122
|
+
name: string;
|
|
123
|
+
size: number;
|
|
124
|
+
type?: 'file' | 'directory';
|
|
125
|
+
mode?: number;
|
|
126
|
+
mtime?: Date;
|
|
127
|
+
};
|
|
128
|
+
body: string | Uint8Array;
|
|
129
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as smartdelay from '@push.rocks/smartdelay';
|
|
2
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
3
|
+
import * as smartstream from '@push.rocks/smartstream';
|
|
4
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
5
|
+
export { smartdelay, smartpromise, smartstream, smartfile, };
|
|
6
|
+
import * as fileType from 'file-type';
|
|
7
|
+
import * as fflate from 'fflate';
|
|
8
|
+
import * as modernTar from 'modern-tar';
|
|
9
|
+
export { fileType, fflate, modernTar };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Browser-compatible plugins for ts_shared
|
|
2
|
+
// NO Node.js imports allowed here
|
|
3
|
+
// @push.rocks scope (browser-compatible)
|
|
4
|
+
import * as smartdelay from '@push.rocks/smartdelay';
|
|
5
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
6
|
+
import * as smartstream from '@push.rocks/smartstream';
|
|
7
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
8
|
+
export { smartdelay, smartpromise, smartstream, smartfile, };
|
|
9
|
+
// third party scope (browser-compatible)
|
|
10
|
+
import * as fileType from 'file-type';
|
|
11
|
+
import * as fflate from 'fflate';
|
|
12
|
+
import * as modernTar from 'modern-tar';
|
|
13
|
+
export { fileType, fflate, modernTar };
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3NoYXJlZC9wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxrQ0FBa0M7QUFFbEMseUNBQXlDO0FBQ3pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUNMLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsR0FDVixDQUFDO0FBRUYseUNBQXlDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDIn0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autocreated commitinfo by @push.rocks/commitinfo
|
|
3
|
+
*/
|
|
4
|
+
export const commitinfo = {
|
|
5
|
+
name: '@push.rocks/smartarchive',
|
|
6
|
+
version: '5.1.0',
|
|
7
|
+
description: 'A library for working with archive files, providing utilities for compressing and decompressing data.'
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsMEJBQTBCO0lBQ2hDLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSx1R0FBdUc7Q0FDckgsQ0FBQSJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../ts_shared/index.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// ts_web - Browser-compatible entry point
|
|
2
|
+
// Re-exports everything from ts_shared
|
|
3
|
+
export * from '../ts_shared/index.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMENBQTBDO0FBQzFDLHVDQUF1QztBQUV2QyxjQUFjLHVCQUF1QixDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../ts_shared/plugins.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Browser-compatible plugins for ts_web
|
|
2
|
+
// Re-export from ts_shared
|
|
3
|
+
export * from '../ts_shared/plugins.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdDQUF3QztBQUN4QywyQkFBMkI7QUFDM0IsY0FBYyx5QkFBeUIsQ0FBQyJ9
|