@loaders.gl/i3s 4.0.0-alpha.10 → 4.0.0-alpha.12

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 (72) hide show
  1. package/dist/dist.min.js +4500 -261
  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 +14 -0
  10. package/dist/es5/index.js.map +1 -1
  11. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +25 -12
  12. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  13. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +62 -33
  14. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  15. package/dist/es5/lib/parsers/parse-zip/buffer-file-provider.js +46 -0
  16. package/dist/es5/lib/parsers/parse-zip/buffer-file-provider.js.map +1 -0
  17. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +75 -35
  18. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  19. package/dist/es5/lib/parsers/parse-zip/file-provider.js +2 -0
  20. package/dist/es5/lib/parsers/parse-zip/file-provider.js.map +1 -0
  21. package/dist/es5/lib/parsers/parse-zip/local-file-header.js +63 -17
  22. package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  23. package/dist/esm/arcgis-webscene-loader.js +1 -1
  24. package/dist/esm/i3s-attribute-loader.js +1 -1
  25. package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
  26. package/dist/esm/i3s-content-loader.js +1 -1
  27. package/dist/esm/i3s-loader.js +1 -1
  28. package/dist/esm/i3s-node-page-loader.js +1 -1
  29. package/dist/esm/i3s-slpk-loader.js +1 -1
  30. package/dist/esm/index.js +2 -0
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +8 -4
  33. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  34. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +11 -12
  35. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  36. package/dist/esm/lib/parsers/parse-zip/buffer-file-provider.js +23 -0
  37. package/dist/esm/lib/parsers/parse-zip/buffer-file-provider.js.map +1 -0
  38. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js +7 -7
  39. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  40. package/dist/esm/lib/parsers/parse-zip/file-provider.js +2 -0
  41. package/dist/esm/lib/parsers/parse-zip/file-provider.js.map +1 -0
  42. package/dist/esm/lib/parsers/parse-zip/local-file-header.js +16 -10
  43. package/dist/esm/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  44. package/dist/i3s-content-worker-node.js +2 -2
  45. package/dist/i3s-content-worker.js +8 -8
  46. package/dist/index.d.ts +2 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +3 -1
  49. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  50. package/dist/lib/parsers/parse-slpk/parse-slpk.js +8 -4
  51. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  52. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +12 -12
  53. package/dist/lib/parsers/parse-zip/buffer-file-provider.d.ts +37 -0
  54. package/dist/lib/parsers/parse-zip/buffer-file-provider.d.ts.map +1 -0
  55. package/dist/lib/parsers/parse-zip/buffer-file-provider.js +47 -0
  56. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts +9 -20
  57. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts.map +1 -1
  58. package/dist/lib/parsers/parse-zip/cd-file-header.js +7 -7
  59. package/dist/lib/parsers/parse-zip/file-provider.d.ts +31 -0
  60. package/dist/lib/parsers/parse-zip/file-provider.d.ts.map +1 -0
  61. package/dist/lib/parsers/parse-zip/file-provider.js +2 -0
  62. package/dist/lib/parsers/parse-zip/local-file-header.d.ts +8 -13
  63. package/dist/lib/parsers/parse-zip/local-file-header.d.ts.map +1 -1
  64. package/dist/lib/parsers/parse-zip/local-file-header.js +16 -10
  65. package/package.json +9 -9
  66. package/src/index.ts +2 -0
  67. package/src/lib/parsers/parse-slpk/parse-slpk.ts +12 -4
  68. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +14 -13
  69. package/src/lib/parsers/parse-zip/buffer-file-provider.ts +55 -0
  70. package/src/lib/parsers/parse-zip/cd-file-header.ts +25 -32
  71. package/src/lib/parsers/parse-zip/file-provider.ts +34 -0
  72. package/src/lib/parsers/parse-zip/local-file-header.ts +33 -24
