@loaders.gl/i3s 4.0.0-alpha.19 → 4.0.0-alpha.21

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 (95) hide show
  1. package/dist/dist.min.js +300 -275
  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 +3 -3
  9. package/dist/es5/i3s-slpk-loader.js.map +1 -1
  10. package/dist/es5/index.js +0 -7
  11. package/dist/es5/index.js.map +1 -1
  12. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +6 -69
  13. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  14. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +9 -33
  15. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  16. package/dist/esm/arcgis-webscene-loader.js +1 -1
  17. package/dist/esm/i3s-attribute-loader.js +1 -1
  18. package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
  19. package/dist/esm/i3s-content-loader.js +1 -1
  20. package/dist/esm/i3s-loader.js +1 -1
  21. package/dist/esm/i3s-node-page-loader.js +1 -1
  22. package/dist/esm/i3s-slpk-loader.js +3 -3
  23. package/dist/esm/i3s-slpk-loader.js.map +1 -1
  24. package/dist/esm/index.js +0 -1
  25. package/dist/esm/index.js.map +1 -1
  26. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +2 -35
  27. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  28. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +5 -29
  29. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  30. package/dist/i3s-content-worker-node.js +2 -2
  31. package/dist/i3s-content-worker-node.js.map +2 -2
  32. package/dist/i3s-content-worker.js +21 -21
  33. package/dist/i3s-slpk-loader.js +2 -2
  34. package/dist/index.d.ts +0 -2
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -3
  37. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +1 -1
  38. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  39. package/dist/lib/parsers/parse-slpk/parse-slpk.js +6 -50
  40. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +2 -21
  41. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  42. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +7 -46
  43. package/package.json +9 -9
  44. package/src/i3s-slpk-loader.ts +2 -2
  45. package/src/index.ts +0 -2
  46. package/src/lib/parsers/parse-slpk/parse-slpk.ts +11 -56
  47. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +5 -54
  48. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +0 -121
  49. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +0 -1
  50. package/dist/es5/lib/parsers/parse-zip/data-view-file-provider.js +0 -129
  51. package/dist/es5/lib/parsers/parse-zip/data-view-file-provider.js.map +0 -1
  52. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js +0 -100
  53. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js.map +0 -1
  54. package/dist/es5/lib/parsers/parse-zip/file-provider.js +0 -2
  55. package/dist/es5/lib/parsers/parse-zip/file-provider.js.map +0 -1
  56. package/dist/es5/lib/parsers/parse-zip/local-file-header.js +0 -113
  57. package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +0 -1
  58. package/dist/es5/lib/parsers/parse-zip/search-from-the-end.js +0 -69
  59. package/dist/es5/lib/parsers/parse-zip/search-from-the-end.js.map +0 -1
  60. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js +0 -45
  61. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js.map +0 -1
  62. package/dist/esm/lib/parsers/parse-zip/data-view-file-provider.js +0 -32
  63. package/dist/esm/lib/parsers/parse-zip/data-view-file-provider.js.map +0 -1
  64. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js +0 -33
  65. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js.map +0 -1
  66. package/dist/esm/lib/parsers/parse-zip/file-provider.js +0 -2
  67. package/dist/esm/lib/parsers/parse-zip/file-provider.js.map +0 -1
  68. package/dist/esm/lib/parsers/parse-zip/local-file-header.js +0 -40
  69. package/dist/esm/lib/parsers/parse-zip/local-file-header.js.map +0 -1
  70. package/dist/esm/lib/parsers/parse-zip/search-from-the-end.js +0 -16
  71. package/dist/esm/lib/parsers/parse-zip/search-from-the-end.js.map +0 -1
  72. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts +0 -31
  73. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts.map +0 -1
  74. package/dist/lib/parsers/parse-zip/cd-file-header.js +0 -55
  75. package/dist/lib/parsers/parse-zip/data-view-file-provider.d.ts +0 -36
  76. package/dist/lib/parsers/parse-zip/data-view-file-provider.d.ts.map +0 -1
  77. package/dist/lib/parsers/parse-zip/data-view-file-provider.js +0 -61
  78. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts +0 -18
  79. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts.map +0 -1
  80. package/dist/lib/parsers/parse-zip/end-of-central-directory.js +0 -41
  81. package/dist/lib/parsers/parse-zip/file-provider.d.ts +0 -36
  82. package/dist/lib/parsers/parse-zip/file-provider.d.ts.map +0 -1
  83. package/dist/lib/parsers/parse-zip/file-provider.js +0 -2
  84. package/dist/lib/parsers/parse-zip/local-file-header.d.ts +0 -27
  85. package/dist/lib/parsers/parse-zip/local-file-header.d.ts.map +0 -1
  86. package/dist/lib/parsers/parse-zip/local-file-header.js +0 -53
  87. package/dist/lib/parsers/parse-zip/search-from-the-end.d.ts +0 -11
  88. package/dist/lib/parsers/parse-zip/search-from-the-end.d.ts.map +0 -1
  89. package/dist/lib/parsers/parse-zip/search-from-the-end.js +0 -31
  90. package/src/lib/parsers/parse-zip/cd-file-header.ts +0 -106
  91. package/src/lib/parsers/parse-zip/data-view-file-provider.ts +0 -69
  92. package/src/lib/parsers/parse-zip/end-of-central-directory.ts +0 -78
  93. package/src/lib/parsers/parse-zip/file-provider.ts +0 -40
  94. package/src/lib/parsers/parse-zip/local-file-header.ts +0 -91
  95. package/src/lib/parsers/parse-zip/search-from-the-end.ts +0 -38
