-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
45 lines (42 loc) · 1.35 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
const path = require('path')
const fs = require('fs')
const emnapi = require('@emnapi/runtime')
const entry = (() => {
try {
return require.resolve('./build/Release/binding.node')
} catch (_) {
return require.resolve('./build/Release/binding.wasm')
}
})()
const ext = path.extname(entry)
module.exports = function () {
if (ext === '.js') {
return require(entry)().then(Module => {
return Module.emnapiInit({ context: emnapi.getDefaultContext() })
})
}
if (ext === '.node') {
return Promise.resolve().then(() => require(entry))
}
if (ext === '.wasm') {
const { instantiateNapiModule } = require('@emnapi/core')
return instantiateNapiModule(fs.readFileSync(entry), {
context: emnapi.getDefaultContext(),
wasi: new (require('wasi').WASI)({ version: 'preview1' }),
asyncWorkPoolSize: process.env.UV_THREADPOOL_SIZE || 4,
overwriteImports (imports) {
imports.env.memory = new WebAssembly.Memory({
initial: 16777216 / 65536,
maximum: 2147483648 / 65536,
shared: true
})
},
onCreateWorker () {
return new (require('worker_threads').Worker)(path.join(__dirname, './worker.js'), {
env: process.env,
execArgv: ['--experimental-wasi-unstable-preview1']
})
}
}).then(({ napiModule }) => napiModule.exports)
}
}