@loaders.gl/i3s 3.4.13 → 3.4.15

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 (58) hide show
  1. package/dist/dist.min.js +124 -111
  2. package/dist/es5/arcgis-webscene-loader.js +5 -22
  3. package/dist/es5/arcgis-webscene-loader.js.map +1 -1
  4. package/dist/es5/bundle.js +1 -1
  5. package/dist/es5/bundle.js.map +1 -1
  6. package/dist/es5/i3s-attribute-loader.js +58 -123
  7. package/dist/es5/i3s-attribute-loader.js.map +1 -1
  8. package/dist/es5/i3s-building-scene-layer-loader.js +8 -28
  9. package/dist/es5/i3s-building-scene-layer-loader.js.map +1 -1
  10. package/dist/es5/i3s-content-loader.js +16 -35
  11. package/dist/es5/i3s-content-loader.js.map +1 -1
  12. package/dist/es5/i3s-loader.js +49 -148
  13. package/dist/es5/i3s-loader.js.map +1 -1
  14. package/dist/es5/i3s-node-page-loader.js +8 -39
  15. package/dist/es5/i3s-node-page-loader.js.map +1 -1
  16. package/dist/es5/i3s-slpk-loader.js +2 -2
  17. package/dist/es5/i3s-slpk-loader.js.map +1 -1
  18. package/dist/es5/index.js +8 -8
  19. package/dist/es5/lib/helpers/i3s-nodepages-tiles.js +161 -267
  20. package/dist/es5/lib/helpers/i3s-nodepages-tiles.js.map +1 -1
  21. package/dist/es5/lib/parsers/constants.js +6 -6
  22. package/dist/es5/lib/parsers/constants.js.map +1 -1
  23. package/dist/es5/lib/parsers/parse-arcgis-webscene.js +64 -146
  24. package/dist/es5/lib/parsers/parse-arcgis-webscene.js.map +1 -1
  25. package/dist/es5/lib/parsers/parse-i3s-attribute.js +26 -55
  26. package/dist/es5/lib/parsers/parse-i3s-attribute.js.map +1 -1
  27. package/dist/es5/lib/parsers/parse-i3s-building-scene-layer.js +27 -47
  28. package/dist/es5/lib/parsers/parse-i3s-building-scene-layer.js.map +1 -1
  29. package/dist/es5/lib/parsers/parse-i3s-tile-content.js +278 -347
  30. package/dist/es5/lib/parsers/parse-i3s-tile-content.js.map +1 -1
  31. package/dist/es5/lib/parsers/parse-i3s.js +55 -79
  32. package/dist/es5/lib/parsers/parse-i3s.js.map +1 -1
  33. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +30 -81
  34. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  35. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +44 -90
  36. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  37. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +17 -17
  38. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  39. package/dist/es5/lib/parsers/parse-zip/local-file-header.js +10 -10
  40. package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  41. package/dist/es5/lib/utils/convert-i3s-obb-to-mbs.js +4 -6
  42. package/dist/es5/lib/utils/convert-i3s-obb-to-mbs.js.map +1 -1
  43. package/dist/es5/lib/utils/customizeColors.js +79 -140
  44. package/dist/es5/lib/utils/customizeColors.js.map +1 -1
  45. package/dist/es5/lib/utils/url-utils.js +14 -11
  46. package/dist/es5/lib/utils/url-utils.js.map +1 -1
  47. package/dist/es5/types.js +2 -2
  48. package/dist/esm/arcgis-webscene-loader.js +1 -1
  49. package/dist/esm/i3s-attribute-loader.js +1 -1
  50. package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
  51. package/dist/esm/i3s-content-loader.js +1 -1
  52. package/dist/esm/i3s-loader.js +1 -1
  53. package/dist/esm/i3s-node-page-loader.js +1 -1
  54. package/dist/esm/i3s-slpk-loader.js +1 -1
  55. package/dist/i3s-content-nodejs-worker.js +61 -59
  56. package/dist/i3s-content-nodejs-worker.js.map +3 -3
  57. package/dist/i3s-content-worker.js +69 -81
  58. package/package.json +9 -9
@@ -5,108 +5,62 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.SLPKArchive = void 0;
8
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
9
  var _workerUtils = require("@loaders.gl/worker-utils");
14
10
  var _md = _interopRequireDefault(require("md5"));
15
11
  var _compression = require("@loaders.gl/compression");
16
12
  var _localFileHeader = require("../parse-zip/local-file-header");
17
- var SLPKArchive = function () {
18
- function SLPKArchive(slpkArchiveBuffer, hashFile) {
19
- (0, _classCallCheck2.default)(this, SLPKArchive);
13
+ class SLPKArchive {
14
+ constructor(slpkArchiveBuffer, hashFile) {
20
15
  (0, _defineProperty2.default)(this, "slpkArchive", void 0);
21
16
  (0, _defineProperty2.default)(this, "hashArray", void 0);
22
17
  this.slpkArchive = new DataView(slpkArchiveBuffer);
23
18
  this.hashArray = this.parseHashFile(hashFile);
24
19
  }
25
- (0, _createClass2.default)(SLPKArchive, [{
26
- key: "parseHashFile",
27
- value: function parseHashFile(hashFile) {
28
- var hashFileBuffer = Buffer.from(hashFile);
29
- var hashArray = [];
30
- for (var i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {
31
- var offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i + 16, hashFileBuffer.byteOffset + i + 24));
32
- var offset = offsetBuffer.getUint32(offsetBuffer.byteOffset, true);
33
- hashArray.push({
34
- hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)),
35
- offset: offset
36
- });
37
- }
38
- return hashArray;
20
+ parseHashFile(hashFile) {
21
+ const hashFileBuffer = Buffer.from(hashFile);
22
+ const hashArray = [];
23
+ for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {
24
+ const offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i + 16, hashFileBuffer.byteOffset + i + 24));
25
+ const offset = offsetBuffer.getUint32(offsetBuffer.byteOffset, true);
26
+ hashArray.push({
27
+ hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)),
28
+ offset
29
+ });
30
+ }
31
+ return hashArray;
32
+ }
33
+ async getFile(path) {
34
+ let mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'raw';
35
+ if (mode === 'http') {
36
+ throw new Error('http mode is not supported');
39
37
  }
40
- }, {
41
- key: "getFile",
42
- value: function () {
43
- var _getFile = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(path) {
44
- var mode,
45
- fileToDecompress,
46
- decompressedData,
47
- fileWithoutCompression,
48
- _args = arguments;
49
- return _regenerator.default.wrap(function _callee$(_context) {
50
- while (1) switch (_context.prev = _context.next) {
51
- case 0:
52
- mode = _args.length > 1 && _args[1] !== undefined ? _args[1] : 'raw';
53
- if (!(mode === 'http')) {
54
- _context.next = 3;
55
- break;
56
- }
57
- throw new Error('http mode is not supported');
58
- case 3:
59
- fileToDecompress = this.getFileBytes("".concat(path, ".gz"));
60
- if (!fileToDecompress) {
61
- _context.next = 9;
62
- break;
63
- }
64
- _context.next = 7;
65
- return (0, _workerUtils.processOnWorker)(_compression.CompressionWorker, fileToDecompress, {
66
- compression: 'gzip',
67
- operation: 'decompress',
68
- _workerType: 'test',
69
- gzip: {}
70
- });
71
- case 7:
72
- decompressedData = _context.sent;
73
- return _context.abrupt("return", decompressedData);
74
- case 9:
75
- fileWithoutCompression = this.getFileBytes(path);
76
- if (!fileWithoutCompression) {
77
- _context.next = 12;
78
- break;
79
- }
80
- return _context.abrupt("return", Promise.resolve(Buffer.from(fileWithoutCompression)));
81
- case 12:
82
- throw new Error('No such file in the archieve');
83
- case 13:
84
- case "end":
85
- return _context.stop();
86
- }
87
- }, _callee, this);
88
- }));
89
- function getFile(_x) {
90
- return _getFile.apply(this, arguments);
91
- }
92
- return getFile;
93
- }()
94
- }, {
95
- key: "getFileBytes",
96
- value: function getFileBytes(path) {
97
- var nameHash = Buffer.from((0, _md.default)(path), 'hex');
98
- var fileInfo = this.hashArray.find(function (val) {
99
- return Buffer.compare(val.hash, nameHash) === 0;
38
+ const fileToDecompress = this.getFileBytes("".concat(path, ".gz"));
39
+ if (fileToDecompress) {
40
+ const decompressedData = await (0, _workerUtils.processOnWorker)(_compression.CompressionWorker, fileToDecompress, {
41
+ compression: 'gzip',
42
+ operation: 'decompress',
43
+ _workerType: 'test',
44
+ gzip: {}
100
45
  });
101
- if (!fileInfo) {
102
- return undefined;
103
- }
104
- var localFileHeader = (0, _localFileHeader.parseZipLocalFileHeader)(this.slpkArchive.byteOffset + (fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.offset), this.slpkArchive);
105
- var compressedFile = this.slpkArchive.buffer.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
106
- return compressedFile;
46
+ return decompressedData;
47
+ }
48
+ const fileWithoutCompression = this.getFileBytes(path);
49
+ if (fileWithoutCompression) {
50
+ return Promise.resolve(Buffer.from(fileWithoutCompression));
107
51
  }
108
- }]);
109
- return SLPKArchive;
110
- }();
52
+ throw new Error('No such file in the archieve');
53
+ }
54
+ getFileBytes(path) {
55
+ const nameHash = Buffer.from((0, _md.default)(path), 'hex');
56
+ const fileInfo = this.hashArray.find(val => Buffer.compare(val.hash, nameHash) === 0);
57
+ if (!fileInfo) {
58
+ return undefined;
59
+ }
60
+ const localFileHeader = (0, _localFileHeader.parseZipLocalFileHeader)(this.slpkArchive.byteOffset + (fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.offset), this.slpkArchive);
61
+ const compressedFile = this.slpkArchive.buffer.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
62
+ return compressedFile;
63
+ }
64
+ }
111
65
  exports.SLPKArchive = SLPKArchive;
