node/test/fixtures/wasi-preview-1.js

49 lines
1.4 KiB
JavaScript

'use strict';
const assert = require('assert');
const fixtures = require('../common/fixtures');
const tmpdir = require('../common/tmpdir');
const fs = require('fs');
const path = require('path');
const common = require('../common');
const { WASI } = require('wasi');
function returnOnExitEnvToValue(env) {
const envValue = env.RETURN_ON_EXIT;
if (envValue === undefined) {
return undefined;
}
return envValue === 'true';
}
common.expectWarning('ExperimentalWarning',
'WASI is an experimental feature and might change at any time');
tmpdir.refresh();
const wasmDir = path.join(__dirname, '..', 'wasi', 'wasm');
const wasiPreview1 = new WASI({
version: 'preview1',
args: ['foo', '-bar', '--baz=value'],
env: process.env,
preopens: {
'/sandbox': fixtures.path('wasi'),
'/tmp': tmpdir.path,
},
returnOnExit: returnOnExitEnvToValue(process.env),
});
// Validate the getImportObject helper
assert.strictEqual(wasiPreview1.wasiImport,
wasiPreview1.getImportObject().wasi_snapshot_preview1);
const modulePathPreview1 = path.join(wasmDir, `${process.argv[2]}.wasm`);
const bufferPreview1 = fs.readFileSync(modulePathPreview1);
(async () => {
const { instance: instancePreview1 } =
await WebAssembly.instantiate(bufferPreview1,
wasiPreview1.getImportObject());
wasiPreview1.start(instancePreview1);
})().then(common.mustCall());