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