Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
5e4bae3
feat(es/parser): add oxc-style parser api
kdy1 Jul 11, 2026
d0185ff
perf(es/parser): benchmark next parser api
kdy1 Jul 11, 2026
94d4867
perf(es/parser): return lexer comments directly
kdy1 Jul 11, 2026
c40bc54
refactor(es/parser): route compiler through next api
kdy1 Jul 11, 2026
a223521
docs(es/parser): document next parser migration
kdy1 Jul 11, 2026
ccec896
refactor(swc): parse flow through next api
kdy1 Jul 11, 2026
dc06ac1
fix(es/parser): cap recursive parse depth
kdy1 Jul 11, 2026
0cac447
test(es/parser): add next parser fixture parity
kdy1 Jul 11, 2026
4491950
refactor(es/lexer): pack per-token flags
kdy1 Jul 11, 2026
b213907
perf(es/parser): expand codspeed language corpus
kdy1 Jul 11, 2026
4da45bf
refactor(bindings): use next parser api
kdy1 Jul 11, 2026
ec70418
refactor(ts): migrate fast strip to next parser
kdy1 Jul 11, 2026
d4f8fcf
refactor(es/parser): rewind lookahead at checkpoints
kdy1 Jul 11, 2026
1602924
refactor(es/parser): remove cloneable token streams
kdy1 Jul 11, 2026
e49571e
test(es/parser): compare test262 ast parity
kdy1 Jul 11, 2026
8c0988c
test(es/parser): compare hermes ast parity
kdy1 Jul 11, 2026
1b2f0a7
refactor(react/compiler): parse with next api
kdy1 Jul 11, 2026
d47ee6b
test(es/parser): fuzz cursor and rewind paths
kdy1 Jul 11, 2026
2cf10f5
refactor(parser): migrate runtime module callers
kdy1 Jul 11, 2026
4f896eb
refactor(html/minifier): use next js parser
kdy1 Jul 11, 2026
d106cc6
refactor(dbg-swc): parse through next api
kdy1 Jul 11, 2026
d1709fc
refactor(es/minifier): migrate cli parser
kdy1 Jul 11, 2026
accfcf0
feat(es/parser): promote oxc-style parser api
kdy1 Jul 11, 2026
8954098
refactor(es/parser): expose a single parser namespace
kdy1 Jul 11, 2026
d3179ee
fix(es/parser): update all target imports
kdy1 Jul 11, 2026
6d43d3a
chore: update parser rewrite changeset
kdy1 Jul 11, 2026
3811285
refactor(es/parser): remove abandoned lexer crate
kdy1 Jul 11, 2026
1a3c257
fix(es/parser): separate grammar depth counters
kdy1 Jul 11, 2026
65e0303
perf(es/parser): port oxc pointer source cursor
kdy1 Jul 11, 2026
6fa6227
perf(es/parser): defer identifier atom creation
kdy1 Jul 11, 2026
08f1469
perf(es/parser): attach lexer trivia without tokens
kdy1 Jul 11, 2026
afe09a5
perf(es/parser): remove redundant depth counter
kdy1 Jul 11, 2026
909082f
perf(es/parser): defer unescaped string atoms
kdy1 Jul 11, 2026
6728f54
perf(es/parser): defer plain template atoms
kdy1 Jul 11, 2026
72c1cac
fix(es/parser): restore integration compatibility
kdy1 Jul 11, 2026
669213d
perf(es/parser): defer bigint conversion
kdy1 Jul 11, 2026
646703c
refactor(es/parser): port oxc lookahead cursor
kdy1 Jul 11, 2026
3e9035a
perf(es/parser): defer numeric conversion
kdy1 Jul 11, 2026
d65899d
perf(es/parser): move depth checks off hot paths
kdy1 Jul 11, 2026
178146a
perf(ts/fast-strip): skip unused token capture
kdy1 Jul 11, 2026
37709bc
perf(es/parser): reuse captured token storage
kdy1 Jul 11, 2026
0956ffd
refactor(es/parser): split next api module
kdy1 Jul 11, 2026
499a8d2
feat(es/parser): add oxc packed token config
kdy1 Jul 11, 2026
3263e8e
refactor(es/lexer): isolate next source cursor
kdy1 Jul 11, 2026
b31e0ea
feat(es/lexer): add oxc byte dispatch core
kdy1 Jul 11, 2026
1377dbd
feat(es/lexer): add parser-directed relexing
kdy1 Jul 11, 2026
44897ee
feat(es/parser): add oxc checkpoint cursor
kdy1 Jul 11, 2026
427110d
feat(es/parser): build primary expression ast
kdy1 Jul 12, 2026
b60ee09
feat(es/parser): parse unary and binary expressions
kdy1 Jul 12, 2026
e1ecdc9
feat(es/parser): parse member and call chains
kdy1 Jul 12, 2026
6a9eaa4
feat(es/parser): parse conditional assignments
kdy1 Jul 12, 2026
37c74fb
feat(es/parser): parse arrow expressions
kdy1 Jul 12, 2026
8b50db7
feat(es/parser): parse basic script statements
kdy1 Jul 12, 2026
a785371
feat(es/parser): expose independent next engine
kdy1 Jul 12, 2026
64c637e
feat(es/parser): parse array and object literals
kdy1 Jul 12, 2026
d933801
feat(es/lexer): decode escaped strings lazily
kdy1 Jul 12, 2026
67b8585
fix(es/parser): preserve native nested blocks
kdy1 Jul 12, 2026
396147d
test(swc): fix arrow comment references
kdy1 Jul 12, 2026
ee08be7
fix(es/parser): preserve parenthesized optional chains
kdy1 Jul 12, 2026
9dae851
fix(es/parser): defer unambiguous using checks
kdy1 Jul 12, 2026
65807c2
fix(es/lexer): restart lazy token spans after trivia
kdy1 Jul 12, 2026
3d1afb7
fix(html/minifier): honor js comment collection option
kdy1 Jul 12, 2026
b1348ce
feat(es/parser): parse control flow statements
kdy1 Jul 12, 2026
eb0e827
feat(es/parser): parse switch and try statements
kdy1 Jul 12, 2026
4ddda9b
fix(es/parser): accept contextual identifiers
kdy1 Jul 12, 2026
d1204fd
feat(es/parser): parse for statement variants
kdy1 Jul 12, 2026
7604546
feat(es/parser): parse function nodes directly
kdy1 Jul 12, 2026
a90de4c
feat(es/parser): parse async and block functions
kdy1 Jul 12, 2026
e2572e9
feat(es/parser): parse class nodes directly
kdy1 Jul 12, 2026
74a45d9
feat(es/parser): relex regular expressions
kdy1 Jul 12, 2026
67af81e
feat(es/parser): parse template literals directly
kdy1 Jul 12, 2026
df769d0
feat(es/parser): parse new update await and yield
kdy1 Jul 12, 2026
b430fe8
feat(es/parser): parse sequence expressions
kdy1 Jul 12, 2026
7fc0977
feat(es/parser): parse module declarations directly
kdy1 Jul 12, 2026
f167b9c
feat(es/parser): parse binding patterns directly
kdy1 Jul 12, 2026
b7ac126
Revert "refactor(ts): migrate fast strip to next parser"
kdy1 Jul 12, 2026
8c95575
Revert "perf(es/parser): return lexer comments directly"
kdy1 Jul 12, 2026
38ebc67
fix(es/parser): isolate next engine from legacy parser
kdy1 Jul 12, 2026
d2dbf30
perf(es/parser): restore legacy parser hot path
kdy1 Jul 12, 2026
f483b7a
feat(es/parser): parse labeled and with statements
kdy1 Jul 12, 2026
b4922d9
feat(es/parser): parse special lhs expressions
kdy1 Jul 12, 2026
95fa1db
fix(es/parser): preserve token debug output
kdy1 Jul 12, 2026
d5f040b
feat(es/parser): parse modern class members
kdy1 Jul 12, 2026
3b20e19
feat(es/parser): parse jsx nodes directly
kdy1 Jul 12, 2026
307eb24
test(es/parser): compare independent javascript ast
kdy1 Jul 12, 2026
2fd94e8
feat(es/lexer): retain source-backed comments
kdy1 Jul 12, 2026
3c09155
feat(es/parser): expose static packed token path
kdy1 Jul 12, 2026
c0ba056
feat(es/parser): parse complete object members
kdy1 Jul 12, 2026
f733c72
feat(es/parser): parse optional chains directly
kdy1 Jul 12, 2026
9b8ca10
feat(es/parser): parse async arrow functions
kdy1 Jul 12, 2026
58f25fa
feat(es/parser): begin independent typescript grammar
kdy1 Jul 12, 2026
c1429bc
feat(es/parser): parse typescript annotations and assertions
kdy1 Jul 12, 2026
3808e15
feat(es/parser): parse typescript type params and enums
kdy1 Jul 12, 2026
4547191
feat(es/parser): parse typescript interfaces and object types
kdy1 Jul 12, 2026
18baeb2
test(es/parser): enforce javascript corpus parity
kdy1 Jul 12, 2026
402769f
bench(es/parser): measure independent javascript engine
kdy1 Jul 12, 2026
835994b
feat(es/parser): decode identifier escapes in next lexer
kdy1 Jul 12, 2026
8a389c9
feat(es/parser): lex annex b strings and comments
kdy1 Jul 12, 2026
a2ad65d
feat(es/parser): complete javascript test262 parity
kdy1 Jul 12, 2026
9c5f05f
feat(es/parser): parse typescript generics and annotations independently
kdy1 Jul 12, 2026
1280919
feat(es/parser): parse typescript type and class grammar
kdy1 Jul 12, 2026
1db6c85
feat(es/parser): parse typescript modules and assertions independently
kdy1 Jul 12, 2026
5f9a95a
feat(es/parser): complete typescript class grammar parity
kdy1 Jul 12, 2026
090a27b
feat(es/parser): complete typescript fixture parity
kdy1 Jul 12, 2026
53025ec
feat(es/parser): parse core flow grammar independently
kdy1 Jul 12, 2026
9ddb94c
feat(es/parser): complete independent flow grammar
kdy1 Jul 12, 2026
badef06
feat(es/parser): cut public api over to independent parser
kdy1 Jul 12, 2026
14fe395
feat(es/parser): complete independent syntax validation
kdy1 Jul 12, 2026
2ad6bd4
refactor(compiler): use independent parser api
kdy1 Jul 12, 2026
8b4f4a8
refactor(swc): parse flow through new parser api
kdy1 Jul 12, 2026
781b628
perf(fast-strip): consume packed parser tokens directly
kdy1 Jul 12, 2026
f6d5a2c
refactor(ecma): migrate parser expression consumers
kdy1 Jul 12, 2026
2111f63
refactor(config): parse configured expressions with new api
kdy1 Jul 12, 2026
619e08d
refactor(ecma-quote): parse quoted nodes with new api
kdy1 Jul 12, 2026
008995c
refactor(testing): use independent parser api
kdy1 Jul 12, 2026
dacbacb
test(es/parser): migrate fixture harnesses to new api
kdy1 Jul 12, 2026
23eb8b5
test(es/parser): run test262 on independent parser
kdy1 Jul 12, 2026
ea4abcf
refactor(es/parser): benchmark and document public parser
kdy1 Jul 12, 2026
0570e83
refactor(es/parser): own packed token kinds
kdy1 Jul 12, 2026
2725b57
refactor(es/parser)!: remove legacy lexer and parser
kdy1 Jul 12, 2026
0bdfbfe
refactor(ecma): migrate parser development targets
kdy1 Jul 12, 2026
2df0565
refactor(ecma): migrate codegen and transform test parsers
kdy1 Jul 12, 2026
5e6bb95
refactor(ecma): migrate bundler and typescript consumers
kdy1 Jul 12, 2026
4e9f1df
refactor(ecma): finish workspace parser migration
kdy1 Jul 12, 2026
206e84c
fix(es/parser): reject invalid numeric literals without panic
kdy1 Jul 12, 2026
d24ba39
feat(es/parser): complete flow and early error validation
kdy1 Jul 13, 2026
1ef591e
fix(es/parser): complete normalized fixture parity
kdy1 Jul 13, 2026
b8846e3
fix(es/parser): enforce test262 early errors
kdy1 Jul 13, 2026
26ba38c
fix(es/parser): preserve flow and comment semantics
kdy1 Jul 13, 2026
1aa4d2f
chore(es/parser): finalize release metadata
kdy1 Jul 13, 2026
54c859a
fix(es/parser): attach semicolon comments as trailing
kdy1 Jul 13, 2026
283d065
fix(es/parser): preserve production prefixes in release builds
kdy1 Jul 13, 2026
16dc3ac
fix(wasm): migrate parser integration tests
kdy1 Jul 13, 2026
c008979
style(es/parser): satisfy workspace clippy
kdy1 Jul 13, 2026
74c6500
fix(es/parser): preserve Flow global references
kdy1 Jul 13, 2026
1a415da
chore: remove unused parser macro dependency
kdy1 Jul 13, 2026
471a68b
fix(bench): force module parsing where required
kdy1 Jul 13, 2026
d85977b
fix(es/parser): allow TypeScript overload declarations
kdy1 Jul 13, 2026
e9969fe
fix(es/parser): support explicit TypeScript this parameters
kdy1 Jul 13, 2026
87a5640
fix(es/parser): restore extended export and surrogate recovery
kdy1 Jul 13, 2026
a99b530
test(es/parser): update spans for new engine
kdy1 Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .changeset/rewrite-parser-api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
dbg-swc: major
jsdoc: patch
swc: major
swc_bundler: major
swc_compiler_base: major
swc_core: major
swc_ecma_codegen: patch
swc_ecma_lints: patch
swc_ecma_minifier: major
swc_ecma_parser: major
swc_ecma_preset_env: patch
swc_ecma_quote_macros: major
swc_ecma_react_compiler: major
swc_ecma_transforms_base: major
swc_ecma_transforms_module: major
swc_ecma_transforms_optimization: major
swc_ecma_transforms_react: major
swc_ecma_transforms_testing: major
swc_ecma_transforms_typescript: patch
swc_ecma_utils: patch
swc_estree_compat: major
swc_html_minifier: major
swc_node_bundler: major
swc_ts_fast_strip: major
swc_typescript: patch
---