112
66
  //# sourceMappingURL=slpk-archieve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-archieve.js","names":["_workerUtils","require","_md","_interopRequireDefault","_compression","_localFileHeader","SLPKArchive","slpkArchiveBuffer","hashFile","_classCallCheck2","default","_defineProperty2","slpkArchive","DataView","hashArray","parseHashFile","_createClass2","key","value","hashFileBuffer","Buffer","from","i","buffer","byteLength","offsetBuffer","slice","byteOffset","offset","getUint32","push","hash","subarray","_getFile","_asyncToGenerator2","_regenerator","mark","_callee","path","mode","fileToDecompress","decompressedData","fileWithoutCompression","_args","arguments","wrap","_callee$","_context","prev","next","length","undefined","Error","getFileBytes","concat","processOnWorker","CompressionWorker","compression","operation","_workerType","gzip","sent","abrupt","Promise","resolve","stop","getFile","_x","apply","nameHash","md5","fileInfo","find","val","compare","localFileHeader","parseZipLocalFileHeader","compressedFile","fileDataOffset","compressedSize","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/slpk-archieve.ts"],"sourcesContent":["import {processOnWorker} from '@loaders.gl/worker-utils';\nimport md5 from 'md5';\nimport {CompressionWorker} from '@loaders.gl/compression';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\n\n/** Element of hash array */\ntype HashElement = {\n /**\n * File name hash\n */\n hash: Buffer;\n /**\n * File offset in the archive\n */\n offset: number;\n};\n\n/**\n * Class for handling information about slpk file\n */\nexport class SLPKArchive {\n slpkArchive: DataView;\n hashArray: {hash: Buffer; offset: number}[];\n constructor(slpkArchiveBuffer: ArrayBuffer, hashFile: ArrayBuffer) {\n this.slpkArchive = new DataView(slpkArchiveBuffer);\n this.hashArray = this.parseHashFile(hashFile);\n }\n\n /**\n * Reads hash file from buffer and returns it in ready-to-use form\n * @param hashFile - bufer containing hash file\n * @returns Array containing file info\n */\n private parseHashFile(hashFile: ArrayBuffer): HashElement[] {\n const hashFileBuffer = Buffer.from(hashFile);\n const hashArray: HashElement[] = [];\n for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {\n const offsetBuffer = new DataView(\n hashFileBuffer.buffer.slice(\n hashFileBuffer.byteOffset + i + 16,\n hashFileBuffer.byteOffset + i + 24\n )\n );\n const offset = offsetBuffer.getUint32(offsetBuffer.byteOffset, true);\n hashArray.push({\n hash: Buffer.from(\n hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)\n ),\n offset\n });\n }\n return hashArray;\n }\n\n /**\n * Returns file with the given path from slpk archive\n * @param path - path inside the slpk\n * @param mode - currently only raw mode supported\n * @returns buffer with ready to use file\n */\n async getFile(path: string, mode: 'http' | 'raw' = 'raw'): Promise<Buffer> {\n if (mode === 'http') {\n throw new Error('http mode is not supported');\n }\n\n const fileToDecompress = this.getFileBytes(`${path}.gz`);\n\n if (fileToDecompress) {\n const decompressedData = await processOnWorker(CompressionWorker, fileToDecompress, {\n compression: 'gzip',\n operation: 'decompress',\n _workerType: 'test',\n gzip: {}\n });\n return decompressedData;\n }\n const fileWithoutCompression = this.getFileBytes(path);\n if (fileWithoutCompression) {\n return Promise.resolve(Buffer.from(fileWithoutCompression));\n }\n throw new Error('No such file in the archieve');\n }\n\n /**\n * Trying to get raw file data by adress\n * @param path - path inside the archive\n * @returns buffer with the raw file data\n */\n private getFileBytes(path: string): ArrayBuffer | undefined {\n const nameHash = Buffer.from(md5(path), 'hex');\n const fileInfo = this.hashArray.find((val) => Buffer.compare(val.hash, nameHash) === 0);\n if (!fileInfo) {\n return undefined;\n }\n\n const localFileHeader = parseZipLocalFileHeader(\n this.slpkArchive.byteOffset + fileInfo?.offset,\n this.slpkArchive\n );\n\n const compressedFile = this.slpkArchive.buffer.slice(\n localFileHeader.fileDataOffset,\n localFileHeader.fileDataOffset + localFileHeader.compressedSize\n );\n\n return compressedFile;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"slpk-archieve.js","names":["_workerUtils","require","_md","_interopRequireDefault","_compression","_localFileHeader","SLPKArchive","constructor","slpkArchiveBuffer","hashFile","_defineProperty2","default","slpkArchive","DataView","hashArray","parseHashFile","hashFileBuffer","Buffer","from","i","buffer","byteLength","offsetBuffer","slice","byteOffset","offset","getUint32","push","hash","subarray","getFile","path","mode","arguments","length","undefined","Error","fileToDecompress","getFileBytes","concat","decompressedData","processOnWorker","CompressionWorker","compression","operation","_workerType","gzip","fileWithoutCompression","Promise","resolve","nameHash","md5","fileInfo","find","val","compare","localFileHeader","parseZipLocalFileHeader","compressedFile","fileDataOffset","compressedSize","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/slpk-archieve.ts"],"sourcesContent":["import {processOnWorker} from '@loaders.gl/worker-utils';\nimport md5 from 'md5';\nimport {CompressionWorker} from '@loaders.gl/compression';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\n\n/** Element of hash array */\ntype HashElement = {\n /**\n * File name hash\n */\n hash: Buffer;\n /**\n * File offset in the archive\n */\n offset: number;\n};\n\n/**\n * Class for handling information about slpk file\n */\nexport class SLPKArchive {\n slpkArchive: DataView;\n hashArray: {hash: Buffer; offset: number}[];\n constructor(slpkArchiveBuffer: ArrayBuffer, hashFile: ArrayBuffer) {\n this.slpkArchive = new DataView(slpkArchiveBuffer);\n this.hashArray = this.parseHashFile(hashFile);\n }\n\n /**\n * Reads hash file from buffer and returns it in ready-to-use form\n * @param hashFile - bufer containing hash file\n * @returns Array containing file info\n */\n private parseHashFile(hashFile: ArrayBuffer): HashElement[] {\n const hashFileBuffer = Buffer.from(hashFile);\n const hashArray: HashElement[] = [];\n for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {\n const offsetBuffer = new DataView(\n hashFileBuffer.buffer.slice(\n hashFileBuffer.byteOffset + i + 16,\n hashFileBuffer.byteOffset + i + 24\n )\n );\n const offset = offsetBuffer.getUint32(offsetBuffer.byteOffset, true);\n hashArray.push({\n hash: Buffer.from(\n hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)\n ),\n offset\n });\n }\n return hashArray;\n }\n\n /**\n * Returns file with the given path from slpk archive\n * @param path - path inside the slpk\n * @param mode - currently only raw mode supported\n * @returns buffer with ready to use file\n */\n async getFile(path: string, mode: 'http' | 'raw' = 'raw'): Promise<Buffer> {\n if (mode === 'http') {\n throw new Error('http mode is not supported');\n }\n\n const fileToDecompress = this.getFileBytes(`${path}.gz`);\n\n if (fileToDecompress) {\n const decompressedData = await processOnWorker(CompressionWorker, fileToDecompress, {\n compression: 'gzip',\n operation: 'decompress',\n _workerType: 'test',\n gzip: {}\n });\n return decompressedData;\n }\n const fileWithoutCompression = this.getFileBytes(path);\n if (fileWithoutCompression) {\n return Promise.resolve(Buffer.from(fileWithoutCompression));\n }\n throw new Error('No such file in the archieve');\n }\n\n /**\n * Trying to get raw file data by adress\n * @param path - path inside the archive\n * @returns buffer with the raw file data\n */\n private getFileBytes(path: string): ArrayBuffer | undefined {\n const nameHash = Buffer.from(md5(path), 'hex');\n const fileInfo = this.hashArray.find((val) => Buffer.compare(val.hash, nameHash) === 0);\n if (!fileInfo) {\n return undefined;\n }\n\n const localFileHeader = parseZipLocalFileHeader(\n this.slpkArchive.byteOffset + fileInfo?.offset,\n this.slpkArchive\n );\n\n const compressedFile = this.slpkArchive.buffer.slice(\n localFileHeader.fileDataOffset,\n localFileHeader.fileDataOffset + localFileHeader.compressedSize\n );\n\n return compressedFile;\n }\n}\n"],"mappings":"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"}
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.parseZipCDFileHeader = void 0;
7
- var parseZipCDFileHeader = function parseZipCDFileHeader(headerOffset, buffer) {
8
- var offsets = {
7
+ const parseZipCDFileHeader = (headerOffset, buffer) => {
8
+ const offsets = {
9
9
  CD_COMPRESSED_SIZE_OFFSET: 20,
10
10
  CD_UNCOMPRESSED_SIZE_OFFSET: 24,
11
11
  CD_FILE_NAME_LENGTH_OFFSET: 28,
@@ -13,15 +13,15 @@ var parseZipCDFileHeader = function parseZipCDFileHeader(headerOffset, buffer) {
13
13
  CD_LOCAL_HEADER_OFFSET_OFFSET: 42,
14
14
  CD_FILE_NAME_OFFSET: 46
15
15
  };
16
- var compressedSize = buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET, true);
17
- var uncompressedSize = buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET, true);
18
- var fileNameLength = buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET, true);
19
- var fileName = buffer.buffer.slice(headerOffset + offsets.CD_FILE_NAME_OFFSET, headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength);
20
- var extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;
21
- var oldFormatOffset = buffer.getUint32(headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET, true);
22
- var fileDataOffset = oldFormatOffset;
16
+ const compressedSize = buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET, true);
17
+ const uncompressedSize = buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET, true);
18
+ const fileNameLength = buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET, true);
19
+ const fileName = buffer.buffer.slice(headerOffset + offsets.CD_FILE_NAME_OFFSET, headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength);
20
+ const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;
21
+ const oldFormatOffset = buffer.getUint32(headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET, true);
22
+ let fileDataOffset = oldFormatOffset;
23
23
  if (fileDataOffset === 0xffffffff) {
24
- var offsetInZip64Data = 4;
24
+ let offsetInZip64Data = 4;
25
25
  if (compressedSize === 0xffffffff) {
26
26
  offsetInZip64Data += 8;
27
27
  }
@@ -30,14 +30,14 @@ var parseZipCDFileHeader = function parseZipCDFileHeader(headerOffset, buffer) {
30
30
  }
31
31
  fileDataOffset = buffer.getUint32(extraOffset + offsetInZip64Data, true);
32
32
  }
