WebAssembly/component-model#686 is eqrion's draft web embedding for components (binds components directly to WebIDL, replacing the Explainer's JS-API sketch; Gecko prototype behind it). It is the presumptive shape of eventual native support, so divergences between it and our embedder API are migration surface.
This issue is tracking only. The PR explicitly states it needs more iterations and is not ready for detailed review — no upstream feedback goes out from here. Revisit when the author calls for review or the draft visibly stabilizes.
Amendment A10 (#114) already took the two cheap alignments: ComponentException naming and { kind, value } variant dictionaries.
Watchlist
| # |
Surface |
deltic (embedder-api.md) |
#686 draft |
Disposition |
| 1 |
option-typed record fields, none case |
field absent on lift |
option<T> → T? as required member → null present |
cosmetic-ish; would touch lift shape + bindgen types. Wait. |
| 2 |
exception inheritance |
ComponentException extends Error + structured payload |
ComponentException derived from DOMException (TODO in draft) |
DOMException absent in bare sm/jsc shell lanes; a payload-carrying subclass would stay brand-compatible if we ever move. Wait. |
| 3 |
instance import/export object shape |
two-level, interface-name-keyed records |
TODO upstream |
the only item with structural-change potential for us. Watch closely. |
| 4 |
s64/u64 |
bigint |
long long (JS Number; BigInt throws at the JS binding) |
hold ours; expect the draft to move. |
| 5 |
list<u8> / numeric lists |
Uint8Array (always a copy) |
sequence<octet>; no BufferSource coercion path |
hold ours; expect the draft to move. |
| 6 |
own disposal |
[Symbol.dispose]/drop() + FinalizationRegistry backstop |
FinalizationRegistry only |
hold ours. |
| 7 |
streams/futures |
Stream<T>/Future<T> handles (cancel/drop expressible) |
ReadableStream?/Promise — TODO in draft |
nothing to align to yet. |
| 8 |
variant dictionary |
{ kind, value } (adopted, A10) |
{ kind, value } |
aligned; residual risk is upstream churn away from it (re-migration accepted — contract A10 note). |
Re-check triggers
- New iterations pushed to the PR (author: "needs a couple more iterations") or the PR merging.
- The Mozilla prototype landing/shipping in Nightly.
- WebIDL-spec coordination artifacts appearing (anonymous/non-global namespaces, per-instance interfaces).
Refs: contracts/embedder-api.md (A10 status entry + terminology note), PR #114.
WebAssembly/component-model#686 is eqrion's draft web embedding for components (binds components directly to WebIDL, replacing the Explainer's JS-API sketch; Gecko prototype behind it). It is the presumptive shape of eventual native support, so divergences between it and our embedder API are migration surface.
This issue is tracking only. The PR explicitly states it needs more iterations and is not ready for detailed review — no upstream feedback goes out from here. Revisit when the author calls for review or the draft visibly stabilizes.
Amendment A10 (#114) already took the two cheap alignments:
ComponentExceptionnaming and{ kind, value }variant dictionaries.Watchlist
option<T>→T?as required member →nullpresentComponentException extends Error+ structuredpayloadComponentExceptionderived fromDOMException(TODO in draft)DOMExceptionabsent in bare sm/jsc shell lanes; a payload-carrying subclass would stay brand-compatible if we ever move. Wait.bigintlong long(JS Number; BigInt throws at the JS binding)list<u8>/ numeric listsUint8Array(always a copy)sequence<octet>; no BufferSource coercion pathowndisposal[Symbol.dispose]/drop()+ FinalizationRegistry backstopStream<T>/Future<T>handles (cancel/drop expressible)ReadableStream?/Promise— TODO in draft{ kind, value }(adopted, A10){ kind, value }Re-check triggers
Refs: contracts/embedder-api.md (A10 status entry + terminology note), PR #114.