@loaders.gl/i3s 4.0.0-beta.3 → 4.0.0-beta.5

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.
@@ -102,7 +102,7 @@
102
102
  );
103
103
  globalThis._loadersgl_.version = NPM_TAG;
104
104
  } else {
105
- globalThis._loadersgl_.version = "4.0.0-beta.3";
105
+ globalThis._loadersgl_.version = "4.0.0-beta.5";
106
106
  }
107
107
  }
108
108
  return globalThis._loadersgl_.version;
@@ -772,7 +772,7 @@
772
772
  return void 0 && (void 0)(scriptSource, id);
773
773
  }
774
774
  if (isWorker) {
775
- eval.call(global_2, scriptSource);
775
+ eval.call(globalThis, scriptSource);
776
776
  return null;
777
777
  }
778
778
  const script = document.createElement("script");
@@ -1435,7 +1435,7 @@
1435
1435
  var navigator_ = globalThis.navigator || {};
1436
1436
 
1437
1437
  // ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/utils/globals.js
1438
- var VERSION2 = true ? "4.0.0-beta.3" : "untranspiled source";
1438
+ var VERSION2 = true ? "4.0.0-beta.5" : "untranspiled source";
1439
1439
  var isBrowser4 = isBrowser3();
1440
1440
 
1441
1441
  // ../../node_modules/@probe.gl/log/dist/utils/local-storage.js
@@ -5226,13 +5226,13 @@
5226
5226
  _defineProperty(Ellipsoid, "WGS84", new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z));
5227
5227
 
5228
5228
  // ../images/src/lib/utils/version.ts
5229
- var VERSION3 = true ? "4.0.0-beta.3" : "latest";
5229
+ var VERSION3 = true ? "4.0.0-beta.5" : "latest";
5230
5230
 
5231
5231
  // ../images/src/lib/category-api/image-type.ts
5232
- var { _parseImageNode } = globalThis;
5232
+ var parseImageNode = globalThis.loaders?.parseImageNode;
5233
5233
  var IMAGE_SUPPORTED = typeof Image !== "undefined";
5234
5234
  var IMAGE_BITMAP_SUPPORTED = typeof ImageBitmap !== "undefined";
5235
- var NODE_IMAGE_SUPPORTED = Boolean(_parseImageNode);
5235
+ var NODE_IMAGE_SUPPORTED = Boolean(parseImageNode);
5236
5236
  var DATA_SUPPORTED = isBrowser ? true : NODE_IMAGE_SUPPORTED;
