neozipkit 1.0.2 → 1.5.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/NEOZIP_APPNOTE.md +625 -0
- package/README.md +44 -11
- package/WHATS_NEW.md +153 -10
- package/dist/browser/ZipkitBrowser.d.ts.map +1 -1
- package/dist/browser/ZipkitBrowser.js +4 -6
- package/dist/browser/ZipkitBrowser.js.map +1 -1
- package/dist/browser/zstd-browser-shim.d.ts +17 -9
- package/dist/browser/zstd-browser-shim.d.ts.map +1 -1
- package/dist/browser/zstd-browser-shim.js +99 -21
- package/dist/browser/zstd-browser-shim.js.map +1 -1
- package/dist/browser-esm/index.js +6534 -1275
- package/dist/browser-esm/index.js.map +4 -4
- package/dist/browser-umd/index.js +6534 -1275
- package/dist/browser-umd/index.js.map +4 -4
- package/dist/browser-umd/index.min.js +6 -3
- package/dist/core/ZipCompress.d.ts +6 -0
- package/dist/core/ZipCompress.d.ts.map +1 -1
- package/dist/core/ZipCompress.js +12 -11
- package/dist/core/ZipCompress.js.map +1 -1
- package/dist/core/ZipCopy.d.ts.map +1 -1
- package/dist/core/ZipCopy.js +33 -25
- package/dist/core/ZipCopy.js.map +1 -1
- package/dist/core/ZipDecompress.d.ts.map +1 -1
- package/dist/core/ZipDecompress.js +13 -8
- package/dist/core/ZipDecompress.js.map +1 -1
- package/dist/core/ZipEntry.d.ts +24 -0
- package/dist/core/ZipEntry.d.ts.map +1 -1
- package/dist/core/ZipEntry.js +146 -14
- package/dist/core/ZipEntry.js.map +1 -1
- package/dist/core/Zipkit.d.ts +43 -11
- package/dist/core/Zipkit.d.ts.map +1 -1
- package/dist/core/Zipkit.js +132 -82
- package/dist/core/Zipkit.js.map +1 -1
- package/dist/core/components/HashCalculator.d.ts +22 -1
- package/dist/core/components/HashCalculator.d.ts.map +1 -1
- package/dist/core/components/HashCalculator.js +49 -6
- package/dist/core/components/HashCalculator.js.map +1 -1
- package/dist/core/components/Util.d.ts +3 -4
- package/dist/core/components/Util.d.ts.map +1 -1
- package/dist/core/components/Util.js +10 -8
- package/dist/core/components/Util.js.map +1 -1
- package/dist/core/constants/Headers.d.ts +2 -3
- package/dist/core/constants/Headers.d.ts.map +1 -1
- package/dist/core/constants/Headers.js +15 -5
- package/dist/core/constants/Headers.js.map +1 -1
- package/dist/core/constants/MetaPaths.d.ts +38 -0
- package/dist/core/constants/MetaPaths.d.ts.map +1 -0
- package/dist/core/constants/MetaPaths.js +79 -0
- package/dist/core/constants/MetaPaths.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +18 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/inflateZipPayload.d.ts +6 -0
- package/dist/core/inflateZipPayload.d.ts.map +1 -0
- package/dist/core/inflateZipPayload.js +28 -0
- package/dist/core/inflateZipPayload.js.map +1 -0
- package/dist/core/merkle/MerkleRoot.d.ts +109 -0
- package/dist/core/merkle/MerkleRoot.d.ts.map +1 -0
- package/dist/core/merkle/MerkleRoot.js +275 -0
- package/dist/core/merkle/MerkleRoot.js.map +1 -0
- package/dist/core/origin/OriginExtra.d.ts +43 -0
- package/dist/core/origin/OriginExtra.d.ts.map +1 -0
- package/dist/core/origin/OriginExtra.js +187 -0
- package/dist/core/origin/OriginExtra.js.map +1 -0
- package/dist/core/version.js +1 -1
- package/dist/core/zip64/Zip64.d.ts +138 -0
- package/dist/core/zip64/Zip64.d.ts.map +1 -0
- package/dist/core/zip64/Zip64.js +353 -0
- package/dist/core/zip64/Zip64.js.map +1 -0
- package/dist/node/ZipCompressNode.d.ts.map +1 -1
- package/dist/node/ZipCompressNode.js +40 -49
- package/dist/node/ZipCompressNode.js.map +1 -1
- package/dist/node/ZipCopyNode.d.ts.map +1 -1
- package/dist/node/ZipCopyNode.js +26 -26
- package/dist/node/ZipCopyNode.js.map +1 -1
- package/dist/node/ZipDecompressNode.d.ts.map +1 -1
- package/dist/node/ZipDecompressNode.js +21 -3
- package/dist/node/ZipDecompressNode.js.map +1 -1
- package/dist/node/ZipkitNode.d.ts +23 -1
- package/dist/node/ZipkitNode.d.ts.map +1 -1
- package/dist/node/ZipkitNode.js +158 -57
- package/dist/node/ZipkitNode.js.map +1 -1
- package/dist/node/ZstdNode.d.ts +14 -4
- package/dist/node/ZstdNode.d.ts.map +1 -1
- package/dist/node/ZstdNode.js +28 -4
- package/dist/node/ZstdNode.js.map +1 -1
- package/dist/node/buildZipBuffer.d.ts +49 -0
- package/dist/node/buildZipBuffer.d.ts.map +1 -0
- package/dist/node/buildZipBuffer.js +146 -0
- package/dist/node/buildZipBuffer.js.map +1 -0
- package/dist/node/index.d.ts +3 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +6 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/inflateZipPayload.d.ts +5 -0
- package/dist/node/inflateZipPayload.d.ts.map +1 -0
- package/dist/node/inflateZipPayload.js +21 -0
- package/dist/node/inflateZipPayload.js.map +1 -0
- package/dist/types/index.js +2 -2
- package/node-esm.mjs +32 -0
- package/package.json +13 -6
- package/src/browser/ZipkitBrowser.ts +4 -6
- package/src/browser/zstd-browser-shim.ts +110 -28
- package/src/core/ZipCompress.ts +20 -13
- package/src/core/ZipCopy.ts +56 -27
- package/src/core/ZipDecompress.ts +14 -8
- package/src/core/ZipEntry.ts +200 -14
- package/src/core/Zipkit.ts +189 -98
- package/src/core/components/HashCalculator.ts +58 -6
- package/src/core/components/Util.ts +16 -7
- package/src/core/constants/Headers.ts +15 -4
- package/src/core/constants/MetaPaths.ts +86 -0
- package/src/core/index.ts +17 -0
- package/src/core/inflateZipPayload.ts +27 -0
- package/src/core/merkle/MerkleRoot.ts +312 -0
- package/src/core/origin/OriginExtra.ts +209 -0
- package/src/core/version.ts +1 -1
- package/src/core/zip64/Zip64.ts +473 -0
- package/src/node/ZipCompressNode.ts +40 -49
- package/src/node/ZipCopyNode.ts +31 -29
- package/src/node/ZipDecompressNode.ts +16 -3
- package/src/node/ZipkitNode.ts +203 -72
- package/src/node/ZstdNode.ts +33 -8
- package/src/node/buildZipBuffer.ts +221 -0
- package/src/node/index.ts +7 -0
- package/src/node/inflateZipPayload.ts +19 -0
- package/src/types/index.ts +2 -2
package/dist/node/ZstdNode.js
CHANGED
|
@@ -45,9 +45,11 @@ exports.isNativeZstdAvailable = isNativeZstdAvailable;
|
|
|
45
45
|
exports.mapCompressionLevel = mapCompressionLevel;
|
|
46
46
|
exports.createCompressTransform = createCompressTransform;
|
|
47
47
|
exports.createDecompressTransform = createDecompressTransform;
|
|
48
|
+
exports.asZstdBuffer = asZstdBuffer;
|
|
48
49
|
exports.compress = compress;
|
|
49
50
|
exports.decompress = decompress;
|
|
50
51
|
exports.compressSync = compressSync;
|
|
52
|
+
exports.compressSyncAtLevel = compressSyncAtLevel;
|
|
51
53
|
exports.decompressSync = decompressSync;
|
|
52
54
|
exports.compressChunks = compressChunks;
|
|
53
55
|
exports.decompressStream = decompressStream;
|
|
@@ -87,23 +89,43 @@ function createDecompressTransform() {
|
|
|
87
89
|
assertNativeZstd();
|
|
88
90
|
return zlib.createZstdDecompress();
|
|
89
91
|
}
|
|
92
|
+
function asZstdBuffer(data) {
|
|
93
|
+
if (Buffer.isBuffer(data))
|
|
94
|
+
return data;
|
|
95
|
+
if (data instanceof ArrayBuffer)
|
|
96
|
+
return Buffer.from(data);
|
|
97
|
+
return Buffer.from(data.buffer, data.byteOffset, data.byteLength);
|
|
98
|
+
}
|
|
90
99
|
async function compress(data, level = 6) {
|
|
91
100
|
assertNativeZstd();
|
|
92
|
-
const result = await zstdCompressAsync(data, compressOptions(level));
|
|
101
|
+
const result = await zstdCompressAsync(asZstdBuffer(data), compressOptions(level));
|
|
93
102
|
return Buffer.from(result);
|
|
94
103
|
}
|
|
95
104
|
async function decompress(data) {
|
|
96
105
|
assertNativeZstd();
|
|
97
|
-
const result = await zstdDecompressAsync(data);
|
|
106
|
+
const result = await zstdDecompressAsync(asZstdBuffer(data));
|
|
98
107
|
return Buffer.from(result);
|
|
99
108
|
}
|
|
100
109
|
function compressSync(data, level = 6) {
|
|
101
110
|
assertNativeZstd();
|
|
102
|
-
return zlib.zstdCompressSync(data, compressOptions(level));
|
|
111
|
+
return zlib.zstdCompressSync(asZstdBuffer(data), compressOptions(level));
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Compress with a raw zlib zstd level (1–19), without the 1–9 kit scale.
|
|
115
|
+
* ZipWiki pack uses level 7 on this scale.
|
|
116
|
+
*/
|
|
117
|
+
function compressSyncAtLevel(data, zstdLevel) {
|
|
118
|
+
assertNativeZstd();
|
|
119
|
+
const level = Math.min(19, Math.max(1, Math.trunc(zstdLevel)));
|
|
120
|
+
return zlib.zstdCompressSync(asZstdBuffer(data), {
|
|
121
|
+
params: {
|
|
122
|
+
[zlib.constants.ZSTD_c_compressionLevel]: level,
|
|
123
|
+
},
|
|
124
|
+
});
|
|
103
125
|
}
|
|
104
126
|
function decompressSync(data) {
|
|
105
127
|
assertNativeZstd();
|
|
106
|
-
return zlib.zstdDecompressSync(data);
|
|
128
|
+
return zlib.zstdDecompressSync(asZstdBuffer(data));
|
|
107
129
|
}
|
|
108
130
|
/**
|
|
109
131
|
* Stream-compress plaintext from a chunked reader (primary path for all sizes).
|
|
@@ -163,7 +185,9 @@ exports.ZstdNode = {
|
|
|
163
185
|
compress,
|
|
164
186
|
decompress,
|
|
165
187
|
compressSync,
|
|
188
|
+
compressSyncAtLevel,
|
|
166
189
|
decompressSync,
|
|
190
|
+
asZstdBuffer,
|
|
167
191
|
compressChunks,
|
|
168
192
|
decompressStream,
|
|
169
193
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZstdNode.js","sourceRoot":"","sources":["../../src/node/ZstdNode.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASH,sDAOC;AAYD,kDAEC;AAUD,0DAGC;AAED,8DAGC;AAED,4BAIC;AAED,gCAIC;AAED,oCAGC;AAED,wCAGC;AAKD,wCAsCC;AAKD,4CAeC;
|
|
1
|
+
{"version":3,"file":"ZstdNode.js","sourceRoot":"","sources":["../../src/node/ZstdNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory and streaming ZIP writer.
|
|
3
|
+
* Zstd level is the raw zlib level (ZipWiki default 7). NeoEncrypt stays off.
|
|
4
|
+
* Caller extra blocks (ZipWiki 0x014F) are written beside optional 0x014E.
|
|
5
|
+
*/
|
|
6
|
+
export type ZipPrecompressedMember = {
|
|
7
|
+
method: number;
|
|
8
|
+
data: Buffer;
|
|
9
|
+
crc32: number;
|
|
10
|
+
uncompressedSize: number;
|
|
11
|
+
/** Complete extra-field bytes copied onto the local and central headers. */
|
|
12
|
+
extra?: Buffer;
|
|
13
|
+
};
|
|
14
|
+
export type ZipBufferMember = {
|
|
15
|
+
name: string;
|
|
16
|
+
/** Uncompressed payload. Unused as stored bytes when `precompressed` is set. */
|
|
17
|
+
data: Buffer;
|
|
18
|
+
mtime?: Date;
|
|
19
|
+
/** DOS time word. Wins over `mtime` when set together with `dosDate`. */
|
|
20
|
+
dosTime?: number;
|
|
21
|
+
dosDate?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Complete extra-field records (id, size, payload), e.g. ZipWiki 0x014F.
|
|
24
|
+
* Ignored when `precompressed.extra` is set — that blob is copied as-is.
|
|
25
|
+
*/
|
|
26
|
+
additionalExtra?: Buffer;
|
|
27
|
+
/** Write Extra Field 0x014E (SHA-256 of uncompressed `data`). */
|
|
28
|
+
useSHA256?: boolean;
|
|
29
|
+
/** 0 store, 8 deflate, 93 zstd. Default 93. Ignored when `precompressed` is set. */
|
|
30
|
+
method?: 0 | 8 | 93;
|
|
31
|
+
/** zlib zstd level or raw deflate level. Default 7. */
|
|
32
|
+
level?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Force Zip64 Extra `0x0001` on this member even when sizes fit classic fields.
|
|
35
|
+
* Pair with `forceZip64` on `buildZipBufferSync` / `writeZipFileSync` options
|
|
36
|
+
* (or set on every member) so the EOCD is Zip64 as well.
|
|
37
|
+
*/
|
|
38
|
+
forceZip64?: boolean;
|
|
39
|
+
precompressed?: ZipPrecompressedMember;
|
|
40
|
+
};
|
|
41
|
+
export type BuildZipBufferOptions = {
|
|
42
|
+
/** Force Zip64 EOCD + per-member Extra when sizes fit classic fields. */
|
|
43
|
+
forceZip64?: boolean;
|
|
44
|
+
};
|
|
45
|
+
/** Build a ZIP in one buffer. Kept for tests and atomic in-memory rewrites. */
|
|
46
|
+
export declare function buildZipBufferSync(members: ZipBufferMember[], options?: BuildZipBufferOptions): Buffer;
|
|
47
|
+
/** Stream local headers, payloads, the central directory, and the EOCD to `filePath`. */
|
|
48
|
+
export declare function writeZipFileSync(filePath: string, members: ZipBufferMember[], options?: BuildZipBufferOptions): void;
|
|
49
|
+
//# sourceMappingURL=buildZipBuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildZipBuffer.d.ts","sourceRoot":"","sources":["../../src/node/buildZipBuffer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oFAAoF;IACpF,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACpB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC,CAAC;AAqHF,MAAM,MAAM,qBAAqB,GAAG;IAClC,yEAAyE;IACzE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,MAAM,CAgBR;AAED,yFAAyF;AACzF,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAoBN"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* In-memory and streaming ZIP writer.
|
|
4
|
+
* Zstd level is the raw zlib level (ZipWiki default 7). NeoEncrypt stays off.
|
|
5
|
+
* Caller extra blocks (ZipWiki 0x014F) are written beside optional 0x014E.
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.buildZipBufferSync = buildZipBufferSync;
|
|
12
|
+
exports.writeZipFileSync = writeZipFileSync;
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const zlib_1 = require("zlib");
|
|
15
|
+
const ZipEntry_1 = __importDefault(require("../core/ZipEntry"));
|
|
16
|
+
const ZipCrypto_1 = require("../core/encryption/ZipCrypto");
|
|
17
|
+
const ZstdNode_1 = require("./ZstdNode");
|
|
18
|
+
const Zip64_1 = require("../core/zip64/Zip64");
|
|
19
|
+
function dosFromDate(date) {
|
|
20
|
+
const year = date.getFullYear();
|
|
21
|
+
const month = date.getMonth() + 1;
|
|
22
|
+
const day = date.getDate();
|
|
23
|
+
const hours = date.getHours();
|
|
24
|
+
const minutes = date.getMinutes();
|
|
25
|
+
const seconds = Math.floor(date.getSeconds() / 2);
|
|
26
|
+
const y = Math.max(0, Math.min(127, year - 1980));
|
|
27
|
+
return {
|
|
28
|
+
time: ((hours & 0x1f) << 11) | ((minutes & 0x3f) << 5) | (seconds & 0x1f),
|
|
29
|
+
date: ((y & 0x7f) << 9) | ((month & 0x0f) << 5) | (day & 0x1f),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function compressPayload(data, method, level) {
|
|
33
|
+
if (method === 0 || data.length === 0) {
|
|
34
|
+
return { method: 0, data };
|
|
35
|
+
}
|
|
36
|
+
const compressed = method === 8
|
|
37
|
+
? (0, zlib_1.deflateRawSync)(data, { level: Math.max(1, Math.min(9, level)) })
|
|
38
|
+
: (0, ZstdNode_1.compressSyncAtLevel)(data, Math.max(1, level));
|
|
39
|
+
if (compressed.length >= data.length) {
|
|
40
|
+
return { method: 0, data };
|
|
41
|
+
}
|
|
42
|
+
return { method, data: compressed };
|
|
43
|
+
}
|
|
44
|
+
function frameMembers(members, opts) {
|
|
45
|
+
const packTime = new Date();
|
|
46
|
+
const framed = [];
|
|
47
|
+
let offset = 0;
|
|
48
|
+
const forceAll = opts?.forceZip64 === true;
|
|
49
|
+
for (const member of members) {
|
|
50
|
+
const copied = member.precompressed;
|
|
51
|
+
const uncompressed = member.data ?? Buffer.alloc(0);
|
|
52
|
+
const level = member.level ?? 7;
|
|
53
|
+
const requested = member.method ?? 93;
|
|
54
|
+
const payload = copied
|
|
55
|
+
? {
|
|
56
|
+
method: copied.method,
|
|
57
|
+
data: copied.data,
|
|
58
|
+
uncompressedSize: copied.uncompressedSize,
|
|
59
|
+
}
|
|
60
|
+
: {
|
|
61
|
+
...compressPayload(uncompressed, requested, level),
|
|
62
|
+
uncompressedSize: uncompressed.length,
|
|
63
|
+
};
|
|
64
|
+
const crc = copied ? copied.crc32 >>> 0 : (0, ZipCrypto_1.crc32)(uncompressed) >>> 0;
|
|
65
|
+
const extra = copied?.extra ?? member.additionalExtra;
|
|
66
|
+
const dos = member.dosTime !== undefined && member.dosDate !== undefined
|
|
67
|
+
? { time: member.dosTime, date: member.dosDate }
|
|
68
|
+
: dosFromDate(member.mtime ?? packTime);
|
|
69
|
+
const entry = new ZipEntry_1.default(member.name, null, false);
|
|
70
|
+
entry.bitFlags = 0;
|
|
71
|
+
entry.emitUnicodePath = false;
|
|
72
|
+
entry.isUpdated = true;
|
|
73
|
+
entry.filename = member.name;
|
|
74
|
+
entry.cmpMethod = payload.method;
|
|
75
|
+
entry.crc = crc;
|
|
76
|
+
entry.compressedSize = payload.data.length;
|
|
77
|
+
entry.uncompressedSize = payload.uncompressedSize;
|
|
78
|
+
entry.timeDateDOS = ((dos.date & 0xffff) << 16) | (dos.time & 0xffff);
|
|
79
|
+
entry.localHdrOffset = offset;
|
|
80
|
+
entry.forceZip64 = forceAll || member.forceZip64 === true;
|
|
81
|
+
(0, Zip64_1.assertBufferAllowsEntryZip64)(entry.uncompressedSize, entry.compressedSize, entry.localHdrOffset);
|
|
82
|
+
if (!copied && member.useSHA256 === true) {
|
|
83
|
+
entry.sha256 = (0, ZipCrypto_1.sha256)(uncompressed);
|
|
84
|
+
}
|
|
85
|
+
if (extra && extra.length > 0) {
|
|
86
|
+
entry.additionalExtra = extra;
|
|
87
|
+
}
|
|
88
|
+
const local = entry.createLocalHdr();
|
|
89
|
+
const central = entry.centralDirEntry();
|
|
90
|
+
framed.push({ local, payload: payload.data, central });
|
|
91
|
+
offset += local.length + payload.data.length;
|
|
92
|
+
}
|
|
93
|
+
return framed;
|
|
94
|
+
}
|
|
95
|
+
function eocd(entryCount, centralSize, centralOffset, forceZip64) {
|
|
96
|
+
return (0, Zip64_1.buildEndRecords)({
|
|
97
|
+
totalEntries: entryCount,
|
|
98
|
+
centralDirSize: centralSize,
|
|
99
|
+
centralDirOffset: centralOffset,
|
|
100
|
+
zip64EocdOffset: centralOffset + centralSize,
|
|
101
|
+
allowSizeOffsetZip64: false,
|
|
102
|
+
forceZip64: forceZip64 === true,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/** Build a ZIP in one buffer. Kept for tests and atomic in-memory rewrites. */
|
|
106
|
+
function buildZipBufferSync(members, options) {
|
|
107
|
+
const forceZip64 = options?.forceZip64 === true;
|
|
108
|
+
const framed = frameMembers(members, { forceZip64 });
|
|
109
|
+
const parts = [];
|
|
110
|
+
let centralSize = 0;
|
|
111
|
+
let payloadBytes = 0;
|
|
112
|
+
for (const part of framed) {
|
|
113
|
+
parts.push(part.local, part.payload);
|
|
114
|
+
payloadBytes += part.local.length + part.payload.length;
|
|
115
|
+
}
|
|
116
|
+
for (const part of framed) {
|
|
117
|
+
parts.push(part.central);
|
|
118
|
+
centralSize += part.central.length;
|
|
119
|
+
}
|
|
120
|
+
parts.push(eocd(framed.length, centralSize, payloadBytes, forceZip64));
|
|
121
|
+
return Buffer.concat(parts);
|
|
122
|
+
}
|
|
123
|
+
/** Stream local headers, payloads, the central directory, and the EOCD to `filePath`. */
|
|
124
|
+
function writeZipFileSync(filePath, members, options) {
|
|
125
|
+
const forceZip64 = options?.forceZip64 === true;
|
|
126
|
+
const framed = frameMembers(members, { forceZip64 });
|
|
127
|
+
const fd = (0, fs_1.openSync)(filePath, 'w');
|
|
128
|
+
try {
|
|
129
|
+
let payloadBytes = 0;
|
|
130
|
+
let centralSize = 0;
|
|
131
|
+
for (const part of framed) {
|
|
132
|
+
(0, fs_1.writeSync)(fd, part.local);
|
|
133
|
+
(0, fs_1.writeSync)(fd, part.payload);
|
|
134
|
+
payloadBytes += part.local.length + part.payload.length;
|
|
135
|
+
}
|
|
136
|
+
for (const part of framed) {
|
|
137
|
+
(0, fs_1.writeSync)(fd, part.central);
|
|
138
|
+
centralSize += part.central.length;
|
|
139
|
+
}
|
|
140
|
+
(0, fs_1.writeSync)(fd, eocd(framed.length, centralSize, payloadBytes, forceZip64));
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
(0, fs_1.closeSync)(fd);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=buildZipBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildZipBuffer.js","sourceRoot":"","sources":["../../src/node/buildZipBuffer.ts"],"names":[],"mappings":"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"}
|
package/dist/node/index.d.ts
CHANGED
|
@@ -20,6 +20,9 @@ export { ZstdNode, isNativeZstdAvailable } from './ZstdNode';
|
|
|
20
20
|
export { LegacyZstd, LEGACY_WASM_ZSTD_PADDING, parseZstdFrameContentSize, looksLikeLegacyWasmZstd, detectLegacyWasmZstd, repairLegacyWasmZstdPlaintext, } from './LegacyZstd';
|
|
21
21
|
export type { LegacyZstdDetectResult, LegacyZstdConfidence, DetectLegacyZstdOptions } from './LegacyZstd';
|
|
22
22
|
export { ZipCopyNode } from './ZipCopyNode';
|
|
23
|
+
export { buildZipBufferSync, writeZipFileSync } from './buildZipBuffer';
|
|
24
|
+
export type { ZipBufferMember, ZipPrecompressedMember, BuildZipBufferOptions, } from './buildZipBuffer';
|
|
25
|
+
export { inflateZipPayloadSync } from './inflateZipPayload';
|
|
23
26
|
export type { CopyOptions, CopyResult, CopyEntriesOnlyResult, FinalizeZipOptions, } from './ZipCopyNode';
|
|
24
27
|
export declare const PlatformUtils: {
|
|
25
28
|
isBrowser: boolean;
|
package/dist/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,SAAS,CAAC;AACxB,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;AAGlB,OAAO,iBAAiB,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAErD,eAAe,iBAAiB,CAAC;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAG1G,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,aAAa;;;CAKzB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,SAAS,CAAC;AACxB,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;AAGlB,OAAO,iBAAiB,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAErD,eAAe,iBAAiB,CAAC;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAG1G,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxE,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EACV,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,aAAa;;;CAKzB,CAAC"}
|
package/dist/node/index.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.PlatformUtils = exports.ZipCopyNode = exports.repairLegacyWasmZstdPlaintext = exports.detectLegacyWasmZstd = exports.looksLikeLegacyWasmZstd = exports.parseZstdFrameContentSize = exports.LEGACY_WASM_ZSTD_PADDING = exports.LegacyZstd = exports.isNativeZstdAvailable = exports.ZstdNode = exports.ZipDecompressNode = exports.ZipCompressNode = exports.ZipkitNode = exports.Zipkit = void 0;
|
|
29
|
+
exports.PlatformUtils = exports.inflateZipPayloadSync = exports.writeZipFileSync = exports.buildZipBufferSync = exports.ZipCopyNode = exports.repairLegacyWasmZstdPlaintext = exports.detectLegacyWasmZstd = exports.looksLikeLegacyWasmZstd = exports.parseZstdFrameContentSize = exports.LEGACY_WASM_ZSTD_PADDING = exports.LegacyZstd = exports.isNativeZstdAvailable = exports.ZstdNode = exports.ZipDecompressNode = exports.ZipCompressNode = exports.ZipkitNode = exports.Zipkit = void 0;
|
|
30
30
|
// Core ZIP functionality (re-exported from core module, but NOT the default)
|
|
31
31
|
__exportStar(require("../core"), exports);
|
|
32
32
|
const core_1 = __importDefault(require("../core"));
|
|
@@ -54,6 +54,11 @@ Object.defineProperty(exports, "repairLegacyWasmZstdPlaintext", { enumerable: tr
|
|
|
54
54
|
// Efficient ZIP copying using ZipEntry directly
|
|
55
55
|
var ZipCopyNode_1 = require("./ZipCopyNode");
|
|
56
56
|
Object.defineProperty(exports, "ZipCopyNode", { enumerable: true, get: function () { return ZipCopyNode_1.ZipCopyNode; } });
|
|
57
|
+
var buildZipBuffer_1 = require("./buildZipBuffer");
|
|
58
|
+
Object.defineProperty(exports, "buildZipBufferSync", { enumerable: true, get: function () { return buildZipBuffer_1.buildZipBufferSync; } });
|
|
59
|
+
Object.defineProperty(exports, "writeZipFileSync", { enumerable: true, get: function () { return buildZipBuffer_1.writeZipFileSync; } });
|
|
60
|
+
var inflateZipPayload_1 = require("./inflateZipPayload");
|
|
61
|
+
Object.defineProperty(exports, "inflateZipPayloadSync", { enumerable: true, get: function () { return inflateZipPayload_1.inflateZipPayloadSync; } });
|
|
57
62
|
// Platform detection
|
|
58
63
|
exports.PlatformUtils = {
|
|
59
64
|
// Browser detection
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;AAEH,6EAA6E;AAC7E,0CAAwB;AACxB,mDAA6B;AACpB,iBADF,cAAM,CACE;AAEf,+FAA+F;AAC/F,8DAA6C;AAC7C,2CAAqD;AAA5C,yHAAA,OAAO,OAAc;AAC9B,mFAAmF;AACnF,kBAAe,oBAAiB,CAAC;AAEjC,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,uCAA6D;AAApD,oGAAA,QAAQ,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AACxC,2CAOsB;AANpB,wGAAA,UAAU,OAAA;AACV,sHAAA,wBAAwB,OAAA;AACxB,uHAAA,yBAAyB,OAAA;AACzB,qHAAA,uBAAuB,OAAA;AACvB,kHAAA,oBAAoB,OAAA;AACpB,2HAAA,6BAA6B,OAAA;AAI/B,gDAAgD;AAChD,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;AAEH,6EAA6E;AAC7E,0CAAwB;AACxB,mDAA6B;AACpB,iBADF,cAAM,CACE;AAEf,+FAA+F;AAC/F,8DAA6C;AAC7C,2CAAqD;AAA5C,yHAAA,OAAO,OAAc;AAC9B,mFAAmF;AACnF,kBAAe,oBAAiB,CAAC;AAEjC,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,uCAA6D;AAApD,oGAAA,QAAQ,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AACxC,2CAOsB;AANpB,wGAAA,UAAU,OAAA;AACV,sHAAA,wBAAwB,OAAA;AACxB,uHAAA,yBAAyB,OAAA;AACzB,qHAAA,uBAAuB,OAAA;AACvB,kHAAA,oBAAoB,OAAA;AACpB,2HAAA,6BAA6B,OAAA;AAI/B,gDAAgD;AAChD,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,mDAAwE;AAA/D,oHAAA,kBAAkB,OAAA;AAAE,kHAAA,gBAAgB,OAAA;AAM7C,yDAA4D;AAAnD,0HAAA,qBAAqB,OAAA;AAQ9B,qBAAqB;AACR,QAAA,aAAa,GAAG;IAC3B,oBAAoB;IACpB,SAAS,EAAE,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW;IAC3E,oBAAoB;IACpB,MAAM,EAAE,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI;CACpF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inflateZipPayload.d.ts","sourceRoot":"","sources":["../../src/node/inflateZipPayload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAWhF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Synchronous inflate for Node readers (store, raw deflate, native zstd).
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.inflateZipPayloadSync = inflateZipPayloadSync;
|
|
7
|
+
const zlib_1 = require("zlib");
|
|
8
|
+
const ZstdNode_1 = require("./ZstdNode");
|
|
9
|
+
function inflateZipPayloadSync(method, compressed) {
|
|
10
|
+
if (method === 0) {
|
|
11
|
+
return Buffer.from(compressed);
|
|
12
|
+
}
|
|
13
|
+
if (method === 8) {
|
|
14
|
+
return (0, zlib_1.inflateRawSync)(compressed);
|
|
15
|
+
}
|
|
16
|
+
if (method === 93) {
|
|
17
|
+
return (0, ZstdNode_1.decompressSync)(compressed);
|
|
18
|
+
}
|
|
19
|
+
throw new Error(`unsupported compression method ${method}`);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=inflateZipPayload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inflateZipPayload.js","sourceRoot":"","sources":["../../src/node/inflateZipPayload.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAKH,sDAWC;AAdD,+BAAsC;AACtC,yCAA4C;AAE5C,SAAgB,qBAAqB,CAAC,MAAc,EAAE,UAAkB;IACtE,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,IAAA,qBAAc,EAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,OAAO,IAAA,yBAAc,EAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
package/dist/types/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.NEOZIPKIT_INFO = void 0;
|
|
7
7
|
exports.NEOZIPKIT_INFO = {
|
|
8
|
-
version: '
|
|
9
|
-
releaseDate: '2026-
|
|
8
|
+
version: '1.5.0',
|
|
9
|
+
releaseDate: '2026-10-25'
|
|
10
10
|
};
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/node-esm.mjs
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ESM entry for `neozipkit/node`.
|
|
3
|
+
* The compiled kit is CommonJS; Node does not surface its getter exports as named ESM imports.
|
|
4
|
+
*/
|
|
5
|
+
import { createRequire } from "node:module";
|
|
6
|
+
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
const kit = require("./dist/node/index.js");
|
|
9
|
+
|
|
10
|
+
export const ZipkitNode = kit.ZipkitNode;
|
|
11
|
+
export const Zipkit = kit.Zipkit;
|
|
12
|
+
export const buildZipBufferSync = kit.buildZipBufferSync;
|
|
13
|
+
export const writeZipFileSync = kit.writeZipFileSync;
|
|
14
|
+
export const inflateZipPayloadSync = kit.inflateZipPayloadSync;
|
|
15
|
+
export const ZipCopyNode = kit.ZipCopyNode;
|
|
16
|
+
export const crc32 = kit.crc32;
|
|
17
|
+
export const sha256 = kit.sha256;
|
|
18
|
+
export const isMetaInfPath = kit.isMetaInfPath;
|
|
19
|
+
export const computeArchiveMerkleRoot = kit.computeArchiveMerkleRoot;
|
|
20
|
+
export const computeMerkleRootV0FromDigests = kit.computeMerkleRootV0FromDigests;
|
|
21
|
+
export const computeMerkleRootV1FromContents = kit.computeMerkleRootV1FromContents;
|
|
22
|
+
export const computeMerkleRootV1FromLeaves = kit.computeMerkleRootV1FromLeaves;
|
|
23
|
+
export const contentDigest = kit.contentDigest;
|
|
24
|
+
export const leafHashV0 = kit.leafHashV0;
|
|
25
|
+
export const leafHashV1 = kit.leafHashV1;
|
|
26
|
+
export const matchMerkleRoot = kit.matchMerkleRoot;
|
|
27
|
+
export const merkleRootFromLeaves = kit.merkleRootFromLeaves;
|
|
28
|
+
export const normalizeMerklePath = kit.normalizeMerklePath;
|
|
29
|
+
export const parentHash = kit.parentHash;
|
|
30
|
+
export const ZstdNode = kit.ZstdNode;
|
|
31
|
+
export const isNativeZstdAvailable = kit.isNativeZstdAvailable;
|
|
32
|
+
export default kit.default ?? kit.ZipkitNode;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "neozipkit",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "NeoZipKit - Advanced ZIP file creation, compression, and encryption",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -19,7 +19,10 @@
|
|
|
19
19
|
},
|
|
20
20
|
"./browser": {
|
|
21
21
|
"types": "./dist/browser.d.ts",
|
|
22
|
-
"
|
|
22
|
+
"browser": "./dist/browser-esm/index.js",
|
|
23
|
+
"import": "./dist/browser-esm/index.js",
|
|
24
|
+
"require": "./dist/browser.js",
|
|
25
|
+
"default": "./dist/browser-esm/index.js"
|
|
23
26
|
},
|
|
24
27
|
"./browser/*": {
|
|
25
28
|
"types": "./dist/browser/*.d.ts",
|
|
@@ -36,9 +39,9 @@
|
|
|
36
39
|
},
|
|
37
40
|
"./node": {
|
|
38
41
|
"types": "./dist/node/index.d.ts",
|
|
39
|
-
"import": "./
|
|
42
|
+
"import": "./node-esm.mjs",
|
|
40
43
|
"require": "./dist/node/index.js",
|
|
41
|
-
"default": "./
|
|
44
|
+
"default": "./node-esm.mjs"
|
|
42
45
|
},
|
|
43
46
|
"./node/*": {
|
|
44
47
|
"types": "./dist/node/*.d.ts",
|
|
@@ -88,8 +91,10 @@
|
|
|
88
91
|
"files": [
|
|
89
92
|
"dist/",
|
|
90
93
|
"src/",
|
|
94
|
+
"node-esm.mjs",
|
|
91
95
|
"README.md",
|
|
92
|
-
"WHATS_NEW.md"
|
|
96
|
+
"WHATS_NEW.md",
|
|
97
|
+
"NEOZIP_APPNOTE.md"
|
|
93
98
|
],
|
|
94
99
|
"scripts": {
|
|
95
100
|
"clean": "node scripts/clean.js",
|
|
@@ -113,9 +118,11 @@
|
|
|
113
118
|
"test:all": "npm run test:unit && npm run test:examples",
|
|
114
119
|
"test:watch": "jest --watch",
|
|
115
120
|
"test:coverage": "jest --coverage",
|
|
121
|
+
"test:zip64": "npx ts-node examples/create-zip64.ts",
|
|
116
122
|
"audit": "pnpm audit",
|
|
117
123
|
"publish:dry-run": "npm publish --access public --dry-run",
|
|
118
124
|
"example:create-zip": "npx ts-node examples/create-zip.ts",
|
|
125
|
+
"example:create-zip64": "npx ts-node examples/create-zip64.ts",
|
|
119
126
|
"example:extract-zip": "npx ts-node examples/extract-zip.ts",
|
|
120
127
|
"example:list-zip": "npx ts-node examples/list-zip.ts",
|
|
121
128
|
"example:copy-zip": "npx ts-node examples/copy-zip.ts",
|
|
@@ -156,12 +163,12 @@
|
|
|
156
163
|
"@types/uuid": "^9.0.0",
|
|
157
164
|
"esbuild": "^0.25.0",
|
|
158
165
|
"jest": "29.7.0",
|
|
159
|
-
"minimatch": "^10.2.1",
|
|
160
166
|
"ts-jest": "29.1.2",
|
|
161
167
|
"typescript": "^5.0.0"
|
|
162
168
|
},
|
|
163
169
|
"dependencies": {
|
|
164
170
|
"buffer": "^6.0.3",
|
|
171
|
+
"minimatch": "^10.2.1",
|
|
165
172
|
"pako": "^2.1.0",
|
|
166
173
|
"uuid": "^9.0.0"
|
|
167
174
|
}
|
|
@@ -8,7 +8,7 @@ import ZipEntry from '../core/ZipEntry';
|
|
|
8
8
|
import { ZipCompress } from '../core/ZipCompress';
|
|
9
9
|
import Errors from '../core/constants/Errors';
|
|
10
10
|
import * as Headers from '../core/constants/Headers';
|
|
11
|
-
import {
|
|
11
|
+
import { isMetaInfPath } from '../core/constants/MetaPaths';
|
|
12
12
|
import { sha256, crc32 } from '../core/encryption/ZipCrypto';
|
|
13
13
|
import { DATATYPE, getTypeOf } from '../core/components/Util';
|
|
14
14
|
import type { FileData } from '../types';
|
|
@@ -172,7 +172,7 @@ export default class ZipkitBrowser extends Zipkit {
|
|
|
172
172
|
for (const entry of zipEntries) {
|
|
173
173
|
if (!entry.isUpdated) {
|
|
174
174
|
// Check for META-INF metadata files even in copy mode
|
|
175
|
-
if (entry.filename
|
|
175
|
+
if (isMetaInfPath(entry.filename || '')) {
|
|
176
176
|
// Force this entry to be processed with special handling instead of copied
|
|
177
177
|
entry.isUpdated = true;
|
|
178
178
|
// Don't continue here - let it fall through to special handling below
|
|
@@ -207,7 +207,7 @@ export default class ZipkitBrowser extends Zipkit {
|
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
// Special handling for META-INF metadata files - store uncompressed with CRC-32
|
|
210
|
-
if (entry.filename
|
|
210
|
+
if (isMetaInfPath(entry.filename || '')) {
|
|
211
211
|
// For metadata files, use STORED compression (no compression)
|
|
212
212
|
const buffer = Buffer.from(fileBuffer);
|
|
213
213
|
|
|
@@ -266,9 +266,7 @@ export default class ZipkitBrowser extends Zipkit {
|
|
|
266
266
|
* @returns boolean - True if the file is a metadata file
|
|
267
267
|
*/
|
|
268
268
|
private isMetadataFile(filename: string): boolean {
|
|
269
|
-
return filename
|
|
270
|
-
filename === TIMESTAMP_METADATA ||
|
|
271
|
-
filename === TOKENIZED_METADATA;
|
|
269
|
+
return isMetaInfPath(filename);
|
|
272
270
|
}
|
|
273
271
|
|
|
274
272
|
// --------------------------------------
|