@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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.gziptools.d.ts +4 -0
- package/dist_ts/classes.gziptools.js +9 -18
- package/dist_ts/classes.smartarchive.d.ts +148 -51
- package/dist_ts/classes.smartarchive.js +450 -214
- package/dist_ts/classes.ziptools.js +20 -34
- package/dist_ts/interfaces.d.ts +4 -0
- package/package.json +1 -1
- package/readme.hints.md +69 -23
- package/readme.md +360 -274
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.gziptools.ts +8 -13
- package/ts/classes.smartarchive.ts +506 -232
- package/ts/classes.ziptools.ts +18 -31
- package/ts/interfaces.ts +5 -0
|
@@ -82,18 +82,15 @@ export class ZipCompressionStream extends plugins.stream.Duplex {
|
|
|
82
82
|
for (const [name, { data, options }] of this.files) {
|
|
83
83
|
filesObj[name] = options ? [data, options] : data;
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
});
|
|
85
|
+
// Use sync version for Deno compatibility (fflate async uses Web Workers)
|
|
86
|
+
try {
|
|
87
|
+
const result = plugins.fflate.zipSync(filesObj);
|
|
88
|
+
this.push(Buffer.from(result));
|
|
89
|
+
this.push(null);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
throw err;
|
|
93
|
+
}
|
|
97
94
|
}
|
|
98
95
|
_read() {
|
|
99
96
|
// No-op: data is pushed when finalize() is called
|
|
@@ -154,32 +151,21 @@ export class ZipTools {
|
|
|
154
151
|
filesObj[entry.archivePath] = data;
|
|
155
152
|
}
|
|
156
153
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
reject(err);
|
|
161
|
-
else
|
|
162
|
-
resolve(Buffer.from(result));
|
|
163
|
-
});
|
|
164
|
-
});
|
|
154
|
+
// Use sync version for Deno compatibility (fflate async uses Web Workers)
|
|
155
|
+
const result = plugins.fflate.zipSync(filesObj);
|
|
156
|
+
return Buffer.from(result);
|
|
165
157
|
}
|
|
166
158
|
/**
|
|
167
159
|
* Extract a ZIP buffer to an array of entries
|
|
168
160
|
*/
|
|
169
161
|
async extractZip(data) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
for (const [path, content] of Object.entries(result)) {
|
|
178
|
-
entries.push({ path, content: Buffer.from(content) });
|
|
179
|
-
}
|
|
180
|
-
resolve(entries);
|
|
181
|
-
});
|
|
182
|
-
});
|
|
162
|
+
// Use sync version for Deno compatibility (fflate async uses Web Workers)
|
|
163
|
+
const result = plugins.fflate.unzipSync(data);
|
|
164
|
+
const entries = [];
|
|
165
|
+
for (const [path, content] of Object.entries(result)) {
|
|
166
|
+
entries.push({ path, content: Buffer.from(content) });
|
|
167
|
+
}
|
|
168
|
+
return entries;
|
|
183
169
|
}
|
|
184
170
|
}
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy56aXB0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuemlwdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFHeEM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBaUQ7SUFpQmxIO1FBQ0UsS0FBSyxDQUFDO1lBQ0osVUFBVSxFQUFFLElBQUk7WUFDaEIsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQWtDLENBQUMsRUFDdEYsS0FBSyxDQUNOLENBQUM7Z0JBQ0YsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsYUFBYSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7U0FDRixDQUFDLENBQUM7UUFoQ0csYUFBUSxHQUFHLElBQUksT0FB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
|
package/dist_ts/interfaces.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartarchive",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"description": "A library for working with archive files, providing utilities for compressing and decompressing data.",
|
|
5
5
|
"main": "dist_ts/index.js",
|
|
6
6
|
"typings": "dist_ts/index.d.ts",
|
package/readme.hints.md
CHANGED
|
@@ -1,38 +1,84 @@
|
|
|
1
1
|
# Smartarchive Development Hints
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Architecture Overview
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
- **@git.zone/tsbuild**: ^2.6.6 → ^3.1.0
|
|
7
|
-
- **@git.zone/tsrun**: ^1.3.3 → ^2.0.0
|
|
8
|
-
- **@git.zone/tstest**: ^2.3.4 → ^3.1.3
|
|
9
|
-
- **@push.rocks/smartfile**: ^11.2.7 → ^13.0.0
|
|
5
|
+
`@push.rocks/smartarchive` uses a **fluent builder pattern** for all archive operations. The main entry point is `SmartArchive.create()` which returns a builder instance.
|
|
10
6
|
|
|
11
|
-
###
|
|
7
|
+
### Two Operating Modes
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
1. **Extraction Mode** - Triggered by `.url()`, `.file()`, `.stream()`, or `.buffer()`
|
|
10
|
+
2. **Creation Mode** - Triggered by `.format()` or `.entry()`
|
|
15
11
|
|
|
16
|
-
|
|
12
|
+
Modes are mutually exclusive - you cannot mix extraction and creation methods in the same chain.
|
|
13
|
+
|
|
14
|
+
## Key Classes
|
|
15
|
+
|
|
16
|
+
- **SmartArchive** - Main class with fluent API for all operations
|
|
17
|
+
- **TarTools** - TAR-specific operations (pack/extract)
|
|
18
|
+
- **ZipTools** - ZIP-specific operations using fflate
|
|
19
|
+
- **GzipTools** - GZIP compression/decompression using fflate
|
|
20
|
+
- **Bzip2Tools** - BZIP2 decompression (extract only, no creation)
|
|
21
|
+
- **ArchiveAnalyzer** - Format detection via magic bytes
|
|
22
|
+
|
|
23
|
+
## Dependencies
|
|
24
|
+
|
|
25
|
+
- **fflate** - Pure JS compression for ZIP/GZIP (works in browser)
|
|
26
|
+
- **tar-stream** - TAR archive handling
|
|
27
|
+
- **file-type** - MIME type detection via magic bytes
|
|
28
|
+
- **@push.rocks/smartfile** - SmartFile and StreamFile classes
|
|
29
|
+
|
|
30
|
+
## API Changes (v5.0.0)
|
|
31
|
+
|
|
32
|
+
The v5.0.0 release introduced a complete API refactor:
|
|
33
|
+
|
|
34
|
+
### Old API (deprecated)
|
|
35
|
+
```typescript
|
|
36
|
+
// Old static factory methods - NO LONGER EXIST
|
|
37
|
+
await SmartArchive.fromUrl(url);
|
|
38
|
+
await SmartArchive.fromFile(path);
|
|
39
|
+
await SmartArchive.fromDirectory(path, options);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### New Fluent API
|
|
43
|
+
```typescript
|
|
44
|
+
// Current fluent builder pattern
|
|
45
|
+
await SmartArchive.create()
|
|
46
|
+
.url(url)
|
|
47
|
+
.extract(targetDir);
|
|
48
|
+
|
|
49
|
+
await SmartArchive.create()
|
|
50
|
+
.format('tar.gz')
|
|
51
|
+
.directory(path)
|
|
52
|
+
.toFile(outputPath);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Migration Notes (from v4.x)
|
|
56
|
+
|
|
57
|
+
### Smartfile v13 Changes
|
|
58
|
+
Smartfile v13 removed filesystem operations. Replacements:
|
|
17
59
|
- `smartfile.fs.ensureDir(path)` → `fsPromises.mkdir(path, { recursive: true })`
|
|
18
60
|
- `smartfile.fs.stat(path)` → `fsPromises.stat(path)`
|
|
19
61
|
- `smartfile.fs.toReadStream(path)` → `fs.createReadStream(path)`
|
|
20
|
-
- `smartfile.fs.toStringSync(path)` → `fsPromises.readFile(path, 'utf8')`
|
|
21
|
-
- `smartfile.fs.listFileTree(dir, pattern)` → custom `listFileTree()` helper
|
|
22
|
-
- `smartfile.fsStream.createReadStream(path)` → `fs.createReadStream(path)`
|
|
23
|
-
- `smartfile.fsStream.createWriteStream(path)` → `fs.createWriteStream(path)`
|
|
24
|
-
- `smartfile.memory.toFs(content, path)` → `fsPromises.writeFile(path, content)`
|
|
25
62
|
|
|
26
|
-
|
|
63
|
+
### Still using from smartfile
|
|
27
64
|
- `SmartFile` class (in-memory file representation)
|
|
28
65
|
- `StreamFile` class (streaming file handling)
|
|
29
66
|
|
|
30
|
-
|
|
31
|
-
|
|
67
|
+
## Testing
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pnpm test # Run all tests
|
|
71
|
+
tstest test/test.node+deno.ts --verbose # Run specific test
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Tests use a Verdaccio registry URL (`verdaccio.lossless.digital`) for test archives.
|
|
32
75
|
|
|
33
|
-
##
|
|
76
|
+
## Key Files
|
|
34
77
|
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
78
|
+
- `ts/classes.smartarchive.ts` - Main SmartArchive class with fluent API
|
|
79
|
+
- `ts/classes.tartools.ts` - TAR operations
|
|
80
|
+
- `ts/classes.ziptools.ts` - ZIP operations
|
|
81
|
+
- `ts/classes.gziptools.ts` - GZIP operations
|
|
82
|
+
- `ts/classes.bzip2tools.ts` - BZIP2 decompression
|
|
83
|
+
- `ts/classes.archiveanalyzer.ts` - Format detection
|
|
84
|
+
- `ts/interfaces.ts` - Type definitions
|