33
- var localHeaderOffset = fileDataOffset;
33
+ const localHeaderOffset = fileDataOffset;
34
34
  return {
35
- compressedSize: compressedSize,
36
- uncompressedSize: uncompressedSize,
37
- fileNameLength: fileNameLength,
38
- fileName: fileName,
39
- extraOffset: extraOffset,
40
- localHeaderOffset: localHeaderOffset
35
+ compressedSize,
36
+ uncompressedSize,
37
+ fileNameLength,
38
+ fileName,
39
+ extraOffset,
40
+ localHeaderOffset
41
41
  };
42
42
  };
43
43
  exports.parseZipCDFileHeader = parseZipCDFileHeader;
@@ -1 +1 @@
1
- {"version":3,"file":"cd-file-header.js","names":["parseZipCDFileHeader","headerOffset","buffer","offsets","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","compressedSize","getUint32","uncompressedSize","fileNameLength","getUint16","fileName","slice","extraOffset","oldFormatOffset","fileDataOffset","offsetInZip64Data","localHeaderOffset","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/cd-file-header.ts"],"sourcesContent":["/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /**\n * Compressed size\n */\n compressedSize: number;\n /**\n * Uncompressed size\n */\n uncompressedSize: number;\n /**\n * File name length\n */\n fileNameLength: number;\n /**\n * File name\n */\n fileName: ArrayBuffer;\n /**\n * Extra field offset\n */\n extraOffset: number;\n /**\n * Relative offset of local file header\n */\n localHeaderOffset: number;\n};\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 = (headerOffset: number, buffer: DataView): ZipCDFileHeader => {\n const offsets = {\n CD_COMPRESSED_SIZE_OFFSET: 20,\n CD_UNCOMPRESSED_SIZE_OFFSET: 24,\n CD_FILE_NAME_LENGTH_OFFSET: 28,\n CD_EXTRA_FIELD_LENGTH_OFFSET: 30,\n CD_LOCAL_HEADER_OFFSET_OFFSET: 42,\n CD_FILE_NAME_OFFSET: 46\n };\n\n const compressedSize = buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET, true);\n\n const uncompressedSize = buffer.getUint32(\n headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET,\n true\n );\n\n const fileNameLength = buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET, true);\n\n const fileName = buffer.buffer.slice(\n headerOffset + offsets.CD_FILE_NAME_OFFSET,\n headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength\n );\n\n const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;\n\n const oldFormatOffset = buffer.getUint32(\n headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET,\n true\n );\n\n let fileDataOffset = oldFormatOffset;\n if (fileDataOffset === 0xffffffff) {\n let offsetInZip64Data = 4;\n // looking for info that might be also be in zip64 extra field\n if (compressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n if (uncompressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n\n // getUint32 needs to be replaced with getBigUint64 for archieves bigger than 2gb\n fileDataOffset = buffer.getUint32(extraOffset + offsetInZip64Data, true); // setting it to the one from zip64\n }\n const localHeaderOffset = fileDataOffset;\n\n return {\n compressedSize,\n uncompressedSize,\n fileNameLength,\n fileName,\n extraOffset,\n localHeaderOffset\n };\n};\n"],"mappings":";;;;;;AAqCO,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,YAAoB,EAAEC,MAAgB,EAAsB;EAC/F,IAAMC,OAAO,GAAG;IACdC,yBAAyB,EAAE,EAAE;IAC7BC,2BAA2B,EAAE,EAAE;IAC/BC,0BAA0B,EAAE,EAAE;IAC9BC,4BAA4B,EAAE,EAAE;IAChCC,6BAA6B,EAAE,EAAE;IACjCC,mBAAmB,EAAE;EACvB,CAAC;EAED,IAAMC,cAAc,GAAGR,MAAM,CAACS,SAAS,CAACV,YAAY,GAAGE,OAAO,CAACC,yBAAyB,EAAE,IAAI,CAAC;EAE/F,IAAMQ,gBAAgB,GAAGV,MAAM,CAACS,SAAS,CACvCV,YAAY,GAAGE,OAAO,CAACE,2BAA2B,EAClD,IACF,CAAC;EAED,IAAMQ,cAAc,GAAGX,MAAM,CAACY,SAAS,CAACb,YAAY,GAAGE,OAAO,CAACG,0BAA0B,EAAE,IAAI,CAAC;EAEhG,IAAMS,QAAQ,GAAGb,MAAM,CAACA,MAAM,CAACc,KAAK,CAClCf,YAAY,GAAGE,OAAO,CAACM,mBAAmB,EAC1CR,YAAY,GAAGE,OAAO,CAACM,mBAAmB,GAAGI,cAC/C,CAAC;EAED,IAAMI,WAAW,GAAGhB,YAAY,GAAGE,OAAO,CAACM,mBAAmB,GAAGI,cAAc;EAE/E,IAAMK,eAAe,GAAGhB,MAAM,CAACS,SAAS,CACtCV,YAAY,GAAGE,OAAO,CAACK,6BAA6B,EACpD,IACF,CAAC;EAED,IAAIW,cAAc,GAAGD,eAAe;EACpC,IAAIC,cAAc,KAAK,UAAU,EAAE;IACjC,IAAIC,iBAAiB,GAAG,CAAC;IAEzB,IAAIV,cAAc,KAAK,UAAU,EAAE;MACjCU,iBAAiB,IAAI,CAAC;IACxB;IACA,IAAIR,gBAAgB,KAAK,UAAU,EAAE;MACnCQ,iBAAiB,IAAI,CAAC;IACxB;IAGAD,cAAc,GAAGjB,MAAM,CAACS,SAAS,CAACM,WAAW,GAAGG,iBAAiB,EAAE,IAAI,CAAC;EAC1E;EACA,IAAMC,iBAAiB,GAAGF,cAAc;EAExC,OAAO;IACLT,cAAc,EAAdA,cAAc;IACdE,gBAAgB,EAAhBA,gBAAgB;IAChBC,cAAc,EAAdA,cAAc;IACdE,QAAQ,EAARA,QAAQ;IACRE,WAAW,EAAXA,WAAW;IACXI,iBAAiB,EAAjBA;EACF,CAAC;AACH,CAAC;AAACC,OAAA,CAAAtB,oBAAA,GAAAA,oBAAA"}
1
+ {"version":3,"file":"cd-file-header.js","names":["parseZipCDFileHeader","headerOffset","buffer","offsets","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","compressedSize","getUint32","uncompressedSize","fileNameLength","getUint16","fileName","slice","extraOffset","oldFormatOffset","fileDataOffset","offsetInZip64Data","localHeaderOffset","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/cd-file-header.ts"],"sourcesContent":["/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /**\n * Compressed size\n */\n compressedSize: number;\n /**\n * Uncompressed size\n */\n uncompressedSize: number;\n /**\n * File name length\n */\n fileNameLength: number;\n /**\n * File name\n */\n fileName: ArrayBuffer;\n /**\n * Extra field offset\n */\n extraOffset: number;\n /**\n * Relative offset of local file header\n */\n localHeaderOffset: number;\n};\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 = (headerOffset: number, buffer: DataView): ZipCDFileHeader => {\n const offsets = {\n CD_COMPRESSED_SIZE_OFFSET: 20,\n CD_UNCOMPRESSED_SIZE_OFFSET: 24,\n CD_FILE_NAME_LENGTH_OFFSET: 28,\n CD_EXTRA_FIELD_LENGTH_OFFSET: 30,\n CD_LOCAL_HEADER_OFFSET_OFFSET: 42,\n CD_FILE_NAME_OFFSET: 46\n };\n\n const compressedSize = buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET, true);\n\n const uncompressedSize = buffer.getUint32(\n headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET,\n true\n );\n\n const fileNameLength = buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET, true);\n\n const fileName = buffer.buffer.slice(\n headerOffset + offsets.CD_FILE_NAME_OFFSET,\n headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength\n );\n\n const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;\n\n const oldFormatOffset = buffer.getUint32(\n headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET,\n true\n );\n\n let fileDataOffset = oldFormatOffset;\n if (fileDataOffset === 0xffffffff) {\n let offsetInZip64Data = 4;\n // looking for info that might be also be in zip64 extra field\n if (compressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n if (uncompressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n\n // getUint32 needs to be replaced with getBigUint64 for archieves bigger than 2gb\n fileDataOffset = buffer.getUint32(extraOffset + offsetInZip64Data, true); // setting it to the one from zip64\n }\n const localHeaderOffset = fileDataOffset;\n\n return {\n compressedSize,\n uncompressedSize,\n fileNameLength,\n fileName,\n extraOffset,\n localHeaderOffset\n };\n};\n"],"mappings":";;;;;;AAqCO,MAAMA,oBAAoB,GAAGA,CAACC,YAAoB,EAAEC,MAAgB,KAAsB;EAC/F,MAAMC,OAAO,GAAG;IACdC,yBAAyB,EAAE,EAAE;IAC7BC,2BAA2B,EAAE,EAAE;IAC/BC,0BAA0B,EAAE,EAAE;IAC9BC,4BAA4B,EAAE,EAAE;IAChCC,6BAA6B,EAAE,EAAE;IACjCC,mBAAmB,EAAE;EACvB,CAAC;EAED,MAAMC,cAAc,GAAGR,MAAM,CAACS,SAAS,CAACV,YAAY,GAAGE,OAAO,CAACC,yBAAyB,EAAE,IAAI,CAAC;EAE/F,MAAMQ,gBAAgB,GAAGV,MAAM,CAACS,SAAS,CACvCV,YAAY,GAAGE,OAAO,CAACE,2BAA2B,EAClD,IACF,CAAC;EAED,MAAMQ,cAAc,GAAGX,MAAM,CAACY,SAAS,CAACb,YAAY,GAAGE,OAAO,CAACG,0BAA0B,EAAE,IAAI,CAAC;EAEhG,MAAMS,QAAQ,GAAGb,MAAM,CAACA,MAAM,CAACc,KAAK,CAClCf,YAAY,GAAGE,OAAO,CAACM,mBAAmB,EAC1CR,YAAY,GAAGE,OAAO,CAACM,mBAAmB,GAAGI,cAC/C,CAAC;EAED,MAAMI,WAAW,GAAGhB,YAAY,GAAGE,OAAO,CAACM,mBAAmB,GAAGI,cAAc;EAE/E,MAAMK,eAAe,GAAGhB,MAAM,CAACS,SAAS,CACtCV,YAAY,GAAGE,OAAO,CAACK,6BAA6B,EACpD,IACF,CAAC;EAED,IAAIW,cAAc,GAAGD,eAAe;EACpC,IAAIC,cAAc,KAAK,UAAU,EAAE;IACjC,IAAIC,iBAAiB,GAAG,CAAC;IAEzB,IAAIV,cAAc,KAAK,UAAU,EAAE;MACjCU,iBAAiB,IAAI,CAAC;IACxB;IACA,IAAIR,gBAAgB,KAAK,UAAU,EAAE;MACnCQ,iBAAiB,IAAI,CAAC;IACxB;IAGAD,cAAc,GAAGjB,MAAM,CAACS,SAAS,CAACM,WAAW,GAAGG,iBAAiB,EAAE,IAAI,CAAC;EAC1E;EACA,MAAMC,iBAAiB,GAAGF,cAAc;EAExC,OAAO;IACLT,cAAc;IACdE,gBAAgB;IAChBC,cAAc;IACdE,QAAQ;IACRE,WAAW;IACXI;EACF,CAAC;AACH,CAAC;AAACC,OAAA,CAAAtB,oBAAA,GAAAA,oBAAA"}
@@ -4,22 +4,22 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.parseZipLocalFileHeader = void 0;
7
- var parseZipLocalFileHeader = function parseZipLocalFileHeader(headerOffset, buffer) {
8
- var offsets = {
7
+ const parseZipLocalFileHeader = (headerOffset, buffer) => {
8
+ const offsets = {
9
9
  COMPRESSED_SIZE_OFFSET: 18,
10
10
  FILE_NAME_LENGTH_OFFSET: 26,
11
11
  EXTRA_FIELD_LENGTH_OFFSET: 28,
12
12
  FILE_NAME_OFFSET: 30
13
13
  };
14
- var fileNameLength = buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET, true);
15
- var extraFieldLength = buffer.getUint16(headerOffset + offsets.EXTRA_FIELD_LENGTH_OFFSET, true);
16
- var fileDataOffset = headerOffset + offsets.FILE_NAME_OFFSET + fileNameLength + extraFieldLength;
17
- var compressedSize = buffer.getUint32(headerOffset + offsets.COMPRESSED_SIZE_OFFSET, true);
14
+ const fileNameLength = buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET, true);
15
+ const extraFieldLength = buffer.getUint16(headerOffset + offsets.EXTRA_FIELD_LENGTH_OFFSET, true);
16
+ const fileDataOffset = headerOffset + offsets.FILE_NAME_OFFSET + fileNameLength + extraFieldLength;
17
+ const compressedSize = buffer.getUint32(headerOffset + offsets.COMPRESSED_SIZE_OFFSET, true);
18
18
  return {
19
- fileNameLength: fileNameLength,
20
- extraFieldLength: extraFieldLength,
21
- fileDataOffset: fileDataOffset,
22
- compressedSize: compressedSize
19
+ fileNameLength,
20
+ extraFieldLength,
21
+ fileDataOffset,
22
+ compressedSize
23
23
  };
24
24
  };