@@ -8,7 +8,7 @@ exports.ArcGisWebSceneLoader = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _parseArcgisWebscene = require("./lib/parsers/parse-arcgis-webscene");
11
- var VERSION = typeof "4.0.0-alpha.10" !== 'undefined' ? "4.0.0-alpha.10" : 'beta';
11
+ var VERSION = typeof "4.0.0-alpha.12" !== 'undefined' ? "4.0.0-alpha.12" : 'beta';
12
12
  var ArcGisWebSceneLoader = {
13
13
  name: 'ArcGIS Web Scene Loader',
14
14
  id: 'arcgis-web-scene',
@@ -15,7 +15,7 @@ var _parseI3sAttribute = require("./lib/parsers/parse-i3s-attribute");
15
15
  var _urlUtils = require("./lib/utils/url-utils");
16
16
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
17
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
- var VERSION = typeof "4.0.0-alpha.10" !== 'undefined' ? "4.0.0-alpha.10" : 'latest';
18
+ var VERSION = typeof "4.0.0-alpha.12" !== 'undefined' ? "4.0.0-alpha.12" : 'latest';
19
19
  var EMPTY_VALUE = '';
20
20
  var REJECTED_STATUS = 'rejected';
21
21
  var I3SAttributeLoader = {
@@ -8,7 +8,7 @@ exports.I3SBuildingSceneLayerLoader = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _parseI3sBuildingSceneLayer = require("./lib/parsers/parse-i3s-building-scene-layer");
11
- var VERSION = typeof "4.0.0-alpha.10" !== 'undefined' ? "4.0.0-alpha.10" : 'beta';
11
+ var VERSION = typeof "4.0.0-alpha.12" !== 'undefined' ? "4.0.0-alpha.12" : 'beta';
12
12
  var I3SBuildingSceneLayerLoader = {
13
13
  name: 'I3S Building Scene Layer',
14
14
  id: 'i3s-building-scene-layer',
@@ -8,7 +8,7 @@ exports.I3SContentLoader = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _parseI3sTileContent = require("./lib/parsers/parse-i3s-tile-content");
11
- var VERSION = typeof "4.0.0-alpha.10" !== 'undefined' ? "4.0.0-alpha.10" : 'beta';
11
+ var VERSION = typeof "4.0.0-alpha.12" !== 'undefined' ? "4.0.0-alpha.12" : 'beta';
12
12
  var I3SContentLoader = {
13
13
  name: 'I3S Content (Indexed Scene Layers)',
14
14
  id: 'i3s-content',
@@ -12,7 +12,7 @@ var _core = require("@loaders.gl/core");
12
12
  var _i3sContentLoader = require("./i3s-content-loader");
13
13
  var _parseI3s = require("./lib/parsers/parse-i3s");
14
14
  var _constants = require("./lib/parsers/constants");
15
- var VERSION = typeof "4.0.0-alpha.10" !== 'undefined' ? "4.0.0-alpha.10" : 'latest';
15
+ var VERSION = typeof "4.0.0-alpha.12" !== 'undefined' ? "4.0.0-alpha.12" : 'latest';
16
16
  var TILESET_REGEX = /layers\/[0-9]+$/;
17
17
  var TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
18
18
  var SLPK_HEX = '504b0304';
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.I3SNodePageLoader = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
- var VERSION = typeof "4.0.0-alpha.10" !== 'undefined' ? "4.0.0-alpha.10" : 'latest';
10
+ var VERSION = typeof "4.0.0-alpha.12" !== 'undefined' ? "4.0.0-alpha.12" : 'latest';
11
11
  function parseNodePage(_x, _x2) {
12
12
  return _parseNodePage.apply(this, arguments);
13
13
  }
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.SLPKLoader = void 0;
7
7
  var _parseSlpk = require("./lib/parsers/parse-slpk/parse-slpk");
8
- var VERSION = typeof "4.0.0-alpha.10" !== 'undefined' ? "4.0.0-alpha.10" : 'latest';
8
+ var VERSION = typeof "4.0.0-alpha.12" !== 'undefined' ? "4.0.0-alpha.12" : 'latest';
9
9
  var SLPKLoader = {
10
10
  name: 'I3S SLPK (Scene Layer Package)',
11
11
  id: 'slpk',
package/dist/es5/index.js CHANGED
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "COORDINATE_SYSTEM", {
15
15
  return _constants.COORDINATE_SYSTEM;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "FileProvider", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _fileProvider.FileProvider;
22
+ }
23
+ });
18
24
  Object.defineProperty(exports, "I3SAttributeLoader", {
19
25
  enumerable: true,
20
26
  get: function get() {
@@ -57,6 +63,12 @@ Object.defineProperty(exports, "loadFeatureAttributes", {
57
63
  return _i3sAttributeLoader.loadFeatureAttributes;
58
64
  }
59
65
  });
66
+ Object.defineProperty(exports, "parseZipLocalFileHeader", {
67
+ enumerable: true,
68
+ get: function get() {
69
+ return _localFileHeader.parseZipLocalFileHeader;
70
+ }
71
+ });
60
72
  var _constants = require("./lib/parsers/constants");
61
73
  var _i3sLoader = require("./i3s-loader");
62
74
  var _i3sSlpkLoader = require("./i3s-slpk-loader");
@@ -65,4 +77,6 @@ var _i3sAttributeLoader = require("./i3s-attribute-loader");
65
77
  var _i3sBuildingSceneLayerLoader = require("./i3s-building-scene-layer-loader");
66
78
  var _i3sNodePageLoader = require("./i3s-node-page-loader");
67
79
  var _arcgisWebsceneLoader = require("./arcgis-webscene-loader");
80
+ var _localFileHeader = require("./lib/parsers/parse-zip/local-file-header");
81
+ var _fileProvider = require("./lib/parsers/parse-zip/file-provider");
68
82
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_constants","require","_i3sLoader","_i3sSlpkLoader","_i3sContentLoader","_i3sAttributeLoader","_i3sBuildingSceneLayerLoader","_i3sNodePageLoader","_arcgisWebsceneLoader"],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nexport type {\n BoundingVolumes,\n Mbs,\n Obb,\n SceneLayer3D,\n AttributeStorageInfo,\n Field,\n ESRIField,\n PopupInfo,\n Node3DIndexDocument,\n LodSelection,\n NodeReference,\n Resource,\n MaxScreenThresholdSQ,\n NodeInPage,\n SharedResources,\n Attribute,\n Extent,\n FeatureAttribute,\n FieldInfo,\n I3SMaterialDefinition,\n TextureDefinitionInfo,\n MaterialDefinitionInfo,\n FullExtent,\n StatisticsInfo,\n StatsInfo,\n Histogram,\n ValueCount,\n BuildingSceneSublayer,\n DATA_TYPE,\n OperationalLayer,\n TextureSetDefinitionFormats\n} from './types';\n\nexport {COORDINATE_SYSTEM} from './lib/parsers/constants';\n\nexport {I3SLoader} from './i3s-loader';\nexport {SLPKLoader} from './i3s-slpk-loader';\nexport {I3SContentLoader} from './i3s-content-loader';\nexport {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader';\nexport {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';\nexport {I3SNodePageLoader} from './i3s-node-page-loader';\nexport {ArcGisWebSceneLoader} from './arcgis-webscene-loader';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,4BAAA,GAAAL,OAAA;AACA,IAAAM,kBAAA,GAAAN,OAAA;AACA,IAAAO,qBAAA,GAAAP,OAAA"}
1
+ {"version":3,"file":"index.js","names":["_constants","require","_i3sLoader","_i3sSlpkLoader","_i3sContentLoader","_i3sAttributeLoader","_i3sBuildingSceneLayerLoader","_i3sNodePageLoader","_arcgisWebsceneLoader","_localFileHeader","_fileProvider"],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nexport type {\n BoundingVolumes,\n Mbs,\n Obb,\n SceneLayer3D,\n AttributeStorageInfo,\n Field,\n ESRIField,\n PopupInfo,\n Node3DIndexDocument,\n LodSelection,\n NodeReference,\n Resource,\n MaxScreenThresholdSQ,\n NodeInPage,\n SharedResources,\n Attribute,\n Extent,\n FeatureAttribute,\n FieldInfo,\n I3SMaterialDefinition,\n TextureDefinitionInfo,\n MaterialDefinitionInfo,\n FullExtent,\n StatisticsInfo,\n StatsInfo,\n Histogram,\n ValueCount,\n BuildingSceneSublayer,\n DATA_TYPE,\n OperationalLayer,\n TextureSetDefinitionFormats\n} from './types';\n\nexport {COORDINATE_SYSTEM} from './lib/parsers/constants';\n\nexport {I3SLoader} from './i3s-loader';\nexport {SLPKLoader} from './i3s-slpk-loader';\nexport {I3SContentLoader} from './i3s-content-loader';\nexport {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader';\nexport {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';\nexport {I3SNodePageLoader} from './i3s-node-page-loader';\nexport {ArcGisWebSceneLoader} from './arcgis-webscene-loader';\nexport {parseZipLocalFileHeader} from './lib/parsers/parse-zip/local-file-header';\nexport {FileProvider} from './lib/parsers/parse-zip/file-provider';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,4BAAA,GAAAL,OAAA;AACA,IAAAM,kBAAA,GAAAN,OAAA;AACA,IAAAO,qBAAA,GAAAP,OAAA;AACA,IAAAQ,gBAAA,GAAAR,OAAA;AACA,IAAAS,aAAA,GAAAT,OAAA"}
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.parseSLPK = parseSLPK;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _bufferFileProvider = require("../parse-zip/buffer-file-provider");
10
11
  var _cdFileHeader = require("../parse-zip/cd-file-header");
11
12
  var _localFileHeader = require("../parse-zip/local-file-header");
12
13
  var _slpkArchieve = require("./slpk-archieve");
@@ -25,8 +26,8 @@ function _parseSLPK() {
25
26
  searchWindow,
26
27
  hashCDOffset,
27
28
  i,
29
+ fileProvider,
28
30
  cdFileHeader,
29
- textDecoder,
30
31
  localFileHeader,
31
32
  fileDataOffset,
32
33
  hashFile,
@@ -62,28 +63,40 @@ function _parseSLPK() {
62
63
  _context.next = 6;
63
64
  break;
64
65
  case 17:
65
- cdFileHeader = (0, _cdFileHeader.parseZipCDFileHeader)(hashCDOffset, archive);
66
- textDecoder = new TextDecoder();
67
- if (!(textDecoder.decode(cdFileHeader.fileName) !== '@specialIndexFileHASH128@')) {
68
- _context.next = 21;
66
+ fileProvider = new _bufferFileProvider.DataViewFileProvider(archive);
67
+ _context.next = 20;
68
+ return (0, _cdFileHeader.parseZipCDFileHeader)(hashCDOffset, fileProvider);
69
+ case 20:
70
+ cdFileHeader = _context.sent;
71
+ if (!(cdFileHeader.fileName !== '@specialIndexFileHASH128@')) {
72
+ _context.next = 23;
69
73
  break;
70
74
  }
71
75
  throw new Error('No hash file in slpk');
72
- case 21:
73
- localFileHeader = (0, _localFileHeader.parseZipLocalFileHeader)(cdFileHeader.localHeaderOffset, archive);
76
+ case 23:
77
+ _context.next = 25;
78
+ return (0, _localFileHeader.parseZipLocalFileHeader)(cdFileHeader.localHeaderOffset, fileProvider);
79
+ case 25:
80
+ localFileHeader = _context.sent;
81
+ if (localFileHeader) {
82
+ _context.next = 28;
83
+ break;
84
+ }
85
+ throw new Error('No hash file in slpk');
86
+ case 28:
74
87
  fileDataOffset = localFileHeader.fileDataOffset;
75
88
  hashFile = archive.buffer.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
76
89
  if (hashFile) {
77
- _context.next = 26;
90
+ _context.next = 32;
78
91
  break;
79
92
  }
80
93
  throw new Error('No hash file in slpk');
81
- case 26:
82
- _context.next = 28;
94
+ case 32:
95
+ _context.next = 34;
83
96
  return new _slpkArchieve.SLPKArchive(data, hashFile).getFile((_options$slpk$path = (_options$slpk = options.slpk) === null || _options$slpk === void 0 ? void 0 : _options$slpk.path) !== null && _options$slpk$path !== void 0 ? _options$slpk$path : '', (_options$slpk2 = options.slpk) === null || _options$slpk2 === void 0 ? void 0 : _options$slpk2.pathMode);
84
- case 28:
97
+ case 34:
85
98
  return _context.abrupt("return", _context.sent);
86
- case 29:
99
+ case 35:
87
100
  case "end":
88
101
  return _context.stop();
89
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-slpk.js","names":["_cdFileHeader","require","_localFileHeader","_slpkArchieve","getByteAt","offset","buffer","getUint8","byteOffset","parseSLPK","_x","_parseSLPK","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","data","_options$slpk$path","_options$slpk","_options$slpk2","options","archive","cdFileHeaderSignature","searchWindow","hashCDOffset","i","cdFileHeader","textDecoder","localFileHeader","fileDataOffset","hashFile","_args","wrap","_callee$","_context","prev","next","length","undefined","DataView","byteLength","every","val","index","abrupt","parseZipCDFileHeader","TextDecoder","decode","fileName","Error","parseZipLocalFileHeader","localHeaderOffset","slice","compressedSize","SLPKArchive","getFile","slpk","path","pathMode","sent","stop"],"sources":["../../../../../src/lib/parsers/parse-slpk/parse-slpk.ts"],"sourcesContent":["import type {SLPKLoaderOptions} from '../../../i3s-slpk-loader';\nimport {parseZipCDFileHeader} from '../parse-zip/cd-file-header';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {SLPKArchive} from './slpk-archieve';\n\n/**\n * Returns one byte from the provided buffer at the provided position\n * @param offset - position where to read\n * @param buffer - buffer to read\n * @returns one byte from the provided buffer at the provided position\n */\nconst getByteAt = (offset: number, buffer: DataView): number => {\n return buffer.getUint8(buffer.byteOffset + offset);\n};\n\nexport async function parseSLPK(data: ArrayBuffer, options: SLPKLoaderOptions = {}) {\n const archive = new DataView(data);\n const cdFileHeaderSignature = [80, 75, 1, 2];\n\n const searchWindow = [\n getByteAt(archive.byteLength - 1, archive),\n getByteAt(archive.byteLength - 2, archive),\n getByteAt(archive.byteLength - 3, archive),\n undefined\n ];\n\n let hashCDOffset = 0;\n\n // looking for the last record in the central directory\n for (let i = archive.byteLength - 4; i > -1; i--) {\n searchWindow[3] = searchWindow[2];\n searchWindow[2] = searchWindow[1];\n searchWindow[1] = searchWindow[0];\n searchWindow[0] = getByteAt(i, archive);\n if (searchWindow.every((val, index) => val === cdFileHeaderSignature[index])) {\n hashCDOffset = i;\n break;\n }\n }\n\n const cdFileHeader = parseZipCDFileHeader(hashCDOffset, archive);\n\n const textDecoder = new TextDecoder();\n if (textDecoder.decode(cdFileHeader.fileName) !== '@specialIndexFileHASH128@') {\n throw new Error('No hash file in slpk');\n }\n\n const localFileHeader = parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, archive);\n\n const fileDataOffset = localFileHeader.fileDataOffset;\n const hashFile = archive.buffer.slice(\n fileDataOffset,\n fileDataOffset + localFileHeader.compressedSize\n );\n\n if (!hashFile) {\n throw new Error('No hash file in slpk');\n }\n\n return await new SLPKArchive(data, hashFile).getFile(\n options.slpk?.path ?? '',\n options.slpk?.pathMode\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-slpk.js","names":["_bufferFileProvider","require","_cdFileHeader","_localFileHeader","_slpkArchieve","getByteAt","offset","buffer","getUint8","byteOffset","parseSLPK","_x","_parseSLPK","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","data","_options$slpk$path","_options$slpk","_options$slpk2","options","archive","cdFileHeaderSignature","searchWindow","hashCDOffset","i","fileProvider","cdFileHeader","localFileHeader","fileDataOffset","hashFile","_args","wrap","_callee$","_context","prev","next","length","undefined","DataView","byteLength","every","val","index","abrupt","DataViewFileProvider","parseZipCDFileHeader","sent","fileName","Error","parseZipLocalFileHeader","localHeaderOffset","slice","compressedSize","SLPKArchive","getFile","slpk","path","pathMode","stop"],"sources":["../../../../../src/lib/parsers/parse-slpk/parse-slpk.ts"],"sourcesContent":["import type {SLPKLoaderOptions} from '../../../i3s-slpk-loader';\nimport {DataViewFileProvider} from '../parse-zip/buffer-file-provider';\nimport {parseZipCDFileHeader} from '../parse-zip/cd-file-header';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {SLPKArchive} from './slpk-archieve';\n\n/**\n * Returns one byte from the provided buffer at the provided position\n * @param offset - position where to read\n * @param buffer - buffer to read\n * @returns one byte from the provided buffer at the provided position\n */\nconst getByteAt = (offset: number, buffer: DataView): number => {\n return buffer.getUint8(buffer.byteOffset + offset);\n};\n\nexport async function parseSLPK(data: ArrayBuffer, options: SLPKLoaderOptions = {}) {\n const archive = new DataView(data);\n const cdFileHeaderSignature = [80, 75, 1, 2];\n\n const searchWindow = [\n getByteAt(archive.byteLength - 1, archive),\n getByteAt(archive.byteLength - 2, archive),\n getByteAt(archive.byteLength - 3, archive),\n undefined\n ];\n\n let hashCDOffset = 0;\n\n // looking for the last record in the central directory\n for (let i = archive.byteLength - 4; i > -1; i--) {\n searchWindow[3] = searchWindow[2];\n searchWindow[2] = searchWindow[1];\n searchWindow[1] = searchWindow[0];\n searchWindow[0] = getByteAt(i, archive);\n if (searchWindow.every((val, index) => val === cdFileHeaderSignature[index])) {\n hashCDOffset = i;\n break;\n }\n }\n\n const fileProvider = new DataViewFileProvider(archive);\n\n const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);\n\n if (cdFileHeader.fileName !== '@specialIndexFileHASH128@') {\n throw new Error('No hash file in slpk');\n }\n\n const localFileHeader = await parseZipLocalFileHeader(\n cdFileHeader.localHeaderOffset,\n fileProvider\n );\n if (!localFileHeader) {\n throw new Error('No hash file in slpk');\n }\n\n const fileDataOffset = localFileHeader.fileDataOffset;\n const hashFile = archive.buffer.slice(\n fileDataOffset,\n fileDataOffset + localFileHeader.compressedSize\n );\n\n if (!hashFile) {\n throw new Error('No hash file in slpk');\n }\n\n return await new SLPKArchive(data, hashFile).getFile(\n options.slpk?.path ?? '',\n options.slpk?.pathMode\n );\n}\n"],"mappings":"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"}
@@ -10,10 +10,10 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
- var _workerUtils = require("@loaders.gl/worker-utils");
14
13
  var _md = _interopRequireDefault(require("md5"));
15
- var _compression = require("@loaders.gl/compression");
16
14
  var _localFileHeader = require("../parse-zip/local-file-header");
15
+ var _bufferFileProvider = require("../parse-zip/buffer-file-provider");
16
+ var _compression = require("@loaders.gl/compression");
17
17
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
18
18
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
19
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
@@ -134,7 +134,7 @@ var SLPKArchive = function () {
134
134
  return _context.abrupt("return", Buffer.from(data));
135
135
  case 26:
136
136
  if (!(mode === 'raw')) {
137
- _context.next = 35;
137
+ _context.next = 37;
138
138
  break;
139
139
  }
140
140
  _context.next = 29;
@@ -147,15 +147,18 @@ var SLPKArchive = function () {
147
147
  }
148
148
  return _context.abrupt("return", Buffer.from(decompressedFile));
149
149
  case 32:
150
- fileWithoutCompression = this.getFileBytes(path);
150
+ _context.next = 34;
151
+ return this.getFileBytes(path);
152
+ case 34:
153
+ fileWithoutCompression = _context.sent;
151
154
  if (!fileWithoutCompression) {
152
- _context.next = 35;
155
+ _context.next = 37;
153
156
  break;
154
157
  }
155
158
  return _context.abrupt("return", Buffer.from(fileWithoutCompression));
156
- case 35:
159
+ case 37:
157
160
  throw new Error('No such file in the archieve');
158
- case 36:
161
+ case 38:
159
162
  case "end":
160
163
  return _context.stop();
161
164
  }
@@ -170,34 +173,33 @@ var SLPKArchive = function () {
170
173
  key: "getDataByPath",
171
174
  value: function () {
172
175
  var _getDataByPath = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(path) {
173
- var data, decompressedData;
176
+ var data, compression, decompressedData;
174
177
  return _regenerator.default.wrap(function _callee2$(_context2) {
175
178
  while (1) switch (_context2.prev = _context2.next) {
176
179
  case 0:
177
- data = this.getFileBytes(path);
180
+ _context2.next = 2;
181
+ return this.getFileBytes(path);
182
+ case 2:
183
+ data = _context2.sent;
178
184
  if (data) {
179
- _context2.next = 3;
185
+ _context2.next = 5;
180
186
  break;
181
187
  }
182
188
  return _context2.abrupt("return", undefined);
183
- case 3:
189
+ case 5:
184
190
  if (!/\.gz$/.test(path)) {
185
- _context2.next = 8;
191
+ _context2.next = 11;
186
192
  break;
187
193
  }
188
- _context2.next = 6;
189
- return (0, _workerUtils.processOnWorker)(_compression.CompressionWorker, data, {
190
- compression: 'gzip',
191
- operation: 'decompress',
192
- _workerType: 'test',
193
- gzip: {}
194
- });
195
- case 6:
194
+ compression = new _compression.GZipCompression();
195
+ _context2.next = 9;
196
+ return compression.decompress(data);
197
+ case 9:
196
198
  decompressedData = _context2.sent;
197
199
  return _context2.abrupt("return", decompressedData);
198
- case 8:
200
+ case 11:
199
201
  return _context2.abrupt("return", Buffer.from(data));
200
- case 9:
202
+ case 12:
201
203
  case "end":
202
204
  return _context2.stop();
203
205
  }
@@ -210,18 +212,45 @@ var SLPKArchive = function () {
210
212
  }()
211
213
  }, {
212
214
  key: "getFileBytes",
213
- value: function getFileBytes(path) {
214
- var nameHash = Buffer.from((0, _md.default)(path), 'hex');
215
- var fileInfo = this.hashArray.find(function (val) {
216
- return Buffer.compare(val.hash, nameHash) === 0;
217
- });
218
- if (!fileInfo) {
219
- return undefined;
215
+ value: function () {
216
+ var _getFileBytes = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(path) {
217
+ var nameHash, fileInfo, localFileHeader, compressedFile;
218
+ return _regenerator.default.wrap(function _callee3$(_context3) {
219
+ while (1) switch (_context3.prev = _context3.next) {
220
+ case 0:
221
+ nameHash = Buffer.from((0, _md.default)(path), 'hex');
222
+ fileInfo = this.hashArray.find(function (val) {
223
+ return Buffer.compare(val.hash, nameHash) === 0;
224
+ });
225
+ if (fileInfo) {
226
+ _context3.next = 4;
227
+ break;
228
+ }
229
+ return _context3.abrupt("return", undefined);
230
+ case 4:
231
+ _context3.next = 6;
232
+ return (0, _localFileHeader.parseZipLocalFileHeader)(this.slpkArchive.byteOffset + (fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.offset), new _bufferFileProvider.DataViewFileProvider(this.slpkArchive));
233
+ case 6:
234
+ localFileHeader = _context3.sent;
235
+ if (localFileHeader) {
236
+ _context3.next = 9;
237
+ break;
238
+ }
239
+ return _context3.abrupt("return", undefined);
240
+ case 9:
241
+ compressedFile = this.slpkArchive.buffer.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
242
+ return _context3.abrupt("return", compressedFile);
243
+ case 11:
244
+ case "end":
245
+ return _context3.stop();
246
+ }
247
+ }, _callee3, this);
248
+ }));
249
+ function getFileBytes(_x3) {
250
+ return _getFileBytes.apply(this, arguments);
220
251
  }
221
- var localFileHeader = (0, _localFileHeader.parseZipLocalFileHeader)(this.slpkArchive.byteOffset + (fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.offset), this.slpkArchive);
222
- var compressedFile = this.slpkArchive.buffer.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
223
- return compressedFile;
224
- }
252
+ return getFileBytes;
253
+ }()
225
254
  }]);
226
255
  return SLPKArchive;
227
256
  }();
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-archieve.js","names":["_workerUtils","require","_md","_interopRequireDefault","_compression","_localFileHeader","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","PATH_DESCRIPTIONS","extensions","SLPKArchive","slpkArchiveBuffer","hashFile","_classCallCheck2","default","_defineProperty2","slpkArchive","DataView","hashArray","parseHashFile","_createClass2","key","hashFileBuffer","Buffer","buffer","byteLength","offsetBuffer","byteOffset","offset","getUint32","push","hash","subarray","_getFile","_asyncToGenerator2","_regenerator","mark","_callee","path","mode","_PATH_DESCRIPTIONS$fi","data","_iterator","_step","ext","decompressedFile","fileWithoutCompression","_args","arguments","wrap","_callee$","_context","prev","undefined","find","val","getDataByPath","concat","sent","abrupt","t0","finish","getFileBytes","Error","stop","getFile","_x","apply","_getDataByPath","_callee2","decompressedData","_callee2$","_context2","processOnWorker","CompressionWorker","compression","operation","_workerType","gzip","_x2","nameHash","md5","fileInfo","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\nconst PATH_DESCRIPTIONS: {test: RegExp; extensions: string[]}[] = [\n {\n test: /^$/,\n extensions: ['3dSceneLayer.json.gz']\n },\n {\n test: /^nodepages\\/\\d+$/,\n extensions: ['.json.gz']\n },\n {\n test: /^nodes\\/\\d+$/,\n extensions: ['/3dNodeIndexDocument.json.gz']\n },\n {\n test: /^nodes\\/\\d+\\/textures\\/.+$/,\n extensions: ['.jpg', '.png', '.bin.dds.gz', '.ktx']\n },\n {\n test: /^nodes\\/\\d+\\/geometries\\/\\d+$/,\n extensions: ['.bin.gz', '.draco.gz']\n },\n {\n test: /^nodes\\/\\d+\\/attributes\\/f_\\d+\\/\\d+$/,\n extensions: ['.bin.gz']\n },\n {\n test: /^statistics\\/f_\\d+\\/\\d+$/,\n extensions: ['.json.gz']\n },\n {\n test: /^nodes\\/\\d+\\/shared$/,\n extensions: ['/sharedResource.json.gz']\n }\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 const extensions = PATH_DESCRIPTIONS.find((val) => val.test.test(path))?.extensions;\n if (extensions) {\n let data: ArrayBuffer | undefined;\n for (const ext of extensions) {\n data = await this.getDataByPath(`${path}${ext}`);\n if (data) {\n break;\n }\n }\n if (data) {\n return Buffer.from(data);\n }\n }\n }\n if (mode === 'raw') {\n const decompressedFile = await this.getDataByPath(`${path}.gz`);\n if (decompressedFile) {\n return Buffer.from(decompressedFile);\n }\n const fileWithoutCompression = this.getFileBytes(path);\n if (fileWithoutCompression) {\n return Buffer.from(fileWithoutCompression);\n }\n }\n\n throw new Error('No such file in the archieve');\n }\n\n /**\n * returning uncompressed data for paths that ends with .gz and raw data for all other paths\n * @param path - path inside the archive\n * @returns buffer with the file data\n */\n private async getDataByPath(path: string): Promise<ArrayBuffer | undefined> {\n const data = this.getFileBytes(path);\n if (!data) {\n return undefined;\n }\n if (/\\.gz$/.test(path)) {\n const decompressedData = await processOnWorker(CompressionWorker, data, {\n compression: 'gzip',\n operation: 'decompress',\n _workerType: 'test',\n gzip: {}\n });\n return decompressedData;\n }\n return Buffer.from(data);\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":["_md","_interopRequireDefault","require","_localFileHeader","_bufferFileProvider","_compression","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","PATH_DESCRIPTIONS","extensions","SLPKArchive","slpkArchiveBuffer","hashFile","_classCallCheck2","default","_defineProperty2","slpkArchive","DataView","hashArray","parseHashFile","_createClass2","key","hashFileBuffer","Buffer","buffer","byteLength","offsetBuffer","byteOffset","offset","getUint32","push","hash","subarray","_getFile","_asyncToGenerator2","_regenerator","mark","_callee","path","mode","_PATH_DESCRIPTIONS$fi","data","_iterator","_step","ext","decompressedFile","fileWithoutCompression","_args","arguments","wrap","_callee$","_context","prev","undefined","find","val","getDataByPath","concat","sent","abrupt","t0","finish","getFileBytes","Error","stop","getFile","_x","apply","_getDataByPath","_callee2","compression","decompressedData","_callee2$","_context2","GZipCompression","decompress","_x2","_getFileBytes","_callee3","nameHash","fileInfo","localFileHeader","compressedFile","_callee3$","_context3","md5","compare","parseZipLocalFileHeader","DataViewFileProvider","fileDataOffset","compressedSize","_x3","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/slpk-archieve.ts"],"sourcesContent":["import md5 from 'md5';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {DataViewFileProvider} from '../parse-zip/buffer-file-provider';\nimport {GZipCompression} from '@loaders.gl/compression';\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/** Description of real paths for different file types */\nconst PATH_DESCRIPTIONS: {test: RegExp; extensions: string[]}[] = [\n {\n test: /^$/,\n extensions: ['3dSceneLayer.json.gz']\n },\n {\n test: /^nodepages\\/\\d+$/,\n extensions: ['.json.gz']\n },\n {\n test: /^nodes\\/\\d+$/,\n extensions: ['/3dNodeIndexDocument.json.gz']\n },\n {\n test: /^nodes\\/\\d+\\/textures\\/.+$/,\n extensions: ['.jpg', '.png', '.bin.dds.gz', '.ktx']\n },\n {\n test: /^nodes\\/\\d+\\/geometries\\/\\d+$/,\n extensions: ['.bin.gz', '.draco.gz']\n },\n {\n test: /^nodes\\/\\d+\\/attributes\\/f_\\d+\\/\\d+$/,\n extensions: ['.bin.gz']\n },\n {\n test: /^statistics\\/f_\\d+\\/\\d+$/,\n extensions: ['.json.gz']\n },\n {\n test: /^nodes\\/\\d+\\/shared$/,\n extensions: ['/sharedResource.json.gz']\n }\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 const extensions = PATH_DESCRIPTIONS.find((val) => val.test.test(path))?.extensions;\n if (extensions) {\n let data: ArrayBuffer | undefined;\n for (const ext of extensions) {\n data = await this.getDataByPath(`${path}${ext}`);\n if (data) {\n break;\n }\n }\n if (data) {\n return Buffer.from(data);\n }\n }\n }\n if (mode === 'raw') {\n const decompressedFile = await this.getDataByPath(`${path}.gz`);\n if (decompressedFile) {\n return Buffer.from(decompressedFile);\n }\n const fileWithoutCompression = await this.getFileBytes(path);\n if (fileWithoutCompression) {\n return Buffer.from(fileWithoutCompression);\n }\n }\n\n throw new Error('No such file in the archieve');\n }\n\n /**\n * returning uncompressed data for paths that ends with .gz and raw data for all other paths\n * @param path - path inside the archive\n * @returns buffer with the file data\n */\n private async getDataByPath(path: string): Promise<ArrayBuffer | undefined> {\n const data = await this.getFileBytes(path);\n if (!data) {\n return undefined;\n }\n if (/\\.gz$/.test(path)) {\n const compression = new GZipCompression();\n\n const decompressedData = await compression.decompress(data);\n return decompressedData;\n }\n return Buffer.from(data);\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 async getFileBytes(path: string): Promise<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 = await parseZipLocalFileHeader(\n this.slpkArchive.byteOffset + fileInfo?.offset,\n new DataViewFileProvider(this.slpkArchive)\n );\n if (!localFileHeader) {\n return undefined;\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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"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DataViewFileProvider = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var DataViewFileProvider = function () {
12
+ function DataViewFileProvider(file) {
13
+ (0, _classCallCheck2.default)(this, DataViewFileProvider);
14
+ (0, _defineProperty2.default)(this, "file", void 0);
15
+ this.file = file;
16
+ }
17
+ (0, _createClass2.default)(DataViewFileProvider, [{
18
+ key: "getUint8",
19
+ value: function getUint8(offset) {
20
+ return Promise.resolve(this.file.getUint8(offset));
21
+ }
22
+ }, {
23
+ key: "getUint16",
24
+ value: function getUint16(offset) {
25
+ return Promise.resolve(this.file.getUint16(offset, true));
26
+ }
27
+ }, {
28
+ key: "getUint32",
29
+ value: function getUint32(offset) {
30
+ return Promise.resolve(this.file.getUint32(offset, true));
31
+ }
32
+ }, {
33
+ key: "slice",
34
+ value: function slice(startOffset, endOffset) {
35
+ return Promise.resolve(this.file.buffer.slice(startOffset, endOffset));
36
+ }
37
+ }, {
38
+ key: "length",
39
+ get: function get() {
40
+ return this.file.byteLength;
41
+ }
42
+ }]);
43
+ return DataViewFileProvider;
44
+ }();
45
+ exports.DataViewFileProvider = DataViewFileProvider;
46
+ //# sourceMappingURL=buffer-file-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer-file-provider.js","names":["DataViewFileProvider","file","_classCallCheck2","default","_defineProperty2","_createClass2","key","value","getUint8","offset","Promise","resolve","getUint16","getUint32","slice","startOffset","endOffset","buffer","get","byteLength","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/buffer-file-provider.ts"],"sourcesContent":["import {FileProvider} from './file-provider';\n\n/**\n * Provides file data using DataView\n */\nexport class DataViewFileProvider implements FileProvider {\n /**\n * The DataView from which data is provided\n */\n private file: DataView;\n\n constructor(file: DataView) {\n this.file = file;\n }\n\n /**\n * Gets an unsigned 8-bit integer at the specified byte offset from the start of the file.\n * @param offset The offset, in bytes, from the start of the file where to read the data.\n */\n getUint8(offset: number): Promise<number> {\n return Promise.resolve(this.file.getUint8(offset));\n }\n\n /**\n * Gets an unsigned 16-bit integer at the specified byte offset from the start of the file.\n * @param offset The offset, in bytes, from the start of the file where to read the data.\n */\n getUint16(offset: number): Promise<number> {\n return Promise.resolve(this.file.getUint16(offset, true));\n }\n\n /**\n * Gets an unsigned 32-bit integer at the specified byte offset from the start of the file.\n * @param offset The offset, in bytes, from the start of the file where to read the data.\n */\n getUint32(offset: number): Promise<number> {\n return Promise.resolve(this.file.getUint32(offset, true));\n }\n\n /**\n * returns an ArrayBuffer whose contents are a copy of this file bytes from startOffset, inclusive, up to endOffset, exclusive.\n * @param startOffset The offset, in bytes, from the start of the file where to start reading the data.\n * @param endOffset The offset, in bytes, from the start of the file where to end reading the data.\n */\n slice(startOffset: number, endOffset: number): Promise<ArrayBuffer> {\n return Promise.resolve(this.file.buffer.slice(startOffset, endOffset));\n }\n\n /**\n * the length (in bytes) of the data.\n */\n get length() {\n return this.file.byteLength;\n }\n}\n"],"mappings":";;;;;;;;;;IAKaA,oBAAoB;EAM/B,SAAAA,qBAAYC,IAAc,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAH,oBAAA;IAAA,IAAAI,gBAAA,CAAAD,OAAA;IAC1B,IAAI,CAACF,IAAI,GAAGA,IAAI;EAClB;EAAC,IAAAI,aAAA,CAAAF,OAAA,EAAAH,oBAAA;IAAAM,GAAA;IAAAC,KAAA,EAMD,SAAAC,SAASC,MAAc,EAAmB;MACxC,OAAOC,OAAO,CAACC,OAAO,CAAC,IAAI,CAACV,IAAI,CAACO,QAAQ,CAACC,MAAM,CAAC,CAAC;IACpD;EAAC;IAAAH,GAAA;IAAAC,KAAA,EAMD,SAAAK,UAAUH,MAAc,EAAmB;MACzC,OAAOC,OAAO,CAACC,OAAO,CAAC,IAAI,CAACV,IAAI,CAACW,SAAS,CAACH,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3D;EAAC;IAAAH,GAAA;IAAAC,KAAA,EAMD,SAAAM,UAAUJ,MAAc,EAAmB;MACzC,OAAOC,OAAO,CAACC,OAAO,CAAC,IAAI,CAACV,IAAI,CAACY,SAAS,CAACJ,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3D;EAAC;IAAAH,GAAA;IAAAC,KAAA,EAOD,SAAAO,MAAMC,WAAmB,EAAEC,SAAiB,EAAwB;MAClE,OAAON,OAAO,CAACC,OAAO,CAAC,IAAI,CAACV,IAAI,CAACgB,MAAM,CAACH,KAAK,CAACC,WAAW,EAAEC,SAAS,CAAC,CAAC;IACxE;EAAC;IAAAV,GAAA;IAAAY,GAAA,EAKD,SAAAA,IAAA,EAAa;MACX,OAAO,IAAI,CAACjB,IAAI,CAACkB,UAAU;IAC7B;EAAC;EAAA,OAAAnB,oBAAA;AAAA;AAAAoB,OAAA,CAAApB,oBAAA,GAAAA,oBAAA"}
@@ -1,44 +1,84 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.parseZipCDFileHeader = void 0;
7
- var parseZipCDFileHeader = function parseZipCDFileHeader(headerOffset, buffer) {
8
- var offsets = {
9
- CD_COMPRESSED_SIZE_OFFSET: 20,
10
- CD_UNCOMPRESSED_SIZE_OFFSET: 24,
11
- CD_FILE_NAME_LENGTH_OFFSET: 28,
12
- CD_EXTRA_FIELD_LENGTH_OFFSET: 30,
13
- CD_LOCAL_HEADER_OFFSET_OFFSET: 42,
14
- CD_FILE_NAME_OFFSET: 46
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var parseZipCDFileHeader = function () {
11
+ var _ref = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(headerOffset, buffer) {
12
+ var offsets, compressedSize, uncompressedSize, fileNameLength, fileName, extraOffset, oldFormatOffset, fileDataOffset, offsetInZip64Data, localHeaderOffset;
13
+ return _regenerator.default.wrap(function _callee$(_context) {
14
+ while (1) switch (_context.prev = _context.next) {
15
+ case 0:
16
+ offsets = {
17
+ CD_COMPRESSED_SIZE_OFFSET: 20,
18
+ CD_UNCOMPRESSED_SIZE_OFFSET: 24,
19
+ CD_FILE_NAME_LENGTH_OFFSET: 28,
20
+ CD_EXTRA_FIELD_LENGTH_OFFSET: 30,
21
+ CD_LOCAL_HEADER_OFFSET_OFFSET: 42,
22
+ CD_FILE_NAME_OFFSET: 46
23
+ };
24
+ _context.next = 3;
25
+ return buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET);
26
+ case 3:
27
+ compressedSize = _context.sent;
28
+ _context.next = 6;
29
+ return buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET);
30
+ case 6:
31
+ uncompressedSize = _context.sent;
32
+ _context.next = 9;
33
+ return buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);
34
+ case 9:
35
+ fileNameLength = _context.sent;
36
+ _context.t0 = new TextDecoder();
37
+ _context.next = 13;
38
+ return buffer.slice(headerOffset + offsets.CD_FILE_NAME_OFFSET, headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength);
39
+ case 13:
40
+ _context.t1 = _context.sent;
41
+ fileName = _context.t0.decode.call(_context.t0, _context.t1);
42
+ extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;
43
+ _context.next = 18;
44
+ return buffer.getUint32(headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET);
45
+ case 18:
46
+ oldFormatOffset = _context.sent;
47
+ fileDataOffset = oldFormatOffset;
48
+ if (!(fileDataOffset === 0xffffffff)) {
49
+ _context.next = 27;
50
+ break;
51
+ }
52
+ offsetInZip64Data = 4;
53
+ if (compressedSize === 0xffffffff) {
54
+ offsetInZip64Data += 8;
55
+ }
56
+ if (uncompressedSize === 0xffffffff) {
57
+ offsetInZip64Data += 8;
58
+ }
59
+ _context.next = 26;
60
+ return buffer.getUint32(extraOffset + offsetInZip64Data);
61
+ case 26:
62
+ fileDataOffset = _context.sent;
63
+ case 27:
64
+ localHeaderOffset = fileDataOffset;
65
+ return _context.abrupt("return", {
66
+ compressedSize: compressedSize,
67
+ uncompressedSize: uncompressedSize,
68
+ fileNameLength: fileNameLength,
69
+ fileName: fileName,
70
+ extraOffset: extraOffset,
71
+ localHeaderOffset: localHeaderOffset
72
+ });
73
+ case 29:
74
+ case "end":
75
+ return _context.stop();
76
+ }
77
+ }, _callee);
78
+ }));
79
+ return function parseZipCDFileHeader(_x, _x2) {
80
+ return _ref.apply(this, arguments);
15
81
  };
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;
23
- if (fileDataOffset === 0xffffffff) {
24
- var offsetInZip64Data = 4;
25
- if (compressedSize === 0xffffffff) {
26
- offsetInZip64Data += 8;
27
- }
28
- if (uncompressedSize === 0xffffffff) {
29
- offsetInZip64Data += 8;
30
- }
31
- fileDataOffset = buffer.getUint32(extraOffset + offsetInZip64Data, true);
32
- }
33
- var localHeaderOffset = fileDataOffset;
34
- return {
35
- compressedSize: compressedSize,
36
- uncompressedSize: uncompressedSize,
37
- fileNameLength: fileNameLength,
38
- fileName: fileName,
39
- extraOffset: extraOffset,
40
- localHeaderOffset: localHeaderOffset
41
- };
42
- };
82
+ }();
43
83
  exports.parseZipCDFileHeader = parseZipCDFileHeader;
44
84
  //# sourceMappingURL=cd-file-header.js.map