5237
5237
  function isImageTypeSupported(type) {
5238
5238
  switch (type) {
@@ -5553,9 +5553,9 @@
5553
5553
  // ../images/src/lib/parsers/parse-to-node-image.ts
5554
5554
  async function parseToNodeImage(arrayBuffer, options) {
5555
5555
  const { mimeType } = getBinaryImageMetadata(arrayBuffer) || {};
5556
- const _parseImageNode2 = globalThis._parseImageNode;
5557
- assert(_parseImageNode2);
5558
- return await _parseImageNode2(arrayBuffer, mimeType);
5556
+ const parseImageNode2 = globalThis.loaders?.parseImageNode;
5557
+ assert(parseImageNode2);
5558
+ return await parseImageNode2(arrayBuffer, mimeType);
5559
5559
  }
5560
5560
 
5561
5561
  // ../images/src/lib/parsers/parse-image.ts
@@ -5629,7 +5629,7 @@
5629
5629
  };
5630
5630
 
5631
5631
  // ../draco/src/lib/utils/version.ts
5632
- var VERSION4 = true ? "4.0.0-beta.3" : "latest";
5632
+ var VERSION4 = true ? "4.0.0-beta.5" : "latest";
5633
5633
 
5634
5634
  // ../draco/src/draco-loader.ts
5635
5635
  var DEFAULT_DRACO_OPTIONS = {
@@ -6310,7 +6310,7 @@
6310
6310
  }
6311
6311
 
6312
6312
  // ../textures/src/lib/utils/version.ts
6313
- var VERSION5 = true ? "4.0.0-beta.3" : "beta";
6313
+ var VERSION5 = true ? "4.0.0-beta.5" : "beta";
6314
6314
 
6315
6315
  // ../textures/src/lib/parsers/basis-module-loader.ts
6316
6316
  var BASIS_EXTERNAL_LIBRARIES = {
@@ -8095,7 +8095,7 @@
8095
8095
  }
8096
8096
 
8097
8097
  // src/i3s-attribute-loader.ts
8098
- var VERSION6 = true ? "4.0.0-beta.3" : "latest";
8098
+ var VERSION6 = true ? "4.0.0-beta.5" : "latest";
8099
8099
  var I3SAttributeLoader = {
8100
8100
  name: "I3S Attribute",
8101
8101
  id: "i3s-attribute",
@@ -8601,7 +8601,7 @@
8601
8601
  }
8602
8602
 
8603
8603
  // src/i3s-content-loader.ts
8604
- var VERSION7 = true ? "4.0.0-beta.3" : "beta";
8604
+ var VERSION7 = true ? "4.0.0-beta.5" : "beta";
8605
8605
  var I3SContentLoader = {
8606
8606
  name: "I3S Content (Indexed Scene Layers)",
8607
8607
  id: "i3s-content",
@@ -1 +1 @@
1
- {"version":3,"file":"i3s-loader.d.ts","sourceRoot":"","sources":["../src/i3s-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAI9C,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AAWxC,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,CAwB9E,CAAC"}
1
+ {"version":3,"file":"i3s-loader.d.ts","sourceRoot":"","sources":["../src/i3s-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAI9C,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AAYxC,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,CAwB9E,CAAC"}
@@ -2,6 +2,7 @@ import { parse } from '@loaders.gl/core';
2
2
  import { I3SContentLoader } from "./i3s-content-loader.js";
3
3
  import { normalizeTileData, normalizeTilesetData } from "./lib/parsers/parse-i3s.js";
4
4
  import { COORDINATE_SYSTEM } from "./lib/parsers/constants.js";
5
+ import { getUrlWithoutParams } from "./lib/utils/url-utils.js";
5
6
  const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
6
7
  const TILESET_REGEX = /layers\/[0-9]+$/;
7
8
  const TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
@@ -41,15 +42,16 @@ async function parseI3S(data) {
41
42
  if (magicNumber === SLPK_HEX) {
42
43
  throw new Error('Files with .slpk extention currently are not supported by I3SLoader');
43
44
  }
45
+ const urlWithoutParams = getUrlWithoutParams(url);
44
46
  let isTileset;
45
47
  if (options.i3s.isTileset === 'auto') {
46
- isTileset = TILESET_REGEX.test(url);
48
+ isTileset = TILESET_REGEX.test(urlWithoutParams);
47
49
  } else {
48
50
  isTileset = options.i3s.isTileset;
49
51
  }
50
52
  let isTileHeader;
51
53
  if (options.isTileHeader === 'auto') {
52
- isTileHeader = TILE_HEADER_REGEX.test(url);
54
+ isTileHeader = TILE_HEADER_REGEX.test(urlWithoutParams);
53
55
  } else {
54
56
  isTileHeader = options.i3s.isTileHeader;
55
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"i3s-loader.js","names":["parse","I3SContentLoader","normalizeTileData","normalizeTilesetData","COORDINATE_SYSTEM","VERSION","__VERSION__","TILESET_REGEX","TILE_HEADER_REGEX","SLPK_HEX","POINT_CLOUD","I3SLoader","name","id","module","version","mimeTypes","parseI3S","extensions","options","i3s","token","isTileset","isTileHeader","tile","tileset","_tileOptions","_tilesetOptions","useDracoGeometry","useCompressedTextures","decodeTextures","coordinateSystem","METER_OFFSETS","colorsByAttribute","data","arguments","length","undefined","context","url","magicNumber","getMagicNumber","Error","test","parseTileset","parseTile","parseTileContent","arrayBuffer","tilesetJson","JSON","TextDecoder","decode","layerType","tilesetPostprocessed","ArrayBuffer","Uint8Array","map","value","toString","padStart","join"],"sources":["../src/i3s-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parse} from '@loaders.gl/core';\nimport type {I3STilesetHeader} from './types';\nimport {I3SContentLoader} from './i3s-content-loader';\nimport {normalizeTileData, normalizeTilesetData} from './lib/parsers/parse-i3s';\nimport {COORDINATE_SYSTEM} from './lib/parsers/constants';\nimport {I3SParseOptions} from './types';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nconst TILESET_REGEX = /layers\\/[0-9]+$/;\nconst TILE_HEADER_REGEX = /nodes\\/([0-9-]+|root)$/;\nconst SLPK_HEX = '504b0304';\nconst POINT_CLOUD = 'PointCloud';\n\nexport type I3SLoaderOptions = LoaderOptions & {\n i3s?: I3SParseOptions;\n};\n\n/**\n * Loader for I3S - Indexed 3D Scene Layer\n */\nexport const I3SLoader: LoaderWithParser<I3STilesetHeader, never, LoaderOptions> = {\n name: 'I3S (Indexed Scene Layers)',\n id: 'i3s',\n module: 'i3s',\n version: VERSION,\n mimeTypes: ['application/octet-stream'],\n parse: parseI3S,\n extensions: ['bin'],\n options: {\n i3s: {\n token: null,\n isTileset: 'auto',\n isTileHeader: 'auto',\n tile: null,\n tileset: null,\n _tileOptions: null,\n _tilesetOptions: null,\n useDracoGeometry: true,\n useCompressedTextures: true,\n decodeTextures: true,\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n colorsByAttribute: null\n }\n }\n};\n\nasync function parseI3S(data, options: I3SLoaderOptions = {}, context): Promise<I3STilesetHeader> {\n const url = context.url;\n options.i3s = options.i3s || {};\n const magicNumber = getMagicNumber(data);\n\n // check if file is slpk\n if (magicNumber === SLPK_HEX) {\n throw new Error('Files with .slpk extention currently are not supported by I3SLoader');\n }\n\n // auto detect file type based on url\n let isTileset;\n if (options.i3s.isTileset === 'auto') {\n isTileset = TILESET_REGEX.test(url);\n } else {\n isTileset = options.i3s.isTileset;\n }\n\n let isTileHeader;\n if (options.isTileHeader === 'auto') {\n isTileHeader = TILE_HEADER_REGEX.test(url);\n } else {\n isTileHeader = options.i3s.isTileHeader;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else if (isTileHeader) {\n data = await parseTile(data, context);\n } else {\n data = await parseTileContent(data, options);\n }\n\n return data;\n}\n\nasync function parseTileContent(arrayBuffer, options: I3SLoaderOptions) {\n return await parse(arrayBuffer, I3SContentLoader, options);\n}\n\nasync function parseTileset(data, options: I3SLoaderOptions, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n\n if (tilesetJson?.layerType === POINT_CLOUD) {\n throw new Error('Point Cloud layers currently are not supported by I3SLoader');\n }\n\n const tilesetPostprocessed = await normalizeTilesetData(tilesetJson, options, context);\n return tilesetPostprocessed;\n}\n\nasync function parseTile(data, context) {\n data = JSON.parse(new TextDecoder().decode(data));\n return normalizeTileData(data, context);\n}\n\nfunction getMagicNumber(data) {\n if (data instanceof ArrayBuffer) {\n // slice binary data (4 bytes from the beginning) and transform it to hexadecimal numeral system\n return [...new Uint8Array(data, 0, 4)]\n .map((value) => value.toString(16).padStart(2, '0'))\n .join('');\n }\n return null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"i3s-loader.js","names":["parse","I3SContentLoader","normalizeTileData","normalizeTilesetData","COORDINATE_SYSTEM","getUrlWithoutParams","VERSION","__VERSION__","TILESET_REGEX","TILE_HEADER_REGEX","SLPK_HEX","POINT_CLOUD","I3SLoader","name","id","module","version","mimeTypes","parseI3S","extensions","options","i3s","token","isTileset","isTileHeader","tile","tileset","_tileOptions","_tilesetOptions","useDracoGeometry","useCompressedTextures","decodeTextures","coordinateSystem","METER_OFFSETS","colorsByAttribute","data","arguments","length","undefined","context","url","magicNumber","getMagicNumber","Error","urlWithoutParams","test","parseTileset","parseTile","parseTileContent","arrayBuffer","tilesetJson","JSON","TextDecoder","decode","layerType","tilesetPostprocessed","ArrayBuffer","Uint8Array","map","value","toString","padStart","join"],"sources":["../src/i3s-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parse} from '@loaders.gl/core';\nimport type {I3STilesetHeader} from './types';\nimport {I3SContentLoader} from './i3s-content-loader';\nimport {normalizeTileData, normalizeTilesetData} from './lib/parsers/parse-i3s';\nimport {COORDINATE_SYSTEM} from './lib/parsers/constants';\nimport {I3SParseOptions} from './types';\nimport {getUrlWithoutParams} from './lib/utils/url-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nconst TILESET_REGEX = /layers\\/[0-9]+$/;\nconst TILE_HEADER_REGEX = /nodes\\/([0-9-]+|root)$/;\nconst SLPK_HEX = '504b0304';\nconst POINT_CLOUD = 'PointCloud';\n\nexport type I3SLoaderOptions = LoaderOptions & {\n i3s?: I3SParseOptions;\n};\n\n/**\n * Loader for I3S - Indexed 3D Scene Layer\n */\nexport const I3SLoader: LoaderWithParser<I3STilesetHeader, never, LoaderOptions> = {\n name: 'I3S (Indexed Scene Layers)',\n id: 'i3s',\n module: 'i3s',\n version: VERSION,\n mimeTypes: ['application/octet-stream'],\n parse: parseI3S,\n extensions: ['bin'],\n options: {\n i3s: {\n token: null,\n isTileset: 'auto',\n isTileHeader: 'auto',\n tile: null,\n tileset: null,\n _tileOptions: null,\n _tilesetOptions: null,\n useDracoGeometry: true,\n useCompressedTextures: true,\n decodeTextures: true,\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n colorsByAttribute: null\n }\n }\n};\n\nasync function parseI3S(data, options: I3SLoaderOptions = {}, context): Promise<I3STilesetHeader> {\n const url = context.url;\n options.i3s = options.i3s || {};\n const magicNumber = getMagicNumber(data);\n\n // check if file is slpk\n if (magicNumber === SLPK_HEX) {\n throw new Error('Files with .slpk extention currently are not supported by I3SLoader');\n }\n\n const urlWithoutParams = getUrlWithoutParams(url);\n\n // auto detect file type based on url\n let isTileset;\n if (options.i3s.isTileset === 'auto') {\n isTileset = TILESET_REGEX.test(urlWithoutParams);\n } else {\n isTileset = options.i3s.isTileset;\n }\n\n let isTileHeader;\n if (options.isTileHeader === 'auto') {\n isTileHeader = TILE_HEADER_REGEX.test(urlWithoutParams);\n } else {\n isTileHeader = options.i3s.isTileHeader;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else if (isTileHeader) {\n data = await parseTile(data, context);\n } else {\n data = await parseTileContent(data, options);\n }\n\n return data;\n}\n\nasync function parseTileContent(arrayBuffer, options: I3SLoaderOptions) {\n return await parse(arrayBuffer, I3SContentLoader, options);\n}\n\nasync function parseTileset(data, options: I3SLoaderOptions, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n\n if (tilesetJson?.layerType === POINT_CLOUD) {\n throw new Error('Point Cloud layers currently are not supported by I3SLoader');\n }\n\n const tilesetPostprocessed = await normalizeTilesetData(tilesetJson, options, context);\n return tilesetPostprocessed;\n}\n\nasync function parseTile(data, context) {\n data = JSON.parse(new TextDecoder().decode(data));\n return normalizeTileData(data, context);\n}\n\nfunction getMagicNumber(data) {\n if (data instanceof ArrayBuffer) {\n // slice binary data (4 bytes from the beginning) and transform it to hexadecimal numeral system\n return [...new Uint8Array(data, 0, 4)]\n .map((value) => value.toString(16).padStart(2, '0'))\n .join('');\n }\n return null;\n}\n"],"mappings":"AACA,SAAQA,KAAK,QAAO,kBAAkB;AAAC,SAE/BC,gBAAgB;AAAA,SAChBC,iBAAiB,EAAEC,oBAAoB;AAAA,SACvCC,iBAAiB;AAAA,SAEjBC,mBAAmB;AAI3B,MAAMC,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAE3E,MAAMC,aAAa,GAAG,iBAAiB;AACvC,MAAMC,iBAAiB,GAAG,wBAAwB;AAClD,MAAMC,QAAQ,GAAG,UAAU;AAC3B,MAAMC,WAAW,GAAG,YAAY;AAShC,OAAO,MAAMC,SAAmE,GAAG;EACjFC,IAAI,EAAE,4BAA4B;EAClCC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEV,OAAO;EAChBW,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCjB,KAAK,EAAEkB,QAAQ;EACfC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,KAAK,EAAE,IAAI;MACXC,SAAS,EAAE,MAAM;MACjBC,YAAY,EAAE,MAAM;MACpBC,IAAI,EAAE,IAAI;MACVC,OAAO,EAAE,IAAI;MACbC,YAAY,EAAE,IAAI;MAClBC,eAAe,EAAE,IAAI;MACrBC,gBAAgB,EAAE,IAAI;MACtBC,qBAAqB,EAAE,IAAI;MAC3BC,cAAc,EAAE,IAAI;MACpBC,gBAAgB,EAAE5B,iBAAiB,CAAC6B,aAAa;MACjDC,iBAAiB,EAAE;IACrB;EACF;AACF,CAAC;AAED,eAAehB,QAAQA,CAACiB,IAAI,EAAsE;EAAA,IAApEf,OAAyB,GAAAgB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAAA,IAAEG,OAAO,GAAAH,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;EACnE,MAAME,GAAG,GAAGD,OAAO,CAACC,GAAG;EACvBpB,OAAO,CAACC,GAAG,GAAGD,OAAO,CAACC,GAAG,IAAI,CAAC,CAAC;EAC/B,MAAMoB,WAAW,GAAGC,cAAc,CAACP,IAAI,CAAC;EAGxC,IAAIM,WAAW,KAAK/B,QAAQ,EAAE;IAC5B,MAAM,IAAIiC,KAAK,CAAC,qEAAqE,CAAC;EACxF;EAEA,MAAMC,gBAAgB,GAAGvC,mBAAmB,CAACmC,GAAG,CAAC;EAGjD,IAAIjB,SAAS;EACb,IAAIH,OAAO,CAACC,GAAG,CAACE,SAAS,KAAK,MAAM,EAAE;IACpCA,SAAS,GAAGf,aAAa,CAACqC,IAAI,CAACD,gBAAgB,CAAC;EAClD,CAAC,MAAM;IACLrB,SAAS,GAAGH,OAAO,CAACC,GAAG,CAACE,SAAS;EACnC;EAEA,IAAIC,YAAY;EAChB,IAAIJ,OAAO,CAACI,YAAY,KAAK,MAAM,EAAE;IACnCA,YAAY,GAAGf,iBAAiB,CAACoC,IAAI,CAACD,gBAAgB,CAAC;EACzD,CAAC,MAAM;IACLpB,YAAY,GAAGJ,OAAO,CAACC,GAAG,CAACG,YAAY;EACzC;EAEA,IAAID,SAAS,EAAE;IACbY,IAAI,GAAG,MAAMW,YAAY,CAACX,IAAI,EAAEf,OAAO,EAAEmB,OAAO,CAAC;EACnD,CAAC,MAAM,IAAIf,YAAY,EAAE;IACvBW,IAAI,GAAG,MAAMY,SAAS,CAACZ,IAAI,EAAEI,OAAO,CAAC;EACvC,CAAC,MAAM;IACLJ,IAAI,GAAG,MAAMa,gBAAgB,CAACb,IAAI,EAAEf,OAAO,CAAC;EAC9C;EAEA,OAAOe,IAAI;AACb;AAEA,eAAea,gBAAgBA,CAACC,WAAW,EAAE7B,OAAyB,EAAE;EACtE,OAAO,MAAMpB,KAAK,CAACiD,WAAW,EAAEhD,gBAAgB,EAAEmB,OAAO,CAAC;AAC5D;AAEA,eAAe0B,YAAYA,CAACX,IAAI,EAAEf,OAAyB,EAAEmB,OAAO,EAAE;EACpE,MAAMW,WAAW,GAAGC,IAAI,CAACnD,KAAK,CAAC,IAAIoD,WAAW,CAAC,CAAC,CAACC,MAAM,CAAClB,IAAI,CAAC,CAAC;EAE9D,IAAI,CAAAe,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEI,SAAS,MAAK3C,WAAW,EAAE;IAC1C,MAAM,IAAIgC,KAAK,CAAC,6DAA6D,CAAC;EAChF;EAEA,MAAMY,oBAAoB,GAAG,MAAMpD,oBAAoB,CAAC+C,WAAW,EAAE9B,OAAO,EAAEmB,OAAO,CAAC;EACtF,OAAOgB,oBAAoB;AAC7B;AAEA,eAAeR,SAASA,CAACZ,IAAI,EAAEI,OAAO,EAAE;EACtCJ,IAAI,GAAGgB,IAAI,CAACnD,KAAK,CAAC,IAAIoD,WAAW,CAAC,CAAC,CAACC,MAAM,CAAClB,IAAI,CAAC,CAAC;EACjD,OAAOjC,iBAAiB,CAACiC,IAAI,EAAEI,OAAO,CAAC;AACzC;AAEA,SAASG,cAAcA,CAACP,IAAI,EAAE;EAC5B,IAAIA,IAAI,YAAYqB,WAAW,EAAE;IAE/B,OAAO,CAAC,GAAG,IAAIC,UAAU,CAACtB,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CACnCuB,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CACnDC,IAAI,CAAC,EAAE,CAAC;EACb;EACA,OAAO,IAAI;AACb"}
package/dist/index.cjs CHANGED
@@ -113,6 +113,15 @@ var import_draco = require("@loaders.gl/draco");
113
113
  var import_textures = require("@loaders.gl/textures");
114
114
 
115
115
  // src/lib/utils/url-utils.ts
116
+ function getUrlWithoutParams(url) {
117
+ let urlWithoutParams;
118
+ try {
119
+ const urlObj = new URL(url);
120
+ urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;
121
+ } catch (e) {
122
+ }
123
+ return urlWithoutParams || url;
124
+ }
116
125
  function getUrlWithToken(url, token = null) {
117
126
  return token ? `${url}?token=${token}` : url;
118
127
  }
@@ -1160,7 +1169,7 @@ function normalizeTileNonUrlData(tile) {
1160
1169
  return { ...tile, mbs, boundingVolume, lodMetricType, lodMetricValue, type, refine };
1161
1170
  }
1162
1171
  async function normalizeTilesetData(tileset, options, context) {
1163
- const url = context.url;
1172
+ const url = getUrlWithoutParams(context.url || "");
1164
1173
  let nodePagesTile;
1165
1174
  let root;
1166
1175
  if (tileset.nodePages) {
@@ -1232,15 +1241,16 @@ async function parseI3S(data, options = {}, context) {
1232
1241
  if (magicNumber === SLPK_HEX) {
1233
1242
  throw new Error("Files with .slpk extention currently are not supported by I3SLoader");
1234
1243
  }
1244
+ const urlWithoutParams = getUrlWithoutParams(url);
1235
1245
  let isTileset;
1236
1246
  if (options.i3s.isTileset === "auto") {
1237
- isTileset = TILESET_REGEX.test(url);
1247
+ isTileset = TILESET_REGEX.test(urlWithoutParams);
1238
1248
  } else {
1239
1249
  isTileset = options.i3s.isTileset;
1240
1250
  }
1241
1251
  let isTileHeader;
1242
1252
  if (options.isTileHeader === "auto") {
1243
- isTileHeader = TILE_HEADER_REGEX.test(url);
1253
+ isTileHeader = TILE_HEADER_REGEX.test(urlWithoutParams);
1244
1254
  } else {
1245
1255
  isTileHeader = options.i3s.isTileHeader;
1246
1256
  }
@@ -3,7 +3,7 @@ import { Ellipsoid } from '@math.gl/geospatial';
3
3
  import { load } from '@loaders.gl/core';
4
4
  import { TILE_TYPE, TILE_REFINEMENT, TILESET_TYPE } from '@loaders.gl/tiles';
5
5
  import I3SNodePagesTiles from "../helpers/i3s-nodepages-tiles.js";
6
- import { generateTileAttributeUrls, getUrlWithToken } from "../utils/url-utils.js";
6
+ import { generateTileAttributeUrls, getUrlWithToken, getUrlWithoutParams } from "../utils/url-utils.js";
7
7
  import { I3SLoader } from "../../i3s-loader.js";
8
8
  export function normalizeTileData(tile, context) {
9
9
  const url = context.url || '';
@@ -60,7 +60,7 @@ export function normalizeTileNonUrlData(tile) {
60
60
  };
61
61
  }
62
62
  export async function normalizeTilesetData(tileset, options, context) {
63
- const url = context.url;
63
+ const url = getUrlWithoutParams(context.url || '');
64
64
  let nodePagesTile;
65
65
  let root;
66
66
  if (tileset.nodePages) {
@@ -1 +1 @@
1
- {"version":3,"file":"parse-i3s.js","names":["OrientedBoundingBox","Ellipsoid","load","TILE_TYPE","TILE_REFINEMENT","TILESET_TYPE","I3SNodePagesTiles","generateTileAttributeUrls","getUrlWithToken","I3SLoader","normalizeTileData","tile","context","url","contentUrl","geometryData","href","textureUrl","textureData","attributeUrls","attributeData","children","normalizeTileNonUrlData","textureFormat","isDracoGeometry","_tile$lodSelection","_tile$lodSelection2","boundingVolume","mbs","sphere","WGS84","cartographicToCartesian","slice","obb","box","center","halfSize","quaternion","fromCenterHalfSizeQuaternion","boundingSphere","getBoundingSphere","radius","lodMetricType","lodSelection","metricType","lodMetricValue","maxError","type","MESH","refine","REPLACE","normalizeTilesetData","tileset","options","nodePagesTile","root","nodePages","formTileFromNodePages","parseOptions","i3s","rootNodeUrl","token","loadContent","isTileHeader","isTileset","loader","basePath","I3S"],"sources":["../../../src/lib/parsers/parse-i3s.ts"],"sourcesContent":["import {OrientedBoundingBox} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {load} from '@loaders.gl/core';\nimport {TILE_TYPE, TILE_REFINEMENT, TILESET_TYPE} from '@loaders.gl/tiles';\nimport I3SNodePagesTiles from '../helpers/i3s-nodepages-tiles';\nimport {generateTileAttributeUrls, getUrlWithToken} from '../utils/url-utils';\nimport {\n I3STilesetHeader,\n I3STileHeader,\n Mbs,\n I3SMinimalNodeData,\n Node3DIndexDocument,\n SceneLayer3D,\n I3SParseOptions\n} from '../../types';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport { I3SLoader } from '../../i3s-loader';\n\nexport function normalizeTileData(tile : Node3DIndexDocument, context: LoaderContext): I3STileHeader {\n const url: string = context.url || '';\n let contentUrl: string | undefined;\n if (tile.geometryData) {\n contentUrl = `${url}/${tile.geometryData[0].href}`;\n }\n\n let textureUrl: string | undefined;\n if (tile.textureData) {\n textureUrl = `${url}/${tile.textureData[0].href}`;\n }\n\n let attributeUrls: string[] | undefined;\n if (tile.attributeData) {\n attributeUrls = generateTileAttributeUrls(url, tile);\n }\n\n const children = tile.children || [];\n\n return normalizeTileNonUrlData({\n ...tile,\n children,\n url,\n contentUrl,\n textureUrl,\n textureFormat: 'jpg', // `jpg` format will cause `ImageLoader` usage that will be able to handle `png` as well\n attributeUrls,\n isDracoGeometry: false\n });\n}\n\nexport function normalizeTileNonUrlData(tile : I3SMinimalNodeData): I3STileHeader {\n const boundingVolume: {box?: number[]; sphere?: number[]} = {};\n let mbs: Mbs = [0, 0, 0, 1];\n if (tile.mbs) {\n mbs = tile.mbs;\n boundingVolume.sphere = [\n ...Ellipsoid.WGS84.cartographicToCartesian(tile.mbs.slice(0, 3)), // cartesian center of sphere\n tile.mbs[3] // radius of sphere\n ] as Mbs;\n } else if (tile.obb) {\n boundingVolume.box = [\n ...Ellipsoid.WGS84.cartographicToCartesian(tile.obb.center), // cartesian center of box\n ...tile.obb.halfSize, // halfSize\n ...tile.obb.quaternion // quaternion\n ];\n const obb = new OrientedBoundingBox().fromCenterHalfSizeQuaternion(\n boundingVolume.box.slice(0, 3),\n tile.obb.halfSize,\n tile.obb.quaternion\n );\n const boundingSphere = obb.getBoundingSphere();\n boundingVolume.sphere = [...boundingSphere.center , boundingSphere.radius] as Mbs;\n mbs = [...tile.obb.center, boundingSphere.radius] as Mbs;\n }\n\n const lodMetricType = tile.lodSelection?.[0].metricType;\n const lodMetricValue = tile.lodSelection?.[0].maxError;\n const type = TILE_TYPE.MESH;\n /**\n * I3S specification supports only REPLACE\n */\n const refine = TILE_REFINEMENT.REPLACE;\n\n return {...tile, mbs, boundingVolume, lodMetricType, lodMetricValue, type, refine};\n}\n\nexport async function normalizeTilesetData(tileset : SceneLayer3D, options : LoaderOptions, context: LoaderContext): Promise<I3STileHeader | I3STilesetHeader> {\n const url = context.url;\n let nodePagesTile: I3SNodePagesTiles | undefined;\n let root: I3STileHeader | I3STilesetHeader;\n if (tileset.nodePages) {\n nodePagesTile = new I3SNodePagesTiles(tileset, url, options);\n root = await nodePagesTile.formTileFromNodePages(0);\n } else {\n const parseOptions = options.i3s as I3SParseOptions;\n const rootNodeUrl = getUrlWithToken(`${url}/nodes/root`, parseOptions.token);\n // eslint-disable-next-line no-use-before-define\n root = await load(rootNodeUrl, I3SLoader, {\n ...options,\n i3s: {\n // @ts-expect-error options is not properly typed\n ...options.i3s,\n loadContent: false, isTileHeader: true, isTileset: false}\n });\n }\n\n return {\n ...tileset,\n loader: I3SLoader,\n url,\n basePath: url,\n type: TILESET_TYPE.I3S,\n nodePagesTile,\n // @ts-expect-error\n root,\n lodMetricType: root.lodMetricType,\n lodMetricValue: root.lodMetricValue\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-i3s.js","names":["OrientedBoundingBox","Ellipsoid","load","TILE_TYPE","TILE_REFINEMENT","TILESET_TYPE","I3SNodePagesTiles","generateTileAttributeUrls","getUrlWithToken","getUrlWithoutParams","I3SLoader","normalizeTileData","tile","context","url","contentUrl","geometryData","href","textureUrl","textureData","attributeUrls","attributeData","children","normalizeTileNonUrlData","textureFormat","isDracoGeometry","_tile$lodSelection","_tile$lodSelection2","boundingVolume","mbs","sphere","WGS84","cartographicToCartesian","slice","obb","box","center","halfSize","quaternion","fromCenterHalfSizeQuaternion","boundingSphere","getBoundingSphere","radius","lodMetricType","lodSelection","metricType","lodMetricValue","maxError","type","MESH","refine","REPLACE","normalizeTilesetData","tileset","options","nodePagesTile","root","nodePages","formTileFromNodePages","parseOptions","i3s","rootNodeUrl","token","loadContent","isTileHeader","isTileset","loader","basePath","I3S"],"sources":["../../../src/lib/parsers/parse-i3s.ts"],"sourcesContent":["import {OrientedBoundingBox} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {load} from '@loaders.gl/core';\nimport {TILE_TYPE, TILE_REFINEMENT, TILESET_TYPE} from '@loaders.gl/tiles';\nimport I3SNodePagesTiles from '../helpers/i3s-nodepages-tiles';\nimport {generateTileAttributeUrls, getUrlWithToken, getUrlWithoutParams} from '../utils/url-utils';\nimport {\n I3STilesetHeader,\n I3STileHeader,\n Mbs,\n I3SMinimalNodeData,\n Node3DIndexDocument,\n SceneLayer3D,\n I3SParseOptions\n} from '../../types';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport { I3SLoader } from '../../i3s-loader';\n\nexport function normalizeTileData(tile : Node3DIndexDocument, context: LoaderContext): I3STileHeader {\n const url: string = context.url || '';\n let contentUrl: string | undefined;\n if (tile.geometryData) {\n contentUrl = `${url}/${tile.geometryData[0].href}`;\n }\n\n let textureUrl: string | undefined;\n if (tile.textureData) {\n textureUrl = `${url}/${tile.textureData[0].href}`;\n }\n\n let attributeUrls: string[] | undefined;\n if (tile.attributeData) {\n attributeUrls = generateTileAttributeUrls(url, tile);\n }\n\n const children = tile.children || [];\n\n return normalizeTileNonUrlData({\n ...tile,\n children,\n url,\n contentUrl,\n textureUrl,\n textureFormat: 'jpg', // `jpg` format will cause `ImageLoader` usage that will be able to handle `png` as well\n attributeUrls,\n isDracoGeometry: false\n });\n}\n\nexport function normalizeTileNonUrlData(tile : I3SMinimalNodeData): I3STileHeader {\n const boundingVolume: {box?: number[]; sphere?: number[]} = {};\n let mbs: Mbs = [0, 0, 0, 1];\n if (tile.mbs) {\n mbs = tile.mbs;\n boundingVolume.sphere = [\n ...Ellipsoid.WGS84.cartographicToCartesian(tile.mbs.slice(0, 3)), // cartesian center of sphere\n tile.mbs[3] // radius of sphere\n ] as Mbs;\n } else if (tile.obb) {\n boundingVolume.box = [\n ...Ellipsoid.WGS84.cartographicToCartesian(tile.obb.center), // cartesian center of box\n ...tile.obb.halfSize, // halfSize\n ...tile.obb.quaternion // quaternion\n ];\n const obb = new OrientedBoundingBox().fromCenterHalfSizeQuaternion(\n boundingVolume.box.slice(0, 3),\n tile.obb.halfSize,\n tile.obb.quaternion\n );\n const boundingSphere = obb.getBoundingSphere();\n boundingVolume.sphere = [...boundingSphere.center , boundingSphere.radius] as Mbs;\n mbs = [...tile.obb.center, boundingSphere.radius] as Mbs;\n }\n\n const lodMetricType = tile.lodSelection?.[0].metricType;\n const lodMetricValue = tile.lodSelection?.[0].maxError;\n const type = TILE_TYPE.MESH;\n /**\n * I3S specification supports only REPLACE\n */\n const refine = TILE_REFINEMENT.REPLACE;\n\n return {...tile, mbs, boundingVolume, lodMetricType, lodMetricValue, type, refine};\n}\n\nexport async function normalizeTilesetData(tileset : SceneLayer3D, options : LoaderOptions, context: LoaderContext): Promise<I3STileHeader | I3STilesetHeader> {\n const url = getUrlWithoutParams(context.url || '');\n let nodePagesTile: I3SNodePagesTiles | undefined;\n let root: I3STileHeader | I3STilesetHeader;\n if (tileset.nodePages) {\n nodePagesTile = new I3SNodePagesTiles(tileset, url, options);\n root = await nodePagesTile.formTileFromNodePages(0);\n } else {\n const parseOptions = options.i3s as I3SParseOptions;\n const rootNodeUrl = getUrlWithToken(`${url}/nodes/root`, parseOptions.token);\n // eslint-disable-next-line no-use-before-define\n root = await load(rootNodeUrl, I3SLoader, {\n ...options,\n i3s: {\n // @ts-expect-error options is not properly typed\n ...options.i3s,\n loadContent: false, isTileHeader: true, isTileset: false}\n });\n }\n\n return {\n ...tileset,\n loader: I3SLoader,\n url,\n basePath: url,\n type: TILESET_TYPE.I3S,\n nodePagesTile,\n // @ts-expect-error\n root,\n lodMetricType: root.lodMetricType,\n lodMetricValue: root.lodMetricValue\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,10 @@
1
1
  import { Node3DIndexDocument, SceneLayer3D } from '../../types';
2
+ /**
3
+ * Return URL seperated from search params
4
+ * @param url - URL that might have search params
5
+ * @returns url without search params
6
+ */
7
+ export declare function getUrlWithoutParams(url: string): string;
2
8
  /**
3
9
  * Generates url with token if it is exists.
4
10
  * @param url
@@ -1 +1 @@
1
- {"version":3,"file":"url-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/url-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAU1F;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAUhG"}
1
+ {"version":3,"file":"url-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/url-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUvD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAU1F;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAUhG"}
@@ -1,3 +1,11 @@
1
+ export function getUrlWithoutParams(url) {
2
+ let urlWithoutParams;
3
+ try {
4
+ const urlObj = new URL(url);
5
+ urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;
6
+ } catch (e) {}
7
+ return urlWithoutParams || url;
8
+ }
1
9
  export function getUrlWithToken(url) {
2
10
  let token = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
3
11
  return token ? `${url}?token=${token}` : url;
@@ -1 +1 @@
1
- {"version":3,"file":"url-utils.js","names":["getUrlWithToken","url","token","arguments","length","undefined","generateTileAttributeUrls","tile","attributeData","attributeUrls","index","attributeUrl","href","replace","push","generateTilesetAttributeUrls","tileset","resource","attributeStorageInfo","fileName","key"],"sources":["../../../src/lib/utils/url-utils.ts"],"sourcesContent":["import {Node3DIndexDocument, SceneLayer3D} from '../../types';\n\n/**\n * Generates url with token if it is exists.\n * @param url\n * @param token\n * @returns\n */\nexport function getUrlWithToken(url: string, token: string | null = null): string {\n return token ? `${url}?token=${token}` : url;\n}\n\n/**\n * Generates attribute urls for tile.\n * @param tile\n * @returns list of attribute urls\n */\nexport function generateTileAttributeUrls(url: string, tile: Node3DIndexDocument): string[] {\n const {attributeData = []} = tile;\n const attributeUrls: string[] = [];\n\n for (let index = 0; index < attributeData.length; index++) {\n const attributeUrl = attributeData[index].href.replace('./', '');\n attributeUrls.push(`${url}/${attributeUrl}`);\n }\n\n return attributeUrls;\n}\n\n/**\n * Generates attribute urls for tileset based on tileset and resource\n * @param tileset - tileset metadata\n * @param url - tileset base url\n * @param resource - resource id per I3S spec\n * @returns {Array}\n */\nexport function generateTilesetAttributeUrls(tileset: SceneLayer3D, url: string, resource: number) {\n const attributeUrls: string[] = [];\n const {attributeStorageInfo = []} = tileset;\n\n for (let index = 0; index < attributeStorageInfo.length; index++) {\n const fileName = attributeStorageInfo[index].key;\n attributeUrls.push(`${url}/nodes/${resource}/attributes/${fileName}/0`);\n }\n\n return attributeUrls;\n}\n"],"mappings":"AAQA,OAAO,SAASA,eAAeA,CAACC,GAAW,EAAuC;EAAA,IAArCC,KAAoB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EACtE,OAAOD,KAAK,GAAI,GAAED,GAAI,UAASC,KAAM,EAAC,GAAGD,GAAG;AAC9C;AAOA,OAAO,SAASK,yBAAyBA,CAACL,GAAW,EAAEM,IAAyB,EAAY;EAC1F,MAAM;IAACC,aAAa,GAAG;EAAE,CAAC,GAAGD,IAAI;EACjC,MAAME,aAAuB,GAAG,EAAE;EAElC,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGF,aAAa,CAACJ,MAAM,EAAEM,KAAK,EAAE,EAAE;IACzD,MAAMC,YAAY,GAAGH,aAAa,CAACE,KAAK,CAAC,CAACE,IAAI,CAACC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAChEJ,aAAa,CAACK,IAAI,CAAE,GAAEb,GAAI,IAAGU,YAAa,EAAC,CAAC;EAC9C;EAEA,OAAOF,aAAa;AACtB;AASA,OAAO,SAASM,4BAA4BA,CAACC,OAAqB,EAAEf,GAAW,EAAEgB,QAAgB,EAAE;EACjG,MAAMR,aAAuB,GAAG,EAAE;EAClC,MAAM;IAACS,oBAAoB,GAAG;EAAE,CAAC,GAAGF,OAAO;EAE3C,KAAK,IAAIN,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGQ,oBAAoB,CAACd,MAAM,EAAEM,KAAK,EAAE,EAAE;IAChE,MAAMS,QAAQ,GAAGD,oBAAoB,CAACR,KAAK,CAAC,CAACU,GAAG;IAChDX,aAAa,CAACK,IAAI,CAAE,GAAEb,GAAI,UAASgB,QAAS,eAAcE,QAAS,IAAG,CAAC;EACzE;EAEA,OAAOV,aAAa;AACtB"}
1
+ {"version":3,"file":"url-utils.js","names":["getUrlWithoutParams","url","urlWithoutParams","urlObj","URL","origin","pathname","e","getUrlWithToken","token","arguments","length","undefined","generateTileAttributeUrls","tile","attributeData","attributeUrls","index","attributeUrl","href","replace","push","generateTilesetAttributeUrls","tileset","resource","attributeStorageInfo","fileName","key"],"sources":["../../../src/lib/utils/url-utils.ts"],"sourcesContent":["import {Node3DIndexDocument, SceneLayer3D} from '../../types';\n\n/**\n * Return URL seperated from search params\n * @param url - URL that might have search params\n * @returns url without search params\n */\nexport function getUrlWithoutParams(url: string): string {\n let urlWithoutParams;\n\n try {\n const urlObj = new URL(url);\n urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;\n } catch (e) {\n // do nothing\n }\n return urlWithoutParams || url;\n}\n\n/**\n * Generates url with token if it is exists.\n * @param url\n * @param token\n * @returns\n */\nexport function getUrlWithToken(url: string, token: string | null = null): string {\n return token ? `${url}?token=${token}` : url;\n}\n\n/**\n * Generates attribute urls for tile.\n * @param tile\n * @returns list of attribute urls\n */\nexport function generateTileAttributeUrls(url: string, tile: Node3DIndexDocument): string[] {\n const {attributeData = []} = tile;\n const attributeUrls: string[] = [];\n\n for (let index = 0; index < attributeData.length; index++) {\n const attributeUrl = attributeData[index].href.replace('./', '');\n attributeUrls.push(`${url}/${attributeUrl}`);\n }\n\n return attributeUrls;\n}\n\n/**\n * Generates attribute urls for tileset based on tileset and resource\n * @param tileset - tileset metadata\n * @param url - tileset base url\n * @param resource - resource id per I3S spec\n * @returns {Array}\n */\nexport function generateTilesetAttributeUrls(tileset: SceneLayer3D, url: string, resource: number) {\n const attributeUrls: string[] = [];\n const {attributeStorageInfo = []} = tileset;\n\n for (let index = 0; index < attributeStorageInfo.length; index++) {\n const fileName = attributeStorageInfo[index].key;\n attributeUrls.push(`${url}/nodes/${resource}/attributes/${fileName}/0`);\n }\n\n return attributeUrls;\n}\n"],"mappings":"AAOA,OAAO,SAASA,mBAAmBA,CAACC,GAAW,EAAU;EACvD,IAAIC,gBAAgB;EAEpB,IAAI;IACF,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;IAC3BC,gBAAgB,GAAI,GAAEC,MAAM,CAACE,MAAO,GAAEF,MAAM,CAACG,QAAS,EAAC;EACzD,CAAC,CAAC,OAAOC,CAAC,EAAE,CAEZ;EACA,OAAOL,gBAAgB,IAAID,GAAG;AAChC;AAQA,OAAO,SAASO,eAAeA,CAACP,GAAW,EAAuC;EAAA,IAArCQ,KAAoB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EACtE,OAAOD,KAAK,GAAI,GAAER,GAAI,UAASQ,KAAM,EAAC,GAAGR,GAAG;AAC9C;AAOA,OAAO,SAASY,yBAAyBA,CAACZ,GAAW,EAAEa,IAAyB,EAAY;EAC1F,MAAM;IAACC,aAAa,GAAG;EAAE,CAAC,GAAGD,IAAI;EACjC,MAAME,aAAuB,GAAG,EAAE;EAElC,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGF,aAAa,CAACJ,MAAM,EAAEM,KAAK,EAAE,EAAE;IACzD,MAAMC,YAAY,GAAGH,aAAa,CAACE,KAAK,CAAC,CAACE,IAAI,CAACC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAChEJ,aAAa,CAACK,IAAI,CAAE,GAAEpB,GAAI,IAAGiB,YAAa,EAAC,CAAC;EAC9C;EAEA,OAAOF,aAAa;AACtB;AASA,OAAO,SAASM,4BAA4BA,CAACC,OAAqB,EAAEtB,GAAW,EAAEuB,QAAgB,EAAE;EACjG,MAAMR,aAAuB,GAAG,EAAE;EAClC,MAAM;IAACS,oBAAoB,GAAG;EAAE,CAAC,GAAGF,OAAO;EAE3C,KAAK,IAAIN,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGQ,oBAAoB,CAACd,MAAM,EAAEM,KAAK,EAAE,EAAE;IAChE,MAAMS,QAAQ,GAAGD,oBAAoB,CAACR,KAAK,CAAC,CAACU,GAAG;IAChDX,aAAa,CAACK,IAAI,CAAE,GAAEpB,GAAI,UAASuB,QAAS,eAAcE,QAAS,IAAG,CAAC;EACzE;EAEA,OAAOV,aAAa;AACtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/i3s",
3
- "version": "4.0.0-beta.3",
3
+ "version": "4.0.0-beta.5",
4
4
  "description": "i3s .",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -41,21 +41,21 @@
41
41
  "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\\\""
42
42
  },
43
43
  "dependencies": {
44
- "@loaders.gl/compression": "4.0.0-beta.3",
45
- "@loaders.gl/crypto": "4.0.0-beta.3",
46
- "@loaders.gl/draco": "4.0.0-beta.3",
47
- "@loaders.gl/images": "4.0.0-beta.3",
48
- "@loaders.gl/loader-utils": "4.0.0-beta.3",
49
- "@loaders.gl/schema": "4.0.0-beta.3",
50
- "@loaders.gl/textures": "4.0.0-beta.3",
51
- "@loaders.gl/tiles": "4.0.0-beta.3",
44
+ "@loaders.gl/compression": "4.0.0-beta.5",
45
+ "@loaders.gl/crypto": "4.0.0-beta.5",
46
+ "@loaders.gl/draco": "4.0.0-beta.5",
47
+ "@loaders.gl/images": "4.0.0-beta.5",
48
+ "@loaders.gl/loader-utils": "4.0.0-beta.5",
49
+ "@loaders.gl/schema": "4.0.0-beta.5",
50
+ "@loaders.gl/textures": "4.0.0-beta.5",
51
+ "@loaders.gl/tiles": "4.0.0-beta.5",
52
52
  "@luma.gl/constants": "^8.5.4",
53
53
  "@math.gl/core": "^4.0.0",
54
54
  "@math.gl/culling": "^4.0.0",
55
55
  "@math.gl/geospatial": "^4.0.0"
56
56
  },
57
57
  "peerDependencies": {
58
- "@loaders.gl/core": "^4.0.0-alpha.8"
58
+ "@loaders.gl/core": "4.0.0-beta.3"
59
59
  },
60
- "gitHead": "7ba9621cc51c7a26c407086ac86171f35b8712af"
60
+ "gitHead": "a6f5a0d1a316cc22396e5a4d480c14329d1ef146"
61
61
  }
package/src/i3s-loader.ts CHANGED
@@ -5,6 +5,7 @@ import {I3SContentLoader} from './i3s-content-loader';
5
5
  import {normalizeTileData, normalizeTilesetData} from './lib/parsers/parse-i3s';
6
6
  import {COORDINATE_SYSTEM} from './lib/parsers/constants';
7
7
  import {I3SParseOptions} from './types';
8
+ import {getUrlWithoutParams} from './lib/utils/url-utils';
8
9
 
9
10
  // __VERSION__ is injected by babel-plugin-version-inline
10
11
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
@@ -58,17 +59,19 @@ async function parseI3S(data, options: I3SLoaderOptions = {}, context): Promise<
58
59
  throw new Error('Files with .slpk extention currently are not supported by I3SLoader');
59
60
  }
60
61
 
62
+ const urlWithoutParams = getUrlWithoutParams(url);
63
+
61
64
  // auto detect file type based on url
62
65
  let isTileset;
63
66
  if (options.i3s.isTileset === 'auto') {
64
- isTileset = TILESET_REGEX.test(url);
67
+ isTileset = TILESET_REGEX.test(urlWithoutParams);
65
68
  } else {
66
69
  isTileset = options.i3s.isTileset;
67
70
  }
68
71
 
69
72
  let isTileHeader;
70
73
  if (options.isTileHeader === 'auto') {
71
- isTileHeader = TILE_HEADER_REGEX.test(url);
74
+ isTileHeader = TILE_HEADER_REGEX.test(urlWithoutParams);
72
75
  } else {
73
76
  isTileHeader = options.i3s.isTileHeader;
74
77
  }
@@ -3,7 +3,7 @@ import {Ellipsoid} from '@math.gl/geospatial';
3
3
  import {load} from '@loaders.gl/core';
4
4
  import {TILE_TYPE, TILE_REFINEMENT, TILESET_TYPE} from '@loaders.gl/tiles';
5
5
  import I3SNodePagesTiles from '../helpers/i3s-nodepages-tiles';
6
- import {generateTileAttributeUrls, getUrlWithToken} from '../utils/url-utils';
6
+ import {generateTileAttributeUrls, getUrlWithToken, getUrlWithoutParams} from '../utils/url-utils';
7
7
  import {
8
8
  I3STilesetHeader,
9
9
  I3STileHeader,
@@ -84,7 +84,7 @@ export function normalizeTileNonUrlData(tile : I3SMinimalNodeData): I3STileHeade
84
84
  }
85
85
 
86
86
  export async function normalizeTilesetData(tileset : SceneLayer3D, options : LoaderOptions, context: LoaderContext): Promise<I3STileHeader | I3STilesetHeader> {
87
- const url = context.url;
87
+ const url = getUrlWithoutParams(context.url || '');
88
88
  let nodePagesTile: I3SNodePagesTiles | undefined;
89
89
  let root: I3STileHeader | I3STilesetHeader;
90
90
  if (tileset.nodePages) {
@@ -1,5 +1,22 @@
1
1
  import {Node3DIndexDocument, SceneLayer3D} from '../../types';
2
2
 
3
+ /**
4
+ * Return URL seperated from search params
5
+ * @param url - URL that might have search params
6
+ * @returns url without search params
7
+ */
8
+ export function getUrlWithoutParams(url: string): string {
9
+ let urlWithoutParams;
10
+
11
+ try {
12
+ const urlObj = new URL(url);
13
+ urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;
14
+ } catch (e) {
15
+ // do nothing
16
+ }
17
+ return urlWithoutParams || url;
18
+ }
19
+
3
20
  /**
4
21
  * Generates url with token if it is exists.
5
22
  * @param url