25
25
  exports.parseZipLocalFileHeader = parseZipLocalFileHeader;
@@ -1 +1 @@
1
- {"version":3,"file":"local-file-header.js","names":["parseZipLocalFileHeader","headerOffset","buffer","offsets","COMPRESSED_SIZE_OFFSET","FILE_NAME_LENGTH_OFFSET","EXTRA_FIELD_LENGTH_OFFSET","FILE_NAME_OFFSET","fileNameLength","getUint16","extraFieldLength","fileDataOffset","compressedSize","getUint32","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/local-file-header.ts"],"sourcesContent":["/**\n * zip local file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipLocalFileHeader = {\n /**\n * File name length\n */\n fileNameLength: number;\n /**\n * Extra field length\n */\n extraFieldLength: number;\n /**\n * Offset of the file data\n */\n fileDataOffset: number;\n /**\n * Compressed size\n */\n compressedSize: number;\n};\n\n/**\n * Parses local 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 parseZipLocalFileHeader = (\n headerOffset: number,\n buffer: DataView\n): ZipLocalFileHeader => {\n const offsets = {\n COMPRESSED_SIZE_OFFSET: 18,\n FILE_NAME_LENGTH_OFFSET: 26,\n EXTRA_FIELD_LENGTH_OFFSET: 28,\n FILE_NAME_OFFSET: 30\n };\n\n const fileNameLength = buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET, true);\n\n const extraFieldLength = buffer.getUint16(headerOffset + offsets.EXTRA_FIELD_LENGTH_OFFSET, true);\n\n const fileDataOffset =\n headerOffset + offsets.FILE_NAME_OFFSET + fileNameLength + extraFieldLength;\n\n const compressedSize = buffer.getUint32(headerOffset + offsets.COMPRESSED_SIZE_OFFSET, true);\n\n return {\n fileNameLength,\n extraFieldLength,\n fileDataOffset,\n compressedSize\n };\n};\n"],"mappings":";;;;;;AA6BO,IAAMA,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAClCC,YAAoB,EACpBC,MAAgB,EACO;EACvB,IAAMC,OAAO,GAAG;IACdC,sBAAsB,EAAE,EAAE;IAC1BC,uBAAuB,EAAE,EAAE;IAC3BC,yBAAyB,EAAE,EAAE;IAC7BC,gBAAgB,EAAE;EACpB,CAAC;EAED,IAAMC,cAAc,GAAGN,MAAM,CAACO,SAAS,CAACR,YAAY,GAAGE,OAAO,CAACE,uBAAuB,EAAE,IAAI,CAAC;EAE7F,IAAMK,gBAAgB,GAAGR,MAAM,CAACO,SAAS,CAACR,YAAY,GAAGE,OAAO,CAACG,yBAAyB,EAAE,IAAI,CAAC;EAEjG,IAAMK,cAAc,GAClBV,YAAY,GAAGE,OAAO,CAACI,gBAAgB,GAAGC,cAAc,GAAGE,gBAAgB;EAE7E,IAAME,cAAc,GAAGV,MAAM,CAACW,SAAS,CAACZ,YAAY,GAAGE,OAAO,CAACC,sBAAsB,EAAE,IAAI,CAAC;EAE5F,OAAO;IACLI,cAAc,EAAdA,cAAc;IACdE,gBAAgB,EAAhBA,gBAAgB;IAChBC,cAAc,EAAdA,cAAc;IACdC,cAAc,EAAdA;EACF,CAAC;AACH,CAAC;AAACE,OAAA,CAAAd,uBAAA,GAAAA,uBAAA"}
1
+ {"version":3,"file":"local-file-header.js","names":["parseZipLocalFileHeader","headerOffset","buffer","offsets","COMPRESSED_SIZE_OFFSET","FILE_NAME_LENGTH_OFFSET","EXTRA_FIELD_LENGTH_OFFSET","FILE_NAME_OFFSET","fileNameLength","getUint16","extraFieldLength","fileDataOffset","compressedSize","getUint32","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/local-file-header.ts"],"sourcesContent":["/**\n * zip local file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipLocalFileHeader = {\n /**\n * File name length\n */\n fileNameLength: number;\n /**\n * Extra field length\n */\n extraFieldLength: number;\n /**\n * Offset of the file data\n */\n fileDataOffset: number;\n /**\n * Compressed size\n */\n compressedSize: number;\n};\n\n/**\n * Parses local 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 parseZipLocalFileHeader = (\n headerOffset: number,\n buffer: DataView\n): ZipLocalFileHeader => {\n const offsets = {\n COMPRESSED_SIZE_OFFSET: 18,\n FILE_NAME_LENGTH_OFFSET: 26,\n EXTRA_FIELD_LENGTH_OFFSET: 28,\n FILE_NAME_OFFSET: 30\n };\n\n const fileNameLength = buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET, true);\n\n const extraFieldLength = buffer.getUint16(headerOffset + offsets.EXTRA_FIELD_LENGTH_OFFSET, true);\n\n const fileDataOffset =\n headerOffset + offsets.FILE_NAME_OFFSET + fileNameLength + extraFieldLength;\n\n const compressedSize = buffer.getUint32(headerOffset + offsets.COMPRESSED_SIZE_OFFSET, true);\n\n return {\n fileNameLength,\n extraFieldLength,\n fileDataOffset,\n compressedSize\n };\n};\n"],"mappings":";;;;;;AA6BO,MAAMA,uBAAuB,GAAGA,CACrCC,YAAoB,EACpBC,MAAgB,KACO;EACvB,MAAMC,OAAO,GAAG;IACdC,sBAAsB,EAAE,EAAE;IAC1BC,uBAAuB,EAAE,EAAE;IAC3BC,yBAAyB,EAAE,EAAE;IAC7BC,gBAAgB,EAAE;EACpB,CAAC;EAED,MAAMC,cAAc,GAAGN,MAAM,CAACO,SAAS,CAACR,YAAY,GAAGE,OAAO,CAACE,uBAAuB,EAAE,IAAI,CAAC;EAE7F,MAAMK,gBAAgB,GAAGR,MAAM,CAACO,SAAS,CAACR,YAAY,GAAGE,OAAO,CAACG,yBAAyB,EAAE,IAAI,CAAC;EAEjG,MAAMK,cAAc,GAClBV,YAAY,GAAGE,OAAO,CAACI,gBAAgB,GAAGC,cAAc,GAAGE,gBAAgB;EAE7E,MAAME,cAAc,GAAGV,MAAM,CAACW,SAAS,CAACZ,YAAY,GAAGE,OAAO,CAACC,sBAAsB,EAAE,IAAI,CAAC;EAE5F,OAAO;IACLI,cAAc;IACdE,gBAAgB;IAChBC,cAAc;IACdC;EACF,CAAC;AACH,CAAC;AAACE,OAAA,CAAAd,uBAAA,GAAAA,uBAAA"}
@@ -1,17 +1,15 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.convertI3SObbToMbs = convertI3SObbToMbs;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
7
  var _culling = require("@math.gl/culling");
