bytecodealliance/jco
Vedi su GitHubTranspile bindings for `u32` map to `number` in *.d.ts
Open
#402 aperta il 12 mar 2024
buggood first issueproject/js-component-bindgen
Metriche repository
- Star
- (952 star)
- Metriche merge PR
- (Merge medio 9h 50m) (94 PR mergiate in 30 g)
Descrizione
I noticed in making this little demo that I could not use signed or out-of-bounds numbers for wasmtime but that in the browser and via node it does.
https://stackoverflow.com/help/minimal-reproducible-example adding to the cli:
../wit/calculator.wit
interface calculate {
enum op {
add,
}
eval-expression: func(op: op, x: u32, y: u32) -> u32;
}
jco version 1.0.3 generated bindings/interfaces/docs-calculator-calculate.d.ts
export namespace DocsCalculatorCalculate {
export function evalExpression(op: Op, x: number, y: number): number;
}
cli-calc.js:
// u32 is specified in wit, but typescript bindings specify only `number`
console.log("Unsigned overflow = " + calculate.evalExpression("add", 4294967300, 0));
console.log("Unsigned underflow = " + calculate.evalExpression("add", -4294967200, 0));
// negative should fail types... 😬 ^^^^^
// $ node cli-calc.js
Answer (to life) = 42
Unsigned overflow = 4
Unsigned underflow = 96
Is there a way now to ensure that bindings generated use the WIT specified stronger types? I would think softening the interface to number should not be the default :sweat_smile: