Files
mcp_web_dev_server/node_modules/@rolldown/binding-wasm32-wasi/wasi-worker-browser.mjs
T
2026-07-31 13:12:54 -04:00

60 lines
1.5 KiB
JavaScript

import {
instantiateNapiModuleSync,
MessageHandler,
WASI,
createFsProxy,
emnapiAsyncWorkPlugin,
emnapiTSFNPlugin,
} from '@napi-rs/wasm-runtime'
import { memfsExported as __memfsExported } from '@napi-rs/wasm-runtime/fs'
const fs = createFsProxy(__memfsExported)
const errorOutputs = []
const handler = new MessageHandler({
onLoad({ wasmModule, wasmMemory }) {
const wasi = new WASI({
fs,
preopens: {
'/': '/',
},
print: function () {
// eslint-disable-next-line no-console
console.log.apply(console, arguments)
},
printErr: function() {
// eslint-disable-next-line no-console
console.error.apply(console, arguments)
errorOutputs.push([...arguments])
},
})
return instantiateNapiModuleSync(wasmModule, {
childThread: true,
wasi,
// The wasm links a "basic" emnapi archive (no C async-work /
// threadsafe-function implementations), so every thread that
// instantiates it must provide the JavaScript implementations
// through the emnapi plugins.
plugins: [emnapiAsyncWorkPlugin, emnapiTSFNPlugin],
overwriteImports(importObject) {
importObject.env = {
...importObject.env,
...importObject.napi,
...importObject.emnapi,
memory: wasmMemory,
}
},
})
},
onError(error) {
postMessage({ type: 'error', error, errorOutputs })
errorOutputs.length = 0
}
})
globalThis.onmessage = function (e) {
handler.handle(e)
}