10
8
  var _geospatial = require("@math.gl/geospatial");
11
9
  function convertI3SObbToMbs(obb) {
12
- var halfSize = obb.halfSize;
13
- var centerCartesian = _geospatial.Ellipsoid.WGS84.cartographicToCartesian(obb.center);
14
- var sphere = new _culling.BoundingSphere().fromCornerPoints([centerCartesian[0] - halfSize[0], centerCartesian[1] - halfSize[1], centerCartesian[2] - halfSize[2]], [centerCartesian[0] + halfSize[0], centerCartesian[1] + halfSize[1], centerCartesian[2] + halfSize[2]]);
15
- return [].concat((0, _toConsumableArray2.default)(obb.center), [sphere.radius]);
10
+ const halfSize = obb.halfSize;
11
+ const centerCartesian = _geospatial.Ellipsoid.WGS84.cartographicToCartesian(obb.center);
12
+ const sphere = new _culling.BoundingSphere().fromCornerPoints([centerCartesian[0] - halfSize[0], centerCartesian[1] - halfSize[1], centerCartesian[2] - halfSize[2]], [centerCartesian[0] + halfSize[0], centerCartesian[1] + halfSize[1], centerCartesian[2] + halfSize[2]]);
13
+ return [...obb.center, sphere.radius];
16
14
  }
