@loaders.gl/i3s 4.0.0-alpha.15 → 4.0.0-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.min.js +278 -197
- package/dist/es5/arcgis-webscene-loader.js +1 -1
- package/dist/es5/i3s-attribute-loader.js +1 -1
- package/dist/es5/i3s-building-scene-layer-loader.js +1 -1
- package/dist/es5/i3s-content-loader.js +1 -1
- package/dist/es5/i3s-loader.js +1 -1
- package/dist/es5/i3s-node-page-loader.js +1 -1
- package/dist/es5/i3s-slpk-loader.js +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parsers/constants.js +14 -15
- package/dist/es5/lib/parsers/constants.js.map +1 -1
- package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +93 -29
- package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
- package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +51 -30
- package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
- package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +61 -42
- package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
- package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js +100 -0
- package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
- package/dist/es5/lib/parsers/parse-zip/local-file-header.js +1 -1
- package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +1 -1
- package/dist/es5/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
- package/dist/es5/types.js +1 -14
- package/dist/es5/types.js.map +1 -1
- package/dist/esm/arcgis-webscene-loader.js +1 -1
- package/dist/esm/i3s-attribute-loader.js +1 -1
- package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
- package/dist/esm/i3s-content-loader.js +1 -1
- package/dist/esm/i3s-loader.js +1 -1
- package/dist/esm/i3s-node-page-loader.js +1 -1
- package/dist/esm/i3s-slpk-loader.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/parsers/constants.js +14 -15
- package/dist/esm/lib/parsers/constants.js.map +1 -1
- package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +49 -16
- package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
- package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +35 -18
- package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
- package/dist/esm/lib/parsers/parse-zip/cd-file-header.js +14 -8
- package/dist/esm/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
- package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js +33 -0
- package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
- package/dist/esm/lib/parsers/parse-zip/local-file-header.js +1 -1
- package/dist/esm/lib/parsers/parse-zip/local-file-header.js.map +1 -1
- package/dist/esm/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
- package/dist/esm/types.js +0 -12
- package/dist/esm/types.js.map +1 -1
- package/dist/i3s-content-worker-node.js +47 -47
- package/dist/i3s-content-worker-node.js.map +2 -2
- package/dist/i3s-content-worker.js +22 -34
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/parsers/constants.d.ts.map +1 -1
- package/dist/lib/parsers/constants.js +14 -15
- package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +2 -1
- package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
- package/dist/lib/parsers/parse-slpk/parse-slpk.js +61 -15
- package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +21 -10
- package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
- package/dist/lib/parsers/parse-slpk/slpk-archieve.js +53 -24
- package/dist/lib/parsers/parse-zip/cd-file-header.d.ts +5 -1
- package/dist/lib/parsers/parse-zip/cd-file-header.d.ts.map +1 -1
- package/dist/lib/parsers/parse-zip/cd-file-header.js +15 -9
- package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts +18 -0
- package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts.map +1 -0
- package/dist/lib/parsers/parse-zip/end-of-central-directory.js +41 -0
- package/dist/lib/parsers/parse-zip/local-file-header.d.ts +1 -1
- package/dist/lib/parsers/parse-zip/local-file-header.d.ts.map +1 -1
- package/dist/lib/parsers/parse-zip/local-file-header.js +1 -1
- package/dist/lib/parsers/parse-zip/search-from-the-end.d.ts.map +1 -0
- package/dist/types.d.ts +17 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -13
- package/package.json +9 -9
- package/src/index.ts +0 -1
- package/src/lib/parsers/constants.ts +14 -15
- package/src/lib/parsers/parse-slpk/parse-slpk.ts +79 -25
- package/src/lib/parsers/parse-slpk/slpk-archieve.ts +55 -37
- package/src/lib/parsers/parse-zip/cd-file-header.ts +27 -9
- package/src/lib/parsers/parse-zip/end-of-central-directory.ts +78 -0
- package/src/lib/parsers/parse-zip/local-file-header.ts +2 -2
- package/src/types.ts +25 -40
- package/dist/es5/lib/parsers/parse-slpk/search-from-the-end.js.map +0 -1
- package/dist/esm/lib/parsers/parse-slpk/search-from-the-end.js.map +0 -1
- package/dist/lib/parsers/parse-slpk/search-from-the-end.d.ts.map +0 -1
- /package/dist/es5/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
- /package/dist/esm/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
- /package/dist/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.d.ts +0 -0
- /package/dist/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
- /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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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 |
|
|
39
|
+
): Promise<ZipLocalFileHeader | null> => {
|
|
40
40
|
if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(signature) !== 0) {
|
|
41
|
-
return
|
|
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
|
|
681
|
+
id?: string | number;
|
|
694
682
|
profile: string;
|
|
695
683
|
version: number | string;
|
|
696
|
-
resourcePattern
|
|
697
|
-
rootNode
|
|
698
|
-
extent
|
|
699
|
-
indexCRS
|
|
700
|
-
vertexCRS
|
|
701
|
-
normalReferenceFrame
|
|
702
|
-
|
|
703
|
-
|
|
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
|
-
|
|
|
730
|
-
|
|
|
731
|
-
|
|
|
732
|
-
|
|
|
733
|
-
|
|
|
734
|
-
|
|
|
735
|
-
|
|
|
736
|
-
|
|
|
737
|
-
|
|
|
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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|