@bytecodealliance/preview2-shim 0.17.7 → 0.17.9

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.
@@ -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,164 +44,158 @@ 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] === ']'
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
86
- }
87
- if (!parsedUrl) {
88
- throw 'invalid-argument';
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;
89
79
  }
80
+ } catch {
81
+ // empty
82
+ }
83
+ if (!parsedUrl) {
84
+ throw "invalid-argument";
85
+ }
90
86
 
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
- );
87
+ return lookup(name, dnsLookupOptions).then(
88
+ (addresses) => {
89
+ return addresses.map(({ address, family }) => {
90
+ [
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
+ );
124
118
  }
125
119
 
126
120
  export function convertSocketError(err) {
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';
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";
158
152
  default:
159
- return 'unknown';
160
- }
153
+ return "unknown";
154
+ }
161
155
  }
162
156
 
163
157
  export function convertSocketErrorCode(code) {
164
- switch (code) {
158
+ switch (code) {
165
159
  case 4053: // windows
166
160
  case 4083:
167
161
  case ENOTCONN:
168
162
  case EBADF:
169
- return 'invalid-state';
163
+ return "invalid-state";
170
164
  case EACCES:
171
165
  case EPERM:
172
- return 'access-denied';
166
+ return "access-denied";
173
167
  case ENOTSUP:
174
- return 'not-supported';
168
+ return "not-supported";
175
169
  case EINVAL:
176
- return 'invalid-argument';
170
+ return "invalid-argument";
177
171
  case ENOMEM:
178
172
  case ENOBUFS:
179
- return 'out-of-memory';
173
+ return "out-of-memory";
180
174
  case EALREADY:
181
- return 'concurrency-conflict';
175
+ return "concurrency-conflict";
182
176
  case EWOULDBLOCK:
183
- return 'would-block';
184
- // TODO: return "new-socket-limit";
177
+ return "would-block";
178
+ // TODO: return "new-socket-limit";
185
179
  case 4090: // windows
186
180
  case EADDRNOTAVAIL:
187
- return 'address-not-bindable';
181
+ return "address-not-bindable";
188
182
  case 4091: // windows
189
183
  case EADDRINUSE:
190
- return 'address-in-use';
191
- // TODO: return "remote-unreachable";
184
+ return "address-in-use";
185
+ // TODO: return "remote-unreachable";
192
186
  case ECONNREFUSED:
193
- return 'connection-refused';
187
+ return "connection-refused";
194
188
  case ECONNRESET:
195
- return 'connection-reset';
189
+ return "connection-reset";
196
190
  case ECONNABORTED:
197
- return 'connection-aborted';
198
- // TODO: return "datagram-too-large";
199
- // TODO: return "name-unresolvable";
200
- // TODO: return "temporary-resolver-failure";
191
+ return "connection-aborted";
192
+ // TODO: return "datagram-too-large";
193
+ // TODO: return "name-unresolvable";
194
+ // TODO: return "temporary-resolver-failure";
201
195
  default:
202
- // process._rawDebug('unknown error code', code);
203
- return 'unknown';
204
- }
196
+ // process._rawDebug('unknown error code', code);
197
+ return "unknown";
198
+ }
205
199
  }
206
200
 
207
201
  /**
@@ -212,17 +206,17 @@ export function convertSocketErrorCode(code) {
212
206
  */
213
207
 
214
208
  export function tupleToIPv6(arr) {
215
- if (arr.length !== 8) {
216
- return null;
217
- }
218
- return arr.map((segment) => segment.toString(16)).join(':');
209
+ if (arr.length !== 8) {
210
+ return null;
211
+ }
212
+ return arr.map((segment) => segment.toString(16)).join(":");
219
213
  }
220
214
 
221
215
  export function tupleToIpv4(arr) {
222
- if (arr.length !== 4) {
223
- return null;
224
- }
225
- return arr.map((segment) => segment.toString(10)).join('.');
216
+ if (arr.length !== 4) {
217
+ return null;
218
+ }
219
+ return arr.map((segment) => segment.toString(10)).join(".");
226
220
  }
227
221
 
228
222
  /**
@@ -230,12 +224,10 @@ export function tupleToIpv4(arr) {
230
224
  * @returns {boolean}
231
225
  */
232
226
  export function isMulticastIpAddress(ipSocketAddress) {
233
- return (
234
- (ipSocketAddress.tag === 'ipv4' &&
235
- ipSocketAddress.val.address[0] === 0xe0) ||
236
- (ipSocketAddress.tag === 'ipv6' &&
237
- ipSocketAddress.val.address[0] === 0xff00)
238
- );
227
+ return (
228
+ (ipSocketAddress.tag === "ipv4" && ipSocketAddress.val.address[0] === 0xe0) ||
229
+ (ipSocketAddress.tag === "ipv6" && ipSocketAddress.val.address[0] === 0xff00)
230
+ );
239
231
  }
240
232
 
241
233
  /**
@@ -243,10 +235,7 @@ export function isMulticastIpAddress(ipSocketAddress) {
243
235
  * @returns {boolean}
244
236
  */
245
237
  export function isIPv4MappedAddress(ipSocketAddress) {
246
- return (
247
- ipSocketAddress.tag === 'ipv6' &&
248
- ipSocketAddress.val.address[5] === 0xffff
249
- );
238
+ return ipSocketAddress.tag === "ipv6" && ipSocketAddress.val.address[5] === 0xffff;
250
239
  }
251
240
 
252
241
  /**
@@ -254,10 +243,7 @@ export function isIPv4MappedAddress(ipSocketAddress) {
254
243
  * @returns {boolean}
255
244
  */
256
245
  export function isUnicastIpAddress(ipSocketAddress) {
257
- return (
258
- !isMulticastIpAddress(ipSocketAddress) &&
259
- !isBroadcastIpAddress(ipSocketAddress)
260
- );
246
+ return !isMulticastIpAddress(ipSocketAddress) && !isBroadcastIpAddress(ipSocketAddress);
261
247
  }
262
248
 
263
249
  /**
@@ -265,26 +251,21 @@ export function isUnicastIpAddress(ipSocketAddress) {
265
251
  * @returns {boolean}
266
252
  */
267
253
  export function isWildcardAddress(ipSocketAddress) {
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
- }
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
+ }
288
269
  }
