@loaders.gl/zip 4.2.0-alpha.3 → 4.2.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.
- package/dist/dist.dev.js +6 -3
- package/dist/hash-file-utility.d.ts.map +1 -1
- package/dist/hash-file-utility.js +4 -1
- package/dist/hash-file-utility.js.map +1 -1
- package/dist/index.cjs +4 -1
- package/dist/zip-loader.js +1 -1
- package/dist/zip-writer.js +1 -1
- package/package.json +5 -5
- package/src/hash-file-utility.ts +7 -1
package/dist/dist.dev.js
CHANGED
|
@@ -6975,7 +6975,7 @@ var __exports__ = (() => {
|
|
|
6975
6975
|
|
|
6976
6976
|
// src/zip-loader.ts
|
|
6977
6977
|
var import_jszip = __toESM(require_jszip_min(), 1);
|
|
6978
|
-
var VERSION = true ? "4.2.0-alpha.
|
|
6978
|
+
var VERSION = true ? "4.2.0-alpha.4" : "latest";
|
|
6979
6979
|
var ZipLoader = {
|
|
6980
6980
|
id: "zip",
|
|
6981
6981
|
module: "zip",
|
|
@@ -7020,7 +7020,7 @@ var __exports__ = (() => {
|
|
|
7020
7020
|
|
|
7021
7021
|
// src/zip-writer.ts
|
|
7022
7022
|
var import_jszip2 = __toESM(require_jszip_min(), 1);
|
|
7023
|
-
var VERSION2 = true ? "4.2.0-alpha.
|
|
7023
|
+
var VERSION2 = true ? "4.2.0-alpha.4" : "latest";
|
|
7024
7024
|
var ZipWriter = {
|
|
7025
7025
|
name: "Zip Archive",
|
|
7026
7026
|
id: "zip",
|
|
@@ -9354,7 +9354,10 @@ var __exports__ = (() => {
|
|
|
9354
9354
|
const textEncoder = new TextEncoder();
|
|
9355
9355
|
const hashArray = [];
|
|
9356
9356
|
for await (const cdHeader of zipCDIterator) {
|
|
9357
|
-
|
|
9357
|
+
let filename2 = cdHeader.fileName.split("\\").join("/");
|
|
9358
|
+
if (filename2 !== "3dSceneLayer.json.gz") {
|
|
9359
|
+
filename2 = filename2.toLocaleLowerCase();
|
|
9360
|
+
}
|
|
9358
9361
|
const arrayBuffer = textEncoder.encode(filename2).buffer;
|
|
9359
9362
|
const md5 = await md5Hash.hash(arrayBuffer, "hex");
|
|
9360
9363
|
hashArray.push(concatenateArrayBuffers(hexStringToBuffer(md5), bigintToBuffer(cdHeader.localHeaderOffset)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-file-utility.d.ts","sourceRoot":"","sources":["../src/hash-file-utility.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,YAAY,EAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,eAAe,EAA0B,MAAM,4BAA4B,CAAC;AAEpF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY/E;AASD;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAGjC;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAcjC;AAED,mCAAmC;AACnC,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,GAClE,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"hash-file-utility.d.ts","sourceRoot":"","sources":["../src/hash-file-utility.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,YAAY,EAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,eAAe,EAA0B,MAAM,4BAA4B,CAAC;AAEpF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY/E;AASD;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAGjC;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAcjC;AAED,mCAAmC;AACnC,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,GAClE,OAAO,CAAC,WAAW,CAAC,CAwBtB"}
|
|
@@ -35,7 +35,10 @@ export async function composeHashFile(zipCDIterator) {
|
|
|
35
35
|
const textEncoder = new TextEncoder();
|
|
36
36
|
const hashArray = [];
|
|
37
37
|
for await (const cdHeader of zipCDIterator) {
|
|
38
|
-
|
|
38
|
+
let filename = cdHeader.fileName.split('\\').join('/');
|
|
39
|
+
if (filename !== '3dSceneLayer.json.gz') {
|
|
40
|
+
filename = filename.toLocaleLowerCase();
|
|
41
|
+
}
|
|
39
42
|
const arrayBuffer = textEncoder.encode(filename).buffer;
|
|
40
43
|
const md5 = await md5Hash.hash(arrayBuffer, 'hex');
|
|
41
44
|
hashArray.push(concatenateArrayBuffers(hexStringToBuffer(md5), bigintToBuffer(cdHeader.localHeaderOffset)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-file-utility.js","names":["MD5Hash","concatenateArrayBuffers","concatenateArrayBuffersFromArray","makeZipCDHeaderIterator","parseHashTable","arrayBuffer","dataView","DataView","hashMap","i","byteLength","offset","getBigUint64","hash","bufferToHex","buffer","start","length","Uint8Array","map","x","toString","padStart","join","makeHashTableFromZipHeaders","fileProvider","zipCDIterator","getHashTable","md5Hash","textEncoder","TextEncoder","hashTable","cdHeader","filename","fileName","split","toLocaleLowerCase","encode","md5","localHeaderOffset","composeHashFile","hashArray","push","hexStringToBuffer","bigintToBuffer","bufferArray","sort","compareHashes","arrA","arrB","a","BigUint64Array","b","Number","str","_str$match","byteArray","match","h","parseInt","Array","n"],"sources":["../src/hash-file-utility.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {MD5Hash} from '@loaders.gl/crypto';\nimport {\n FileProvider,\n concatenateArrayBuffers,\n concatenateArrayBuffersFromArray\n} from '@loaders.gl/loader-utils';\nimport {ZipCDFileHeader, makeZipCDHeaderIterator} from './parse-zip/cd-file-header';\n\n/**\n * Reads hash file from buffer and returns it in ready-to-use form\n * @param arrayBuffer - buffer containing hash file\n * @returns Map containing hash and offset\n */\nexport function parseHashTable(arrayBuffer: ArrayBuffer): Record<string, bigint> {\n const dataView = new DataView(arrayBuffer);\n\n const hashMap: Record<string, bigint> = {};\n\n for (let i = 0; i < arrayBuffer.byteLength; i = i + 24) {\n const offset = dataView.getBigUint64(i + 16, true);\n const hash = bufferToHex(arrayBuffer, i, 16);\n hashMap[hash] = offset;\n }\n\n return hashMap;\n}\n\nfunction bufferToHex(buffer: ArrayBuffer, start: number, length: number): string {\n // buffer is an ArrayBuffer\n return [...new Uint8Array(buffer, start, length)]\n .map((x) => x.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * generates hash info from zip files \"central directory\"\n * @param fileProvider - provider of the archive\n * @returns ready to use hash info\n */\nexport async function makeHashTableFromZipHeaders(\n fileProvider: FileProvider\n): Promise<Record<string, bigint>> {\n const zipCDIterator = makeZipCDHeaderIterator(fileProvider);\n return getHashTable(zipCDIterator);\n}\n\n/**\n * creates hash table from file offset iterator\n * @param zipCDIterator iterator to use\n * @returns hash table\n */\nexport async function getHashTable(\n zipCDIterator: AsyncIterable<ZipCDFileHeader>\n): Promise<Record<string, bigint>> {\n const md5Hash = new MD5Hash();\n const textEncoder = new TextEncoder();\n\n const hashTable: Record<string, bigint> = {};\n\n for await (const cdHeader of zipCDIterator) {\n const filename = cdHeader.fileName.split('\\\\').join('/').toLocaleLowerCase();\n const arrayBuffer = textEncoder.encode(filename).buffer;\n const md5 = await md5Hash.hash(arrayBuffer, 'hex');\n hashTable[md5] = cdHeader.localHeaderOffset;\n }\n\n return hashTable;\n}\n\n/** item of the file offset list */\ntype FileListItem = {\n fileName: string;\n localHeaderOffset: bigint;\n};\n\n/**\n * creates hash file that later can be added to the SLPK archive\n * @param zipCDIterator iterator to use\n * @returns ArrayBuffer containing hash file\n */\nexport async function composeHashFile(\n zipCDIterator: AsyncIterable<FileListItem> | Iterable<FileListItem>\n): Promise<ArrayBuffer> {\n const md5Hash = new MD5Hash();\n const textEncoder = new TextEncoder();\n\n const hashArray: ArrayBuffer[] = [];\n\n for await (const cdHeader of zipCDIterator) {\n
|
|
1
|
+
{"version":3,"file":"hash-file-utility.js","names":["MD5Hash","concatenateArrayBuffers","concatenateArrayBuffersFromArray","makeZipCDHeaderIterator","parseHashTable","arrayBuffer","dataView","DataView","hashMap","i","byteLength","offset","getBigUint64","hash","bufferToHex","buffer","start","length","Uint8Array","map","x","toString","padStart","join","makeHashTableFromZipHeaders","fileProvider","zipCDIterator","getHashTable","md5Hash","textEncoder","TextEncoder","hashTable","cdHeader","filename","fileName","split","toLocaleLowerCase","encode","md5","localHeaderOffset","composeHashFile","hashArray","push","hexStringToBuffer","bigintToBuffer","bufferArray","sort","compareHashes","arrA","arrB","a","BigUint64Array","b","Number","str","_str$match","byteArray","match","h","parseInt","Array","n"],"sources":["../src/hash-file-utility.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {MD5Hash} from '@loaders.gl/crypto';\nimport {\n FileProvider,\n concatenateArrayBuffers,\n concatenateArrayBuffersFromArray\n} from '@loaders.gl/loader-utils';\nimport {ZipCDFileHeader, makeZipCDHeaderIterator} from './parse-zip/cd-file-header';\n\n/**\n * Reads hash file from buffer and returns it in ready-to-use form\n * @param arrayBuffer - buffer containing hash file\n * @returns Map containing hash and offset\n */\nexport function parseHashTable(arrayBuffer: ArrayBuffer): Record<string, bigint> {\n const dataView = new DataView(arrayBuffer);\n\n const hashMap: Record<string, bigint> = {};\n\n for (let i = 0; i < arrayBuffer.byteLength; i = i + 24) {\n const offset = dataView.getBigUint64(i + 16, true);\n const hash = bufferToHex(arrayBuffer, i, 16);\n hashMap[hash] = offset;\n }\n\n return hashMap;\n}\n\nfunction bufferToHex(buffer: ArrayBuffer, start: number, length: number): string {\n // buffer is an ArrayBuffer\n return [...new Uint8Array(buffer, start, length)]\n .map((x) => x.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * generates hash info from zip files \"central directory\"\n * @param fileProvider - provider of the archive\n * @returns ready to use hash info\n */\nexport async function makeHashTableFromZipHeaders(\n fileProvider: FileProvider\n): Promise<Record<string, bigint>> {\n const zipCDIterator = makeZipCDHeaderIterator(fileProvider);\n return getHashTable(zipCDIterator);\n}\n\n/**\n * creates hash table from file offset iterator\n * @param zipCDIterator iterator to use\n * @returns hash table\n */\nexport async function getHashTable(\n zipCDIterator: AsyncIterable<ZipCDFileHeader>\n): Promise<Record<string, bigint>> {\n const md5Hash = new MD5Hash();\n const textEncoder = new TextEncoder();\n\n const hashTable: Record<string, bigint> = {};\n\n for await (const cdHeader of zipCDIterator) {\n const filename = cdHeader.fileName.split('\\\\').join('/').toLocaleLowerCase();\n const arrayBuffer = textEncoder.encode(filename).buffer;\n const md5 = await md5Hash.hash(arrayBuffer, 'hex');\n hashTable[md5] = cdHeader.localHeaderOffset;\n }\n\n return hashTable;\n}\n\n/** item of the file offset list */\ntype FileListItem = {\n fileName: string;\n localHeaderOffset: bigint;\n};\n\n/**\n * creates hash file that later can be added to the SLPK archive\n * @param zipCDIterator iterator to use\n * @returns ArrayBuffer containing hash file\n */\nexport async function composeHashFile(\n zipCDIterator: AsyncIterable<FileListItem> | Iterable<FileListItem>\n): Promise<ArrayBuffer> {\n const md5Hash = new MD5Hash();\n const textEncoder = new TextEncoder();\n\n const hashArray: ArrayBuffer[] = [];\n\n for await (const cdHeader of zipCDIterator) {\n let filename = cdHeader.fileName.split('\\\\').join('/');\n // I3S edge case. All files should be lower case by spec. However, ArcGIS\n // and official i3s_converter https://github.com/Esri/i3s-spec/blob/master/i3s_converter/i3s_converter_ReadMe.md\n // expect `3dSceneLayer.json.gz` in camel case\n if (filename !== '3dSceneLayer.json.gz') {\n filename = filename.toLocaleLowerCase();\n }\n const arrayBuffer = textEncoder.encode(filename).buffer;\n const md5 = await md5Hash.hash(arrayBuffer, 'hex');\n hashArray.push(\n concatenateArrayBuffers(hexStringToBuffer(md5), bigintToBuffer(cdHeader.localHeaderOffset))\n );\n }\n\n const bufferArray = hashArray.sort(compareHashes);\n\n return concatenateArrayBuffersFromArray(bufferArray);\n}\n\n/**\n * Function to compare md5 hashes according to https://github.com/Esri/i3s-spec/blob/master/docs/2.0/slpk_hashtable.pcsl.md\n * @param arrA first hash to compare\n * @param arrB second hash to compare\n * @returns 0 if equal, negative number if a<b, pozitive if a>b\n */\nfunction compareHashes(arrA: ArrayBuffer, arrB: ArrayBuffer): number {\n const a = new BigUint64Array(arrA);\n const b = new BigUint64Array(arrB);\n\n return Number(a[0] === b[0] ? a[1] - b[1] : a[0] - b[0]);\n}\n\n/**\n * converts hex string to buffer\n * @param str hex string to convert\n * @returns conversion result\n */\nfunction hexStringToBuffer(str: string): ArrayBuffer {\n const byteArray = str.match(/../g)?.map((h) => parseInt(h, 16));\n return new Uint8Array(byteArray ?? new Array(16)).buffer;\n}\n\n/**\n * converts bigint to buffer\n * @param n bigint to convert\n * @returns convertion result\n */\nfunction bigintToBuffer(n: bigint): ArrayBuffer {\n return new BigUint64Array([n]).buffer;\n}\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1381,7 +1381,10 @@ async function composeHashFile(zipCDIterator) {
|
|
|
1381
1381
|
const textEncoder = new TextEncoder();
|
|
1382
1382
|
const hashArray = [];
|
|
1383
1383
|
for await (const cdHeader of zipCDIterator) {
|
|
1384
|
-
|
|
1384
|
+
let filename = cdHeader.fileName.split("\\").join("/");
|
|
1385
|
+
if (filename !== "3dSceneLayer.json.gz") {
|
|
1386
|
+
filename = filename.toLocaleLowerCase();
|
|
1387
|
+
}
|
|
1385
1388
|
const arrayBuffer = textEncoder.encode(filename).buffer;
|
|
1386
1389
|
const md5 = await md5Hash.hash(arrayBuffer, "hex");
|
|
1387
1390
|
hashArray.push(
|
package/dist/zip-loader.js
CHANGED
package/dist/zip-writer.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/zip",
|
|
3
|
-
"version": "4.2.0-alpha.
|
|
3
|
+
"version": "4.2.0-alpha.4",
|
|
4
4
|
"description": "Zip Archive Loader",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
"build-bundle": "ocular-bundle ./src/index.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@loaders.gl/compression": "4.2.0-alpha.
|
|
42
|
-
"@loaders.gl/crypto": "4.2.0-alpha.
|
|
43
|
-
"@loaders.gl/loader-utils": "4.2.0-alpha.
|
|
41
|
+
"@loaders.gl/compression": "4.2.0-alpha.4",
|
|
42
|
+
"@loaders.gl/crypto": "4.2.0-alpha.4",
|
|
43
|
+
"@loaders.gl/loader-utils": "4.2.0-alpha.4",
|
|
44
44
|
"jszip": "^3.1.5",
|
|
45
45
|
"md5": "^2.3.0"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "6c52dee5c3f005648a394cc4aee7fc37005c8e83"
|
|
48
48
|
}
|
package/src/hash-file-utility.ts
CHANGED
|
@@ -91,7 +91,13 @@ export async function composeHashFile(
|
|
|
91
91
|
const hashArray: ArrayBuffer[] = [];
|
|
92
92
|
|
|
93
93
|
for await (const cdHeader of zipCDIterator) {
|
|
94
|
-
|
|
94
|
+
let filename = cdHeader.fileName.split('\\').join('/');
|
|
95
|
+
// I3S edge case. All files should be lower case by spec. However, ArcGIS
|
|
96
|
+
// and official i3s_converter https://github.com/Esri/i3s-spec/blob/master/i3s_converter/i3s_converter_ReadMe.md
|
|
97
|
+
// expect `3dSceneLayer.json.gz` in camel case
|
|
98
|
+
if (filename !== '3dSceneLayer.json.gz') {
|
|
99
|
+
filename = filename.toLocaleLowerCase();
|
|
100
|
+
}
|
|
95
101
|
const arrayBuffer = textEncoder.encode(filename).buffer;
|
|
96
102
|
const md5 = await md5Hash.hash(arrayBuffer, 'hex');
|
|
97
103
|
hashArray.push(
|