neozipkit 1.0.5 → 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.
Files changed (94) hide show
  1. package/NEOZIP_APPNOTE.md +116 -18
  2. package/README.md +38 -8
  3. package/WHATS_NEW.md +111 -0
  4. package/dist/browser/zstd-browser-shim.d.ts +17 -9
  5. package/dist/browser/zstd-browser-shim.d.ts.map +1 -1
  6. package/dist/browser/zstd-browser-shim.js +99 -21
  7. package/dist/browser/zstd-browser-shim.js.map +1 -1
  8. package/dist/browser-esm/index.js +6178 -1261
  9. package/dist/browser-esm/index.js.map +4 -4
  10. package/dist/browser-umd/index.js +6178 -1261
  11. package/dist/browser-umd/index.js.map +4 -4
  12. package/dist/browser-umd/index.min.js +6 -3
  13. package/dist/core/ZipCompress.d.ts +6 -0
  14. package/dist/core/ZipCompress.d.ts.map +1 -1
  15. package/dist/core/ZipCompress.js.map +1 -1
  16. package/dist/core/ZipCopy.d.ts.map +1 -1
  17. package/dist/core/ZipCopy.js +33 -25
  18. package/dist/core/ZipCopy.js.map +1 -1
  19. package/dist/core/ZipEntry.d.ts +18 -0
  20. package/dist/core/ZipEntry.d.ts.map +1 -1
  21. package/dist/core/ZipEntry.js +139 -13
  22. package/dist/core/ZipEntry.js.map +1 -1
  23. package/dist/core/Zipkit.d.ts.map +1 -1
  24. package/dist/core/Zipkit.js +26 -19
  25. package/dist/core/Zipkit.js.map +1 -1
  26. package/dist/core/constants/Headers.d.ts +1 -0
  27. package/dist/core/constants/Headers.d.ts.map +1 -1
  28. package/dist/core/constants/Headers.js +1 -0
  29. package/dist/core/constants/Headers.js.map +1 -1
  30. package/dist/core/index.d.ts +3 -0
  31. package/dist/core/index.d.ts.map +1 -1
  32. package/dist/core/index.js +5 -1
  33. package/dist/core/index.js.map +1 -1
  34. package/dist/core/inflateZipPayload.d.ts +6 -0
  35. package/dist/core/inflateZipPayload.d.ts.map +1 -0
  36. package/dist/core/inflateZipPayload.js +28 -0
  37. package/dist/core/inflateZipPayload.js.map +1 -0
  38. package/dist/core/origin/OriginExtra.d.ts +43 -0
  39. package/dist/core/origin/OriginExtra.d.ts.map +1 -0
  40. package/dist/core/origin/OriginExtra.js +187 -0
  41. package/dist/core/origin/OriginExtra.js.map +1 -0
  42. package/dist/core/version.js +1 -1
  43. package/dist/core/zip64/Zip64.d.ts +138 -0
  44. package/dist/core/zip64/Zip64.d.ts.map +1 -0
  45. package/dist/core/zip64/Zip64.js +353 -0
  46. package/dist/core/zip64/Zip64.js.map +1 -0
  47. package/dist/node/ZipCopyNode.d.ts.map +1 -1
  48. package/dist/node/ZipCopyNode.js +26 -26
  49. package/dist/node/ZipCopyNode.js.map +1 -1
  50. package/dist/node/ZipDecompressNode.d.ts.map +1 -1
  51. package/dist/node/ZipDecompressNode.js +8 -6
  52. package/dist/node/ZipDecompressNode.js.map +1 -1
  53. package/dist/node/ZipkitNode.d.ts +14 -1
  54. package/dist/node/ZipkitNode.d.ts.map +1 -1
  55. package/dist/node/ZipkitNode.js +91 -53
  56. package/dist/node/ZipkitNode.js.map +1 -1
  57. package/dist/node/ZstdNode.d.ts +14 -4
  58. package/dist/node/ZstdNode.d.ts.map +1 -1
  59. package/dist/node/ZstdNode.js +28 -4
  60. package/dist/node/ZstdNode.js.map +1 -1
  61. package/dist/node/buildZipBuffer.d.ts +49 -0
  62. package/dist/node/buildZipBuffer.d.ts.map +1 -0
  63. package/dist/node/buildZipBuffer.js +146 -0
  64. package/dist/node/buildZipBuffer.js.map +1 -0
  65. package/dist/node/index.d.ts +3 -0
  66. package/dist/node/index.d.ts.map +1 -1
  67. package/dist/node/index.js +6 -1
  68. package/dist/node/index.js.map +1 -1
  69. package/dist/node/inflateZipPayload.d.ts +5 -0
  70. package/dist/node/inflateZipPayload.d.ts.map +1 -0
  71. package/dist/node/inflateZipPayload.js +21 -0
  72. package/dist/node/inflateZipPayload.js.map +1 -0
  73. package/dist/types/index.js +2 -2
  74. package/node-esm.mjs +32 -0
  75. package/package.json +11 -5
  76. package/src/browser/zstd-browser-shim.ts +110 -28
  77. package/src/core/ZipCompress.ts +6 -0
  78. package/src/core/ZipCopy.ts +56 -27
  79. package/src/core/ZipEntry.ts +192 -13
  80. package/src/core/Zipkit.ts +40 -22
  81. package/src/core/constants/Headers.ts +1 -0
  82. package/src/core/index.ts +3 -0
  83. package/src/core/inflateZipPayload.ts +27 -0
  84. package/src/core/origin/OriginExtra.ts +209 -0
  85. package/src/core/version.ts +1 -1
  86. package/src/core/zip64/Zip64.ts +473 -0
  87. package/src/node/ZipCopyNode.ts +31 -29
  88. package/src/node/ZipDecompressNode.ts +6 -5
  89. package/src/node/ZipkitNode.ts +121 -68
  90. package/src/node/ZstdNode.ts +33 -8
  91. package/src/node/buildZipBuffer.ts +221 -0
  92. package/src/node/index.ts +7 -0
  93. package/src/node/inflateZipPayload.ts +19 -0
  94. package/src/types/index.ts +2 -2
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ // ======================================
3
+ // OriginExtra.ts — NeoZip Extra Field 0x014F (original locator)
4
+ // Copyright (c) 2026 NeoWare, Inc. All rights reserved.
5
+ // ======================================
6
+ // APPNOTE §7.1.1 / ZipWiki §6.7 — v1 TLV (URI, CRC-32, size, mtime, SHA-256).
7
+ // The kit stores opaque caller extras on ZipEntry.additionalExtra; these helpers
8
+ // build and parse the 0x014F wire form.
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ORIGIN_TAG = exports.ORIGIN_URI_MAX_BYTES = exports.ORIGIN_EXTRA_VERSION = void 0;
11
+ exports.originLocatorPresent = originLocatorPresent;
12
+ exports.originCrc32Of = originCrc32Of;
13
+ exports.originSha256Of = originSha256Of;
14
+ exports.unixTimeSeconds = unixTimeSeconds;
15
+ exports.makeOriginExtra = makeOriginExtra;
16
+ exports.parseOriginFromExtra = parseOriginFromExtra;
17
+ exports.parseOriginFromEntry = parseOriginFromEntry;
18
+ const Headers_1 = require("../constants/Headers");
19
+ const ZipCrypto_1 = require("../encryption/ZipCrypto");
20
+ /** Payload version byte. Stays 0x01 until first release. */
21
+ exports.ORIGIN_EXTRA_VERSION = 0x01;
22
+ /** Soft cap on URI byte length (well under uint16 extra size). */
23
+ exports.ORIGIN_URI_MAX_BYTES = 2048;
24
+ /** Registered v1 TLV tags. Unknown tags are skipped (forward compatible). */
25
+ exports.ORIGIN_TAG = {
26
+ URI: 0x01,
27
+ CRC32: 0x02,
28
+ SIZE: 0x03,
29
+ MTIME: 0x04,
30
+ SHA256: 0x05,
31
+ };
32
+ function originSha256Bytes(value) {
33
+ const buf = typeof value === 'string' ? Buffer.from(value, 'hex') : value;
34
+ if (buf.length !== 32) {
35
+ throw new Error('0x014F sha256 must be 32 bytes');
36
+ }
37
+ return buf;
38
+ }
39
+ function tlv(tag, value) {
40
+ const rec = Buffer.alloc(3 + value.length);
41
+ rec.writeUInt8(tag, 0);
42
+ rec.writeUInt16LE(value.length, 1);
43
+ value.copy(rec, 3);
44
+ return rec;
45
+ }
46
+ function assertInteger(name, value) {
47
+ if (!Number.isFinite(value) || !Number.isInteger(value)) {
48
+ throw new Error(`0x014F ${name} must be an integer`);
49
+ }
50
+ }
51
+ function originLocatorPresent(loc) {
52
+ if (!loc)
53
+ return false;
54
+ return ((typeof loc.uri === 'string' && loc.uri.length > 0) ||
55
+ loc.crc32 !== undefined ||
56
+ loc.size !== undefined ||
57
+ loc.mtime !== undefined ||
58
+ loc.sha256 !== undefined);
59
+ }
60
+ /** ZIP/IEEE CRC-32 of uncompressed original bytes. */
61
+ function originCrc32Of(buf) {
62
+ return (0, ZipCrypto_1.crc32)(buf) >>> 0;
63
+ }
64
+ /** SHA-256 of uncompressed original bytes (32-byte Buffer). */
65
+ function originSha256Of(buf) {
66
+ return Buffer.from((0, ZipCrypto_1.sha256)(buf), 'hex');
67
+ }
68
+ /** Truncate a Date to Unix seconds (UTC). */
69
+ function unixTimeSeconds(date) {
70
+ return Math.floor(date.getTime() / 1000);
71
+ }
72
+ /**
73
+ * Build Extra Field 0x014F (v1 TLV). Throws if no attribute is present,
74
+ * if URI is empty when provided, or if URI exceeds max bytes.
75
+ */
76
+ function makeOriginExtra(loc) {
77
+ const records = [];
78
+ const uri = loc.uri?.trim();
79
+ if (uri !== undefined && uri.length === 0) {
80
+ throw new Error('0x014F URI must be non-empty when present');
81
+ }
82
+ if (uri) {
83
+ const uriBuf = Buffer.from(uri, 'utf8');
84
+ if (uriBuf.length > exports.ORIGIN_URI_MAX_BYTES) {
85
+ throw new Error(`0x014F URI exceeds ${exports.ORIGIN_URI_MAX_BYTES} bytes (${uriBuf.length})`);
86
+ }
87
+ records.push(tlv(exports.ORIGIN_TAG.URI, uriBuf));
88
+ }
89
+ if (loc.crc32 !== undefined) {
90
+ assertInteger('crc32', loc.crc32);
91
+ const b = Buffer.alloc(4);
92
+ b.writeUInt32LE(loc.crc32 >>> 0, 0);
93
+ records.push(tlv(exports.ORIGIN_TAG.CRC32, b));
94
+ }
95
+ if (loc.size !== undefined) {
96
+ assertInteger('size', loc.size);
97
+ if (loc.size < 0) {
98
+ throw new Error('0x014F size must be >= 0');
99
+ }
100
+ const b = Buffer.alloc(8);
101
+ b.writeBigUInt64LE(BigInt(loc.size), 0);
102
+ records.push(tlv(exports.ORIGIN_TAG.SIZE, b));
103
+ }
104
+ if (loc.mtime !== undefined) {
105
+ assertInteger('mtime', loc.mtime);
106
+ const b = Buffer.alloc(8);
107
+ b.writeBigInt64LE(BigInt(loc.mtime), 0);
108
+ records.push(tlv(exports.ORIGIN_TAG.MTIME, b));
109
+ }
110
+ if (loc.sha256 !== undefined) {
111
+ records.push(tlv(exports.ORIGIN_TAG.SHA256, originSha256Bytes(loc.sha256)));
112
+ }
113
+ if (records.length === 0) {
114
+ throw new Error('0x014F requires at least one attribute');
115
+ }
116
+ const dataSize = 1 + records.reduce((n, r) => n + r.length, 0);
117
+ const extra = Buffer.alloc(4 + dataSize);
118
+ extra.writeUInt16LE(Headers_1.HDR_ID.ORIGIN, 0);
119
+ extra.writeUInt16LE(dataSize, 2);
120
+ extra.writeUInt8(exports.ORIGIN_EXTRA_VERSION, 4);
121
+ let off = 5;
122
+ for (const rec of records) {
123
+ rec.copy(extra, off);
124
+ off += rec.length;
125
+ }
126
+ return extra;
127
+ }
128
+ function parseOriginTlv(data) {
129
+ const loc = {};
130
+ let i = 0;
131
+ while (i + 3 <= data.length) {
132
+ const tag = data.readUInt8(i);
133
+ const len = data.readUInt16LE(i + 1);
134
+ i += 3;
135
+ if (i + len > data.length)
136
+ break;
137
+ const value = data.subarray(i, i + len);
138
+ i += len;
139
+ if (tag === exports.ORIGIN_TAG.URI && len > 0) {
140
+ const u = value.toString('utf8');
141
+ if (u.length > 0)
142
+ loc.uri = u;
143
+ }
144
+ else if (tag === exports.ORIGIN_TAG.CRC32 && len === 4) {
145
+ loc.crc32 = value.readUInt32LE(0) >>> 0;
146
+ }
147
+ else if (tag === exports.ORIGIN_TAG.SIZE && len === 8) {
148
+ loc.size = Number(value.readBigUInt64LE(0));
149
+ }
150
+ else if (tag === exports.ORIGIN_TAG.MTIME && len === 8) {
151
+ loc.mtime = Number(value.readBigInt64LE(0));
152
+ }
153
+ else if (tag === exports.ORIGIN_TAG.SHA256 && len === 32) {
154
+ loc.sha256 = Buffer.from(value);
155
+ }
156
+ }
157
+ return originLocatorPresent(loc) ? loc : null;
158
+ }
159
+ /** Walk a ZIP Extra Field blob for NeoZip 0x014F (v1 TLV). */
160
+ function parseOriginFromExtra(extra) {
161
+ if (!extra || extra.length < 4)
162
+ return null;
163
+ let i = 0;
164
+ while (i + 4 <= extra.length) {
165
+ const id = extra.readUInt16LE(i);
166
+ const size = extra.readUInt16LE(i + 2);
167
+ i += 4;
168
+ if (i + size > extra.length)
169
+ break;
170
+ if (id === Headers_1.HDR_ID.ORIGIN && size >= 1) {
171
+ const version = extra.readUInt8(i);
172
+ const payload = extra.subarray(i + 1, i + size);
173
+ if (version === exports.ORIGIN_EXTRA_VERSION) {
174
+ const loc = parseOriginTlv(payload);
175
+ if (loc)
176
+ return loc;
177
+ }
178
+ }
179
+ i += size;
180
+ }
181
+ return null;
182
+ }
183
+ /** Read origin locator from a ZipEntry's preserved caller extras. */
184
+ function parseOriginFromEntry(entry) {
185
+ return parseOriginFromExtra(entry.additionalExtra ?? null);
186
+ }
187
+ //# sourceMappingURL=OriginExtra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OriginExtra.js","sourceRoot":"","sources":["../../../src/core/origin/OriginExtra.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ exports.VERSION = void 0;
25
25
  const currentDate = new Date();
