()
| 75 | const instantiateFromFileCode = instantiateFromFile.toString() |
| 76 | |
| 77 | export const wasmHelperPlugin = (): Plugin => { |
| 78 | return perEnvironmentPlugin('vite:wasm-helper', (env) => { |
| 79 | return { |
| 80 | name: 'vite:wasm-helper', |
| 81 | |
| 82 | resolveId: { |
| 83 | filter: { id: exactRegex(wasmHelperId) }, |
| 84 | handler(id) { |
| 85 | return id |
| 86 | }, |
| 87 | }, |
| 88 | |
| 89 | load: { |
| 90 | filter: { id: [exactRegex(wasmHelperId), wasmInitRE, wasmDirectRE] }, |
| 91 | async handler(id) { |
| 92 | const ssr = this.environment.config.consumer === 'server' |
| 93 | |
| 94 | if (id === wasmHelperId) { |
| 95 | return ` |
| 96 | const instantiateFromUrl = ${ssr ? instantiateFromFileCode : instantiateFromUrlCode} |
| 97 | export default ${wasmHelperCode} |
| 98 | ` |
| 99 | } |
| 100 | |
| 101 | const isInit = wasmInitRE.test(id) |
| 102 | const cleanedId = id.split('?')[0] |
| 103 | let url = await fileToUrl(this, cleanedId, ssr) |
| 104 | assetUrlRE.lastIndex = 0 |
| 105 | if (ssr && assetUrlRE.test(url)) { |
| 106 | url = url.replace('__VITE_ASSET__', '__VITE_WASM_INIT__') |
| 107 | } |
| 108 | |
| 109 | if (isInit) { |
| 110 | return ` |
| 111 | import initWasm from "${wasmHelperId}" |
| 112 | export default opts => initWasm(opts, ${JSON.stringify(url)}) |
| 113 | ` |
| 114 | } |
| 115 | |
| 116 | // Direct .wasm import (WASM ESM Integration) |
| 117 | const wasmInfo = await parseWasm(cleanedId) |
| 118 | const glueCode = generateGlueCode(wasmInfo, { |
| 119 | initWasm: '__vite__initWasm', |
| 120 | wasmUrl: '__vite__wasmUrl', |
| 121 | }) |
| 122 | |
| 123 | return ` |
| 124 | import __vite__initWasm from "${wasmHelperId}" |
| 125 | const __vite__wasmUrl = ${JSON.stringify(url)} |
| 126 | ${glueCode} |
| 127 | ` |
| 128 | }, |
| 129 | }, |
| 130 | |
| 131 | renderChunk: |
| 132 | env.config.consumer === 'server' |
| 133 | ? { |
| 134 | filter: { code: wasmInitUrlRE }, |
no test coverage detected