feat(isolated-declarations): support for export default function overloads (#3809)

This commit is contained in:
Dunqing 2024-06-21 10:20:24 +00:00
parent eadf495e85
commit 231b8f0946
2 changed files with 23 additions and 8 deletions

View file

@ -328,6 +328,7 @@ impl<'a> IsolatedDeclarations<'a> {
stmts: oxc_allocator::Vec<'a, Statement<'a>>,
) -> impl Iterator<Item = Statement<'a>> + '_ {
let mut last_function_name: Option<Atom<'a>> = None;
let mut is_export_default_function_overloads = false;
stmts.into_iter().filter_map(move |stmt| match stmt {
Statement::FunctionDeclaration(ref func) => {
@ -373,6 +374,21 @@ impl<'a> IsolatedDeclarations<'a> {
Some(stmt)
}
}
Statement::ExportDefaultDeclaration(ref decl) => {
if let ExportDefaultDeclarationKind::FunctionDeclaration(ref func) =
decl.declaration
{
if is_export_default_function_overloads && func.body.is_some() {
is_export_default_function_overloads = false;
return None;
}
is_export_default_function_overloads = true;
Some(stmt)
} else {
is_export_default_function_overloads = false;
Some(stmt)
}
}
_ => Some(stmt),
})
}

View file

@ -360,14 +360,13 @@ export function foo(a: any): number {
"export default function(a: number, b: number): number {};",
"export default function(a: number, b: number): number;",
);
// TODO export default function overloads
// transform_dts_test(
// "export default function(a: number, b: number): number;
// export default function(a: number, b: number): any {
// return foo
// };",
// "export default function(a: number, b: number): number;",
// );
transform_dts_test(
"export default function(a: number, b: number): number;
export default function(a: number, b: number): any {
return foo
};",
"export default function(a: number, b: number): number;",
);
transform_dts_test(
"export default class {foo = 2};",
"export default class {\n foo: number;\n}",