@loaders.gl/textures 4.4.0-alpha.2 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +197 -1
- package/dist/basis-loader.d.ts +15 -10
- package/dist/basis-loader.d.ts.map +1 -1
- package/dist/basis-loader.js +1 -1
- package/dist/basis-loader.js.map +1 -0
- package/dist/basis-worker-node.js +932 -10040
- package/dist/basis-worker.d.ts +2 -0
- package/dist/basis-worker.d.ts.map +1 -0
- package/dist/basis-worker.js +337 -151
- package/dist/basis-worker.js.map +1 -0
- package/dist/compressed-texture-loader.d.ts +2 -5
- package/dist/compressed-texture-loader.d.ts.map +1 -1
- package/dist/compressed-texture-loader.js +2 -3
- package/dist/compressed-texture-loader.js.map +1 -0
- package/dist/compressed-texture-worker.d.ts +2 -0
- package/dist/compressed-texture-worker.d.ts.map +1 -0
- package/dist/compressed-texture-worker.js +1148 -365
- package/dist/compressed-texture-worker.js.map +1 -0
- package/dist/compressed-texture-writer.js +1 -0
- package/dist/compressed-texture-writer.js.map +1 -0
- package/dist/crunch-loader.d.ts +1 -5
- package/dist/crunch-loader.d.ts.map +1 -1
- package/dist/crunch-loader.js +2 -3
- package/dist/crunch-loader.js.map +1 -0
- package/dist/crunch-worker.d.ts +2 -0
- package/dist/crunch-worker.d.ts.map +1 -0
- package/dist/crunch-worker.js +204 -92
- package/dist/crunch-worker.js.map +1 -0
- package/dist/dist.dev.js +2687 -677
- package/dist/dist.min.js +1 -2
- package/dist/index.cjs +1644 -428
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -0
- package/dist/ktx2-basis-writer-worker-node.js +574 -9832
- package/dist/ktx2-basis-writer-worker.d.ts +2 -0
- package/dist/ktx2-basis-writer-worker.d.ts.map +1 -0
- package/dist/ktx2-basis-writer-worker.js +45 -7
- package/dist/ktx2-basis-writer-worker.js.map +1 -0
- package/dist/ktx2-basis-writer.js +1 -0
- package/dist/ktx2-basis-writer.js.map +1 -0
- package/dist/lib/composite-image/image-texture-cube.d.ts +47 -0
- package/dist/lib/composite-image/image-texture-cube.d.ts.map +1 -0
- package/dist/lib/composite-image/image-texture-cube.js +42 -0
- package/dist/lib/composite-image/image-texture-cube.js.map +1 -0
- package/dist/lib/composite-image/parse-composite-image.d.ts +43 -0
- package/dist/lib/composite-image/parse-composite-image.d.ts.map +1 -0
- package/dist/lib/composite-image/parse-composite-image.js +437 -0
- package/dist/lib/composite-image/parse-composite-image.js.map +1 -0
- package/dist/lib/encoders/encode-ktx.d.ts +1 -1
- package/dist/lib/encoders/encode-ktx.d.ts.map +1 -1
- package/dist/lib/encoders/encode-ktx.js +1 -0
- package/dist/lib/encoders/encode-ktx.js.map +1 -0
- package/dist/lib/encoders/encode-ktx2-basis-texture.d.ts +2 -1
- package/dist/lib/encoders/encode-ktx2-basis-texture.d.ts.map +1 -1
- package/dist/lib/encoders/encode-ktx2-basis-texture.js +3 -1
- package/dist/lib/encoders/encode-ktx2-basis-texture.js.map +1 -0
- package/dist/lib/encoders/encode-texture.js +1 -0
- package/dist/lib/encoders/encode-texture.js.map +1 -0
- package/dist/lib/gl-extensions.d.ts +166 -58
- package/dist/lib/gl-extensions.d.ts.map +1 -1
- package/dist/lib/gl-extensions.js +178 -66
- package/dist/lib/gl-extensions.js.map +1 -0
- package/dist/lib/gl-types.d.ts +4 -0
- package/dist/lib/gl-types.d.ts.map +1 -0
- package/dist/lib/gl-types.js +5 -0
- package/dist/lib/gl-types.js.map +1 -0
- package/dist/lib/parsers/basis-module-loader.d.ts +3 -2
- package/dist/lib/parsers/basis-module-loader.d.ts.map +1 -1
- package/dist/lib/parsers/basis-module-loader.js +1 -0
- package/dist/lib/parsers/basis-module-loader.js.map +1 -0
- package/dist/lib/parsers/crunch-module-loader.d.ts +2 -2
- package/dist/lib/parsers/crunch-module-loader.d.ts.map +1 -1
- package/dist/lib/parsers/crunch-module-loader.js +1 -0
- package/dist/lib/parsers/crunch-module-loader.js.map +1 -0
- package/dist/lib/parsers/parse-basis.d.ts +34 -2
- package/dist/lib/parsers/parse-basis.d.ts.map +1 -1
- package/dist/lib/parsers/parse-basis.js +265 -64
- package/dist/lib/parsers/parse-basis.js.map +1 -0
- package/dist/lib/parsers/parse-compressed-texture.js +1 -0
- package/dist/lib/parsers/parse-compressed-texture.js.map +1 -0
- package/dist/lib/parsers/parse-crunch.d.ts.map +1 -1
- package/dist/lib/parsers/parse-crunch.js +7 -6
- package/dist/lib/parsers/parse-crunch.js.map +1 -0
- package/dist/lib/parsers/parse-dds.d.ts.map +1 -1
- package/dist/lib/parsers/parse-dds.js +11 -11
- package/dist/lib/parsers/parse-dds.js.map +1 -0
- package/dist/lib/parsers/parse-hdr.d.ts +21 -0
- package/dist/lib/parsers/parse-hdr.d.ts.map +1 -0
- package/dist/lib/parsers/parse-hdr.js +305 -0
- package/dist/lib/parsers/parse-hdr.js.map +1 -0
- package/dist/lib/parsers/parse-ktx.d.ts.map +1 -1
- package/dist/lib/parsers/parse-ktx.js +11 -3
- package/dist/lib/parsers/parse-ktx.js.map +1 -0
- package/dist/lib/parsers/parse-npy.js +1 -0
- package/dist/lib/parsers/parse-npy.js.map +1 -0
- package/dist/lib/parsers/parse-pvr.d.ts.map +1 -1
- package/dist/lib/parsers/parse-pvr.js +32 -74
- package/dist/lib/parsers/parse-pvr.js.map +1 -0
- package/dist/lib/texture-api/async-deep-map.js +1 -0
- package/dist/lib/texture-api/async-deep-map.js.map +1 -0
- package/dist/lib/texture-api/deep-load.js +1 -0
- package/dist/lib/texture-api/deep-load.js.map +1 -0
- package/dist/lib/texture-api/generate-url.d.ts.map +1 -1
- package/dist/lib/texture-api/generate-url.js +3 -10
- package/dist/lib/texture-api/generate-url.js.map +1 -0
- package/dist/lib/texture-api/load-image-array.d.ts +6 -3
- package/dist/lib/texture-api/load-image-array.d.ts.map +1 -1
- package/dist/lib/texture-api/load-image-array.js +6 -3
- package/dist/lib/texture-api/load-image-array.js.map +1 -0
- package/dist/lib/texture-api/load-image-cube.d.ts +7 -11
- package/dist/lib/texture-api/load-image-cube.d.ts.map +1 -1
- package/dist/lib/texture-api/load-image-cube.js +9 -20
- package/dist/lib/texture-api/load-image-cube.js.map +1 -0
- package/dist/lib/texture-api/load-image.d.ts +6 -3
- package/dist/lib/texture-api/load-image.d.ts.map +1 -1
- package/dist/lib/texture-api/load-image.js +9 -4
- package/dist/lib/texture-api/load-image.js.map +1 -0
- package/dist/lib/texture-api/texture-api-types.d.ts +13 -0
- package/dist/lib/texture-api/texture-api-types.d.ts.map +1 -1
- package/dist/lib/texture-api/texture-api-types.js +1 -0
- package/dist/lib/texture-api/texture-api-types.js.map +1 -0
- package/dist/lib/utils/detect-supported-texture-formats.d.ts +14 -0
- package/dist/lib/utils/detect-supported-texture-formats.d.ts.map +1 -0
- package/dist/lib/utils/detect-supported-texture-formats.js +197 -0
- package/dist/lib/utils/detect-supported-texture-formats.js.map +1 -0
- package/dist/lib/utils/extract-mipmap-images.d.ts +6 -2
- package/dist/lib/utils/extract-mipmap-images.d.ts.map +1 -1
- package/dist/lib/utils/extract-mipmap-images.js +14 -2
- package/dist/lib/utils/extract-mipmap-images.js.map +1 -0
- package/dist/lib/utils/ktx-format-helper.d.ts +9 -1
- package/dist/lib/utils/ktx-format-helper.d.ts.map +1 -1
- package/dist/lib/utils/ktx-format-helper.js +77 -109
- package/dist/lib/utils/ktx-format-helper.js.map +1 -0
- package/dist/lib/utils/texture-format-map.d.ts +10 -0
- package/dist/lib/utils/texture-format-map.d.ts.map +1 -0
- package/dist/lib/utils/texture-format-map.js +87 -0
- package/dist/lib/utils/texture-format-map.js.map +1 -0
- package/dist/lib/utils/version.js +2 -1
- package/dist/lib/utils/version.js.map +1 -0
- package/dist/libs/libs/README.md +9 -0
- package/dist/libs/libs/basis_encoder.js +21 -0
- package/dist/libs/libs/basis_encoder.wasm +0 -0
- package/dist/libs/libs/basis_transcoder.js +22 -0
- package/dist/libs/libs/basis_transcoder.wasm +0 -0
- package/dist/libs/libs/crunch.js +136 -0
- package/dist/npy-loader.d.ts +2 -2
- package/dist/npy-loader.js +1 -0
- package/dist/npy-loader.js.map +1 -0
- package/dist/npy-worker.d.ts +2 -0
- package/dist/npy-worker.d.ts.map +1 -0
- package/dist/npy-worker.js +5 -2
- package/dist/npy-worker.js.map +1 -0
- package/dist/radiance-hdr-loader.d.ts +25 -0
- package/dist/radiance-hdr-loader.d.ts.map +1 -0
- package/dist/radiance-hdr-loader.js +23 -0
- package/dist/radiance-hdr-loader.js.map +1 -0
- package/dist/texture-array-loader.d.ts +25 -0
- package/dist/texture-array-loader.d.ts.map +1 -0
- package/dist/texture-array-loader.js +24 -0
- package/dist/texture-array-loader.js.map +1 -0
- package/dist/texture-cube-array-loader.d.ts +25 -0
- package/dist/texture-cube-array-loader.d.ts.map +1 -0
- package/dist/texture-cube-array-loader.js +24 -0
- package/dist/texture-cube-array-loader.js.map +1 -0
- package/dist/texture-cube-loader.d.ts +25 -0
- package/dist/texture-cube-loader.d.ts.map +1 -0
- package/dist/texture-cube-loader.js +24 -0
- package/dist/texture-cube-loader.js.map +1 -0
- package/dist/texture-loader.d.ts +25 -0
- package/dist/texture-loader.d.ts.map +1 -0
- package/dist/texture-loader.js +24 -0
- package/dist/texture-loader.js.map +1 -0
- package/dist/workers/basis-worker-node.js +1 -0
- package/dist/workers/basis-worker-node.js.map +1 -0
- package/dist/workers/basis-worker.js +1 -0
- package/dist/workers/basis-worker.js.map +1 -0
- package/dist/workers/compressed-texture-worker.js +1 -1
- package/dist/workers/compressed-texture-worker.js.map +1 -0
- package/dist/workers/crunch-worker.d.ts +1 -3
- package/dist/workers/crunch-worker.d.ts.map +1 -1
- package/dist/workers/crunch-worker.js +1 -0
- package/dist/workers/crunch-worker.js.map +1 -0
- package/dist/workers/ktx2-basis-writer-worker-node.js +1 -0
- package/dist/workers/ktx2-basis-writer-worker-node.js.map +1 -0
- package/dist/workers/ktx2-basis-writer-worker.js +1 -0
- package/dist/workers/ktx2-basis-writer-worker.js.map +1 -0
- package/dist/workers/npy-worker.js +1 -0
- package/dist/workers/npy-worker.js.map +1 -0
- package/package.json +27 -6
- package/src/basis-loader.ts +19 -9
- package/src/basis-worker.ts +7 -0
- package/src/compressed-texture-loader.ts +3 -7
- package/src/compressed-texture-worker.ts +6 -0
- package/src/crunch-loader.ts +1 -5
- package/src/crunch-worker.ts +6 -0
- package/src/index.ts +21 -4
- package/src/ktx2-basis-writer-worker.ts +6 -0
- package/src/lib/composite-image/image-texture-cube.ts +49 -0
- package/src/lib/composite-image/parse-composite-image.ts +699 -0
- package/src/lib/encoders/encode-ktx.ts +1 -1
- package/src/lib/encoders/encode-ktx2-basis-texture.ts +4 -2
- package/src/lib/gl-extensions.ts +188 -81
- package/src/lib/gl-types.ts +136 -0
- package/src/lib/parsers/basis-module-loader.ts +5 -5
- package/src/lib/parsers/crunch-module-loader.ts +4 -4
- package/src/lib/parsers/parse-basis.ts +358 -66
- package/src/lib/parsers/parse-crunch.ts +11 -8
- package/src/lib/parsers/parse-dds.ts +11 -12
- package/src/lib/parsers/parse-hdr.ts +426 -0
- package/src/lib/parsers/parse-ktx.ts +13 -3
- package/src/lib/parsers/parse-pvr.ts +33 -75
- package/src/lib/texture-api/generate-url.ts +2 -12
- package/src/lib/texture-api/load-image-array.ts +15 -6
- package/src/lib/texture-api/load-image-cube.ts +20 -34
- package/src/lib/texture-api/load-image.ts +19 -8
- package/src/lib/texture-api/texture-api-types.ts +15 -0
- package/src/lib/utils/detect-supported-texture-formats.ts +210 -0
- package/src/lib/utils/extract-mipmap-images.ts +23 -4
- package/src/lib/utils/ktx-format-helper.ts +135 -111
- package/src/lib/utils/texture-format-map.ts +162 -0
- package/src/npy-worker.ts +6 -0
- package/src/radiance-hdr-loader.ts +36 -0
- package/src/texture-array-loader.ts +46 -0
- package/src/texture-cube-array-loader.ts +49 -0
- package/src/texture-cube-loader.ts +46 -0
- package/src/texture-loader.ts +49 -0
- package/src/workers/compressed-texture-worker.ts +0 -1
- package/dist/lib/utils/texture-formats.d.ts +0 -8
- package/dist/lib/utils/texture-formats.d.ts.map +0 -1
- package/dist/lib/utils/texture-formats.js +0 -50
- package/src/lib/utils/texture-formats.ts +0 -59
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["index.
|
|
4
|
-
"sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nexport { BasisLoader, BasisWorkerLoader } from \"./basis-loader.js\";\nexport { CompressedTextureLoader, CompressedTextureWorkerLoader } from \"./compressed-texture-loader.js\";\nexport { CrunchLoader } from \"./crunch-loader.js\";\nexport { NPYLoader, NPYWorkerLoader } from \"./npy-loader.js\";\n// Module constants\nexport { BASIS_EXTERNAL_LIBRARIES } from \"./lib/parsers/basis-module-loader.js\";\nexport { CRUNCH_EXTERNAL_LIBRARIES } from \"./lib/parsers/crunch-module-loader.js\";\n// Writers\nexport { CompressedTextureWriter } from \"./compressed-texture-writer.js\";\nexport { KTX2BasisWriter } from \"./ktx2-basis-writer.js\";\nexport const KTX2BasisWriterWorker = {\n name: 'Basis Universal Supercompressed GPU Texture',\n id: 'ktx2-basis-writer',\n module: 'textures',\n version: VERSION,\n extensions: ['ktx2'],\n worker: true,\n options: {\n useSRGB: false,\n qualityLevel: 10,\n encodeUASTC: false,\n mipmaps: false\n }\n};\n// Texture Loading API\nexport { loadImageTexture } from \"./lib/texture-api/load-image.js\";\nexport { loadImageTextureArray } from \"./lib/texture-api/load-image-array.js\";\nexport { loadImageTextureCube } from \"./lib/texture-api/load-image-cube.js\";\n// Utilities\nexport { GL_EXTENSIONS_CONSTANTS } from \"./lib/gl-extensions.js\";\nexport { selectSupportedBasisFormat } from \"./lib/parsers/parse-basis.js\";\nexport { getSupportedGPUTextureFormats } from \"./lib/utils/texture-formats.js\";\n// DEPRECATED\n// @deprecated\nexport { CrunchLoader as CrunchWorkerLoader } from \"./crunch-loader.js\";\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\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 \"4.4.0-alpha.1\" !== 'undefined' ? \"4.4.0-alpha.1\" : 'latest';\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { registerJSModules, getJSModuleOrNull } from '@loaders.gl/loader-utils';\nimport { loadLibrary } from '@loaders.gl/worker-utils';\nexport const BASIS_EXTERNAL_LIBRARIES = {\n /** Basis transcoder, javascript wrapper part */\n TRANSCODER: 'basis_transcoder.js',\n /** Basis transcoder, compiled web assembly part */\n TRANSCODER_WASM: 'basis_transcoder.wasm',\n /** Basis encoder, javascript wrapper part */\n ENCODER: 'basis_encoder.js',\n /** Basis encoder, compiled web assembly part */\n ENCODER_WASM: 'basis_encoder.wasm'\n};\nlet loadBasisTranscoderPromise;\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nexport async function loadBasisTranscoderModule(options) {\n registerJSModules(options.modules);\n const basis = getJSModuleOrNull('basis');\n if (basis) {\n return basis;\n }\n loadBasisTranscoderPromise ||= loadBasisTranscoder(options);\n return await loadBasisTranscoderPromise;\n}\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nasync function loadBasisTranscoder(options) {\n let BASIS = null;\n let wasmBinary = null;\n [BASIS, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.TRANSCODER, 'textures', options),\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.TRANSCODER_WASM, 'textures', options)\n ]);\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS = BASIS || globalThis.BASIS;\n return await initializeBasisTranscoderModule(BASIS, wasmBinary);\n}\n/**\n * Initialize wasm transcoder module\n * @param BasisModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile} promise\n */\nfunction initializeBasisTranscoderModule(BasisModule, wasmBinary) {\n const options = {};\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisModule(options).then((module) => {\n const { BasisFile, initializeBasis } = module;\n initializeBasis();\n resolve({ BasisFile });\n });\n });\n}\nlet loadBasisEncoderPromise;\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nexport async function loadBasisEncoderModule(options) {\n const modules = options.modules || {};\n if (modules.basisEncoder) {\n return modules.basisEncoder;\n }\n loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);\n return await loadBasisEncoderPromise;\n}\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nasync function loadBasisEncoder(options) {\n let BASIS_ENCODER = null;\n let wasmBinary = null;\n [BASIS_ENCODER, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.ENCODER, 'textures', options),\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.ENCODER_WASM, 'textures', options)\n ]);\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;\n return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);\n}\n/**\n * Initialize wasm transcoder module\n * @param BasisEncoderModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile, KTX2File} promise\n */\nfunction initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {\n const options = {};\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisEncoderModule(options).then((module) => {\n const { BasisFile, KTX2File, initializeBasis, BasisEncoder } = module;\n initializeBasis();\n resolve({ BasisFile, KTX2File, BasisEncoder });\n });\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable camelcase */\nexport const GL_EXTENSIONS_CONSTANTS = {\n // WEBGL_compressed_texture_s3tc\n COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\n COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\n COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\n COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\n // WEBGL_compressed_texture_es3\n COMPRESSED_R11_EAC: 0x9270,\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\n COMPRESSED_RG11_EAC: 0x9272,\n COMPRESSED_SIGNED_RG11_EAC: 0x9273,\n COMPRESSED_RGB8_ETC2: 0x9274,\n COMPRESSED_RGBA8_ETC2_EAC: 0x9275,\n COMPRESSED_SRGB8_ETC2: 0x9276,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9277,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9278,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9279,\n // WEBGL_compressed_texture_pvrtc\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\n // WEBGL_compressed_texture_etc1\n COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\n // WEBGL_compressed_texture_atc\n COMPRESSED_RGB_ATC_WEBGL: 0x8c92,\n COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 0x8c93,\n COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 0x87ee,\n // WEBGL_compressed_texture_astc\n COMPRESSED_RGBA_ASTC_4X4_KHR: 0x93b0,\n COMPRESSED_RGBA_ASTC_5X4_KHR: 0x93b1,\n COMPRESSED_RGBA_ASTC_5X5_KHR: 0x93b2,\n COMPRESSED_RGBA_ASTC_6X5_KHR: 0x93b3,\n COMPRESSED_RGBA_ASTC_6X6_KHR: 0x93b4,\n COMPRESSED_RGBA_ASTC_8X5_KHR: 0x93b5,\n COMPRESSED_RGBA_ASTC_8X6_KHR: 0x93b6,\n COMPRESSED_RGBA_ASTC_8X8_KHR: 0x93b7,\n COMPRESSED_RGBA_ASTC_10X5_KHR: 0x93b8,\n COMPRESSED_RGBA_ASTC_10X6_KHR: 0x93b9,\n COMPRESSED_RGBA_ASTC_10X8_KHR: 0x93ba,\n COMPRESSED_RGBA_ASTC_10X10_KHR: 0x93bb,\n COMPRESSED_RGBA_ASTC_12X10_KHR: 0x93bc,\n COMPRESSED_RGBA_ASTC_12X12_KHR: 0x93bd,\n COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR: 0x93d0,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR: 0x93d1,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR: 0x93d2,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR: 0x93d3,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR: 0x93d4,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR: 0x93d5,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR: 0x93d6,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR: 0x93d7,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR: 0x93d8,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR: 0x93d9,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR: 0x93da,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR: 0x93db,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR: 0x93dc,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR: 0x93dd,\n // EXT_texture_compression_rgtc\n COMPRESSED_RED_RGTC1_EXT: 0x8dbb,\n COMPRESSED_SIGNED_RED_RGTC1_EXT: 0x8dbc,\n COMPRESSED_RED_GREEN_RGTC2_EXT: 0x8dbd,\n COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 0x8dbe,\n // WEBGL_compressed_texture_s3tc_srgb\n COMPRESSED_SRGB_S3TC_DXT1_EXT: 0x8c4c,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 0x8c4d,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 0x8c4e,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 0x8c4f\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst BROWSER_PREFIXES = ['', 'WEBKIT_', 'MOZ_'];\nconst WEBGL_EXTENSIONS = {\n /* eslint-disable camelcase */\n WEBGL_compressed_texture_s3tc: 'dxt',\n WEBGL_compressed_texture_s3tc_srgb: 'dxt-srgb',\n WEBGL_compressed_texture_etc1: 'etc1',\n WEBGL_compressed_texture_etc: 'etc2',\n WEBGL_compressed_texture_pvrtc: 'pvrtc',\n WEBGL_compressed_texture_atc: 'atc',\n WEBGL_compressed_texture_astc: 'astc',\n EXT_texture_compression_rgtc: 'rgtc'\n /* eslint-enable camelcase */\n};\nlet formats = null;\n/**\n * Returns a list of formats.\n * Creates a temporary WebGLRenderingContext if none is provided.\n *\n * @param gl - Optional context.\n */\nexport function getSupportedGPUTextureFormats(gl) {\n if (!formats) {\n gl = gl || getWebGLContext() || undefined;\n formats = new Set();\n for (const prefix of BROWSER_PREFIXES) {\n for (const extension in WEBGL_EXTENSIONS) {\n if (gl && gl.getExtension(`${prefix}${extension}`)) {\n const gpuTextureFormat = WEBGL_EXTENSIONS[extension];\n formats.add(gpuTextureFormat);\n }\n }\n }\n }\n return formats;\n}\n/**\n * @returns {WebGLRenderingContext?}\n */\nfunction getWebGLContext() {\n try {\n const canvas = document.createElement('canvas');\n return canvas.getContext('webgl');\n }\n catch (error) {\n return null;\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { read } from 'ktx-parse';\nimport { extractMipmapImages } from \"../utils/extract-mipmap-images.js\";\nimport { mapVkFormatToWebGL } from \"../utils/ktx-format-helper.js\";\nconst KTX2_ID = [\n // '\u00B4', 'K', 'T', 'X', '2', '0', '\u00AA', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n// eslint-disable-next-line complexity\nexport function isKTX(data) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX = id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '\u00B4'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // '\u00AA'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n return !notKTX;\n}\nexport function parseKTX(arrayBuffer) {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level) => level.uncompressedByteLength,\n internalFormat\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Extract mipmap images from compressed texture buffer\n * @param data - binary data of compressed texture or Array of level objects\n * @param options.mipMapLevels - number of mipmap level inside image\n * @param options.width - width of 0 - level\n * @param options.height - height of 0 - level\n * @param options.sizeFunction - format-related function to calculate level size in bytes\n * @param options.internalFormat - WebGL compatible format code\n * @returns Array of the texture levels\n */\nexport function extractMipmapImages(data, options) {\n const images = new Array(options.mipMapLevels);\n let levelWidth = options.width;\n let levelHeight = options.height;\n let offset = 0;\n for (let i = 0; i < options.mipMapLevels; ++i) {\n // @ts-expect-error\n const levelSize = getLevelSize(options, levelWidth, levelHeight, data, i);\n // @ts-expect-error\n const levelData = getLevelData(data, i, offset, levelSize);\n images[i] = {\n compressed: true,\n format: options.internalFormat,\n data: levelData,\n width: levelWidth,\n height: levelHeight,\n levelSize\n };\n levelWidth = Math.max(1, levelWidth >> 1);\n levelHeight = Math.max(1, levelHeight >> 1);\n offset += levelSize;\n }\n return images;\n}\nfunction getLevelData(data, index, offset, levelSize) {\n if (!Array.isArray(data)) {\n return new Uint8Array(data.buffer, data.byteOffset + offset, levelSize);\n }\n return data[index].levelData;\n}\nfunction getLevelSize(options, levelWidth, levelHeight, data, index) {\n if (!Array.isArray(data)) {\n return options.sizeFunction(levelWidth, levelHeight);\n }\n return options.sizeFunction(data[index]);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nconst VULKAN_TO_WEBGL_FORMAT_MAP = {\n 131: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n 132: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_S3TC_DXT1_EXT,\n 133: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n 134: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n 135: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n 136: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n 137: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 138: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\n 139: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_RGTC1_EXT,\n 140: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_RGTC1_EXT,\n 141: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_GREEN_RGTC2_EXT,\n 142: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\n 147: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2,\n 148: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ETC2,\n 149: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 150: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 151: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC,\n 152: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,\n 153: GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC,\n 154: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_R11_EAC,\n 155: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC,\n 156: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RG11_EAC,\n // @ts-ignore\n 157: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,\n // @ts-ignore\n 158: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,\n // @ts-ignore\n 159: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,\n // @ts-ignore\n 160: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR,\n // @ts-ignore\n 161: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,\n // @ts-ignore\n 162: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,\n // @ts-ignore\n 163: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,\n // @ts-ignore\n 164: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,\n // @ts-ignore\n 165: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,\n // @ts-ignore\n 166: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,\n // @ts-ignore\n 167: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,\n // @ts-ignore\n 168: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,\n // @ts-ignore\n 169: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,\n // @ts-ignore\n 170: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,\n // @ts-ignore\n 171: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,\n // @ts-ignore\n 172: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,\n // @ts-ignore\n 173: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,\n // @ts-ignore\n 174: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,\n // @ts-ignore\n 175: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,\n // @ts-ignore\n 176: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,\n // @ts-ignore\n 177: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,\n // @ts-ignore\n 178: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,\n // @ts-ignore\n 179: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,\n // @ts-ignore\n 180: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,\n // @ts-ignore\n 181: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,\n // @ts-ignore\n 182: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,\n // @ts-ignore\n 183: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR,\n // @ts-ignore\n 184: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,\n 1000054000: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\n 1000054001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n // @ts-ignore\n 1000066000: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,\n // @ts-ignore\n 1000066001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,\n // @ts-ignore\n 1000066002: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,\n // @ts-ignore\n 1000066003: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,\n // @ts-ignore\n 1000066004: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,\n // @ts-ignore\n 1000066005: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,\n // @ts-ignore\n 1000066006: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,\n // @ts-ignore\n 1000066007: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,\n // @ts-ignore\n 1000066008: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,\n // @ts-ignore\n 1000066009: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,\n // @ts-ignore\n 1000066010: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,\n // @ts-ignore\n 1000066011: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,\n // @ts-ignore\n 1000066012: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,\n // @ts-ignore\n 1000066013: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR\n};\n/**\n * Returns WebGl format based on Vulkan format\n * Vulkan to WebGl format mapping provided here http://github.khronos.org/KTX-Specification/#formatMapping\n * Vulkan name to format number mapping provided here: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormat.html\n * @param vkFormat\n * @returns WebGL / OpenGL constant\n */\nexport function mapVkFormatToWebGL(vkFormat) {\n return VULKAN_TO_WEBGL_FORMAT_MAP[vkFormat];\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { loadBasisEncoderModule, loadBasisTranscoderModule } from \"./basis-module-loader.js\";\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nimport { getSupportedGPUTextureFormats } from \"../utils/texture-formats.js\";\nimport { isKTX } from \"./parse-ktx.js\";\nconst OutputFormat = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: { basisFormat: 1, compressed: true },\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: { basisFormat: 4, compressed: true },\n bc5: { basisFormat: 5, compressed: true },\n 'bc7-m6-opaque-only': { basisFormat: 6, compressed: true },\n 'bc7-m5': { basisFormat: 7, compressed: true },\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': { basisFormat: 11, compressed: true },\n 'atc-rgba-interpolated-alpha': { basisFormat: 12, compressed: true },\n rgba32: { basisFormat: 13, compressed: false },\n rgb565: { basisFormat: 14, compressed: false },\n bgr565: { basisFormat: 15, compressed: false },\n rgba4444: { basisFormat: 16, compressed: false }\n};\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport async function parseBasis(data, options) {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const { BasisFile } = await loadBasisTranscoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const { BasisFile } = await loadBasisTranscoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options) {\n const basisFile = new BasisFile(new Uint8Array(data));\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n const imageCount = basisFile.getNumImages();\n const images = [];\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels = [];\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n images.push(levels);\n }\n return images;\n }\n finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options) {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha( /* imageIndex, levelIndex */);\n // Check options for output format etc\n const { compressed, format, basisFormat } = getBasisOptions(options, hasAlpha);\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data, options) {\n const ktx2File = new KTX2File(new Uint8Array(data));\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels = [];\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n }\n return [levels];\n }\n finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex, options) {\n const { alphaFlag, height, width } = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n // Check options for output format etc\n const { compressed, format, basisFormat } = getBasisOptions(options, alphaFlag);\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0 /* layerIndex */, 0 /* faceIndex */, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n if (!ktx2File.transcodeImage(decodedData, levelIndex, 0 /* layerIndex */, 0 /* faceIndex */, basisFormat, 0, -1 /* channel0 */, -1 /* channel1 */)) {\n throw new Error('Failed to transcode KTX2 image');\n }\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n // Additional fields\n levelSize: decodedSize,\n hasAlpha: alphaFlag,\n format\n };\n}\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha) {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat() {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n }\n else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n }\n else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n }\n else if (supportedFormats.has('etc1')) {\n return 'etc1';\n }\n else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseBasis } from \"./lib/parsers/parse-basis.js\";\n/**\n * Worker loader for Basis super compressed textures\n */\nexport const BasisWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'Basis',\n id: 'basis',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['basis', 'ktx2'],\n mimeTypes: ['application/octet-stream', 'image/ktx2'],\n tests: ['sB'],\n binary: true,\n options: {\n basis: {\n format: 'auto',\n libraryPath: 'libs/',\n containerFormat: 'auto',\n module: 'transcoder'\n }\n }\n};\n/**\n * Loader for Basis super compressed textures\n */\nexport const BasisLoader = {\n ...BasisWorkerLoader,\n parse: parseBasis\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@loaders.gl/loader-utils';\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nimport { extractMipmapImages } from \"../utils/extract-mipmap-images.js\";\nconst DDS_CONSTANTS = {\n MAGIC_NUMBER: 0x20534444,\n HEADER_LENGTH: 31,\n MAGIC_NUMBER_INDEX: 0,\n HEADER_SIZE_INDEX: 1,\n HEADER_FLAGS_INDEX: 2,\n HEADER_HEIGHT_INDEX: 3,\n HEADER_WIDTH_INDEX: 4,\n MIPMAPCOUNT_INDEX: 7,\n HEADER_PF_FLAGS_INDEX: 20,\n HEADER_PF_FOURCC_INDEX: 21,\n DDSD_MIPMAPCOUNT: 0x20000,\n DDPF_FOURCC: 0x4\n};\nconst DDS_PIXEL_FORMATS = {\n DXT1: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n};\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\nconst DDS_SIZE_FUNCTIONS = {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n};\n/**\n * Check if data is in \"DDS\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"DDS\" format, else - false\n */\nexport function isDDS(data) {\n const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];\n return magic === DDS_CONSTANTS.MAGIC_NUMBER;\n}\n/**\n * Parse texture data as \"DDS\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseDDS(data) {\n const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];\n assert(Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC), 'DDS: Unsupported format, must contain a FourCC code');\n const fourCC = int32ToFourCC(pixelFormatNumber);\n const internalFormat = DDS_PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];\n assert(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);\n let mipMapLevels = 1;\n if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {\n mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);\n }\n const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];\n const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];\n const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;\n const image = new Uint8Array(data, dataOffset);\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n/**\n * DXT1 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxt1LevelSize(width, height) {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 8;\n}\n/**\n * DXT3 & DXT5 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxtXLevelSize(width, height) {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 16;\n}\n/**\n * Convert every byte of Int32 value to char\n * @param value - Int32 number\n * @returns string of 4 characters\n */\nfunction int32ToFourCC(value) {\n return String.fromCharCode(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nimport { extractMipmapImages } from \"../utils/extract-mipmap-images.js\";\nconst PVR_CONSTANTS = {\n MAGIC_NUMBER: 0x03525650,\n MAGIC_NUMBER_EXTRA: 0x50565203,\n HEADER_LENGTH: 13,\n HEADER_SIZE: 52,\n MAGIC_NUMBER_INDEX: 0,\n PIXEL_FORMAT_INDEX: 2,\n COLOUR_SPACE_INDEX: 4,\n HEIGHT_INDEX: 6,\n WIDTH_INDEX: 7,\n MIPMAPCOUNT_INDEX: 11,\n METADATA_SIZE_INDEX: 12\n};\nconst PVR_PIXEL_FORMATS = {\n 0: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],\n 1: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],\n 2: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],\n 3: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],\n 6: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL],\n 7: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT],\n 9: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT],\n 11: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT],\n 22: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2],\n 23: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC],\n 24: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],\n 25: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC],\n 26: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC],\n 27: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR\n ],\n 28: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X4_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR\n ],\n 29: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR\n ],\n 30: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR\n ],\n 31: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR\n ],\n 32: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR\n ],\n 33: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR\n ],\n 34: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X8_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR\n ],\n 35: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR\n ],\n 36: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR\n ],\n 37: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X8_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR\n ],\n 38: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X10_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR\n ],\n 39: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X10_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR\n ],\n 40: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X12_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR\n ]\n};\nconst PVR_SIZE_FUNCTIONS = {\n 0: pvrtc2bppSize,\n 1: pvrtc2bppSize,\n 2: pvrtc4bppSize,\n 3: pvrtc4bppSize,\n 6: dxtEtcSmallSize,\n 7: dxtEtcSmallSize,\n 9: dxtEtcAstcBigSize,\n 11: dxtEtcAstcBigSize,\n 22: dxtEtcSmallSize,\n 23: dxtEtcAstcBigSize,\n 24: dxtEtcSmallSize,\n 25: dxtEtcSmallSize,\n 26: dxtEtcAstcBigSize,\n 27: dxtEtcAstcBigSize,\n 28: atc5x4Size,\n 29: atc5x5Size,\n 30: atc6x5Size,\n 31: atc6x6Size,\n 32: atc8x5Size,\n 33: atc8x6Size,\n 34: atc8x8Size,\n 35: atc10x5Size,\n 36: atc10x6Size,\n 37: atc10x8Size,\n 38: atc10x10Size,\n 39: atc12x10Size,\n 40: atc12x12Size\n};\n/**\n * Check if data is in \"PVR\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"PVR\" format, else - false\n */\nexport function isPVR(data) {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n const version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];\n return version === PVR_CONSTANTS.MAGIC_NUMBER || version === PVR_CONSTANTS.MAGIC_NUMBER_EXTRA;\n}\n/**\n * Parse texture data as \"PVR\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n * @see http://cdn.imgtec.com/sdk-documentation/PVR+File+Format.Specification.pdf\n */\nexport function parsePVR(data) {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n const pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];\n const colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];\n const pixelFormats = PVR_PIXEL_FORMATS[pvrFormat] || [];\n const internalFormat = pixelFormats.length > 1 && colourSpace ? pixelFormats[1] : pixelFormats[0];\n const sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];\n const mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];\n const width = header[PVR_CONSTANTS.WIDTH_INDEX];\n const height = header[PVR_CONSTANTS.HEIGHT_INDEX];\n const dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];\n const image = new Uint8Array(data, dataOffset);\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc2bppSize(width, height) {\n width = Math.max(width, 16);\n height = Math.max(height, 8);\n return (width * height) / 4;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc4bppSize(width, height) {\n width = Math.max(width, 8);\n height = Math.max(height, 8);\n return (width * height) / 2;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// Size for:\n// COMPRESSED_RGB_S3TC_DXT1_EXT\n// COMPRESSED_R11_EAC\n// COMPRESSED_SIGNED_R11_EAC\n// COMPRESSED_RGB8_ETC2\n// COMPRESSED_SRGB8_ETC2\n// COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\n// COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\nfunction dxtEtcSmallSize(width, height) {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\n// Size for:\n// COMPRESSED_RGBA_S3TC_DXT3_EXT\n// COMPRESSED_RGBA_S3TC_DXT5_EXT\n// COMPRESSED_RG11_EAC\n// COMPRESSED_SIGNED_RG11_EAC\n// COMPRESSED_RGBA8_ETC2_EAC\n// COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\n// COMPRESSED_RGBA_ASTC_4x4_KHR\nfunction dxtEtcAstcBigSize(width, height) {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x4Size(width, height) {\n return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x5Size(width, height) {\n return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x5Size(width, height) {\n return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x6Size(width, height) {\n return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x5Size(width, height) {\n return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x6Size(width, height) {\n return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x8Size(width, height) {\n return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x5Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x6Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x8Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x10Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x10Size(width, height) {\n return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x12Size(width, height) {\n return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isKTX, parseKTX } from \"./parse-ktx.js\";\nimport { isDDS, parseDDS } from \"./parse-dds.js\";\nimport { isPVR, parsePVR } from \"./parse-pvr.js\";\n/**\n * Deduces format and parses compressed texture loaded in ArrayBuffer\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseCompressedTexture(data) {\n if (isKTX(data)) {\n // TODO: remove @ts-ignore when `parseKTX` output is normalized to loaders.gl texture format\n // @ts-ignore\n return parseKTX(data);\n }\n if (isDDS(data)) {\n return parseDDS(data);\n }\n if (isPVR(data)) {\n return parsePVR(data);\n }\n throw new Error('Texture container format not recognized');\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseCompressedTexture } from \"./lib/parsers/parse-compressed-texture.js\";\nimport { parseBasis } from \"./lib/parsers/parse-basis.js\";\n/**\n * Worker Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'Texture Containers',\n id: 'compressed-texture',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: [\n 'ktx',\n 'ktx2',\n 'dds', // WEBGL_compressed_texture_s3tc, WEBGL_compressed_texture_atc\n 'pvr' // WEBGL_compressed_texture_pvrtc\n ],\n mimeTypes: [\n 'image/ktx2',\n 'image/ktx',\n 'image/vnd-ms.dds',\n 'image/x-dds',\n 'application/octet-stream'\n ],\n binary: true,\n options: {\n 'compressed-texture': {\n libraryPath: 'libs/',\n useBasis: false\n }\n }\n};\n/**\n * Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureLoader = {\n ...CompressedTextureWorkerLoader,\n parse: async (arrayBuffer, options) => {\n if (options?.['compressed-texture']?.useBasis) {\n // @ts-expect-error TODO not allowed to modify inputs\n options.basis = {\n format: {\n alpha: 'BC3',\n noAlpha: 'BC1'\n },\n // @ts-expect-error TODO not allowed to modify inputs\n ...options.basis,\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n const result = await parseBasis(arrayBuffer, options);\n return result[0];\n }\n return parseCompressedTexture(arrayBuffer);\n }\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\n/**\n * Worker loader for the Crunch compressed texture container format\n * @note We avoid bundling crunch - it is a rare format and large lib, so we only offer worker loader\n */\nexport const CrunchLoader = {\n dataType: null,\n batchType: null,\n id: 'crunch',\n name: 'Crunch',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['crn'],\n mimeTypes: ['image/crn', 'image/x-crn', 'application/octet-stream'],\n binary: true,\n options: {\n crunch: {\n libraryPath: 'libs/'\n }\n }\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst a = new Uint32Array([0x12345678]);\nconst b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\nconst isLittleEndian = !(b[0] === 0x12);\nconst LITTLE_ENDIAN_OS = isLittleEndian;\n/**\n * The basic string format consists of 3 characters:\n * 1. a character describing the byteorder of the data (<: little-endian, >: big-endian, |: not-relevant)\n * 2. a character code giving the basic type of the array\n * 3. an integer providing the number of bytes the type uses.\n * https://numpy.org/doc/stable/reference/arrays.interface.html\n *\n * Here I only include the second and third characters, and check endianness separately\n */\nconst DTYPES = {\n u1: Uint8Array,\n i1: Int8Array,\n u2: Uint16Array,\n i2: Int16Array,\n u4: Uint32Array,\n i4: Int32Array,\n f4: Float32Array,\n f8: Float64Array\n};\nexport function parseNPY(arrayBuffer, options) {\n const view = new DataView(arrayBuffer);\n const { header, headerEndOffset } = parseHeader(view);\n const numpyType = header.descr;\n const ArrayType = DTYPES[numpyType.slice(1, 3)];\n if (!ArrayType) {\n throw new Error(`Unimplemented type ${numpyType}`);\n }\n const nArrayElements = header.shape?.reduce((a, b) => a * b);\n const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;\n if (arrayBuffer.byteLength < headerEndOffset + arrayByteLength) {\n throw new Error('Buffer overflow');\n }\n const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));\n // Swap endianness if needed\n if ((numpyType[0] === '>' && LITTLE_ENDIAN_OS) || (numpyType[0] === '<' && !LITTLE_ENDIAN_OS)) {\n throw new Error('Incorrect endianness');\n }\n return {\n data,\n header\n };\n}\n/**\n * Parse NPY header\n *\n * @param view\n * @return\n */\nfunction parseHeader(view) {\n const majorVersion = view.getUint8(6);\n // const minorVersion = view.getUint8(7);\n let offset = 8;\n let headerLength;\n if (majorVersion >= 2) {\n headerLength = view.getUint32(offset, true);\n offset += 4;\n }\n else {\n headerLength = view.getUint16(offset, true);\n offset += 2;\n }\n const encoding = majorVersion <= 2 ? 'latin1' : 'utf-8';\n const decoder = new TextDecoder(encoding);\n const headerArray = new Uint8Array(view.buffer, offset, headerLength);\n const headerText = decoder.decode(headerArray);\n offset += headerLength;\n const header = JSON.parse(headerText\n .replace(/'/g, '\"')\n .replace('False', 'false')\n .replace('(', '[')\n .replace(/,*\\),*/g, ']'));\n return { header, headerEndOffset: offset };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseNPY } from \"./lib/parsers/parse-npy.js\";\n// \\x93NUMPY\nconst NPY_MAGIC_NUMBER = new Uint8Array([147, 78, 85, 77, 80, 89]);\n/**\n * Worker loader for numpy \"tiles\"\n */\nexport const NPYWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'NPY',\n id: 'npy',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['npy'],\n mimeTypes: [],\n tests: [NPY_MAGIC_NUMBER.buffer],\n options: {\n npy: {}\n }\n};\n/**\n * Loader for numpy \"tiles\"\n */\nexport const NPYLoader = {\n ...NPYWorkerLoader,\n parseSync: parseNPY,\n parse: async (arrayBuffer, options) => parseNPY(arrayBuffer, options)\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// @ts-nocheck\nimport { getJSModuleOrNull, registerJSModules } from '@loaders.gl/loader-utils';\nimport { loadLibrary } from '@loaders.gl/worker-utils';\nexport const CRUNCH_EXTERNAL_LIBRARIES = {\n /** Crunch decoder library. It is used as dynamically imported script */\n DECODER: 'crunch.js'\n};\n/**\n * Load crunch decoder module\n * @param options - loader options\n * @returns Promise of module object\n */\nexport async function loadCrunchModule(options) {\n registerJSModules(options.modules);\n const crunch = getJSModuleOrNull('crunch');\n if (crunch) {\n return crunch;\n }\n return loadCrunch(options);\n}\nlet crunchModule;\n/**\n * Load crunch decoder module\n * @param {any} options - Loader options\n * @returns {Promise<any>} Promise of Module object\n */\nasync function loadCrunch(options) {\n if (crunchModule) {\n return crunchModule;\n }\n let loadCrunchDecoder = await loadLibrary(CRUNCH_EXTERNAL_LIBRARIES.DECODER, 'textures', options);\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n loadCrunchDecoder ||= globalThis.LoadCrunchDecoder;\n crunchModule = loadCrunchDecoder();\n return crunchModule;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ChildProcessProxy } from '@loaders.gl/worker-utils';\n/*\n * @see https://github.com/TimvanScherpenzeel/texture-compressor\n */\nexport async function encodeImageURLToCompressedTextureURL(inputUrl, outputUrl, options) {\n // prettier-ignore\n const args = [\n // Note: our actual executable is `npx`, so `texture-compressor` is an argument\n 'texture-compressor',\n '--type', 's3tc',\n '--compression', 'DXT1',\n '--quality', 'normal',\n '--input', inputUrl,\n '--output', outputUrl\n ];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: 'npx',\n arguments: args,\n spawn: options\n });\n return outputUrl;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { encodeImageURLToCompressedTextureURL } from \"./lib/encoders/encode-texture.js\";\n/**\n * DDS Texture Container Exporter\n */\nexport const CompressedTextureWriter = {\n name: 'DDS Texture Container',\n id: 'dds',\n module: 'textures',\n version: VERSION,\n extensions: ['dds'],\n mimeTypes: ['image/vnd-ms.dds', 'image/x-dds', 'application/octet-stream'],\n options: {\n texture: {\n format: 'auto',\n compression: 'auto',\n quality: 'auto',\n mipmap: false,\n flipY: false,\n toolFlags: ''\n }\n },\n encodeURLtoURL: encodeImageURLToCompressedTextureURL,\n encode() {\n throw new Error('Not implemented');\n }\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { loadBasisEncoderModule } from \"../parsers/basis-module-loader.js\";\n/**\n * Encodes image to Basis Universal Supercompressed GPU Texture.\n * Code example is taken from here - https://github.com/BinomialLLC/basis_universal/blob/master/webgl/ktx2_encode_test/index.html#L279\n * BasisEncoder API - https://github.com/BinomialLLC/basis_universal/blob/master/webgl/transcoder/basis_wrappers.cpp#L1712\n * @param image\n * @param options\n */\nexport async function encodeKTX2BasisTexture(image, options = {}) {\n // TODO remove default values after writer options will be normalized like it done in load module.\n const { useSRGB = false, qualityLevel = 10, encodeUASTC = false, mipmaps = false } = options?.['ktx2-basis-writer'] || {};\n const { BasisEncoder } = await loadBasisEncoderModule(options);\n const basisEncoder = new BasisEncoder();\n try {\n const basisFileData = new Uint8Array(image.width * image.height * 4);\n basisEncoder.setCreateKTX2File(true);\n basisEncoder.setKTX2UASTCSupercompression(true);\n basisEncoder.setKTX2SRGBTransferFunc(true);\n basisEncoder.setSliceSourceImage(0, image.data, image.width, image.height, false);\n basisEncoder.setPerceptual(useSRGB);\n basisEncoder.setMipSRGB(useSRGB);\n basisEncoder.setQualityLevel(qualityLevel);\n basisEncoder.setUASTC(encodeUASTC);\n basisEncoder.setMipGen(mipmaps);\n const numOutputBytes = basisEncoder.encode(basisFileData);\n const actualKTX2FileData = basisFileData.subarray(0, numOutputBytes).buffer;\n return actualKTX2FileData;\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error('Basis Universal Supercompressed GPU Texture encoder Error: ', error);\n throw error;\n }\n finally {\n basisEncoder.delete();\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { encodeKTX2BasisTexture } from \"./lib/encoders/encode-ktx2-basis-texture.js\";\n/**\n * Basis Universal Supercompressed GPU Texture.\n * Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/textureSetDefinitionFormat.cmn.md\n */\nexport const KTX2BasisWriter = {\n name: 'Basis Universal Supercompressed GPU Texture',\n id: 'ktx2-basis-writer',\n module: 'textures',\n version: VERSION,\n extensions: ['ktx2'],\n mimeTypes: ['image/ktx2'],\n options: {\n ['ktx2-basis-writer']: {\n useSRGB: false,\n qualityLevel: 10,\n encodeUASTC: false,\n mipmaps: false\n }\n },\n encode: encodeKTX2BasisTexture\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@loaders.gl/loader-utils';\nimport { ImageLoader, getImageSize } from '@loaders.gl/images';\nimport { generateUrl } from \"./generate-url.js\";\nimport { deepLoad, shallowLoad } from \"./deep-load.js\";\nexport async function loadImageTexture(getUrl, options = {}) {\n const imageUrls = await getImageUrls(getUrl, options);\n return await deepLoad(imageUrls, ImageLoader.parse, options);\n}\nexport async function getImageUrls(getUrl, options, urlOptions = {}) {\n const mipLevels = (options && options.image && options.image.mipLevels) || 0;\n return mipLevels !== 0\n ? await getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions)\n : generateUrl(getUrl, options, urlOptions);\n}\nasync function getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions) {\n const urls = [];\n // If no mip levels supplied, we need to load the level 0 image and calculate based on size\n if (mipLevels === 'auto') {\n const url = generateUrl(getUrl, options, { ...urlOptions, lod: 0 });\n const image = await shallowLoad(url, ImageLoader.parse, options);\n const { width, height } = getImageSize(image);\n mipLevels = getMipLevels({ width, height });\n // TODO - push image and make `deepLoad` pass through non-url values, avoid loading twice?\n urls.push(url);\n }\n // We now know how many mipLevels we need, remaining image urls can now be constructed\n assert(mipLevels > 0);\n for (let mipLevel = urls.length; mipLevel < mipLevels; ++mipLevel) {\n const url = generateUrl(getUrl, options, { ...urlOptions, lod: mipLevel });\n urls.push(url);\n }\n return urls;\n}\n// Calculates number of mipmaps based on texture size (log2)\nexport function getMipLevels(size) {\n return 1 + Math.floor(Math.log2(Math.max(size.width, size.height)));\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { resolvePath } from '@loaders.gl/loader-utils';\n// Generate a url by calling getUrl with mix of options, applying options.baseUrl\nexport function generateUrl(getUrl, options, urlOptions) {\n // Get url\n let url = typeof getUrl === 'function' ? getUrl({ ...options, ...urlOptions }) : getUrl;\n // Apply options.baseUrl\n const baseUrl = options.baseUrl;\n if (baseUrl) {\n url = baseUrl[baseUrl.length - 1] === '/' ? `${baseUrl}${url}` : `${baseUrl}/${url}`;\n }\n return resolvePath(url);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst isObject = (value) => value && typeof value === 'object';\n// Loads a deep structure of urls (objects and arrays of urls)\n// Returns an object with six key-value pairs containing the images (or image mip arrays)\n// for each cube face\nexport async function asyncDeepMap(tree, func, options = {}) {\n return await mapSubtree(tree, func, options);\n}\nexport async function mapSubtree(object, func, options) {\n if (Array.isArray(object)) {\n return await mapArray(object, func, options);\n }\n if (isObject(object)) {\n return await mapObject(object, func, options);\n }\n // TODO - ignore non-urls, non-arraybuffers?\n const url = object;\n return await func(url, options);\n}\n// HELPERS\nasync function mapObject(object, func, options) {\n const promises = [];\n const values = {};\n for (const key in object) {\n const url = object[key];\n const promise = mapSubtree(url, func, options).then((value) => {\n values[key] = value;\n });\n promises.push(promise);\n }\n await Promise.all(promises);\n return values;\n}\nasync function mapArray(urlArray, func, options = {}) {\n const promises = urlArray.map((url) => mapSubtree(url, func, options));\n return await Promise.all(promises);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { asyncDeepMap } from \"./async-deep-map.js\";\nexport async function deepLoad(urlTree, load, options) {\n return await asyncDeepMap(urlTree, (url) => shallowLoad(url, load, options));\n}\nexport async function shallowLoad(url, load, options) {\n const response = await fetch(url, options.fetch);\n const arrayBuffer = await response.arrayBuffer();\n return await load(arrayBuffer, options);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ImageLoader } from '@loaders.gl/images';\nimport { getImageUrls } from \"./load-image.js\";\nimport { deepLoad } from \"./deep-load.js\";\nexport async function loadImageTextureArray(count, getUrl, options = {}) {\n const imageUrls = await getImageArrayUrls(count, getUrl, options);\n return await deepLoad(imageUrls, ImageLoader.parse, options);\n}\nexport async function getImageArrayUrls(count, getUrl, options = {}) {\n const promises = [];\n for (let index = 0; index < count; index++) {\n const promise = getImageUrls(getUrl, options, { index });\n promises.push(promise);\n }\n return await Promise.all(promises);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ImageLoader } from '@loaders.gl/images';\nimport { getImageUrls } from \"./load-image.js\";\nimport { deepLoad } from \"./deep-load.js\";\n// Returned map will be have keys corresponding to GL cubemap constants\nconst GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;\nconst GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;\nconst GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;\nconst GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;\nconst GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;\nconst GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851a;\nconst CUBE_FACES = [\n { face: GL_TEXTURE_CUBE_MAP_POSITIVE_X, direction: 'right', axis: 'x', sign: 'positive' },\n { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_X, direction: 'left', axis: 'x', sign: 'negative' },\n { face: GL_TEXTURE_CUBE_MAP_POSITIVE_Y, direction: 'top', axis: 'y', sign: 'positive' },\n { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, direction: 'bottom', axis: 'y', sign: 'negative' },\n { face: GL_TEXTURE_CUBE_MAP_POSITIVE_Z, direction: 'front', axis: 'z', sign: 'positive' },\n { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, direction: 'back', axis: 'z', sign: 'negative' }\n];\n// Returns an object with six key-value pairs containing the urls (or url mip arrays)\n// for each cube face\nexport async function getImageCubeUrls(getUrl, options) {\n // Calculate URLs\n const urls = {};\n const promises = [];\n let index = 0;\n for (let i = 0; i < CUBE_FACES.length; ++i) {\n const face = CUBE_FACES[index];\n const promise = getImageUrls(getUrl, options, { ...face, index: index++ }).then((url) => {\n urls[face.face] = url;\n });\n promises.push(promise);\n }\n await Promise.all(promises);\n return urls;\n}\n// Returns an object with six key-value pairs containing the images (or image mip arrays)\n// for each cube face\nexport async function loadImageTextureCube(getUrl, options = {}) {\n const urls = await getImageCubeUrls(getUrl, options);\n return (await deepLoad(urls, ImageLoader.parse, options));\n}\n"],
|
|
5
|
-
"mappings": "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,wBAAwB;AAAA,EAC7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA,EAC7B,WAAY,wBAAwB;AAAA,EACpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,WAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAA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",
|
|
6
|
-
"names": ["module", "import_loader_utils", "a", "b", "import_loader_utils", "
|
|
3
|
+
"sources": ["../src/index.ts", "../src/lib/utils/version.ts", "../src/lib/parsers/parse-basis.ts", "../src/lib/parsers/basis-module-loader.ts", "../src/lib/gl-extensions.ts", "../src/lib/utils/detect-supported-texture-formats.ts", "../src/lib/parsers/parse-ktx.ts", "../src/lib/utils/texture-format-map.ts", "../src/lib/utils/extract-mipmap-images.ts", "../src/lib/utils/ktx-format-helper.ts", "../src/basis-loader.ts", "../src/lib/parsers/parse-dds.ts", "../src/lib/parsers/parse-pvr.ts", "../src/lib/parsers/parse-compressed-texture.ts", "../src/compressed-texture-loader.ts", "../src/crunch-loader.ts", "../src/lib/parsers/parse-hdr.ts", "../src/radiance-hdr-loader.ts", "../src/lib/parsers/parse-npy.ts", "../src/npy-loader.ts", "../src/lib/composite-image/parse-composite-image.ts", "../src/lib/texture-api/async-deep-map.ts", "../src/lib/composite-image/image-texture-cube.ts", "../src/texture-loader.ts", "../src/texture-array-loader.ts", "../src/texture-cube-loader.ts", "../src/texture-cube-array-loader.ts", "../src/lib/parsers/crunch-module-loader.ts", "../src/lib/encoders/encode-texture.ts", "../src/compressed-texture-writer.ts", "../src/lib/encoders/encode-ktx2-basis-texture.ts", "../src/ktx2-basis-writer.ts", "../src/lib/texture-api/load-image.ts", "../src/lib/texture-api/generate-url.ts", "../src/lib/texture-api/load-image-array.ts", "../src/lib/texture-api/load-image-cube.ts"],
|
|
4
|
+
"sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {VERSION} from './lib/utils/version';\n\n// Types\nexport type {GPUTextureFormat, TextureFormat} from '@loaders.gl/schema';\n\n// Loaders\nexport type {BasisLoaderOptions} from './basis-loader';\nexport {BasisLoader, BasisWorkerLoader} from './basis-loader';\n\nexport type {CompressedTextureLoaderOptions} from './compressed-texture-loader';\nexport {CompressedTextureLoader, CompressedTextureWorkerLoader} from './compressed-texture-loader';\n\nexport type {CrunchLoaderOptions} from './crunch-loader';\nexport {CrunchLoader} from './crunch-loader';\n\nexport type {RadianceHDRLoaderOptions} from './radiance-hdr-loader';\nexport type {RadianceHDRMetadata} from './lib/parsers/parse-hdr';\nexport {RadianceHDRLoader} from './radiance-hdr-loader';\n\nexport type {NPYLoaderOptions} from './npy-loader';\nexport {NPYLoader, NPYWorkerLoader} from './npy-loader';\n\nexport type {TextureManifestLoaderOptions, TextureManifest} from './texture-loader';\nexport {TextureLoader} from './texture-loader';\n\nexport type {TextureArrayLoaderOptions, TextureArrayManifest} from './texture-array-loader';\nexport {TextureArrayLoader} from './texture-array-loader';\n\nexport type {TextureCubeLoaderOptions, TextureCubeManifest} from './texture-cube-loader';\nexport {TextureCubeLoader} from './texture-cube-loader';\n\nexport type {\n TextureCubeArrayLoaderOptions,\n TextureCubeArrayManifest\n} from './texture-cube-array-loader';\nexport {TextureCubeArrayLoader} from './texture-cube-array-loader';\n\n// Module constants\nexport {BASIS_EXTERNAL_LIBRARIES} from './lib/parsers/basis-module-loader';\nexport {CRUNCH_EXTERNAL_LIBRARIES} from './lib/parsers/crunch-module-loader';\n\n// Writers\nexport {CompressedTextureWriter} from './compressed-texture-writer';\nexport {KTX2BasisWriter} from './ktx2-basis-writer';\n\nexport const KTX2BasisWriterWorker = {\n name: 'Basis Universal Supercompressed GPU Texture',\n id: 'ktx2-basis-writer',\n module: 'textures',\n version: VERSION,\n extensions: ['ktx2'],\n worker: true,\n options: {\n useSRGB: false,\n qualityLevel: 10,\n encodeUASTC: false,\n mipmaps: false\n }\n};\n\n// Texture Loading API\nexport {loadImageTexture} from './lib/texture-api/load-image';\nexport {loadImageTextureArray} from './lib/texture-api/load-image-array';\nexport {loadImageTextureCube} from './lib/texture-api/load-image-cube';\n\n// Utilities\nexport * from './lib/gl-extensions';\n\n// DEPRECATED\n// @deprecated\nexport {CrunchLoader as CrunchWorkerLoader} from './crunch-loader';\n// @deprecated\nexport type {CompressedTextureLoaderOptions as TextureLoaderOptions} from './compressed-texture-loader';\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\n/* eslint-disable camelcase */\n/* eslint-disable indent */\nimport type {TextureFormat, TextureLevel} from '@loaders.gl/schema';\nimport {extractLoadLibraryOptions} from '@loaders.gl/worker-utils';\nimport {loadBasisEncoderModule, loadBasisTranscoderModule} from './basis-module-loader';\nimport type {GLTextureFormat} from '../gl-types';\nimport {\n GL_COMPRESSED_RED_GREEN_RGTC2_EXT,\n GL_COMPRESSED_RED_RGTC1_EXT,\n GL_COMPRESSED_RGB_ATC_WEBGL,\n GL_COMPRESSED_RGB_ETC1_WEBGL,\n GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\n GL_COMPRESSED_RGB_S3TC_DXT1_EXT,\n GL_COMPRESSED_RGBA8_ETC2_EAC,\n GL_COMPRESSED_RGBA_ASTC_4x4_KHR,\n GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL,\n GL_COMPRESSED_RGBA_BPTC_UNORM_EXT,\n GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,\n GL_RGB565,\n GL_RGBA4,\n GL_RGBA8\n} from '../gl-extensions';\nimport {detectSupportedTextureFormats} from '../utils/detect-supported-texture-formats';\nimport {isKTX} from './parse-ktx';\n\n// TODO - circular type import\nimport type {BasisLoaderOptions} from '../../basis-loader';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: GLTextureFormat;\n textureFormat?: TextureFormat;\n};\n\nlet basisTranscodingLock: Promise<void> = Promise.resolve();\n\nexport const BASIS_FORMAT_TO_OUTPUT_OPTIONS: Record<BasisFormat, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_COMPRESSED_RGB_ETC1_WEBGL,\n textureFormat: 'etc1-rgb-unorm-webgl'\n },\n etc2: {\n basisFormat: 1,\n compressed: true,\n format: GL_COMPRESSED_RGBA8_ETC2_EAC,\n textureFormat: 'etc2-rgba8unorm'\n },\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_COMPRESSED_RGB_S3TC_DXT1_EXT,\n textureFormat: 'bc1-rgb-unorm-webgl'\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,\n textureFormat: 'bc3-rgba-unorm'\n },\n bc4: {\n basisFormat: 4,\n compressed: true,\n format: GL_COMPRESSED_RED_RGTC1_EXT,\n textureFormat: 'bc4-r-unorm'\n },\n bc5: {\n basisFormat: 5,\n compressed: true,\n format: GL_COMPRESSED_RED_GREEN_RGTC2_EXT,\n textureFormat: 'bc5-rg-unorm'\n },\n 'bc7-m6-opaque-only': {\n basisFormat: 6,\n compressed: true,\n format: GL_COMPRESSED_RGBA_BPTC_UNORM_EXT,\n textureFormat: 'bc7-rgba-unorm'\n },\n 'bc7-m5': {\n basisFormat: 7,\n compressed: true,\n format: GL_COMPRESSED_RGBA_BPTC_UNORM_EXT,\n textureFormat: 'bc7-rgba-unorm'\n },\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\n textureFormat: 'pvrtc-rgb4unorm-webgl'\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n textureFormat: 'pvrtc-rgba4unorm-webgl'\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_COMPRESSED_RGBA_ASTC_4x4_KHR,\n textureFormat: 'astc-4x4-unorm'\n },\n 'atc-rgb': {\n basisFormat: 11,\n compressed: true,\n format: GL_COMPRESSED_RGB_ATC_WEBGL,\n textureFormat: 'atc-rgb-unorm-webgl'\n },\n 'atc-rgba-interpolated-alpha': {\n basisFormat: 12,\n compressed: true,\n format: GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL,\n textureFormat: 'atc-rgbai-unorm-webgl'\n },\n rgba32: {\n basisFormat: 13,\n compressed: false,\n format: GL_RGBA8,\n textureFormat: 'rgba8unorm'\n },\n rgb565: {\n basisFormat: 14,\n compressed: false,\n format: GL_RGB565,\n textureFormat: 'rgb565unorm-webgl'\n },\n bgr565: {\n basisFormat: 15,\n compressed: false,\n format: GL_RGB565,\n textureFormat: 'rgb565unorm-webgl'\n },\n rgba4444: {\n basisFormat: 16,\n compressed: false,\n format: GL_RGBA4,\n textureFormat: 'rgba4unorm-webgl'\n }\n};\n\nexport const BASIS_FORMATS = Object.freeze(\n Object.keys(BASIS_FORMAT_TO_OUTPUT_OPTIONS) as BasisFormat[]\n);\n\nexport type ParseBasisOptions = {\n format: 'auto' | BasisFormat | {alpha: BasisFormat; noAlpha: BasisFormat};\n containerFormat: 'auto' | 'ktx2' | 'basis';\n module: 'transcoder' | 'encoder';\n supportedTextureFormats?: TextureFormat[];\n};\n\n/**\n * Serializes access to the Basis transcoder so concurrent callers do not enter the non-reentrant\n * decoder path at the same time.\n * @param transcode - Transcode operation to run with exclusive access.\n * @returns The transcode result.\n */\nexport async function withBasisTranscodingLock<T>(transcode: () => Promise<T> | T): Promise<T> {\n const previousLock = basisTranscodingLock;\n let releaseLock!: () => void;\n\n basisTranscodingLock = new Promise((resolve) => {\n releaseLock = resolve;\n });\n\n await previousLock;\n\n try {\n return await transcode();\n } finally {\n releaseLock();\n }\n}\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\n// eslint-disable-next-line complexity\nexport async function parseBasis(\n data: ArrayBuffer,\n options: BasisLoaderOptions = {}\n): Promise<TextureLevel[][]> {\n const loadLibraryOptions = extractLoadLibraryOptions(options);\n\n return await withBasisTranscodingLock(async () => {\n if (!options.basis?.containerFormat || options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(loadLibraryOptions);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTranscoderModule(loadLibraryOptions);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(loadLibraryOptions);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTranscoderModule(loadLibraryOptions);\n return parseBasisFile(BasisFile, data, options);\n }\n });\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(\n BasisFile,\n data: ArrayBuffer,\n options: BasisLoaderOptions\n): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(\n basisFile,\n imageIndex: number,\n levelIndex: number,\n options: BasisLoaderOptions\n): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat, textureFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n shape: 'texture-level',\n width,\n height,\n data: decodedData,\n compressed,\n ...(format !== undefined ? {format} : {}),\n ...(textureFormat !== undefined ? {textureFormat} : {}),\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options: BasisLoaderOptions): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(\n ktx2File,\n levelIndex: number,\n options: BasisLoaderOptions\n): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat, textureFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n shape: 'texture-level',\n width,\n height,\n data: decodedData,\n compressed,\n ...(format !== undefined ? {format} : {}),\n ...(textureFormat !== undefined ? {textureFormat} : {}),\n\n // Additional fields\n levelSize: decodedSize,\n hasAlpha: alphaFlag\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options: BasisLoaderOptions, hasAlpha: boolean): BasisOutputOptions {\n let format = options.basis?.format || 'auto';\n if (format === 'auto') {\n format = options.basis?.supportedTextureFormats\n ? selectSupportedBasisFormat(options.basis.supportedTextureFormats)\n : selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n const normalizedFormat = format.toLowerCase() as BasisFormat;\n const basisOutputOptions = BASIS_FORMAT_TO_OUTPUT_OPTIONS[normalizedFormat];\n if (!basisOutputOptions) {\n throw new Error(`Unknown Basis format ${format}`);\n }\n return basisOutputOptions;\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n };\nexport function selectSupportedBasisFormat(supportedTextureFormats?: Iterable<TextureFormat>):\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n };\nexport function selectSupportedBasisFormat(\n supportedTextureFormats: Iterable<TextureFormat> = detectSupportedTextureFormats()\n): BasisFormat | {alpha: BasisFormat; noAlpha: BasisFormat} {\n const textureFormats = new Set(supportedTextureFormats);\n\n if (hasSupportedTextureFormat(textureFormats, ['astc-4x4-unorm', 'astc-4x4-unorm-srgb'])) {\n return 'astc-4x4';\n } else if (hasSupportedTextureFormat(textureFormats, ['bc7-rgba-unorm', 'bc7-rgba-unorm-srgb'])) {\n return {\n alpha: 'bc7-m5',\n noAlpha: 'bc7-m6-opaque-only'\n };\n } else if (\n hasSupportedTextureFormat(textureFormats, [\n 'bc1-rgb-unorm-webgl',\n 'bc1-rgb-unorm-srgb-webgl',\n 'bc1-rgba-unorm',\n 'bc1-rgba-unorm-srgb',\n 'bc2-rgba-unorm',\n 'bc2-rgba-unorm-srgb',\n 'bc3-rgba-unorm',\n 'bc3-rgba-unorm-srgb'\n ])\n ) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (\n hasSupportedTextureFormat(textureFormats, [\n 'pvrtc-rgb4unorm-webgl',\n 'pvrtc-rgba4unorm-webgl',\n 'pvrtc-rgb2unorm-webgl',\n 'pvrtc-rgba2unorm-webgl'\n ])\n ) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (\n hasSupportedTextureFormat(textureFormats, [\n 'etc2-rgb8unorm',\n 'etc2-rgb8unorm-srgb',\n 'etc2-rgb8a1unorm',\n 'etc2-rgb8a1unorm-srgb',\n 'etc2-rgba8unorm',\n 'etc2-rgba8unorm-srgb',\n 'eac-r11unorm',\n 'eac-r11snorm',\n 'eac-rg11unorm',\n 'eac-rg11snorm'\n ])\n ) {\n return 'etc2';\n } else if (textureFormats.has('etc1-rgb-unorm-webgl')) {\n return 'etc1';\n } else if (\n hasSupportedTextureFormat(textureFormats, [\n 'atc-rgb-unorm-webgl',\n 'atc-rgba-unorm-webgl',\n 'atc-rgbai-unorm-webgl'\n ])\n ) {\n return {\n alpha: 'atc-rgba-interpolated-alpha',\n noAlpha: 'atc-rgb'\n };\n }\n return 'rgb565';\n}\n\nexport function getSupportedBasisFormats(\n supportedTextureFormats: Iterable<TextureFormat> = detectSupportedTextureFormats()\n): BasisFormat[] {\n const textureFormats = new Set(supportedTextureFormats);\n const basisFormats: BasisFormat[] = [];\n\n if (hasSupportedTextureFormat(textureFormats, ['astc-4x4-unorm', 'astc-4x4-unorm-srgb'])) {\n basisFormats.push('astc-4x4');\n }\n if (\n hasSupportedTextureFormat(textureFormats, [\n 'bc1-rgb-unorm-webgl',\n 'bc1-rgb-unorm-srgb-webgl',\n 'bc1-rgba-unorm',\n 'bc1-rgba-unorm-srgb',\n 'bc2-rgba-unorm',\n 'bc2-rgba-unorm-srgb',\n 'bc3-rgba-unorm',\n 'bc3-rgba-unorm-srgb'\n ])\n ) {\n basisFormats.push('bc1', 'bc3');\n }\n if (hasSupportedTextureFormat(textureFormats, ['bc4-r-unorm', 'bc4-r-snorm'])) {\n basisFormats.push('bc4');\n }\n if (hasSupportedTextureFormat(textureFormats, ['bc5-rg-unorm', 'bc5-rg-snorm'])) {\n basisFormats.push('bc5');\n }\n if (hasSupportedTextureFormat(textureFormats, ['bc7-rgba-unorm', 'bc7-rgba-unorm-srgb'])) {\n basisFormats.push('bc7-m5', 'bc7-m6-opaque-only');\n }\n if (\n hasSupportedTextureFormat(textureFormats, [\n 'pvrtc-rgb4unorm-webgl',\n 'pvrtc-rgba4unorm-webgl',\n 'pvrtc-rgb2unorm-webgl',\n 'pvrtc-rgba2unorm-webgl'\n ])\n ) {\n basisFormats.push('pvrtc1-4-rgb', 'pvrtc1-4-rgba');\n }\n if (\n hasSupportedTextureFormat(textureFormats, [\n 'etc2-rgb8unorm',\n 'etc2-rgb8unorm-srgb',\n 'etc2-rgb8a1unorm',\n 'etc2-rgb8a1unorm-srgb',\n 'etc2-rgba8unorm',\n 'etc2-rgba8unorm-srgb',\n 'eac-r11unorm',\n 'eac-r11snorm',\n 'eac-rg11unorm',\n 'eac-rg11snorm'\n ])\n ) {\n basisFormats.push('etc2');\n }\n if (textureFormats.has('etc1-rgb-unorm-webgl')) {\n basisFormats.push('etc1');\n }\n if (\n hasSupportedTextureFormat(textureFormats, [\n 'atc-rgb-unorm-webgl',\n 'atc-rgba-unorm-webgl',\n 'atc-rgbai-unorm-webgl'\n ])\n ) {\n basisFormats.push('atc-rgb', 'atc-rgba-interpolated-alpha');\n }\n\n basisFormats.push('rgba32', 'rgb565', 'bgr565', 'rgba4444');\n return basisFormats;\n}\n\nfunction hasSupportedTextureFormat(\n supportedTextureFormats: Set<TextureFormat>,\n candidateTextureFormats: TextureFormat[]\n): boolean {\n return candidateTextureFormats.some((textureFormat) =>\n supportedTextureFormats.has(textureFormat)\n );\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {registerJSModules, getJSModuleOrNull} from '@loaders.gl/loader-utils';\nimport {loadLibrary, LoadLibraryOptions} from '@loaders.gl/worker-utils';\n\nexport const BASIS_EXTERNAL_LIBRARIES = {\n /** Basis transcoder, javascript wrapper part */\n TRANSCODER: 'basis_transcoder.js',\n /** Basis transcoder, compiled web assembly part */\n TRANSCODER_WASM: 'basis_transcoder.wasm',\n /** Basis encoder, javascript wrapper part */\n ENCODER: 'basis_encoder.js',\n /** Basis encoder, compiled web assembly part */\n ENCODER_WASM: 'basis_encoder.wasm'\n};\n\nlet loadBasisTranscoderPromise;\n\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nexport async function loadBasisTranscoderModule(options: LoadLibraryOptions) {\n registerJSModules(options.modules);\n const basis = getJSModuleOrNull('basis');\n if (basis) {\n return basis;\n }\n\n loadBasisTranscoderPromise ||= loadBasisTranscoder(options);\n return await loadBasisTranscoderPromise;\n}\n\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nasync function loadBasisTranscoder(options: LoadLibraryOptions) {\n let BASIS = null;\n let wasmBinary = null;\n\n [BASIS, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.TRANSCODER, 'textures', options),\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.TRANSCODER_WASM, 'textures', options)\n ]);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS = BASIS || globalThis.BASIS;\n return await initializeBasisTranscoderModule(BASIS, wasmBinary);\n}\n\n/**\n * Initialize wasm transcoder module\n * @param BasisModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile} promise\n */\nfunction initializeBasisTranscoderModule(BasisModule, wasmBinary) {\n const options: {wasmBinary?} = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisModule(options).then((module) => {\n const {BasisFile, initializeBasis} = module;\n initializeBasis();\n resolve({BasisFile});\n });\n });\n}\n\nlet loadBasisEncoderPromise;\n\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nexport async function loadBasisEncoderModule(options: LoadLibraryOptions) {\n const modules = options.modules || {};\n if (modules.basisEncoder) {\n return modules.basisEncoder;\n }\n\n loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);\n return await loadBasisEncoderPromise;\n}\n\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nasync function loadBasisEncoder(options: LoadLibraryOptions) {\n let BASIS_ENCODER = null;\n let wasmBinary = null;\n\n [BASIS_ENCODER, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.ENCODER, 'textures', options),\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.ENCODER_WASM, 'textures', options)\n ]);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;\n return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);\n}\n\n/**\n * Initialize wasm transcoder module\n * @param BasisEncoderModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile, KTX2File} promise\n */\nfunction initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {\n const options: {wasmBinary?} = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisEncoderModule(options).then((module) => {\n const {BasisFile, KTX2File, initializeBasis, BasisEncoder} = module;\n initializeBasis();\n resolve({BasisFile, KTX2File, BasisEncoder});\n });\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable camelcase */\n\n// Core WebGL texture formats\nexport const GL_RGB = 0x1907;\nexport const GL_RGBA = 0x1908;\nexport const GL_RGBA4 = 0x8056;\nexport const GL_RGB5_A1 = 0x8057;\nexport const GL_RGBA8 = 0x8058;\nexport const GL_RGB565 = 0x8d62;\nexport const GL_RGBA32F = 0x8814;\n\n// WEBGL_compressed_texture_s3tc\nexport const GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83f0;\nexport const GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83f1;\nexport const GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83f2;\nexport const GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83f3;\n\n// WEBGL_compressed_texture_es3\nexport const GL_COMPRESSED_R11_EAC = 0x9270;\nexport const GL_COMPRESSED_SIGNED_R11_EAC = 0x9271;\nexport const GL_COMPRESSED_RG11_EAC = 0x9272;\nexport const GL_COMPRESSED_SIGNED_RG11_EAC = 0x9273;\nexport const GL_COMPRESSED_RGB8_ETC2 = 0x9274;\nexport const GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9275;\nexport const GL_COMPRESSED_SRGB8_ETC2 = 0x9276;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9277;\nexport const GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9278;\nexport const GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9279;\n\n// WEBGL_compressed_texture_pvrtc\nexport const GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8c00;\nexport const GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8c01;\nexport const GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8c02;\nexport const GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8c03;\n\n// WEBGL_compressed_texture_etc1\nexport const GL_COMPRESSED_RGB_ETC1_WEBGL = 0x8d64;\n\n// WEBGL_compressed_texture_atc\nexport const GL_COMPRESSED_RGB_ATC_WEBGL = 0x8c92;\nexport const GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL = 0x8c93;\nexport const GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL = 0x87ee;\n\n// WEBGL_compressed_texture_astc\nexport const GL_COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93b0;\nexport const GL_COMPRESSED_RGBA_ASTC_5x4_KHR = 0x93b1;\nexport const GL_COMPRESSED_RGBA_ASTC_5x5_KHR = 0x93b2;\nexport const GL_COMPRESSED_RGBA_ASTC_6x5_KHR = 0x93b3;\nexport const GL_COMPRESSED_RGBA_ASTC_6x6_KHR = 0x93b4;\nexport const GL_COMPRESSED_RGBA_ASTC_8x5_KHR = 0x93b5;\nexport const GL_COMPRESSED_RGBA_ASTC_8x6_KHR = 0x93b6;\nexport const GL_COMPRESSED_RGBA_ASTC_8x8_KHR = 0x93b7;\nexport const GL_COMPRESSED_RGBA_ASTC_10x5_KHR = 0x93b8;\nexport const GL_COMPRESSED_RGBA_ASTC_10x6_KHR = 0x93b9;\nexport const GL_COMPRESSED_RGBA_ASTC_10x8_KHR = 0x93ba;\nexport const GL_COMPRESSED_RGBA_ASTC_10x10_KHR = 0x93bb;\nexport const GL_COMPRESSED_RGBA_ASTC_12x10_KHR = 0x93bc;\nexport const GL_COMPRESSED_RGBA_ASTC_12x12_KHR = 0x93bd;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x93d0;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 0x93d1;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 0x93d2;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 0x93d3;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 0x93d4;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 0x93d5;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 0x93d6;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 0x93d7;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 0x93d8;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 0x93d9;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 0x93da;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 0x93db;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 0x93dc;\nexport const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 0x93dd;\n\n// EXT_texture_compression_rgtc\nexport const GL_COMPRESSED_RED_RGTC1_EXT = 0x8dbb;\nexport const GL_COMPRESSED_SIGNED_RED_RGTC1_EXT = 0x8dbc;\nexport const GL_COMPRESSED_RED_GREEN_RGTC2_EXT = 0x8dbd;\nexport const GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT = 0x8dbe;\n\n// EXT_texture_compression_bptc\nexport const GL_COMPRESSED_RGBA_BPTC_UNORM_EXT = 0x8e8c;\nexport const GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT = 0x8e8d;\nexport const GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT = 0x8e8e;\nexport const GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT = 0x8e8f;\n\n// WEBGL_compressed_texture_s3tc_srgb\nexport const GL_COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x8c4c;\nexport const GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 0x8c4d;\nexport const GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x8c4e;\nexport const GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x8c4f;\n\nexport const GL_EXTENSIONS_CONSTANTS = {\n RGB: GL_RGB,\n RGBA: GL_RGBA,\n RGBA4: GL_RGBA4,\n RGB5_A1: GL_RGB5_A1,\n RGBA8: GL_RGBA8,\n RGB565: GL_RGB565,\n RGBA32F: GL_RGBA32F,\n COMPRESSED_RGB_S3TC_DXT1_EXT: GL_COMPRESSED_RGB_S3TC_DXT1_EXT,\n COMPRESSED_RGBA_S3TC_DXT1_EXT: GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,\n COMPRESSED_RGBA_S3TC_DXT3_EXT: GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,\n COMPRESSED_RGBA_S3TC_DXT5_EXT: GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,\n COMPRESSED_R11_EAC: GL_COMPRESSED_R11_EAC,\n COMPRESSED_SIGNED_R11_EAC: GL_COMPRESSED_SIGNED_R11_EAC,\n COMPRESSED_RG11_EAC: GL_COMPRESSED_RG11_EAC,\n COMPRESSED_SIGNED_RG11_EAC: GL_COMPRESSED_SIGNED_RG11_EAC,\n COMPRESSED_RGB8_ETC2: GL_COMPRESSED_RGB8_ETC2,\n COMPRESSED_RGBA8_ETC2_EAC: GL_COMPRESSED_RGBA8_ETC2_EAC,\n COMPRESSED_SRGB8_ETC2: GL_COMPRESSED_SRGB8_ETC2,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG,\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\n COMPRESSED_RGB_ETC1_WEBGL: GL_COMPRESSED_RGB_ETC1_WEBGL,\n COMPRESSED_RGB_ATC_WEBGL: GL_COMPRESSED_RGB_ATC_WEBGL,\n COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL,\n COMPRESSED_RGBA_ASTC_4x4_KHR: GL_COMPRESSED_RGBA_ASTC_4x4_KHR,\n COMPRESSED_RGBA_ASTC_5x4_KHR: GL_COMPRESSED_RGBA_ASTC_5x4_KHR,\n COMPRESSED_RGBA_ASTC_5x5_KHR: GL_COMPRESSED_RGBA_ASTC_5x5_KHR,\n COMPRESSED_RGBA_ASTC_6x5_KHR: GL_COMPRESSED_RGBA_ASTC_6x5_KHR,\n COMPRESSED_RGBA_ASTC_6x6_KHR: GL_COMPRESSED_RGBA_ASTC_6x6_KHR,\n COMPRESSED_RGBA_ASTC_8x5_KHR: GL_COMPRESSED_RGBA_ASTC_8x5_KHR,\n COMPRESSED_RGBA_ASTC_8x6_KHR: GL_COMPRESSED_RGBA_ASTC_8x6_KHR,\n COMPRESSED_RGBA_ASTC_8x8_KHR: GL_COMPRESSED_RGBA_ASTC_8x8_KHR,\n COMPRESSED_RGBA_ASTC_10x5_KHR: GL_COMPRESSED_RGBA_ASTC_10x5_KHR,\n COMPRESSED_RGBA_ASTC_10x6_KHR: GL_COMPRESSED_RGBA_ASTC_10x6_KHR,\n COMPRESSED_RGBA_ASTC_10x8_KHR: GL_COMPRESSED_RGBA_ASTC_10x8_KHR,\n COMPRESSED_RGBA_ASTC_10x10_KHR: GL_COMPRESSED_RGBA_ASTC_10x10_KHR,\n COMPRESSED_RGBA_ASTC_12x10_KHR: GL_COMPRESSED_RGBA_ASTC_12x10_KHR,\n COMPRESSED_RGBA_ASTC_12x12_KHR: GL_COMPRESSED_RGBA_ASTC_12x12_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,\n COMPRESSED_RED_RGTC1_EXT: GL_COMPRESSED_RED_RGTC1_EXT,\n COMPRESSED_SIGNED_RED_RGTC1_EXT: GL_COMPRESSED_SIGNED_RED_RGTC1_EXT,\n COMPRESSED_RED_GREEN_RGTC2_EXT: GL_COMPRESSED_RED_GREEN_RGTC2_EXT,\n COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\n COMPRESSED_RGBA_BPTC_UNORM_EXT: GL_COMPRESSED_RGBA_BPTC_UNORM_EXT,\n COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT: GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT,\n COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT: GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,\n COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT: GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,\n COMPRESSED_SRGB_S3TC_DXT1_EXT: GL_COMPRESSED_SRGB_S3TC_DXT1_EXT,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\n // Deprecated legacy aliases with non-standard ASTC casing.\n COMPRESSED_RGBA_ASTC_4X4_KHR: GL_COMPRESSED_RGBA_ASTC_4x4_KHR,\n COMPRESSED_RGBA_ASTC_5X4_KHR: GL_COMPRESSED_RGBA_ASTC_5x4_KHR,\n COMPRESSED_RGBA_ASTC_5X5_KHR: GL_COMPRESSED_RGBA_ASTC_5x5_KHR,\n COMPRESSED_RGBA_ASTC_6X5_KHR: GL_COMPRESSED_RGBA_ASTC_6x5_KHR,\n COMPRESSED_RGBA_ASTC_6X6_KHR: GL_COMPRESSED_RGBA_ASTC_6x6_KHR,\n COMPRESSED_RGBA_ASTC_8X5_KHR: GL_COMPRESSED_RGBA_ASTC_8x5_KHR,\n COMPRESSED_RGBA_ASTC_8X6_KHR: GL_COMPRESSED_RGBA_ASTC_8x6_KHR,\n COMPRESSED_RGBA_ASTC_8X8_KHR: GL_COMPRESSED_RGBA_ASTC_8x8_KHR,\n COMPRESSED_RGBA_ASTC_10X5_KHR: GL_COMPRESSED_RGBA_ASTC_10x5_KHR,\n COMPRESSED_RGBA_ASTC_10X6_KHR: GL_COMPRESSED_RGBA_ASTC_10x6_KHR,\n COMPRESSED_RGBA_ASTC_10X8_KHR: GL_COMPRESSED_RGBA_ASTC_10x8_KHR,\n COMPRESSED_RGBA_ASTC_10X10_KHR: GL_COMPRESSED_RGBA_ASTC_10x10_KHR,\n COMPRESSED_RGBA_ASTC_12X10_KHR: GL_COMPRESSED_RGBA_ASTC_12x10_KHR,\n COMPRESSED_RGBA_ASTC_12X12_KHR: GL_COMPRESSED_RGBA_ASTC_12x12_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR\n} as const;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {GPUTextureFormat, TextureFormat} from '@loaders.gl/schema';\n\nconst BROWSER_PREFIXES = ['', 'WEBKIT_', 'MOZ_'];\n\nconst WEBGL_TEXTURE_FORMATS: {[key: string]: TextureFormat[]} = {\n /* eslint-disable camelcase */\n WEBGL_compressed_texture_s3tc: [\n 'bc1-rgb-unorm-webgl',\n 'bc1-rgba-unorm',\n 'bc2-rgba-unorm',\n 'bc3-rgba-unorm'\n ],\n WEBGL_compressed_texture_s3tc_srgb: [\n 'bc1-rgb-unorm-srgb-webgl',\n 'bc1-rgba-unorm-srgb',\n 'bc2-rgba-unorm-srgb',\n 'bc3-rgba-unorm-srgb'\n ],\n EXT_texture_compression_rgtc: ['bc4-r-unorm', 'bc4-r-snorm', 'bc5-rg-unorm', 'bc5-rg-snorm'],\n EXT_texture_compression_bptc: [\n 'bc6h-rgb-ufloat',\n 'bc6h-rgb-float',\n 'bc7-rgba-unorm',\n 'bc7-rgba-unorm-srgb'\n ],\n WEBGL_compressed_texture_etc1: ['etc1-rgb-unorm-webgl'],\n WEBGL_compressed_texture_etc: [\n 'etc2-rgb8unorm',\n 'etc2-rgb8unorm-srgb',\n 'etc2-rgb8a1unorm',\n 'etc2-rgb8a1unorm-srgb',\n 'etc2-rgba8unorm',\n 'etc2-rgba8unorm-srgb',\n 'eac-r11unorm',\n 'eac-r11snorm',\n 'eac-rg11unorm',\n 'eac-rg11snorm'\n ],\n WEBGL_compressed_texture_pvrtc: [\n 'pvrtc-rgb4unorm-webgl',\n 'pvrtc-rgba4unorm-webgl',\n 'pvrtc-rgb2unorm-webgl',\n 'pvrtc-rgba2unorm-webgl'\n ],\n WEBGL_compressed_texture_atc: [\n 'atc-rgb-unorm-webgl',\n 'atc-rgba-unorm-webgl',\n 'atc-rgbai-unorm-webgl'\n ],\n WEBGL_compressed_texture_astc: [\n 'astc-4x4-unorm',\n 'astc-4x4-unorm-srgb',\n 'astc-5x4-unorm',\n 'astc-5x4-unorm-srgb',\n 'astc-5x5-unorm',\n 'astc-5x5-unorm-srgb',\n 'astc-6x5-unorm',\n 'astc-6x5-unorm-srgb',\n 'astc-6x6-unorm',\n 'astc-6x6-unorm-srgb',\n 'astc-8x5-unorm',\n 'astc-8x5-unorm-srgb',\n 'astc-8x6-unorm',\n 'astc-8x6-unorm-srgb',\n 'astc-8x8-unorm',\n 'astc-8x8-unorm-srgb',\n 'astc-10x5-unorm',\n 'astc-10x5-unorm-srgb',\n 'astc-10x6-unorm',\n 'astc-10x6-unorm-srgb',\n 'astc-10x8-unorm',\n 'astc-10x8-unorm-srgb',\n 'astc-10x10-unorm',\n 'astc-10x10-unorm-srgb',\n 'astc-12x10-unorm',\n 'astc-12x10-unorm-srgb',\n 'astc-12x12-unorm',\n 'astc-12x12-unorm-srgb'\n ]\n /* eslint-enable camelcase */\n};\n\nconst GPU_TEXTURE_FORMATS: {[key in GPUTextureFormat]: TextureFormat[]} = {\n dxt: ['bc1-rgb-unorm-webgl', 'bc1-rgba-unorm', 'bc2-rgba-unorm', 'bc3-rgba-unorm'],\n 'dxt-srgb': [\n 'bc1-rgb-unorm-srgb-webgl',\n 'bc1-rgba-unorm-srgb',\n 'bc2-rgba-unorm-srgb',\n 'bc3-rgba-unorm-srgb'\n ],\n etc1: ['etc1-rgb-unorm-webgl'],\n etc2: [\n 'etc2-rgb8unorm',\n 'etc2-rgb8unorm-srgb',\n 'etc2-rgb8a1unorm',\n 'etc2-rgb8a1unorm-srgb',\n 'etc2-rgba8unorm',\n 'etc2-rgba8unorm-srgb',\n 'eac-r11unorm',\n 'eac-r11snorm',\n 'eac-rg11unorm',\n 'eac-rg11snorm'\n ],\n pvrtc: [\n 'pvrtc-rgb4unorm-webgl',\n 'pvrtc-rgba4unorm-webgl',\n 'pvrtc-rgb2unorm-webgl',\n 'pvrtc-rgba2unorm-webgl'\n ],\n atc: ['atc-rgb-unorm-webgl', 'atc-rgba-unorm-webgl', 'atc-rgbai-unorm-webgl'],\n astc: [\n 'astc-4x4-unorm',\n 'astc-4x4-unorm-srgb',\n 'astc-5x4-unorm',\n 'astc-5x4-unorm-srgb',\n 'astc-5x5-unorm',\n 'astc-5x5-unorm-srgb',\n 'astc-6x5-unorm',\n 'astc-6x5-unorm-srgb',\n 'astc-6x6-unorm',\n 'astc-6x6-unorm-srgb',\n 'astc-8x5-unorm',\n 'astc-8x5-unorm-srgb',\n 'astc-8x6-unorm',\n 'astc-8x6-unorm-srgb',\n 'astc-8x8-unorm',\n 'astc-8x8-unorm-srgb',\n 'astc-10x5-unorm',\n 'astc-10x5-unorm-srgb',\n 'astc-10x6-unorm',\n 'astc-10x6-unorm-srgb',\n 'astc-10x8-unorm',\n 'astc-10x8-unorm-srgb',\n 'astc-10x10-unorm',\n 'astc-10x10-unorm-srgb',\n 'astc-12x10-unorm',\n 'astc-12x10-unorm-srgb',\n 'astc-12x12-unorm',\n 'astc-12x12-unorm-srgb'\n ],\n rgtc: ['bc4-r-unorm', 'bc4-r-snorm', 'bc5-rg-unorm', 'bc5-rg-snorm']\n};\n\nlet formats: Set<GPUTextureFormat> | null = null;\nlet textureFormats: Set<TextureFormat> | null = null;\n\n// DEPRECATED\n/**\n * @deprecated Pass `basis.supportedTextureFormats` to Basis loaders instead of relying on global detection.\n */\nexport function detectSupportedTextureFormats(gl?: WebGLRenderingContext): Set<TextureFormat> {\n if (!textureFormats) {\n gl = gl || getWebGLContext() || undefined;\n textureFormats = new Set<TextureFormat>();\n\n for (const prefix of BROWSER_PREFIXES) {\n for (const extension in WEBGL_TEXTURE_FORMATS) {\n if (gl && gl.getExtension(`${prefix}${extension}`)) {\n for (const textureFormat of WEBGL_TEXTURE_FORMATS[extension]) {\n textureFormats.add(textureFormat);\n }\n }\n }\n }\n }\n\n return textureFormats;\n}\n\n// DEPRECATED\n/**\n * Returns a list of formats.\n * Creates a temporary WebGLRenderingContext if none is provided.\n *\n * @deprecated Pass `basis.supportedTextureFormats` to Basis loaders instead of relying on global detection.\n * @param gl - Optional context.\n */\nexport function detectSupportedGPUTextureFormats(gl?: WebGLRenderingContext): Set<string> {\n if (!formats) {\n formats = new Set<GPUTextureFormat>();\n const supportedTextureFormats = detectSupportedTextureFormats(gl);\n\n for (const gpuTextureFormat in GPU_TEXTURE_FORMATS) {\n const textureFormatsForGroup = GPU_TEXTURE_FORMATS[gpuTextureFormat as GPUTextureFormat];\n if (\n textureFormatsForGroup.some((textureFormat) => supportedTextureFormats.has(textureFormat))\n ) {\n formats.add(gpuTextureFormat as GPUTextureFormat);\n }\n }\n }\n\n return formats;\n}\n\n/**\n * @returns {WebGLRenderingContext?}\n */\nfunction getWebGLContext() {\n try {\n const canvas = document.createElement('canvas');\n return canvas.getContext('webgl');\n } catch (error) {\n return null;\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {log} from '@loaders.gl/loader-utils';\nimport {read} from 'ktx-parse';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\nimport {mapVkFormatToTextureFormat} from '../utils/ktx-format-helper';\n\nconst KTX2_ID = [\n // '\u00B4', 'K', 'T', 'X', '2', '0', '\u00AA', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n\n// eslint-disable-next-line complexity\nexport function isKTX(data: ArrayBuffer) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX =\n id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '\u00B4'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // '\u00AA'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n\n return !notKTX;\n}\n\nexport function parseKTX(arrayBuffer: ArrayBuffer): TextureLevel[] {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const textureFormat = mapVkFormatToTextureFormat(ktx.vkFormat);\n\n if (textureFormat === undefined) {\n // TODO: Basis-backed and otherwise unknown-format KTX2 files should preserve the\n // legacy CompressedTextureLoader behavior for now. Do not fail here or add implicit\n // transcoding in this parser path; just return levels without `format` metadata.\n log.warn(\n `KTX2 container vkFormat ${ktx.vkFormat} does not map to a known texture format; returning texture levels without format metadata.`\n )();\n }\n\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level: any): number => level.uncompressedByteLength,\n textureFormat\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable camelcase */\nimport type {TextureFormat} from '@loaders.gl/schema';\nimport type {GLTextureFormat} from '../gl-types';\nimport {\n GL_RGBA32F,\n GL_COMPRESSED_R11_EAC,\n GL_COMPRESSED_RED_GREEN_RGTC2_EXT,\n GL_COMPRESSED_RED_RGTC1_EXT,\n GL_COMPRESSED_RG11_EAC,\n GL_COMPRESSED_RGB8_ETC2,\n GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n GL_COMPRESSED_RGB_ATC_WEBGL,\n GL_COMPRESSED_RGB_ETC1_WEBGL,\n GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG,\n GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\n GL_COMPRESSED_RGB_S3TC_DXT1_EXT,\n GL_COMPRESSED_RGBA8_ETC2_EAC,\n GL_COMPRESSED_RGBA_ASTC_10x10_KHR,\n GL_COMPRESSED_RGBA_ASTC_10x5_KHR,\n GL_COMPRESSED_RGBA_ASTC_10x6_KHR,\n GL_COMPRESSED_RGBA_ASTC_10x8_KHR,\n GL_COMPRESSED_RGBA_ASTC_12x10_KHR,\n GL_COMPRESSED_RGBA_ASTC_12x12_KHR,\n GL_COMPRESSED_RGBA_ASTC_4x4_KHR,\n GL_COMPRESSED_RGBA_ASTC_5x4_KHR,\n GL_COMPRESSED_RGBA_ASTC_5x5_KHR,\n GL_COMPRESSED_RGBA_ASTC_6x5_KHR,\n GL_COMPRESSED_RGBA_ASTC_6x6_KHR,\n GL_COMPRESSED_RGBA_ASTC_8x5_KHR,\n GL_COMPRESSED_RGBA_ASTC_8x6_KHR,\n GL_COMPRESSED_RGBA_ASTC_8x8_KHR,\n GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL,\n GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\n GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,\n GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,\n GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,\n GL_COMPRESSED_SIGNED_R11_EAC,\n GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\n GL_COMPRESSED_SIGNED_RED_RGTC1_EXT,\n GL_COMPRESSED_SIGNED_RG11_EAC,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,\n GL_COMPRESSED_SRGB8_ETC2,\n GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\n GL_COMPRESSED_SRGB_S3TC_DXT1_EXT\n} from '../gl-extensions';\n\nconst WEBGL_TO_TEXTURE_FORMAT: Record<number, TextureFormat> = {\n [GL_RGBA32F]: 'rgba32float',\n [GL_COMPRESSED_RGB_S3TC_DXT1_EXT]: 'bc1-rgb-unorm-webgl',\n [GL_COMPRESSED_SRGB_S3TC_DXT1_EXT]: 'bc1-rgb-unorm-srgb-webgl',\n [GL_COMPRESSED_RGBA_S3TC_DXT1_EXT]: 'bc1-rgba-unorm',\n [GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT]: 'bc1-rgba-unorm-srgb',\n [GL_COMPRESSED_RGBA_S3TC_DXT3_EXT]: 'bc2-rgba-unorm',\n [GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT]: 'bc2-rgba-unorm-srgb',\n [GL_COMPRESSED_RGBA_S3TC_DXT5_EXT]: 'bc3-rgba-unorm',\n [GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT]: 'bc3-rgba-unorm-srgb',\n [GL_COMPRESSED_RED_RGTC1_EXT]: 'bc4-r-unorm',\n [GL_COMPRESSED_SIGNED_RED_RGTC1_EXT]: 'bc4-r-snorm',\n [GL_COMPRESSED_RED_GREEN_RGTC2_EXT]: 'bc5-rg-unorm',\n [GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT]: 'bc5-rg-snorm',\n [GL_COMPRESSED_RGB8_ETC2]: 'etc2-rgb8unorm',\n [GL_COMPRESSED_SRGB8_ETC2]: 'etc2-rgb8unorm-srgb',\n [GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2]: 'etc2-rgb8a1unorm',\n [GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2]: 'etc2-rgb8a1unorm-srgb',\n [GL_COMPRESSED_RGBA8_ETC2_EAC]: 'etc2-rgba8unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC]: 'etc2-rgba8unorm-srgb',\n [GL_COMPRESSED_R11_EAC]: 'eac-r11unorm',\n [GL_COMPRESSED_SIGNED_R11_EAC]: 'eac-r11snorm',\n [GL_COMPRESSED_RG11_EAC]: 'eac-rg11unorm',\n [GL_COMPRESSED_SIGNED_RG11_EAC]: 'eac-rg11snorm',\n [GL_COMPRESSED_RGBA_ASTC_4x4_KHR]: 'astc-4x4-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR]: 'astc-4x4-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_5x4_KHR]: 'astc-5x4-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR]: 'astc-5x4-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_5x5_KHR]: 'astc-5x5-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR]: 'astc-5x5-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_6x5_KHR]: 'astc-6x5-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR]: 'astc-6x5-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_6x6_KHR]: 'astc-6x6-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR]: 'astc-6x6-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_8x5_KHR]: 'astc-8x5-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR]: 'astc-8x5-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_8x6_KHR]: 'astc-8x6-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR]: 'astc-8x6-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_8x8_KHR]: 'astc-8x8-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR]: 'astc-8x8-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_10x5_KHR]: 'astc-10x5-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR]: 'astc-10x5-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_10x6_KHR]: 'astc-10x6-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR]: 'astc-10x6-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_10x8_KHR]: 'astc-10x8-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR]: 'astc-10x8-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_10x10_KHR]: 'astc-10x10-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR]: 'astc-10x10-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_12x10_KHR]: 'astc-12x10-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR]: 'astc-12x10-unorm-srgb',\n [GL_COMPRESSED_RGBA_ASTC_12x12_KHR]: 'astc-12x12-unorm',\n [GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR]: 'astc-12x12-unorm-srgb',\n [GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG]: 'pvrtc-rgb4unorm-webgl',\n [GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG]: 'pvrtc-rgba4unorm-webgl',\n [GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG]: 'pvrtc-rgb2unorm-webgl',\n [GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG]: 'pvrtc-rgba2unorm-webgl',\n [GL_COMPRESSED_RGB_ETC1_WEBGL]: 'etc1-rgb-unorm-webgl',\n [GL_COMPRESSED_RGB_ATC_WEBGL]: 'atc-rgb-unorm-webgl',\n [GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL]: 'atc-rgba-unorm-webgl',\n [GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL]: 'atc-rgbai-unorm-webgl'\n};\n\nconst TEXTURE_FORMAT_TO_WEBGL = Object.fromEntries(\n Object.entries(WEBGL_TO_TEXTURE_FORMAT).map(([format, textureFormat]) => [\n textureFormat,\n Number(format)\n ])\n) as Partial<Record<TextureFormat, GLTextureFormat>>;\n\nexport function getTextureFormatFromWebGLFormat(\n format?: GLTextureFormat\n): TextureFormat | undefined {\n if (format === undefined) {\n return undefined;\n }\n\n return WEBGL_TO_TEXTURE_FORMAT[format];\n}\n\n/**\n * Returns the WebGL/OpenGL compressed texture constant for a canonical loaders.gl texture format.\n * @param textureFormat - Canonical texture format string.\n * @returns Matching WebGL/OpenGL constant, if known.\n */\nexport function getWebGLFormatFromTextureFormat(\n textureFormat?: TextureFormat\n): GLTextureFormat | undefined {\n if (textureFormat === undefined) {\n return undefined;\n }\n\n return TEXTURE_FORMAT_TO_WEBGL[textureFormat];\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {TextureFormat, TextureLevel} from '@loaders.gl/schema';\nimport type {GLTextureFormat} from '../gl-types';\nimport {\n getTextureFormatFromWebGLFormat,\n getWebGLFormatFromTextureFormat\n} from './texture-format-map';\n\nexport type CompressedTextureExtractOptions = {\n mipMapLevels: number;\n width: number;\n height: number;\n sizeFunction: Function;\n internalFormat?: GLTextureFormat;\n /** Canonical loaders.gl texture format for the mip levels being extracted. */\n textureFormat?: TextureFormat;\n};\n\n/**\n * Extract mipmap images from compressed texture buffer\n * @param data - binary data of compressed texture or Array of level objects\n * @param options.mipMapLevels - number of mipmap level inside image\n * @param options.width - width of 0 - level\n * @param options.height - height of 0 - level\n * @param options.sizeFunction - format-related function to calculate level size in bytes\n * @param options.internalFormat - WebGL compatible format code\n * @param options.textureFormat - canonical loaders.gl texture format\n * @returns Array of the texture levels\n */\nexport function extractMipmapImages(\n data: Uint8Array | object[],\n options: CompressedTextureExtractOptions\n): TextureLevel[] {\n const images = new Array(options.mipMapLevels);\n const textureFormat =\n options.textureFormat || getTextureFormatFromWebGLFormat(options.internalFormat);\n const format = options.internalFormat || getWebGLFormatFromTextureFormat(options.textureFormat);\n\n let levelWidth = options.width;\n let levelHeight = options.height;\n let offset = 0;\n\n for (let i = 0; i < options.mipMapLevels; ++i) {\n // @ts-expect-error\n const levelSize = getLevelSize(options, levelWidth, levelHeight, data, i);\n // @ts-expect-error\n const levelData = getLevelData(data, i, offset, levelSize);\n\n const image: TextureLevel = {\n shape: 'texture-level',\n compressed: true,\n data: levelData,\n width: levelWidth,\n height: levelHeight,\n levelSize\n };\n\n if (format !== undefined) {\n image.format = format;\n }\n if (textureFormat) {\n image.textureFormat = textureFormat;\n }\n images[i] = image;\n\n levelWidth = Math.max(1, levelWidth >> 1);\n levelHeight = Math.max(1, levelHeight >> 1);\n\n offset += levelSize;\n }\n return images;\n}\n\nfunction getLevelData(\n data: Uint8Array,\n index: number,\n offset: number,\n levelSize: number\n): Uint8Array {\n if (!Array.isArray(data)) {\n return new Uint8Array(data.buffer, data.byteOffset + offset, levelSize);\n }\n\n return data[index].levelData;\n}\n\nfunction getLevelSize(\n options: CompressedTextureExtractOptions,\n levelWidth: number,\n levelHeight: number,\n data: Uint8Array[] | object[],\n index: number\n): number {\n if (!Array.isArray(data)) {\n return options.sizeFunction(levelWidth, levelHeight);\n }\n return options.sizeFunction(data[index]);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable camelcase */\nimport type {TextureFormat} from '@loaders.gl/schema';\nimport type {GLTextureFormat} from '../gl-types';\nimport {\n GL_COMPRESSED_R11_EAC,\n GL_COMPRESSED_RED_GREEN_RGTC2_EXT,\n GL_COMPRESSED_RED_RGTC1_EXT,\n GL_COMPRESSED_RG11_EAC,\n GL_COMPRESSED_RGB8_ETC2,\n GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n GL_COMPRESSED_RGBA8_ETC2_EAC,\n GL_COMPRESSED_RGBA_ASTC_10x10_KHR,\n GL_COMPRESSED_RGBA_ASTC_10x5_KHR,\n GL_COMPRESSED_RGBA_ASTC_10x6_KHR,\n GL_COMPRESSED_RGBA_ASTC_10x8_KHR,\n GL_COMPRESSED_RGBA_ASTC_12x10_KHR,\n GL_COMPRESSED_RGBA_ASTC_12x12_KHR,\n GL_COMPRESSED_RGBA_ASTC_4x4_KHR,\n GL_COMPRESSED_RGBA_ASTC_5x4_KHR,\n GL_COMPRESSED_RGBA_ASTC_5x5_KHR,\n GL_COMPRESSED_RGBA_ASTC_6x5_KHR,\n GL_COMPRESSED_RGBA_ASTC_6x6_KHR,\n GL_COMPRESSED_RGBA_ASTC_8x5_KHR,\n GL_COMPRESSED_RGBA_ASTC_8x6_KHR,\n GL_COMPRESSED_RGBA_ASTC_8x8_KHR,\n GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\n GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,\n GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,\n GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,\n GL_COMPRESSED_RGB_S3TC_DXT1_EXT,\n GL_COMPRESSED_SIGNED_R11_EAC,\n GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\n GL_COMPRESSED_SIGNED_RED_RGTC1_EXT,\n GL_COMPRESSED_SIGNED_RG11_EAC,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,\n GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,\n GL_COMPRESSED_SRGB8_ETC2,\n GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\n GL_COMPRESSED_SRGB_S3TC_DXT1_EXT\n} from '../gl-extensions';\nimport {getTextureFormatFromWebGLFormat} from './texture-format-map';\n\nconst VULKAN_TO_WEBGL_FORMAT_MAP: Record<number, GLTextureFormat> = {\n 131: GL_COMPRESSED_RGB_S3TC_DXT1_EXT,\n 132: GL_COMPRESSED_SRGB_S3TC_DXT1_EXT,\n 133: GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,\n 134: GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n 135: GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,\n 136: GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n 137: GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 138: GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\n 139: GL_COMPRESSED_RED_RGTC1_EXT,\n 140: GL_COMPRESSED_SIGNED_RED_RGTC1_EXT,\n 141: GL_COMPRESSED_RED_GREEN_RGTC2_EXT,\n 142: GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\n 147: GL_COMPRESSED_RGB8_ETC2,\n 148: GL_COMPRESSED_SRGB8_ETC2,\n 149: GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 150: GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 151: GL_COMPRESSED_RGBA8_ETC2_EAC,\n 152: GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,\n 153: GL_COMPRESSED_R11_EAC,\n 154: GL_COMPRESSED_SIGNED_R11_EAC,\n 155: GL_COMPRESSED_RG11_EAC,\n 156: GL_COMPRESSED_SIGNED_RG11_EAC,\n 157: GL_COMPRESSED_RGBA_ASTC_4x4_KHR,\n 158: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,\n 159: GL_COMPRESSED_RGBA_ASTC_5x4_KHR,\n 160: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,\n 161: GL_COMPRESSED_RGBA_ASTC_5x5_KHR,\n 162: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,\n 163: GL_COMPRESSED_RGBA_ASTC_6x5_KHR,\n 164: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,\n 165: GL_COMPRESSED_RGBA_ASTC_6x6_KHR,\n 166: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,\n 167: GL_COMPRESSED_RGBA_ASTC_8x5_KHR,\n 168: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,\n 169: GL_COMPRESSED_RGBA_ASTC_8x6_KHR,\n 170: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,\n 171: GL_COMPRESSED_RGBA_ASTC_8x8_KHR,\n 172: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,\n 173: GL_COMPRESSED_RGBA_ASTC_10x5_KHR,\n 174: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,\n 175: GL_COMPRESSED_RGBA_ASTC_10x6_KHR,\n 176: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,\n 177: GL_COMPRESSED_RGBA_ASTC_10x8_KHR,\n 178: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,\n 179: GL_COMPRESSED_RGBA_ASTC_10x10_KHR,\n 180: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,\n 181: GL_COMPRESSED_RGBA_ASTC_12x10_KHR,\n 182: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,\n 183: GL_COMPRESSED_RGBA_ASTC_12x12_KHR,\n 184: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,\n 1000054000: GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\n 1000054001: GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n 1000066000: GL_COMPRESSED_RGBA_ASTC_4x4_KHR,\n 1000066001: GL_COMPRESSED_RGBA_ASTC_5x4_KHR,\n 1000066002: GL_COMPRESSED_RGBA_ASTC_5x5_KHR,\n 1000066003: GL_COMPRESSED_RGBA_ASTC_6x5_KHR,\n 1000066004: GL_COMPRESSED_RGBA_ASTC_6x6_KHR,\n 1000066005: GL_COMPRESSED_RGBA_ASTC_8x5_KHR,\n 1000066006: GL_COMPRESSED_RGBA_ASTC_8x6_KHR,\n 1000066007: GL_COMPRESSED_RGBA_ASTC_8x8_KHR,\n 1000066008: GL_COMPRESSED_RGBA_ASTC_10x5_KHR,\n 1000066009: GL_COMPRESSED_RGBA_ASTC_10x6_KHR,\n 1000066010: GL_COMPRESSED_RGBA_ASTC_10x8_KHR,\n 1000066011: GL_COMPRESSED_RGBA_ASTC_10x10_KHR,\n 1000066012: GL_COMPRESSED_RGBA_ASTC_12x10_KHR,\n 1000066013: GL_COMPRESSED_RGBA_ASTC_12x12_KHR\n};\n\n/**\n * Returns WebGl format based on Vulkan format\n * Vulkan to WebGl format mapping provided here http://github.khronos.org/KTX-Specification/#formatMapping\n * Vulkan name to format number mapping provided here: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormat.html\n * @param vkFormat\n * @returns WebGL / OpenGL constant\n */\nexport function mapVkFormatToWebGL(vkFormat: number): GLTextureFormat | undefined {\n return VULKAN_TO_WEBGL_FORMAT_MAP[vkFormat];\n}\n\n/**\n * Returns the canonical loaders.gl texture format corresponding to a Vulkan `vkFormat` value.\n * @param vkFormat - Vulkan format constant from the KTX container.\n * @returns Canonical texture format string, if known.\n */\nexport function mapVkFormatToTextureFormat(vkFormat: number): TextureFormat | undefined {\n return getTextureFormatFromWebGLFormat(mapVkFormatToWebGL(vkFormat));\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader, LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {TextureFormat, TextureLevel} from '@loaders.gl/schema';\nimport {VERSION} from './lib/utils/version';\nimport {parseBasis} from './lib/parsers/parse-basis';\nimport type {BasisFormat} from './lib/parsers/parse-basis';\n\ntype BasisFormatOption = BasisFormat | Uppercase<BasisFormat>;\ntype BasisTargetFormat =\n | 'auto'\n | BasisFormatOption\n | {\n alpha: BasisFormatOption;\n noAlpha: BasisFormatOption;\n };\n\n/** Options for the BasisLoader */\nexport type BasisLoaderOptions = LoaderOptions & {\n /** Options for the BasisLoader */\n basis?: {\n /** Supported texture formats - app would typically query a WebGPU device or WebGL context to obtain the list of supported formats.*/\n supportedTextureFormats?: TextureFormat[];\n /** Override the URL to the worker bundle (by default loads from unpkg.com) */\n workerUrl?: string;\n\n /** What container format is used? */\n containerFormat?: 'auto' | 'ktx2' | 'basis';\n /** Format for texture data. auto selects based on platform caps (but gl context doesn't exist on a worker thread) */\n format?: BasisTargetFormat;\n /** What module to use for transcoding? */\n module?: 'transcoder' | 'encoder';\n };\n};\n\n/**\n * Worker loader for Basis super compressed textures\n */\nexport const BasisWorkerLoader = {\n dataType: null as unknown as TextureLevel[][],\n batchType: null as never,\n\n name: 'Basis',\n id: 'basis',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['basis', 'ktx2'],\n mimeTypes: ['application/octet-stream', 'image/ktx2'],\n tests: ['sB'],\n binary: true,\n options: {\n basis: {\n format: 'auto',\n containerFormat: 'auto',\n module: 'transcoder'\n }\n }\n} as const satisfies Loader<TextureLevel[][], never, BasisLoaderOptions>;\n\n/**\n * Loader for Basis super compressed textures\n */\nexport const BasisLoader = {\n ...BasisWorkerLoader,\n parse: parseBasis\n} as const satisfies LoaderWithParser<TextureLevel[][], never, LoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {TextureFormat, TextureLevel} from '@loaders.gl/schema';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst DDS_CONSTANTS = {\n MAGIC_NUMBER: 0x20534444,\n HEADER_LENGTH: 31,\n MAGIC_NUMBER_INDEX: 0,\n HEADER_SIZE_INDEX: 1,\n HEADER_FLAGS_INDEX: 2,\n HEADER_HEIGHT_INDEX: 3,\n HEADER_WIDTH_INDEX: 4,\n MIPMAPCOUNT_INDEX: 7,\n HEADER_PF_FLAGS_INDEX: 20,\n HEADER_PF_FOURCC_INDEX: 21,\n DDSD_MIPMAPCOUNT: 0x20000,\n DDPF_FOURCC: 0x4\n};\n\nconst DDS_TEXTURE_FORMATS: Record<string, TextureFormat> = {\n DXT1: 'bc1-rgb-unorm-webgl',\n DXT3: 'bc2-rgba-unorm',\n DXT5: 'bc3-rgba-unorm',\n 'ATC ': 'atc-rgb-unorm-webgl',\n ATCA: 'atc-rgba-unorm-webgl',\n ATCI: 'atc-rgbai-unorm-webgl'\n};\n\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\n\nconst DDS_SIZE_FUNCTIONS: Record<string, (width: number, height: number) => number> = {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n};\n\n/**\n * Check if data is in \"DDS\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"DDS\" format, else - false\n */\nexport function isDDS(data: ArrayBuffer): boolean {\n const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];\n return magic === DDS_CONSTANTS.MAGIC_NUMBER;\n}\n\n/**\n * Parse texture data as \"DDS\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseDDS(data: ArrayBuffer): TextureLevel[] {\n const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];\n assert(\n Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC),\n 'DDS: Unsupported format, must contain a FourCC code'\n );\n const fourCC = int32ToFourCC(pixelFormatNumber);\n const textureFormat = DDS_TEXTURE_FORMATS[fourCC];\n const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];\n assert(textureFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);\n\n let mipMapLevels = 1;\n if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {\n mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);\n }\n const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];\n const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];\n const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;\n const image = new Uint8Array(data, dataOffset);\n\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n textureFormat\n });\n}\n\n/**\n * DXT1 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxt1LevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 8;\n}\n\n/**\n * DXT3 & DXT5 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxtXLevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 16;\n}\n\n/**\n * Convert every byte of Int32 value to char\n * @param value - Int32 number\n * @returns string of 4 characters\n */\nfunction int32ToFourCC(value: number): string {\n return String.fromCharCode(\n value & 0xff,\n (value >> 8) & 0xff,\n (value >> 16) & 0xff,\n (value >> 24) & 0xff\n );\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable camelcase */\n// Forked from PicoGL: https://github.com/tsherif/picogl.js/blob/master/examples/utils/utils.js\n// Copyright (c) 2017 Tarek Sherif, The MIT License (MIT)\n\nimport type {TextureFormat, TextureLevel} from '@loaders.gl/schema';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst PVR_CONSTANTS: Record<string, number> = {\n MAGIC_NUMBER: 0x03525650,\n MAGIC_NUMBER_EXTRA: 0x50565203,\n HEADER_LENGTH: 13,\n HEADER_SIZE: 52,\n MAGIC_NUMBER_INDEX: 0,\n PIXEL_FORMAT_INDEX: 2,\n COLOUR_SPACE_INDEX: 4,\n HEIGHT_INDEX: 6,\n WIDTH_INDEX: 7,\n MIPMAPCOUNT_INDEX: 11,\n METADATA_SIZE_INDEX: 12\n};\n\nconst PVR_TEXTURE_FORMATS: Record<number, TextureFormat[]> = {\n 0: ['pvrtc-rgb2unorm-webgl'],\n 1: ['pvrtc-rgba2unorm-webgl'],\n 2: ['pvrtc-rgb4unorm-webgl'],\n 3: ['pvrtc-rgba4unorm-webgl'],\n 6: ['etc1-rgb-unorm-webgl'],\n 7: ['bc1-rgb-unorm-webgl'],\n 9: ['bc2-rgba-unorm'],\n 11: ['bc3-rgba-unorm'],\n 22: ['etc2-rgb8unorm'],\n 23: ['etc2-rgba8unorm'],\n 24: ['etc2-rgb8a1unorm'],\n 25: ['eac-r11unorm'],\n 26: ['eac-rg11unorm'],\n 27: ['astc-4x4-unorm', 'astc-4x4-unorm-srgb'],\n 28: ['astc-5x4-unorm', 'astc-5x4-unorm-srgb'],\n 29: ['astc-5x5-unorm', 'astc-5x5-unorm-srgb'],\n 30: ['astc-6x5-unorm', 'astc-6x5-unorm-srgb'],\n 31: ['astc-6x6-unorm', 'astc-6x6-unorm-srgb'],\n 32: ['astc-8x5-unorm', 'astc-8x5-unorm-srgb'],\n 33: ['astc-8x6-unorm', 'astc-8x6-unorm-srgb'],\n 34: ['astc-8x8-unorm', 'astc-8x8-unorm-srgb'],\n 35: ['astc-10x5-unorm', 'astc-10x5-unorm-srgb'],\n 36: ['astc-10x6-unorm', 'astc-10x6-unorm-srgb'],\n 37: ['astc-10x8-unorm', 'astc-10x8-unorm-srgb'],\n 38: ['astc-10x10-unorm', 'astc-10x10-unorm-srgb'],\n 39: ['astc-12x10-unorm', 'astc-12x10-unorm-srgb'],\n 40: ['astc-12x12-unorm', 'astc-12x12-unorm-srgb']\n};\n\nconst PVR_SIZE_FUNCTIONS: Record<number, (width: number, height: number) => number> = {\n 0: pvrtc2bppSize,\n 1: pvrtc2bppSize,\n 2: pvrtc4bppSize,\n 3: pvrtc4bppSize,\n 6: dxtEtcSmallSize,\n 7: dxtEtcSmallSize,\n 9: dxtEtcAstcBigSize,\n 11: dxtEtcAstcBigSize,\n 22: dxtEtcSmallSize,\n 23: dxtEtcAstcBigSize,\n 24: dxtEtcSmallSize,\n 25: dxtEtcSmallSize,\n 26: dxtEtcAstcBigSize,\n 27: dxtEtcAstcBigSize,\n 28: atc5x4Size,\n 29: atc5x5Size,\n 30: atc6x5Size,\n 31: atc6x6Size,\n 32: atc8x5Size,\n 33: atc8x6Size,\n 34: atc8x8Size,\n 35: atc10x5Size,\n 36: atc10x6Size,\n 37: atc10x8Size,\n 38: atc10x10Size,\n 39: atc12x10Size,\n 40: atc12x12Size\n};\n\n/**\n * Check if data is in \"PVR\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"PVR\" format, else - false\n */\nexport function isPVR(data: ArrayBuffer): boolean {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n const version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];\n\n return version === PVR_CONSTANTS.MAGIC_NUMBER || version === PVR_CONSTANTS.MAGIC_NUMBER_EXTRA;\n}\n\n/**\n * Parse texture data as \"PVR\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n * @see http://cdn.imgtec.com/sdk-documentation/PVR+File+Format.Specification.pdf\n */\nexport function parsePVR(data: ArrayBuffer): TextureLevel[] {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n\n const pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];\n const colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];\n const textureFormats = PVR_TEXTURE_FORMATS[pvrFormat] || [];\n const textureFormat =\n textureFormats.length > 1 && colourSpace ? textureFormats[1] : textureFormats[0];\n\n const sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];\n\n const mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];\n\n const width = header[PVR_CONSTANTS.WIDTH_INDEX];\n const height = header[PVR_CONSTANTS.HEIGHT_INDEX];\n\n const dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];\n\n const image = new Uint8Array(data, dataOffset);\n\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n textureFormat\n });\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc2bppSize(width: number, height: number): number {\n width = Math.max(width, 16);\n height = Math.max(height, 8);\n\n return (width * height) / 4;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc4bppSize(width: number, height: number): number {\n width = Math.max(width, 8);\n height = Math.max(height, 8);\n\n return (width * height) / 2;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// Size for:\n// COMPRESSED_RGB_S3TC_DXT1_EXT\n// COMPRESSED_R11_EAC\n// COMPRESSED_SIGNED_R11_EAC\n// COMPRESSED_RGB8_ETC2\n// COMPRESSED_SRGB8_ETC2\n// COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\n// COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\nfunction dxtEtcSmallSize(width: number, height: number): number {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\n// Size for:\n// COMPRESSED_RGBA_S3TC_DXT3_EXT\n// COMPRESSED_RGBA_S3TC_DXT5_EXT\n// COMPRESSED_RG11_EAC\n// COMPRESSED_SIGNED_RG11_EAC\n// COMPRESSED_RGBA8_ETC2_EAC\n// COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\n// COMPRESSED_RGBA_ASTC_4x4_KHR\nfunction dxtEtcAstcBigSize(width: number, height: number): number {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x4Size(width: number, height: number): number {\n return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x5Size(width: number, height: number): number {\n return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x5Size(width: number, height: number): number {\n return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x6Size(width: number, height: number): number {\n return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x5Size(width: number, height: number): number {\n return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x6Size(width: number, height: number): number {\n return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x8Size(width: number, height: number): number {\n return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x5Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x6Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x8Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x10Size(width: number, height: number): number {\n return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x10Size(width: number, height: number): number {\n return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16;\n}\n\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x12Size(width: number, height: number): number {\n return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {isKTX, parseKTX} from './parse-ktx';\nimport {isDDS, parseDDS} from './parse-dds';\nimport {isPVR, parsePVR} from './parse-pvr';\n\n/**\n * Deduces format and parses compressed texture loaded in ArrayBuffer\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseCompressedTexture(data: ArrayBuffer): TextureLevel[] {\n if (isKTX(data)) {\n // TODO: remove @ts-ignore when `parseKTX` output is normalized to loaders.gl texture format\n // @ts-ignore\n return parseKTX(data);\n }\n if (isDDS(data)) {\n return parseDDS(data);\n }\n if (isPVR(data)) {\n return parsePVR(data);\n }\n throw new Error('Texture container format not recognized');\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader, LoaderWithParser, StrictLoaderOptions} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\nimport {parseCompressedTexture} from './lib/parsers/parse-compressed-texture';\nimport {parseBasis} from './lib/parsers/parse-basis';\n\n/** Options for the CompressedTextureLoader */\nexport type CompressedTextureLoaderOptions = StrictLoaderOptions & {\n 'compressed-texture'?: {\n /** Whether to use Basis decoding */\n useBasis?: boolean;\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 KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureWorkerLoader = {\n dataType: null as unknown as any,\n batchType: null as never,\n\n name: 'Texture Containers',\n id: 'compressed-texture',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: [\n 'ktx',\n 'ktx2',\n 'dds', // WEBGL_compressed_texture_s3tc, WEBGL_compressed_texture_atc\n 'pvr' // WEBGL_compressed_texture_pvrtc\n ],\n mimeTypes: [\n 'image/ktx2',\n 'image/ktx',\n 'image/vnd-ms.dds',\n 'image/x-dds',\n 'application/octet-stream'\n ],\n binary: true,\n options: {\n 'compressed-texture': {\n useBasis: false\n }\n }\n} as const satisfies Loader<any, never, CompressedTextureLoaderOptions>;\n\n/**\n * Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureLoader = {\n ...CompressedTextureWorkerLoader,\n parse: async (arrayBuffer: ArrayBuffer, options?: CompressedTextureLoaderOptions) => {\n options = {...options};\n if (options?.['compressed-texture']?.useBasis) {\n options.basis = {\n format: {\n alpha: 'BC3',\n noAlpha: 'BC1'\n },\n ...options.basis,\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n const result = await parseBasis(arrayBuffer, options);\n return result[0];\n }\n return parseCompressedTexture(arrayBuffer);\n }\n} as const satisfies LoaderWithParser<any, never, CompressedTextureLoaderOptions>;\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 type {TextureLevel} from '@loaders.gl/schema';\nimport {VERSION} from './lib/utils/version';\n\n/** CrunchLoader options */\nexport type CrunchLoaderOptions = LoaderOptions & {\n /** CrunchLoader options */\n crunch?: {\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 the Crunch compressed texture container format\n * @note We avoid bundling crunch - it is a rare format and large lib, so we only offer worker loader\n */\nexport const CrunchLoader = {\n dataType: null as unknown as TextureLevel[],\n batchType: null as never,\n\n id: 'crunch',\n name: 'Crunch',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['crn'],\n mimeTypes: ['image/crn', 'image/x-crn', 'application/octet-stream'],\n binary: true,\n options: {\n crunch: {}\n }\n} as const satisfies Loader<TextureLevel[], never, CrunchLoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Texture, TextureLevel} from '@loaders.gl/schema';\nimport {GL_RGBA32F} from '../gl-extensions';\n\nconst HDR_MAGIC_HEADERS = ['#?RADIANCE', '#?RGBE'];\nconst HDR_FORMAT = '32-bit_rle_rgbe';\n\n/** Application-facing metadata extracted from Radiance HDR header fields. */\nexport type RadianceHDRMetadata = {\n /** Per-channel color correction factors from the `COLORCORR` header field. */\n colorCorrection?: [number, number, number];\n /** Scene exposure multiplier from the `EXPOSURE` header field. */\n exposure?: number;\n /** Display gamma hint from the `GAMMA` header field. */\n gamma?: number;\n /** Pixel aspect ratio from the `PIXASPECT` header field. */\n pixelAspectRatio?: number;\n /** Chromaticity primaries and white point from the `PRIMARIES` header field. */\n primaries?: [number, number, number, number, number, number, number, number];\n /** Producer software identifier from the `SOFTWARE` header field. */\n software?: string;\n /** View specification string from the `VIEW` header field. */\n view?: string;\n};\n\ntype HeaderState = {\n data: Uint8Array;\n offset: number;\n};\n\ntype HDRHeader = {\n width: number;\n height: number;\n majorAxis: 'X' | 'Y';\n majorSign: 1 | -1;\n minorAxis: 'X' | 'Y';\n minorSign: 1 | -1;\n metadata?: RadianceHDRMetadata;\n};\n\nexport function isHDR(arrayBuffer: ArrayBuffer): boolean {\n const state: HeaderState = {\n data: new Uint8Array(arrayBuffer),\n offset: 0\n };\n\n const firstLine = readLine(state);\n return firstLine ? HDR_MAGIC_HEADERS.includes(firstLine) : false;\n}\n\nexport function parseHDR(arrayBuffer: ArrayBuffer): Texture<RadianceHDRMetadata> {\n const state: HeaderState = {\n data: new Uint8Array(arrayBuffer),\n offset: 0\n };\n const header = readHeader(state);\n const {width, height} = header;\n const rgbeData = readPixels(state, header);\n const data = convertRGBEToFloat(rgbeData);\n const level: TextureLevel = {\n shape: 'texture-level',\n compressed: false,\n width,\n height,\n data,\n levelSize: data.byteLength,\n format: GL_RGBA32F,\n textureFormat: 'rgba32float'\n };\n\n return {\n shape: 'texture',\n type: '2d',\n format: 'rgba32float',\n ...(header.metadata ? {metadata: header.metadata} : {}),\n data: [level]\n };\n}\n\nfunction readHeader(state: HeaderState): HDRHeader {\n const magicHeader = readLine(state);\n if (!magicHeader || !HDR_MAGIC_HEADERS.includes(magicHeader)) {\n throw new Error('RadianceHDRLoader: bad initial token');\n }\n\n let hasFormat = false;\n const metadata: RadianceHDRMetadata = {};\n\n while (state.offset < state.data.length) {\n const line = readLine(state);\n\n if (line === null) {\n break;\n }\n\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n if (line.startsWith('FORMAT=')) {\n hasFormat = line.slice('FORMAT='.length) === HDR_FORMAT;\n if (!hasFormat) {\n throw new Error('RadianceHDRLoader: unsupported format specifier');\n }\n continue;\n }\n\n parseMetadataLine(metadata, line);\n\n const dimensions = parseDimensions(line);\n if (dimensions) {\n if (!hasFormat) {\n throw new Error('RadianceHDRLoader: missing format specifier');\n }\n return {\n ...dimensions,\n ...(hasMetadata(metadata) ? {metadata} : {})\n };\n }\n }\n\n if (!hasFormat) {\n throw new Error('RadianceHDRLoader: missing format specifier');\n }\n\n throw new Error('RadianceHDRLoader: missing image size specifier');\n}\n\nfunction parseDimensions(line: string): HDRHeader | null {\n const match = line.match(/^([+-])([YX])\\s+(\\d+)\\s+([+-])([YX])\\s+(\\d+)$/);\n if (!match) {\n return null;\n }\n\n const majorSign = match[1] === '+' ? 1 : -1;\n const majorAxis = match[2] as 'X' | 'Y';\n const majorLength = Number(match[3]);\n const minorSign = match[4] === '+' ? 1 : -1;\n const minorAxis = match[5] as 'X' | 'Y';\n const minorLength = Number(match[6]);\n\n if (majorAxis === minorAxis) {\n throw new Error('RadianceHDRLoader: invalid image dimensions');\n }\n\n const width = majorAxis === 'X' ? majorLength : minorLength;\n const height = majorAxis === 'Y' ? majorLength : minorLength;\n if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {\n throw new Error('RadianceHDRLoader: invalid image dimensions');\n }\n\n return {width, height, majorAxis, majorSign, minorAxis, minorSign};\n}\n\nfunction readPixels(state: HeaderState, header: HDRHeader): Uint8Array {\n const {width, height} = header;\n const pixelCount = width * height;\n const flatByteLength = pixelCount * 4;\n const scanlineLength = header.minorAxis === 'X' ? width : height;\n const scanlineCount = header.majorAxis === 'Y' ? height : width;\n\n if (scanlineLength < 8 || scanlineLength > 0x7fff) {\n return reorderPixels(readFlatPixels(state, flatByteLength), header);\n }\n\n if (state.offset + 4 > state.data.length) {\n throw new Error('RadianceHDRLoader: unexpected end of file');\n }\n\n const data = state.data;\n const isRunLengthEncoded =\n data[state.offset] === 2 && data[state.offset + 1] === 2 && !(data[state.offset + 2] & 0x80);\n\n if (!isRunLengthEncoded) {\n return reorderPixels(readFlatPixels(state, flatByteLength), header);\n }\n\n const scanlineWidth = (data[state.offset + 2] << 8) | data[state.offset + 3];\n if (scanlineWidth !== scanlineLength) {\n return reorderPixels(readFlatPixels(state, flatByteLength), header);\n }\n\n const pixels = new Uint8Array(flatByteLength);\n const scanlineBuffer = new Uint8Array(scanlineLength * 4);\n\n for (let scanlineIndex = 0; scanlineIndex < scanlineCount; scanlineIndex++) {\n if (state.offset + 4 > data.length) {\n throw new Error('RadianceHDRLoader: unexpected end of file');\n }\n\n const red = data[state.offset++];\n const green = data[state.offset++];\n const blue = data[state.offset++];\n const exponent = data[state.offset++];\n\n if (red !== 2 || green !== 2 || ((blue << 8) | exponent) !== scanlineLength) {\n throw new Error('RadianceHDRLoader: bad rgbe scanline format');\n }\n\n for (let channelIndex = 0; channelIndex < 4; channelIndex++) {\n const channelOffset = channelIndex * scanlineLength;\n const channelEnd = channelOffset + scanlineLength;\n let pixelOffset = channelOffset;\n\n while (pixelOffset < channelEnd) {\n if (state.offset >= data.length) {\n throw new Error('RadianceHDRLoader: unexpected end of file');\n }\n\n let count = data[state.offset++];\n\n if (count > 128) {\n count -= 128;\n if (count === 0 || pixelOffset + count > channelEnd || state.offset >= data.length) {\n throw new Error('RadianceHDRLoader: bad scanline data');\n }\n\n const value = data[state.offset++];\n scanlineBuffer.fill(value, pixelOffset, pixelOffset + count);\n pixelOffset += count;\n continue;\n }\n\n if (count === 0 || pixelOffset + count > channelEnd || state.offset + count > data.length) {\n throw new Error('RadianceHDRLoader: bad scanline data');\n }\n\n scanlineBuffer.set(data.subarray(state.offset, state.offset + count), pixelOffset);\n pixelOffset += count;\n state.offset += count;\n }\n }\n\n for (let pixelIndex = 0; pixelIndex < scanlineLength; pixelIndex++) {\n const outputOffset = getOutputOffset(header, scanlineIndex, pixelIndex);\n pixels[outputOffset] = scanlineBuffer[pixelIndex];\n pixels[outputOffset + 1] = scanlineBuffer[pixelIndex + scanlineLength];\n pixels[outputOffset + 2] = scanlineBuffer[pixelIndex + scanlineLength * 2];\n pixels[outputOffset + 3] = scanlineBuffer[pixelIndex + scanlineLength * 3];\n }\n }\n\n return pixels;\n}\n\nfunction reorderPixels(data: Uint8Array, header: HDRHeader): Uint8Array {\n const pixels = new Uint8Array(data.length);\n const scanlineLength = header.minorAxis === 'X' ? header.width : header.height;\n const scanlineCount = header.majorAxis === 'Y' ? header.height : header.width;\n\n for (let scanlineIndex = 0; scanlineIndex < scanlineCount; scanlineIndex++) {\n for (let pixelIndex = 0; pixelIndex < scanlineLength; pixelIndex++) {\n const sourceOffset = (scanlineIndex * scanlineLength + pixelIndex) * 4;\n const outputOffset = getOutputOffset(header, scanlineIndex, pixelIndex);\n pixels[outputOffset] = data[sourceOffset];\n pixels[outputOffset + 1] = data[sourceOffset + 1];\n pixels[outputOffset + 2] = data[sourceOffset + 2];\n pixels[outputOffset + 3] = data[sourceOffset + 3];\n }\n }\n\n return pixels;\n}\n\nfunction getOutputOffset(header: HDRHeader, scanlineIndex: number, pixelIndex: number): number {\n const majorCoordinate = getCoordinate(\n header.majorAxis === 'X' ? header.width : header.height,\n header.majorSign,\n scanlineIndex\n );\n const minorCoordinate = getCoordinate(\n header.minorAxis === 'X' ? header.width : header.height,\n header.minorSign,\n pixelIndex\n );\n const x = header.majorAxis === 'X' ? majorCoordinate : minorCoordinate;\n const y = header.majorAxis === 'Y' ? majorCoordinate : minorCoordinate;\n\n return ((header.height - 1 - y) * header.width + x) * 4;\n}\n\nfunction getCoordinate(length: number, sign: 1 | -1, index: number): number {\n return sign === 1 ? index : length - 1 - index;\n}\n\nfunction readFlatPixels(state: HeaderState, byteLength: number): Uint8Array {\n if (state.offset + byteLength > state.data.length) {\n throw new Error('RadianceHDRLoader: unexpected end of file');\n }\n\n const pixels = state.data.slice(state.offset, state.offset + byteLength);\n state.offset += byteLength;\n return pixels;\n}\n\nfunction convertRGBEToFloat(data: Uint8Array): Float32Array {\n const floatData = new Float32Array(data.length);\n\n for (let sourceOffset = 0; sourceOffset < data.length; sourceOffset += 4) {\n const exponent = data[sourceOffset + 3];\n const destinationOffset = sourceOffset;\n\n if (exponent > 0) {\n const scale = Math.pow(2, exponent - 128) / 255;\n floatData[destinationOffset] = data[sourceOffset] * scale;\n floatData[destinationOffset + 1] = data[sourceOffset + 1] * scale;\n floatData[destinationOffset + 2] = data[sourceOffset + 2] * scale;\n }\n\n floatData[destinationOffset + 3] = 1;\n }\n\n return floatData;\n}\n\nfunction readLine(state: HeaderState): string | null {\n if (state.offset >= state.data.length) {\n return null;\n }\n\n const lineStart = state.offset;\n\n while (state.offset < state.data.length) {\n const byte = state.data[state.offset++];\n if (byte === 0x0a) {\n const line = decodeASCII(state.data.subarray(lineStart, state.offset - 1));\n return line.endsWith('\\r') ? line.slice(0, -1) : line;\n }\n }\n\n const line = decodeASCII(state.data.subarray(lineStart, state.offset));\n return line.endsWith('\\r') ? line.slice(0, -1) : line;\n}\n\nfunction decodeASCII(data: Uint8Array): string {\n let line = '';\n for (const byte of data) {\n line += String.fromCharCode(byte);\n }\n return line;\n}\n\nfunction parseMetadataLine(metadata: RadianceHDRMetadata, line: string): void {\n if (line.startsWith('COLORCORR=')) {\n const values = parseNumberList(line.slice('COLORCORR='.length), 3);\n if (values) {\n metadata.colorCorrection = values as [number, number, number];\n }\n return;\n }\n\n if (line.startsWith('EXPOSURE=')) {\n const value = parseNumber(line.slice('EXPOSURE='.length));\n if (value !== null) {\n metadata.exposure = value;\n }\n return;\n }\n\n if (line.startsWith('GAMMA=')) {\n const value = parseNumber(line.slice('GAMMA='.length));\n if (value !== null) {\n metadata.gamma = value;\n }\n return;\n }\n\n if (line.startsWith('PIXASPECT=')) {\n const value = parseNumber(line.slice('PIXASPECT='.length));\n if (value !== null) {\n metadata.pixelAspectRatio = value;\n }\n return;\n }\n\n if (line.startsWith('PRIMARIES=')) {\n const values = parseNumberList(line.slice('PRIMARIES='.length), 8);\n if (values) {\n metadata.primaries = values as [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number\n ];\n }\n return;\n }\n\n if (line.startsWith('SOFTWARE=')) {\n metadata.software = line.slice('SOFTWARE='.length).trim();\n return;\n }\n\n if (line.startsWith('VIEW=')) {\n metadata.view = line.slice('VIEW='.length).trim();\n }\n}\n\nfunction parseNumber(text: string): number | null {\n const value = Number(text.trim());\n return Number.isFinite(value) ? value : null;\n}\n\nfunction parseNumberList(text: string, count: number): number[] | null {\n const values = text\n .trim()\n .split(/\\s+/)\n .map((value) => Number(value));\n\n if (values.length !== count || values.some((value) => !Number.isFinite(value))) {\n return null;\n }\n\n return values;\n}\n\nfunction hasMetadata(metadata: RadianceHDRMetadata): boolean {\n return Object.keys(metadata).length > 0;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderWithParser, StrictLoaderOptions} from '@loaders.gl/loader-utils';\nimport type {Texture} from '@loaders.gl/schema';\nimport {VERSION} from './lib/utils/version';\nimport type {RadianceHDRMetadata} from './lib/parsers/parse-hdr';\nimport {isHDR, parseHDR} from './lib/parsers/parse-hdr';\n\nexport type RadianceHDRLoaderOptions = StrictLoaderOptions & {\n hdr?: {};\n};\n\nexport const RadianceHDRLoader = {\n dataType: null as unknown as Texture<RadianceHDRMetadata>,\n batchType: null as never,\n\n name: 'Radiance HDR',\n id: 'hdr',\n module: 'textures',\n version: VERSION,\n extensions: ['hdr'],\n mimeTypes: ['image/vnd.radiance', 'image/x-hdr', 'application/octet-stream'],\n binary: true,\n tests: [isHDR],\n options: {\n hdr: {}\n },\n parseSync: parseHDR,\n parse: async (arrayBuffer: ArrayBuffer) => parseHDR(arrayBuffer)\n} as const satisfies LoaderWithParser<\n Texture<RadianceHDRMetadata>,\n never,\n RadianceHDRLoaderOptions\n>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// import type {TextureLevel} from '@loaders.gl/schema';\nimport {TypedArray} from '@math.gl/types';\n// import {TypedArrayConstructor} from \"@math.gl/types\";\n\n// TODO move to math.gl\ntype TypedArrayConstructor =\n | typeof Int8Array\n | typeof Uint8Array\n | typeof Int16Array\n | typeof Uint16Array\n | typeof Int32Array\n | typeof Uint32Array\n | typeof Float32Array\n | typeof Float64Array;\n\nconst a = new Uint32Array([0x12345678]);\nconst b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\nconst isLittleEndian = !(b[0] === 0x12);\n\nconst LITTLE_ENDIAN_OS = isLittleEndian;\n\n/** One numpy \"tile\" */\nexport type NPYTile = {\n /** tile header */\n header: NumpyHeader;\n /** data in tile */\n data: TypedArray;\n};\n\ntype NumpyHeader = {\n descr: string;\n shape: number[];\n};\n\n/**\n * The basic string format consists of 3 characters:\n * 1. a character describing the byteorder of the data (<: little-endian, >: big-endian, |: not-relevant)\n * 2. a character code giving the basic type of the array\n * 3. an integer providing the number of bytes the type uses.\n * https://numpy.org/doc/stable/reference/arrays.interface.html\n *\n * Here I only include the second and third characters, and check endianness separately\n */\nconst DTYPES: Record<string, TypedArrayConstructor> = {\n u1: Uint8Array,\n i1: Int8Array,\n u2: Uint16Array,\n i2: Int16Array,\n u4: Uint32Array,\n i4: Int32Array,\n f4: Float32Array,\n f8: Float64Array\n};\n\nexport function parseNPY(arrayBuffer: ArrayBuffer, options?: {}): NPYTile {\n const view = new DataView(arrayBuffer);\n const {header, headerEndOffset} = parseHeader(view);\n\n const numpyType = header.descr;\n const ArrayType = DTYPES[numpyType.slice(1, 3)];\n if (!ArrayType) {\n throw new Error(`Unimplemented type ${numpyType}`);\n }\n\n const nArrayElements = header.shape?.reduce((a: number, b: number): number => a * b);\n const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;\n\n if (arrayBuffer.byteLength < headerEndOffset + arrayByteLength) {\n throw new Error('Buffer overflow');\n }\n const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));\n\n // Swap endianness if needed\n if ((numpyType[0] === '>' && LITTLE_ENDIAN_OS) || (numpyType[0] === '<' && !LITTLE_ENDIAN_OS)) {\n throw new Error('Incorrect endianness');\n }\n\n return {\n data,\n header\n };\n}\n\n/**\n * Parse NPY header\n *\n * @param view\n * @return\n */\nfunction parseHeader(view: DataView): {header: NumpyHeader; headerEndOffset: number} {\n const majorVersion = view.getUint8(6);\n // const minorVersion = view.getUint8(7);\n\n let offset = 8;\n let headerLength: number;\n if (majorVersion >= 2) {\n headerLength = view.getUint32(offset, true);\n offset += 4;\n } else {\n headerLength = view.getUint16(offset, true);\n offset += 2;\n }\n\n const encoding = majorVersion <= 2 ? 'latin1' : 'utf-8';\n const decoder = new TextDecoder(encoding);\n const headerArray = new Uint8Array(view.buffer, offset, headerLength);\n const headerText = decoder.decode(headerArray);\n offset += headerLength;\n\n const header = JSON.parse(\n headerText\n .replace(/'/g, '\"')\n .replace('False', 'false')\n .replace('(', '[')\n .replace(/,*\\),*/g, ']')\n );\n\n return {header, headerEndOffset: offset};\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\nimport {parseNPY, NPYTile} from './lib/parsers/parse-npy';\n\n// \\x93NUMPY\nconst NPY_MAGIC_NUMBER = new Uint8Array([147, 78, 85, 77, 80, 89]);\n\n/** NPYLoader for numpy tiles */\nexport type NPYLoaderOptions = LoaderOptions & {\n /** NPYLoader for numpy tiles */\n npy?: {\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 numpy \"tiles\"\n */\nexport const NPYWorkerLoader = {\n dataType: null as any as NPYTile,\n batchType: null as never,\n\n name: 'NPY',\n id: 'npy',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['npy'],\n mimeTypes: [],\n tests: [NPY_MAGIC_NUMBER.buffer],\n options: {\n npy: {}\n }\n} as const satisfies Loader<NPYTile, never, NPYLoaderOptions>;\n\n/**\n * Loader for numpy \"tiles\"\n */\nexport const NPYLoader = {\n ...NPYWorkerLoader,\n parseSync: parseNPY,\n parse: async (arrayBuffer: ArrayBuffer, options?: LoaderOptions) => parseNPY(arrayBuffer, options)\n} as const satisfies LoaderWithParser<any, any, NPYLoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {parseFromContext, path, resolvePath} from '@loaders.gl/loader-utils';\nimport type {Texture, TextureFormat, TextureLevel} from '@loaders.gl/schema';\nimport {ImageLoader, getImageSize, isImage, type ImageType} from '@loaders.gl/images';\nimport {asyncDeepMap} from '../texture-api/async-deep-map';\nimport type {TextureLoaderOptions} from '../texture-api/texture-api-types';\nimport {\n IMAGE_TEXTURE_CUBE_FACES,\n type ImageCubeTexture,\n type ImageTextureCubeDirectionAlias,\n type ImageTextureCubeFace\n} from './image-texture-cube';\n\nexport type ImageTextureTemplateSource = {\n mipLevels: number | 'auto';\n template: string;\n};\n\nexport type ImageTextureSource = string | string[] | ImageTextureTemplateSource;\n\nexport type ImageTextureManifest = {\n shape: 'image-texture';\n image?: string;\n mipLevels?: number | 'auto';\n template?: string;\n mipmaps?: string[];\n};\n\nexport type ImageTextureArrayManifest = {\n shape: 'image-texture-array';\n layers: ImageTextureSource[];\n};\n\nexport type ImageTextureCubeFaces = Partial<\n Record<ImageTextureCubeFace | ImageTextureCubeDirectionAlias, ImageTextureSource>\n>;\n\nexport type ImageTextureCubeManifest = {\n shape: 'image-texture-cube';\n faces: ImageTextureCubeFaces;\n};\n\nexport type ImageTextureCubeArrayLayer = {\n faces: ImageTextureCubeFaces;\n};\n\nexport type ImageTextureCubeArrayManifest = {\n shape: 'image-texture-cube-array';\n layers: ImageTextureCubeArrayLayer[];\n};\n\nexport type CompositeImageManifest =\n | ImageTextureManifest\n | ImageTextureArrayManifest\n | ImageTextureCubeManifest\n | ImageTextureCubeArrayManifest;\n\nexport type CompositeImageUrlTree =\n | ImageTextureSource\n | ImageTextureSource[]\n | ImageCubeTexture\n | ImageCubeTexture[];\n\nexport async function parseCompositeImageManifest(\n text: string,\n expectedShape: CompositeImageManifest['shape'],\n options: TextureLoaderOptions = {},\n context?: LoaderContext\n): Promise<any> {\n const manifest = parseCompositeImageManifestJSON(text);\n if (manifest.shape !== expectedShape) {\n throw new Error(`Expected ${expectedShape} manifest, got ${manifest.shape}`);\n }\n return await loadCompositeImageManifest(manifest, options, context);\n}\n\nexport function testCompositeImageManifestShape(\n text: string,\n shape: CompositeImageManifest['shape']\n): boolean {\n try {\n return parseCompositeImageManifestJSON(text).shape === shape;\n } catch {\n return false;\n }\n}\n\nexport async function loadCompositeImageManifest(\n manifest: CompositeImageManifest,\n options: TextureLoaderOptions = {},\n context?: LoaderContext\n): Promise<Texture> {\n const normalizedOptions = normalizeCompositeImageManifestOptions(options);\n const urlTree = await getCompositeImageUrlTree(manifest, normalizedOptions, context);\n const imageData = await loadCompositeImageUrlTree(urlTree, normalizedOptions, context);\n return convertCompositeImageToTexture(manifest.shape, imageData);\n}\n\nexport async function loadCompositeImageUrlTree(\n urlTree: CompositeImageUrlTree,\n options: TextureLoaderOptions = {},\n context?: LoaderContext\n): Promise<any> {\n const normalizedOptions = normalizeCompositeImageOptions(options);\n return await asyncDeepMap(\n urlTree,\n async (url: string) => await loadCompositeImageMember(url, normalizedOptions, context)\n );\n}\n\nexport async function loadCompositeImageMember(\n url: string,\n options: TextureLoaderOptions = {},\n context?: LoaderContext\n): Promise<any> {\n const resolvedUrl = resolveCompositeImageUrl(url, options, context);\n const fetch = getCompositeImageFetch(options, context);\n const response = await fetch(resolvedUrl);\n const subloaderOptions = getCompositeImageSubloaderOptions(options);\n if (context) {\n const childContext = getCompositeImageMemberContext(resolvedUrl, response, context);\n return await parseFromContext(\n response as any,\n [ImageLoader],\n subloaderOptions as any,\n childContext\n );\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return await ImageLoader.parse(arrayBuffer, subloaderOptions as any);\n}\n\nexport async function getCompositeImageUrlTree(\n manifest: CompositeImageManifest,\n options: TextureLoaderOptions = {},\n context?: LoaderContext\n): Promise<CompositeImageUrlTree> {\n switch (manifest.shape) {\n case 'image-texture':\n return await getImageTextureSource(manifest, options, context);\n\n case 'image-texture-array':\n if (!Array.isArray(manifest.layers) || manifest.layers.length === 0) {\n throw new Error('image-texture-array manifest must define one or more layers');\n }\n return await Promise.all(\n manifest.layers.map(\n async (layer, index) =>\n await getNormalizedImageTextureSource(layer, options, context, {index})\n )\n );\n\n case 'image-texture-cube':\n return await getImageTextureCubeUrls(manifest, options, context);\n\n case 'image-texture-cube-array':\n if (!Array.isArray(manifest.layers) || manifest.layers.length === 0) {\n throw new Error('image-texture-cube-array manifest must define one or more layers');\n }\n return await Promise.all(\n manifest.layers.map(\n async (layer, index) => await getImageTextureCubeUrls(layer, options, context, {index})\n )\n );\n\n default:\n throw new Error('Unsupported composite image manifest');\n }\n}\n\nexport function normalizeCompositeImageOptions(\n options: TextureLoaderOptions = {}\n): TextureLoaderOptions {\n if (options.core?.baseUrl) {\n return options;\n }\n\n const fallbackBaseUrl = options.baseUrl;\n if (!fallbackBaseUrl) {\n return options;\n }\n\n return {\n ...options,\n core: {\n ...options.core,\n baseUrl: fallbackBaseUrl\n }\n };\n}\n\nexport function resolveCompositeImageUrl(\n url: string,\n options: TextureLoaderOptions = {},\n context?: LoaderContext\n): string {\n const resolvedUrl = resolvePath(url);\n if (isAbsoluteCompositeImageUrl(url)) {\n return resolvedUrl;\n }\n\n const baseUrl = getCompositeImageBaseUrl(options, context);\n if (!baseUrl) {\n if (resolvedUrl !== url || url.startsWith('@')) {\n return resolvedUrl;\n }\n throw new Error(`Unable to resolve relative image URL ${url} without a base URL`);\n }\n\n return resolvePath(joinCompositeImageUrl(baseUrl, url));\n}\n\nfunction parseCompositeImageManifestJSON(text: string): CompositeImageManifest {\n const manifest = JSON.parse(text) as CompositeImageManifest;\n if (!manifest?.shape) {\n throw new Error('Composite image manifest must contain a shape field');\n }\n return manifest;\n}\n\nasync function getImageTextureSource(\n manifest: ImageTextureManifest,\n options: TextureLoaderOptions,\n context?: LoaderContext\n): Promise<ImageTextureSource> {\n if ((manifest.image || manifest.mipmaps) && manifest.template) {\n throw new Error('image-texture manifest must define image, mipmaps, or template source');\n }\n if (manifest.image && manifest.mipmaps) {\n throw new Error('image-texture manifest must define image, mipmaps, or template source');\n }\n if (manifest.image) {\n return manifest.image;\n }\n if (manifest.mipmaps?.length) {\n return manifest.mipmaps;\n }\n if (manifest.template) {\n return await expandImageTextureSource(\n {mipLevels: manifest.mipLevels ?? 'auto', template: manifest.template},\n options,\n context,\n {}\n );\n }\n throw new Error('image-texture manifest must define image, mipmaps, or template source');\n}\n\nasync function getImageTextureCubeUrls(\n manifest: Pick<ImageTextureCubeManifest, 'faces'>,\n options: TextureLoaderOptions,\n context?: LoaderContext,\n templateOptions: TemplateOptions = {}\n): Promise<ImageCubeTexture> {\n const urls: ImageCubeTexture = {};\n\n for (const {face, name, direction, axis, sign} of IMAGE_TEXTURE_CUBE_FACES) {\n const source = manifest.faces?.[name] || manifest.faces?.[direction];\n if (!source) {\n throw new Error(`image-texture-cube manifest is missing ${name} face`);\n }\n urls[face] = await getNormalizedImageTextureSource(source, options, context, {\n ...templateOptions,\n face: name,\n direction,\n axis,\n sign\n });\n }\n\n return urls;\n}\n\nasync function getNormalizedImageTextureSource(\n source: ImageTextureSource,\n options: TextureLoaderOptions,\n context: LoaderContext | undefined,\n templateOptions: TemplateOptions\n): Promise<ImageTextureSource> {\n if (typeof source === 'string') {\n return source;\n }\n if (Array.isArray(source) && source.length > 0) {\n return source;\n }\n if (isImageTextureTemplateSource(source)) {\n return await expandImageTextureSource(source, options, context, templateOptions);\n }\n throw new Error('Composite image source entries must be strings or non-empty mip arrays');\n}\n\nasync function expandImageTextureSource(\n source: ImageTextureTemplateSource,\n options: TextureLoaderOptions,\n context: LoaderContext | undefined,\n templateOptions: TemplateOptions\n): Promise<string[]> {\n const mipLevels =\n source.mipLevels === 'auto'\n ? await getAutoMipLevels(source.template, options, context, templateOptions)\n : source.mipLevels;\n\n if (!Number.isFinite(mipLevels) || mipLevels <= 0) {\n throw new Error(`Invalid mipLevels value ${source.mipLevels}`);\n }\n\n const urls: string[] = [];\n for (let lod = 0; lod < mipLevels; lod++) {\n urls.push(expandTemplate(source.template, {...templateOptions, lod}));\n }\n return urls;\n}\n\nasync function getAutoMipLevels(\n template: string,\n options: TextureLoaderOptions,\n context: LoaderContext | undefined,\n templateOptions: TemplateOptions\n): Promise<number> {\n if (!template.includes('{lod}')) {\n throw new Error('Template sources with mipLevels: auto must include a {lod} placeholder');\n }\n\n const level0Url = expandTemplate(template, {...templateOptions, lod: 0});\n const image = await loadCompositeImageMember(\n level0Url,\n normalizeCompositeImageOptions(options),\n context\n );\n const {width, height} = getImageSize(image);\n return 1 + Math.floor(Math.log2(Math.max(width, height)));\n}\n\ntype TemplateOptions = {\n lod?: number;\n index?: number;\n face?: string;\n direction?: string;\n axis?: string;\n sign?: string;\n};\n\nfunction expandTemplate(template: string, templateOptions: TemplateOptions): string {\n let expanded = '';\n\n for (let index = 0; index < template.length; index++) {\n const character = template[index];\n\n if (character === '\\\\') {\n const nextCharacter = template[index + 1];\n if (nextCharacter === '{' || nextCharacter === '}' || nextCharacter === '\\\\') {\n expanded += nextCharacter;\n index++;\n continue;\n }\n throw new Error(`Invalid escape sequence \\\\${nextCharacter || ''} in template ${template}`);\n }\n\n if (character === '}') {\n throw new Error(`Unexpected } in template ${template}`);\n }\n\n if (character !== '{') {\n expanded += character;\n continue;\n }\n\n const closingBraceIndex = findClosingBraceIndex(template, index + 1);\n if (closingBraceIndex < 0) {\n throw new Error(`Unterminated placeholder in template ${template}`);\n }\n\n const placeholder = template.slice(index + 1, closingBraceIndex);\n if (!/^[a-z][a-zA-Z0-9]*$/.test(placeholder)) {\n throw new Error(`Invalid placeholder {${placeholder}} in template ${template}`);\n }\n\n const value = getTemplateValue(placeholder, templateOptions);\n if (value === undefined) {\n throw new Error(\n `Template ${template} uses unsupported placeholder {${placeholder}} for this source`\n );\n }\n\n expanded += String(value);\n index = closingBraceIndex;\n }\n\n return expanded;\n}\n\nfunction findClosingBraceIndex(template: string, startIndex: number): number {\n for (let index = startIndex; index < template.length; index++) {\n const character = template[index];\n if (character === '\\\\') {\n index++;\n continue;\n }\n if (character === '{') {\n throw new Error(`Nested placeholders are not supported in template ${template}`);\n }\n if (character === '}') {\n return index;\n }\n }\n return -1;\n}\n\nfunction getTemplateValue(\n placeholder: string,\n templateOptions: TemplateOptions\n): string | number | undefined {\n switch (placeholder) {\n case 'lod':\n return templateOptions.lod;\n case 'index':\n return templateOptions.index;\n case 'face':\n return templateOptions.face;\n case 'direction':\n return templateOptions.direction;\n case 'axis':\n return templateOptions.axis;\n case 'sign':\n return templateOptions.sign;\n default:\n return undefined;\n }\n}\n\nfunction isImageTextureTemplateSource(\n source: ImageTextureSource\n): source is ImageTextureTemplateSource {\n return typeof source === 'object' && source !== null && !Array.isArray(source);\n}\n\nfunction getCompositeImageBaseUrl(\n options: TextureLoaderOptions,\n context?: LoaderContext\n): string | null {\n if (context?.baseUrl) {\n return context.baseUrl;\n }\n\n if (options.baseUrl) {\n return stripTrailingSlash(options.baseUrl);\n }\n\n if (options.core?.baseUrl) {\n return getSourceUrlDirectory(options.core.baseUrl);\n }\n\n return null;\n}\n\nfunction stripTrailingSlash(baseUrl: string): string {\n if (baseUrl.endsWith('/')) {\n return baseUrl.slice(0, -1);\n }\n\n return baseUrl;\n}\n\nfunction getSourceUrlDirectory(baseUrl: string): string {\n return stripTrailingSlash(path.dirname(baseUrl));\n}\n\nfunction joinCompositeImageUrl(baseUrl: string, url: string): string {\n if (isRequestLikeUrl(baseUrl)) {\n return new URL(url, `${stripTrailingSlash(baseUrl)}/`).toString();\n }\n\n const normalizedBaseUrl = baseUrl.startsWith('/') ? baseUrl : `/${baseUrl}`;\n const normalizedUrl = path.resolve(normalizedBaseUrl, url);\n return baseUrl.startsWith('/') ? normalizedUrl : normalizedUrl.slice(1);\n}\n\nfunction isRequestLikeUrl(url: string): boolean {\n return (\n url.startsWith('http:') ||\n url.startsWith('https:') ||\n url.startsWith('file:') ||\n url.startsWith('blob:')\n );\n}\n\nfunction getCompositeImageFetch(\n options: TextureLoaderOptions,\n context?: LoaderContext\n): typeof fetch {\n const fetchOption = options.fetch ?? options.core?.fetch;\n\n if (context?.fetch) {\n return context.fetch as typeof fetch;\n }\n\n if (typeof fetchOption === 'function') {\n return fetchOption as typeof fetch;\n }\n\n if (fetchOption && typeof fetchOption === 'object') {\n return (url) => fetch(url, fetchOption);\n }\n\n return fetch;\n}\n\nfunction getCompositeImageSubloaderOptions(options: TextureLoaderOptions): TextureLoaderOptions {\n const core = options.core;\n const rest = {...options};\n delete rest.baseUrl;\n if (!core?.baseUrl) {\n return rest;\n }\n\n const restCore = {...core};\n delete restCore.baseUrl;\n return {\n ...rest,\n core: restCore\n };\n}\n\nfunction normalizeCompositeImageManifestOptions(\n options: TextureLoaderOptions\n): TextureLoaderOptions {\n if (options.image?.type || typeof ImageBitmap === 'undefined') {\n return options;\n }\n\n return {\n ...options,\n image: {\n ...options.image,\n type: 'imagebitmap'\n }\n };\n}\n\nfunction getCompositeImageMemberContext(\n resolvedUrl: string,\n response: Response,\n context: LoaderContext\n): LoaderContext {\n const url = response.url || resolvedUrl;\n const [urlWithoutQueryString, queryString = ''] = url.split('?');\n\n return {\n ...context,\n url,\n response,\n filename: path.filename(urlWithoutQueryString),\n baseUrl: path.dirname(urlWithoutQueryString),\n queryString\n };\n}\n\nfunction convertCompositeImageToTexture(\n shape: CompositeImageManifest['shape'],\n imageData: any\n): Texture {\n switch (shape) {\n case 'image-texture': {\n const data = normalizeCompositeImageMember(imageData);\n return {\n shape: 'texture',\n type: '2d',\n format: getCompositeTextureFormat(data),\n data\n };\n }\n\n case 'image-texture-array': {\n const data = imageData.map((layer) => normalizeCompositeImageMember(layer));\n return {\n shape: 'texture',\n type: '2d-array',\n format: getCompositeTextureFormat(data[0]),\n data\n };\n }\n\n case 'image-texture-cube': {\n const data = IMAGE_TEXTURE_CUBE_FACES.map(({face}) =>\n normalizeCompositeImageMember(imageData[face])\n );\n return {\n shape: 'texture',\n type: 'cube',\n format: getCompositeTextureFormat(data[0]),\n data\n };\n }\n\n case 'image-texture-cube-array': {\n const data = imageData.map((layer) =>\n IMAGE_TEXTURE_CUBE_FACES.map(({face}) => normalizeCompositeImageMember(layer[face]))\n );\n return {\n shape: 'texture',\n type: 'cube-array',\n format: getCompositeTextureFormat(data[0][0]),\n data\n };\n }\n\n default:\n throw new Error(`Unsupported composite image shape ${shape}`);\n }\n}\n\nfunction normalizeCompositeImageMember(imageData: any): TextureLevel[] {\n if (Array.isArray(imageData)) {\n if (imageData.length === 0) {\n throw new Error('Composite image members must not be empty');\n }\n\n if (imageData.every(isTextureLevel)) {\n return imageData;\n }\n\n if (imageData.every(isImage)) {\n return imageData.map((image) => getTextureLevelFromImage(image));\n }\n\n if (imageData.every((entry) => Array.isArray(entry) && entry.every(isTextureLevel))) {\n if (imageData.length !== 1) {\n throw new Error('Composite image members must resolve to a single image or mip chain');\n }\n return imageData[0];\n }\n }\n\n if (isTexture(imageData)) {\n if (imageData.type !== '2d') {\n throw new Error(`Composite image members must resolve to 2d textures, got ${imageData.type}`);\n }\n return imageData.data;\n }\n\n if (isTextureLevel(imageData)) {\n return [imageData];\n }\n\n if (isImage(imageData)) {\n return [getTextureLevelFromImage(imageData)];\n }\n\n throw new Error('Composite image members must resolve to an image, mip chain, or texture');\n}\n\nfunction getTextureLevelFromImage(image: ImageType): TextureLevel {\n const {width, height} = getImageSize(image);\n return {\n shape: 'texture-level',\n compressed: false,\n width,\n height,\n imageBitmap:\n typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ? image : undefined,\n data: new Uint8Array(0),\n textureFormat: 'rgba8unorm'\n };\n}\n\nfunction getCompositeTextureFormat(textureLevels: TextureLevel[]): TextureFormat {\n return textureLevels[0]?.textureFormat || 'rgba8unorm';\n}\n\nfunction isTextureLevel(textureLevel: unknown): textureLevel is TextureLevel {\n return Boolean(\n textureLevel &&\n typeof textureLevel === 'object' &&\n 'shape' in textureLevel &&\n textureLevel.shape === 'texture-level'\n );\n}\n\nfunction isTexture(texture: unknown): texture is Texture {\n return Boolean(\n texture && typeof texture === 'object' && 'shape' in texture && texture.shape === 'texture'\n );\n}\n\nfunction isAbsoluteCompositeImageUrl(url: string): boolean {\n return (\n url.startsWith('data:') ||\n url.startsWith('blob:') ||\n url.startsWith('file:') ||\n url.startsWith('http:') ||\n url.startsWith('https:') ||\n url.startsWith('/')\n );\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/*\nAsynchronously maps a deep structure of values (e.g. objects and arrays of urls).\n\nE.g. a mipmapped cubemap\n{\n [CUBE_FACE_FRONT]: [\n \"image-front-0.jpg\",\n \"image-front-1.jpg\",\n \"image-front-2.jpg\",\n ],\n [CUBE_MAP_BACK]: [\n ...\n ]\n}\n*/\nexport type Options = Record<string, any>;\nexport type Func = (url: string, options: Options) => unknown;\n\nconst isObject = (value: any): boolean => value && typeof value === 'object';\n\n// Loads a deep structure of urls (objects and arrays of urls)\n// Returns an object with six key-value pairs containing the images (or image mip arrays)\n// for each cube face\nexport async function asyncDeepMap(tree: unknown, func: Func, options: Options = {}) {\n return await mapSubtree(tree, func, options);\n}\n\nexport async function mapSubtree(object: unknown, func: Func, options: Options) {\n if (Array.isArray(object)) {\n return await mapArray(object, func, options);\n }\n\n if (isObject(object)) {\n return await mapObject(object as object, func, options);\n }\n\n // TODO - ignore non-urls, non-arraybuffers?\n const url = object as string;\n return await func(url, options);\n}\n\n// HELPERS\n\nasync function mapObject(\n object: Record<string, any>,\n func: Func,\n options: Options\n): Promise<Record<string, any>> {\n const promises: Promise<any>[] = [];\n const values: Record<string, any> = {};\n\n for (const key in object) {\n const url = object[key];\n const promise = mapSubtree(url, func, options).then((value) => {\n values[key] = value;\n });\n promises.push(promise);\n }\n\n await Promise.all(promises);\n\n return values;\n}\n\nasync function mapArray(urlArray: string[], func: Func, options = {}): Promise<any[]> {\n const promises = urlArray.map((url) => mapSubtree(url, func, options));\n return await Promise.all(promises);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport const GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;\nexport const GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;\nexport const GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;\nexport const GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;\nexport const GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;\nexport const GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851a;\n\nexport type ImageTextureCubeFace = '+X' | '-X' | '+Y' | '-Y' | '+Z' | '-Z';\n\nexport type ImageTextureCubeDirectionAlias = 'right' | 'left' | 'top' | 'bottom' | 'front' | 'back';\n\nexport const IMAGE_TEXTURE_CUBE_FACES = [\n {\n face: GL_TEXTURE_CUBE_MAP_POSITIVE_X,\n name: '+X',\n direction: 'right',\n axis: 'x',\n sign: 'positive'\n },\n {\n face: GL_TEXTURE_CUBE_MAP_NEGATIVE_X,\n name: '-X',\n direction: 'left',\n axis: 'x',\n sign: 'negative'\n },\n {face: GL_TEXTURE_CUBE_MAP_POSITIVE_Y, name: '+Y', direction: 'top', axis: 'y', sign: 'positive'},\n {\n face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,\n name: '-Y',\n direction: 'bottom',\n axis: 'y',\n sign: 'negative'\n },\n {\n face: GL_TEXTURE_CUBE_MAP_POSITIVE_Z,\n name: '+Z',\n direction: 'front',\n axis: 'z',\n sign: 'positive'\n },\n {face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, name: '-Z', direction: 'back', axis: 'z', sign: 'negative'}\n] as const;\n\nexport type ImageCubeTexture = Record<number, any>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderContext, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {Texture} from '@loaders.gl/schema';\nimport type {TextureLoaderOptions as TextureApiLoaderOptions} from './lib/texture-api/texture-api-types';\nimport {VERSION} from './lib/utils/version';\nimport {\n parseCompositeImageManifest,\n testCompositeImageManifestShape,\n type ImageTextureManifest\n} from './lib/composite-image/parse-composite-image';\n\nexport type TextureManifestLoaderOptions = TextureApiLoaderOptions;\nexport type {ImageTextureManifest as TextureManifest};\n\nexport const TextureLoader = {\n dataType: null as unknown as Texture,\n batchType: null as never,\n id: 'texture',\n name: 'Texture',\n module: 'textures',\n version: VERSION,\n extensions: [],\n mimeTypes: [],\n text: true,\n worker: false,\n testText: (text: string) => testCompositeImageManifestShape(text, 'image-texture'),\n options: {\n image: {}\n },\n parse: async (\n arrayBuffer: ArrayBuffer,\n options?: TextureManifestLoaderOptions,\n context?: LoaderContext\n ) =>\n await parseCompositeImageManifest(\n new TextDecoder().decode(arrayBuffer),\n 'image-texture',\n options,\n context\n ),\n parseText: async (\n text: string,\n options?: TextureManifestLoaderOptions,\n context?: LoaderContext\n ) => await parseCompositeImageManifest(text, 'image-texture', options, context)\n} as const satisfies LoaderWithParser<Texture, never, TextureManifestLoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderContext, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {Texture} from '@loaders.gl/schema';\nimport type {TextureLoaderOptions as TextureApiLoaderOptions} from './lib/texture-api/texture-api-types';\nimport {VERSION} from './lib/utils/version';\nimport {\n parseCompositeImageManifest,\n testCompositeImageManifestShape,\n type ImageTextureArrayManifest\n} from './lib/composite-image/parse-composite-image';\n\nexport type TextureArrayLoaderOptions = TextureApiLoaderOptions;\nexport type {ImageTextureArrayManifest as TextureArrayManifest};\n\nexport const TextureArrayLoader = {\n dataType: null as unknown as Texture,\n batchType: null as never,\n id: 'texture-array',\n name: 'Texture Array',\n module: 'textures',\n version: VERSION,\n extensions: [],\n mimeTypes: [],\n text: true,\n worker: false,\n testText: (text: string) => testCompositeImageManifestShape(text, 'image-texture-array'),\n options: {\n image: {}\n },\n parse: async (\n arrayBuffer: ArrayBuffer,\n options?: TextureArrayLoaderOptions,\n context?: LoaderContext\n ) =>\n await parseCompositeImageManifest(\n new TextDecoder().decode(arrayBuffer),\n 'image-texture-array',\n options,\n context\n ),\n parseText: async (text: string, options?: TextureArrayLoaderOptions, context?: LoaderContext) =>\n await parseCompositeImageManifest(text, 'image-texture-array', options, context)\n} as const satisfies LoaderWithParser<Texture, never, TextureArrayLoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderContext, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {Texture} from '@loaders.gl/schema';\nimport type {TextureLoaderOptions as TextureApiLoaderOptions} from './lib/texture-api/texture-api-types';\nimport {VERSION} from './lib/utils/version';\nimport {\n parseCompositeImageManifest,\n testCompositeImageManifestShape,\n type ImageTextureCubeManifest\n} from './lib/composite-image/parse-composite-image';\n\nexport type TextureCubeLoaderOptions = TextureApiLoaderOptions;\nexport type {ImageTextureCubeManifest as TextureCubeManifest};\n\nexport const TextureCubeLoader = {\n dataType: null as unknown as Texture,\n batchType: null as never,\n id: 'texture-cube',\n name: 'Texture Cube',\n module: 'textures',\n version: VERSION,\n extensions: [],\n mimeTypes: [],\n text: true,\n worker: false,\n testText: (text: string) => testCompositeImageManifestShape(text, 'image-texture-cube'),\n options: {\n image: {}\n },\n parse: async (\n arrayBuffer: ArrayBuffer,\n options?: TextureCubeLoaderOptions,\n context?: LoaderContext\n ) =>\n await parseCompositeImageManifest(\n new TextDecoder().decode(arrayBuffer),\n 'image-texture-cube',\n options,\n context\n ),\n parseText: async (text: string, options?: TextureCubeLoaderOptions, context?: LoaderContext) =>\n await parseCompositeImageManifest(text, 'image-texture-cube', options, context)\n} as const satisfies LoaderWithParser<Texture, never, TextureCubeLoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderContext, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {Texture} from '@loaders.gl/schema';\nimport type {TextureLoaderOptions as TextureApiLoaderOptions} from './lib/texture-api/texture-api-types';\nimport {VERSION} from './lib/utils/version';\nimport {\n parseCompositeImageManifest,\n testCompositeImageManifestShape,\n type ImageTextureCubeArrayManifest\n} from './lib/composite-image/parse-composite-image';\n\nexport type TextureCubeArrayLoaderOptions = TextureApiLoaderOptions;\nexport type {ImageTextureCubeArrayManifest as TextureCubeArrayManifest};\n\nexport const TextureCubeArrayLoader = {\n dataType: null as unknown as Texture,\n batchType: null as never,\n id: 'texture-cube-array',\n name: 'Texture Cube Array',\n module: 'textures',\n version: VERSION,\n extensions: [],\n mimeTypes: [],\n text: true,\n worker: false,\n testText: (text: string) => testCompositeImageManifestShape(text, 'image-texture-cube-array'),\n options: {\n image: {}\n },\n parse: async (\n arrayBuffer: ArrayBuffer,\n options?: TextureCubeArrayLoaderOptions,\n context?: LoaderContext\n ) =>\n await parseCompositeImageManifest(\n new TextDecoder().decode(arrayBuffer),\n 'image-texture-cube-array',\n options,\n context\n ),\n parseText: async (\n text: string,\n options?: TextureCubeArrayLoaderOptions,\n context?: LoaderContext\n ) => await parseCompositeImageManifest(text, 'image-texture-cube-array', options, context)\n} as const satisfies LoaderWithParser<Texture, never, TextureCubeArrayLoaderOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// @ts-nocheck\nimport {getJSModuleOrNull, registerJSModules} from '@loaders.gl/loader-utils';\nimport {loadLibrary, type LoadLibraryOptions} from '@loaders.gl/worker-utils';\n\nexport const CRUNCH_EXTERNAL_LIBRARIES = {\n /** Crunch decoder library. It is used as dynamically imported script */\n DECODER: 'crunch.js'\n};\n\n/**\n * Load crunch decoder module\n * @param options - loader options\n * @returns Promise of module object\n */\nexport async function loadCrunchModule(options: LoadLibraryOptions): Promise<any> {\n registerJSModules(options.modules);\n const crunch = getJSModuleOrNull('crunch');\n if (crunch) {\n return crunch;\n }\n\n return loadCrunch(options);\n}\n\nlet crunchModule;\n\n/**\n * Load crunch decoder module\n * @param {any} options - Loader options\n * @returns {Promise<any>} Promise of Module object\n */\nasync function loadCrunch(options: LoadLibraryOptions): Promise<any> {\n if (crunchModule) {\n return crunchModule;\n }\n\n let loadCrunchDecoder = await loadLibrary(CRUNCH_EXTERNAL_LIBRARIES.DECODER, 'textures', options);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n loadCrunchDecoder ||= globalThis.LoadCrunchDecoder;\n crunchModule = loadCrunchDecoder();\n return crunchModule;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {ChildProcessProxy} from '@loaders.gl/worker-utils';\nimport {CompressedTextureWriterOptions} from '../../compressed-texture-writer';\n\n/*\n * @see https://github.com/TimvanScherpenzeel/texture-compressor\n */\nexport async function encodeImageURLToCompressedTextureURL(\n inputUrl: string,\n outputUrl: string,\n options?: CompressedTextureWriterOptions\n): Promise<string> {\n // prettier-ignore\n const args = [\n // Note: our actual executable is `npx`, so `texture-compressor` is an argument\n 'texture-compressor',\n '--type', 's3tc',\n '--compression', 'DXT1',\n '--quality', 'normal',\n '--input', inputUrl,\n '--output', outputUrl\n ];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: 'npx',\n arguments: args,\n spawn: options\n });\n return outputUrl;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {WriterWithEncoder, WriterOptions} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\nimport {encodeImageURLToCompressedTextureURL} from './lib/encoders/encode-texture';\n\n/** Compressed Texture writer options */\nexport type CompressedTextureWriterOptions = WriterOptions & {\n /** @deprecated current working directory */\n cwd?: string;\n /** Compressed Texture writer options */\n texture?: {\n format: string;\n compression: string;\n quality: string;\n mipmap: boolean;\n flipY: boolean;\n toolFlags: string;\n };\n};\n\n/**\n * DDS Texture Container Exporter\n */\nexport const CompressedTextureWriter = {\n name: 'DDS Texture Container',\n id: 'dds',\n module: 'textures',\n version: VERSION,\n\n extensions: ['dds'],\n mimeTypes: ['image/vnd-ms.dds', 'image/x-dds', 'application/octet-stream'],\n\n options: {\n texture: {\n format: 'auto',\n compression: 'auto',\n quality: 'auto',\n mipmap: false,\n flipY: false,\n toolFlags: ''\n }\n },\n\n encodeURLtoURL: encodeImageURLToCompressedTextureURL,\n encode() {\n throw new Error('Not implemented');\n }\n} as const satisfies WriterWithEncoder<unknown, unknown, CompressedTextureWriterOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ImageDataType} from '@loaders.gl/images';\nimport {extractLoadLibraryOptions} from '@loaders.gl/worker-utils';\nimport {loadBasisEncoderModule} from '../parsers/basis-module-loader';\nimport {type KTX2BasisWriterOptions} from '../../ktx2-basis-writer';\n\n/**\n * Encodes image to Basis Universal Supercompressed GPU Texture.\n * Code example is taken from here - https://github.com/BinomialLLC/basis_universal/blob/master/webgl/ktx2_encode_test/index.html#L279\n * BasisEncoder API - https://github.com/BinomialLLC/basis_universal/blob/master/webgl/transcoder/basis_wrappers.cpp#L1712\n * @param image\n * @param options\n */\nexport async function encodeKTX2BasisTexture(\n image: ImageDataType,\n options: KTX2BasisWriterOptions = {}\n): Promise<ArrayBuffer> {\n // TODO remove default values after writer options will be normalized like it done in load module.\n const {\n useSRGB = false,\n qualityLevel = 10,\n encodeUASTC = false,\n mipmaps = false\n } = options?.['ktx2-basis-writer'] || {};\n const {BasisEncoder} = await loadBasisEncoderModule(extractLoadLibraryOptions(options));\n const basisEncoder = new BasisEncoder();\n\n try {\n const basisFileData = new Uint8Array(image.width * image.height * 4);\n basisEncoder.setCreateKTX2File(true);\n basisEncoder.setKTX2UASTCSupercompression(true);\n basisEncoder.setKTX2SRGBTransferFunc(true);\n\n basisEncoder.setSliceSourceImage(0, image.data, image.width, image.height, false);\n basisEncoder.setPerceptual(useSRGB);\n basisEncoder.setMipSRGB(useSRGB);\n basisEncoder.setQualityLevel(qualityLevel);\n basisEncoder.setUASTC(encodeUASTC);\n basisEncoder.setMipGen(mipmaps);\n\n const numOutputBytes = basisEncoder.encode(basisFileData);\n\n const actualKTX2FileData = basisFileData.subarray(0, numOutputBytes).buffer;\n return actualKTX2FileData;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Basis Universal Supercompressed GPU Texture encoder Error: ', error);\n throw error;\n } finally {\n basisEncoder.delete();\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {WriterWithEncoder, WriterOptions} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\nimport type {ImageDataType} from '@loaders.gl/images';\nimport {encodeKTX2BasisTexture} from './lib/encoders/encode-ktx2-basis-texture';\n\n/** @todo should be in basis sub-object */\nexport type KTX2BasisWriterOptions = WriterOptions & {\n ['ktx2-basis-writer']?: {\n useSRGB?: boolean;\n qualityLevel?: number;\n encodeUASTC?: boolean;\n mipmaps?: boolean;\n };\n};\n\n/**\n * Basis Universal Supercompressed GPU Texture.\n * Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/textureSetDefinitionFormat.cmn.md\n */\nexport const KTX2BasisWriter = {\n name: 'Basis Universal Supercompressed GPU Texture',\n id: 'ktx2-basis-writer',\n module: 'textures',\n version: VERSION,\n\n extensions: ['ktx2'],\n mimeTypes: ['image/ktx2'],\n options: {\n ['ktx2-basis-writer']: {\n useSRGB: false,\n qualityLevel: 10,\n encodeUASTC: false,\n mipmaps: false\n }\n },\n\n encode: encodeKTX2BasisTexture\n} as const satisfies WriterWithEncoder<ImageDataType, unknown, KTX2BasisWriterOptions>;\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {assert} from '@loaders.gl/loader-utils';\nimport {getImageSize} from '@loaders.gl/images';\nimport {\n loadCompositeImageMember,\n loadCompositeImageUrlTree,\n normalizeCompositeImageOptions\n} from '../composite-image/parse-composite-image';\nimport type {GetUrl, TextureLoaderOptions, UrlOptions} from './texture-api-types';\nimport {generateUrl} from './generate-url';\n\n/**\n * @deprecated Use `load(url, TextureLoader)` for manifest-driven loading.\n */\nexport async function loadImageTexture(\n getUrl: string | GetUrl,\n options: TextureLoaderOptions = {}\n): Promise<any> {\n const imageUrls = await getImageUrls(getUrl, options);\n return await loadCompositeImageUrlTree(imageUrls, normalizeCompositeImageOptions(options));\n}\n\nexport async function getImageUrls(\n getUrl: string | GetUrl,\n options: TextureLoaderOptions,\n urlOptions: UrlOptions = {}\n): Promise<any> {\n const mipLevels = (options && options.image && options.image.mipLevels) || 0;\n return mipLevels !== 0\n ? await getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions)\n : generateUrl(getUrl, options, urlOptions);\n}\n\nasync function getMipmappedImageUrls(\n getUrl: string | GetUrl,\n mipLevels: number | 'auto',\n options: TextureLoaderOptions,\n urlOptions: UrlOptions\n): Promise<string[]> {\n const urls: string[] = [];\n const normalizedOptions = normalizeCompositeImageOptions(options);\n\n // If no mip levels supplied, we need to load the level 0 image and calculate based on size\n if (mipLevels === 'auto') {\n const url = generateUrl(getUrl, options, {...urlOptions, lod: 0});\n const image = await loadCompositeImageMember(url, normalizedOptions);\n\n const {width, height} = getImageSize(image);\n mipLevels = getMipLevels({width, height});\n\n // TODO - push image and make `deepLoad` pass through non-url values, avoid loading twice?\n urls.push(url);\n }\n\n // We now know how many mipLevels we need, remaining image urls can now be constructed\n assert(mipLevels > 0);\n\n for (let mipLevel = urls.length; mipLevel < mipLevels; ++mipLevel) {\n const url = generateUrl(getUrl, options, {...urlOptions, lod: mipLevel});\n urls.push(url);\n }\n\n return urls;\n}\n\n// Calculates number of mipmaps based on texture size (log2)\nexport function getMipLevels(size: {width: number; height: number}): number {\n return 1 + Math.floor(Math.log2(Math.max(size.width, size.height)));\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {GetUrl, UrlOptions} from './texture-api-types';\n\n// Generate a member url by calling getUrl with merged options.\nexport function generateUrl(\n getUrl: string | GetUrl,\n options: UrlOptions,\n urlOptions: Record<string, any>\n): string {\n return typeof getUrl === 'function' ? getUrl({...options, ...urlOptions}) : getUrl;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n loadCompositeImageUrlTree,\n normalizeCompositeImageOptions\n} from '../composite-image/parse-composite-image';\nimport type {GetUrl, TextureLoaderOptions} from './texture-api-types';\nimport {getImageUrls} from './load-image';\n\n/**\n * @deprecated Use `load(url, TextureArrayLoader)` for manifest-driven loading.\n */\nexport async function loadImageTextureArray(\n count: number,\n getUrl: GetUrl,\n options: TextureLoaderOptions = {}\n): Promise<any> {\n const imageUrls = await getImageArrayUrls(count, getUrl, options);\n return await loadCompositeImageUrlTree(imageUrls, normalizeCompositeImageOptions(options));\n}\n\nexport async function getImageArrayUrls(\n count: number,\n getUrl: GetUrl,\n options: TextureLoaderOptions = {}\n): Promise<any> {\n const promises: Promise<any>[] = [];\n for (let index = 0; index < count; index++) {\n const promise = getImageUrls(getUrl, options, {index});\n promises.push(promise);\n }\n return await Promise.all(promises);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {\n loadCompositeImageUrlTree,\n normalizeCompositeImageOptions\n} from '../composite-image/parse-composite-image';\nimport {\n IMAGE_TEXTURE_CUBE_FACES,\n type ImageCubeTexture\n} from '../composite-image/image-texture-cube';\nimport type {GetUrl, TextureLoaderOptions} from './texture-api-types';\nimport {getImageUrls} from './load-image';\n\n// Returns an object with six key-value pairs containing the urls (or url mip arrays)\n// for each cube face\nexport async function getImageCubeUrls(getUrl: GetUrl, options: TextureLoaderOptions) {\n // Calculate URLs\n const urls: Record<number, string | string[]> = {};\n const promises: Promise<any>[] = [];\n\n let index = 0;\n for (let i = 0; i < IMAGE_TEXTURE_CUBE_FACES.length; ++i) {\n const face = IMAGE_TEXTURE_CUBE_FACES[index];\n const promise = getImageUrls(getUrl, options, {...face, index: index++}).then((url) => {\n urls[face.face] = url;\n });\n promises.push(promise);\n }\n\n await Promise.all(promises);\n\n return urls;\n}\n\n// Returns an object with six key-value pairs containing the images (or image mip arrays)\n// for each cube face\n/**\n * @deprecated Use `load(url, TextureCubeLoader)` for manifest-driven loading.\n */\nexport async function loadImageTextureCube(\n getUrl: GetUrl,\n options: TextureLoaderOptions = {}\n): Promise<ImageCubeTexture> {\n const urls = await getImageCubeUrls(getUrl, options);\n return (await loadCompositeImageUrlTree(\n urls,\n normalizeCompositeImageOptions(options)\n )) as ImageCubeTexture;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACOO,IAAM,UAAU,OAAoC,UAAe;;;ACA1E,IAAAA,uBAAwC;;;ACHxC,0BAAmD;AACnD,0BAA8C;AAEvC,IAAM,2BAA2B;;EAEtC,YAAY;;EAEZ,iBAAiB;;EAEjB,SAAS;;EAET,cAAc;;AAGhB,IAAI;AAOJ,eAAsB,0BAA0B,SAA2B;AACzE,6CAAkB,QAAQ,OAAO;AACjC,QAAM,YAAQ,uCAAkB,OAAO;AACvC,MAAI,OAAO;AACT,WAAO;EACT;AAEA,iCAA+B,oBAAoB,OAAO;AAC1D,SAAO,MAAM;AACf;AAOA,eAAe,oBAAoB,SAA2B;AAC5D,MAAI,QAAQ;AACZ,MAAI,aAAa;AAEjB,GAAC,OAAO,UAAU,IAAI,MAAM,QAAQ,IAAI;IACtC,UAAM,iCAAY,yBAAyB,YAAY,YAAY,OAAO;IAC1E,UAAM,iCAAY,yBAAyB,iBAAiB,YAAY,OAAO;GAChF;AAID,UAAQ,SAAS,WAAW;AAC5B,SAAO,MAAM,gCAAgC,OAAO,UAAU;AAChE;AAQA,SAAS,gCAAgC,aAAa,YAAU;AAC9D,QAAM,UAAyB,CAAA;AAE/B,MAAI,YAAY;AACd,YAAQ,aAAa;EACvB;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAW;AAE7B,gBAAY,OAAO,EAAE,KAAK,CAACC,YAAU;AACnC,YAAM,EAAC,WAAW,gBAAe,IAAIA;AACrC,sBAAe;AACf,cAAQ,EAAC,UAAS,CAAC;IACrB,CAAC;EACH,CAAC;AACH;AAEA,IAAI;AAOJ,eAAsB,uBAAuB,SAA2B;AACtE,QAAM,UAAU,QAAQ,WAAW,CAAA;AACnC,MAAI,QAAQ,cAAc;AACxB,WAAO,QAAQ;EACjB;AAEA,4BAA0B,2BAA2B,iBAAiB,OAAO;AAC7E,SAAO,MAAM;AACf;AAOA,eAAe,iBAAiB,SAA2B;AACzD,MAAI,gBAAgB;AACpB,MAAI,aAAa;AAEjB,GAAC,eAAe,UAAU,IAAI,MAAM,QAAQ,IAAI;IAC9C,UAAM,iCAAY,yBAAyB,SAAS,YAAY,OAAO;IACvE,UAAM,iCAAY,yBAAyB,cAAc,YAAY,OAAO;GAC7E;AAID,kBAAgB,iBAAiB,WAAW;AAC5C,SAAO,MAAM,6BAA6B,eAAe,UAAU;AACrE;AAQA,SAAS,6BAA6B,oBAAoB,YAAU;AAClE,QAAM,UAAyB,CAAA;AAE/B,MAAI,YAAY;AACd,YAAQ,aAAa;EACvB;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAW;AAE7B,uBAAmB,OAAO,EAAE,KAAK,CAACA,YAAU;AAC1C,YAAM,EAAC,WAAW,UAAU,iBAAiB,aAAY,IAAIA;AAC7D,sBAAe;AACf,cAAQ,EAAC,WAAW,UAAU,aAAY,CAAC;IAC7C,CAAC;EACH,CAAC;AACH;;;AClIO,IAAM,SAAS;AACf,IAAM,UAAU;AAChB,IAAM,WAAW;AACjB,IAAM,aAAa;AACnB,IAAM,WAAW;AACjB,IAAM,YAAY;AAClB,IAAM,aAAa;AAGnB,IAAM,kCAAkC;AACxC,IAAM,mCAAmC;AACzC,IAAM,mCAAmC;AACzC,IAAM,mCAAmC;AAGzC,IAAM,wBAAwB;AAC9B,IAAM,+BAA+B;AACrC,IAAM,yBAAyB;AAC/B,IAAM,gCAAgC;AACtC,IAAM,0BAA0B;AAChC,IAAM,+BAA+B;AACrC,IAAM,2BAA2B;AACjC,IAAM,sCAAsC;AAC5C,IAAM,8CAA8C;AACpD,IAAM,+CAA+C;AAGrD,IAAM,qCAAqC;AAC3C,IAAM,qCAAqC;AAC3C,IAAM,sCAAsC;AAC5C,IAAM,sCAAsC;AAG5C,IAAM,+BAA+B;AAGrC,IAAM,8BAA8B;AACpC,IAAM,8CAA8C;AACpD,IAAM,kDAAkD;AAGxD,IAAM,kCAAkC;AACxC,IAAM,kCAAkC;AACxC,IAAM,kCAAkC;AACxC,IAAM,kCAAkC;AACxC,IAAM,kCAAkC;AACxC,IAAM,kCAAkC;AACxC,IAAM,kCAAkC;AACxC,IAAM,kCAAkC;AACxC,IAAM,mCAAmC;AACzC,IAAM,mCAAmC;AACzC,IAAM,mCAAmC;AACzC,IAAM,oCAAoC;AAC1C,IAAM,oCAAoC;AAC1C,IAAM,oCAAoC;AAC1C,IAAM,0CAA0C;AAChD,IAAM,0CAA0C;AAChD,IAAM,0CAA0C;AAChD,IAAM,0CAA0C;AAChD,IAAM,0CAA0C;AAChD,IAAM,0CAA0C;AAChD,IAAM,0CAA0C;AAChD,IAAM,0CAA0C;AAChD,IAAM,2CAA2C;AACjD,IAAM,2CAA2C;AACjD,IAAM,2CAA2C;AACjD,IAAM,4CAA4C;AAClD,IAAM,4CAA4C;AAClD,IAAM,4CAA4C;AAGlD,IAAM,8BAA8B;AACpC,IAAM,qCAAqC;AAC3C,IAAM,oCAAoC;AAC1C,IAAM,2CAA2C;AAGjD,IAAM,oCAAoC;AAC1C,IAAM,0CAA0C;AAChD,IAAM,0CAA0C;AAChD,IAAM,4CAA4C;AAGlD,IAAM,mCAAmC;AACzC,IAAM,yCAAyC;AAC/C,IAAM,yCAAyC;AAC/C,IAAM,yCAAyC;AAE/C,IAAM,0BAA0B;EACrC,KAAK;EACL,MAAM;EACN,OAAO;EACP,SAAS;EACT,OAAO;EACP,QAAQ;EACR,SAAS;EACT,8BAA8B;EAC9B,+BAA+B;EAC/B,+BAA+B;EAC/B,+BAA+B;EAC/B,oBAAoB;EACpB,2BAA2B;EAC3B,qBAAqB;EACrB,4BAA4B;EAC5B,sBAAsB;EACtB,2BAA2B;EAC3B,uBAAuB;EACvB,kCAAkC;EAClC,0CAA0C;EAC1C,2CAA2C;EAC3C,iCAAiC;EACjC,iCAAiC;EACjC,kCAAkC;EAClC,kCAAkC;EAClC,2BAA2B;EAC3B,0BAA0B;EAC1B,0CAA0C;EAC1C,8CAA8C;EAC9C,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,+BAA+B;EAC/B,+BAA+B;EAC/B,+BAA+B;EAC/B,gCAAgC;EAChC,gCAAgC;EAChC,gCAAgC;EAChC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,uCAAuC;EACvC,uCAAuC;EACvC,uCAAuC;EACvC,wCAAwC;EACxC,wCAAwC;EACxC,wCAAwC;EACxC,0BAA0B;EAC1B,iCAAiC;EACjC,gCAAgC;EAChC,uCAAuC;EACvC,gCAAgC;EAChC,sCAAsC;EACtC,sCAAsC;EACtC,wCAAwC;EACxC,+BAA+B;EAC/B,qCAAqC;EACrC,qCAAqC;EACrC,qCAAqC;;EAErC,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,+BAA+B;EAC/B,+BAA+B;EAC/B,+BAA+B;EAC/B,gCAAgC;EAChC,gCAAgC;EAChC,gCAAgC;EAChC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,sCAAsC;EACtC,uCAAuC;EACvC,uCAAuC;EACvC,uCAAuC;EACvC,wCAAwC;EACxC,wCAAwC;EACxC,wCAAwC;;;;AC3L1C,IAAM,mBAAmB,CAAC,IAAI,WAAW,MAAM;AAE/C,IAAM,wBAA0D;;EAE9D,+BAA+B;IAC7B;IACA;IACA;IACA;;EAEF,oCAAoC;IAClC;IACA;IACA;IACA;;EAEF,8BAA8B,CAAC,eAAe,eAAe,gBAAgB,cAAc;EAC3F,8BAA8B;IAC5B;IACA;IACA;IACA;;EAEF,+BAA+B,CAAC,sBAAsB;EACtD,8BAA8B;IAC5B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF,gCAAgC;IAC9B;IACA;IACA;IACA;;EAEF,8BAA8B;IAC5B;IACA;IACA;;EAEF,+BAA+B;IAC7B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;;AAmEJ,IAAI,iBAA4C;AAM1C,SAAU,8BAA8B,IAA0B;AACtE,MAAI,CAAC,gBAAgB;AACnB,SAAK,MAAM,gBAAe,KAAM;AAChC,qBAAiB,oBAAI,IAAG;AAExB,eAAW,UAAU,kBAAkB;AACrC,iBAAW,aAAa,uBAAuB;AAC7C,YAAI,MAAM,GAAG,aAAa,GAAG,SAAS,WAAW,GAAG;AAClD,qBAAW,iBAAiB,sBAAsB,SAAS,GAAG;AAC5D,2BAAe,IAAI,aAAa;UAClC;QACF;MACF;IACF;EACF;AAEA,SAAO;AACT;AA+BA,SAAS,kBAAe;AACtB,MAAI;AACF,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,OAAO,WAAW,OAAO;EAClC,SAAS,OAAP;AACA,WAAO;EACT;AACF;;;AC5MA,IAAAC,uBAAkB;AAClB,uBAAmB;;;AC+DnB,IAAM,0BAAyD;EAC7D,CAAC,UAAU,GAAG;EACd,CAAC,+BAA+B,GAAG;EACnC,CAAC,gCAAgC,GAAG;EACpC,CAAC,gCAAgC,GAAG;EACpC,CAAC,sCAAsC,GAAG;EAC1C,CAAC,gCAAgC,GAAG;EACpC,CAAC,sCAAsC,GAAG;EAC1C,CAAC,gCAAgC,GAAG;EACpC,CAAC,sCAAsC,GAAG;EAC1C,CAAC,2BAA2B,GAAG;EAC/B,CAAC,kCAAkC,GAAG;EACtC,CAAC,iCAAiC,GAAG;EACrC,CAAC,wCAAwC,GAAG;EAC5C,CAAC,uBAAuB,GAAG;EAC3B,CAAC,wBAAwB,GAAG;EAC5B,CAAC,2CAA2C,GAAG;EAC/C,CAAC,4CAA4C,GAAG;EAChD,CAAC,4BAA4B,GAAG;EAChC,CAAC,mCAAmC,GAAG;EACvC,CAAC,qBAAqB,GAAG;EACzB,CAAC,4BAA4B,GAAG;EAChC,CAAC,sBAAsB,GAAG;EAC1B,CAAC,6BAA6B,GAAG;EACjC,CAAC,+BAA+B,GAAG;EACnC,CAAC,uCAAuC,GAAG;EAC3C,CAAC,+BAA+B,GAAG;EACnC,CAAC,uCAAuC,GAAG;EAC3C,CAAC,+BAA+B,GAAG;EACnC,CAAC,uCAAuC,GAAG;EAC3C,CAAC,+BAA+B,GAAG;EACnC,CAAC,uCAAuC,GAAG;EAC3C,CAAC,+BAA+B,GAAG;EACnC,CAAC,uCAAuC,GAAG;EAC3C,CAAC,+BAA+B,GAAG;EACnC,CAAC,uCAAuC,GAAG;EAC3C,CAAC,+BAA+B,GAAG;EACnC,CAAC,uCAAuC,GAAG;EAC3C,CAAC,+BAA+B,GAAG;EACnC,CAAC,uCAAuC,GAAG;EAC3C,CAAC,gCAAgC,GAAG;EACpC,CAAC,wCAAwC,GAAG;EAC5C,CAAC,gCAAgC,GAAG;EACpC,CAAC,wCAAwC,GAAG;EAC5C,CAAC,gCAAgC,GAAG;EACpC,CAAC,wCAAwC,GAAG;EAC5C,CAAC,iCAAiC,GAAG;EACrC,CAAC,yCAAyC,GAAG;EAC7C,CAAC,iCAAiC,GAAG;EACrC,CAAC,yCAAyC,GAAG;EAC7C,CAAC,iCAAiC,GAAG;EACrC,CAAC,yCAAyC,GAAG;EAC7C,CAAC,kCAAkC,GAAG;EACtC,CAAC,mCAAmC,GAAG;EACvC,CAAC,kCAAkC,GAAG;EACtC,CAAC,mCAAmC,GAAG;EACvC,CAAC,4BAA4B,GAAG;EAChC,CAAC,2BAA2B,GAAG;EAC/B,CAAC,2CAA2C,GAAG;EAC/C,CAAC,+CAA+C,GAAG;;AAGrD,IAAM,0BAA0B,OAAO,YACrC,OAAO,QAAQ,uBAAuB,EAAE,IAAI,CAAC,CAAC,QAAQ,aAAa,MAAM;EACvE;EACA,OAAO,MAAM;CACd,CAAC;AAGE,SAAU,gCACd,QAAwB;AAExB,MAAI,WAAW,QAAW;AACxB,WAAO;EACT;AAEA,SAAO,wBAAwB,MAAM;AACvC;AAOM,SAAU,gCACd,eAA6B;AAE7B,MAAI,kBAAkB,QAAW;AAC/B,WAAO;EACT;AAEA,SAAO,wBAAwB,aAAa;AAC9C;;;ACjIM,SAAU,oBACd,MACA,SAAwC;AAExC,QAAM,SAAS,IAAI,MAAM,QAAQ,YAAY;AAC7C,QAAM,gBACJ,QAAQ,iBAAiB,gCAAgC,QAAQ,cAAc;AACjF,QAAM,SAAS,QAAQ,kBAAkB,gCAAgC,QAAQ,aAAa;AAE9F,MAAI,aAAa,QAAQ;AACzB,MAAI,cAAc,QAAQ;AAC1B,MAAI,SAAS;AAEb,WAAS,IAAI,GAAG,IAAI,QAAQ,cAAc,EAAE,GAAG;AAE7C,UAAM,YAAY,aAAa,SAAS,YAAY,aAAa,MAAM,CAAC;AAExE,UAAM,YAAY,aAAa,MAAM,GAAG,QAAQ,SAAS;AAEzD,UAAM,QAAsB;MAC1B,OAAO;MACP,YAAY;MACZ,MAAM;MACN,OAAO;MACP,QAAQ;MACR;;AAGF,QAAI,WAAW,QAAW;AACxB,YAAM,SAAS;IACjB;AACA,QAAI,eAAe;AACjB,YAAM,gBAAgB;IACxB;AACA,WAAO,CAAC,IAAI;AAEZ,iBAAa,KAAK,IAAI,GAAG,cAAc,CAAC;AACxC,kBAAc,KAAK,IAAI,GAAG,eAAe,CAAC;AAE1C,cAAU;EACZ;AACA,SAAO;AACT;AAEA,SAAS,aACP,MACA,OACA,QACA,WAAiB;AAEjB,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,WAAO,IAAI,WAAW,KAAK,QAAQ,KAAK,aAAa,QAAQ,SAAS;EACxE;AAEA,SAAO,KAAK,KAAK,EAAE;AACrB;AAEA,SAAS,aACP,SACA,YACA,aACA,MACA,OAAa;AAEb,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,WAAO,QAAQ,aAAa,YAAY,WAAW;EACrD;AACA,SAAO,QAAQ,aAAa,KAAK,KAAK,CAAC;AACzC;;;ACrCA,IAAM,6BAA8D;EAClE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,WAAY;EACZ,YAAY;EACZ,WAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,YAAY;;AAUR,SAAU,mBAAmB,UAAgB;AACjD,SAAO,2BAA2B,QAAQ;AAC5C;AAOM,SAAU,2BAA2B,UAAgB;AACzD,SAAO,gCAAgC,mBAAmB,QAAQ,CAAC;AACrE;;;AH5IA,IAAM,UAAU;;EAEd;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;;AAI9D,SAAU,MAAM,MAAiB;AAErC,QAAM,KAAK,IAAI,WAAW,IAAI;AAC9B,QAAM,SACJ,GAAG,aAAa,QAAQ,UACxB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,CAAC,MAAM,QAAQ,CAAC;EACnB,GAAG,EAAE,MAAM,QAAQ,EAAE;EACrB,GAAG,EAAE,MAAM,QAAQ,EAAE;AAEvB,SAAO,CAAC;AACV;AAEM,SAAU,SAAS,aAAwB;AAC/C,QAAM,aAAa,IAAI,WAAW,WAAW;AAC7C,QAAM,UAAM,uBAAK,UAAU;AAC3B,QAAM,eAAe,KAAK,IAAI,GAAG,IAAI,OAAO,MAAM;AAClD,QAAM,QAAQ,IAAI;AAClB,QAAM,SAAS,IAAI;AACnB,QAAM,gBAAgB,2BAA2B,IAAI,QAAQ;AAE7D,MAAI,kBAAkB,QAAW;AAI/B,6BAAI,KACF,2BAA2B,IAAI,oGAAoG,EACpI;EACH;AAEA,SAAO,oBAAoB,IAAI,QAAQ;IACrC;IACA;IACA;IACA,cAAc,CAAC,UAAuB,MAAM;IAC5C;GACD;AACH;;;AJFA,IAAI,uBAAsC,QAAQ,QAAO;AAElD,IAAM,iCAA0E;EACrF,MAAM;IACJ,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,MAAM;IACJ,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,KAAK;IACH,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,KAAK;IACH,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,KAAK;IACH,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,KAAK;IACH,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,sBAAsB;IACpB,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,UAAU;IACR,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,gBAAgB;IACd,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,iBAAiB;IACf,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,YAAY;IACV,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,WAAW;IACT,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,+BAA+B;IAC7B,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,QAAQ;IACN,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,QAAQ;IACN,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,QAAQ;IACN,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;EAEjB,UAAU;IACR,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,eAAe;;;AAIZ,IAAM,gBAAgB,OAAO,OAClC,OAAO,KAAK,8BAA8B,CAAkB;AAgB9D,eAAsB,yBAA4B,WAA+B;AAC/E,QAAM,eAAe;AACrB,MAAI;AAEJ,yBAAuB,IAAI,QAAQ,CAAC,YAAW;AAC7C,kBAAc;EAChB,CAAC;AAED,QAAM;AAEN,MAAI;AACF,WAAO,MAAM,UAAS;EACxB;AACE,gBAAW;EACb;AACF;AASA,eAAsB,WACpB,MACA,UAA8B,CAAA,GAAE;AAEhC,QAAM,yBAAqB,gDAA0B,OAAO;AAE5D,SAAO,MAAM,yBAAyB,YAAW;AArNnD;AAsNI,QAAI,GAAC,aAAQ,UAAR,mBAAe,oBAAmB,QAAQ,MAAM,oBAAoB,QAAQ;AAC/E,UAAI,MAAM,IAAI,GAAG;AACf,cAAM,mBAAmB,MAAM,uBAAuB,kBAAkB;AACxE,eAAO,cAAc,iBAAiB,UAAU,MAAM,OAAO;MAC/D;AACA,YAAM,EAAC,UAAS,IAAI,MAAM,0BAA0B,kBAAkB;AACtE,aAAO,eAAe,WAAW,MAAM,OAAO;IAChD;AACA,YAAQ,QAAQ,MAAM,QAAQ;MAC5B,KAAK;AACH,cAAM,mBAAmB,MAAM,uBAAuB,kBAAkB;AACxE,gBAAQ,QAAQ,MAAM,iBAAiB;UACrC,KAAK;AACH,mBAAO,cAAc,iBAAiB,UAAU,MAAM,OAAO;UAC/D,KAAK;UACL;AACE,mBAAO,eAAe,iBAAiB,WAAW,MAAM,OAAO;QACnE;MACF,KAAK;MACL;AACE,cAAM,EAAC,UAAS,IAAI,MAAM,0BAA0B,kBAAkB;AACtE,eAAO,eAAe,WAAW,MAAM,OAAO;IAClD;EACF,CAAC;AACH;AASA,SAAS,eACP,WACA,MACA,SAA2B;AAE3B,QAAM,YAAY,IAAI,UAAU,IAAI,WAAW,IAAI,CAAC;AAEpD,MAAI;AACF,QAAI,CAAC,UAAU,iBAAgB,GAAI;AACjC,YAAM,IAAI,MAAM,mCAAmC;IACrD;AAEA,UAAM,aAAa,UAAU,aAAY;AACzC,UAAM,SAA2B,CAAA;AAEjC,aAAS,aAAa,GAAG,aAAa,YAAY,cAAc;AAC9D,YAAM,cAAc,UAAU,aAAa,UAAU;AACrD,YAAM,SAAyB,CAAA;AAE/B,eAAS,aAAa,GAAG,aAAa,aAAa,cAAc;AAC/D,eAAO,KAAK,eAAe,WAAW,YAAY,YAAY,OAAO,CAAC;MACxE;AAEA,aAAO,KAAK,MAAM;IACpB;AAEA,WAAO;EACT;AACE,cAAU,MAAK;AACf,cAAU,OAAM;EAClB;AACF;AAUA,SAAS,eACP,WACA,YACA,YACA,SAA2B;AAE3B,QAAM,QAAQ,UAAU,cAAc,YAAY,UAAU;AAC5D,QAAM,SAAS,UAAU,eAAe,YAAY,UAAU;AAG9D,QAAM,WAAW,UAAU;;EAAwC;AAGnE,QAAM,EAAC,YAAY,QAAQ,aAAa,cAAa,IAAI,gBAAgB,SAAS,QAAQ;AAE1F,QAAM,cAAc,UAAU,8BAA8B,YAAY,YAAY,WAAW;AAC/F,QAAM,cAAc,IAAI,WAAW,WAAW;AAE9C,MAAI,CAAC,UAAU,eAAe,aAAa,YAAY,YAAY,aAAa,GAAG,CAAC,GAAG;AACrF,UAAM,IAAI,MAAM,mCAAmC;EACrD;AAEA,SAAO;;IAEL,OAAO;IACP;IACA;IACA,MAAM;IACN;IACA,GAAI,WAAW,SAAY,EAAC,OAAM,IAAI,CAAA;IACtC,GAAI,kBAAkB,SAAY,EAAC,cAAa,IAAI,CAAA;;;IAIpD;;AAEJ;AASA,SAAS,cAAc,UAAU,MAAmB,SAA2B;AAC7E,QAAM,WAAW,IAAI,SAAS,IAAI,WAAW,IAAI,CAAC;AAElD,MAAI;AACF,QAAI,CAAC,SAAS,iBAAgB,GAAI;AAChC,YAAM,IAAI,MAAM,kCAAkC;IACpD;AACA,UAAM,cAAc,SAAS,UAAS;AACtC,UAAM,SAAyB,CAAA;AAE/B,aAAS,aAAa,GAAG,aAAa,aAAa,cAAc;AAC/D,aAAO,KAAK,mBAAmB,UAAU,YAAY,OAAO,CAAC;IAC/D;AAEA,WAAO,CAAC,MAAM;EAChB;AACE,aAAS,MAAK;AACd,aAAS,OAAM;EACjB;AACF;AASA,SAAS,mBACP,UACA,YACA,SAA2B;AAE3B,QAAM,EAAC,WAAW,QAAQ,MAAK,IAAI,SAAS,kBAAkB,YAAY,GAAG,CAAC;AAG9E,QAAM,EAAC,YAAY,QAAQ,aAAa,cAAa,IAAI,gBAAgB,SAAS,SAAS;AAE3F,QAAM,cAAc,SAAS,8BAC3B,YACA,GACA,GACA,WAAW;AAEb,QAAM,cAAc,IAAI,WAAW,WAAW;AAE9C,MACE,CAAC,SAAS;IACR;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAAiB,GAEnB;AACA,UAAM,IAAI,MAAM,gCAAgC;EAClD;AAEA,SAAO;;IAEL,OAAO;IACP;IACA;IACA,MAAM;IACN;IACA,GAAI,WAAW,SAAY,EAAC,OAAM,IAAI,CAAA;IACtC,GAAI,kBAAkB,SAAY,EAAC,cAAa,IAAI,CAAA;;IAGpD,WAAW;IACX,UAAU;;AAEd;AAQA,SAAS,gBAAgB,SAA6B,UAAiB;AAhavE;AAiaE,MAAI,WAAS,aAAQ,UAAR,mBAAe,WAAU;AACtC,MAAI,WAAW,QAAQ;AACrB,eAAS,aAAQ,UAAR,mBAAe,2BACpB,2BAA2B,QAAQ,MAAM,uBAAuB,IAChE,2BAA0B;EAChC;AACA,MAAI,OAAO,WAAW,UAAU;AAC9B,aAAS,WAAW,OAAO,QAAQ,OAAO;EAC5C;AACA,QAAM,mBAAmB,OAAO,YAAW;AAC3C,QAAM,qBAAqB,+BAA+B,gBAAgB;AAC1E,MAAI,CAAC,oBAAoB;AACvB,UAAM,IAAI,MAAM,wBAAwB,QAAQ;EAClD;AACA,SAAO;AACT;AAkBM,SAAU,2BACd,0BAAmD,8BAA6B,GAAE;AAElF,QAAMC,kBAAiB,IAAI,IAAI,uBAAuB;AAEtD,MAAI,0BAA0BA,iBAAgB,CAAC,kBAAkB,qBAAqB,CAAC,GAAG;AACxF,WAAO;EACT,WAAW,0BAA0BA,iBAAgB,CAAC,kBAAkB,qBAAqB,CAAC,GAAG;AAC/F,WAAO;MACL,OAAO;MACP,SAAS;;EAEb,WACE,0BAA0BA,iBAAgB;IACxC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD,GACD;AACA,WAAO;MACL,OAAO;MACP,SAAS;;EAEb,WACE,0BAA0BA,iBAAgB;IACxC;IACA;IACA;IACA;GACD,GACD;AACA,WAAO;MACL,OAAO;MACP,SAAS;;EAEb,WACE,0BAA0BA,iBAAgB;IACxC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD,GACD;AACA,WAAO;EACT,WAAWA,gBAAe,IAAI,sBAAsB,GAAG;AACrD,WAAO;EACT,WACE,0BAA0BA,iBAAgB;IACxC;IACA;IACA;GACD,GACD;AACA,WAAO;MACL,OAAO;MACP,SAAS;;EAEb;AACA,SAAO;AACT;AA6EA,SAAS,0BACP,yBACA,yBAAwC;AAExC,SAAO,wBAAwB,KAAK,CAAC,kBACnC,wBAAwB,IAAI,aAAa,CAAC;AAE9C;;;AQpjBO,IAAM,oBAAoB;EAC/B,UAAU;EACV,WAAW;EAEX,MAAM;EACN,IAAI;EACJ,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,YAAY,CAAC,SAAS,MAAM;EAC5B,WAAW,CAAC,4BAA4B,YAAY;EACpD,OAAO,CAAC,IAAI;EACZ,QAAQ;EACR,SAAS;IACP,OAAO;MACL,QAAQ;MACR,iBAAiB;MACjB,QAAQ;;;;AAQP,IAAM,cAAc;EACzB,GAAG;EACH,OAAO;;;;AC9DT,IAAAC,uBAAqB;AAGrB,IAAM,gBAAgB;EACpB,cAAc;EACd,eAAe;EACf,oBAAoB;EACpB,mBAAmB;EACnB,oBAAoB;EACpB,qBAAqB;EACrB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,wBAAwB;EACxB,kBAAkB;EAClB,aAAa;;AAGf,IAAM,sBAAqD;EACzD,MAAM;EACN,MAAM;EACN,MAAM;EACN,QAAQ;EACR,MAAM;EACN,MAAM;;AAGR,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AAEzB,IAAM,qBAAgF;EACpF,MAAM;EACN,MAAM;EACN,MAAM;EACN,QAAQ;EACR,MAAM;EACN,MAAM;;AAQF,SAAU,MAAM,MAAiB;AACrC,QAAM,SAAS,IAAI,YAAY,MAAM,GAAG,cAAc,aAAa;AACnE,QAAM,QAAQ,OAAO,cAAc,kBAAkB;AACrD,SAAO,UAAU,cAAc;AACjC;AAOM,SAAU,SAAS,MAAiB;AACxC,QAAM,SAAS,IAAI,WAAW,MAAM,GAAG,cAAc,aAAa;AAClE,QAAM,oBAAoB,OAAO,cAAc,sBAAsB;AACrE,mCACE,QAAQ,OAAO,cAAc,qBAAqB,IAAI,cAAc,WAAW,GAC/E,qDAAqD;AAEvD,QAAM,SAAS,cAAc,iBAAiB;AAC9C,QAAM,gBAAgB,oBAAoB,MAAM;AAChD,QAAM,eAAe,mBAAmB,MAAM;AAC9C,mCAAO,iBAAiB,cAAc,6BAA6B,mBAAmB;AAEtF,MAAI,eAAe;AACnB,MAAI,OAAO,cAAc,kBAAkB,IAAI,cAAc,kBAAkB;AAC7E,mBAAe,KAAK,IAAI,GAAG,OAAO,cAAc,iBAAiB,CAAC;EACpE;AACA,QAAM,QAAQ,OAAO,cAAc,kBAAkB;AACrD,QAAM,SAAS,OAAO,cAAc,mBAAmB;AACvD,QAAM,aAAa,OAAO,cAAc,iBAAiB,IAAI;AAC7D,QAAM,QAAQ,IAAI,WAAW,MAAM,UAAU;AAE7C,SAAO,oBAAoB,OAAO;IAChC;IACA;IACA;IACA;IACA;GACD;AACH;AAQM,SAAU,iBAAiB,OAAe,QAAc;AAC5D,UAAS,QAAQ,KAAM,MAAO,SAAS,KAAM,KAAK;AACpD;AAQM,SAAU,iBAAiB,OAAe,QAAc;AAC5D,UAAS,QAAQ,KAAM,MAAO,SAAS,KAAM,KAAK;AACpD;AAOA,SAAS,cAAc,OAAa;AAClC,SAAO,OAAO,aACZ,QAAQ,KACP,SAAS,IAAK,KACd,SAAS,KAAM,KACf,SAAS,KAAM,GAAI;AAExB;;;AChHA,IAAM,gBAAwC;EAC5C,cAAc;EACd,oBAAoB;EACpB,eAAe;EACf,aAAa;EACb,oBAAoB;EACpB,oBAAoB;EACpB,oBAAoB;EACpB,cAAc;EACd,aAAa;EACb,mBAAmB;EACnB,qBAAqB;;AAGvB,IAAM,sBAAuD;EAC3D,GAAG,CAAC,uBAAuB;EAC3B,GAAG,CAAC,wBAAwB;EAC5B,GAAG,CAAC,uBAAuB;EAC3B,GAAG,CAAC,wBAAwB;EAC5B,GAAG,CAAC,sBAAsB;EAC1B,GAAG,CAAC,qBAAqB;EACzB,GAAG,CAAC,gBAAgB;EACpB,IAAI,CAAC,gBAAgB;EACrB,IAAI,CAAC,gBAAgB;EACrB,IAAI,CAAC,iBAAiB;EACtB,IAAI,CAAC,kBAAkB;EACvB,IAAI,CAAC,cAAc;EACnB,IAAI,CAAC,eAAe;EACpB,IAAI,CAAC,kBAAkB,qBAAqB;EAC5C,IAAI,CAAC,kBAAkB,qBAAqB;EAC5C,IAAI,CAAC,kBAAkB,qBAAqB;EAC5C,IAAI,CAAC,kBAAkB,qBAAqB;EAC5C,IAAI,CAAC,kBAAkB,qBAAqB;EAC5C,IAAI,CAAC,kBAAkB,qBAAqB;EAC5C,IAAI,CAAC,kBAAkB,qBAAqB;EAC5C,IAAI,CAAC,kBAAkB,qBAAqB;EAC5C,IAAI,CAAC,mBAAmB,sBAAsB;EAC9C,IAAI,CAAC,mBAAmB,sBAAsB;EAC9C,IAAI,CAAC,mBAAmB,sBAAsB;EAC9C,IAAI,CAAC,oBAAoB,uBAAuB;EAChD,IAAI,CAAC,oBAAoB,uBAAuB;EAChD,IAAI,CAAC,oBAAoB,uBAAuB;;AAGlD,IAAM,qBAAgF;EACpF,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;;AAQA,SAAU,MAAM,MAAiB;AACrC,QAAM,SAAS,IAAI,YAAY,MAAM,GAAG,cAAc,aAAa;AACnE,QAAM,UAAU,OAAO,cAAc,kBAAkB;AAEvD,SAAO,YAAY,cAAc,gBAAgB,YAAY,cAAc;AAC7E;AAQM,SAAU,SAAS,MAAiB;AACxC,QAAM,SAAS,IAAI,YAAY,MAAM,GAAG,cAAc,aAAa;AAEnE,QAAM,YAAY,OAAO,cAAc,kBAAkB;AACzD,QAAM,cAAc,OAAO,cAAc,kBAAkB;AAC3D,QAAMC,kBAAiB,oBAAoB,SAAS,KAAK,CAAA;AACzD,QAAM,gBACJA,gBAAe,SAAS,KAAK,cAAcA,gBAAe,CAAC,IAAIA,gBAAe,CAAC;AAEjF,QAAM,eAAe,mBAAmB,SAAS;AAEjD,QAAM,eAAe,OAAO,cAAc,iBAAiB;AAE3D,QAAM,QAAQ,OAAO,cAAc,WAAW;AAC9C,QAAM,SAAS,OAAO,cAAc,YAAY;AAEhD,QAAM,aAAa,cAAc,cAAc,OAAO,cAAc,mBAAmB;AAEvF,QAAM,QAAQ,IAAI,WAAW,MAAM,UAAU;AAE7C,SAAO,oBAAoB,OAAO;IAChC;IACA;IACA;IACA;IACA;GACD;AACH;AAGA,SAAS,cAAc,OAAe,QAAc;AAClD,UAAQ,KAAK,IAAI,OAAO,EAAE;AAC1B,WAAS,KAAK,IAAI,QAAQ,CAAC;AAE3B,SAAQ,QAAQ,SAAU;AAC5B;AAGA,SAAS,cAAc,OAAe,QAAc;AAClD,UAAQ,KAAK,IAAI,OAAO,CAAC;AACzB,WAAS,KAAK,IAAI,QAAQ,CAAC;AAE3B,SAAQ,QAAQ,SAAU;AAC5B;AAYA,SAAS,gBAAgB,OAAe,QAAc;AACpD,SAAO,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACtE;AAaA,SAAS,kBAAkB,OAAe,QAAc;AACtD,SAAO,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACtE;AAGA,SAAS,WAAW,OAAe,QAAc;AAC/C,SAAO,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACtE;AAGA,SAAS,WAAW,OAAe,QAAc;AAC/C,SAAO,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACtE;AAGA,SAAS,WAAW,OAAe,QAAc;AAC/C,SAAO,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACtE;AAGA,SAAS,WAAW,OAAe,QAAc;AAC/C,SAAO,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACtE;AAGA,SAAS,WAAW,OAAe,QAAc;AAC/C,SAAO,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACtE;AAGA,SAAS,WAAW,OAAe,QAAc;AAC/C,SAAO,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACtE;AAGA,SAAS,WAAW,OAAe,QAAc;AAC/C,SAAO,KAAK,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACtE;AAGA,SAAS,YAAY,OAAe,QAAc;AAChD,SAAO,KAAK,OAAO,QAAQ,KAAK,EAAE,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACvE;AAGA,SAAS,YAAY,OAAe,QAAc;AAChD,SAAO,KAAK,OAAO,QAAQ,KAAK,EAAE,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACvE;AAGA,SAAS,YAAY,OAAe,QAAc;AAChD,SAAO,KAAK,OAAO,QAAQ,KAAK,EAAE,IAAI,KAAK,OAAO,SAAS,KAAK,CAAC,IAAI;AACvE;AAGA,SAAS,aAAa,OAAe,QAAc;AACjD,SAAO,KAAK,OAAO,QAAQ,KAAK,EAAE,IAAI,KAAK,OAAO,SAAS,KAAK,EAAE,IAAI;AACxE;AAGA,SAAS,aAAa,OAAe,QAAc;AACjD,SAAO,KAAK,OAAO,QAAQ,MAAM,EAAE,IAAI,KAAK,OAAO,SAAS,KAAK,EAAE,IAAI;AACzE;AAGA,SAAS,aAAa,OAAe,QAAc;AACjD,SAAO,KAAK,OAAO,QAAQ,MAAM,EAAE,IAAI,KAAK,OAAO,SAAS,MAAM,EAAE,IAAI;AAC1E;;;AClOM,SAAU,uBAAuB,MAAiB;AACtD,MAAI,MAAM,IAAI,GAAG;AAGf,WAAO,SAAS,IAAI;EACtB;AACA,MAAI,MAAM,IAAI,GAAG;AACf,WAAO,SAAS,IAAI;EACtB;AACA,MAAI,MAAM,IAAI,GAAG;AACf,WAAO,SAAS,IAAI;EACtB;AACA,QAAM,IAAI,MAAM,yCAAyC;AAC3D;;;ACLO,IAAM,gCAAgC;EAC3C,UAAU;EACV,WAAW;EAEX,MAAM;EACN,IAAI;EACJ,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,YAAY;IACV;IACA;IACA;;IACA;;;EAEF,WAAW;IACT;IACA;IACA;IACA;IACA;;EAEF,QAAQ;EACR,SAAS;IACP,sBAAsB;MACpB,UAAU;;;;AAQT,IAAM,0BAA0B;EACrC,GAAG;EACH,OAAO,OAAO,aAA0B,YAA4C;AAzDtF;AA0DI,cAAU,EAAC,GAAG,QAAO;AACrB,SAAI,wCAAU,0BAAV,mBAAiC,UAAU;AAC7C,cAAQ,QAAQ;QACd,QAAQ;UACN,OAAO;UACP,SAAS;;QAEX,GAAG,QAAQ;QACX,iBAAiB;QACjB,QAAQ;;AAEV,YAAM,SAAS,MAAM,WAAW,aAAa,OAAO;AACpD,aAAO,OAAO,CAAC;IACjB;AACA,WAAO,uBAAuB,WAAW;EAC3C;;;;ACpDK,IAAM,eAAe;EAC1B,UAAU;EACV,WAAW;EAEX,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,YAAY,CAAC,KAAK;EAClB,WAAW,CAAC,aAAa,eAAe,0BAA0B;EAClE,QAAQ;EACR,SAAS;IACP,QAAQ,CAAA;;;;;AC3BZ,IAAM,oBAAoB,CAAC,cAAc,QAAQ;AACjD,IAAM,aAAa;AAmCb,SAAU,MAAM,aAAwB;AAC5C,QAAM,QAAqB;IACzB,MAAM,IAAI,WAAW,WAAW;IAChC,QAAQ;;AAGV,QAAM,YAAY,SAAS,KAAK;AAChC,SAAO,YAAY,kBAAkB,SAAS,SAAS,IAAI;AAC7D;AAEM,SAAU,SAAS,aAAwB;AAC/C,QAAM,QAAqB;IACzB,MAAM,IAAI,WAAW,WAAW;IAChC,QAAQ;;AAEV,QAAM,SAAS,WAAW,KAAK;AAC/B,QAAM,EAAC,OAAO,OAAM,IAAI;AACxB,QAAM,WAAW,WAAW,OAAO,MAAM;AACzC,QAAM,OAAO,mBAAmB,QAAQ;AACxC,QAAM,QAAsB;IAC1B,OAAO;IACP,YAAY;IACZ;IACA;IACA;IACA,WAAW,KAAK;IAChB,QAAQ;IACR,eAAe;;AAGjB,SAAO;IACL,OAAO;IACP,MAAM;IACN,QAAQ;IACR,GAAI,OAAO,WAAW,EAAC,UAAU,OAAO,SAAQ,IAAI,CAAA;IACpD,MAAM,CAAC,KAAK;;AAEhB;AAEA,SAAS,WAAW,OAAkB;AACpC,QAAM,cAAc,SAAS,KAAK;AAClC,MAAI,CAAC,eAAe,CAAC,kBAAkB,SAAS,WAAW,GAAG;AAC5D,UAAM,IAAI,MAAM,sCAAsC;EACxD;AAEA,MAAI,YAAY;AAChB,QAAM,WAAgC,CAAA;AAEtC,SAAO,MAAM,SAAS,MAAM,KAAK,QAAQ;AACvC,UAAM,OAAO,SAAS,KAAK;AAE3B,QAAI,SAAS,MAAM;AACjB;IACF;AAEA,QAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,GAAG;AACjC;IACF;AAEA,QAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,kBAAY,KAAK,MAAM,UAAU,MAAM,MAAM;AAC7C,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,iDAAiD;MACnE;AACA;IACF;AAEA,sBAAkB,UAAU,IAAI;AAEhC,UAAM,aAAa,gBAAgB,IAAI;AACvC,QAAI,YAAY;AACd,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,6CAA6C;MAC/D;AACA,aAAO;QACL,GAAG;QACH,GAAI,YAAY,QAAQ,IAAI,EAAC,SAAQ,IAAI,CAAA;;IAE7C;EACF;AAEA,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,6CAA6C;EAC/D;AAEA,QAAM,IAAI,MAAM,iDAAiD;AACnE;AAEA,SAAS,gBAAgB,MAAY;AACnC,QAAM,QAAQ,KAAK,MAAM,+CAA+C;AACxE,MAAI,CAAC,OAAO;AACV,WAAO;EACT;AAEA,QAAM,YAAY,MAAM,CAAC,MAAM,MAAM,IAAI;AACzC,QAAM,YAAY,MAAM,CAAC;AACzB,QAAM,cAAc,OAAO,MAAM,CAAC,CAAC;AACnC,QAAM,YAAY,MAAM,CAAC,MAAM,MAAM,IAAI;AACzC,QAAM,YAAY,MAAM,CAAC;AACzB,QAAM,cAAc,OAAO,MAAM,CAAC,CAAC;AAEnC,MAAI,cAAc,WAAW;AAC3B,UAAM,IAAI,MAAM,6CAA6C;EAC/D;AAEA,QAAM,QAAQ,cAAc,MAAM,cAAc;AAChD,QAAM,SAAS,cAAc,MAAM,cAAc;AACjD,MAAI,CAAC,OAAO,SAAS,KAAK,KAAK,CAAC,OAAO,SAAS,MAAM,KAAK,SAAS,KAAK,UAAU,GAAG;AACpF,UAAM,IAAI,MAAM,6CAA6C;EAC/D;AAEA,SAAO,EAAC,OAAO,QAAQ,WAAW,WAAW,WAAW,UAAS;AACnE;AAEA,SAAS,WAAW,OAAoB,QAAiB;AACvD,QAAM,EAAC,OAAO,OAAM,IAAI;AACxB,QAAM,aAAa,QAAQ;AAC3B,QAAM,iBAAiB,aAAa;AACpC,QAAM,iBAAiB,OAAO,cAAc,MAAM,QAAQ;AAC1D,QAAM,gBAAgB,OAAO,cAAc,MAAM,SAAS;AAE1D,MAAI,iBAAiB,KAAK,iBAAiB,OAAQ;AACjD,WAAO,cAAc,eAAe,OAAO,cAAc,GAAG,MAAM;EACpE;AAEA,MAAI,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ;AACxC,UAAM,IAAI,MAAM,2CAA2C;EAC7D;AAEA,QAAM,OAAO,MAAM;AACnB,QAAM,qBACJ,KAAK,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,SAAS,CAAC,MAAM,KAAK,EAAE,KAAK,MAAM,SAAS,CAAC,IAAI;AAEzF,MAAI,CAAC,oBAAoB;AACvB,WAAO,cAAc,eAAe,OAAO,cAAc,GAAG,MAAM;EACpE;AAEA,QAAM,gBAAiB,KAAK,MAAM,SAAS,CAAC,KAAK,IAAK,KAAK,MAAM,SAAS,CAAC;AAC3E,MAAI,kBAAkB,gBAAgB;AACpC,WAAO,cAAc,eAAe,OAAO,cAAc,GAAG,MAAM;EACpE;AAEA,QAAM,SAAS,IAAI,WAAW,cAAc;AAC5C,QAAM,iBAAiB,IAAI,WAAW,iBAAiB,CAAC;AAExD,WAAS,gBAAgB,GAAG,gBAAgB,eAAe,iBAAiB;AAC1E,QAAI,MAAM,SAAS,IAAI,KAAK,QAAQ;AAClC,YAAM,IAAI,MAAM,2CAA2C;IAC7D;AAEA,UAAM,MAAM,KAAK,MAAM,QAAQ;AAC/B,UAAM,QAAQ,KAAK,MAAM,QAAQ;AACjC,UAAM,OAAO,KAAK,MAAM,QAAQ;AAChC,UAAM,WAAW,KAAK,MAAM,QAAQ;AAEpC,QAAI,QAAQ,KAAK,UAAU,MAAO,QAAQ,IAAK,cAAc,gBAAgB;AAC3E,YAAM,IAAI,MAAM,6CAA6C;IAC/D;AAEA,aAAS,eAAe,GAAG,eAAe,GAAG,gBAAgB;AAC3D,YAAM,gBAAgB,eAAe;AACrC,YAAM,aAAa,gBAAgB;AACnC,UAAI,cAAc;AAElB,aAAO,cAAc,YAAY;AAC/B,YAAI,MAAM,UAAU,KAAK,QAAQ;AAC/B,gBAAM,IAAI,MAAM,2CAA2C;QAC7D;AAEA,YAAI,QAAQ,KAAK,MAAM,QAAQ;AAE/B,YAAI,QAAQ,KAAK;AACf,mBAAS;AACT,cAAI,UAAU,KAAK,cAAc,QAAQ,cAAc,MAAM,UAAU,KAAK,QAAQ;AAClF,kBAAM,IAAI,MAAM,sCAAsC;UACxD;AAEA,gBAAM,QAAQ,KAAK,MAAM,QAAQ;AACjC,yBAAe,KAAK,OAAO,aAAa,cAAc,KAAK;AAC3D,yBAAe;AACf;QACF;AAEA,YAAI,UAAU,KAAK,cAAc,QAAQ,cAAc,MAAM,SAAS,QAAQ,KAAK,QAAQ;AACzF,gBAAM,IAAI,MAAM,sCAAsC;QACxD;AAEA,uBAAe,IAAI,KAAK,SAAS,MAAM,QAAQ,MAAM,SAAS,KAAK,GAAG,WAAW;AACjF,uBAAe;AACf,cAAM,UAAU;MAClB;IACF;AAEA,aAAS,aAAa,GAAG,aAAa,gBAAgB,cAAc;AAClE,YAAM,eAAe,gBAAgB,QAAQ,eAAe,UAAU;AACtE,aAAO,YAAY,IAAI,eAAe,UAAU;AAChD,aAAO,eAAe,CAAC,IAAI,eAAe,aAAa,cAAc;AACrE,aAAO,eAAe,CAAC,IAAI,eAAe,aAAa,iBAAiB,CAAC;AACzE,aAAO,eAAe,CAAC,IAAI,eAAe,aAAa,iBAAiB,CAAC;IAC3E;EACF;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,MAAkB,QAAiB;AACxD,QAAM,SAAS,IAAI,WAAW,KAAK,MAAM;AACzC,QAAM,iBAAiB,OAAO,cAAc,MAAM,OAAO,QAAQ,OAAO;AACxE,QAAM,gBAAgB,OAAO,cAAc,MAAM,OAAO,SAAS,OAAO;AAExE,WAAS,gBAAgB,GAAG,gBAAgB,eAAe,iBAAiB;AAC1E,aAAS,aAAa,GAAG,aAAa,gBAAgB,cAAc;AAClE,YAAM,gBAAgB,gBAAgB,iBAAiB,cAAc;AACrE,YAAM,eAAe,gBAAgB,QAAQ,eAAe,UAAU;AACtE,aAAO,YAAY,IAAI,KAAK,YAAY;AACxC,aAAO,eAAe,CAAC,IAAI,KAAK,eAAe,CAAC;AAChD,aAAO,eAAe,CAAC,IAAI,KAAK,eAAe,CAAC;AAChD,aAAO,eAAe,CAAC,IAAI,KAAK,eAAe,CAAC;IAClD;EACF;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,QAAmB,eAAuB,YAAkB;AACnF,QAAM,kBAAkB,cACtB,OAAO,cAAc,MAAM,OAAO,QAAQ,OAAO,QACjD,OAAO,WACP,aAAa;AAEf,QAAM,kBAAkB,cACtB,OAAO,cAAc,MAAM,OAAO,QAAQ,OAAO,QACjD,OAAO,WACP,UAAU;AAEZ,QAAM,IAAI,OAAO,cAAc,MAAM,kBAAkB;AACvD,QAAM,IAAI,OAAO,cAAc,MAAM,kBAAkB;AAEvD,WAAS,OAAO,SAAS,IAAI,KAAK,OAAO,QAAQ,KAAK;AACxD;AAEA,SAAS,cAAc,QAAgB,MAAc,OAAa;AAChE,SAAO,SAAS,IAAI,QAAQ,SAAS,IAAI;AAC3C;AAEA,SAAS,eAAe,OAAoB,YAAkB;AAC5D,MAAI,MAAM,SAAS,aAAa,MAAM,KAAK,QAAQ;AACjD,UAAM,IAAI,MAAM,2CAA2C;EAC7D;AAEA,QAAM,SAAS,MAAM,KAAK,MAAM,MAAM,QAAQ,MAAM,SAAS,UAAU;AACvE,QAAM,UAAU;AAChB,SAAO;AACT;AAEA,SAAS,mBAAmB,MAAgB;AAC1C,QAAM,YAAY,IAAI,aAAa,KAAK,MAAM;AAE9C,WAAS,eAAe,GAAG,eAAe,KAAK,QAAQ,gBAAgB,GAAG;AACxE,UAAM,WAAW,KAAK,eAAe,CAAC;AACtC,UAAM,oBAAoB;AAE1B,QAAI,WAAW,GAAG;AAChB,YAAM,QAAQ,KAAK,IAAI,GAAG,WAAW,GAAG,IAAI;AAC5C,gBAAU,iBAAiB,IAAI,KAAK,YAAY,IAAI;AACpD,gBAAU,oBAAoB,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI;AAC5D,gBAAU,oBAAoB,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI;IAC9D;AAEA,cAAU,oBAAoB,CAAC,IAAI;EACrC;AAEA,SAAO;AACT;AAEA,SAAS,SAAS,OAAkB;AAClC,MAAI,MAAM,UAAU,MAAM,KAAK,QAAQ;AACrC,WAAO;EACT;AAEA,QAAM,YAAY,MAAM;AAExB,SAAO,MAAM,SAAS,MAAM,KAAK,QAAQ;AACvC,UAAM,OAAO,MAAM,KAAK,MAAM,QAAQ;AACtC,QAAI,SAAS,IAAM;AACjB,YAAMC,QAAO,YAAY,MAAM,KAAK,SAAS,WAAW,MAAM,SAAS,CAAC,CAAC;AACzE,aAAOA,MAAK,SAAS,IAAI,IAAIA,MAAK,MAAM,GAAG,EAAE,IAAIA;IACnD;EACF;AAEA,QAAM,OAAO,YAAY,MAAM,KAAK,SAAS,WAAW,MAAM,MAAM,CAAC;AACrE,SAAO,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI;AACnD;AAEA,SAAS,YAAY,MAAgB;AACnC,MAAI,OAAO;AACX,aAAW,QAAQ,MAAM;AACvB,YAAQ,OAAO,aAAa,IAAI;EAClC;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,UAA+B,MAAY;AACpE,MAAI,KAAK,WAAW,YAAY,GAAG;AACjC,UAAM,SAAS,gBAAgB,KAAK,MAAM,aAAa,MAAM,GAAG,CAAC;AACjE,QAAI,QAAQ;AACV,eAAS,kBAAkB;IAC7B;AACA;EACF;AAEA,MAAI,KAAK,WAAW,WAAW,GAAG;AAChC,UAAM,QAAQ,YAAY,KAAK,MAAM,YAAY,MAAM,CAAC;AACxD,QAAI,UAAU,MAAM;AAClB,eAAS,WAAW;IACtB;AACA;EACF;AAEA,MAAI,KAAK,WAAW,QAAQ,GAAG;AAC7B,UAAM,QAAQ,YAAY,KAAK,MAAM,SAAS,MAAM,CAAC;AACrD,QAAI,UAAU,MAAM;AAClB,eAAS,QAAQ;IACnB;AACA;EACF;AAEA,MAAI,KAAK,WAAW,YAAY,GAAG;AACjC,UAAM,QAAQ,YAAY,KAAK,MAAM,aAAa,MAAM,CAAC;AACzD,QAAI,UAAU,MAAM;AAClB,eAAS,mBAAmB;IAC9B;AACA;EACF;AAEA,MAAI,KAAK,WAAW,YAAY,GAAG;AACjC,UAAM,SAAS,gBAAgB,KAAK,MAAM,aAAa,MAAM,GAAG,CAAC;AACjE,QAAI,QAAQ;AACV,eAAS,YAAY;IAUvB;AACA;EACF;AAEA,MAAI,KAAK,WAAW,WAAW,GAAG;AAChC,aAAS,WAAW,KAAK,MAAM,YAAY,MAAM,EAAE,KAAI;AACvD;EACF;AAEA,MAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,aAAS,OAAO,KAAK,MAAM,QAAQ,MAAM,EAAE,KAAI;EACjD;AACF;AAEA,SAAS,YAAY,MAAY;AAC/B,QAAM,QAAQ,OAAO,KAAK,KAAI,CAAE;AAChC,SAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AAC1C;AAEA,SAAS,gBAAgB,MAAc,OAAa;AAClD,QAAM,SAAS,KACZ,KAAI,EACJ,MAAM,KAAK,EACX,IAAI,CAAC,UAAU,OAAO,KAAK,CAAC;AAE/B,MAAI,OAAO,WAAW,SAAS,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,SAAS,KAAK,CAAC,GAAG;AAC9E,WAAO;EACT;AAEA,SAAO;AACT;AAEA,SAAS,YAAY,UAA6B;AAChD,SAAO,OAAO,KAAK,QAAQ,EAAE,SAAS;AACxC;;;AC3ZO,IAAM,oBAAoB;EAC/B,UAAU;EACV,WAAW;EAEX,MAAM;EACN,IAAI;EACJ,QAAQ;EACR,SAAS;EACT,YAAY,CAAC,KAAK;EAClB,WAAW,CAAC,sBAAsB,eAAe,0BAA0B;EAC3E,QAAQ;EACR,OAAO,CAAC,KAAK;EACb,SAAS;IACP,KAAK,CAAA;;EAEP,WAAW;EACX,OAAO,OAAO,gBAA6B,SAAS,WAAW;;;;ACXjE,IAAM,IAAI,IAAI,YAAY,CAAC,SAAU,CAAC;AACtC,IAAM,IAAI,IAAI,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU;AAC7D,IAAM,iBAAiB,EAAE,EAAE,CAAC,MAAM;AAElC,IAAM,mBAAmB;AAwBzB,IAAM,SAAgD;EACpD,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;;AAGA,SAAU,SAAS,aAA0B,SAAY;AA1D/D;AA2DE,QAAM,OAAO,IAAI,SAAS,WAAW;AACrC,QAAM,EAAC,QAAQ,gBAAe,IAAI,YAAY,IAAI;AAElD,QAAM,YAAY,OAAO;AACzB,QAAM,YAAY,OAAO,UAAU,MAAM,GAAG,CAAC,CAAC;AAC9C,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,sBAAsB,WAAW;EACnD;AAEA,QAAM,kBAAiB,YAAO,UAAP,mBAAc,OAAO,CAACC,IAAWC,OAAsBD,KAAIC;AAClF,QAAM,kBAAkB,iBAAiB,UAAU;AAEnD,MAAI,YAAY,aAAa,kBAAkB,iBAAiB;AAC9D,UAAM,IAAI,MAAM,iBAAiB;EACnC;AACA,QAAM,OAAO,IAAI,UAAU,YAAY,MAAM,iBAAiB,kBAAkB,eAAe,CAAC;AAGhG,MAAK,UAAU,CAAC,MAAM,OAAO,oBAAsB,UAAU,CAAC,MAAM,OAAO,CAAC,kBAAmB;AAC7F,UAAM,IAAI,MAAM,sBAAsB;EACxC;AAEA,SAAO;IACL;IACA;;AAEJ;AAQA,SAAS,YAAY,MAAc;AACjC,QAAM,eAAe,KAAK,SAAS,CAAC;AAGpC,MAAI,SAAS;AACb,MAAI;AACJ,MAAI,gBAAgB,GAAG;AACrB,mBAAe,KAAK,UAAU,QAAQ,IAAI;AAC1C,cAAU;EACZ,OAAO;AACL,mBAAe,KAAK,UAAU,QAAQ,IAAI;AAC1C,cAAU;EACZ;AAEA,QAAM,WAAW,gBAAgB,IAAI,WAAW;AAChD,QAAM,UAAU,IAAI,YAAY,QAAQ;AACxC,QAAM,cAAc,IAAI,WAAW,KAAK,QAAQ,QAAQ,YAAY;AACpE,QAAM,aAAa,QAAQ,OAAO,WAAW;AAC7C,YAAU;AAEV,QAAM,SAAS,KAAK,MAClB,WACG,QAAQ,MAAM,GAAG,EACjB,QAAQ,SAAS,OAAO,EACxB,QAAQ,KAAK,GAAG,EAChB,QAAQ,WAAW,GAAG,CAAC;AAG5B,SAAO,EAAC,QAAQ,iBAAiB,OAAM;AACzC;;;ACjHA,IAAM,mBAAmB,IAAI,WAAW,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAc1D,IAAM,kBAAkB;EAC7B,UAAU;EACV,WAAW;EAEX,MAAM;EACN,IAAI;EACJ,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,YAAY,CAAC,KAAK;EAClB,WAAW,CAAA;EACX,OAAO,CAAC,iBAAiB,MAAM;EAC/B,SAAS;IACP,KAAK,CAAA;;;AAOF,IAAM,YAAY;EACvB,GAAG;EACH,WAAW;EACX,OAAO,OAAO,aAA0B,YAA4B,SAAS,aAAa,OAAO;;;;ACzCnG,IAAAC,uBAAkD;AAElD,oBAAiE;;;ACejE,IAAM,WAAW,CAAC,UAAwB,SAAS,OAAO,UAAU;AAKpE,eAAsB,aAAa,MAAe,MAAY,UAAmB,CAAA,GAAE;AACjF,SAAO,MAAM,WAAW,MAAM,MAAM,OAAO;AAC7C;AAEA,eAAsB,WAAW,QAAiB,MAAY,SAAgB;AAC5E,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO,MAAM,SAAS,QAAQ,MAAM,OAAO;EAC7C;AAEA,MAAI,SAAS,MAAM,GAAG;AACpB,WAAO,MAAM,UAAU,QAAkB,MAAM,OAAO;EACxD;AAGA,QAAM,MAAM;AACZ,SAAO,MAAM,KAAK,KAAK,OAAO;AAChC;AAIA,eAAe,UACb,QACA,MACA,SAAgB;AAEhB,QAAM,WAA2B,CAAA;AACjC,QAAM,SAA8B,CAAA;AAEpC,aAAW,OAAO,QAAQ;AACxB,UAAM,MAAM,OAAO,GAAG;AACtB,UAAM,UAAU,WAAW,KAAK,MAAM,OAAO,EAAE,KAAK,CAAC,UAAS;AAC5D,aAAO,GAAG,IAAI;IAChB,CAAC;AACD,aAAS,KAAK,OAAO;EACvB;AAEA,QAAM,QAAQ,IAAI,QAAQ;AAE1B,SAAO;AACT;AAEA,eAAe,SAAS,UAAoB,MAAY,UAAU,CAAA,GAAE;AAClE,QAAM,WAAW,SAAS,IAAI,CAAC,QAAQ,WAAW,KAAK,MAAM,OAAO,CAAC;AACrE,SAAO,MAAM,QAAQ,IAAI,QAAQ;AACnC;;;ACnEO,IAAM,iCAAiC;AACvC,IAAM,iCAAiC;AACvC,IAAM,iCAAiC;AACvC,IAAM,iCAAiC;AACvC,IAAM,iCAAiC;AACvC,IAAM,iCAAiC;AAMvC,IAAM,2BAA2B;EACtC;IACE,MAAM;IACN,MAAM;IACN,WAAW;IACX,MAAM;IACN,MAAM;;EAER;IACE,MAAM;IACN,MAAM;IACN,WAAW;IACX,MAAM;IACN,MAAM;;EAER,EAAC,MAAM,gCAAgC,MAAM,MAAM,WAAW,OAAO,MAAM,KAAK,MAAM,WAAU;EAChG;IACE,MAAM;IACN,MAAM;IACN,WAAW;IACX,MAAM;IACN,MAAM;;EAER;IACE,MAAM;IACN,MAAM;IACN,WAAW;IACX,MAAM;IACN,MAAM;;EAER,EAAC,MAAM,gCAAgC,MAAM,MAAM,WAAW,QAAQ,MAAM,KAAK,MAAM,WAAU;;;;AFsBnG,eAAsB,4BACpB,MACA,eACA,UAAgC,CAAA,GAChC,SAAuB;AAEvB,QAAM,WAAW,gCAAgC,IAAI;AACrD,MAAI,SAAS,UAAU,eAAe;AACpC,UAAM,IAAI,MAAM,YAAY,+BAA+B,SAAS,OAAO;EAC7E;AACA,SAAO,MAAM,2BAA2B,UAAU,SAAS,OAAO;AACpE;AAEM,SAAU,gCACd,MACA,OAAsC;AAEtC,MAAI;AACF,WAAO,gCAAgC,IAAI,EAAE,UAAU;EACzD,QAAE;AACA,WAAO;EACT;AACF;AAEA,eAAsB,2BACpB,UACA,UAAgC,CAAA,GAChC,SAAuB;AAEvB,QAAM,oBAAoB,uCAAuC,OAAO;AACxE,QAAM,UAAU,MAAM,yBAAyB,UAAU,mBAAmB,OAAO;AACnF,QAAM,YAAY,MAAM,0BAA0B,SAAS,mBAAmB,OAAO;AACrF,SAAO,+BAA+B,SAAS,OAAO,SAAS;AACjE;AAEA,eAAsB,0BACpB,SACA,UAAgC,CAAA,GAChC,SAAuB;AAEvB,QAAM,oBAAoB,+BAA+B,OAAO;AAChE,SAAO,MAAM,aACX,SACA,OAAO,QAAgB,MAAM,yBAAyB,KAAK,mBAAmB,OAAO,CAAC;AAE1F;AAEA,eAAsB,yBACpB,KACA,UAAgC,CAAA,GAChC,SAAuB;AAEvB,QAAM,cAAc,yBAAyB,KAAK,SAAS,OAAO;AAClE,QAAMC,SAAQ,uBAAuB,SAAS,OAAO;AACrD,QAAM,WAAW,MAAMA,OAAM,WAAW;AACxC,QAAM,mBAAmB,kCAAkC,OAAO;AAClE,MAAI,SAAS;AACX,UAAM,eAAe,+BAA+B,aAAa,UAAU,OAAO;AAClF,WAAO,UAAM,uCACX,UACA,CAAC,yBAAW,GACZ,kBACA,YAAY;EAEhB;AAEA,QAAM,cAAc,MAAM,SAAS,YAAW;AAC9C,SAAO,MAAM,0BAAY,MAAM,aAAa,gBAAuB;AACrE;AAEA,eAAsB,yBACpB,UACA,UAAgC,CAAA,GAChC,SAAuB;AAEvB,UAAQ,SAAS,OAAO;IACtB,KAAK;AACH,aAAO,MAAM,sBAAsB,UAAU,SAAS,OAAO;IAE/D,KAAK;AACH,UAAI,CAAC,MAAM,QAAQ,SAAS,MAAM,KAAK,SAAS,OAAO,WAAW,GAAG;AACnE,cAAM,IAAI,MAAM,6DAA6D;MAC/E;AACA,aAAO,MAAM,QAAQ,IACnB,SAAS,OAAO,IACd,OAAO,OAAO,UACZ,MAAM,gCAAgC,OAAO,SAAS,SAAS,EAAC,MAAK,CAAC,CAAC,CAC1E;IAGL,KAAK;AACH,aAAO,MAAM,wBAAwB,UAAU,SAAS,OAAO;IAEjE,KAAK;AACH,UAAI,CAAC,MAAM,QAAQ,SAAS,MAAM,KAAK,SAAS,OAAO,WAAW,GAAG;AACnE,cAAM,IAAI,MAAM,kEAAkE;MACpF;AACA,aAAO,MAAM,QAAQ,IACnB,SAAS,OAAO,IACd,OAAO,OAAO,UAAU,MAAM,wBAAwB,OAAO,SAAS,SAAS,EAAC,MAAK,CAAC,CAAC,CACxF;IAGL;AACE,YAAM,IAAI,MAAM,sCAAsC;EAC1D;AACF;AAEM,SAAU,+BACd,UAAgC,CAAA,GAAE;AAhLpC;AAkLE,OAAI,aAAQ,SAAR,mBAAc,SAAS;AACzB,WAAO;EACT;AAEA,QAAM,kBAAkB,QAAQ;AAChC,MAAI,CAAC,iBAAiB;AACpB,WAAO;EACT;AAEA,SAAO;IACL,GAAG;IACH,MAAM;MACJ,GAAG,QAAQ;MACX,SAAS;;;AAGf;AAEM,SAAU,yBACd,KACA,UAAgC,CAAA,GAChC,SAAuB;AAEvB,QAAM,kBAAc,kCAAY,GAAG;AACnC,MAAI,4BAA4B,GAAG,GAAG;AACpC,WAAO;EACT;AAEA,QAAM,UAAU,yBAAyB,SAAS,OAAO;AACzD,MAAI,CAAC,SAAS;AACZ,QAAI,gBAAgB,OAAO,IAAI,WAAW,GAAG,GAAG;AAC9C,aAAO;IACT;AACA,UAAM,IAAI,MAAM,wCAAwC,wBAAwB;EAClF;AAEA,aAAO,kCAAY,sBAAsB,SAAS,GAAG,CAAC;AACxD;AAEA,SAAS,gCAAgC,MAAY;AACnD,QAAM,WAAW,KAAK,MAAM,IAAI;AAChC,MAAI,EAAC,qCAAU,QAAO;AACpB,UAAM,IAAI,MAAM,qDAAqD;EACvE;AACA,SAAO;AACT;AAEA,eAAe,sBACb,UACA,SACA,SAAuB;AApOzB;AAsOE,OAAK,SAAS,SAAS,SAAS,YAAY,SAAS,UAAU;AAC7D,UAAM,IAAI,MAAM,uEAAuE;EACzF;AACA,MAAI,SAAS,SAAS,SAAS,SAAS;AACtC,UAAM,IAAI,MAAM,uEAAuE;EACzF;AACA,MAAI,SAAS,OAAO;AAClB,WAAO,SAAS;EAClB;AACA,OAAI,cAAS,YAAT,mBAAkB,QAAQ;AAC5B,WAAO,SAAS;EAClB;AACA,MAAI,SAAS,UAAU;AACrB,WAAO,MAAM,yBACX,EAAC,WAAW,SAAS,aAAa,QAAQ,UAAU,SAAS,SAAQ,GACrE,SACA,SACA,CAAA,CAAE;EAEN;AACA,QAAM,IAAI,MAAM,uEAAuE;AACzF;AAEA,eAAe,wBACb,UACA,SACA,SACA,kBAAmC,CAAA,GAAE;AAjQvC;AAmQE,QAAM,OAAyB,CAAA;AAE/B,aAAW,EAAC,MAAM,MAAM,WAAW,MAAM,KAAI,KAAK,0BAA0B;AAC1E,UAAM,WAAS,cAAS,UAAT,mBAAiB,YAAS,cAAS,UAAT,mBAAiB;AAC1D,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,0CAA0C,WAAW;IACvE;AACA,SAAK,IAAI,IAAI,MAAM,gCAAgC,QAAQ,SAAS,SAAS;MAC3E,GAAG;MACH,MAAM;MACN;MACA;MACA;KACD;EACH;AAEA,SAAO;AACT;AAEA,eAAe,gCACb,QACA,SACA,SACA,iBAAgC;AAEhC,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO;EACT;AACA,MAAI,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,GAAG;AAC9C,WAAO;EACT;AACA,MAAI,6BAA6B,MAAM,GAAG;AACxC,WAAO,MAAM,yBAAyB,QAAQ,SAAS,SAAS,eAAe;EACjF;AACA,QAAM,IAAI,MAAM,wEAAwE;AAC1F;AAEA,eAAe,yBACb,QACA,SACA,SACA,iBAAgC;AAEhC,QAAM,YACJ,OAAO,cAAc,SACjB,MAAM,iBAAiB,OAAO,UAAU,SAAS,SAAS,eAAe,IACzE,OAAO;AAEb,MAAI,CAAC,OAAO,SAAS,SAAS,KAAK,aAAa,GAAG;AACjD,UAAM,IAAI,MAAM,2BAA2B,OAAO,WAAW;EAC/D;AAEA,QAAM,OAAiB,CAAA;AACvB,WAAS,MAAM,GAAG,MAAM,WAAW,OAAO;AACxC,SAAK,KAAK,eAAe,OAAO,UAAU,EAAC,GAAG,iBAAiB,IAAG,CAAC,CAAC;EACtE;AACA,SAAO;AACT;AAEA,eAAe,iBACb,UACA,SACA,SACA,iBAAgC;AAEhC,MAAI,CAAC,SAAS,SAAS,OAAO,GAAG;AAC/B,UAAM,IAAI,MAAM,wEAAwE;EAC1F;AAEA,QAAM,YAAY,eAAe,UAAU,EAAC,GAAG,iBAAiB,KAAK,EAAC,CAAC;AACvE,QAAM,QAAQ,MAAM,yBAClB,WACA,+BAA+B,OAAO,GACtC,OAAO;AAET,QAAM,EAAC,OAAO,OAAM,QAAI,4BAAa,KAAK;AAC1C,SAAO,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,OAAO,MAAM,CAAC,CAAC;AAC1D;AAWA,SAAS,eAAe,UAAkB,iBAAgC;AACxE,MAAI,WAAW;AAEf,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS;AACpD,UAAM,YAAY,SAAS,KAAK;AAEhC,QAAI,cAAc,MAAM;AACtB,YAAM,gBAAgB,SAAS,QAAQ,CAAC;AACxC,UAAI,kBAAkB,OAAO,kBAAkB,OAAO,kBAAkB,MAAM;AAC5E,oBAAY;AACZ;AACA;MACF;AACA,YAAM,IAAI,MAAM,6BAA6B,iBAAiB,kBAAkB,UAAU;IAC5F;AAEA,QAAI,cAAc,KAAK;AACrB,YAAM,IAAI,MAAM,4BAA4B,UAAU;IACxD;AAEA,QAAI,cAAc,KAAK;AACrB,kBAAY;AACZ;IACF;AAEA,UAAM,oBAAoB,sBAAsB,UAAU,QAAQ,CAAC;AACnE,QAAI,oBAAoB,GAAG;AACzB,YAAM,IAAI,MAAM,wCAAwC,UAAU;IACpE;AAEA,UAAM,cAAc,SAAS,MAAM,QAAQ,GAAG,iBAAiB;AAC/D,QAAI,CAAC,sBAAsB,KAAK,WAAW,GAAG;AAC5C,YAAM,IAAI,MAAM,wBAAwB,4BAA4B,UAAU;IAChF;AAEA,UAAM,QAAQ,iBAAiB,aAAa,eAAe;AAC3D,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI,MACR,YAAY,0CAA0C,8BAA8B;IAExF;AAEA,gBAAY,OAAO,KAAK;AACxB,YAAQ;EACV;AAEA,SAAO;AACT;AAEA,SAAS,sBAAsB,UAAkB,YAAkB;AACjE,WAAS,QAAQ,YAAY,QAAQ,SAAS,QAAQ,SAAS;AAC7D,UAAM,YAAY,SAAS,KAAK;AAChC,QAAI,cAAc,MAAM;AACtB;AACA;IACF;AACA,QAAI,cAAc,KAAK;AACrB,YAAM,IAAI,MAAM,qDAAqD,UAAU;IACjF;AACA,QAAI,cAAc,KAAK;AACrB,aAAO;IACT;EACF;AACA,SAAO;AACT;AAEA,SAAS,iBACP,aACA,iBAAgC;AAEhC,UAAQ,aAAa;IACnB,KAAK;AACH,aAAO,gBAAgB;IACzB,KAAK;AACH,aAAO,gBAAgB;IACzB,KAAK;AACH,aAAO,gBAAgB;IACzB,KAAK;AACH,aAAO,gBAAgB;IACzB,KAAK;AACH,aAAO,gBAAgB;IACzB,KAAK;AACH,aAAO,gBAAgB;IACzB;AACE,aAAO;EACX;AACF;AAEA,SAAS,6BACP,QAA0B;AAE1B,SAAO,OAAO,WAAW,YAAY,WAAW,QAAQ,CAAC,MAAM,QAAQ,MAAM;AAC/E;AAEA,SAAS,yBACP,SACA,SAAuB;AA3bzB;AA6bE,MAAI,mCAAS,SAAS;AACpB,WAAO,QAAQ;EACjB;AAEA,MAAI,QAAQ,SAAS;AACnB,WAAO,mBAAmB,QAAQ,OAAO;EAC3C;AAEA,OAAI,aAAQ,SAAR,mBAAc,SAAS;AACzB,WAAO,sBAAsB,QAAQ,KAAK,OAAO;EACnD;AAEA,SAAO;AACT;AAEA,SAAS,mBAAmB,SAAe;AACzC,MAAI,QAAQ,SAAS,GAAG,GAAG;AACzB,WAAO,QAAQ,MAAM,GAAG,EAAE;EAC5B;AAEA,SAAO;AACT;AAEA,SAAS,sBAAsB,SAAe;AAC5C,SAAO,mBAAmB,0BAAK,QAAQ,OAAO,CAAC;AACjD;AAEA,SAAS,sBAAsB,SAAiB,KAAW;AACzD,MAAI,iBAAiB,OAAO,GAAG;AAC7B,WAAO,IAAI,IAAI,KAAK,GAAG,mBAAmB,OAAO,IAAI,EAAE,SAAQ;EACjE;AAEA,QAAM,oBAAoB,QAAQ,WAAW,GAAG,IAAI,UAAU,IAAI;AAClE,QAAM,gBAAgB,0BAAK,QAAQ,mBAAmB,GAAG;AACzD,SAAO,QAAQ,WAAW,GAAG,IAAI,gBAAgB,cAAc,MAAM,CAAC;AACxE;AAEA,SAAS,iBAAiB,KAAW;AACnC,SACE,IAAI,WAAW,OAAO,KACtB,IAAI,WAAW,QAAQ,KACvB,IAAI,WAAW,OAAO,KACtB,IAAI,WAAW,OAAO;AAE1B;AAEA,SAAS,uBACP,SACA,SAAuB;AA7ezB;AA+eE,QAAM,cAAc,QAAQ,WAAS,aAAQ,SAAR,mBAAc;AAEnD,MAAI,mCAAS,OAAO;AAClB,WAAO,QAAQ;EACjB;AAEA,MAAI,OAAO,gBAAgB,YAAY;AACrC,WAAO;EACT;AAEA,MAAI,eAAe,OAAO,gBAAgB,UAAU;AAClD,WAAO,CAAC,QAAQ,MAAM,KAAK,WAAW;EACxC;AAEA,SAAO;AACT;AAEA,SAAS,kCAAkC,SAA6B;AACtE,QAAM,OAAO,QAAQ;AACrB,QAAM,OAAO,EAAC,GAAG,QAAO;AACxB,SAAO,KAAK;AACZ,MAAI,EAAC,6BAAM,UAAS;AAClB,WAAO;EACT;AAEA,QAAM,WAAW,EAAC,GAAG,KAAI;AACzB,SAAO,SAAS;AAChB,SAAO;IACL,GAAG;IACH,MAAM;;AAEV;AAEA,SAAS,uCACP,SAA6B;AAjhB/B;AAmhBE,QAAI,aAAQ,UAAR,mBAAe,SAAQ,OAAO,gBAAgB,aAAa;AAC7D,WAAO;EACT;AAEA,SAAO;IACL,GAAG;IACH,OAAO;MACL,GAAG,QAAQ;MACX,MAAM;;;AAGZ;AAEA,SAAS,+BACP,aACA,UACA,SAAsB;AAEtB,QAAM,MAAM,SAAS,OAAO;AAC5B,QAAM,CAAC,uBAAuB,cAAc,EAAE,IAAI,IAAI,MAAM,GAAG;AAE/D,SAAO;IACL,GAAG;IACH;IACA;IACA,UAAU,0BAAK,SAAS,qBAAqB;IAC7C,SAAS,0BAAK,QAAQ,qBAAqB;IAC3C;;AAEJ;AAEA,SAAS,+BACP,OACA,WAAc;AAEd,UAAQ,OAAO;IACb,KAAK,iBAAiB;AACpB,YAAM,OAAO,8BAA8B,SAAS;AACpD,aAAO;QACL,OAAO;QACP,MAAM;QACN,QAAQ,0BAA0B,IAAI;QACtC;;IAEJ;IAEA,KAAK,uBAAuB;AAC1B,YAAM,OAAO,UAAU,IAAI,CAAC,UAAU,8BAA8B,KAAK,CAAC;AAC1E,aAAO;QACL,OAAO;QACP,MAAM;QACN,QAAQ,0BAA0B,KAAK,CAAC,CAAC;QACzC;;IAEJ;IAEA,KAAK,sBAAsB;AACzB,YAAM,OAAO,yBAAyB,IAAI,CAAC,EAAC,KAAI,MAC9C,8BAA8B,UAAU,IAAI,CAAC,CAAC;AAEhD,aAAO;QACL,OAAO;QACP,MAAM;QACN,QAAQ,0BAA0B,KAAK,CAAC,CAAC;QACzC;;IAEJ;IAEA,KAAK,4BAA4B;AAC/B,YAAM,OAAO,UAAU,IAAI,CAAC,UAC1B,yBAAyB,IAAI,CAAC,EAAC,KAAI,MAAM,8BAA8B,MAAM,IAAI,CAAC,CAAC,CAAC;AAEtF,aAAO;QACL,OAAO;QACP,MAAM;QACN,QAAQ,0BAA0B,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C;;IAEJ;IAEA;AACE,YAAM,IAAI,MAAM,qCAAqC,OAAO;EAChE;AACF;AAEA,SAAS,8BAA8B,WAAc;AACnD,MAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,QAAI,UAAU,WAAW,GAAG;AAC1B,YAAM,IAAI,MAAM,2CAA2C;IAC7D;AAEA,QAAI,UAAU,MAAM,cAAc,GAAG;AACnC,aAAO;IACT;AAEA,QAAI,UAAU,MAAM,qBAAO,GAAG;AAC5B,aAAO,UAAU,IAAI,CAAC,UAAU,yBAAyB,KAAK,CAAC;IACjE;AAEA,QAAI,UAAU,MAAM,CAAC,UAAU,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,cAAc,CAAC,GAAG;AACnF,UAAI,UAAU,WAAW,GAAG;AAC1B,cAAM,IAAI,MAAM,qEAAqE;MACvF;AACA,aAAO,UAAU,CAAC;IACpB;EACF;AAEA,MAAI,UAAU,SAAS,GAAG;AACxB,QAAI,UAAU,SAAS,MAAM;AAC3B,YAAM,IAAI,MAAM,4DAA4D,UAAU,MAAM;IAC9F;AACA,WAAO,UAAU;EACnB;AAEA,MAAI,eAAe,SAAS,GAAG;AAC7B,WAAO,CAAC,SAAS;EACnB;AAEA,UAAI,uBAAQ,SAAS,GAAG;AACtB,WAAO,CAAC,yBAAyB,SAAS,CAAC;EAC7C;AAEA,QAAM,IAAI,MAAM,yEAAyE;AAC3F;AAEA,SAAS,yBAAyB,OAAgB;AAChD,QAAM,EAAC,OAAO,OAAM,QAAI,4BAAa,KAAK;AAC1C,SAAO;IACL,OAAO;IACP,YAAY;IACZ;IACA;IACA,aACE,OAAO,gBAAgB,eAAe,iBAAiB,cAAc,QAAQ;IAC/E,MAAM,IAAI,WAAW,CAAC;IACtB,eAAe;;AAEnB;AAEA,SAAS,0BAA0B,eAA6B;AA9pBhE;AA+pBE,WAAO,mBAAc,CAAC,MAAf,mBAAkB,kBAAiB;AAC5C;AAEA,SAAS,eAAe,cAAqB;AAC3C,SAAO,QACL,gBACA,OAAO,iBAAiB,YACxB,WAAW,gBACX,aAAa,UAAU,eAAe;AAE1C;AAEA,SAAS,UAAU,SAAgB;AACjC,SAAO,QACL,WAAW,OAAO,YAAY,YAAY,WAAW,WAAW,QAAQ,UAAU,SAAS;AAE/F;AAEA,SAAS,4BAA4B,KAAW;AAC9C,SACE,IAAI,WAAW,OAAO,KACtB,IAAI,WAAW,OAAO,KACtB,IAAI,WAAW,OAAO,KACtB,IAAI,WAAW,OAAO,KACtB,IAAI,WAAW,QAAQ,KACvB,IAAI,WAAW,GAAG;AAEtB;;;AGzqBO,IAAM,gBAAgB;EAC3B,UAAU;EACV,WAAW;EACX,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;EACT,YAAY,CAAA;EACZ,WAAW,CAAA;EACX,MAAM;EACN,QAAQ;EACR,UAAU,CAAC,SAAiB,gCAAgC,MAAM,eAAe;EACjF,SAAS;IACP,OAAO,CAAA;;EAET,OAAO,OACL,aACA,SACA,YAEA,MAAM,4BACJ,IAAI,YAAW,EAAG,OAAO,WAAW,GACpC,iBACA,SACA,OAAO;EAEX,WAAW,OACT,MACA,SACA,YACG,MAAM,4BAA4B,MAAM,iBAAiB,SAAS,OAAO;;;;AC9BzE,IAAM,qBAAqB;EAChC,UAAU;EACV,WAAW;EACX,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;EACT,YAAY,CAAA;EACZ,WAAW,CAAA;EACX,MAAM;EACN,QAAQ;EACR,UAAU,CAAC,SAAiB,gCAAgC,MAAM,qBAAqB;EACvF,SAAS;IACP,OAAO,CAAA;;EAET,OAAO,OACL,aACA,SACA,YAEA,MAAM,4BACJ,IAAI,YAAW,EAAG,OAAO,WAAW,GACpC,uBACA,SACA,OAAO;EAEX,WAAW,OAAO,MAAc,SAAqC,YACnE,MAAM,4BAA4B,MAAM,uBAAuB,SAAS,OAAO;;;;AC3B5E,IAAM,oBAAoB;EAC/B,UAAU;EACV,WAAW;EACX,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;EACT,YAAY,CAAA;EACZ,WAAW,CAAA;EACX,MAAM;EACN,QAAQ;EACR,UAAU,CAAC,SAAiB,gCAAgC,MAAM,oBAAoB;EACtF,SAAS;IACP,OAAO,CAAA;;EAET,OAAO,OACL,aACA,SACA,YAEA,MAAM,4BACJ,IAAI,YAAW,EAAG,OAAO,WAAW,GACpC,sBACA,SACA,OAAO;EAEX,WAAW,OAAO,MAAc,SAAoC,YAClE,MAAM,4BAA4B,MAAM,sBAAsB,SAAS,OAAO;;;;AC3B3E,IAAM,yBAAyB;EACpC,UAAU;EACV,WAAW;EACX,IAAI;EACJ,MAAM;EACN,QAAQ;EACR,SAAS;EACT,YAAY,CAAA;EACZ,WAAW,CAAA;EACX,MAAM;EACN,QAAQ;EACR,UAAU,CAAC,SAAiB,gCAAgC,MAAM,0BAA0B;EAC5F,SAAS;IACP,OAAO,CAAA;;EAET,OAAO,OACL,aACA,SACA,YAEA,MAAM,4BACJ,IAAI,YAAW,EAAG,OAAO,WAAW,GACpC,4BACA,SACA,OAAO;EAEX,WAAW,OACT,MACA,SACA,YACG,MAAM,4BAA4B,MAAM,4BAA4B,SAAS,OAAO;;;;AC1C3F,IAAAC,uBAAmD;AACnD,IAAAC,uBAAmD;AAE5C,IAAM,4BAA4B;;EAEvC,SAAS;;;;ACNX,IAAAC,uBAAgC;AAMhC,eAAsB,qCACpB,UACA,WACA,SAAwC;AAGxC,QAAM,OAAO;;IAEX;IACA;IAAU;IACV;IAAiB;IACjB;IAAa;IACb;IAAW;IACX;IAAY;;AAEd,QAAM,eAAe,IAAI,uCAAiB;AAC1C,QAAM,aAAa,MAAM;IACvB,SAAS;IACT,WAAW;IACX,OAAO;GACR;AACD,SAAO;AACT;;;ACNO,IAAM,0BAA0B;EACrC,MAAM;EACN,IAAI;EACJ,QAAQ;EACR,SAAS;EAET,YAAY,CAAC,KAAK;EAClB,WAAW,CAAC,oBAAoB,eAAe,0BAA0B;EAEzE,SAAS;IACP,SAAS;MACP,QAAQ;MACR,aAAa;MACb,SAAS;MACT,QAAQ;MACR,OAAO;MACP,WAAW;;;EAIf,gBAAgB;EAChB,SAAM;AACJ,UAAM,IAAI,MAAM,iBAAiB;EACnC;;;;AC5CF,IAAAC,uBAAwC;AAWxC,eAAsB,uBACpB,OACA,UAAkC,CAAA,GAAE;AAGpC,QAAM,EACJ,UAAU,OACV,eAAe,IACf,cAAc,OACd,UAAU,MAAK,KACb,mCAAU,yBAAwB,CAAA;AACtC,QAAM,EAAC,aAAY,IAAI,MAAM,2BAAuB,gDAA0B,OAAO,CAAC;AACtF,QAAM,eAAe,IAAI,aAAY;AAErC,MAAI;AACF,UAAM,gBAAgB,IAAI,WAAW,MAAM,QAAQ,MAAM,SAAS,CAAC;AACnE,iBAAa,kBAAkB,IAAI;AACnC,iBAAa,6BAA6B,IAAI;AAC9C,iBAAa,wBAAwB,IAAI;AAEzC,iBAAa,oBAAoB,GAAG,MAAM,MAAM,MAAM,OAAO,MAAM,QAAQ,KAAK;AAChF,iBAAa,cAAc,OAAO;AAClC,iBAAa,WAAW,OAAO;AAC/B,iBAAa,gBAAgB,YAAY;AACzC,iBAAa,SAAS,WAAW;AACjC,iBAAa,UAAU,OAAO;AAE9B,UAAM,iBAAiB,aAAa,OAAO,aAAa;AAExD,UAAM,qBAAqB,cAAc,SAAS,GAAG,cAAc,EAAE;AACrE,WAAO;EACT,SAAS,OAAP;AAEA,YAAQ,MAAM,+DAA+D,KAAK;AAClF,UAAM;EACR;AACE,iBAAa,OAAM;EACrB;AACF;;;AC/BO,IAAM,kBAAkB;EAC7B,MAAM;EACN,IAAI;EACJ,QAAQ;EACR,SAAS;EAET,YAAY,CAAC,MAAM;EACnB,WAAW,CAAC,YAAY;EACxB,SAAS;IACP,CAAC,mBAAmB,GAAG;MACrB,SAAS;MACT,cAAc;MACd,aAAa;MACb,SAAS;;;EAIb,QAAQ;;;;ACpCV,IAAAC,uBAAqB;AACrB,IAAAC,iBAA2B;;;ACErB,SAAU,YACd,QACA,SACA,YAA+B;AAE/B,SAAO,OAAO,WAAW,aAAa,OAAO,EAAC,GAAG,SAAS,GAAG,WAAU,CAAC,IAAI;AAC9E;;;ADIA,eAAsB,iBACpB,QACA,UAAgC,CAAA,GAAE;AAElC,QAAM,YAAY,MAAM,aAAa,QAAQ,OAAO;AACpD,SAAO,MAAM,0BAA0B,WAAW,+BAA+B,OAAO,CAAC;AAC3F;AAEA,eAAsB,aACpB,QACA,SACA,aAAyB,CAAA,GAAE;AAE3B,QAAM,YAAa,WAAW,QAAQ,SAAS,QAAQ,MAAM,aAAc;AAC3E,SAAO,cAAc,IACjB,MAAM,sBAAsB,QAAQ,WAAW,SAAS,UAAU,IAClE,YAAY,QAAQ,SAAS,UAAU;AAC7C;AAEA,eAAe,sBACb,QACA,WACA,SACA,YAAsB;AAEtB,QAAM,OAAiB,CAAA;AACvB,QAAM,oBAAoB,+BAA+B,OAAO;AAGhE,MAAI,cAAc,QAAQ;AACxB,UAAM,MAAM,YAAY,QAAQ,SAAS,EAAC,GAAG,YAAY,KAAK,EAAC,CAAC;AAChE,UAAM,QAAQ,MAAM,yBAAyB,KAAK,iBAAiB;AAEnE,UAAM,EAAC,OAAO,OAAM,QAAI,6BAAa,KAAK;AAC1C,gBAAY,aAAa,EAAC,OAAO,OAAM,CAAC;AAGxC,SAAK,KAAK,GAAG;EACf;AAGA,mCAAO,YAAY,CAAC;AAEpB,WAAS,WAAW,KAAK,QAAQ,WAAW,WAAW,EAAE,UAAU;AACjE,UAAM,MAAM,YAAY,QAAQ,SAAS,EAAC,GAAG,YAAY,KAAK,SAAQ,CAAC;AACvE,SAAK,KAAK,GAAG;EACf;AAEA,SAAO;AACT;AAGM,SAAU,aAAa,MAAqC;AAChE,SAAO,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,MAAM,CAAC,CAAC;AACpE;;;AEzDA,eAAsB,sBACpB,OACA,QACA,UAAgC,CAAA,GAAE;AAElC,QAAM,YAAY,MAAM,kBAAkB,OAAO,QAAQ,OAAO;AAChE,SAAO,MAAM,0BAA0B,WAAW,+BAA+B,OAAO,CAAC;AAC3F;AAEA,eAAsB,kBACpB,OACA,QACA,UAAgC,CAAA,GAAE;AAElC,QAAM,WAA2B,CAAA;AACjC,WAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC1C,UAAM,UAAU,aAAa,QAAQ,SAAS,EAAC,MAAK,CAAC;AACrD,aAAS,KAAK,OAAO;EACvB;AACA,SAAO,MAAM,QAAQ,IAAI,QAAQ;AACnC;;;ACjBA,eAAsB,iBAAiB,QAAgB,SAA6B;AAElF,QAAM,OAA0C,CAAA;AAChD,QAAM,WAA2B,CAAA;AAEjC,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,yBAAyB,QAAQ,EAAE,GAAG;AACxD,UAAM,OAAO,yBAAyB,KAAK;AAC3C,UAAM,UAAU,aAAa,QAAQ,SAAS,EAAC,GAAG,MAAM,OAAO,QAAO,CAAC,EAAE,KAAK,CAAC,QAAO;AACpF,WAAK,KAAK,IAAI,IAAI;IACpB,CAAC;AACD,aAAS,KAAK,OAAO;EACvB;AAEA,QAAM,QAAQ,IAAI,QAAQ;AAE1B,SAAO;AACT;AAOA,eAAsB,qBACpB,QACA,UAAgC,CAAA,GAAE;AAElC,QAAM,OAAO,MAAM,iBAAiB,QAAQ,OAAO;AACnD,SAAQ,MAAM,0BACZ,MACA,+BAA+B,OAAO,CAAC;AAE3C;;;AnCDO,IAAM,wBAAwB;EACnC,MAAM;EACN,IAAI;EACJ,QAAQ;EACR,SAAS;EACT,YAAY,CAAC,MAAM;EACnB,QAAQ;EACR,SAAS;IACP,SAAS;IACT,cAAc;IACd,aAAa;IACb,SAAS;;;",
|
|
6
|
+
"names": ["import_worker_utils", "module", "import_loader_utils", "textureFormats", "import_loader_utils", "textureFormats", "line", "a", "b", "import_loader_utils", "fetch", "import_loader_utils", "import_worker_utils", "import_worker_utils", "import_worker_utils", "import_loader_utils", "import_images"]
|
|
7
7
|
}
|