@bytecodealliance/preview2-shim 0.18.1 → 0.20.0

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.
Files changed (82) hide show
  1. package/README.md +15 -15
  2. package/dist/browser/cli.d.ts +16 -0
  3. package/dist/browser/cli.js +109 -0
  4. package/dist/browser/clocks.d.ts +3 -0
  5. package/dist/browser/clocks.js +36 -0
  6. package/dist/browser/config.d.ts +2 -0
  7. package/{lib → dist}/browser/config.js +2 -4
  8. package/dist/browser/environment.d.ts +5 -0
  9. package/dist/browser/environment.js +24 -0
  10. package/dist/browser/filesystem.d.ts +132 -0
  11. package/dist/browser/filesystem.js +488 -0
  12. package/dist/browser/http.d.ts +4 -0
  13. package/dist/browser/http.js +643 -0
  14. package/dist/browser/index.d.ts +7 -0
  15. package/dist/browser/index.js +7 -0
  16. package/dist/browser/io.d.ts +58 -0
  17. package/dist/browser/io.js +205 -0
  18. package/dist/browser/random.d.ts +4 -0
  19. package/dist/browser/random.js +49 -0
  20. package/dist/browser/sockets.d.ts +8 -0
  21. package/dist/browser/sockets.js +66 -0
  22. package/dist/common/instantiation.d.ts +97 -0
  23. package/dist/common/instantiation.js +228 -0
  24. package/dist/io/calls.d.ts +91 -0
  25. package/{lib → dist}/io/calls.js +4 -19
  26. package/dist/io/worker-http.d.ts +17 -0
  27. package/dist/io/worker-http.js +192 -0
  28. package/dist/io/worker-io.d.ts +84 -0
  29. package/dist/io/worker-io.js +381 -0
  30. package/dist/io/worker-socket-tcp.d.ts +34 -0
  31. package/dist/io/worker-socket-tcp.js +251 -0
  32. package/dist/io/worker-socket-udp.d.ts +54 -0
  33. package/dist/io/worker-socket-udp.js +493 -0
  34. package/dist/io/worker-sockets.d.ts +32 -0
  35. package/dist/io/worker-sockets.js +265 -0
  36. package/dist/io/worker-thread.d.ts +73 -0
  37. package/dist/io/worker-thread.js +794 -0
  38. package/dist/nodejs/cli.d.ts +30 -0
  39. package/dist/nodejs/cli.js +86 -0
  40. package/dist/nodejs/clocks.d.ts +3 -0
  41. package/dist/nodejs/clocks.js +61 -0
  42. package/dist/nodejs/filesystem.d.ts +113 -0
  43. package/dist/nodejs/filesystem.js +761 -0
  44. package/dist/nodejs/http.d.ts +82 -0
  45. package/dist/nodejs/http.js +674 -0
  46. package/dist/nodejs/index.d.ts +7 -0
  47. package/dist/nodejs/index.js +7 -0
  48. package/dist/nodejs/io.d.ts +1 -0
  49. package/dist/nodejs/io.js +1 -0
  50. package/dist/nodejs/random.d.ts +4 -0
  51. package/dist/nodejs/random.js +42 -0
  52. package/dist/nodejs/sockets.d.ts +21 -0
  53. package/dist/nodejs/sockets.js +482 -0
  54. package/dist/synckit/index.d.ts +2 -0
  55. package/dist/synckit/index.js +117 -0
  56. package/package.json +28 -15
  57. package/types/instantiation.d.ts +7 -7
  58. package/lib/browser/cli.js +0 -135
  59. package/lib/browser/clocks.js +0 -39
  60. package/lib/browser/environment.js +0 -29
  61. package/lib/browser/filesystem.js +0 -503
  62. package/lib/browser/http.js +0 -707
  63. package/lib/browser/index.js +0 -9
  64. package/lib/browser/io.js +0 -262
  65. package/lib/browser/random.js +0 -56
  66. package/lib/browser/sockets.js +0 -88
  67. package/lib/common/instantiation.js +0 -253
  68. package/lib/io/worker-http.js +0 -206
  69. package/lib/io/worker-io.js +0 -468
  70. package/lib/io/worker-socket-tcp.js +0 -331
  71. package/lib/io/worker-socket-udp.js +0 -587
  72. package/lib/io/worker-sockets.js +0 -364
  73. package/lib/io/worker-thread.js +0 -1051
  74. package/lib/nodejs/cli.js +0 -109
  75. package/lib/nodejs/clocks.js +0 -67
  76. package/lib/nodejs/filesystem.js +0 -829
  77. package/lib/nodejs/http.js +0 -764
  78. package/lib/nodejs/index.js +0 -9
  79. package/lib/nodejs/io.js +0 -1
  80. package/lib/nodejs/random.js +0 -49
  81. package/lib/nodejs/sockets.js +0 -565
  82. package/lib/synckit/index.js +0 -127
