@bytecodealliance/jco 1.17.9 → 1.18.1
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/obj/interfaces/local-wasm-tools-tools.d.ts +27 -0
- package/obj/js-component-bindgen-component.core.wasm +0 -0
- package/obj/js-component-bindgen-component.js +1 -1
- package/obj/wasm-tools.core.wasm +0 -0
- package/obj/wasm-tools.js +300 -5
- package/package.json +3 -2
- package/src/cmd/componentize.js +62 -6
- package/src/jco.js +1 -1
|
@@ -3,6 +3,7 @@ export function parse(wat: string): Uint8Array;
|
|
|
3
3
|
export function print(binary: Uint8Array): string;
|
|
4
4
|
export function componentNew(binary: Uint8Array, adapters: Array<[string, Uint8Array]> | undefined): Uint8Array;
|
|
5
5
|
export function componentWit(binary: Uint8Array): string;
|
|
6
|
+
export function componentWitMetadataForWorld(wit: WitSpecifier, worldName: string | undefined): WitMetadata;
|
|
6
7
|
export function componentEmbed(embedOpts: EmbedOpts): Uint8Array;
|
|
7
8
|
export function metadataShow(binary: Uint8Array): Array<ModuleMetadata>;
|
|
8
9
|
export function metadataAdd(binary: Uint8Array, metadata: ProducersFields): Uint8Array;
|
|
@@ -16,6 +17,32 @@ export function metadataAdd(binary: Uint8Array, metadata: ProducersFields): Uint
|
|
|
16
17
|
* ## `"compact-utf16"`
|
|
17
18
|
*/
|
|
18
19
|
export type StringEncoding = 'utf8' | 'utf16' | 'compact-utf16';
|
|
20
|
+
export interface SemverVersion {
|
|
21
|
+
major: bigint,
|
|
22
|
+
minor: bigint,
|
|
23
|
+
patch: bigint,
|
|
24
|
+
pre?: string,
|
|
25
|
+
build?: string,
|
|
26
|
+
}
|
|
27
|
+
export interface InterfaceMetadata {
|
|
28
|
+
namespace: string,
|
|
29
|
+
'package': string,
|
|
30
|
+
'interface': string,
|
|
31
|
+
version?: SemverVersion,
|
|
32
|
+
}
|
|
33
|
+
export interface WitMetadata {
|
|
34
|
+
imports: Array<InterfaceMetadata>,
|
|
35
|
+
exports: Array<InterfaceMetadata>,
|
|
36
|
+
}
|
|
37
|
+
export type WitSpecifier = WitSpecifierSource | WitSpecifierPath;
|
|
38
|
+
export interface WitSpecifierSource {
|
|
39
|
+
tag: 'source',
|
|
40
|
+
val: string,
|
|
41
|
+
}
|
|
42
|
+
export interface WitSpecifierPath {
|
|
43
|
+
tag: 'path',
|
|
44
|
+
val: string,
|
|
45
|
+
}
|
|
19
46
|
export type ProducersFields = Array<[string, Array<[string, string]>]>;
|
|
20
47
|
export type EnabledFeatureSet = EnabledFeatureSetList | EnabledFeatureSetAll;
|
|
21
48
|
export interface EnabledFeatureSetList {
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use
|
|
1
|
+
"use components";
|
|
2
2
|
import { environment, exit as exit$1, stderr, stdin, stdout, terminalInput, terminalOutput, terminalStderr, terminalStdin, terminalStdout } from '@bytecodealliance/preview2-shim/cli';
|
|
3
3
|
import { preopens, types } from '@bytecodealliance/preview2-shim/filesystem';
|
|
4
4
|
import { error, streams } from '@bytecodealliance/preview2-shim/io';
|
package/obj/wasm-tools.core.wasm
CHANGED
|
Binary file
|
package/obj/wasm-tools.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use
|
|
1
|
+
"use components";
|
|
2
2
|
import { environment, exit as exit$1, stderr, stdin, stdout, terminalInput, terminalOutput, terminalStderr, terminalStdin, terminalStdout } from '@bytecodealliance/preview2-shim/cli';
|
|
3
3
|
import { preopens, types } from '@bytecodealliance/preview2-shim/filesystem';
|
|
4
4
|
import { error, streams } from '@bytecodealliance/preview2-shim/io';
|
|
@@ -9058,6 +9058,8 @@ let postReturn0;
|
|
|
9058
9058
|
let postReturn0Async;
|
|
9059
9059
|
let postReturn1;
|
|
9060
9060
|
let postReturn1Async;
|
|
9061
|
+
let postReturn2;
|
|
9062
|
+
let postReturn2Async;
|
|
9061
9063
|
let toolsParse;
|
|
9062
9064
|
|
|
9063
9065
|
function parse(arg0) {
|
|
@@ -9499,6 +9501,289 @@ function componentWit(arg0) {
|
|
|
9499
9501
|
|
|
9500
9502
|
|
|
9501
9503
|
|
|
9504
|
+
if (typeof retCopy === 'object' && retCopy.tag === 'err') {
|
|
9505
|
+
throw new ComponentError(retCopy.val);
|
|
9506
|
+
}
|
|
9507
|
+
return retCopy.val;
|
|
9508
|
+
|
|
9509
|
+
}
|
|
9510
|
+
let toolsComponentWitMetadataForWorld;
|
|
9511
|
+
|
|
9512
|
+
function componentWitMetadataForWorld(arg0, arg1) {
|
|
9513
|
+
if (!_initialized) throwUninitialized();
|
|
9514
|
+
var variant2 = arg0;
|
|
9515
|
+
let variant2_0;
|
|
9516
|
+
let variant2_1;
|
|
9517
|
+
let variant2_2;
|
|
9518
|
+
switch (variant2.tag) {
|
|
9519
|
+
case 'source': {
|
|
9520
|
+
const e = variant2.val;
|
|
9521
|
+
|
|
9522
|
+
var encodeRes = _utf8AllocateAndEncode(e, realloc1, memory0);
|
|
9523
|
+
var ptr0= encodeRes.ptr;
|
|
9524
|
+
var len0 = encodeRes.len;
|
|
9525
|
+
|
|
9526
|
+
variant2_0 = 0;
|
|
9527
|
+
variant2_1 = ptr0;
|
|
9528
|
+
variant2_2 = len0;
|
|
9529
|
+
break;
|
|
9530
|
+
}
|
|
9531
|
+
case 'path': {
|
|
9532
|
+
const e = variant2.val;
|
|
9533
|
+
|
|
9534
|
+
var encodeRes = _utf8AllocateAndEncode(e, realloc1, memory0);
|
|
9535
|
+
var ptr1= encodeRes.ptr;
|
|
9536
|
+
var len1 = encodeRes.len;
|
|
9537
|
+
|
|
9538
|
+
variant2_0 = 1;
|
|
9539
|
+
variant2_1 = ptr1;
|
|
9540
|
+
variant2_2 = len1;
|
|
9541
|
+
break;
|
|
9542
|
+
}
|
|
9543
|
+
default: {
|
|
9544
|
+
throw new TypeError(`invalid variant tag value \`${JSON.stringify(variant2.tag)}\` (received \`${variant2}\`) specified for \`WitSpecifier\``);
|
|
9545
|
+
}
|
|
9546
|
+
}
|
|
9547
|
+
var variant4 = arg1;
|
|
9548
|
+
let variant4_0;
|
|
9549
|
+
let variant4_1;
|
|
9550
|
+
let variant4_2;
|
|
9551
|
+
if (variant4 === null || variant4=== undefined) {
|
|
9552
|
+
variant4_0 = 0;
|
|
9553
|
+
variant4_1 = 0;
|
|
9554
|
+
variant4_2 = 0;
|
|
9555
|
+
} else {
|
|
9556
|
+
const e = variant4;
|
|
9557
|
+
|
|
9558
|
+
var encodeRes = _utf8AllocateAndEncode(e, realloc1, memory0);
|
|
9559
|
+
var ptr3= encodeRes.ptr;
|
|
9560
|
+
var len3 = encodeRes.len;
|
|
9561
|
+
|
|
9562
|
+
variant4_0 = 1;
|
|
9563
|
+
variant4_1 = ptr3;
|
|
9564
|
+
variant4_2 = len3;
|
|
9565
|
+
}
|
|
9566
|
+
_debugLog('[iface="local:wasm-tools/tools", function="component-wit-metadata-for-world"][Instruction::CallWasm] enter', {
|
|
9567
|
+
funcName: 'component-wit-metadata-for-world',
|
|
9568
|
+
paramCount: 6,
|
|
9569
|
+
async: false,
|
|
9570
|
+
postReturn: true,
|
|
9571
|
+
});
|
|
9572
|
+
const hostProvided = false;
|
|
9573
|
+
|
|
9574
|
+
const [task, _wasm_call_currentTaskID] = createNewCurrentTask({
|
|
9575
|
+
componentIdx: 0,
|
|
9576
|
+
isAsync: false,
|
|
9577
|
+
isManualAsync: false,
|
|
9578
|
+
entryFnName: 'toolsComponentWitMetadataForWorld',
|
|
9579
|
+
getCallbackFn: () => null,
|
|
9580
|
+
callbackFnName: 'null',
|
|
9581
|
+
errHandling: 'throw-result-err',
|
|
9582
|
+
callingWasmExport: true,
|
|
9583
|
+
});
|
|
9584
|
+
|
|
9585
|
+
const started = task.enterSync();
|
|
9586
|
+
task.setReturnMemoryIdx(0);
|
|
9587
|
+
task.setReturnMemory(memory0);
|
|
9588
|
+
let ret = _withGlobalCurrentTaskMeta({
|
|
9589
|
+
taskID: task.id(),
|
|
9590
|
+
componentIdx: task.componentIdx(),
|
|
9591
|
+
fn: () => toolsComponentWitMetadataForWorld(variant2_0, variant2_1, variant2_2, variant4_0, variant4_1, variant4_2),
|
|
9592
|
+
});
|
|
9593
|
+
|
|
9594
|
+
let variant24;
|
|
9595
|
+
switch (dataView(memory0).getUint8(ret + 0, true)) {
|
|
9596
|
+
case 0: {
|
|
9597
|
+
var len13 = dataView(memory0).getUint32(ret + 8, true);
|
|
9598
|
+
var base13 = dataView(memory0).getUint32(ret + 4, true);
|
|
9599
|
+
var result13 = [];
|
|
9600
|
+
for (let i = 0; i < len13; i++) {
|
|
9601
|
+
const base = base13 + i * 80;
|
|
9602
|
+
var ptr5 = dataView(memory0).getUint32(base + 0, true);
|
|
9603
|
+
var len5 = dataView(memory0).getUint32(base + 4, true);
|
|
9604
|
+
var result5 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr5, len5));
|
|
9605
|
+
var ptr6 = dataView(memory0).getUint32(base + 8, true);
|
|
9606
|
+
var len6 = dataView(memory0).getUint32(base + 12, true);
|
|
9607
|
+
var result6 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr6, len6));
|
|
9608
|
+
var ptr7 = dataView(memory0).getUint32(base + 16, true);
|
|
9609
|
+
var len7 = dataView(memory0).getUint32(base + 20, true);
|
|
9610
|
+
var result7 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr7, len7));
|
|
9611
|
+
let variant12;
|
|
9612
|
+
switch (dataView(memory0).getUint8(base + 24, true)) {
|
|
9613
|
+
case 0: {
|
|
9614
|
+
variant12 = undefined;
|
|
9615
|
+
break;
|
|
9616
|
+
}
|
|
9617
|
+
case 1: {
|
|
9618
|
+
let variant9;
|
|
9619
|
+
switch (dataView(memory0).getUint8(base + 56, true)) {
|
|
9620
|
+
case 0: {
|
|
9621
|
+
variant9 = undefined;
|
|
9622
|
+
break;
|
|
9623
|
+
}
|
|
9624
|
+
case 1: {
|
|
9625
|
+
var ptr8 = dataView(memory0).getUint32(base + 60, true);
|
|
9626
|
+
var len8 = dataView(memory0).getUint32(base + 64, true);
|
|
9627
|
+
var result8 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr8, len8));
|
|
9628
|
+
variant9 = result8;
|
|
9629
|
+
break;
|
|
9630
|
+
}
|
|
9631
|
+
default: {
|
|
9632
|
+
throw new TypeError('invalid variant discriminant for option');
|
|
9633
|
+
}
|
|
9634
|
+
}
|
|
9635
|
+
let variant11;
|
|
9636
|
+
switch (dataView(memory0).getUint8(base + 68, true)) {
|
|
9637
|
+
case 0: {
|
|
9638
|
+
variant11 = undefined;
|
|
9639
|
+
break;
|
|
9640
|
+
}
|
|
9641
|
+
case 1: {
|
|
9642
|
+
var ptr10 = dataView(memory0).getUint32(base + 72, true);
|
|
9643
|
+
var len10 = dataView(memory0).getUint32(base + 76, true);
|
|
9644
|
+
var result10 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr10, len10));
|
|
9645
|
+
variant11 = result10;
|
|
9646
|
+
break;
|
|
9647
|
+
}
|
|
9648
|
+
default: {
|
|
9649
|
+
throw new TypeError('invalid variant discriminant for option');
|
|
9650
|
+
}
|
|
9651
|
+
}
|
|
9652
|
+
variant12 = {
|
|
9653
|
+
major: BigInt.asUintN(64, BigInt(dataView(memory0).getBigInt64(base + 32, true))),
|
|
9654
|
+
minor: BigInt.asUintN(64, BigInt(dataView(memory0).getBigInt64(base + 40, true))),
|
|
9655
|
+
patch: BigInt.asUintN(64, BigInt(dataView(memory0).getBigInt64(base + 48, true))),
|
|
9656
|
+
pre: variant9,
|
|
9657
|
+
build: variant11,
|
|
9658
|
+
};
|
|
9659
|
+
break;
|
|
9660
|
+
}
|
|
9661
|
+
default: {
|
|
9662
|
+
throw new TypeError('invalid variant discriminant for option');
|
|
9663
|
+
}
|
|
9664
|
+
}
|
|
9665
|
+
result13.push({
|
|
9666
|
+
namespace: result5,
|
|
9667
|
+
package: result6,
|
|
9668
|
+
interface: result7,
|
|
9669
|
+
version: variant12,
|
|
9670
|
+
});
|
|
9671
|
+
}
|
|
9672
|
+
var len22 = dataView(memory0).getUint32(ret + 16, true);
|
|
9673
|
+
var base22 = dataView(memory0).getUint32(ret + 12, true);
|
|
9674
|
+
var result22 = [];
|
|
9675
|
+
for (let i = 0; i < len22; i++) {
|
|
9676
|
+
const base = base22 + i * 80;
|
|
9677
|
+
var ptr14 = dataView(memory0).getUint32(base + 0, true);
|
|
9678
|
+
var len14 = dataView(memory0).getUint32(base + 4, true);
|
|
9679
|
+
var result14 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr14, len14));
|
|
9680
|
+
var ptr15 = dataView(memory0).getUint32(base + 8, true);
|
|
9681
|
+
var len15 = dataView(memory0).getUint32(base + 12, true);
|
|
9682
|
+
var result15 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr15, len15));
|
|
9683
|
+
var ptr16 = dataView(memory0).getUint32(base + 16, true);
|
|
9684
|
+
var len16 = dataView(memory0).getUint32(base + 20, true);
|
|
9685
|
+
var result16 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr16, len16));
|
|
9686
|
+
let variant21;
|
|
9687
|
+
switch (dataView(memory0).getUint8(base + 24, true)) {
|
|
9688
|
+
case 0: {
|
|
9689
|
+
variant21 = undefined;
|
|
9690
|
+
break;
|
|
9691
|
+
}
|
|
9692
|
+
case 1: {
|
|
9693
|
+
let variant18;
|
|
9694
|
+
switch (dataView(memory0).getUint8(base + 56, true)) {
|
|
9695
|
+
case 0: {
|
|
9696
|
+
variant18 = undefined;
|
|
9697
|
+
break;
|
|
9698
|
+
}
|
|
9699
|
+
case 1: {
|
|
9700
|
+
var ptr17 = dataView(memory0).getUint32(base + 60, true);
|
|
9701
|
+
var len17 = dataView(memory0).getUint32(base + 64, true);
|
|
9702
|
+
var result17 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr17, len17));
|
|
9703
|
+
variant18 = result17;
|
|
9704
|
+
break;
|
|
9705
|
+
}
|
|
9706
|
+
default: {
|
|
9707
|
+
throw new TypeError('invalid variant discriminant for option');
|
|
9708
|
+
}
|
|
9709
|
+
}
|
|
9710
|
+
let variant20;
|
|
9711
|
+
switch (dataView(memory0).getUint8(base + 68, true)) {
|
|
9712
|
+
case 0: {
|
|
9713
|
+
variant20 = undefined;
|
|
9714
|
+
break;
|
|
9715
|
+
}
|
|
9716
|
+
case 1: {
|
|
9717
|
+
var ptr19 = dataView(memory0).getUint32(base + 72, true);
|
|
9718
|
+
var len19 = dataView(memory0).getUint32(base + 76, true);
|
|
9719
|
+
var result19 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr19, len19));
|
|
9720
|
+
variant20 = result19;
|
|
9721
|
+
break;
|
|
9722
|
+
}
|
|
9723
|
+
default: {
|
|
9724
|
+
throw new TypeError('invalid variant discriminant for option');
|
|
9725
|
+
}
|
|
9726
|
+
}
|
|
9727
|
+
variant21 = {
|
|
9728
|
+
major: BigInt.asUintN(64, BigInt(dataView(memory0).getBigInt64(base + 32, true))),
|
|
9729
|
+
minor: BigInt.asUintN(64, BigInt(dataView(memory0).getBigInt64(base + 40, true))),
|
|
9730
|
+
patch: BigInt.asUintN(64, BigInt(dataView(memory0).getBigInt64(base + 48, true))),
|
|
9731
|
+
pre: variant18,
|
|
9732
|
+
build: variant20,
|
|
9733
|
+
};
|
|
9734
|
+
break;
|
|
9735
|
+
}
|
|
9736
|
+
default: {
|
|
9737
|
+
throw new TypeError('invalid variant discriminant for option');
|
|
9738
|
+
}
|
|
9739
|
+
}
|
|
9740
|
+
result22.push({
|
|
9741
|
+
namespace: result14,
|
|
9742
|
+
package: result15,
|
|
9743
|
+
interface: result16,
|
|
9744
|
+
version: variant21,
|
|
9745
|
+
});
|
|
9746
|
+
}
|
|
9747
|
+
variant24= {
|
|
9748
|
+
tag: 'ok',
|
|
9749
|
+
val: {
|
|
9750
|
+
imports: result13,
|
|
9751
|
+
exports: result22,
|
|
9752
|
+
}
|
|
9753
|
+
};
|
|
9754
|
+
break;
|
|
9755
|
+
}
|
|
9756
|
+
case 1: {
|
|
9757
|
+
var ptr23 = dataView(memory0).getUint32(ret + 4, true);
|
|
9758
|
+
var len23 = dataView(memory0).getUint32(ret + 8, true);
|
|
9759
|
+
var result23 = TEXT_DECODER_UTF8.decode(new Uint8Array(memory0.buffer, ptr23, len23));
|
|
9760
|
+
variant24= {
|
|
9761
|
+
tag: 'err',
|
|
9762
|
+
val: result23
|
|
9763
|
+
};
|
|
9764
|
+
break;
|
|
9765
|
+
}
|
|
9766
|
+
default: {
|
|
9767
|
+
throw new TypeError('invalid variant discriminant for expected');
|
|
9768
|
+
}
|
|
9769
|
+
}
|
|
9770
|
+
_debugLog('[iface="local:wasm-tools/tools", function="component-wit-metadata-for-world"][Instruction::Return]', {
|
|
9771
|
+
funcName: 'component-wit-metadata-for-world',
|
|
9772
|
+
paramCount: 1,
|
|
9773
|
+
async: false,
|
|
9774
|
+
postReturn: true
|
|
9775
|
+
});
|
|
9776
|
+
const retCopy = variant24;
|
|
9777
|
+
task.resolve([retCopy.val]);
|
|
9778
|
+
|
|
9779
|
+
let cstate = getOrCreateAsyncState(0);
|
|
9780
|
+
cstate.mayLeave = false;
|
|
9781
|
+
postReturn1(ret);
|
|
9782
|
+
cstate.mayLeave = true;
|
|
9783
|
+
task.exit();
|
|
9784
|
+
|
|
9785
|
+
|
|
9786
|
+
|
|
9502
9787
|
if (typeof retCopy === 'object' && retCopy.tag === 'err') {
|
|
9503
9788
|
throw new ComponentError(retCopy.val);
|
|
9504
9789
|
}
|
|
@@ -9957,7 +10242,7 @@ function metadataShow(arg0) {
|
|
|
9957
10242
|
|
|
9958
10243
|
let cstate = getOrCreateAsyncState(0);
|
|
9959
10244
|
cstate.mayLeave = false;
|
|
9960
|
-
|
|
10245
|
+
postReturn2(ret);
|
|
9961
10246
|
cstate.mayLeave = true;
|
|
9962
10247
|
task.exit();
|
|
9963
10248
|
|
|
@@ -11897,12 +12182,20 @@ export const $init = (() => {
|
|
|
11897
12182
|
postReturn0Async = exports1['cabi_post_local:wasm-tools/tools#component-embed'];
|
|
11898
12183
|
}
|
|
11899
12184
|
|
|
11900
|
-
postReturn1 = exports1['cabi_post_local:wasm-tools/tools#metadata-
|
|
12185
|
+
postReturn1 = exports1['cabi_post_local:wasm-tools/tools#component-wit-metadata-for-world'];
|
|
12186
|
+
|
|
12187
|
+
try {
|
|
12188
|
+
postReturn1Async = WebAssembly.promising(exports1['cabi_post_local:wasm-tools/tools#component-wit-metadata-for-world']);
|
|
12189
|
+
} catch(err) {
|
|
12190
|
+
postReturn1Async = exports1['cabi_post_local:wasm-tools/tools#component-wit-metadata-for-world'];
|
|
12191
|
+
}
|
|
12192
|
+
|
|
12193
|
+
postReturn2 = exports1['cabi_post_local:wasm-tools/tools#metadata-show'];
|
|
11901
12194
|
|
|
11902
12195
|
try {
|
|
11903
|
-
|
|
12196
|
+
postReturn2Async = WebAssembly.promising(exports1['cabi_post_local:wasm-tools/tools#metadata-show']);
|
|
11904
12197
|
} catch(err) {
|
|
11905
|
-
|
|
12198
|
+
postReturn2Async = exports1['cabi_post_local:wasm-tools/tools#metadata-show'];
|
|
11906
12199
|
}
|
|
11907
12200
|
|
|
11908
12201
|
_initialized = true;
|
|
@@ -11910,6 +12203,7 @@ export const $init = (() => {
|
|
|
11910
12203
|
toolsPrint = exports1['local:wasm-tools/tools#print'];
|
|
11911
12204
|
toolsComponentNew = exports1['local:wasm-tools/tools#component-new'];
|
|
11912
12205
|
toolsComponentWit = exports1['local:wasm-tools/tools#component-wit'];
|
|
12206
|
+
toolsComponentWitMetadataForWorld = exports1['local:wasm-tools/tools#component-wit-metadata-for-world'];
|
|
11913
12207
|
toolsComponentEmbed = exports1['local:wasm-tools/tools#component-embed'];
|
|
11914
12208
|
toolsMetadataShow = exports1['local:wasm-tools/tools#metadata-show'];
|
|
11915
12209
|
toolsMetadataAdd = exports1['local:wasm-tools/tools#metadata-add'];
|
|
@@ -11940,6 +12234,7 @@ const tools = {
|
|
|
11940
12234
|
componentEmbed: componentEmbed,
|
|
11941
12235
|
componentNew: componentNew,
|
|
11942
12236
|
componentWit: componentWit,
|
|
12237
|
+
componentWitMetadataForWorld: componentWitMetadataForWorld,
|
|
11943
12238
|
metadataAdd: metadataAdd,
|
|
11944
12239
|
metadataShow: metadataShow,
|
|
11945
12240
|
parse: parse,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytecodealliance/jco",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.1",
|
|
4
4
|
"description": "JavaScript tooling for working with WebAssembly Components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Component",
|
|
@@ -73,7 +73,8 @@
|
|
|
73
73
|
"prepack": "cargo xtask build release"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@bytecodealliance/componentize-js": "^0.
|
|
76
|
+
"@bytecodealliance/componentize-js": "^0.20.0",
|
|
77
|
+
"@bytecodealliance/componentize-js-0-19-3": "npm:@bytecodealliance/componentize-js@^0.19.3",
|
|
77
78
|
"@bytecodealliance/preview2-shim": "^0.17.9",
|
|
78
79
|
"binaryen": "^123.0.0",
|
|
79
80
|
"commander": "^14",
|
package/src/cmd/componentize.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { stat, readFile, writeFile } from "node:fs/promises";
|
|
2
2
|
import { resolve, basename } from "node:path";
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
import * as wasmToolsComponent from "../../obj/wasm-tools.js";
|
|
5
|
+
|
|
6
|
+
import { styleText, isWindows } from "../common.js";
|
|
4
7
|
|
|
5
8
|
/** All features that can be enabled/disabled */
|
|
6
9
|
const ALL_FEATURES = ["clocks", "http", "random", "stdio", "fetch-event"];
|
|
@@ -8,19 +11,72 @@ const ALL_FEATURES = ["clocks", "http", "random", "stdio", "fetch-event"];
|
|
|
8
11
|
/** Features that should be used for --debug mode */
|
|
9
12
|
const DEBUG_FEATURES = ["stdio"];
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Detect whether the WIT of a given component contains an older version of
|
|
16
|
+
* `wasi:http` which necessitates an older version of `componentize-js`
|
|
17
|
+
*
|
|
18
|
+
* @param {string} witPath
|
|
19
|
+
* @returns bool
|
|
20
|
+
*/
|
|
21
|
+
async function usesOlderWasiHTTP(witPath, worldName) {
|
|
22
|
+
await wasmToolsComponent.$init;
|
|
23
|
+
|
|
24
|
+
witPath = (isWindows ? "//?/" : "") + resolve(witPath);
|
|
25
|
+
const worldMetadata = wasmToolsComponent.tools.componentWitMetadataForWorld(
|
|
26
|
+
{ tag: "path", val: witPath },
|
|
27
|
+
worldName ?? null,
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
// Check if the an old `wasi:http/incoming-handler` version is exported
|
|
31
|
+
const exportsOldIncomingHandler = worldMetadata.exports.some((iface) => {
|
|
32
|
+
return (
|
|
33
|
+
iface.namespace === "wasi" &&
|
|
34
|
+
iface.version !== null &&
|
|
35
|
+
iface.version.major === 0n &&
|
|
36
|
+
iface.version.minor < 3n &&
|
|
37
|
+
iface.version.patch < 10n
|
|
38
|
+
);
|
|
39
|
+
});
|
|
13
40
|
|
|
41
|
+
const importsOldFetch = worldMetadata.imports.some((iface) => {
|
|
42
|
+
return (
|
|
43
|
+
iface.namespace === "wasi" &&
|
|
44
|
+
iface.version !== null &&
|
|
45
|
+
iface.version.major === 0n &&
|
|
46
|
+
iface.version.minor < 3n &&
|
|
47
|
+
iface.version.patch < 10n
|
|
48
|
+
);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return exportsOldIncomingHandler || importsOldFetch;
|
|
52
|
+
}
|
|
53
|
+
export async function componentize(jsSource, opts) {
|
|
14
54
|
const { disableFeatures, enableFeatures } = calculateFeatureSet(opts);
|
|
15
55
|
|
|
16
56
|
const source = await readFile(jsSource, "utf8");
|
|
17
|
-
|
|
18
57
|
const witPath = resolve(opts.wit);
|
|
19
58
|
const sourceName = basename(jsSource);
|
|
20
59
|
|
|
60
|
+
// Load an older version of componentize-js if we detect an older version of WASI HTTP in use
|
|
61
|
+
// as the version that is usable is baked into the StarlingMonkey version provided by a given version
|
|
62
|
+
// of componentize-js
|
|
63
|
+
let componentizeJSModule;
|
|
64
|
+
const useOldComponentizeJS = await usesOlderWasiHTTP(witPath, opts.worldName);
|
|
65
|
+
if (useOldComponentizeJS) {
|
|
66
|
+
// NOTE: if we were to use a version of componentize-js 0.20.0 or newer here,
|
|
67
|
+
// the build would fail, as newer versions do not support wasi:http < 0.2.10
|
|
68
|
+
// for fetch.
|
|
69
|
+
console.error(
|
|
70
|
+
`${styleText(["yellow", "bold"], "warning")} Falling back to componentize-js 0.19.3 because this component requests Preview 2 WASI packages older than 0.2.10. See https://bytecodealliance.github.io/jco/troubleshooting/common-issues.html#componentize-js-0193-fallback for details and upgrade steps.`,
|
|
71
|
+
);
|
|
72
|
+
componentizeJSModule = await eval('import("@bytecodealliance/componentize-js-0-19-3")');
|
|
73
|
+
} else {
|
|
74
|
+
componentizeJSModule = await eval('import("@bytecodealliance/componentize-js")');
|
|
75
|
+
}
|
|
76
|
+
|
|
21
77
|
let component;
|
|
22
78
|
try {
|
|
23
|
-
const result = await
|
|
79
|
+
const result = await componentizeJSModule.componentize(source, {
|
|
24
80
|
enableAot: opts.aot,
|
|
25
81
|
aotMinStackSizeBytes: opts.aotMinStackSizeBytes,
|
|
26
82
|
wevalBin: opts.wevalBin,
|
|
@@ -41,7 +97,7 @@ export async function componentize(jsSource, opts) {
|
|
|
41
97
|
},
|
|
42
98
|
});
|
|
43
99
|
if (result.debug) {
|
|
44
|
-
console.error(`${styleText("cyan", "DEBUG")} Debug output\n${JSON.stringify(debug, null, 2)}\n`);
|
|
100
|
+
console.error(`${styleText("cyan", "DEBUG")} Debug output\n${JSON.stringify(result.debug, null, 2)}\n`);
|
|
45
101
|
}
|
|
46
102
|
|
|
47
103
|
component = result.component;
|