{
  "version": 3,
  "sources": ["../src/index.ts", "../src/lib/parse-quantized-mesh.ts", "../src/lib/decode-quantized-mesh.ts", "../src/lib/helpers/skirt.ts", "../src/lib/parse-terrain.ts", "../src/lib/delatin/index.ts", "../src/lib/utils/version.ts", "../src/terrain-loader.ts", "../src/quantized-mesh-loader.ts"],
  "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderContext, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseFromContext} from '@loaders.gl/loader-utils';\nimport {parseQuantizedMesh} from './lib/parse-quantized-mesh';\nimport {TerrainOptions, makeTerrainMeshFromImage} from './lib/parse-terrain';\n\nimport {TerrainLoader as TerrainWorkerLoader, TerrainLoaderOptions} from './terrain-loader';\nimport {\n  QuantizedMeshLoader as QuantizedMeshWorkerLoader,\n  QuantizedMeshLoaderOptions\n} from './quantized-mesh-loader';\n\n// TerrainLoader\n\nexport {TerrainWorkerLoader};\n\nexport const TerrainLoader = {\n  ...TerrainWorkerLoader,\n  parse: parseTerrain\n} as const satisfies LoaderWithParser<any, never, TerrainLoaderOptions>;\n\nexport async function parseTerrain(\n  arrayBuffer: ArrayBuffer,\n  options?: TerrainLoaderOptions,\n  context?: LoaderContext\n) {\n  const loadImageOptions = {\n    ...options,\n    core: {...options?.core, mimeType: 'application/x.image'},\n    image: {...options?.image, type: 'data'}\n  };\n  const image = await parseFromContext(arrayBuffer, [], loadImageOptions, context!);\n  // Extend function to support additional mesh generation options (square grid or delatin)\n  const terrainOptions = {...TerrainLoader.options.terrain, ...options?.terrain} as TerrainOptions;\n  // @ts-expect-error TODO - fix typing\n  return makeTerrainMeshFromImage(image, terrainOptions);\n}\n\n// QuantizedMeshLoader\n\nexport {QuantizedMeshWorkerLoader};\n\n/**\n * Loader for quantized meshes\n */\nexport const QuantizedMeshLoader = {\n  ...QuantizedMeshWorkerLoader,\n  parseSync: (arrayBuffer, options) => parseQuantizedMesh(arrayBuffer, options?.['quantized-mesh']),\n  parse: async (arrayBuffer, options) =>\n    parseQuantizedMesh(arrayBuffer, options?.['quantized-mesh'])\n} as const satisfies LoaderWithParser<any, never, QuantizedMeshLoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Mesh} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema-utils';\nimport decode, {DECODING_STEPS} from './decode-quantized-mesh';\nimport {addSkirt} from './helpers/skirt';\n\nexport type ParseQuantizedMeshOptions = {\n  bounds?: [number, number, number, number];\n  skirtHeight?: number | null;\n};\n\nexport function parseQuantizedMesh(\n  arrayBuffer: ArrayBuffer,\n  options: ParseQuantizedMeshOptions = {}\n): Mesh {\n  const {bounds} = options;\n  // Don't parse edge indices or format extensions\n  const {\n    header,\n    vertexData,\n    triangleIndices: originalTriangleIndices,\n    westIndices,\n    northIndices,\n    eastIndices,\n    southIndices\n  } = decode(arrayBuffer, DECODING_STEPS.triangleIndices);\n  let triangleIndices = originalTriangleIndices;\n  let attributes = getMeshAttributes(vertexData, header, bounds);\n\n  // Compute bounding box before adding skirt so that z values are not skewed\n  // TODO: Find bounding box from header, instead of doing extra pass over\n  // vertices.\n  const boundingBox = getMeshBoundingBox(attributes);\n\n  if (options?.skirtHeight) {\n    const {attributes: newAttributes, triangles: newTriangles} = addSkirt(\n      attributes,\n      triangleIndices,\n      options.skirtHeight,\n      {\n        westIndices,\n        northIndices,\n        eastIndices,\n        southIndices\n      }\n    );\n    attributes = newAttributes;\n    triangleIndices = newTriangles;\n  }\n\n  return {\n    // Data return by this loader implementation\n    loaderData: {\n      header: {}\n    },\n    header: {\n      // @ts-ignore\n      vertexCount: triangleIndices.length,\n      boundingBox\n    },\n    // TODO\n    schema: undefined!,\n    topology: 'triangle-list',\n    mode: 4, // TRIANGLES\n    indices: {value: triangleIndices, size: 1},\n    attributes\n  };\n}\n\nfunction getMeshAttributes(vertexData, header, bounds) {\n  const {minHeight, maxHeight} = header;\n  const [minX, minY, maxX, maxY] = bounds || [0, 0, 1, 1];\n  const xScale = maxX - minX;\n  const yScale = maxY - minY;\n  const zScale = maxHeight - minHeight;\n\n  const nCoords = vertexData.length / 3;\n  // vec3. x, y defined by bounds, z in meters\n  const positions = new Float32Array(nCoords * 3);\n\n  // vec2. 1 to 1 relationship with position. represents the uv on the texture image. 0,0 to 1,1.\n  const texCoords = new Float32Array(nCoords * 2);\n\n  // Data is not interleaved; all u, then all v, then all heights\n  for (let i = 0; i < nCoords; i++) {\n    const x = vertexData[i] / 32767;\n    const y = vertexData[i + nCoords] / 32767;\n    const z = vertexData[i + nCoords * 2] / 32767;\n\n    positions[3 * i + 0] = x * xScale + minX;\n    positions[3 * i + 1] = y * yScale + minY;\n    positions[3 * i + 2] = z * zScale + minHeight;\n\n    texCoords[2 * i + 0] = x;\n    texCoords[2 * i + 1] = y;\n  }\n\n  return {\n    POSITION: {value: positions, size: 3},\n    TEXCOORD_0: {value: texCoords, size: 2}\n    // TODO: Parse normals if they exist in the file\n    // NORMAL: {}, - optional, but creates the high poly look with lighting\n  };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// Copyright (C) 2018-2019 HERE Europe B.V.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nconst QUANTIZED_MESH_HEADER = new Map([\n  ['centerX', Float64Array.BYTES_PER_ELEMENT],\n  ['centerY', Float64Array.BYTES_PER_ELEMENT],\n  ['centerZ', Float64Array.BYTES_PER_ELEMENT],\n\n  ['minHeight', Float32Array.BYTES_PER_ELEMENT],\n  ['maxHeight', Float32Array.BYTES_PER_ELEMENT],\n\n  ['boundingSphereCenterX', Float64Array.BYTES_PER_ELEMENT],\n  ['boundingSphereCenterY', Float64Array.BYTES_PER_ELEMENT],\n  ['boundingSphereCenterZ', Float64Array.BYTES_PER_ELEMENT],\n  ['boundingSphereRadius', Float64Array.BYTES_PER_ELEMENT],\n\n  ['horizonOcclusionPointX', Float64Array.BYTES_PER_ELEMENT],\n  ['horizonOcclusionPointY', Float64Array.BYTES_PER_ELEMENT],\n  ['horizonOcclusionPointZ', Float64Array.BYTES_PER_ELEMENT]\n]);\n\nfunction decodeZigZag(value) {\n  return (value >> 1) ^ -(value & 1);\n}\n\nfunction decodeHeader(dataView) {\n  let position = 0;\n  const header = {};\n\n  for (const [key, bytesCount] of QUANTIZED_MESH_HEADER) {\n    const getter = bytesCount === 8 ? dataView.getFloat64 : dataView.getFloat32;\n\n    header[key] = getter.call(dataView, position, true);\n    position += bytesCount;\n  }\n\n  return {header, headerEndPosition: position};\n}\n\nfunction decodeVertexData(dataView, headerEndPosition) {\n  let position = headerEndPosition;\n  const elementsPerVertex = 3;\n  const vertexCount = dataView.getUint32(position, true);\n  const vertexData = new Uint16Array(vertexCount * elementsPerVertex);\n\n  position += Uint32Array.BYTES_PER_ELEMENT;\n\n  const bytesPerArrayElement = Uint16Array.BYTES_PER_ELEMENT;\n  const elementArrayLength = vertexCount * bytesPerArrayElement;\n  const uArrayStartPosition = position;\n  const vArrayStartPosition = uArrayStartPosition + elementArrayLength;\n  const heightArrayStartPosition = vArrayStartPosition + elementArrayLength;\n\n  let u = 0;\n  let v = 0;\n  let height = 0;\n\n  for (let i = 0; i < vertexCount; i++) {\n    u += decodeZigZag(dataView.getUint16(uArrayStartPosition + bytesPerArrayElement * i, true));\n    v += decodeZigZag(dataView.getUint16(vArrayStartPosition + bytesPerArrayElement * i, true));\n    height += decodeZigZag(\n      dataView.getUint16(heightArrayStartPosition + bytesPerArrayElement * i, true)\n    );\n\n    vertexData[i] = u;\n    vertexData[i + vertexCount] = v;\n    vertexData[i + vertexCount * 2] = height;\n  }\n\n  position += elementArrayLength * 3;\n\n  return {vertexData, vertexDataEndPosition: position};\n}\n\nfunction decodeIndex(buffer, position, indicesCount, bytesPerIndex, encoded = true) {\n  let indices;\n\n  if (bytesPerIndex === 2) {\n    indices = new Uint16Array(buffer, position, indicesCount);\n  } else {\n    indices = new Uint32Array(buffer, position, indicesCount);\n  }\n\n  if (!encoded) {\n    return indices;\n  }\n\n  let highest = 0;\n\n  for (let i = 0; i < indices.length; ++i) {\n    const code = indices[i];\n\n    indices[i] = highest - code;\n\n    if (code === 0) {\n      ++highest;\n    }\n  }\n\n  return indices;\n}\n\nfunction decodeTriangleIndices(dataView, vertexData, vertexDataEndPosition) {\n  let position = vertexDataEndPosition;\n  const elementsPerVertex = 3;\n  const vertexCount = vertexData.length / elementsPerVertex;\n  const bytesPerIndex =\n    vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;\n\n  if (position % bytesPerIndex !== 0) {\n    position += bytesPerIndex - (position % bytesPerIndex);\n  }\n\n  const triangleCount = dataView.getUint32(position, true);\n  position += Uint32Array.BYTES_PER_ELEMENT;\n\n  const triangleIndicesCount = triangleCount * 3;\n  const triangleIndices = decodeIndex(\n    dataView.buffer,\n    position,\n    triangleIndicesCount,\n    bytesPerIndex\n  );\n  position += triangleIndicesCount * bytesPerIndex;\n\n  return {\n    triangleIndicesEndPosition: position,\n    triangleIndices\n  };\n}\n\nfunction decodeEdgeIndices(dataView, vertexData, triangleIndicesEndPosition) {\n  let position = triangleIndicesEndPosition;\n  const elementsPerVertex = 3;\n  const vertexCount = vertexData.length / elementsPerVertex;\n  const bytesPerIndex =\n    vertexCount > 65536 ? Uint32Array.BYTES_PER_ELEMENT : Uint16Array.BYTES_PER_ELEMENT;\n\n  const westVertexCount = dataView.getUint32(position, true);\n  position += Uint32Array.BYTES_PER_ELEMENT;\n\n  const westIndices = decodeIndex(dataView.buffer, position, westVertexCount, bytesPerIndex, false);\n  position += westVertexCount * bytesPerIndex;\n\n  const southVertexCount = dataView.getUint32(position, true);\n  position += Uint32Array.BYTES_PER_ELEMENT;\n\n  const southIndices = decodeIndex(\n    dataView.buffer,\n    position,\n    southVertexCount,\n    bytesPerIndex,\n    false\n  );\n  position += southVertexCount * bytesPerIndex;\n\n  const eastVertexCount = dataView.getUint32(position, true);\n  position += Uint32Array.BYTES_PER_ELEMENT;\n\n  const eastIndices = decodeIndex(dataView.buffer, position, eastVertexCount, bytesPerIndex, false);\n  position += eastVertexCount * bytesPerIndex;\n\n  const northVertexCount = dataView.getUint32(position, true);\n  position += Uint32Array.BYTES_PER_ELEMENT;\n\n  const northIndices = decodeIndex(\n    dataView.buffer,\n    position,\n    northVertexCount,\n    bytesPerIndex,\n    false\n  );\n  position += northVertexCount * bytesPerIndex;\n\n  return {\n    edgeIndicesEndPosition: position,\n    westIndices,\n    southIndices,\n    eastIndices,\n    northIndices\n  };\n}\n\nfunction decodeVertexNormalsExtension(extensionDataView) {\n  return new Uint8Array(\n    extensionDataView.buffer,\n    extensionDataView.byteOffset,\n    extensionDataView.byteLength\n  );\n}\n\nfunction decodeWaterMaskExtension(extensionDataView) {\n  return extensionDataView.buffer.slice(\n    extensionDataView.byteOffset,\n    extensionDataView.byteOffset + extensionDataView.byteLength\n  );\n}\n\ntype Extensions = {\n  vertexNormals?: any;\n  waterMask?: any;\n};\n\nfunction decodeExtensions(dataView, indicesEndPosition) {\n  const extensions: Extensions = {};\n\n  if (dataView.byteLength <= indicesEndPosition) {\n    return {extensions, extensionsEndPosition: indicesEndPosition};\n  }\n\n  let position = indicesEndPosition;\n\n  while (position < dataView.byteLength) {\n    const extensionId = dataView.getUint8(position, true);\n    position += Uint8Array.BYTES_PER_ELEMENT;\n\n    const extensionLength = dataView.getUint32(position, true);\n    position += Uint32Array.BYTES_PER_ELEMENT;\n\n    const extensionView = new DataView(dataView.buffer, position, extensionLength);\n\n    switch (extensionId) {\n      case 1: {\n        extensions.vertexNormals = decodeVertexNormalsExtension(extensionView);\n\n        break;\n      }\n      case 2: {\n        extensions.waterMask = decodeWaterMaskExtension(extensionView);\n\n        break;\n      }\n      default: {\n        // console.warn(`Unknown extension with id ${extensionId}`)\n      }\n    }\n\n    position += extensionLength;\n  }\n\n  return {extensions, extensionsEndPosition: position};\n}\n\nexport const DECODING_STEPS = {\n  header: 0,\n  vertices: 1,\n  triangleIndices: 2,\n  edgeIndices: 3,\n  extensions: 4\n};\n\nconst DEFAULT_OPTIONS = {\n  maxDecodingStep: DECODING_STEPS.extensions\n};\n\nexport default function decode(data, userOptions) {\n  const options = Object.assign({}, DEFAULT_OPTIONS, userOptions);\n  const view = new DataView(data);\n  const {header, headerEndPosition} = decodeHeader(view);\n\n  if (options.maxDecodingStep < DECODING_STEPS.vertices) {\n    return {header};\n  }\n\n  const {vertexData, vertexDataEndPosition} = decodeVertexData(view, headerEndPosition);\n\n  if (options.maxDecodingStep < DECODING_STEPS.triangleIndices) {\n    return {header, vertexData};\n  }\n\n  const {triangleIndices, triangleIndicesEndPosition} = decodeTriangleIndices(\n    view,\n    vertexData,\n    vertexDataEndPosition\n  );\n\n  if (options.maxDecodingStep < DECODING_STEPS.edgeIndices) {\n    return {header, vertexData, triangleIndices};\n  }\n\n  const {westIndices, southIndices, eastIndices, northIndices, edgeIndicesEndPosition} =\n    decodeEdgeIndices(view, vertexData, triangleIndicesEndPosition);\n\n  if (options.maxDecodingStep < DECODING_STEPS.extensions) {\n    return {\n      header,\n      vertexData,\n      triangleIndices,\n      westIndices,\n      northIndices,\n      eastIndices,\n      southIndices\n    };\n  }\n\n  const {extensions} = decodeExtensions(view, edgeIndicesEndPosition);\n\n  return {\n    header,\n    vertexData,\n    triangleIndices,\n    westIndices,\n    northIndices,\n    eastIndices,\n    southIndices,\n    extensions\n  };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {concatenateTypedArrays} from '@loaders.gl/loader-utils';\n\nexport type EdgeIndices = {\n  westIndices: number[];\n  northIndices: number[];\n  eastIndices: number[];\n  southIndices: number[];\n};\n\n/**\n * Add skirt to existing mesh\n * @param {object} attributes - POSITION and TEXCOOD_0 attributes data\n * @param {any} triangles - indices array of the mesh geometry\n * @param skirtHeight - height of the skirt geometry\n * @param outsideIndices - edge indices from quantized mesh data\n * @returns - geometry data with added skirt\n */\nexport function addSkirt(attributes, triangles, skirtHeight: number, outsideIndices?: EdgeIndices) {\n  const outsideEdges = outsideIndices\n    ? getOutsideEdgesFromIndices(outsideIndices, attributes.POSITION.value)\n    : getOutsideEdgesFromTriangles(triangles);\n\n  // 2 new vertices for each outside edge\n  const newPosition = new attributes.POSITION.value.constructor(outsideEdges.length * 6);\n  const newTexcoord0 = new attributes.TEXCOORD_0.value.constructor(outsideEdges.length * 4);\n\n  // 2 new triangles for each outside edge\n  const newTriangles = new triangles.constructor(outsideEdges.length * 6);\n\n  for (let i = 0; i < outsideEdges.length; i++) {\n    const edge = outsideEdges[i];\n\n    updateAttributesForNewEdge({\n      edge,\n      edgeIndex: i,\n      attributes,\n      skirtHeight,\n      newPosition,\n      newTexcoord0,\n      newTriangles\n    });\n  }\n\n  attributes.POSITION.value = concatenateTypedArrays(attributes.POSITION.value, newPosition);\n  attributes.TEXCOORD_0.value = concatenateTypedArrays(attributes.TEXCOORD_0.value, newTexcoord0);\n  const resultTriangles =\n    triangles instanceof Array\n      ? triangles.concat(newTriangles)\n      : concatenateTypedArrays(triangles, newTriangles);\n\n  return {\n    attributes,\n    triangles: resultTriangles\n  };\n}\n\n/**\n * Get geometry edges that located on a border of the mesh\n * @param {any} triangles - indices array of the mesh geometry\n * @returns {number[][]} - outside edges data\n */\nfunction getOutsideEdgesFromTriangles(triangles) {\n  const edges: number[][] = [];\n  for (let i = 0; i < triangles.length; i += 3) {\n    edges.push([triangles[i], triangles[i + 1]]);\n    edges.push([triangles[i + 1], triangles[i + 2]]);\n    edges.push([triangles[i + 2], triangles[i]]);\n  }\n\n  edges.sort((a, b) => Math.min(...a) - Math.min(...b) || Math.max(...a) - Math.max(...b));\n\n  const outsideEdges: number[][] = [];\n  let index = 0;\n  while (index < edges.length) {\n    if (edges[index][0] === edges[index + 1]?.[1] && edges[index][1] === edges[index + 1]?.[0]) {\n      index += 2;\n    } else {\n      outsideEdges.push(edges[index]);\n      index++;\n    }\n  }\n  return outsideEdges;\n}\n\n/**\n * Get geometry edges that located on a border of the mesh\n * @param {object} indices - edge indices from quantized mesh data\n * @param {TypedArray} position - position attribute geometry data\n * @returns {number[][]} - outside edges data\n */\nfunction getOutsideEdgesFromIndices(indices: EdgeIndices, position) {\n  // Sort skirt indices to create adjacent triangles\n  indices.westIndices.sort((a, b) => position[3 * a + 1] - position[3 * b + 1]);\n  // Reverse (b - a) to match triangle winding\n  indices.eastIndices.sort((a, b) => position[3 * b + 1] - position[3 * a + 1]);\n  indices.southIndices.sort((a, b) => position[3 * b] - position[3 * a]);\n  // Reverse (b - a) to match triangle winding\n  indices.northIndices.sort((a, b) => position[3 * a] - position[3 * b]);\n\n  const edges: number[][] = [];\n  for (const index in indices) {\n    const indexGroup = indices[index];\n    for (let i = 0; i < indexGroup.length - 1; i++) {\n      edges.push([indexGroup[i], indexGroup[i + 1]]);\n    }\n  }\n  return edges;\n}\n\n/**\n * Get geometry edges that located on a border of the mesh\n * @param {object} args\n * @param {number[]} args.edge - edge indices in geometry\n * @param {number} args.edgeIndex - edge index in outsideEdges array\n * @param {object} args.attributes - POSITION and TEXCOORD_0 attributes\n * @param {number} args.skirtHeight - height of the skirt geometry\n * @param {TypedArray} args.newPosition - POSITION array for skirt data\n * @param {TypedArray} args.newTexcoord0 - TEXCOORD_0 array for skirt data\n * @param {TypedArray | Array} args.newTriangles - trinagle indices array for skirt data\n * @returns {void}\n */\nfunction updateAttributesForNewEdge({\n  edge,\n  edgeIndex,\n  attributes,\n  skirtHeight,\n  newPosition,\n  newTexcoord0,\n  newTriangles\n}) {\n  const positionsLength = attributes.POSITION.value.length;\n  const vertex1Offset = edgeIndex * 2;\n  const vertex2Offset = edgeIndex * 2 + 1;\n\n  // Define POSITION for new 1st vertex\n  newPosition.set(\n    attributes.POSITION.value.subarray(edge[0] * 3, edge[0] * 3 + 3),\n    vertex1Offset * 3\n  );\n  newPosition[vertex1Offset * 3 + 2] = newPosition[vertex1Offset * 3 + 2] - skirtHeight; // put down elevation on the skirt height\n\n  // Define POSITION for new 2nd vertex\n  newPosition.set(\n    attributes.POSITION.value.subarray(edge[1] * 3, edge[1] * 3 + 3),\n    vertex2Offset * 3\n  );\n  newPosition[vertex2Offset * 3 + 2] = newPosition[vertex2Offset * 3 + 2] - skirtHeight; // put down elevation on the skirt height\n\n  // Use same TEXCOORDS for skirt vertices\n  newTexcoord0.set(\n    attributes.TEXCOORD_0.value.subarray(edge[0] * 2, edge[0] * 2 + 2),\n    vertex1Offset * 2\n  );\n  newTexcoord0.set(\n    attributes.TEXCOORD_0.value.subarray(edge[1] * 2, edge[1] * 2 + 2),\n    vertex2Offset * 2\n  );\n\n  // Define new triangles\n  const triangle1Offset = edgeIndex * 2 * 3;\n  newTriangles[triangle1Offset] = edge[0];\n  newTriangles[triangle1Offset + 1] = positionsLength / 3 + vertex2Offset;\n  newTriangles[triangle1Offset + 2] = edge[1];\n\n  newTriangles[triangle1Offset + 3] = positionsLength / 3 + vertex2Offset;\n  newTriangles[triangle1Offset + 4] = edge[0];\n  newTriangles[triangle1Offset + 5] = positionsLength / 3 + vertex1Offset;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {getMeshBoundingBox} from '@loaders.gl/schema-utils';\nimport Martini from '@mapbox/martini';\nimport Delatin from './delatin/index';\nimport {addSkirt} from './helpers/skirt';\n\nexport type TerrainOptions = {\n  meshMaxError: number;\n  bounds: number[];\n  elevationDecoder: ElevationDecoder;\n  tesselator: 'martini' | 'delatin' | 'auto';\n  skirtHeight?: number;\n};\n\ntype TerrainImage = {\n  data: Uint8Array;\n  width: number;\n  height: number;\n};\n\ntype ElevationDecoder = {\n  rScaler: any;\n  bScaler: any;\n  gScaler: any;\n  offset: number;\n};\n\n/**\n * Returns generated mesh object from image data\n *\n * @param terrainImage terrain image data\n * @param terrainOptions terrain options\n * @returns mesh object\n */\nexport function makeTerrainMeshFromImage(\n  terrainImage: TerrainImage,\n  terrainOptions: TerrainOptions\n) {\n  const {meshMaxError, bounds, elevationDecoder} = terrainOptions;\n\n  const {data, width, height} = terrainImage;\n\n  let terrain;\n  let mesh;\n  switch (terrainOptions.tesselator) {\n    case 'martini':\n      terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);\n      mesh = getMartiniTileMesh(meshMaxError, width, terrain);\n      break;\n    case 'delatin':\n      terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);\n      mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);\n      break;\n    // auto\n    default:\n      if (width === height && !(height & (width - 1))) {\n        terrain = getTerrain(data, width, height, elevationDecoder, 'martini');\n        mesh = getMartiniTileMesh(meshMaxError, width, terrain);\n      } else {\n        terrain = getTerrain(data, width, height, elevationDecoder, 'delatin');\n        mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);\n      }\n      break;\n  }\n\n  const {vertices} = mesh;\n  let {triangles} = mesh;\n  let attributes = getMeshAttributes(vertices, terrain, width, height, bounds);\n\n  // Compute bounding box before adding skirt so that z values are not skewed\n  const boundingBox = getMeshBoundingBox(attributes);\n\n  if (terrainOptions.skirtHeight) {\n    const {attributes: newAttributes, triangles: newTriangles} = addSkirt(\n      attributes,\n      triangles,\n      terrainOptions.skirtHeight\n    );\n    attributes = newAttributes;\n    triangles = newTriangles;\n  }\n\n  return {\n    // Data return by this loader implementation\n    loaderData: {\n      header: {}\n    },\n    header: {\n      vertexCount: triangles.length,\n      boundingBox\n    },\n    mode: 4, // TRIANGLES\n    indices: {value: Uint32Array.from(triangles), size: 1},\n    attributes\n  };\n}\n\n/**\n * Get Martini generated vertices and triangles\n *\n * @param {number} meshMaxError threshold for simplifying mesh\n * @param {number} width width of the input data\n * @param {number[] | Float32Array} terrain elevation data\n * @returns {{vertices: Uint16Array, triangles: Uint32Array}} vertices and triangles data\n */\nfunction getMartiniTileMesh(meshMaxError, width, terrain) {\n  const gridSize = width + 1;\n  const martini = new Martini(gridSize);\n  const tile = martini.createTile(terrain);\n  const {vertices, triangles} = tile.getMesh(meshMaxError);\n\n  return {vertices, triangles};\n}\n\n/**\n * Get Delatin generated vertices and triangles\n *\n * @param {number} meshMaxError threshold for simplifying mesh\n * @param {number} width width of the input data array\n * @param {number} height height of the input data array\n * @param {number[] | Float32Array} terrain elevation data\n * @returns {{vertices: number[], triangles: number[]}} vertices and triangles data\n */\nfunction getDelatinTileMesh(meshMaxError, width, height, terrain) {\n  const tin = new Delatin(terrain, width + 1, height + 1);\n  tin.run(meshMaxError);\n  // @ts-expect-error\n  const {coords, triangles} = tin;\n  const vertices = coords;\n  return {vertices, triangles};\n}\n\nfunction getTerrain(\n  imageData: Uint8Array,\n  width: number,\n  height: number,\n  elevationDecoder: ElevationDecoder,\n  tesselator: 'martini' | 'delatin'\n) {\n  const {rScaler, bScaler, gScaler, offset} = elevationDecoder;\n\n  // From Martini demo\n  // https://observablehq.com/@mourner/martin-real-time-rtin-terrain-mesh\n  const terrain = new Float32Array((width + 1) * (height + 1));\n  // decode terrain values\n  for (let i = 0, y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++, i++) {\n      const k = i * 4;\n      const r = imageData[k + 0];\n      const g = imageData[k + 1];\n      const b = imageData[k + 2];\n      terrain[i + y] = r * rScaler + g * gScaler + b * bScaler + offset;\n    }\n  }\n\n  if (tesselator === 'martini') {\n    // backfill bottom border\n    for (let i = (width + 1) * width, x = 0; x < width; x++, i++) {\n      terrain[i] = terrain[i - width - 1];\n    }\n    // backfill right border\n    for (let i = height, y = 0; y < height + 1; y++, i += height + 1) {\n      terrain[i] = terrain[i - 1];\n    }\n  }\n\n  return terrain;\n}\n\nfunction getMeshAttributes(\n  vertices,\n  terrain: Uint8Array,\n  width: number,\n  height: number,\n  bounds: number[]\n) {\n  const gridSize = width + 1;\n  const numOfVerticies = vertices.length / 2;\n  // vec3. x, y in pixels, z in meters\n  const positions = new Float32Array(numOfVerticies * 3);\n  // vec2. 1 to 1 relationship with position. represents the uv on the texture image. 0,0 to 1,1.\n  const texCoords = new Float32Array(numOfVerticies * 2);\n\n  const [minX, minY, maxX, maxY] = bounds || [0, 0, width, height];\n  const xScale = (maxX - minX) / width;\n  const yScale = (maxY - minY) / height;\n\n  for (let i = 0; i < numOfVerticies; i++) {\n    const x = vertices[i * 2];\n    const y = vertices[i * 2 + 1];\n    const pixelIdx = y * gridSize + x;\n\n    positions[3 * i + 0] = x * xScale + minX;\n    positions[3 * i + 1] = -y * yScale + maxY;\n    positions[3 * i + 2] = terrain[pixelIdx];\n\n    texCoords[2 * i + 0] = x / width;\n    texCoords[2 * i + 1] = y / height;\n  }\n\n  return {\n    POSITION: {value: positions, size: 3},\n    TEXCOORD_0: {value: texCoords, size: 2}\n    // NORMAL: {}, - optional, but creates the high poly look with lighting\n  };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// ISC License\n// Copyright(c) 2019, Michael Fogleman, Vladimir Agafonkin\n\n// @ts-nocheck\n\n/* eslint-disable complexity, max-params, max-statements, max-depth, no-constant-condition */\nexport default class Delatin {\n  constructor(data, width, height = width) {\n    this.data = data; // height data\n    this.width = width;\n    this.height = height;\n\n    this.coords = []; // vertex coordinates (x, y)\n    this.triangles = []; // mesh triangle indices\n\n    // additional triangle data\n    this._halfedges = [];\n    this._candidates = [];\n    this._queueIndices = [];\n\n    this._queue = []; // queue of added triangles\n    this._errors = [];\n    this._rms = [];\n    this._pending = []; // triangles pending addition to queue\n    this._pendingLen = 0;\n\n    this._rmsSum = 0;\n\n    const x1 = width - 1;\n    const y1 = height - 1;\n    const p0 = this._addPoint(0, 0);\n    const p1 = this._addPoint(x1, 0);\n    const p2 = this._addPoint(0, y1);\n    const p3 = this._addPoint(x1, y1);\n\n    // add initial two triangles\n    const t0 = this._addTriangle(p3, p0, p2, -1, -1, -1);\n    this._addTriangle(p0, p3, p1, t0, -1, -1);\n    this._flush();\n  }\n\n  // refine the mesh until its maximum error gets below the given one\n  run(maxError = 1) {\n    while (this.getMaxError() > maxError) {\n      this.refine();\n    }\n  }\n\n  // refine the mesh with a single point\n  refine() {\n    this._step();\n    this._flush();\n  }\n\n  // max error of the current mesh\n  getMaxError() {\n    return this._errors[0];\n  }\n\n  // root-mean-square deviation of the current mesh\n  getRMSD() {\n    return this._rmsSum > 0 ? Math.sqrt(this._rmsSum / (this.width * this.height)) : 0;\n  }\n\n  // height value at a given position\n  heightAt(x, y) {\n    return this.data[this.width * y + x];\n  }\n\n  // rasterize and queue all triangles that got added or updated in _step\n  _flush() {\n    const coords = this.coords;\n    for (let i = 0; i < this._pendingLen; i++) {\n      const t = this._pending[i];\n      // rasterize triangle to find maximum pixel error\n      const a = 2 * this.triangles[t * 3 + 0];\n      const b = 2 * this.triangles[t * 3 + 1];\n      const c = 2 * this.triangles[t * 3 + 2];\n      this._findCandidate(\n        coords[a],\n        coords[a + 1],\n        coords[b],\n        coords[b + 1],\n        coords[c],\n        coords[c + 1],\n        t\n      );\n    }\n    this._pendingLen = 0;\n  }\n\n  // rasterize a triangle, find its max error, and queue it for processing\n  _findCandidate(p0x, p0y, p1x, p1y, p2x, p2y, t) {\n    // triangle bounding box\n    const minX = Math.min(p0x, p1x, p2x);\n    const minY = Math.min(p0y, p1y, p2y);\n    const maxX = Math.max(p0x, p1x, p2x);\n    const maxY = Math.max(p0y, p1y, p2y);\n\n    // forward differencing variables\n    let w00 = orient(p1x, p1y, p2x, p2y, minX, minY);\n    let w01 = orient(p2x, p2y, p0x, p0y, minX, minY);\n    let w02 = orient(p0x, p0y, p1x, p1y, minX, minY);\n    const a01 = p1y - p0y;\n    const b01 = p0x - p1x;\n    const a12 = p2y - p1y;\n    const b12 = p1x - p2x;\n    const a20 = p0y - p2y;\n    const b20 = p2x - p0x;\n\n    // pre-multiplied z values at vertices\n    const a = orient(p0x, p0y, p1x, p1y, p2x, p2y);\n    const z0 = this.heightAt(p0x, p0y) / a;\n    const z1 = this.heightAt(p1x, p1y) / a;\n    const z2 = this.heightAt(p2x, p2y) / a;\n\n    // iterate over pixels in bounding box\n    let maxError = 0;\n    let mx = 0;\n    let my = 0;\n    let rms = 0;\n    for (let y = minY; y <= maxY; y++) {\n      // compute starting offset\n      let dx = 0;\n      if (w00 < 0 && a12 !== 0) {\n        dx = Math.max(dx, Math.floor(-w00 / a12));\n      }\n      if (w01 < 0 && a20 !== 0) {\n        dx = Math.max(dx, Math.floor(-w01 / a20));\n      }\n      if (w02 < 0 && a01 !== 0) {\n        dx = Math.max(dx, Math.floor(-w02 / a01));\n      }\n\n      let w0 = w00 + a12 * dx;\n      let w1 = w01 + a20 * dx;\n      let w2 = w02 + a01 * dx;\n\n      let wasInside = false;\n\n      for (let x = minX + dx; x <= maxX; x++) {\n        // check if inside triangle\n        if (w0 >= 0 && w1 >= 0 && w2 >= 0) {\n          wasInside = true;\n\n          // compute z using barycentric coordinates\n          const z = z0 * w0 + z1 * w1 + z2 * w2;\n          const dz = Math.abs(z - this.heightAt(x, y));\n          rms += dz * dz;\n          if (dz > maxError) {\n            maxError = dz;\n            mx = x;\n            my = y;\n          }\n        } else if (wasInside) {\n          break;\n        }\n\n        w0 += a12;\n        w1 += a20;\n        w2 += a01;\n      }\n\n      w00 += b12;\n      w01 += b20;\n      w02 += b01;\n    }\n\n    if ((mx === p0x && my === p0y) || (mx === p1x && my === p1y) || (mx === p2x && my === p2y)) {\n      maxError = 0;\n    }\n\n    // update triangle metadata\n    this._candidates[2 * t] = mx;\n    this._candidates[2 * t + 1] = my;\n    this._rms[t] = rms;\n\n    // add triangle to priority queue\n    this._queuePush(t, maxError, rms);\n  }\n\n  // process the next triangle in the queue, splitting it with a new point\n  _step() {\n    // pop triangle with highest error from priority queue\n    const t = this._queuePop();\n\n    const e0 = t * 3 + 0;\n    const e1 = t * 3 + 1;\n    const e2 = t * 3 + 2;\n\n    const p0 = this.triangles[e0];\n    const p1 = this.triangles[e1];\n    const p2 = this.triangles[e2];\n\n    const ax = this.coords[2 * p0];\n    const ay = this.coords[2 * p0 + 1];\n    const bx = this.coords[2 * p1];\n    const by = this.coords[2 * p1 + 1];\n    const cx = this.coords[2 * p2];\n    const cy = this.coords[2 * p2 + 1];\n    const px = this._candidates[2 * t];\n    const py = this._candidates[2 * t + 1];\n\n    const pn = this._addPoint(px, py);\n\n    if (orient(ax, ay, bx, by, px, py) === 0) {\n      this._handleCollinear(pn, e0);\n    } else if (orient(bx, by, cx, cy, px, py) === 0) {\n      this._handleCollinear(pn, e1);\n    } else if (orient(cx, cy, ax, ay, px, py) === 0) {\n      this._handleCollinear(pn, e2);\n    } else {\n      const h0 = this._halfedges[e0];\n      const h1 = this._halfedges[e1];\n      const h2 = this._halfedges[e2];\n\n      const t0 = this._addTriangle(p0, p1, pn, h0, -1, -1, e0);\n      const t1 = this._addTriangle(p1, p2, pn, h1, -1, t0 + 1);\n      const t2 = this._addTriangle(p2, p0, pn, h2, t0 + 2, t1 + 1);\n\n      this._legalize(t0);\n      this._legalize(t1);\n      this._legalize(t2);\n    }\n  }\n\n  // add coordinates for a new vertex\n  _addPoint(x, y) {\n    const i = this.coords.length >> 1;\n    this.coords.push(x, y);\n    return i;\n  }\n\n  // add or update a triangle in the mesh\n  _addTriangle(a, b, c, ab, bc, ca, e = this.triangles.length) {\n    const t = e / 3; // new triangle index\n\n    // add triangle vertices\n    this.triangles[e + 0] = a;\n    this.triangles[e + 1] = b;\n    this.triangles[e + 2] = c;\n\n    // add triangle halfedges\n    this._halfedges[e + 0] = ab;\n    this._halfedges[e + 1] = bc;\n    this._halfedges[e + 2] = ca;\n\n    // link neighboring halfedges\n    if (ab >= 0) {\n      this._halfedges[ab] = e + 0;\n    }\n    if (bc >= 0) {\n      this._halfedges[bc] = e + 1;\n    }\n    if (ca >= 0) {\n      this._halfedges[ca] = e + 2;\n    }\n\n    // init triangle metadata\n    this._candidates[2 * t + 0] = 0;\n    this._candidates[2 * t + 1] = 0;\n    this._queueIndices[t] = -1;\n    this._rms[t] = 0;\n\n    // add triangle to pending queue for later rasterization\n    this._pending[this._pendingLen++] = t;\n\n    // return first halfedge index\n    return e;\n  }\n\n  _legalize(a) {\n    // if the pair of triangles doesn't satisfy the Delaunay condition\n    // (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n    // then do the same check/flip recursively for the new pair of triangles\n    //\n    //           pl                    pl\n    //          /||\\                  /  \\\n    //       al/ || \\bl            al/    \\a\n    //        /  ||  \\              /      \\\n    //       /  a||b  \\    flip    /___ar___\\\n    //     p0\\   ||   /p1   =>   p0\\---bl---/p1\n    //        \\  ||  /              \\      /\n    //       ar\\ || /br             b\\    /br\n    //          \\||/                  \\  /\n    //           pr                    pr\n\n    const b = this._halfedges[a];\n\n    if (b < 0) {\n      return;\n    }\n\n    const a0 = a - (a % 3);\n    const b0 = b - (b % 3);\n    const al = a0 + ((a + 1) % 3);\n    const ar = a0 + ((a + 2) % 3);\n    const bl = b0 + ((b + 2) % 3);\n    const br = b0 + ((b + 1) % 3);\n    const p0 = this.triangles[ar];\n    const pr = this.triangles[a];\n    const pl = this.triangles[al];\n    const p1 = this.triangles[bl];\n    const coords = this.coords;\n\n    if (\n      !inCircle(\n        coords[2 * p0],\n        coords[2 * p0 + 1],\n        coords[2 * pr],\n        coords[2 * pr + 1],\n        coords[2 * pl],\n        coords[2 * pl + 1],\n        coords[2 * p1],\n        coords[2 * p1 + 1]\n      )\n    ) {\n      return;\n    }\n\n    const hal = this._halfedges[al];\n    const har = this._halfedges[ar];\n    const hbl = this._halfedges[bl];\n    const hbr = this._halfedges[br];\n\n    this._queueRemove(a0 / 3);\n    this._queueRemove(b0 / 3);\n\n    const t0 = this._addTriangle(p0, p1, pl, -1, hbl, hal, a0);\n    const t1 = this._addTriangle(p1, p0, pr, t0, har, hbr, b0);\n\n    this._legalize(t0 + 1);\n    this._legalize(t1 + 2);\n  }\n\n  // handle a case where new vertex is on the edge of a triangle\n  _handleCollinear(pn, a) {\n    const a0 = a - (a % 3);\n    const al = a0 + ((a + 1) % 3);\n    const ar = a0 + ((a + 2) % 3);\n    const p0 = this.triangles[ar];\n    const pr = this.triangles[a];\n    const pl = this.triangles[al];\n    const hal = this._halfedges[al];\n    const har = this._halfedges[ar];\n\n    const b = this._halfedges[a];\n\n    if (b < 0) {\n      const t0 = this._addTriangle(pn, p0, pr, -1, har, -1, a0);\n      const t1 = this._addTriangle(p0, pn, pl, t0, -1, hal);\n      this._legalize(t0 + 1);\n      this._legalize(t1 + 2);\n      return;\n    }\n\n    const b0 = b - (b % 3);\n    const bl = b0 + ((b + 2) % 3);\n    const br = b0 + ((b + 1) % 3);\n    const p1 = this.triangles[bl];\n    const hbl = this._halfedges[bl];\n    const hbr = this._halfedges[br];\n\n    this._queueRemove(b0 / 3);\n\n    const t0 = this._addTriangle(p0, pr, pn, har, -1, -1, a0);\n    const t1 = this._addTriangle(pr, p1, pn, hbr, -1, t0 + 1, b0);\n    const t2 = this._addTriangle(p1, pl, pn, hbl, -1, t1 + 1);\n    const t3 = this._addTriangle(pl, p0, pn, hal, t0 + 2, t2 + 1);\n\n    this._legalize(t0);\n    this._legalize(t1);\n    this._legalize(t2);\n    this._legalize(t3);\n  }\n\n  // priority queue methods\n\n  _queuePush(t, error, rms) {\n    const i = this._queue.length;\n    this._queueIndices[t] = i;\n    this._queue.push(t);\n    this._errors.push(error);\n    this._rmsSum += rms;\n    this._queueUp(i);\n  }\n\n  _queuePop() {\n    const n = this._queue.length - 1;\n    this._queueSwap(0, n);\n    this._queueDown(0, n);\n    return this._queuePopBack();\n  }\n\n  _queuePopBack() {\n    const t = this._queue.pop();\n    this._errors.pop();\n    this._rmsSum -= this._rms[t];\n    this._queueIndices[t] = -1;\n    return t;\n  }\n\n  _queueRemove(t) {\n    const i = this._queueIndices[t];\n    if (i < 0) {\n      const it = this._pending.indexOf(t);\n      if (it !== -1) {\n        this._pending[it] = this._pending[--this._pendingLen];\n      } else {\n        throw new Error('Broken triangulation (something went wrong).');\n      }\n      return;\n    }\n    const n = this._queue.length - 1;\n    if (n !== i) {\n      this._queueSwap(i, n);\n      if (!this._queueDown(i, n)) {\n        this._queueUp(i);\n      }\n    }\n    this._queuePopBack();\n  }\n\n  _queueLess(i, j) {\n    return this._errors[i] > this._errors[j];\n  }\n\n  _queueSwap(i, j) {\n    const pi = this._queue[i];\n    const pj = this._queue[j];\n    this._queue[i] = pj;\n    this._queue[j] = pi;\n    this._queueIndices[pi] = j;\n    this._queueIndices[pj] = i;\n    const e = this._errors[i];\n    this._errors[i] = this._errors[j];\n    this._errors[j] = e;\n  }\n\n  _queueUp(j0) {\n    let j = j0;\n    while (true) {\n      const i = (j - 1) >> 1;\n      if (i === j || !this._queueLess(j, i)) {\n        break;\n      }\n      this._queueSwap(i, j);\n      j = i;\n    }\n  }\n\n  _queueDown(i0, n) {\n    let i = i0;\n    while (true) {\n      const j1 = 2 * i + 1;\n      if (j1 >= n || j1 < 0) {\n        break;\n      }\n      const j2 = j1 + 1;\n      let j = j1;\n      if (j2 < n && this._queueLess(j2, j1)) {\n        j = j2;\n      }\n      if (!this._queueLess(j, i)) {\n        break;\n      }\n      this._queueSwap(i, j);\n      i = j;\n    }\n    return i > i0;\n  }\n}\n\nfunction orient(ax, ay, bx, by, cx, cy) {\n  return (bx - cx) * (ay - cy) - (by - cy) * (ax - cx);\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n  const dx = ax - px;\n  const dy = ay - py;\n  const ex = bx - px;\n  const ey = by - py;\n  const fx = cx - px;\n  const fy = cy - py;\n\n  const ap = dx * dx + dy * dy;\n  const bp = ex * ex + ey * ey;\n  const cp = fx * fx + fy * fy;\n\n  return dx * (ey * cp - bp * fy) - dy * (ex * cp - bp * fx) + ap * (ex * fy - ey * fx) < 0;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {Mesh} from '@loaders.gl/schema';\nimport type {ImageLoaderOptions} from '@loaders.gl/images';\nimport {VERSION} from './lib/utils/version';\n\nimport type {TerrainOptions} from './lib/parse-terrain';\n\n/** TerrainLoader options */\nexport type TerrainLoaderOptions = ImageLoaderOptions & {\n  /** TerrainLoader options */\n  terrain?: TerrainOptions & {\n    /** Override the URL to the worker bundle (by default loads from unpkg.com) */\n    workerUrl?: string;\n  };\n};\n\n/**\n * Worker loader for image encoded terrain\n */\nexport const TerrainLoader = {\n  dataType: null as unknown as Mesh,\n  batchType: null as never,\n\n  name: 'Terrain',\n  id: 'terrain',\n  module: 'terrain',\n  version: VERSION,\n  worker: true,\n  extensions: ['png', 'pngraw', 'jpg', 'jpeg', 'gif', 'webp', 'bmp'],\n  mimeTypes: ['image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/bmp'],\n  options: {\n    terrain: {\n      tesselator: 'auto',\n      bounds: undefined!,\n      meshMaxError: 10,\n      elevationDecoder: {\n        rScaler: 1,\n        gScaler: 0,\n        bScaler: 0,\n        offset: 0\n      },\n      skirtHeight: undefined\n    }\n  }\n} as const satisfies Loader<Mesh, never, TerrainLoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\n\n/** QuantizedMeshLoader options */\nexport type QuantizedMeshLoaderOptions = LoaderOptions & {\n  /** QuantizedMeshLoader options */\n  'quantized-mesh'?: {\n    bounds?: [number, number, number, number];\n    skirtHeight?: number | null;\n    /** Override the URL to the worker bundle (by default loads from unpkg.com) */\n    workerUrl?: string;\n  };\n};\n\n/**\n * Worker loader for quantized meshes\n */\nexport const QuantizedMeshLoader = {\n  dataType: null as unknown as any, // Mesh,\n  batchType: null as never,\n\n  name: 'Quantized Mesh',\n  id: 'quantized-mesh',\n  module: 'terrain',\n  version: VERSION,\n  worker: true,\n  extensions: ['terrain'],\n  mimeTypes: ['application/vnd.quantized-mesh'],\n  options: {\n    'quantized-mesh': {\n      bounds: [0, 0, 1, 1],\n      skirtHeight: null\n    }\n  }\n} as const satisfies Loader<any, never, QuantizedMeshLoaderOptions>;\n"],
  "mappings": "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",
  "names": ["QuantizedMeshLoader", "TerrainLoader", "import_loader_utils", "import_schema_utils", "t0", "t1", "getMeshAttributes", "Martini", "TerrainLoader", "QuantizedMeshLoader"]
}