@@ -1,364 +0,0 @@
1
- import { isIP } from "node:net";
2
- import { lookup } from "node:dns/promises";
3
- import { Socket } from "node:dgram";
4
- import {
5
- ALL,
6
- BADFAMILY,
7
- CANCELLED,
8
- CONNREFUSED,
9
- NODATA,
10
- NOMEM,
11
- NONAME,
12
- NOTFOUND,
13
- REFUSED,
14
- SERVFAIL,
15
- TIMEOUT,
16
- V4MAPPED,
17
- } from "node:dns";
18
- import {
19
- EACCES,
20
- EADDRINUSE,
21
- EADDRNOTAVAIL,
22
- EALREADY,
23
- EBADF,
24
- ECONNABORTED,
25
- ECONNREFUSED,
26
- ECONNRESET,
27
- EINVAL,
28
- ENOBUFS,
29
- ENOMEM,
30
- ENOTCONN,
31
- ENOTSUP,
32
- EPERM,
33
- EWOULDBLOCK,
34
- } from "node:constants";
35
-
36
- let stateCnt = 0;
37
- export const SOCKET_STATE_INIT = ++stateCnt;
38
- export const SOCKET_STATE_BIND = ++stateCnt;
39
- export const SOCKET_STATE_BOUND = ++stateCnt;
40
- export const SOCKET_STATE_LISTEN = ++stateCnt;
41
- export const SOCKET_STATE_LISTENER = ++stateCnt;
42
- export const SOCKET_STATE_CONNECT = ++stateCnt;
43
- export const SOCKET_STATE_CONNECTION = ++stateCnt;
44
- export const SOCKET_STATE_CLOSED = ++stateCnt;
45
-
46
- const dnsLookupOptions = {
47
- verbatim: true,
48
- all: true,
49
- hints: V4MAPPED | ALL,
50
- };
51
-
52
- export function noLookup(ip, _opts, cb) {
53
- cb(null, ip);
54
- }
55
-
56
- export function socketResolveAddress(name) {
57
- const isIpNum = isIP(name[0] === "[" && name[name.length - 1] === "]" ? name.slice(1, -1) : name);
58
- if (isIpNum > 0) {
59
- return Promise.resolve([
60
- {
61
- tag: "ipv" + isIpNum,
62
- val: (isIpNum === 4 ? ipv4ToTuple : ipv6ToTuple)(name),
63
- },
64
- ]);
65
- }
66
- // verify it is a valid domain name using the URL parser
67
- let parsedUrl = null;
68
- try {
69
- parsedUrl = new URL(`https://${name}`);
70
- if (
71
- parsedUrl.port.length ||
72
- parsedUrl.username.length ||
73
- parsedUrl.password.length ||
74
- parsedUrl.pathname !== "/" ||
75
- parsedUrl.search.length ||
76
- parsedUrl.hash.length
77
- ) {
78
- parsedUrl = null;
79
- }
80
- } catch {
81
- // empty
82
- }
83
- if (!parsedUrl) {
84
- throw "invalid-argument";
85
- }
86
-
87
- return lookup(name, dnsLookupOptions).then(
88
- (addresses) => {
89
- return addresses.map(({ address, family }) => {
90
- return [
91
- {
92
- tag: "ipv" + family,
93
- val: (family === 4 ? ipv4ToTuple : ipv6ToTuple)(address),
94
- },
95
- ];
96
- });
97
- },
98
- (err) => {
99
- switch (err.code) {
100
- // TODO: verify these more carefully
101
- case NODATA:
102
- case BADFAMILY:
103
- case NONAME:
104
- case NOTFOUND:
105
- throw "name-unresolvable";
106
- case TIMEOUT:
107
- case REFUSED:
108
- case CONNREFUSED:
109
- case SERVFAIL:
110
- case NOMEM:
111
- case CANCELLED:
112
- throw "temporary-resolver-failure";
113
- default:
114
- throw "permanent-resolver-failure";
115
- }
116
- },
117
- );
118
- }
119
-
120
- export function convertSocketError(err) {
121
- switch (err?.code) {
122
- case "EBADF":
123
- case "ENOTCONN":
124
- case "ERR_SOCKET_DGRAM_NOT_CONNECTED":
125
- return "invalid-state";
126
- case "EACCES":
127
- case "EPERM":
128
- return "access-denied";
129
- case "ENOTSUP":
130
- return "not-supported";
131
- case "EINVAL":
132
- return "invalid-argument";
133
- case "ENOMEM":
134
- case "ENOBUFS":
135
- return "out-of-memory";
136
- case "EALREADY":
137
- return "concurrency-conflict";
138
- case "EWOULDBLOCK":
139
- return "would-block";
140
- // TODO: return "new-socket-limit";
141
- case "EADDRNOTAVAIL":
142
- return "address-not-bindable";
143
- case "EADDRINUSE":
144
- return "address-in-use";
145
- // TODO: return "remote-unreachable";
146
- case "ECONNREFUSED":
147
- return "connection-refused";
148
- case "ECONNRESET":
149
- return "connection-reset";
150
- case "ECONNABORTED":
151
- return "connection-aborted";
152
- default:
153
- return "unknown";
154
- }
155
- }
156
-
157
- export function convertSocketErrorCode(code) {
158
- switch (code) {
159
- case 4053: // windows
160
- case 4083:
161
- case ENOTCONN:
162
- case EBADF:
163
- return "invalid-state";
164
- case EACCES:
165
- case EPERM:
166
- return "access-denied";
167
- case ENOTSUP:
168
- return "not-supported";
169
- case EINVAL:
170
- return "invalid-argument";
171
- case ENOMEM:
172
- case ENOBUFS:
173
- return "out-of-memory";
174
- case EALREADY:
175
- return "concurrency-conflict";
176
- case EWOULDBLOCK:
177
- return "would-block";
178
- // TODO: return "new-socket-limit";
179
- case 4090: // windows
180
- case EADDRNOTAVAIL:
181
- return "address-not-bindable";
182
- case 4091: // windows
183
- case EADDRINUSE:
184
- return "address-in-use";
185
- // TODO: return "remote-unreachable";
186
- case ECONNREFUSED:
187
- return "connection-refused";
188
- case ECONNRESET:
189
- return "connection-reset";
190
- case ECONNABORTED:
191
- return "connection-aborted";
192
- // TODO: return "datagram-too-large";
193
- // TODO: return "name-unresolvable";
194
- // TODO: return "temporary-resolver-failure";
195
- default:
196
- // process._rawDebug('unknown error code', code);
197
- return "unknown";
198
- }
199
- }
200
-
201
- /**
202
- * @typedef {import("../../../types/interfaces/wasi-sockets-network.js").IpSocketAddress} IpSocketAddress
203
- * @typedef {import("../../../types/interfaces/wasi-sockets-tcp.js").IpAddressFamily} IpAddressFamily
204
- * @typedef {import("../../../types/interfaces/wasi-sockets-tcp").TcpSocket} TcpSocket
205
- * @typedef {import("../../../types/interfaces/wasi-sockets-udp").UdpSocket} UdpSocket
206
- */
207
-
208
- export function tupleToIPv6(arr) {
209
- if (arr.length !== 8) {
210
- return null;
211
- }
212
- return arr.map((segment) => segment.toString(16)).join(":");
213
- }
214
-
215
- export function tupleToIpv4(arr) {
216
- if (arr.length !== 4) {
217
- return null;
218
- }
219
- return arr.map((segment) => segment.toString(10)).join(".");
220
- }
221
-
222
- /**
223
- * @param {IpSocketAddress} ipSocketAddress
224
- * @returns {boolean}
225
- */
226
- export function isMulticastIpAddress(ipSocketAddress) {
227
- return (
228
- (ipSocketAddress.tag === "ipv4" && ipSocketAddress.val.address[0] === 0xe0) ||
229
- (ipSocketAddress.tag === "ipv6" && ipSocketAddress.val.address[0] === 0xff00)
230
- );
231
- }
232
-
233
- /**
234
- * @param {IpSocketAddress} ipSocketAddress
235
- * @returns {boolean}
236
- */
237
- export function isIPv4MappedAddress(ipSocketAddress) {
238
- return ipSocketAddress.tag === "ipv6" && ipSocketAddress.val.address[5] === 0xffff;
239
- }
240
-
241
- /**
242
- * @param {IpSocketAddress} ipSocketAddress
243
- * @returns {boolean}
244
- */
245
- export function isUnicastIpAddress(ipSocketAddress) {
246
- return !isMulticastIpAddress(ipSocketAddress) && !isBroadcastIpAddress(ipSocketAddress);
247
- }
248
-
249
- /**
250
- * @param {IpSocketAddress} isWildcardAddress
251
- * @returns {boolean}
252
- */
253
- export function isWildcardAddress(ipSocketAddress) {
254
- const { address } = ipSocketAddress.val;
255
- if (ipSocketAddress.tag === "ipv4") {
256
- return address[0] === 0 && address[1] === 0 && address[2] === 0 && address[3] === 0;
257
- } else {
258
- return (
259
- address[0] === 0 &&
260
- address[1] === 0 &&
261
- address[2] === 0 &&
262
- address[3] === 0 &&
263
- address[4] === 0 &&
264
- address[5] === 0 &&
265
- address[6] === 0 &&
266
- address[7] === 0
267
- );
268
- }
269
- }
270
-
271
- /**
272
- * @param {IpSocketAddress} isWildcardAddress
273
- * @returns {boolean}
274
- */
275
- export function isBroadcastIpAddress(ipSocketAddress) {
276
- const { address } = ipSocketAddress.val;
277
- return (
278
- ipSocketAddress.tag === "ipv4" &&
279
- address[0] === 0xff &&
280
- address[1] === 0xff &&
281
- address[2] === 0xff &&
282
- address[3] === 0xff
283
- );
284
- }
285
-
286
- /**
287
- *
288
- * @param {IpSocketAddress} addr
289
- * @param {boolean} includePort
290
- * @returns {string}
291
- */
292
- export function serializeIpAddress(addr) {
293
- if (addr.tag === "ipv4") {
294
- return tupleToIpv4(addr.val.address);
295
- }
296
- return tupleToIPv6(addr.val.address);
297
- }
298
-
299
- export function ipv6ToTuple(ipv6) {
300
- const [lhs, rhs = ""] = ipv6.includes("::") ? ipv6.split("::") : [ipv6];
301
- const lhsParts = lhs === "" ? [] : lhs.split(":");
302
- const rhsParts = rhs === "" ? [] : rhs.split(":");
303
- return [...lhsParts, ...Array(8 - lhsParts.length - rhsParts.length).fill(0), ...rhsParts].map(
304
- (segment) => parseInt(segment, 16),
305
- );
306
- }
307
-
308
- export function ipv4ToTuple(ipv4) {
309
- return ipv4.split(".").map((segment) => parseInt(segment, 10));
310
- }
311
-
312
- /**
313
- *
314
- * @param {string} addr
315
- * @param {IpAddressFamily} family
316
- * @returns {IpSocketAddress}
317
- */
318
- export function ipSocketAddress(family, addr, port) {
319
- if (family === "ipv4") {
320
- return {
321
- tag: "ipv4",
322
- val: {
323
- port,
324
- address: ipv4ToTuple(addr),
325
- },
326
- };
327
- }
328
- return {
329
- tag: "ipv6",
330
- val: {
331
- port,
332
- flowInfo: 0,
333
- address: ipv6ToTuple(addr),
334
- scopeId: 0,
335
- },
336
- };
337
- }
338
-
339
- let _recvBufferSize, _sendBufferSize;
340
- async function getDefaultBufferSizes() {
341
- var s = new Socket({ type: "udp4" });
342
- s.bind(0);
343
- await new Promise((resolve, reject) => {
344
- s.once("error", reject);
345
- s.once("listening", resolve);
346
- });
347
- _recvBufferSize = BigInt(s.getRecvBufferSize());
348
- _sendBufferSize = BigInt(s.getSendBufferSize());
349
- s.close();
350
- }
351
-
352
- export async function getDefaultSendBufferSize() {
353
- if (!_sendBufferSize) {
354
- await getDefaultBufferSizes();
355
- }
356
- return _sendBufferSize;
357
- }
358
-
359
- export async function getDefaultReceiveBufferSize() {
360
- if (!_recvBufferSize) {
361
- await getDefaultBufferSizes();
362
- }
363
- return _recvBufferSize;
364
- }