()
| 89 | } |
| 90 | |
| 91 | async function ensureParsers(): Promise<void> { |
| 92 | if (parsersReady) return; |
| 93 | |
| 94 | await Parser.init({ |
| 95 | locateFile: (file: string) => `/${file}`, |
| 96 | }); |
| 97 | |
| 98 | const parserMap = new Map<string, Parser>(); |
| 99 | |
| 100 | // Load all available parsers in parallel, ignoring any that fail |
| 101 | const entries = Object.entries(PARSER_WASM_MAP); |
| 102 | const results = await Promise.allSettled( |
| 103 | entries.map(async ([key, wasmFile]) => { |
| 104 | const parser = await loadParser(wasmFile); |
| 105 | return { key, parser }; |
| 106 | }), |
| 107 | ); |
| 108 | |
| 109 | for (let i = 0; i < results.length; i++) { |
| 110 | const result = results[i]; |
| 111 | const [key, wasmFile] = entries[i]; |
| 112 | if (result.status === 'fulfilled') { |
| 113 | parserMap.set(result.value.key, result.value.parser); |
| 114 | } else { |
| 115 | console.warn( |
| 116 | `[ensureParsers] ${key} (${wasmFile}) failed:`, |
| 117 | result.reason, |
| 118 | ); |
| 119 | } |
| 120 | } |
| 121 | |
| 122 | initParsers(parserMap); |
| 123 | parsersReady = true; |
| 124 | } |
| 125 | |
| 126 | // --- Phase mapping --- |
| 127 |
no test coverage detected