@loaders.gl/zip 4.0.0-alpha.19 → 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 (92) hide show
  1. package/dist/dist.min.js +638 -1
  2. package/dist/es5/file-provider/data-view-file.js +146 -0
  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 +130 -0
  13. package/dist/es5/hash-file-utility.js.map +1 -0
  14. package/dist/es5/index.js +85 -0
  15. package/dist/es5/index.js.map +1 -1
  16. package/dist/es5/parse-zip/cd-file-header.js +163 -0
  17. package/dist/es5/parse-zip/cd-file-header.js.map +1 -0
  18. package/dist/es5/parse-zip/end-of-central-directory.js +98 -0
  19. package/dist/es5/parse-zip/end-of-central-directory.js.map +1 -0
  20. package/dist/es5/parse-zip/local-file-header.js +117 -0
  21. package/dist/es5/parse-zip/local-file-header.js.map +1 -0
  22. package/dist/es5/parse-zip/search-from-the-end.js +69 -0
  23. package/dist/es5/parse-zip/search-from-the-end.js.map +1 -0
  24. package/dist/es5/zip-loader.js +1 -1
  25. package/dist/esm/file-provider/data-view-file.js +33 -0
  26. package/dist/esm/file-provider/data-view-file.js.map +1 -0
  27. package/dist/esm/file-provider/file-handle-file.js +57 -0
  28. package/dist/esm/file-provider/file-handle-file.js.map +1 -0
  29. package/dist/esm/file-provider/file-handle.js +37 -0
  30. package/dist/esm/file-provider/file-handle.js.map +1 -0
  31. package/dist/esm/file-provider/file-provider.js +4 -0
  32. package/dist/esm/file-provider/file-provider.js.map +1 -0
  33. package/dist/esm/filesystems/zip-filesystem.js +86 -0
  34. package/dist/esm/filesystems/zip-filesystem.js.map +1 -0
  35. package/dist/esm/hash-file-utility.js +55 -0
  36. package/dist/esm/hash-file-utility.js.map +1 -0
  37. package/dist/esm/index.js +7 -0
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/esm/parse-zip/cd-file-header.js +54 -0
  40. package/dist/esm/parse-zip/cd-file-header.js.map +1 -0
  41. package/dist/esm/parse-zip/end-of-central-directory.js +31 -0
  42. package/dist/esm/parse-zip/end-of-central-directory.js.map +1 -0
  43. package/dist/esm/parse-zip/local-file-header.js +41 -0
  44. package/dist/esm/parse-zip/local-file-header.js.map +1 -0
  45. package/dist/esm/parse-zip/search-from-the-end.js +16 -0
  46. package/dist/esm/parse-zip/search-from-the-end.js.map +1 -0
  47. package/dist/esm/zip-loader.js +1 -1
  48. package/dist/file-provider/data-view-file.d.ts +37 -0
  49. package/dist/file-provider/data-view-file.d.ts.map +1 -0
  50. package/dist/file-provider/data-view-file.js +63 -0
  51. package/dist/file-provider/file-handle-file.d.ts +53 -0
  52. package/dist/file-provider/file-handle-file.d.ts.map +1 -0
  53. package/dist/file-provider/file-handle-file.js +90 -0
  54. package/dist/file-provider/file-handle.d.ts +40 -0
  55. package/dist/file-provider/file-handle.d.ts.map +1 -0
  56. package/dist/file-provider/file-handle.js +57 -0
  57. package/dist/file-provider/file-provider.d.ts +45 -0
  58. package/dist/file-provider/file-provider.d.ts.map +1 -0
  59. package/dist/file-provider/file-provider.js +13 -0
  60. package/dist/filesystems/zip-filesystem.d.ts +44 -0
  61. package/dist/filesystems/zip-filesystem.d.ts.map +1 -0
  62. package/dist/filesystems/zip-filesystem.js +119 -0
  63. package/dist/hash-file-utility.d.ts +35 -0
  64. package/dist/hash-file-utility.d.ts.map +1 -0
  65. package/dist/hash-file-utility.js +88 -0
  66. package/dist/index.d.ts +9 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +21 -1
  69. package/dist/parse-zip/cd-file-header.d.ts +36 -0
  70. package/dist/parse-zip/cd-file-header.d.ts.map +1 -0
  71. package/dist/parse-zip/cd-file-header.js +68 -0
  72. package/dist/parse-zip/end-of-central-directory.d.ts +18 -0
  73. package/dist/parse-zip/end-of-central-directory.d.ts.map +1 -0
  74. package/dist/parse-zip/end-of-central-directory.js +40 -0
  75. package/dist/parse-zip/local-file-header.d.ts +29 -0
  76. package/dist/parse-zip/local-file-header.d.ts.map +1 -0
  77. package/dist/parse-zip/local-file-header.js +55 -0
  78. package/dist/parse-zip/search-from-the-end.d.ts +11 -0
  79. package/dist/parse-zip/search-from-the-end.d.ts.map +1 -0
  80. package/dist/parse-zip/search-from-the-end.js +31 -0
  81. package/package.json +9 -2
  82. package/src/file-provider/data-view-file.ts +72 -0
  83. package/src/file-provider/file-handle-file.ts +114 -0
  84. package/src/file-provider/file-handle.ts +73 -0
  85. package/src/file-provider/file-provider.ts +56 -0
  86. package/src/filesystems/zip-filesystem.ts +132 -0
  87. package/src/hash-file-utility.ts +101 -0
  88. package/src/index.ts +19 -0
  89. package/src/parse-zip/cd-file-header.ts +114 -0
  90. package/src/parse-zip/end-of-central-directory.ts +71 -0
  91. package/src/parse-zip/local-file-header.ts +91 -0
  92. package/src/parse-zip/search-from-the-end.ts +38 -0
