@loaders.gl/zip 4.0.0-alpha.20 → 4.0.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/dist.min.js +494 -119
  2. package/dist/es5/{parse-zip → file-provider}/data-view-file.js +46 -29
  3. package/dist/es5/file-provider/data-view-file.js.map +1 -0
  4. package/dist/es5/file-provider/file-handle-file.js +234 -0
  5. package/dist/es5/file-provider/file-handle-file.js.map +1 -0
  6. package/dist/es5/file-provider/file-handle.js +101 -0
  7. package/dist/es5/file-provider/file-handle.js.map +1 -0
  8. package/dist/es5/file-provider/file-provider.js +11 -0
  9. package/dist/es5/file-provider/file-provider.js.map +1 -0
  10. package/dist/es5/filesystems/zip-filesystem.js +340 -0
  11. package/dist/es5/filesystems/zip-filesystem.js.map +1 -0
  12. package/dist/es5/hash-file-utility.js +81 -1
  13. package/dist/es5/hash-file-utility.js.map +1 -1
  14. package/dist/es5/index.js +20 -1
  15. package/dist/es5/index.js.map +1 -1
  16. package/dist/es5/parse-zip/cd-file-header.js +58 -16
  17. package/dist/es5/parse-zip/cd-file-header.js.map +1 -1
  18. package/dist/es5/parse-zip/end-of-central-directory.js +10 -12
  19. package/dist/es5/parse-zip/end-of-central-directory.js.map +1 -1
  20. package/dist/es5/parse-zip/local-file-header.js +37 -33
  21. package/dist/es5/parse-zip/local-file-header.js.map +1 -1
  22. package/dist/es5/parse-zip/search-from-the-end.js.map +1 -1
  23. package/dist/es5/zip-loader.js +1 -1
  24. package/dist/esm/{parse-zip → file-provider}/data-view-file.js +1 -0
  25. package/dist/esm/file-provider/data-view-file.js.map +1 -0
  26. package/dist/esm/file-provider/file-handle-file.js +57 -0
  27. package/dist/esm/file-provider/file-handle-file.js.map +1 -0
  28. package/dist/esm/file-provider/file-handle.js +37 -0
  29. package/dist/esm/file-provider/file-handle.js.map +1 -0
  30. package/dist/esm/file-provider/file-provider.js +4 -0
  31. package/dist/esm/file-provider/file-provider.js.map +1 -0
  32. package/dist/esm/filesystems/zip-filesystem.js +86 -0
  33. package/dist/esm/filesystems/zip-filesystem.js.map +1 -0
  34. package/dist/esm/hash-file-utility.js +14 -0
  35. package/dist/esm/hash-file-utility.js.map +1 -1
  36. package/dist/esm/index.js +4 -3
  37. package/dist/esm/index.js.map +1 -1
  38. package/dist/esm/parse-zip/cd-file-header.js +24 -15
  39. package/dist/esm/parse-zip/cd-file-header.js.map +1 -1
  40. package/dist/esm/parse-zip/end-of-central-directory.js +10 -12
  41. package/dist/esm/parse-zip/end-of-central-directory.js.map +1 -1
  42. package/dist/esm/parse-zip/local-file-header.js +16 -15
  43. package/dist/esm/parse-zip/local-file-header.js.map +1 -1
  44. package/dist/esm/parse-zip/search-from-the-end.js.map +1 -1
  45. package/dist/esm/zip-loader.js +1 -1
  46. package/dist/{parse-zip → file-provider}/data-view-file.d.ts +1 -0
  47. package/dist/file-provider/data-view-file.d.ts.map +1 -0
  48. package/dist/{parse-zip → file-provider}/data-view-file.js +2 -0
  49. package/dist/file-provider/file-handle-file.d.ts +53 -0
  50. package/dist/file-provider/file-handle-file.d.ts.map +1 -0
  51. package/dist/file-provider/file-handle-file.js +90 -0
  52. package/dist/file-provider/file-handle.d.ts +40 -0
  53. package/dist/file-provider/file-handle.d.ts.map +1 -0
  54. package/dist/file-provider/file-handle.js +57 -0
  55. package/dist/{parse-zip → file-provider}/file-provider.d.ts +9 -0
  56. package/dist/file-provider/file-provider.d.ts.map +1 -0
  57. package/dist/file-provider/file-provider.js +13 -0
  58. package/dist/filesystems/zip-filesystem.d.ts +44 -0
  59. package/dist/filesystems/zip-filesystem.d.ts.map +1 -0
  60. package/dist/filesystems/zip-filesystem.js +119 -0
  61. package/dist/hash-file-utility.d.ts +7 -0
  62. package/dist/hash-file-utility.d.ts.map +1 -1
  63. package/dist/hash-file-utility.js +24 -1
  64. package/dist/index.d.ts +5 -4
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +7 -3
  67. package/dist/parse-zip/cd-file-header.d.ts +6 -1
  68. package/dist/parse-zip/cd-file-header.d.ts.map +1 -1
  69. package/dist/parse-zip/cd-file-header.js +29 -16
  70. package/dist/parse-zip/end-of-central-directory.d.ts +1 -1
  71. package/dist/parse-zip/end-of-central-directory.d.ts.map +1 -1
  72. package/dist/parse-zip/end-of-central-directory.js +11 -12
  73. package/dist/parse-zip/local-file-header.d.ts +3 -1
  74. package/dist/parse-zip/local-file-header.d.ts.map +1 -1
  75. package/dist/parse-zip/local-file-header.js +17 -15
  76. package/dist/parse-zip/search-from-the-end.d.ts +1 -1
  77. package/dist/parse-zip/search-from-the-end.d.ts.map +1 -1
  78. package/package.json +9 -2
  79. package/src/{parse-zip → file-provider}/data-view-file.ts +3 -0
  80. package/src/file-provider/file-handle-file.ts +114 -0
  81. package/src/file-provider/file-handle.ts +73 -0
  82. package/src/{parse-zip → file-provider}/file-provider.ts +16 -0
  83. package/src/filesystems/zip-filesystem.ts +132 -0
  84. package/src/hash-file-utility.ts +22 -0
  85. package/src/index.ts +10 -4
  86. package/src/parse-zip/cd-file-header.ts +33 -25
  87. package/src/parse-zip/end-of-central-directory.ts +12 -19
  88. package/src/parse-zip/local-file-header.ts +22 -22
  89. package/src/parse-zip/search-from-the-end.ts +1 -1
  90. package/dist/es5/parse-zip/data-view-file.js.map +0 -1
  91. package/dist/es5/parse-zip/file-provider.js +0 -2
  92. package/dist/es5/parse-zip/file-provider.js.map +0 -1
  93. package/dist/esm/parse-zip/data-view-file.js.map +0 -1
  94. package/dist/esm/parse-zip/file-provider.js +0 -2
  95. package/dist/esm/parse-zip/file-provider.js.map +0 -1
  96. package/dist/parse-zip/data-view-file.d.ts.map +0 -1
  97. package/dist/parse-zip/file-provider.d.ts.map +0 -1
  98. package/dist/parse-zip/file-provider.js +0 -2
