zip-writer 1.1.2 → 2.1.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/README.md +154 -132
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +32 -59
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +139 -148
- package/dist/index.js.map +1 -1
- package/dist/readable-from-bytes.d.ts +8 -0
- package/dist/readable-from-bytes.d.ts.map +1 -0
- package/dist/readable-from-bytes.js +25 -0
- package/dist/readable-from-bytes.js.map +1 -0
- package/dist/utils.d.ts +17 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +49 -0
- package/dist/utils.js.map +1 -1
- package/dist/write-central-directory.d.ts +7 -3
- package/dist/write-central-directory.d.ts.map +1 -1
- package/dist/write-central-directory.js +97 -131
- package/dist/write-central-directory.js.map +1 -1
- package/dist/write-entry.d.ts +4 -23
- package/dist/write-entry.d.ts.map +1 -1
- package/dist/write-entry.js +13 -114
- package/dist/write-entry.js.map +1 -1
- package/package.json +31 -6
|
@@ -1,94 +1,29 @@
|
|
|
1
|
-
import { CENTRAL_DIRECTORY_SIGNATURE, END_OF_CENTRAL_DIR_SIGNATURE, ZIP64_END_OF_CENTRAL_DIR_SIGNATURE, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE, VERSION_MADE_BY, VERSION_NEEDED_STANDARD, VERSION_NEEDED_ZIP64, GENERAL_PURPOSE_FLAGS, COMPRESSION_METHOD_STORE, COMPRESSION_METHOD_DEFLATE, ZIP64_LIMIT, CENTRAL_DIRECTORY_HEADER_SIZE, EOCD_SIZE, EOCD64_SIZE, EOCD64_LOCATOR_SIZE, BIG_ENDIAN, LITTLE_ENDIAN, } from "./constants.js";
|
|
2
|
-
import { getDosTime, getDosDate, writeDataView, UINT16, UINT32, UINT64, } from "./utils.js";
|
|
3
|
-
const textEncoder = new TextEncoder();
|
|
1
|
+
import { CENTRAL_DIRECTORY_SIGNATURE, END_OF_CENTRAL_DIR_SIGNATURE, ZIP64_END_OF_CENTRAL_DIR_SIGNATURE, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE, VERSION_MADE_BY, VERSION_NEEDED_STANDARD, VERSION_NEEDED_ZIP64, GENERAL_PURPOSE_FLAGS, COMPRESSION_METHOD_STORE, COMPRESSION_METHOD_DEFLATE, ZIP64_LIMIT, CENTRAL_DIRECTORY_HEADER_SIZE, EOCD_SIZE, EOCD64_SIZE, EOCD64_LOCATOR_SIZE, BIG_ENDIAN, LITTLE_ENDIAN, MAX_2_BYTE, MAX_4_BYTE, } from "./constants.js";
|
|
2
|
+
import { getDosTime, getDosDate, writeDataView, UINT16, UINT32, UINT64, validateEntryOptions, eocdNeedsZip64, } from "./utils.js";
|
|
4
3
|
/**
|
|
5
4
|
* Generate the Central Directory File Header for the given entry info.
|
|
6
5
|
*/
|
|
7
6
|
export function getCDFH(entryInfo) {
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
const { nameBytes, commentBytes, zip64 } = entryInfo;
|
|
8
|
+
validateEntryOptions(entryInfo);
|
|
9
|
+
let extraField = new Uint8Array(0);
|
|
10
|
+
if (zip64) {
|
|
11
|
+
// Extra field for ZIP64
|
|
12
|
+
extraField = new Uint8Array(28); // ZIP64 extra field
|
|
13
|
+
const extraView = new DataView(extraField.buffer);
|
|
14
|
+
writeDataView(extraView, [
|
|
15
|
+
// ZIP64 extra field tag
|
|
16
|
+
[UINT16, 0x0001, LITTLE_ENDIAN],
|
|
17
|
+
// Size of extra field data (3x 8-byte fields)
|
|
18
|
+
[UINT16, 24, LITTLE_ENDIAN],
|
|
19
|
+
// Original size
|
|
20
|
+
[UINT64, entryInfo.uncompressedSize, LITTLE_ENDIAN],
|
|
21
|
+
// Compressed size
|
|
22
|
+
[UINT64, entryInfo.compressedSize, LITTLE_ENDIAN],
|
|
23
|
+
// Relative header offset
|
|
24
|
+
[UINT64, entryInfo.startOffset, LITTLE_ENDIAN],
|
|
25
|
+
]);
|
|
10
26
|
}
|
|
11
|
-
else {
|
|
12
|
-
return getCDFHStandard(entryInfo);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function getCDFHStandard(entryInfo) {
|
|
16
|
-
const nameBytes = textEncoder.encode(entryInfo.name);
|
|
17
|
-
const commentBytes = entryInfo.comment
|
|
18
|
-
? textEncoder.encode(entryInfo.comment)
|
|
19
|
-
: new Uint8Array(0);
|
|
20
|
-
const headerSize = CENTRAL_DIRECTORY_HEADER_SIZE + nameBytes.length + commentBytes.length;
|
|
21
|
-
const header = new Uint8Array(headerSize);
|
|
22
|
-
const view = new DataView(header.buffer);
|
|
23
|
-
const date = entryInfo.date || new Date();
|
|
24
|
-
const externalAttrs = entryInfo.mode ? entryInfo.mode << 16 : 0;
|
|
25
|
-
const compressionMethod = entryInfo.store
|
|
26
|
-
? COMPRESSION_METHOD_STORE
|
|
27
|
-
: COMPRESSION_METHOD_DEFLATE;
|
|
28
|
-
let offset = writeDataView(view, [
|
|
29
|
-
// Central directory file header signature
|
|
30
|
-
[UINT32, CENTRAL_DIRECTORY_SIGNATURE, BIG_ENDIAN],
|
|
31
|
-
// Version made by
|
|
32
|
-
[UINT16, VERSION_MADE_BY, LITTLE_ENDIAN],
|
|
33
|
-
// Version needed to extract
|
|
34
|
-
[UINT16, VERSION_NEEDED_STANDARD, LITTLE_ENDIAN],
|
|
35
|
-
// General purpose bit flag
|
|
36
|
-
[UINT16, GENERAL_PURPOSE_FLAGS, LITTLE_ENDIAN],
|
|
37
|
-
// Compression method
|
|
38
|
-
[UINT16, compressionMethod, LITTLE_ENDIAN],
|
|
39
|
-
// Last mod file time & date
|
|
40
|
-
[UINT16, getDosTime(date), LITTLE_ENDIAN],
|
|
41
|
-
[UINT16, getDosDate(date), LITTLE_ENDIAN],
|
|
42
|
-
// CRC-32
|
|
43
|
-
[UINT32, entryInfo.crc32, LITTLE_ENDIAN],
|
|
44
|
-
// Compressed size
|
|
45
|
-
[UINT32, entryInfo.compressedSize, LITTLE_ENDIAN],
|
|
46
|
-
// Uncompressed size
|
|
47
|
-
[UINT32, entryInfo.uncompressedSize, LITTLE_ENDIAN],
|
|
48
|
-
// File name length
|
|
49
|
-
[UINT16, nameBytes.length, LITTLE_ENDIAN],
|
|
50
|
-
// Extra field length
|
|
51
|
-
[UINT16, 0, LITTLE_ENDIAN],
|
|
52
|
-
// File comment length
|
|
53
|
-
[UINT16, commentBytes.length, LITTLE_ENDIAN],
|
|
54
|
-
// Disk number start
|
|
55
|
-
[UINT16, 0, LITTLE_ENDIAN],
|
|
56
|
-
// Internal file attributes
|
|
57
|
-
[UINT16, 0, LITTLE_ENDIAN],
|
|
58
|
-
// External file attributes (Unix permissions if provided)
|
|
59
|
-
[UINT32, externalAttrs, LITTLE_ENDIAN],
|
|
60
|
-
// Relative offset of local header
|
|
61
|
-
[UINT32, entryInfo.startOffset, LITTLE_ENDIAN],
|
|
62
|
-
]);
|
|
63
|
-
// File name
|
|
64
|
-
header.set(nameBytes, offset);
|
|
65
|
-
offset += nameBytes.length;
|
|
66
|
-
// File comment
|
|
67
|
-
if (commentBytes.length > 0) {
|
|
68
|
-
header.set(commentBytes, offset);
|
|
69
|
-
}
|
|
70
|
-
return header;
|
|
71
|
-
}
|
|
72
|
-
function getCDFHZip64(entryInfo) {
|
|
73
|
-
const nameBytes = textEncoder.encode(entryInfo.name);
|
|
74
|
-
const commentBytes = entryInfo.comment
|
|
75
|
-
? textEncoder.encode(entryInfo.comment)
|
|
76
|
-
: new Uint8Array(0);
|
|
77
|
-
// Extra field for ZIP64
|
|
78
|
-
const extraField = new Uint8Array(28); // ZIP64 extra field
|
|
79
|
-
const extraView = new DataView(extraField.buffer);
|
|
80
|
-
writeDataView(extraView, [
|
|
81
|
-
// ZIP64 extra field tag
|
|
82
|
-
[UINT16, 0x0001, LITTLE_ENDIAN],
|
|
83
|
-
// Size of extra field data (3x 8-byte fields)
|
|
84
|
-
[UINT16, 24, LITTLE_ENDIAN],
|
|
85
|
-
// Original size
|
|
86
|
-
[UINT64, entryInfo.uncompressedSize, LITTLE_ENDIAN],
|
|
87
|
-
// Compressed size
|
|
88
|
-
[UINT64, entryInfo.compressedSize, LITTLE_ENDIAN],
|
|
89
|
-
// Relative header offset
|
|
90
|
-
[UINT64, entryInfo.startOffset, LITTLE_ENDIAN],
|
|
91
|
-
]);
|
|
92
27
|
const headerSize = CENTRAL_DIRECTORY_HEADER_SIZE +
|
|
93
28
|
nameBytes.length +
|
|
94
29
|
extraField.length +
|
|
@@ -106,7 +41,11 @@ function getCDFHZip64(entryInfo) {
|
|
|
106
41
|
// Version made by
|
|
107
42
|
[UINT16, VERSION_MADE_BY, LITTLE_ENDIAN],
|
|
108
43
|
// Version needed to extract
|
|
109
|
-
[
|
|
44
|
+
[
|
|
45
|
+
UINT16,
|
|
46
|
+
zip64 ? VERSION_NEEDED_ZIP64 : VERSION_NEEDED_STANDARD,
|
|
47
|
+
LITTLE_ENDIAN,
|
|
48
|
+
],
|
|
110
49
|
// General purpose bit flag
|
|
111
50
|
[UINT16, GENERAL_PURPOSE_FLAGS, LITTLE_ENDIAN],
|
|
112
51
|
// Compression method
|
|
@@ -117,9 +56,17 @@ function getCDFHZip64(entryInfo) {
|
|
|
117
56
|
// CRC-32
|
|
118
57
|
[UINT32, entryInfo.crc32, LITTLE_ENDIAN],
|
|
119
58
|
// Compressed size (0xFFFFFFFF for ZIP64)
|
|
120
|
-
[
|
|
59
|
+
[
|
|
60
|
+
UINT32,
|
|
61
|
+
zip64 ? MAX_4_BYTE : Number(entryInfo.compressedSize),
|
|
62
|
+
LITTLE_ENDIAN,
|
|
63
|
+
],
|
|
121
64
|
// Uncompressed size (0xFFFFFFFF for ZIP64)
|
|
122
|
-
[
|
|
65
|
+
[
|
|
66
|
+
UINT32,
|
|
67
|
+
zip64 ? MAX_4_BYTE : Number(entryInfo.uncompressedSize),
|
|
68
|
+
LITTLE_ENDIAN,
|
|
69
|
+
],
|
|
123
70
|
// File name length
|
|
124
71
|
[UINT16, nameBytes.length, LITTLE_ENDIAN],
|
|
125
72
|
// Extra field length
|
|
@@ -133,14 +80,16 @@ function getCDFHZip64(entryInfo) {
|
|
|
133
80
|
// External file attributes (Unix permissions if provided)
|
|
134
81
|
[UINT32, externalAttrs, LITTLE_ENDIAN],
|
|
135
82
|
// Relative offset of local header (0xFFFFFFFF for ZIP64)
|
|
136
|
-
[UINT32, 0xffffffff, LITTLE_ENDIAN],
|
|
83
|
+
[UINT32, zip64 ? 0xffffffff : Number(entryInfo.startOffset), LITTLE_ENDIAN],
|
|
137
84
|
]);
|
|
138
85
|
// File name
|
|
139
86
|
header.set(nameBytes, offset);
|
|
140
87
|
offset += nameBytes.length;
|
|
141
88
|
// Extra field
|
|
142
|
-
|
|
143
|
-
|
|
89
|
+
if (extraField.length > 0) {
|
|
90
|
+
header.set(extraField, offset);
|
|
91
|
+
offset += extraField.length;
|
|
92
|
+
}
|
|
144
93
|
// File comment
|
|
145
94
|
if (commentBytes.length > 0) {
|
|
146
95
|
header.set(commentBytes, offset);
|
|
@@ -176,42 +125,51 @@ export function getEOCDStandard(entriesCount, centralDirectoryOffset, centralDir
|
|
|
176
125
|
/**
|
|
177
126
|
* Generate the ZIP64 End of Central Directory record.
|
|
178
127
|
*/
|
|
179
|
-
export function
|
|
180
|
-
const
|
|
128
|
+
export function getEOCD(options) {
|
|
129
|
+
const zip64 = eocdNeedsZip64(options);
|
|
130
|
+
const { entriesCount, centralDirectoryStart, centralDirectorySize } = options;
|
|
131
|
+
const totalSize = zip64
|
|
132
|
+
? EOCD64_SIZE + EOCD64_LOCATOR_SIZE + EOCD_SIZE
|
|
133
|
+
: EOCD_SIZE;
|
|
181
134
|
const buffer = new Uint8Array(totalSize);
|
|
182
135
|
const view = new DataView(buffer.buffer);
|
|
183
|
-
let offset =
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
136
|
+
let offset = 0;
|
|
137
|
+
if (zip64) {
|
|
138
|
+
offset = writeDataView(view, [
|
|
139
|
+
// === ZIP64 End of Central Directory Record ===
|
|
140
|
+
// End of central dir signature
|
|
141
|
+
[UINT32, ZIP64_END_OF_CENTRAL_DIR_SIGNATURE, BIG_ENDIAN],
|
|
142
|
+
// Size of zip64 end of central directory record excluding the leading 12 bytes
|
|
143
|
+
[UINT64, BigInt(EOCD64_SIZE - 12), LITTLE_ENDIAN],
|
|
144
|
+
// Version made by
|
|
145
|
+
[UINT16, VERSION_MADE_BY, LITTLE_ENDIAN],
|
|
146
|
+
// Version needed to extract
|
|
147
|
+
[UINT16, VERSION_NEEDED_ZIP64, LITTLE_ENDIAN],
|
|
148
|
+
// Number of this disk
|
|
149
|
+
[UINT32, 0, LITTLE_ENDIAN],
|
|
150
|
+
// Disk where central directory starts
|
|
151
|
+
[UINT32, 0, LITTLE_ENDIAN],
|
|
152
|
+
// Number of central directory records on this disk
|
|
153
|
+
[UINT64, BigInt(entriesCount), LITTLE_ENDIAN],
|
|
154
|
+
// Total number of central directory records
|
|
155
|
+
[UINT64, BigInt(entriesCount), LITTLE_ENDIAN],
|
|
156
|
+
// Size of central directory
|
|
157
|
+
[UINT64, centralDirectorySize, LITTLE_ENDIAN],
|
|
158
|
+
// Offset of start of central directory
|
|
159
|
+
[UINT64, centralDirectoryStart, LITTLE_ENDIAN],
|
|
160
|
+
// === ZIP64 End of Central Directory Locator ===
|
|
161
|
+
// Zip64 end of central dir locator signature
|
|
162
|
+
[UINT32, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE, BIG_ENDIAN],
|
|
163
|
+
// Number of the disk with the start of the zip64 end of central directory
|
|
164
|
+
[UINT32, 0, LITTLE_ENDIAN],
|
|
165
|
+
// Relative offset of the zip64 end of central directory record
|
|
166
|
+
[UINT64, centralDirectoryStart + centralDirectorySize, LITTLE_ENDIAN],
|
|
167
|
+
// Total number of disks
|
|
168
|
+
[UINT32, 1, LITTLE_ENDIAN],
|
|
169
|
+
]);
|
|
170
|
+
}
|
|
171
|
+
// === Standard End of Central Directory Record ===
|
|
172
|
+
writeDataView(view, [
|
|
215
173
|
// End of central dir signature
|
|
216
174
|
[UINT32, END_OF_CENTRAL_DIR_SIGNATURE, BIG_ENDIAN],
|
|
217
175
|
// Number of this disk
|
|
@@ -219,16 +177,24 @@ export function getEOCDZip64(entriesCount, centralDirectoryOffset, centralDirect
|
|
|
219
177
|
// Disk where central directory starts
|
|
220
178
|
[UINT16, 0, LITTLE_ENDIAN],
|
|
221
179
|
// Number of central directory records on this disk
|
|
222
|
-
[UINT16,
|
|
180
|
+
[UINT16, zip64 ? MAX_2_BYTE : entriesCount, LITTLE_ENDIAN],
|
|
223
181
|
// Total number of central directory records
|
|
224
|
-
[UINT16,
|
|
182
|
+
[UINT16, zip64 ? MAX_2_BYTE : entriesCount, LITTLE_ENDIAN],
|
|
225
183
|
// Size of central directory
|
|
226
|
-
[
|
|
184
|
+
[
|
|
185
|
+
UINT32,
|
|
186
|
+
zip64 ? MAX_4_BYTE : Number(centralDirectorySize),
|
|
187
|
+
LITTLE_ENDIAN,
|
|
188
|
+
],
|
|
227
189
|
// Offset of start of central directory
|
|
228
|
-
[
|
|
190
|
+
[
|
|
191
|
+
UINT32,
|
|
192
|
+
zip64 ? MAX_4_BYTE : Number(centralDirectoryStart),
|
|
193
|
+
LITTLE_ENDIAN,
|
|
194
|
+
],
|
|
229
195
|
// ZIP file comment length
|
|
230
196
|
[UINT16, 0, LITTLE_ENDIAN],
|
|
231
|
-
]);
|
|
197
|
+
], offset);
|
|
232
198
|
return buffer;
|
|
233
199
|
}
|
|
234
200
|
//# sourceMappingURL=write-central-directory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-central-directory.js","sourceRoot":"","sources":["../src/write-central-directory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"write-central-directory.js","sourceRoot":"","sources":["../src/write-central-directory.ts"],"names":[],"mappings":"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"}
|
package/dist/write-entry.d.ts
CHANGED
|
@@ -1,28 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
export declare function writeZipEntry({ writer, reader, entryOptions, startOffset, crc32, }: {
|
|
6
|
-
/** Writer for the zip archive */
|
|
7
|
-
writer: WritableStreamDefaultWriter<Uint8Array<ArrayBuffer>>;
|
|
8
|
-
/** Reader for the entry data */
|
|
9
|
-
reader: ReadableStreamDefaultReader<Uint8Array<ArrayBuffer>>;
|
|
10
|
-
/** Options for the zip entry */
|
|
11
|
-
entryOptions: EntryOptions;
|
|
12
|
-
/** Offset in the zip archive where this entry starts */
|
|
13
|
-
startOffset: bigint;
|
|
14
|
-
/** CRC32 function to use */
|
|
15
|
-
crc32: (data: Uint8Array<ArrayBuffer>, value?: number) => number;
|
|
16
|
-
}): Promise<EntryInfoZip64 | EntryInfoStandard>;
|
|
17
|
-
export declare function getLocalFileHeader(options: EntryOptions): Uint8Array<ArrayBuffer>;
|
|
18
|
-
export declare function getDataDescriptorStandard(entryInfo: {
|
|
19
|
-
uncompressedSize: number;
|
|
20
|
-
compressedSize: number;
|
|
21
|
-
crc32: number;
|
|
22
|
-
}): Uint8Array<ArrayBuffer>;
|
|
23
|
-
export declare function getDataDescriptorZip64(entryInfo: {
|
|
1
|
+
import type { EntryOptionsInternal } from "./index.js";
|
|
2
|
+
export declare function getLocalFileHeader(options: EntryOptionsInternal): Uint8Array<ArrayBuffer>;
|
|
3
|
+
export declare function getDataDescriptor(entryInfo: {
|
|
24
4
|
uncompressedSize: bigint;
|
|
25
5
|
compressedSize: bigint;
|
|
6
|
+
startOffset: bigint;
|
|
26
7
|
crc32: number;
|
|
27
8
|
}): Uint8Array<ArrayBuffer>;
|
|
28
9
|
//# sourceMappingURL=write-entry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-entry.d.ts","sourceRoot":"","sources":["../src/write-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"write-entry.d.ts","sourceRoot":"","sources":["../src/write-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAwBvD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,GAC5B,UAAU,CAAC,WAAW,CAAC,CAoCzB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,UAAU,CAAC,WAAW,CAAC,CAsB1B"}
|
package/dist/write-entry.js
CHANGED
|
@@ -1,98 +1,7 @@
|
|
|
1
|
-
import { LOCAL_FILE_HEADER_SIGNATURE, DATA_DESCRIPTOR_SIGNATURE, VERSION_NEEDED_STANDARD, GENERAL_PURPOSE_FLAGS, COMPRESSION_METHOD_STORE, COMPRESSION_METHOD_DEFLATE, LOCAL_FILE_HEADER_SIZE,
|
|
2
|
-
import { getDosTime, getDosDate, writeDataView, UINT16, UINT32, UINT64, } from "./utils.js";
|
|
3
|
-
const textEncoder = new TextEncoder();
|
|
4
|
-
/**
|
|
5
|
-
* Write a zip entry to the given writer from the given reader.
|
|
6
|
-
*/
|
|
7
|
-
export async function writeZipEntry({ writer, reader, entryOptions, startOffset, crc32, }) {
|
|
8
|
-
let uncompressedSize = BigInt(0);
|
|
9
|
-
let compressedSize = BigInt(0);
|
|
10
|
-
let checksum = 0;
|
|
11
|
-
await writer.write(getLocalFileHeader(entryOptions));
|
|
12
|
-
if (entryOptions.store) {
|
|
13
|
-
// Store mode: no compression, direct copy
|
|
14
|
-
while (true) {
|
|
15
|
-
const { value, done } = await reader.read();
|
|
16
|
-
if (done)
|
|
17
|
-
break;
|
|
18
|
-
const byteLength = BigInt(value.byteLength);
|
|
19
|
-
uncompressedSize += byteLength;
|
|
20
|
-
compressedSize += byteLength;
|
|
21
|
-
checksum = crc32(value, checksum);
|
|
22
|
-
await writer.write(value);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
// Deflate mode: manual reader/writer loops to minimize overhead
|
|
27
|
-
const compressionStream = new CompressionStream("deflate-raw");
|
|
28
|
-
const compressionWriter = compressionStream.writable.getWriter();
|
|
29
|
-
const compressionReader = compressionStream.readable.getReader();
|
|
30
|
-
const writePromise = (async () => {
|
|
31
|
-
try {
|
|
32
|
-
while (true) {
|
|
33
|
-
const { value, done } = await reader.read();
|
|
34
|
-
if (done)
|
|
35
|
-
break;
|
|
36
|
-
uncompressedSize += BigInt(value.byteLength);
|
|
37
|
-
checksum = crc32(value, checksum);
|
|
38
|
-
await compressionWriter.write(value);
|
|
39
|
-
}
|
|
40
|
-
await compressionWriter.close();
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
await compressionWriter.abort(err);
|
|
44
|
-
throw err;
|
|
45
|
-
}
|
|
46
|
-
})();
|
|
47
|
-
const readPromise = (async () => {
|
|
48
|
-
try {
|
|
49
|
-
while (true) {
|
|
50
|
-
const { value, done } = await compressionReader.read();
|
|
51
|
-
if (done)
|
|
52
|
-
break;
|
|
53
|
-
compressedSize += BigInt(value.byteLength);
|
|
54
|
-
await writer.write(value);
|
|
55
|
-
}
|
|
56
|
-
compressionReader.releaseLock();
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
await compressionReader.cancel(err);
|
|
60
|
-
throw err;
|
|
61
|
-
}
|
|
62
|
-
})();
|
|
63
|
-
await Promise.all([writePromise, readPromise]);
|
|
64
|
-
}
|
|
65
|
-
const needsZip64 = uncompressedSize > ZIP64_LIMIT ||
|
|
66
|
-
compressedSize > ZIP64_LIMIT ||
|
|
67
|
-
startOffset > ZIP64_LIMIT;
|
|
68
|
-
if (needsZip64) {
|
|
69
|
-
const entryInfo = {
|
|
70
|
-
...entryOptions,
|
|
71
|
-
startOffset,
|
|
72
|
-
crc32: checksum,
|
|
73
|
-
uncompressedSize,
|
|
74
|
-
compressedSize,
|
|
75
|
-
zip64: true,
|
|
76
|
-
};
|
|
77
|
-
await writer.write(getDataDescriptorZip64(entryInfo));
|
|
78
|
-
return entryInfo;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
const entryInfo = {
|
|
82
|
-
...entryOptions,
|
|
83
|
-
startOffset: Number(startOffset),
|
|
84
|
-
crc32: checksum,
|
|
85
|
-
uncompressedSize: Number(uncompressedSize),
|
|
86
|
-
compressedSize: Number(compressedSize),
|
|
87
|
-
zip64: false,
|
|
88
|
-
};
|
|
89
|
-
await writer.write(getDataDescriptorStandard(entryInfo));
|
|
90
|
-
return entryInfo;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
1
|
+
import { LOCAL_FILE_HEADER_SIGNATURE, DATA_DESCRIPTOR_SIGNATURE, VERSION_NEEDED_STANDARD, GENERAL_PURPOSE_FLAGS, COMPRESSION_METHOD_STORE, COMPRESSION_METHOD_DEFLATE, LOCAL_FILE_HEADER_SIZE, DATA_DESCRIPTOR_SIZE, DATA_DESCRIPTOR_SIZE_ZIP64, LITTLE_ENDIAN, BIG_ENDIAN, } from "./constants.js";
|
|
2
|
+
import { getDosTime, getDosDate, writeDataView, UINT16, UINT32, UINT64, entryNeedsZip64, } from "./utils.js";
|
|
93
3
|
export function getLocalFileHeader(options) {
|
|
94
|
-
const
|
|
95
|
-
const headerSize = LOCAL_FILE_HEADER_SIZE + nameBytes.length;
|
|
4
|
+
const headerSize = LOCAL_FILE_HEADER_SIZE + options.nameBytes.length;
|
|
96
5
|
const header = new Uint8Array(headerSize);
|
|
97
6
|
const view = new DataView(header.buffer);
|
|
98
7
|
const date = options.date || new Date();
|
|
@@ -118,41 +27,31 @@ export function getLocalFileHeader(options) {
|
|
|
118
27
|
// Uncompressed size (0 when using data descriptor)
|
|
119
28
|
[UINT32, 0, LITTLE_ENDIAN],
|
|
120
29
|
// File name length
|
|
121
|
-
[UINT16, nameBytes.length, LITTLE_ENDIAN],
|
|
30
|
+
[UINT16, options.nameBytes.length, LITTLE_ENDIAN],
|
|
122
31
|
// Extra field length
|
|
123
32
|
[UINT16, 0, LITTLE_ENDIAN],
|
|
124
33
|
]);
|
|
125
34
|
// File name
|
|
126
|
-
header.set(nameBytes, offset);
|
|
35
|
+
header.set(options.nameBytes, offset);
|
|
127
36
|
return header;
|
|
128
37
|
}
|
|
129
|
-
export function
|
|
130
|
-
const descriptor = new Uint8Array(DATA_DESCRIPTOR_SIZE);
|
|
131
|
-
const view = new DataView(descriptor.buffer);
|
|
132
|
-
writeDataView(view, [
|
|
133
|
-
// Data descriptor signature
|
|
134
|
-
[UINT32, DATA_DESCRIPTOR_SIGNATURE, BIG_ENDIAN],
|
|
135
|
-
// CRC-32 (4 bytes)
|
|
136
|
-
[UINT32, entryInfo.crc32, LITTLE_ENDIAN],
|
|
137
|
-
// Compressed size (4 bytes)
|
|
138
|
-
[UINT32, entryInfo.compressedSize, LITTLE_ENDIAN],
|
|
139
|
-
// Uncompressed size (4 bytes)
|
|
140
|
-
[UINT32, entryInfo.uncompressedSize, LITTLE_ENDIAN],
|
|
141
|
-
]);
|
|
142
|
-
return descriptor;
|
|
143
|
-
}
|
|
144
|
-
export function getDataDescriptorZip64(entryInfo) {
|
|
38
|
+
export function getDataDescriptor(entryInfo) {
|
|
145
39
|
const descriptor = new Uint8Array(DATA_DESCRIPTOR_SIZE_ZIP64);
|
|
146
40
|
const view = new DataView(descriptor.buffer);
|
|
41
|
+
const needsZip64 = entryNeedsZip64(entryInfo);
|
|
147
42
|
writeDataView(view, [
|
|
148
43
|
// Data descriptor signature
|
|
149
44
|
[UINT32, DATA_DESCRIPTOR_SIGNATURE, BIG_ENDIAN],
|
|
150
45
|
// CRC-32 (4 bytes)
|
|
151
46
|
[UINT32, entryInfo.crc32, LITTLE_ENDIAN],
|
|
152
47
|
// Compressed size (8 bytes)
|
|
153
|
-
|
|
48
|
+
needsZip64
|
|
49
|
+
? [UINT64, entryInfo.compressedSize, LITTLE_ENDIAN]
|
|
50
|
+
: [UINT32, Number(entryInfo.compressedSize), LITTLE_ENDIAN],
|
|
154
51
|
// Uncompressed size (8 bytes)
|
|
155
|
-
|
|
52
|
+
needsZip64
|
|
53
|
+
? [UINT64, entryInfo.uncompressedSize, LITTLE_ENDIAN]
|
|
54
|
+
: [UINT32, Number(entryInfo.uncompressedSize), LITTLE_ENDIAN],
|
|
156
55
|
]);
|
|
157
56
|
return descriptor;
|
|
158
57
|
}
|
package/dist/write-entry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-entry.js","sourceRoot":"","sources":["../src/write-entry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"write-entry.js","sourceRoot":"","sources":["../src/write-entry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zip-writer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"exports": {
|
|
5
5
|
".": {
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"import": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"./readable-from-bytes.js": {
|
|
10
|
+
"types": "./dist/readable-from-bytes.d.ts",
|
|
11
|
+
"import": "./dist/readable-from-bytes.js"
|
|
8
12
|
}
|
|
9
13
|
},
|
|
10
14
|
"imports": {
|
|
@@ -18,19 +22,28 @@
|
|
|
18
22
|
"test": "run-s test:types test:lint test:vitest",
|
|
19
23
|
"prepare": "husky",
|
|
20
24
|
"test:types": "tsc --noEmit",
|
|
21
|
-
"test:lint": "eslint
|
|
25
|
+
"test:lint": "eslint",
|
|
22
26
|
"test:vitest": "vitest",
|
|
23
27
|
"bench": "vitest bench",
|
|
28
|
+
"coverage": "vitest run --coverage",
|
|
24
29
|
"format": "prettier --write .",
|
|
25
30
|
"prepack": "rimraf dist && tsc"
|
|
26
31
|
},
|
|
27
32
|
"files": [
|
|
28
33
|
"dist"
|
|
29
34
|
],
|
|
30
|
-
"keywords": [
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
"keywords": [
|
|
36
|
+
"zip",
|
|
37
|
+
"archive",
|
|
38
|
+
"streaming",
|
|
39
|
+
"web streams",
|
|
40
|
+
"compression streams",
|
|
41
|
+
"javascript",
|
|
42
|
+
"typescript"
|
|
43
|
+
],
|
|
44
|
+
"author": "Gregor MacLennan <gmaclennan@gmail.com>",
|
|
45
|
+
"license": "MIT",
|
|
46
|
+
"description": "A modern streaming ZIP archive writer for JavaScript that uses the Web Streams API and Compression Streams API.",
|
|
34
47
|
"devDependencies": {
|
|
35
48
|
"@node-rs/crc32": "^1.10.6",
|
|
36
49
|
"@types/archiver": "^7.0.0",
|
|
@@ -38,6 +51,7 @@
|
|
|
38
51
|
"@types/yauzl-promise": "^4.0.1",
|
|
39
52
|
"@vitest/browser": "^4.0.7",
|
|
40
53
|
"@vitest/browser-playwright": "^4.0.7",
|
|
54
|
+
"@vitest/coverage-istanbul": "^4.0.7",
|
|
41
55
|
"@zip.js/zip.js": "^2.8.8",
|
|
42
56
|
"archiver": "^7.0.1",
|
|
43
57
|
"eslint": "^9.39.1",
|
|
@@ -57,5 +71,16 @@
|
|
|
57
71
|
"lint-staged": {
|
|
58
72
|
"*.js": "eslint --cache --fix",
|
|
59
73
|
"*.{js,css,md}": "prettier --write"
|
|
74
|
+
},
|
|
75
|
+
"repository": {
|
|
76
|
+
"type": "git",
|
|
77
|
+
"url": "git+https://github.com/gmaclennan/zip-writer.git"
|
|
78
|
+
},
|
|
79
|
+
"bugs": {
|
|
80
|
+
"url": "https://github.com/gmaclennan/zip-writer/issues"
|
|
81
|
+
},
|
|
82
|
+
"homepage": "https://github.com/gmaclennan/zip-writer#readme",
|
|
83
|
+
"dependencies": {
|
|
84
|
+
"p-mutex": "^1.0.0"
|
|
60
85
|
}
|
|
61
86
|
}
|