@@ -61,7 +61,7 @@
61
61
  var nodeVersion = matches && parseFloat(matches[1]) || 0;
62
62
 
63
63
  // ../worker-utils/src/lib/env-utils/version.ts
64
- var VERSION = true ? "4.0.0-alpha.19" : DEFAULT_VERSION;
64
+ var VERSION = true ? "4.0.0-alpha.21" : DEFAULT_VERSION;
65
65
  if (false) {
66
66
  console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
67
67
  }
@@ -1045,7 +1045,7 @@
1045
1045
  var isFunction = (x) => typeof x === "function";
1046
1046
  var isObject = (x) => x !== null && typeof x === "object";
1047
1047
  var isPureObject = (x) => isObject(x) && x.constructor === {}.constructor;
1048
- var isIterable = (x) => x && typeof x[Symbol.iterator] === "function";
1048
+ var isIterable = (x) => Boolean(x) && typeof x[Symbol.iterator] === "function";
1049
1049
  var isAsyncIterable = (x) => x && typeof x[Symbol.asyncIterator] === "function";
1050
1050
  var isResponse = (x) => typeof Response !== "undefined" && x instanceof Response || x && x.arrayBuffer && x.text && x.json;
1051
1051
  var isBlob = (x) => typeof Blob !== "undefined" && x instanceof Blob;
@@ -1262,7 +1262,7 @@
1262
1262
  var navigator_ = globalThis.navigator || {};
1263
1263
 
1264
1264
  // ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/utils/globals.js
1265
- var VERSION3 = true ? "4.0.0-alpha.19" : "untranspiled source";
1265
+ var VERSION3 = true ? "4.0.0-alpha.21" : "untranspiled source";
1266
1266
  var isBrowser4 = isBrowser3();
1267
1267
 
1268
1268
  // ../../node_modules/@probe.gl/log/dist/utils/local-storage.js
@@ -2307,12 +2307,12 @@
2307
2307
  // ../core/src/lib/loader-utils/get-fetch-function.ts
