@bytecodealliance/preview2-shim 0.17.2 → 0.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/cli.js +91 -94
- package/lib/browser/clocks.js +30 -29
- package/lib/browser/filesystem.js +298 -251
- package/lib/browser/http.js +129 -128
- package/lib/browser/index.js +8 -16
- package/lib/browser/io.js +143 -135
- package/lib/browser/random.js +44 -42
- package/lib/browser/sockets.js +68 -166
- package/lib/common/instantiation.js +127 -0
- package/lib/io/calls.js +7 -5
- package/lib/io/worker-http.js +175 -157
- package/lib/io/worker-io.js +402 -386
- package/lib/io/worker-socket-tcp.js +271 -219
- package/lib/io/worker-socket-udp.js +494 -429
- package/lib/io/worker-sockets.js +276 -262
- package/lib/io/worker-thread.js +943 -864
- package/lib/nodejs/cli.js +64 -63
- package/lib/nodejs/clocks.js +51 -45
- package/lib/nodejs/filesystem.js +788 -654
- package/lib/nodejs/http.js +693 -617
- package/lib/nodejs/index.js +8 -16
- package/lib/nodejs/random.js +32 -28
- package/lib/nodejs/sockets.js +538 -474
- package/lib/synckit/index.js +94 -85
- package/package.json +9 -5
- package/types/index.d.ts +0 -1
- package/types/instantiation.d.ts +112 -0
package/lib/nodejs/cli.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import process, { argv, env, cwd } from
|
|
1
|
+
import process, { argv, env, cwd } from 'node:process';
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from
|
|
8
|
-
import { INPUT_STREAM_CREATE, STDERR, STDIN, STDOUT } from
|
|
3
|
+
ioCall,
|
|
4
|
+
streams,
|
|
5
|
+
inputStreamCreate,
|
|
6
|
+
outputStreamCreate,
|
|
7
|
+
} from '../io/worker-io.js';
|
|
8
|
+
import { INPUT_STREAM_CREATE, STDERR, STDIN, STDOUT } from '../io/calls.js';
|
|
9
9
|
const { InputStream, OutputStream } = streams;
|
|
10
10
|
|
|
11
11
|
export const _appendEnv = (env) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
12
|
+
void (_env = [
|
|
13
|
+
..._env.filter(([curKey]) => !(curKey in env)),
|
|
14
|
+
...Object.entries(env),
|
|
15
|
+
]);
|
|
16
|
+
};
|
|
17
17
|
export const _setEnv = (env) => void (_env = Object.entries(env));
|
|
18
18
|
export const _setArgs = (args) => void (_args = args);
|
|
19
19
|
export const _setCwd = (cwd) => void (_cwd = cwd);
|
|
@@ -21,35 +21,35 @@ export const _setStdin = (stdin) => void (stdinStream = stdin);
|
|
|
21
21
|
export const _setStdout = (stdout) => void (stdoutStream = stdout);
|
|
22
22
|
export const _setStderr = (stderr) => void (stderrStream = stderr);
|
|
23
23
|
export const _setTerminalStdin = (terminalStdin) =>
|
|
24
|
-
|
|
24
|
+
void (terminalStdinInstance = terminalStdin);
|
|
25
25
|
export const _setTerminalStdout = (terminalStdout) =>
|
|
26
|
-
|
|
26
|
+
void (terminalStdoutInstance = terminalStdout);
|
|
27
27
|
export const _setTerminalStderr = (terminalStderr) =>
|
|
28
|
-
|
|
28
|
+
void (terminalStderrInstance = terminalStderr);
|
|
29
29
|
|
|
30
30
|
let _env = Object.entries(env),
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
_args = argv.slice(1),
|
|
32
|
+
_cwd = cwd();
|
|
33
33
|
|
|
34
34
|
export const environment = {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
35
|
+
getEnvironment() {
|
|
36
|
+
return _env;
|
|
37
|
+
},
|
|
38
|
+
getArguments() {
|
|
39
|
+
return _args;
|
|
40
|
+
},
|
|
41
|
+
initialCwd() {
|
|
42
|
+
return _cwd;
|
|
43
|
+
},
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
export const exit = {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
exit(status) {
|
|
48
|
+
process.exit(status.tag === 'err' ? 1 : 0);
|
|
49
|
+
},
|
|
50
|
+
exitWithCode(code) {
|
|
51
|
+
process.exit(code);
|
|
52
|
+
},
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
// Stdin is created as a FILE descriptor
|
|
@@ -58,29 +58,30 @@ let stdoutStream = outputStreamCreate(STDOUT, 1);
|
|
|
58
58
|
let stderrStream = outputStreamCreate(STDERR, 2);
|
|
59
59
|
|
|
60
60
|
export const stdin = {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
InputStream,
|
|
62
|
+
getStdin() {
|
|
63
|
+
if (!stdinStream) {
|
|
64
|
+
stdinStream = inputStreamCreate(
|
|
65
|
+
STDIN,
|
|
66
|
+
ioCall(INPUT_STREAM_CREATE | STDIN, null, null)
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
return stdinStream;
|
|
70
|
+
},
|
|
70
71
|
};
|
|
71
72
|
|
|
72
73
|
export const stdout = {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
OutputStream,
|
|
75
|
+
getStdout() {
|
|
76
|
+
return stdoutStream;
|
|
77
|
+
},
|
|
77
78
|
};
|
|
78
79
|
|
|
79
80
|
export const stderr = {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
OutputStream,
|
|
82
|
+
getStderr() {
|
|
83
|
+
return stderrStream;
|
|
84
|
+
},
|
|
84
85
|
};
|
|
85
86
|
|
|
86
87
|
class TerminalInput {}
|
|
@@ -91,30 +92,30 @@ let terminalStderrInstance = new TerminalOutput();
|
|
|
91
92
|
let terminalStdinInstance = new TerminalInput();
|
|
92
93
|
|
|
93
94
|
export const terminalInput = {
|
|
94
|
-
|
|
95
|
+
TerminalInput,
|
|
95
96
|
};
|
|
96
97
|
|
|
97
98
|
export const terminalOutput = {
|
|
98
|
-
|
|
99
|
+
TerminalOutput,
|
|
99
100
|
};
|
|
100
101
|
|
|
101
102
|
export const terminalStderr = {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
TerminalOutput,
|
|
104
|
+
getTerminalStderr() {
|
|
105
|
+
return terminalStderrInstance;
|
|
106
|
+
},
|
|
106
107
|
};
|
|
107
108
|
|
|
108
109
|
export const terminalStdin = {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
TerminalInput,
|
|
111
|
+
getTerminalStdin() {
|
|
112
|
+
return terminalStdinInstance;
|
|
113
|
+
},
|
|
113
114
|
};
|
|
114
115
|
|
|
115
116
|
export const terminalStdout = {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
TerminalOutput,
|
|
118
|
+
getTerminalStdout() {
|
|
119
|
+
return terminalStdoutInstance;
|
|
120
|
+
},
|
|
120
121
|
};
|
package/lib/nodejs/clocks.js
CHANGED
|
@@ -1,64 +1,70 @@
|
|
|
1
|
-
import { createPoll } from
|
|
1
|
+
import { createPoll } from '../io/worker-io.js';
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from
|
|
6
|
-
import { hrtime } from
|
|
3
|
+
CLOCKS_INSTANT_SUBSCRIBE,
|
|
4
|
+
CLOCKS_DURATION_SUBSCRIBE,
|
|
5
|
+
} from '../io/calls.js';
|
|
6
|
+
import { hrtime } from 'node:process';
|
|
7
7
|
|
|
8
|
-
const symbolCabiLower = Symbol.for(
|
|
8
|
+
const symbolCabiLower = Symbol.for('cabiLower');
|
|
9
9
|
|
|
10
10
|
function resolution() {
|
|
11
|
-
|
|
11
|
+
return 1n;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export const monotonicClock = {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
resolution,
|
|
16
|
+
now() {
|
|
17
|
+
return hrtime.bigint();
|
|
18
|
+
},
|
|
19
|
+
subscribeInstant(instant) {
|
|
20
|
+
return createPoll(CLOCKS_INSTANT_SUBSCRIBE, null, instant);
|
|
21
|
+
},
|
|
22
|
+
subscribeDuration(duration) {
|
|
23
|
+
duration = BigInt(duration);
|
|
24
|
+
return createPoll(CLOCKS_DURATION_SUBSCRIBE, null, duration);
|
|
25
|
+
},
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export const wallClock = {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
resolution() {
|
|
30
|
+
return { seconds: 0n, nanoseconds: 1e6 };
|
|
31
|
+
},
|
|
32
|
+
now() {
|
|
33
|
+
const seconds = BigInt(Math.floor(Date.now() / 1e3));
|
|
34
|
+
const nanoseconds = (Date.now() % 1e3) * 1e6;
|
|
35
|
+
return { seconds, nanoseconds };
|
|
36
|
+
},
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
monotonicClock.resolution[symbolCabiLower] = () => resolution;
|
|
40
40
|
monotonicClock.now[symbolCabiLower] = () => hrtime.bigint;
|
|
41
41
|
wallClock.resolution[symbolCabiLower] = ({ memory }) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
42
|
+
let buf32 = new Int32Array(memory.buffer);
|
|
43
|
+
return function now(retptr) {
|
|
44
|
+
if (memory.buffer !== buf32.buffer) {
|
|
45
|
+
buf32 = new Int32Array(memory.buffer);
|
|
46
|
+
}
|
|
47
|
+
if (retptr % 4) {
|
|
48
|
+
throw new Error('wasi-io trap: retptr not aligned');
|
|
49
|
+
}
|
|
50
|
+
buf32[(retptr >> 2) + 0] = 0;
|
|
51
|
+
buf32[(retptr >> 2) + 4] = 0;
|
|
52
|
+
buf32[(retptr >> 2) + 8] = 1_000_000;
|
|
53
|
+
};
|
|
50
54
|
};
|
|
51
55
|
|
|
52
56
|
wallClock.now[symbolCabiLower] = ({ memory }) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
let buf32 = new Int32Array(memory.buffer);
|
|
58
|
+
let buf64 = new BigInt64Array(memory.buffer);
|
|
59
|
+
return function now(retptr) {
|
|
60
|
+
if (memory.buffer !== buf32.buffer) {
|
|
61
|
+
buf32 = new Int32Array(memory.buffer);
|
|
62
|
+
buf64 = new BigInt64Array(memory.buffer);
|
|
63
|
+
}
|
|
64
|
+
if (retptr % 4) {
|
|
65
|
+
throw new Error('wasi-io trap: retptr not aligned');
|
|
66
|
+
}
|
|
67
|
+
buf64[(retptr >> 2) + 0] = BigInt(Math.floor(Date.now() / 1e3));
|
|
68
|
+
buf32[(retptr >> 2) + 8] = (Date.now() % 1e3) * 1e6;
|
|
69
|
+
};
|
|
64
70
|
};
|