@loaders.gl/3d-tiles 4.0.0-alpha.11 → 4.0.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dist.min.js CHANGED
@@ -12687,16 +12687,6 @@
12687
12687
  }
12688
12688
  return subtree;
12689
12689
  }
12690
- function resolveBufferUri(bitstreamRelativeUri, basePath) {
12691
- const hasProtocol = basePath.startsWith("http");
12692
- if (hasProtocol) {
12693
- const resolvedUri2 = new URL(bitstreamRelativeUri, basePath);
12694
- return decodeURI(resolvedUri2.toString());
12695
- }
12696
- const basePathWithProtocol = `http://${basePath}`;
12697
- const resolvedUri = new URL(bitstreamRelativeUri, basePathWithProtocol);
12698
- return `/${resolvedUri.host}${resolvedUri.pathname}`;
12699
- }
12700
12690
  async function getExplicitBitstream(subtree, name10, internalBinaryBuffer, context) {
12701
12691
  const bufferViewIndex = subtree[name10].bufferView;
12702
12692
  const bufferView = subtree.bufferViews[bufferViewIndex];
@@ -12708,7 +12698,7 @@
12708
12698
  throw new Error("fetch is not provided");
12709
12699
  }
12710
12700
  if (buffer.uri) {
12711
- const bufferUri = resolveBufferUri(buffer.uri, context?.url);
12701
+ const bufferUri = `${context?.baseUrl || ""}/${buffer.uri}`;
12712
12702
  const response = await context.fetch(bufferUri);
12713
12703
  const data = await response.arrayBuffer();
12714
12704
  return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);
@@ -78,16 +78,6 @@ function _parse3DTilesSubtree() {
78
78
  }));
79
79
  return _parse3DTilesSubtree.apply(this, arguments);
80
80
  }
81
- function resolveBufferUri(bitstreamRelativeUri, basePath) {
82
- var hasProtocol = basePath.startsWith('http');
83
- if (hasProtocol) {
84
- var _resolvedUri = new URL(bitstreamRelativeUri, basePath);
85
- return decodeURI(_resolvedUri.toString());
86
- }
87
- var basePathWithProtocol = "http://".concat(basePath);
88
- var resolvedUri = new URL(bitstreamRelativeUri, basePathWithProtocol);
89
- return "/".concat(resolvedUri.host).concat(resolvedUri.pathname);
90
- }
91
81
  function getExplicitBitstream(_x4, _x5, _x6, _x7) {
92
82
  return _getExplicitBitstream.apply(this, arguments);
93
83
  }
@@ -116,7 +106,7 @@ function _getExplicitBitstream() {
116
106
  _context2.next = 16;
117
107
  break;
118
108
  }
119
- bufferUri = resolveBufferUri(buffer.uri, context === null || context === void 0 ? void 0 : context.url);
109
+ bufferUri = "".concat((context === null || context === void 0 ? void 0 : context.baseUrl) || '', "/").concat(buffer.uri);
120
110
  _context2.next = 11;
121
111
  return context.fetch(bufferUri);
122
112
  case 11:
@@ -1 +1 @@
1
- {"version":3,"file":"parse-3d-tile-subtree.js","names":["SUBTREE_FILE_MAGIC","SUBTREE_FILE_VERSION","parse3DTilesSubtree","_x","_x2","_x3","_parse3DTilesSubtree","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","data","options","context","magic","version","jsonByteLength","stringAttribute","textDecoder","string","subtree","binaryByteLength","internalBinaryBuffer","wrap","_callee$","_context","prev","next","Uint32Array","slice","Error","parseUint64Value","Uint8Array","TextDecoder","decode","JSON","parse","ArrayBuffer","tileAvailability","getExplicitBitstream","explicitBitstream","sent","contentAvailability","childSubtreeAvailability","abrupt","stop","resolveBufferUri","bitstreamRelativeUri","basePath","hasProtocol","startsWith","resolvedUri","URL","decodeURI","toString","basePathWithProtocol","concat","host","pathname","_x4","_x5","_x6","_x7","_getExplicitBitstream","_callee2","name","bufferViewIndex","bufferView","buffer","bufferUri","response","_callee2$","_context2","bufferViews","buffers","url","fetch","uri","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right","Math","pow"],"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"sourcesContent":["import type {Subtree, ExplicitBitstream} from '../../../types';\nimport type {LoaderContext, LoaderOptions} from '@loaders.gl/loader-utils';\n\nconst SUBTREE_FILE_MAGIC = 0x74627573;\nconst SUBTREE_FILE_VERSION = 1;\n\n/**\n * Parse subtree file\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format\n * @param data\n * @returns\n */\n// eslint-disable-next-line max-statements\nexport default async function parse3DTilesSubtree(\n data: ArrayBuffer,\n options: LoaderOptions | undefined,\n context: LoaderContext | undefined\n): Promise<Subtree> {\n const magic = new Uint32Array(data.slice(0, 4));\n\n if (magic[0] !== SUBTREE_FILE_MAGIC) {\n throw new Error('Wrong subtree file magic number');\n }\n\n const version = new Uint32Array(data.slice(4, 8));\n\n if (version[0] !== SUBTREE_FILE_VERSION) {\n throw new Error('Wrong subtree file verson, must be 1');\n }\n\n const jsonByteLength = parseUint64Value(data.slice(8, 16));\n const stringAttribute = new Uint8Array(data, 24, jsonByteLength);\n\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(stringAttribute);\n const subtree = JSON.parse(string);\n\n const binaryByteLength = parseUint64Value(data.slice(16, 24));\n let internalBinaryBuffer = new ArrayBuffer(0);\n\n if (binaryByteLength) {\n internalBinaryBuffer = data.slice(24 + jsonByteLength);\n }\n\n if ('bufferView' in subtree.tileAvailability) {\n subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'tileAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'contentAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'childSubtreeAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n return subtree;\n}\n\n/**\n * Get url for bitstream downloading\n * @param bitstreamRelativeUri\n * @param basePath\n * @returns\n */\nfunction resolveBufferUri(bitstreamRelativeUri: string, basePath: string): string {\n const hasProtocol = basePath.startsWith('http');\n\n if (hasProtocol) {\n const resolvedUri = new URL(bitstreamRelativeUri, basePath);\n return decodeURI(resolvedUri.toString());\n }\n\n /**\n * Adding http protocol only for new URL constructor usage.\n * It allows to resolve relative paths like ../../example with basePath.\n */\n const basePathWithProtocol = `http://${basePath}`;\n const resolvedUri = new URL(bitstreamRelativeUri, basePathWithProtocol);\n /**\n * Drop protocol and use just relative path.\n */\n return `/${resolvedUri.host}${resolvedUri.pathname}`;\n}\n\n/**\n * Get explicit bitstream for subtree availability data.\n * @param subtree\n * @param name\n * @param internalBinaryBuffer\n */\nasync function getExplicitBitstream(\n subtree: Subtree,\n name: string,\n internalBinaryBuffer: ArrayBuffer,\n context: LoaderContext | undefined\n): Promise<ExplicitBitstream> {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n if (!context?.url || !context.fetch) {\n throw new Error('Url is not provided');\n }\n\n if (!context.fetch) {\n throw new Error('fetch is not provided');\n }\n\n // External bitstream loading\n if (buffer.uri) {\n const bufferUri = resolveBufferUri(buffer.uri, context?.url);\n const response = await context.fetch(bufferUri);\n const data = await response.arrayBuffer();\n // Return view of bitstream.\n return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);\n }\n // Return view of bitstream.\n return new Uint8Array(internalBinaryBuffer, bufferView.byteOffset, bufferView.byteLength);\n}\n\n/**\n * Parse buffer to return uint64 value\n * @param buffer\n * @returns 64-bit value until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Value(buffer: ArrayBuffer): number {\n const dataView = new DataView(buffer);\n const left = dataView.getUint32(0, true);\n const right = dataView.getUint32(4, true);\n // combine the two 32-bit values\n return left + 2 ** 32 * right;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-3d-tile-subtree.js","names":["SUBTREE_FILE_MAGIC","SUBTREE_FILE_VERSION","parse3DTilesSubtree","_x","_x2","_x3","_parse3DTilesSubtree","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","data","options","context","magic","version","jsonByteLength","stringAttribute","textDecoder","string","subtree","binaryByteLength","internalBinaryBuffer","wrap","_callee$","_context","prev","next","Uint32Array","slice","Error","parseUint64Value","Uint8Array","TextDecoder","decode","JSON","parse","ArrayBuffer","tileAvailability","getExplicitBitstream","explicitBitstream","sent","contentAvailability","childSubtreeAvailability","abrupt","stop","_x4","_x5","_x6","_x7","_getExplicitBitstream","_callee2","name","bufferViewIndex","bufferView","buffer","bufferUri","response","_callee2$","_context2","bufferViews","buffers","url","fetch","uri","concat","baseUrl","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right","Math","pow"],"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"sourcesContent":["import type {Subtree, ExplicitBitstream} from '../../../types';\nimport type {LoaderContext, LoaderOptions} from '@loaders.gl/loader-utils';\n\nconst SUBTREE_FILE_MAGIC = 0x74627573;\nconst SUBTREE_FILE_VERSION = 1;\n\n/**\n * Parse subtree file\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format\n * @param data\n * @returns\n */\n// eslint-disable-next-line max-statements\nexport default async function parse3DTilesSubtree(\n data: ArrayBuffer,\n options: LoaderOptions | undefined,\n context: LoaderContext | undefined\n): Promise<Subtree> {\n const magic = new Uint32Array(data.slice(0, 4));\n\n if (magic[0] !== SUBTREE_FILE_MAGIC) {\n throw new Error('Wrong subtree file magic number');\n }\n\n const version = new Uint32Array(data.slice(4, 8));\n\n if (version[0] !== SUBTREE_FILE_VERSION) {\n throw new Error('Wrong subtree file verson, must be 1');\n }\n\n const jsonByteLength = parseUint64Value(data.slice(8, 16));\n const stringAttribute = new Uint8Array(data, 24, jsonByteLength);\n\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(stringAttribute);\n const subtree = JSON.parse(string);\n\n const binaryByteLength = parseUint64Value(data.slice(16, 24));\n let internalBinaryBuffer = new ArrayBuffer(0);\n\n if (binaryByteLength) {\n internalBinaryBuffer = data.slice(24 + jsonByteLength);\n }\n\n if ('bufferView' in subtree.tileAvailability) {\n subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'tileAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'contentAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'childSubtreeAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n return subtree;\n}\n\n/**\n * Get explicit bitstream for subtree availability data.\n * @param subtree\n * @param name\n * @param internalBinaryBuffer\n */\nasync function getExplicitBitstream(\n subtree: Subtree,\n name: string,\n internalBinaryBuffer: ArrayBuffer,\n context: LoaderContext | undefined\n): Promise<ExplicitBitstream> {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n if (!context?.url || !context.fetch) {\n throw new Error('Url is not provided');\n }\n\n if (!context.fetch) {\n throw new Error('fetch is not provided');\n }\n\n // External bitstream loading\n if (buffer.uri) {\n const bufferUri = `${context?.baseUrl || ''}/${buffer.uri}`;\n const response = await context.fetch(bufferUri);\n const data = await response.arrayBuffer();\n // Return view of bitstream.\n return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);\n }\n // Return view of bitstream.\n return new Uint8Array(internalBinaryBuffer, bufferView.byteOffset, bufferView.byteLength);\n}\n\n/**\n * Parse buffer to return uint64 value\n * @param buffer\n * @returns 64-bit value until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Value(buffer: ArrayBuffer): number {\n const dataView = new DataView(buffer);\n const left = dataView.getUint32(0, true);\n const right = dataView.getUint32(4, true);\n // combine the two 32-bit values\n return left + 2 ** 32 * right;\n}\n"],"mappings":"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"}
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VERSION = void 0;
7
- var VERSION = typeof "4.0.0-alpha.11" !== 'undefined' ? "4.0.0-alpha.11" : 'latest';
7
+ var VERSION = typeof "4.0.0-alpha.12" !== 'undefined' ? "4.0.0-alpha.12" : 'latest';
8
8
  exports.VERSION = VERSION;
9
9
  //# sourceMappingURL=version.js.map
@@ -30,16 +30,6 @@ export default async function parse3DTilesSubtree(data, options, context) {
30
30
  }
31
31
  return subtree;
32
32
  }