289
270
 
290
271
  /**
@@ -292,14 +273,14 @@ export function isWildcardAddress(ipSocketAddress) {
292
273
  * @returns {boolean}
293
274
  */
294
275
  export function isBroadcastIpAddress(ipSocketAddress) {
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
- );
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
+ );
303
284
  }
304
285
 
305
286
  /**
@@ -309,25 +290,23 @@ export function isBroadcastIpAddress(ipSocketAddress) {
309
290
  * @returns {string}
310
291
  */
311
292
  export function serializeIpAddress(addr) {
312
- if (addr.tag === 'ipv4') {
313
- return tupleToIpv4(addr.val.address);
314
- }
315
- return tupleToIPv6(addr.val.address);
293
+ if (addr.tag === "ipv4") {
294
+ return tupleToIpv4(addr.val.address);
295
+ }
296
+ return tupleToIPv6(addr.val.address);
316
297
  }
317
298
 
318
299
  export function ipv6ToTuple(ipv6) {
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));
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
+ );
327
306
  }
328
307
 
329
308
  export function ipv4ToTuple(ipv4) {
330
- return ipv4.split('.').map((segment) => parseInt(segment, 10));
309
+ return ipv4.split(".").map((segment) => parseInt(segment, 10));
331
310
  }
332
311
 
333
312
  /**
@@ -337,49 +316,49 @@ export function ipv4ToTuple(ipv4) {
337
316
  * @returns {IpSocketAddress}
338
317
  */
339
318
  export function ipSocketAddress(family, addr, port) {
340
- if (family === 'ipv4') {
341
- return {
342
- tag: 'ipv4',
343
- val: {
344
- port,
345
- address: ipv4ToTuple(addr),
346
- },
347
- };
348
- }
319
+ if (family === "ipv4") {
349
320
  return {
350
- tag: 'ipv6',
351
- val: {
352
- port,
353
- flowInfo: 0,
354
- address: ipv6ToTuple(addr),
355
- scopeId: 0,
356
- },
321
+ tag: "ipv4",
322
+ val: {
323
+ port,
324
+ address: ipv4ToTuple(addr),
325
+ },
357
326
  };
327
+ }
328
+ return {
329
+ tag: "ipv6",
330
+ val: {
331
+ port,
332
+ flowInfo: 0,
333
+ address: ipv6ToTuple(addr),
334
+ scopeId: 0,
335
+ },
336
+ };
358
337
  }
359
338
 
360
339
  let _recvBufferSize, _sendBufferSize;
361
340
  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();
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();
371
350
  }
372
351
 
373
352
  export async function getDefaultSendBufferSize() {
374
- if (!_sendBufferSize) {
375
- await getDefaultBufferSizes();
376
- }
377
- return _sendBufferSize;
353
+ if (!_sendBufferSize) {
354
+ await getDefaultBufferSizes();
355
+ }
356
+ return _sendBufferSize;
378
357
  }
379
358
 
380
359
  export async function getDefaultReceiveBufferSize() {
381
- if (!_recvBufferSize) {
382
- await getDefaultBufferSizes();
383
- }
384
- return _recvBufferSize;
360
+ if (!_recvBufferSize) {
361
+ await getDefaultBufferSizes();
362
+ }
363
+ return _recvBufferSize;
385
364
  }