@loaders.gl/i3s 4.0.0-alpha.15 → 4.0.0-alpha.17

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 (90) hide show
  1. package/dist/dist.min.js +282 -205
  2. package/dist/es5/arcgis-webscene-loader.js +1 -1
  3. package/dist/es5/i3s-attribute-loader.js +1 -1
  4. package/dist/es5/i3s-building-scene-layer-loader.js +1 -1
  5. package/dist/es5/i3s-content-loader.js +1 -1
  6. package/dist/es5/i3s-loader.js +1 -1
  7. package/dist/es5/i3s-node-page-loader.js +1 -1
  8. package/dist/es5/i3s-slpk-loader.js +1 -1
  9. package/dist/es5/index.js.map +1 -1
  10. package/dist/es5/lib/parsers/constants.js +14 -15
  11. package/dist/es5/lib/parsers/constants.js.map +1 -1
  12. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +93 -29
  13. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  14. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +51 -30
  15. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  16. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +61 -42
  17. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  18. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js +100 -0
  19. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
  20. package/dist/es5/lib/parsers/parse-zip/local-file-header.js +1 -1
  21. package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  22. package/dist/es5/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
  23. package/dist/es5/types.js +1 -14
  24. package/dist/es5/types.js.map +1 -1
  25. package/dist/esm/arcgis-webscene-loader.js +1 -1
  26. package/dist/esm/i3s-attribute-loader.js +1 -1
  27. package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
  28. package/dist/esm/i3s-content-loader.js +1 -1
  29. package/dist/esm/i3s-loader.js +1 -1
  30. package/dist/esm/i3s-node-page-loader.js +1 -1
  31. package/dist/esm/i3s-slpk-loader.js +1 -1
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/lib/parsers/constants.js +14 -15
  34. package/dist/esm/lib/parsers/constants.js.map +1 -1
  35. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +49 -16
  36. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  37. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +35 -18
  38. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  39. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js +14 -8
  40. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  41. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js +33 -0
  42. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
  43. package/dist/esm/lib/parsers/parse-zip/local-file-header.js +1 -1
  44. package/dist/esm/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  45. package/dist/esm/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
  46. package/dist/esm/types.js +0 -12
  47. package/dist/esm/types.js.map +1 -1
  48. package/dist/i3s-content-worker-node.js +47 -47
  49. package/dist/i3s-content-worker-node.js.map +2 -2
  50. package/dist/i3s-content-worker.js +26 -42
  51. package/dist/index.d.ts +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/lib/parsers/constants.d.ts.map +1 -1
  54. package/dist/lib/parsers/constants.js +14 -15
  55. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +2 -1
  56. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  57. package/dist/lib/parsers/parse-slpk/parse-slpk.js +61 -15
  58. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +21 -10
  59. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  60. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +53 -24
  61. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts +5 -1
  62. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts.map +1 -1
  63. package/dist/lib/parsers/parse-zip/cd-file-header.js +15 -9
  64. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts +18 -0
  65. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts.map +1 -0
  66. package/dist/lib/parsers/parse-zip/end-of-central-directory.js +41 -0
  67. package/dist/lib/parsers/parse-zip/local-file-header.d.ts +1 -1
  68. package/dist/lib/parsers/parse-zip/local-file-header.d.ts.map +1 -1
  69. package/dist/lib/parsers/parse-zip/local-file-header.js +1 -1
  70. package/dist/lib/parsers/parse-zip/search-from-the-end.d.ts.map +1 -0
  71. package/dist/types.d.ts +17 -24
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js +1 -13
  74. package/package.json +9 -9
  75. package/src/index.ts +0 -1
  76. package/src/lib/parsers/constants.ts +14 -15
  77. package/src/lib/parsers/parse-slpk/parse-slpk.ts +79 -25
  78. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +55 -37
  79. package/src/lib/parsers/parse-zip/cd-file-header.ts +27 -9
  80. package/src/lib/parsers/parse-zip/end-of-central-directory.ts +78 -0
  81. package/src/lib/parsers/parse-zip/local-file-header.ts +2 -2
  82. package/src/types.ts +25 -40
  83. package/dist/es5/lib/parsers/parse-slpk/search-from-the-end.js.map +0 -1
  84. package/dist/esm/lib/parsers/parse-slpk/search-from-the-end.js.map +0 -1
  85. package/dist/lib/parsers/parse-slpk/search-from-the-end.d.ts.map +0 -1
  86. /package/dist/es5/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
  87. /package/dist/esm/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
  88. /package/dist/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.d.ts +0 -0
  89. /package/dist/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
  90. /package/src/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.ts +0 -0
