@loaders.gl/zip 4.1.0-alpha.2 → 4.1.0-alpha.4

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 (66) hide show
  1. package/dist/dist.dev.js +155 -51
  2. package/dist/filesystems/zip-filesystem.d.ts.map +1 -1
  3. package/dist/filesystems/zip-filesystem.js.map +1 -1
  4. package/dist/hash-file-utility.d.ts.map +1 -1
  5. package/dist/hash-file-utility.js.map +1 -1
  6. package/dist/index.cjs +171 -49
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/lib/tar/header.d.ts.map +1 -1
  12. package/dist/lib/tar/header.js.map +1 -1
  13. package/dist/lib/tar/tar.d.ts.map +1 -1
  14. package/dist/lib/tar/tar.js.map +1 -1
  15. package/dist/lib/tar/types.d.ts.map +1 -1
  16. package/dist/lib/tar/types.js.map +1 -1
  17. package/dist/lib/tar/utils.d.ts.map +1 -1
  18. package/dist/lib/tar/utils.js.map +1 -1
  19. package/dist/parse-zip/cd-file-header.d.ts +1 -1
  20. package/dist/parse-zip/cd-file-header.d.ts.map +1 -1
  21. package/dist/parse-zip/cd-file-header.js +4 -4
  22. package/dist/parse-zip/cd-file-header.js.map +1 -1
  23. package/dist/parse-zip/end-of-central-directory.d.ts +19 -0
  24. package/dist/parse-zip/end-of-central-directory.d.ts.map +1 -1
  25. package/dist/parse-zip/end-of-central-directory.js +42 -8
  26. package/dist/parse-zip/end-of-central-directory.js.map +1 -1
  27. package/dist/parse-zip/local-file-header.d.ts +16 -0
  28. package/dist/parse-zip/local-file-header.d.ts.map +1 -1
  29. package/dist/parse-zip/local-file-header.js +73 -1
  30. package/dist/parse-zip/local-file-header.js.map +1 -1
  31. package/dist/parse-zip/search-from-the-end.d.ts.map +1 -1
  32. package/dist/parse-zip/search-from-the-end.js.map +1 -1
  33. package/dist/parse-zip/zip-compozition.d.ts +8 -0
  34. package/dist/parse-zip/zip-compozition.d.ts.map +1 -0
  35. package/dist/parse-zip/zip-compozition.js +43 -0
  36. package/dist/parse-zip/zip-compozition.js.map +1 -0
  37. package/dist/parse-zip/zip64-info-generation.d.ts +5 -8
  38. package/dist/parse-zip/zip64-info-generation.d.ts.map +1 -1
  39. package/dist/parse-zip/zip64-info-generation.js +6 -3
  40. package/dist/parse-zip/zip64-info-generation.js.map +1 -1
  41. package/dist/tar-builder.d.ts.map +1 -1
  42. package/dist/tar-builder.js.map +1 -1
  43. package/dist/zip-loader.d.ts.map +1 -1
  44. package/dist/zip-loader.js +1 -1
  45. package/dist/zip-loader.js.map +1 -1
  46. package/dist/zip-writer.d.ts +2 -2
  47. package/dist/zip-writer.d.ts.map +1 -1
  48. package/dist/zip-writer.js +22 -7
  49. package/dist/zip-writer.js.map +1 -1
  50. package/package.json +5 -5
  51. package/src/filesystems/zip-filesystem.ts +2 -1
  52. package/src/hash-file-utility.ts +2 -1
  53. package/src/index.ts +4 -2
  54. package/src/lib/tar/header.ts +2 -1
  55. package/src/lib/tar/tar.ts +2 -1
  56. package/src/lib/tar/types.ts +2 -1
  57. package/src/lib/tar/utils.ts +2 -1
  58. package/src/parse-zip/cd-file-header.ts +8 -6
  59. package/src/parse-zip/end-of-central-directory.ts +97 -9
  60. package/src/parse-zip/local-file-header.ts +128 -2
  61. package/src/parse-zip/search-from-the-end.ts +2 -1
  62. package/src/parse-zip/zip-compozition.ts +113 -0
  63. package/src/parse-zip/zip64-info-generation.ts +20 -4
  64. package/src/tar-builder.ts +2 -1
  65. package/src/zip-loader.ts +2 -1
  66. package/src/zip-writer.ts +24 -10
package/dist/index.cjs CHANGED
@@ -36,6 +36,7 @@ __export(src_exports, {
36
36
  ZipLoader: () => ZipLoader,
37
37
  ZipWriter: () => ZipWriter,
38
38
  generateCDHeader: () => generateCDHeader,
39
+ generateLocalHeader: () => generateLocalHeader,
39
40
  localHeaderSignature: () => signature3,
40
41
  makeHashTableFromZipHeaders: () => makeHashTableFromZipHeaders,
41
42
  makeZipCDHeaderIterator: () => makeZipCDHeaderIterator,
@@ -94,27 +95,41 @@ async function loadZipEntry(jsZip, subFilename, options = {}) {
94
95
 
95
96
  // src/zip-writer.ts
96
97
  var import_jszip2 = __toESM(require("jszip"), 1);
98
+ var VERSION2 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
97
99
  var ZipWriter = {
98
100
  name: "Zip Archive",
101
+ id: "zip",
102
+ module: "zip",
103
+ version: VERSION2,
99
104
  extensions: ["zip"],
100
105
  category: "archive",
101
106
  mimeTypes: ["application/zip"],
102
- // @ts-ignore
107
+ options: {
108
+ zip: {
109
+ onUpdate: () => {
110
+ }
111
+ },
112
+ jszip: {}
113
+ },
103
114
  encode: encodeZipAsync
104
115
  };
105
116
  async function encodeZipAsync(fileMap, options = {}) {
117
+ var _a;
106
118
  const jsZip = new import_jszip2.default();
107
119
  for (const subFileName in fileMap) {
108
120
  const subFileData = fileMap[subFileName];
109
121
  jsZip.file(subFileName, subFileData, (options == null ? void 0 : options.jszip) || {});
110
122
  }
111
- const jszipOptions = { ...options == null ? void 0 : options.jszip, type: "arraybuffer" };
112
- const { onUpdate = () => {
113
- } } = options;
123
+ const zipOptions = { ...ZipWriter.options.zip, ...options == null ? void 0 : options.zip };
124
+ const jszipOptions = { ...(_a = ZipWriter.options) == null ? void 0 : _a.jszip, ...options.jszip };
114
125
  try {
115
- return await jsZip.generateAsync(jszipOptions, onUpdate);
126
+ return await jsZip.generateAsync(
127
+ { ...jszipOptions, type: "arraybuffer" },
128
+ // generate an arraybuffer
129
+ zipOptions.onUpdate
130
+ );
116
131
  } catch (error) {
117
- options.log.error(`Unable to write zip archive: ${error}`);
132
+ options.log.error(`Unable to encode zip archive: ${error}`);
118
133
  throw error;
119
134
  }
120
135
  }
@@ -338,7 +353,7 @@ var TarBuilder = class {
338
353
  var import_loader_utils3 = require("@loaders.gl/loader-utils");
339
354
 
340
355
  // src/parse-zip/end-of-central-directory.ts
341
- var import_loader_utils = require("@loaders.gl/loader-utils");
356
+ var import_loader_utils2 = require("@loaders.gl/loader-utils");
342
357
 
343
358
  // src/parse-zip/search-from-the-end.ts
344
359
  var searchFromTheEnd = async (file, target) => {
@@ -362,43 +377,8 @@ var searchFromTheEnd = async (file, target) => {
362
377
  return targetOffset;
363
378
  };
364
379
 
365
- // src/parse-zip/end-of-central-directory.ts
366
- var eoCDSignature = new Uint8Array([80, 75, 5, 6]);
367
- var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
368
- var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
369
- var CD_RECORDS_NUMBER_OFFSET = 8n;
370
- var CD_START_OFFSET_OFFSET = 16n;
371
- var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
372
- var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
373
- var ZIP64_CD_START_OFFSET_OFFSET = 48n;
374
- var parseEoCDRecord = async (file) => {
375
- const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
376
- let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
377
- let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
378
- if (cdStartOffset === BigInt(4294967295) || cdRecordsNumber === BigInt(4294967295)) {
379
- const zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
380
- const magicBytes = await file.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n);
381
- if (!(0, import_loader_utils.compareArrayBuffers)(magicBytes, zip64EoCDLocatorSignature)) {
382
- throw new Error("zip64 EoCD locator not found");
383
- }
384
- const zip64EoCDOffset = await file.getBigUint64(
385
- zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET
386
- );
387
- const endOfCDMagicBytes = await file.slice(zip64EoCDOffset, zip64EoCDOffset + 4n);
388
- if (!(0, import_loader_utils.compareArrayBuffers)(endOfCDMagicBytes, zip64EoCDSignature.buffer)) {
389
- throw new Error("zip64 EoCD not found");
390
- }
391
- cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
392
- cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
393
- }
394
- return {
395
- cdRecordsNumber,
396
- cdStartOffset
397
- };
398
- };
399
-
400
380
  // src/parse-zip/zip64-info-generation.ts
401
- var import_loader_utils2 = require("@loaders.gl/loader-utils");
381
+ var import_loader_utils = require("@loaders.gl/loader-utils");
402
382
  var signature = new Uint8Array([1, 0]);
403
383
  function createZip64Info(options) {
404
384
  const optionsToUse = {
@@ -414,14 +394,17 @@ function createZip64Info(options) {
414
394
  NUMBER_SETTERS[field.size](newValue, 0, optionsToUse[field.name ?? ""] ?? field.default);
415
395
  arraysToConcat.push(newValue.buffer);
416
396
  }
417
- return (0, import_loader_utils2.concatenateArrayBuffers)(...arraysToConcat);
397
+ return (0, import_loader_utils.concatenateArrayBuffers)(...arraysToConcat);
398
+ }
399
+ function setFieldToNumber(header, fieldSize, fieldOffset, value) {
400
+ NUMBER_SETTERS[fieldSize](header, Number(fieldOffset), value);
418
401
  }
419
402
  var NUMBER_SETTERS = {
420
403
  2: (header, offset, value) => {
421
- header.setUint16(offset, value, true);
404
+ header.setUint16(offset, Number(value), true);
422
405
  },
423
406
  4: (header, offset, value) => {
424
- header.setUint32(offset, value, true);
407
+ header.setUint32(offset, Number(value), true);
425
408
  },
426
409
  8: (header, offset, value) => {
427
410
  header.setBigUint64(offset, BigInt(value), true);
@@ -455,6 +438,46 @@ var ZIP64_FIELDS = [
455
438
  }
456
439
  ];
457
440
 
441
+ // src/parse-zip/end-of-central-directory.ts
442
+ var eoCDSignature = new Uint8Array([80, 75, 5, 6]);
443
+ var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
444
+ var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
445
+ var CD_RECORDS_NUMBER_OFFSET = 8n;
446
+ var CD_START_OFFSET_OFFSET = 16n;
447
+ var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
448
+ var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
449
+ var ZIP64_CD_START_OFFSET_OFFSET = 48n;
450
+ var parseEoCDRecord = async (file) => {
451
+ const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
452
+ let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
453
+ let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
454
+ let zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
455
+ let zip64EoCDOffset = 0n;
456
+ const magicBytes = await file.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n);
457
+ if ((0, import_loader_utils2.compareArrayBuffers)(magicBytes, zip64EoCDLocatorSignature)) {
458
+ zip64EoCDOffset = await file.getBigUint64(
459
+ zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET
460
+ );
461
+ const endOfCDMagicBytes = await file.slice(zip64EoCDOffset, zip64EoCDOffset + 4n);
462
+ if (!(0, import_loader_utils2.compareArrayBuffers)(endOfCDMagicBytes, zip64EoCDSignature.buffer)) {
463
+ throw new Error("zip64 EoCD not found");
464
+ }
465
+ cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
466
+ cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
467
+ } else {
468
+ zip64EoCDLocatorOffset = 0n;
469
+ }
470
+ return {
471
+ cdRecordsNumber,
472
+ cdStartOffset,
473
+ offsets: {
474
+ zip64EoCDOffset,
475
+ zip64EoCDLocatorOffset,
476
+ zipEoCDOffset
477
+ }
478
+ };
479
+ };
480
+
458
481
  // src/parse-zip/cd-file-header.ts
459
482
  var CD_COMPRESSED_SIZE_OFFSET = 20n;
460
483
  var CD_UNCOMPRESSED_SIZE_OFFSET = 24n;
@@ -558,7 +581,7 @@ function generateCDHeader(options) {
558
581
  const optionsToZip64 = {};
559
582
  if (optionsToUse.offset >= 4294967295) {
560
583
  optionsToZip64.offset = optionsToUse.offset;
561
- optionsToUse.offset = 4294967295;
584
+ optionsToUse.offset = BigInt(4294967295);
562
585
  }
563
586
  if (optionsToUse.length >= 4294967295) {
564
587
  optionsToZip64.size = optionsToUse.length;
@@ -568,10 +591,11 @@ function generateCDHeader(options) {
568
591
  zip64header = createZip64Info(optionsToZip64);
569
592
  optionsToUse.extraLength = zip64header.byteLength;
570
593
  }
571
- const header = new DataView(new ArrayBuffer(46));
594
+ const header = new DataView(new ArrayBuffer(Number(CD_FILE_NAME_OFFSET)));
572
595
  for (const field of ZIP_HEADER_FIELDS) {
573
- NUMBER_SETTERS[field.size](
596
+ setFieldToNumber(
574
597
  header,
598
+ field.size,
575
599
  field.offset,
576
600
  optionsToUse[field.name ?? ""] ?? field.default ?? 0
577
601
  );
@@ -734,6 +758,104 @@ var parseZipLocalFileHeader = async (headerOffset, buffer) => {
734
758
  compressionMethod
735
759
  };
736
760
  };
761
+ function generateLocalHeader(options) {
762
+ const optionsToUse = {
763
+ ...options,
764
+ extraLength: 0,
765
+ fnlength: options.fileName.length
766
+ };
767
+ let zip64header = new ArrayBuffer(0);
768
+ const optionsToZip64 = {};
769
+ if (optionsToUse.length >= 4294967295) {
770
+ optionsToZip64.size = optionsToUse.length;
771
+ optionsToUse.length = 4294967295;
772
+ }
773
+ if (Object.keys(optionsToZip64).length) {
774
+ zip64header = createZip64Info(optionsToZip64);
775
+ optionsToUse.extraLength = zip64header.byteLength;
776
+ }
777
+ const header = new DataView(new ArrayBuffer(Number(FILE_NAME_OFFSET)));
778
+ for (const field of ZIP_HEADER_FIELDS2) {
779
+ setFieldToNumber(
780
+ header,
781
+ field.size,
782
+ field.offset,
783
+ optionsToUse[field.name ?? ""] ?? field.default ?? 0
784
+ );
785
+ }
786
+ const encodedName = new TextEncoder().encode(optionsToUse.fileName);
787
+ const resHeader = (0, import_loader_utils4.concatenateArrayBuffers)(header.buffer, encodedName, zip64header);
788
+ return resHeader;
789
+ }
790
+ var ZIP_HEADER_FIELDS2 = [
791
+ // Local file header signature = 0x04034b50
792
+ {
793
+ offset: 0,
794
+ size: 4,
795
+ default: new DataView(signature3.buffer).getUint32(0, true)
796
+ },
797
+ // Version needed to extract (minimum)
798
+ {
799
+ offset: 4,
800
+ size: 2,
801
+ default: 45
802
+ },
803
+ // General purpose bit flag
804
+ {
805
+ offset: 6,
806
+ size: 2,
807
+ default: 0
808
+ },
809
+ // Compression method
810
+ {
811
+ offset: 8,
812
+ size: 2,
813
+ default: 0
814
+ },
815
+ // File last modification time
816
+ {
817
+ offset: 10,
818
+ size: 2,
819
+ default: 0
820
+ },
821
+ // File last modification date
822
+ {
823
+ offset: 12,
824
+ size: 2,
825
+ default: 0
826
+ },
827
+ // CRC-32 of uncompressed data
828
+ {
829
+ offset: 14,
830
+ size: 4,
831
+ name: "crc32"
832
+ },
833
+ // Compressed size (or 0xffffffff for ZIP64)
834
+ {
835
+ offset: 18,
836
+ size: 4,
837
+ name: "length"
838
+ },
839
+ // Uncompressed size (or 0xffffffff for ZIP64)
840
+ {
841
+ offset: 22,
842
+ size: 4,
843
+ name: "length"
844
+ },
845
+ // File name length (n)
846
+ {
847
+ offset: 26,
848
+ size: 2,
849
+ name: "fnlength"
850
+ },
851
+ // Extra field length (m)
852
+ {
853
+ offset: 28,
854
+ size: 2,
855
+ default: 0,
856
+ name: "extraLength"
857
+ }
858
+ ];
737
859
 
738
860
  // src/hash-file-utility.ts
739
861
  var import_crypto = require("@loaders.gl/crypto");
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { ZipLoader } from './zip-loader';
2
2
  export { ZipWriter } from './zip-writer';
3
3
  export { TarBuilder } from './tar-builder';
4
4
  export { parseZipCDFileHeader, makeZipCDHeaderIterator, signature as CD_HEADER_SIGNATURE, generateCDHeader } from './parse-zip/cd-file-header';
5
- export { parseZipLocalFileHeader, signature as localHeaderSignature } from './parse-zip/local-file-header';
5
+ export { parseZipLocalFileHeader, signature as localHeaderSignature, generateLocalHeader } from './parse-zip/local-file-header';
6
6
  export { parseEoCDRecord } from './parse-zip/end-of-central-directory';
7
7
  export { searchFromTheEnd } from './parse-zip/search-from-the-end';
8
8
  export { parseHashTable, makeHashTableFromZipHeaders } from './hash-file-utility';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,IAAI,mBAAmB,EAChC,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,SAAS,IAAI,oBAAoB,EAClC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,eAAe,EAAC,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AAGjE,OAAO,EAAC,cAAc,EAAE,2BAA2B,EAAC,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,IAAI,mBAAmB,EAChC,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,SAAS,IAAI,oBAAoB,EACjC,mBAAmB,EACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,eAAe,EAAC,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AAGjE,OAAO,EAAC,cAAc,EAAE,2BAA2B,EAAC,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC"}
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ export { ZipLoader } from "./zip-loader.js";
2
2
  export { ZipWriter } from "./zip-writer.js";
3
3
  export { TarBuilder } from "./tar-builder.js";
4
4
  export { parseZipCDFileHeader, makeZipCDHeaderIterator, signature as CD_HEADER_SIGNATURE, generateCDHeader } from "./parse-zip/cd-file-header.js";
5
- export { parseZipLocalFileHeader, signature as localHeaderSignature } from "./parse-zip/local-file-header.js";
5
+ export { parseZipLocalFileHeader, signature as localHeaderSignature, generateLocalHeader } from "./parse-zip/local-file-header.js";
6
6
  export { parseEoCDRecord } from "./parse-zip/end-of-central-directory.js";
7
7
  export { searchFromTheEnd } from "./parse-zip/search-from-the-end.js";
8
8
  export { parseHashTable, makeHashTableFromZipHeaders } from "./hash-file-utility.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ZipLoader","ZipWriter","TarBuilder","parseZipCDFileHeader","makeZipCDHeaderIterator","signature","CD_HEADER_SIGNATURE","generateCDHeader","parseZipLocalFileHeader","localHeaderSignature","parseEoCDRecord","searchFromTheEnd","parseHashTable","makeHashTableFromZipHeaders","ZipFileSystem"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nexport {ZipLoader} from './zip-loader';\nexport {ZipWriter} from './zip-writer';\nexport {TarBuilder} from './tar-builder';\n\nexport {\n parseZipCDFileHeader,\n makeZipCDHeaderIterator,\n signature as CD_HEADER_SIGNATURE,\n generateCDHeader\n} from './parse-zip/cd-file-header';\nexport {\n parseZipLocalFileHeader,\n signature as localHeaderSignature\n} from './parse-zip/local-file-header';\nexport {parseEoCDRecord} from './parse-zip/end-of-central-directory';\nexport {searchFromTheEnd} from './parse-zip/search-from-the-end';\n\n// export type {HashElement} from './hash-file-utility';\nexport {parseHashTable, makeHashTableFromZipHeaders} from './hash-file-utility';\n\nexport {ZipFileSystem} from './filesystems/zip-filesystem';\n"],"mappings":"SAGQA,SAAS;AAAA,SACTC,SAAS;AAAA,SACTC,UAAU;AAAA,SAGhBC,oBAAoB,EACpBC,uBAAuB,EACvBC,SAAS,IAAIC,mBAAmB,EAChCC,gBAAgB;AAAA,SAGhBC,uBAAuB,EACvBH,SAAS,IAAII,oBAAoB;AAAA,SAE3BC,eAAe;AAAA,SACfC,gBAAgB;AAAA,SAGhBC,cAAc,EAAEC,2BAA2B;AAAA,SAE3CC,aAAa"}
1
+ {"version":3,"file":"index.js","names":["ZipLoader","ZipWriter","TarBuilder","parseZipCDFileHeader","makeZipCDHeaderIterator","signature","CD_HEADER_SIGNATURE","generateCDHeader","parseZipLocalFileHeader","localHeaderSignature","generateLocalHeader","parseEoCDRecord","searchFromTheEnd","parseHashTable","makeHashTableFromZipHeaders","ZipFileSystem"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {ZipLoader} from './zip-loader';\nexport {ZipWriter} from './zip-writer';\nexport {TarBuilder} from './tar-builder';\n\nexport {\n parseZipCDFileHeader,\n makeZipCDHeaderIterator,\n signature as CD_HEADER_SIGNATURE,\n generateCDHeader\n} from './parse-zip/cd-file-header';\nexport {\n parseZipLocalFileHeader,\n signature as localHeaderSignature,\n generateLocalHeader\n} from './parse-zip/local-file-header';\nexport {parseEoCDRecord} from './parse-zip/end-of-central-directory';\nexport {searchFromTheEnd} from './parse-zip/search-from-the-end';\n\n// export type {HashElement} from './hash-file-utility';\nexport {parseHashTable, makeHashTableFromZipHeaders} from './hash-file-utility';\n\nexport {ZipFileSystem} from './filesystems/zip-filesystem';\n"],"mappings":"SAIQA,SAAS;AAAA,SACTC,SAAS;AAAA,SACTC,UAAU;AAAA,SAGhBC,oBAAoB,EACpBC,uBAAuB,EACvBC,SAAS,IAAIC,mBAAmB,EAChCC,gBAAgB;AAAA,SAGhBC,uBAAuB,EACvBH,SAAS,IAAII,oBAAoB,EACjCC,mBAAmB;AAAA,SAEbC,eAAe;AAAA,SACfC,gBAAgB;AAAA,SAGhBC,cAAc,EAAEC,2BAA2B;AAAA,SAE3CC,aAAa"}
@@ -1 +1 @@
1
- {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/header.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAe,OAAO,EAAC,MAAM,SAAS,CAAC;AAyCnD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,UAAU,CAsB/E"}
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/header.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAe,OAAO,EAAC,MAAM,SAAS,CAAC;AAyCnD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,UAAU,CAsB/E"}
@@ -1 +1 @@
1
- {"version":3,"file":"header.js","names":["utils","structure","fileName","fileMode","uid","gid","fileSize","mtime","checksum","type","linkName","ustar","owner","group","majorNumber","minorNumber","filenamePrefix","padding","format","data","cb","buffer","clean","offset","Object","entries","forEach","_ref","field","length","str","i","fieldLength","charCodeAt"],"sources":["../../../src/lib/tar/header.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// This file is derived from the tar-js code base under MIT license\n// See https://github.com/beatgammit/tar-js/blob/master/LICENSE\n/*\n * tar-js\n * MIT (c) 2011 T. Jameson Little\n */\n/* eslint-disable */\nimport * as utils from './utils';\nimport type {TarStructure, TarData} from './types';\n/*\nstruct posix_header { // byte offset\n\tchar name[100]; // 0\n\tchar mode[8]; // 100\n\tchar uid[8]; // 108\n\tchar gid[8]; // 116\n\tchar size[12]; // 124\n\tchar mtime[12]; // 136\n\tchar chksum[8]; // 148\n\tchar typeflag; // 156\n\tchar linkname[100]; // 157\n\tchar magic[6]; // 257\n\tchar version[2]; // 263\n\tchar uname[32]; // 265\n\tchar gname[32]; // 297\n\tchar devmajor[8]; // 329\n\tchar devminor[8]; // 337\n\tchar prefix[155]; // 345\n // 500\n};\n*/\n\nconst structure: TarStructure = {\n fileName: 100,\n fileMode: 8,\n uid: 8,\n gid: 8,\n fileSize: 12,\n mtime: 12,\n checksum: 8,\n type: 1,\n linkName: 100,\n ustar: 8,\n owner: 32,\n group: 32,\n majorNumber: 8,\n minorNumber: 8,\n filenamePrefix: 155,\n padding: 12\n};\n/**\n * Getting the header\n * @param data\n * @param [cb]\n * @returns {Uint8Array} | Array\n */\nexport function format(data: TarData, cb?: any): [string, number][] | Uint8Array {\n const buffer = utils.clean(512);\n let offset = 0;\n\n Object.entries(structure).forEach(([field, length]) => {\n const str = data[field] || '';\n let i: number;\n let fieldLength: number;\n\n for (i = 0, fieldLength = str.length; i < fieldLength; i += 1) {\n buffer[offset] = str.charCodeAt(i);\n offset += 1;\n }\n\n // space it out with nulls\n offset += length - i;\n });\n\n if (typeof cb === 'function') {\n return cb(buffer, offset);\n }\n return buffer;\n}\n"],"mappings":"OAUO,KAAKA,KAAK;AAwBjB,MAAMC,SAAuB,GAAG;EAC9BC,QAAQ,EAAE,GAAG;EACbC,QAAQ,EAAE,CAAC;EACXC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE,EAAE;EACTC,QAAQ,EAAE,CAAC;EACXC,IAAI,EAAE,CAAC;EACPC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,CAAC;EACRC,KAAK,EAAE,EAAE;EACTC,KAAK,EAAE,EAAE;EACTC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,CAAC;EACdC,cAAc,EAAE,GAAG;EACnBC,OAAO,EAAE;AACX,CAAC;AAOD,OAAO,SAASC,MAAMA,CAACC,IAAa,EAAEC,EAAQ,EAAmC;EAC/E,MAAMC,MAAM,GAAGrB,KAAK,CAACsB,KAAK,CAAC,GAAG,CAAC;EAC/B,IAAIC,MAAM,GAAG,CAAC;EAEdC,MAAM,CAACC,OAAO,CAACxB,SAAS,CAAC,CAACyB,OAAO,CAACC,IAAA,IAAqB;IAAA,IAApB,CAACC,KAAK,EAAEC,MAAM,CAAC,GAAAF,IAAA;IAChD,MAAMG,GAAG,GAAGX,IAAI,CAACS,KAAK,CAAC,IAAI,EAAE;IAC7B,IAAIG,CAAS;IACb,IAAIC,WAAmB;IAEvB,KAAKD,CAAC,GAAG,CAAC,EAAEC,WAAW,GAAGF,GAAG,CAACD,MAAM,EAAEE,CAAC,GAAGC,WAAW,EAAED,CAAC,IAAI,CAAC,EAAE;MAC7DV,MAAM,CAACE,MAAM,CAAC,GAAGO,GAAG,CAACG,UAAU,CAACF,CAAC,CAAC;MAClCR,MAAM,IAAI,CAAC;IACb;IAGAA,MAAM,IAAIM,MAAM,GAAGE,CAAC;EACtB,CAAC,CAAC;EAEF,IAAI,OAAOX,EAAE,KAAK,UAAU,EAAE;IAC5B,OAAOA,EAAE,CAACC,MAAM,EAAEE,MAAM,CAAC;EAC3B;EACA,OAAOF,MAAM;AACf"}
1
+ {"version":3,"file":"header.js","names":["utils","structure","fileName","fileMode","uid","gid","fileSize","mtime","checksum","type","linkName","ustar","owner","group","majorNumber","minorNumber","filenamePrefix","padding","format","data","cb","buffer","clean","offset","Object","entries","forEach","_ref","field","length","str","i","fieldLength","charCodeAt"],"sources":["../../../src/lib/tar/header.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// This file is derived from the tar-js code base under MIT license\n// See https://github.com/beatgammit/tar-js/blob/master/LICENSE\n/*\n * tar-js\n * MIT (c) 2011 T. Jameson Little\n */\n/* eslint-disable */\nimport * as utils from './utils';\nimport type {TarStructure, TarData} from './types';\n/*\nstruct posix_header { // byte offset\n\tchar name[100]; // 0\n\tchar mode[8]; // 100\n\tchar uid[8]; // 108\n\tchar gid[8]; // 116\n\tchar size[12]; // 124\n\tchar mtime[12]; // 136\n\tchar chksum[8]; // 148\n\tchar typeflag; // 156\n\tchar linkname[100]; // 157\n\tchar magic[6]; // 257\n\tchar version[2]; // 263\n\tchar uname[32]; // 265\n\tchar gname[32]; // 297\n\tchar devmajor[8]; // 329\n\tchar devminor[8]; // 337\n\tchar prefix[155]; // 345\n // 500\n};\n*/\n\nconst structure: TarStructure = {\n fileName: 100,\n fileMode: 8,\n uid: 8,\n gid: 8,\n fileSize: 12,\n mtime: 12,\n checksum: 8,\n type: 1,\n linkName: 100,\n ustar: 8,\n owner: 32,\n group: 32,\n majorNumber: 8,\n minorNumber: 8,\n filenamePrefix: 155,\n padding: 12\n};\n/**\n * Getting the header\n * @param data\n * @param [cb]\n * @returns {Uint8Array} | Array\n */\nexport function format(data: TarData, cb?: any): [string, number][] | Uint8Array {\n const buffer = utils.clean(512);\n let offset = 0;\n\n Object.entries(structure).forEach(([field, length]) => {\n const str = data[field] || '';\n let i: number;\n let fieldLength: number;\n\n for (i = 0, fieldLength = str.length; i < fieldLength; i += 1) {\n buffer[offset] = str.charCodeAt(i);\n offset += 1;\n }\n\n // space it out with nulls\n offset += length - i;\n });\n\n if (typeof cb === 'function') {\n return cb(buffer, offset);\n }\n return buffer;\n}\n"],"mappings":"OAWO,KAAKA,KAAK;AAwBjB,MAAMC,SAAuB,GAAG;EAC9BC,QAAQ,EAAE,GAAG;EACbC,QAAQ,EAAE,CAAC;EACXC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE,EAAE;EACTC,QAAQ,EAAE,CAAC;EACXC,IAAI,EAAE,CAAC;EACPC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,CAAC;EACRC,KAAK,EAAE,EAAE;EACTC,KAAK,EAAE,EAAE;EACTC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,CAAC;EACdC,cAAc,EAAE,GAAG;EACnBC,OAAO,EAAE;AACX,CAAC;AAOD,OAAO,SAASC,MAAMA,CAACC,IAAa,EAAEC,EAAQ,EAAmC;EAC/E,MAAMC,MAAM,GAAGrB,KAAK,CAACsB,KAAK,CAAC,GAAG,CAAC;EAC/B,IAAIC,MAAM,GAAG,CAAC;EAEdC,MAAM,CAACC,OAAO,CAACxB,SAAS,CAAC,CAACyB,OAAO,CAACC,IAAA,IAAqB;IAAA,IAApB,CAACC,KAAK,EAAEC,MAAM,CAAC,GAAAF,IAAA;IAChD,MAAMG,GAAG,GAAGX,IAAI,CAACS,KAAK,CAAC,IAAI,EAAE;IAC7B,IAAIG,CAAS;IACb,IAAIC,WAAmB;IAEvB,KAAKD,CAAC,GAAG,CAAC,EAAEC,WAAW,GAAGF,GAAG,CAACD,MAAM,EAAEE,CAAC,GAAGC,WAAW,EAAED,CAAC,IAAI,CAAC,EAAE;MAC7DV,MAAM,CAACE,MAAM,CAAC,GAAGO,GAAG,CAACG,UAAU,CAACF,CAAC,CAAC;MAClCR,MAAM,IAAI,CAAC;IACb;IAGAA,MAAM,IAAIM,MAAM,GAAGE,CAAC;EACtB,CAAC,CAAC;EAEF,IAAI,OAAOX,EAAE,KAAK,UAAU,EAAE;IAC5B,OAAOA,EAAE,CAACC,MAAM,EAAEE,MAAM,CAAC;EAC3B;EACA,OAAOF,MAAM;AACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"tar.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/tar.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,SAAS,EAAE,UAAU,EAAsB,MAAM,SAAS,CAAC;AAQxE,cAAM,GAAG;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,SAAS,CAAM;IACvB,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;gBACS,eAAe,EAAE,MAAM,GAAG,SAAS;IAY/C;;;;;OAKG;IAEH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS;IA+DlF;;;OAGG;IACH,IAAI,IAAI,IAAI;IAkCZ;;OAEG;IACH,KAAK;CAIN;AAED,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"tar.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/tar.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAC,SAAS,EAAE,UAAU,EAAsB,MAAM,SAAS,CAAC;AAQxE,cAAM,GAAG;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,SAAS,CAAM;IACvB,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;gBACS,eAAe,EAAE,MAAM,GAAG,SAAS;IAY/C;;;;;OAKG;IAEH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS;IA+DlF;;;OAGG;IACH,IAAI,IAAI,IAAI;IAkCZ;;OAEG;IACH,KAAK;CAIN;AAED,eAAe,GAAG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tar.js","names":["clean","pad","stringToUint8","format","blockSize","headerLength","inputLength","recordSize","Tar","constructor","recordsPerBlock","written","out","blocks","length","save","bind","clear","append","filepath","input","opts","checksum","Uint8Array","prototype","errorInputMatch","exec","toString","errorInput","errorMessage","mode","parseInt","mtime","Math","floor","Number","Date","uid","gid","data","fileName","fileMode","fileSize","type","ustar","owner","group","Object","keys","forEach","key","i","value","charCodeAt","headerArr","ceil","push","header","buffers","chunks","Array","max","pow","chunk","b","arguments","undefined","c","buffer","set","Blob"],"sources":["../../../src/lib/tar/tar.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// This file is derived from the tar-js code base under MIT license\n// See https://github.com/beatgammit/tar-js/blob/master/LICENSE\n/*\n * tar-js\n * MIT (c) 2011 T. Jameson Little\n */\n\nimport {clean, pad, stringToUint8} from './utils';\nimport {format} from './header';\nimport type {TarBlocks, TarOptions, TarChunks, TarChunk} from './types';\n\nlet blockSize: number;\nlet headerLength: number;\nlet inputLength: number;\n\nconst recordSize = 512;\n\nclass Tar {\n written: number;\n out: Uint8Array;\n blocks: TarBlocks = [];\n length: number;\n\n /**\n * @param [recordsPerBlock]\n */\n constructor(recordsPerBlock: number | undefined) {\n this.written = 0;\n blockSize = (recordsPerBlock || 20) * recordSize;\n this.out = clean(blockSize);\n\n this.blocks = [];\n this.length = 0;\n this.save = this.save.bind(this);\n this.clear = this.clear.bind(this);\n this.append = this.append.bind(this);\n }\n\n /**\n * Append a file to the tar archive\n * @param filepath\n * @param input\n * @param [opts]\n */\n // eslint-disable-next-line complexity\n append(filepath: string, input: string | Uint8Array, opts?: TarOptions | undefined) {\n let checksum: string | any;\n\n if (typeof input === 'string') {\n input = stringToUint8(input);\n } else if (input.constructor && input.constructor !== Uint8Array.prototype.constructor) {\n // @ts-ignore\n const errorInputMatch = /function\\s*([$A-Za-z_][0-9A-Za-z_]*)\\s*\\(/.exec(\n input.constructor.toString()\n );\n const errorInput = errorInputMatch && errorInputMatch[1];\n const errorMessage = `Invalid input type. You gave me: ${errorInput}`;\n throw errorMessage;\n }\n\n opts = opts || {};\n\n const mode = opts.mode || parseInt('777', 8) & 0xfff;\n const mtime = opts.mtime || Math.floor(Number(new Date()) / 1000);\n const uid = opts.uid || 0;\n const gid = opts.gid || 0;\n\n const data: Record<string, string> = {\n fileName: filepath,\n fileMode: pad(mode, 7),\n uid: pad(uid, 7),\n gid: pad(gid, 7),\n fileSize: pad(input.length, 11),\n mtime: pad(mtime, 11),\n checksum: ' ',\n // 0 = just a file\n type: '0',\n ustar: 'ustar ',\n owner: opts.owner || '',\n group: opts.group || ''\n };\n\n // calculate the checksum\n checksum = 0;\n Object.keys(data).forEach((key) => {\n let i: number;\n const value = data[key];\n let length: number;\n\n for (i = 0, length = value.length; i < length; i += 1) {\n checksum += value.charCodeAt(i);\n }\n });\n\n data.checksum = `${pad(checksum, 6)}\\u0000 `;\n\n const headerArr = format(data);\n\n headerLength = Math.ceil(headerArr.length / recordSize) * recordSize;\n inputLength = Math.ceil(input.length / recordSize) * recordSize;\n\n this.blocks.push({\n header: headerArr,\n input,\n headerLength,\n inputLength\n });\n }\n /**\n * Compiling data to a Blob object\n * @returns {Blob}\n */\n save(): Blob {\n const buffers: any = [];\n const chunks = new Array<TarChunks>();\n let length = 0;\n const max = Math.pow(2, 20);\n\n let chunk = new Array<TarChunk>();\n this.blocks.forEach((b: any = []) => {\n if (length + b.headerLength + b.inputLength > max) {\n chunks.push({blocks: chunk, length});\n chunk = [];\n length = 0;\n }\n chunk.push(b);\n length += b.headerLength + b.inputLength;\n });\n chunks.push({blocks: chunk, length});\n\n chunks.forEach((c: any = []) => {\n const buffer = new Uint8Array(c.length);\n let written = 0;\n c.blocks.forEach((b: any = []) => {\n buffer.set(b.header, written);\n written += b.headerLength;\n buffer.set(b.input, written);\n written += b.inputLength;\n });\n buffers.push(buffer);\n });\n\n buffers.push(new Uint8Array(2 * recordSize));\n\n return new Blob(buffers, {type: 'octet/stream'});\n }\n /**\n * Clear the data by its blocksize\n */\n clear() {\n this.written = 0;\n this.out = clean(blockSize);\n }\n}\n\nexport default Tar;\n"],"mappings":"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"}
1
+ {"version":3,"file":"tar.js","names":["clean","pad","stringToUint8","format","blockSize","headerLength","inputLength","recordSize","Tar","constructor","recordsPerBlock","written","out","blocks","length","save","bind","clear","append","filepath","input","opts","checksum","Uint8Array","prototype","errorInputMatch","exec","toString","errorInput","errorMessage","mode","parseInt","mtime","Math","floor","Number","Date","uid","gid","data","fileName","fileMode","fileSize","type","ustar","owner","group","Object","keys","forEach","key","i","value","charCodeAt","headerArr","ceil","push","header","buffers","chunks","Array","max","pow","chunk","b","arguments","undefined","c","buffer","set","Blob"],"sources":["../../../src/lib/tar/tar.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// This file is derived from the tar-js code base under MIT license\n// See https://github.com/beatgammit/tar-js/blob/master/LICENSE\n/*\n * tar-js\n * MIT (c) 2011 T. Jameson Little\n */\n\nimport {clean, pad, stringToUint8} from './utils';\nimport {format} from './header';\nimport type {TarBlocks, TarOptions, TarChunks, TarChunk} from './types';\n\nlet blockSize: number;\nlet headerLength: number;\nlet inputLength: number;\n\nconst recordSize = 512;\n\nclass Tar {\n written: number;\n out: Uint8Array;\n blocks: TarBlocks = [];\n length: number;\n\n /**\n * @param [recordsPerBlock]\n */\n constructor(recordsPerBlock: number | undefined) {\n this.written = 0;\n blockSize = (recordsPerBlock || 20) * recordSize;\n this.out = clean(blockSize);\n\n this.blocks = [];\n this.length = 0;\n this.save = this.save.bind(this);\n this.clear = this.clear.bind(this);\n this.append = this.append.bind(this);\n }\n\n /**\n * Append a file to the tar archive\n * @param filepath\n * @param input\n * @param [opts]\n */\n // eslint-disable-next-line complexity\n append(filepath: string, input: string | Uint8Array, opts?: TarOptions | undefined) {\n let checksum: string | any;\n\n if (typeof input === 'string') {\n input = stringToUint8(input);\n } else if (input.constructor && input.constructor !== Uint8Array.prototype.constructor) {\n // @ts-ignore\n const errorInputMatch = /function\\s*([$A-Za-z_][0-9A-Za-z_]*)\\s*\\(/.exec(\n input.constructor.toString()\n );\n const errorInput = errorInputMatch && errorInputMatch[1];\n const errorMessage = `Invalid input type. You gave me: ${errorInput}`;\n throw errorMessage;\n }\n\n opts = opts || {};\n\n const mode = opts.mode || parseInt('777', 8) & 0xfff;\n const mtime = opts.mtime || Math.floor(Number(new Date()) / 1000);\n const uid = opts.uid || 0;\n const gid = opts.gid || 0;\n\n const data: Record<string, string> = {\n fileName: filepath,\n fileMode: pad(mode, 7),\n uid: pad(uid, 7),\n gid: pad(gid, 7),\n fileSize: pad(input.length, 11),\n mtime: pad(mtime, 11),\n checksum: ' ',\n // 0 = just a file\n type: '0',\n ustar: 'ustar ',\n owner: opts.owner || '',\n group: opts.group || ''\n };\n\n // calculate the checksum\n checksum = 0;\n Object.keys(data).forEach((key) => {\n let i: number;\n const value = data[key];\n let length: number;\n\n for (i = 0, length = value.length; i < length; i += 1) {\n checksum += value.charCodeAt(i);\n }\n });\n\n data.checksum = `${pad(checksum, 6)}\\u0000 `;\n\n const headerArr = format(data);\n\n headerLength = Math.ceil(headerArr.length / recordSize) * recordSize;\n inputLength = Math.ceil(input.length / recordSize) * recordSize;\n\n this.blocks.push({\n header: headerArr,\n input,\n headerLength,\n inputLength\n });\n }\n /**\n * Compiling data to a Blob object\n * @returns {Blob}\n */\n save(): Blob {\n const buffers: any = [];\n const chunks = new Array<TarChunks>();\n let length = 0;\n const max = Math.pow(2, 20);\n\n let chunk = new Array<TarChunk>();\n this.blocks.forEach((b: any = []) => {\n if (length + b.headerLength + b.inputLength > max) {\n chunks.push({blocks: chunk, length});\n chunk = [];\n length = 0;\n }\n chunk.push(b);\n length += b.headerLength + b.inputLength;\n });\n chunks.push({blocks: chunk, length});\n\n chunks.forEach((c: any = []) => {\n const buffer = new Uint8Array(c.length);\n let written = 0;\n c.blocks.forEach((b: any = []) => {\n buffer.set(b.header, written);\n written += b.headerLength;\n buffer.set(b.input, written);\n written += b.inputLength;\n });\n buffers.push(buffer);\n });\n\n buffers.push(new Uint8Array(2 * recordSize));\n\n return new Blob(buffers, {type: 'octet/stream'});\n }\n /**\n * Clear the data by its blocksize\n */\n clear() {\n this.written = 0;\n this.out = clean(blockSize);\n }\n}\n\nexport default Tar;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/types.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAC/B,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/types.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAC/B,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/lib/tar/types.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n/**\n * Structure of data\n */\nexport type TarStructure = {\n [index: string]: number;\n};\n/**\n * Image of input data\n */\nexport type TarData = {\n [index: string]: string | any;\n};\n/**\n * Describes inner content of the blocks in the Tar's constructor\n */\nexport type TarBlocks = {\n [index: string]: any;\n header?: Uint8Array;\n input?: string | Uint8Array;\n headerLength?: number;\n inputLength?: number;\n};\n/**\n * Describes additional options for Tar class\n */\nexport type TarOptions = {\n mode?: number;\n mtime?: number;\n uid?: number;\n gid?: number;\n owner?: any;\n group?: any;\n};\n/**\n * Array of numbers for TarChunks\n */\nexport type TarChunk = {\n [index: number]: any;\n};\n/**\n * Sections of binary data inside the Tar class\n */\nexport type TarChunks = {\n [index: number]: TarChunk;\n length?: number;\n blocks?: any;\n};\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/lib/tar/types.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/**\n * Structure of data\n */\nexport type TarStructure = {\n [index: string]: number;\n};\n/**\n * Image of input data\n */\nexport type TarData = {\n [index: string]: string | any;\n};\n/**\n * Describes inner content of the blocks in the Tar's constructor\n */\nexport type TarBlocks = {\n [index: string]: any;\n header?: Uint8Array;\n input?: string | Uint8Array;\n headerLength?: number;\n inputLength?: number;\n};\n/**\n * Describes additional options for Tar class\n */\nexport type TarOptions = {\n mode?: number;\n mtime?: number;\n uid?: number;\n gid?: number;\n owner?: any;\n group?: any;\n};\n/**\n * Array of numbers for TarChunks\n */\nexport type TarChunk = {\n [index: number]: any;\n};\n/**\n * Sections of binary data inside the Tar class\n */\nexport type TarChunks = {\n [index: number]: TarChunk;\n length?: number;\n blocks?: any;\n};\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/utils.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAOhD;AACD;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrE;AACD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAa1F"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/utils.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAOhD;AACD;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrE;AACD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAa1F"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["clean","length","i","buffer","Uint8Array","pad","num","bytes","base","numStr","toString","substr","stringToUint8","input","out","offset","charCodeAt"],"sources":["../../../src/lib/tar/utils.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// This file is derived from the tar-js code base under MIT license\n// See https://github.com/beatgammit/tar-js/blob/master/LICENSE\n/*\n * tar-js\n * MIT (c) 2011 T. Jameson Little\n */\n/**\n * Returns the memory area specified by length\n * @param length\n * @returns {Uint8Array}\n */\nexport function clean(length: number): Uint8Array {\n let i: number;\n const buffer = new Uint8Array(length);\n for (i = 0; i < length; i += 1) {\n buffer[i] = 0;\n }\n return buffer;\n}\n/**\n * Converting data to a string\n * @param num\n * @param bytes\n * @param base\n * @returns string\n */\nexport function pad(num: number, bytes: number, base?: number): string {\n const numStr = num.toString(base || 8);\n return '000000000000'.substr(numStr.length + 12 - bytes) + numStr;\n}\n/**\n * Converting input to binary data\n * @param input\n * @param out\n * @param offset\n * @returns {Uint8Array}\n */\nexport function stringToUint8(input: string, out?: Uint8Array, offset?: number): Uint8Array {\n let i: number;\n let length: number;\n\n out = out || clean(input.length);\n\n offset = offset || 0;\n for (i = 0, length = input.length; i < length; i += 1) {\n out[offset] = input.charCodeAt(i);\n offset += 1;\n }\n\n return out;\n}\n"],"mappings":"AAcA,OAAO,SAASA,KAAKA,CAACC,MAAc,EAAc;EAChD,IAAIC,CAAS;EACb,MAAMC,MAAM,GAAG,IAAIC,UAAU,CAACH,MAAM,CAAC;EACrC,KAAKC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;IAC9BC,MAAM,CAACD,CAAC,CAAC,GAAG,CAAC;EACf;EACA,OAAOC,MAAM;AACf;AAQA,OAAO,SAASE,GAAGA,CAACC,GAAW,EAAEC,KAAa,EAAEC,IAAa,EAAU;EACrE,MAAMC,MAAM,GAAGH,GAAG,CAACI,QAAQ,CAACF,IAAI,IAAI,CAAC,CAAC;EACtC,OAAO,cAAc,CAACG,MAAM,CAACF,MAAM,CAACR,MAAM,GAAG,EAAE,GAAGM,KAAK,CAAC,GAAGE,MAAM;AACnE;AAQA,OAAO,SAASG,aAAaA,CAACC,KAAa,EAAEC,GAAgB,EAAEC,MAAe,EAAc;EAC1F,IAAIb,CAAS;EACb,IAAID,MAAc;EAElBa,GAAG,GAAGA,GAAG,IAAId,KAAK,CAACa,KAAK,CAACZ,MAAM,CAAC;EAEhCc,MAAM,GAAGA,MAAM,IAAI,CAAC;EACpB,KAAKb,CAAC,GAAG,CAAC,EAAED,MAAM,GAAGY,KAAK,CAACZ,MAAM,EAAEC,CAAC,GAAGD,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;IACrDY,GAAG,CAACC,MAAM,CAAC,GAAGF,KAAK,CAACG,UAAU,CAACd,CAAC,CAAC;IACjCa,MAAM,IAAI,CAAC;EACb;EAEA,OAAOD,GAAG;AACZ"}
1
+ {"version":3,"file":"utils.js","names":["clean","length","i","buffer","Uint8Array","pad","num","bytes","base","numStr","toString","substr","stringToUint8","input","out","offset","charCodeAt"],"sources":["../../../src/lib/tar/utils.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// This file is derived from the tar-js code base under MIT license\n// See https://github.com/beatgammit/tar-js/blob/master/LICENSE\n/*\n * tar-js\n * MIT (c) 2011 T. Jameson Little\n */\n/**\n * Returns the memory area specified by length\n * @param length\n * @returns {Uint8Array}\n */\nexport function clean(length: number): Uint8Array {\n let i: number;\n const buffer = new Uint8Array(length);\n for (i = 0; i < length; i += 1) {\n buffer[i] = 0;\n }\n return buffer;\n}\n/**\n * Converting data to a string\n * @param num\n * @param bytes\n * @param base\n * @returns string\n */\nexport function pad(num: number, bytes: number, base?: number): string {\n const numStr = num.toString(base || 8);\n return '000000000000'.substr(numStr.length + 12 - bytes) + numStr;\n}\n/**\n * Converting input to binary data\n * @param input\n * @param out\n * @param offset\n * @returns {Uint8Array}\n */\nexport function stringToUint8(input: string, out?: Uint8Array, offset?: number): Uint8Array {\n let i: number;\n let length: number;\n\n out = out || clean(input.length);\n\n offset = offset || 0;\n for (i = 0, length = input.length; i < length; i += 1) {\n out[offset] = input.charCodeAt(i);\n offset += 1;\n }\n\n return out;\n}\n"],"mappings":"AAeA,OAAO,SAASA,KAAKA,CAACC,MAAc,EAAc;EAChD,IAAIC,CAAS;EACb,MAAMC,MAAM,GAAG,IAAIC,UAAU,CAACH,MAAM,CAAC;EACrC,KAAKC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;IAC9BC,MAAM,CAACD,CAAC,CAAC,GAAG,CAAC;EACf;EACA,OAAOC,MAAM;AACf;AAQA,OAAO,SAASE,GAAGA,CAACC,GAAW,EAAEC,KAAa,EAAEC,IAAa,EAAU;EACrE,MAAMC,MAAM,GAAGH,GAAG,CAACI,QAAQ,CAACF,IAAI,IAAI,CAAC,CAAC;EACtC,OAAO,cAAc,CAACG,MAAM,CAACF,MAAM,CAACR,MAAM,GAAG,EAAE,GAAGM,KAAK,CAAC,GAAGE,MAAM;AACnE;AAQA,OAAO,SAASG,aAAaA,CAACC,KAAa,EAAEC,GAAgB,EAAEC,MAAe,EAAc;EAC1F,IAAIb,CAAS;EACb,IAAID,MAAc;EAElBa,GAAG,GAAGA,GAAG,IAAId,KAAK,CAACa,KAAK,CAACZ,MAAM,CAAC;EAEhCc,MAAM,GAAGA,MAAM,IAAI,CAAC;EACpB,KAAKb,CAAC,GAAG,CAAC,EAAED,MAAM,GAAGY,KAAK,CAACZ,MAAM,EAAEC,CAAC,GAAGD,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;IACrDY,GAAG,CAACC,MAAM,CAAC,GAAGF,KAAK,CAACG,UAAU,CAACd,CAAC,CAAC;IACjCa,MAAM,IAAI,CAAC;EACb;EAEA,OAAOD,GAAG;AACZ"}
@@ -42,7 +42,7 @@ type GenerateCDOptions = {
42
42
  /** File size */
43
43
  length: number;
44
44
  /** Relative offset of local file header */
45
- offset: number;
45
+ offset: bigint;
46
46
  };
47
47
  /**
48
48
  * generates cd header for the file
@@ -1 +1 @@
1
- {"version":3,"file":"cd-file-header.d.ts","sourceRoot":"","sources":["../../src/parse-zip/cd-file-header.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAA+C,MAAM,0BAA0B,CAAC;AAEpG,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAGnD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAyBF,eAAO,MAAM,SAAS,EAAE,YAAuD,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,iBACjB,MAAM,QACd,YAAY,KACjB,QAAQ,eAAe,GAAG,IAAI,CA2ChC,CAAC;AAEF;;;GAGG;AACH,wBAAuB,uBAAuB,CAC5C,YAAY,EAAE,YAAY,GACzB,aAAa,CAAC,eAAe,CAAC,CAUhC;AAoED,6CAA6C;AAC7C,KAAK,iBAAiB,GAAG;IACvB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAsCxE"}
1
+ {"version":3,"file":"cd-file-header.d.ts","sourceRoot":"","sources":["../../src/parse-zip/cd-file-header.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAA+C,MAAM,0BAA0B,CAAC;AAEpG,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAGnD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAyBF,eAAO,MAAM,SAAS,EAAE,YAAuD,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,iBACjB,MAAM,QACd,YAAY,KACjB,QAAQ,eAAe,GAAG,IAAI,CA2ChC,CAAC;AAEF;;;GAGG;AACH,wBAAuB,uBAAuB,CAC5C,YAAY,EAAE,YAAY,GACzB,aAAa,CAAC,eAAe,CAAC,CAUhC;AAoED,6CAA6C;AAC7C,KAAK,iBAAiB,GAAG;IACvB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAuCxE"}
@@ -1,6 +1,6 @@
1
1
  import { compareArrayBuffers, concatenateArrayBuffers } from '@loaders.gl/loader-utils';
2
2
  import { parseEoCDRecord } from "./end-of-central-directory.js";
3
- import { createZip64Info, NUMBER_SETTERS } from "./zip64-info-generation.js";
3
+ import { createZip64Info, setFieldToNumber } from "./zip64-info-generation.js";
4
4
  const CD_COMPRESSED_SIZE_OFFSET = 20n;
5
5
  const CD_UNCOMPRESSED_SIZE_OFFSET = 24n;
6
6
  const CD_FILE_NAME_LENGTH_OFFSET = 28n;
@@ -107,7 +107,7 @@ export function generateCDHeader(options) {
107
107
  const optionsToZip64 = {};
108
108
  if (optionsToUse.offset >= 0xffffffff) {
109
109
  optionsToZip64.offset = optionsToUse.offset;
110
- optionsToUse.offset = 0xffffffff;
110
+ optionsToUse.offset = BigInt(0xffffffff);
111
111
  }
112
112
  if (optionsToUse.length >= 0xffffffff) {
113
113
  optionsToZip64.size = optionsToUse.length;
@@ -117,10 +117,10 @@ export function generateCDHeader(options) {
117
117
  zip64header = createZip64Info(optionsToZip64);
118
118
  optionsToUse.extraLength = zip64header.byteLength;
119
119
  }
120
- const header = new DataView(new ArrayBuffer(46));
120
+ const header = new DataView(new ArrayBuffer(Number(CD_FILE_NAME_OFFSET)));
121
121
  for (const field of ZIP_HEADER_FIELDS) {
122
122
  var _ref, _optionsToUse, _field$name;
123
- NUMBER_SETTERS[field.size](header, field.offset, (_ref = (_optionsToUse = optionsToUse[(_field$name = field.name) !== null && _field$name !== void 0 ? _field$name : '']) !== null && _optionsToUse !== void 0 ? _optionsToUse : field.default) !== null && _ref !== void 0 ? _ref : 0);
123
+ setFieldToNumber(header, field.size, field.offset, (_ref = (_optionsToUse = optionsToUse[(_field$name = field.name) !== null && _field$name !== void 0 ? _field$name : '']) !== null && _optionsToUse !== void 0 ? _optionsToUse : field.default) !== null && _ref !== void 0 ? _ref : 0);
124
124
  }
125
125
  const encodedName = new TextEncoder().encode(optionsToUse.fileName);
126
126
  const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);
@@ -1 +1 @@
1
- {"version":3,"file":"cd-file-header.js","names":["compareArrayBuffers","concatenateArrayBuffers","parseEoCDRecord","createZip64Info","NUMBER_SETTERS","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_START_DISK_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","signature","Uint8Array","parseZipCDFileHeader","headerOffset","file","magicBytes","slice","buffer","compressedSize","BigInt","getUint32","uncompressedSize","extraFieldLength","getUint16","startDisk","fileNameLength","filenameBytes","fileName","TextDecoder","decode","extraOffset","oldFormatOffset","localHeaderOffset","extraField","DataView","zip64data","res","findZip64DataInExtra","makeZipCDHeaderIterator","fileProvider","cdStartOffset","cdHeader","arguments","length","undefined","zip64dataList","findExpectedData","zip64DataRes","zip64chunkSize","reduce","sum","curr","offsetInExtraData","findIndex","_val","i","arr","bytesRead","note","offset","name","getBigUint64","push","generateCDHeader","options","optionsToUse","fnlength","extraLength","zip64header","ArrayBuffer","optionsToZip64","size","Object","keys","byteLength","header","field","ZIP_HEADER_FIELDS","_ref","_optionsToUse","_field$name","default","encodedName","TextEncoder","encode","resHeader"],"sources":["../../src/parse-zip/cd-file-header.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {FileProvider, compareArrayBuffers, concatenateArrayBuffers} from '@loaders.gl/loader-utils';\nimport {parseEoCDRecord} from './end-of-central-directory';\nimport {ZipSignature} from './search-from-the-end';\nimport {createZip64Info, NUMBER_SETTERS} from './zip64-info-generation';\n\n/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /** Compressed size */\n compressedSize: bigint;\n /** Uncompressed size */\n uncompressedSize: bigint;\n /** Extra field size */\n extraFieldLength: number;\n /** File name length */\n fileNameLength: number;\n /** File name */\n fileName: string;\n /** Extra field offset */\n extraOffset: bigint;\n /** Relative offset of local file header */\n localHeaderOffset: bigint;\n};\n\n/**\n * Data that might be in Zip64 notation inside extra data\n */\ntype Zip64Data = {\n /** Uncompressed size */\n uncompressedSize: bigint;\n /** Compressed size */\n compressedSize: bigint;\n /** Relative offset of local file header */\n localHeaderOffset: bigint;\n /** Start disk */\n startDisk: bigint;\n};\n\n// offsets accroding to https://en.wikipedia.org/wiki/ZIP_(file_format)\nconst CD_COMPRESSED_SIZE_OFFSET = 20n;\nconst CD_UNCOMPRESSED_SIZE_OFFSET = 24n;\nconst CD_FILE_NAME_LENGTH_OFFSET = 28n;\nconst CD_EXTRA_FIELD_LENGTH_OFFSET = 30n;\nconst CD_START_DISK_OFFSET = 32n;\nconst CD_LOCAL_HEADER_OFFSET_OFFSET = 42n;\nconst CD_FILE_NAME_OFFSET = 46n;\n\nexport const signature: ZipSignature = new Uint8Array([0x50, 0x4b, 0x01, 0x02]);\n\n/**\n * Parses central directory file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipCDFileHeader = async (\n headerOffset: bigint,\n file: FileProvider\n): Promise<ZipCDFileHeader | null> => {\n const magicBytes = await file.slice(headerOffset, headerOffset + 4n);\n if (!compareArrayBuffers(magicBytes, signature.buffer)) {\n return null;\n }\n\n const compressedSize = BigInt(await file.getUint32(headerOffset + CD_COMPRESSED_SIZE_OFFSET));\n const uncompressedSize = BigInt(await file.getUint32(headerOffset + CD_UNCOMPRESSED_SIZE_OFFSET));\n const extraFieldLength = await file.getUint16(headerOffset + CD_EXTRA_FIELD_LENGTH_OFFSET);\n const startDisk = BigInt(await file.getUint16(headerOffset + CD_START_DISK_OFFSET));\n const fileNameLength = await file.getUint16(headerOffset + CD_FILE_NAME_LENGTH_OFFSET);\n const filenameBytes = await file.slice(\n headerOffset + CD_FILE_NAME_OFFSET,\n headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength)\n );\n const fileName = new TextDecoder().decode(filenameBytes);\n\n const extraOffset = headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength);\n const oldFormatOffset = await file.getUint32(headerOffset + CD_LOCAL_HEADER_OFFSET_OFFSET);\n\n const localHeaderOffset = BigInt(oldFormatOffset);\n const extraField = new DataView(\n await file.slice(extraOffset, extraOffset + BigInt(extraFieldLength))\n );\n // looking for info that might be also be in zip64 extra field\n\n const zip64data: Zip64Data = {\n uncompressedSize,\n compressedSize,\n localHeaderOffset,\n startDisk\n };\n\n const res = findZip64DataInExtra(zip64data, extraField);\n\n return {\n ...zip64data,\n ...res,\n extraFieldLength,\n fileNameLength,\n fileName,\n extraOffset\n };\n};\n\n/**\n * Create iterator over files of zip archive\n * @param fileProvider - file provider that provider random access to the file\n */\nexport async function* makeZipCDHeaderIterator(\n fileProvider: FileProvider\n): AsyncIterable<ZipCDFileHeader> {\n const {cdStartOffset} = await parseEoCDRecord(fileProvider);\n let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);\n while (cdHeader) {\n yield cdHeader;\n cdHeader = await parseZipCDFileHeader(\n cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),\n fileProvider\n );\n }\n}\n/**\n * returns the number written in the provided bytes\n * @param bytes two bytes containing the number\n * @returns the number written in the provided bytes\n */\nconst getUint16 = (...bytes: [number, number]) => {\n return bytes[0] + bytes[1] * 16;\n};\n\n/**\n * reads all nesessary data from zip64 record in the extra data\n * @param zip64data values that might be in zip64 record\n * @param extraField full extra data\n * @returns data read from zip64\n */\n\nconst findZip64DataInExtra = (zip64data: Zip64Data, extraField: DataView): Partial<Zip64Data> => {\n const zip64dataList = findExpectedData(zip64data);\n\n const zip64DataRes: Partial<Zip64Data> = {};\n if (zip64dataList.length > 0) {\n // total length of data in zip64 notation in bytes\n const zip64chunkSize = zip64dataList.reduce((sum, curr) => sum + curr.length, 0);\n // we're looking for the zip64 nontation header (0x0001)\n // and a size field with a correct value next to it\n const offsetInExtraData = new Uint8Array(extraField.buffer).findIndex(\n (_val, i, arr) =>\n getUint16(arr[i], arr[i + 1]) === 0x0001 &&\n getUint16(arr[i + 2], arr[i + 3]) === zip64chunkSize\n );\n // then we read all the nesessary fields from the zip64 data\n let bytesRead = 0;\n for (const note of zip64dataList) {\n const offset = bytesRead;\n zip64DataRes[note.name] = extraField.getBigUint64(offsetInExtraData + 4 + offset, true);\n bytesRead = offset + note.length;\n }\n }\n\n return zip64DataRes;\n};\n\n/**\n * frind data that's expected to be in zip64\n * @param zip64data values that might be in zip64 record\n * @returns zip64 data description\n */\n\nconst findExpectedData = (zip64data: Zip64Data): {length: number; name: string}[] => {\n // We define fields that should be in zip64 data\n const zip64dataList: {length: number; name: string}[] = [];\n if (zip64data.uncompressedSize === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'uncompressedSize', length: 8});\n }\n if (zip64data.compressedSize === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'compressedSize', length: 8});\n }\n if (zip64data.localHeaderOffset === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'localHeaderOffset', length: 8});\n }\n if (zip64data.startDisk === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'startDisk', length: 4});\n }\n\n return zip64dataList;\n};\n\n/** info that can be placed into cd header */\ntype GenerateCDOptions = {\n /** CRC-32 of uncompressed data */\n crc32: number;\n /** File name */\n fileName: string;\n /** File size */\n length: number;\n /** Relative offset of local file header */\n offset: number;\n};\n\n/**\n * generates cd header for the file\n * @param options info that can be placed into cd header\n * @returns buffer with header\n */\nexport function generateCDHeader(options: GenerateCDOptions): ArrayBuffer {\n const optionsToUse = {\n ...options,\n fnlength: options.fileName.length,\n extraLength: 0\n };\n\n let zip64header: ArrayBuffer = new ArrayBuffer(0);\n\n const optionsToZip64: any = {};\n if (optionsToUse.offset >= 0xffffffff) {\n optionsToZip64.offset = optionsToUse.offset;\n optionsToUse.offset = 0xffffffff;\n }\n if (optionsToUse.length >= 0xffffffff) {\n optionsToZip64.size = optionsToUse.length;\n optionsToUse.length = 0xffffffff;\n }\n\n if (Object.keys(optionsToZip64).length) {\n zip64header = createZip64Info(optionsToZip64);\n optionsToUse.extraLength = zip64header.byteLength;\n }\n const header = new DataView(new ArrayBuffer(46));\n\n for (const field of ZIP_HEADER_FIELDS) {\n NUMBER_SETTERS[field.size](\n header,\n field.offset,\n optionsToUse[field.name ?? ''] ?? field.default ?? 0\n );\n }\n\n const encodedName = new TextEncoder().encode(optionsToUse.fileName);\n\n const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);\n\n return resHeader;\n}\n\n/** Fields map */\nconst ZIP_HEADER_FIELDS = [\n // Central directory file header signature = 0x02014b50\n {\n offset: 0,\n size: 4,\n default: new DataView(signature.buffer).getUint32(0, true)\n },\n\n // Version made by\n {\n offset: 4,\n size: 2,\n default: 45\n },\n\n // Version needed to extract (minimum)\n {\n offset: 6,\n size: 2,\n default: 45\n },\n\n // General purpose bit flag\n {\n offset: 8,\n size: 2,\n default: 0\n },\n\n // Compression method\n {\n offset: 10,\n size: 2,\n default: 0\n },\n\n // File last modification time\n {\n offset: 12,\n size: 2,\n default: 0\n },\n\n // File last modification date\n {\n offset: 14,\n size: 2,\n default: 0\n },\n\n // CRC-32 of uncompressed data\n {\n offset: 16,\n size: 4,\n name: 'crc32'\n },\n\n // Compressed size (or 0xffffffff for ZIP64)\n {\n offset: 20,\n size: 4,\n name: 'length'\n },\n\n // Uncompressed size (or 0xffffffff for ZIP64)\n {\n offset: 24,\n size: 4,\n name: 'length'\n },\n\n // File name length (n)\n {\n offset: 28,\n size: 2,\n name: 'fnlength'\n },\n\n // Extra field length (m)\n {\n offset: 30,\n size: 2,\n default: 0,\n name: 'extraLength'\n },\n\n // File comment length (k)\n {\n offset: 32,\n size: 2,\n default: 0\n },\n\n // Disk number where file starts (or 0xffff for ZIP64)\n {\n offset: 34,\n size: 2,\n default: 0\n },\n\n // Internal file attributes\n {\n offset: 36,\n size: 2,\n default: 0\n },\n\n // External file attributes\n {\n offset: 38,\n size: 4,\n default: 0\n },\n\n // Relative offset of local file header\n {\n offset: 42,\n size: 4,\n name: 'offset'\n }\n];\n"],"mappings":"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"}
1
+ {"version":3,"file":"cd-file-header.js","names":["compareArrayBuffers","concatenateArrayBuffers","parseEoCDRecord","createZip64Info","setFieldToNumber","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_START_DISK_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","signature","Uint8Array","parseZipCDFileHeader","headerOffset","file","magicBytes","slice","buffer","compressedSize","BigInt","getUint32","uncompressedSize","extraFieldLength","getUint16","startDisk","fileNameLength","filenameBytes","fileName","TextDecoder","decode","extraOffset","oldFormatOffset","localHeaderOffset","extraField","DataView","zip64data","res","findZip64DataInExtra","makeZipCDHeaderIterator","fileProvider","cdStartOffset","cdHeader","arguments","length","undefined","zip64dataList","findExpectedData","zip64DataRes","zip64chunkSize","reduce","sum","curr","offsetInExtraData","findIndex","_val","i","arr","bytesRead","note","offset","name","getBigUint64","push","generateCDHeader","options","optionsToUse","fnlength","extraLength","zip64header","ArrayBuffer","optionsToZip64","size","Object","keys","byteLength","header","Number","field","ZIP_HEADER_FIELDS","_ref","_optionsToUse","_field$name","default","encodedName","TextEncoder","encode","resHeader"],"sources":["../../src/parse-zip/cd-file-header.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {FileProvider, compareArrayBuffers, concatenateArrayBuffers} from '@loaders.gl/loader-utils';\nimport {parseEoCDRecord} from './end-of-central-directory';\nimport {ZipSignature} from './search-from-the-end';\nimport {createZip64Info, setFieldToNumber} from './zip64-info-generation';\n\n/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /** Compressed size */\n compressedSize: bigint;\n /** Uncompressed size */\n uncompressedSize: bigint;\n /** Extra field size */\n extraFieldLength: number;\n /** File name length */\n fileNameLength: number;\n /** File name */\n fileName: string;\n /** Extra field offset */\n extraOffset: bigint;\n /** Relative offset of local file header */\n localHeaderOffset: bigint;\n};\n\n/**\n * Data that might be in Zip64 notation inside extra data\n */\ntype Zip64Data = {\n /** Uncompressed size */\n uncompressedSize: bigint;\n /** Compressed size */\n compressedSize: bigint;\n /** Relative offset of local file header */\n localHeaderOffset: bigint;\n /** Start disk */\n startDisk: bigint;\n};\n\n// offsets accroding to https://en.wikipedia.org/wiki/ZIP_(file_format)\nconst CD_COMPRESSED_SIZE_OFFSET = 20n;\nconst CD_UNCOMPRESSED_SIZE_OFFSET = 24n;\nconst CD_FILE_NAME_LENGTH_OFFSET = 28n;\nconst CD_EXTRA_FIELD_LENGTH_OFFSET = 30n;\nconst CD_START_DISK_OFFSET = 32n;\nconst CD_LOCAL_HEADER_OFFSET_OFFSET = 42n;\nconst CD_FILE_NAME_OFFSET = 46n;\n\nexport const signature: ZipSignature = new Uint8Array([0x50, 0x4b, 0x01, 0x02]);\n\n/**\n * Parses central directory file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipCDFileHeader = async (\n headerOffset: bigint,\n file: FileProvider\n): Promise<ZipCDFileHeader | null> => {\n const magicBytes = await file.slice(headerOffset, headerOffset + 4n);\n if (!compareArrayBuffers(magicBytes, signature.buffer)) {\n return null;\n }\n\n const compressedSize = BigInt(await file.getUint32(headerOffset + CD_COMPRESSED_SIZE_OFFSET));\n const uncompressedSize = BigInt(await file.getUint32(headerOffset + CD_UNCOMPRESSED_SIZE_OFFSET));\n const extraFieldLength = await file.getUint16(headerOffset + CD_EXTRA_FIELD_LENGTH_OFFSET);\n const startDisk = BigInt(await file.getUint16(headerOffset + CD_START_DISK_OFFSET));\n const fileNameLength = await file.getUint16(headerOffset + CD_FILE_NAME_LENGTH_OFFSET);\n const filenameBytes = await file.slice(\n headerOffset + CD_FILE_NAME_OFFSET,\n headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength)\n );\n const fileName = new TextDecoder().decode(filenameBytes);\n\n const extraOffset = headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength);\n const oldFormatOffset = await file.getUint32(headerOffset + CD_LOCAL_HEADER_OFFSET_OFFSET);\n\n const localHeaderOffset = BigInt(oldFormatOffset);\n const extraField = new DataView(\n await file.slice(extraOffset, extraOffset + BigInt(extraFieldLength))\n );\n // looking for info that might be also be in zip64 extra field\n\n const zip64data: Zip64Data = {\n uncompressedSize,\n compressedSize,\n localHeaderOffset,\n startDisk\n };\n\n const res = findZip64DataInExtra(zip64data, extraField);\n\n return {\n ...zip64data,\n ...res,\n extraFieldLength,\n fileNameLength,\n fileName,\n extraOffset\n };\n};\n\n/**\n * Create iterator over files of zip archive\n * @param fileProvider - file provider that provider random access to the file\n */\nexport async function* makeZipCDHeaderIterator(\n fileProvider: FileProvider\n): AsyncIterable<ZipCDFileHeader> {\n const {cdStartOffset} = await parseEoCDRecord(fileProvider);\n let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);\n while (cdHeader) {\n yield cdHeader;\n cdHeader = await parseZipCDFileHeader(\n cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),\n fileProvider\n );\n }\n}\n/**\n * returns the number written in the provided bytes\n * @param bytes two bytes containing the number\n * @returns the number written in the provided bytes\n */\nconst getUint16 = (...bytes: [number, number]) => {\n return bytes[0] + bytes[1] * 16;\n};\n\n/**\n * reads all nesessary data from zip64 record in the extra data\n * @param zip64data values that might be in zip64 record\n * @param extraField full extra data\n * @returns data read from zip64\n */\n\nconst findZip64DataInExtra = (zip64data: Zip64Data, extraField: DataView): Partial<Zip64Data> => {\n const zip64dataList = findExpectedData(zip64data);\n\n const zip64DataRes: Partial<Zip64Data> = {};\n if (zip64dataList.length > 0) {\n // total length of data in zip64 notation in bytes\n const zip64chunkSize = zip64dataList.reduce((sum, curr) => sum + curr.length, 0);\n // we're looking for the zip64 nontation header (0x0001)\n // and a size field with a correct value next to it\n const offsetInExtraData = new Uint8Array(extraField.buffer).findIndex(\n (_val, i, arr) =>\n getUint16(arr[i], arr[i + 1]) === 0x0001 &&\n getUint16(arr[i + 2], arr[i + 3]) === zip64chunkSize\n );\n // then we read all the nesessary fields from the zip64 data\n let bytesRead = 0;\n for (const note of zip64dataList) {\n const offset = bytesRead;\n zip64DataRes[note.name] = extraField.getBigUint64(offsetInExtraData + 4 + offset, true);\n bytesRead = offset + note.length;\n }\n }\n\n return zip64DataRes;\n};\n\n/**\n * frind data that's expected to be in zip64\n * @param zip64data values that might be in zip64 record\n * @returns zip64 data description\n */\n\nconst findExpectedData = (zip64data: Zip64Data): {length: number; name: string}[] => {\n // We define fields that should be in zip64 data\n const zip64dataList: {length: number; name: string}[] = [];\n if (zip64data.uncompressedSize === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'uncompressedSize', length: 8});\n }\n if (zip64data.compressedSize === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'compressedSize', length: 8});\n }\n if (zip64data.localHeaderOffset === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'localHeaderOffset', length: 8});\n }\n if (zip64data.startDisk === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'startDisk', length: 4});\n }\n\n return zip64dataList;\n};\n\n/** info that can be placed into cd header */\ntype GenerateCDOptions = {\n /** CRC-32 of uncompressed data */\n crc32: number;\n /** File name */\n fileName: string;\n /** File size */\n length: number;\n /** Relative offset of local file header */\n offset: bigint;\n};\n\n/**\n * generates cd header for the file\n * @param options info that can be placed into cd header\n * @returns buffer with header\n */\nexport function generateCDHeader(options: GenerateCDOptions): ArrayBuffer {\n const optionsToUse = {\n ...options,\n fnlength: options.fileName.length,\n extraLength: 0\n };\n\n let zip64header: ArrayBuffer = new ArrayBuffer(0);\n\n const optionsToZip64: any = {};\n if (optionsToUse.offset >= 0xffffffff) {\n optionsToZip64.offset = optionsToUse.offset;\n optionsToUse.offset = BigInt(0xffffffff);\n }\n if (optionsToUse.length >= 0xffffffff) {\n optionsToZip64.size = optionsToUse.length;\n optionsToUse.length = 0xffffffff;\n }\n\n if (Object.keys(optionsToZip64).length) {\n zip64header = createZip64Info(optionsToZip64);\n optionsToUse.extraLength = zip64header.byteLength;\n }\n const header = new DataView(new ArrayBuffer(Number(CD_FILE_NAME_OFFSET)));\n\n for (const field of ZIP_HEADER_FIELDS) {\n setFieldToNumber(\n header,\n field.size,\n field.offset,\n optionsToUse[field.name ?? ''] ?? field.default ?? 0\n );\n }\n\n const encodedName = new TextEncoder().encode(optionsToUse.fileName);\n\n const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);\n\n return resHeader;\n}\n\n/** Fields map */\nconst ZIP_HEADER_FIELDS = [\n // Central directory file header signature = 0x02014b50\n {\n offset: 0,\n size: 4,\n default: new DataView(signature.buffer).getUint32(0, true)\n },\n\n // Version made by\n {\n offset: 4,\n size: 2,\n default: 45\n },\n\n // Version needed to extract (minimum)\n {\n offset: 6,\n size: 2,\n default: 45\n },\n\n // General purpose bit flag\n {\n offset: 8,\n size: 2,\n default: 0\n },\n\n // Compression method\n {\n offset: 10,\n size: 2,\n default: 0\n },\n\n // File last modification time\n {\n offset: 12,\n size: 2,\n default: 0\n },\n\n // File last modification date\n {\n offset: 14,\n size: 2,\n default: 0\n },\n\n // CRC-32 of uncompressed data\n {\n offset: 16,\n size: 4,\n name: 'crc32'\n },\n\n // Compressed size (or 0xffffffff for ZIP64)\n {\n offset: 20,\n size: 4,\n name: 'length'\n },\n\n // Uncompressed size (or 0xffffffff for ZIP64)\n {\n offset: 24,\n size: 4,\n name: 'length'\n },\n\n // File name length (n)\n {\n offset: 28,\n size: 2,\n name: 'fnlength'\n },\n\n // Extra field length (m)\n {\n offset: 30,\n size: 2,\n default: 0,\n name: 'extraLength'\n },\n\n // File comment length (k)\n {\n offset: 32,\n size: 2,\n default: 0\n },\n\n // Disk number where file starts (or 0xffff for ZIP64)\n {\n offset: 34,\n size: 2,\n default: 0\n },\n\n // Internal file attributes\n {\n offset: 36,\n size: 2,\n default: 0\n },\n\n // External file attributes\n {\n offset: 38,\n size: 4,\n default: 0\n },\n\n // Relative offset of local file header\n {\n offset: 42,\n size: 4,\n name: 'offset'\n }\n];\n"],"mappings":"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"}