@bytecodealliance/jco 0.14.1 → 0.14.2

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/README.md CHANGED
@@ -10,17 +10,24 @@
10
10
  <p>
11
11
  <a href="https://github.com/bytecodealliance/jco/actions?query=workflow%3ACI"><img src="https://github.com/bytecodealliance/jco/workflows/CI/badge.svg" alt="build status" /></a>
12
12
  </p>
13
+
14
+ <h3>
15
+ <a href="https://bytecodealliance.github.io/jco/">Contributing</a>
16
+ <span> | </span>
17
+ <a href="https://bytecodealliance.zulipchat.com/#narrow/stream/409526-jco">Chat on Zulip</a>
18
+ </h3>
13
19
  </div>
14
20
 
15
21
  ## Overview
16
22
 
17
- `jco` is a fully native JS tool for working with [WebAssembly Components](https://github.com/WebAssembly/component-model) in JavaScript.
23
+ JCO provides a fully native JS toolchain for working with [WebAssembly Components](https://github.com/WebAssembly/component-model) in JavaScript.
18
24
 
19
25
  Features include:
20
26
 
21
27
  * "Transpiling" Wasm Component binaries into ES modules that can run in any JS environment.
22
28
  * WASI Preview2 support in Node.js ([undergoing stabilization](https://github.com/bytecodealliance/jco/milestone/1)) & browsers (experimental).
23
29
  * Component builds of [Wasm Tools](https://github.com/bytecodealliance/wasm-tools) helpers, available for use as a library or CLI commands for use in native JS environments, as well as optimization helper for Components via Binaryen.
30
+ * Run and serve commands like Wasmtime, as JS implementations of the Command and HTTP Proxy worlds.
24
31
  * "Componentize" command to easily create components written in JavaScript (wrapper of [ComponentizeJS](https://github.com/bytecodealliance/ComponentizeJS)).
25
32
 
26
33
  For creating components in other languages, see the [Cargo Component](https://github.com/bytecodealliance/cargo-Component) project for Rust and [Wit Bindgen](https://github.com/bytecodealliance/wit-bindgen) for various guest bindgen helpers.
@@ -33,7 +40,7 @@ For creating components in other languages, see the [Cargo Component](https://gi
33
40
  npm install @bytecodealliance/jco
34
41
  ```
35
42
 
36
- jco can be used as either a library or a CLI via the `jco` CLI command.
43
+ JCO can be used as either a library import or as a CLI via the `jco` command.
37
44
 
38
45
  ## Example
39
46
 
@@ -54,7 +61,8 @@ Options:
54
61
  Commands:
55
62
  componentize [options] <js-source> Create a component from a JavaScript module
56
63
  transpile [options] <component-path> Transpile a WebAssembly Component to JS + core Wasm for JavaScript execution
57
- run <command> [args...] Run a WebAssembly Command component
64
+ run [options] <command> [args...] Run a WASI Command component
65
+ serve [options] <command> [args...] Serve a WASI HTTP component
58
66
  opt [options] <component-file> optimizes a Wasm component, including running wasm-opt Binaryen optimizations
59
67
  wit [options] <component-path> extract the WIT from a WebAssembly Component [wasm-tools component wit]
60
68
  print [options] <input> print the WebAssembly WAT text for a binary file [wasm-tools print]
@@ -110,9 +118,9 @@ Options include:
110
118
 
111
119
  To directly call into the transpilation in Rust, the bindgen used in jco is also available on crates.io as [js-component-bindgen](https://crates.io/crates/js-component-bindgen).
112
120
 
113
- ### Run
121
+ ### Run & Serve
114
122
 
115
- For Wasm components that implement the WASI Command world, a `jco run` utility is provided to run these applications in Node.js:
123
+ For Wasm components that implement the WASI Command world, a `jco run` utility is provided to run these applications in Node.js.
116
124
 
117
125
  ```
118
126
  jco run cowasy.component.wasm hello
@@ -120,7 +128,13 @@ jco run cowasy.component.wasm hello
120
128
 
121
129
  Using the preview2-shim WASI implementation, full access to the underlying system primitives is provided, including filesystem and environment variable permissions.
122
130
 
123
- > [preview2-shim](packages/preview2-shim) is currently being stabilized in Node.js, tracking in https://github.com/bytecodealliance/jco/milestone/1.
131
+ For HTTP Proxy components, `jco serve` provides a JS server implementation:
132
+
133
+ ```
134
+ jco serve --port 8080 server.wasm
135
+ ```
136
+
137
+ > [Wasmtime](https://github.com/bytecodealliance/wasmtime) generally provides the most performant implementation for executing command and proxy worlds to use. These implementations are rather for when JS virtualization is required or the most convenient approach.
124
138
 
125
139
  ### Componentize
126
140
 
@@ -69,7 +69,6 @@ import { WasiFilesystemTypes } from './interfaces/wasi-filesystem-types.js';
69
69
  import { WasiIoError } from './interfaces/wasi-io-error.js';
70
70
  import { WasiIoStreams } from './interfaces/wasi-io-streams.js';
71
71
  import { WasiRandomRandom } from './interfaces/wasi-random-random.js';
72
- import { WasiSocketsTcp } from './interfaces/wasi-sockets-tcp.js';
73
72
  export function generate(component: Uint8Array, options: GenerateOptions): Transpiled;
74
73
  export function generateTypes(name: string, options: TypeGenerationOptions): Files;
75
74
 
@@ -97,7 +97,7 @@ function utf8Encode(s, realloc, memory) {
97
97
  let exports0;
98
98
  let exports1;
99
99
 
100
- function trampoline8() {
100
+ function trampoline7() {
101
101
  const ret = getStderr();
102
102
  if (!(ret instanceof OutputStream)) {
103
103
  throw new Error('Resource error: Not a valid "OutputStream" resource.');
@@ -107,7 +107,7 @@ function trampoline8() {
107
107
  return handle0;
108
108
  }
109
109
 
110
- function trampoline9(arg0) {
110
+ function trampoline8(arg0) {
111
111
  let variant0;
112
112
  switch (arg0) {
113
113
  case 0: {
@@ -131,7 +131,7 @@ function trampoline9(arg0) {
131
131
  exit(variant0);
132
132
  }
133
133
 
134
- function trampoline10() {
134
+ function trampoline9() {
135
135
  const ret = getStdin();
136
136
  if (!(ret instanceof InputStream)) {
137
137
  throw new Error('Resource error: Not a valid "InputStream" resource.');
@@ -141,7 +141,7 @@ function trampoline10() {
141
141
  return handle0;
142
142
  }
143
143
 
144
- function trampoline11() {
144
+ function trampoline10() {
145
145
  const ret = getStdout();
146
146
  if (!(ret instanceof OutputStream)) {
147
147
  throw new Error('Resource error: Not a valid "OutputStream" resource.');
@@ -152,7 +152,7 @@ function trampoline11() {
152
152
  }
153
153
  let exports2;
154
154
 
155
- function trampoline12(arg0) {
155
+ function trampoline11(arg0) {
156
156
  const ret = getDirectories();
157
157
  var vec3 = ret;
158
158
  var len3 = vec3.length;
@@ -163,8 +163,8 @@ function trampoline12(arg0) {
163
163
  if (!(tuple0_0 instanceof Descriptor)) {
164
164
  throw new Error('Resource error: Not a valid "Descriptor" resource.');
165
165
  }
166
- var handle1 = handleCnt3++;
167
- handleTable3.set(handle1, { rep: tuple0_0, own: true });
166
+ var handle1 = handleCnt5++;
167
+ handleTable5.set(handle1, { rep: tuple0_0, own: true });
168
168
  dataView(memory0).setInt32(base + 0, handle1, true);
169
169
  var ptr2 = utf8Encode(tuple0_1, realloc0, memory0);
170
170
  var len2 = utf8EncodedLen;
@@ -177,9 +177,9 @@ function trampoline12(arg0) {
177
177
  let memory0;
178
178
  let realloc0;
179
179
 
180
- function trampoline13(arg0, arg1, arg2) {
180
+ function trampoline12(arg0, arg1, arg2) {
181
181
  var handle1 = arg0;
182
- var rsc0 = handleTable3.get(handle1).rep;
182
+ var rsc0 = handleTable5.get(handle1).rep;
183
183
  let ret;
184
184
  try {
185
185
  ret = { tag: 'ok', val: Descriptor.prototype.readViaStream.call(rsc0, BigInt.asUintN(64, arg1)) };
@@ -370,9 +370,9 @@ function trampoline13(arg0, arg1, arg2) {
370
370
  }
371
371
  }
372
372
 
373
- function trampoline14(arg0, arg1, arg2) {
373
+ function trampoline13(arg0, arg1, arg2) {
374
374
  var handle1 = arg0;
375
- var rsc0 = handleTable3.get(handle1).rep;
375
+ var rsc0 = handleTable5.get(handle1).rep;
376
376
  let ret;
377
377
  try {
378
378
  ret = { tag: 'ok', val: Descriptor.prototype.writeViaStream.call(rsc0, BigInt.asUintN(64, arg1)) };
@@ -563,9 +563,9 @@ function trampoline14(arg0, arg1, arg2) {
563
563
  }
564
564
  }
565
565
 
566
- function trampoline15(arg0, arg1) {
566
+ function trampoline14(arg0, arg1) {
567
567
  var handle1 = arg0;
568
- var rsc0 = handleTable3.get(handle1).rep;
568
+ var rsc0 = handleTable5.get(handle1).rep;
569
569
  let ret;
570
570
  try {
571
571
  ret = { tag: 'ok', val: Descriptor.prototype.appendViaStream.call(rsc0) };
@@ -756,9 +756,9 @@ function trampoline15(arg0, arg1) {
756
756
  }
757
757
  }
758
758
 
759
- function trampoline16(arg0, arg1) {
759
+ function trampoline15(arg0, arg1) {
760
760
  var handle1 = arg0;
761
- var rsc0 = handleTable3.get(handle1).rep;
761
+ var rsc0 = handleTable5.get(handle1).rep;
762
762
  let ret;
763
763
  try {
764
764
  ret = { tag: 'ok', val: Descriptor.prototype.getType.call(rsc0) };
@@ -987,9 +987,9 @@ function trampoline16(arg0, arg1) {
987
987
  }
988
988
  }
989
989
 
990
- function trampoline17(arg0, arg1) {
990
+ function trampoline16(arg0, arg1) {
991
991
  var handle1 = arg0;
992
- var rsc0 = handleTable3.get(handle1).rep;
992
+ var rsc0 = handleTable5.get(handle1).rep;
993
993
  let ret;
994
994
  try {
995
995
  ret = { tag: 'ok', val: Descriptor.prototype.stat.call(rsc0) };
@@ -1251,9 +1251,9 @@ function trampoline17(arg0, arg1) {
1251
1251
  }
1252
1252
  }
1253
1253
 
1254
- function trampoline18(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
1254
+ function trampoline17(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
1255
1255
  var handle1 = arg0;
1256
- var rsc0 = handleTable3.get(handle1).rep;
1256
+ var rsc0 = handleTable5.get(handle1).rep;
1257
1257
  if ((arg1 & 4294967294) !== 0) {
1258
1258
  throw new TypeError('flags have extraneous bits set');
1259
1259
  }
@@ -1297,8 +1297,8 @@ function trampoline18(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
1297
1297
  if (!(e instanceof Descriptor)) {
1298
1298
  throw new Error('Resource error: Not a valid "Descriptor" resource.');
1299
1299
  }
1300
- var handle6 = handleCnt3++;
1301
- handleTable3.set(handle6, { rep: e, own: true });
1300
+ var handle6 = handleCnt5++;
1301
+ handleTable5.set(handle6, { rep: e, own: true });
1302
1302
  dataView(memory0).setInt32(arg6 + 4, handle6, true);
1303
1303
  break;
1304
1304
  }
@@ -1473,9 +1473,9 @@ function trampoline18(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
1473
1473
  }
1474
1474
  }
1475
1475
 
1476
- function trampoline19(arg0, arg1) {
1476
+ function trampoline18(arg0, arg1) {
1477
1477
  var handle1 = arg0;
1478
- var rsc0 = handleTable3.get(handle1).rep;
1478
+ var rsc0 = handleTable5.get(handle1).rep;
1479
1479
  let ret;
1480
1480
  try {
1481
1481
  ret = { tag: 'ok', val: Descriptor.prototype.metadataHash.call(rsc0) };
@@ -1663,7 +1663,7 @@ function trampoline19(arg0, arg1) {
1663
1663
  }
1664
1664
  }
1665
1665
 
1666
- function trampoline20(arg0, arg1) {
1666
+ function trampoline19(arg0, arg1) {
1667
1667
  var handle1 = arg0;
1668
1668
  var rsc0 = handleTable0.get(handle1).rep;
1669
1669
  const ret = filesystemErrorCode(rsc0);
@@ -1836,7 +1836,7 @@ function trampoline20(arg0, arg1) {
1836
1836
  }
1837
1837
  }
1838
1838
 
1839
- function trampoline21(arg0, arg1, arg2) {
1839
+ function trampoline20(arg0, arg1, arg2) {
1840
1840
  var handle1 = arg0;
1841
1841
  var rsc0 = handleTable1.get(handle1).rep;
1842
1842
  let ret;
@@ -1891,7 +1891,7 @@ function trampoline21(arg0, arg1, arg2) {
1891
1891
  }
1892
1892
  }
1893
1893
 
1894
- function trampoline22(arg0, arg1, arg2) {
1894
+ function trampoline21(arg0, arg1, arg2) {
1895
1895
  var handle1 = arg0;
1896
1896
  var rsc0 = handleTable1.get(handle1).rep;
1897
1897
  let ret;
@@ -1946,7 +1946,7 @@ function trampoline22(arg0, arg1, arg2) {
1946
1946
  }
1947
1947
  }
1948
1948
 
1949
- function trampoline23(arg0, arg1) {
1949
+ function trampoline22(arg0, arg1) {
1950
1950
  var handle1 = arg0;
1951
1951
  var rsc0 = handleTable2.get(handle1).rep;
1952
1952
  let ret;
@@ -1995,7 +1995,7 @@ function trampoline23(arg0, arg1) {
1995
1995
  }
1996
1996
  }
1997
1997
 
1998
- function trampoline24(arg0, arg1, arg2, arg3) {
1998
+ function trampoline23(arg0, arg1, arg2, arg3) {
1999
1999
  var handle1 = arg0;
2000
2000
  var rsc0 = handleTable2.get(handle1).rep;
2001
2001
  var ptr2 = arg1;
@@ -2046,7 +2046,7 @@ function trampoline24(arg0, arg1, arg2, arg3) {
2046
2046
  }
2047
2047
  }
2048
2048
 
2049
- function trampoline25(arg0, arg1, arg2, arg3) {
2049
+ function trampoline24(arg0, arg1, arg2, arg3) {
2050
2050
  var handle1 = arg0;
2051
2051
  var rsc0 = handleTable2.get(handle1).rep;
2052
2052
  var ptr2 = arg1;
@@ -2097,7 +2097,7 @@ function trampoline25(arg0, arg1, arg2, arg3) {
2097
2097
  }
2098
2098
  }
2099
2099
 
2100
- function trampoline26(arg0, arg1) {
2100
+ function trampoline25(arg0, arg1) {
2101
2101
  var handle1 = arg0;
2102
2102
  var rsc0 = handleTable2.get(handle1).rep;
2103
2103
  let ret;
@@ -2145,7 +2145,7 @@ function trampoline26(arg0, arg1) {
2145
2145
  }
2146
2146
  }
2147
2147
 
2148
- function trampoline27(arg0, arg1) {
2148
+ function trampoline26(arg0, arg1) {
2149
2149
  const ret = getRandomBytes(BigInt.asUintN(64, arg0));
2150
2150
  var val0 = ret;
2151
2151
  var len0 = val0.byteLength;
@@ -2156,7 +2156,7 @@ function trampoline27(arg0, arg1) {
2156
2156
  dataView(memory0).setInt32(arg1 + 0, ptr0, true);
2157
2157
  }
2158
2158
 
2159
- function trampoline28(arg0) {
2159
+ function trampoline27(arg0) {
2160
2160
  const ret = getEnvironment();
2161
2161
  var vec3 = ret;
2162
2162
  var len3 = vec3.length;
@@ -2177,7 +2177,7 @@ function trampoline28(arg0) {
2177
2177
  dataView(memory0).setInt32(arg0 + 0, result3, true);
2178
2178
  }
2179
2179
 
2180
- function trampoline29(arg0) {
2180
+ function trampoline28(arg0) {
2181
2181
  const ret = getTerminalStdin();
2182
2182
  var variant1 = ret;
2183
2183
  if (variant1 === null || variant1=== undefined) {
@@ -2188,13 +2188,13 @@ function trampoline29(arg0) {
2188
2188
  if (!(e instanceof TerminalInput)) {
2189
2189
  throw new Error('Resource error: Not a valid "TerminalInput" resource.');
2190
2190
  }
2191
- var handle0 = handleCnt6++;
2192
- handleTable6.set(handle0, { rep: e, own: true });
2191
+ var handle0 = handleCnt3++;
2192
+ handleTable3.set(handle0, { rep: e, own: true });
2193
2193
  dataView(memory0).setInt32(arg0 + 4, handle0, true);
2194
2194
  }
2195
2195
  }
2196
2196
 
2197
- function trampoline30(arg0) {
2197
+ function trampoline29(arg0) {
2198
2198
  const ret = getTerminalStdout();
2199
2199
  var variant1 = ret;
2200
2200
  if (variant1 === null || variant1=== undefined) {
@@ -2205,13 +2205,13 @@ function trampoline30(arg0) {
2205
2205
  if (!(e instanceof TerminalOutput)) {
2206
2206
  throw new Error('Resource error: Not a valid "TerminalOutput" resource.');
2207
2207
  }
2208
- var handle0 = handleCnt7++;
2209
- handleTable7.set(handle0, { rep: e, own: true });
2208
+ var handle0 = handleCnt4++;
2209
+ handleTable4.set(handle0, { rep: e, own: true });
2210
2210
  dataView(memory0).setInt32(arg0 + 4, handle0, true);
2211
2211
  }
2212
2212
  }
2213
2213
 
2214
- function trampoline31(arg0) {
2214
+ function trampoline30(arg0) {
2215
2215
  const ret = getTerminalStderr();
2216
2216
  var variant1 = ret;
2217
2217
  if (variant1 === null || variant1=== undefined) {
@@ -2222,8 +2222,8 @@ function trampoline31(arg0) {
2222
2222
  if (!(e instanceof TerminalOutput)) {
2223
2223
  throw new Error('Resource error: Not a valid "TerminalOutput" resource.');
2224
2224
  }
2225
- var handle0 = handleCnt7++;
2226
- handleTable7.set(handle0, { rep: e, own: true });
2225
+ var handle0 = handleCnt4++;
2226
+ handleTable4.set(handle0, { rep: e, own: true });
2227
2227
  dataView(memory0).setInt32(arg0 + 4, handle0, true);
2228
2228
  }
2229
2229
  }
@@ -2232,11 +2232,11 @@ let realloc1;
2232
2232
  let postReturn0;
2233
2233
  let postReturn1;
2234
2234
  function trampoline0(handle) {
2235
- const handleEntry = handleTable4.get(handle);
2235
+ const handleEntry = handleTable6.get(handle);
2236
2236
  if (!handleEntry) {
2237
2237
  throw new Error(`Resource error: Invalid handle ${handle}`);
2238
2238
  }
2239
- handleTable4.delete(handle);
2239
+ handleTable6.delete(handle);
2240
2240
  if (handleEntry.own && handleEntry.rep[symbolDispose]) {
2241
2241
  handleEntry.rep[symbolDispose]();
2242
2242
  }
@@ -2272,16 +2272,6 @@ function trampoline3(handle) {
2272
2272
  }
2273
2273
  }
2274
2274
  function trampoline4(handle) {
2275
- const handleEntry = handleTable3.get(handle);
2276
- if (!handleEntry) {
2277
- throw new Error(`Resource error: Invalid handle ${handle}`);
2278
- }
2279
- handleTable3.delete(handle);
2280
- if (handleEntry.own && handleEntry.rep[symbolDispose]) {
2281
- handleEntry.rep[symbolDispose]();
2282
- }
2283
- }
2284
- function trampoline5(handle) {
2285
2275
  const handleEntry = handleTable5.get(handle);
2286
2276
  if (!handleEntry) {
2287
2277
  throw new Error(`Resource error: Invalid handle ${handle}`);
@@ -2291,22 +2281,22 @@ function trampoline5(handle) {
2291
2281
  handleEntry.rep[symbolDispose]();
2292
2282
  }
2293
2283
  }
2294
- function trampoline6(handle) {
2295
- const handleEntry = handleTable7.get(handle);
2284
+ function trampoline5(handle) {
2285
+ const handleEntry = handleTable4.get(handle);
2296
2286
  if (!handleEntry) {
2297
2287
  throw new Error(`Resource error: Invalid handle ${handle}`);
2298
2288
  }
2299
- handleTable7.delete(handle);
2289
+ handleTable4.delete(handle);
2300
2290
  if (handleEntry.own && handleEntry.rep[symbolDispose]) {
2301
2291
  handleEntry.rep[symbolDispose]();
2302
2292
  }
2303
2293
  }
2304
- function trampoline7(handle) {
2305
- const handleEntry = handleTable6.get(handle);
2294
+ function trampoline6(handle) {
2295
+ const handleEntry = handleTable3.get(handle);
2306
2296
  if (!handleEntry) {
2307
2297
  throw new Error(`Resource error: Invalid handle ${handle}`);
2308
2298
  }
2309
- handleTable6.delete(handle);
2299
+ handleTable3.delete(handle);
2310
2300
  if (handleEntry.own && handleEntry.rep[symbolDispose]) {
2311
2301
  handleEntry.rep[symbolDispose]();
2312
2302
  }
@@ -2701,14 +2691,12 @@ const handleTable5= new Map();
2701
2691
  let handleCnt5 = 0;
2702
2692
  const handleTable6= new Map();
2703
2693
  let handleCnt6 = 0;
2704
- const handleTable7= new Map();
2705
- let handleCnt7 = 0;
2706
2694
 
2707
2695
  let _initialized = false;
2708
2696
  export const $init = (async() => {
2709
2697
  const module0 = fetchCompile(new URL('./js-component-bindgen-component.core.wasm', import.meta.url));
2710
2698
  const module1 = fetchCompile(new URL('./js-component-bindgen-component.core2.wasm', import.meta.url));
2711
- const module2 = base64Compile('AGFzbQEAAAABUQxgAX8AYAN/fn8AYAJ/fwBgB39/f39/f38AYAR/f39/AGACfn8AYAl/f39/f35+f38Bf2ACf38Bf2AEf39/fwF/YAF/AX9gA39/fwF/YAF/AAMgHwABAQICAgMCAgEBAgQEAgUAAAAABgcHCAgHBwkHCgsEBQFwAR8fB50BIAEwAAABMQABATIAAgEzAAMBNAAEATUABQE2AAYBNwAHATgACAE5AAkCMTAACgIxMQALAjEyAAwCMTMADQIxNAAOAjE1AA8CMTYAEAIxNwARAjE4ABICMTkAEwIyMAAUAjIxABUCMjIAFgIyMwAXAjI0ABgCMjUAGQIyNgAaAjI3ABsCMjgAHAIyOQAdAjMwAB4IJGltcG9ydHMBAAqZAx8JACAAQQARAAALDQAgACABIAJBAREBAAsNACAAIAEgAkECEQEACwsAIAAgAUEDEQIACwsAIAAgAUEEEQIACwsAIAAgAUEFEQIACxUAIAAgASACIAMgBCAFIAZBBhEDAAsLACAAIAFBBxECAAsLACAAIAFBCBECAAsNACAAIAEgAkEJEQEACw0AIAAgASACQQoRAQALCwAgACABQQsRAgALDwAgACABIAIgA0EMEQQACw8AIAAgASACIANBDREEAAsLACAAIAFBDhECAAsLACAAIAFBDxEFAAsJACAAQRARAAALCQAgAEEREQAACwkAIABBEhEAAAsJACAAQRMRAAALGQAgACABIAIgAyAEIAUgBiAHIAhBFBEGAAsLACAAIAFBFREHAAsLACAAIAFBFhEHAAsPACAAIAEgAiADQRcRCAALDwAgACABIAIgA0EYEQgACwsAIAAgAUEZEQcACwsAIAAgAUEaEQcACwkAIABBGxEJAAsLACAAIAFBHBEHAAsNACAAIAEgAkEdEQoACwkAIABBHhELAAsALglwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQENd2l0LWNvbXBvbmVudAYwLjE5LjAAkhAEbmFtZQATEndpdC1jb21wb25lbnQ6c2hpbQH1Dx8ARWluZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS9wcmVvcGVuc0AwLjIuMC1yYy0yMDIzLTExLTEwLWdldC1kaXJlY3RvcmllcwFVaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLnJlYWQtdmlhLXN0cmVhbQJWaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLndyaXRlLXZpYS1zdHJlYW0DV2luZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS90eXBlc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdZGVzY3JpcHRvci5hcHBlbmQtdmlhLXN0cmVhbQROaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLmdldC10eXBlBUppbmRpcmVjdC13YXNpOmZpbGVzeXN0ZW0vdHlwZXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXWRlc2NyaXB0b3Iuc3RhdAZNaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLm9wZW4tYXQHU2luZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS90eXBlc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdZGVzY3JpcHRvci5tZXRhZGF0YS1oYXNoCEhpbmRpcmVjdC13YXNpOmZpbGVzeXN0ZW0vdHlwZXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1maWxlc3lzdGVtLWVycm9yLWNvZGUJRmluZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdaW5wdXQtc3RyZWFtLnJlYWQKT2luZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdaW5wdXQtc3RyZWFtLmJsb2NraW5nLXJlYWQLTmluZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2Rdb3V0cHV0LXN0cmVhbS5jaGVjay13cml0ZQxIaW5kaXJlY3Qtd2FzaTppby9zdHJlYW1zQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1vdXRwdXQtc3RyZWFtLndyaXRlDVtpbmRpcmVjdC13YXNpOmlvL3N0cmVhbXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXW91dHB1dC1zdHJlYW0uYmxvY2tpbmctd3JpdGUtYW5kLWZsdXNoDlFpbmRpcmVjdC13YXNpOmlvL3N0cmVhbXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXW91dHB1dC1zdHJlYW0uYmxvY2tpbmctZmx1c2gPQGluZGlyZWN0LXdhc2k6cmFuZG9tL3JhbmRvbUAwLjIuMC1yYy0yMDIzLTExLTEwLWdldC1yYW5kb20tYnl0ZXMQQWluZGlyZWN0LXdhc2k6Y2xpL2Vudmlyb25tZW50QDAuMi4wLXJjLTIwMjMtMTEtMTAtZ2V0LWVudmlyb25tZW50EUdpbmRpcmVjdC13YXNpOmNsaS90ZXJtaW5hbC1zdGRpbkAwLjIuMC1yYy0yMDIzLTExLTEwLWdldC10ZXJtaW5hbC1zdGRpbhJJaW5kaXJlY3Qtd2FzaTpjbGkvdGVybWluYWwtc3Rkb3V0QDAuMi4wLXJjLTIwMjMtMTEtMTAtZ2V0LXRlcm1pbmFsLXN0ZG91dBNJaW5kaXJlY3Qtd2FzaTpjbGkvdGVybWluYWwtc3RkZXJyQDAuMi4wLXJjLTIwMjMtMTEtMTAtZ2V0LXRlcm1pbmFsLXN0ZGVychQmYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1wYXRoX29wZW4VLGFkYXB0LXdhc2lfc25hcHNob3RfcHJldmlldzEtZmRfZmlsZXN0YXRfZ2V0FidhZGFwdC13YXNpX3NuYXBzaG90X3ByZXZpZXcxLXJhbmRvbV9nZXQXJGFkYXB0LXdhc2lfc25hcHNob3RfcHJldmlldzEtZmRfcmVhZBglYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF93cml0ZRkoYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1lbnZpcm9uX2dldBouYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1lbnZpcm9uX3NpemVzX2dldBslYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9jbG9zZRwrYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9wcmVzdGF0X2dldB0wYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9wcmVzdGF0X2Rpcl9uYW1lHiZhZGFwdC13YXNpX3NuYXBzaG90X3ByZXZpZXcxLXByb2NfZXhpdA');
2699
+ const module2 = base64Compile('AGFzbQEAAAABUQxgAX8AYAN/fn8AYAJ/fwBgB39/f39/f38AYAR/f39/AGACfn8AYAl/f39/f35+f38Bf2ACf38Bf2AEf39/fwF/YAF/AX9gA39/fwF/YAF/AAMgHwABAQICAgMCAgEBAgQEAgUAAAAABgcHCAgHBwkHCgsEBQFwAR8fB50BIAEwAAABMQABATIAAgEzAAMBNAAEATUABQE2AAYBNwAHATgACAE5AAkCMTAACgIxMQALAjEyAAwCMTMADQIxNAAOAjE1AA8CMTYAEAIxNwARAjE4ABICMTkAEwIyMAAUAjIxABUCMjIAFgIyMwAXAjI0ABgCMjUAGQIyNgAaAjI3ABsCMjgAHAIyOQAdAjMwAB4IJGltcG9ydHMBAAqZAx8JACAAQQARAAALDQAgACABIAJBAREBAAsNACAAIAEgAkECEQEACwsAIAAgAUEDEQIACwsAIAAgAUEEEQIACwsAIAAgAUEFEQIACxUAIAAgASACIAMgBCAFIAZBBhEDAAsLACAAIAFBBxECAAsLACAAIAFBCBECAAsNACAAIAEgAkEJEQEACw0AIAAgASACQQoRAQALCwAgACABQQsRAgALDwAgACABIAIgA0EMEQQACw8AIAAgASACIANBDREEAAsLACAAIAFBDhECAAsLACAAIAFBDxEFAAsJACAAQRARAAALCQAgAEEREQAACwkAIABBEhEAAAsJACAAQRMRAAALGQAgACABIAIgAyAEIAUgBiAHIAhBFBEGAAsLACAAIAFBFREHAAsLACAAIAFBFhEHAAsPACAAIAEgAiADQRcRCAALDwAgACABIAIgA0EYEQgACwsAIAAgAUEZEQcACwsAIAAgAUEaEQcACwkAIABBGxEJAAsLACAAIAFBHBEHAAsNACAAIAEgAkEdEQoACwkAIABBHhELAAsALglwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQENd2l0LWNvbXBvbmVudAYwLjE5LjAAkhAEbmFtZQATEndpdC1jb21wb25lbnQ6c2hpbQH1Dx8ARWluZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS9wcmVvcGVuc0AwLjIuMC1yYy0yMDIzLTExLTEwLWdldC1kaXJlY3RvcmllcwFVaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLnJlYWQtdmlhLXN0cmVhbQJWaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLndyaXRlLXZpYS1zdHJlYW0DV2luZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS90eXBlc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdZGVzY3JpcHRvci5hcHBlbmQtdmlhLXN0cmVhbQROaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLmdldC10eXBlBUppbmRpcmVjdC13YXNpOmZpbGVzeXN0ZW0vdHlwZXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXWRlc2NyaXB0b3Iuc3RhdAZNaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLm9wZW4tYXQHU2luZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS90eXBlc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdZGVzY3JpcHRvci5tZXRhZGF0YS1oYXNoCEhpbmRpcmVjdC13YXNpOmZpbGVzeXN0ZW0vdHlwZXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1maWxlc3lzdGVtLWVycm9yLWNvZGUJRmluZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdaW5wdXQtc3RyZWFtLnJlYWQKT2luZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdaW5wdXQtc3RyZWFtLmJsb2NraW5nLXJlYWQLTmluZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2Rdb3V0cHV0LXN0cmVhbS5jaGVjay13cml0ZQxIaW5kaXJlY3Qtd2FzaTppby9zdHJlYW1zQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1vdXRwdXQtc3RyZWFtLndyaXRlDVtpbmRpcmVjdC13YXNpOmlvL3N0cmVhbXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXW91dHB1dC1zdHJlYW0uYmxvY2tpbmctd3JpdGUtYW5kLWZsdXNoDlFpbmRpcmVjdC13YXNpOmlvL3N0cmVhbXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXW91dHB1dC1zdHJlYW0uYmxvY2tpbmctZmx1c2gPQGluZGlyZWN0LXdhc2k6cmFuZG9tL3JhbmRvbUAwLjIuMC1yYy0yMDIzLTExLTEwLWdldC1yYW5kb20tYnl0ZXMQQWluZGlyZWN0LXdhc2k6Y2xpL2Vudmlyb25tZW50QDAuMi4wLXJjLTIwMjMtMTItMDUtZ2V0LWVudmlyb25tZW50EUdpbmRpcmVjdC13YXNpOmNsaS90ZXJtaW5hbC1zdGRpbkAwLjIuMC1yYy0yMDIzLTEyLTA1LWdldC10ZXJtaW5hbC1zdGRpbhJJaW5kaXJlY3Qtd2FzaTpjbGkvdGVybWluYWwtc3Rkb3V0QDAuMi4wLXJjLTIwMjMtMTItMDUtZ2V0LXRlcm1pbmFsLXN0ZG91dBNJaW5kaXJlY3Qtd2FzaTpjbGkvdGVybWluYWwtc3RkZXJyQDAuMi4wLXJjLTIwMjMtMTItMDUtZ2V0LXRlcm1pbmFsLXN0ZGVychQmYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1wYXRoX29wZW4VLGFkYXB0LXdhc2lfc25hcHNob3RfcHJldmlldzEtZmRfZmlsZXN0YXRfZ2V0FidhZGFwdC13YXNpX3NuYXBzaG90X3ByZXZpZXcxLXJhbmRvbV9nZXQXJGFkYXB0LXdhc2lfc25hcHNob3RfcHJldmlldzEtZmRfcmVhZBglYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF93cml0ZRkoYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1lbnZpcm9uX2dldBouYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1lbnZpcm9uX3NpemVzX2dldBslYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9jbG9zZRwrYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9wcmVzdGF0X2dldB0wYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9wcmVzdGF0X2Rpcl9uYW1lHiZhZGFwdC13YXNpX3NuYXBzaG90X3ByZXZpZXcxLXByb2NfZXhpdA');
2712
2700
  const module3 = base64Compile('AGFzbQEAAAABUQxgAX8AYAN/fn8AYAJ/fwBgB39/f39/f38AYAR/f39/AGACfn8AYAl/f39/f35+f38Bf2ACf38Bf2AEf39/fwF/YAF/AX9gA39/fwF/YAF/AALAASAAATAAAAABMQABAAEyAAEAATMAAgABNAACAAE1AAIAATYAAwABNwACAAE4AAIAATkAAQACMTAAAQACMTEAAgACMTIABAACMTMABAACMTQAAgACMTUABQACMTYAAAACMTcAAAACMTgAAAACMTkAAAACMjAABgACMjEABwACMjIABwACMjMACAACMjQACAACMjUABwACMjYABwACMjcACQACMjgABwACMjkACgACMzAACwAIJGltcG9ydHMBcAEfHwklAQBBAAsfAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHgAuCXByb2R1Y2VycwEMcHJvY2Vzc2VkLWJ5AQ13aXQtY29tcG9uZW50BjAuMTkuMAAcBG5hbWUAFRR3aXQtY29tcG9uZW50OmZpeHVwcw');
2713
2701
  ({ exports: exports0 } = await instantiateCore(await module2));
2714
2702
  ({ exports: exports1 } = await instantiateCore(await module0, {
@@ -2733,34 +2721,34 @@ export const $init = (async() => {
2733
2721
  env: {
2734
2722
  memory: exports1.memory,
2735
2723
  },
2736
- 'wasi:cli/environment@0.2.0-rc-2023-11-10': {
2724
+ 'wasi:cli/environment@0.2.0-rc-2023-12-05': {
2737
2725
  'get-environment': exports0['16'],
2738
2726
  },
2739
- 'wasi:cli/exit@0.2.0-rc-2023-11-10': {
2740
- exit: trampoline9,
2727
+ 'wasi:cli/exit@0.2.0-rc-2023-12-05': {
2728
+ exit: trampoline8,
2741
2729
  },
2742
- 'wasi:cli/stderr@0.2.0-rc-2023-11-10': {
2743
- 'get-stderr': trampoline8,
2730
+ 'wasi:cli/stderr@0.2.0-rc-2023-12-05': {
2731
+ 'get-stderr': trampoline7,
2744
2732
  },
2745
- 'wasi:cli/stdin@0.2.0-rc-2023-11-10': {
2746
- 'get-stdin': trampoline10,
2733
+ 'wasi:cli/stdin@0.2.0-rc-2023-12-05': {
2734
+ 'get-stdin': trampoline9,
2747
2735
  },
2748
- 'wasi:cli/stdout@0.2.0-rc-2023-11-10': {
2749
- 'get-stdout': trampoline11,
2736
+ 'wasi:cli/stdout@0.2.0-rc-2023-12-05': {
2737
+ 'get-stdout': trampoline10,
2750
2738
  },
2751
- 'wasi:cli/terminal-input@0.2.0-rc-2023-11-10': {
2752
- '[resource-drop]terminal-input': trampoline7,
2739
+ 'wasi:cli/terminal-input@0.2.0-rc-2023-12-05': {
2740
+ '[resource-drop]terminal-input': trampoline6,
2753
2741
  },
2754
- 'wasi:cli/terminal-output@0.2.0-rc-2023-11-10': {
2755
- '[resource-drop]terminal-output': trampoline6,
2742
+ 'wasi:cli/terminal-output@0.2.0-rc-2023-12-05': {
2743
+ '[resource-drop]terminal-output': trampoline5,
2756
2744
  },
2757
- 'wasi:cli/terminal-stderr@0.2.0-rc-2023-11-10': {
2745
+ 'wasi:cli/terminal-stderr@0.2.0-rc-2023-12-05': {
2758
2746
  'get-terminal-stderr': exports0['19'],
2759
2747
  },
2760
- 'wasi:cli/terminal-stdin@0.2.0-rc-2023-11-10': {
2748
+ 'wasi:cli/terminal-stdin@0.2.0-rc-2023-12-05': {
2761
2749
  'get-terminal-stdin': exports0['17'],
2762
2750
  },
2763
- 'wasi:cli/terminal-stdout@0.2.0-rc-2023-11-10': {
2751
+ 'wasi:cli/terminal-stdout@0.2.0-rc-2023-12-05': {
2764
2752
  'get-terminal-stdout': exports0['18'],
2765
2753
  },
2766
2754
  'wasi:filesystem/preopens@0.2.0-rc-2023-11-10': {
@@ -2794,28 +2782,25 @@ export const $init = (async() => {
2794
2782
  'wasi:random/random@0.2.0-rc-2023-11-10': {
2795
2783
  'get-random-bytes': exports0['15'],
2796
2784
  },
2797
- 'wasi:sockets/tcp@0.2.0-rc-2023-11-10': {
2798
- '[resource-drop]tcp-socket': trampoline5,
2799
- },
2800
2785
  }));
2801
2786
  memory0 = exports1.memory;
2802
2787
  realloc0 = exports2.cabi_import_realloc;
2803
2788
  ({ exports: exports3 } = await instantiateCore(await module3, {
2804
2789
  '': {
2805
2790
  $imports: exports0.$imports,
2806
- '0': trampoline12,
2807
- '1': trampoline13,
2808
- '10': trampoline22,
2809
- '11': trampoline23,
2810
- '12': trampoline24,
2811
- '13': trampoline25,
2812
- '14': trampoline26,
2813
- '15': trampoline27,
2814
- '16': trampoline28,
2815
- '17': trampoline29,
2816
- '18': trampoline30,
2817
- '19': trampoline31,
2818
- '2': trampoline14,
2791
+ '0': trampoline11,
2792
+ '1': trampoline12,
2793
+ '10': trampoline21,
2794
+ '11': trampoline22,
2795
+ '12': trampoline23,
2796
+ '13': trampoline24,
2797
+ '14': trampoline25,
2798
+ '15': trampoline26,
2799
+ '16': trampoline27,
2800
+ '17': trampoline28,
2801
+ '18': trampoline29,
2802
+ '19': trampoline30,
2803
+ '2': trampoline13,
2819
2804
  '20': exports2.path_open,
2820
2805
  '21': exports2.fd_filestat_get,
2821
2806
  '22': exports2.random_get,
@@ -2826,14 +2811,14 @@ export const $init = (async() => {
2826
2811
  '27': exports2.fd_close,
2827
2812
  '28': exports2.fd_prestat_get,
2828
2813
  '29': exports2.fd_prestat_dir_name,
2829
- '3': trampoline15,
2814
+ '3': trampoline14,
2830
2815
  '30': exports2.proc_exit,
2831
- '4': trampoline16,
2832
- '5': trampoline17,
2833
- '6': trampoline18,
2834
- '7': trampoline19,
2835
- '8': trampoline20,
2836
- '9': trampoline21,
2816
+ '4': trampoline15,
2817
+ '5': trampoline16,
2818
+ '6': trampoline17,
2819
+ '7': trampoline18,
2820
+ '8': trampoline19,
2821
+ '9': trampoline20,
2837
2822
  },
2838
2823
  }));
2839
2824
  realloc1 = exports1.cabi_realloc;
Binary file
Binary file
Binary file
@@ -14,7 +14,6 @@ import { WasiFilesystemTypes } from './interfaces/wasi-filesystem-types.js';
14
14
  import { WasiIoError } from './interfaces/wasi-io-error.js';
15
15
  import { WasiIoStreams } from './interfaces/wasi-io-streams.js';
16
16
  import { WasiRandomRandom } from './interfaces/wasi-random-random.js';
17
- import { WasiSocketsTcp } from './interfaces/wasi-sockets-tcp.js';
18
17
  import { LocalWasmToolsTools } from './interfaces/local-wasm-tools-tools.js';
19
18
  export const tools: typeof LocalWasmToolsTools;
20
19
 
package/obj/wasm-tools.js CHANGED
@@ -97,7 +97,7 @@ function utf8Encode(s, realloc, memory) {
97
97
  let exports0;
98
98
  let exports1;
99
99
 
100
- function trampoline8() {
100
+ function trampoline7() {
101
101
  const ret = getStderr();
102
102
  if (!(ret instanceof OutputStream)) {
103
103
  throw new Error('Resource error: Not a valid "OutputStream" resource.');
@@ -107,7 +107,7 @@ function trampoline8() {
107
107
  return handle0;
108
108
  }
109
109
 
110
- function trampoline9(arg0) {
110
+ function trampoline8(arg0) {
111
111
  let variant0;
112
112
  switch (arg0) {
113
113
  case 0: {
@@ -131,7 +131,7 @@ function trampoline9(arg0) {
131
131
  exit(variant0);
132
132
  }
133
133
 
134
- function trampoline10() {
134
+ function trampoline9() {
135
135
  const ret = getStdin();
136
136
  if (!(ret instanceof InputStream)) {
137
137
  throw new Error('Resource error: Not a valid "InputStream" resource.');
@@ -141,7 +141,7 @@ function trampoline10() {
141
141
  return handle0;
142
142
  }
143
143
 
144
- function trampoline11() {
144
+ function trampoline10() {
145
145
  const ret = getStdout();
146
146
  if (!(ret instanceof OutputStream)) {
147
147
  throw new Error('Resource error: Not a valid "OutputStream" resource.');
@@ -152,7 +152,7 @@ function trampoline11() {
152
152
  }
153
153
  let exports2;
154
154
 
155
- function trampoline12(arg0) {
155
+ function trampoline11(arg0) {
156
156
  const ret = getDirectories();
157
157
  var vec3 = ret;
158
158
  var len3 = vec3.length;
@@ -163,8 +163,8 @@ function trampoline12(arg0) {
163
163
  if (!(tuple0_0 instanceof Descriptor)) {
164
164
  throw new Error('Resource error: Not a valid "Descriptor" resource.');
165
165
  }
166
- var handle1 = handleCnt3++;
167
- handleTable3.set(handle1, { rep: tuple0_0, own: true });
166
+ var handle1 = handleCnt5++;
167
+ handleTable5.set(handle1, { rep: tuple0_0, own: true });
168
168
  dataView(memory0).setInt32(base + 0, handle1, true);
169
169
  var ptr2 = utf8Encode(tuple0_1, realloc0, memory0);
170
170
  var len2 = utf8EncodedLen;
@@ -177,9 +177,9 @@ function trampoline12(arg0) {
177
177
  let memory0;
178
178
  let realloc0;
179
179
 
180
- function trampoline13(arg0, arg1, arg2) {
180
+ function trampoline12(arg0, arg1, arg2) {
181
181
  var handle1 = arg0;
182
- var rsc0 = handleTable3.get(handle1).rep;
182
+ var rsc0 = handleTable5.get(handle1).rep;
183
183
  let ret;
184
184
  try {
185
185
  ret = { tag: 'ok', val: Descriptor.prototype.readViaStream.call(rsc0, BigInt.asUintN(64, arg1)) };
@@ -370,9 +370,9 @@ function trampoline13(arg0, arg1, arg2) {
370
370
  }
371
371
  }
372
372
 
373
- function trampoline14(arg0, arg1, arg2) {
373
+ function trampoline13(arg0, arg1, arg2) {
374
374
  var handle1 = arg0;
375
- var rsc0 = handleTable3.get(handle1).rep;
375
+ var rsc0 = handleTable5.get(handle1).rep;
376
376
  let ret;
377
377
  try {
378
378
  ret = { tag: 'ok', val: Descriptor.prototype.writeViaStream.call(rsc0, BigInt.asUintN(64, arg1)) };
@@ -563,9 +563,9 @@ function trampoline14(arg0, arg1, arg2) {
563
563
  }
564
564
  }
565
565
 
566
- function trampoline15(arg0, arg1) {
566
+ function trampoline14(arg0, arg1) {
567
567
  var handle1 = arg0;
568
- var rsc0 = handleTable3.get(handle1).rep;
568
+ var rsc0 = handleTable5.get(handle1).rep;
569
569
  let ret;
570
570
  try {
571
571
  ret = { tag: 'ok', val: Descriptor.prototype.appendViaStream.call(rsc0) };
@@ -756,9 +756,9 @@ function trampoline15(arg0, arg1) {
756
756
  }
757
757
  }
758
758
 
759
- function trampoline16(arg0, arg1) {
759
+ function trampoline15(arg0, arg1) {
760
760
  var handle1 = arg0;
761
- var rsc0 = handleTable3.get(handle1).rep;
761
+ var rsc0 = handleTable5.get(handle1).rep;
762
762
  let ret;
763
763
  try {
764
764
  ret = { tag: 'ok', val: Descriptor.prototype.getType.call(rsc0) };
@@ -987,9 +987,9 @@ function trampoline16(arg0, arg1) {
987
987
  }
988
988
  }
989
989
 
990
- function trampoline17(arg0, arg1) {
990
+ function trampoline16(arg0, arg1) {
991
991
  var handle1 = arg0;
992
- var rsc0 = handleTable3.get(handle1).rep;
992
+ var rsc0 = handleTable5.get(handle1).rep;
993
993
  let ret;
994
994
  try {
995
995
  ret = { tag: 'ok', val: Descriptor.prototype.stat.call(rsc0) };
@@ -1251,9 +1251,9 @@ function trampoline17(arg0, arg1) {
1251
1251
  }
1252
1252
  }
1253
1253
 
1254
- function trampoline18(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
1254
+ function trampoline17(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
1255
1255
  var handle1 = arg0;
1256
- var rsc0 = handleTable3.get(handle1).rep;
1256
+ var rsc0 = handleTable5.get(handle1).rep;
1257
1257
  if ((arg1 & 4294967294) !== 0) {
1258
1258
  throw new TypeError('flags have extraneous bits set');
1259
1259
  }
@@ -1297,8 +1297,8 @@ function trampoline18(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
1297
1297
  if (!(e instanceof Descriptor)) {
1298
1298
  throw new Error('Resource error: Not a valid "Descriptor" resource.');
1299
1299
  }
1300
- var handle6 = handleCnt3++;
1301
- handleTable3.set(handle6, { rep: e, own: true });
1300
+ var handle6 = handleCnt5++;
1301
+ handleTable5.set(handle6, { rep: e, own: true });
1302
1302
  dataView(memory0).setInt32(arg6 + 4, handle6, true);
1303
1303
  break;
1304
1304
  }
@@ -1473,9 +1473,9 @@ function trampoline18(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
1473
1473
  }
1474
1474
  }
1475
1475
 
1476
- function trampoline19(arg0, arg1) {
1476
+ function trampoline18(arg0, arg1) {
1477
1477
  var handle1 = arg0;
1478
- var rsc0 = handleTable3.get(handle1).rep;
1478
+ var rsc0 = handleTable5.get(handle1).rep;
1479
1479
  let ret;
1480
1480
  try {
1481
1481
  ret = { tag: 'ok', val: Descriptor.prototype.metadataHash.call(rsc0) };
@@ -1663,7 +1663,7 @@ function trampoline19(arg0, arg1) {
1663
1663
  }
1664
1664
  }
1665
1665
 
1666
- function trampoline20(arg0, arg1) {
1666
+ function trampoline19(arg0, arg1) {
1667
1667
  var handle1 = arg0;
1668
1668
  var rsc0 = handleTable0.get(handle1).rep;
1669
1669
  const ret = filesystemErrorCode(rsc0);
@@ -1836,7 +1836,7 @@ function trampoline20(arg0, arg1) {
1836
1836
  }
1837
1837
  }
1838
1838
 
1839
- function trampoline21(arg0, arg1, arg2) {
1839
+ function trampoline20(arg0, arg1, arg2) {
1840
1840
  var handle1 = arg0;
1841
1841
  var rsc0 = handleTable1.get(handle1).rep;
1842
1842
  let ret;
@@ -1891,7 +1891,7 @@ function trampoline21(arg0, arg1, arg2) {
1891
1891
  }
1892
1892
  }
1893
1893
 
1894
- function trampoline22(arg0, arg1, arg2) {
1894
+ function trampoline21(arg0, arg1, arg2) {
1895
1895
  var handle1 = arg0;
1896
1896
  var rsc0 = handleTable1.get(handle1).rep;
1897
1897
  let ret;
@@ -1946,7 +1946,7 @@ function trampoline22(arg0, arg1, arg2) {
1946
1946
  }
1947
1947
  }
1948
1948
 
1949
- function trampoline23(arg0, arg1) {
1949
+ function trampoline22(arg0, arg1) {
1950
1950
  var handle1 = arg0;
1951
1951
  var rsc0 = handleTable2.get(handle1).rep;
1952
1952
  let ret;
@@ -1995,7 +1995,7 @@ function trampoline23(arg0, arg1) {
1995
1995
  }
1996
1996
  }
1997
1997
 
1998
- function trampoline24(arg0, arg1, arg2, arg3) {
1998
+ function trampoline23(arg0, arg1, arg2, arg3) {
1999
1999
  var handle1 = arg0;
2000
2000
  var rsc0 = handleTable2.get(handle1).rep;
2001
2001
  var ptr2 = arg1;
@@ -2046,7 +2046,7 @@ function trampoline24(arg0, arg1, arg2, arg3) {
2046
2046
  }
2047
2047
  }
2048
2048
 
2049
- function trampoline25(arg0, arg1, arg2, arg3) {
2049
+ function trampoline24(arg0, arg1, arg2, arg3) {
2050
2050
  var handle1 = arg0;
2051
2051
  var rsc0 = handleTable2.get(handle1).rep;
2052
2052
  var ptr2 = arg1;
@@ -2097,7 +2097,7 @@ function trampoline25(arg0, arg1, arg2, arg3) {
2097
2097
  }
2098
2098
  }
2099
2099
 
2100
- function trampoline26(arg0, arg1) {
2100
+ function trampoline25(arg0, arg1) {
2101
2101
  var handle1 = arg0;
2102
2102
  var rsc0 = handleTable2.get(handle1).rep;
2103
2103
  let ret;
@@ -2145,7 +2145,7 @@ function trampoline26(arg0, arg1) {
2145
2145
  }
2146
2146
  }
2147
2147
 
2148
- function trampoline27(arg0, arg1) {
2148
+ function trampoline26(arg0, arg1) {
2149
2149
  const ret = getRandomBytes(BigInt.asUintN(64, arg0));
2150
2150
  var val0 = ret;
2151
2151
  var len0 = val0.byteLength;
@@ -2156,7 +2156,7 @@ function trampoline27(arg0, arg1) {
2156
2156
  dataView(memory0).setInt32(arg1 + 0, ptr0, true);
2157
2157
  }
2158
2158
 
2159
- function trampoline28(arg0) {
2159
+ function trampoline27(arg0) {
2160
2160
  const ret = getEnvironment();
2161
2161
  var vec3 = ret;
2162
2162
  var len3 = vec3.length;
@@ -2177,7 +2177,7 @@ function trampoline28(arg0) {
2177
2177
  dataView(memory0).setInt32(arg0 + 0, result3, true);
2178
2178
  }
2179
2179
 
2180
- function trampoline29(arg0) {
2180
+ function trampoline28(arg0) {
2181
2181
  const ret = getTerminalStdin();
2182
2182
  var variant1 = ret;
2183
2183
  if (variant1 === null || variant1=== undefined) {
@@ -2188,13 +2188,13 @@ function trampoline29(arg0) {
2188
2188
  if (!(e instanceof TerminalInput)) {
2189
2189
  throw new Error('Resource error: Not a valid "TerminalInput" resource.');
2190
2190
  }
2191
- var handle0 = handleCnt6++;
2192
- handleTable6.set(handle0, { rep: e, own: true });
2191
+ var handle0 = handleCnt3++;
2192
+ handleTable3.set(handle0, { rep: e, own: true });
2193
2193
  dataView(memory0).setInt32(arg0 + 4, handle0, true);
2194
2194
  }
2195
2195
  }
2196
2196
 
2197
- function trampoline30(arg0) {
2197
+ function trampoline29(arg0) {
2198
2198
  const ret = getTerminalStdout();
2199
2199
  var variant1 = ret;
2200
2200
  if (variant1 === null || variant1=== undefined) {
@@ -2205,13 +2205,13 @@ function trampoline30(arg0) {
2205
2205
  if (!(e instanceof TerminalOutput)) {
2206
2206
  throw new Error('Resource error: Not a valid "TerminalOutput" resource.');
2207
2207
  }
2208
- var handle0 = handleCnt7++;
2209
- handleTable7.set(handle0, { rep: e, own: true });
2208
+ var handle0 = handleCnt4++;
2209
+ handleTable4.set(handle0, { rep: e, own: true });
2210
2210
  dataView(memory0).setInt32(arg0 + 4, handle0, true);
2211
2211
  }
2212
2212
  }
2213
2213
 
2214
- function trampoline31(arg0) {
2214
+ function trampoline30(arg0) {
2215
2215
  const ret = getTerminalStderr();
2216
2216
  var variant1 = ret;
2217
2217
  if (variant1 === null || variant1=== undefined) {
@@ -2222,8 +2222,8 @@ function trampoline31(arg0) {
2222
2222
  if (!(e instanceof TerminalOutput)) {
2223
2223
  throw new Error('Resource error: Not a valid "TerminalOutput" resource.');
2224
2224
  }
2225
- var handle0 = handleCnt7++;
2226
- handleTable7.set(handle0, { rep: e, own: true });
2225
+ var handle0 = handleCnt4++;
2226
+ handleTable4.set(handle0, { rep: e, own: true });
2227
2227
  dataView(memory0).setInt32(arg0 + 4, handle0, true);
2228
2228
  }
2229
2229
  }
@@ -2232,11 +2232,11 @@ let realloc1;
2232
2232
  let postReturn0;
2233
2233
  let postReturn1;
2234
2234
  function trampoline0(handle) {
2235
- const handleEntry = handleTable4.get(handle);
2235
+ const handleEntry = handleTable6.get(handle);
2236
2236
  if (!handleEntry) {
2237
2237
  throw new Error(`Resource error: Invalid handle ${handle}`);
2238
2238
  }
2239
- handleTable4.delete(handle);
2239
+ handleTable6.delete(handle);
2240
2240
  if (handleEntry.own && handleEntry.rep[symbolDispose]) {
2241
2241
  handleEntry.rep[symbolDispose]();
2242
2242
  }
@@ -2272,16 +2272,6 @@ function trampoline3(handle) {
2272
2272
  }
2273
2273
  }
2274
2274
  function trampoline4(handle) {
2275
- const handleEntry = handleTable3.get(handle);
2276
- if (!handleEntry) {
2277
- throw new Error(`Resource error: Invalid handle ${handle}`);
2278
- }
2279
- handleTable3.delete(handle);
2280
- if (handleEntry.own && handleEntry.rep[symbolDispose]) {
2281
- handleEntry.rep[symbolDispose]();
2282
- }
2283
- }
2284
- function trampoline5(handle) {
2285
2275
  const handleEntry = handleTable5.get(handle);
2286
2276
  if (!handleEntry) {
2287
2277
  throw new Error(`Resource error: Invalid handle ${handle}`);
@@ -2291,22 +2281,22 @@ function trampoline5(handle) {
2291
2281
  handleEntry.rep[symbolDispose]();
2292
2282
  }
2293
2283
  }
2294
- function trampoline6(handle) {
2295
- const handleEntry = handleTable7.get(handle);
2284
+ function trampoline5(handle) {
2285
+ const handleEntry = handleTable4.get(handle);
2296
2286
  if (!handleEntry) {
2297
2287
  throw new Error(`Resource error: Invalid handle ${handle}`);
2298
2288
  }
2299
- handleTable7.delete(handle);
2289
+ handleTable4.delete(handle);
2300
2290
  if (handleEntry.own && handleEntry.rep[symbolDispose]) {
2301
2291
  handleEntry.rep[symbolDispose]();
2302
2292
  }
2303
2293
  }
2304
- function trampoline7(handle) {
2305
- const handleEntry = handleTable6.get(handle);
2294
+ function trampoline6(handle) {
2295
+ const handleEntry = handleTable3.get(handle);
2306
2296
  if (!handleEntry) {
2307
2297
  throw new Error(`Resource error: Invalid handle ${handle}`);
2308
2298
  }
2309
- handleTable6.delete(handle);
2299
+ handleTable3.delete(handle);
2310
2300
  if (handleEntry.own && handleEntry.rep[symbolDispose]) {
2311
2301
  handleEntry.rep[symbolDispose]();
2312
2302
  }
@@ -2857,14 +2847,12 @@ const handleTable5= new Map();
2857
2847
  let handleCnt5 = 0;
2858
2848
  const handleTable6= new Map();
2859
2849
  let handleCnt6 = 0;
2860
- const handleTable7= new Map();
2861
- let handleCnt7 = 0;
2862
2850
 
2863
2851
  let _initialized = false;
2864
2852
  export const $init = (async() => {
2865
2853
  const module0 = fetchCompile(new URL('./wasm-tools.core.wasm', import.meta.url));
2866
2854
  const module1 = fetchCompile(new URL('./wasm-tools.core2.wasm', import.meta.url));
2867
- const module2 = base64Compile('AGFzbQEAAAABUQxgAX8AYAN/fn8AYAJ/fwBgB39/f39/f38AYAR/f39/AGACfn8AYAl/f39/f35+f38Bf2ACf38Bf2AEf39/fwF/YAF/AX9gA39/fwF/YAF/AAMgHwABAQICAgMCAgEBAgQEAgUAAAAABgcHCAgHBwkHCgsEBQFwAR8fB50BIAEwAAABMQABATIAAgEzAAMBNAAEATUABQE2AAYBNwAHATgACAE5AAkCMTAACgIxMQALAjEyAAwCMTMADQIxNAAOAjE1AA8CMTYAEAIxNwARAjE4ABICMTkAEwIyMAAUAjIxABUCMjIAFgIyMwAXAjI0ABgCMjUAGQIyNgAaAjI3ABsCMjgAHAIyOQAdAjMwAB4IJGltcG9ydHMBAAqZAx8JACAAQQARAAALDQAgACABIAJBAREBAAsNACAAIAEgAkECEQEACwsAIAAgAUEDEQIACwsAIAAgAUEEEQIACwsAIAAgAUEFEQIACxUAIAAgASACIAMgBCAFIAZBBhEDAAsLACAAIAFBBxECAAsLACAAIAFBCBECAAsNACAAIAEgAkEJEQEACw0AIAAgASACQQoRAQALCwAgACABQQsRAgALDwAgACABIAIgA0EMEQQACw8AIAAgASACIANBDREEAAsLACAAIAFBDhECAAsLACAAIAFBDxEFAAsJACAAQRARAAALCQAgAEEREQAACwkAIABBEhEAAAsJACAAQRMRAAALGQAgACABIAIgAyAEIAUgBiAHIAhBFBEGAAsLACAAIAFBFREHAAsLACAAIAFBFhEHAAsPACAAIAEgAiADQRcRCAALDwAgACABIAIgA0EYEQgACwsAIAAgAUEZEQcACwsAIAAgAUEaEQcACwkAIABBGxEJAAsLACAAIAFBHBEHAAsNACAAIAEgAkEdEQoACwkAIABBHhELAAsALglwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQENd2l0LWNvbXBvbmVudAYwLjE5LjAAkhAEbmFtZQATEndpdC1jb21wb25lbnQ6c2hpbQH1Dx8ARWluZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS9wcmVvcGVuc0AwLjIuMC1yYy0yMDIzLTExLTEwLWdldC1kaXJlY3RvcmllcwFVaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLnJlYWQtdmlhLXN0cmVhbQJWaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLndyaXRlLXZpYS1zdHJlYW0DV2luZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS90eXBlc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdZGVzY3JpcHRvci5hcHBlbmQtdmlhLXN0cmVhbQROaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLmdldC10eXBlBUppbmRpcmVjdC13YXNpOmZpbGVzeXN0ZW0vdHlwZXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXWRlc2NyaXB0b3Iuc3RhdAZNaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLm9wZW4tYXQHU2luZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS90eXBlc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdZGVzY3JpcHRvci5tZXRhZGF0YS1oYXNoCEhpbmRpcmVjdC13YXNpOmZpbGVzeXN0ZW0vdHlwZXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1maWxlc3lzdGVtLWVycm9yLWNvZGUJRmluZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdaW5wdXQtc3RyZWFtLnJlYWQKT2luZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdaW5wdXQtc3RyZWFtLmJsb2NraW5nLXJlYWQLTmluZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2Rdb3V0cHV0LXN0cmVhbS5jaGVjay13cml0ZQxIaW5kaXJlY3Qtd2FzaTppby9zdHJlYW1zQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1vdXRwdXQtc3RyZWFtLndyaXRlDVtpbmRpcmVjdC13YXNpOmlvL3N0cmVhbXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXW91dHB1dC1zdHJlYW0uYmxvY2tpbmctd3JpdGUtYW5kLWZsdXNoDlFpbmRpcmVjdC13YXNpOmlvL3N0cmVhbXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXW91dHB1dC1zdHJlYW0uYmxvY2tpbmctZmx1c2gPQGluZGlyZWN0LXdhc2k6cmFuZG9tL3JhbmRvbUAwLjIuMC1yYy0yMDIzLTExLTEwLWdldC1yYW5kb20tYnl0ZXMQQWluZGlyZWN0LXdhc2k6Y2xpL2Vudmlyb25tZW50QDAuMi4wLXJjLTIwMjMtMTEtMTAtZ2V0LWVudmlyb25tZW50EUdpbmRpcmVjdC13YXNpOmNsaS90ZXJtaW5hbC1zdGRpbkAwLjIuMC1yYy0yMDIzLTExLTEwLWdldC10ZXJtaW5hbC1zdGRpbhJJaW5kaXJlY3Qtd2FzaTpjbGkvdGVybWluYWwtc3Rkb3V0QDAuMi4wLXJjLTIwMjMtMTEtMTAtZ2V0LXRlcm1pbmFsLXN0ZG91dBNJaW5kaXJlY3Qtd2FzaTpjbGkvdGVybWluYWwtc3RkZXJyQDAuMi4wLXJjLTIwMjMtMTEtMTAtZ2V0LXRlcm1pbmFsLXN0ZGVychQmYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1wYXRoX29wZW4VLGFkYXB0LXdhc2lfc25hcHNob3RfcHJldmlldzEtZmRfZmlsZXN0YXRfZ2V0FidhZGFwdC13YXNpX3NuYXBzaG90X3ByZXZpZXcxLXJhbmRvbV9nZXQXJGFkYXB0LXdhc2lfc25hcHNob3RfcHJldmlldzEtZmRfcmVhZBglYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF93cml0ZRkoYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1lbnZpcm9uX2dldBouYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1lbnZpcm9uX3NpemVzX2dldBslYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9jbG9zZRwrYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9wcmVzdGF0X2dldB0wYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9wcmVzdGF0X2Rpcl9uYW1lHiZhZGFwdC13YXNpX3NuYXBzaG90X3ByZXZpZXcxLXByb2NfZXhpdA');
2855
+ const module2 = base64Compile('AGFzbQEAAAABUQxgAX8AYAN/fn8AYAJ/fwBgB39/f39/f38AYAR/f39/AGACfn8AYAl/f39/f35+f38Bf2ACf38Bf2AEf39/fwF/YAF/AX9gA39/fwF/YAF/AAMgHwABAQICAgMCAgEBAgQEAgUAAAAABgcHCAgHBwkHCgsEBQFwAR8fB50BIAEwAAABMQABATIAAgEzAAMBNAAEATUABQE2AAYBNwAHATgACAE5AAkCMTAACgIxMQALAjEyAAwCMTMADQIxNAAOAjE1AA8CMTYAEAIxNwARAjE4ABICMTkAEwIyMAAUAjIxABUCMjIAFgIyMwAXAjI0ABgCMjUAGQIyNgAaAjI3ABsCMjgAHAIyOQAdAjMwAB4IJGltcG9ydHMBAAqZAx8JACAAQQARAAALDQAgACABIAJBAREBAAsNACAAIAEgAkECEQEACwsAIAAgAUEDEQIACwsAIAAgAUEEEQIACwsAIAAgAUEFEQIACxUAIAAgASACIAMgBCAFIAZBBhEDAAsLACAAIAFBBxECAAsLACAAIAFBCBECAAsNACAAIAEgAkEJEQEACw0AIAAgASACQQoRAQALCwAgACABQQsRAgALDwAgACABIAIgA0EMEQQACw8AIAAgASACIANBDREEAAsLACAAIAFBDhECAAsLACAAIAFBDxEFAAsJACAAQRARAAALCQAgAEEREQAACwkAIABBEhEAAAsJACAAQRMRAAALGQAgACABIAIgAyAEIAUgBiAHIAhBFBEGAAsLACAAIAFBFREHAAsLACAAIAFBFhEHAAsPACAAIAEgAiADQRcRCAALDwAgACABIAIgA0EYEQgACwsAIAAgAUEZEQcACwsAIAAgAUEaEQcACwkAIABBGxEJAAsLACAAIAFBHBEHAAsNACAAIAEgAkEdEQoACwkAIABBHhELAAsALglwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQENd2l0LWNvbXBvbmVudAYwLjE5LjAAkhAEbmFtZQATEndpdC1jb21wb25lbnQ6c2hpbQH1Dx8ARWluZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS9wcmVvcGVuc0AwLjIuMC1yYy0yMDIzLTExLTEwLWdldC1kaXJlY3RvcmllcwFVaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLnJlYWQtdmlhLXN0cmVhbQJWaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLndyaXRlLXZpYS1zdHJlYW0DV2luZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS90eXBlc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdZGVzY3JpcHRvci5hcHBlbmQtdmlhLXN0cmVhbQROaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLmdldC10eXBlBUppbmRpcmVjdC13YXNpOmZpbGVzeXN0ZW0vdHlwZXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXWRlc2NyaXB0b3Iuc3RhdAZNaW5kaXJlY3Qtd2FzaTpmaWxlc3lzdGVtL3R5cGVzQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1kZXNjcmlwdG9yLm9wZW4tYXQHU2luZGlyZWN0LXdhc2k6ZmlsZXN5c3RlbS90eXBlc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdZGVzY3JpcHRvci5tZXRhZGF0YS1oYXNoCEhpbmRpcmVjdC13YXNpOmZpbGVzeXN0ZW0vdHlwZXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1maWxlc3lzdGVtLWVycm9yLWNvZGUJRmluZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdaW5wdXQtc3RyZWFtLnJlYWQKT2luZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2RdaW5wdXQtc3RyZWFtLmJsb2NraW5nLXJlYWQLTmluZGlyZWN0LXdhc2k6aW8vc3RyZWFtc0AwLjIuMC1yYy0yMDIzLTExLTEwLVttZXRob2Rdb3V0cHV0LXN0cmVhbS5jaGVjay13cml0ZQxIaW5kaXJlY3Qtd2FzaTppby9zdHJlYW1zQDAuMi4wLXJjLTIwMjMtMTEtMTAtW21ldGhvZF1vdXRwdXQtc3RyZWFtLndyaXRlDVtpbmRpcmVjdC13YXNpOmlvL3N0cmVhbXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXW91dHB1dC1zdHJlYW0uYmxvY2tpbmctd3JpdGUtYW5kLWZsdXNoDlFpbmRpcmVjdC13YXNpOmlvL3N0cmVhbXNAMC4yLjAtcmMtMjAyMy0xMS0xMC1bbWV0aG9kXW91dHB1dC1zdHJlYW0uYmxvY2tpbmctZmx1c2gPQGluZGlyZWN0LXdhc2k6cmFuZG9tL3JhbmRvbUAwLjIuMC1yYy0yMDIzLTExLTEwLWdldC1yYW5kb20tYnl0ZXMQQWluZGlyZWN0LXdhc2k6Y2xpL2Vudmlyb25tZW50QDAuMi4wLXJjLTIwMjMtMTItMDUtZ2V0LWVudmlyb25tZW50EUdpbmRpcmVjdC13YXNpOmNsaS90ZXJtaW5hbC1zdGRpbkAwLjIuMC1yYy0yMDIzLTEyLTA1LWdldC10ZXJtaW5hbC1zdGRpbhJJaW5kaXJlY3Qtd2FzaTpjbGkvdGVybWluYWwtc3Rkb3V0QDAuMi4wLXJjLTIwMjMtMTItMDUtZ2V0LXRlcm1pbmFsLXN0ZG91dBNJaW5kaXJlY3Qtd2FzaTpjbGkvdGVybWluYWwtc3RkZXJyQDAuMi4wLXJjLTIwMjMtMTItMDUtZ2V0LXRlcm1pbmFsLXN0ZGVychQmYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1wYXRoX29wZW4VLGFkYXB0LXdhc2lfc25hcHNob3RfcHJldmlldzEtZmRfZmlsZXN0YXRfZ2V0FidhZGFwdC13YXNpX3NuYXBzaG90X3ByZXZpZXcxLXJhbmRvbV9nZXQXJGFkYXB0LXdhc2lfc25hcHNob3RfcHJldmlldzEtZmRfcmVhZBglYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF93cml0ZRkoYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1lbnZpcm9uX2dldBouYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1lbnZpcm9uX3NpemVzX2dldBslYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9jbG9zZRwrYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9wcmVzdGF0X2dldB0wYWRhcHQtd2FzaV9zbmFwc2hvdF9wcmV2aWV3MS1mZF9wcmVzdGF0X2Rpcl9uYW1lHiZhZGFwdC13YXNpX3NuYXBzaG90X3ByZXZpZXcxLXByb2NfZXhpdA');
2868
2856
  const module3 = base64Compile('AGFzbQEAAAABUQxgAX8AYAN/fn8AYAJ/fwBgB39/f39/f38AYAR/f39/AGACfn8AYAl/f39/f35+f38Bf2ACf38Bf2AEf39/fwF/YAF/AX9gA39/fwF/YAF/AALAASAAATAAAAABMQABAAEyAAEAATMAAgABNAACAAE1AAIAATYAAwABNwACAAE4AAIAATkAAQACMTAAAQACMTEAAgACMTIABAACMTMABAACMTQAAgACMTUABQACMTYAAAACMTcAAAACMTgAAAACMTkAAAACMjAABgACMjEABwACMjIABwACMjMACAACMjQACAACMjUABwACMjYABwACMjcACQACMjgABwACMjkACgACMzAACwAIJGltcG9ydHMBcAEfHwklAQBBAAsfAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHgAuCXByb2R1Y2VycwEMcHJvY2Vzc2VkLWJ5AQ13aXQtY29tcG9uZW50BjAuMTkuMAAcBG5hbWUAFRR3aXQtY29tcG9uZW50OmZpeHVwcw');
2869
2857
  ({ exports: exports0 } = await instantiateCore(await module2));
2870
2858
  ({ exports: exports1 } = await instantiateCore(await module0, {
@@ -2889,34 +2877,34 @@ export const $init = (async() => {
2889
2877
  env: {
2890
2878
  memory: exports1.memory,
2891
2879
  },
2892
- 'wasi:cli/environment@0.2.0-rc-2023-11-10': {
2880
+ 'wasi:cli/environment@0.2.0-rc-2023-12-05': {
2893
2881
  'get-environment': exports0['16'],
2894
2882
  },
2895
- 'wasi:cli/exit@0.2.0-rc-2023-11-10': {
2896
- exit: trampoline9,
2883
+ 'wasi:cli/exit@0.2.0-rc-2023-12-05': {
2884
+ exit: trampoline8,
2897
2885
  },
2898
- 'wasi:cli/stderr@0.2.0-rc-2023-11-10': {
2899
- 'get-stderr': trampoline8,
2886
+ 'wasi:cli/stderr@0.2.0-rc-2023-12-05': {
2887
+ 'get-stderr': trampoline7,
2900
2888
  },
2901
- 'wasi:cli/stdin@0.2.0-rc-2023-11-10': {
2902
- 'get-stdin': trampoline10,
2889
+ 'wasi:cli/stdin@0.2.0-rc-2023-12-05': {
2890
+ 'get-stdin': trampoline9,
2903
2891
  },
2904
- 'wasi:cli/stdout@0.2.0-rc-2023-11-10': {
2905
- 'get-stdout': trampoline11,
2892
+ 'wasi:cli/stdout@0.2.0-rc-2023-12-05': {
2893
+ 'get-stdout': trampoline10,
2906
2894
  },
2907
- 'wasi:cli/terminal-input@0.2.0-rc-2023-11-10': {
2908
- '[resource-drop]terminal-input': trampoline7,
2895
+ 'wasi:cli/terminal-input@0.2.0-rc-2023-12-05': {
2896
+ '[resource-drop]terminal-input': trampoline6,
2909
2897
  },
2910
- 'wasi:cli/terminal-output@0.2.0-rc-2023-11-10': {
2911
- '[resource-drop]terminal-output': trampoline6,
2898
+ 'wasi:cli/terminal-output@0.2.0-rc-2023-12-05': {
2899
+ '[resource-drop]terminal-output': trampoline5,
2912
2900
  },
2913
- 'wasi:cli/terminal-stderr@0.2.0-rc-2023-11-10': {
2901
+ 'wasi:cli/terminal-stderr@0.2.0-rc-2023-12-05': {
2914
2902
  'get-terminal-stderr': exports0['19'],
2915
2903
  },
2916
- 'wasi:cli/terminal-stdin@0.2.0-rc-2023-11-10': {
2904
+ 'wasi:cli/terminal-stdin@0.2.0-rc-2023-12-05': {
2917
2905
  'get-terminal-stdin': exports0['17'],
2918
2906
  },
2919
- 'wasi:cli/terminal-stdout@0.2.0-rc-2023-11-10': {
2907
+ 'wasi:cli/terminal-stdout@0.2.0-rc-2023-12-05': {
2920
2908
  'get-terminal-stdout': exports0['18'],
2921
2909
  },
2922
2910
  'wasi:filesystem/preopens@0.2.0-rc-2023-11-10': {
@@ -2950,28 +2938,25 @@ export const $init = (async() => {
2950
2938
  'wasi:random/random@0.2.0-rc-2023-11-10': {
2951
2939
  'get-random-bytes': exports0['15'],
2952
2940
  },
2953
- 'wasi:sockets/tcp@0.2.0-rc-2023-11-10': {
2954
- '[resource-drop]tcp-socket': trampoline5,
2955
- },
2956
2941
  }));
2957
2942
  memory0 = exports1.memory;
2958
2943
  realloc0 = exports2.cabi_import_realloc;
2959
2944
  ({ exports: exports3 } = await instantiateCore(await module3, {
2960
2945
  '': {
2961
2946
  $imports: exports0.$imports,
2962
- '0': trampoline12,
2963
- '1': trampoline13,
2964
- '10': trampoline22,
2965
- '11': trampoline23,
2966
- '12': trampoline24,
2967
- '13': trampoline25,
2968
- '14': trampoline26,
2969
- '15': trampoline27,
2970
- '16': trampoline28,
2971
- '17': trampoline29,
2972
- '18': trampoline30,
2973
- '19': trampoline31,
2974
- '2': trampoline14,
2947
+ '0': trampoline11,
2948
+ '1': trampoline12,
2949
+ '10': trampoline21,
2950
+ '11': trampoline22,
2951
+ '12': trampoline23,
2952
+ '13': trampoline24,
2953
+ '14': trampoline25,
2954
+ '15': trampoline26,
2955
+ '16': trampoline27,
2956
+ '17': trampoline28,
2957
+ '18': trampoline29,
2958
+ '19': trampoline30,
2959
+ '2': trampoline13,
2975
2960
  '20': exports2.path_open,
2976
2961
  '21': exports2.fd_filestat_get,
2977
2962
  '22': exports2.random_get,
@@ -2982,14 +2967,14 @@ export const $init = (async() => {
2982
2967
  '27': exports2.fd_close,
2983
2968
  '28': exports2.fd_prestat_get,
2984
2969
  '29': exports2.fd_prestat_dir_name,
2985
- '3': trampoline15,
2970
+ '3': trampoline14,
2986
2971
  '30': exports2.proc_exit,
2987
- '4': trampoline16,
2988
- '5': trampoline17,
2989
- '6': trampoline18,
2990
- '7': trampoline19,
2991
- '8': trampoline20,
2992
- '9': trampoline21,
2972
+ '4': trampoline15,
2973
+ '5': trampoline16,
2974
+ '6': trampoline17,
2975
+ '7': trampoline18,
2976
+ '8': trampoline19,
2977
+ '9': trampoline20,
2993
2978
  },
2994
2979
  }));
2995
2980
  realloc1 = exports1.cabi_realloc;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytecodealliance/jco",
3
- "version": "0.14.1",
3
+ "version": "0.14.2",
4
4
  "description": "JavaScript tooling for working with WebAssembly Components",
5
5
  "author": "Guy Bedford",
6
6
  "bin": {
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "type": "module",
20
20
  "dependencies": {
21
- "@bytecodealliance/preview2-shim": "0.14.1",
21
+ "@bytecodealliance/preview2-shim": "0.14.2",
22
22
  "binaryen": "^111.0.0",
23
23
  "chalk-template": "^0.4.0",
24
24
  "commander": "^9.4.1",
package/src/cmd/run.js CHANGED
@@ -10,7 +10,54 @@ import c from 'chalk-template';
10
10
  export async function run (componentPath, args, opts) {
11
11
  // Ensure that `args` is an array
12
12
  args = [...args];
13
+ return runComponent(componentPath, args, opts, `
14
+ if (!mod.run || !mod.run.run) {
15
+ console.error('Not a valid command component to execute.');
16
+ process.exit(1);
17
+ }
18
+ try {
19
+ mod.run.run();
20
+ // for stdout flushing
21
+ await new Promise(resolve => setTimeout(resolve));
22
+ process.exit(0);
23
+ }
24
+ catch (e) {
25
+ console.error(e);
26
+ process.exit(1);
27
+ }
28
+ `);
29
+ }
30
+
31
+ export async function serve (componentPath, args, opts) {
32
+ let tryFindPort = false;
33
+ let { port, host } = opts;
34
+ if (port === undefined) {
35
+ tryFindPort = true;
36
+ port = '8000';
37
+ }
38
+ // Ensure that `args` is an array
39
+ args = [...args];
40
+ return runComponent(componentPath, args, opts, `
41
+ import { HTTPServer } from '@bytecodealliance/preview2-shim/http';
42
+ const server = new HTTPServer(mod.incomingHandler);
43
+ ${tryFindPort ? `
44
+ let port = ${port};
45
+ while (true) {
46
+ try {
47
+ server.listen(port, ${JSON.stringify(host)});
48
+ break;
49
+ } catch (e) {
50
+ if (e.code !== 'EADDRINUSE')
51
+ throw e;
52
+ }
53
+ port++;
54
+ }
55
+ ` : `server.listen(${port}, ${JSON.stringify(host)})`}
56
+ console.error(\`Server listening on \${port}...\`);
57
+ `);
58
+ }
13
59
 
60
+ async function runComponent (componentPath, args, opts, executor) {
14
61
  const jcoImport = opts.jcoImport ? resolve(opts.jcoImport) : null;
15
62
 
16
63
  const name = basename(componentPath.slice(0, -extname(componentPath).length || Infinity));
@@ -18,6 +65,7 @@ export async function run (componentPath, args, opts) {
18
65
  if (opts.jcoDir) {
19
66
  await mkdir(outDir, { recursive: true });
20
67
  }
68
+
21
69
  try {
22
70
  try {
23
71
  await transpile(componentPath, {
@@ -26,7 +74,8 @@ export async function run (componentPath, args, opts) {
26
74
  noTypescript: true,
27
75
  wasiShim: true,
28
76
  outDir,
29
- tracing: opts.jcoTrace
77
+ tracing: opts.jcoTrace,
78
+ map: opts.jcoMap
30
79
  });
31
80
  }
32
81
  catch (e) {
@@ -63,30 +112,11 @@ export async function run (componentPath, args, opts) {
63
112
  const runPath = resolve(outDir, '_run.js');
64
113
  await writeFile(runPath, `
65
114
  ${jcoImport ? `import ${JSON.stringify(pathToFileURL(jcoImport))}` : ''}
66
- function logInvalidCommand () {
67
- console.error('Not a valid command component to execute, make sure it was built to a command adapter and with the same version.');
68
- }
69
115
  try {
70
116
  process.argv[1] = "${name}";
71
- const mod = await import('./${name}.js');
72
- if (!mod.run || !mod.run.run) {
73
- logInvalidCommand();
74
- process.exit(1);
75
- }
76
- try {
77
- mod.run.run();
78
- // TODO: figure out stdout flush!
79
- setTimeout(() => {});
80
- }
81
- catch (e) {
82
- console.error(e);
83
- process.exit(1);
84
- }
85
- }
86
- catch (e) {
87
- logInvalidCommand();
88
- throw e;
89
- }
117
+ } catch {}
118
+ const mod = await import('./${name}.js');
119
+ ${executor}
90
120
  `);
91
121
 
92
122
  process.exitCode = await new Promise((resolve, reject) => {
@@ -102,4 +132,4 @@ export async function run (componentPath, args, opts) {
102
132
  await rm(outDir, { recursive: true });
103
133
  } catch {}
104
134
  }
105
- }
135
+ }
@@ -81,7 +81,7 @@ async function wasm2Js (source) {
81
81
  */
82
82
  export async function transpileComponent (component, opts = {}) {
83
83
  await $init;
84
- if (opts.noWasiShim || opts.instantiation) opts.wasiShim = false;
84
+ if (opts.instantiation) opts.wasiShim = false;
85
85
 
86
86
  let spinner;
87
87
  const showSpinner = getShowSpinner();
@@ -119,8 +119,8 @@ export async function transpileComponent (component, opts = {}) {
119
119
  instantiation,
120
120
  validLiftingOptimization: opts.validLiftingOptimization ?? false,
121
121
  tracing: opts.tracing ?? false,
122
- noNodejsCompat: !(opts.nodejsCompat ?? true),
123
- noTypescript: opts.noTypescript || false,
122
+ noNodejsCompat: opts.nodejsCompat === false,
123
+ noTypescript: opts.typescript === false,
124
124
  tlaCompat: opts.tlaCompat ?? false,
125
125
  base64Cutoff: opts.js ? 0 : opts.base64Cutoff ?? 5000,
126
126
  noNamespacedExports: opts.namespacedExports === false,
package/src/jco.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { program, Option } from 'commander';
3
3
  import { opt } from './cmd/opt.js';
4
4
  import { transpile } from './cmd/transpile.js';
5
- import { run } from './cmd/run.js';
5
+ import { run as runCmd, serve as serveCmd } from './cmd/run.js';
6
6
  import { parse, print, componentNew, componentEmbed, metadataAdd, metadataShow, componentWit } from './cmd/wasm-tools.js';
7
7
  import { componentize } from './cmd/componentize.js';
8
8
  import c from 'chalk-template';
@@ -11,7 +11,7 @@ program
11
11
  .name('jco')
12
12
  .description(c`{bold jco - WebAssembly JS Component Tools}\n JS Component Transpilation Bindgen & Wasm Tools for JS`)
13
13
  .usage('<command> [options]')
14
- .version('0.14.1');
14
+ .version('0.14.2');
15
15
 
16
16
  function myParseInt(value) {
17
17
  return parseInt(value, 10);
@@ -52,15 +52,48 @@ program.command('transpile')
52
52
  .action(asyncAction(transpile));
53
53
 
54
54
  program.command('run')
55
- .description('Run a WebAssembly Command component')
55
+ .description('Run a WASI Command component')
56
56
  .usage('<command.wasm> <args...>')
57
57
  .helpOption(false)
58
- .argument('<command>', 'Wasm command binary to run')
58
+ .allowUnknownOption(true)
59
+ .allowExcessArguments(true)
60
+ .argument('<command>', 'WASI command binary to run')
59
61
  .option('--jco-dir <dir>', 'Instead of using a temporary dir, set the output directory for the run command')
60
62
  .option('--jco-trace', 'Enable call tracing')
61
63
  .option('--jco-import <module>', 'Custom module to import before the run executes to support custom environment setup')
62
- .argument('[args...]', 'Any CLI arguments to provide to the command')
63
- .action(asyncAction(run));
64
+ .option('--jco-map <mappings...>', 'specifier=./output custom mappings for the component imports')
65
+ .argument('[args...]', 'Any CLI arguments for the component')
66
+ .action(asyncAction(async function run (cmd, args, opts, command) {
67
+ // specially only allow help option in first position
68
+ if (cmd === '--help' || cmd === '-h') {
69
+ command.help();
70
+ } else {
71
+ return runCmd(cmd, args, opts);
72
+ }
73
+ }));
74
+
75
+ program.command('serve')
76
+ .description('Serve a WASI HTTP component')
77
+ .usage('<server.wasm> <args...>')
78
+ .helpOption(false)
79
+ .allowUnknownOption(true)
80
+ .allowExcessArguments(true)
81
+ .argument('<server>', 'WASI server binary to run')
82
+ .option('--port <number>')
83
+ .option('--host <host>')
84
+ .option('--jco-dir <dir>', 'Instead of using a temporary dir, set the output directory for the transpiled code')
85
+ .option('--jco-trace', 'Enable call tracing')
86
+ .option('--jco-import <module>', 'Custom module to import before the server executes to support custom environment setup')
87
+ .option('--jco-map <mappings...>', 'specifier=./output custom mappings for the component imports')
88
+ .argument('[args...]', 'Any CLI arguments for the component')
89
+ .action(asyncAction(async function serve (cmd, args, opts, command) {
90
+ // specially only allow help option in first position
91
+ if (cmd === '--help' || cmd === '-h') {
92
+ command.help();
93
+ } else {
94
+ return serveCmd(cmd, args, opts);
95
+ }
96
+ }));
64
97
 
65
98
  program.command('opt')
66
99
  .description('optimizes a Wasm component, including running wasm-opt Binaryen optimizations')
@@ -124,6 +157,8 @@ program.command('embed')
124
157
  .option('-m, --metadata <metadata...>', 'field=name[@version] producer metadata to add with the embedding')
125
158
  .action(asyncAction(componentEmbed));
126
159
 
160
+ program.showHelpAfterError();
161
+
127
162
  program.parse();
128
163
 
129
164
  function asyncAction (cmd) {