package/dist/dist.min.js CHANGED
@@ -3027,99 +3027,145 @@
3027
3027
  }
3028
3028
  });
3029
3029
 
3030
- // src/parse-zip/cd-file-header.ts
3031
- var offsets, signature, parseZipCDFileHeader;
3032
- var init_cd_file_header = __esm({
3033
- "src/parse-zip/cd-file-header.ts"() {
3034
- offsets = {
3035
- CD_COMPRESSED_SIZE_OFFSET: 20n,
3036
- CD_UNCOMPRESSED_SIZE_OFFSET: 24n,
3037
- CD_FILE_NAME_LENGTH_OFFSET: 28n,
3038
- CD_EXTRA_FIELD_LENGTH_OFFSET: 30n,
3039
- CD_LOCAL_HEADER_OFFSET_OFFSET: 42n,
3040
- CD_FILE_NAME_OFFSET: 46n
3030
+ // (disabled):fs
3031
+ var init_fs = __esm({
3032
+ "(disabled):fs"() {
3033
+ }
3034
+ });
3035
+
3036
+ // src/file-provider/file-handle.ts
3037
+ var _FileHandle, FileHandle;
3038
+ var init_file_handle = __esm({
3039
+ "src/file-provider/file-handle.ts"() {
3040
+ init_fs();
3041
+ _FileHandle = class {
3042
+ constructor(fileDescriptor, stats) {
3043
+ this.read = (buffer, offset, length, position) => {
3044
+ return new Promise((s) => {
3045
+ (0, import_fs.read)(this.fileDescriptor, buffer, offset, length, position, (_err, bytesRead, buffer2) => s({ bytesRead, buffer: buffer2 }));
3046
+ });
3047
+ };
3048
+ this.fileDescriptor = fileDescriptor;
3049
+ this.stats = stats;
3050
+ }
3051
+ async close() {
3052
+ return new Promise((resolve) => {
3053
+ (0, import_fs.close)(this.fileDescriptor, (_err) => resolve());
3054
+ });
3055
+ }
3056
+ get stat() {
3057
+ return this.stats;
3058
+ }
3041
3059
  };
3042
- signature = [80, 75, 1, 2];
3043
- parseZipCDFileHeader = async (headerOffset, buffer) => {
3044
- if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(Buffer.from(signature)) !== 0) {
3045
- return null;
3060
+ FileHandle = _FileHandle;
3061
+ FileHandle.open = async (path) => {
3062
+ const [fd, stats] = await Promise.all([
3063
+ new Promise((s) => {
3064
+ (0, import_fs.open)(path, void 0, void 0, (_err, fd2) => s(fd2));
3065
+ }),
3066
+ new Promise((s) => {
3067
+ (0, import_fs.stat)(path, { bigint: true }, (_err, stats2) => s(stats2));
3068
+ })
3069
+ ]);
3070
+ return new _FileHandle(fd, stats);
3071
+ };
3072
+ }
3073
+ });
3074
+
3075
+ // src/file-provider/file-handle-file.ts
3076
+ var FileHandleFile;
3077
+ var init_file_handle_file = __esm({
3078
+ "src/file-provider/file-handle-file.ts"() {
3079
+ init_file_handle();
3080
+ FileHandleFile = class {
3081
+ static async from(path) {
3082
+ const fileDescriptor = await FileHandle.open(path);
3083
+ return new FileHandleFile(fileDescriptor, fileDescriptor.stat.size);
3046
3084
  }
3047
- let compressedSize = BigInt(await buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET));
3048
- let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET));
3049
- const extraFieldLength = await buffer.getUint16(headerOffset + offsets.CD_EXTRA_FIELD_LENGTH_OFFSET);
3050
- const fileNameLength = await buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);
3051
- const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets.CD_FILE_NAME_OFFSET, headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength)));
3052
- const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
3053
- const oldFormatOffset = await buffer.getUint32(headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET);
3054
- let fileDataOffset = BigInt(oldFormatOffset);
3055
- let offsetInZip64Data = 4n;
3056
- if (uncompressedSize === BigInt(4294967295)) {
3057
- uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3058
- offsetInZip64Data += 8n;
3085
+ constructor(fileDescriptor, size) {
3086
+ this.fileDescriptor = fileDescriptor;
3087
+ this.size = size;
3059
3088
  }
3060
- if (compressedSize === BigInt(4294967295)) {
3061
- compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3062
- offsetInZip64Data += 8n;
3089
+ async destroy() {
3090
+ await this.fileDescriptor.close();
3063
3091
  }
3064
- if (fileDataOffset === BigInt(4294967295)) {
3065
- fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3092
+ async getUint8(offset) {
3093
+ const val = new Uint8Array((await this.fileDescriptor.read(Buffer.alloc(1), 0, 1, offset)).buffer.buffer).at(0);
3094
+ if (val === void 0) {
3095
+ throw new Error("something went wrong");
3096
+ }
3097
+ return val;
3098
+ }
3099
+ async getUint16(offset) {
3100
+ const val = new Uint16Array((await this.fileDescriptor.read(Buffer.alloc(2), 0, 2, offset)).buffer.buffer).at(0);
3101
+ if (val === void 0) {
3102
+ throw new Error("something went wrong");
3103
+ }
3104
+ return val;
3105
+ }
3106
+ async getUint32(offset) {
3107
+ const val = new Uint32Array((await this.fileDescriptor.read(Buffer.alloc(4), 0, 4, offset)).buffer.buffer).at(0);
3108
+ if (val === void 0) {
3109
+ throw new Error("something went wrong");
3110
+ }
3111
+ return val;
3112
+ }
3113
+ async getBigUint64(offset) {
3114
+ const val = new BigInt64Array((await this.fileDescriptor.read(Buffer.alloc(8), 0, 8, offset)).buffer.buffer).at(0);
3115
+ if (val === void 0) {
3116
+ throw new Error("something went wrong");
3117
+ }
3118
+ return val;
3119
+ }
3120
+ async slice(startOffsset, endOffset) {
3121
+ const bigLength = endOffset - startOffsset;
3122
+ if (bigLength > Number.MAX_SAFE_INTEGER) {
3123
+ throw new Error("too big slice");
3124
+ }
3125
+ const length = Number(bigLength);
3126
+ return (await this.fileDescriptor.read(Buffer.alloc(length), 0, length, startOffsset)).buffer.buffer;
3127
+ }
3128
+ get length() {
3129
+ return this.size;
3066
3130
  }
3067
- const localHeaderOffset = fileDataOffset;
3068
- return {
3069
- compressedSize,
3070
- uncompressedSize,
3071
- extraFieldLength,
3072
- fileNameLength,
3073
- fileName,
3074
- extraOffset,
3075
- localHeaderOffset
3076
- };
3077
3131
  };
3078
3132
  }
3079
3133
  });
3080
3134
 
3081
- // src/parse-zip/local-file-header.ts
3082
- var offsets2, signature2, parseZipLocalFileHeader;
3083
- var init_local_file_header = __esm({
3084
- "src/parse-zip/local-file-header.ts"() {
3085
- offsets2 = {
3086
- COMPRESSED_SIZE_OFFSET: 18n,
3087
- UNCOMPRESSED_SIZE_OFFSET: 22n,
3088
- FILE_NAME_LENGTH_OFFSET: 26n,
3089
- EXTRA_FIELD_LENGTH_OFFSET: 28n,
3090
- FILE_NAME_OFFSET: 30n
3135
+ // src/file-provider/data-view-file.ts
3136
+ var toNumber, DataViewFile;
3137
+ var init_data_view_file = __esm({
3138
+ "src/file-provider/data-view-file.ts"() {
3139
+ toNumber = (bigint) => {
3140
+ if (bigint > Number.MAX_SAFE_INTEGER) {
3141
+ throw new Error("Offset is out of bounds");
3142
+ }
3143
+ return Number(bigint);
3091
3144
  };
3092
- signature2 = Buffer.from([80, 75, 3, 4]);
3093
- parseZipLocalFileHeader = async (headerOffset, buffer) => {
3094
- if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(signature2) !== 0) {
3095
- return null;
3145
+ DataViewFile = class {
3146
+ constructor(file) {
3147
+ this.file = file;
3096
3148
  }
3097
- const fileNameLength = await buffer.getUint16(headerOffset + offsets2.FILE_NAME_LENGTH_OFFSET);
3098
- const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets2.FILE_NAME_OFFSET, headerOffset + offsets2.FILE_NAME_OFFSET + BigInt(fileNameLength))).split("\\").join("/");
3099
- const extraFieldLength = await buffer.getUint16(headerOffset + offsets2.EXTRA_FIELD_LENGTH_OFFSET);
3100
- let fileDataOffset = headerOffset + offsets2.FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength);
3101
- let compressedSize = BigInt(await buffer.getUint32(headerOffset + offsets2.COMPRESSED_SIZE_OFFSET));
3102
- let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + offsets2.UNCOMPRESSED_SIZE_OFFSET));
3103
- const extraOffset = headerOffset + offsets2.FILE_NAME_OFFSET + BigInt(fileNameLength);
3104
- let offsetInZip64Data = 4n;
3105
- if (uncompressedSize === BigInt(4294967295)) {
3106
- uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3107
- offsetInZip64Data += 8n;
3149
+ async destroy() {
3108
3150
  }
3109
- if (compressedSize === BigInt(4294967295)) {
3110
- compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3111
- offsetInZip64Data += 8n;
3151
+ async getUint8(offset) {
3152
+ return this.file.getUint8(toNumber(offset));
3112
3153
  }
3113
- if (fileDataOffset === BigInt(4294967295)) {
3114
- fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3154
+ async getUint16(offset) {
3155
+ return this.file.getUint16(toNumber(offset), true);
3156
+ }
3157
+ async getUint32(offset) {
3158
+ return this.file.getUint32(toNumber(offset), true);
3159
+ }
3160
+ async getBigUint64(offset) {
3161
+ return this.file.getBigUint64(toNumber(offset), true);
3162
+ }
3163
+ async slice(startOffset, endOffset) {
3164
+ return this.file.buffer.slice(toNumber(startOffset), toNumber(endOffset));
3165
+ }
3166
+ get length() {
3167
+ return BigInt(this.file.byteLength);
3115
3168
  }
3116
- return {
3117
- fileNameLength,
3118
- fileName,
3119
- extraFieldLength,
3120
- fileDataOffset,
3121
- compressedSize
3122
- };
3123
3169
  };
3124
3170
  }
3125
3171
  });
@@ -3152,35 +3198,33 @@
3152
3198
  });
3153
3199
 
3154
3200
  // src/parse-zip/end-of-central-directory.ts
3155
- var eoCDSignature, zip64EoCDLocatorSignature, zip64EoCDSignature, offsets3, parseEoCDRecord;
3201
+ var eoCDSignature, zip64EoCDLocatorSignature, zip64EoCDSignature, CD_RECORDS_NUMBER_OFFSET, CD_START_OFFSET_OFFSET, ZIP64_EOCD_START_OFFSET_OFFSET, ZIP64_CD_RECORDS_NUMBER_OFFSET, ZIP64_CD_START_OFFSET_OFFSET, parseEoCDRecord;
3156
3202
  var init_end_of_central_directory = __esm({
3157
3203
  "src/parse-zip/end-of-central-directory.ts"() {
3158
3204
  init_search_from_the_end();
3159
3205
  eoCDSignature = [80, 75, 5, 6];
3160
3206
  zip64EoCDLocatorSignature = Buffer.from([80, 75, 6, 7]);
3161
3207
  zip64EoCDSignature = Buffer.from([80, 75, 6, 6]);
3162
- offsets3 = {
3163
- CD_RECORDS_NUMBER_OFFSET: 8n,
3164
- CD_START_OFFSET_OFFSET: 16n,
3165
- ZIP64_EOCD_START_OFFSET_OFFSET: 8n,
3166
- ZIP64_CD_RECORDS_NUMBER_OFFSET: 24n,
3167
- ZIP64_CD_START_OFFSET_OFFSET: 48n
3168
- };
3208
+ CD_RECORDS_NUMBER_OFFSET = 8n;
3209
+ CD_START_OFFSET_OFFSET = 16n;
3210
+ ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
3211
+ ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
3212
+ ZIP64_CD_START_OFFSET_OFFSET = 48n;
3169
3213
  parseEoCDRecord = async (fileProvider) => {
3170
3214
  const zipEoCDOffset = await searchFromTheEnd(fileProvider, eoCDSignature);
3171
- let cdRecordsNumber = BigInt(await fileProvider.getUint16(zipEoCDOffset + offsets3.CD_RECORDS_NUMBER_OFFSET));
3172
- let cdStartOffset = BigInt(await fileProvider.getUint32(zipEoCDOffset + offsets3.CD_START_OFFSET_OFFSET));
3215
+ let cdRecordsNumber = BigInt(await fileProvider.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
3216
+ let cdStartOffset = BigInt(await fileProvider.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
3173
3217
  if (cdStartOffset === BigInt(4294967295) || cdRecordsNumber === BigInt(4294967295)) {
3174
3218
  const zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
3175
3219
  if (Buffer.from(await fileProvider.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n)).compare(zip64EoCDLocatorSignature) !== 0) {
3176
3220
  throw new Error("zip64 EoCD locator not found");
3177
3221
  }
3178
- const zip64EoCDOffset = await fileProvider.getBigUint64(zip64EoCDLocatorOffset + offsets3.ZIP64_EOCD_START_OFFSET_OFFSET);
3222
+ const zip64EoCDOffset = await fileProvider.getBigUint64(zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET);
3179
3223
  if (Buffer.from(await fileProvider.slice(zip64EoCDOffset, zip64EoCDOffset + 4n)).compare(zip64EoCDSignature) !== 0) {
3180
3224
  throw new Error("zip64 EoCD not found");
3181
3225
  }
3182
- cdRecordsNumber = await fileProvider.getBigUint64(zip64EoCDOffset + offsets3.ZIP64_CD_RECORDS_NUMBER_OFFSET);
3183
- cdStartOffset = await fileProvider.getBigUint64(zip64EoCDOffset + offsets3.ZIP64_CD_START_OFFSET_OFFSET);
3226
+ cdRecordsNumber = await fileProvider.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
3227
+ cdStartOffset = await fileProvider.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
3184
3228
  }
3185
3229
  return {
3186
3230
  cdRecordsNumber,
@@ -3190,46 +3234,355 @@
3190
3234
  }
3191
3235
  });
3192
3236
 
3193
- // src/parse-zip/data-view-file.ts
3194
- var toNumber, DataViewFile;
3195
- var init_data_view_file = __esm({
3196
- "src/parse-zip/data-view-file.ts"() {
3197
- toNumber = (bigint) => {
3198
- if (bigint > Number.MAX_SAFE_INTEGER) {
3199
- throw new Error("Offset is out of bounds");
3237
+ // src/parse-zip/cd-file-header.ts
3238
+ async function* zipCDFileHeaderGenerator(fileProvider) {
3239
+ const { cdStartOffset } = await parseEoCDRecord(fileProvider);
3240
+ let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);
3241
+ while (cdHeader) {
3242
+ yield cdHeader;
3243
+ cdHeader = await parseZipCDFileHeader(cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength), fileProvider);
3244
+ }
3245
+ }
3246
+ var CD_COMPRESSED_SIZE_OFFSET, CD_UNCOMPRESSED_SIZE_OFFSET, CD_FILE_NAME_LENGTH_OFFSET, CD_EXTRA_FIELD_LENGTH_OFFSET, CD_LOCAL_HEADER_OFFSET_OFFSET, CD_FILE_NAME_OFFSET, signature, parseZipCDFileHeader;
3247
+ var init_cd_file_header = __esm({
3248
+ "src/parse-zip/cd-file-header.ts"() {
3249
+ init_end_of_central_directory();
3250
+ CD_COMPRESSED_SIZE_OFFSET = 20n;
3251
+ CD_UNCOMPRESSED_SIZE_OFFSET = 24n;
3252
+ CD_FILE_NAME_LENGTH_OFFSET = 28n;
3253
+ CD_EXTRA_FIELD_LENGTH_OFFSET = 30n;
3254
+ CD_LOCAL_HEADER_OFFSET_OFFSET = 42n;
3255
+ CD_FILE_NAME_OFFSET = 46n;
3256
+ signature = [80, 75, 1, 2];
3257
+ parseZipCDFileHeader = async (headerOffset, buffer) => {
3258
+ if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(Buffer.from(signature)) !== 0) {
3259
+ return null;
3200
3260
  }
3201
- return Number(bigint);
3202
- };
3203
- DataViewFile = class {
3204
- constructor(file) {
3205
- this.file = file;
3261
+ let compressedSize = BigInt(await buffer.getUint32(headerOffset + CD_COMPRESSED_SIZE_OFFSET));
3262
+ let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + CD_UNCOMPRESSED_SIZE_OFFSET));
3263
+ const extraFieldLength = await buffer.getUint16(headerOffset + CD_EXTRA_FIELD_LENGTH_OFFSET);
3264
+ const fileNameLength = await buffer.getUint16(headerOffset + CD_FILE_NAME_LENGTH_OFFSET);
3265
+ const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + CD_FILE_NAME_OFFSET, headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength)));
3266
+ const extraOffset = headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
3267
+ const oldFormatOffset = await buffer.getUint32(headerOffset + CD_LOCAL_HEADER_OFFSET_OFFSET);
3268
+ let fileDataOffset = BigInt(oldFormatOffset);
3269
+ let offsetInZip64Data = 4n;
3270
+ if (uncompressedSize === BigInt(4294967295)) {
3271
+ uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3272
+ offsetInZip64Data += 8n;
3206
3273
  }
3207
- async getUint8(offset) {
3208
- return this.file.getUint8(toNumber(offset));
3274
+ if (compressedSize === BigInt(4294967295)) {
3275
+ compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3276
+ offsetInZip64Data += 8n;
3209
3277
  }
3210
- async getUint16(offset) {
3211
- return this.file.getUint16(toNumber(offset), true);
3278
+ if (fileDataOffset === BigInt(4294967295)) {
3279
+ fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3212
3280
  }
3213
- async getUint32(offset) {
3214
- return this.file.getUint32(toNumber(offset), true);
3281
+ const localHeaderOffset = fileDataOffset;
3282
+ return {
3283
+ compressedSize,
3284
+ uncompressedSize,
3285
+ extraFieldLength,
3286
+ fileNameLength,
3287
+ fileName,
3288
+ extraOffset,
3289
+ localHeaderOffset
3290
+ };
3291
+ };
3292
+ }
3293
+ });
3294
+
3295
+ // src/parse-zip/local-file-header.ts
3296
+ var COMPRESSION_METHOD_OFFSET, COMPRESSED_SIZE_OFFSET, UNCOMPRESSED_SIZE_OFFSET, FILE_NAME_LENGTH_OFFSET, EXTRA_FIELD_LENGTH_OFFSET, FILE_NAME_OFFSET, signature2, parseZipLocalFileHeader;
3297
+ var init_local_file_header = __esm({
3298
+ "src/parse-zip/local-file-header.ts"() {
3299
+ COMPRESSION_METHOD_OFFSET = 8n;
3300
+ COMPRESSED_SIZE_OFFSET = 18n;
3301
+ UNCOMPRESSED_SIZE_OFFSET = 22n;
3302
+ FILE_NAME_LENGTH_OFFSET = 26n;
3303
+ EXTRA_FIELD_LENGTH_OFFSET = 28n;
3304
+ FILE_NAME_OFFSET = 30n;
3305
+ signature2 = Buffer.from([80, 75, 3, 4]);
3306
+ parseZipLocalFileHeader = async (headerOffset, buffer) => {
3307
+ if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(signature2) !== 0) {
3308
+ return null;
3215
3309
  }
3216
- async getBigUint64(offset) {
3217
- return this.file.getBigUint64(toNumber(offset), true);
3310
+ const fileNameLength = await buffer.getUint16(headerOffset + FILE_NAME_LENGTH_OFFSET);
3311
+ const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + FILE_NAME_OFFSET, headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength))).split("\\").join("/");
3312
+ const extraFieldLength = await buffer.getUint16(headerOffset + EXTRA_FIELD_LENGTH_OFFSET);
3313
+ let fileDataOffset = headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength);
3314
+ const compressionMethod = await buffer.getUint16(headerOffset + COMPRESSION_METHOD_OFFSET);
3315
+ let compressedSize = BigInt(await buffer.getUint32(headerOffset + COMPRESSED_SIZE_OFFSET));
3316
+ let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + UNCOMPRESSED_SIZE_OFFSET));
3317
+ const extraOffset = headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength);
3318
+ let offsetInZip64Data = 4n;
3319
+ if (uncompressedSize === BigInt(4294967295)) {
3320
+ uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3321
+ offsetInZip64Data += 8n;
3218
3322
  }
3219
- async slice(startOffset, endOffset) {
3220
- return this.file.buffer.slice(toNumber(startOffset), toNumber(endOffset));
3323
+ if (compressedSize === BigInt(4294967295)) {
3324
+ compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3325
+ offsetInZip64Data += 8n;
3221
3326
  }
3222
- get length() {
3223
- return BigInt(this.file.byteLength);
3327
+ if (fileDataOffset === BigInt(4294967295)) {
3328
+ fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3224
3329
  }
3330
+ return {
3331
+ fileNameLength,
3332
+ fileName,
3333
+ extraFieldLength,
3334
+ fileDataOffset,
3335
+ compressedSize,
3336
+ compressionMethod
3337
+ };
3225
3338
  };
3226
3339
  }
3227
3340
  });
3228
3341
 
3342
+ // ../../node_modules/crypt/crypt.js
3343
+ var require_crypt = __commonJS({
3344
+ "../../node_modules/crypt/crypt.js"(exports, module) {
3345
+ (function() {
3346
+ var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", crypt = {
3347
+ rotl: function(n, b) {
3348
+ return n << b | n >>> 32 - b;
3349
+ },
3350
+ rotr: function(n, b) {
3351
+ return n << 32 - b | n >>> b;
3352
+ },
3353
+ endian: function(n) {
3354
+ if (n.constructor == Number) {
3355
+ return crypt.rotl(n, 8) & 16711935 | crypt.rotl(n, 24) & 4278255360;
3356
+ }
3357
+ for (var i = 0; i < n.length; i++)
3358
+ n[i] = crypt.endian(n[i]);
3359
+ return n;
3360
+ },
3361
+ randomBytes: function(n) {
3362
+ for (var bytes = []; n > 0; n--)
3363
+ bytes.push(Math.floor(Math.random() * 256));
3364
+ return bytes;
3365
+ },
3366
+ bytesToWords: function(bytes) {
3367
+ for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)
3368
+ words[b >>> 5] |= bytes[i] << 24 - b % 32;
3369
+ return words;
3370
+ },
3371
+ wordsToBytes: function(words) {
3372
+ for (var bytes = [], b = 0; b < words.length * 32; b += 8)
3373
+ bytes.push(words[b >>> 5] >>> 24 - b % 32 & 255);
3374
+ return bytes;
3375
+ },
3376
+ bytesToHex: function(bytes) {
3377
+ for (var hex = [], i = 0; i < bytes.length; i++) {
3378
+ hex.push((bytes[i] >>> 4).toString(16));
3379
+ hex.push((bytes[i] & 15).toString(16));
3380
+ }
3381
+ return hex.join("");
3382
+ },
3383
+ hexToBytes: function(hex) {
3384
+ for (var bytes = [], c = 0; c < hex.length; c += 2)
3385
+ bytes.push(parseInt(hex.substr(c, 2), 16));
3386
+ return bytes;
3387
+ },
3388
+ bytesToBase64: function(bytes) {
3389
+ for (var base64 = [], i = 0; i < bytes.length; i += 3) {
3390
+ var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];
3391
+ for (var j = 0; j < 4; j++)
3392
+ if (i * 8 + j * 6 <= bytes.length * 8)
3393
+ base64.push(base64map.charAt(triplet >>> 6 * (3 - j) & 63));
3394
+ else
3395
+ base64.push("=");
3396
+ }
3397
+ return base64.join("");
3398
+ },
3399
+ base64ToBytes: function(base64) {
3400
+ base64 = base64.replace(/[^A-Z0-9+\/]/ig, "");
3401
+ for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) {
3402
+ if (imod4 == 0)
3403
+ continue;
3404
+ bytes.push((base64map.indexOf(base64.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base64.charAt(i)) >>> 6 - imod4 * 2);
3405
+ }
3406
+ return bytes;
3407
+ }
3408
+ };
3409
+ module.exports = crypt;
3410
+ })();
3411
+ }
3412
+ });
3413
+
3414
+ // ../../node_modules/charenc/charenc.js
3415
+ var require_charenc = __commonJS({
3416
+ "../../node_modules/charenc/charenc.js"(exports, module) {
3417
+ var charenc = {
3418
+ utf8: {
3419
+ stringToBytes: function(str) {
3420
+ return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
3421
+ },
3422
+ bytesToString: function(bytes) {
3423
+ return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
3424
+ }
3425
+ },
3426
+ bin: {
3427
+ stringToBytes: function(str) {
3428
+ for (var bytes = [], i = 0; i < str.length; i++)
3429
+ bytes.push(str.charCodeAt(i) & 255);
3430
+ return bytes;
3431
+ },
3432
+ bytesToString: function(bytes) {
3433
+ for (var str = [], i = 0; i < bytes.length; i++)
3434
+ str.push(String.fromCharCode(bytes[i]));
3435
+ return str.join("");
3436
+ }
3437
+ }
3438
+ };
3439
+ module.exports = charenc;
3440
+ }
3441
+ });
3442
+
3443
+ // ../../node_modules/is-buffer/index.js
3444
+ var require_is_buffer = __commonJS({
3445
+ "../../node_modules/is-buffer/index.js"(exports, module) {
3446
+ module.exports = function(obj) {
3447
+ return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
3448
+ };
3449
+ function isBuffer(obj) {
3450
+ return !!obj.constructor && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj);
3451
+ }
3452
+ function isSlowBuffer(obj) {
3453
+ return typeof obj.readFloatLE === "function" && typeof obj.slice === "function" && isBuffer(obj.slice(0, 0));
3454
+ }
3455
+ }
3456
+ });
3457
+
3458
+ // ../../node_modules/md5/md5.js
3459
+ var require_md5 = __commonJS({
3460
+ "../../node_modules/md5/md5.js"(exports, module) {
3461
+ (function() {
3462
+ var crypt = require_crypt(), utf8 = require_charenc().utf8, isBuffer = require_is_buffer(), bin = require_charenc().bin, md52 = function(message, options) {
3463
+ if (message.constructor == String)
3464
+ if (options && options.encoding === "binary")
3465
+ message = bin.stringToBytes(message);
3466
+ else
3467
+ message = utf8.stringToBytes(message);
3468
+ else if (isBuffer(message))
3469
+ message = Array.prototype.slice.call(message, 0);
3470
+ else if (!Array.isArray(message) && message.constructor !== Uint8Array)
3471
+ message = message.toString();
3472
+ var m = crypt.bytesToWords(message), l = message.length * 8, a = 1732584193, b = -271733879, c = -1732584194, d = 271733878;
3473
+ for (var i = 0; i < m.length; i++) {
3474
+ m[i] = (m[i] << 8 | m[i] >>> 24) & 16711935 | (m[i] << 24 | m[i] >>> 8) & 4278255360;
3475
+ }
3476
+ m[l >>> 5] |= 128 << l % 32;
3477
+ m[(l + 64 >>> 9 << 4) + 14] = l;
3478
+ var FF = md52._ff, GG = md52._gg, HH = md52._hh, II = md52._ii;
3479
+ for (var i = 0; i < m.length; i += 16) {
3480
+ var aa = a, bb = b, cc = c, dd = d;
3481
+ a = FF(a, b, c, d, m[i + 0], 7, -680876936);
3482
+ d = FF(d, a, b, c, m[i + 1], 12, -389564586);
3483
+ c = FF(c, d, a, b, m[i + 2], 17, 606105819);
3484
+ b = FF(b, c, d, a, m[i + 3], 22, -1044525330);
3485
+ a = FF(a, b, c, d, m[i + 4], 7, -176418897);
3486
+ d = FF(d, a, b, c, m[i + 5], 12, 1200080426);
3487
+ c = FF(c, d, a, b, m[i + 6], 17, -1473231341);
3488
+ b = FF(b, c, d, a, m[i + 7], 22, -45705983);
3489
+ a = FF(a, b, c, d, m[i + 8], 7, 1770035416);
3490
+ d = FF(d, a, b, c, m[i + 9], 12, -1958414417);
3491
+ c = FF(c, d, a, b, m[i + 10], 17, -42063);
3492
+ b = FF(b, c, d, a, m[i + 11], 22, -1990404162);
3493
+ a = FF(a, b, c, d, m[i + 12], 7, 1804603682);
3494
+ d = FF(d, a, b, c, m[i + 13], 12, -40341101);
3495
+ c = FF(c, d, a, b, m[i + 14], 17, -1502002290);
3496
+ b = FF(b, c, d, a, m[i + 15], 22, 1236535329);
3497
+ a = GG(a, b, c, d, m[i + 1], 5, -165796510);
3498
+ d = GG(d, a, b, c, m[i + 6], 9, -1069501632);
3499
+ c = GG(c, d, a, b, m[i + 11], 14, 643717713);
3500
+ b = GG(b, c, d, a, m[i + 0], 20, -373897302);
3501
+ a = GG(a, b, c, d, m[i + 5], 5, -701558691);
3502
+ d = GG(d, a, b, c, m[i + 10], 9, 38016083);
3503
+ c = GG(c, d, a, b, m[i + 15], 14, -660478335);
3504
+ b = GG(b, c, d, a, m[i + 4], 20, -405537848);
3505
+ a = GG(a, b, c, d, m[i + 9], 5, 568446438);
3506
+ d = GG(d, a, b, c, m[i + 14], 9, -1019803690);
3507
+ c = GG(c, d, a, b, m[i + 3], 14, -187363961);
3508
+ b = GG(b, c, d, a, m[i + 8], 20, 1163531501);
3509
+ a = GG(a, b, c, d, m[i + 13], 5, -1444681467);
3510
+ d = GG(d, a, b, c, m[i + 2], 9, -51403784);
3511
+ c = GG(c, d, a, b, m[i + 7], 14, 1735328473);
3512
+ b = GG(b, c, d, a, m[i + 12], 20, -1926607734);
3513
+ a = HH(a, b, c, d, m[i + 5], 4, -378558);
3514
+ d = HH(d, a, b, c, m[i + 8], 11, -2022574463);
3515
+ c = HH(c, d, a, b, m[i + 11], 16, 1839030562);
3516
+ b = HH(b, c, d, a, m[i + 14], 23, -35309556);
3517
+ a = HH(a, b, c, d, m[i + 1], 4, -1530992060);
3518
+ d = HH(d, a, b, c, m[i + 4], 11, 1272893353);
3519
+ c = HH(c, d, a, b, m[i + 7], 16, -155497632);
3520
+ b = HH(b, c, d, a, m[i + 10], 23, -1094730640);
3521
+ a = HH(a, b, c, d, m[i + 13], 4, 681279174);
3522
+ d = HH(d, a, b, c, m[i + 0], 11, -358537222);
3523
+ c = HH(c, d, a, b, m[i + 3], 16, -722521979);
3524
+ b = HH(b, c, d, a, m[i + 6], 23, 76029189);
3525
+ a = HH(a, b, c, d, m[i + 9], 4, -640364487);
3526
+ d = HH(d, a, b, c, m[i + 12], 11, -421815835);
3527
+ c = HH(c, d, a, b, m[i + 15], 16, 530742520);
3528
+ b = HH(b, c, d, a, m[i + 2], 23, -995338651);
3529
+ a = II(a, b, c, d, m[i + 0], 6, -198630844);
3530
+ d = II(d, a, b, c, m[i + 7], 10, 1126891415);
3531
+ c = II(c, d, a, b, m[i + 14], 15, -1416354905);
3532
+ b = II(b, c, d, a, m[i + 5], 21, -57434055);
3533
+ a = II(a, b, c, d, m[i + 12], 6, 1700485571);
3534
+ d = II(d, a, b, c, m[i + 3], 10, -1894986606);
3535
+ c = II(c, d, a, b, m[i + 10], 15, -1051523);
3536
+ b = II(b, c, d, a, m[i + 1], 21, -2054922799);
3537
+ a = II(a, b, c, d, m[i + 8], 6, 1873313359);
3538
+ d = II(d, a, b, c, m[i + 15], 10, -30611744);
3539
+ c = II(c, d, a, b, m[i + 6], 15, -1560198380);
3540
+ b = II(b, c, d, a, m[i + 13], 21, 1309151649);
3541
+ a = II(a, b, c, d, m[i + 4], 6, -145523070);
3542
+ d = II(d, a, b, c, m[i + 11], 10, -1120210379);
3543
+ c = II(c, d, a, b, m[i + 2], 15, 718787259);
3544
+ b = II(b, c, d, a, m[i + 9], 21, -343485551);
3545
+ a = a + aa >>> 0;
3546
+ b = b + bb >>> 0;
3547
+ c = c + cc >>> 0;
3548
+ d = d + dd >>> 0;
3549
+ }
3550
+ return crypt.endian([a, b, c, d]);
3551
+ };
3552
+ md52._ff = function(a, b, c, d, x, s, t) {
3553
+ var n = a + (b & c | ~b & d) + (x >>> 0) + t;
3554
+ return (n << s | n >>> 32 - s) + b;
3555
+ };
3556
+ md52._gg = function(a, b, c, d, x, s, t) {
3557
+ var n = a + (b & d | c & ~d) + (x >>> 0) + t;
3558
+ return (n << s | n >>> 32 - s) + b;
3559
+ };
3560
+ md52._hh = function(a, b, c, d, x, s, t) {
3561
+ var n = a + (b ^ c ^ d) + (x >>> 0) + t;
3562
+ return (n << s | n >>> 32 - s) + b;
3563
+ };
3564
+ md52._ii = function(a, b, c, d, x, s, t) {
3565
+ var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
3566
+ return (n << s | n >>> 32 - s) + b;
3567
+ };
3568
+ md52._blocksize = 16;
3569
+ md52._digestsize = 16;
3570
+ module.exports = function(message, options) {
3571
+ if (message === void 0 || message === null)
3572
+ throw new Error("Illegal argument " + message);
3573
+ var digestbytes = crypt.wordsToBytes(md52(message, options));
3574
+ return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);
3575
+ };
3576
+ })();
3577
+ }
3578
+ });
3579
+
3229
3580
  // src/hash-file-utility.ts
