@push.rocks/smartarchive 5.0.0 → 5.0.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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartarchive',
6
- version: '5.0.0',
6
+ version: '5.0.1',
7
7
  description: 'A library for working with archive files, providing utilities for compressing and decompressing data.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHVHQUF1RztDQUNySCxDQUFBIn0=
@@ -40,10 +40,14 @@ export declare class GzipTools {
40
40
  decompressSync(data: Buffer): Buffer;
41
41
  /**
42
42
  * Compress data asynchronously
43
+ * Note: Uses sync version for Deno compatibility (fflate async uses Web Workers
44
+ * which have issues in Deno)
43
45
  */
44
46
  compress(data: Buffer, level?: TCompressionLevel): Promise<Buffer>;
45
47
  /**
46
48
  * Decompress data asynchronously
49
+ * Note: Uses sync version for Deno compatibility (fflate async uses Web Workers
50
+ * which have issues in Deno)
47
51
  */
48
52
  decompress(data: Buffer): Promise<Buffer>;
49
53
  }
@@ -96,30 +96,21 @@ export class GzipTools {
96
96
  }
97
97
  /**
98
98
  * Compress data asynchronously
99
+ * Note: Uses sync version for Deno compatibility (fflate async uses Web Workers
100
+ * which have issues in Deno)
99
101
  */
100
102
  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
- });
103
+ // Use sync version wrapped in Promise for cross-runtime compatibility
104
+ return this.compressSync(data, level);
110
105
  }
111
106
  /**
112
107
  * Decompress data asynchronously
108
+ * Note: Uses sync version for Deno compatibility (fflate async uses Web Workers
109
+ * which have issues in Deno)
113
110
  */
114
111
  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
- });
112
+ // Use sync version wrapped in Promise for cross-runtime compatibility
113
+ return this.decompressSync(data);
123
114
  }
124
115
  }
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nemlwdG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmd6aXB0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUd4Qzs7R0FFRztBQUNILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFHcEUsWUFBWSxRQUEyQixDQUFDO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRVIscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUNSLEtBQWEsRUFDYixRQUF3QixFQUN4QixRQUEwQztRQUUxQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0IsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxHQUFZLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUEwQztRQUMvQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMs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QyxHQUFHLENBQUMsQ0FBQzs7b0JBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxHQUFHO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7b0JBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiJ9
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nemlwdG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmd6aXB0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUd4Qzs7R0FFRztBQUNILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFHcEUsWUFBWSxRQUEyQixDQUFDO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRVIscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUNSLEtBQWEsRUFDYixRQUF3QixFQUN4QixRQUEwQztRQUUxQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0IsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxHQUFZLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUEwQztRQUMvQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMs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
@@ -1,117 +1,214 @@
1
1
  import * as plugins from './plugins.js';
2
- import type { IArchiveCreationOptions, IArchiveEntry, IArchiveExtractionOptions, IArchiveEntryInfo, IArchiveInfo } from './interfaces.js';
2
+ import type { IArchiveEntryInfo, IArchiveInfo, TArchiveFormat, TCompressionLevel, TEntryFilter } from './interfaces.js';
3
3
  import { Bzip2Tools } from './classes.bzip2tools.js';
4
4
  import { GzipTools } from './classes.gziptools.js';
5
5
  import { TarTools } from './classes.tartools.js';
6
6
  import { ZipTools } from './classes.ziptools.js';
7
7
  import { ArchiveAnalyzer } from './classes.archiveanalyzer.js';
8
8
  /**
9
- * Main class for archive manipulation
9
+ * Main class for archive manipulation with fluent API
10
10
  * Supports TAR, ZIP, GZIP, and BZIP2 formats
11
+ *
12
+ * @example Extraction from URL
13
+ * ```typescript
14
+ * await SmartArchive.create()
15
+ * .url('https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz')
16
+ * .stripComponents(1)
17
+ * .extract('./node_modules/lodash');
18
+ * ```
19
+ *
20
+ * @example Creation with thenable
21
+ * ```typescript
22
+ * const archive = await SmartArchive.create()
23
+ * .format('tar.gz')
24
+ * .compression(9)
25
+ * .entry('config.json', JSON.stringify(config))
26
+ * .directory('./src');
27
+ * ```
11
28
  */