26
26
  const releaseDate = `${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')}-${currentDate.getFullYear()}`;
27
27
  exports.VERSION = {
28
- number: '1.0.5', // packageJson.version
28
+ number: '1.5.0', // packageJson.version
29
29
  date: releaseDate
30
30
  };
31
31
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,138 @@
1
+ /** Classic u32 overflow sentinel */
2
+ export declare const ZIP64_U32 = 4294967295;
3
+ /** Classic u16 overflow sentinel */
4
+ export declare const ZIP64_U16 = 65535;
5
+ /** Version needed to extract when Zip64 extensions are used (4.5) */
6
+ export declare const ZIP64_VERSION_NEEDED = 45;
7
+ /**
8
+ * Value stored in Zip64 EOCD "size of Zip64 EOCD record" for Version 1 with
9
+ * an empty extensible data sector: fixed body (56) − leading 12 = 44.
10
+ */
11
+ export declare const ZIP64_EOCD_SIZE_FIELD = 44;
12
+ /** Fixed Zip64 EOCD record length with empty extensible sector */
13
+ export declare const ZIP64_EOCD_RECORD_SIZE = 56;
14
+ /** Zip64 EOCD locator length */
15
+ export declare const ZIP64_LOCATOR_SIZE = 20;
16
+ /** Classic EOCD fixed length (without comment) */
17
+ export declare const CLASSIC_EOCD_SIZE = 22;
18
+ /**
19
+ * Buffer/browser APIs must not materialize multi-GiB Zip64 archives in memory.
20
+ * Use Node file/streaming APIs for size/offset Zip64.
21
+ */
22
+ export declare const ZIP64_BUFFER_SIZE_OFFSET_ERROR: string;
23
+ export interface Zip64ExtraFields {
24
+ uncompressedSize?: number;
25
+ compressedSize?: number;
26
+ localHdrOffset?: number;
27
+ diskStart?: number;
28
+ }
29
+ export interface ClassicSizeFields {
30
+ uncompressedSize: number;
31
+ compressedSize: number;
32
+ localHdrOffset: number;
33
+ diskStart: number;
34
+ }
35
+ export interface Zip64EocdFields {
36
+ totalEntries: number;
37
+ centralDirSize: number;
38
+ centralDirOffset: number;
39
+ versionMadeBy?: number;
40
+ versionNeeded?: number;
41
+ diskNumber?: number;
42
+ diskWithCdStart?: number;
43
+ }
44
+ export interface BuildEndRecordsOptions {
45
+ totalEntries: number;
46
+ centralDirSize: number;
47
+ centralDirOffset: number;
48
+ /** Absolute file offset where the Zip64 EOCD will be written (CD end). */
49
+ zip64EocdOffset: number;
50
+ archiveComment?: string;
51
+ /**
52
+ * When false (buffer/browser), refuse Zip64 triggered by size/offset overflow.
53
+ * Entry-count Zip64 is still allowed. Default true (Node streaming).
54
+ */
55
+ allowSizeOffsetZip64?: boolean;
56
+ /**
57
+ * Emit Zip64 EOCD + locator even when classic widths suffice (APPNOTE MAY).
58
+ * Classic EOCD then uses a CD-offset sentinel so readers consult Zip64 EOCD
59
+ * (Info-ZIP `-fz` style).
60
+ */
61
+ forceZip64?: boolean;
62
+ versionMadeBy?: number;
63
+ }
64
+ export declare function exceedsU32(value: number): boolean;
65
+ export declare function exceedsU16(value: number): boolean;
66
+ export declare function assertSafeInteger(value: number | bigint, label: string): number;
67
+ export declare function readU64AsNumber(buf: Buffer, offset: number): number;
68
+ export declare function writeU64(buf: Buffer, offset: number, value: number): void;
69
+ export declare function needsZip64Entry(uncompressedSize: number, compressedSize: number, localHdrOffset: number, diskStart?: number): boolean;
70
+ /** True when Zip64 is required for member size or local/CD offset (not entry count alone). */
71
+ export declare function needsZip64SizeOrOffset(uncompressedSize: number, compressedSize: number, localHdrOffset: number, centralDirSize?: number, centralDirOffset?: number): boolean;
72
+ export declare function needsZip64Archive(totalEntries: number, centralDirSize: number, centralDirOffset: number): boolean;
73
+ /**
74
+ * Classic EOCD fields that indicate a Zip64 EOCD/locator must be consulted.
75
+ */
76
+ export declare function classicEocdNeedsZip64(eocd: {
77
+ volEntries: number;
78
+ totalEntries: number;
79
+ centralDirSize: number;
80
+ centralDirOffset: number;
81
+ }): boolean;
82
+ /**
83
+ * Build Zip64 Extended Information Extra Field (0x0001).
84
+ * Field order is fixed; only include fields whose classic header uses a sentinel.
85
+ * For local headers, APPNOTE requires both sizes when the Zip64 block is present —
86
+ * pass `forLocal: true` to always emit both size fields.
87
+ */
88
+ export declare function buildZip64Extra(fields: Zip64ExtraFields, opts?: {
89
+ forLocal?: boolean;
90
+ }): Buffer;
91
+ /**
92
+ * Parse Zip64 extra payload (data after HeaderID + size).
93
+ * Only fields whose classic values are sentinels are consumed, in APPNOTE order.
94
+ */
95
+ export declare function parseZip64Extra(data: Buffer, classic: ClassicSizeFields): Zip64ExtraFields;
96
+ /** True if a complete extra-field blob contains a Zip64 (0x0001) record. */
97
+ export declare function extraFieldHasZip64(extra: Buffer | null | undefined): boolean;
98
+ /** Strip Zip64 records from a concatenated extra-field blob (avoid double-emit on rewrite). */
99
+ export declare function stripZip64FromExtra(extra: Buffer | null | undefined): Buffer | null;
100
+ /**
101
+ * Data descriptor length including optional signature.
102
+ * Zip64: signature(4) + crc(4) + cmp(8) + uncmp(8) = 24
103
+ * Classic: signature(4) + crc(4) + cmp(4) + uncmp(4) = 16
104
+ */
105
+ export declare function dataDescriptorByteLength(useZip64Sizes: boolean): number;
106
+ export declare function buildZip64Eocd(fields: Zip64EocdFields): Buffer;
107
+ export declare function buildZip64Locator(zip64EocdOffset: number): Buffer;
108
+ export declare function buildClassicEocd(opts: {
109
+ totalEntries: number;
110
+ centralDirSize: number;
111
+ centralDirOffset: number;
112
+ archiveComment?: string;
113
+ /** When true, write 0xFFFF / 0xFFFFFFFF for any field that overflows classic width. */
114
+ useZip64Sentinels: boolean;
115
+ /**
116
+ * Force classic CD offset to 0xFFFFFFFF so readers consult Zip64 EOCD
117
+ * even when the real offset fits in u32 (Info-ZIP `-fz`).
118
+ */
119
+ forceCdOffsetSentinel?: boolean;
120
+ }): Buffer;
121
+ /**
122
+ * Build Zip64 EOCD + Locator + classic EOCD (or classic EOCD alone).
123
+ * Callers write the returned buffer at `zip64EocdOffset` (or CD end when no Zip64).
124
+ */
125
+ export declare function buildEndRecords(opts: BuildEndRecordsOptions): Buffer;
126
+ /** Parse Zip64 EOCD fixed fields into CD size/offset/entry count. */
127
+ export declare function parseZip64Eocd(buf: Buffer): {
128
+ totalEntries: number;
129
+ centralDirSize: number;
130
+ centralDirOffset: number;
131
+ };
132
+ export declare function parseZip64Locator(buf: Buffer): number;
133
+ /**
134
+ * Assert buffer/browser writers may proceed for the given entry sizes/offsets.
135
+ * Throws {@link ZIP64_BUFFER_SIZE_OFFSET_ERROR} when size/offset Zip64 would be required.
136
+ */
137
+ export declare function assertBufferAllowsEntryZip64(uncompressedSize: number, compressedSize: number, localHdrOffset: number): void;
138
+ //# sourceMappingURL=Zip64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Zip64.d.ts","sourceRoot":"","sources":["../../../src/core/zip64/Zip64.ts"],"names":[],"mappings":"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"}