{"version":3,"file":"detectCompressed.mjs","sources":["../../../src/compressed-textures/shared/detectCompressed.ts"],"sourcesContent":["import { ExtensionType } from '../../extensions/Extensions';\n// eslint-disable-next-line max-len\nimport { getSupportedCompressedTextureFormats } from '../../rendering/renderers/shared/texture/utils/getSupportedCompressedTextureFormats';\nimport { isWebGLSupported } from '../../utils/browser/isWebGLSupported';\nimport { isWebGPUSupported } from '../../utils/browser/isWebGPUSupported';\nimport { validFormats } from './resolveCompressedTextureUrl';\n\nimport type { FormatDetectionParser } from '../../assets/detections/types';\nimport type { TEXTURE_FORMATS } from '../../rendering/renderers/shared/texture/const';\n\nlet compressedTextureExtensions: string[];\n\n/**\n * Detects if the browser supports compressed texture formats.\n * @category assets\n * @internal\n */\nexport const detectCompressed = {\n    extension: {\n        type: ExtensionType.DetectionParser,\n        priority: 2,\n    },\n    test: async (): Promise<boolean> =>\n    {\n        if (await isWebGPUSupported()) return true;\n        if (isWebGLSupported()) return true;\n\n        return false;\n    },\n    add: async (formats: string[]): Promise<string[]> =>\n    {\n        const supportedCompressedTextureFormats = await getSupportedCompressedTextureFormats();\n\n        compressedTextureExtensions = extractExtensionsForCompressedTextureFormats(supportedCompressedTextureFormats);\n\n        return [...compressedTextureExtensions, ...formats];\n    },\n    remove: async (formats: string[]): Promise<string[]> =>\n    {\n        if (compressedTextureExtensions)\n        {\n            return formats.filter((f) => !(f in compressedTextureExtensions));\n        }\n\n        return formats;\n    },\n} as FormatDetectionParser;\n\nfunction extractExtensionsForCompressedTextureFormats(formats: TEXTURE_FORMATS[]): string[]\n{\n    const extensions: string[] = ['basis'];\n\n    const dupeMap: Record<string, boolean> = {};\n\n    formats.forEach((format) =>\n    {\n        const extension = format.split('-')[0];\n\n        if (extension && !dupeMap[extension])\n        {\n            dupeMap[extension] = true;\n            extensions.push(extension);\n        }\n    });\n\n    // sort extensions by priority\n    extensions.sort((a, b) =>\n    {\n        const aIndex = validFormats.indexOf(a);\n        const bIndex = validFormats.indexOf(b);\n\n        if (aIndex === -1)\n        {\n            return 1;\n        }\n        if (bIndex === -1)\n        {\n            return -1;\n        }\n\n        return aIndex - bIndex;\n    });\n\n    return extensions;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,IAAI,2BAAA;AAOG,MAAM,gBAAA,GAAmB;AAAA,EAC5B,SAAA,EAAW;AAAA,IACP,MAAM,aAAA,CAAc,eAAA;AAAA,IACpB,QAAA,EAAU;AAAA,GACd;AAAA,EACA,MAAM,YACN;AACI,IAAA,IAAI,MAAM,iBAAA,EAAkB,EAAG,OAAO,IAAA;AACtC,IAAA,IAAI,gBAAA,IAAoB,OAAO,IAAA;AAE/B,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AAAA,EACA,GAAA,EAAK,OAAO,OAAA,KACZ;AACI,IAAA,MAAM,iCAAA,GAAoC,MAAM,oCAAA,EAAqC;AAErF,IAAA,2BAAA,GAA8B,6CAA6C,iCAAiC,CAAA;AAE5G,IAAA,OAAO,CAAC,GAAG,2BAAA,EAA6B,GAAG,OAAO,CAAA;AAAA,EACtD,CAAA;AAAA,EACA,MAAA,EAAQ,OAAO,OAAA,KACf;AACI,IAAA,IAAI,2BAAA,EACJ;AACI,MAAA,OAAO,QAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,KAAK,2BAAA,CAA4B,CAAA;AAAA,IACpE;AAEA,IAAA,OAAO,OAAA;AAAA,EACX;AACJ;AAEA,SAAS,6CAA6C,OAAA,EACtD;AACI,EAAA,MAAM,UAAA,GAAuB,CAAC,OAAO,CAAA;AAErC,EAAA,MAAM,UAAmC,EAAC;AAE1C,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KACjB;AACI,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAErC,IAAA,IAAI,SAAA,IAAa,CAAC,OAAA,CAAQ,SAAS,CAAA,EACnC;AACI,MAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,IAAA;AACrB,MAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AAAA,IAC7B;AAAA,EACJ,CAAC,CAAA;AAGD,EAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KACpB;AACI,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAA;AACrC,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAA;AAErC,IAAA,IAAI,WAAW,CAAA,CAAA,EACf;AACI,MAAA,OAAO,CAAA;AAAA,IACX;AACA,IAAA,IAAI,WAAW,CAAA,CAAA,EACf;AACI,MAAA,OAAO,CAAA,CAAA;AAAA,IACX;AAEA,IAAA,OAAO,MAAA,GAAS,MAAA;AAAA,EACpB,CAAC,CAAA;AAED,EAAA,OAAO,UAAA;AACX;;;;"}