2308
2308
  function getFetchFunction(options, context) {
2309
2309
  const globalOptions = getGlobalLoaderOptions();
2310
- const fetchOptions = options || globalOptions;
2311
- if (typeof fetchOptions.fetch === "function") {
2312
- return fetchOptions.fetch;
2310
+ const loaderOptions = options || globalOptions;
2311
+ if (typeof loaderOptions.fetch === "function") {
2312
+ return loaderOptions.fetch;
2313
2313
  }
2314
- if (isObject(fetchOptions.fetch)) {
2315
- return (url) => fetchFile(url, fetchOptions);
2314
+ if (isObject(loaderOptions.fetch)) {
2315
+ return (url) => fetchFile(url, loaderOptions.fetch);
2316
2316
  }
2317
2317
  if (context?.fetch) {
2318
2318
  return context?.fetch;
@@ -2386,20 +2386,20 @@
2386
2386
  context.response = { headers, ok, redirected, status, statusText, type, url };
2387
2387
  }
2388
2388
  data = await getArrayBufferOrStringFromData(data, loader, options);
2389
- if (loader.parseTextSync && typeof data === "string") {
2390
- options.dataType = "text";
2391
- return loader.parseTextSync(data, options, context, loader);
2389
+ const loaderWithParser = loader;
2390
+ if (loaderWithParser.parseTextSync && typeof data === "string") {
2391
+ return loaderWithParser.parseTextSync(data, options, context);
2392
2392
  }
2393
2393
  if (canParseWithWorker(loader, options)) {
2394
2394
  return await parseWithWorker(loader, data, options, context, parse);
2395
2395
  }
2396
- if (loader.parseText && typeof data === "string") {
2397
- return await loader.parseText(data, options, context, loader);
2396
+ if (loaderWithParser.parseText && typeof data === "string") {
2397
+ return await loaderWithParser.parseText(data, options, context);
2398
2398
  }
2399
- if (loader.parse) {
2400
- return await loader.parse(data, options, context, loader);
2399
+ if (loaderWithParser.parse) {
2400
+ return await loaderWithParser.parse(data, options, context);
2401
2401
  }
2402
- assert2(!loader.parseSync);
2402
+ assert2(!loaderWithParser.parseSync);
2403
2403
  throw new Error(`${loader.id} loader - no parser found and worker is disabled`);
2404
2404
  }
2405
2405
 
@@ -4611,7 +4611,7 @@
4611
4611
  _defineProperty(Ellipsoid, "WGS84", new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z));
4612
4612
 
4613
4613
  // ../images/src/lib/utils/version.ts
4614
- var VERSION4 = true ? "4.0.0-alpha.19" : "latest";
4614
+ var VERSION4 = true ? "4.0.0-alpha.21" : "latest";
4615
4615
 
4616
4616
  // ../images/src/lib/category-api/image-type.ts
4617
4617
  var { _parseImageNode } = globalThis;
@@ -5008,7 +5008,7 @@
5008
5008
  };
5009
5009
 
5010
5010
  // ../draco/src/lib/utils/version.ts
5011
- var VERSION5 = true ? "4.0.0-alpha.19" : "latest";
5011
+ var VERSION5 = true ? "4.0.0-alpha.21" : "latest";
5012
5012
 
5013
5013
  // ../draco/src/draco-loader.ts
5014
5014
  var DEFAULT_DRACO_OPTIONS = {
@@ -5561,7 +5561,7 @@
5561
5561
  }
5562
5562
 
5563
5563
  // ../textures/src/lib/utils/version.ts
5564
- var VERSION6 = true ? "4.0.0-alpha.19" : "beta";
5564
+ var VERSION6 = true ? "4.0.0-alpha.21" : "beta";
5565
5565
 
5566
5566
  // ../textures/src/lib/parsers/basis-module-loader.ts
5567
5567
  var BASIS_EXTERNAL_LIBRARIES = {
@@ -7253,7 +7253,7 @@
7253
7253
  }
7254
7254
 
7255
7255
  // src/i3s-attribute-loader.ts
7256
- var VERSION7 = true ? "4.0.0-alpha.19" : "latest";
7256
+ var VERSION7 = true ? "4.0.0-alpha.21" : "latest";
7257
7257
  var I3SAttributeLoader = {
7258
7258
  name: "I3S Attribute",
7259
7259
  id: "i3s-attribute",
@@ -7716,7 +7716,7 @@
7716
7716
  }
7717
7717
 
7718
7718
  // src/i3s-content-loader.ts
7719
- var VERSION8 = true ? "4.0.0-alpha.19" : "beta";
7719
+ var VERSION8 = true ? "4.0.0-alpha.21" : "beta";
7720
7720
  var I3SContentLoader = {
7721
7721
  name: "I3S Content (Indexed Scene Layers)",
7722
7722
  id: "i3s-content",
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SLPKLoader = void 0;
4
+ const zip_1 = require("@loaders.gl/zip");
4
5
  const parse_slpk_1 = require("./lib/parsers/parse-slpk/parse-slpk");
5
- const data_view_file_provider_1 = require("./lib/parsers/parse-zip/data-view-file-provider");
6
6
  // __VERSION__ is injected by babel-plugin-version-inline
7
7
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
8
  const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
@@ -26,5 +26,5 @@ exports.SLPKLoader = {
26
26
  * @returns requested file
27
27
  */
28
28
  async function parseSLPK(data, options = {}) {
29
- return (await (0, parse_slpk_1.parseSLPK)(new data_view_file_provider_1.DataViewFileProvider(new DataView(data)))).getFile(options.slpk?.path ?? '', options.slpk?.pathMode);
29
+ return (await (0, parse_slpk_1.parseSLPK)(new zip_1.DataViewFile(new DataView(data)))).getFile(options.slpk?.path ?? '', options.slpk?.pathMode);
30
30
  }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export type { BoundingVolumes, Mbs, Obb, I3STilesetHeader, I3STileContent, I3STileHeader, SceneLayer3D, AttributeStorageInfo, Field, ESRIField, PopupInfo, Node3DIndexDocument, LodSelection, NodeReference, Resource, MaxScreenThresholdSQ, NodeInPage, SharedResources, Attribute, Extent, FeatureAttribute, FieldInfo, I3SMaterialDefinition, TextureDefinitionInfo, MaterialDefinitionInfo, FullExtent, StatisticsInfo, StatsInfo, Histogram, ValueCount, BuildingSceneSublayer, OperationalLayer, TextureSetDefinitionFormats } from './types';
2
- export type { FileProvider } from './lib/parsers/parse-zip/file-provider';
3
2
  export type { I3SLoaderOptions } from './i3s-loader';
4
3
  export { COORDINATE_SYSTEM } from './lib/parsers/constants';
5
4
  export { I3SLoader } from './i3s-loader';
@@ -9,6 +8,5 @@ export { I3SAttributeLoader, loadFeatureAttributes } from './i3s-attribute-loade
9
8
  export { I3SBuildingSceneLayerLoader } from './i3s-building-scene-layer-loader';
10
9
  export { I3SNodePageLoader } from './i3s-node-page-loader';
11
10
  export { ArcGisWebSceneLoader } from './arcgis-webscene-loader';
12
- export { parseZipLocalFileHeader } from './lib/parsers/parse-zip/local-file-header';
13
11
  export { parseSLPK } from './lib/parsers/parse-slpk/parse-slpk';
14
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,eAAe,EACf,GAAG,EACH,GAAG,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,KAAK,EACL,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AACjB,YAAY,EAAC,YAAY,EAAC,MAAM,uCAAuC,CAAC;AACxE,YAAY,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAC,2BAA2B,EAAC,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAC,uBAAuB,EAAC,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAC,SAAS,EAAC,MAAM,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,eAAe,EACf,GAAG,EACH,GAAG,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,KAAK,EACL,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AACjB,YAAY,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAC,2BAA2B,EAAC,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAC,SAAS,EAAC,MAAM,qCAAqC,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // loaders.gl, MIT license
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.parseSLPK = exports.parseZipLocalFileHeader = exports.ArcGisWebSceneLoader = exports.I3SNodePageLoader = exports.I3SBuildingSceneLayerLoader = exports.loadFeatureAttributes = exports.I3SAttributeLoader = exports.I3SContentLoader = exports.SLPKLoader = exports.I3SLoader = exports.COORDINATE_SYSTEM = void 0;
4
+ exports.parseSLPK = exports.ArcGisWebSceneLoader = exports.I3SNodePageLoader = exports.I3SBuildingSceneLayerLoader = exports.loadFeatureAttributes = exports.I3SAttributeLoader = exports.I3SContentLoader = exports.SLPKLoader = exports.I3SLoader = exports.COORDINATE_SYSTEM = void 0;
5
5
  var constants_1 = require("./lib/parsers/constants");
6
6
  Object.defineProperty(exports, "COORDINATE_SYSTEM", { enumerable: true, get: function () { return constants_1.COORDINATE_SYSTEM; } });
7
7
  var i3s_loader_1 = require("./i3s-loader");
@@ -19,7 +19,5 @@ var i3s_node_page_loader_1 = require("./i3s-node-page-loader");
19
19
  Object.defineProperty(exports, "I3SNodePageLoader", { enumerable: true, get: function () { return i3s_node_page_loader_1.I3SNodePageLoader; } });
20
20
  var arcgis_webscene_loader_1 = require("./arcgis-webscene-loader");
21
21
  Object.defineProperty(exports, "ArcGisWebSceneLoader", { enumerable: true, get: function () { return arcgis_webscene_loader_1.ArcGisWebSceneLoader; } });
22
- var local_file_header_1 = require("./lib/parsers/parse-zip/local-file-header");
23
- Object.defineProperty(exports, "parseZipLocalFileHeader", { enumerable: true, get: function () { return local_file_header_1.parseZipLocalFileHeader; } });
24
22
  var parse_slpk_1 = require("./lib/parsers/parse-slpk/parse-slpk");
25
23
  Object.defineProperty(exports, "parseSLPK", { enumerable: true, get: function () { return parse_slpk_1.parseSLPK; } });
@@ -1,4 +1,4 @@
1
- import { FileProvider } from '../parse-zip/file-provider';
1
+ import { FileProvider } from '@loaders.gl/zip';
2
2
  import { SLPKArchive } from './slpk-archieve';
3
3
  /**
4
4
  * Creates slpk file handler from raw file
@@ -1 +1 @@
1
- {"version":3,"file":"parse-slpk.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/parse-slpk/parse-slpk.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AAGxD,OAAO,EAAc,WAAW,EAAgB,MAAM,iBAAiB,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,SAAS,iBACN,YAAY,cACf,MAAM,KAAK,IAAI,kBACzB,QAAQ,WAAW,CA8BrB,CAAC"}
1
+ {"version":3,"file":"parse-slpk.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/parse-slpk/parse-slpk.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAMb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,iBACN,YAAY,cACf,MAAM,KAAK,IAAI,kBACzB,QAAQ,WAAW,CA8BrB,CAAC"}
@@ -1,14 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.parseSLPK = void 0;
7
- const md5_1 = __importDefault(require("md5"));
8
- const cd_file_header_1 = require("../parse-zip/cd-file-header");
9
- const end_of_central_directory_1 = require("../parse-zip/end-of-central-directory");
10
- const local_file_header_1 = require("../parse-zip/local-file-header");
11
- const search_from_the_end_1 = require("../parse-zip/search-from-the-end");
4
+ const zip_1 = require("@loaders.gl/zip");
12
5
  const slpk_archieve_1 = require("./slpk-archieve");
13
6
  /**
14
7
  * Creates slpk file handler from raw file
@@ -17,61 +10,24 @@ const slpk_archieve_1 = require("./slpk-archieve");
17
10
  * @returns slpk file handler
18
11
  */
19
12
  const parseSLPK = async (fileProvider, cb) => {
20
- const hashCDOffset = await (0, search_from_the_end_1.searchFromTheEnd)(fileProvider, cd_file_header_1.signature);
21
- const cdFileHeader = await (0, cd_file_header_1.parseZipCDFileHeader)(hashCDOffset, fileProvider);
13
+ const hashCDOffset = await (0, zip_1.searchFromTheEnd)(fileProvider, zip_1.cdSignature);
14
+ const cdFileHeader = await (0, zip_1.parseZipCDFileHeader)(hashCDOffset, fileProvider);
22
15
  let hashData;
23
16
  if (cdFileHeader?.fileName !== '@specialIndexFileHASH128@') {
24
17
  cb?.('SLPK doesnt contain hash file');
25
- hashData = await generateHashInfo(fileProvider);
18
+ hashData = await (0, zip_1.generateHashInfo)(fileProvider);
26
19
  cb?.('hash info has been composed according to central directory records');
27
20
  }
28
21
  else {
29
22
  cb?.('SLPK contains hash file');
30
- const localFileHeader = await (0, local_file_header_1.parseZipLocalFileHeader)(cdFileHeader.localHeaderOffset, fileProvider);
23
+ const localFileHeader = await (0, zip_1.parseZipLocalFileHeader)(cdFileHeader.localHeaderOffset, fileProvider);
31
24
  if (!localFileHeader) {
32
25
  throw new Error('corrupted SLPK');
33
26
  }
34
27
  const fileDataOffset = localFileHeader.fileDataOffset;
35
28
  const hashFile = await fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
36
- hashData = parseHashFile(hashFile);
29
+ hashData = (0, zip_1.parseHashFile)(hashFile);
37
30
  }
38
31
  return new slpk_archieve_1.SLPKArchive(fileProvider, hashData);
39
32
  };
40
33
  exports.parseSLPK = parseSLPK;
41
- /**
42
- * generates hash info from central directory
43
- * @param fileProvider - provider of the archive
44
- * @returns ready to use hash info
45
- */
46
- const generateHashInfo = async (fileProvider) => {
47
- const { cdStartOffset } = await (0, end_of_central_directory_1.parseEoCDRecord)(fileProvider);
48
- let cdHeader = await (0, cd_file_header_1.parseZipCDFileHeader)(cdStartOffset, fileProvider);
49
- const hashInfo = [];
50
- while (cdHeader) {
51
- hashInfo.push({
52
- hash: Buffer.from((0, md5_1.default)(cdHeader.fileName.split('\\').join('/').toLocaleLowerCase()), 'hex'),
53
- offset: cdHeader.localHeaderOffset
54
- });
55
- cdHeader = await (0, cd_file_header_1.parseZipCDFileHeader)(cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength), fileProvider);
56
- }
57
- hashInfo.sort((a, b) => (0, slpk_archieve_1.compareHashes)(a.hash, b.hash));
58
- return hashInfo;
59
- };
60
- /**
61
- * Reads hash file from buffer and returns it in ready-to-use form
62
- * @param hashFile - bufer containing hash file
63
- * @returns Array containing file info
64
- */
65
- const parseHashFile = (hashFile) => {
66
- const hashFileBuffer = Buffer.from(hashFile);
67
- const hashArray = [];
68
- for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {
69
- const offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i + 16, hashFileBuffer.byteOffset + i + 24));
70
- const offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);
71
- hashArray.push({
72
- hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)),
73
- offset
74
- });
75
- }
76
- return hashArray;
77
- };
@@ -1,19 +1,5 @@
1
1
  /// <reference types="node" />