12
29
  export declare class SmartArchive {
13
30
  /**
14
- * Create SmartArchive from a URL
31
+ * Create a new SmartArchive instance for fluent configuration
15
32
  */
16
- static fromUrl(urlArg: string): Promise<SmartArchive>;
33
+ static create(): SmartArchive;
34
+ tarTools: TarTools;
35
+ zipTools: ZipTools;
36
+ gzipTools: GzipTools;
37
+ bzip2Tools: Bzip2Tools;
38
+ archiveAnalyzer: ArchiveAnalyzer;
39
+ private sourceUrl?;
40
+ private sourceFilePath?;
41
+ private sourceStream?;
42
+ private archiveBuffer?;
43
+ private creationFormat?;
44
+ private _compressionLevel;
45
+ private pendingEntries;
46
+ private pendingDirectories;
47
+ private _mode;
48
+ private _filters;
49
+ private _excludePatterns;
50
+ private _includePatterns;
51
+ private _stripComponents;
52
+ private _overwrite;
53
+ private _fileName?;
54
+ constructor();
17
55
  /**
18
- * Create SmartArchive from a local file path
56
+ * Load archive from URL
19
57
  */
20
- static fromFile(filePathArg: string): Promise<SmartArchive>;
58
+ url(urlArg: string): this;
21
59
  /**
22
- * Create SmartArchive from a readable stream
60
+ * Load archive from file path
23
61
  */
24
- static fromStream(streamArg: plugins.stream.Readable | plugins.stream.Duplex | plugins.stream.Transform): Promise<SmartArchive>;
62
+ file(pathArg: string): this;
25
63
  /**
26
- * Create SmartArchive from an in-memory buffer
64
+ * Load archive from readable stream
27
65
  */
28
- static fromBuffer(buffer: Buffer): Promise<SmartArchive>;
66
+ stream(streamArg: plugins.stream.Readable | plugins.stream.Duplex | plugins.stream.Transform): this;
29
67
  /**
30
- * Create a new archive from a directory
68
+ * Load archive from buffer
31
69
  */
32
- static fromDirectory(directoryPath: string, options: IArchiveCreationOptions): Promise<SmartArchive>;
70
+ buffer(bufferArg: Buffer): this;
33
71
  /**
34
- * Create a new archive from an array of entries
72
+ * Set output format for archive creation
35
73
  */
36
- static fromFiles(files: IArchiveEntry[], options: IArchiveCreationOptions): Promise<SmartArchive>;
74
+ format(fmt: TArchiveFormat): this;
37
75
  /**
38
- * Start building an archive incrementally using a builder pattern
76
+ * Set compression level (0-9)
39
77
  */
40
- static create(options: IArchiveCreationOptions): SmartArchive;
78
+ compression(level: TCompressionLevel): this;
41
79
  /**
42
- * Helper to convert a stream to buffer
80
+ * Add a single file entry to the archive
43
81
  */
44
- private static streamToBuffer;
45
- tarTools: TarTools;
46
- zipTools: ZipTools;
47
- gzipTools: GzipTools;
48
- bzip2Tools: Bzip2Tools;
49
- archiveAnalyzer: ArchiveAnalyzer;
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?;
56
- constructor();
82
+ entry(archivePath: string, content: string | Buffer): this;
57
83
  /**
58
- * Add a file to the archive (builder pattern)
84
+ * Add multiple entries to the archive
59
85
  */
60
- addFile(archivePath: string, content: string | Buffer): this;
86
+ entries(entriesArg: Array<{
87
+ archivePath: string;
88
+ content: string | Buffer;
89
+ }>): this;
61
90
  /**
62
- * Add a SmartFile to the archive (builder pattern)
91
+ * Add an entire directory to the archive (queued, resolved at build time)
63
92
  */
64
- addSmartFile(file: plugins.smartfile.SmartFile, archivePath?: string): this;
93
+ directory(sourcePath: string, archiveBase?: string): this;
65
94
  /**
66
- * Add a StreamFile to the archive (builder pattern)
95
+ * Add a SmartFile to the archive
67
96
  */
68
- addStreamFile(file: plugins.smartfile.StreamFile, archivePath?: string): this;
97
+ addSmartFile(fileArg: plugins.smartfile.SmartFile, archivePath?: string): this;
69
98
  /**
70
- * Build the archive from pending entries
99
+ * Add a StreamFile to the archive
71
100
  */
72
- build(): Promise<SmartArchive>;
101
+ addStreamFile(fileArg: plugins.smartfile.StreamFile, archivePath?: string): this;
73
102
  /**
74
- * Get the original archive stream
103
+ * Filter entries by predicate function
75
104
  */
76
- toStream(): Promise<plugins.stream.Readable>;
105
+ filter(predicate: TEntryFilter): this;
77
106
  /**
78
- * Get archive as a Buffer
107
+ * Include only entries matching the pattern
79
108
  */
80
- toBuffer(): Promise<Buffer>;
109
+ include(pattern: string | RegExp): this;
81
110
  /**
82
- * Write archive to a file
111
+ * Exclude entries matching the pattern
83
112
  */
84
- toFile(filePath: string): Promise<void>;
113
+ exclude(pattern: string | RegExp): this;
114
+ /**
115
+ * Strip N leading path components from extracted files
116
+ */
117
+ stripComponents(n: number): this;
118
+ /**
119
+ * Overwrite existing files during extraction
120
+ */
121
+ overwrite(value?: boolean): this;
122
+ /**
123
+ * Set output filename for single-file archives (gz, bz2)
124
+ */
125
+ fileName(name: string): this;
85
126
  /**
86
- * Extract archive to filesystem
127
+ * Extract archive to filesystem directory
87
128
  */
88
- extractToDirectory(targetDir: string, options?: Partial<IArchiveExtractionOptions>): Promise<void>;
129
+ extract(targetDir: string): Promise<void>;
89
130
  /**
90
131
  * Extract archive to a stream of StreamFile objects
91
132
  */
92
- extractToStream(): Promise<plugins.smartstream.StreamIntake<plugins.smartfile.StreamFile>>;
133
+ toStreamFiles(): Promise<plugins.smartstream.StreamIntake<plugins.smartfile.StreamFile>>;
93
134
  /**
94
135
  * Extract archive to an array of SmartFile objects (in-memory)
95
136
  */
96
- extractToSmartFiles(): Promise<plugins.smartfile.SmartFile[]>;
137
+ toSmartFiles(): Promise<plugins.smartfile.SmartFile[]>;
97
138
  /**
98
139
  * Extract a single file from the archive by path
99
140
  */
100
141
  extractFile(filePath: string): Promise<plugins.smartfile.SmartFile | null>;
142
+ /**
143
+ * Build and finalize the archive, returning this instance
144
+ */
145
+ build(): Promise<SmartArchive>;
146
+ /**
147
+ * Internal build implementation (avoids thenable recursion)
148
+ */
149
+ private doBuild;
150
+ /**
151
+ * Build archive and return as Buffer
152
+ */
153
+ toBuffer(): Promise<Buffer>;
154
+ /**
155
+ * Build archive and write to file
156
+ */
157
+ toFile(filePath: string): Promise<void>;
158
+ /**
159
+ * Get archive as a readable stream
160
+ */
161
+ toStream(): Promise<plugins.stream.Readable>;
101
162
  /**
102
163
  * Analyze the archive and return metadata
103
164
  */
104
165
  analyze(): Promise<IArchiveInfo>;
105
166
  /**
106
- * List all entries in the archive without extracting
167
+ * List all entries in the archive
107
168
  */
108
- listEntries(): Promise<IArchiveEntryInfo[]>;
169
+ list(): Promise<IArchiveEntryInfo[]>;
109
170
  /**
110
171
  * Check if a specific file exists in the archive
111
172
  */
112
173
  hasFile(filePath: string): Promise<boolean>;
113
174
  /**
114
- * Helper to read first chunk from stream
175
+ * Ensure we're not in create mode when calling extraction methods
176
+ */
177
+ private ensureNotInCreateMode;
178
+ /**
179
+ * Ensure we're not in extract mode when calling creation methods
180
+ */
181
+ private ensureNotInExtractMode;
182
+ /**
183
+ * Ensure an extraction source is configured
184
+ */
185
+ private ensureExtractionSource;
186
+ /**
187
+ * Ensure a format is configured for creation
188
+ */
189
+ private ensureCreationFormat;
190
+ /**
191
+ * Get the source stream
192
+ */
193
+ private getSourceStream;
194
+ /**
195
+ * Build a combined filter function from all configured filters
196
+ */
197
+ private buildFilterFunction;
198
+ /**
199
+ * Resolve pending directories to entries
200
+ */
201
+ private resolveDirectories;
202
+ /**
203
+ * Get entries filtered by include/exclude patterns
204
+ */
205
+ private getFilteredEntries;
206
+ /**
207
+ * Convert a stream to buffer
208
+ */
209
+ private streamToBuffer;
210
+ /**
211
+ * Read first chunk from stream
115
212
  */
116
213
  private readFirstChunk;
117
214
  }