Generated JS has "new" as function name which triggers SyntaxError
Closed this issue · 1 comments
jcbhmr commented
jcbhmr@PIG-2016:~/Documents/semver.wasm$ node --experimental-default-type=module
Welcome to Node.js v21.5.0.
Type ".help" for more information.
> let m
undefined
> m = await import("./out/jco-transpile/semver.js")
file:///home/jcbhmr/Documents/semver.wasm/out/jco-transpile/semver.js:1565
BuildMetadata.new = function new(arg0) {
^^^
Uncaught SyntaxError: Unexpected token 'new'
>
WIT that I used:
package jcbhmr:semver;
interface semver {
resource build-metadata {
empty: static func() -> build-metadata;
new: static func(text: string) -> result<build-metadata, error>;
as-str: func() -> string;
is-empty: func() -> bool;
}
record comparator {
op: op,
major: u64,
minor: option<u64>,
patch: option<u64>,
pre: prerelease,
}
comparator-parse: func(text: string) -> result<comparator, error>;
comparator-matches: func(self: comparator, version: version) -> bool;
resource error {}
resource prerelease {
empty: static func() -> prerelease;
new: static func(text: string) -> result<prerelease, error>;
as-str: func() -> string;
is-empty: func() -> bool;
}
record version {
major: u64,
minor: u64,
patch: u64,
pre: prerelease,
build: build-metadata,
}
version-new: func(major: u64, minor: u64, patch: u64) -> version;
version-parse: func(text: string) -> result<version, error>;
version-cmp-precedence: func(a: version, b: version) -> s8;
record version-req {
comparators: list<comparator>,
}
version-req-star: func() -> version-req;
version-req-parse: func(text: string) -> result<version-req, error>;
version-req-matches: func(self: version-req, version: version) -> bool;
enum op {
exact,
greater,
greater-eq,
less,
less-eq,
tilde,
caret,
wildcard,
}
}
world host {
export semver;
}
Then I used cargo component build
to get the output WASM file and jco transpile
to turn that WASM component into JavaScript:
cargo component build
jco transpile ./target/wasm32-wasi/debug/semver.wasm --out-dir ./out/jco-transpile
For context about the naming: I was unable return a result<...>
from a WIT constructor();
so I just used a static constructor TheResource.new()
function.
More context: I'm playing around with cargo component
and was trying to experiment with the semver Rust library: https://docs.rs/semver
guybedford commented
Thanks for posting this case, fixed in #331 for the next release.