@@ -1,4 +1,5 @@
1
1
  import {FileProvider} from './file-provider';
2
+ import {ZipSignature} from './search-from-the-end';
2
3
 
3
4
  /**
4
5
  * zip central directory file header info
@@ -9,6 +10,8 @@ export type ZipCDFileHeader = {
9
10
  compressedSize: bigint;
10
11
  /** Uncompressed size */
11
12
  uncompressedSize: bigint;
13
+ /** Extra field size */
14
+ extraFieldLength: number;
12
15
  /** File name length */
13
16
  fileNameLength: number;
14
17
  /** File name */
@@ -19,6 +22,17 @@ export type ZipCDFileHeader = {
19
22
  localHeaderOffset: bigint;
20
23
  };
21
24
 
25
+ const offsets = {
26
+ CD_COMPRESSED_SIZE_OFFSET: 20n,
27
+ CD_UNCOMPRESSED_SIZE_OFFSET: 24n,
28
+ CD_FILE_NAME_LENGTH_OFFSET: 28n,
29
+ CD_EXTRA_FIELD_LENGTH_OFFSET: 30n,
30
+ CD_LOCAL_HEADER_OFFSET_OFFSET: 42n,
31
+ CD_FILE_NAME_OFFSET: 46n
32
+ };
33
+
34
+ export const signature: ZipSignature = [0x50, 0x4b, 0x01, 0x02];
35
+
22
36
  /**
23
37
  * Parses central directory file header of zip file
24
38
  * @param headerOffset - offset in the archive where header starts
@@ -28,15 +42,14 @@ export type ZipCDFileHeader = {
28
42
  export const parseZipCDFileHeader = async (
29
43
  headerOffset: bigint,
30
44
  buffer: FileProvider
31
- ): Promise<ZipCDFileHeader> => {
32
- const offsets = {
33
- CD_COMPRESSED_SIZE_OFFSET: 20n,
34
- CD_UNCOMPRESSED_SIZE_OFFSET: 24n,
35
- CD_FILE_NAME_LENGTH_OFFSET: 28n,
36
- CD_EXTRA_FIELD_LENGTH_OFFSET: 30n,
37
- CD_LOCAL_HEADER_OFFSET_OFFSET: 42n,
38
- CD_FILE_NAME_OFFSET: 46n
39
- };
45
+ ): Promise<ZipCDFileHeader | null> => {
46
+ if (
47
+ Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(
48
+ Buffer.from(signature)
49
+ ) !== 0
50
+ ) {
51
+ return null;
52
+ }
40
53
 
41
54
  let compressedSize = BigInt(
42
55
  await buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET)
@@ -46,6 +59,10 @@ export const parseZipCDFileHeader = async (
46
59
  await buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET)
47
60
  );
48
61
 
62
+ const extraFieldLength = await buffer.getUint16(
63
+ headerOffset + offsets.CD_EXTRA_FIELD_LENGTH_OFFSET
64
+ );
65
+
49
66
  const fileNameLength = await buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);
50
67
 
51
68
  const fileName = new TextDecoder().decode(
@@ -80,6 +97,7 @@ export const parseZipCDFileHeader = async (
80
97
  return {
81
98
  compressedSize,
82
99
  uncompressedSize,
100
+ extraFieldLength,
83
101
  fileNameLength,
84
102
  fileName,
85
103
  extraOffset,
@@ -0,0 +1,78 @@
1
+ import {FileProvider} from './file-provider';
2
+ import {ZipSignature, searchFromTheEnd} from './search-from-the-end';
3
+
4
+ /**
5
+ * End of central directory info
6
+ * according to https://en.wikipedia.org/wiki/ZIP_(file_format)
7
+ */
8
+ export type ZipEoCDRecord = {
9
+ /** Relative offset of local file header */
10
+ cdStartOffset: bigint;
11
+ /** Relative offset of local file header */
12
+ cdRecordsNumber: bigint;
13
+ };
14
+
15
+ const eoCDSignature: ZipSignature = [0x50, 0x4b, 0x05, 0x06];
16
+ const zip64EoCDLocatorSignature = Buffer.from([0x50, 0x4b, 0x06, 0x07]);
17
+ const zip64EoCDSignature = Buffer.from([0x50, 0x4b, 0x06, 0x06]);
18
+
19
+ const offsets = {
20
+ CD_RECORDS_NUMBER_OFFSET: 8n,
21
+ CD_START_OFFSET_OFFSET: 16n,
22
+
23
+ ZIP64_EOCD_START_OFFSET_OFFSET: 8n,
24
+
25
+ ZIP64_CD_RECORDS_NUMBER_OFFSET: 24n,
26
+ ZIP64_CD_START_OFFSET_OFFSET: 48n
27
+ };
28
+
29
+ /**
30
+ * Parses end of central directory record of zip file
31
+ * @param fileProvider - FileProvider instance
32
+ * @returns Info from the header
33
+ */
34
+ export const parseEoCDRecord = async (fileProvider: FileProvider): Promise<ZipEoCDRecord> => {
35
+ const zipEoCDOffset = await searchFromTheEnd(fileProvider, eoCDSignature);
36
+
37
+ let cdRecordsNumber = BigInt(
38
+ await fileProvider.getUint16(zipEoCDOffset + offsets.CD_RECORDS_NUMBER_OFFSET)
39
+ );
40
+ let cdStartOffset = BigInt(
41
+ await fileProvider.getUint32(zipEoCDOffset + offsets.CD_START_OFFSET_OFFSET)
42
+ );
43
+
44
+ if (cdStartOffset === BigInt(0xffffffff) || cdRecordsNumber === BigInt(0xffffffff)) {
45
+ const zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
46
+
47
+ if (
48
+ Buffer.from(
49
+ await fileProvider.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n)
50
+ ).compare(zip64EoCDLocatorSignature) !== 0
51
+ ) {
52
+ throw new Error('zip64 EoCD locator not found');
53
+ }
54
+ const zip64EoCDOffset = await fileProvider.getBigUint64(
55
+ zip64EoCDLocatorOffset + offsets.ZIP64_EOCD_START_OFFSET_OFFSET
56
+ );
57
+
58
+ if (
59
+ Buffer.from(await fileProvider.slice(zip64EoCDOffset, zip64EoCDOffset + 4n)).compare(
60
+ zip64EoCDSignature
61
+ ) !== 0
62
+ ) {
63
+ throw new Error('zip64 EoCD not found');
64
+ }
65
+
66
+ cdRecordsNumber = await fileProvider.getBigUint64(
67
+ zip64EoCDOffset + offsets.ZIP64_CD_RECORDS_NUMBER_OFFSET
68
+ );
69
+ cdStartOffset = await fileProvider.getBigUint64(
70
+ zip64EoCDOffset + offsets.ZIP64_CD_START_OFFSET_OFFSET
71
+ );
72
+ }
73
+
74
+ return {
75
+ cdRecordsNumber,
76
+ cdStartOffset
77
+ };
78
+ };
@@ -36,9 +36,9 @@ export const signature = Buffer.from([0x50, 0x4b, 0x03, 0x04]);
36
36
  export const parseZipLocalFileHeader = async (
37
37
  headerOffset: bigint,
38
38
  buffer: FileProvider
39
- ): Promise<ZipLocalFileHeader | undefined> => {
39
+ ): Promise<ZipLocalFileHeader | null> => {
40
40
  if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(signature) !== 0) {
41
- return Promise.resolve(undefined);
41
+ return null;
42
42
  }
