@loaders.gl/i3s 4.0.0-alpha.15 → 4.0.0-alpha.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/dist.min.js +278 -197
  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.map +1 -1
  10. package/dist/es5/lib/parsers/constants.js +14 -15
  11. package/dist/es5/lib/parsers/constants.js.map +1 -1
  12. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +93 -29
  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 +51 -30
  15. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  16. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +61 -42
  17. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  18. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js +100 -0
  19. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
  20. package/dist/es5/lib/parsers/parse-zip/local-file-header.js +1 -1
  21. package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  22. package/dist/es5/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
  23. package/dist/es5/types.js +1 -14
  24. package/dist/es5/types.js.map +1 -1
  25. package/dist/esm/arcgis-webscene-loader.js +1 -1
  26. package/dist/esm/i3s-attribute-loader.js +1 -1
  27. package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
  28. package/dist/esm/i3s-content-loader.js +1 -1
  29. package/dist/esm/i3s-loader.js +1 -1
  30. package/dist/esm/i3s-node-page-loader.js +1 -1
  31. package/dist/esm/i3s-slpk-loader.js +1 -1
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/lib/parsers/constants.js +14 -15
  34. package/dist/esm/lib/parsers/constants.js.map +1 -1
  35. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +49 -16
  36. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  37. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +35 -18
  38. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  39. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js +14 -8
  40. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  41. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js +33 -0
  42. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
  43. package/dist/esm/lib/parsers/parse-zip/local-file-header.js +1 -1
  44. package/dist/esm/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  45. package/dist/esm/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
  46. package/dist/esm/types.js +0 -12
  47. package/dist/esm/types.js.map +1 -1
  48. package/dist/i3s-content-worker-node.js +47 -47
  49. package/dist/i3s-content-worker-node.js.map +2 -2
  50. package/dist/i3s-content-worker.js +22 -34
  51. package/dist/index.d.ts +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/lib/parsers/constants.d.ts.map +1 -1
  54. package/dist/lib/parsers/constants.js +14 -15
  55. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +2 -1
  56. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  57. package/dist/lib/parsers/parse-slpk/parse-slpk.js +61 -15
  58. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +21 -10
  59. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  60. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +53 -24
  61. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts +5 -1
  62. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts.map +1 -1
  63. package/dist/lib/parsers/parse-zip/cd-file-header.js +15 -9
  64. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts +18 -0
  65. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts.map +1 -0
  66. package/dist/lib/parsers/parse-zip/end-of-central-directory.js +41 -0
  67. package/dist/lib/parsers/parse-zip/local-file-header.d.ts +1 -1
  68. package/dist/lib/parsers/parse-zip/local-file-header.d.ts.map +1 -1
  69. package/dist/lib/parsers/parse-zip/local-file-header.js +1 -1
  70. package/dist/lib/parsers/parse-zip/search-from-the-end.d.ts.map +1 -0
  71. package/dist/types.d.ts +17 -24
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js +1 -13
  74. package/package.json +9 -9
  75. package/src/index.ts +0 -1
  76. package/src/lib/parsers/constants.ts +14 -15
  77. package/src/lib/parsers/parse-slpk/parse-slpk.ts +79 -25
  78. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +55 -37
  79. package/src/lib/parsers/parse-zip/cd-file-header.ts +27 -9
  80. package/src/lib/parsers/parse-zip/end-of-central-directory.ts +78 -0
  81. package/src/lib/parsers/parse-zip/local-file-header.ts +2 -2
  82. package/src/types.ts +25 -40
  83. package/dist/es5/lib/parsers/parse-slpk/search-from-the-end.js.map +0 -1
  84. package/dist/esm/lib/parsers/parse-slpk/search-from-the-end.js.map +0 -1
  85. package/dist/lib/parsers/parse-slpk/search-from-the-end.d.ts.map +0 -1
  86. /package/dist/es5/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
  87. /package/dist/esm/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
  88. /package/dist/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.d.ts +0 -0
  89. /package/dist/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
  90. /package/src/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.ts +0 -0
@@ -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.15" !== 'undefined' ? "4.0.0-alpha.15" : 'latest';
10
+ var VERSION = typeof "4.0.0-alpha.16" !== 'undefined' ? "4.0.0-alpha.16" : 'latest';
11
11
  function parseNodePage(_x, _x2) {
12
12
  return _parseNodePage.apply(this, arguments);
13
13
  }
@@ -9,7 +9,7 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _parseSlpk = require("./lib/parsers/parse-slpk/parse-slpk");
11
11
  var _dataViewFileProvider = require("./lib/parsers/parse-zip/data-view-file-provider");
