{
  "version": 3,
  "sources": ["index.js", "lib/parsers/constants.js", "i3s-loader.js", "lib/parsers/parse-i3s-tile-content.js", "types.js", "lib/utils/url-utils.js", "i3s-content-loader.js", "lib/parsers/parse-i3s.js", "lib/helpers/i3s-nodepages-tiles.js", "i3s-node-page-loader.js", "i3s-slpk-loader.js", "lib/parsers/parse-slpk/parse-slpk.js", "lib/parsers/parse-slpk/slpk-archieve.js", "i3s-attribute-loader.js", "lib/parsers/parse-i3s-attribute.js", "lib/parsers/parse-i3s-building-scene-layer.js", "i3s-building-scene-layer-loader.js", "lib/parsers/parse-arcgis-webscene.js", "arcgis-webscene-loader.js", "lib/utils/customize-colors.js"],
  "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport { COORDINATE_SYSTEM } from \"./lib/parsers/constants.js\";\nexport { I3SLoader } from \"./i3s-loader.js\";\nexport { SLPKLoader } from \"./i3s-slpk-loader.js\";\nexport { I3SContentLoader } from \"./i3s-content-loader.js\";\nexport { I3SAttributeLoader, loadFeatureAttributes } from \"./i3s-attribute-loader.js\";\nexport { I3SBuildingSceneLayerLoader } from \"./i3s-building-scene-layer-loader.js\";\nexport { I3SNodePageLoader } from \"./i3s-node-page-loader.js\";\nexport { ArcGISWebSceneLoader } from \"./arcgis-webscene-loader.js\";\nexport { SLPKArchive } from \"./lib/parsers/parse-slpk/slpk-archieve.js\";\nexport { parseSLPKArchive } from \"./lib/parsers/parse-slpk/parse-slpk.js\";\nexport { LayerError } from \"./lib/parsers/parse-arcgis-webscene.js\";\nexport { customizeColors } from \"./lib/utils/customize-colors.js\";\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL } from '@loaders.gl/math';\nexport function getConstructorForDataFormat(dataType) {\n    switch (dataType) {\n        case 'UInt8':\n            return Uint8Array;\n        case 'UInt16':\n            return Uint16Array;\n        case 'UInt32':\n            return Uint32Array;\n        case 'Float32':\n            return Float32Array;\n        case 'UInt64':\n            return Float64Array;\n        default:\n            throw new Error(`parse i3s tile content: unknown type of data: ${dataType}`);\n    }\n}\nexport const GL_TYPE_MAP = {\n    UInt8: GL.UNSIGNED_BYTE,\n    UInt16: GL.UNSIGNED_SHORT,\n    Float32: GL.FLOAT,\n    UInt32: GL.UNSIGNED_INT,\n    UInt64: GL.DOUBLE\n};\n/**\n * Returns how many bytes a type occupies\n * @param dataType\n * @returns\n */\nexport function sizeOf(dataType) {\n    switch (dataType) {\n        case 'UInt8':\n            return 1;\n        case 'UInt16':\n        case 'Int16':\n            return 2;\n        case 'UInt32':\n        case 'Int32':\n        case 'Float32':\n            return 4;\n        case 'UInt64':\n        case 'Int64':\n        case 'Float64':\n            return 8;\n        default:\n            throw new Error(`parse i3s tile content: unknown size of data: ${dataType}`);\n    }\n}\nexport const STRING_ATTRIBUTE_TYPE = 'String';\nexport const OBJECT_ID_ATTRIBUTE_TYPE = 'Oid32';\nexport const FLOAT_64_TYPE = 'Float64';\nexport const INT_16_ATTRIBUTE_TYPE = 'Int16';\n// https://github.com/visgl/deck.gl/blob/9548f43cba2234a1f4877b6b17f6c88eb35b2e08/modules/core/src/lib/constants.js#L27\n// Describes the format of positions\nexport var COORDINATE_SYSTEM;\n(function (COORDINATE_SYSTEM) {\n    /**\n     * `LNGLAT` if rendering into a geospatial viewport, `CARTESIAN` otherwise\n     */\n    COORDINATE_SYSTEM[COORDINATE_SYSTEM[\"DEFAULT\"] = -1] = \"DEFAULT\";\n    /**\n     * Positions are interpreted as [lng, lat, elevation]\n     * lng lat are degrees, elevation is meters. distances as meters.\n     */\n    COORDINATE_SYSTEM[COORDINATE_SYSTEM[\"LNGLAT\"] = 1] = \"LNGLAT\";\n    /**\n     * Positions are interpreted as meter offsets, distances as meters\n     */\n    COORDINATE_SYSTEM[COORDINATE_SYSTEM[\"METER_OFFSETS\"] = 2] = \"METER_OFFSETS\";\n    /**\n     * Positions are interpreted as lng lat offsets: [deltaLng, deltaLat, elevation]\n     * deltaLng, deltaLat are delta degrees, elevation is meters.\n     * distances as meters.\n     */\n    COORDINATE_SYSTEM[COORDINATE_SYSTEM[\"LNGLAT_OFFSETS\"] = 3] = \"LNGLAT_OFFSETS\";\n    /**\n     * Non-geospatial\n     */\n    COORDINATE_SYSTEM[COORDINATE_SYSTEM[\"CARTESIAN\"] = 0] = \"CARTESIAN\";\n})(COORDINATE_SYSTEM || (COORDINATE_SYSTEM = {}));\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright vis.gl contributors\nimport { parse } from '@loaders.gl/core';\nimport { I3SContentLoader } from \"./i3s-content-loader.js\";\nimport { normalizeTileData, normalizeTilesetData } from \"./lib/parsers/parse-i3s.js\";\nimport { COORDINATE_SYSTEM } from \"./lib/parsers/constants.js\";\nimport { getUrlWithoutParams } from \"./lib/utils/url-utils.js\";\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.3.2\" !== 'undefined' ? \"4.3.2\" : 'latest';\nconst TILESET_REGEX = /layers\\/[0-9]+$/;\nconst LOCAL_SLPK_REGEX = /\\.slpk$/;\nconst TILE_HEADER_REGEX = /nodes\\/([0-9-]+|root)$/;\nconst SLPK_HEX = '504b0304';\nconst POINT_CLOUD = 'PointCloud';\n/**\n * Loader for I3S - Indexed 3D Scene Layer\n */\nexport const I3SLoader = {\n    dataType: null,\n    batchType: null,\n    name: 'I3S (Indexed Scene Layers)',\n    id: 'i3s',\n    module: 'i3s',\n    version: VERSION,\n    mimeTypes: ['application/octet-stream'],\n    parse: parseI3S,\n    extensions: ['bin'],\n    options: {\n        i3s: {\n            token: null,\n            isTileset: 'auto',\n            isTileHeader: 'auto',\n            tile: null,\n            tileset: null,\n            _tileOptions: null,\n            _tilesetOptions: null,\n            useDracoGeometry: true,\n            useCompressedTextures: true,\n            decodeTextures: true,\n            coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS\n        }\n    }\n};\nasync function parseI3S(data, options = {}, context) {\n    const url = context.url;\n    options.i3s = options.i3s || {};\n    const magicNumber = getMagicNumber(data);\n    // check if file is slpk\n    if (magicNumber === SLPK_HEX) {\n        throw new Error('Files with .slpk extention currently are not supported by I3SLoader');\n    }\n    const urlWithoutParams = getUrlWithoutParams(url);\n    // auto detect file type based on url\n    let isTileset;\n    if (options.i3s.isTileset === 'auto') {\n        isTileset = TILESET_REGEX.test(urlWithoutParams) || LOCAL_SLPK_REGEX.test(urlWithoutParams);\n    }\n    else {\n        isTileset = options.i3s.isTileset;\n    }\n    let isTileHeader;\n    if (options.isTileHeader === 'auto') {\n        isTileHeader = TILE_HEADER_REGEX.test(urlWithoutParams);\n    }\n    else {\n        isTileHeader = options.i3s.isTileHeader;\n    }\n    if (isTileset) {\n        data = await parseTileset(data, options, context);\n    }\n    else if (isTileHeader) {\n        data = await parseTile(data, context);\n    }\n    else {\n        data = await parseTileContent(data, options);\n    }\n    return data;\n}\nasync function parseTileContent(arrayBuffer, options) {\n    return await parse(arrayBuffer, I3SContentLoader, options);\n}\nasync function parseTileset(data, options, context) {\n    const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n    if (tilesetJson?.layerType === POINT_CLOUD) {\n        throw new Error('Point Cloud layers currently are not supported by I3SLoader');\n    }\n    const tilesetPostprocessed = await normalizeTilesetData(tilesetJson, options, context);\n    return tilesetPostprocessed;\n}\nasync function parseTile(data, context) {\n    data = JSON.parse(new TextDecoder().decode(data));\n    return normalizeTileData(data, context);\n}\nfunction getMagicNumber(data) {\n    if (data instanceof ArrayBuffer) {\n        // slice binary data (4 bytes from the beginning) and transform it to hexadecimal numeral system\n        return [...new Uint8Array(data, 0, 4)]\n            .map((value) => value.toString(16).padStart(2, '0'))\n            .join('');\n    }\n    return null;\n}\n", "import { load, parse } from '@loaders.gl/core';\nimport { Vector3, Matrix4 } from '@math.gl/core';\nimport { Ellipsoid } from '@math.gl/geospatial';\nimport { parseFromContext } from '@loaders.gl/loader-utils';\nimport { ImageLoader } from '@loaders.gl/images';\nimport { DracoLoader } from '@loaders.gl/draco';\nimport { BasisLoader, CompressedTextureLoader } from '@loaders.gl/textures';\nimport { HeaderAttributeProperty } from \"../../types.js\";\nimport { getUrlWithToken } from \"../utils/url-utils.js\";\nimport { GL_TYPE_MAP, getConstructorForDataFormat, sizeOf, COORDINATE_SYSTEM } from \"./constants.js\";\nconst scratchVector = new Vector3([0, 0, 0]);\nfunction getLoaderForTextureFormat(textureFormat) {\n    switch (textureFormat) {\n        case 'ktx-etc2':\n        case 'dds':\n            return CompressedTextureLoader;\n        case 'ktx2':\n            return BasisLoader;\n        case 'jpg':\n        case 'png':\n        default:\n            return ImageLoader;\n    }\n}\nconst I3S_ATTRIBUTE_TYPE = 'i3s-attribute-type';\nexport async function parseI3STileContent(arrayBuffer, tileOptions, tilesetOptions, options, context) {\n    const content = {\n        attributes: {},\n        indices: null,\n        featureIds: [],\n        vertexCount: 0,\n        modelMatrix: new Matrix4(),\n        coordinateSystem: 0,\n        byteLength: 0,\n        texture: null\n    };\n    if (tileOptions.textureUrl) {\n        // @ts-expect-error options is not properly typed\n        const url = getUrlWithToken(tileOptions.textureUrl, options?.i3s?.token);\n        const loader = getLoaderForTextureFormat(tileOptions.textureFormat);\n        const fetchFunc = context?.fetch || fetch;\n        const response = await fetchFunc(url); // options?.fetch\n        const arrayBuffer = await response.arrayBuffer();\n        // @ts-expect-error options is not properly typed\n        if (options?.i3s.decodeTextures) {\n            // TODO - replace with switch\n            if (loader === ImageLoader) {\n                const options = { ...tileOptions.textureLoaderOptions, image: { type: 'data' } };\n                try {\n                    // Image constructor is not supported in worker thread.\n                    // Do parsing image data on the main thread by using context to avoid worker issues.\n                    const texture = await parseFromContext(arrayBuffer, [], options, context);\n                    content.texture = texture;\n                }\n                catch (e) {\n                    // context object is different between worker and node.js conversion script.\n                    // To prevent error we parse data in ordinary way if it is not parsed by using context.\n                    const texture = await parse(arrayBuffer, loader, options, context);\n                    content.texture = texture;\n                }\n            }\n            else if (loader === CompressedTextureLoader || loader === BasisLoader) {\n                let texture = await load(arrayBuffer, loader, tileOptions.textureLoaderOptions);\n                if (loader === BasisLoader) {\n                    texture = texture[0];\n                }\n                content.texture = {\n                    compressed: true,\n                    mipmaps: false,\n                    width: texture[0].width,\n                    height: texture[0].height,\n                    data: texture\n                };\n            }\n        }\n        else {\n            content.texture = arrayBuffer;\n        }\n    }\n    content.material = makePbrMaterial(tileOptions.materialDefinition, content.texture);\n    if (content.material) {\n        content.texture = null;\n    }\n    return await parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options);\n}\n/* eslint-disable max-statements */\nasync function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options) {\n    const contentByteLength = arrayBuffer.byteLength;\n    let attributes;\n    let vertexCount;\n    let byteOffset = 0;\n    let featureCount = 0;\n    let indices;\n    if (tileOptions.isDracoGeometry) {\n        const decompressedGeometry = await parse(arrayBuffer, DracoLoader, {\n            draco: {\n                attributeNameEntry: I3S_ATTRIBUTE_TYPE\n            }\n        });\n        // @ts-expect-error\n        vertexCount = decompressedGeometry.header.vertexCount;\n        indices = decompressedGeometry.indices?.value;\n        const { POSITION, NORMAL, COLOR_0, TEXCOORD_0, ['feature-index']: featureIndex, ['uv-region']: uvRegion } = decompressedGeometry.attributes;\n        attributes = {\n            position: POSITION,\n            normal: NORMAL,\n            color: COLOR_0,\n            uv0: TEXCOORD_0,\n            uvRegion,\n            id: featureIndex\n        };\n        updateAttributesMetadata(attributes, decompressedGeometry);\n        const featureIds = getFeatureIdsFromFeatureIndexMetadata(featureIndex);\n        if (featureIds) {\n            flattenFeatureIdsByFeatureIndices(attributes, featureIds);\n        }\n    }\n    else {\n        const { vertexAttributes, ordering: attributesOrder, featureAttributes, featureAttributeOrder } = tilesetOptions.store.defaultGeometrySchema;\n        // First 8 bytes reserved for header (vertexCount and featureCount)\n        const headers = parseHeaders(arrayBuffer, tilesetOptions);\n        byteOffset = headers.byteOffset;\n        vertexCount = headers.vertexCount;\n        featureCount = headers.featureCount;\n        // Getting vertex attributes such as positions, normals, colors, etc...\n        const { attributes: normalizedVertexAttributes, byteOffset: offset } = normalizeAttributes(arrayBuffer, byteOffset, vertexAttributes, vertexCount, attributesOrder);\n        // Getting feature attributes such as featureIds and faceRange\n        const { attributes: normalizedFeatureAttributes } = normalizeAttributes(arrayBuffer, offset, featureAttributes, featureCount, featureAttributeOrder);\n        flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);\n        attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);\n    }\n    if (!options?.i3s?.coordinateSystem ||\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n        options.i3s.coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS) {\n        const enuMatrix = parsePositions(attributes.position, tileOptions);\n        content.modelMatrix = enuMatrix.invert();\n        content.coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS;\n    }\n    else {\n        content.modelMatrix = getModelMatrix(attributes.position);\n        content.coordinateSystem = COORDINATE_SYSTEM.LNGLAT_OFFSETS;\n    }\n    content.attributes = {\n        positions: attributes.position,\n        normals: attributes.normal,\n        colors: normalizeAttribute(attributes.color), // Normalize from UInt8\n        texCoords: attributes.uv0,\n        uvRegions: normalizeAttribute(attributes.uvRegion || attributes.region) // Normalize from UInt16\n    };\n    content.indices = indices || null;\n    if (attributes.id && attributes.id.value) {\n        content.featureIds = attributes.id.value;\n    }\n    // Remove undefined attributes\n    for (const attributeIndex in content.attributes) {\n        if (!content.attributes[attributeIndex]) {\n            delete content.attributes[attributeIndex];\n        }\n    }\n    content.vertexCount = vertexCount;\n    content.byteLength = contentByteLength;\n    return content;\n}\n/**\n * Update attributes with metadata from decompressed geometry.\n * @param decompressedGeometry\n * @param attributes\n */\nfunction updateAttributesMetadata(attributes, decompressedGeometry) {\n    for (const key in decompressedGeometry.loaderData.attributes) {\n        const dracoAttribute = decompressedGeometry.loaderData.attributes[key];\n        switch (dracoAttribute.name) {\n            case 'POSITION':\n                attributes.position.metadata = dracoAttribute.metadata;\n                break;\n            case 'feature-index':\n                attributes.id.metadata = dracoAttribute.metadata;\n                break;\n            default:\n                break;\n        }\n    }\n}\n/**\n * Do concatenation of attribute objects.\n * Done as separate fucntion to avoid ts errors.\n * @param normalizedVertexAttributes\n * @param normalizedFeatureAttributes\n * @returns - result of attributes concatenation.\n */\nfunction concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes) {\n    return { ...normalizedVertexAttributes, ...normalizedFeatureAttributes };\n}\n/**\n * Normalize attribute to range [0..1] . Eg. convert colors buffer from [255,255,255,255] to [1,1,1,1]\n * @param attribute - geometry attribute\n * @returns - geometry attribute in right format\n */\nfunction normalizeAttribute(attribute) {\n    if (!attribute) {\n        return attribute;\n    }\n    attribute.normalized = true;\n    return attribute;\n}\nfunction parseHeaders(arrayBuffer, options) {\n    let byteOffset = 0;\n    // First 8 bytes reserved for header (vertexCount and featurecount)\n    let vertexCount = 0;\n    let featureCount = 0;\n    for (const { property, type } of options.store.defaultGeometrySchema.header) {\n        const TypedArrayTypeHeader = getConstructorForDataFormat(type);\n        switch (property) {\n            case HeaderAttributeProperty.vertexCount.toString():\n                vertexCount = new TypedArrayTypeHeader(arrayBuffer, 0, 4)[0];\n                byteOffset += sizeOf(type);\n                break;\n            case HeaderAttributeProperty.featureCount.toString():\n                featureCount = new TypedArrayTypeHeader(arrayBuffer, 4, 4)[0];\n                byteOffset += sizeOf(type);\n                break;\n            default:\n                break;\n        }\n    }\n    return {\n        vertexCount,\n        featureCount,\n        byteOffset\n    };\n}\n/* eslint-enable max-statements */\nfunction normalizeAttributes(arrayBuffer, byteOffset, vertexAttributes, attributeCount, attributesOrder) {\n    const attributes = {};\n    // the order of attributes depend on the order being added to the vertexAttributes object\n    for (const attribute of attributesOrder) {\n        if (vertexAttributes[attribute]) {\n            const { valueType, valuesPerElement } = vertexAttributes[attribute];\n            // protect from arrayBuffer read overunns by NOT assuming node has regions always even though its declared in defaultGeometrySchema.\n            // In i3s 1.6: client is required to decide that based on ./shared resource of the node (materialDefinitions.[Mat_id].params.vertexRegions == true)\n            // In i3s 1.7 the property has been rolled into the 3d scene layer json/node pages.\n            // Code below does not account when the bytelength is actually bigger than\n            // the calculated value (b\\c the tile potentially could have mesh segmentation information).\n            // In those cases tiles without regions could fail or have garbage values.\n            if (byteOffset + attributeCount * valuesPerElement * sizeOf(valueType) <=\n                arrayBuffer.byteLength) {\n                const buffer = arrayBuffer.slice(byteOffset);\n                let value;\n                if (valueType === 'UInt64') {\n                    value = parseUint64Values(buffer, attributeCount * valuesPerElement, sizeOf(valueType));\n                }\n                else {\n                    const TypedArrayType = getConstructorForDataFormat(valueType);\n                    value = new TypedArrayType(buffer, 0, attributeCount * valuesPerElement);\n                }\n                attributes[attribute] = {\n                    value,\n                    type: GL_TYPE_MAP[valueType],\n                    size: valuesPerElement\n                };\n                switch (attribute) {\n                    case 'color':\n                        attributes.color.normalized = true;\n                        break;\n                    case 'position':\n                    case 'region':\n                    case 'normal':\n                    default:\n                }\n                byteOffset = byteOffset + attributeCount * valuesPerElement * sizeOf(valueType);\n            }\n            else if (attribute !== 'uv0') {\n                break;\n            }\n        }\n    }\n    return { attributes, byteOffset };\n}\n/**\n * Parse buffer to return array of uint64 values\n *\n * @param buffer\n * @param elementsCount\n * @returns 64-bit array of values until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Values(buffer, elementsCount, attributeSize) {\n    const values = [];\n    const dataView = new DataView(buffer);\n    let offset = 0;\n    for (let index = 0; index < elementsCount; index++) {\n        // split 64-bit number into two 32-bit parts\n        const left = dataView.getUint32(offset, true);\n        const right = dataView.getUint32(offset + 4, true);\n        // combine the two 32-bit values\n        const value = left + 2 ** 32 * right;\n        values.push(value);\n        offset += attributeSize;\n    }\n    return new Uint32Array(values);\n}\nfunction parsePositions(attribute, options) {\n    const mbs = options.mbs;\n    const value = attribute.value;\n    const metadata = attribute.metadata;\n    const enuMatrix = new Matrix4();\n    const cartographicOrigin = new Vector3(mbs[0], mbs[1], mbs[2]);\n    const cartesianOrigin = new Vector3();\n    Ellipsoid.WGS84.cartographicToCartesian(cartographicOrigin, cartesianOrigin);\n    Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin, enuMatrix);\n    attribute.value = offsetsToCartesians(value, metadata, cartographicOrigin);\n    return enuMatrix;\n}\n/**\n * Converts position coordinates to absolute cartesian coordinates\n * @param vertices - \"position\" attribute data\n * @param metadata - When the geometry is DRACO compressed, contain position attribute's metadata\n *  https://github.com/Esri/i3s-spec/blob/master/docs/1.7/compressedAttributes.cmn.md\n * @param cartographicOrigin - Cartographic origin coordinates\n * @returns - converted \"position\" data\n */\nfunction offsetsToCartesians(vertices, metadata = {}, cartographicOrigin) {\n    const positions = new Float64Array(vertices.length);\n    const scaleX = (metadata['i3s-scale_x'] && metadata['i3s-scale_x'].double) || 1;\n    const scaleY = (metadata['i3s-scale_y'] && metadata['i3s-scale_y'].double) || 1;\n    for (let i = 0; i < positions.length; i += 3) {\n        positions[i] = vertices[i] * scaleX + cartographicOrigin.x;\n        positions[i + 1] = vertices[i + 1] * scaleY + cartographicOrigin.y;\n        positions[i + 2] = vertices[i + 2] + cartographicOrigin.z;\n    }\n    for (let i = 0; i < positions.length; i += 3) {\n        // @ts-ignore\n        Ellipsoid.WGS84.cartographicToCartesian(positions.subarray(i, i + 3), scratchVector);\n        positions[i] = scratchVector.x;\n        positions[i + 1] = scratchVector.y;\n        positions[i + 2] = scratchVector.z;\n    }\n    return positions;\n}\n/**\n * Get model matrix for loaded vertices\n * @param positions positions attribute\n * @returns Matrix4 - model matrix for geometry transformation\n */\nfunction getModelMatrix(positions) {\n    const metadata = positions.metadata;\n    const scaleX = metadata?.['i3s-scale_x']?.double || 1;\n    const scaleY = metadata?.['i3s-scale_y']?.double || 1;\n    const modelMatrix = new Matrix4();\n    modelMatrix[0] = scaleX;\n    modelMatrix[5] = scaleY;\n    return modelMatrix;\n}\n/**\n * Makes a glTF-compatible PBR material from an I3S material definition\n * @param materialDefinition - i3s material definition\n *  https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n * @param texture - texture image\n * @returns {object}\n */\nfunction makePbrMaterial(materialDefinition, texture) {\n    let pbrMaterial;\n    if (materialDefinition) {\n        pbrMaterial = {\n            ...materialDefinition,\n            pbrMetallicRoughness: materialDefinition.pbrMetallicRoughness\n                ? { ...materialDefinition.pbrMetallicRoughness }\n                : { baseColorFactor: [255, 255, 255, 255] }\n        };\n    }\n    else {\n        pbrMaterial = {\n            pbrMetallicRoughness: {}\n        };\n        if (texture) {\n            pbrMaterial.pbrMetallicRoughness.baseColorTexture = { texCoord: 0 };\n        }\n        else {\n            pbrMaterial.pbrMetallicRoughness.baseColorFactor = [255, 255, 255, 255];\n        }\n    }\n    // Set default 0.25 per spec https://github.com/Esri/i3s-spec/blob/master/docs/1.7/materialDefinitions.cmn.md\n    pbrMaterial.alphaCutoff = pbrMaterial.alphaCutoff || 0.25;\n    if (pbrMaterial.alphaMode) {\n        // I3S contain alphaMode in lowerCase\n        pbrMaterial.alphaMode = pbrMaterial.alphaMode.toUpperCase();\n    }\n    // Convert colors from [255,255,255,255] to [1,1,1,1]\n    if (pbrMaterial.emissiveFactor) {\n        pbrMaterial.emissiveFactor = convertColorFormat(pbrMaterial.emissiveFactor);\n    }\n    if (pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorFactor) {\n        pbrMaterial.pbrMetallicRoughness.baseColorFactor = convertColorFormat(pbrMaterial.pbrMetallicRoughness.baseColorFactor);\n    }\n    if (texture) {\n        setMaterialTexture(pbrMaterial, texture);\n    }\n    return pbrMaterial;\n}\n/**\n * Convert color from [255,255,255,255] to [1,1,1,1]\n * @param colorFactor - color array\n * @returns - new color array\n */\nfunction convertColorFormat(colorFactor) {\n    const normalizedColor = [...colorFactor];\n    for (let index = 0; index < colorFactor.length; index++) {\n        normalizedColor[index] = colorFactor[index] / 255;\n    }\n    return normalizedColor;\n}\n/**\n * Set texture in PBR material\n * @param {object} material - i3s material definition\n * @param image - texture image\n * @returns\n */\nfunction setMaterialTexture(material, image) {\n    const texture = { source: { image } };\n    // I3SLoader now support loading only one texture. This elseif sequence will assign this texture to one of\n    // properties defined in materialDefinition\n    if (material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture) {\n        material.pbrMetallicRoughness.baseColorTexture = {\n            ...material.pbrMetallicRoughness.baseColorTexture,\n            texture\n        };\n    }\n    else if (material.emissiveTexture) {\n        material.emissiveTexture = { ...material.emissiveTexture, texture };\n    }\n    else if (material.pbrMetallicRoughness &&\n        material.pbrMetallicRoughness.metallicRoughnessTexture) {\n        material.pbrMetallicRoughness.metallicRoughnessTexture = {\n            ...material.pbrMetallicRoughness.metallicRoughnessTexture,\n            texture\n        };\n    }\n    else if (material.normalTexture) {\n        material.normalTexture = { ...material.normalTexture, texture };\n    }\n    else if (material.occlusionTexture) {\n        material.occlusionTexture = { ...material.occlusionTexture, texture };\n    }\n}\n/**\n * Flatten feature ids using face ranges\n * @param normalizedFeatureAttributes\n * @returns\n */\nfunction flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes) {\n    const { id, faceRange } = normalizedFeatureAttributes;\n    if (!id || !faceRange) {\n        return;\n    }\n    const featureIds = id.value;\n    const range = faceRange.value;\n    const featureIdsLength = range[range.length - 1] + 1;\n    const orderedFeatureIndices = new Uint32Array(featureIdsLength * 3);\n    let featureIndex = 0;\n    let startIndex = 0;\n    for (let index = 1; index < range.length; index += 2) {\n        const fillId = Number(featureIds[featureIndex]);\n        const endValue = range[index];\n        const prevValue = range[index - 1];\n        const trianglesCount = endValue - prevValue + 1;\n        const endIndex = startIndex + trianglesCount * 3;\n        orderedFeatureIndices.fill(fillId, startIndex, endIndex);\n        featureIndex++;\n        startIndex = endIndex;\n    }\n    normalizedFeatureAttributes.id.value = orderedFeatureIndices;\n}\n/**\n * Flatten feature ids using featureIndices\n * @param attributes\n * @param featureIds\n * @returns\n */\nfunction flattenFeatureIdsByFeatureIndices(attributes, featureIds) {\n    const featureIndices = attributes.id.value;\n    const result = new Float32Array(featureIndices.length);\n    for (let index = 0; index < featureIndices.length; index++) {\n        result[index] = featureIds[featureIndices[index]];\n    }\n    attributes.id.value = result;\n}\n/**\n * Flatten feature ids using featureIndices\n * @param featureIndex\n * @returns\n */\nfunction getFeatureIdsFromFeatureIndexMetadata(featureIndex) {\n    return featureIndex?.metadata?.['i3s-feature-ids']?.intArray;\n}\n", "export var HeaderAttributeProperty;\n(function (HeaderAttributeProperty) {\n    HeaderAttributeProperty[\"vertexCount\"] = \"vertexCount\";\n    HeaderAttributeProperty[\"featureCount\"] = \"featureCount\";\n})(HeaderAttributeProperty || (HeaderAttributeProperty = {}));\n", "/**\n * Return URL seperated from search params\n * @param url - URL that might have search params\n * @returns url without search params\n */\nexport function getUrlWithoutParams(url) {\n    let urlWithoutParams;\n    try {\n        const urlObj = new URL(url);\n        urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;\n        // On Windows `new URL(url)` makes `C:\\...` -> `null\\...`\n        if (urlWithoutParams.startsWith('null')) {\n            urlWithoutParams = null;\n        }\n    }\n    catch (e) {\n        urlWithoutParams = null;\n    }\n    return urlWithoutParams || url;\n}\n/**\n * Generates url with token if it is exists.\n * @param url\n * @param token\n * @returns\n */\nexport function getUrlWithToken(url, token = null) {\n    return token ? `${url}?token=${token}` : url;\n}\n/**\n * Generates attribute urls for tile.\n * @param tile\n * @returns list of attribute urls\n */\nexport function generateTileAttributeUrls(url, tile) {\n    const { attributeData = [] } = tile;\n    const attributeUrls = [];\n    for (let index = 0; index < attributeData.length; index++) {\n        const attributeUrl = attributeData[index].href.replace('./', '');\n        attributeUrls.push(`${url}/${attributeUrl}`);\n    }\n    return attributeUrls;\n}\n/**\n * Generates attribute urls for tileset based on tileset and resource\n * @param tileset - tileset metadata\n * @param url - tileset base url\n * @param resource - resource id per I3S spec\n * @returns {Array}\n */\nexport function generateTilesetAttributeUrls(tileset, url, resource) {\n    const attributeUrls = [];\n    const { attributeStorageInfo = [] } = tileset;\n    for (let index = 0; index < attributeStorageInfo.length; index++) {\n        const fileName = attributeStorageInfo[index].key;\n        attributeUrls.push(`${url}/nodes/${resource}/attributes/${fileName}/0`);\n    }\n    return attributeUrls;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright vis.gl contributors\nimport { parseI3STileContent } from \"./lib/parsers/parse-i3s-tile-content.js\";\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.3.2\" !== 'undefined' ? \"4.3.2\" : 'latest';\n/**\n * Loader for I3S - Indexed 3D Scene Layer\n */\nexport const I3SContentLoader = {\n    dataType: null,\n    batchType: null,\n    name: 'I3S Content (Indexed Scene Layers)',\n    id: 'i3s-content',\n    module: 'i3s',\n    worker: true,\n    version: VERSION,\n    mimeTypes: ['application/octet-stream'],\n    parse,\n    extensions: ['bin'],\n    options: {\n        'i3s-content': {}\n    }\n};\nasync function parse(data, options, context) {\n    const { tile, _tileOptions, tileset, _tilesetOptions } = options?.i3s || {};\n    const tileOptions = _tileOptions || tile;\n    const tilesetOptions = _tilesetOptions || tileset;\n    if (!tileOptions || !tilesetOptions) {\n        return null;\n    }\n    return await parseI3STileContent(data, tileOptions, tilesetOptions, options, context);\n}\n", "import { OrientedBoundingBox } from '@math.gl/culling';\nimport { Ellipsoid } from '@math.gl/geospatial';\nimport { load } from '@loaders.gl/core';\nimport { TILE_TYPE, TILE_REFINEMENT, TILESET_TYPE } from '@loaders.gl/tiles';\nimport I3SNodePagesTiles from \"../helpers/i3s-nodepages-tiles.js\";\nimport { generateTileAttributeUrls, getUrlWithToken, getUrlWithoutParams } from \"../utils/url-utils.js\";\nimport { I3SLoader } from \"../../i3s-loader.js\";\nexport function normalizeTileData(tile, context) {\n    const url = context.url || '';\n    let contentUrl;\n    if (tile.geometryData) {\n        contentUrl = `${url}/${tile.geometryData[0].href}`;\n    }\n    let textureUrl;\n    if (tile.textureData) {\n        textureUrl = `${url}/${tile.textureData[0].href}`;\n    }\n    let attributeUrls;\n    if (tile.attributeData) {\n        attributeUrls = generateTileAttributeUrls(url, tile);\n    }\n    const children = tile.children || [];\n    return normalizeTileNonUrlData({\n        ...tile,\n        children,\n        url,\n        contentUrl,\n        textureUrl,\n        textureFormat: 'jpg', // `jpg` format will cause `ImageLoader` usage that will be able to handle `png` as well\n        attributeUrls,\n        isDracoGeometry: false\n    });\n}\nexport function normalizeTileNonUrlData(tile) {\n    const boundingVolume = {};\n    let mbs = [0, 0, 0, 1];\n    if (tile.mbs) {\n        mbs = tile.mbs;\n        boundingVolume.sphere = [\n            ...Ellipsoid.WGS84.cartographicToCartesian(tile.mbs.slice(0, 3)), // cartesian center of sphere\n            tile.mbs[3] // radius of sphere\n        ];\n    }\n    else if (tile.obb) {\n        boundingVolume.box = [\n            ...Ellipsoid.WGS84.cartographicToCartesian(tile.obb.center), // cartesian center of box\n            ...tile.obb.halfSize, // halfSize\n            ...tile.obb.quaternion // quaternion\n        ];\n        const obb = new OrientedBoundingBox().fromCenterHalfSizeQuaternion(boundingVolume.box.slice(0, 3), tile.obb.halfSize, tile.obb.quaternion);\n        const boundingSphere = obb.getBoundingSphere();\n        boundingVolume.sphere = [...boundingSphere.center, boundingSphere.radius];\n        mbs = [...tile.obb.center, boundingSphere.radius];\n    }\n    const lodMetricType = tile.lodSelection?.[0].metricType;\n    const lodMetricValue = tile.lodSelection?.[0].maxError;\n    const type = TILE_TYPE.MESH;\n    /**\n     * I3S specification supports only REPLACE\n     */\n    const refine = TILE_REFINEMENT.REPLACE;\n    return { ...tile, mbs, boundingVolume, lodMetricType, lodMetricValue, type, refine };\n}\nexport async function normalizeTilesetData(tileset, options, context) {\n    const url = getUrlWithoutParams(context.url || '');\n    let nodePagesTile;\n    let root;\n    if (tileset.nodePages) {\n        nodePagesTile = new I3SNodePagesTiles(tileset, url, options);\n        root = await nodePagesTile.formTileFromNodePages(0);\n    }\n    else {\n        const parseOptions = options.i3s;\n        const rootNodeUrl = getUrlWithToken(`${url}/nodes/root`, parseOptions.token);\n        // eslint-disable-next-line no-use-before-define\n        root = await load(rootNodeUrl, I3SLoader, {\n            ...options,\n            i3s: {\n                // @ts-expect-error options is not properly typed\n                ...options.i3s,\n                loadContent: false, isTileHeader: true, isTileset: false\n            }\n        });\n    }\n    return {\n        ...tileset,\n        loader: I3SLoader,\n        url,\n        basePath: url,\n        type: TILESET_TYPE.I3S,\n        nodePagesTile,\n        // @ts-expect-error\n        root,\n        lodMetricType: root.lodMetricType,\n        lodMetricValue: root.lodMetricValue\n    };\n}\n", "import { load } from '@loaders.gl/core';\nimport { getSupportedGPUTextureFormats, selectSupportedBasisFormat } from '@loaders.gl/textures';\nimport { I3SNodePageLoader } from \"../../i3s-node-page-loader.js\";\nimport { normalizeTileNonUrlData } from \"../parsers/parse-i3s.js\";\nimport { getUrlWithToken, generateTilesetAttributeUrls } from \"../utils/url-utils.js\";\n/**\n * class I3SNodePagesTiles - loads nodePages and form i3s tiles from them\n */\nexport default class I3SNodePagesTiles {\n    tileset;\n    nodePages = [];\n    pendingNodePages = [];\n    nodesPerPage;\n    options;\n    lodSelectionMetricType;\n    textureDefinitionsSelectedFormats = [];\n    nodesInNodePages;\n    url;\n    textureLoaderOptions = {};\n    /**\n     * @constructs\n     * Create a I3SNodePagesTiles instance.\n     * @param tileset - i3s tileset header ('layers/0')\n     * @param url - tileset url\n     * @param options - i3s loader options\n     */\n    constructor(tileset, url = '', options) {\n        this.tileset = { ...tileset }; // spread the tileset to avoid circular reference\n        this.url = url;\n        this.nodesPerPage = tileset.nodePages?.nodesPerPage || 64;\n        this.lodSelectionMetricType = tileset.nodePages?.lodSelectionMetricType;\n        this.options = options;\n        this.nodesInNodePages = 0;\n        this.initSelectedFormatsForTextureDefinitions(tileset);\n    }\n    /**\n     * Loads some nodePage and return a particular node from it\n     * @param id - id of node through all node pages\n     */\n    async getNodeById(id) {\n        const pageIndex = Math.floor(id / this.nodesPerPage);\n        if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {\n            const nodePageUrl = getUrlWithToken(`${this.url}/nodepages/${pageIndex}`, \n            // @ts-expect-error this.options is not properly typed\n            this.options.i3s?.token);\n            this.pendingNodePages[pageIndex] = {\n                status: 'Pending',\n                promise: load(nodePageUrl, I3SNodePageLoader, this.options)\n            };\n            this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n            this.nodesInNodePages += this.nodePages[pageIndex].nodes.length;\n            this.pendingNodePages[pageIndex].status = 'Done';\n        }\n        if (this.pendingNodePages[pageIndex].status === 'Pending') {\n            this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n        }\n        const nodeIndex = id % this.nodesPerPage;\n        return this.nodePages[pageIndex].nodes[nodeIndex];\n    }\n    /**\n     * Forms tile header using node and tileset data\n     * @param id - id of node through all node pages\n     */\n    // eslint-disable-next-line complexity, max-statements\n    async formTileFromNodePages(id) {\n        const node = await this.getNodeById(id);\n        const children = [];\n        const childNodesPromises = [];\n        for (const child of node.children || []) {\n            childNodesPromises.push(this.getNodeById(child));\n        }\n        const childNodes = await Promise.all(childNodesPromises);\n        for (const childNode of childNodes) {\n            children.push({\n                id: childNode.index.toString(),\n                obb: childNode.obb\n            });\n        }\n        let contentUrl;\n        let textureUrl;\n        let materialDefinition;\n        let textureFormat = 'jpg';\n        let attributeUrls = [];\n        let isDracoGeometry = false;\n        if (node && node.mesh) {\n            // Get geometry resource URL and type (compressed / non-compressed)\n            const { url, isDracoGeometry: isDracoGeometryResult } = (node.mesh.geometry &&\n                this.getContentUrl(node.mesh.geometry)) || { isDracoGeometry: false };\n            contentUrl = url;\n            isDracoGeometry = isDracoGeometryResult;\n            const { textureData, materialDefinition: nodeMaterialDefinition } = this.getInformationFromMaterial(node.mesh.material);\n            materialDefinition = nodeMaterialDefinition;\n            textureFormat = textureData.format || textureFormat;\n            if (textureData.name) {\n                textureUrl = `${this.url}/nodes/${node.mesh.material.resource}/textures/${textureData.name}`;\n            }\n            if (this.tileset.attributeStorageInfo) {\n                attributeUrls = generateTilesetAttributeUrls(this.tileset, this.url, node.mesh.attribute.resource);\n            }\n        }\n        const lodSelection = this.getLodSelection(node);\n        return normalizeTileNonUrlData({\n            id: id.toString(),\n            lodSelection,\n            obb: node.obb,\n            contentUrl,\n            textureUrl,\n            attributeUrls,\n            materialDefinition,\n            textureFormat,\n            textureLoaderOptions: this.textureLoaderOptions,\n            children,\n            isDracoGeometry\n        });\n    }\n    /**\n     * Forms url and type of geometry resource by nodepage's data and `geometryDefinitions` in the tileset\n     * @param - data about the node's mesh from the nodepage\n     * @returns -\n     *   {string} url - url to the geometry resource\n     *   {boolean} isDracoGeometry - whether the geometry resource contain DRACO compressed geometry\n     */\n    getContentUrl(meshGeometryData) {\n        let result = null;\n        // @ts-ignore\n        const geometryDefinition = this.tileset.geometryDefinitions[meshGeometryData.definition];\n        let geometryIndex = -1;\n        // Try to find DRACO geometryDefinition of `useDracoGeometry` option is set\n        // @ts-expect-error this.options is not properly typed\n        if (this.options.i3s && this.options.i3s.useDracoGeometry) {\n            geometryIndex = geometryDefinition.geometryBuffers.findIndex((buffer) => buffer.compressedAttributes && buffer.compressedAttributes.encoding === 'draco');\n        }\n        // If DRACO geometry is not applicable try to select non-compressed geometry\n        if (geometryIndex === -1) {\n            geometryIndex = geometryDefinition.geometryBuffers.findIndex((buffer) => !buffer.compressedAttributes);\n        }\n        if (geometryIndex !== -1) {\n            const isDracoGeometry = Boolean(geometryDefinition.geometryBuffers[geometryIndex].compressedAttributes);\n            result = {\n                url: `${this.url}/nodes/${meshGeometryData.resource}/geometries/${geometryIndex}`,\n                isDracoGeometry\n            };\n        }\n        return result;\n    }\n    /**\n     * Forms 1.6 compatible LOD selection object from a nodepage's node data\n     * @param node - a node from nodepage\n     * @returns- Array of LodSelection\n     */\n    getLodSelection(node) {\n        const lodSelection = [];\n        if (this.lodSelectionMetricType === 'maxScreenThresholdSQ') {\n            lodSelection.push({\n                metricType: 'maxScreenThreshold',\n                // @ts-ignore\n                maxError: Math.sqrt(node.lodThreshold / (Math.PI * 0.25))\n            });\n        }\n        lodSelection.push({\n            metricType: this.lodSelectionMetricType,\n            // @ts-ignore\n            maxError: node.lodThreshold\n        });\n        return lodSelection;\n    }\n    /**\n     * Returns information about texture and material from `materialDefinitions`\n     * @param material - material data from nodepage\n     * @returns - Couple {textureData, materialDefinition}\n     * {string} textureData.name - path name of the texture\n     * {string} textureData.format - format of the texture\n     * materialDefinition - PBR-like material definition from `materialDefinitions`\n     */\n    getInformationFromMaterial(material) {\n        const informationFromMaterial = { textureData: { name: null } };\n        if (material) {\n            const materialDefinition = this.tileset.materialDefinitions?.[material.definition];\n            if (materialDefinition) {\n                informationFromMaterial.materialDefinition = materialDefinition;\n                const textureSetDefinitionIndex = materialDefinition?.pbrMetallicRoughness?.baseColorTexture?.textureSetDefinitionId;\n                if (typeof textureSetDefinitionIndex === 'number') {\n                    informationFromMaterial.textureData =\n                        this.textureDefinitionsSelectedFormats[textureSetDefinitionIndex] ||\n                            informationFromMaterial.textureData;\n                }\n            }\n        }\n        return informationFromMaterial;\n    }\n    /**\n     * Sets preferable and supported format for each textureDefinition of the tileset\n     * @param tileset - I3S layer data\n     * @returns\n     */\n    initSelectedFormatsForTextureDefinitions(tileset) {\n        this.textureDefinitionsSelectedFormats = [];\n        const possibleI3sFormats = this.getSupportedTextureFormats();\n        const textureSetDefinitions = tileset.textureSetDefinitions || [];\n        for (const textureSetDefinition of textureSetDefinitions) {\n            const formats = (textureSetDefinition && textureSetDefinition.formats) || [];\n            let selectedFormat = null;\n            for (const i3sFormat of possibleI3sFormats) {\n                const format = formats.find((value) => value.format === i3sFormat);\n                if (format) {\n                    selectedFormat = format;\n                    break;\n                }\n            }\n            // For I3S 1.8 need to define basis target format to decode\n            if (selectedFormat && selectedFormat.format === 'ktx2') {\n                this.textureLoaderOptions.basis = {\n                    format: selectSupportedBasisFormat(),\n                    containerFormat: 'ktx2',\n                    module: 'encoder'\n                };\n            }\n            this.textureDefinitionsSelectedFormats.push(selectedFormat);\n        }\n    }\n    /**\n     * Returns the array of supported texture format\n     * @returns list of format strings\n     */\n    getSupportedTextureFormats() {\n        const formats = [];\n        // @ts-expect-error this.options is not properly typed\n        if (!this.options.i3s || this.options.i3s.useCompressedTextures) {\n            // I3S 1.7 selection\n            const supportedCompressedFormats = getSupportedGPUTextureFormats();\n            // List of possible in i3s formats:\n            // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md\n            if (supportedCompressedFormats.has('etc2')) {\n                formats.push('ktx-etc2');\n            }\n            if (supportedCompressedFormats.has('dxt')) {\n                formats.push('dds');\n            }\n            // I3S 1.8 selection\n            // ktx2 wraps basis texture which at the edge case can be decoded as uncompressed image\n            formats.push('ktx2');\n        }\n        formats.push('jpg');\n        formats.push('png');\n        return formats;\n    }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright vis.gl contributors\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.3.2\" !== 'undefined' ? \"4.3.2\" : 'latest';\n/**\n * Loader for I3S node pages\n */\nexport const I3SNodePageLoader = {\n    dataType: null,\n    batchType: null,\n    name: 'I3S Node Page',\n    id: 'i3s-node-page',\n    module: 'i3s',\n    version: VERSION,\n    mimeTypes: ['application/json'],\n    parse: parseNodePage,\n    extensions: ['json'],\n    options: {\n        i3s: {}\n    }\n};\nasync function parseNodePage(data, options) {\n    return JSON.parse(new TextDecoder().decode(data));\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright vis.gl contributors\nimport { DataViewFile } from '@loaders.gl/loader-utils';\nimport { parseSLPKArchive } from \"./lib/parsers/parse-slpk/parse-slpk.js\";\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.3.2\" !== 'undefined' ? \"4.3.2\" : 'latest';\n/**\n * Loader for SLPK - Scene Layer Package (Archive I3S format)\n * @todo - this reloads the entire archive for every tile, should be optimized\n * @todo - this should be updated to use `parseFile` and ReadableFile\n */\nexport const SLPKLoader = {\n    dataType: null,\n    batchType: null,\n    name: 'I3S SLPK (Scene Layer Package)',\n    id: 'slpk',\n    module: 'i3s',\n    version: VERSION,\n    mimeTypes: ['application/octet-stream'],\n    extensions: ['slpk'],\n    options: {},\n    parse: async (data, options = {}) => {\n        const archive = await parseSLPKArchive(new DataViewFile(new DataView(data)));\n        return archive.getFile(options.slpk?.path ?? '', options.slpk?.pathMode);\n    }\n};\n", "import { parseZipCDFileHeader, CD_HEADER_SIGNATURE, parseZipLocalFileHeader, searchFromTheEnd, parseHashTable, makeHashTableFromZipHeaders } from '@loaders.gl/zip';\nimport { SLPKArchive } from \"./slpk-archieve.js\";\n/**\n * Creates slpk file handler from raw file\n * @param fileProvider raw file data\n * @param cb is called with information message during parsing\n * @returns slpk file handler\n */\nexport async function parseSLPKArchive(fileProvider, cb, fileName) {\n    const hashCDOffset = await searchFromTheEnd(fileProvider, CD_HEADER_SIGNATURE);\n    const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);\n    let hashTable;\n    if (cdFileHeader?.fileName !== '@specialIndexFileHASH128@') {\n        hashTable = await makeHashTableFromZipHeaders(fileProvider);\n        cb?.('SLPK doesnt contain hash file, hash info has been composed according to zip archive headers');\n    }\n    else {\n        // cb?.('SLPK contains hash file');\n        const localFileHeader = await parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, fileProvider);\n        if (!localFileHeader) {\n            throw new Error('corrupted SLPK');\n        }\n        const fileDataOffset = localFileHeader.fileDataOffset;\n        const hashFile = await fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);\n        hashTable = parseHashTable(hashFile);\n    }\n    return new SLPKArchive(fileProvider, hashTable, fileName);\n}\n", "import { MD5Hash } from '@loaders.gl/crypto';\nimport { IndexedArchive, parseZipLocalFileHeader } from '@loaders.gl/zip';\nimport { GZipCompression } from '@loaders.gl/compression';\n/** Description of real paths for different file types */\nconst PATH_DESCRIPTIONS = [\n    {\n        test: /^$/,\n        extensions: ['3dSceneLayer.json.gz']\n    },\n    {\n        test: /nodepages\\/\\d+$/,\n        extensions: ['.json.gz']\n    },\n    {\n        test: /sublayers\\/\\d+$/,\n        extensions: ['/3dSceneLayer.json.gz']\n    },\n    {\n        test: /nodes\\/(\\d+|root)$/,\n        extensions: ['/3dNodeIndexDocument.json.gz']\n    },\n    {\n        test: /nodes\\/\\d+\\/textures\\/.+$/,\n        extensions: ['.jpg', '.png', '.bin.dds.gz', '.ktx', '.ktx2']\n    },\n    {\n        test: /nodes\\/\\d+\\/geometries\\/\\d+$/,\n        extensions: ['.bin.gz', '.draco.gz']\n    },\n    {\n        test: /nodes\\/\\d+\\/attributes\\/f_\\d+\\/\\d+$/,\n        extensions: ['.bin.gz']\n    },\n    {\n        test: /statistics\\/(f_\\d+\\/\\d+|summary)$/,\n        extensions: ['.json.gz']\n    },\n    {\n        test: /nodes\\/\\d+\\/shared$/,\n        extensions: ['/sharedResource.json.gz']\n    }\n];\n/**\n * Class for handling information about slpk file\n */\nexport class SLPKArchive extends IndexedArchive {\n    // Maps hex-encoded md5 filename hashes to bigint offsets into the archive\n    hashTable;\n    _textEncoder = new TextEncoder();\n    _textDecoder = new TextDecoder();\n    _md5Hash = new MD5Hash();\n    /**\n     * Constructor\n     * @param fileProvider - instance of a binary data reader\n     * @param hashTable - pre-loaded hashTable. If presented, getFile will skip reading the hash file\n     * @param fileName - name of the archive. It is used to add to an URL of a loader context\n     */\n    constructor(fileProvider, hashTable, fileName) {\n        super(fileProvider, hashTable, fileName);\n        this.hashTable = hashTable;\n    }\n    /**\n     * Returns file with the given path from slpk archive\n     * @param path - path inside the slpk\n     * @param mode - currently only raw mode supported\n     * @returns buffer with ready to use file\n     */\n    async getFile(path, mode = 'raw') {\n        if (mode === 'http') {\n            const extensions = PATH_DESCRIPTIONS.find((val) => val.test.test(path))?.extensions;\n            if (extensions) {\n                let data;\n                for (const ext of extensions) {\n                    data = await this.getDataByPath(`${path}${ext}`);\n                    if (data) {\n                        break;\n                    }\n                }\n                if (data) {\n                    return data;\n                }\n            }\n        }\n        if (mode === 'raw') {\n            const decompressedFile = await this.getDataByPath(`${path}.gz`);\n            if (decompressedFile) {\n                return decompressedFile;\n            }\n            const fileWithoutCompression = await this.getFileBytes(path);\n            if (fileWithoutCompression) {\n                return fileWithoutCompression;\n            }\n        }\n        throw new Error(`No such file in the archive: ${path}`);\n    }\n    /**\n     * returning uncompressed data for paths that ends with .gz and raw data for all other paths\n     * @param path - path inside the archive\n     * @returns buffer with the file data\n     */\n    async getDataByPath(path) {\n        // sometimes paths are not in lower case when hash file is created,\n        // so first we're looking for lower case file name and then for original one\n        let data = await this.getFileBytes(path.toLocaleLowerCase());\n        if (!data) {\n            data = await this.getFileBytes(path);\n        }\n        if (!data) {\n            return undefined;\n        }\n        if (/\\.gz$/.test(path)) {\n            const compression = new GZipCompression();\n            const decompressedData = await compression.decompress(data);\n            return decompressedData;\n        }\n        return data;\n    }\n    /**\n     * Trying to get raw file data by address\n     * @param path - path inside the archive\n     * @returns buffer with the raw file data\n     */\n    async getFileBytes(path) {\n        let compressedFile;\n        if (this.hashTable) {\n            const binaryPath = this._textEncoder.encode(path);\n            const nameHash = await this._md5Hash.hash(binaryPath.buffer, 'hex');\n            const offset = this.hashTable[nameHash];\n            if (offset === undefined) {\n                return undefined;\n            }\n            const localFileHeader = await parseZipLocalFileHeader(offset, this.fileProvider);\n            if (!localFileHeader) {\n                return undefined;\n            }\n            compressedFile = await this.fileProvider.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);\n        }\n        else {\n            try {\n                compressedFile = await this.getFileWithoutHash(path);\n            }\n            catch {\n                compressedFile = undefined;\n            }\n        }\n        return compressedFile;\n    }\n}\n", "import { load } from '@loaders.gl/core';\nimport { parseI3STileAttribute } from \"./lib/parsers/parse-i3s-attribute.js\";\nimport { getUrlWithToken } from \"./lib/utils/url-utils.js\";\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.3.2\" !== 'undefined' ? \"4.3.2\" : 'latest';\nconst EMPTY_VALUE = '';\nconst REJECTED_STATUS = 'rejected';\n/**\n * Loader for I3S attributes\n */\nexport const I3SAttributeLoader = {\n    dataType: null,\n    batchType: null,\n    name: 'I3S Attribute',\n    id: 'i3s-attribute',\n    module: 'i3s',\n    version: VERSION,\n    mimeTypes: ['application/binary'],\n    parse: async (arrayBuffer, options) => parseI3STileAttribute(arrayBuffer, options),\n    extensions: ['bin'],\n    options: {},\n    binary: true\n};\n// TODO - these seem to use the loader rather than being part of the loader. Move to different file...\n/**\n * Load attributes based on feature id\n * @param {Object} tile\n * @param {number} featureId\n * @param {Object} options\n * @returns {Promise}\n */\n// eslint-disable-next-line complexity\nexport async function loadFeatureAttributes(tile, featureId, options = {}) {\n    const { attributeStorageInfo, attributeUrls, tilesetFields } = getAttributesData(tile);\n    if (!attributeStorageInfo || !attributeUrls || featureId < 0) {\n        return null;\n    }\n    let attributes = [];\n    const attributeLoadPromises = [];\n    for (let index = 0; index < attributeStorageInfo.length; index++) {\n        // @ts-ignore\n        const url = getUrlWithToken(attributeUrls[index], options.i3s?.token);\n        const attributeName = attributeStorageInfo[index].name;\n        const attributeType = getAttributeValueType(attributeStorageInfo[index]);\n        const loadOptions = { ...options, attributeName, attributeType };\n        const promise = load(url, I3SAttributeLoader, loadOptions);\n        attributeLoadPromises.push(promise);\n    }\n    try {\n        attributes = await Promise.allSettled(attributeLoadPromises);\n    }\n    catch (error) {\n        // do nothing\n    }\n    if (!attributes.length) {\n        return null;\n    }\n    return generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields);\n}\n/**\n * Gets attributes data from tile.\n * @param tile\n * @returns\n */\nfunction getAttributesData(tile) {\n    const attributeStorageInfo = tile.tileset?.tileset?.attributeStorageInfo;\n    const attributeUrls = tile.header?.attributeUrls;\n    const tilesetFields = tile.tileset?.tileset?.fields || [];\n    return { attributeStorageInfo, attributeUrls, tilesetFields };\n}\n/**\n * Get attribute value type based on property names\n * @param {Object} attribute\n * @returns {String}\n */\nexport function getAttributeValueType(attribute) {\n    if (attribute.hasOwnProperty('objectIds')) {\n        return 'Oid32';\n    }\n    else if (attribute.hasOwnProperty('attributeValues')) {\n        return attribute.attributeValues.valueType;\n    }\n    return '';\n}\n/**\n * Find in attributeStorageInfo attribute name responsible for feature ids list.\n * @param attributeStorageInfo\n * @returns Feature ids attribute name\n */\nfunction getFeatureIdsAttributeName(attributeStorageInfo) {\n    const objectIdsAttribute = attributeStorageInfo.find(attribute => attribute.name.includes('OBJECTID'));\n    return objectIdsAttribute?.name;\n}\n/**\n * Generates mapping featureId to feature attributes\n * @param {Array} attributes\n * @param {Object} attributeStorageInfo\n * @param {number} featureId\n * @returns {Object}\n */\nfunction generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields) {\n    const objectIdsAttributeName = getFeatureIdsAttributeName(attributeStorageInfo);\n    const objectIds = attributes.find((attribute) => attribute.value[objectIdsAttributeName]);\n    if (!objectIds) {\n        return null;\n    }\n    const attributeIndex = objectIds.value[objectIdsAttributeName].indexOf(featureId);\n    if (attributeIndex < 0) {\n        return null;\n    }\n    return getFeatureAttributesByIndex(attributes, attributeIndex, attributeStorageInfo, tilesetFields);\n}\n/**\n * Generates attribute object for feature mapping by feature id\n * @param {Array} attributes\n * @param {Number} featureIdIndex\n * @param {Object} attributeStorageInfo\n * @returns {Object}\n */\nfunction getFeatureAttributesByIndex(attributes, featureIdIndex, attributeStorageInfo, tilesetFields) {\n    const attributesObject = {};\n    for (let index = 0; index < attributeStorageInfo.length; index++) {\n        const attributeName = attributeStorageInfo[index].name;\n        const codedValues = getAttributeCodedValues(attributeName, tilesetFields);\n        const attribute = getAttributeByIndexAndAttributeName(attributes, index, attributeName);\n        attributesObject[attributeName] = formatAttributeValue(attribute, featureIdIndex, codedValues);\n    }\n    return attributesObject;\n}\n/**\n * Get coded values list from tileset.\n * @param attributeName\n * @param tilesetFields\n */\nfunction getAttributeCodedValues(attributeName, tilesetFields) {\n    const attributeField = tilesetFields\n        .find(field => field.name === attributeName || field.alias === attributeName);\n    return attributeField?.domain?.codedValues || [];\n}\n/**\n * Return attribute value if it presents in atrributes list\n * @param {array} attributes\n * @param {number} index\n * @param {string} attributesName\n */\nfunction getAttributeByIndexAndAttributeName(attributes, index, attributesName) {\n    const attributeObject = attributes[index];\n    if (attributeObject.status === REJECTED_STATUS) {\n        return null;\n    }\n    return attributeObject.value[attributesName];\n}\n/**\n * Do formatting of attribute values or return empty string.\n * @param {Array} attribute\n * @param {Number} featureIdIndex\n * @returns {String}\n */\nfunction formatAttributeValue(attribute, featureIdIndex, codedValues) {\n    let value = EMPTY_VALUE;\n    if (attribute && (featureIdIndex in attribute)) {\n        // eslint-disable-next-line no-control-regex\n        value = String(attribute[featureIdIndex]).replace(/\\u0000|NaN/g, '').trim();\n    }\n    // Check if coded values are existed. If so we use them.\n    if (codedValues.length) {\n        const codeValue = codedValues.find(codedValue => codedValue.code === Number(value));\n        value = codeValue?.name || EMPTY_VALUE;\n    }\n    return value;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { STRING_ATTRIBUTE_TYPE, OBJECT_ID_ATTRIBUTE_TYPE, FLOAT_64_TYPE, INT_16_ATTRIBUTE_TYPE } from \"./constants.js\";\n/**\n * Get particular tile and creates attribute object inside.\n * @param  arrayBuffer\n * @param {Object} options\n * @returns {Promise<object>}\n */\nexport function parseI3STileAttribute(arrayBuffer, options) {\n    const { attributeName, attributeType } = options;\n    if (!attributeName) {\n        return {};\n    }\n    return {\n        [attributeName]: attributeType ? parseAttribute(attributeType, arrayBuffer) : null\n    };\n}\n/**\n * Parse attributes based on attribute type.\n * @param {String} attributeType\n * @param  arrayBuffer\n * @returns\n */\nfunction parseAttribute(attributeType, arrayBuffer) {\n    switch (attributeType) {\n        case STRING_ATTRIBUTE_TYPE:\n            return parseStringsAttribute(arrayBuffer);\n        case OBJECT_ID_ATTRIBUTE_TYPE:\n            return parseShortNumberAttribute(arrayBuffer);\n        case FLOAT_64_TYPE:\n            return parseFloatAttribute(arrayBuffer);\n        case INT_16_ATTRIBUTE_TYPE:\n            return parseInt16ShortNumberAttribute(arrayBuffer);\n        default:\n            return parseShortNumberAttribute(arrayBuffer);\n    }\n}\n/**\n * Parse short number attribute.\n * Short Integer spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.7/attributeStorageInfo.cmn.md\n * @param  arrayBuffer\n * @returns\n */\nfunction parseShortNumberAttribute(arrayBuffer) {\n    const countOffset = 4;\n    return new Uint32Array(arrayBuffer, countOffset);\n}\n/**\n * Parse Int16 short number attribute.\n * Parsing of such data is not documented. Added to handle Building Scene Layer Tileset attributes data.\n * @param  arrayBuffer\n * @returns\n */\nfunction parseInt16ShortNumberAttribute(arrayBuffer) {\n    const countOffset = 4;\n    return new Int16Array(arrayBuffer, countOffset);\n}\n/**\n * Parse float attribute.\n * Double Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.7/attributeStorageInfo.cmn.md\n * @param  arrayBuffer\n * @returns\n */\nfunction parseFloatAttribute(arrayBuffer) {\n    const countOffset = 8;\n    return new Float64Array(arrayBuffer, countOffset);\n}\n/**\n * Parse string attribute.\n * String spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.7/attributeStorageInfo.cmn.md\n * @param arrayBuffer\n * @returns list of strings\n */\nfunction parseStringsAttribute(arrayBuffer) {\n    const stringsCountOffset = 0;\n    const dataOffset = 8;\n    const bytesPerStringSize = 4;\n    const stringsArray = [];\n    try {\n        // Use DataView to avoid multiple of 4 error on Uint32Array constructor\n        const stringsCount = new DataView(arrayBuffer, stringsCountOffset, bytesPerStringSize).getUint32(stringsCountOffset, true);\n        const stringSizes = new Uint32Array(arrayBuffer, dataOffset, stringsCount);\n        let stringOffset = dataOffset + stringsCount * bytesPerStringSize;\n        for (const stringByteSize of stringSizes) {\n            const textDecoder = new TextDecoder('utf-8');\n            const stringAttribute = new Uint8Array(arrayBuffer, stringOffset, stringByteSize);\n            stringsArray.push(textDecoder.decode(stringAttribute));\n            stringOffset += stringByteSize;\n        }\n    }\n    catch (error) {\n        console.error('Parse string attribute error: ', error.message); // eslint-disable-line\n    }\n    return stringsArray;\n}\n", "const OBJECT_3D_LAYER_TYPE = '3DObject';\n/**\n * Parses Builiding Scene Layer and creates tileset\n * @param data\n * @param options\n * @param context\n */\nexport async function parseBuildingSceneLayer(data, url) {\n    const layer0 = JSON.parse(new TextDecoder().decode(data));\n    const { sublayers } = layer0;\n    return {\n        header: layer0,\n        sublayers: parseSublayersTree(sublayers, url)\n    };\n}\n/**\n * Recursively parses Building Scene Layer sublayers.\n * @param sublayers\n * @param url\n */\nfunction parseSublayersTree(sublayers, url) {\n    let layers = [];\n    for (let index = 0; index < sublayers.length; index++) {\n        const subLayer = sublayers[index];\n        const { id, layerType, visibility = true, ...rest } = subLayer;\n        // Add support only for 3DObject layer type for I3S purposes.\n        if (layerType === OBJECT_3D_LAYER_TYPE) {\n            const sublayerUrl = `${url}/sublayers/${id}`;\n            layers.push({\n                url: sublayerUrl,\n                id,\n                layerType,\n                visibility,\n                ...rest\n            });\n        }\n        if (subLayer?.sublayers?.length) {\n            layers = [...layers, ...parseSublayersTree(subLayer.sublayers, url)];\n        }\n    }\n    return layers;\n}\n", "import { parseBuildingSceneLayer } from \"./lib/parsers/parse-i3s-building-scene-layer.js\";\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.3.2\" !== 'undefined' ? \"4.3.2\" : 'latest';\n/**\n * Loader for I3S - Building Scene Layer\n */\nexport const I3SBuildingSceneLayerLoader = {\n    dataType: null,\n    batchType: null,\n    name: 'I3S Building Scene Layer',\n    id: 'i3s-building-scene-layer',\n    module: 'i3s',\n    version: VERSION,\n    mimeTypes: ['application/json'],\n    parse,\n    extensions: ['json'],\n    options: {}\n};\nasync function parse(data, options, context) {\n    if (!context?.url) {\n        throw new Error('Url is not provided');\n    }\n    return parseBuildingSceneLayer(data, context.url);\n}\n", "import { JSONLoader, load } from '@loaders.gl/core';\n/**\n * WKID, or Well-Known ID, of the CRS. Specify either WKID or WKT of the CRS.\n * Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/spatialReference.cmn.md\n */\nconst SUPPORTED_WKID = 4326;\nconst ARCGIS_SCENE_SERVER_LAYER_TYPE = 'ArcGISSceneServiceLayer';\nconst BUILDING_SCENE_LAYER = 'BuildingSceneLayer';\nconst INTEGRATED_MESH_LAYER = 'IntegratedMeshLayer';\nconst GROUP_LAYER = 'GroupLayer';\n/**\n * Supported layers list\n * Possible operational layers in WebScene: https://developers.arcgis.com/web-scene-specification/objects/operationalLayers/\n */\nconst SUPPORTED_LAYERS_TYPES = [\n    ARCGIS_SCENE_SERVER_LAYER_TYPE,\n    INTEGRATED_MESH_LAYER,\n    BUILDING_SCENE_LAYER,\n    GROUP_LAYER\n];\nconst NO_AVAILABLE_SUPPORTED_LAYERS_ERROR = 'NO_AVAILABLE_SUPPORTED_LAYERS_ERROR';\nconst NOT_SUPPORTED_CRS_ERROR = 'NOT_SUPPORTED_CRS_ERROR';\n/**\n * Provides additional information in the exception Error object, e.g. unsupported layer types.\n * @param message - message used in the Error object\n * @param details - additional information that can be used to handle the exception.\n * @example throw new LayerError(NO_AVAILABLE_SUPPORTED_LAYERS_ERROR, unsupportedLayers);\n */\nexport class LayerError extends Error {\n    details;\n    constructor(message, details) {\n        super(message);\n        this.details = details;\n        this.name = 'LayerError';\n    }\n}\n/**\n * Parses ArcGIS WebScene\n * @param data\n */\nexport async function parseWebscene(data) {\n    const layer0 = JSON.parse(new TextDecoder().decode(data));\n    const { operationalLayers } = layer0;\n    const { layers, unsupportedLayers } = await parseOperationalLayers(operationalLayers, true);\n    if (!layers.length) {\n        throw new LayerError(NO_AVAILABLE_SUPPORTED_LAYERS_ERROR, unsupportedLayers);\n    }\n    return {\n        header: layer0,\n        layers,\n        unsupportedLayers\n    };\n}\n/**\n * Recursively parses WebScene operational layers.\n * @param layersList\n */\nasync function parseOperationalLayers(layersList, needToCheckCRS) {\n    const layers = [];\n    let unsupportedLayers = [];\n    for (let index = 0; index < layersList.length; index++) {\n        const layer = layersList[index];\n        const isLayerSupported = SUPPORTED_LAYERS_TYPES.includes(layer.layerType);\n        if (isLayerSupported) {\n            if (needToCheckCRS && layer.layerType !== GROUP_LAYER) {\n                await checkSupportedIndexCRS(layer);\n                needToCheckCRS = false;\n            }\n            layers.push(layer);\n        }\n        else {\n            unsupportedLayers.push(layer);\n        }\n        if (layer.layers?.length) {\n            const { layers: childLayers, unsupportedLayers: childUnsupportedLayers } = await parseOperationalLayers(layer.layers, needToCheckCRS);\n            layer.layers = childLayers;\n            unsupportedLayers = [...unsupportedLayers, ...childUnsupportedLayers];\n        }\n    }\n    return { layers, unsupportedLayers };\n}\n/**\n * Check if layer has supported CRS\n * @param layer\n */\nasync function checkSupportedIndexCRS(layer) {\n    try {\n        const layerJson = await load(layer.url, JSONLoader);\n        // @ts-expect-error\n        const wkid = layerJson?.spatialReference?.wkid;\n        if (wkid !== SUPPORTED_WKID) {\n            throw new Error(NOT_SUPPORTED_CRS_ERROR);\n        }\n    }\n    catch (error) {\n        throw error;\n    }\n}\n", "import { parseWebscene } from \"./lib/parsers/parse-arcgis-webscene.js\";\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.3.2\" !== 'undefined' ? \"4.3.2\" : 'latest';\n/**\n * Loader for ArcGIS WebScene\n * Spec - https://developers.arcgis.com/web-scene-specification/objects/webscene/\n */\nexport const ArcGISWebSceneLoader = {\n    dataType: null,\n    batchType: null,\n    name: 'ArcGIS Web Scene Loader',\n    id: 'arcgis-web-scene',\n    module: 'i3s',\n    version: VERSION,\n    mimeTypes: ['application/json'],\n    parse,\n    extensions: ['json'],\n    options: {}\n};\n/**\n * Parse ArcGIS webscene\n * @param data\n */\nasync function parse(data) {\n    return parseWebscene(data);\n}\n", "import { load } from '@loaders.gl/core';\nimport { getAttributeValueType, I3SAttributeLoader } from \"../../i3s-attribute-loader.js\";\nimport { getUrlWithToken } from \"./url-utils.js\";\n/**\n * Calculate new vertex colors array to visualize 3D objects in a attribute driven way\n * @param colors - vertex colors attribute\n * @param featureIds - feature Ids attribute\n * @param attributeUrls - array of attribute's urls\n * @param fields - array of attribute's fileds\n * @param attributeStorageInfo - array of attributeStorageInfo\n * @param colorsByAttribute - attribute color options\n * @param token - access token\n * @returns new colors attribute\n */\n// eslint-disable-next-line max-params\nexport async function customizeColors(colors, featureIds, attributeUrls, fields, attributeStorageInfo, colorsByAttribute, token) {\n    if (!colorsByAttribute) {\n        return colors;\n    }\n    const resultColors = {\n        ...colors,\n        value: new Uint8Array(colors.value)\n    };\n    const colorizeAttributeField = fields.find(({ name }) => name === colorsByAttribute?.attributeName);\n    if (!colorizeAttributeField ||\n        !['esriFieldTypeDouble', 'esriFieldTypeInteger', 'esriFieldTypeSmallInteger'].includes(colorizeAttributeField.type)) {\n        return colors;\n    }\n    const colorizeAttributeData = await loadFeatureAttributeData(colorizeAttributeField.name, attributeUrls, attributeStorageInfo, token);\n    if (!colorizeAttributeData) {\n        return colors;\n    }\n    const objectIdField = fields.find(({ type }) => type === 'esriFieldTypeOID');\n    if (!objectIdField) {\n        return colors;\n    }\n    const objectIdAttributeData = await loadFeatureAttributeData(objectIdField.name, attributeUrls, attributeStorageInfo, token);\n    if (!objectIdAttributeData) {\n        return colors;\n    }\n    const attributeValuesMap = {};\n    // @ts-expect-error\n    for (let i = 0; i < objectIdAttributeData[objectIdField.name].length; i++) {\n        // @ts-expect-error\n        attributeValuesMap[objectIdAttributeData[objectIdField.name][i]] = calculateColorForAttribute(\n        // @ts-expect-error\n        colorizeAttributeData[colorizeAttributeField.name][i], colorsByAttribute);\n    }\n    for (let i = 0; i < featureIds.length; i++) {\n        const color = attributeValuesMap[featureIds[i]];\n        if (!color) {\n            continue; // eslint-disable-line no-continue\n        }\n        /* eslint max-statements: [\"error\", 30] */\n        /* eslint complexity: [\"error\", 12] */\n        if (colorsByAttribute.mode === 'multiply') {\n            // multiplying original mesh and calculated for attribute rgba colors in range 0-255\n            color.forEach((colorItem, index) => {\n                resultColors.value[i * 4 + index] = (resultColors.value[i * 4 + index] * colorItem) / 255;\n            });\n        }\n        else {\n            resultColors.value.set(color, i * 4);\n        }\n    }\n    return resultColors;\n}\n/**\n * Calculate rgba color from the attribute value\n * @param attributeValue - value of the attribute\n * @param colorsByAttribute - attribute color options\n * @returns - color array for a specific attribute value\n */\nfunction calculateColorForAttribute(attributeValue, colorsByAttribute) {\n    if (!colorsByAttribute) {\n        return [255, 255, 255, 255];\n    }\n    const { minValue, maxValue, minColor, maxColor } = colorsByAttribute;\n    const rate = (attributeValue - minValue) / (maxValue - minValue);\n    const color = [255, 255, 255, 255];\n    for (let i = 0; i < minColor.length; i++) {\n        color[i] = Math.round((maxColor[i] - minColor[i]) * rate + minColor[i]);\n    }\n    return color;\n}\n/**\n * Load feature attribute data from the ArcGIS rest service\n * @param attributeName - attribute name\n * @param attributeUrls - array of attribute's urls\n * @param attributeStorageInfo - array of attributeStorageInfo\n * @param token - access token\n * @returns - Array-like list of the attribute values\n */\nasync function loadFeatureAttributeData(attributeName, attributeUrls, attributeStorageInfo, token) {\n    const attributeIndex = attributeStorageInfo.findIndex(({ name }) => attributeName === name);\n    if (attributeIndex === -1) {\n        return null;\n    }\n    const objectIdAttributeUrl = getUrlWithToken(attributeUrls[attributeIndex], token);\n    const attributeType = getAttributeValueType(attributeStorageInfo[attributeIndex]);\n    const objectIdAttributeData = await load(objectIdAttributeUrl, I3SAttributeLoader, {\n        attributeName,\n        attributeType\n    });\n    return objectIdAttributeData;\n}\n"],
  "mappings": "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",
  "names": ["COORDINATE_SYSTEM", "import_core", "import_core", "HeaderAttributeProperty", "arrayBuffer", "options", "parse", "import_geospatial", "import_core", "import_core", "import_textures", "VERSION", "VERSION", "import_loader_utils", "import_zip", "VERSION", "import_core", "VERSION", "VERSION", "parse", "import_core", "VERSION", "parse", "import_core"]
}
