summaryrefslogtreecommitdiff
path: root/cli/ast
diff options
context:
space:
mode:
Diffstat (limited to 'cli/ast')
-rw-r--r--cli/ast/mod.rs55
-rw-r--r--cli/ast/transforms.rs27
2 files changed, 36 insertions, 46 deletions
diff --git a/cli/ast/mod.rs b/cli/ast/mod.rs
index 80cbd5c4b..b089d5421 100644
--- a/cli/ast/mod.rs
+++ b/cli/ast/mod.rs
@@ -602,8 +602,7 @@ mod tests {
#[test]
fn test_transpile() {
- let specifier = resolve_url_or_path("https://deno.land/x/mod.ts")
- .expect("could not resolve specifier");
+ let specifier = resolve_url_or_path("https://deno.land/x/mod.ts").unwrap();
let source = r#"
enum D {
A,
@@ -637,24 +636,21 @@ export class A {
scope_analysis: false,
})
.unwrap();
- let (code, maybe_map) = transpile(&module, &EmitOptions::default())
- .expect("could not strip types");
+ let (code, maybe_map) =
+ transpile(&module, &EmitOptions::default()).unwrap();
let expected_text = r#"var D;
(function(D) {
D[D["A"] = 0] = "A";
D[D["B"] = 1] = "B";
-})(D || (D = {
-}));
+})(D || (D = {}));
var N;
(function(N1) {
let D;
(function(D) {
D["A"] = "value";
- })(D = N1.D || (N1.D = {
- }));
- N1.Value = 5;
-})(N || (N = {
-}));
+ })(D = N1.D || (N1.D = {}));
+ var Value = N1.Value = 5;
+})(N || (N = {}));
export class A {
d;
b;
@@ -677,8 +673,7 @@ export class A {
#[test]
fn test_transpile_tsx() {
- let specifier = resolve_url_or_path("https://deno.land/x/mod.ts")
- .expect("could not resolve specifier");
+ let specifier = resolve_url_or_path("https://deno.land/x/mod.ts").unwrap();
let source = r#"
export class A {
render() {
@@ -694,16 +689,14 @@ export class A {
maybe_syntax: None,
scope_analysis: true, // ensure scope analysis doesn't conflict with a second resolver pass
})
- .expect("could not parse module");
- let (code, _) = transpile(&module, &EmitOptions::default())
- .expect("could not strip types");
+ .unwrap();
+ let (code, _) = transpile(&module, &EmitOptions::default()).unwrap();
assert!(code.contains("React.createElement(\"div\", null"));
}
#[test]
fn test_transpile_jsx_pragma() {
- let specifier = resolve_url_or_path("https://deno.land/x/mod.ts")
- .expect("could not resolve specifier");
+ let specifier = resolve_url_or_path("https://deno.land/x/mod.ts").unwrap();
let source = r#"
/** @jsx h */
/** @jsxFrag Fragment */
@@ -733,8 +726,7 @@ function App() {
#[test]
fn test_transpile_jsx_import_source_pragma() {
- let specifier = resolve_url_or_path("https://deno.land/x/mod.tsx")
- .expect("could not resolve specifier");
+ let specifier = resolve_url_or_path("https://deno.land/x/mod.tsx").unwrap();
let source = r#"
/** @jsxImportSource jsx_lib */
@@ -756,8 +748,7 @@ function App() {
let expected = r#"import { jsx as _jsx, Fragment as _Fragment } from "jsx_lib/jsx-runtime";
/** @jsxImportSource jsx_lib */ function App() {
return(/*#__PURE__*/ _jsx("div", {
- children: /*#__PURE__*/ _jsx(_Fragment, {
- })
+ children: /*#__PURE__*/ _jsx(_Fragment, {})
}));
"#;
assert_eq!(&code[..expected.len()], expected);
@@ -765,8 +756,7 @@ function App() {
#[test]
fn test_transpile_jsx_import_source_no_pragma() {
- let specifier = resolve_url_or_path("https://deno.land/x/mod.tsx")
- .expect("could not resolve specifier");
+ let specifier = resolve_url_or_path("https://deno.land/x/mod.tsx").unwrap();
let source = r#"
function App() {
return (
@@ -791,8 +781,7 @@ function App() {
let expected = r#"import { jsx as _jsx, Fragment as _Fragment } from "jsx_lib/jsx-runtime";
function App() {
return(/*#__PURE__*/ _jsx("div", {
- children: /*#__PURE__*/ _jsx(_Fragment, {
- })
+ children: /*#__PURE__*/ _jsx(_Fragment, {})
}));
}
"#;
@@ -802,8 +791,7 @@ function App() {
// TODO(@kitsonk) https://github.com/swc-project/swc/issues/2656
// #[test]
// fn test_transpile_jsx_import_source_no_pragma_dev() {
- // let specifier = resolve_url_or_path("https://deno.land/x/mod.tsx")
- // .expect("could not resolve specifier");
+ // let specifier = resolve_url_or_path("https://deno.land/x/mod.tsx").unwrap();
// let source = r#"
// function App() {
// return (
@@ -839,8 +827,7 @@ function App() {
#[test]
fn test_transpile_decorators() {
- let specifier = resolve_url_or_path("https://deno.land/x/mod.ts")
- .expect("could not resolve specifier");
+ let specifier = resolve_url_or_path("https://deno.land/x/mod.ts").unwrap();
let source = r#"
function enumerable(value: boolean) {
return function (
@@ -867,9 +854,8 @@ function App() {
maybe_syntax: None,
scope_analysis: false,
})
- .expect("could not parse module");
- let (code, _) = transpile(&module, &EmitOptions::default())
- .expect("could not strip types");
+ .unwrap();
+ let (code, _) = transpile(&module, &EmitOptions::default()).unwrap();
assert!(code.contains("_applyDecoratedDescriptor("));
}
@@ -903,8 +889,7 @@ export function g() {
let (code, _) = transpile(&module, &emit_options).unwrap();
let expected = r#"export function g() {
let algorithm;
- algorithm = {
- };
+ algorithm = {};
return test(algorithm, false, keyUsages);
}"#;
assert_eq!(&code[..expected.len()], expected);
diff --git a/cli/ast/transforms.rs b/cli/ast/transforms.rs
index ba8af59af..a89edc01d 100644
--- a/cli/ast/transforms.rs
+++ b/cli/ast/transforms.rs
@@ -50,7 +50,10 @@ impl Fold for DownlevelImportsFolder {
ImportSpecifier::Named(specifier) => {
Some(match specifier.imported.as_ref() {
Some(name) => create_key_value(
- name.sym.to_string(),
+ match name {
+ ModuleExportName::Ident(ident) => ident.sym.to_string(),
+ ModuleExportName::Str(str) => str.value.to_string(),
+ },
specifier.local.sym.to_string(),
),
None => create_assignment(specifier.local.sym.to_string()),
@@ -200,10 +203,12 @@ fn create_ident(name: String) -> swc_ast::Ident {
fn create_key_value(key: String, value: String) -> swc_ast::ObjectPatProp {
swc_ast::ObjectPatProp::KeyValue(swc_ast::KeyValuePatProp {
- key: swc_ast::PropName::Ident(swc_ast::Ident {
+ // use a string literal because it will work in more scenarios than an identifier
+ key: swc_ast::PropName::Str(swc_ast::Str {
span: DUMMY_SP,
- sym: key.into(),
- optional: false,
+ value: key.into(),
+ has_escape: false,
+ kind: swc_ast::StrKind::Synthesized,
}),
value: Box::new(swc_ast::Pat::Ident(swc_ast::BindingIdent {
id: swc_ast::Ident {
@@ -320,7 +325,7 @@ mod test {
test_transform(
DownlevelImportsFolder,
r#"import mod from "./mod.ts";"#,
- r#"const { default: mod } = await import("./mod.ts");"#,
+ r#"const { "default": mod } = await import("./mod.ts");"#,
);
}
@@ -341,7 +346,7 @@ mod test {
test_transform(
DownlevelImportsFolder,
r#"import { A as LocalA, B, C as LocalC } from "./mod.ts";"#,
- r#"const { A: LocalA , B , C: LocalC } = await import("./mod.ts");"#,
+ r#"const { "A": LocalA , B , "C": LocalC } = await import("./mod.ts");"#,
);
}
@@ -359,13 +364,13 @@ mod test {
test_transform(
DownlevelImportsFolder,
r#"import myDefault, { A, B as LocalB } from "./mod.ts";"#,
- r#"const { default: myDefault , A , B: LocalB } = await import("./mod.ts");"#,
+ r#"const { "default": myDefault , A , "B": LocalB } = await import("./mod.ts");"#,
);
test_transform(
DownlevelImportsFolder,
r#"import myDefault, * as mod from "./mod.ts";"#,
- r#"const { default: myDefault } = await import("./mod.ts"), mod = await import("./mod.ts");"#,
+ r#"const { "default": myDefault } = await import("./mod.ts"), mod = await import("./mod.ts");"#,
);
}
@@ -374,7 +379,7 @@ mod test {
test_transform(
DownlevelImportsFolder,
r#"import data from "./mod.json" assert { type: "json" };"#,
- "const { default: data } = await import(\"./mod.json\", {\n assert: {\n type: \"json\"\n }\n});",
+ "const { \"default\": data } = await import(\"./mod.json\", {\n assert: {\n type: \"json\"\n }\n});",
);
}
@@ -433,7 +438,7 @@ mod test {
test_transform(
StripExportsFolder,
"export default function test() {}",
- "function test() {\n}",
+ "function test() {}",
);
}
@@ -455,7 +460,7 @@ mod test {
test_transform(
StripExportsFolder,
"export function test() {}",
- "function test() {\n}",
+ "function test() {}",
);
test_transform(StripExportsFolder, "export enum Test {}", "enum Test {\n}");