feat(es/parser): Replace the parser API with the OXC-style entry point and remove the abandoned lexer crate
33 changes: 0 additions & 33 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ rustc-hash = "2"
ryu-js = "1.0.0"
scoped-tls = "1.0.1"
semver = "1.0.20"
seq-macro = "0.3"
serde = "1.0.225"
serde-wasm-bindgen = "0.6.5"
serde_derive = "1.0.225"
Expand Down
2 changes: 1 addition & 1 deletion bindings/binding_core_wasm/__tests__/error.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ it("properly reports error", () => {

expect(() => {
swc.transformSync("Foo {}", {});
}).toThrow("Expected ';', '}' or <eof>");
}).toThrow();
});
2 changes: 1 addition & 1 deletion bindings/binding_es_ast_viewer/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ features = [
"common",
"ecma_visit",
"ecma_transforms",
"ecma_parser_unstable",
"ecma_parser_typescript",
]
path = "../../crates/swc_core"

Expand Down
18 changes: 9 additions & 9 deletions bindings/binding_es_ast_viewer/__tests__/parse.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ describe("parse", () => {
expect(result[0]).toMatch(/Module|Script/);
expect(result[0]).toContain("Stmt");
// Second element should be the tokens
expect(result[1]).toContain("TokenAndSpan");
expect(result[1]).toContain("PackedToken");
});