12
- var VERSION = typeof "4.0.0-alpha.15" !== 'undefined' ? "4.0.0-alpha.15" : 'latest';
12
+ var VERSION = typeof "4.0.0-alpha.16" !== 'undefined' ? "4.0.0-alpha.16" : 'latest';
13
13
  var SLPKLoader = {
14
14
  name: 'I3S SLPK (Scene Layer Package)',
15
15
  id: 'slpk',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_constants","require","_i3sLoader","_i3sSlpkLoader","_i3sContentLoader","_i3sAttributeLoader","_i3sBuildingSceneLayerLoader","_i3sNodePageLoader","_arcgisWebsceneLoader","_localFileHeader","_parseSlpk"],"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';\nexport type {FileProvider} from './lib/parsers/parse-zip/file-provider';\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 {parseSLPK} from './lib/parsers/parse-slpk/parse-slpk';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,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,UAAA,GAAAT,OAAA"}
1
+ {"version":3,"file":"index.js","names":["_constants","require","_i3sLoader","_i3sSlpkLoader","_i3sContentLoader","_i3sAttributeLoader","_i3sBuildingSceneLayerLoader","_i3sNodePageLoader","_arcgisWebsceneLoader","_localFileHeader","_parseSlpk"],"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 OperationalLayer,\n TextureSetDefinitionFormats\n} from './types';\nexport type {FileProvider} from './lib/parsers/parse-zip/file-provider';\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 {parseSLPK} from './lib/parsers/parse-slpk/parse-slpk';\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,UAAA,GAAAT,OAAA"}
@@ -8,18 +8,17 @@ exports.STRING_ATTRIBUTE_TYPE = exports.OBJECT_ID_ATTRIBUTE_TYPE = exports.INT_1
8
8
  exports.getConstructorForDataFormat = getConstructorForDataFormat;
9
9
  exports.sizeOf = sizeOf;
10
10
  var _constants = _interopRequireDefault(require("@luma.gl/constants"));
11
- var _types = require("../../types");
12
11
  function getConstructorForDataFormat(dataType) {
13
12
  switch (dataType) {
14
- case _types.DATA_TYPE.UInt8:
13
+ case 'UInt8':
15
14
  return Uint8Array;
16
- case _types.DATA_TYPE.UInt16:
15
+ case 'UInt16':
17
16
  return Uint16Array;
18
- case _types.DATA_TYPE.UInt32:
17
+ case 'UInt32':
19
18
  return Uint32Array;
20
- case _types.DATA_TYPE.Float32:
19
+ case 'Float32':
21
20
  return Float32Array;
22
- case _types.DATA_TYPE.UInt64:
21
+ case 'UInt64':
23
22
  return Float64Array;
24
23
  default:
25
24
  throw new Error("parse i3s tile content: unknown type of data: ".concat(dataType));
@@ -35,18 +34,18 @@ var GL_TYPE_MAP = {
35
34
  exports.GL_TYPE_MAP = GL_TYPE_MAP;
36
35
  function sizeOf(dataType) {
37
36
  switch (dataType) {
38
- case _types.DATA_TYPE.UInt8:
37
+ case 'UInt8':
39
38
  return 1;
40
- case _types.DATA_TYPE.UInt16:
41
- case _types.DATA_TYPE.Int16:
39
+ case 'UInt16':
40
+ case 'Int16':
42
41
  return 2;
43
- case _types.DATA_TYPE.UInt32:
44
- case _types.DATA_TYPE.Int32:
45
- case _types.DATA_TYPE.Float32:
42
+ case 'UInt32':
43
+ case 'Int32':
44
+ case 'Float32':
46
45
  return 4;
47
- case _types.DATA_TYPE.UInt64:
48
- case _types.DATA_TYPE.Int64:
49
- case _types.DATA_TYPE.Float64:
46
+ case 'UInt64':
47
+ case 'Int64':
48
+ case 'Float64':
50
49
  return 8;
51
50
  default:
52
51
  throw new Error("parse i3s tile content: unknown size of data: ".concat(dataType));
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["_constants","_interopRequireDefault","require","_types","getConstructorForDataFormat","dataType","DATA_TYPE","UInt8","Uint8Array","UInt16","Uint16Array","UInt32","Uint32Array","Float32","Float32Array","UInt64","Float64Array","Error","concat","GL_TYPE_MAP","GL","UNSIGNED_BYTE","UNSIGNED_SHORT","FLOAT","UNSIGNED_INT","DOUBLE","exports","sizeOf","Int16","Int32","Int64","Float64","STRING_ATTRIBUTE_TYPE","OBJECT_ID_ATTRIBUTE_TYPE","FLOAT_64_TYPE","INT_16_ATTRIBUTE_TYPE","COORDINATE_SYSTEM"],"sources":["../../../../src/lib/parsers/constants.ts"],"sourcesContent":["import GL from '@luma.gl/constants';\nimport {DATA_TYPE} from '../../types';\n\nexport function getConstructorForDataFormat(dataType: string) {\n switch (dataType) {\n case DATA_TYPE.UInt8:\n return Uint8Array;\n case DATA_TYPE.UInt16:\n return Uint16Array;\n case DATA_TYPE.UInt32:\n return Uint32Array;\n case DATA_TYPE.Float32:\n return Float32Array;\n case DATA_TYPE.UInt64:\n return Float64Array;\n default:\n throw new Error(`parse i3s tile content: unknown type of data: ${dataType}`);\n }\n}\n\nexport const GL_TYPE_MAP: {[key: string]: number} = {\n UInt8: GL.UNSIGNED_BYTE,\n UInt16: GL.UNSIGNED_SHORT,\n Float32: GL.FLOAT,\n UInt32: GL.UNSIGNED_INT,\n UInt64: GL.DOUBLE\n};\n/**\n * Returns how many bytes a type occupies\n * @param dataType\n * @returns\n */\nexport function sizeOf(dataType: string): number {\n switch (dataType) {\n case DATA_TYPE.UInt8:\n return 1;\n case DATA_TYPE.UInt16:\n case DATA_TYPE.Int16:\n return 2;\n case DATA_TYPE.UInt32:\n case DATA_TYPE.Int32:\n case DATA_TYPE.Float32:\n return 4;\n case DATA_TYPE.UInt64:\n case DATA_TYPE.Int64:\n case DATA_TYPE.Float64:\n return 8;\n default:\n throw new Error(`parse i3s tile content: unknown size of data: ${dataType}`);\n }\n}\n\nexport const STRING_ATTRIBUTE_TYPE = 'String';\nexport const OBJECT_ID_ATTRIBUTE_TYPE = 'Oid32';\nexport const FLOAT_64_TYPE = 'Float64';\nexport const INT_16_ATTRIBUTE_TYPE = 'Int16';\n\n// https://github.com/visgl/deck.gl/blob/9548f43cba2234a1f4877b6b17f6c88eb35b2e08/modules/core/src/lib/constants.js#L27\n// Describes the format of positions\nexport enum COORDINATE_SYSTEM {\n /**\n * `LNGLAT` if rendering into a geospatial viewport, `CARTESIAN` otherwise\n */\n DEFAULT = -1,\n /**\n * Positions are interpreted as [lng, lat, elevation]\n * lng lat are degrees, elevation is meters. distances as meters.\n */\n LNGLAT = 1,\n /**\n * Positions are interpreted as meter offsets, distances as meters\n */\n METER_OFFSETS = 2,\n /**\n * Positions are interpreted as lng lat offsets: [deltaLng, deltaLat, elevation]\n * deltaLng, deltaLat are delta degrees, elevation is meters.\n * distances as meters.\n */\n LNGLAT_OFFSETS = 3,\n /**\n * Non-geospatial\n */\n CARTESIAN = 0\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,SAASE,2BAA2BA,CAACC,QAAgB,EAAE;EAC5D,QAAQA,QAAQ;IACd,KAAKC,gBAAS,CAACC,KAAK;MAClB,OAAOC,UAAU;IACnB,KAAKF,gBAAS,CAACG,MAAM;MACnB,OAAOC,WAAW;IACpB,KAAKJ,gBAAS,CAACK,MAAM;MACnB,OAAOC,WAAW;IACpB,KAAKN,gBAAS,CAACO,OAAO;MACpB,OAAOC,YAAY;IACrB,KAAKR,gBAAS,CAACS,MAAM;MACnB,OAAOC,YAAY;IACrB;MACE,MAAM,IAAIC,KAAK,kDAAAC,MAAA,CAAkDb,QAAQ,CAAE,CAAC;EAChF;AACF;AAEO,IAAMc,WAAoC,GAAG;EAClDZ,KAAK,EAAEa,kBAAE,CAACC,aAAa;EACvBZ,MAAM,EAAEW,kBAAE,CAACE,cAAc;EACzBT,OAAO,EAAEO,kBAAE,CAACG,KAAK;EACjBZ,MAAM,EAAES,kBAAE,CAACI,YAAY;EACvBT,MAAM,EAAEK,kBAAE,CAACK;AACb,CAAC;AAACC,OAAA,CAAAP,WAAA,GAAAA,WAAA;AAMK,SAASQ,MAAMA,CAACtB,QAAgB,EAAU;EAC/C,QAAQA,QAAQ;IACd,KAAKC,gBAAS,CAACC,KAAK;MAClB,OAAO,CAAC;IACV,KAAKD,gBAAS,CAACG,MAAM;IACrB,KAAKH,gBAAS,CAACsB,KAAK;MAClB,OAAO,CAAC;IACV,KAAKtB,gBAAS,CAACK,MAAM;IACrB,KAAKL,gBAAS,CAACuB,KAAK;IACpB,KAAKvB,gBAAS,CAACO,OAAO;MACpB,OAAO,CAAC;IACV,KAAKP,gBAAS,CAACS,MAAM;IACrB,KAAKT,gBAAS,CAACwB,KAAK;IACpB,KAAKxB,gBAAS,CAACyB,OAAO;MACpB,OAAO,CAAC;IACV;MACE,MAAM,IAAId,KAAK,kDAAAC,MAAA,CAAkDb,QAAQ,CAAE,CAAC;EAChF;AACF;AAEO,IAAM2B,qBAAqB,GAAG,QAAQ;AAACN,OAAA,CAAAM,qBAAA,GAAAA,qBAAA;AACvC,IAAMC,wBAAwB,GAAG,OAAO;AAACP,OAAA,CAAAO,wBAAA,GAAAA,wBAAA;AACzC,IAAMC,aAAa,GAAG,SAAS;AAACR,OAAA,CAAAQ,aAAA,GAAAA,aAAA;AAChC,IAAMC,qBAAqB,GAAG,OAAO;AAACT,OAAA,CAAAS,qBAAA,GAAAA,qBAAA;AAAA,IAIjCC,iBAAiB,aAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAAAV,OAAA,CAAAU,iBAAA,GAAAA,iBAAA"}
1
+ {"version":3,"file":"constants.js","names":["_constants","_interopRequireDefault","require","getConstructorForDataFormat","dataType","Uint8Array","Uint16Array","Uint32Array","Float32Array","Float64Array","Error","concat","GL_TYPE_MAP","UInt8","GL","UNSIGNED_BYTE","UInt16","UNSIGNED_SHORT","Float32","FLOAT","UInt32","UNSIGNED_INT","UInt64","DOUBLE","exports","sizeOf","STRING_ATTRIBUTE_TYPE","OBJECT_ID_ATTRIBUTE_TYPE","FLOAT_64_TYPE","INT_16_ATTRIBUTE_TYPE","COORDINATE_SYSTEM"],"sources":["../../../../src/lib/parsers/constants.ts"],"sourcesContent":["import GL from '@luma.gl/constants';\n\nexport function getConstructorForDataFormat(dataType: string) {\n switch (dataType) {\n case 'UInt8':\n return Uint8Array;\n case 'UInt16':\n return Uint16Array;\n case 'UInt32':\n return Uint32Array;\n case 'Float32':\n return Float32Array;\n case 'UInt64':\n return Float64Array;\n default:\n throw new Error(`parse i3s tile content: unknown type of data: ${dataType}`);\n }\n}\n\nexport const GL_TYPE_MAP: {[key: string]: number} = {\n UInt8: GL.UNSIGNED_BYTE,\n UInt16: GL.UNSIGNED_SHORT,\n Float32: GL.FLOAT,\n UInt32: GL.UNSIGNED_INT,\n UInt64: GL.DOUBLE\n};\n/**\n * Returns how many bytes a type occupies\n * @param dataType\n * @returns\n */\nexport function sizeOf(dataType: string): number {\n switch (dataType) {\n case 'UInt8':\n return 1;\n case 'UInt16':\n case 'Int16':\n return 2;\n case 'UInt32':\n case 'Int32':\n case 'Float32':\n return 4;\n case 'UInt64':\n case 'Int64':\n case 'Float64':\n return 8;\n default:\n throw new Error(`parse i3s tile content: unknown size of data: ${dataType}`);\n }\n}\n\nexport const STRING_ATTRIBUTE_TYPE = 'String';\nexport const OBJECT_ID_ATTRIBUTE_TYPE = 'Oid32';\nexport const FLOAT_64_TYPE = 'Float64';\nexport const INT_16_ATTRIBUTE_TYPE = 'Int16';\n\n// https://github.com/visgl/deck.gl/blob/9548f43cba2234a1f4877b6b17f6c88eb35b2e08/modules/core/src/lib/constants.js#L27\n// Describes the format of positions\nexport enum COORDINATE_SYSTEM {\n /**\n * `LNGLAT` if rendering into a geospatial viewport, `CARTESIAN` otherwise\n */\n DEFAULT = -1,\n /**\n * Positions are interpreted as [lng, lat, elevation]\n * lng lat are degrees, elevation is meters. distances as meters.\n */\n LNGLAT = 1,\n /**\n * Positions are interpreted as meter offsets, distances as meters\n */\n METER_OFFSETS = 2,\n /**\n * Positions are interpreted as lng lat offsets: [deltaLng, deltaLat, elevation]\n * deltaLng, deltaLat are delta degrees, elevation is meters.\n * distances as meters.\n */\n LNGLAT_OFFSETS = 3,\n /**\n * Non-geospatial\n */\n CARTESIAN = 0\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEO,SAASC,2BAA2BA,CAACC,QAAgB,EAAE;EAC5D,QAAQA,QAAQ;IACd,KAAK,OAAO;MACV,OAAOC,UAAU;IACnB,KAAK,QAAQ;MACX,OAAOC,WAAW;IACpB,KAAK,QAAQ;MACX,OAAOC,WAAW;IACpB,KAAK,SAAS;MACZ,OAAOC,YAAY;IACrB,KAAK,QAAQ;MACX,OAAOC,YAAY;IACrB;MACE,MAAM,IAAIC,KAAK,kDAAAC,MAAA,CAAkDP,QAAQ,CAAE,CAAC;EAChF;AACF;AAEO,IAAMQ,WAAoC,GAAG;EAClDC,KAAK,EAAEC,kBAAE,CAACC,aAAa;EACvBC,MAAM,EAAEF,kBAAE,CAACG,cAAc;EACzBC,OAAO,EAAEJ,kBAAE,CAACK,KAAK;EACjBC,MAAM,EAAEN,kBAAE,CAACO,YAAY;EACvBC,MAAM,EAAER,kBAAE,CAACS;AACb,CAAC;AAACC,OAAA,CAAAZ,WAAA,GAAAA,WAAA;AAMK,SAASa,MAAMA,CAACrB,QAAgB,EAAU;EAC/C,QAAQA,QAAQ;IACd,KAAK,OAAO;MACV,OAAO,CAAC;IACV,KAAK,QAAQ;IACb,KAAK,OAAO;MACV,OAAO,CAAC;IACV,KAAK,QAAQ;IACb,KAAK,OAAO;IACZ,KAAK,SAAS;MACZ,OAAO,CAAC;IACV,KAAK,QAAQ;IACb,KAAK,OAAO;IACZ,KAAK,SAAS;MACZ,OAAO,CAAC;IACV;MACE,MAAM,IAAIM,KAAK,kDAAAC,MAAA,CAAkDP,QAAQ,CAAE,CAAC;EAChF;AACF;AAEO,IAAMsB,qBAAqB,GAAG,QAAQ;AAACF,OAAA,CAAAE,qBAAA,GAAAA,qBAAA;AACvC,IAAMC,wBAAwB,GAAG,OAAO;AAACH,OAAA,CAAAG,wBAAA,GAAAA,wBAAA;AACzC,IAAMC,aAAa,GAAG,SAAS;AAACJ,OAAA,CAAAI,aAAA,GAAAA,aAAA;AAChC,IAAMC,qBAAqB,GAAG,OAAO;AAACL,OAAA,CAAAK,qBAAA,GAAAA,qBAAA;AAAA,IAIjCC,iBAAiB,aAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAAAN,OAAA,CAAAM,iBAAA,GAAAA,iBAAA"}
@@ -7,62 +7,126 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.parseSLPK = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _md = _interopRequireDefault(require("md5"));
10
11
  var _cdFileHeader = require("../parse-zip/cd-file-header");
12
+ var _endOfCentralDirectory = require("../parse-zip/end-of-central-directory");
11
13
  var _localFileHeader = require("../parse-zip/local-file-header");
12
- var _searchFromTheEnd = require("./search-from-the-end");
14
+ var _searchFromTheEnd = require("../parse-zip/search-from-the-end");
13
15
  var _slpkArchieve = require("./slpk-archieve");
14
16
  var parseSLPK = function () {
15
- var _ref = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(fileProvider) {
16
- var cdFileHeaderSignature, hashCDOffset, cdFileHeader, localFileHeader, fileDataOffset, hashFile;
17
+ var _ref = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(fileProvider, cb) {
18
+ var hashCDOffset, cdFileHeader, hashData, localFileHeader, fileDataOffset, hashFile;
17
19
  return _regenerator.default.wrap(function _callee$(_context) {
18
20
  while (1) switch (_context.prev = _context.next) {
19
21
  case 0:
20
- cdFileHeaderSignature = [0x50, 0x4b, 0x01, 0x02];
21
- _context.next = 3;
22
- return (0, _searchFromTheEnd.searchFromTheEnd)(fileProvider, cdFileHeaderSignature);
23
- case 3:
22
+ _context.next = 2;
23
+ return (0, _searchFromTheEnd.searchFromTheEnd)(fileProvider, _cdFileHeader.signature);
24
+ case 2:
24
25
  hashCDOffset = _context.sent;
25
- _context.next = 6;
26
+ _context.next = 5;
26
27
  return (0, _cdFileHeader.parseZipCDFileHeader)(hashCDOffset, fileProvider);
27
- case 6:
28
+ case 5:
28
29
  cdFileHeader = _context.sent;
29
- if (!(cdFileHeader.fileName !== '@specialIndexFileHASH128@')) {
30
- _context.next = 9;
31
- break;
32
- }
33
- throw new Error('No hash file in slpk');
34
- case 9:
35
- _context.next = 11;
36
- return (0, _localFileHeader.parseZipLocalFileHeader)(cdFileHeader.localHeaderOffset, fileProvider);
37
- case 11:
38
- localFileHeader = _context.sent;
39
- if (localFileHeader) {
30
+ if (!((cdFileHeader === null || cdFileHeader === void 0 ? void 0 : cdFileHeader.fileName) !== '@specialIndexFileHASH128@')) {
40
31
  _context.next = 14;
41
32
  break;
42
33
  }
43
- throw new Error('No hash file in slpk');
34
+ cb === null || cb === void 0 ? void 0 : cb('SLPK doesnt contain hash file');
35
+ _context.next = 10;
36
+ return generateHashInfo(fileProvider);
37
+ case 10:
38
+ hashData = _context.sent;
39
+ cb === null || cb === void 0 ? void 0 : cb('hash info has been composed according to central directory records');
40
+ _context.next = 25;
41
+ break;
44
42
  case 14:
45
- fileDataOffset = localFileHeader.fileDataOffset;
43
+ cb === null || cb === void 0 ? void 0 : cb('SLPK contains hash file');
46
44
  _context.next = 17;
47
- return fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
45
+ return (0, _localFileHeader.parseZipLocalFileHeader)(cdFileHeader.localHeaderOffset, fileProvider);
48
46
  case 17:
49
- hashFile = _context.sent;
50
- if (hashFile) {
47
+ localFileHeader = _context.sent;
48
+ if (localFileHeader) {
51
49
  _context.next = 20;
52
50
  break;
53
51
  }
54
- throw new Error('No hash file in slpk');
52
+ throw new Error('corrupted SLPK');
55
53
  case 20:
56
- return _context.abrupt("return", new _slpkArchieve.SLPKArchive(fileProvider, hashFile));
57
- case 21:
54
+ fileDataOffset = localFileHeader.fileDataOffset;
55
+ _context.next = 23;
56
+ return fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
57
+ case 23:
58
+ hashFile = _context.sent;
59
+ hashData = parseHashFile(hashFile);
60
+ case 25:
61
+ return _context.abrupt("return", new _slpkArchieve.SLPKArchive(fileProvider, hashData));
62
+ case 26:
58
63
  case "end":
59
64
  return _context.stop();
60
65
  }
61
66
  }, _callee);
62
67
  }));
63
- return function parseSLPK(_x) {
68
+ return function parseSLPK(_x, _x2) {
64
69
  return _ref.apply(this, arguments);
65
70
  };
66
71
  }();
67
72
  exports.parseSLPK = parseSLPK;
73
+ var generateHashInfo = function () {
74
+ var _ref2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(fileProvider) {
75
+ var _yield$parseEoCDRecor, cdStartOffset, cdHeader, hashInfo;
76
+ return _regenerator.default.wrap(function _callee2$(_context2) {
77
+ while (1) switch (_context2.prev = _context2.next) {
78
+ case 0:
79
+ _context2.next = 2;
80
+ return (0, _endOfCentralDirectory.parseEoCDRecord)(fileProvider);
81
+ case 2:
82
+ _yield$parseEoCDRecor = _context2.sent;
83
+ cdStartOffset = _yield$parseEoCDRecor.cdStartOffset;
84
+ _context2.next = 6;
85
+ return (0, _cdFileHeader.parseZipCDFileHeader)(cdStartOffset, fileProvider);
86
+ case 6:
87
+ cdHeader = _context2.sent;
88
+ hashInfo = [];
89
+ case 8:
90
+ if (!cdHeader) {
91
+ _context2.next = 15;
92
+ break;
93
+ }
94
+ hashInfo.push({
95
+ hash: Buffer.from((0, _md.default)(cdHeader.fileName.split('\\').join('/').toLocaleLowerCase()), 'hex'),
96
+ offset: cdHeader.localHeaderOffset
97
+ });
98
+ _context2.next = 12;
99
+ return (0, _cdFileHeader.parseZipCDFileHeader)(cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength), fileProvider);
100
+ case 12:
101
+ cdHeader = _context2.sent;
102
+ _context2.next = 8;
103
+ break;
104
+ case 15:
105
+ hashInfo.sort(function (a, b) {
106
+ return (0, _slpkArchieve.compareHashes)(a.hash, b.hash);
107
+ });
108
+ return _context2.abrupt("return", hashInfo);
109
+ case 17:
110
+ case "end":
111
+ return _context2.stop();
112
+ }
113
+ }, _callee2);
114
+ }));
115
+ return function generateHashInfo(_x3) {
116
+ return _ref2.apply(this, arguments);
117
+ };
118
+ }();
119
+ var parseHashFile = function parseHashFile(hashFile) {
120
+ var hashFileBuffer = Buffer.from(hashFile);
121
+ var hashArray = [];
122
+ for (var i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {
123
+ var offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i + 16, hashFileBuffer.byteOffset + i + 24));
124
+ var offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);
125
+ hashArray.push({
126
+ hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)),
127
+ offset: offset
128
+ });
129
+ }
130
+ return hashArray;
131
+ };
68
132
  //# sourceMappingURL=parse-slpk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-slpk.js","names":["_cdFileHeader","require","_localFileHeader","_searchFromTheEnd","_slpkArchieve","parseSLPK","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","fileProvider","cdFileHeaderSignature","hashCDOffset","cdFileHeader","localFileHeader","fileDataOffset","hashFile","wrap","_callee$","_context","prev","next","searchFromTheEnd","sent","parseZipCDFileHeader","fileName","Error","parseZipLocalFileHeader","localHeaderOffset","slice","compressedSize","abrupt","SLPKArchive","stop","_x","apply","arguments","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/parse-slpk.ts"],"sourcesContent":["import {parseZipCDFileHeader} from '../parse-zip/cd-file-header';\nimport {FileProvider} from '../parse-zip/file-provider';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {ZipSignature, searchFromTheEnd} from './search-from-the-end';\nimport {SLPKArchive} from './slpk-archieve';\n\n/**\n * Creates slpk file handler from raw file\n * @param fileProvider raw file data\n * @returns slpk file handler\n */\n\nexport const parseSLPK = async (fileProvider: FileProvider): Promise<SLPKArchive> => {\n const cdFileHeaderSignature: ZipSignature = [0x50, 0x4b, 0x01, 0x02];\n\n const hashCDOffset = await searchFromTheEnd(fileProvider, cdFileHeaderSignature);\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 = await fileProvider.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 new SLPKArchive(fileProvider, hashFile);\n};\n"],"mappings":";;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAQO,IAAMI,SAAS;EAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAC,OAAA,EAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAG,SAAAC,QAAOC,YAA0B;IAAA,IAAAC,qBAAA,EAAAC,YAAA,EAAAC,YAAA,EAAAC,eAAA,EAAAC,cAAA,EAAAC,QAAA;IAAA,OAAAT,YAAA,CAAAD,OAAA,CAAAW,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAClDV,qBAAmC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;UAAAQ,QAAA,CAAAE,IAAA;UAAA,OAEzC,IAAAC,kCAAgB,EAACZ,YAAY,EAAEC,qBAAqB,CAAC;QAAA;UAA1EC,YAAY,GAAAO,QAAA,CAAAI,IAAA;UAAAJ,QAAA,CAAAE,IAAA;UAAA,OAES,IAAAG,kCAAoB,EAACZ,YAAY,EAAEF,YAAY,CAAC;QAAA;UAArEG,YAAY,GAAAM,QAAA,CAAAI,IAAA;UAAA,MAEdV,YAAY,CAACY,QAAQ,KAAK,2BAA2B;YAAAN,QAAA,CAAAE,IAAA;YAAA;UAAA;UAAA,MACjD,IAAIK,KAAK,CAAC,sBAAsB,CAAC;QAAA;UAAAP,QAAA,CAAAE,IAAA;UAAA,OAGX,IAAAM,wCAAuB,EACnDd,YAAY,CAACe,iBAAiB,EAC9BlB,YACF,CAAC;QAAA;UAHKI,eAAe,GAAAK,QAAA,CAAAI,IAAA;UAAA,IAIhBT,eAAe;YAAAK,QAAA,CAAAE,IAAA;YAAA;UAAA;UAAA,MACZ,IAAIK,KAAK,CAAC,sBAAsB,CAAC;QAAA;UAGnCX,cAAc,GAAGD,eAAe,CAACC,cAAc;UAAAI,QAAA,CAAAE,IAAA;UAAA,OAC9BX,YAAY,CAACmB,KAAK,CACvCd,cAAc,EACdA,cAAc,GAAGD,eAAe,CAACgB,cACnC,CAAC;QAAA;UAHKd,QAAQ,GAAAG,QAAA,CAAAI,IAAA;UAAA,IAKTP,QAAQ;YAAAG,QAAA,CAAAE,IAAA;YAAA;UAAA;UAAA,MACL,IAAIK,KAAK,CAAC,sBAAsB,CAAC;QAAA;UAAA,OAAAP,QAAA,CAAAY,MAAA,WAGlC,IAAIC,yBAAW,CAACtB,YAAY,EAAEM,QAAQ,CAAC;QAAA;QAAA;UAAA,OAAAG,QAAA,CAAAc,IAAA;MAAA;IAAA,GAAAxB,OAAA;EAAA,CAC/C;EAAA,gBA9BYN,SAASA,CAAA+B,EAAA;IAAA,OAAA9B,IAAA,CAAA+B,KAAA,OAAAC,SAAA;EAAA;AAAA,GA8BrB;AAACC,OAAA,CAAAlC,SAAA,GAAAA,SAAA"}
1
+ {"version":3,"file":"parse-slpk.js","names":["_md","_interopRequireDefault","require","_cdFileHeader","_endOfCentralDirectory","_localFileHeader","_searchFromTheEnd","_slpkArchieve","parseSLPK","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","fileProvider","cb","hashCDOffset","cdFileHeader","hashData","localFileHeader","fileDataOffset","hashFile","wrap","_callee$","_context","prev","next","searchFromTheEnd","cdHeaderSignature","sent","parseZipCDFileHeader","fileName","generateHashInfo","parseZipLocalFileHeader","localHeaderOffset","Error","slice","compressedSize","parseHashFile","abrupt","SLPKArchive","stop","_x","_x2","apply","arguments","exports","_ref2","_callee2","_yield$parseEoCDRecor","cdStartOffset","cdHeader","hashInfo","_callee2$","_context2","parseEoCDRecord","push","hash","Buffer","from","md5","split","join","toLocaleLowerCase","offset","extraOffset","BigInt","extraFieldLength","sort","a","b","compareHashes","_x3","hashFileBuffer","hashArray","i","buffer","byteLength","offsetBuffer","DataView","byteOffset","getBigUint64","subarray"],"sources":["../../../../../src/lib/parsers/parse-slpk/parse-slpk.ts"],"sourcesContent":["import md5 from 'md5';\nimport {parseZipCDFileHeader, signature as cdHeaderSignature} from '../parse-zip/cd-file-header';\nimport {parseEoCDRecord} from '../parse-zip/end-of-central-directory';\nimport {FileProvider} from '../parse-zip/file-provider';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {searchFromTheEnd} from '../parse-zip/search-from-the-end';\nimport {HashElement, SLPKArchive, compareHashes} from './slpk-archieve';\n\n/**\n * Creates slpk file handler from raw file\n * @param fileProvider raw file data\n * @param cb is called with information message during parsing\n * @returns slpk file handler\n */\nexport const parseSLPK = async (\n fileProvider: FileProvider,\n cb?: (msg: string) => void\n): Promise<SLPKArchive> => {\n const hashCDOffset = await searchFromTheEnd(fileProvider, cdHeaderSignature);\n\n const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);\n\n let hashData: HashElement[];\n if (cdFileHeader?.fileName !== '@specialIndexFileHASH128@') {\n cb?.('SLPK doesnt contain hash file');\n hashData = await generateHashInfo(fileProvider);\n cb?.('hash info has been composed according to central directory records');\n } else {\n cb?.('SLPK contains hash file');\n const localFileHeader = await parseZipLocalFileHeader(\n cdFileHeader.localHeaderOffset,\n fileProvider\n );\n if (!localFileHeader) {\n throw new Error('corrupted SLPK');\n }\n\n const fileDataOffset = localFileHeader.fileDataOffset;\n const hashFile = await fileProvider.slice(\n fileDataOffset,\n fileDataOffset + localFileHeader.compressedSize\n );\n\n hashData = parseHashFile(hashFile);\n }\n\n return new SLPKArchive(fileProvider, hashData);\n};\n\n/**\n * generates hash info from central directory\n * @param fileProvider - provider of the archive\n * @returns ready to use hash info\n */\nconst generateHashInfo = async (fileProvider: FileProvider): Promise<HashElement[]> => {\n const {cdStartOffset} = await parseEoCDRecord(fileProvider);\n let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);\n const hashInfo: HashElement[] = [];\n while (cdHeader) {\n hashInfo.push({\n hash: Buffer.from(md5(cdHeader.fileName.split('\\\\').join('/').toLocaleLowerCase()), 'hex'),\n offset: cdHeader.localHeaderOffset\n });\n cdHeader = await parseZipCDFileHeader(\n cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),\n fileProvider\n );\n }\n hashInfo.sort((a, b) => compareHashes(a.hash, b.hash));\n return hashInfo;\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 */\nconst 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.getBigUint64(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"],"mappings":"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"}
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.SLPKArchive = void 0;
7
+ exports.compareHashes = exports.SLPKArchive = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
@@ -16,6 +16,18 @@ var _compression = require("@loaders.gl/compression");
16
16
  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; } } }; }
