@loaders.gl/3d-tiles 3.3.0-alpha.3 → 3.3.0-alpha.4

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 (42) hide show
  1. package/dist/dist.min.js +60 -33
  2. package/dist/es5/index.js.map +1 -1
  3. package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js +2 -0
  4. package/dist/es5/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
  5. package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js +47 -18
  6. package/dist/es5/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
  7. package/dist/es5/lib/parsers/parse-3d-tile-header.js +153 -69
  8. package/dist/es5/lib/parsers/parse-3d-tile-header.js.map +1 -1
  9. package/dist/es5/lib/utils/version.js +1 -1
  10. package/dist/es5/tiles-3d-loader.js +5 -26
  11. package/dist/es5/tiles-3d-loader.js.map +1 -1
  12. package/dist/esm/index.js.map +1 -1
  13. package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js +2 -0
  14. package/dist/esm/lib/parsers/helpers/parse-3d-implicit-tiles.js.map +1 -1
  15. package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js +28 -7
  16. package/dist/esm/lib/parsers/helpers/parse-3d-tile-subtree.js.map +1 -1
  17. package/dist/esm/lib/parsers/parse-3d-tile-header.js +38 -20
  18. package/dist/esm/lib/parsers/parse-3d-tile-header.js.map +1 -1
  19. package/dist/esm/lib/utils/version.js +1 -1
  20. package/dist/esm/tiles-3d-loader.js +2 -9
  21. package/dist/esm/tiles-3d-loader.js.map +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.d.ts.map +1 -1
  25. package/dist/lib/parsers/helpers/parse-3d-implicit-tiles.js +2 -13
  26. package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts +2 -1
  27. package/dist/lib/parsers/helpers/parse-3d-tile-subtree.d.ts.map +1 -1
  28. package/dist/lib/parsers/helpers/parse-3d-tile-subtree.js +36 -7
  29. package/dist/lib/parsers/parse-3d-tile-header.d.ts +5 -4
  30. package/dist/lib/parsers/parse-3d-tile-header.d.ts.map +1 -1
  31. package/dist/lib/parsers/parse-3d-tile-header.js +37 -18
  32. package/dist/tiles-3d-loader.d.ts.map +1 -1
  33. package/dist/tiles-3d-loader.js +1 -8
  34. package/dist/types.d.ts +13 -0
  35. package/dist/types.d.ts.map +1 -1
  36. package/package.json +7 -7
  37. package/src/index.ts +1 -1
  38. package/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts +2 -14
  39. package/src/lib/parsers/helpers/parse-3d-tile-subtree.ts +50 -7
  40. package/src/lib/parsers/parse-3d-tile-header.ts +59 -21
  41. package/src/tiles-3d-loader.ts +2 -16
  42. package/src/types.ts +15 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":["fetchFile","SUBTREE_FILE_MAGIC","SUBTREE_FILE_VERSION","parse3DTilesSubtree","data","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","uri","response","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right"],"mappings":"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","sourcesContent":["import type {Subtree, ExplicitBitstream} from '../../../types';\nimport {fetchFile} from '@loaders.gl/core';\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(data: ArrayBuffer): 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 );\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'contentAvailability',\n internalBinaryBuffer\n );\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'childSubtreeAvailability',\n internalBinaryBuffer\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): Promise<ExplicitBitstream> {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n // External bitstream loading\n if (buffer.uri) {\n const response = await fetchFile(buffer.uri);\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"],"file":"parse-3d-tile-subtree.js"}
1
+ {"version":3,"sources":["../../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"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","host","pathname","name","bufferViewIndex","bufferView","bufferViews","buffer","buffers","url","fetch","uri","bufferUri","response","arrayBuffer","byteOffset","byteLength","dataView","DataView","left","getUint32","right"],"mappings":"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","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 baseUri\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"],"file":"parse-3d-tile-subtree.js"}
@@ -72,9 +72,17 @@ export function normalizeTileData(tile, options) {
72
72
  tile.refine = getRefine(tile.refine);
73
73
  return tile;
74
74
  }
75
- export function normalizeTileHeaders(tileset) {
75
+ export async function normalizeTileHeaders(tileset, options) {
76
76
  const basePath = tileset.basePath;
77
- const root = normalizeTileData(tileset.root, tileset);
77
+ let root;
78
+ const rootImplicitTilingExtension = getImplicitTilingExtensionData(tileset === null || tileset === void 0 ? void 0 : tileset.root);
79
+
80
+ if (rootImplicitTilingExtension && tileset.root) {
81
+ root = await normalizeImplicitTileHeaders(tileset.root, tileset, rootImplicitTilingExtension, options);
82
+ } else {
83
+ root = normalizeTileData(tileset.root, tileset);
84
+ }
85
+
78
86
  const stack = [];
79
87
  stack.push(root);
80
88
 
@@ -82,23 +90,27 @@ export function normalizeTileHeaders(tileset) {
82
90
  const tile = stack.pop() || {};
83
91
  const children = tile.children || [];
84
92
 
85
- for (const childHeader of children) {
86
- normalizeTileData(childHeader, {
87
- basePath
88
- });
93
+ for (let childHeader of children) {
94
+ const childImplicitTilingExtension = getImplicitTilingExtensionData(childHeader);
95
+
96
+ if (childImplicitTilingExtension) {
97
+ childHeader = await normalizeImplicitTileHeaders(childHeader, tileset, childImplicitTilingExtension, options);
98
+ } else {
99
+ normalizeTileData(childHeader, {
100
+ basePath
101
+ });
102
+ }
103
+
89
104
  stack.push(childHeader);
90
105
  }
91
106
  }
92
107
 
93
108
  return root;
94
109
  }
95
- export async function normalizeImplicitTileHeaders(tileset) {
96
- if (!tileset.root) {
97
- return null;
98
- }
110
+ export async function normalizeImplicitTileHeaders(tile, tileset, implicitTilingExtension, options) {
111
+ var _tileset$root;
99
112
 
100
113
  const basePath = tileset.basePath;
101
- const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];
102
114
  const {
103
115
  subdivisionScheme,
104
116
  maximumLevel,
@@ -107,14 +119,14 @@ export async function normalizeImplicitTileHeaders(tileset) {
107
119
  uri: subtreesUriTemplate
108
120
  }
109
121
  } = implicitTilingExtension;
110
- const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);
111
- const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);
112
- const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);
113
- const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);
114
- const refine = tileset.root.refine;
115
- const rootLodMetricValue = tileset.root.geometricError;
116
- const rootBoundingVolume = tileset.root.boundingVolume;
117
- const options = {
122
+ const replacedUrlTemplate = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);
123
+ const subtreeUrl = resolveUri(replacedUrlTemplate, basePath);
124
+ const subtree = await load(subtreeUrl, Tile3DSubtreeLoader, options);
125
+ const contentUrlTemplate = resolveUri(tile.content.uri, basePath);
126
+ const refine = tileset === null || tileset === void 0 ? void 0 : (_tileset$root = tileset.root) === null || _tileset$root === void 0 ? void 0 : _tileset$root.refine;
127
+ const rootLodMetricValue = tile.geometricError;
128
+ const rootBoundingVolume = tile.boundingVolume;
129
+ const implicitOptions = {
118
130
  contentUrlTemplate,
119
131
  subtreesUriTemplate,
120
132
  subdivisionScheme,
@@ -128,7 +140,7 @@ export async function normalizeImplicitTileHeaders(tileset) {
128
140
  getTileType,
129
141
  getRefine
130
142
  };
131
- return await normalizeImplicitTileData(tileset.root, rootSubtree, options);
143
+ return await normalizeImplicitTileData(tile, subtree, implicitOptions);
132
144
  }
133
145
  export async function normalizeImplicitTileData(tile, rootSubtree, options) {
134
146
  if (!tile) {
@@ -159,4 +171,10 @@ export async function normalizeImplicitTileData(tile, rootSubtree, options) {
159
171
  tile.id = tile.contentUrl;
160
172
  return tile;
161
173
  }
174
+
175
+ function getImplicitTilingExtensionData(tile) {
176
+ var _tile$extensions;
177
+
178
+ return (tile === null || tile === void 0 ? void 0 : (_tile$extensions = tile.extensions) === null || _tile$extensions === void 0 ? void 0 : _tile$extensions['3DTILES_implicit_tiling']) || (tile === null || tile === void 0 ? void 0 : tile.implicitTiling);
179
+ }
162
180
  //# sourceMappingURL=parse-3d-tile-header.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["Tile3DSubtreeLoader","load","LOD_METRIC_TYPE","TILE_REFINEMENT","TILE_TYPE","parseImplicitTiles","replaceContentUrlTemplate","getTileType","tile","contentUrl","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","REPLACE","ADD","resolveUri","uri","basePath","urlSchemeRegex","test","url","URL","decodeURI","toString","startsWith","normalizeTileData","options","content","contentUri","id","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","stack","push","length","children","childHeader","normalizeImplicitTileHeaders","implicitTilingExtension","extensions","subdivisionScheme","maximumLevel","subtreeLevels","subtrees","subtreesUriTemplate","subtreeUrl","rootSubtreeUrl","rootSubtree","contentUrlTemplate","rootLodMetricValue","rootBoundingVolume","boundingVolume","normalizeImplicitTileData","subtree","replace"],"mappings":"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","sourcesContent":["import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nfunction resolveUri(uri, basePath) {\n // url scheme per RFC3986\n const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;\n\n if (urlSchemeRegex.test(basePath)) {\n const url = new URL(uri, `${basePath}/`);\n return decodeURI(url.toString());\n } else if (uri.startsWith('/')) {\n return uri;\n }\n\n return `${basePath}/${uri}`;\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = resolveUri(contentUri, options.basePath);\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(tileset: Tileset3D) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);\n const refine = tileset.root.refine;\n // @ts-ignore\n const rootLodMetricValue = tileset.root.geometricError;\n const rootBoundingVolume = tileset.root.boundingVolume;\n\n const options = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tileset.root, rootSubtree, options);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles({subtree: rootSubtree, options});\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n"],"file":"parse-3d-tile-header.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":["Tile3DSubtreeLoader","load","LOD_METRIC_TYPE","TILE_REFINEMENT","TILE_TYPE","parseImplicitTiles","replaceContentUrlTemplate","getTileType","tile","contentUrl","EMPTY","fileExtension","split","pop","POINTCLOUD","SCENEGRAPH","getRefine","refine","REPLACE","ADD","resolveUri","uri","basePath","urlSchemeRegex","test","url","URL","decodeURI","toString","startsWith","normalizeTileData","options","content","contentUri","id","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","geometricError","transformMatrix","transform","type","normalizeTileHeaders","tileset","root","rootImplicitTilingExtension","getImplicitTilingExtensionData","normalizeImplicitTileHeaders","stack","push","length","children","childHeader","childImplicitTilingExtension","implicitTilingExtension","subdivisionScheme","maximumLevel","subtreeLevels","subtrees","subtreesUriTemplate","replacedUrlTemplate","subtreeUrl","subtree","contentUrlTemplate","rootLodMetricValue","rootBoundingVolume","boundingVolume","implicitOptions","normalizeImplicitTileData","rootSubtree","replace","extensions","implicitTiling"],"mappings":"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","sourcesContent":["import type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE, Tile3D} from '@loaders.gl/tiles';\nimport {ImplicitTilingExtension, Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nfunction resolveUri(uri, basePath) {\n // url scheme per RFC3986\n const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;\n\n if (urlSchemeRegex.test(basePath)) {\n const url = new URL(uri, `${basePath}/`);\n return decodeURI(url.toString());\n } else if (uri.startsWith('/')) {\n return uri;\n }\n\n return `${basePath}/${uri}`;\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = resolveUri(contentUri, options.basePath);\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport async function normalizeTileHeaders(\n tileset: Tileset3D,\n options: LoaderOptions\n): Promise<Tileset3D> {\n const basePath = tileset.basePath;\n let root: Tileset3D;\n\n const rootImplicitTilingExtension = getImplicitTilingExtensionData(tileset?.root);\n if (rootImplicitTilingExtension && tileset.root) {\n root = await normalizeImplicitTileHeaders(\n tileset.root,\n tileset,\n rootImplicitTilingExtension,\n options\n );\n } else {\n root = normalizeTileData(tileset.root, tileset);\n }\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (let childHeader of children) {\n const childImplicitTilingExtension = getImplicitTilingExtensionData(childHeader);\n if (childImplicitTilingExtension) {\n childHeader = await normalizeImplicitTileHeaders(\n childHeader,\n tileset,\n childImplicitTilingExtension,\n options\n );\n } else {\n normalizeTileData(childHeader, {basePath});\n }\n\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(\n tile: Tile3D,\n tileset: Tileset3D,\n implicitTilingExtension: ImplicitTilingExtension,\n options: LoaderOptions\n) {\n const basePath = tileset.basePath;\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const replacedUrlTemplate = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const subtreeUrl = resolveUri(replacedUrlTemplate, basePath);\n const subtree = await load(subtreeUrl, Tile3DSubtreeLoader, options);\n const contentUrlTemplate = resolveUri(tile.content.uri, basePath);\n const refine = tileset?.root?.refine;\n // @ts-ignore\n const rootLodMetricValue = tile.geometricError;\n const rootBoundingVolume = tile.boundingVolume;\n\n const implicitOptions = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tile, subtree, implicitOptions);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles({subtree: rootSubtree, options});\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n\n/**\n * Implicit Tiling data can be in 3DTILES_implicit_tiling for 3DTiles v.Next or directly in implicitTiling object for 3DTiles v1.1.\n * Spec 3DTiles v.Next - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling\n * Spec 3DTiles v.1.1 - https://github.com/CesiumGS/3d-tiles/tree/draft-1.1/specification/ImplicitTiling\n * @param tile\n * @returns\n */\nfunction getImplicitTilingExtensionData(tile: Tile3D | null): ImplicitTilingExtension {\n return tile?.extensions?.['3DTILES_implicit_tiling'] || tile?.implicitTiling;\n}\n"],"file":"parse-3d-tile-header.js"}
@@ -1,2 +1,2 @@
1
- export const VERSION = typeof "3.3.0-alpha.3" !== 'undefined' ? "3.3.0-alpha.3" : 'latest';
1
+ export const VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'latest';
2
2
  //# sourceMappingURL=version.js.map
@@ -2,8 +2,7 @@ import { path } from '@loaders.gl/loader-utils';
2
2
  import { TILESET_TYPE, LOD_METRIC_TYPE } from '@loaders.gl/tiles';
3
3
  import { VERSION } from './lib/utils/version';
4
4
  import { parse3DTile } from './lib/parsers/parse-3d-tile';
5
- import { normalizeTileHeaders, normalizeImplicitTileHeaders } from './lib/parsers/parse-3d-tile-header';
6
- const IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';
5
+ import { normalizeTileHeaders } from './lib/parsers/parse-3d-tile-header';
7
6
  export const Tiles3DLoader = {
8
7
  id: '3d-tiles',
9
8
  name: '3D Tiles',
@@ -45,7 +44,7 @@ async function parseTileset(data, options, context) {
45
44
  tilesetJson.loader = options.loader || Tiles3DLoader;
46
45
  tilesetJson.url = context.url;
47
46
  tilesetJson.basePath = getBaseUri(tilesetJson);
48
- tilesetJson.root = hasImplicitTilingExtension(tilesetJson) ? await normalizeImplicitTileHeaders(tilesetJson) : normalizeTileHeaders(tilesetJson);
47
+ tilesetJson.root = await normalizeTileHeaders(tilesetJson, options);
49
48
  tilesetJson.type = TILESET_TYPE.TILES3D;
50
49
  tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;
51
50
  tilesetJson.lodMetricValue = ((_tilesetJson$root = tilesetJson.root) === null || _tilesetJson$root === void 0 ? void 0 : _tilesetJson$root.lodMetricValue) || 0;
@@ -70,10 +69,4 @@ async function parse(data, options, context) {
70
69
 
71
70
  return data;
72
71
  }
73
-
74
- function hasImplicitTilingExtension(tilesetJson) {
75
- var _tilesetJson$extensio, _tilesetJson$extensio2;
76
-
77
- return (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio = tilesetJson.extensionsRequired) === null || _tilesetJson$extensio === void 0 ? void 0 : _tilesetJson$extensio.includes(IMPLICIT_TILING_EXTENSION_NAME)) && (tilesetJson === null || tilesetJson === void 0 ? void 0 : (_tilesetJson$extensio2 = tilesetJson.extensionsUsed) === null || _tilesetJson$extensio2 === void 0 ? void 0 : _tilesetJson$extensio2.includes(IMPLICIT_TILING_EXTENSION_NAME));
78
- }
79
72
  //# sourceMappingURL=tiles-3d-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tiles-3d-loader.ts"],"names":["path","TILESET_TYPE","LOD_METRIC_TYPE","VERSION","parse3DTile","normalizeTileHeaders","normalizeImplicitTileHeaders","IMPLICIT_TILING_EXTENSION_NAME","Tiles3DLoader","id","name","module","version","extensions","mimeTypes","tests","parse","options","loadGLTF","decodeQuantizedPositions","isTileset","assetGltfUpAxis","getBaseUri","tileset","dirname","url","parseTile","arrayBuffer","context","tile","content","featureIds","byteOffset","parseTileset","data","tilesetJson","JSON","TextDecoder","decode","loader","basePath","root","hasImplicitTilingExtension","type","TILES3D","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","loaderOptions","indexOf","extensionsRequired","includes","extensionsUsed"],"mappings":"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","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {path} from '@loaders.gl/loader-utils';\nimport {TILESET_TYPE, LOD_METRIC_TYPE} from '@loaders.gl/tiles';\nimport {VERSION} from './lib/utils/version';\nimport {parse3DTile} from './lib/parsers/parse-3d-tile';\nimport {\n normalizeTileHeaders,\n normalizeImplicitTileHeaders\n} from './lib/parsers/parse-3d-tile-header';\n\nconst IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';\n\n/**\n * Loader for 3D Tiles\n */\nexport const Tiles3DLoader: LoaderWithParser = {\n id: '3d-tiles',\n name: '3D Tiles',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n mimeTypes: ['application/octet-stream'],\n tests: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n parse,\n options: {\n '3d-tiles': {\n loadGLTF: true,\n decodeQuantizedPositions: false,\n isTileset: 'auto',\n assetGltfUpAxis: null\n }\n }\n};\n\nfunction getBaseUri(tileset) {\n return path.dirname(tileset.url);\n}\n\nasync function parseTile(arrayBuffer, options, context) {\n const tile = {\n content: {\n featureIds: null\n }\n };\n const byteOffset = 0;\n await parse3DTile(arrayBuffer, byteOffset, options, context, tile.content);\n return tile.content;\n}\n\nasync function parseTileset(data, options, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n // eslint-disable-next-line no-use-before-define\n tilesetJson.loader = options.loader || Tiles3DLoader;\n tilesetJson.url = context.url;\n // base path that non-absolute paths in tileset are relative to.\n tilesetJson.basePath = getBaseUri(tilesetJson);\n tilesetJson.root = hasImplicitTilingExtension(tilesetJson)\n ? await normalizeImplicitTileHeaders(tilesetJson)\n : normalizeTileHeaders(tilesetJson);\n\n tilesetJson.type = TILESET_TYPE.TILES3D;\n\n tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tilesetJson.lodMetricValue = tilesetJson.root?.lodMetricValue || 0;\n\n return tilesetJson;\n}\n\nasync function parse(data, options, context) {\n // auto detect file type\n const loaderOptions = options['3d-tiles'] || {};\n let isTileset;\n if (loaderOptions.isTileset === 'auto') {\n isTileset = context.url && context.url.indexOf('.json') !== -1;\n } else {\n isTileset = loaderOptions.isTileset;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else {\n data = await parseTile(data, options, context);\n }\n\n return data;\n}\n\nfunction hasImplicitTilingExtension(tilesetJson) {\n return (\n tilesetJson?.extensionsRequired?.includes(IMPLICIT_TILING_EXTENSION_NAME) &&\n tilesetJson?.extensionsUsed?.includes(IMPLICIT_TILING_EXTENSION_NAME)\n );\n}\n"],"file":"tiles-3d-loader.js"}
1
+ {"version":3,"sources":["../../src/tiles-3d-loader.ts"],"names":["path","TILESET_TYPE","LOD_METRIC_TYPE","VERSION","parse3DTile","normalizeTileHeaders","Tiles3DLoader","id","name","module","version","extensions","mimeTypes","tests","parse","options","loadGLTF","decodeQuantizedPositions","isTileset","assetGltfUpAxis","getBaseUri","tileset","dirname","url","parseTile","arrayBuffer","context","tile","content","featureIds","byteOffset","parseTileset","data","tilesetJson","JSON","TextDecoder","decode","loader","basePath","root","type","TILES3D","lodMetricType","GEOMETRIC_ERROR","lodMetricValue","loaderOptions","indexOf"],"mappings":"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","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {path} from '@loaders.gl/loader-utils';\nimport {TILESET_TYPE, LOD_METRIC_TYPE} from '@loaders.gl/tiles';\nimport {VERSION} from './lib/utils/version';\nimport {parse3DTile} from './lib/parsers/parse-3d-tile';\nimport {normalizeTileHeaders} from './lib/parsers/parse-3d-tile-header';\n\n/**\n * Loader for 3D Tiles\n */\nexport const Tiles3DLoader: LoaderWithParser = {\n id: '3d-tiles',\n name: '3D Tiles',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n mimeTypes: ['application/octet-stream'],\n tests: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n parse,\n options: {\n '3d-tiles': {\n loadGLTF: true,\n decodeQuantizedPositions: false,\n isTileset: 'auto',\n assetGltfUpAxis: null\n }\n }\n};\n\nfunction getBaseUri(tileset) {\n return path.dirname(tileset.url);\n}\n\nasync function parseTile(arrayBuffer, options, context) {\n const tile = {\n content: {\n featureIds: null\n }\n };\n const byteOffset = 0;\n await parse3DTile(arrayBuffer, byteOffset, options, context, tile.content);\n return tile.content;\n}\n\nasync function parseTileset(data, options, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n // eslint-disable-next-line no-use-before-define\n tilesetJson.loader = options.loader || Tiles3DLoader;\n tilesetJson.url = context.url;\n // base path that non-absolute paths in tileset are relative to.\n tilesetJson.basePath = getBaseUri(tilesetJson);\n tilesetJson.root = await normalizeTileHeaders(tilesetJson, options);\n\n tilesetJson.type = TILESET_TYPE.TILES3D;\n\n tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tilesetJson.lodMetricValue = tilesetJson.root?.lodMetricValue || 0;\n\n return tilesetJson;\n}\n\nasync function parse(data, options, context) {\n // auto detect file type\n const loaderOptions = options['3d-tiles'] || {};\n let isTileset;\n if (loaderOptions.isTileset === 'auto') {\n isTileset = context.url && context.url.indexOf('.json') !== -1;\n } else {\n isTileset = loaderOptions.isTileset;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else {\n data = await parseTile(data, options, context);\n }\n\n return data;\n}\n"],"file":"tiles-3d-loader.js"}
package/dist/index.d.ts CHANGED
@@ -6,5 +6,5 @@ export { default as Tile3DFeatureTable } from './lib/classes/tile-3d-feature-tab
6
6
  export { default as Tile3DBatchTable } from './lib/classes/tile-3d-batch-table';
7
7
  export { TILE3D_TYPE } from './lib/constants';
8
8
  export { getIonTilesetMetadata as _getIonTilesetMetadata } from './lib/ion/ion';
9
- export type { FeatureTableJson, B3DMContent, Node3D } from './types';
9
+ export type { FeatureTableJson, B3DMContent, Node3D, ImplicitTilingExtension } from './types';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,mCAAmC,CAAC;AAG9E,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,qBAAqB,IAAI,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAC9E,YAAY,EAAC,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,mCAAmC,CAAC;AAG9E,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,qBAAqB,IAAI,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAC9E,YAAY,EAAC,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,uBAAuB,EAAC,MAAM,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-3d-implicit-tiles.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-implicit-tiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAY1E;;;;;;;;;;;GAWG;AAEH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC;IACb,UAAU,CAAC,EAAE;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;CACpF;;;;GA+HA;AA8GD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,MAAM,CAGR"}
1
+ {"version":3,"file":"parse-3d-implicit-tiles.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-implicit-tiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAY1E;;;;;;;;;;;GAWG;AAEH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC;IACb,UAAU,CAAC,EAAE;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;CACpF;;;;GAsHA;AA2GD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,MAAM,CAGR"}
@@ -49,14 +49,6 @@ async function parseImplicitTiles(params) {
49
49
  let childTileX = concatBits(parentData.x, childX);
50
50
  let childTileY = concatBits(parentData.y, childY);
51
51
  let childTileZ = concatBits(parentData.z, childZ);
52
- // TODO Remove after real implicit tileset will be tested.
53
- // Degug data
54
- // tile.level = level + globalData.level;
55
- // tile.x = concatBits(globalData.x, childTileX);
56
- // tile.y = concatBits(globalData.y, childTileY);
57
- // tile.z = concatBits(globalData.z, childTileZ);
58
- // tile.mortonIndex = childTileMortonIndex;
59
- // End of debug data
60
52
  let isChildSubtreeAvailable = false;
61
53
  if (level + 1 > subtreeLevels) {
62
54
  isChildSubtreeAvailable = getAvailabilityResult(subtree.childSubtreeAvailability, childTileMortonIndex);
@@ -143,12 +135,9 @@ function formatTileData(tile, level, childCoordinates, options) {
143
135
  type: getTileType(tile),
144
136
  lodMetricType,
145
137
  lodMetricValue,
138
+ geometricError: lodMetricValue,
139
+ transform: tile.transform,
146
140
  boundingVolume
147
- // Temp debug values. Remove when real implicit tileset will be tested.
148
- // x: tile.x,
149
- // y: tile.y,
150
- // z: tile.z,
151
- // level: tile.level
152
141
  };
153
142
  }
154
143
  /**
@@ -1,9 +1,10 @@
1
1
  import type { Subtree } from '../../../types';
2
+ import type { LoaderContext, LoaderOptions } from '@loaders.gl/loader-utils';
2
3
  /**
3
4
  * Parse subtree file
4
5
  * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format
5
6
  * @param data
6
7
  * @returns
7
8
  */
8
- export default function parse3DTilesSubtree(data: ArrayBuffer): Promise<Subtree>;
9
+ export default function parse3DTilesSubtree(data: ArrayBuffer, options: LoaderOptions | undefined, context: LoaderContext | undefined): Promise<Subtree>;
9
10
  //# sourceMappingURL=parse-3d-tile-subtree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-3d-tile-subtree.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAoB,MAAM,gBAAgB,CAAC;AAM/D;;;;;GAKG;AAEH,wBAA8B,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAoDrF"}
1
+ {"version":3,"file":"parse-3d-tile-subtree.d.ts","sourceRoot":"","sources":["../../../../src/lib/parsers/helpers/parse-3d-tile-subtree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAoB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAC,aAAa,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAK3E;;;;;GAKG;AAEH,wBAA8B,mBAAmB,CAC/C,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,OAAO,EAAE,aAAa,GAAG,SAAS,GACjC,OAAO,CAAC,OAAO,CAAC,CAuDlB"}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@loaders.gl/core");
4
3
  const SUBTREE_FILE_MAGIC = 0x74627573;
5
4
  const SUBTREE_FILE_VERSION = 1;
6
5
  /**
@@ -10,7 +9,7 @@ const SUBTREE_FILE_VERSION = 1;
10
9
  * @returns
11
10
  */
12
11
  // eslint-disable-next-line max-statements
13
- async function parse3DTilesSubtree(data) {
12
+ async function parse3DTilesSubtree(data, options, context) {
14
13
  const magic = new Uint32Array(data.slice(0, 4));
15
14
  if (magic[0] !== SUBTREE_FILE_MAGIC) {
16
15
  throw new Error('Wrong subtree file magic number');
@@ -30,30 +29,60 @@ async function parse3DTilesSubtree(data) {
30
29
  internalBinaryBuffer = data.slice(24 + jsonByteLength);
31
30
  }
32
31
  if ('bufferView' in subtree.tileAvailability) {
33
- subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'tileAvailability', internalBinaryBuffer);
32
+ subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'tileAvailability', internalBinaryBuffer, context);
34
33
  }
35
34
  if ('bufferView' in subtree.contentAvailability) {
36
- subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'contentAvailability', internalBinaryBuffer);
35
+ subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'contentAvailability', internalBinaryBuffer, context);
37
36
  }
38
37
  if ('bufferView' in subtree.childSubtreeAvailability) {
39
- subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'childSubtreeAvailability', internalBinaryBuffer);
38
+ subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(subtree, 'childSubtreeAvailability', internalBinaryBuffer, context);
40
39
  }
41
40
  return subtree;
42
41
  }
43
42
  exports.default = parse3DTilesSubtree;
43
+ /**
44
+ * Get url for bitstream downloading
45
+ * @param bitstreamRelativeUri
46
+ * @param baseUri
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
+ }
44
66
  /**
45
67
  * Get explicit bitstream for subtree availability data.
46
68
  * @param subtree
47
69
  * @param name
48
70
  * @param internalBinaryBuffer
49
71
  */
50
- async function getExplicitBitstream(subtree, name, internalBinaryBuffer) {
72
+ async function getExplicitBitstream(subtree, name, internalBinaryBuffer, context) {
51
73
  const bufferViewIndex = subtree[name].bufferView;
52
74
  const bufferView = subtree.bufferViews[bufferViewIndex];
53
75
  const buffer = subtree.buffers[bufferView.buffer];
76
+ if (!context?.url || !context.fetch) {
77
+ throw new Error('Url is not provided');
78
+ }
79
+ if (!context.fetch) {
80
+ throw new Error('fetch is not provided');
81
+ }
54
82
  // External bitstream loading
55
83
  if (buffer.uri) {
56
- const response = await (0, core_1.fetchFile)(buffer.uri);
84
+ const bufferUri = resolveBufferUri(buffer.uri, context?.url);
85
+ const response = await context.fetch(bufferUri);
57
86
  const data = await response.arrayBuffer();
58
87
  // Return view of bitstream.
59
88
  return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);
@@ -1,13 +1,14 @@
1
- import { Tileset3D } from '@loaders.gl/tiles';
2
- import { Subtree } from '../../types';
1
+ import type { LoaderOptions } from '@loaders.gl/loader-utils';
2
+ import { Tileset3D, Tile3D } from '@loaders.gl/tiles';
3
+ import { ImplicitTilingExtension, Subtree } from '../../types';
3
4
  export declare function normalizeTileData(tile: any, options: any): any;
4
- export declare function normalizeTileHeaders(tileset: any): any;
5
+ export declare function normalizeTileHeaders(tileset: Tileset3D, options: LoaderOptions): Promise<Tileset3D>;
5
6
  /**
6
7
  * Do normalisation of implicit tile headers
7
8
  * TODO Check if Tile3D class can be a return type here.
8
9
  * @param tileset
9
10
  */
10
- export declare function normalizeImplicitTileHeaders(tileset: Tileset3D): Promise<any>;
11
+ export declare function normalizeImplicitTileHeaders(tile: Tile3D, tileset: Tileset3D, implicitTilingExtension: ImplicitTilingExtension, options: LoaderOptions): Promise<any>;
11
12
  /**
12
13
  * Do implicit data normalisation to create hierarchical tile structure
13
14
  * @param tile
@@ -1 +1 @@
1
- {"version":3,"file":"parse-3d-tile-header.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAA8C,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAC,OAAO,EAAC,MAAM,aAAa,CAAC;AAkDpC,wBAAgB,iBAAiB,CAAC,IAAI,KAAA,EAAE,OAAO,KAAA,OAgB9C;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,KAAA,OAiB3C;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,SAAS,gBAsCpE;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,KAAA,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,gBAsBvF"}
1
+ {"version":3,"file":"parse-3d-tile-header.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-3d-tile-header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAC,SAAS,EAA+C,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAC,uBAAuB,EAAE,OAAO,EAAC,MAAM,aAAa,CAAC;AAkD7D,wBAAgB,iBAAiB,CAAC,IAAI,KAAA,EAAE,OAAO,KAAA,OAgB9C;AAGD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,CAAC,CAwCpB;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,EAClB,uBAAuB,EAAE,uBAAuB,EAChD,OAAO,EAAE,aAAa,gBAkCvB;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,KAAA,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,gBAsBvF"}
@@ -65,16 +65,29 @@ function normalizeTileData(tile, options) {
65
65
  }
66
66
  exports.normalizeTileData = normalizeTileData;
67
67
  // normalize tile headers
68
- function normalizeTileHeaders(tileset) {
68
+ async function normalizeTileHeaders(tileset, options) {
69
69
  const basePath = tileset.basePath;
70
- const root = normalizeTileData(tileset.root, tileset);
70
+ let root;
71
+ const rootImplicitTilingExtension = getImplicitTilingExtensionData(tileset?.root);
72
+ if (rootImplicitTilingExtension && tileset.root) {
73
+ root = await normalizeImplicitTileHeaders(tileset.root, tileset, rootImplicitTilingExtension, options);
74
+ }
75
+ else {
76
+ root = normalizeTileData(tileset.root, tileset);
77
+ }
71
78
  const stack = [];
72
79
  stack.push(root);
73
80
  while (stack.length > 0) {
74
81
  const tile = stack.pop() || {};
75
82
  const children = tile.children || [];
76
- for (const childHeader of children) {
77
- normalizeTileData(childHeader, { basePath });
83
+ for (let childHeader of children) {
84
+ const childImplicitTilingExtension = getImplicitTilingExtensionData(childHeader);
85
+ if (childImplicitTilingExtension) {
86
+ childHeader = await normalizeImplicitTileHeaders(childHeader, tileset, childImplicitTilingExtension, options);
87
+ }
88
+ else {
89
+ normalizeTileData(childHeader, { basePath });
90
+ }
78
91
  stack.push(childHeader);
79
92
  }
80
93
  }
@@ -86,22 +99,18 @@ exports.normalizeTileHeaders = normalizeTileHeaders;
86
99
  * TODO Check if Tile3D class can be a return type here.
87
100
  * @param tileset
88
101
  */
89
- async function normalizeImplicitTileHeaders(tileset) {
90
- if (!tileset.root) {
91
- return null;
92
- }
102
+ async function normalizeImplicitTileHeaders(tile, tileset, implicitTilingExtension, options) {
93
103
  const basePath = tileset.basePath;
94
- const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];
95
104
  const { subdivisionScheme, maximumLevel, subtreeLevels, subtrees: { uri: subtreesUriTemplate } } = implicitTilingExtension;
96
- const subtreeUrl = (0, parse_3d_implicit_tiles_1.replaceContentUrlTemplate)(subtreesUriTemplate, 0, 0, 0, 0);
97
- const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);
98
- const rootSubtree = await (0, core_1.load)(rootSubtreeUrl, tile_3d_subtree_loader_1.Tile3DSubtreeLoader);
99
- const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);
100
- const refine = tileset.root.refine;
105
+ const replacedUrlTemplate = (0, parse_3d_implicit_tiles_1.replaceContentUrlTemplate)(subtreesUriTemplate, 0, 0, 0, 0);
106
+ const subtreeUrl = resolveUri(replacedUrlTemplate, basePath);
107
+ const subtree = await (0, core_1.load)(subtreeUrl, tile_3d_subtree_loader_1.Tile3DSubtreeLoader, options);
108
+ const contentUrlTemplate = resolveUri(tile.content.uri, basePath);
109
+ const refine = tileset?.root?.refine;
101
110
  // @ts-ignore
102
- const rootLodMetricValue = tileset.root.geometricError;
103
- const rootBoundingVolume = tileset.root.boundingVolume;
104
- const options = {
111
+ const rootLodMetricValue = tile.geometricError;
112
+ const rootBoundingVolume = tile.boundingVolume;
113
+ const implicitOptions = {
105
114
  contentUrlTemplate,
106
115
  subtreesUriTemplate,
107
116
  subdivisionScheme,
@@ -115,7 +124,7 @@ async function normalizeImplicitTileHeaders(tileset) {
115
124
  getTileType,
116
125
  getRefine
117
126
  };
118
- return await normalizeImplicitTileData(tileset.root, rootSubtree, options);
127
+ return await normalizeImplicitTileData(tile, subtree, implicitOptions);
119
128
  }
120
129
  exports.normalizeImplicitTileHeaders = normalizeImplicitTileHeaders;
121
130
  /**
@@ -144,3 +153,13 @@ async function normalizeImplicitTileData(tile, rootSubtree, options) {
144
153
  return tile;
145
154
  }
146
155
  exports.normalizeImplicitTileData = normalizeImplicitTileData;
156
+ /**
157
+ * Implicit Tiling data can be in 3DTILES_implicit_tiling for 3DTiles v.Next or directly in implicitTiling object for 3DTiles v1.1.
158
+ * Spec 3DTiles v.Next - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling
159
+ * Spec 3DTiles v.1.1 - https://github.com/CesiumGS/3d-tiles/tree/draft-1.1/specification/ImplicitTiling
160
+ * @param tile
161
+ * @returns
162
+ */
163
+ function getImplicitTilingExtensionData(tile) {
164
+ return tile?.extensions?.['3DTILES_implicit_tiling'] || tile?.implicitTiling;
165
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"tiles-3d-loader.d.ts","sourceRoot":"","sources":["../src/tiles-3d-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAY/D;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,gBAiB3B,CAAC"}
1
+ {"version":3,"file":"tiles-3d-loader.d.ts","sourceRoot":"","sources":["../src/tiles-3d-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAO/D;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,gBAiB3B,CAAC"}
@@ -6,7 +6,6 @@ const tiles_1 = require("@loaders.gl/tiles");
6
6
  const version_1 = require("./lib/utils/version");
7
7
  const parse_3d_tile_1 = require("./lib/parsers/parse-3d-tile");
8
8
  const parse_3d_tile_header_1 = require("./lib/parsers/parse-3d-tile-header");
9
- const IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';
10
9
  /**
11
10
  * Loader for 3D Tiles
12
11
  */
@@ -48,9 +47,7 @@ async function parseTileset(data, options, context) {
48
47
  tilesetJson.url = context.url;
49
48
  // base path that non-absolute paths in tileset are relative to.
50
49
  tilesetJson.basePath = getBaseUri(tilesetJson);
51
- tilesetJson.root = hasImplicitTilingExtension(tilesetJson)
52
- ? await (0, parse_3d_tile_header_1.normalizeImplicitTileHeaders)(tilesetJson)
53
- : (0, parse_3d_tile_header_1.normalizeTileHeaders)(tilesetJson);
50
+ tilesetJson.root = await (0, parse_3d_tile_header_1.normalizeTileHeaders)(tilesetJson, options);
54
51
  tilesetJson.type = tiles_1.TILESET_TYPE.TILES3D;
55
52
  tilesetJson.lodMetricType = tiles_1.LOD_METRIC_TYPE.GEOMETRIC_ERROR;
56
53
  tilesetJson.lodMetricValue = tilesetJson.root?.lodMetricValue || 0;
@@ -74,7 +71,3 @@ async function parse(data, options, context) {
74
71
  }
75
72
  return data;
76
73
  }
77
- function hasImplicitTilingExtension(tilesetJson) {
78
- return (tilesetJson?.extensionsRequired?.includes(IMPLICIT_TILING_EXTENSION_NAME) &&
79
- tilesetJson?.extensionsUsed?.includes(IMPLICIT_TILING_EXTENSION_NAME));
80
- }
package/dist/types.d.ts CHANGED
@@ -76,5 +76,18 @@ declare type BufferView = {
76
76
  byteOffset: number;
77
77
  byteLength: number;
78
78
  };
79
+ /**
80
+ * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling
81
+ */
82
+ export declare type ImplicitTilingExtension = {
83
+ subdivisionScheme: 'QUADTREE' | 'OCTREE';
84
+ maximumLevel?: number;
85
+ availableLevels: number;
86
+ subtreeLevels: number;
87
+ subtrees: SubtreeUri;
88
+ };
89
+ declare type SubtreeUri = {
90
+ uri: string;
91
+ };
79
92
  export {};
80
93
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAE/C,oBAAY,gBAAgB,GAAG;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;CACtB,CAAC;AAEF,oBAAY,WAAW,GAAG;IACxB,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,uBAAuB,EAAE,OAAO,CAAC;IACjC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,EAAE,MAAM,CAAC;IACnC,wBAAwB,EAAE,MAAM,CAAC;IACjC,4BAA4B,EAAE,MAAM,CAAC;IACrC,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,oBAAY,MAAM,GAAG;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC3B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,oBAAY,OAAO,GAAG;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,mBAAmB,EAAE,YAAY,CAAC;IAClC,wBAAwB,EAAE,YAAY,CAAC;CACxC,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,CAAC;AAEF,oBAAY,iBAAiB,GAAG,UAAU,CAAC;AAE3C;;GAEG;AACH,oBAAY,iBAAiB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEtD,aAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,aAAK,UAAU,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}