@zip.js/zip.js 2.8.50 → 2.8.52
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 +8 -3
- package/deno.json +1 -1
- package/dist/zip-core-external.js +88 -44
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +89 -43
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +460 -171
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +461 -170
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +460 -171
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +463 -170
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +463 -170
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +89 -43
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +89 -43
- package/dist/zip-native.min.js +1 -1
- package/dist/zip.js +89 -43
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +463 -170
- package/index-native.min.js +1 -1
- package/index.cjs +463 -170
- package/index.d.cts +320 -9
- package/index.d.ts +320 -9
- package/index.min.js +1 -1
- package/lib/core/codec-worker.js +2 -0
- package/lib/core/constants.js +4 -0
- package/lib/core/io.js +32 -2
- package/lib/core/util/compatible-streams.js +3 -8
- package/lib/core/zip-entry.js +8 -0
- package/lib/core/zip-fs.js +289 -131
- package/lib/core/zip-reader.js +15 -6
- package/lib/core/zip-writer.js +135 -29
- package/lib/zip-core-writer.js +2 -0
- package/package.json +5 -5
package/index.d.cts
CHANGED
|
@@ -395,6 +395,8 @@ export interface WorkerConfiguration {
|
|
|
395
395
|
/**
|
|
396
396
|
* `true` to use the native API `CompressionStream`/`DecompressionStream` to compress/decompress data.
|
|
397
397
|
*
|
|
398
|
+
* When compressing, the native API is only used when `level` is undefined or equal to 6, see {@link ZipWriterConstructorOptions#level}.
|
|
399
|
+
*
|
|
398
400
|
* @defaultValue true
|
|
399
401
|
*/
|
|
400
402
|
useCompressionStream?: boolean;
|
|
@@ -1152,6 +1154,12 @@ export class ZipReader<Type> {
|
|
|
1152
1154
|
): AsyncGenerator<Entry, boolean>;
|
|
1153
1155
|
/**
|
|
1154
1156
|
* Closes the zip file
|
|
1157
|
+
*
|
|
1158
|
+
* @remarks It cancels the `ReadableStream` instance passed to the constructor when nothing has been read
|
|
1159
|
+
* from it, which is the only resource a {@link ZipReader} instance can hold. It does nothing otherwise: the
|
|
1160
|
+
* stream is already consumed once {@link ZipReader#getEntries} has read the entries into memory, and the
|
|
1161
|
+
* {@link Reader} instances are never closed, they belong to the caller. The entries returned by
|
|
1162
|
+
* {@link ZipReader#getEntries} can therefore still be read after calling it.
|
|
1155
1163
|
*/
|
|
1156
1164
|
close(): Promise<void>;
|
|
1157
1165
|
}
|
|
@@ -1435,7 +1443,12 @@ export interface ZipReaderOptions {
|
|
|
1435
1443
|
*/
|
|
1436
1444
|
signal?: AbortSignal;
|
|
1437
1445
|
/**
|
|
1438
|
-
* `true` to prevent closing of {@link
|
|
1446
|
+
* `true` to prevent closing of {@link WritableWriter#writable} when calling {@link FileEntry#getData}.
|
|
1447
|
+
*
|
|
1448
|
+
* @remarks
|
|
1449
|
+
* It only applies to the writable owned by the caller. It is ignored by the {@link Writer} instances
|
|
1450
|
+
* returning the written data, such as {@link BlobWriter} or {@link TextWriter}, whose writable is
|
|
1451
|
+
* created internally and must be closed for {@link Writer#getData} to resolve.
|
|
1439
1452
|
*
|
|
1440
1453
|
* @defaultValue false
|
|
1441
1454
|
*/
|
|
@@ -1606,11 +1619,12 @@ export interface LocalDirectory {
|
|
|
1606
1619
|
*/
|
|
1607
1620
|
extraFieldNTFS?: EntryExtraField;
|
|
1608
1621
|
/**
|
|
1609
|
-
* The Unix extra field.
|
|
1622
|
+
* The Info-ZIP Unix type 2 extra field (0x7855). Its uid/gid are stored in the local file header only, the
|
|
1623
|
+
* central directory version carries no data and merely flags their presence.
|
|
1610
1624
|
*/
|
|
1611
1625
|
extraFieldUnix?: EntryExtraField;
|
|
1612
1626
|
/**
|
|
1613
|
-
* The Info-ZIP Unix extra field.
|
|
1627
|
+
* The Info-ZIP New Unix extra field (0x7875), storing variable-length uid/gid in both headers.
|
|
1614
1628
|
*/
|
|
1615
1629
|
extraFieldInfoZip?: EntryExtraField;
|
|
1616
1630
|
/**
|
|
@@ -1694,8 +1708,22 @@ export interface EntryMetaData {
|
|
|
1694
1708
|
filenameUTF8: boolean;
|
|
1695
1709
|
/**
|
|
1696
1710
|
* `true` if the entry is an executable file
|
|
1711
|
+
*
|
|
1712
|
+
* Always `false` when {@link EntryMetaData#symlink} is `true`: the permissions of a symbolic link
|
|
1713
|
+
* are not meaningful, Unix systems store them as `0o777`.
|
|
1697
1714
|
*/
|
|
1698
1715
|
executable: boolean;
|
|
1716
|
+
/**
|
|
1717
|
+
* `true` if the entry is a symbolic link, i.e. if the Unix file type stored in
|
|
1718
|
+
* {@link EntryMetaData#externalFileAttributes} is `S_IFLNK` (`0o120000`).
|
|
1719
|
+
*
|
|
1720
|
+
* The target of the link is the content of the entry, stored as a path with no trailing NUL
|
|
1721
|
+
* character. It is read like any other entry, e.g. with `entry.getData(new TextWriter())`.
|
|
1722
|
+
*
|
|
1723
|
+
* The path is not validated: it can be absolute or escape the archive with `..` segments. It must
|
|
1724
|
+
* be checked before being used to resolve a file.
|
|
1725
|
+
*/
|
|
1726
|
+
symlink: boolean;
|
|
1699
1727
|
/**
|
|
1700
1728
|
* `true` if the content of the entry is encrypted.
|
|
1701
1729
|
*/
|
|
@@ -1819,10 +1847,18 @@ export interface EntryMetaData {
|
|
|
1819
1847
|
};
|
|
1820
1848
|
/**
|
|
1821
1849
|
* Unix owner id when available.
|
|
1850
|
+
*
|
|
1851
|
+
* The value is read from the central directory. The Info-ZIP Unix extra fields type 1 (0x5855) and type 2
|
|
1852
|
+
* (0x7855) store the ids in the local file header only, so entries carrying just these fields leave the
|
|
1853
|
+
* property undefined until the data has been read; the ids are then available in
|
|
1854
|
+
* {@link EntryMetaData#localDirectory}. The Info-ZIP New Unix extra field (0x7875) and the PKWARE Unix
|
|
1855
|
+
* extra field (0x000d) store the ids in both headers and are unaffected.
|
|
1822
1856
|
*/
|
|
1823
1857
|
uid?: number;
|
|
1824
1858
|
/**
|
|
1825
1859
|
* Unix group id when available.
|
|
1860
|
+
*
|
|
1861
|
+
* See {@link EntryMetaData#uid} for the fields storing the ids in the local file header only.
|
|
1826
1862
|
*/
|
|
1827
1863
|
gid?: number;
|
|
1828
1864
|
/**
|
|
@@ -1908,11 +1944,12 @@ export interface EntryMetaData {
|
|
|
1908
1944
|
*/
|
|
1909
1945
|
extraFieldNTFS?: EntryExtraField;
|
|
1910
1946
|
/**
|
|
1911
|
-
* The Unix extra field.
|
|
1947
|
+
* The Info-ZIP Unix type 2 extra field (0x7855). Its uid/gid are stored in the local file header only, the
|
|
1948
|
+
* central directory version carries no data and merely flags their presence.
|
|
1912
1949
|
*/
|
|
1913
1950
|
extraFieldUnix?: EntryExtraField;
|
|
1914
1951
|
/**
|
|
1915
|
-
* The Info-ZIP Unix extra field.
|
|
1952
|
+
* The Info-ZIP New Unix extra field (0x7875), storing variable-length uid/gid in both headers.
|
|
1916
1953
|
*/
|
|
1917
1954
|
extraFieldInfoZip?: EntryExtraField;
|
|
1918
1955
|
/**
|
|
@@ -1941,6 +1978,11 @@ export interface EntryMetaData {
|
|
|
1941
1978
|
extraFieldUSDZ?: EntryExtraField;
|
|
1942
1979
|
/**
|
|
1943
1980
|
* The local file header fields, set when the entry data has been read.
|
|
1981
|
+
*
|
|
1982
|
+
* The local file header is the only place where the Info-ZIP Unix extra fields type 1 (0x5855) and type 2
|
|
1983
|
+
* (0x7855) store the uid/gid, so this is where they are read for entries carrying just these fields, e.g.
|
|
1984
|
+
* with `entry.localDirectory.extraFieldUnixType1.uid`. The values are not merged into
|
|
1985
|
+
* {@link EntryMetaData#uid} and {@link EntryMetaData#gid}, which are read from the central directory.
|
|
1944
1986
|
*/
|
|
1945
1987
|
localDirectory?: LocalDirectory;
|
|
1946
1988
|
}
|
|
@@ -2312,6 +2354,12 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
|
|
|
2312
2354
|
*
|
|
2313
2355
|
* The minimum value is 0 and means that no compression is applied. The maximum value is 9.
|
|
2314
2356
|
*
|
|
2357
|
+
* The native API `CompressionStream` does not support compression levels. Any value other than 6,
|
|
2358
|
+
* its de facto level, disables `useCompressionStream` and compresses the data with the embedded
|
|
2359
|
+
* implementation instead. Note that the compressed data produced at a given level can still vary
|
|
2360
|
+
* between platforms. Set `useCompressionStream` to `false` to get deterministic output across
|
|
2361
|
+
* platforms.
|
|
2362
|
+
*
|
|
2315
2363
|
* @defaultValue 6
|
|
2316
2364
|
*/
|
|
2317
2365
|
level?: number;
|
|
@@ -2331,6 +2379,13 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
|
|
|
2331
2379
|
* The optional `dispose` method is called once the entry has been processed (on success, error, or abort) so a resource-backed buffer can release its resource.
|
|
2332
2380
|
*
|
|
2333
2381
|
* See {@link createOPFSTempStream} for a ready-made OPFS-backed implementation, {@link createSyncAccessHandleTempStream} for a faster worker-only variant, and {@link createBlobTempStream} for a `Blob`-backed one.
|
|
2382
|
+
*
|
|
2383
|
+
* @remarks The `readable` side is consumed only once the `writable` side has been closed, since the local
|
|
2384
|
+
* header written before it holds the size and the CRC-32 of the entry. The object must therefore be able to
|
|
2385
|
+
* hold a whole entry, either by buffering it like the default
|
|
2386
|
+
* `new TransformStream(undefined, undefined, { highWaterMark: Infinity })` does, or by draining it like the
|
|
2387
|
+
* three implementations above do. A factory returning `new TransformStream()` deadlocks instead, its default
|
|
2388
|
+
* queuing strategy holding a single chunk.
|
|
2334
2389
|
*/
|
|
2335
2390
|
createTempStream?: () => TempStream | Promise<TempStream>;
|
|
2336
2391
|
/**
|
|
@@ -2467,6 +2522,12 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
|
|
|
2467
2522
|
* attribute for folder entries, Unix default permissions when `msDosCompatible` is `false`).
|
|
2468
2523
|
*/
|
|
2469
2524
|
externalFileAttributes?: number;
|
|
2525
|
+
/**
|
|
2526
|
+
* The external file attribute.
|
|
2527
|
+
*
|
|
2528
|
+
* @deprecated Use {@link ZipWriterConstructorOptions#externalFileAttributes} instead.
|
|
2529
|
+
*/
|
|
2530
|
+
externalFileAttribute?: number;
|
|
2470
2531
|
/**
|
|
2471
2532
|
* The Unix owner id to write in the Unix extra field or as part of the external attributes.
|
|
2472
2533
|
*/
|
|
@@ -2477,6 +2538,15 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
|
|
|
2477
2538
|
gid?: number;
|
|
2478
2539
|
/**
|
|
2479
2540
|
* The Unix mode (st_mode bits) to use when writing external attributes.
|
|
2541
|
+
*
|
|
2542
|
+
* The value includes the Unix file type, so it is also how a symbolic link is written: pass
|
|
2543
|
+
* `0o120777` and use the path of the link target as the content of the entry. Extractors that
|
|
2544
|
+
* support symbolic links, e.g. Info-ZIP `unzip`, then restore the entry as a link.
|
|
2545
|
+
*
|
|
2546
|
+
* When the value carries no file type, the type of the entry is added: `S_IFDIR` (`0o040000`)
|
|
2547
|
+
* for a folder entry, `S_IFREG` (`0o100000`) otherwise. Set
|
|
2548
|
+
* {@link ZipWriterConstructorOptions#externalFileAttributes} instead to write a mode with no
|
|
2549
|
+
* file type.
|
|
2480
2550
|
*/
|
|
2481
2551
|
unixMode?: number;
|
|
2482
2552
|
/**
|
|
@@ -2505,6 +2575,12 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
|
|
|
2505
2575
|
* @defaultValue 0
|
|
2506
2576
|
*/
|
|
2507
2577
|
internalFileAttributes?: number;
|
|
2578
|
+
/**
|
|
2579
|
+
* The internal file attribute.
|
|
2580
|
+
*
|
|
2581
|
+
* @deprecated Use {@link ZipWriterConstructorOptions#internalFileAttributes} instead.
|
|
2582
|
+
*/
|
|
2583
|
+
internalFileAttribute?: number;
|
|
2508
2584
|
/**
|
|
2509
2585
|
* When provided, the low 8-bit MS-DOS attributes to write into external file attributes.
|
|
2510
2586
|
* Must be an integer between 0 and 255.
|
|
@@ -2537,6 +2613,16 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
|
|
|
2537
2613
|
usdz?: boolean;
|
|
2538
2614
|
/**
|
|
2539
2615
|
* `true` to write the data as-is without compressing it and without crypting it.
|
|
2616
|
+
*
|
|
2617
|
+
* @remarks
|
|
2618
|
+
* The {@link ZipWriterConstructorOptions#level} and {@link ZipWriterAddDataOptions#compressionMethod} options
|
|
2619
|
+
* do not apply to data written as-is, and the entries with no content, e.g. the directories, ignore this
|
|
2620
|
+
* option entirely. Setting the {@link ZipWriterConstructorOptions#password} or the
|
|
2621
|
+
* {@link ZipWriterConstructorOptions#rawPassword} option throws an
|
|
2622
|
+
* {@link ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH} error, unless the
|
|
2623
|
+
* {@link ZipWriterConstructorOptions#encrypted} option is set to `true` to declare that the data is already
|
|
2624
|
+
* encrypted. In that case the password encrypts the other entries only, and the data written as-is keeps the
|
|
2625
|
+
* password it was encrypted with, which is not verified.
|
|
2540
2626
|
*/
|
|
2541
2627
|
passThrough?: boolean;
|
|
2542
2628
|
/**
|
|
@@ -2563,6 +2649,13 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
|
|
|
2563
2649
|
|
|
2564
2650
|
/**
|
|
2565
2651
|
* Represents options passed to {@link FileEntry#getData}, {@link ZipWriter.add} and `{@link ZipDirectory}.export*`.
|
|
2652
|
+
*
|
|
2653
|
+
* @remarks
|
|
2654
|
+
* When passed to `{@link ZipDirectory}.export*`, these functions report the progress of the whole archive instead
|
|
2655
|
+
* of the progress of each entry: {@link EntryDataOnprogressOptions#onstart} and
|
|
2656
|
+
* {@link EntryDataOnprogressOptions#onend} are called once, and the total number of bytes is the sum of the sizes
|
|
2657
|
+
* of all the entries. Use {@link ZipDirectoryEntryExportOptions#onentryprogress} to be notified when each entry
|
|
2658
|
+
* is written.
|
|
2566
2659
|
*/
|
|
2567
2660
|
export interface EntryDataOnprogressOptions {
|
|
2568
2661
|
/**
|
|
@@ -2630,6 +2723,10 @@ declare class ZipEntry {
|
|
|
2630
2723
|
parent?: ZipEntry;
|
|
2631
2724
|
/**
|
|
2632
2725
|
* The uncompressed size of the content.
|
|
2726
|
+
*
|
|
2727
|
+
* @remarks It is the size of the raw compressed content when the entry has been imported with the
|
|
2728
|
+
* `passThrough` option set to `true`, since the entry holds the compressed data in that case. The
|
|
2729
|
+
* uncompressed size of the original entry remains available in {@link ZipEntry#data}.
|
|
2633
2730
|
*/
|
|
2634
2731
|
uncompressedSize: number;
|
|
2635
2732
|
/**
|
|
@@ -2815,6 +2912,23 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
2815
2912
|
* @returns A {@link ZipFileEntry} or a {@link ZipDirectoryEntry} instance (use the {@link ZipFileEntry#directory} and {@link ZipDirectoryEntry#directory} properties to differentiate entries).
|
|
2816
2913
|
*/
|
|
2817
2914
|
getChildByName(name: string): ZipEntry | undefined;
|
|
2915
|
+
/**
|
|
2916
|
+
* Gets the children of the directory
|
|
2917
|
+
*
|
|
2918
|
+
* @remarks The returned array is a snapshot taken when the method is called: entries added or removed
|
|
2919
|
+
* afterwards are not reflected, and an entry removed while the array is being iterated is still present
|
|
2920
|
+
* but detached from the filesystem.
|
|
2921
|
+
*
|
|
2922
|
+
* With `recursive`, the descendants are ordered level by level, i.e. the children of a directory come
|
|
2923
|
+
* before the children of its subdirectories, like the result of `readdir(path, { recursive: true })` in
|
|
2924
|
+
* Node.js. This is also the order in which `{@link ZipDirectoryEntry}#export*()` writes them.
|
|
2925
|
+
*
|
|
2926
|
+
* Unlike {@link FS#entries}, the directory itself is not included and removed entries leave no empty slot.
|
|
2927
|
+
*
|
|
2928
|
+
* @param options The options.
|
|
2929
|
+
* @returns The array of {@link ZipEntry} instances.
|
|
2930
|
+
*/
|
|
2931
|
+
getChildren(options?: ZipDirectoryEntryGetChildrenOptions): ZipEntry[];
|
|
2818
2932
|
/**
|
|
2819
2933
|
* Adds a directory
|
|
2820
2934
|
*
|
|
@@ -2915,6 +3029,10 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
2915
3029
|
/**
|
|
2916
3030
|
* Adds an entry with content provided via a `FileSystemEntry` instance
|
|
2917
3031
|
*
|
|
3032
|
+
* The options apply to every entry added, including the directories. The
|
|
3033
|
+
* {@link ZipWriterConstructorOptions#lastModDate} option replaces the last modification date of the
|
|
3034
|
+
* files, which is otherwise taken from each `FileSystemEntry` instance.
|
|
3035
|
+
*
|
|
2918
3036
|
* @param fileSystemEntry The `FileSystemEntry` instance.
|
|
2919
3037
|
* @param options The options.
|
|
2920
3038
|
* @returns A promise resolving to an array of {@link ZipFileEntry} or a {@link ZipDirectoryEntry} instances.
|
|
@@ -2930,6 +3048,10 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
2930
3048
|
* whose {@link EntryError#entryName} is the path of the handle that failed, relative to the parent
|
|
2931
3049
|
* of `fileSystemHandle`.
|
|
2932
3050
|
*
|
|
3051
|
+
* The options apply to every entry added, including the directories. The
|
|
3052
|
+
* {@link ZipWriterConstructorOptions#lastModDate} option replaces the last modification date of the
|
|
3053
|
+
* files, which is otherwise taken from each `FileSystemHandle` instance.
|
|
3054
|
+
*
|
|
2933
3055
|
* @param fileSystemHandle The `fileSystemHandle` instance.
|
|
2934
3056
|
* @param options The options.
|
|
2935
3057
|
* @returns A promise resolving to an array of {@link ZipFileEntry} or a {@link ZipDirectoryEntry} instances.
|
|
@@ -2943,6 +3065,9 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
2943
3065
|
*
|
|
2944
3066
|
* @param blob The `Blob` instance.
|
|
2945
3067
|
* @param options The options.
|
|
3068
|
+
*
|
|
3069
|
+
* @remarks Use {@link ZipDirectoryEntry#importZip} with a {@link ZipReader} instance to read the data of the
|
|
3070
|
+
* zip file itself, e.g. its {@link ZipReader#prependedData} or its {@link ZipReader#comment} property.
|
|
2946
3071
|
*/
|
|
2947
3072
|
importBlob(
|
|
2948
3073
|
blob: Blob,
|
|
@@ -2953,6 +3078,9 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
2953
3078
|
*
|
|
2954
3079
|
* @param dataURI The Data URI `string` encoded in Base64.
|
|
2955
3080
|
* @param options The options.
|
|
3081
|
+
*
|
|
3082
|
+
* @remarks Use {@link ZipDirectoryEntry#importZip} with a {@link ZipReader} instance to read the data of the
|
|
3083
|
+
* zip file itself, e.g. its {@link ZipReader#prependedData} or its {@link ZipReader#comment} property.
|
|
2956
3084
|
*/
|
|
2957
3085
|
importData64URI(
|
|
2958
3086
|
dataURI: string,
|
|
@@ -2963,6 +3091,9 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
2963
3091
|
*
|
|
2964
3092
|
* @param array The `Uint8Array` instance.
|
|
2965
3093
|
* @param options The options.
|
|
3094
|
+
*
|
|
3095
|
+
* @remarks Use {@link ZipDirectoryEntry#importZip} with a {@link ZipReader} instance to read the data of the
|
|
3096
|
+
* zip file itself, e.g. its {@link ZipReader#prependedData} or its {@link ZipReader#comment} property.
|
|
2966
3097
|
*/
|
|
2967
3098
|
importUint8Array(
|
|
2968
3099
|
array: Uint8Array,
|
|
@@ -2973,6 +3104,9 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
2973
3104
|
*
|
|
2974
3105
|
* @param url The URL.
|
|
2975
3106
|
* @param options The options.
|
|
3107
|
+
*
|
|
3108
|
+
* @remarks Use {@link ZipDirectoryEntry#importZip} with a {@link ZipReader} instance to read the data of the
|
|
3109
|
+
* zip file itself, e.g. its {@link ZipReader#prependedData} or its {@link ZipReader#comment} property.
|
|
2976
3110
|
*/
|
|
2977
3111
|
importHttpContent(
|
|
2978
3112
|
url: string,
|
|
@@ -2983,21 +3117,30 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
2983
3117
|
*
|
|
2984
3118
|
* @param readable The `ReadableStream` instance.
|
|
2985
3119
|
* @param options The options.
|
|
3120
|
+
*
|
|
3121
|
+
* @remarks Use {@link ZipDirectoryEntry#importZip} with a {@link ZipReader} instance to read the data of the
|
|
3122
|
+
* zip file itself, e.g. its {@link ZipReader#prependedData} or its {@link ZipReader#comment} property.
|
|
2986
3123
|
*/
|
|
2987
3124
|
importReadable(
|
|
2988
3125
|
readable: ReadableStream,
|
|
2989
3126
|
options?: ZipReaderConstructorOptions
|
|
2990
3127
|
): Promise<[ZipEntry]>;
|
|
2991
3128
|
/**
|
|
2992
|
-
* Extracts a zip file provided via a custom {@link Reader} instance
|
|
3129
|
+
* Extracts a zip file provided via a custom {@link Reader} instance or a {@link ZipReader} instance into
|
|
3130
|
+
* the entry
|
|
2993
3131
|
*
|
|
2994
|
-
* @param reader The {@link Reader} instance.
|
|
3132
|
+
* @param reader The {@link Reader} instance or the {@link ZipReader} instance.
|
|
2995
3133
|
* @param options The options.
|
|
2996
3134
|
*
|
|
2997
3135
|
* @remarks The filename of each entry is split into path components to build the tree of entries. Empty
|
|
2998
3136
|
* components and `"."` components are ignored, so `"a//b.txt"`, `"./a/b.txt"` and `"a/./b.txt"` all produce
|
|
2999
3137
|
* the same `"a/b.txt"` entry. Filenames are normalized and validated beforehand, see
|
|
3000
3138
|
* {@link GetEntriesOptions#normalizeFilename} and {@link GetEntriesOptions#filenameValidation}.
|
|
3139
|
+
*
|
|
3140
|
+
* Passing a {@link ZipReader} instance is the way to read the data of the zip file itself, e.g. its
|
|
3141
|
+
* {@link ZipReader#prependedData} or its {@link ZipReader#comment} property, since the instance created
|
|
3142
|
+
* otherwise is not exposed. Its options are used as defaults for the options passed here, and it must not
|
|
3143
|
+
* have read its entries yet when it is created over a `ReadableStream` instance, which can only be read once.
|
|
3001
3144
|
*/
|
|
3002
3145
|
importZip(
|
|
3003
3146
|
reader:
|
|
@@ -3006,7 +3149,8 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
3006
3149
|
| ReadableStream
|
|
3007
3150
|
| Reader<unknown>[]
|
|
3008
3151
|
| ReadableReader[]
|
|
3009
|
-
| ReadableStream[]
|
|
3152
|
+
| ReadableStream[]
|
|
3153
|
+
| ZipReader<unknown>,
|
|
3010
3154
|
options?: ZipReaderConstructorOptions
|
|
3011
3155
|
): Promise<[ZipEntry]>;
|
|
3012
3156
|
/**
|
|
@@ -3064,6 +3208,10 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
3064
3208
|
* Running the same export again is the supported way to recover, since directories are merged and
|
|
3065
3209
|
* files are overwritten.
|
|
3066
3210
|
*
|
|
3211
|
+
* @remarks An entry flagged as a symbolic link by {@link EntryMetaData#symlink} is written
|
|
3212
|
+
* as a regular file whose content is the path of the link target, because the File System Access API cannot
|
|
3213
|
+
* create symbolic links.
|
|
3214
|
+
*
|
|
3067
3215
|
* @param directoryHandle The target `FileSystemDirectoryHandle` instance.
|
|
3068
3216
|
* @param options The options.
|
|
3069
3217
|
* @returns A promise resolving to the target `FileSystemDirectoryHandle` instance.
|
|
@@ -3087,6 +3235,34 @@ export class ZipDirectoryEntry extends ZipEntry {
|
|
|
3087
3235
|
| AsyncGenerator<Writer<unknown> | WritableWriter | WritableStream>,
|
|
3088
3236
|
options?: ZipDirectoryEntryExportOptions
|
|
3089
3237
|
): Promise<unknown>;
|
|
3238
|
+
/**
|
|
3239
|
+
* Computes the exact size in bytes of the zip file that `export*()` would produce for the entry
|
|
3240
|
+
* and its descendants, without reading or compressing any data.
|
|
3241
|
+
*
|
|
3242
|
+
* Pass the same options object that will be passed to the export method, otherwise the result
|
|
3243
|
+
* will not match. The size is only determinable when every descendant is stored (i.e. `level` is
|
|
3244
|
+
* set to 0) or passed through, and has a known size; {@link ERR_UNDETERMINED_SIZE} is thrown
|
|
3245
|
+
* otherwise. Encryption does not prevent it, the overhead of ZipCrypto and AES being fixed.
|
|
3246
|
+
*
|
|
3247
|
+
* The intended use is setting the `Content-Length` header of a zip file streamed over HTTP.
|
|
3248
|
+
*
|
|
3249
|
+
* @remarks Entries added with {@link ZipDirectoryEntry#addReadable} never have a known size, and
|
|
3250
|
+
* entries added with {@link ZipDirectoryEntry#addHttpContent} only get one once their content has
|
|
3251
|
+
* been read. The returned size assumes a single output file, it does not apply to split zip files.
|
|
3252
|
+
*
|
|
3253
|
+
* {@link ERR_UNDETERMINED_SIZE} is also thrown when the size depends on the order in which the
|
|
3254
|
+
* entries are physically written, which the buffered write path only determines at write time.
|
|
3255
|
+
* This happens when `usdz` is set, since the alignment padding depends on the offset of each
|
|
3256
|
+
* entry, and when the archive exceeds 4GB, since the offsets recorded in the central directory
|
|
3257
|
+
* are then extended to 64 bits. Passing `bufferedWrite: false` makes both determinable again,
|
|
3258
|
+
* as does exporting a directory whose children are all files. It is thrown as well when
|
|
3259
|
+
* `signCentralDirectory` is set, the length of the signature being unknown until it is computed.
|
|
3260
|
+
*
|
|
3261
|
+
* @param options The options.
|
|
3262
|
+
* @returns A promise resolving to the size in bytes.
|
|
3263
|
+
* @throws {@link ERR_UNDETERMINED_SIZE} if the size cannot be determined.
|
|
3264
|
+
*/
|
|
3265
|
+
getExportedSize(options?: ZipDirectoryEntryExportOptions): Promise<number>;
|
|
3090
3266
|
}
|
|
3091
3267
|
|
|
3092
3268
|
/**
|
|
@@ -3096,8 +3272,51 @@ export interface ZipDirectoryEntryImportHttpOptions
|
|
|
3096
3272
|
extends ZipReaderConstructorOptions,
|
|
3097
3273
|
HttpOptions {}
|
|
3098
3274
|
|
|
3275
|
+
/**
|
|
3276
|
+
* Represents the options passed to {@link ZipDirectoryEntry#getChildren} and {@link FS#getChildren}.
|
|
3277
|
+
*/
|
|
3278
|
+
export interface ZipDirectoryEntryGetChildrenOptions {
|
|
3279
|
+
/**
|
|
3280
|
+
* `true` to return all the descendants of the directory instead of its direct children only.
|
|
3281
|
+
*
|
|
3282
|
+
* @defaultValue false
|
|
3283
|
+
*/
|
|
3284
|
+
recursive?: boolean;
|
|
3285
|
+
}
|
|
3286
|
+
|
|
3099
3287
|
/**
|
|
3100
3288
|
* Represents the options passed to `{@link ZipDirectoryEntry}#export*()`.
|
|
3289
|
+
*
|
|
3290
|
+
* @remarks
|
|
3291
|
+
* The options set here apply to every entry of the exported zip file, including the entries imported
|
|
3292
|
+
* from a zip file: such an entry keeps the metadata of the entry it was imported from, e.g. its
|
|
3293
|
+
* {@link ZipWriterConstructorOptions#lastModDate} option, only when the option is not set here. The
|
|
3294
|
+
* options passed when adding an entry to the filesystem take precedence over the options set here, and
|
|
3295
|
+
* the options describing the data of the entries exported as-is, e.g.
|
|
3296
|
+
* {@link ZipWriterConstructorOptions#compressionMethod} and
|
|
3297
|
+
* {@link ZipWriterAddDataOptions#uncompressedSize}, are always the ones of the original entries.
|
|
3298
|
+
*
|
|
3299
|
+
* The {@link ZipWriterConstructorOptions#password} option encrypts the exported zip file. It never
|
|
3300
|
+
* decrypts the entries being exported: the password of an entry imported from an encrypted zip file
|
|
3301
|
+
* must be passed in the {@link ZipDirectoryEntryExportOptions#readerOptions} option instead.
|
|
3302
|
+
*
|
|
3303
|
+
* Likewise, the {@link ZipWriterConstructorOptions#passThrough} option describes the data returned
|
|
3304
|
+
* by the Reader instances. Exporting entries imported from a zip file as-is is done with the
|
|
3305
|
+
* {@link ZipReaderOptions#passThrough} option in the
|
|
3306
|
+
* {@link ZipDirectoryEntryExportOptions#readerOptions} option instead. Setting it here throws an
|
|
3307
|
+
* {@link ERR_INVALID_PASS_THROUGH} error, unless the {@link ZipWriterAddDataOptions#uncompressedSize}
|
|
3308
|
+
* option of every entry holding content is known.
|
|
3309
|
+
*
|
|
3310
|
+
* Exporting entries as-is and setting the {@link ZipWriterConstructorOptions#password} option throws an
|
|
3311
|
+
* {@link ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH} error, since the data of these entries is copied
|
|
3312
|
+
* verbatim and cannot be encrypted. Entries imported from an encrypted zip file are an exception: they
|
|
3313
|
+
* are exported as-is without error, and keep the password they were encrypted with.
|
|
3314
|
+
*
|
|
3315
|
+
* The {@link ZipWriterConstructorOptions#preventClose} option only applies when the caller owns the
|
|
3316
|
+
* writable, i.e. when a {@link WritableWriter} instance is passed to
|
|
3317
|
+
* {@link ZipDirectoryEntry#exportZip} or {@link ZipDirectoryEntry#exportWritable}. It is ignored by the
|
|
3318
|
+
* other `{@link ZipDirectoryEntry}#export*()` methods, whose Writer instance can only return its data
|
|
3319
|
+
* once its writable is closed.
|
|
3101
3320
|
*/
|
|
3102
3321
|
export interface ZipDirectoryEntryExportOptions
|
|
3103
3322
|
extends ZipWriterConstructorOptions,
|
|
@@ -3111,13 +3330,66 @@ export interface ZipDirectoryEntryExportOptions
|
|
|
3111
3330
|
*/
|
|
3112
3331
|
mimeType?: string;
|
|
3113
3332
|
/**
|
|
3114
|
-
* The
|
|
3333
|
+
* The function called each time an entry is written.
|
|
3334
|
+
*
|
|
3335
|
+
* @remarks
|
|
3336
|
+
* This function reports the entries whereas {@link EntryDataOnprogressOptions#onprogress} reports the
|
|
3337
|
+
* bytes. It is called once per entry, after the entry has been written, so `progress` reaches `total`
|
|
3338
|
+
* when the last entry is written.
|
|
3339
|
+
*
|
|
3340
|
+
* When {@link ZipWriterConstructorOptions#bufferedWrite} is enabled, the entries are written
|
|
3341
|
+
* concurrently: `progress` counts the entries written instead of giving the position of the entry in
|
|
3342
|
+
* the zip file.
|
|
3343
|
+
*
|
|
3344
|
+
* @param progress The number of entries written.
|
|
3345
|
+
* @param total The total number of entries.
|
|
3346
|
+
* @param entry The entry written.
|
|
3347
|
+
* @returns An empty promise or `undefined`.
|
|
3348
|
+
*/
|
|
3349
|
+
onentryprogress?(
|
|
3350
|
+
progress: number,
|
|
3351
|
+
total: number,
|
|
3352
|
+
entry: EntryMetaData
|
|
3353
|
+
): Promise<void> | void;
|
|
3354
|
+
/**
|
|
3355
|
+
* The global comment of the zip file, see {@link ZipWriter#close}.
|
|
3356
|
+
*
|
|
3357
|
+
* @remarks
|
|
3358
|
+
* The {@link ZipWriterAddDataOptions#comment} option is the comment of an entry: setting it here
|
|
3359
|
+
* comments every entry of the exported zip file instead of the zip file itself.
|
|
3360
|
+
*/
|
|
3361
|
+
globalComment?: Uint8Array;
|
|
3362
|
+
/**
|
|
3363
|
+
* The function called for signing the central directory, see
|
|
3364
|
+
* {@link ZipWriterCloseOptions#signCentralDirectory}.
|
|
3365
|
+
*
|
|
3366
|
+
* @param directory The raw data of the central directory records.
|
|
3367
|
+
* @returns The data of the digital signature record.
|
|
3368
|
+
*/
|
|
3369
|
+
signCentralDirectory?(
|
|
3370
|
+
directory: Uint8Array
|
|
3371
|
+
): Uint8Array | PromiseLike<Uint8Array>;
|
|
3372
|
+
/**
|
|
3373
|
+
* The options passed to the Reader instances.
|
|
3374
|
+
*
|
|
3375
|
+
* @remarks
|
|
3376
|
+
* The {@link ZipReaderOptions#password} option must be set here to export entries imported from an
|
|
3377
|
+
* encrypted zip file, since the {@link ZipDirectoryEntryExportOptions#password} option sets the
|
|
3378
|
+
* password used to encrypt the exported zip file instead.
|
|
3379
|
+
*
|
|
3380
|
+
* The {@link ZipReaderOptions#passThrough} option set here exports the entries imported from a zip
|
|
3381
|
+
* file as-is, without decompressing and decrypting them, exactly as importing them with this option
|
|
3382
|
+
* does. It is ignored by the entries added to the filesystem, which are compressed as usual.
|
|
3115
3383
|
*/
|
|
3116
3384
|
readerOptions?: ZipReaderConstructorOptions;
|
|
3117
3385
|
}
|
|
3118
3386
|
|
|
3119
3387
|
/**
|
|
3120
3388
|
* Represents the options passed to {@link ZipDirectoryEntry#exportFileSystemHandle} and {@link FS#exportFileSystemHandle}.
|
|
3389
|
+
*
|
|
3390
|
+
* @remarks
|
|
3391
|
+
* The {@link ZipReaderOptions#preventClose} option is ignored: the export owns the writable of each
|
|
3392
|
+
* file it creates and must close it for the data to be written.
|
|
3121
3393
|
*/
|
|
3122
3394
|
export interface ZipDirectoryEntryExportFileSystemHandleOptions
|
|
3123
3395
|
extends EntryGetDataOptions {
|
|
@@ -3132,6 +3404,15 @@ export interface ZipDirectoryEntryExportFileSystemHandleOptions
|
|
|
3132
3404
|
* @defaultValue false
|
|
3133
3405
|
*/
|
|
3134
3406
|
concurrent?: boolean;
|
|
3407
|
+
/**
|
|
3408
|
+
* The options passed to the Reader instances.
|
|
3409
|
+
*
|
|
3410
|
+
* @remarks
|
|
3411
|
+
* These options override the ones passed at the top level. The {@link ZipReaderOptions#password}
|
|
3412
|
+
* option can be set here or at the top level, unlike {@link ZipDirectoryEntryExportOptions} where
|
|
3413
|
+
* the top-level password encrypts the exported zip file instead.
|
|
3414
|
+
*/
|
|
3415
|
+
readerOptions?: ZipReaderConstructorOptions;
|
|
3135
3416
|
}
|
|
3136
3417
|
|
|
3137
3418
|
/**
|
|
@@ -3156,6 +3437,7 @@ export interface FS
|
|
|
3156
3437
|
extends Pick<
|
|
3157
3438
|
ZipDirectoryEntry,
|
|
3158
3439
|
| "getChildByName"
|
|
3440
|
+
| "getChildren"
|
|
3159
3441
|
| "addDirectory"
|
|
3160
3442
|
| "addText"
|
|
3161
3443
|
| "addBlob"
|
|
@@ -3178,6 +3460,7 @@ export interface FS
|
|
|
3178
3460
|
| "exportWritable"
|
|
3179
3461
|
| "exportFileSystemHandle"
|
|
3180
3462
|
| "exportZip"
|
|
3463
|
+
| "getExportedSize"
|
|
3181
3464
|
| "isPasswordProtected"
|
|
3182
3465
|
| "checkPassword"
|
|
3183
3466
|
> {}
|
|
@@ -3388,6 +3671,10 @@ export const ERR_INVALID_ENCRYPTION_STRENGTH: string;
|
|
|
3388
3671
|
* Unsupported encryption in USDZ files error
|
|
3389
3672
|
*/
|
|
3390
3673
|
export const ERR_UNSUPPORTED_ENCRYPTION_USDZ: string;
|
|
3674
|
+
/**
|
|
3675
|
+
* Unsupported encryption in pass-through entries error
|
|
3676
|
+
*/
|
|
3677
|
+
export const ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH: string;
|
|
3391
3678
|
/**
|
|
3392
3679
|
* Invalid format error
|
|
3393
3680
|
*/
|
|
@@ -3441,8 +3728,13 @@ export const ERR_ITERATOR_COMPLETED_TOO_SOON: string;
|
|
|
3441
3728
|
* Undefined uncompressed size error
|
|
3442
3729
|
*/
|
|
3443
3730
|
export const ERR_UNDEFINED_UNCOMPRESSED_SIZE: string;
|
|
3731
|
+
export const ERR_UNDETERMINED_SIZE: string;
|
|
3444
3732
|
/**
|
|
3445
3733
|
* Undefined reader error
|
|
3734
|
+
*
|
|
3735
|
+
* @remarks Thrown when adding an entry with the {@link ZipWriterConstructorOptions#passThrough} option set to `true`
|
|
3736
|
+
* and no Reader instance: the headers of such an entry describe its content verbatim and would declare content that
|
|
3737
|
+
* is not there. Directory entries are exempt, they have no content to write as-is.
|
|
3446
3738
|
*/
|
|
3447
3739
|
export const ERR_UNDEFINED_READER: string;
|
|
3448
3740
|
/**
|
|
@@ -3496,6 +3788,16 @@ export const ERR_INVALID_LEVEL: string;
|
|
|
3496
3788
|
* would produce an archive that cannot be opened with the equivalent {@link ZipWriterConstructorOptions#password}.
|
|
3497
3789
|
*/
|
|
3498
3790
|
export const ERR_INVALID_PASSWORD_TYPE: string;
|
|
3791
|
+
/**
|
|
3792
|
+
* Invalid passThrough option error (thrown by `{@link ZipDirectoryEntry}#export*()` and
|
|
3793
|
+
* {@link ZipDirectoryEntry#getExportedSize} when an entry would be written as-is without a known uncompressed size)
|
|
3794
|
+
*
|
|
3795
|
+
* @remarks The {@link ZipWriterConstructorOptions#passThrough} option describes the data returned by the Reader
|
|
3796
|
+
* instances, which the filesystem API creates itself. Use the {@link ZipReaderOptions#passThrough} option in the
|
|
3797
|
+
* {@link ZipDirectoryEntryExportOptions#readerOptions} option to export the entries imported from a zip file as-is,
|
|
3798
|
+
* or set the {@link ZipWriterAddDataOptions#uncompressedSize} option of each entry holding compressed data.
|
|
3799
|
+
*/
|
|
3800
|
+
export const ERR_INVALID_PASS_THROUGH: string;
|
|
3499
3801
|
/**
|
|
3500
3802
|
* Entry already exists error (thrown by the filesystem API when adding an entry whose filename already exists)
|
|
3501
3803
|
*/
|
|
@@ -3504,6 +3806,15 @@ export const ERR_ENTRY_EXISTS: string;
|
|
|
3504
3806
|
* Readable stream already consumed error (thrown by the filesystem API when a readable stream is read more than once)
|
|
3505
3807
|
*/
|
|
3506
3808
|
export const ERR_READABLE_CONSUMED: string;
|
|
3809
|
+
/**
|
|
3810
|
+
* Aborted operation error (thrown by {@link ZipDirectoryEntry#exportFileSystemHandle} when it is aborted via
|
|
3811
|
+
* {@link ZipReaderOptions#signal} on platforms which do not support the `reason` argument of
|
|
3812
|
+
* `AbortController#abort()`)
|
|
3813
|
+
*
|
|
3814
|
+
* @remarks The reason passed by the caller is discarded by these platforms and cannot be recovered, so a
|
|
3815
|
+
* `DOMException` named `AbortError` carrying this message is thrown in its place.
|
|
3816
|
+
*/
|
|
3817
|
+
export const ERR_ABORTED: string;
|
|
3507
3818
|
/**
|
|
3508
3819
|
* Unsupported context error (thrown when {@link createSyncAccessHandleTempStream} is used outside a dedicated worker)
|
|
3509
3820
|
*/
|