package/dist/dist.min.js CHANGED
@@ -3027,18 +3027,649 @@
3027
3027
  }
3028
3028
  });
3029
3029
 
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
+ }
3059
+ };
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);
3084
+ }
3085
+ constructor(fileDescriptor, size) {
3086
+ this.fileDescriptor = fileDescriptor;
3087
+ this.size = size;
3088
+ }
3089
+ async destroy() {
3090
+ await this.fileDescriptor.close();
3091
+ }
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;
3130
+ }
3131
+ };
3132
+ }
3133
+ });
3134
+
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);
3144
+ };
3145
+ DataViewFile = class {
3146
+ constructor(file) {
3147
+ this.file = file;
3148
+ }
3149
+ async destroy() {
3150
+ }
3151
+ async getUint8(offset) {
3152
+ return this.file.getUint8(toNumber(offset));
3153
+ }
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);
3168
+ }
3169
+ };
3170
+ }
3171
+ });
3172
+
3173
+ // src/parse-zip/search-from-the-end.ts
3174
+ var searchFromTheEnd;
3175
+ var init_search_from_the_end = __esm({
3176
+ "src/parse-zip/search-from-the-end.ts"() {
3177
+ searchFromTheEnd = async (file, target) => {
3178
+ const searchWindow = [
3179
+ await file.getUint8(file.length - 1n),
3180
+ await file.getUint8(file.length - 2n),
3181
+ await file.getUint8(file.length - 3n),
3182
+ void 0
3183
+ ];
3184
+ let targetOffset = 0n;
3185
+ for (let i = file.length - 4n; i > -1; i--) {
3186
+ searchWindow[3] = searchWindow[2];
3187
+ searchWindow[2] = searchWindow[1];
3188
+ searchWindow[1] = searchWindow[0];
3189
+ searchWindow[0] = await file.getUint8(i);
3190
+ if (searchWindow.every((val, index) => val === target[index])) {
3191
+ targetOffset = i;
3192
+ break;
3193
+ }
3194
+ }
3195
+ return targetOffset;
3196
+ };
3197
+ }
3198
+ });
3199
+
3200
+ // src/parse-zip/end-of-central-directory.ts
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;
3202
+ var init_end_of_central_directory = __esm({
3203
+ "src/parse-zip/end-of-central-directory.ts"() {
3204
+ init_search_from_the_end();
3205
+ eoCDSignature = [80, 75, 5, 6];
3206
+ zip64EoCDLocatorSignature = Buffer.from([80, 75, 6, 7]);
3207
+ zip64EoCDSignature = Buffer.from([80, 75, 6, 6]);
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;
3213
+ parseEoCDRecord = async (fileProvider) => {
3214
+ const zipEoCDOffset = await searchFromTheEnd(fileProvider, eoCDSignature);
3215
+ let cdRecordsNumber = BigInt(await fileProvider.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
3216
+ let cdStartOffset = BigInt(await fileProvider.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
3217
+ if (cdStartOffset === BigInt(4294967295) || cdRecordsNumber === BigInt(4294967295)) {
3218
+ const zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
3219
+ if (Buffer.from(await fileProvider.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n)).compare(zip64EoCDLocatorSignature) !== 0) {
3220
+ throw new Error("zip64 EoCD locator not found");
3221
+ }
3222
+ const zip64EoCDOffset = await fileProvider.getBigUint64(zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET);
3223
+ if (Buffer.from(await fileProvider.slice(zip64EoCDOffset, zip64EoCDOffset + 4n)).compare(zip64EoCDSignature) !== 0) {
3224
+ throw new Error("zip64 EoCD not found");
3225
+ }
3226
+ cdRecordsNumber = await fileProvider.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
3227
+ cdStartOffset = await fileProvider.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
3228
+ }
3229
+ return {
3230
+ cdRecordsNumber,
3231
+ cdStartOffset
3232
+ };
3233
+ };
3234
+ }
3235
+ });
3236
+
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;
3260
+ }
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;
3273
+ }
3274
+ if (compressedSize === BigInt(4294967295)) {
3275
+ compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3276
+ offsetInZip64Data += 8n;
3277
+ }
3278
+ if (fileDataOffset === BigInt(4294967295)) {
3279
+ fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3280
+ }
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;
3309
+ }
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;
3322
+ }
3323
+ if (compressedSize === BigInt(4294967295)) {
3324
+ compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3325
+ offsetInZip64Data += 8n;
3326
+ }
3327
+ if (fileDataOffset === BigInt(4294967295)) {
3328
+ fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
3329
+ }
3330
+ return {
3331
+ fileNameLength,
3332
+ fileName,
3333
+ extraFieldLength,
3334
+ fileDataOffset,
3335
+ compressedSize,
3336
+ compressionMethod
3337
+ };
3338
+ };
3339
+ }
3340
+ });
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
+
3580
+ // src/hash-file-utility.ts
3581
+ var import_md5, compareHashes, parseHashFile, findBin, generateHashInfo;
3582
+ var init_hash_file_utility = __esm({
3583
+ "src/hash-file-utility.ts"() {
3584
+ import_md5 = __toModule(require_md5());
3585
+ init_cd_file_header();
3586
+ compareHashes = (hash1, hash2) => {
3587
+ const h1 = new BigUint64Array(hash1.buffer, hash1.byteOffset, 2);
3588
+ const h2 = new BigUint64Array(hash2.buffer, hash2.byteOffset, 2);
3589
+ const diff = h1[0] === h2[0] ? h1[1] - h2[1] : h1[0] - h2[0];
3590
+ if (diff < 0n) {
3591
+ return -1;
3592
+ } else if (diff === 0n) {
3593
+ return 0;
3594
+ }
3595
+ return 1;
3596
+ };
3597
+ parseHashFile = (hashFile) => {
3598
+ const hashFileBuffer = Buffer.from(hashFile);
3599
+ const hashArray = [];
3600
+ for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {
3601
+ const offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i + 16, hashFileBuffer.byteOffset + i + 24));
3602
+ const offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);
3603
+ hashArray.push({
3604
+ hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)),
3605
+ offset
3606
+ });
3607
+ }
3608
+ return hashArray;
3609
+ };
3610
+ findBin = (hashToSearch, hashArray) => {
3611
+ let lowerBorder = 0;
3612
+ let upperBorder = hashArray.length;
3613
+ while (upperBorder - lowerBorder > 1) {
3614
+ const middle = lowerBorder + Math.floor((upperBorder - lowerBorder) / 2);
3615
+ const value = compareHashes(hashArray[middle].hash, hashToSearch);
3616
+ if (value === 0) {
3617
+ return hashArray[middle];
3618
+ } else if (value < 0) {
3619
+ lowerBorder = middle;
3620
+ } else {
3621
+ upperBorder = middle;
3622
+ }
3623
+ }
3624
+ return void 0;
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
+ };
3638
+ }
3639
+ });
3640
+
3030
3641
  // src/index.ts