3230
- var compareHashes, parseHashFile, findBin;
3581
+ var import_md5, compareHashes, parseHashFile, findBin, generateHashInfo;
3231
3582
  var init_hash_file_utility = __esm({
3232
3583
  "src/hash-file-utility.ts"() {
3584
+ import_md5 = __toModule(require_md5());
3585
+ init_cd_file_header();
3233
3586
  compareHashes = (hash1, hash2) => {
3234
3587
  const h1 = new BigUint64Array(hash1.buffer, hash1.byteOffset, 2);
3235
3588
  const h2 = new BigUint64Array(hash2.buffer, hash2.byteOffset, 2);
@@ -3270,6 +3623,18 @@
3270
3623
  }
3271
3624
  return void 0;
3272
3625
  };
3626
+ generateHashInfo = async (fileProvider) => {
3627
+ const zipCDIterator = zipCDFileHeaderGenerator(fileProvider);
3628
+ const hashInfo = [];
3629
+ for await (const cdHeader of zipCDIterator) {
3630
+ hashInfo.push({
3631
+ hash: Buffer.from((0, import_md5.default)(cdHeader.fileName.split("\\").join("/").toLocaleLowerCase()), "hex"),
3632
+ offset: cdHeader.localHeaderOffset
3633
+ });
3634
+ }
3635
+ hashInfo.sort((a, b) => compareHashes(a.hash, b.hash));
3636
+ return hashInfo;
3637
+ };
3273
3638
  }
3274
3639
  });
