init project
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user