17
15
  //# sourceMappingURL=convert-i3s-obb-to-mbs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"convert-i3s-obb-to-mbs.js","names":["_culling","require","_geospatial","convertI3SObbToMbs","obb","halfSize","centerCartesian","Ellipsoid","WGS84","cartographicToCartesian","center","sphere","BoundingSphere","fromCornerPoints","concat","_toConsumableArray2","default","radius"],"sources":["../../../../src/lib/utils/convert-i3s-obb-to-mbs.ts"],"sourcesContent":["import {BoundingSphere} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\n\nexport function convertI3SObbToMbs(obb) {\n const halfSize = obb.halfSize;\n const centerCartesian = Ellipsoid.WGS84.cartographicToCartesian(obb.center);\n const sphere = new BoundingSphere().fromCornerPoints(\n [\n centerCartesian[0] - halfSize[0],\n centerCartesian[1] - halfSize[1],\n centerCartesian[2] - halfSize[2]\n ],\n [\n centerCartesian[0] + halfSize[0],\n centerCartesian[1] + halfSize[1],\n centerCartesian[2] + halfSize[2]\n ]\n );\n return [...obb.center, sphere.radius];\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEO,SAASE,kBAAkBA,CAACC,GAAG,EAAE;EACtC,IAAMC,QAAQ,GAAGD,GAAG,CAACC,QAAQ;EAC7B,IAAMC,eAAe,GAAGC,qBAAS,CAACC,KAAK,CAACC,uBAAuB,CAACL,GAAG,CAACM,MAAM,CAAC;EAC3E,IAAMC,MAAM,GAAG,IAAIC,uBAAc,CAAC,CAAC,CAACC,gBAAgB,CAClD,CACEP,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,CACjC,EACD,CACEC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,CAEpC,CAAC;EACD,UAAAS,MAAA,KAAAC,mBAAA,CAAAC,OAAA,EAAWZ,GAAG,CAACM,MAAM,IAAEC,MAAM,CAACM,MAAM;AACtC"}
