@loaders.gl/zip 4.1.0-alpha.1 → 4.1.0-alpha.11
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/dist/dist.dev.js +875 -64
- package/dist/filesystems/zip-filesystem.d.ts.map +1 -1
- package/dist/filesystems/zip-filesystem.js.map +1 -1
- package/dist/hash-file-utility.d.ts +19 -0
- package/dist/hash-file-utility.d.ts.map +1 -1
- package/dist/hash-file-utility.js +30 -0
- package/dist/hash-file-utility.js.map +1 -1
- package/dist/index.cjs +542 -56
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/tar/header.d.ts.map +1 -1
- package/dist/lib/tar/header.js.map +1 -1
- package/dist/lib/tar/tar.d.ts.map +1 -1
- package/dist/lib/tar/tar.js.map +1 -1
- package/dist/lib/tar/types.d.ts.map +1 -1
- package/dist/lib/tar/types.js.map +1 -1
- package/dist/lib/tar/utils.d.ts.map +1 -1
- package/dist/lib/tar/utils.js.map +1 -1
- package/dist/parse-zip/cd-file-header.d.ts +1 -1
- package/dist/parse-zip/cd-file-header.d.ts.map +1 -1
- package/dist/parse-zip/cd-file-header.js +4 -4
- package/dist/parse-zip/cd-file-header.js.map +1 -1
- package/dist/parse-zip/end-of-central-directory.d.ts +35 -0
- package/dist/parse-zip/end-of-central-directory.d.ts.map +1 -1
- package/dist/parse-zip/end-of-central-directory.js +161 -9
- package/dist/parse-zip/end-of-central-directory.js.map +1 -1
- package/dist/parse-zip/local-file-header.d.ts +16 -0
- package/dist/parse-zip/local-file-header.d.ts.map +1 -1
- package/dist/parse-zip/local-file-header.js +73 -1
- package/dist/parse-zip/local-file-header.js.map +1 -1
- package/dist/parse-zip/search-from-the-end.d.ts.map +1 -1
- package/dist/parse-zip/search-from-the-end.js.map +1 -1
- package/dist/parse-zip/zip-composition.d.ts +38 -0
- package/dist/parse-zip/zip-composition.d.ts.map +1 -0
- package/dist/parse-zip/zip-composition.js +115 -0
- package/dist/parse-zip/zip-composition.js.map +1 -0
- package/dist/parse-zip/zip64-info-generation.d.ts +5 -8
- package/dist/parse-zip/zip64-info-generation.d.ts.map +1 -1
- package/dist/parse-zip/zip64-info-generation.js +6 -3
- package/dist/parse-zip/zip64-info-generation.js.map +1 -1
- package/dist/tar-builder.d.ts.map +1 -1
- package/dist/tar-builder.js.map +1 -1
- package/dist/zip-loader.d.ts.map +1 -1
- package/dist/zip-loader.js +1 -1
- package/dist/zip-loader.js.map +1 -1
- package/dist/zip-writer.d.ts +2 -2
- package/dist/zip-writer.d.ts.map +1 -1
- package/dist/zip-writer.js +22 -7
- package/dist/zip-writer.js.map +1 -1
- package/package.json +7 -7
- package/src/filesystems/zip-filesystem.ts +2 -1
- package/src/hash-file-utility.ts +84 -3
- package/src/index.ts +6 -3
- package/src/lib/tar/header.ts +2 -1
- package/src/lib/tar/tar.ts +2 -1
- package/src/lib/tar/types.ts +2 -1
- package/src/lib/tar/utils.ts +2 -1
- package/src/parse-zip/cd-file-header.ts +8 -6
- package/src/parse-zip/end-of-central-directory.ts +338 -10
- package/src/parse-zip/local-file-header.ts +128 -2
- package/src/parse-zip/search-from-the-end.ts +2 -1
- package/src/parse-zip/zip-composition.ts +235 -0
- package/src/parse-zip/zip64-info-generation.ts +21 -5
- package/src/tar-builder.ts +2 -1
- package/src/zip-loader.ts +2 -1
- package/src/zip-writer.ts +24 -10
package/dist/dist.dev.js
CHANGED
|
@@ -6956,7 +6956,11 @@ var __exports__ = (() => {
|
|
|
6956
6956
|
ZipFileSystem: () => ZipFileSystem,
|
|
6957
6957
|
ZipLoader: () => ZipLoader,
|
|
6958
6958
|
ZipWriter: () => ZipWriter,
|
|
6959
|
+
addOneFile: () => addOneFile,
|
|
6960
|
+
composeHashFile: () => composeHashFile,
|
|
6961
|
+
createZip: () => createZip,
|
|
6959
6962
|
generateCDHeader: () => generateCDHeader,
|
|
6963
|
+
generateLocalHeader: () => generateLocalHeader,
|
|
6960
6964
|
localHeaderSignature: () => signature3,
|
|
6961
6965
|
makeHashTableFromZipHeaders: () => makeHashTableFromZipHeaders,
|
|
6962
6966
|
makeZipCDHeaderIterator: () => makeZipCDHeaderIterator,
|
|
@@ -6969,7 +6973,7 @@ var __exports__ = (() => {
|
|
|
6969
6973
|
|
|
6970
6974
|
// src/zip-loader.ts
|
|
6971
6975
|
var import_jszip = __toESM(require_jszip_min(), 1);
|
|
6972
|
-
var VERSION =
|
|
6976
|
+
var VERSION = true ? "4.1.0-alpha.11" : "latest";
|
|
6973
6977
|
var ZipLoader = {
|
|
6974
6978
|
id: "zip",
|
|
6975
6979
|
module: "zip",
|
|
@@ -7014,11 +7018,22 @@ var __exports__ = (() => {
|
|
|
7014
7018
|
|
|
7015
7019
|
// src/zip-writer.ts
|
|
7016
7020
|
var import_jszip2 = __toESM(require_jszip_min(), 1);
|
|
7021
|
+
var VERSION2 = true ? "4.1.0-alpha.11" : "latest";
|
|
7017
7022
|
var ZipWriter = {
|
|
7018
7023
|
name: "Zip Archive",
|
|
7024
|
+
id: "zip",
|
|
7025
|
+
module: "zip",
|
|
7026
|
+
version: VERSION2,
|
|
7019
7027
|
extensions: ["zip"],
|
|
7020
7028
|
category: "archive",
|
|
7021
7029
|
mimeTypes: ["application/zip"],
|
|
7030
|
+
options: {
|
|
7031
|
+
zip: {
|
|
7032
|
+
onUpdate: () => {
|
|
7033
|
+
}
|
|
7034
|
+
},
|
|
7035
|
+
jszip: {}
|
|
7036
|
+
},
|
|
7022
7037
|
encode: encodeZipAsync
|
|
7023
7038
|
};
|
|
7024
7039
|
async function encodeZipAsync(fileMap, options = {}) {
|
|
@@ -7027,18 +7042,21 @@ var __exports__ = (() => {
|
|
|
7027
7042
|
const subFileData = fileMap[subFileName];
|
|
7028
7043
|
jsZip.file(subFileName, subFileData, options?.jszip || {});
|
|
7029
7044
|
}
|
|
7045
|
+
const zipOptions = {
|
|
7046
|
+
...ZipWriter.options.zip,
|
|
7047
|
+
...options?.zip
|
|
7048
|
+
};
|
|
7030
7049
|
const jszipOptions = {
|
|
7031
|
-
...options?.jszip,
|
|
7032
|
-
|
|
7050
|
+
...ZipWriter.options?.jszip,
|
|
7051
|
+
...options.jszip
|
|
7033
7052
|
};
|
|
7034
|
-
const {
|
|
7035
|
-
onUpdate = () => {
|
|
7036
|
-
}
|
|
7037
|
-
} = options;
|
|
7038
7053
|
try {
|
|
7039
|
-
return await jsZip.generateAsync(
|
|
7054
|
+
return await jsZip.generateAsync({
|
|
7055
|
+
...jszipOptions,
|
|
7056
|
+
type: "arraybuffer"
|
|
7057
|
+
}, zipOptions.onUpdate);
|
|
7040
7058
|
} catch (error) {
|
|
7041
|
-
options.log.error(`Unable to
|
|
7059
|
+
options.log.error(`Unable to encode zip archive: ${error}`);
|
|
7042
7060
|
throw error;
|
|
7043
7061
|
}
|
|
7044
7062
|
}
|
|
@@ -7239,8 +7257,8 @@ var __exports__ = (() => {
|
|
|
7239
7257
|
};
|
|
7240
7258
|
this.tape = new tar_default(this.options.recordsPerBlock);
|
|
7241
7259
|
}
|
|
7242
|
-
addFile(
|
|
7243
|
-
this.tape.append(
|
|
7260
|
+
addFile(filename2, buffer) {
|
|
7261
|
+
this.tape.append(filename2, new Uint8Array(buffer));
|
|
7244
7262
|
this.count++;
|
|
7245
7263
|
}
|
|
7246
7264
|
async build() {
|
|
@@ -7279,6 +7297,9 @@ var __exports__ = (() => {
|
|
|
7279
7297
|
return true;
|
|
7280
7298
|
}
|
|
7281
7299
|
function concatenateArrayBuffers(...sources) {
|
|
7300
|
+
return concatenateArrayBuffersFromArray(sources);
|
|
7301
|
+
}
|
|
7302
|
+
function concatenateArrayBuffersFromArray(sources) {
|
|
7282
7303
|
const sourceArrays = sources.map((source2) => source2 instanceof ArrayBuffer ? new Uint8Array(source2) : source2);
|
|
7283
7304
|
const byteLength = sourceArrays.reduce((length, typedArray) => length + typedArray.byteLength, 0);
|
|
7284
7305
|
const result = new Uint8Array(byteLength);
|
|
@@ -7299,6 +7320,22 @@ var __exports__ = (() => {
|
|
|
7299
7320
|
return concatenateArrayBuffers(...arrayBuffers);
|
|
7300
7321
|
}
|
|
7301
7322
|
|
|
7323
|
+
// ../loader-utils/src/lib/path-utils/file-aliases.ts
|
|
7324
|
+
var pathPrefix = "";
|
|
7325
|
+
var fileAliases = {};
|
|
7326
|
+
function resolvePath(filename2) {
|
|
7327
|
+
for (const alias in fileAliases) {
|
|
7328
|
+
if (filename2.startsWith(alias)) {
|
|
7329
|
+
const replacement = fileAliases[alias];
|
|
7330
|
+
filename2 = filename2.replace(alias, replacement);
|
|
7331
|
+
}
|
|
7332
|
+
}
|
|
7333
|
+
if (!filename2.startsWith("http://") && !filename2.startsWith("https://")) {
|
|
7334
|
+
filename2 = `${pathPrefix}${filename2}`;
|
|
7335
|
+
}
|
|
7336
|
+
return filename2;
|
|
7337
|
+
}
|
|
7338
|
+
|
|
7302
7339
|
// ../loader-utils/src/lib/node/buffer.browser.ts
|
|
7303
7340
|
function toArrayBuffer(buffer) {
|
|
7304
7341
|
return buffer;
|
|
@@ -7334,7 +7371,150 @@ var __exports__ = (() => {
|
|
|
7334
7371
|
|
|
7335
7372
|
// ../loader-utils/src/lib/node/promisify.ts
|
|
7336
7373
|
function promisify1(fn) {
|
|
7337
|
-
return (args) => new Promise((
|
|
7374
|
+
return (args) => new Promise((resolve2, reject) => fn(args, (error, callbackArgs) => error ? reject(error) : resolve2(callbackArgs)));
|
|
7375
|
+
}
|
|
7376
|
+
|
|
7377
|
+
// ../loader-utils/src/lib/path-utils/path.ts
|
|
7378
|
+
var path_exports = {};
|
|
7379
|
+
__export(path_exports, {
|
|
7380
|
+
dirname: () => dirname,
|
|
7381
|
+
filename: () => filename,
|
|
7382
|
+
join: () => join,
|
|
7383
|
+
resolve: () => resolve
|
|
7384
|
+
});
|
|
7385
|
+
|
|
7386
|
+
// ../loader-utils/src/lib/path-utils/get-cwd.ts
|
|
7387
|
+
function getCWD() {
|
|
7388
|
+
if (typeof process !== "undefined" && typeof process.cwd !== "undefined") {
|
|
7389
|
+
return process.cwd();
|
|
7390
|
+
}
|
|
7391
|
+
const pathname = window.location?.pathname;
|
|
7392
|
+
return pathname?.slice(0, pathname.lastIndexOf("/") + 1) || "";
|
|
7393
|
+
}
|
|
7394
|
+
|
|
7395
|
+
// ../loader-utils/src/lib/path-utils/path.ts
|
|
7396
|
+
function filename(url) {
|
|
7397
|
+
const slashIndex = url ? url.lastIndexOf("/") : -1;
|
|
7398
|
+
return slashIndex >= 0 ? url.substr(slashIndex + 1) : "";
|
|
7399
|
+
}
|
|
7400
|
+
function dirname(url) {
|
|
7401
|
+
const slashIndex = url ? url.lastIndexOf("/") : -1;
|
|
7402
|
+
return slashIndex >= 0 ? url.substr(0, slashIndex) : "";
|
|
7403
|
+
}
|
|
7404
|
+
function join(...parts) {
|
|
7405
|
+
const separator = "/";
|
|
7406
|
+
parts = parts.map((part, index) => {
|
|
7407
|
+
if (index) {
|
|
7408
|
+
part = part.replace(new RegExp(`^${separator}`), "");
|
|
7409
|
+
}
|
|
7410
|
+
if (index !== parts.length - 1) {
|
|
7411
|
+
part = part.replace(new RegExp(`${separator}$`), "");
|
|
7412
|
+
}
|
|
7413
|
+
return part;
|
|
7414
|
+
});
|
|
7415
|
+
return parts.join(separator);
|
|
7416
|
+
}
|
|
7417
|
+
function resolve(...components) {
|
|
7418
|
+
const paths = [];
|
|
7419
|
+
for (let _i = 0; _i < components.length; _i++) {
|
|
7420
|
+
paths[_i] = components[_i];
|
|
7421
|
+
}
|
|
7422
|
+
let resolvedPath = "";
|
|
7423
|
+
let resolvedAbsolute = false;
|
|
7424
|
+
let cwd;
|
|
7425
|
+
for (let i = paths.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
|
7426
|
+
let path;
|
|
7427
|
+
if (i >= 0) {
|
|
7428
|
+
path = paths[i];
|
|
7429
|
+
} else {
|
|
7430
|
+
if (cwd === void 0) {
|
|
7431
|
+
cwd = getCWD();
|
|
7432
|
+
}
|
|
7433
|
+
path = cwd;
|
|
7434
|
+
}
|
|
7435
|
+
if (path.length === 0) {
|
|
7436
|
+
continue;
|
|
7437
|
+
}
|
|
7438
|
+
resolvedPath = `${path}/${resolvedPath}`;
|
|
7439
|
+
resolvedAbsolute = path.charCodeAt(0) === SLASH;
|
|
7440
|
+
}
|
|
7441
|
+
resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);
|
|
7442
|
+
if (resolvedAbsolute) {
|
|
7443
|
+
return `/${resolvedPath}`;
|
|
7444
|
+
} else if (resolvedPath.length > 0) {
|
|
7445
|
+
return resolvedPath;
|
|
7446
|
+
}
|
|
7447
|
+
return ".";
|
|
7448
|
+
}
|
|
7449
|
+
var SLASH = 47;
|
|
7450
|
+
var DOT = 46;
|
|
7451
|
+
function normalizeStringPosix(path, allowAboveRoot) {
|
|
7452
|
+
let res = "";
|
|
7453
|
+
let lastSlash = -1;
|
|
7454
|
+
let dots = 0;
|
|
7455
|
+
let code;
|
|
7456
|
+
let isAboveRoot = false;
|
|
7457
|
+
for (let i = 0; i <= path.length; ++i) {
|
|
7458
|
+
if (i < path.length) {
|
|
7459
|
+
code = path.charCodeAt(i);
|
|
7460
|
+
} else if (code === SLASH) {
|
|
7461
|
+
break;
|
|
7462
|
+
} else {
|
|
7463
|
+
code = SLASH;
|
|
7464
|
+
}
|
|
7465
|
+
if (code === SLASH) {
|
|
7466
|
+
if (lastSlash === i - 1 || dots === 1) {
|
|
7467
|
+
} else if (lastSlash !== i - 1 && dots === 2) {
|
|
7468
|
+
if (res.length < 2 || !isAboveRoot || res.charCodeAt(res.length - 1) !== DOT || res.charCodeAt(res.length - 2) !== DOT) {
|
|
7469
|
+
if (res.length > 2) {
|
|
7470
|
+
const start = res.length - 1;
|
|
7471
|
+
let j = start;
|
|
7472
|
+
for (; j >= 0; --j) {
|
|
7473
|
+
if (res.charCodeAt(j) === SLASH) {
|
|
7474
|
+
break;
|
|
7475
|
+
}
|
|
7476
|
+
}
|
|
7477
|
+
if (j !== start) {
|
|
7478
|
+
res = j === -1 ? "" : res.slice(0, j);
|
|
7479
|
+
lastSlash = i;
|
|
7480
|
+
dots = 0;
|
|
7481
|
+
isAboveRoot = false;
|
|
7482
|
+
continue;
|
|
7483
|
+
}
|
|
7484
|
+
} else if (res.length === 2 || res.length === 1) {
|
|
7485
|
+
res = "";
|
|
7486
|
+
lastSlash = i;
|
|
7487
|
+
dots = 0;
|
|
7488
|
+
isAboveRoot = false;
|
|
7489
|
+
continue;
|
|
7490
|
+
}
|
|
7491
|
+
}
|
|
7492
|
+
if (allowAboveRoot) {
|
|
7493
|
+
if (res.length > 0) {
|
|
7494
|
+
res += "/..";
|
|
7495
|
+
} else {
|
|
7496
|
+
res = "..";
|
|
7497
|
+
}
|
|
7498
|
+
isAboveRoot = true;
|
|
7499
|
+
}
|
|
7500
|
+
} else {
|
|
7501
|
+
const slice = path.slice(lastSlash + 1, i);
|
|
7502
|
+
if (res.length > 0) {
|
|
7503
|
+
res += `/${slice}`;
|
|
7504
|
+
} else {
|
|
7505
|
+
res = slice;
|
|
7506
|
+
}
|
|
7507
|
+
isAboveRoot = false;
|
|
7508
|
+
}
|
|
7509
|
+
lastSlash = i;
|
|
7510
|
+
dots = 0;
|
|
7511
|
+
} else if (code === DOT && dots !== -1) {
|
|
7512
|
+
++dots;
|
|
7513
|
+
} else {
|
|
7514
|
+
dots = -1;
|
|
7515
|
+
}
|
|
7516
|
+
}
|
|
7517
|
+
return res;
|
|
7338
7518
|
}
|
|
7339
7519
|
|
|
7340
7520
|
// ../loader-utils/src/lib/files/node-file-facade.ts
|
|
@@ -7361,10 +7541,50 @@ var __exports__ = (() => {
|
|
|
7361
7541
|
async stat() {
|
|
7362
7542
|
throw NOT_IMPLEMENTED;
|
|
7363
7543
|
}
|
|
7544
|
+
async truncate(length) {
|
|
7545
|
+
throw NOT_IMPLEMENTED;
|
|
7546
|
+
}
|
|
7547
|
+
async append(data) {
|
|
7548
|
+
throw NOT_IMPLEMENTED;
|
|
7549
|
+
}
|
|
7364
7550
|
async close() {
|
|
7365
7551
|
}
|
|
7366
7552
|
};
|
|
7367
7553
|
|
|
7554
|
+
// ../loader-utils/src/lib/filesystems/node-filesystem-facade.ts
|
|
7555
|
+
var NOT_IMPLEMENTED2 = new Error("Not implemented");
|
|
7556
|
+
var NodeFileSystemFacade = class {
|
|
7557
|
+
constructor(options) {
|
|
7558
|
+
if (globalThis.loaders?.NodeFileSystem) {
|
|
7559
|
+
return new globalThis.loaders.NodeFileSystem(options);
|
|
7560
|
+
}
|
|
7561
|
+
if (isBrowser) {
|
|
7562
|
+
throw new Error("Can't instantiate NodeFileSystem in browser.");
|
|
7563
|
+
}
|
|
7564
|
+
throw new Error("Can't instantiate NodeFileSystem. Make sure to import @loaders.gl/polyfills first.");
|
|
7565
|
+
}
|
|
7566
|
+
readable = true;
|
|
7567
|
+
writable = true;
|
|
7568
|
+
async openReadableFile(path, flags) {
|
|
7569
|
+
throw NOT_IMPLEMENTED2;
|
|
7570
|
+
}
|
|
7571
|
+
async openWritableFile(path, flags, mode) {
|
|
7572
|
+
throw NOT_IMPLEMENTED2;
|
|
7573
|
+
}
|
|
7574
|
+
async readdir(dirname2 = ".", options) {
|
|
7575
|
+
throw NOT_IMPLEMENTED2;
|
|
7576
|
+
}
|
|
7577
|
+
async stat(path, options) {
|
|
7578
|
+
throw NOT_IMPLEMENTED2;
|
|
7579
|
+
}
|
|
7580
|
+
async unlink(path) {
|
|
7581
|
+
throw NOT_IMPLEMENTED2;
|
|
7582
|
+
}
|
|
7583
|
+
async fetch(path, options) {
|
|
7584
|
+
throw NOT_IMPLEMENTED2;
|
|
7585
|
+
}
|
|
7586
|
+
};
|
|
7587
|
+
|
|
7368
7588
|
// ../loader-utils/src/lib/file-provider/file-provider.ts
|
|
7369
7589
|
var isFileProvider = (fileProvider) => {
|
|
7370
7590
|
return fileProvider?.getUint8 && fileProvider?.slice && fileProvider?.length;
|
|
@@ -7372,9 +7592,14 @@ var __exports__ = (() => {
|
|
|
7372
7592
|
|
|
7373
7593
|
// ../loader-utils/src/lib/file-provider/file-handle-file.ts
|
|
7374
7594
|
var FileHandleFile = class {
|
|
7375
|
-
constructor(path) {
|
|
7376
|
-
this.file = new NodeFileFacade(path, "r");
|
|
7377
|
-
|
|
7595
|
+
constructor(path, append = false) {
|
|
7596
|
+
this.file = new NodeFileFacade(path, append ? "a+" : "r");
|
|
7597
|
+
}
|
|
7598
|
+
async truncate(length) {
|
|
7599
|
+
await this.file.truncate(length);
|
|
7600
|
+
}
|
|
7601
|
+
async append(buffer) {
|
|
7602
|
+
await this.file.append(buffer);
|
|
7378
7603
|
}
|
|
7379
7604
|
async destroy() {
|
|
7380
7605
|
await this.file.close();
|
|
@@ -7420,7 +7645,7 @@ var __exports__ = (() => {
|
|
|
7420
7645
|
return await this.file.read(startOffset, length);
|
|
7421
7646
|
}
|
|
7422
7647
|
get length() {
|
|
7423
|
-
return this.
|
|
7648
|
+
return this.file.bigsize;
|
|
7424
7649
|
}
|
|
7425
7650
|
};
|
|
7426
7651
|
|
|
@@ -7441,39 +7666,6 @@ var __exports__ = (() => {
|
|
|
7441
7666
|
return targetOffset;
|
|
7442
7667
|
};
|
|
7443
7668
|
|
|
7444
|
-
// src/parse-zip/end-of-central-directory.ts
|
|
7445
|
-
var eoCDSignature = new Uint8Array([80, 75, 5, 6]);
|
|
7446
|
-
var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
|
|
7447
|
-
var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
|
|
7448
|
-
var CD_RECORDS_NUMBER_OFFSET = 8n;
|
|
7449
|
-
var CD_START_OFFSET_OFFSET = 16n;
|
|
7450
|
-
var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
|
|
7451
|
-
var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
|
|
7452
|
-
var ZIP64_CD_START_OFFSET_OFFSET = 48n;
|
|
7453
|
-
var parseEoCDRecord = async (file) => {
|
|
7454
|
-
const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
|
|
7455
|
-
let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
|
|
7456
|
-
let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
|
|
7457
|
-
if (cdStartOffset === BigInt(4294967295) || cdRecordsNumber === BigInt(4294967295)) {
|
|
7458
|
-
const zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
|
|
7459
|
-
const magicBytes = await file.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n);
|
|
7460
|
-
if (!compareArrayBuffers(magicBytes, zip64EoCDLocatorSignature)) {
|
|
7461
|
-
throw new Error("zip64 EoCD locator not found");
|
|
7462
|
-
}
|
|
7463
|
-
const zip64EoCDOffset = await file.getBigUint64(zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET);
|
|
7464
|
-
const endOfCDMagicBytes = await file.slice(zip64EoCDOffset, zip64EoCDOffset + 4n);
|
|
7465
|
-
if (!compareArrayBuffers(endOfCDMagicBytes, zip64EoCDSignature.buffer)) {
|
|
7466
|
-
throw new Error("zip64 EoCD not found");
|
|
7467
|
-
}
|
|
7468
|
-
cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
|
|
7469
|
-
cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
|
|
7470
|
-
}
|
|
7471
|
-
return {
|
|
7472
|
-
cdRecordsNumber,
|
|
7473
|
-
cdStartOffset
|
|
7474
|
-
};
|
|
7475
|
-
};
|
|
7476
|
-
|
|
7477
7669
|
// src/parse-zip/zip64-info-generation.ts
|
|
7478
7670
|
var signature = new Uint8Array([1, 0]);
|
|
7479
7671
|
function createZip64Info(options) {
|
|
@@ -7492,12 +7684,15 @@ var __exports__ = (() => {
|
|
|
7492
7684
|
}
|
|
7493
7685
|
return concatenateArrayBuffers(...arraysToConcat);
|
|
7494
7686
|
}
|
|
7687
|
+
function setFieldToNumber(header, fieldSize, fieldOffset, value) {
|
|
7688
|
+
NUMBER_SETTERS[fieldSize](header, Number(fieldOffset), value);
|
|
7689
|
+
}
|
|
7495
7690
|
var NUMBER_SETTERS = {
|
|
7496
7691
|
2: (header, offset, value) => {
|
|
7497
|
-
header.setUint16(offset, value, true);
|
|
7692
|
+
header.setUint16(offset, Number(value > 65535 ? 65535 : value), true);
|
|
7498
7693
|
},
|
|
7499
7694
|
4: (header, offset, value) => {
|
|
7500
|
-
header.setUint32(offset, value, true);
|
|
7695
|
+
header.setUint32(offset, Number(value > 4294967295 ? 4294967295 : value), true);
|
|
7501
7696
|
},
|
|
7502
7697
|
8: (header, offset, value) => {
|
|
7503
7698
|
header.setBigUint64(offset, BigInt(value), true);
|
|
@@ -7520,6 +7715,187 @@ var __exports__ = (() => {
|
|
|
7520
7715
|
name: "offset"
|
|
7521
7716
|
}];
|
|
7522
7717
|
|
|
7718
|
+
// src/parse-zip/end-of-central-directory.ts
|
|
7719
|
+
var eoCDSignature = new Uint8Array([80, 75, 5, 6]);
|
|
7720
|
+
var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
|
|
7721
|
+
var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
|
|
7722
|
+
var CD_RECORDS_NUMBER_OFFSET = 8n;
|
|
7723
|
+
var CD_RECORDS_NUMBER_ON_DISC_OFFSET = 10n;
|
|
7724
|
+
var CD_CD_BYTE_SIZE_OFFSET = 12n;
|
|
7725
|
+
var CD_START_OFFSET_OFFSET = 16n;
|
|
7726
|
+
var CD_COMMENT_OFFSET = 22n;
|
|
7727
|
+
var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
|
|
7728
|
+
var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
|
|
7729
|
+
var ZIP64_CD_RECORDS_NUMBER_ON_DISC_OFFSET = 32n;
|
|
7730
|
+
var ZIP64_CD_CD_BYTE_SIZE_OFFSET = 40n;
|
|
7731
|
+
var ZIP64_CD_START_OFFSET_OFFSET = 48n;
|
|
7732
|
+
var ZIP64_COMMENT_OFFSET = 56n;
|
|
7733
|
+
var parseEoCDRecord = async (file) => {
|
|
7734
|
+
const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
|
|
7735
|
+
let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
|
|
7736
|
+
let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
|
|
7737
|
+
let zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
|
|
7738
|
+
let zip64EoCDOffset = 0n;
|
|
7739
|
+
const magicBytes = await file.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n);
|
|
7740
|
+
if (compareArrayBuffers(magicBytes, zip64EoCDLocatorSignature)) {
|
|
7741
|
+
zip64EoCDOffset = await file.getBigUint64(zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET);
|
|
7742
|
+
const endOfCDMagicBytes = await file.slice(zip64EoCDOffset, zip64EoCDOffset + 4n);
|
|
7743
|
+
if (!compareArrayBuffers(endOfCDMagicBytes, zip64EoCDSignature.buffer)) {
|
|
7744
|
+
throw new Error("zip64 EoCD not found");
|
|
7745
|
+
}
|
|
7746
|
+
cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
|
|
7747
|
+
cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
|
|
7748
|
+
} else {
|
|
7749
|
+
zip64EoCDLocatorOffset = 0n;
|
|
7750
|
+
}
|
|
7751
|
+
return {
|
|
7752
|
+
cdRecordsNumber,
|
|
7753
|
+
cdStartOffset,
|
|
7754
|
+
offsets: {
|
|
7755
|
+
zip64EoCDOffset,
|
|
7756
|
+
zip64EoCDLocatorOffset,
|
|
7757
|
+
zipEoCDOffset
|
|
7758
|
+
}
|
|
7759
|
+
};
|
|
7760
|
+
};
|
|
7761
|
+
function updateEoCD(eocdBody, oldEoCDOffsets, newCDStartOffset, eocdStartOffset, newCDRecordsNumber) {
|
|
7762
|
+
const eocd = new DataView(eocdBody);
|
|
7763
|
+
const classicEoCDOffset = oldEoCDOffsets.zip64EoCDOffset ? oldEoCDOffsets.zipEoCDOffset - oldEoCDOffsets.zip64EoCDOffset : 0n;
|
|
7764
|
+
if (Number(newCDRecordsNumber) <= 65535) {
|
|
7765
|
+
setFieldToNumber(eocd, 2, classicEoCDOffset + CD_RECORDS_NUMBER_OFFSET, newCDRecordsNumber);
|
|
7766
|
+
setFieldToNumber(eocd, 2, classicEoCDOffset + CD_RECORDS_NUMBER_ON_DISC_OFFSET, newCDRecordsNumber);
|
|
7767
|
+
}
|
|
7768
|
+
if (eocdStartOffset - newCDStartOffset <= 4294967295) {
|
|
7769
|
+
setFieldToNumber(eocd, 4, classicEoCDOffset + CD_CD_BYTE_SIZE_OFFSET, eocdStartOffset - newCDStartOffset);
|
|
7770
|
+
}
|
|
7771
|
+
if (newCDStartOffset < 4294967295) {
|
|
7772
|
+
setFieldToNumber(eocd, 4, classicEoCDOffset + CD_START_OFFSET_OFFSET, newCDStartOffset);
|
|
7773
|
+
}
|
|
7774
|
+
if (oldEoCDOffsets.zip64EoCDLocatorOffset && oldEoCDOffsets.zip64EoCDOffset) {
|
|
7775
|
+
const locatorOffset = oldEoCDOffsets.zip64EoCDLocatorOffset - oldEoCDOffsets.zip64EoCDOffset;
|
|
7776
|
+
setFieldToNumber(eocd, 8, locatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET, eocdStartOffset);
|
|
7777
|
+
setFieldToNumber(eocd, 8, ZIP64_CD_START_OFFSET_OFFSET, newCDStartOffset);
|
|
7778
|
+
setFieldToNumber(eocd, 8, ZIP64_CD_RECORDS_NUMBER_OFFSET, newCDRecordsNumber);
|
|
7779
|
+
setFieldToNumber(eocd, 8, ZIP64_CD_RECORDS_NUMBER_ON_DISC_OFFSET, newCDRecordsNumber);
|
|
7780
|
+
setFieldToNumber(eocd, 8, ZIP64_CD_CD_BYTE_SIZE_OFFSET, eocdStartOffset - newCDStartOffset);
|
|
7781
|
+
}
|
|
7782
|
+
return new Uint8Array(eocd.buffer);
|
|
7783
|
+
}
|
|
7784
|
+
function generateEoCD(options) {
|
|
7785
|
+
const header = new DataView(new ArrayBuffer(Number(CD_COMMENT_OFFSET)));
|
|
7786
|
+
for (const field of EOCD_FIELDS) {
|
|
7787
|
+
setFieldToNumber(header, field.size, field.offset, options[field.name ?? ""] ?? field.default ?? 0);
|
|
7788
|
+
}
|
|
7789
|
+
const locator = generateZip64InfoLocator(options);
|
|
7790
|
+
const zip64Record = generateZip64Info(options);
|
|
7791
|
+
return concatenateArrayBuffers(zip64Record, locator, header.buffer);
|
|
7792
|
+
}
|
|
7793
|
+
var EOCD_FIELDS = [{
|
|
7794
|
+
offset: 0,
|
|
7795
|
+
size: 4,
|
|
7796
|
+
default: new DataView(eoCDSignature.buffer).getUint32(0, true)
|
|
7797
|
+
}, {
|
|
7798
|
+
offset: 4,
|
|
7799
|
+
size: 2,
|
|
7800
|
+
default: 0
|
|
7801
|
+
}, {
|
|
7802
|
+
offset: 6,
|
|
7803
|
+
size: 2,
|
|
7804
|
+
default: 0
|
|
7805
|
+
}, {
|
|
7806
|
+
offset: 8,
|
|
7807
|
+
size: 2,
|
|
7808
|
+
name: "recordsNumber"
|
|
7809
|
+
}, {
|
|
7810
|
+
offset: 10,
|
|
7811
|
+
size: 2,
|
|
7812
|
+
name: "recordsNumber"
|
|
7813
|
+
}, {
|
|
7814
|
+
offset: 12,
|
|
7815
|
+
size: 4,
|
|
7816
|
+
name: "cdSize"
|
|
7817
|
+
}, {
|
|
7818
|
+
offset: 16,
|
|
7819
|
+
size: 4,
|
|
7820
|
+
name: "cdOffset"
|
|
7821
|
+
}, {
|
|
7822
|
+
offset: 20,
|
|
7823
|
+
size: 2,
|
|
7824
|
+
default: 0
|
|
7825
|
+
}];
|
|
7826
|
+
function generateZip64Info(options) {
|
|
7827
|
+
const record = new DataView(new ArrayBuffer(Number(ZIP64_COMMENT_OFFSET)));
|
|
7828
|
+
for (const field of ZIP64_EOCD_FIELDS) {
|
|
7829
|
+
setFieldToNumber(record, field.size, field.offset, options[field.name ?? ""] ?? field.default ?? 0);
|
|
7830
|
+
}
|
|
7831
|
+
return record.buffer;
|
|
7832
|
+
}
|
|
7833
|
+
function generateZip64InfoLocator(options) {
|
|
7834
|
+
const locator = new DataView(new ArrayBuffer(Number(20)));
|
|
7835
|
+
for (const field of ZIP64_EOCD_LOCATOR_FIELDS) {
|
|
7836
|
+
setFieldToNumber(locator, field.size, field.offset, options[field.name ?? ""] ?? field.default ?? 0);
|
|
7837
|
+
}
|
|
7838
|
+
return locator.buffer;
|
|
7839
|
+
}
|
|
7840
|
+
var ZIP64_EOCD_LOCATOR_FIELDS = [{
|
|
7841
|
+
offset: 0,
|
|
7842
|
+
size: 4,
|
|
7843
|
+
default: new DataView(zip64EoCDLocatorSignature.buffer).getUint32(0, true)
|
|
7844
|
+
}, {
|
|
7845
|
+
offset: 4,
|
|
7846
|
+
size: 4,
|
|
7847
|
+
default: 0
|
|
7848
|
+
}, {
|
|
7849
|
+
offset: 8,
|
|
7850
|
+
size: 8,
|
|
7851
|
+
name: "eoCDStart"
|
|
7852
|
+
}, {
|
|
7853
|
+
offset: 16,
|
|
7854
|
+
size: 4,
|
|
7855
|
+
default: 1
|
|
7856
|
+
}];
|
|
7857
|
+
var ZIP64_EOCD_FIELDS = [{
|
|
7858
|
+
offset: 0,
|
|
7859
|
+
size: 4,
|
|
7860
|
+
default: new DataView(zip64EoCDSignature.buffer).getUint32(0, true)
|
|
7861
|
+
}, {
|
|
7862
|
+
offset: 4,
|
|
7863
|
+
size: 8,
|
|
7864
|
+
default: 44
|
|
7865
|
+
}, {
|
|
7866
|
+
offset: 12,
|
|
7867
|
+
size: 2,
|
|
7868
|
+
default: 45
|
|
7869
|
+
}, {
|
|
7870
|
+
offset: 14,
|
|
7871
|
+
size: 2,
|
|
7872
|
+
default: 45
|
|
7873
|
+
}, {
|
|
7874
|
+
offset: 16,
|
|
7875
|
+
size: 4,
|
|
7876
|
+
default: 0
|
|
7877
|
+
}, {
|
|
7878
|
+
offset: 20,
|
|
7879
|
+
size: 4,
|
|
7880
|
+
default: 0
|
|
7881
|
+
}, {
|
|
7882
|
+
offset: 24,
|
|
7883
|
+
size: 8,
|
|
7884
|
+
name: "recordsNumber"
|
|
7885
|
+
}, {
|
|
7886
|
+
offset: 32,
|
|
7887
|
+
size: 8,
|
|
7888
|
+
name: "recordsNumber"
|
|
7889
|
+
}, {
|
|
7890
|
+
offset: 40,
|
|
7891
|
+
size: 8,
|
|
7892
|
+
name: "cdSize"
|
|
7893
|
+
}, {
|
|
7894
|
+
offset: 48,
|
|
7895
|
+
size: 8,
|
|
7896
|
+
name: "cdOffset"
|
|
7897
|
+
}];
|
|
7898
|
+
|
|
7523
7899
|
// src/parse-zip/cd-file-header.ts
|
|
7524
7900
|
var CD_COMPRESSED_SIZE_OFFSET = 20n;
|
|
7525
7901
|
var CD_UNCOMPRESSED_SIZE_OFFSET = 24n;
|
|
@@ -7627,7 +8003,7 @@ var __exports__ = (() => {
|
|
|
7627
8003
|
const optionsToZip64 = {};
|
|
7628
8004
|
if (optionsToUse.offset >= 4294967295) {
|
|
7629
8005
|
optionsToZip64.offset = optionsToUse.offset;
|
|
7630
|
-
optionsToUse.offset = 4294967295;
|
|
8006
|
+
optionsToUse.offset = BigInt(4294967295);
|
|
7631
8007
|
}
|
|
7632
8008
|
if (optionsToUse.length >= 4294967295) {
|
|
7633
8009
|
optionsToZip64.size = optionsToUse.length;
|
|
@@ -7637,9 +8013,9 @@ var __exports__ = (() => {
|
|
|
7637
8013
|
zip64header = createZip64Info(optionsToZip64);
|
|
7638
8014
|
optionsToUse.extraLength = zip64header.byteLength;
|
|
7639
8015
|
}
|
|
7640
|
-
const header = new DataView(new ArrayBuffer(
|
|
8016
|
+
const header = new DataView(new ArrayBuffer(Number(CD_FILE_NAME_OFFSET)));
|
|
7641
8017
|
for (const field of ZIP_HEADER_FIELDS) {
|
|
7642
|
-
|
|
8018
|
+
setFieldToNumber(header, field.size, field.offset, optionsToUse[field.name ?? ""] ?? field.default ?? 0);
|
|
7643
8019
|
}
|
|
7644
8020
|
const encodedName = new TextEncoder().encode(optionsToUse.fileName);
|
|
7645
8021
|
const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);
|
|
@@ -7758,6 +8134,76 @@ var __exports__ = (() => {
|
|
|
7758
8134
|
compressionMethod
|
|
7759
8135
|
};
|
|
7760
8136
|
};
|
|
8137
|
+
function generateLocalHeader(options) {
|
|
8138
|
+
const optionsToUse = {
|
|
8139
|
+
...options,
|
|
8140
|
+
extraLength: 0,
|
|
8141
|
+
fnlength: options.fileName.length
|
|
8142
|
+
};
|
|
8143
|
+
let zip64header = new ArrayBuffer(0);
|
|
8144
|
+
const optionsToZip64 = {};
|
|
8145
|
+
if (optionsToUse.length >= 4294967295) {
|
|
8146
|
+
optionsToZip64.size = optionsToUse.length;
|
|
8147
|
+
optionsToUse.length = 4294967295;
|
|
8148
|
+
}
|
|
8149
|
+
if (Object.keys(optionsToZip64).length) {
|
|
8150
|
+
zip64header = createZip64Info(optionsToZip64);
|
|
8151
|
+
optionsToUse.extraLength = zip64header.byteLength;
|
|
8152
|
+
}
|
|
8153
|
+
const header = new DataView(new ArrayBuffer(Number(FILE_NAME_OFFSET)));
|
|
8154
|
+
for (const field of ZIP_HEADER_FIELDS2) {
|
|
8155
|
+
setFieldToNumber(header, field.size, field.offset, optionsToUse[field.name ?? ""] ?? field.default ?? 0);
|
|
8156
|
+
}
|
|
8157
|
+
const encodedName = new TextEncoder().encode(optionsToUse.fileName);
|
|
8158
|
+
const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);
|
|
8159
|
+
return resHeader;
|
|
8160
|
+
}
|
|
8161
|
+
var ZIP_HEADER_FIELDS2 = [{
|
|
8162
|
+
offset: 0,
|
|
8163
|
+
size: 4,
|
|
8164
|
+
default: new DataView(signature3.buffer).getUint32(0, true)
|
|
8165
|
+
}, {
|
|
8166
|
+
offset: 4,
|
|
8167
|
+
size: 2,
|
|
8168
|
+
default: 45
|
|
8169
|
+
}, {
|
|
8170
|
+
offset: 6,
|
|
8171
|
+
size: 2,
|
|
8172
|
+
default: 0
|
|
8173
|
+
}, {
|
|
8174
|
+
offset: 8,
|
|
8175
|
+
size: 2,
|
|
8176
|
+
default: 0
|
|
8177
|
+
}, {
|
|
8178
|
+
offset: 10,
|
|
8179
|
+
size: 2,
|
|
8180
|
+
default: 0
|
|
8181
|
+
}, {
|
|
8182
|
+
offset: 12,
|
|
8183
|
+
size: 2,
|
|
8184
|
+
default: 0
|
|
8185
|
+
}, {
|
|
8186
|
+
offset: 14,
|
|
8187
|
+
size: 4,
|
|
8188
|
+
name: "crc32"
|
|
8189
|
+
}, {
|
|
8190
|
+
offset: 18,
|
|
8191
|
+
size: 4,
|
|
8192
|
+
name: "length"
|
|
8193
|
+
}, {
|
|
8194
|
+
offset: 22,
|
|
8195
|
+
size: 4,
|
|
8196
|
+
name: "length"
|
|
8197
|
+
}, {
|
|
8198
|
+
offset: 26,
|
|
8199
|
+
size: 2,
|
|
8200
|
+
name: "fnlength"
|
|
8201
|
+
}, {
|
|
8202
|
+
offset: 28,
|
|
8203
|
+
size: 2,
|
|
8204
|
+
default: 0,
|
|
8205
|
+
name: "extraLength"
|
|
8206
|
+
}];
|
|
7761
8207
|
|
|
7762
8208
|
// ../crypto/src/lib/hash.ts
|
|
7763
8209
|
var Hash = class {
|
|
@@ -7784,6 +8230,29 @@ var __exports__ = (() => {
|
|
|
7784
8230
|
}
|
|
7785
8231
|
};
|
|
7786
8232
|
|
|
8233
|
+
// ../crypto/src/lib/algorithms/crc32.ts
|
|
8234
|
+
var CRC32 = class {
|
|
8235
|
+
constructor() {
|
|
8236
|
+
this.crc = ~0;
|
|
8237
|
+
}
|
|
8238
|
+
update(arrayBuffer) {
|
|
8239
|
+
const CRC32_TABLE = getCRC32Table();
|
|
8240
|
+
const byteArray = new Uint8Array(arrayBuffer);
|
|
8241
|
+
for (let i = 0; i < byteArray.byteLength; i++) {
|
|
8242
|
+
this.crc = this.crc >>> 8 ^ CRC32_TABLE[(this.crc ^ byteArray[i]) & 255];
|
|
8243
|
+
}
|
|
8244
|
+
return this;
|
|
8245
|
+
}
|
|
8246
|
+
finalize() {
|
|
8247
|
+
this.crc = (this.crc ^ -1) >>> 0;
|
|
8248
|
+
return this.crc;
|
|
8249
|
+
}
|
|
8250
|
+
};
|
|
8251
|
+
var CRC32TAB = Uint32Array.of(0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918e3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117);
|
|
8252
|
+
function getCRC32Table() {
|
|
8253
|
+
return CRC32TAB;
|
|
8254
|
+
}
|
|
8255
|
+
|
|
7787
8256
|
// ../crypto/src/lib/utils/base64-utils.ts
|
|
7788
8257
|
function asciiToBase64(string) {
|
|
7789
8258
|
string = `${string}`;
|
|
@@ -7835,6 +8304,16 @@ var __exports__ = (() => {
|
|
|
7835
8304
|
}
|
|
7836
8305
|
|
|
7837
8306
|
// ../crypto/src/lib/utils/digest-utils.ts
|
|
8307
|
+
function encodeNumber(number, encoding) {
|
|
8308
|
+
switch (encoding) {
|
|
8309
|
+
case "hex":
|
|
8310
|
+
return convertNumberToHex(number);
|
|
8311
|
+
case "base64":
|
|
8312
|
+
return convertHexToBase64(convertNumberToHex(number));
|
|
8313
|
+
default:
|
|
8314
|
+
throw new Error(encoding);
|
|
8315
|
+
}
|
|
8316
|
+
}
|
|
7838
8317
|
function encodeHex(hex, encoding) {
|
|
7839
8318
|
switch (encoding) {
|
|
7840
8319
|
case "hex":
|
|
@@ -7853,6 +8332,43 @@ var __exports__ = (() => {
|
|
|
7853
8332
|
const string = matches2.map((a) => String.fromCharCode(parseInt(a, 16))).join("");
|
|
7854
8333
|
return asciiToBase64(string) || "";
|
|
7855
8334
|
}
|
|
8335
|
+
function convertNumberToHex(cipher) {
|
|
8336
|
+
const hexString = cipher.toString(16);
|
|
8337
|
+
return hexString === "0" ? `0${hexString}` : hexString;
|
|
8338
|
+
}
|
|
8339
|
+
|
|
8340
|
+
// ../crypto/src/lib/crc32-hash.ts
|
|
8341
|
+
var CRC32Hash = class extends Hash {
|
|
8342
|
+
name = "crc32";
|
|
8343
|
+
constructor(options = {}) {
|
|
8344
|
+
super();
|
|
8345
|
+
this.options = {
|
|
8346
|
+
crypto: {},
|
|
8347
|
+
...options
|
|
8348
|
+
};
|
|
8349
|
+
this.hashBatches = this.hashBatches.bind(this);
|
|
8350
|
+
}
|
|
8351
|
+
async hash(input, encoding) {
|
|
8352
|
+
return this.hashSync(input, encoding);
|
|
8353
|
+
}
|
|
8354
|
+
hashSync(input, encoding) {
|
|
8355
|
+
const hash = new CRC32();
|
|
8356
|
+
hash.update(input);
|
|
8357
|
+
const digest = hash.finalize();
|
|
8358
|
+
return encodeNumber(digest, encoding);
|
|
8359
|
+
}
|
|
8360
|
+
async *hashBatches(asyncIterator, encoding = "base64") {
|
|
8361
|
+
const hash = new CRC32();
|
|
8362
|
+
for await (const chunk of asyncIterator) {
|
|
8363
|
+
hash.update(chunk);
|
|
8364
|
+
yield chunk;
|
|
8365
|
+
}
|
|
8366
|
+
const digest = hash.finalize();
|
|
8367
|
+
this.options.crypto?.onEnd?.({
|
|
8368
|
+
hash: encodeNumber(digest, encoding)
|
|
8369
|
+
});
|
|
8370
|
+
}
|
|
8371
|
+
};
|
|
7856
8372
|
|
|
7857
8373
|
// ../crypto/src/lib/algorithms/md5-wasm.ts
|
|
7858
8374
|
var atb = typeof atob === "function" ? atob : typeof Buffer === "function" ? nodeATOB : identity;
|
|
@@ -8271,12 +8787,279 @@ var __exports__ = (() => {
|
|
|
8271
8787
|
this.options = options;
|
|
8272
8788
|
}
|
|
8273
8789
|
async hash(input, encoding) {
|
|
8274
|
-
const md5Promise = new Promise((
|
|
8790
|
+
const md5Promise = new Promise((resolve2, reject) => md5WASM(input).then(resolve2).catch(reject));
|
|
8275
8791
|
const hex = await md5Promise;
|
|
8276
8792
|
return encodeHex(hex, encoding);
|
|
8277
8793
|
}
|
|
8278
8794
|
};
|
|
8279
8795
|
|
|
8796
|
+
// ../core/src/javascript-utils/is-type.ts
|
|
8797
|
+
var isResponse = (x) => typeof Response !== "undefined" && x instanceof Response || x && x.arrayBuffer && x.text && x.json;
|
|
8798
|
+
var isBlob = (x) => typeof Blob !== "undefined" && x instanceof Blob;
|
|
8799
|
+
|
|
8800
|
+
// ../core/src/lib/utils/mime-type-utils.ts
|
|
8801
|
+
var DATA_URL_PATTERN = /^data:([-\w.]+\/[-\w.+]+)(;|,)/;
|
|
8802
|
+
var MIME_TYPE_PATTERN = /^([-\w.]+\/[-\w.+]+)/;
|
|
8803
|
+
function parseMIMEType(mimeString) {
|
|
8804
|
+
const matches2 = MIME_TYPE_PATTERN.exec(mimeString);
|
|
8805
|
+
if (matches2) {
|
|
8806
|
+
return matches2[1];
|
|
8807
|
+
}
|
|
8808
|
+
return mimeString;
|
|
8809
|
+
}
|
|
8810
|
+
function parseMIMETypeFromURL(url) {
|
|
8811
|
+
const matches2 = DATA_URL_PATTERN.exec(url);
|
|
8812
|
+
if (matches2) {
|
|
8813
|
+
return matches2[1];
|
|
8814
|
+
}
|
|
8815
|
+
return "";
|
|
8816
|
+
}
|
|
8817
|
+
|
|
8818
|
+
// ../core/src/lib/utils/url-utils.ts
|
|
8819
|
+
var QUERY_STRING_PATTERN = /\?.*/;
|
|
8820
|
+
function stripQueryString(url) {
|
|
8821
|
+
return url.replace(QUERY_STRING_PATTERN, "");
|
|
8822
|
+
}
|
|
8823
|
+
|
|
8824
|
+
// ../core/src/lib/utils/resource-utils.ts
|
|
8825
|
+
function getResourceUrl(resource) {
|
|
8826
|
+
if (isResponse(resource)) {
|
|
8827
|
+
const response = resource;
|
|
8828
|
+
return response.url;
|
|
8829
|
+
}
|
|
8830
|
+
if (isBlob(resource)) {
|
|
8831
|
+
const blob = resource;
|
|
8832
|
+
return blob.name || "";
|
|
8833
|
+
}
|
|
8834
|
+
if (typeof resource === "string") {
|
|
8835
|
+
return resource;
|
|
8836
|
+
}
|
|
8837
|
+
return "";
|
|
8838
|
+
}
|
|
8839
|
+
function getResourceMIMEType(resource) {
|
|
8840
|
+
if (isResponse(resource)) {
|
|
8841
|
+
const response = resource;
|
|
8842
|
+
const contentTypeHeader = response.headers.get("content-type") || "";
|
|
8843
|
+
const noQueryUrl = stripQueryString(response.url);
|
|
8844
|
+
return parseMIMEType(contentTypeHeader) || parseMIMETypeFromURL(noQueryUrl);
|
|
8845
|
+
}
|
|
8846
|
+
if (isBlob(resource)) {
|
|
8847
|
+
const blob = resource;
|
|
8848
|
+
return blob.type || "";
|
|
8849
|
+
}
|
|
8850
|
+
if (typeof resource === "string") {
|
|
8851
|
+
return parseMIMETypeFromURL(resource);
|
|
8852
|
+
}
|
|
8853
|
+
return "";
|
|
8854
|
+
}
|
|
8855
|
+
function getResourceContentLength(resource) {
|
|
8856
|
+
if (isResponse(resource)) {
|
|
8857
|
+
const response = resource;
|
|
8858
|
+
return response.headers["content-length"] || -1;
|
|
8859
|
+
}
|
|
8860
|
+
if (isBlob(resource)) {
|
|
8861
|
+
const blob = resource;
|
|
8862
|
+
return blob.size;
|
|
8863
|
+
}
|
|
8864
|
+
if (typeof resource === "string") {
|
|
8865
|
+
return resource.length;
|
|
8866
|
+
}
|
|
8867
|
+
if (resource instanceof ArrayBuffer) {
|
|
8868
|
+
return resource.byteLength;
|
|
8869
|
+
}
|
|
8870
|
+
if (ArrayBuffer.isView(resource)) {
|
|
8871
|
+
return resource.byteLength;
|
|
8872
|
+
}
|
|
8873
|
+
return -1;
|
|
8874
|
+
}
|
|
8875
|
+
|
|
8876
|
+
// ../core/src/lib/utils/response-utils.ts
|
|
8877
|
+
async function makeResponse(resource) {
|
|
8878
|
+
if (isResponse(resource)) {
|
|
8879
|
+
return resource;
|
|
8880
|
+
}
|
|
8881
|
+
const headers = {};
|
|
8882
|
+
const contentLength = getResourceContentLength(resource);
|
|
8883
|
+
if (contentLength >= 0) {
|
|
8884
|
+
headers["content-length"] = String(contentLength);
|
|
8885
|
+
}
|
|
8886
|
+
const url = getResourceUrl(resource);
|
|
8887
|
+
const type = getResourceMIMEType(resource);
|
|
8888
|
+
if (type) {
|
|
8889
|
+
headers["content-type"] = type;
|
|
8890
|
+
}
|
|
8891
|
+
const initialDataUrl = await getInitialDataUrl(resource);
|
|
8892
|
+
if (initialDataUrl) {
|
|
8893
|
+
headers["x-first-bytes"] = initialDataUrl;
|
|
8894
|
+
}
|
|
8895
|
+
if (typeof resource === "string") {
|
|
8896
|
+
resource = new TextEncoder().encode(resource);
|
|
8897
|
+
}
|
|
8898
|
+
const response = new Response(resource, {
|
|
8899
|
+
headers
|
|
8900
|
+
});
|
|
8901
|
+
Object.defineProperty(response, "url", {
|
|
8902
|
+
value: url
|
|
8903
|
+
});
|
|
8904
|
+
return response;
|
|
8905
|
+
}
|
|
8906
|
+
async function getInitialDataUrl(resource) {
|
|
8907
|
+
const INITIAL_DATA_LENGTH = 5;
|
|
8908
|
+
if (typeof resource === "string") {
|
|
8909
|
+
return `data:,${resource.slice(0, INITIAL_DATA_LENGTH)}`;
|
|
8910
|
+
}
|
|
8911
|
+
if (resource instanceof Blob) {
|
|
8912
|
+
const blobSlice = resource.slice(0, 5);
|
|
8913
|
+
return await new Promise((resolve2) => {
|
|
8914
|
+
const reader = new FileReader();
|
|
8915
|
+
reader.onload = (event) => resolve2(event?.target?.result);
|
|
8916
|
+
reader.readAsDataURL(blobSlice);
|
|
8917
|
+
});
|
|
8918
|
+
}
|
|
8919
|
+
if (resource instanceof ArrayBuffer) {
|
|
8920
|
+
const slice = resource.slice(0, INITIAL_DATA_LENGTH);
|
|
8921
|
+
const base64 = arrayBufferToBase64(slice);
|
|
8922
|
+
return `data:base64,${base64}`;
|
|
8923
|
+
}
|
|
8924
|
+
return null;
|
|
8925
|
+
}
|
|
8926
|
+
function arrayBufferToBase64(buffer) {
|
|
8927
|
+
let binary = "";
|
|
8928
|
+
const bytes = new Uint8Array(buffer);
|
|
8929
|
+
for (let i = 0; i < bytes.byteLength; i++) {
|
|
8930
|
+
binary += String.fromCharCode(bytes[i]);
|
|
8931
|
+
}
|
|
8932
|
+
return btoa(binary);
|
|
8933
|
+
}
|
|
8934
|
+
|
|
8935
|
+
// ../core/src/lib/fetch/fetch-file.ts
|
|
8936
|
+
function isNodePath(url) {
|
|
8937
|
+
return !isRequestURL(url) && !isDataURL(url);
|
|
8938
|
+
}
|
|
8939
|
+
function isRequestURL(url) {
|
|
8940
|
+
return url.startsWith("http:") || url.startsWith("https:");
|
|
8941
|
+
}
|
|
8942
|
+
function isDataURL(url) {
|
|
8943
|
+
return url.startsWith("data:");
|
|
8944
|
+
}
|
|
8945
|
+
async function fetchFile(urlOrData, fetchOptions) {
|
|
8946
|
+
if (typeof urlOrData === "string") {
|
|
8947
|
+
const url = resolvePath(urlOrData);
|
|
8948
|
+
if (isNodePath(url)) {
|
|
8949
|
+
if (globalThis.loaders?.fetchNode) {
|
|
8950
|
+
return globalThis.loaders?.fetchNode(url, fetchOptions);
|
|
8951
|
+
}
|
|
8952
|
+
}
|
|
8953
|
+
return await fetch(url, fetchOptions);
|
|
8954
|
+
}
|
|
8955
|
+
return await makeResponse(urlOrData);
|
|
8956
|
+
}
|
|
8957
|
+
|
|
8958
|
+
// src/parse-zip/zip-composition.ts
|
|
8959
|
+
async function cutTheTailOff(provider) {
|
|
8960
|
+
const oldEoCDinfo = await parseEoCDRecord(provider);
|
|
8961
|
+
const oldCDStartOffset = oldEoCDinfo.cdStartOffset;
|
|
8962
|
+
const oldCDLength = Number(oldEoCDinfo.offsets.zip64EoCDOffset ? oldEoCDinfo.offsets.zip64EoCDOffset - oldCDStartOffset : oldEoCDinfo.offsets.zipEoCDOffset - oldCDStartOffset);
|
|
8963
|
+
const zipEnding = await provider.slice(oldCDStartOffset, provider.length);
|
|
8964
|
+
await provider.truncate(Number(oldCDStartOffset));
|
|
8965
|
+
const oldCDBody = zipEnding.slice(0, oldCDLength);
|
|
8966
|
+
const eocdBody = zipEnding.slice(oldCDLength, zipEnding.byteLength);
|
|
8967
|
+
return [oldCDBody, eocdBody, oldEoCDinfo];
|
|
8968
|
+
}
|
|
8969
|
+
async function generateFileHeaders(fileName, fileToAdd, localFileHeaderOffset) {
|
|
8970
|
+
const newFileCRC322 = parseInt(await new CRC32Hash().hash(fileToAdd, "hex"), 16);
|
|
8971
|
+
const newFileLocalHeader = generateLocalHeader({
|
|
8972
|
+
crc32: newFileCRC322,
|
|
8973
|
+
fileName,
|
|
8974
|
+
length: fileToAdd.byteLength
|
|
8975
|
+
});
|
|
8976
|
+
const newFileCDHeader = generateCDHeader({
|
|
8977
|
+
crc32: newFileCRC322,
|
|
8978
|
+
fileName,
|
|
8979
|
+
offset: localFileHeaderOffset,
|
|
8980
|
+
length: fileToAdd.byteLength
|
|
8981
|
+
});
|
|
8982
|
+
return [new Uint8Array(concatenateArrayBuffers(newFileLocalHeader, fileToAdd)), new Uint8Array(newFileCDHeader)];
|
|
8983
|
+
}
|
|
8984
|
+
async function addOneFile(zipUrl, fileToAdd, fileName) {
|
|
8985
|
+
const provider = new FileHandleFile(zipUrl, true);
|
|
8986
|
+
const [oldCDBody, eocdBody, oldEoCDinfo] = await cutTheTailOff(provider);
|
|
8987
|
+
const newFileOffset = provider.length;
|
|
8988
|
+
const [localPart, cdHeaderPart] = await generateFileHeaders(fileName, fileToAdd, newFileOffset);
|
|
8989
|
+
await provider.append(localPart);
|
|
8990
|
+
const newCDBody = concatenateArrayBuffers(oldCDBody, cdHeaderPart);
|
|
8991
|
+
const newCDStartOffset = provider.length;
|
|
8992
|
+
await provider.append(new Uint8Array(newCDBody));
|
|
8993
|
+
const eocdOffset = provider.length;
|
|
8994
|
+
await provider.append(updateEoCD(eocdBody, oldEoCDinfo.offsets, newCDStartOffset, eocdOffset, oldEoCDinfo.cdRecordsNumber + 1n));
|
|
8995
|
+
}
|
|
8996
|
+
async function createZip(inputPath, outputPath, createAdditionalData) {
|
|
8997
|
+
const fileIterator = getFileIterator(inputPath);
|
|
8998
|
+
const resFile = new NodeFileFacade(outputPath, "w");
|
|
8999
|
+
const fileList = [];
|
|
9000
|
+
const cdArray = [];
|
|
9001
|
+
for await (const file of fileIterator) {
|
|
9002
|
+
await addFile(file, resFile, cdArray, fileList);
|
|
9003
|
+
}
|
|
9004
|
+
if (createAdditionalData) {
|
|
9005
|
+
const additionaldata = await createAdditionalData(fileList);
|
|
9006
|
+
console.log(additionaldata);
|
|
9007
|
+
await addFile(additionaldata, resFile, cdArray);
|
|
9008
|
+
}
|
|
9009
|
+
const cdOffset = (await resFile.stat()).bigsize;
|
|
9010
|
+
const cd = concatenateArrayBuffers(...cdArray);
|
|
9011
|
+
await resFile.append(new Uint8Array(cd));
|
|
9012
|
+
const eoCDStart = (await resFile.stat()).bigsize;
|
|
9013
|
+
await resFile.append(new Uint8Array(generateEoCD({
|
|
9014
|
+
recordsNumber: cdArray.length,
|
|
9015
|
+
cdSize: cd.byteLength,
|
|
9016
|
+
cdOffset,
|
|
9017
|
+
eoCDStart
|
|
9018
|
+
})));
|
|
9019
|
+
}
|
|
9020
|
+
async function addFile(file, resFile, cdArray, fileList) {
|
|
9021
|
+
const size = (await resFile.stat()).bigsize;
|
|
9022
|
+
fileList?.push({
|
|
9023
|
+
fileName: file.path,
|
|
9024
|
+
localHeaderOffset: size
|
|
9025
|
+
});
|
|
9026
|
+
const [localPart, cdHeaderPart] = await generateFileHeaders(file.path, file.file, size);
|
|
9027
|
+
await resFile.append(localPart);
|
|
9028
|
+
cdArray.push(cdHeaderPart);
|
|
9029
|
+
}
|
|
9030
|
+
function getFileIterator(inputPath) {
|
|
9031
|
+
async function* iterable() {
|
|
9032
|
+
const fileList = await getAllFiles(inputPath);
|
|
9033
|
+
for (const filePath of fileList) {
|
|
9034
|
+
const file = await (await fetchFile(path_exports.join(inputPath, filePath))).arrayBuffer();
|
|
9035
|
+
yield {
|
|
9036
|
+
path: filePath,
|
|
9037
|
+
file
|
|
9038
|
+
};
|
|
9039
|
+
}
|
|
9040
|
+
}
|
|
9041
|
+
return iterable();
|
|
9042
|
+
}
|
|
9043
|
+
async function getAllFiles(basePath, subfolder = "", fsPassed) {
|
|
9044
|
+
const fs = fsPassed ? fsPassed : new NodeFileSystemFacade({});
|
|
9045
|
+
const files = await fs.readdir(pathJoin(basePath, subfolder));
|
|
9046
|
+
const arrayOfFiles = [];
|
|
9047
|
+
for (const file of files) {
|
|
9048
|
+
const fullPath = pathJoin(basePath, subfolder, file);
|
|
9049
|
+
if ((await fs.stat(fullPath)).isDirectory) {
|
|
9050
|
+
const files2 = await getAllFiles(basePath, pathJoin(subfolder, file));
|
|
9051
|
+
arrayOfFiles.push(...files2);
|
|
9052
|
+
} else {
|
|
9053
|
+
arrayOfFiles.push(pathJoin(subfolder, file));
|
|
9054
|
+
}
|
|
9055
|
+
}
|
|
9056
|
+
return arrayOfFiles;
|
|
9057
|
+
}
|
|
9058
|
+
function pathJoin(...paths) {
|
|
9059
|
+
const resPaths = paths.filter((val) => val.length);
|
|
9060
|
+
return path_exports.join(...resPaths);
|
|
9061
|
+
}
|
|
9062
|
+
|
|
8280
9063
|
// src/hash-file-utility.ts
|
|
8281
9064
|
function parseHashTable(arrayBuffer) {
|
|
8282
9065
|
const dataView = new DataView(arrayBuffer);
|
|
@@ -8293,17 +9076,45 @@ var __exports__ = (() => {
|
|
|
8293
9076
|
}
|
|
8294
9077
|
async function makeHashTableFromZipHeaders(fileProvider) {
|
|
8295
9078
|
const zipCDIterator = makeZipCDHeaderIterator(fileProvider);
|
|
9079
|
+
return getHashTable(zipCDIterator);
|
|
9080
|
+
}
|
|
9081
|
+
async function getHashTable(zipCDIterator) {
|
|
8296
9082
|
const md5Hash = new MD5Hash();
|
|
8297
9083
|
const textEncoder = new TextEncoder();
|
|
8298
9084
|
const hashTable = {};
|
|
8299
9085
|
for await (const cdHeader of zipCDIterator) {
|
|
8300
|
-
const
|
|
8301
|
-
const arrayBuffer = textEncoder.encode(
|
|
9086
|
+
const filename2 = cdHeader.fileName.split("\\").join("/").toLocaleLowerCase();
|
|
9087
|
+
const arrayBuffer = textEncoder.encode(filename2).buffer;
|
|
8302
9088
|
const md5 = await md5Hash.hash(arrayBuffer, "hex");
|
|
8303
9089
|
hashTable[md5] = cdHeader.localHeaderOffset;
|
|
8304
9090
|
}
|
|
8305
9091
|
return hashTable;
|
|
8306
9092
|
}
|
|
9093
|
+
async function composeHashFile(zipCDIterator) {
|
|
9094
|
+
const md5Hash = new MD5Hash();
|
|
9095
|
+
const textEncoder = new TextEncoder();
|
|
9096
|
+
const hashArray = [];
|
|
9097
|
+
for await (const cdHeader of zipCDIterator) {
|
|
9098
|
+
const filename2 = cdHeader.fileName.split("\\").join("/").toLocaleLowerCase();
|
|
9099
|
+
const arrayBuffer = textEncoder.encode(filename2).buffer;
|
|
9100
|
+
const md5 = await md5Hash.hash(arrayBuffer, "hex");
|
|
9101
|
+
hashArray.push(concatenateArrayBuffers(hexStringToBuffer(md5), bigintToBuffer(cdHeader.localHeaderOffset)));
|
|
9102
|
+
}
|
|
9103
|
+
const bufferArray = hashArray.sort(compareHashes);
|
|
9104
|
+
return concatenateArrayBuffersFromArray(bufferArray);
|
|
9105
|
+
}
|
|
9106
|
+
function compareHashes(arrA, arrB) {
|
|
9107
|
+
const a = new BigUint64Array(arrA);
|
|
9108
|
+
const b = new BigUint64Array(arrB);
|
|
9109
|
+
return Number(a[0] === b[0] ? a[1] - b[1] : a[0] - b[0]);
|
|
9110
|
+
}
|
|
9111
|
+
function hexStringToBuffer(str) {
|
|
9112
|
+
const byteArray = str.match(/../g)?.map((h) => parseInt(h, 16));
|
|
9113
|
+
return new Uint8Array(byteArray ?? new Array(16)).buffer;
|
|
9114
|
+
}
|
|
9115
|
+
function bigintToBuffer(n) {
|
|
9116
|
+
return new BigUint64Array([n]).buffer;
|
|
9117
|
+
}
|
|
8307
9118
|
|
|
8308
9119
|
// ../compression/src/lib/compression.ts
|
|
8309
9120
|
var Compression = class {
|
|
@@ -8493,18 +9304,18 @@ var __exports__ = (() => {
|
|
|
8493
9304
|
}
|
|
8494
9305
|
return fileNames;
|
|
8495
9306
|
}
|
|
8496
|
-
async stat(
|
|
8497
|
-
const cdFileHeader = await this.getCDFileHeader(
|
|
9307
|
+
async stat(filename2) {
|
|
9308
|
+
const cdFileHeader = await this.getCDFileHeader(filename2);
|
|
8498
9309
|
return {
|
|
8499
9310
|
...cdFileHeader,
|
|
8500
9311
|
size: Number(cdFileHeader.uncompressedSize)
|
|
8501
9312
|
};
|
|
8502
9313
|
}
|
|
8503
|
-
async fetch(
|
|
9314
|
+
async fetch(filename2) {
|
|
8504
9315
|
if (!this.fileProvider) {
|
|
8505
9316
|
throw new Error("No data detected in the zip archive");
|
|
8506
9317
|
}
|
|
8507
|
-
const cdFileHeader = await this.getCDFileHeader(
|
|
9318
|
+
const cdFileHeader = await this.getCDFileHeader(filename2);
|
|
8508
9319
|
const localFileHeader = await parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, this.fileProvider);
|
|
8509
9320
|
if (!localFileHeader) {
|
|
8510
9321
|
throw new Error("Local file header has not been found in the zip archive`");
|
|
@@ -8517,18 +9328,18 @@ var __exports__ = (() => {
|
|
|
8517
9328
|
const uncompressedFile = await compressionHandler(compressedFile);
|
|
8518
9329
|
const response = new Response(uncompressedFile);
|
|
8519
9330
|
Object.defineProperty(response, "url", {
|
|
8520
|
-
value: `${this.fileName || ""}/${
|
|
9331
|
+
value: `${this.fileName || ""}/${filename2}`
|
|
8521
9332
|
});
|
|
8522
9333
|
return response;
|
|
8523
9334
|
}
|
|
8524
|
-
async getCDFileHeader(
|
|
9335
|
+
async getCDFileHeader(filename2) {
|
|
8525
9336
|
if (!this.fileProvider) {
|
|
8526
9337
|
throw new Error("No data detected in the zip archive");
|
|
8527
9338
|
}
|
|
8528
9339
|
const zipCDIterator = makeZipCDHeaderIterator(this.fileProvider);
|
|
8529
9340
|
let result = null;
|
|
8530
9341
|
for await (const cdHeader of zipCDIterator) {
|
|
8531
|
-
if (cdHeader.fileName ===
|
|
9342
|
+
if (cdHeader.fileName === filename2) {
|
|
8532
9343
|
result = cdHeader;
|
|
8533
9344
|
break;
|
|
8534
9345
|
}
|