2
- import { FileProvider } from '../parse-zip/file-provider';
3
- /** Element of hash array */
4
- export type HashElement = {
5
- /** File name hash */
6
- hash: Buffer;
7
- /** File offset in the archive */
8
- offset: bigint;
9
- };
10
- /**
11
- * Comparing md5 hashes according to https://github.com/Esri/i3s-spec/blob/master/docs/2.0/slpk_hashtable.pcsl.md step 5
12
- * @param hash1 hash to compare
13
- * @param hash2 hash to compare
14
- * @returns -1 if hash1 < hash2, 0 of hash1 === hash2, 1 if hash1 > hash2
15
- */
16
- export declare const compareHashes: (hash1: Buffer, hash2: Buffer) => number;
2
+ import { FileProvider, HashElement } from '@loaders.gl/zip';
17
3
  /**
18
4
  * Class for handling information about slpk file
19
5
  */
@@ -21,12 +7,6 @@ export declare class SLPKArchive {
21
7
  private slpkArchive;
22
8
  private hashArray;
23
9
  constructor(slpkArchive: FileProvider, hashFile: HashElement[]);
24
- /**
25
- * Binary search in the hash info
26
- * @param hashToSearch hash that we need to find
27
- * @returns required hash element or undefined if not found
28
- */
29
- private findBin;
30
10
  /**
31
11
  * Returns file with the given path from slpk archive
32
12
  * @param path - path inside the slpk
@@ -46,5 +26,6 @@ export declare class SLPKArchive {
46
26
  * @returns buffer with the raw file data
47
27
  */
48
28
  private getFileBytes;
29
+ findBin(nameHash: Buffer): void;
49
30
  }