43
43
 
44
44
  const fileNameLength = await buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET);
package/src/types.ts CHANGED
@@ -2,18 +2,6 @@ import type {Matrix4, Quaternion, Vector3} from '@math.gl/core';
2
2
  import type {TypedArray, MeshAttribute, TextureLevel} from '@loaders.gl/schema';
3
3
  import {Tile3D, Tileset3D} from '@loaders.gl/tiles';
4
4
 
5
- export enum DATA_TYPE {
6
- UInt8 = 'UInt8',
7
- UInt16 = 'UInt16',
8
- UInt32 = 'UInt32',
9
- UInt64 = 'UInt64',
10
- Int16 = 'Int16',
11
- Int32 = 'Int32',
12
- Int64 = 'Int64',
13
- Float32 = 'Float32',
14
- Float64 = 'Float64'
15
- }
16
-
17
5
  export type COLOR = [number, number, number, number];
18
6
 
19
7
  /**
@@ -690,20 +678,24 @@ type Domain = {
690
678
  * spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/store.cmn.md
691
679
  */
692
680
  type Store = {
693
- id: string | number;
681
+ id?: string | number;
694
682
  profile: string;
695
683
  version: number | string;
696
- resourcePattern: string[];
697
- rootNode: string;
698
- extent: number[];
699
- indexCRS: string;
700
- vertexCRS: string;
701
- normalReferenceFrame: string;
702
- attributeEncoding: string;
703
- textureEncoding: string[];
704
- lodType: string;
705
- lodModel: string;
684
+ resourcePattern?: string[];
685
+ rootNode?: string;
686
+ extent?: number[];
687
+ indexCRS?: string;
688
+ vertexCRS?: string;
689
+ normalReferenceFrame?: string;
690
+ lodType?: string;
691
+ lodModel?: string;
706
692
  defaultGeometrySchema: DefaultGeometrySchema;
693
+ nidEncoding?: string;
694
+ textureEncoding?: string[];
695
+ featureEncoding?: string;
696
+ geometryEncoding?: string;
697
+ attributeEncoding?: string;
698
+ indexingScheme?: string;
707
699
  };