33
- function resolveBufferUri(bitstreamRelativeUri, basePath) {
34
- const hasProtocol = basePath.startsWith('http');
35
- if (hasProtocol) {
36
- const resolvedUri = new URL(bitstreamRelativeUri, basePath);
37
- return decodeURI(resolvedUri.toString());
38
- }
39
- const basePathWithProtocol = "http://".concat(basePath);
40
- const resolvedUri = new URL(bitstreamRelativeUri, basePathWithProtocol);
41
- return "/".concat(resolvedUri.host).concat(resolvedUri.pathname);
42
- }
43
33
  async function getExplicitBitstream(subtree, name, internalBinaryBuffer, context) {
44
34
  const bufferViewIndex = subtree[name].bufferView;
45
35
  const bufferView = subtree.bufferViews[bufferViewIndex];
@@ -51,7 +41,7 @@ async function getExplicitBitstream(subtree, name, internalBinaryBuffer, context
51
41
  throw new Error('fetch is not provided');
52
42
  }
53
43
  if (buffer.uri) {
54
- const bufferUri = resolveBufferUri(buffer.uri, context === null || context === void 0 ? void 0 : context.url);
44
+ const bufferUri = "".concat((context === null || context === void 0 ? void 0 : context.baseUrl) || '', "/").concat(buffer.uri);
55
45
  const response = await context.fetch(bufferUri);
56
46
  const data = await response.arrayBuffer();
57
47
  return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);
@@ -1 +1 @@
1
- {"version":3,"file":"parse-3d-tile-subtree.js","names":["SUBTREE_FILE_MAGIC","SUBTREE_FILE_VERSION","parse3DTilesSubtree","data","options","context","magic","Uint32Array","slice","Error","version","jsonByteLength","parseUint64Value","stringAttribute","Uint8Array","textDecoder","TextDecoder","string","decode","subtree","JSON","parse","binaryByteLength","internalBinaryBuffer","ArrayBuffer","tileAvailability","explicitBitstream","getExplicitBitstream","contentAvailability","childSubtreeAvailability","resolveBufferUri","bitstreamRelativeUri","basePath","hasProtocol","startsWith","resolvedUri","URL","decodeURI","toString","basePathWithProtocol","concat","host","pathname","name","bufferViewIndex","bufferView","bufferViews","buffer","buffers","url","fetch","uri","bufferUri","response","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right"],"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"sourcesContent":["import type {Subtree, ExplicitBitstream} from '../../../types';\nimport type {LoaderContext, LoaderOptions} from '@loaders.gl/loader-utils';\n\nconst SUBTREE_FILE_MAGIC = 0x74627573;\nconst SUBTREE_FILE_VERSION = 1;\n\n/**\n * Parse subtree file\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format\n * @param data\n * @returns\n */\n// eslint-disable-next-line max-statements\nexport default async function parse3DTilesSubtree(\n data: ArrayBuffer,\n options: LoaderOptions | undefined,\n context: LoaderContext | undefined\n): Promise<Subtree> {\n const magic = new Uint32Array(data.slice(0, 4));\n\n if (magic[0] !== SUBTREE_FILE_MAGIC) {\n throw new Error('Wrong subtree file magic number');\n }\n\n const version = new Uint32Array(data.slice(4, 8));\n\n if (version[0] !== SUBTREE_FILE_VERSION) {\n throw new Error('Wrong subtree file verson, must be 1');\n }\n\n const jsonByteLength = parseUint64Value(data.slice(8, 16));\n const stringAttribute = new Uint8Array(data, 24, jsonByteLength);\n\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(stringAttribute);\n const subtree = JSON.parse(string);\n\n const binaryByteLength = parseUint64Value(data.slice(16, 24));\n let internalBinaryBuffer = new ArrayBuffer(0);\n\n if (binaryByteLength) {\n internalBinaryBuffer = data.slice(24 + jsonByteLength);\n }\n\n if ('bufferView' in subtree.tileAvailability) {\n subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'tileAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'contentAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'childSubtreeAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n return subtree;\n}\n\n/**\n * Get url for bitstream downloading\n * @param bitstreamRelativeUri\n * @param basePath\n * @returns\n */\nfunction resolveBufferUri(bitstreamRelativeUri: string, basePath: string): string {\n const hasProtocol = basePath.startsWith('http');\n\n if (hasProtocol) {\n const resolvedUri = new URL(bitstreamRelativeUri, basePath);\n return decodeURI(resolvedUri.toString());\n }\n\n /**\n * Adding http protocol only for new URL constructor usage.\n * It allows to resolve relative paths like ../../example with basePath.\n */\n const basePathWithProtocol = `http://${basePath}`;\n const resolvedUri = new URL(bitstreamRelativeUri, basePathWithProtocol);\n /**\n * Drop protocol and use just relative path.\n */\n return `/${resolvedUri.host}${resolvedUri.pathname}`;\n}\n\n/**\n * Get explicit bitstream for subtree availability data.\n * @param subtree\n * @param name\n * @param internalBinaryBuffer\n */\nasync function getExplicitBitstream(\n subtree: Subtree,\n name: string,\n internalBinaryBuffer: ArrayBuffer,\n context: LoaderContext | undefined\n): Promise<ExplicitBitstream> {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n if (!context?.url || !context.fetch) {\n throw new Error('Url is not provided');\n }\n\n if (!context.fetch) {\n throw new Error('fetch is not provided');\n }\n\n // External bitstream loading\n if (buffer.uri) {\n const bufferUri = resolveBufferUri(buffer.uri, context?.url);\n const response = await context.fetch(bufferUri);\n const data = await response.arrayBuffer();\n // Return view of bitstream.\n return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);\n }\n // Return view of bitstream.\n return new Uint8Array(internalBinaryBuffer, bufferView.byteOffset, bufferView.byteLength);\n}\n\n/**\n * Parse buffer to return uint64 value\n * @param buffer\n * @returns 64-bit value until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Value(buffer: ArrayBuffer): number {\n const dataView = new DataView(buffer);\n const left = dataView.getUint32(0, true);\n const right = dataView.getUint32(4, true);\n // combine the two 32-bit values\n return left + 2 ** 32 * right;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-3d-tile-subtree.js","names":["SUBTREE_FILE_MAGIC","SUBTREE_FILE_VERSION","parse3DTilesSubtree","data","options","context","magic","Uint32Array","slice","Error","version","jsonByteLength","parseUint64Value","stringAttribute","Uint8Array","textDecoder","TextDecoder","string","decode","subtree","JSON","parse","binaryByteLength","internalBinaryBuffer","ArrayBuffer","tileAvailability","explicitBitstream","getExplicitBitstream","contentAvailability","childSubtreeAvailability","name","bufferViewIndex","bufferView","bufferViews","buffer","buffers","url","fetch","uri","bufferUri","concat","baseUrl","response","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right"],"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"sourcesContent":["import type {Subtree, ExplicitBitstream} from '../../../types';\nimport type {LoaderContext, LoaderOptions} from '@loaders.gl/loader-utils';\n\nconst SUBTREE_FILE_MAGIC = 0x74627573;\nconst SUBTREE_FILE_VERSION = 1;\n\n/**\n * Parse subtree file\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format\n * @param data\n * @returns\n */\n// eslint-disable-next-line max-statements\nexport default async function parse3DTilesSubtree(\n data: ArrayBuffer,\n options: LoaderOptions | undefined,\n context: LoaderContext | undefined\n): Promise<Subtree> {\n const magic = new Uint32Array(data.slice(0, 4));\n\n if (magic[0] !== SUBTREE_FILE_MAGIC) {\n throw new Error('Wrong subtree file magic number');\n }\n\n const version = new Uint32Array(data.slice(4, 8));\n\n if (version[0] !== SUBTREE_FILE_VERSION) {\n throw new Error('Wrong subtree file verson, must be 1');\n }\n\n const jsonByteLength = parseUint64Value(data.slice(8, 16));\n const stringAttribute = new Uint8Array(data, 24, jsonByteLength);\n\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(stringAttribute);\n const subtree = JSON.parse(string);\n\n const binaryByteLength = parseUint64Value(data.slice(16, 24));\n let internalBinaryBuffer = new ArrayBuffer(0);\n\n if (binaryByteLength) {\n internalBinaryBuffer = data.slice(24 + jsonByteLength);\n }\n\n if ('bufferView' in subtree.tileAvailability) {\n subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'tileAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'contentAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'childSubtreeAvailability',\n internalBinaryBuffer,\n context\n );\n }\n\n return subtree;\n}\n\n/**\n * Get explicit bitstream for subtree availability data.\n * @param subtree\n * @param name\n * @param internalBinaryBuffer\n */\nasync function getExplicitBitstream(\n subtree: Subtree,\n name: string,\n internalBinaryBuffer: ArrayBuffer,\n context: LoaderContext | undefined\n): Promise<ExplicitBitstream> {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n if (!context?.url || !context.fetch) {\n throw new Error('Url is not provided');\n }\n\n if (!context.fetch) {\n throw new Error('fetch is not provided');\n }\n\n // External bitstream loading\n if (buffer.uri) {\n const bufferUri = `${context?.baseUrl || ''}/${buffer.uri}`;\n const response = await context.fetch(bufferUri);\n const data = await response.arrayBuffer();\n // Return view of bitstream.\n return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);\n }\n // Return view of bitstream.\n return new Uint8Array(internalBinaryBuffer, bufferView.byteOffset, bufferView.byteLength);\n}\n\n/**\n * Parse buffer to return uint64 value\n * @param buffer\n * @returns 64-bit value until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Value(buffer: ArrayBuffer): number {\n const dataView = new DataView(buffer);\n const left = dataView.getUint32(0, true);\n const right = dataView.getUint32(4, true);\n // combine the two 32-bit values\n return left + 2 ** 32 * right;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export const VERSION = typeof "4.0.0-alpha.11" !== 'undefined' ? "4.0.0-alpha.11" : 'latest';
1
+ export const VERSION = typeof "4.0.0-alpha.12" !== 'undefined' ? "4.0.0-alpha.12" : 'latest';
2
2
  //# sourceMappingURL=version.js.map
@@ -40,29 +40,6 @@ async function parse3DTilesSubtree(data, options, context) {
40
40
  return subtree;
41
41
  }
42
42
  exports.default = parse3DTilesSubtree;
43
- /**
44
- * Get url for bitstream downloading
45
- * @param bitstreamRelativeUri
46
- * @param basePath
47
- * @returns
48
- */
49
- function resolveBufferUri(bitstreamRelativeUri, basePath) {
50
- const hasProtocol = basePath.startsWith('http');
51
- if (hasProtocol) {
52
- const resolvedUri = new URL(bitstreamRelativeUri, basePath);
53
- return decodeURI(resolvedUri.toString());
54
- }
55
- /**
56
- * Adding http protocol only for new URL constructor usage.
57
- * It allows to resolve relative paths like ../../example with basePath.
58
- */
59
- const basePathWithProtocol = `http://${basePath}`;
60
- const resolvedUri = new URL(bitstreamRelativeUri, basePathWithProtocol);
61
- /**
62
- * Drop protocol and use just relative path.
63
- */
64
- return `/${resolvedUri.host}${resolvedUri.pathname}`;
65
- }
66
43
  /**
67
44
  * Get explicit bitstream for subtree availability data.
68
45
  * @param subtree
@@ -81,7 +58,7 @@ async function getExplicitBitstream(subtree, name, internalBinaryBuffer, context
81
58
  }
82
59
  // External bitstream loading
83
60
  if (buffer.uri) {
84
- const bufferUri = resolveBufferUri(buffer.uri, context?.url);
61
+ const bufferUri = `${context?.baseUrl || ''}/${buffer.uri}`;
85
62
  const response = await context.fetch(bufferUri);
86
63
  const data = await response.arrayBuffer();
87
64
  // Return view of bitstream.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/3d-tiles",
3
- "version": "4.0.0-alpha.11",
3
+ "version": "4.0.0-alpha.12",
4
4
  "description": "3D Tiles, an open standard for streaming massive heterogeneous 3D geospatial datasets.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -34,11 +34,11 @@
34
34
  "build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js"
35
35
  },
36
36
  "dependencies": {
37
- "@loaders.gl/draco": "4.0.0-alpha.11",
38
- "@loaders.gl/gltf": "4.0.0-alpha.11",
39
- "@loaders.gl/loader-utils": "4.0.0-alpha.11",
40
- "@loaders.gl/math": "4.0.0-alpha.11",
41
- "@loaders.gl/tiles": "4.0.0-alpha.11",
37
+ "@loaders.gl/draco": "4.0.0-alpha.12",
38
+ "@loaders.gl/gltf": "4.0.0-alpha.12",
39
+ "@loaders.gl/loader-utils": "4.0.0-alpha.12",
40
+ "@loaders.gl/math": "4.0.0-alpha.12",
41
+ "@loaders.gl/tiles": "4.0.0-alpha.12",
42
42
  "@math.gl/core": "^3.5.1",
43
43
  "@math.gl/geospatial": "^3.5.1",
44
44
  "long": "^5.2.1"
@@ -46,5 +46,5 @@
46
46
  "peerDependencies": {
47
47
  "@loaders.gl/core": "^4.0.0-alpha.8"
48
48
  },
49
- "gitHead": "bc680098cfea790c67b7fb95bab96e8d9288d34f"
49
+ "gitHead": "42dfc47a41e3e6089eec22a1e1d4f3387e0cb6e9"
50
50
  }
@@ -72,32 +72,6 @@ export default async function parse3DTilesSubtree(
72
72
  return subtree;
73
73
  }
74
74
 
75
- /**
76
- * Get url for bitstream downloading
77
- * @param bitstreamRelativeUri
78
- * @param basePath
79
- * @returns
80
- */
81
- function resolveBufferUri(bitstreamRelativeUri: string, basePath: string): string {
82
- const hasProtocol = basePath.startsWith('http');
83
-
84
- if (hasProtocol) {
85
- const resolvedUri = new URL(bitstreamRelativeUri, basePath);
86
- return decodeURI(resolvedUri.toString());
87
- }
88
-
89
- /**
90
- * Adding http protocol only for new URL constructor usage.
91
- * It allows to resolve relative paths like ../../example with basePath.
92
- */
93
- const basePathWithProtocol = `http://${basePath}`;
94
- const resolvedUri = new URL(bitstreamRelativeUri, basePathWithProtocol);
95
- /**
96
- * Drop protocol and use just relative path.
97
- */
98
- return `/${resolvedUri.host}${resolvedUri.pathname}`;
99
- }
100
-
101
75
  /**
102
76
  * Get explicit bitstream for subtree availability data.
103
77
  * @param subtree
@@ -124,7 +98,7 @@ async function getExplicitBitstream(
124
98
 
125
99
  // External bitstream loading
126
100
  if (buffer.uri) {
127
- const bufferUri = resolveBufferUri(buffer.uri, context?.url);
101
+ const bufferUri = `${context?.baseUrl || ''}/${buffer.uri}`;
128
102
  const response = await context.fetch(bufferUri);
129
103
  const data = await response.arrayBuffer();
130
104
  // Return view of bitstream.