1
+ {"version":3,"file":"convert-i3s-obb-to-mbs.js","names":["_culling","require","_geospatial","convertI3SObbToMbs","obb","halfSize","centerCartesian","Ellipsoid","WGS84","cartographicToCartesian","center","sphere","BoundingSphere","fromCornerPoints","radius"],"sources":["../../../../src/lib/utils/convert-i3s-obb-to-mbs.ts"],"sourcesContent":["import {BoundingSphere} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\n\nexport function convertI3SObbToMbs(obb) {\n const halfSize = obb.halfSize;\n const centerCartesian = Ellipsoid.WGS84.cartographicToCartesian(obb.center);\n const sphere = new BoundingSphere().fromCornerPoints(\n [\n centerCartesian[0] - halfSize[0],\n centerCartesian[1] - halfSize[1],\n centerCartesian[2] - halfSize[2]\n ],\n [\n centerCartesian[0] + halfSize[0],\n centerCartesian[1] + halfSize[1],\n centerCartesian[2] + halfSize[2]\n ]\n );\n return [...obb.center, sphere.radius];\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEO,SAASE,kBAAkBA,CAACC,GAAG,EAAE;EACtC,MAAMC,QAAQ,GAAGD,GAAG,CAACC,QAAQ;EAC7B,MAAMC,eAAe,GAAGC,qBAAS,CAACC,KAAK,CAACC,uBAAuB,CAACL,GAAG,CAACM,MAAM,CAAC;EAC3E,MAAMC,MAAM,GAAG,IAAIC,uBAAc,CAAC,CAAC,CAACC,gBAAgB,CAClD,CACEP,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,CACjC,EACD,CACEC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,CAEpC,CAAC;EACD,OAAO,CAAC,GAAGD,GAAG,CAACM,MAAM,EAAEC,MAAM,CAACG,MAAM,CAAC;AACvC"}
@@ -1,159 +1,98 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.customizeColors = customizeColors;
8
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
7
  var _core = require("@loaders.gl/core");
11
8
  var _i3sAttributeLoader = require("../../i3s-attribute-loader");
12
9
  var _urlUtils = require("../utils/url-utils");
13
- function customizeColors(_x, _x2, _x3, _x4, _x5) {
14
- return _customizeColors.apply(this, arguments);
15
- }
16
- function _customizeColors() {
17
- _customizeColors = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(colors, featureIds, tileOptions, tilesetOptions, options) {
18
- var _options$i3s2;
19
- var colorizeAttributeField, colorizeAttributeData, objectIdField, objectIdAttributeData, attributeValuesMap, i, _i, color;
20
- return _regenerator.default.wrap(function _callee$(_context) {
21
- while (1) switch (_context.prev = _context.next) {
22
- case 0:
23
- if (options !== null && options !== void 0 && (_options$i3s2 = options.i3s) !== null && _options$i3s2 !== void 0 && _options$i3s2.colorsByAttribute) {
24
- _context.next = 2;
25
- break;
26
- }
27
- return _context.abrupt("return", colors);
28
- case 2:
29
- colorizeAttributeField = tilesetOptions.fields.find(function (_ref3) {
30
- var _options$i3s3, _options$i3s3$colorsB;
31
- var name = _ref3.name;
32
- return name === (options === null || options === void 0 ? void 0 : (_options$i3s3 = options.i3s) === null || _options$i3s3 === void 0 ? void 0 : (_options$i3s3$colorsB = _options$i3s3.colorsByAttribute) === null || _options$i3s3$colorsB === void 0 ? void 0 : _options$i3s3$colorsB.attributeName);
33
- });
34
- if (!(!colorizeAttributeField || !['esriFieldTypeDouble', 'esriFieldTypeInteger', 'esriFieldTypeSmallInteger'].includes(colorizeAttributeField.type))) {
35
- _context.next = 5;
36
- break;
37
- }
38
- return _context.abrupt("return", colors);
39
- case 5:
40
- _context.next = 7;
41
- return loadFeatureAttributeData(colorizeAttributeField.name, tileOptions, tilesetOptions, options);
42
- case 7:
43
- colorizeAttributeData = _context.sent;
44
- if (colorizeAttributeData) {
45
- _context.next = 10;
46
- break;
47
- }
48
- return _context.abrupt("return", colors);
49
- case 10:
50
- objectIdField = tilesetOptions.fields.find(function (_ref4) {
51
- var type = _ref4.type;
52
- return type === 'esriFieldTypeOID';
53
- });
54
- if (objectIdField) {
55
- _context.next = 13;
56
- break;
57
- }
58
- return _context.abrupt("return", colors);
59
- case 13:
60
- _context.next = 15;
61
- return loadFeatureAttributeData(objectIdField.name, tileOptions, tilesetOptions, options);
62
- case 15:
63
- objectIdAttributeData = _context.sent;
64
- if (objectIdAttributeData) {
65
- _context.next = 18;
66
- break;
67
- }
68
- return _context.abrupt("return", colors);
69
- case 18:
70
- attributeValuesMap = {};
71
- for (i = 0; i < objectIdAttributeData[objectIdField.name].length; i++) {
72
- attributeValuesMap[objectIdAttributeData[objectIdField.name][i]] = calculateColorForAttribute(colorizeAttributeData[colorizeAttributeField.name][i], options);
73
- }
74
- _i = 0;
75
- case 21:
76
- if (!(_i < featureIds.value.length)) {
77
- _context.next = 29;
78
- break;
79
- }
80
- color = attributeValuesMap[featureIds.value[_i]];
81
- if (color) {
82
- _context.next = 25;
83
- break;
84
- }
85
- return _context.abrupt("continue", 26);
86
- case 25:
87
- colors.value.set(color, _i * 4);
88
- case 26:
89
- _i++;
90
- _context.next = 21;
91
- break;
92
- case 29:
93
- return _context.abrupt("return", colors);
94
- case 30:
95
- case "end":
96
- return _context.stop();
97
- }
98
- }, _callee);
99
- }));
100
- return _customizeColors.apply(this, arguments);
101
- }
102
- function calculateColorForAttribute(attributeValue, options) {
10
+ async function customizeColors(colors, featureIds, tileOptions, tilesetOptions, options) {
103
11
  var _options$i3s;
104
12
  if (!(options !== null && options !== void 0 && (_options$i3s = options.i3s) !== null && _options$i3s !== void 0 && _options$i3s.colorsByAttribute)) {
13
+ return colors;
14
+ }
15
+ const colorizeAttributeField = tilesetOptions.fields.find(_ref => {
16
+ var _options$i3s2, _options$i3s2$colorsB;
17
+ let {
18
+ name
19
+ } = _ref;
20
+ return name === (options === null || options === void 0 ? void 0 : (_options$i3s2 = options.i3s) === null || _options$i3s2 === void 0 ? void 0 : (_options$i3s2$colorsB = _options$i3s2.colorsByAttribute) === null || _options$i3s2$colorsB === void 0 ? void 0 : _options$i3s2$colorsB.attributeName);
21
+ });
22
+ if (!colorizeAttributeField || !['esriFieldTypeDouble', 'esriFieldTypeInteger', 'esriFieldTypeSmallInteger'].includes(colorizeAttributeField.type)) {
23
+ return colors;
24
+ }
25
+ const colorizeAttributeData = await loadFeatureAttributeData(colorizeAttributeField.name, tileOptions, tilesetOptions, options);
26
+ if (!colorizeAttributeData) {
27
+ return colors;
28
+ }
29
+ const objectIdField = tilesetOptions.fields.find(_ref2 => {
30
+ let {
31
+ type
32
+ } = _ref2;
33
+ return type === 'esriFieldTypeOID';
34
+ });
35
+ if (!objectIdField) {
36
+ return colors;
37
+ }
38
+ const objectIdAttributeData = await loadFeatureAttributeData(objectIdField.name, tileOptions, tilesetOptions, options);
39
+ if (!objectIdAttributeData) {
40
+ return colors;
41
+ }
42
+ const attributeValuesMap = {};
43
+ for (let i = 0; i < objectIdAttributeData[objectIdField.name].length; i++) {
44
+ attributeValuesMap[objectIdAttributeData[objectIdField.name][i]] = calculateColorForAttribute(colorizeAttributeData[colorizeAttributeField.name][i], options);
45
+ }
46
+ for (let i = 0; i < featureIds.value.length; i++) {
47
+ const color = attributeValuesMap[featureIds.value[i]];
48
+ if (!color) {
49
+ continue;
50
+ }
51
+ colors.value.set(color, i * 4);
52
+ }
53
+ return colors;
54
+ }
55
+ function calculateColorForAttribute(attributeValue, options) {
56
+ var _options$i3s3;
57
+ if (!(options !== null && options !== void 0 && (_options$i3s3 = options.i3s) !== null && _options$i3s3 !== void 0 && _options$i3s3.colorsByAttribute)) {
105
58
  return [255, 255, 255, 255];
106
59
  }
107
- var _options$i3s$colorsBy = options.i3s.colorsByAttribute,
108
- minValue = _options$i3s$colorsBy.minValue,
109
- maxValue = _options$i3s$colorsBy.maxValue,
110
- minColor = _options$i3s$colorsBy.minColor,
111
- maxColor = _options$i3s$colorsBy.maxColor;
112
- var rate = (attributeValue - minValue) / (maxValue - minValue);
113
- var color = [255, 255, 255, 255];
114
- for (var i = 0; i < minColor.length; i++) {
60
+ const {
61
+ minValue,
62
+ maxValue,
63
+ minColor,
64
+ maxColor
65
+ } = options.i3s.colorsByAttribute;
66
+ const rate = (attributeValue - minValue) / (maxValue - minValue);
67
+ const color = [255, 255, 255, 255];
68
+ for (let i = 0; i < minColor.length; i++) {
115
69
  color[i] = Math.round((maxColor[i] - minColor[i]) * rate + minColor[i]);
116
70
  }
117
71
  return color;
118
72
  }
119
- function loadFeatureAttributeData(_x6, _x7, _x8, _x9) {
120
- return _loadFeatureAttributeData.apply(this, arguments);
121
- }
122
- function _loadFeatureAttributeData() {
123
- _loadFeatureAttributeData = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(attributeName, _ref, _ref2, options) {
124
- var _options$i3s4;
125
- var attributeUrls, attributeStorageInfo, attributeIndex, objectIdAttributeUrl, attributeType, objectIdAttributeData;
126
- return _regenerator.default.wrap(function _callee2$(_context2) {
127
- while (1) switch (_context2.prev = _context2.next) {
128
- case 0:
129
- attributeUrls = _ref.attributeUrls;
130
- attributeStorageInfo = _ref2.attributeStorageInfo;
131
- attributeIndex = attributeStorageInfo.findIndex(function (_ref5) {
132
- var name = _ref5.name;
133
- return attributeName === name;
134
- });
135
- if (!(attributeIndex === -1)) {
136
- _context2.next = 5;
137
- break;
138
- }
139
- return _context2.abrupt("return", null);
140
- case 5:
141
- objectIdAttributeUrl = (0, _urlUtils.getUrlWithToken)(attributeUrls[attributeIndex], options === null || options === void 0 ? void 0 : (_options$i3s4 = options.i3s) === null || _options$i3s4 === void 0 ? void 0 : _options$i3s4.token);
142
- attributeType = (0, _i3sAttributeLoader.getAttributeValueType)(attributeStorageInfo[attributeIndex]);
143
- _context2.next = 9;
144
- return (0, _core.load)(objectIdAttributeUrl, _i3sAttributeLoader.I3SAttributeLoader, {
145
- attributeName: attributeName,
146
- attributeType: attributeType
147
- });
148
- case 9:
149
- objectIdAttributeData = _context2.sent;
150
- return _context2.abrupt("return", objectIdAttributeData);
151
- case 11:
152
- case "end":
153
- return _context2.stop();
154
- }
155
- }, _callee2);
156
- }));
157
- return _loadFeatureAttributeData.apply(this, arguments);
73
+ async function loadFeatureAttributeData(attributeName, _ref3, _ref4, options) {
74
+ var _options$i3s4;
75
+ let {
76
+ attributeUrls
77
+ } = _ref3;
78
+ let {
79
+ attributeStorageInfo
80
+ } = _ref4;
81
+ const attributeIndex = attributeStorageInfo.findIndex(_ref5 => {
82
+ let {
83
+ name
84
+ } = _ref5;
85
+ return attributeName === name;
86
+ });
87
+ if (attributeIndex === -1) {
88
+ return null;
89
+ }
90
+ const objectIdAttributeUrl = (0, _urlUtils.getUrlWithToken)(attributeUrls[attributeIndex], options === null || options === void 0 ? void 0 : (_options$i3s4 = options.i3s) === null || _options$i3s4 === void 0 ? void 0 : _options$i3s4.token);
91
+ const attributeType = (0, _i3sAttributeLoader.getAttributeValueType)(attributeStorageInfo[attributeIndex]);
92
+ const objectIdAttributeData = await (0, _core.load)(objectIdAttributeUrl, _i3sAttributeLoader.I3SAttributeLoader, {
93
+ attributeName,
94
+ attributeType
95
+ });
96
+ return objectIdAttributeData;
158
97
  }
159
98
  //# sourceMappingURL=customizeColors.js.map