3275
3640
 
@@ -3277,29 +3642,33 @@
3277
3642
  var src_exports = {};
3278
3643
  __export(src_exports, {
3279
3644
  DataViewFile: () => DataViewFile,
3645
+ FileHandleFile: () => FileHandleFile,
3280
3646
  TarBuilder: () => TARBuilder,
3281
3647
  ZipLoader: () => ZipLoader,
3282
3648
  ZipWriter: () => ZipWriter,
3283
3649
  cdSignature: () => signature,
3284
3650
  compareHashes: () => compareHashes,
3285
3651
  findBin: () => findBin,
3652
+ generateHashInfo: () => generateHashInfo,
3286
3653
  localHeaderSignature: () => signature2,
3287
3654
  parseEoCDRecord: () => parseEoCDRecord,
3288
3655
  parseHashFile: () => parseHashFile,
3289
3656
  parseZipCDFileHeader: () => parseZipCDFileHeader,
3290
3657
  parseZipLocalFileHeader: () => parseZipLocalFileHeader,
3291
- searchFromTheEnd: () => searchFromTheEnd
3658
+ searchFromTheEnd: () => searchFromTheEnd,
3659
+ zipCDFileHeaderGenerator: () => zipCDFileHeaderGenerator
3292
3660
  });
3293
3661
  var init_src = __esm({
3294
3662
  "src/index.ts"() {
3295
3663
  init_zip_loader();
3296
3664
  init_zip_writer();
3297
3665
  init_tar_builder();
3666
+ init_file_handle_file();
3667
+ init_data_view_file();
3298
3668
  init_cd_file_header();
3299
3669
  init_local_file_header();
3300
3670
  init_end_of_central_directory();
3301
3671
  init_search_from_the_end();
3302
- init_data_view_file();
3303
3672
  init_hash_file_utility();
3304
3673
  }
3305
3674
  });
@@ -3325,3 +3694,9 @@ Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/js
3325
3694
  JSZip uses the library pako released under the MIT license :
3326
3695
  https://github.com/nodeca/pako/blob/main/LICENSE
3327
3696
  */
3697
+ /*!
3698
+ * Determine if an object is a Buffer
3699
+ *
3700
+ * @author Feross Aboukhadijeh <https://feross.org>
3701
+ * @license MIT
3702
+ */