17
17
  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); }
18
18
  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; }
19
+ var compareHashes = function compareHashes(hash1, hash2) {
20
+ var h1 = new BigUint64Array(hash1.buffer, hash1.byteOffset, 2);
21
+ var h2 = new BigUint64Array(hash2.buffer, hash2.byteOffset, 2);
22
+ var diff = h1[0] === h2[0] ? h1[1] - h2[1] : h1[0] - h2[0];
23
+ if (diff < 0n) {
24
+ return -1;
25
+ } else if (diff === 0n) {
26
+ return 0;
27
+ }
28
+ return 1;
29
+ };
30
+ exports.compareHashes = compareHashes;
19
31
  var PATH_DESCRIPTIONS = [{
20
32
  test: /^$/,
21
33
  extensions: ['3dSceneLayer.json.gz']
@@ -23,7 +35,7 @@ var PATH_DESCRIPTIONS = [{
23
35
  test: /^nodepages\/\d+$/,
24
36
  extensions: ['.json.gz']
25
37
  }, {
26
- test: /^nodes\/\d+$/,
38
+ test: /^nodes\/(\d+|root)$/,
27
39
  extensions: ['/3dNodeIndexDocument.json.gz']
28
40
  }, {
29
41
  test: /^nodes\/\d+\/textures\/.+$/,
@@ -43,28 +55,30 @@ var PATH_DESCRIPTIONS = [{
43
55
  }];
44
56
  var SLPKArchive = function () {
45
57
  function SLPKArchive(slpkArchive, hashFile) {
58
+ var _this = this;
46
59
  (0, _classCallCheck2.default)(this, SLPKArchive);
47
60
  (0, _defineProperty2.default)(this, "slpkArchive", void 0);
48
61
  (0, _defineProperty2.default)(this, "hashArray", void 0);
62
+ (0, _defineProperty2.default)(this, "findBin", function (hashToSearch) {
63
+ var lowerBorder = 0;
64
+ var upperBorder = _this.hashArray.length;
65
+ while (upperBorder - lowerBorder > 1) {
66
+ var middle = lowerBorder + Math.floor((upperBorder - lowerBorder) / 2);
67
+ var value = compareHashes(_this.hashArray[middle].hash, hashToSearch);
68
+ if (value === 0) {
69
+ return _this.hashArray[middle];
70
+ } else if (value < 0) {
71
+ lowerBorder = middle;
72
+ } else {
73
+ upperBorder = middle;
74
+ }
75
+ }
76
+ return undefined;
77
+ });
49
78
  this.slpkArchive = slpkArchive;
50
- this.hashArray = this.parseHashFile(hashFile);
79
+ this.hashArray = hashFile;
51
80
  }
52
81
  (0, _createClass2.default)(SLPKArchive, [{
53
- key: "parseHashFile",
54
- value: function parseHashFile(hashFile) {
55
- var hashFileBuffer = Buffer.from(hashFile);
56
- var hashArray = [];
57
- for (var i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {
58
- var offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i + 16, hashFileBuffer.byteOffset + i + 24));
59
- var offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);
60
- hashArray.push({
61
- hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)),
62
- offset: offset
63
- });
64
- }
65
- return hashArray;
66
- }
67
- }, {
68
82
  key: "getFile",
69
83
  value: function () {
70
84
  var _getFile = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(path) {
@@ -177,28 +191,37 @@ var SLPKArchive = function () {
177
191
  while (1) switch (_context2.prev = _context2.next) {
178
192
  case 0:
179
193
  _context2.next = 2;
180
- return this.getFileBytes(path);
194
+ return this.getFileBytes(path.toLocaleLowerCase());
181
195
  case 2:
182
196
  data = _context2.sent;
183
197
  if (data) {
184
- _context2.next = 5;
198
+ _context2.next = 7;
199
+ break;
200
+ }
201
+ _context2.next = 6;
202
+ return this.getFileBytes(path);
203
+ case 6:
204
+ data = _context2.sent;
205
+ case 7:
206
+ if (data) {
207
+ _context2.next = 9;
185
208
  break;
186
209
  }
187
210
  return _context2.abrupt("return", undefined);
188
- case 5:
211
+ case 9:
189
212
  if (!/\.gz$/.test(path)) {
190
- _context2.next = 11;
213
+ _context2.next = 15;
191
214
  break;
192
215
  }
193
216
  compression = new _compression.GZipCompression();
194
- _context2.next = 9;
217
+ _context2.next = 13;
195
218
  return compression.decompress(data);
196
- case 9:
219
+ case 13:
197
220
  decompressedData = _context2.sent;
198
221
  return _context2.abrupt("return", decompressedData);
199
- case 11:
222
+ case 15:
200
223
  return _context2.abrupt("return", Buffer.from(data));
201
- case 12:
224
+ case 16:
202
225
  case "end":
203
226
  return _context2.stop();
204
227
  }
@@ -218,9 +241,7 @@ var SLPKArchive = function () {
218
241
  while (1) switch (_context3.prev = _context3.next) {
219
242
  case 0:
220
243
  nameHash = Buffer.from((0, _md.default)(path), 'hex');
221
- fileInfo = this.hashArray.find(function (val) {
222
- return Buffer.compare(val.hash, nameHash) === 0;
223
- });
244
+ fileInfo = this.findBin(nameHash);
224
245
  if (fileInfo) {
225
246
  _context3.next = 4;
226
247
  break;
@@ -228,7 +249,7 @@ var SLPKArchive = function () {
228
249
  return _context3.abrupt("return", undefined);
229
250
  case 4:
230
251
  _context3.next = 6;
231
- return (0, _localFileHeader.parseZipLocalFileHeader)(fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.offset, this.slpkArchive);
252
+ return (0, _localFileHeader.parseZipLocalFileHeader)(fileInfo.offset, this.slpkArchive);
232
253
  case 6:
233
254
  localFileHeader = _context3.sent;
234
255
  if (localFileHeader) {
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-archieve.js","names":["_md","_interopRequireDefault","require","_localFileHeader","_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","slpkArchive","hashFile","_classCallCheck2","default","_defineProperty2","hashArray","parseHashFile","_createClass2","key","hashFileBuffer","Buffer","buffer","byteLength","offsetBuffer","DataView","byteOffset","offset","getBigUint64","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","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 {GZipCompression} from '@loaders.gl/compression';\nimport {FileProvider} from '../parse-zip/file-provider';\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: bigint;\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: FileProvider;\n hashArray: {hash: Buffer; offset: bigint}[];\n constructor(slpkArchive: FileProvider, hashFile: ArrayBuffer) {\n this.slpkArchive = slpkArchive;\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.getBigUint64(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(fileInfo?.offset, this.slpkArchive);\n if (!localFileHeader) {\n return undefined;\n }\n\n const compressedFile = this.slpkArchive.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","_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","compareHashes","hash1","hash2","h1","BigUint64Array","buffer","byteOffset","h2","diff","exports","PATH_DESCRIPTIONS","extensions","SLPKArchive","slpkArchive","hashFile","_this","_classCallCheck2","default","_defineProperty2","hashToSearch","lowerBorder","upperBorder","hashArray","middle","Math","floor","hash","undefined","_createClass2","key","_getFile","_asyncToGenerator2","_regenerator","mark","_callee","path","mode","_PATH_DESCRIPTIONS$fi","data","_iterator","_step","ext","decompressedFile","fileWithoutCompression","_args","arguments","wrap","_callee$","_context","prev","find","val","getDataByPath","concat","sent","abrupt","t0","finish","Buffer","getFileBytes","Error","stop","getFile","_x","apply","_getDataByPath","_callee2","compression","decompressedData","_callee2$","_context2","toLocaleLowerCase","GZipCompression","decompress","_x2","_getFileBytes","_callee3","nameHash","fileInfo","localFileHeader","compressedFile","_callee3$","_context3","md5","findBin","parseZipLocalFileHeader","offset","fileDataOffset","compressedSize","_x3"],"sources":["../../../../../src/lib/parsers/parse-slpk/slpk-archieve.ts"],"sourcesContent":["import md5 from 'md5';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {GZipCompression} from '@loaders.gl/compression';\nimport {FileProvider} from '../parse-zip/file-provider';\n\n/** Element of hash array */\nexport type HashElement = {\n /** File name hash */\n hash: Buffer;\n /** File offset in the archive */\n offset: bigint;\n};\n\n/**\n * Comparing md5 hashes according to https://github.com/Esri/i3s-spec/blob/master/docs/2.0/slpk_hashtable.pcsl.md step 5\n * @param hash1 hash to compare\n * @param hash2 hash to compare\n * @returns -1 if hash1 < hash2, 0 of hash1 === hash2, 1 if hash1 > hash2\n */\nexport const compareHashes = (hash1: Buffer, hash2: Buffer): number => {\n const h1 = new BigUint64Array(hash1.buffer, hash1.byteOffset, 2);\n const h2 = new BigUint64Array(hash2.buffer, hash2.byteOffset, 2);\n\n const diff = h1[0] === h2[0] ? h1[1] - h2[1] : h1[0] - h2[0];\n\n if (diff < 0n) {\n return -1;\n } else if (diff === 0n) {\n return 0;\n }\n return 1;\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+|root)$/,\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 private slpkArchive: FileProvider;\n private hashArray: HashElement[];\n constructor(slpkArchive: FileProvider, hashFile: HashElement[]) {\n this.slpkArchive = slpkArchive;\n this.hashArray = hashFile;\n }\n\n /**\n * Binary search in the hash info\n * @param hashToSearch hash that we need to find\n * @returns required hash element or undefined if not found\n */\n private findBin = (hashToSearch: Buffer): HashElement | undefined => {\n let lowerBorder = 0;\n let upperBorder = this.hashArray.length;\n\n while (upperBorder - lowerBorder > 1) {\n const middle = lowerBorder + Math.floor((upperBorder - lowerBorder) / 2);\n const value = compareHashes(this.hashArray[middle].hash, hashToSearch);\n if (value === 0) {\n return this.hashArray[middle];\n } else if (value < 0) {\n lowerBorder = middle;\n } else {\n upperBorder = middle;\n }\n }\n return undefined;\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 // sometimes paths are not in lower case when hash file is created,\n // so first we're looking for lower case file name and then for original one\n let data = await this.getFileBytes(path.toLocaleLowerCase());\n if (!data) {\n data = await this.getFileBytes(path);\n }\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.findBin(nameHash); // implement binary search\n if (!fileInfo) {\n return undefined;\n }\n\n const localFileHeader = await parseZipLocalFileHeader(fileInfo.offset, this.slpkArchive);\n if (!localFileHeader) {\n return undefined;\n }\n\n const compressedFile = this.slpkArchive.slice(\n localFileHeader.fileDataOffset,\n localFileHeader.fileDataOffset + localFileHeader.compressedSize\n );\n\n return compressedFile;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAAwD,SAAAG,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,MAAA,oBAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,EAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAQ,MAAA,qBAAAN,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAO,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAT,CAAA,CAAAQ,MAAA,WAAAK,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAd,CAAA,CAAAS,CAAA,UAAAM,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAT,EAAA,GAAAA,EAAA,CAAAoB,IAAA,CAAAtB,CAAA,MAAAY,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAArB,EAAA,CAAAsB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAjB,EAAA,CAAAwB,MAAA,UAAAxB,EAAA,CAAAwB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAd,4BAAAP,CAAA,EAAA2B,MAAA,SAAA3B,CAAA,qBAAAA,CAAA,sBAAA4B,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA,OAAAf,CAAA,GAAAiB,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAT,IAAA,CAAAtB,CAAA,EAAAgC,KAAA,aAAApB,CAAA,iBAAAZ,CAAA,CAAAiC,WAAA,EAAArB,CAAA,GAAAZ,CAAA,CAAAiC,WAAA,CAAAC,IAAA,MAAAtB,CAAA,cAAAA,CAAA,mBAAAP,KAAA,CAAA8B,IAAA,CAAAnC,CAAA,OAAAY,CAAA,+DAAAwB,IAAA,CAAAxB,CAAA,UAAAgB,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA;AAAA,SAAAC,kBAAAS,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA7B,MAAA,EAAA8B,GAAA,GAAAD,GAAA,CAAA7B,MAAA,WAAAC,CAAA,MAAA8B,IAAA,OAAAlC,KAAA,CAAAiC,GAAA,GAAA7B,CAAA,GAAA6B,GAAA,EAAA7B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAA4B,GAAA,CAAA5B,CAAA,UAAA8B,IAAA;AAiBjD,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,KAAa,EAAEC,KAAa,EAAa;EACrE,IAAMC,EAAE,GAAG,IAAIC,cAAc,CAACH,KAAK,CAACI,MAAM,EAAEJ,KAAK,CAACK,UAAU,EAAE,CAAC,CAAC;EAChE,IAAMC,EAAE,GAAG,IAAIH,cAAc,CAACF,KAAK,CAACG,MAAM,EAAEH,KAAK,CAACI,UAAU,EAAE,CAAC,CAAC;EAEhE,IAAME,IAAI,GAAGL,EAAE,CAAC,CAAC,CAAC,KAAKI,EAAE,CAAC,CAAC,CAAC,GAAGJ,EAAE,CAAC,CAAC,CAAC,GAAGI,EAAE,CAAC,CAAC,CAAC,GAAGJ,EAAE,CAAC,CAAC,CAAC,GAAGI,EAAE,CAAC,CAAC,CAAC;EAE5D,IAAIC,IAAI,GAAG,EAAE,EAAE;IACb,OAAO,CAAC,CAAC;EACX,CAAC,MAAM,IAAIA,IAAI,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC;EACV;EACA,OAAO,CAAC;AACV,CAAC;AAACC,OAAA,CAAAT,aAAA,GAAAA,aAAA;AAGF,IAAMU,iBAAyD,GAAG,CAChE;EACEd,IAAI,EAAE,IAAI;EACVe,UAAU,EAAE,CAAC,sBAAsB;AACrC,CAAC,EACD;EACEf,IAAI,EAAE,kBAAkB;EACxBe,UAAU,EAAE,CAAC,UAAU;AACzB,CAAC,EACD;EACEf,IAAI,EAAE,qBAAqB;EAC3Be,UAAU,EAAE,CAAC,8BAA8B;AAC7C,CAAC,EACD;EACEf,IAAI,EAAE,4BAA4B;EAClCe,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;AACpD,CAAC,EACD;EACEf,IAAI,EAAE,+BAA+B;EACrCe,UAAU,EAAE,CAAC,SAAS,EAAE,WAAW;AACrC,CAAC,EACD;EACEf,IAAI,EAAE,sCAAsC;EAC5Ce,UAAU,EAAE,CAAC,SAAS;AACxB,CAAC,EACD;EACEf,IAAI,EAAE,0BAA0B;EAChCe,UAAU,EAAE,CAAC,UAAU;AACzB,CAAC,EACD;EACEf,IAAI,EAAE,sBAAsB;EAC5Be,UAAU,EAAE,CAAC,yBAAyB;AACxC,CAAC,CACF;AAAC,IAKWC,WAAW;EAGtB,SAAAA,YAAYC,WAAyB,EAAEC,QAAuB,EAAE;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAL,WAAA;IAAA,IAAAM,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA,mBAU9C,UAACE,YAAoB,EAA8B;MACnE,IAAIC,WAAW,GAAG,CAAC;MACnB,IAAIC,WAAW,GAAGN,KAAI,CAACO,SAAS,CAACtD,MAAM;MAEvC,OAAOqD,WAAW,GAAGD,WAAW,GAAG,CAAC,EAAE;QACpC,IAAMG,MAAM,GAAGH,WAAW,GAAGI,IAAI,CAACC,KAAK,CAAC,CAACJ,WAAW,GAAGD,WAAW,IAAI,CAAC,CAAC;QACxE,IAAM9C,KAAK,GAAG0B,aAAa,CAACe,KAAI,CAACO,SAAS,CAACC,MAAM,CAAC,CAACG,IAAI,EAAEP,YAAY,CAAC;QACtE,IAAI7C,KAAK,KAAK,CAAC,EAAE;UACf,OAAOyC,KAAI,CAACO,SAAS,CAACC,MAAM,CAAC;QAC/B,CAAC,MAAM,IAAIjD,KAAK,GAAG,CAAC,EAAE;UACpB8C,WAAW,GAAGG,MAAM;QACtB,CAAC,MAAM;UACLF,WAAW,GAAGE,MAAM;QACtB;MACF;MACA,OAAOI,SAAS;IAClB,CAAC;IAzBC,IAAI,CAACd,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACS,SAAS,GAAGR,QAAQ;EAC3B;EAAC,IAAAc,aAAA,CAAAX,OAAA,EAAAL,WAAA;IAAAiB,GAAA;IAAAvD,KAAA;MAAA,IAAAwD,QAAA,OAAAC,kBAAA,CAAAd,OAAA,EAAAe,YAAA,CAAAf,OAAA,CAAAgB,IAAA,CA+BD,SAAAC,QAAcC,IAAY;QAAA,IAAAC,IAAA;UAAAC,qBAAA;UAAA1B,UAAA;UAAA2B,IAAA;UAAAC,SAAA;UAAAC,KAAA;UAAAC,GAAA;UAAAC,gBAAA;UAAAC,sBAAA;UAAAC,KAAA,GAAAC,SAAA;QAAA,OAAAb,YAAA,CAAAf,OAAA,CAAA6B,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAhE,IAAA;YAAA;cAAEoD,IAAoB,GAAAQ,KAAA,CAAA5E,MAAA,QAAA4E,KAAA,QAAAjB,SAAA,GAAAiB,KAAA,MAAG,KAAK;cAAA,MAClDR,IAAI,KAAK,MAAM;gBAAAY,QAAA,CAAAhE,IAAA;gBAAA;cAAA;cACX2B,UAAU,IAAA0B,qBAAA,GAAG3B,iBAAiB,CAACwC,IAAI,CAAC,UAACC,GAAG;gBAAA,OAAKA,GAAG,CAACvD,IAAI,CAACA,IAAI,CAACuC,IAAI,CAAC;cAAA,EAAC,cAAAE,qBAAA,uBAApDA,qBAAA,CAAsD1B,UAAU;cAAA,KAC/EA,UAAU;gBAAAqC,QAAA,CAAAhE,IAAA;gBAAA;cAAA;cAAAuD,SAAA,GAAAhF,0BAAA,CAEMoD,UAAU;cAAAqC,QAAA,CAAAC,IAAA;cAAAV,SAAA,CAAApE,CAAA;YAAA;cAAA,KAAAqE,KAAA,GAAAD,SAAA,CAAAnE,CAAA,IAAAC,IAAA;gBAAA2E,QAAA,CAAAhE,IAAA;gBAAA;cAAA;cAAjByD,GAAG,GAAAD,KAAA,CAAAlE,KAAA;cAAA0E,QAAA,CAAAhE,IAAA;cAAA,OACC,IAAI,CAACoE,aAAa,IAAAC,MAAA,CAAIlB,IAAI,EAAAkB,MAAA,CAAGZ,GAAG,CAAE,CAAC;YAAA;cAAhDH,IAAI,GAAAU,QAAA,CAAAM,IAAA;cAAA,KACAhB,IAAI;gBAAAU,QAAA,CAAAhE,IAAA;gBAAA;cAAA;cAAA,OAAAgE,QAAA,CAAAO,MAAA;YAAA;cAAAP,QAAA,CAAAhE,IAAA;cAAA;YAAA;cAAAgE,QAAA,CAAAhE,IAAA;cAAA;YAAA;cAAAgE,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAQ,EAAA,GAAAR,QAAA;cAAAT,SAAA,CAAAhE,CAAA,CAAAyE,QAAA,CAAAQ,EAAA;YAAA;cAAAR,QAAA,CAAAC,IAAA;cAAAV,SAAA,CAAA9D,CAAA;cAAA,OAAAuE,QAAA,CAAAS,MAAA;YAAA;cAAA,KAINnB,IAAI;gBAAAU,QAAA,CAAAhE,IAAA;gBAAA;cAAA;cAAA,OAAAgE,QAAA,CAAAO,MAAA,WACCG,MAAM,CAAC/D,IAAI,CAAC2C,IAAI,CAAC;YAAA;cAAA,MAI1BF,IAAI,KAAK,KAAK;gBAAAY,QAAA,CAAAhE,IAAA;gBAAA;cAAA;cAAAgE,QAAA,CAAAhE,IAAA;cAAA,OACe,IAAI,CAACoE,aAAa,IAAAC,MAAA,CAAIlB,IAAI,QAAK,CAAC;YAAA;cAAzDO,gBAAgB,GAAAM,QAAA,CAAAM,IAAA;cAAA,KAClBZ,gBAAgB;gBAAAM,QAAA,CAAAhE,IAAA;gBAAA;cAAA;cAAA,OAAAgE,QAAA,CAAAO,MAAA,WACXG,MAAM,CAAC/D,IAAI,CAAC+C,gBAAgB,CAAC;YAAA;cAAAM,QAAA,CAAAhE,IAAA;cAAA,OAED,IAAI,CAAC2E,YAAY,CAACxB,IAAI,CAAC;YAAA;cAAtDQ,sBAAsB,GAAAK,QAAA,CAAAM,IAAA;cAAA,KACxBX,sBAAsB;gBAAAK,QAAA,CAAAhE,IAAA;gBAAA;cAAA;cAAA,OAAAgE,QAAA,CAAAO,MAAA,WACjBG,MAAM,CAAC/D,IAAI,CAACgD,sBAAsB,CAAC;YAAA;cAAA,MAIxC,IAAIiB,KAAK,CAAC,8BAA8B,CAAC;YAAA;YAAA;cAAA,OAAAZ,QAAA,CAAAa,IAAA;UAAA;QAAA,GAAA3B,OAAA;MAAA,CAChD;MAAA,SAAA4B,QAAAC,EAAA;QAAA,OAAAjC,QAAA,CAAAkC,KAAA,OAAAnB,SAAA;MAAA;MAAA,OAAAiB,OAAA;IAAA;EAAA;IAAAjC,GAAA;IAAAvD,KAAA;MAAA,IAAA2F,cAAA,OAAAlC,kBAAA,CAAAd,OAAA,EAAAe,YAAA,CAAAf,OAAA,CAAAgB,IAAA,CAOD,SAAAiC,SAA4B/B,IAAY;QAAA,IAAAG,IAAA,EAAA6B,WAAA,EAAAC,gBAAA;QAAA,OAAApC,YAAA,CAAAf,OAAA,CAAA6B,IAAA,UAAAuB,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAArB,IAAA,GAAAqB,SAAA,CAAAtF,IAAA;YAAA;cAAAsF,SAAA,CAAAtF,IAAA;cAAA,OAGrB,IAAI,CAAC2E,YAAY,CAACxB,IAAI,CAACoC,iBAAiB,CAAC,CAAC,CAAC;YAAA;cAAxDjC,IAAI,GAAAgC,SAAA,CAAAhB,IAAA;cAAA,IACHhB,IAAI;gBAAAgC,SAAA,CAAAtF,IAAA;gBAAA;cAAA;cAAAsF,SAAA,CAAAtF,IAAA;cAAA,OACM,IAAI,CAAC2E,YAAY,CAACxB,IAAI,CAAC;YAAA;cAApCG,IAAI,GAAAgC,SAAA,CAAAhB,IAAA;YAAA;cAAA,IAEDhB,IAAI;gBAAAgC,SAAA,CAAAtF,IAAA;gBAAA;cAAA;cAAA,OAAAsF,SAAA,CAAAf,MAAA,WACA5B,SAAS;YAAA;cAAA,KAEd,OAAO,CAAC/B,IAAI,CAACuC,IAAI,CAAC;gBAAAmC,SAAA,CAAAtF,IAAA;gBAAA;cAAA;cACdmF,WAAW,GAAG,IAAIK,4BAAe,CAAC,CAAC;cAAAF,SAAA,CAAAtF,IAAA;cAAA,OAEVmF,WAAW,CAACM,UAAU,CAACnC,IAAI,CAAC;YAAA;cAArD8B,gBAAgB,GAAAE,SAAA,CAAAhB,IAAA;cAAA,OAAAgB,SAAA,CAAAf,MAAA,WACfa,gBAAgB;YAAA;cAAA,OAAAE,SAAA,CAAAf,MAAA,WAElBG,MAAM,CAAC/D,IAAI,CAAC2C,IAAI,CAAC;YAAA;YAAA;cAAA,OAAAgC,SAAA,CAAAT,IAAA;UAAA;QAAA,GAAAK,QAAA;MAAA,CACzB;MAAA,SAAAd,cAAAsB,GAAA;QAAA,OAAAT,cAAA,CAAAD,KAAA,OAAAnB,SAAA;MAAA;MAAA,OAAAO,aAAA;IAAA;EAAA;IAAAvB,GAAA;IAAAvD,KAAA;MAAA,IAAAqG,aAAA,OAAA5C,kBAAA,CAAAd,OAAA,EAAAe,YAAA,CAAAf,OAAA,CAAAgB,IAAA,CAOD,SAAA2C,SAA2BzC,IAAY;QAAA,IAAA0C,QAAA,EAAAC,QAAA,EAAAC,eAAA,EAAAC,cAAA;QAAA,OAAAhD,YAAA,CAAAf,OAAA,CAAA6B,IAAA,UAAAmC,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAjC,IAAA,GAAAiC,SAAA,CAAAlG,IAAA;YAAA;cAC/B6F,QAAQ,GAAGnB,MAAM,CAAC/D,IAAI,CAAC,IAAAwF,WAAG,EAAChD,IAAI,CAAC,EAAE,KAAK,CAAC;cACxC2C,QAAQ,GAAG,IAAI,CAACM,OAAO,CAACP,QAAQ,CAAC;cAAA,IAClCC,QAAQ;gBAAAI,SAAA,CAAAlG,IAAA;gBAAA;cAAA;cAAA,OAAAkG,SAAA,CAAA3B,MAAA,WACJ5B,SAAS;YAAA;cAAAuD,SAAA,CAAAlG,IAAA;cAAA,OAGY,IAAAqG,wCAAuB,EAACP,QAAQ,CAACQ,MAAM,EAAE,IAAI,CAACzE,WAAW,CAAC;YAAA;cAAlFkE,eAAe,GAAAG,SAAA,CAAA5B,IAAA;cAAA,IAChByB,eAAe;gBAAAG,SAAA,CAAAlG,IAAA;gBAAA;cAAA;cAAA,OAAAkG,SAAA,CAAA3B,MAAA,WACX5B,SAAS;YAAA;cAGZqD,cAAc,GAAG,IAAI,CAACnE,WAAW,CAACrB,KAAK,CAC3CuF,eAAe,CAACQ,cAAc,EAC9BR,eAAe,CAACQ,cAAc,GAAGR,eAAe,CAACS,cACnD,CAAC;cAAA,OAAAN,SAAA,CAAA3B,MAAA,WAEMyB,cAAc;YAAA;YAAA;cAAA,OAAAE,SAAA,CAAArB,IAAA;UAAA;QAAA,GAAAe,QAAA;MAAA,CACtB;MAAA,SAAAjB,aAAA8B,GAAA;QAAA,OAAAd,aAAA,CAAAX,KAAA,OAAAnB,SAAA;MAAA;MAAA,OAAAc,YAAA;IAAA;EAAA;EAAA,OAAA/C,WAAA;AAAA;AAAAH,OAAA,CAAAG,WAAA,GAAAA,WAAA"}