@push.rocks/smartarchive 5.1.0 → 5.2.1

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.
Files changed (45) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/classes.smartarchive.d.ts +4 -4
  3. package/dist_ts/classes.smartarchive.js +29 -24
  4. package/dist_ts/classes.tartools.d.ts +81 -6
  5. package/dist_ts/classes.tartools.js +202 -16
  6. package/dist_ts/index.d.ts +2 -2
  7. package/dist_ts/index.js +3 -3
  8. package/dist_ts/plugins.d.ts +3 -1
  9. package/dist_ts/plugins.js +5 -2
  10. package/dist_ts_shared/bzip2/bititerator.d.ts +6 -0
  11. package/dist_ts_shared/bzip2/bititerator.js +50 -0
  12. package/dist_ts_shared/bzip2/bzip2.d.ts +29 -0
  13. package/dist_ts_shared/bzip2/bzip2.js +398 -0
  14. package/dist_ts_shared/bzip2/index.d.ts +5 -0
  15. package/dist_ts_shared/bzip2/index.js +92 -0
  16. package/dist_ts_shared/classes.bzip2tools.d.ts +10 -0
  17. package/dist_ts_shared/classes.bzip2tools.js +14 -0
  18. package/dist_ts_shared/classes.gziptools.d.ts +26 -0
  19. package/dist_ts_shared/classes.gziptools.js +38 -0
  20. package/dist_ts_shared/classes.tartools.d.ts +30 -0
  21. package/dist_ts_shared/classes.tartools.js +78 -0
  22. package/dist_ts_shared/classes.ziptools.d.ts +31 -0
  23. package/dist_ts_shared/classes.ziptools.js +103 -0
  24. package/dist_ts_shared/errors.d.ts +44 -0
  25. package/dist_ts_shared/errors.js +62 -0
  26. package/dist_ts_shared/index.d.ts +8 -0
  27. package/dist_ts_shared/index.js +14 -0
  28. package/dist_ts_shared/interfaces.d.ts +129 -0
  29. package/dist_ts_shared/interfaces.js +2 -0
  30. package/dist_ts_shared/plugins.d.ts +9 -0
  31. package/dist_ts_shared/plugins.js +14 -0
  32. package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
  33. package/dist_ts_web/00_commitinfo_data.js +9 -0
  34. package/dist_ts_web/index.d.ts +1 -0
  35. package/dist_ts_web/index.js +4 -0
  36. package/dist_ts_web/plugins.d.ts +1 -0
  37. package/dist_ts_web/plugins.js +4 -0
  38. package/package.json +7 -5
  39. package/readme.md +154 -46
  40. package/ts/00_commitinfo_data.ts +1 -1
  41. package/ts/classes.smartarchive.ts +28 -23
  42. package/ts/classes.tartools.ts +235 -14
  43. package/ts/index.ts +2 -2
  44. package/ts/plugins.ts +4 -0
  45. package/ts_web/00_commitinfo_data.ts +1 -1
@@ -0,0 +1,10 @@
1
+ import * as plugins from './plugins.js';
2
+ /**
3
+ * BZIP2 decompression utilities (browser-compatible)
4
+ */
5
+ export declare class Bzip2Tools {
6
+ /**
7
+ * Get a streaming decompression transform
8
+ */
9
+ getDecompressionStream(): plugins.smartstream.SmartDuplex<Uint8Array, Uint8Array>;
10
+ }
@@ -0,0 +1,14 @@
1
+ import * as plugins from './plugins.js';
2
+ import { unbzip2Stream } from './bzip2/index.js';
3
+ /**
4
+ * BZIP2 decompression utilities (browser-compatible)
5
+ */
6
+ export class Bzip2Tools {
7
+ /**
8
+ * Get a streaming decompression transform
9
+ */
10
+ getDecompressionStream() {
11
+ return unbzip2Stream();
12
+ }
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5iemlwMnRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2hhcmVkL2NsYXNzZXMuYnppcDJ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNyQjs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixPQUFPLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FDRiJ9
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3NoYXJlZC9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -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,8 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -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