3031
3642
  var src_exports = {};
3032
3643
  __export(src_exports, {
3644
+ DataViewFile: () => DataViewFile,
3645
+ FileHandleFile: () => FileHandleFile,
3033
3646
  TarBuilder: () => TARBuilder,
3034
3647
  ZipLoader: () => ZipLoader,
3035
- ZipWriter: () => ZipWriter
3648
+ ZipWriter: () => ZipWriter,
3649
+ cdSignature: () => signature,
3650
+ compareHashes: () => compareHashes,
3651
+ findBin: () => findBin,
3652
+ generateHashInfo: () => generateHashInfo,
3653
+ localHeaderSignature: () => signature2,
3654
+ parseEoCDRecord: () => parseEoCDRecord,
3655
+ parseHashFile: () => parseHashFile,
3656
+ parseZipCDFileHeader: () => parseZipCDFileHeader,
3657
+ parseZipLocalFileHeader: () => parseZipLocalFileHeader,
3658
+ searchFromTheEnd: () => searchFromTheEnd,
3659
+ zipCDFileHeaderGenerator: () => zipCDFileHeaderGenerator
3036
3660
  });
3037
3661
  var init_src = __esm({
3038
3662
  "src/index.ts"() {
3039
3663
  init_zip_loader();
3040
3664
  init_zip_writer();
3041
3665
  init_tar_builder();
3666
+ init_file_handle_file();
3667
+ init_data_view_file();
3668
+ init_cd_file_header();
3669
+ init_local_file_header();
3670
+ init_end_of_central_directory();
3671
+ init_search_from_the_end();
3672
+ init_hash_file_utility();
3042
3673
  }
3043
3674
  });
3044
3675
 
@@ -3063,3 +3694,9 @@ Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/js
3063
3694
  JSZip uses the library pako released under the MIT license :
3064
3695
  https://github.com/nodeca/pako/blob/main/LICENSE
3065
3696
  */
3697
+ /*!
3698
+ * Determine if an object is a Buffer
3699
+ *
3700
+ * @author Feross Aboukhadijeh <https://feross.org>
3701
+ * @license MIT
3702
+ */