-
-
Notifications
You must be signed in to change notification settings - Fork 47
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Typescript definition for wasm target #113
Comments
This looks great! Some hopefully helpful information
Looking forward to the PR! |
Yep, though there's one or two idiosyncrasies (namely Indeed, it's a proc macro. Yeah, all the top level function exports (members of wasm_bindings) are ineligible for the macro form sadly (the tsify crate is in a... complicated state re maintenance - pretty sure I can modify it to work on functions, but that would require depending on a fork :-/), so it's back to #[wasm_bindgen(typescript_custom_section)]
const TYPES: &str = r###"
export function parse_expression(input: string): {Ok: Expression} | {Err: [string, Span]}
export function parse_module(input: string): {Ok: Module} | {Err: [string, Span]}
"###; The consensus around non-automated use of those is: Good for slowly changing api surfaces; avoid for everything else (because they're susceptible to typedef drift). Also, one follow-up question: |
I see, I will bear that in mind for changes. Can you have separate sections? So that rather than one block, there is one above each function to keep it together?
I can't quite remember but I think I had some issues with wasm-pack. One thing is that using the wasm-bindgen CLI directly I can pin the CLI version so it is the same version as the crate (I have had some problems where the GH actions downloaded a CLI with a new patch which wasn't equal to the one crates dependency and so broke). Is there any benefits to doing it in one with wasm-pack? |
Good point, yes, that's permitted (I've actually already switched to that in the parser crate, far too difficult to write otherwise).
Yeah, the big win from wasm-pack is wasm-opt (~30% uncompressed size reduction (negligible compressed). The optimization runs are, like most compilers, pretty variable wrt execution time reductions - I typically see ~10-15% speed boosts). the wasm-pack maintainers have been pretty good about ensuring the bindgen version precisely matches the crate's version (there's a fair amount of careful Cargo.toml parsing involved). |
This one comes in two parts:
The trivial one: At the moment, it looks like unbuild is losing the wasm-bindgen'd .d.ts files - flipping the declarations flag on in the builds section was enough (though it does produce a .d.ts, .d.mts per entrypoint, alongside the shared/ezno_lib.d.ts 🤷 ).
Less trivial: better type hinting on the serialized return results in src/wasm_bindings.rs.
I did this a few days ago over in the oxc project (oxc-project/oxc/#2158), it more or less boils down to:
derive(Serialize)
present#[cfg_attr(target_family = "wasm", derive(tsify::Tsify))]
or#[cfg_attr(feature = "wasm", derive(tsify::Tsify))]
on them (depending on stylistic preference - chrono uses target_family, zstd uses a 'wasm' feature flag).bitflags!
), add a#[wasm_bingen(custom_typescript_section)]
static text block manually specifying their type (a handful or so cropped up in the oxc PR).I'll put up a PR shortly, but in the meantime I have a couple of questions:
The text was updated successfully, but these errors were encountered: