Skip to content
File

Blob: src/node/wasi.ts

typescript65 lines
1// Copyright (c) 2017-2022 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4import {
5 validateArray,
6 validateBoolean,
7 validateObject,
8 validateOneOf,
9 validateInt32,
10} from 'node-internal:validators';
11 
12import { ERR_METHOD_NOT_IMPLEMENTED } from 'node-internal:internal_errors';
13 
14import type { WASIOptions } from 'node:wasi';
15 
16interface FinalizeBindingsOptions {
17 memory?: WebAssembly.Memory | undefined;
18}
19 
20// TODO(later): This is one we actually might want to implement at some point.
21 
22export class WASI {
23 constructor(options: WASIOptions = { version: 'unstable' }) {
24 validateObject(options, 'options');
25 validateOneOf(options.version, 'options.version', ['unstable', 'preview1']);
26 if (options.args !== undefined) {
27 validateArray(options.args, 'options.args');
28 }
29 if (options.env !== undefined) {
30 validateObject(options.env, 'options.env');
31 }
32 if (options.preopens !== undefined) {
33 validateObject(options.preopens, 'options.preopens');
34 }
35 const { stdin = 0, stdout = 1, stderr = 2 } = options;
36 validateInt32(stdin, 'options.stdin', 0);
37 validateInt32(stdout, 'options.stdout', 0);
38 validateInt32(stderr, 'options.stderr', 0);
39 
40 if (options.returnOnExit !== undefined) {
41 validateBoolean(options.returnOnExit, 'options.returnOnExit');
42 }
43 
44 throw new ERR_METHOD_NOT_IMPLEMENTED('WASI');
45 }
46 
47 finalizeBindings(_1: object, _2: FinalizeBindingsOptions = {}): void {
48 throw new ERR_METHOD_NOT_IMPLEMENTED('WASI.finalizeBindings');
49 }
50 
51 start(_: object): number {
52 throw new ERR_METHOD_NOT_IMPLEMENTED('WASI.start');
53 }
54 
55 initialize(_: object): void {
56 throw new ERR_METHOD_NOT_IMPLEMENTED('WASI.initialize');
57 }
58 
59 getImportObject(): object {
60 return {};
61 }
62}
63 
64export default { WASI };