708
700
  /**
709
701
  * Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/defaultGeometrySchema.cmn.md
@@ -726,15 +718,15 @@ type DefaultGeometrySchema = {
726
718
  export type HeaderAttribute = {
727
719
  property: HeaderAttributeProperty.vertexCount | HeaderAttributeProperty.featureCount | string;
728
720
  type:
729
- | DATA_TYPE.UInt8
730
- | DATA_TYPE.UInt16
731
- | DATA_TYPE.UInt32
732
- | DATA_TYPE.UInt64
733
- | DATA_TYPE.Int16
734
- | DATA_TYPE.Int32
735
- | DATA_TYPE.Int64
736
- | DATA_TYPE.Float32
737
- | DATA_TYPE.Float64;
721
+ | 'UInt8'
722
+ | 'UInt16'
723
+ | 'UInt32'
724
+ | 'UInt64'
725
+ | 'Int16'
726
+ | 'Int32'
727
+ | 'Int64'
728
+ | 'Float32'
729
+ | 'Float64';
738
730
  };
739
731
  export enum HeaderAttributeProperty {
740
732
  vertexCount = 'vertexCount',
@@ -749,14 +741,7 @@ export type VertexAttribute = {
749
741
  };
750
742
  export type GeometryAttribute = {
751
743
  byteOffset?: number;
752
- valueType:
753
- | DATA_TYPE.UInt8
754
- | DATA_TYPE.UInt16
755
- | DATA_TYPE.Int16
756
- | DATA_TYPE.Int32
757
- | DATA_TYPE.Int64
758
- | DATA_TYPE.Float32
759
- | DATA_TYPE.Float64;
744
+ valueType: 'UInt8' | 'UInt16' | 'Int16' | 'Int32' | 'Int64' | 'Float32' | 'Float64';
760
745
  valuesPerElement: number;
761
746
  };
762
747
  export type I3SMeshAttributes = {
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-from-the-end.js","names":["searchFromTheEnd","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","file","target","searchWindow","targetOffset","i","wrap","_callee$","_context","prev","next","getUint8","length","t0","sent","t1","t2","t3","undefined","every","val","index","abrupt","stop","_x","_x2","apply","arguments","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/search-from-the-end.ts"],"sourcesContent":["import {FileProvider} from 'modules/i3s/src/lib/parsers/parse-zip/file-provider';\n\n/** Description of zip signature type */\nexport type ZipSignature = [number, number, number, number];\n\n/**\n * looking for the last occurrence of the provided\n * @param file\n * @param target\n * @returns\n */\nexport const searchFromTheEnd = async (\n file: FileProvider,\n target: ZipSignature\n): Promise<bigint> => {\n const searchWindow = [\n await file.getUint8(file.length - 1n),\n await file.getUint8(file.length - 2n),\n await file.getUint8(file.length - 3n),\n undefined\n ];\n\n let targetOffset = 0n;\n\n // looking for the last record in the central directory\n for (let i = file.length - 4n; i > -1; i--) {\n searchWindow[3] = searchWindow[2];\n searchWindow[2] = searchWindow[1];\n searchWindow[1] = searchWindow[0];\n searchWindow[0] = await file.getUint8(i);\n if (searchWindow.every((val, index) => val === target[index])) {\n targetOffset = i;\n break;\n }\n }\n\n return targetOffset;\n};\n"],"mappings":";;;;;;;;;AAWO,IAAMA,gBAAgB;EAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAC,OAAA,EAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAG,SAAAC,QAC9BC,IAAkB,EAClBC,MAAoB;IAAA,IAAAC,YAAA,EAAAC,YAAA,EAAAC,CAAA;IAAA,OAAAP,YAAA,CAAAD,OAAA,CAAAS,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAAF,QAAA,CAAAE,IAAA;UAAA,OAGZT,IAAI,CAACU,QAAQ,CAACV,IAAI,CAACW,MAAM,GAAG,EAAE,CAAC;QAAA;UAAAJ,QAAA,CAAAK,EAAA,GAAAL,QAAA,CAAAM,IAAA;UAAAN,QAAA,CAAAE,IAAA;UAAA,OAC/BT,IAAI,CAACU,QAAQ,CAACV,IAAI,CAACW,MAAM,GAAG,EAAE,CAAC;QAAA;UAAAJ,QAAA,CAAAO,EAAA,GAAAP,QAAA,CAAAM,IAAA;UAAAN,QAAA,CAAAE,IAAA;UAAA,OAC/BT,IAAI,CAACU,QAAQ,CAACV,IAAI,CAACW,MAAM,GAAG,EAAE,CAAC;QAAA;UAAAJ,QAAA,CAAAQ,EAAA,GAAAR,QAAA,CAAAM,IAAA;UAAAN,QAAA,CAAAS,EAAA,GACrCC,SAAS;UAJLf,YAAY,IAAAK,QAAA,CAAAK,EAAA,EAAAL,QAAA,CAAAO,EAAA,EAAAP,QAAA,CAAAQ,EAAA,EAAAR,QAAA,CAAAS,EAAA;UAOdb,YAAY,GAAG,EAAE;UAGZC,CAAC,GAAGJ,IAAI,CAACW,MAAM,GAAG,EAAE;QAAA;UAAA,MAAEP,CAAC,GAAG,CAAC,CAAC;YAAAG,QAAA,CAAAE,IAAA;YAAA;UAAA;UACnCP,YAAY,CAAC,CAAC,CAAC,GAAGA,YAAY,CAAC,CAAC,CAAC;UACjCA,YAAY,CAAC,CAAC,CAAC,GAAGA,YAAY,CAAC,CAAC,CAAC;UACjCA,YAAY,CAAC,CAAC,CAAC,GAAGA,YAAY,CAAC,CAAC,CAAC;UAACK,QAAA,CAAAE,IAAA;UAAA,OACVT,IAAI,CAACU,QAAQ,CAACN,CAAC,CAAC;QAAA;UAAxCF,YAAY,CAAC,CAAC,CAAC,GAAAK,QAAA,CAAAM,IAAA;UAAA,KACXX,YAAY,CAACgB,KAAK,CAAC,UAACC,GAAG,EAAEC,KAAK;YAAA,OAAKD,GAAG,KAAKlB,MAAM,CAACmB,KAAK,CAAC;UAAA,EAAC;YAAAb,QAAA,CAAAE,IAAA;YAAA;UAAA;UAC3DN,YAAY,GAAGC,CAAC;UAAC,OAAAG,QAAA,CAAAc,MAAA;QAAA;UANkBjB,CAAC,EAAE;UAAAG,QAAA,CAAAE,IAAA;UAAA;QAAA;UAAA,OAAAF,QAAA,CAAAc,MAAA,WAWnClB,YAAY;QAAA;QAAA;UAAA,OAAAI,QAAA,CAAAe,IAAA;MAAA;IAAA,GAAAvB,OAAA;EAAA,CACpB;EAAA,gBA1BYN,gBAAgBA,CAAA8B,EAAA,EAAAC,GAAA;IAAA,OAAA9B,IAAA,CAAA+B,KAAA,OAAAC,SAAA;EAAA;AAAA,GA0B5B;AAACC,OAAA,CAAAlC,gBAAA,GAAAA,gBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-from-the-end.js","names":["searchFromTheEnd","file","target","searchWindow","getUint8","length","undefined","targetOffset","i","every","val","index"],"sources":["../../../../../src/lib/parsers/parse-slpk/search-from-the-end.ts"],"sourcesContent":["import {FileProvider} from 'modules/i3s/src/lib/parsers/parse-zip/file-provider';\n\n/** Description of zip signature type */\nexport type ZipSignature = [number, number, number, number];\n\n/**\n * looking for the last occurrence of the provided\n * @param file\n * @param target\n * @returns\n */\nexport const searchFromTheEnd = async (\n file: FileProvider,\n target: ZipSignature\n): Promise<bigint> => {\n const searchWindow = [\n await file.getUint8(file.length - 1n),\n await file.getUint8(file.length - 2n),\n await file.getUint8(file.length - 3n),\n undefined\n ];\n\n let targetOffset = 0n;\n\n // looking for the last record in the central directory\n for (let i = file.length - 4n; i > -1; i--) {\n searchWindow[3] = searchWindow[2];\n searchWindow[2] = searchWindow[1];\n searchWindow[1] = searchWindow[0];\n searchWindow[0] = await file.getUint8(i);\n if (searchWindow.every((val, index) => val === target[index])) {\n targetOffset = i;\n break;\n }\n }\n\n return targetOffset;\n};\n"],"mappings":"AAWA,OAAO,MAAMA,gBAAgB,GAAG,MAAAA,CAC9BC,IAAkB,EAClBC,MAAoB,KACA;EACpB,MAAMC,YAAY,GAAG,CACnB,MAAMF,IAAI,CAACG,QAAQ,CAACH,IAAI,CAACI,MAAM,GAAG,EAAE,CAAC,EACrC,MAAMJ,IAAI,CAACG,QAAQ,CAACH,IAAI,CAACI,MAAM,GAAG,EAAE,CAAC,EACrC,MAAMJ,IAAI,CAACG,QAAQ,CAACH,IAAI,CAACI,MAAM,GAAG,EAAE,CAAC,EACrCC,SAAS,CACV;EAED,IAAIC,YAAY,GAAG,EAAE;EAGrB,KAAK,IAAIC,CAAC,GAAGP,IAAI,CAACI,MAAM,GAAG,EAAE,EAAEG,CAAC,GAAG,CAAC,CAAC,EAAEA,CAAC,EAAE,EAAE;IAC1CL,YAAY,CAAC,CAAC,CAAC,GAAGA,YAAY,CAAC,CAAC,CAAC;IACjCA,YAAY,CAAC,CAAC,CAAC,GAAGA,YAAY,CAAC,CAAC,CAAC;IACjCA,YAAY,CAAC,CAAC,CAAC,GAAGA,YAAY,CAAC,CAAC,CAAC;IACjCA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAMF,IAAI,CAACG,QAAQ,CAACI,CAAC,CAAC;IACxC,IAAIL,YAAY,CAACM,KAAK,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAKD,GAAG,KAAKR,MAAM,CAACS,KAAK,CAAC,CAAC,EAAE;MAC7DJ,YAAY,GAAGC,CAAC;MAChB;IACF;EACF;EAEA,OAAOD,YAAY;AACrB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-from-the-end.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/parse-slpk/search-from-the-end.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,qDAAqD,CAAC;AAEjF,wCAAwC;AACxC,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,SACrB,YAAY,2BAEjB,QAAQ,MAAM,CAuBhB,CAAC"}