zip-writer 2.0.0 → 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 +43 -1
- 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 +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -52
- 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 +8 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +29 -0
- package/dist/utils.js.map +1 -1
- package/dist/write-central-directory.d.ts +5 -1
- package/dist/write-central-directory.d.ts.map +1 -1
- package/dist/write-central-directory.js +96 -126
- package/dist/write-central-directory.js.map +1 -1
- package/dist/write-entry.d.ts +2 -6
- package/dist/write-entry.d.ts.map +1 -1
- package/dist/write-entry.js +9 -19
- package/dist/write-entry.js.map +1 -1
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/zip-writer)
|
|
4
4
|
[](https://github.com/gmaclennan/zip-writer/actions/workflows/test.yml)
|
|
5
|
-
[](https://bundlejs.com/?q=zip-writer&treeshake=%5B*%5D)
|
|
6
6
|
|
|
7
7
|
A modern streaming ZIP archive writer for JavaScript that uses the
|
|
8
8
|
[Web Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)
|
|
@@ -56,6 +56,48 @@ console.log(info);
|
|
|
56
56
|
await zipWriter.finalize();
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
+
## Helper Functions
|
|
60
|
+
|
|
61
|
+
### `readableFromBytes()`
|
|
62
|
+
|
|
63
|
+
A helper function for creating a `ReadableStream` from a `Uint8Array` with
|
|
64
|
+
proper backpressure handling. This is useful when you need to convert byte data
|
|
65
|
+
into a stream for use with `addEntry()`. On supported platforms, you can use
|
|
66
|
+
[`ReadableStream.from()`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/from_static)
|
|
67
|
+
instead.
|
|
68
|
+
|
|
69
|
+
This is not included in the main bundle to keep the size small.
|
|
70
|
+
|
|
71
|
+
**Import:**
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { readableFromBytes } from "zip-writable/readable-from-bytes";
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Parameters:**
|
|
78
|
+
|
|
79
|
+
- `data: Uint8Array` - The byte array to convert to a stream
|
|
80
|
+
|
|
81
|
+
**Returns:** `ReadableStream<Uint8Array>` - A readable stream that chunks the
|
|
82
|
+
data with proper backpressure
|
|
83
|
+
|
|
84
|
+
**Example:**
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
import { ZipWriter } from "zip-writable";
|
|
88
|
+
import { readableFromBytes } from "zip-writable/readable-from-bytes";
|
|
89
|
+
|
|
90
|
+
const zipWriter = new ZipWriter();
|
|
91
|
+
|
|
92
|
+
const data = new TextEncoder().encode("Hello, World!");
|
|
93
|
+
await zipWriter.addEntry({
|
|
94
|
+
readable: readableFromBytes(data),
|
|
95
|
+
name: "hello.txt",
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
await zipWriter.finalize();
|
|
99
|
+
```
|
|
100
|
+
|
|
59
101
|
## API Reference
|
|
60
102
|
|
|
61
103
|
### `ZipWriter`
|
package/dist/constants.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export declare const EOCD_SIZE = 22;
|
|
|
18
18
|
export declare const EOCD64_SIZE = 56;
|
|
19
19
|
export declare const EOCD64_LOCATOR_SIZE = 20;
|
|
20
20
|
export declare const ZIP64_LIMIT: bigint;
|
|
21
|
+
export declare const MAX_2_BYTE = 65535;
|
|
22
|
+
export declare const MAX_4_BYTE = 4294967295;
|
|
21
23
|
/** Little-endian for DataView methods */
|
|
22
24
|
export declare const LITTLE_ENDIAN = true;
|
|
23
25
|
/** Big-endian for DataView methods */
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,2BAA2B,aAAa,CAAC;AACtD,eAAO,MAAM,yBAAyB,aAAa,CAAC;AACpD,eAAO,MAAM,2BAA2B,aAAa,CAAC;AACtD,eAAO,MAAM,4BAA4B,aAAa,CAAC;AACvD,eAAO,MAAM,kCAAkC,aAAa,CAAC;AAC7D,eAAO,MAAM,0CAA0C,aAAa,CAAC;AAGrE,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAGvC,eAAO,MAAM,qBAAqB,OAAwB,CAAC;AAG3D,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAG5C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,WAAW,QAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,2BAA2B,aAAa,CAAC;AACtD,eAAO,MAAM,yBAAyB,aAAa,CAAC;AACpD,eAAO,MAAM,2BAA2B,aAAa,CAAC;AACtD,eAAO,MAAM,4BAA4B,aAAa,CAAC;AACvD,eAAO,MAAM,kCAAkC,aAAa,CAAC;AAC7D,eAAO,MAAM,0CAA0C,aAAa,CAAC;AAGrE,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAGvC,eAAO,MAAM,qBAAqB,OAAwB,CAAC;AAG3D,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAG5C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,WAAW,QAAqB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAAS,CAAC;AACjC,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,yCAAyC;AACzC,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,sCAAsC;AACtC,eAAO,MAAM,UAAU,QAAQ,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -10,7 +10,7 @@ export const VERSION_MADE_BY = 45; // Version 4.5 (ZIP64 support)
|
|
|
10
10
|
export const VERSION_NEEDED_STANDARD = 20; // Version 2.0
|
|
11
11
|
export const VERSION_NEEDED_ZIP64 = 45; // Version 4.5 for ZIP64
|
|
12
12
|
// Flags
|
|
13
|
-
export const GENERAL_PURPOSE_FLAGS = 0b0000_1000_0000_1000; // Bit 3:
|
|
13
|
+
export const GENERAL_PURPOSE_FLAGS = 0b0000_1000_0000_1000; // Bit 3: crc and file-sizes unknown when header was written, Bit 11: UTF-8
|
|
14
14
|
// Compression methods
|
|
15
15
|
export const COMPRESSION_METHOD_STORE = 0;
|
|
16
16
|
export const COMPRESSION_METHOD_DEFLATE = 8;
|
|
@@ -24,6 +24,8 @@ export const EOCD64_SIZE = 56;
|
|
|
24
24
|
export const EOCD64_LOCATOR_SIZE = 20;
|
|
25
25
|
// Limits
|
|
26
26
|
export const ZIP64_LIMIT = BigInt(0xffffffff);
|
|
27
|
+
export const MAX_2_BYTE = 0xffff;
|
|
28
|
+
export const MAX_4_BYTE = 0xffffffff;
|
|
27
29
|
/** Little-endian for DataView methods */
|
|
28
30
|
export const LITTLE_ENDIAN = true;
|
|
29
31
|
/** Big-endian for DataView methods */
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,2BAA2B,GAAG,UAAU,CAAC,CAAC,eAAe;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC,CAAC,eAAe;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,UAAU,CAAC,CAAC,eAAe;AACtE,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC,CAAC,eAAe;AACvE,MAAM,CAAC,MAAM,kCAAkC,GAAG,UAAU,CAAC,CAAC,eAAe;AAC7E,MAAM,CAAC,MAAM,0CAA0C,GAAG,UAAU,CAAC,CAAC,eAAe;AAErF,oBAAoB;AACpB,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC,CAAC,8BAA8B;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC,CAAC,cAAc;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC,CAAC,wBAAwB;AAEhE,QAAQ;AACR,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,2BAA2B,GAAG,UAAU,CAAC,CAAC,eAAe;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC,CAAC,eAAe;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,UAAU,CAAC,CAAC,eAAe;AACtE,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC,CAAC,eAAe;AACvE,MAAM,CAAC,MAAM,kCAAkC,GAAG,UAAU,CAAC,CAAC,eAAe;AAC7E,MAAM,CAAC,MAAM,0CAA0C,GAAG,UAAU,CAAC,CAAC,eAAe;AAErF,oBAAoB;AACpB,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC,CAAC,8BAA8B;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC,CAAC,cAAc;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC,CAAC,wBAAwB;AAEhE,QAAQ;AACR,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,CAAC,2EAA2E;AAEvI,sBAAsB;AACtB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C,iBAAiB;AACjB,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAC7C,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,SAAS;AACT,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AACjC,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;AAErC,yCAAyC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export interface Entry extends EntryOptions {
|
|
|
20
20
|
/** Readable stream of entry data */
|
|
21
21
|
readable: ReadableStream<ArrayBufferView<ArrayBufferLike>>;
|
|
22
22
|
}
|
|
23
|
-
export interface
|
|
23
|
+
export interface EntryInfoInternal extends EntryOptionsInternal {
|
|
24
24
|
/** Byte offset of the local file header within the ZIP archive */
|
|
25
25
|
startOffset: bigint;
|
|
26
26
|
/** CRC32 checksum of the uncompressed data */
|
|
@@ -30,7 +30,7 @@ export interface EntryInfoZip64 extends EntryOptionsInternal {
|
|
|
30
30
|
/** Compressed size in bytes */
|
|
31
31
|
compressedSize: bigint;
|
|
32
32
|
/** Entry information is in ZIP64 format */
|
|
33
|
-
zip64:
|
|
33
|
+
zip64: boolean;
|
|
34
34
|
}
|
|
35
35
|
export interface ZipInfo {
|
|
36
36
|
/** Does the archive use ZIP64 format? */
|
|
@@ -42,13 +42,14 @@ export interface ZipInfo {
|
|
|
42
42
|
/** Total size of the ZIP file */
|
|
43
43
|
fileSize: bigint;
|
|
44
44
|
}
|
|
45
|
+
export type EntryInfoZip64 = Omit<EntryInfoInternal, "nameBytes" | "commentBytes" | "zip64"> & {
|
|
46
|
+
zip64: true;
|
|
47
|
+
};
|
|
45
48
|
export type EntryInfoStandard = {
|
|
46
49
|
[K in keyof EntryInfoZip64]: EntryInfoZip64[K] extends bigint ? number : K extends "zip64" ? false : EntryInfoZip64[K];
|
|
47
50
|
};
|
|
48
|
-
export type
|
|
49
|
-
|
|
50
|
-
export type EntryInfo = OmitUnion<EntryInfoInternal, "nameBytes" | "commentBytes">;
|
|
51
|
-
export declare class ZipWriter<TIsZip64 extends boolean = false> {
|
|
51
|
+
export type EntryInfo = EntryInfoZip64 | EntryInfoStandard;
|
|
52
|
+
export declare class ZipWriter {
|
|
52
53
|
#private;
|
|
53
54
|
/**
|
|
54
55
|
* @param crc Optional CRC32 function to use. Defaults to zlib.crc32 on Node and a pure JS implementation in browsers.
|
|
@@ -107,5 +108,4 @@ export declare class ZipWriter<TIsZip64 extends boolean = false> {
|
|
|
107
108
|
entries?: EntryInfo[];
|
|
108
109
|
}): Promise<ZipInfo>;
|
|
109
110
|
}
|
|
110
|
-
export {};
|
|
111
111
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,yBAAyB;IACzB,SAAS,EAAE,UAAU,CAAC;IACtB,4BAA4B;IAC5B,YAAY,EAAE,UAAU,CAAC;CAC1B;AAED,MAAM,WAAW,KAAM,SAAQ,YAAY;IACzC,oCAAoC;IACpC,QAAQ,EAAE,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB;IAC7D,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,6CAA6C;IAC7C,uBAAuB,EAAE,MAAM,CAAC;IAChC,2CAA2C;IAC3C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,iBAAiB,EACjB,WAAW,GAAG,cAAc,GAAG,OAAO,CACvC,GAAG;IACF,KAAK,EAAE,IAAI,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;KAC7B,CAAC,IAAI,MAAM,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,SAAS,MAAM,GACzD,MAAM,GACN,CAAC,SAAS,OAAO,GACf,KAAK,GACL,cAAc,CAAC,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,iBAAiB,CAAC;AAI3D,qBAAa,SAAS;;IAoBpB;;OAEG;gBACS,EACV,KAAoB,GACrB,GAAE;QACD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;KAC9D;IAIN,IAAI,QAAQ,qDAEX;IAED;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAM/B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IA4JlE;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAE;QAAE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAiExE"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getCDFH,
|
|
3
|
-
import {
|
|
4
|
-
import { noop, validateEntryOptions } from "./utils.js";
|
|
1
|
+
import { getDataDescriptor, getLocalFileHeader } from "./write-entry.js";
|
|
2
|
+
import { getCDFH, getEOCD } from "./write-central-directory.js";
|
|
3
|
+
import { entryNeedsZip64, eocdNeedsZip64, getPublicEntryInfo, noop, validateEntryOptions, } from "./utils.js";
|
|
5
4
|
import { crc32 as crc32Default } from "#crc32";
|
|
6
5
|
import Mutex from "p-mutex";
|
|
7
6
|
const BUFFER_SIZE = 16 * 1024; // 16 KB
|
|
@@ -39,10 +38,7 @@ export class ZipWriter {
|
|
|
39
38
|
* Get an array of entry information for all entries added so far to the ZIP archive.
|
|
40
39
|
*/
|
|
41
40
|
entries() {
|
|
42
|
-
return this.#mutex.withLock(() => this.#entries.map((entry) =>
|
|
43
|
-
const { nameBytes, commentBytes, ...publicEntryInfo } = entry;
|
|
44
|
-
return publicEntryInfo;
|
|
45
|
-
}));
|
|
41
|
+
return this.#mutex.withLock(() => this.#entries.map((entry) => getPublicEntryInfo(entry)));
|
|
46
42
|
}
|
|
47
43
|
/**
|
|
48
44
|
* Create a new entry in the Zip archive. Use the returned
|
|
@@ -133,35 +129,23 @@ export class ZipWriter {
|
|
|
133
129
|
// Await here to ensure all data has been written, so we know this.#offset is accurate
|
|
134
130
|
await writer.ready;
|
|
135
131
|
const compressedSize = this.#offset - fileStartOffset;
|
|
136
|
-
const needsZip64 =
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
132
|
+
const needsZip64 = entryNeedsZip64({
|
|
133
|
+
uncompressedSize,
|
|
134
|
+
compressedSize,
|
|
135
|
+
startOffset,
|
|
136
|
+
});
|
|
137
|
+
const entryInfo = {
|
|
138
|
+
...entryOptionsInternal,
|
|
139
|
+
startOffset,
|
|
140
|
+
crc32: checksum,
|
|
141
|
+
uncompressedSize,
|
|
142
|
+
compressedSize,
|
|
143
|
+
zip64: needsZip64,
|
|
144
|
+
};
|
|
140
145
|
try {
|
|
141
146
|
// This is in a try...catch because writing the data descriptor could fail,
|
|
142
147
|
// and we want to abort the output zip readable stream if that happens.
|
|
143
|
-
|
|
144
|
-
entryInfo = {
|
|
145
|
-
...entryOptionsInternal,
|
|
146
|
-
startOffset,
|
|
147
|
-
crc32: checksum,
|
|
148
|
-
uncompressedSize,
|
|
149
|
-
compressedSize,
|
|
150
|
-
zip64: true,
|
|
151
|
-
};
|
|
152
|
-
await writer.write(getDataDescriptorZip64(entryInfo));
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
entryInfo = {
|
|
156
|
-
...entryOptionsInternal,
|
|
157
|
-
startOffset: Number(startOffset),
|
|
158
|
-
crc32: checksum,
|
|
159
|
-
uncompressedSize: Number(uncompressedSize),
|
|
160
|
-
compressedSize: Number(compressedSize),
|
|
161
|
-
zip64: false,
|
|
162
|
-
};
|
|
163
|
-
await writer.write(getDataDescriptorStandard(entryInfo));
|
|
164
|
-
}
|
|
148
|
+
await writer.write(getDataDescriptor(entryInfo));
|
|
165
149
|
}
|
|
166
150
|
catch (err) {
|
|
167
151
|
/* istanbul ignore next -- @preserve */
|
|
@@ -174,9 +158,7 @@ export class ZipWriter {
|
|
|
174
158
|
}
|
|
175
159
|
writer.releaseLock();
|
|
176
160
|
this.#entries.push(entryInfo);
|
|
177
|
-
|
|
178
|
-
const { nameBytes, commentBytes, ...publicEntryInfo } = entryInfo;
|
|
179
|
-
return publicEntryInfo;
|
|
161
|
+
return getPublicEntryInfo(entryInfo);
|
|
180
162
|
});
|
|
181
163
|
// Avoid an uncaught rejection if the user doesn't await entryInfoPromise
|
|
182
164
|
// - error handling can be done on the readable stream
|
|
@@ -192,7 +174,7 @@ export class ZipWriter {
|
|
|
192
174
|
#setEntries(entries) {
|
|
193
175
|
const currentEntriesByOffset = new Map();
|
|
194
176
|
for (const entry of this.#entries) {
|
|
195
|
-
currentEntriesByOffset.set(
|
|
177
|
+
currentEntriesByOffset.set(entry.startOffset, entry);
|
|
196
178
|
}
|
|
197
179
|
// Entries can't have their offset, crc32, compressed size, or uncompressed
|
|
198
180
|
// size changed, but they can be removed, reordered, or have the name and
|
|
@@ -205,15 +187,19 @@ export class ZipWriter {
|
|
|
205
187
|
if (existingEntry.crc32 !== entry.crc32) {
|
|
206
188
|
throw new Error(`Cannot set entries: entry at offset ${entry.startOffset} has different CRC32`);
|
|
207
189
|
}
|
|
208
|
-
if (existingEntry.uncompressedSize !== entry.uncompressedSize) {
|
|
190
|
+
if (existingEntry.uncompressedSize !== BigInt(entry.uncompressedSize)) {
|
|
209
191
|
throw new Error(`Cannot set entries: entry at offset ${entry.startOffset} has different uncompressed size`);
|
|
210
192
|
}
|
|
211
|
-
if (existingEntry.compressedSize !== entry.compressedSize) {
|
|
193
|
+
if (existingEntry.compressedSize !== BigInt(entry.compressedSize)) {
|
|
212
194
|
throw new Error(`Cannot set entries: entry at offset ${entry.startOffset} has different compressed size`);
|
|
213
195
|
}
|
|
214
196
|
}
|
|
197
|
+
// TODO: edge-case a user could pass an entry with an invalid zip64 flag
|
|
215
198
|
this.#entries = entries.map((entry) => ({
|
|
216
199
|
...entry,
|
|
200
|
+
uncompressedSize: BigInt(entry.uncompressedSize),
|
|
201
|
+
compressedSize: BigInt(entry.compressedSize),
|
|
202
|
+
startOffset: BigInt(entry.startOffset),
|
|
217
203
|
nameBytes: textEncoder.encode(entry.name),
|
|
218
204
|
commentBytes: entry.comment
|
|
219
205
|
? textEncoder.encode(entry.comment)
|
|
@@ -271,21 +257,16 @@ export class ZipWriter {
|
|
|
271
257
|
}
|
|
272
258
|
await writer.ready;
|
|
273
259
|
const centralDirectorySize = this.#offset - centralDirectoryStart;
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
eocd = getEOCDZip64(BigInt(this.#entries.length), centralDirectoryStart, centralDirectorySize);
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
eocd = getEOCDStandard(this.#entries.length, Number(centralDirectoryStart), Number(centralDirectorySize));
|
|
284
|
-
}
|
|
260
|
+
const eocdOptions = {
|
|
261
|
+
centralDirectoryStart,
|
|
262
|
+
centralDirectorySize,
|
|
263
|
+
entriesCount: this.#entries.length,
|
|
264
|
+
};
|
|
265
|
+
const eocd = getEOCD(eocdOptions);
|
|
285
266
|
await writer.write(eocd);
|
|
286
267
|
await writer.close();
|
|
287
268
|
return {
|
|
288
|
-
zip64: eocdNeedsZip64 || entryUsesZip64,
|
|
269
|
+
zip64: eocdNeedsZip64(eocdOptions) || entryUsesZip64,
|
|
289
270
|
uncompressedEntriesSize,
|
|
290
271
|
compressedEntriesSize,
|
|
291
272
|
fileSize: this.#offset,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper for creating a ReadableStream from a Uint8Array
|
|
3
|
+
* with proper backpressure handling.
|
|
4
|
+
*
|
|
5
|
+
* @param data The input Uint8Array
|
|
6
|
+
*/
|
|
7
|
+
export declare function readableFromBytes(data: Uint8Array<ArrayBuffer>): ReadableStream<ArrayBufferView<ArrayBufferLike>>;
|
|
8
|
+
//# sourceMappingURL=readable-from-bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readable-from-bytes.d.ts","sourceRoot":"","sources":["../src/readable-from-bytes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,oDAsB9D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper for creating a ReadableStream from a Uint8Array
|
|
3
|
+
* with proper backpressure handling.
|
|
4
|
+
*
|
|
5
|
+
* @param data The input Uint8Array
|
|
6
|
+
*/
|
|
7
|
+
export function readableFromBytes(data) {
|
|
8
|
+
let offset = 0;
|
|
9
|
+
return new ReadableStream({
|
|
10
|
+
pull(controller) {
|
|
11
|
+
if (offset >= data.byteLength) {
|
|
12
|
+
controller.close();
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const chunkSize = Math.min(
|
|
16
|
+
// desiredSize can't be null here - it's only null after close()
|
|
17
|
+
// It could be <=0 under some circumstances, so ensure at least 1 byte is read
|
|
18
|
+
Math.max(controller.desiredSize, 1), data.byteLength - offset);
|
|
19
|
+
const chunk = data.subarray(offset, offset + chunkSize);
|
|
20
|
+
controller.enqueue(chunk);
|
|
21
|
+
offset += chunkSize;
|
|
22
|
+
},
|
|
23
|
+
}, new ByteLengthQueuingStrategy({ highWaterMark: 16 * 1024 }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=readable-from-bytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readable-from-bytes.js","sourceRoot":"","sources":["../src/readable-from-bytes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA6B;IAC7D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,IAAI,cAAc,CACvB;QACE,IAAI,CAAC,UAAU;YACb,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9B,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG;YACxB,gEAAgE;YAChE,8EAA8E;YAC9E,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAY,EAAE,CAAC,CAAC,EACpC,IAAI,CAAC,UAAU,GAAG,MAAM,CACzB,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;YACxD,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,IAAI,SAAS,CAAC;QACtB,CAAC;KACF,EACD,IAAI,yBAAyB,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAC5D,CAAC;AACJ,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { EntryInfo, EntryInfoInternal } from "./index.js";
|
|
1
2
|
export declare function getDosTime(date: Date): number;
|
|
2
3
|
export declare function getDosDate(date: Date): number;
|
|
3
4
|
export declare function noop(): void;
|
|
@@ -20,5 +21,12 @@ declare const OFFSETS: {
|
|
|
20
21
|
setBigUint64: number;
|
|
21
22
|
};
|
|
22
23
|
export declare function writeDataView(view: DataView, values: DataViewValue[], offset?: number): number;
|
|
24
|
+
export declare function entryNeedsZip64({ uncompressedSize, compressedSize, startOffset, }: Pick<EntryInfoInternal, "uncompressedSize" | "compressedSize" | "startOffset">): boolean;
|
|
25
|
+
export declare function eocdNeedsZip64(options: {
|
|
26
|
+
centralDirectoryStart: bigint;
|
|
27
|
+
centralDirectorySize: bigint;
|
|
28
|
+
entriesCount: number;
|
|
29
|
+
}): boolean;
|
|
30
|
+
export declare function getPublicEntryInfo(entryInfo: EntryInfoInternal): EntryInfo;
|
|
23
31
|
export {};
|
|
24
32
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAM7C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAM7C;AAED,wBAAgB,IAAI,SAAK;AAEzB;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,YAAY,EACZ,IAAI,GACL,EAAE;IACD,SAAS,EAAE,UAAU,CAAC;IACtB,YAAY,EAAE,UAAU,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,IAAI,CAuBP;AAED,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,OAAO,OAAO,GAAG,MAAM,OAAO,OAAO,IACtE,CAAC,SAAS,cAAc,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzE,eAAO,MAAM,MAAM,cAAc,CAAC;AAClC,eAAO,MAAM,MAAM,cAAc,CAAC;AAClC,eAAO,MAAM,MAAM,iBAAiB,CAAC;AAGrC,QAAA,MAAM,OAAO;;;;CAImB,CAAC;AAEjC,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,aAAa,EAAE,EACvB,MAAM,GAAE,MAAU,GACjB,MAAM,CAOR;AAED,wBAAgB,eAAe,CAAC,EAC9B,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,EAAE,IAAI,CACL,iBAAiB,EACjB,kBAAkB,GAAG,gBAAgB,GAAG,aAAa,CACtD,GAAG,OAAO,CAMV;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAMV;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,SAAS,CAgB1E"}
|
package/dist/utils.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ZIP64_LIMIT } from "./constants.js";
|
|
1
2
|
export function getDosTime(date) {
|
|
2
3
|
return ((date.getHours() << 11) |
|
|
3
4
|
(date.getMinutes() << 5) |
|
|
@@ -45,4 +46,32 @@ export function writeDataView(view, values, offset = 0) {
|
|
|
45
46
|
}
|
|
46
47
|
return offset;
|
|
47
48
|
}
|
|
49
|
+
export function entryNeedsZip64({ uncompressedSize, compressedSize, startOffset, }) {
|
|
50
|
+
return (uncompressedSize >= ZIP64_LIMIT ||
|
|
51
|
+
compressedSize >= ZIP64_LIMIT ||
|
|
52
|
+
startOffset >= ZIP64_LIMIT);
|
|
53
|
+
}
|
|
54
|
+
export function eocdNeedsZip64(options) {
|
|
55
|
+
return (options.centralDirectoryStart >= ZIP64_LIMIT ||
|
|
56
|
+
options.centralDirectorySize >= ZIP64_LIMIT ||
|
|
57
|
+
options.entriesCount >= 0xffff);
|
|
58
|
+
}
|
|
59
|
+
export function getPublicEntryInfo(entryInfo) {
|
|
60
|
+
const { nameBytes, commentBytes, ...rest } = entryInfo;
|
|
61
|
+
if (rest.zip64) {
|
|
62
|
+
return {
|
|
63
|
+
...rest,
|
|
64
|
+
zip64: true,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
return {
|
|
69
|
+
...rest,
|
|
70
|
+
zip64: false,
|
|
71
|
+
uncompressedSize: Number(rest.uncompressedSize),
|
|
72
|
+
compressedSize: Number(rest.compressedSize),
|
|
73
|
+
startOffset: Number(rest.startOffset),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
48
77
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,OAAO,CACL,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACxB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,OAAO,CACL,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,KAAI,CAAC;AAEzB;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,SAAS,EACT,YAAY,EACZ,IAAI,GAKL;IACC,gBAAgB;IAChB,IAAI,SAAS,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,UAAU,CAClB,wDAAwD,SAAS,CAAC,MAAM,SAAS,CAClF,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,IAAI,YAAY,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QACjC,MAAM,IAAI,UAAU,CAClB,2DAA2D,YAAY,CAAC,MAAM,SAAS,CACxF,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;YACzD,MAAM,IAAI,UAAU,CAClB,yDAAyD,IAAI,GAAG,CACjE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAKD,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC;AAClC,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC;AAClC,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC;AAGrC,MAAM,OAAO,GAAG;IACd,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IACZ,YAAY,EAAE,CAAC;CACe,CAAC;AAEjC,MAAM,UAAU,aAAa,CAC3B,IAAc,EACd,MAAuB,EACvB,SAAiB,CAAC;IAElB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,MAAM,EAAE,CAAC;QACnD,mBAAmB;QACnB,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAC1C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,5 +10,9 @@ export declare function getEOCDStandard(entriesCount: number, centralDirectoryOf
|
|
|
10
10
|
/**
|
|
11
11
|
* Generate the ZIP64 End of Central Directory record.
|
|
12
12
|
*/
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function getEOCD(options: {
|
|
14
|
+
entriesCount: number;
|
|
15
|
+
centralDirectoryStart: bigint;
|
|
16
|
+
centralDirectorySize: bigint;
|
|
17
|
+
}): Uint8Array<ArrayBuffer>;
|
|
14
18
|
//# sourceMappingURL=write-central-directory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-central-directory.d.ts","sourceRoot":"","sources":["../src/write-central-directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"write-central-directory.d.ts","sourceRoot":"","sources":["../src/write-central-directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AAiCpB;;GAEG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,iBAAiB,GAAG,UAAU,CAAC,WAAW,CAAC,CAoG7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,sBAAsB,EAAE,MAAM,EAC9B,oBAAoB,EAAE,MAAM,GAC3B,UAAU,CAAC,WAAW,CAAC,CAwBzB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;CAC9B,GAAG,UAAU,CAAC,WAAW,CAAC,CAkF1B"}
|
|
@@ -1,90 +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, validateEntryOptions, } 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
|
-
return getCDFHZip64(entryInfo);
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
return getCDFHStandard(entryInfo);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function getCDFHStandard(entryInfo) {
|
|
16
|
-
const { nameBytes, commentBytes } = entryInfo;
|
|
7
|
+
const { nameBytes, commentBytes, zip64 } = entryInfo;
|
|
17
8
|
validateEntryOptions(entryInfo);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// Compression method
|
|
36
|
-
[UINT16, compressionMethod, LITTLE_ENDIAN],
|
|
37
|
-
// Last mod file time & date
|
|
38
|
-
[UINT16, getDosTime(date), LITTLE_ENDIAN],
|
|
39
|
-
[UINT16, getDosDate(date), LITTLE_ENDIAN],
|
|
40
|
-
// CRC-32
|
|
41
|
-
[UINT32, entryInfo.crc32, LITTLE_ENDIAN],
|
|
42
|
-
// Compressed size
|
|
43
|
-
[UINT32, entryInfo.compressedSize, LITTLE_ENDIAN],
|
|
44
|
-
// Uncompressed size
|
|
45
|
-
[UINT32, entryInfo.uncompressedSize, LITTLE_ENDIAN],
|
|
46
|
-
// File name length
|
|
47
|
-
[UINT16, nameBytes.length, LITTLE_ENDIAN],
|
|
48
|
-
// Extra field length
|
|
49
|
-
[UINT16, 0, LITTLE_ENDIAN],
|
|
50
|
-
// File comment length
|
|
51
|
-
[UINT16, commentBytes.length, LITTLE_ENDIAN],
|
|
52
|
-
// Disk number start
|
|
53
|
-
[UINT16, 0, LITTLE_ENDIAN],
|
|
54
|
-
// Internal file attributes
|
|
55
|
-
[UINT16, 0, LITTLE_ENDIAN],
|
|
56
|
-
// External file attributes (Unix permissions if provided)
|
|
57
|
-
[UINT32, externalAttrs, LITTLE_ENDIAN],
|
|
58
|
-
// Relative offset of local header
|
|
59
|
-
[UINT32, entryInfo.startOffset, LITTLE_ENDIAN],
|
|
60
|
-
]);
|
|
61
|
-
// File name
|
|
62
|
-
header.set(nameBytes, offset);
|
|
63
|
-
offset += nameBytes.length;
|
|
64
|
-
// File comment
|
|
65
|
-
if (commentBytes.length > 0) {
|
|
66
|
-
header.set(commentBytes, offset);
|
|
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
|
+
]);
|
|
67
26
|
}
|
|
68
|
-
return header;
|
|
69
|
-
}
|
|
70
|
-
function getCDFHZip64(entryInfo) {
|
|
71
|
-
const { nameBytes, commentBytes } = entryInfo;
|
|
72
|
-
validateEntryOptions(entryInfo);
|
|
73
|
-
// Extra field for ZIP64
|
|
74
|
-
const extraField = new Uint8Array(28); // ZIP64 extra field
|
|
75
|
-
const extraView = new DataView(extraField.buffer);
|
|
76
|
-
writeDataView(extraView, [
|
|
77
|
-
// ZIP64 extra field tag
|
|
78
|
-
[UINT16, 0x0001, LITTLE_ENDIAN],
|
|
79
|
-
// Size of extra field data (3x 8-byte fields)
|
|
80
|
-
[UINT16, 24, LITTLE_ENDIAN],
|
|
81
|
-
// Original size
|
|
82
|
-
[UINT64, entryInfo.uncompressedSize, LITTLE_ENDIAN],
|
|
83
|
-
// Compressed size
|
|
84
|
-
[UINT64, entryInfo.compressedSize, LITTLE_ENDIAN],
|
|
85
|
-
// Relative header offset
|
|
86
|
-
[UINT64, entryInfo.startOffset, LITTLE_ENDIAN],
|
|
87
|
-
]);
|
|
88
27
|
const headerSize = CENTRAL_DIRECTORY_HEADER_SIZE +
|
|
89
28
|
nameBytes.length +
|
|
90
29
|
extraField.length +
|
|
@@ -102,7 +41,11 @@ function getCDFHZip64(entryInfo) {
|
|
|
102
41
|
// Version made by
|
|
103
42
|
[UINT16, VERSION_MADE_BY, LITTLE_ENDIAN],
|
|
104
43
|
// Version needed to extract
|
|
105
|
-
[
|
|
44
|
+
[
|
|
45
|
+
UINT16,
|
|
46
|
+
zip64 ? VERSION_NEEDED_ZIP64 : VERSION_NEEDED_STANDARD,
|
|
47
|
+
LITTLE_ENDIAN,
|
|
48
|
+
],
|
|
106
49
|
// General purpose bit flag
|
|
107
50
|
[UINT16, GENERAL_PURPOSE_FLAGS, LITTLE_ENDIAN],
|
|
108
51
|
// Compression method
|
|
@@ -113,9 +56,17 @@ function getCDFHZip64(entryInfo) {
|
|
|
113
56
|
// CRC-32
|
|
114
57
|
[UINT32, entryInfo.crc32, LITTLE_ENDIAN],
|
|
115
58
|
// Compressed size (0xFFFFFFFF for ZIP64)
|
|
116
|
-
[
|
|
59
|
+
[
|
|
60
|
+
UINT32,
|
|
61
|
+
zip64 ? MAX_4_BYTE : Number(entryInfo.compressedSize),
|
|
62
|
+
LITTLE_ENDIAN,
|
|
63
|
+
],
|
|
117
64
|
// Uncompressed size (0xFFFFFFFF for ZIP64)
|
|
118
|
-
[
|
|
65
|
+
[
|
|
66
|
+
UINT32,
|
|
67
|
+
zip64 ? MAX_4_BYTE : Number(entryInfo.uncompressedSize),
|
|
68
|
+
LITTLE_ENDIAN,
|
|
69
|
+
],
|
|
119
70
|
// File name length
|
|
120
71
|
[UINT16, nameBytes.length, LITTLE_ENDIAN],
|
|
121
72
|
// Extra field length
|
|
@@ -129,14 +80,16 @@ function getCDFHZip64(entryInfo) {
|
|
|
129
80
|
// External file attributes (Unix permissions if provided)
|
|
130
81
|
[UINT32, externalAttrs, LITTLE_ENDIAN],
|
|
131
82
|
// Relative offset of local header (0xFFFFFFFF for ZIP64)
|
|
132
|
-
[UINT32, 0xffffffff, LITTLE_ENDIAN],
|
|
83
|
+
[UINT32, zip64 ? 0xffffffff : Number(entryInfo.startOffset), LITTLE_ENDIAN],
|
|
133
84
|
]);
|
|
134
85
|
// File name
|
|
135
86
|
header.set(nameBytes, offset);
|
|
136
87
|
offset += nameBytes.length;
|
|
137
88
|
// Extra field
|
|
138
|
-
|
|
139
|
-
|
|
89
|
+
if (extraField.length > 0) {
|
|
90
|
+
header.set(extraField, offset);
|
|
91
|
+
offset += extraField.length;
|
|
92
|
+
}
|
|
140
93
|
// File comment
|
|
141
94
|
if (commentBytes.length > 0) {
|
|
142
95
|
header.set(commentBytes, offset);
|
|
@@ -172,42 +125,51 @@ export function getEOCDStandard(entriesCount, centralDirectoryOffset, centralDir
|
|
|
172
125
|
/**
|
|
173
126
|
* Generate the ZIP64 End of Central Directory record.
|
|
174
127
|
*/
|
|
175
|
-
export function
|
|
176
|
-
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;
|
|
177
134
|
const buffer = new Uint8Array(totalSize);
|
|
178
135
|
const view = new DataView(buffer.buffer);
|
|
179
|
-
let offset =
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
|
|
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, [
|
|
211
173
|
// End of central dir signature
|
|
212
174
|
[UINT32, END_OF_CENTRAL_DIR_SIGNATURE, BIG_ENDIAN],
|
|
213
175
|
// Number of this disk
|
|
@@ -215,16 +177,24 @@ export function getEOCDZip64(entriesCount, centralDirectoryOffset, centralDirect
|
|
|
215
177
|
// Disk where central directory starts
|
|
216
178
|
[UINT16, 0, LITTLE_ENDIAN],
|
|
217
179
|
// Number of central directory records on this disk
|
|
218
|
-
[UINT16,
|
|
180
|
+
[UINT16, zip64 ? MAX_2_BYTE : entriesCount, LITTLE_ENDIAN],
|
|
219
181
|
// Total number of central directory records
|
|
220
|
-
[UINT16,
|
|
182
|
+
[UINT16, zip64 ? MAX_2_BYTE : entriesCount, LITTLE_ENDIAN],
|
|
221
183
|
// Size of central directory
|
|
222
|
-
[
|
|
184
|
+
[
|
|
185
|
+
UINT32,
|
|
186
|
+
zip64 ? MAX_4_BYTE : Number(centralDirectorySize),
|
|
187
|
+
LITTLE_ENDIAN,
|
|
188
|
+
],
|
|
223
189
|
// Offset of start of central directory
|
|
224
|
-
[
|
|
190
|
+
[
|
|
191
|
+
UINT32,
|
|
192
|
+
zip64 ? MAX_4_BYTE : Number(centralDirectoryStart),
|
|
193
|
+
LITTLE_ENDIAN,
|
|
194
|
+
],
|
|
225
195
|
// ZIP file comment length
|
|
226
196
|
[UINT16, 0, LITTLE_ENDIAN],
|
|
227
|
-
]);
|
|
197
|
+
], offset);
|
|
228
198
|
return buffer;
|
|
229
199
|
}
|
|
230
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":"AAMA,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,kCAAkC,EAClC,0CAA0C,EAC1C,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,WAAW,EACX,6BAA6B,EAC7B,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,aAAa,
|
|
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,13 +1,9 @@
|
|
|
1
1
|
import type { EntryOptionsInternal } from "./index.js";
|
|
2
2
|
export declare function getLocalFileHeader(options: EntryOptionsInternal): Uint8Array<ArrayBuffer>;
|
|
3
|
-
export declare function
|
|
4
|
-
uncompressedSize: number;
|
|
5
|
-
compressedSize: number;
|
|
6
|
-
crc32: number;
|
|
7
|
-
}): Uint8Array<ArrayBuffer>;
|
|
8
|
-
export declare function getDataDescriptorZip64(entryInfo: {
|
|
3
|
+
export declare function getDataDescriptor(entryInfo: {
|
|
9
4
|
uncompressedSize: bigint;
|
|
10
5
|
compressedSize: bigint;
|
|
6
|
+
startOffset: bigint;
|
|
11
7
|
crc32: number;
|
|
12
8
|
}): Uint8Array<ArrayBuffer>;
|
|
13
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,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;
|
|
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,5 +1,5 @@
|
|
|
1
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, } from "./utils.js";
|
|
2
|
+
import { getDosTime, getDosDate, writeDataView, UINT16, UINT32, UINT64, entryNeedsZip64, } from "./utils.js";
|
|
3
3
|
export function getLocalFileHeader(options) {
|
|
4
4
|
const headerSize = LOCAL_FILE_HEADER_SIZE + options.nameBytes.length;
|
|
5
5
|
const header = new Uint8Array(headerSize);
|
|
@@ -35,33 +35,23 @@ export function getLocalFileHeader(options) {
|
|
|
35
35
|
header.set(options.nameBytes, offset);
|
|
36
36
|
return header;
|
|
37
37
|
}
|
|
38
|
-
export function
|
|
39
|
-
const descriptor = new Uint8Array(DATA_DESCRIPTOR_SIZE);
|
|
40
|
-
const view = new DataView(descriptor.buffer);
|
|
41
|
-
writeDataView(view, [
|
|
42
|
-
// Data descriptor signature
|
|
43
|
-
[UINT32, DATA_DESCRIPTOR_SIGNATURE, BIG_ENDIAN],
|
|
44
|
-
// CRC-32 (4 bytes)
|
|
45
|
-
[UINT32, entryInfo.crc32, LITTLE_ENDIAN],
|
|
46
|
-
// Compressed size (4 bytes)
|
|
47
|
-
[UINT32, entryInfo.compressedSize, LITTLE_ENDIAN],
|
|
48
|
-
// Uncompressed size (4 bytes)
|
|
49
|
-
[UINT32, entryInfo.uncompressedSize, LITTLE_ENDIAN],
|
|
50
|
-
]);
|
|
51
|
-
return descriptor;
|
|
52
|
-
}
|
|
53
|
-
export function getDataDescriptorZip64(entryInfo) {
|
|
38
|
+
export function getDataDescriptor(entryInfo) {
|
|
54
39
|
const descriptor = new Uint8Array(DATA_DESCRIPTOR_SIZE_ZIP64);
|
|
55
40
|
const view = new DataView(descriptor.buffer);
|
|
41
|
+
const needsZip64 = entryNeedsZip64(entryInfo);
|
|
56
42
|
writeDataView(view, [
|
|
57
43
|
// Data descriptor signature
|
|
58
44
|
[UINT32, DATA_DESCRIPTOR_SIGNATURE, BIG_ENDIAN],
|
|
59
45
|
// CRC-32 (4 bytes)
|
|
60
46
|
[UINT32, entryInfo.crc32, LITTLE_ENDIAN],
|
|
61
47
|
// Compressed size (8 bytes)
|
|
62
|
-
|
|
48
|
+
needsZip64
|
|
49
|
+
? [UINT64, entryInfo.compressedSize, LITTLE_ENDIAN]
|
|
50
|
+
: [UINT32, Number(entryInfo.compressedSize), LITTLE_ENDIAN],
|
|
63
51
|
// Uncompressed size (8 bytes)
|
|
64
|
-
|
|
52
|
+
needsZip64
|
|
53
|
+
? [UINT64, entryInfo.uncompressedSize, LITTLE_ENDIAN]
|
|
54
|
+
: [UINT32, Number(entryInfo.uncompressedSize), LITTLE_ENDIAN],
|
|
65
55
|
]);
|
|
66
56
|
return descriptor;
|
|
67
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":"AACA,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,aAAa,EACb,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,MAAM,EACN,MAAM,EACN,MAAM,
|
|
1
|
+
{"version":3,"file":"write-entry.js","sourceRoot":"","sources":["../src/write-entry.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,aAAa,EACb,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,MAAM,EACN,MAAM,EACN,MAAM,EACN,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,kBAAkB,CAChC,OAA6B;IAE7B,MAAM,UAAU,GAAG,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IACxC,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK;QACrC,CAAC,CAAC,wBAAwB;QAC1B,CAAC,CAAC,0BAA0B,CAAC;IAE/B,IAAI,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE;QAC/B,8BAA8B;QAC9B,CAAC,MAAM,EAAE,2BAA2B,EAAE,UAAU,CAAC;QACjD,4BAA4B;QAC5B,CAAC,MAAM,EAAE,uBAAuB,EAAE,aAAa,CAAC;QAChD,2BAA2B;QAC3B,CAAC,MAAM,EAAE,qBAAqB,EAAE,aAAa,CAAC;QAC9C,qBAAqB;QACrB,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,CAAC;QAC1C,4CAA4C;QAC5C,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;QACzC,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;QACzC,wCAAwC;QACxC,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC;QAC1B,iDAAiD;QACjD,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC;QAC1B,mDAAmD;QACnD,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC;QAC1B,mBAAmB;QACnB,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;QACjD,qBAAqB;QACrB,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC;KAC3B,CAAC,CAAC;IAEH,YAAY;IACZ,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAKjC;IACC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAE9C,aAAa,CAAC,IAAI,EAAE;QAClB,4BAA4B;QAC5B,CAAC,MAAM,EAAE,yBAAyB,EAAE,UAAU,CAAC;QAC/C,mBAAmB;QACnB,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC;QACxC,4BAA4B;QAC5B,UAAU;YACR,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,cAAc,EAAE,aAAa,CAAC;YACnD,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC;QAC7D,8BAA8B;QAC9B,UAAU;YACR,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,gBAAgB,EAAE,aAAa,CAAC;YACrD,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC;KAChE,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zip-writer",
|
|
3
|
-
"version": "2.
|
|
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,7 +22,7 @@
|
|
|
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",
|
|
24
28
|
"coverage": "vitest run --coverage",
|