50
31
  //# sourceMappingURL=slpk-archieve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-archieve.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/parse-slpk/slpk-archieve.ts"],"names":[],"mappings":";AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AAExD,4BAA4B;AAC5B,MAAM,MAAM,WAAW,GAAG;IACxB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UAAW,MAAM,SAAS,MAAM,KAAG,MAY5D,CAAC;AAsCF;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,SAAS,CAAgB;gBACrB,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE;IAK9D;;;;OAIG;IACH,OAAO,CAAC,OAAO,CAgBb;IAEF;;;;;OAKG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,KAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B1E;;;;OAIG;YACW,aAAa;IAmB3B;;;;OAIG;YACW,YAAY;CAmB3B"}
1
+ {"version":3,"file":"slpk-archieve.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/parse-slpk/slpk-archieve.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,YAAY,EAA2B,WAAW,EAAU,MAAM,iBAAiB,CAAC;AAuC5F;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,SAAS,CAAgB;gBACrB,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE;IAK9D;;;;;OAKG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,KAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B1E;;;;OAIG;YACW,aAAa;IAmB3B;;;;OAIG;YACW,YAAY;IAmB1B,OAAO,CAAC,QAAQ,EAAE,MAAM;CAGzB"}
@@ -3,29 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SLPKArchive = exports.compareHashes = void 0;
6
+ exports.SLPKArchive = void 0;
7
7
  const md5_1 = __importDefault(require("md5"));