it("should parse TypeScript code with type annotations", () => {
Expand All @@ -25,7 +25,7 @@ describe("parse", () => {
expect(result[0]).toMatch(/Module|Script/);
expect(result[0]).toContain("TsTypeAnn");
// Should have tokens
expect(result[1]).toContain("TokenAndSpan");
expect(result[1]).toContain("PackedToken");
});

it("should parse JSX code", () => {
Expand Down Expand Up @@ -70,7 +70,7 @@ describe("parse", () => {
expect(result).toHaveLength(2);
expect(result[0]).toContain("ArrowExpr");
// Check for arrow token
expect(result[1]).toContain("=>");
expect(result[1]).toContain("kind: Arrow");
});

it("should parse async/await", () => {
Expand All @@ -80,7 +80,7 @@ describe("parse", () => {
expect(result[0]).toContain("AwaitExpr");
expect(result[0]).toContain("FnDecl");
// Tokens should be present
expect(result[1]).toContain("TokenAndSpan");
expect(result[1]).toContain("PackedToken");
});

it("should parse class declarations", () => {
Expand All @@ -90,7 +90,7 @@ describe("parse", () => {
expect(result[0]).toContain("ClassDecl");
expect(result[0]).toContain("Constructor");
// Check for class keyword in tokens
expect(result[1]).toContain("class");
expect(result[1]).toContain("kind: Class");
});

it("should parse template literals", () => {
Expand All @@ -99,7 +99,7 @@ describe("parse", () => {
expect(result).toHaveLength(2);
expect(result[0]).toContain("Tpl");
// Check for template tokens
expect(result[1]).toContain("`");
expect(result[1]).toContain("kind: TemplateHead");
});

it("should handle syntax errors gracefully", () => {
Expand Down Expand Up @@ -169,7 +169,7 @@ describe("parse", () => {
expect(result).toHaveLength(2);
expect(result[0]).toContain("SpreadElement");
// Check for spread token
expect(result[1]).toContain("...");
expect(result[1]).toContain("kind: DotDotDot");
});

it("should parse optional chaining", () => {
Expand All @@ -187,7 +187,7 @@ describe("parse", () => {
expect(result[0]).toContain("BinExpr");
expect(result[0]).toContain('op: "??"');
// Check for nullish coalescing token
expect(result[1]).toContain("??");
expect(result[1]).toContain("kind: NullishCoalescing");
});

it("should parse BigInt literals", () => {
Expand All @@ -196,7 +196,7 @@ describe("parse", () => {
expect(result).toHaveLength(2);
expect(result[0]).toContain("BigInt");
// Check for BigInt token
expect(result[1]).toContain("<bigint literal>");
expect(result[1]).toContain("kind: BigInt");
});

it("should parse private class fields", () => {
Expand Down
70 changes: 41 additions & 29 deletions bindings/binding_es_ast_viewer/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use swc_core::{
common::{errors::ColorConfig, FileName, Globals, Mark, SourceMap, GLOBALS},
ecma::{
ast::*,
parser::{unstable::Capturing, EsSyntax, Lexer, Parser, StringInput, Syntax, TsSyntax},
parser::{ModuleKind, ParseOptions, Parser, ParserReturn, SourceType},
transforms::base::resolver,
visit::VisitMutWith,
},
Expand Down Expand Up @@ -46,40 +46,53 @@ pub fn parse(input: &str, file_name: Option<String>) -> Result<Vec<String>, Stri
.map(|e| e == "ts" || e == "tsx" || e == "mts" || e == "cts" || e == "mtsx" || e == "ctsx")
.unwrap_or_default();

let is_d_ts =
is_ts && matches!(iter.next(), Some("d" | "D")) || matches!(iter.next(), Some("d" | "D"));
let lower_file_name = file_name.to_ascii_lowercase();
let is_d_ts = is_ts
&& [".d.ts", ".d.mts", ".d.cts"]
.iter()
.any(|suffix| lower_file_name.ends_with(suffix));

let cm: Arc<SourceMap> = Default::default();
let fm = cm.new_source_file(
Arc::new(FileName::Real(file_name.into())),
input.to_string(),
);

let syntax = if is_ts {
Syntax::Typescript(TsSyntax {
tsx: is_jsx,
dts: is_d_ts,
..Default::default()
})
let source_type = if is_d_ts {
SourceType::type_definition()
} else if is_ts && is_jsx {
SourceType::tsx()
} else if is_ts {
SourceType::typescript()
} else if is_jsx {
SourceType::jsx()
} else {
Syntax::Es(EsSyntax {
jsx: is_jsx,
..Default::default()
})
SourceType::unambiguous()
};
let target = EsVersion::latest();

let lexer = Capturing::new(Lexer::new(syntax, target, StringInput::from(&*fm), None));

let mut parser = Parser::new_from(lexer);

let program = if is_esm {
parser.parse_module().map(Program::Module)
let module_kind = if is_esm {
ModuleKind::Module
} else if is_cjs {
parser.parse_commonjs().map(Program::Script)
ModuleKind::CommonJs
} else {
parser.parse_program()
ModuleKind::Unambiguous
};
let source_type = source_type.with_module_kind(module_kind);
let options = ParseOptions {
target: EsVersion::latest(),
..Default::default()
};
let ParserReturn {
program,
diagnostics,
tokens,
panicked,
..
} = Parser::new(input, source_type)
.with_options(options)
.with_start_pos(fm.start_pos)
.with_tokens()
.parse();

let mut ast = try_with_handler(
cm,
Expand All @@ -88,20 +101,19 @@ pub fn parse(input: &str, file_name: Option<String>) -> Result<Vec<String>, Stri
..Default::default()
},
|handler| {
for err in parser.take_errors() {
for err in diagnostics {
err.into_diagnostic(handler).emit();
}

program.map_err(|err| {
err.into_diagnostic(handler).emit();
anyhow::anyhow!("Failed to parse the input")
})
if panicked || handler.has_errors() {
Err(anyhow::anyhow!("Failed to parse the input"))
} else {
Ok(program)
}
},
)
.map_err(|err| err.to_pretty_string())?;

let tokens = parser.input_mut().iter_mut().take();

GLOBALS.set(&Globals::default(), || {
let unresolved_mark = Mark::new();
let top_level_mark = Mark::new();
Expand Down
30 changes: 9 additions & 21 deletions bindings/binding_react_compiler_node/src/support.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
use napi::bindgen_prelude::*;
use swc_core::{
common::{sync::Lrc, FileName, SourceMap},
ecma::{ast::EsVersion, parser::Syntax},
};
use swc_core::ecma::parser::{ParseOptions, Parser, SourceType};

struct IsReactCompilerRequiredTask {
code: String,
Expand All @@ -23,26 +20,17 @@ impl Task for IsReactCompilerRequiredTask {
}

fn is_react_compiler_required_inner(code: &str) -> bool {
let cm = Lrc::new(SourceMap::default());
let fm = cm.new_source_file(FileName::Anon.into(), code.to_string());

let program = swc_core::ecma::parser::parse_file_as_program(
&fm,
Syntax::Typescript(swc_core::ecma::parser::TsSyntax {
let result = Parser::new(code, SourceType::tsx())
.with_options(ParseOptions {
decorators: true,
tsx: true,
..Default::default()
}),
EsVersion::latest(),
None,
&mut vec![],
);

let Ok(program) = program else {
..ParseOptions::default()
})
.parse();
if result.panicked || !result.diagnostics.is_empty() {
return false;
};
}

swc_ecma_react_compiler::fast_check::is_required(&program)
swc_ecma_react_compiler::fast_check::is_required(&result.program)
}

#[napi]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ exports[`transform > in strip-only mode > should not emit 'Caused by: failed to
"endColumn": 22,
"endLine": 1,
"filename": "test.ts",
"message": "await isn't allowed in non-async function",
"message": "Expected 'Ident', got 'Await'",
"snippet": "function foo() { await Promise.resolve(1); }
^^^^^
",
Expand Down Expand Up @@ -47,7 +47,7 @@ exports[`transform > in strip-only mode > should report correct error for syntax
"endColumn": 31,
"endLine": 1,
"filename": "test.ts",
"message": "Expected ';', '}' or <eof>",
"message": "Expected 'Semi', got 'Ident'",
"snippet": "function foo() { invalid syntax }
^^^^^^
",
Expand Down
2 changes: 1 addition & 1 deletion bindings/binding_typescript_wasm/__tests__/transform.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ describe("transform", () => {
{},
),
).resolves.toMatchSnapshot();
expect(
await expect(
swc.transform(
`declare enum Foo {
a = 2,
Expand Down
Loading