8
- const local_file_header_1 = require("../parse-zip/local-file-header");
8
+ const zip_1 = require("@loaders.gl/zip");
9
9
  const compression_1 = require("@loaders.gl/compression");
10
- /**
11
- * Comparing md5 hashes according to https://github.com/Esri/i3s-spec/blob/master/docs/2.0/slpk_hashtable.pcsl.md step 5
12
- * @param hash1 hash to compare
13
- * @param hash2 hash to compare
14
- * @returns -1 if hash1 < hash2, 0 of hash1 === hash2, 1 if hash1 > hash2
15
- */
16
- const compareHashes = (hash1, hash2) => {
17
- const h1 = new BigUint64Array(hash1.buffer, hash1.byteOffset, 2);
18
- const h2 = new BigUint64Array(hash2.buffer, hash2.byteOffset, 2);
19
- const diff = h1[0] === h2[0] ? h1[1] - h2[1] : h1[0] - h2[0];
20
- if (diff < 0n) {
21
- return -1;
22
- }
23
- else if (diff === 0n) {
24
- return 0;
25
- }
26
- return 1;
27
- };
28
- exports.compareHashes = compareHashes;
29
10
  /** Description of real paths for different file types */
30
11
  const PATH_DESCRIPTIONS = [
31
12
  {
@@ -66,29 +47,6 @@ const PATH_DESCRIPTIONS = [
66
47
  */
67
48
  class SLPKArchive {
68
49
  constructor(slpkArchive, hashFile) {
69
- /**
70
- * Binary search in the hash info
71
- * @param hashToSearch hash that we need to find
72
- * @returns required hash element or undefined if not found
73
- */
74
- this.findBin = (hashToSearch) => {
75
- let lowerBorder = 0;
76
- let upperBorder = this.hashArray.length;
77
- while (upperBorder - lowerBorder > 1) {
78
- const middle = lowerBorder + Math.floor((upperBorder - lowerBorder) / 2);
79
- const value = (0, exports.compareHashes)(this.hashArray[middle].hash, hashToSearch);
80
- if (value === 0) {
81
- return this.hashArray[middle];
82
- }
83
- else if (value < 0) {
84
- lowerBorder = middle;
85
- }
86
- else {
87
- upperBorder = middle;
88
- }
89
- }
90
- return undefined;
91
- };
92
50
  this.slpkArchive = slpkArchive;
93
51
  this.hashArray = hashFile;
94
52
  }
@@ -155,16 +113,19 @@ class SLPKArchive {
155
113
  */
156
114
  async getFileBytes(path) {
157
115
  const nameHash = Buffer.from((0, md5_1.default)(path), 'hex');
158
- const fileInfo = this.findBin(nameHash); // implement binary search
116
+ const fileInfo = (0, zip_1.findBin)(nameHash, this.hashArray); // implement binary search
159
117
  if (!fileInfo) {
160
118
  return undefined;
161
119
  }
162
- const localFileHeader = await (0, local_file_header_1.parseZipLocalFileHeader)(fileInfo.offset, this.slpkArchive);
120
+ const localFileHeader = await (0, zip_1.parseZipLocalFileHeader)(fileInfo.offset, this.slpkArchive);
163
121
  if (!localFileHeader) {
164
122
  return undefined;
165
123
  }
166
124
  const compressedFile = this.slpkArchive.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
167
125
  return compressedFile;
168
126
  }
127
+ findBin(nameHash) {
128
+ throw new Error('Method not implemented.');
129
+ }
169
130
  }
170
131
  exports.SLPKArchive = SLPKArchive;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/i3s",
3
- "version": "4.0.0-alpha.19",
3
+ "version": "4.0.0-alpha.21",
4
4
  "description": "i3s .",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -33,13 +33,13 @@
33
33
  "build-worker-node": "esbuild src/workers/i3s-content-worker-node.ts --outfile=dist/i3s-content-worker-node.js --platform=node --target=node16 --minify --bundle --sourcemap --define:__VERSION__=\\\"$npm_package_version\\\""
34
34
  },
35
35
  "dependencies": {
36
- "@loaders.gl/compression": "4.0.0-alpha.19",
37
- "@loaders.gl/draco": "4.0.0-alpha.19",
38
- "@loaders.gl/images": "4.0.0-alpha.19",
39
- "@loaders.gl/loader-utils": "4.0.0-alpha.19",
40
- "@loaders.gl/schema": "4.0.0-alpha.19",
41
- "@loaders.gl/textures": "4.0.0-alpha.19",
42
- "@loaders.gl/tiles": "4.0.0-alpha.19",
36
+ "@loaders.gl/compression": "4.0.0-alpha.21",
37
+ "@loaders.gl/draco": "4.0.0-alpha.21",
38
+ "@loaders.gl/images": "4.0.0-alpha.21",
39
+ "@loaders.gl/loader-utils": "4.0.0-alpha.21",
40
+ "@loaders.gl/schema": "4.0.0-alpha.21",
41
+ "@loaders.gl/textures": "4.0.0-alpha.21",
42
+ "@loaders.gl/tiles": "4.0.0-alpha.21",
43
43
  "@luma.gl/constants": "^8.5.4",
44
44
  "@math.gl/core": "^3.5.1",
45
45
  "@math.gl/culling": "^3.5.1",
@@ -49,5 +49,5 @@
49
49
  "peerDependencies": {
50
50
  "@loaders.gl/core": "^4.0.0-alpha.8"
51
51
  },
52
- "gitHead": "2ca50ec4e1d312c124eb7c93c60ab6fd17ee833e"
52
+ "gitHead": "df5d670b136192b26941396e944f9c46be788e83"
53
53
  }
@@ -1,6 +1,6 @@
1
1
  import {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';
2
+ import {DataViewFile} from '@loaders.gl/zip';
2
3
  import {parseSLPK as parseSLPKFromProvider} from './lib/parsers/parse-slpk/parse-slpk';
3
- import {DataViewFileProvider} from './lib/parsers/parse-zip/data-view-file-provider';
4
4
 
5
5
  // __VERSION__ is injected by babel-plugin-version-inline
6
6
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
@@ -38,7 +38,7 @@ export const SLPKLoader: LoaderWithParser<Buffer, never, SLPKLoaderOptions> = {
38
38
  */
39
39
 
40
40
  async function parseSLPK(data: ArrayBuffer, options: SLPKLoaderOptions = {}) {
41
- return (await parseSLPKFromProvider(new DataViewFileProvider(new DataView(data)))).getFile(
41
+ return (await parseSLPKFromProvider(new DataViewFile(new DataView(data)))).getFile(
42
42
  options.slpk?.path ?? '',
43
43
  options.slpk?.pathMode
44
44
  );
package/src/index.ts CHANGED
@@ -35,7 +35,6 @@ export type {
35
35
  OperationalLayer,
36
36
  TextureSetDefinitionFormats
37
37
  } from './types';
38
- export type {FileProvider} from './lib/parsers/parse-zip/file-provider';
39
38
  export type {I3SLoaderOptions} from './i3s-loader';
40
39
 
41
40
  export {COORDINATE_SYSTEM} from './lib/parsers/constants';
@@ -47,5 +46,4 @@ export {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader'
47
46
  export {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';
48
47
  export {I3SNodePageLoader} from './i3s-node-page-loader';
49
48
  export {ArcGisWebSceneLoader} from './arcgis-webscene-loader';
50
- export {parseZipLocalFileHeader} from './lib/parsers/parse-zip/local-file-header';
51
49
  export {parseSLPK} from './lib/parsers/parse-slpk/parse-slpk';
@@ -1,10 +1,14 @@
1
- import md5 from 'md5';
2
- import {parseZipCDFileHeader, signature as cdHeaderSignature} from '../parse-zip/cd-file-header';
3
- import {parseEoCDRecord} from '../parse-zip/end-of-central-directory';
4
- import {FileProvider} from '../parse-zip/file-provider';
5
- import {parseZipLocalFileHeader} from '../parse-zip/local-file-header';
6
- import {searchFromTheEnd} from '../parse-zip/search-from-the-end';
7
- import {HashElement, SLPKArchive, compareHashes} from './slpk-archieve';
1
+ import {
2
+ parseZipCDFileHeader,
3
+ cdSignature as cdHeaderSignature,
4
+ FileProvider,
5
+ parseZipLocalFileHeader,
6
+ searchFromTheEnd,
7
+ HashElement,
8
+ parseHashFile,
9
+ generateHashInfo
10
+ } from '@loaders.gl/zip';
11
+ import {SLPKArchive} from './slpk-archieve';
8
12
 
9
13
  /**
10
14
  * Creates slpk file handler from raw file
@@ -46,52 +50,3 @@ export const parseSLPK = async (
46
50
 
47
51
  return new SLPKArchive(fileProvider, hashData);
48
52
  };
49
-
50
- /**
51
- * generates hash info from central directory
52
- * @param fileProvider - provider of the archive
53
- * @returns ready to use hash info
54
- */
55
- const generateHashInfo = async (fileProvider: FileProvider): Promise<HashElement[]> => {
56
- const {cdStartOffset} = await parseEoCDRecord(fileProvider);
57
- let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);
58
- const hashInfo: HashElement[] = [];
59
- while (cdHeader) {
60
- hashInfo.push({
61
- hash: Buffer.from(md5(cdHeader.fileName.split('\\').join('/').toLocaleLowerCase()), 'hex'),
62
- offset: cdHeader.localHeaderOffset
63
- });
64
- cdHeader = await parseZipCDFileHeader(
65
- cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),
66
- fileProvider
67
- );
68
- }
69
- hashInfo.sort((a, b) => compareHashes(a.hash, b.hash));
70
- return hashInfo;
71
- };
72
-
73
- /**
74
- * Reads hash file from buffer and returns it in ready-to-use form
75
- * @param hashFile - bufer containing hash file
76
- * @returns Array containing file info
77
- */
78
- const parseHashFile = (hashFile: ArrayBuffer): HashElement[] => {
79
- const hashFileBuffer = Buffer.from(hashFile);
80
- const hashArray: HashElement[] = [];
81
- for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {
82
- const offsetBuffer = new DataView(
83
- hashFileBuffer.buffer.slice(
84
- hashFileBuffer.byteOffset + i + 16,
85
- hashFileBuffer.byteOffset + i + 24
86
- )
87
- );
88
- const offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);
89
- hashArray.push({
90
- hash: Buffer.from(
91
- hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)
92
- ),
93
- offset
94
- });
95
- }
96
- return hashArray;
97
- };
@@ -1,35 +1,6 @@
1
1
  import md5 from 'md5';
2
- import {parseZipLocalFileHeader} from '../parse-zip/local-file-header';
2
+ import {FileProvider, parseZipLocalFileHeader, HashElement, findBin} from '@loaders.gl/zip';
3
3
  import {GZipCompression} from '@loaders.gl/compression';
4
- import {FileProvider} from '../parse-zip/file-provider';
5
-
6
- /** Element of hash array */
7
- export type HashElement = {
8
- /** File name hash */
9
- hash: Buffer;
10
- /** File offset in the archive */
11
- offset: bigint;
12
- };
13
-
14
- /**
15
- * Comparing md5 hashes according to https://github.com/Esri/i3s-spec/blob/master/docs/2.0/slpk_hashtable.pcsl.md step 5
16
- * @param hash1 hash to compare
17
- * @param hash2 hash to compare
18
- * @returns -1 if hash1 < hash2, 0 of hash1 === hash2, 1 if hash1 > hash2
19
- */
20
- export const compareHashes = (hash1: Buffer, hash2: Buffer): number => {
21
- const h1 = new BigUint64Array(hash1.buffer, hash1.byteOffset, 2);
22
- const h2 = new BigUint64Array(hash2.buffer, hash2.byteOffset, 2);
23
-
24
- const diff = h1[0] === h2[0] ? h1[1] - h2[1] : h1[0] - h2[0];
25
-
26
- if (diff < 0n) {
27
- return -1;
28
- } else if (diff === 0n) {
29
- return 0;
30
- }
31
- return 1;
32
- };
33
4
 
34
5
  /** Description of real paths for different file types */
35
6
  const PATH_DESCRIPTIONS: {test: RegExp; extensions: string[]}[] = [
@@ -78,29 +49,6 @@ export class SLPKArchive {
78
49
  this.hashArray = hashFile;
79
50
  }
80
51
 
81
- /**
82
- * Binary search in the hash info
83
- * @param hashToSearch hash that we need to find
84
- * @returns required hash element or undefined if not found
85
- */
86
- private findBin = (hashToSearch: Buffer): HashElement | undefined => {
87
- let lowerBorder = 0;
88
- let upperBorder = this.hashArray.length;
89
-
90
- while (upperBorder - lowerBorder > 1) {
91
- const middle = lowerBorder + Math.floor((upperBorder - lowerBorder) / 2);
92
- const value = compareHashes(this.hashArray[middle].hash, hashToSearch);
93
- if (value === 0) {
94
- return this.hashArray[middle];
95
- } else if (value < 0) {
96
- lowerBorder = middle;
97
- } else {
98
- upperBorder = middle;
99
- }
100
- }
101
- return undefined;
102
- };
103
-
104
52
  /**
105
53
  * Returns file with the given path from slpk archive
106
54
  * @param path - path inside the slpk
@@ -168,7 +116,7 @@ export class SLPKArchive {
168
116
  */
169
117
  private async getFileBytes(path: string): Promise<ArrayBuffer | undefined> {
170
118
  const nameHash = Buffer.from(md5(path), 'hex');
171
- const fileInfo = this.findBin(nameHash); // implement binary search
119
+ const fileInfo = findBin(nameHash, this.hashArray); // implement binary search
172
120
  if (!fileInfo) {
173
121
  return undefined;
174
122
  }
@@ -185,4 +133,7 @@ export class SLPKArchive {
185
133
 
186
134
  return compressedFile;
187
135
  }
136
+ findBin(nameHash: Buffer) {
137
+ throw new Error('Method not implemented.');
138
+ }
188
139
  }