feat(es/transforms/regenerator): Allow configuring import path (#2581)

swc_ecma_transforms_compat:
 - `regenerator`: Allow configuring import path of `regenerator-runtime`.
This commit is contained in:
Donny/강동윤 2021-10-29 23:36:11 +09:00 committed by GitHub
parent f9a8ad386d
commit 33bc3d2b91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 184 additions and 86 deletions

24
Cargo.lock generated
View File

@ -2325,7 +2325,7 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
[[package]]
name = "swc"
version = "0.79.2"
version = "0.80.0"
dependencies = [
"ahash",
"anyhow",
@ -2431,7 +2431,7 @@ dependencies = [
[[package]]
name = "swc_bundler"
version = "0.77.1"
version = "0.78.0"
dependencies = [
"ahash",
"anyhow",
@ -2679,7 +2679,7 @@ dependencies = [
[[package]]
name = "swc_ecma_minifier"
version = "0.46.7"
version = "0.47.0"
dependencies = [
"ahash",
"ansi_term 0.12.1",
@ -2737,7 +2737,7 @@ dependencies = [
[[package]]
name = "swc_ecma_preset_env"
version = "0.61.0"
version = "0.62.0"
dependencies = [
"ahash",
"dashmap",
@ -2763,7 +2763,7 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms"
version = "0.90.0"
version = "0.91.0"
dependencies = [
"pretty_assertions 0.6.1",
"sourcemap",
@ -2823,7 +2823,7 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_compat"
version = "0.47.2"
version = "0.48.0"
dependencies = [
"ahash",
"arrayvec",
@ -2861,7 +2861,7 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_module"
version = "0.53.0"
version = "0.54.0"
dependencies = [
"Inflector",
"ahash",
@ -2884,7 +2884,7 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_optimization"
version = "0.60.2"
version = "0.61.0"
dependencies = [
"ahash",
"dashmap",
@ -2913,7 +2913,7 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_proposal"
version = "0.53.0"
version = "0.54.0"
dependencies = [
"either",
"serde",
@ -2937,7 +2937,7 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_react"
version = "0.55.2"
version = "0.56.0"
dependencies = [
"ahash",
"base64 0.13.0",
@ -2986,7 +2986,7 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_typescript"
version = "0.56.1"
version = "0.57.0"
dependencies = [
"serde",
"swc_atoms 0.2.9",
@ -3034,7 +3034,7 @@ dependencies = [
[[package]]
name = "swc_ecmascript"
version = "0.82.0"
version = "0.83.0"
dependencies = [
"swc_ecma_ast",
"swc_ecma_codegen",

View File

@ -21,7 +21,7 @@ include = ["Cargo.toml", "src/**/*.rs"]
license = "Apache-2.0/MIT"
name = "swc"
repository = "https://github.com/swc-project/swc.git"
version = "0.79.2"
version = "0.80.0"
[lib]
name = "swc"
@ -65,10 +65,10 @@ swc_ecma_ast = {version = "0.56.0", path = "./ecmascript/ast"}
swc_ecma_codegen = {version = "0.78.0", path = "./ecmascript/codegen"}
swc_ecma_ext_transforms = {version = "0.35.0", path = "./ecmascript/ext-transforms"}
swc_ecma_loader = {version = "0.23.0", path = "./ecmascript/loader", features = ["lru", "node", "tsc"]}
swc_ecma_minifier = {version = "0.46.0", path = "./ecmascript/minifier"}
swc_ecma_minifier = {version = "0.47.0", path = "./ecmascript/minifier"}
swc_ecma_parser = {version = "0.76.0", path = "./ecmascript/parser"}
swc_ecma_preset_env = {version = "0.61.0", path = "./ecmascript/preset-env"}
swc_ecma_transforms = {version = "0.90.0", path = "./ecmascript/transforms", features = [
swc_ecma_preset_env = {version = "0.62.0", path = "./ecmascript/preset-env"}
swc_ecma_transforms = {version = "0.91.0", path = "./ecmascript/transforms", features = [
"compat",
"module",
"optimization",
@ -77,11 +77,11 @@ swc_ecma_transforms = {version = "0.90.0", path = "./ecmascript/transforms", fea
"typescript",
]}
swc_ecma_transforms_base = {version = "0.41.0", path = "./ecmascript/transforms/base"}
swc_ecma_transforms_compat = {version = "0.47.0", path = "./ecmascript/transforms/compat"}
swc_ecma_transforms_optimization = {version = "0.60.0", path = "./ecmascript/transforms/optimization"}
swc_ecma_transforms_compat = {version = "0.48.0", path = "./ecmascript/transforms/compat"}
swc_ecma_transforms_optimization = {version = "0.61.0", path = "./ecmascript/transforms/optimization"}
swc_ecma_utils = {version = "0.49.0", path = "./ecmascript/utils"}
swc_ecma_visit = {version = "0.42.0", path = "./ecmascript/visit"}
swc_ecmascript = {version = "0.82.0", path = "./ecmascript"}
swc_ecmascript = {version = "0.83.0", path = "./ecmascript"}
swc_visit = {version = "0.2.3", path = "./visit"}
tracing = "0.1.28"

View File

@ -9,7 +9,7 @@ include = ["Cargo.toml", "build.rs", "src/**/*.rs", "src/**/*.js"]
license = "Apache-2.0/MIT"
name = "swc_bundler"
repository = "https://github.com/swc-project/swc.git"
version = "0.77.1"
version = "0.78.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
@ -43,7 +43,7 @@ swc_ecma_codegen = {version = "0.78.0", path = "../ecmascript/codegen"}
swc_ecma_loader = {version = "0.23.0", path = "../ecmascript/loader"}
swc_ecma_parser = {version = "0.76.0", path = "../ecmascript/parser"}
swc_ecma_transforms_base = {version = "0.41.0", path = "../ecmascript/transforms/base"}
swc_ecma_transforms_optimization = {version = "0.60.0", path = "../ecmascript/transforms/optimization"}
swc_ecma_transforms_optimization = {version = "0.61.0", path = "../ecmascript/transforms/optimization"}
swc_ecma_utils = {version = "0.49.0", path = "../ecmascript/utils"}
swc_ecma_visit = {version = "0.42.0", path = "../ecmascript/visit"}
tracing = "0.1.28"
@ -55,9 +55,9 @@ path-clean = "=0.1.0"
reqwest = {version = "0.11.4", features = ["blocking"]}
sha-1 = "0.9"
swc_ecma_loader = {version = "0.23.0", path = "../ecmascript/loader", features = ["node", "lru"]}
swc_ecma_minifier = {version = "0.46.0", path = "../ecmascript/minifier"}
swc_ecma_transforms_react = {version = "0.55.0", path = "../ecmascript/transforms/react"}
swc_ecma_transforms_typescript = {version = "0.56.0", path = "../ecmascript/transforms/typescript"}
swc_ecma_minifier = {version = "0.47.0", path = "../ecmascript/minifier"}
swc_ecma_transforms_react = {version = "0.56.0", path = "../ecmascript/transforms/react"}
swc_ecma_transforms_typescript = {version = "0.57.0", path = "../ecmascript/transforms/typescript"}
swc_node_base = {version = "0.5.0", path = "../node/base"}
tempfile = "3.1.0"
testing = {version = "0.15.0", path = "../testing"}

View File

@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecmascript"
repository = "https://github.com/swc-project/swc.git"
version = "0.82.0"
version = "0.83.0"
[package.metadata.docs.rs]
all-features = true
@ -35,10 +35,10 @@ typescript = ["typescript-parser", "swc_ecma_transforms/typescript"]
swc_ecma_ast = {version = "0.56.0", path = "./ast"}
swc_ecma_codegen = {version = "0.78.0", path = "./codegen", optional = true}
swc_ecma_dep_graph = {version = "0.45.0", path = "./dep-graph", optional = true}
swc_ecma_minifier = {version = "0.46.0", path = "./minifier", optional = true}
swc_ecma_minifier = {version = "0.47.0", path = "./minifier", optional = true}
swc_ecma_parser = {version = "0.76.0", path = "./parser", optional = true, default-features = false}
swc_ecma_preset_env = {version = "0.61.0", path = "./preset-env", optional = true}
swc_ecma_transforms = {version = "0.90.0", path = "./transforms", optional = true}
swc_ecma_preset_env = {version = "0.62.0", path = "./preset-env", optional = true}
swc_ecma_transforms = {version = "0.91.0", path = "./transforms", optional = true}
swc_ecma_utils = {version = "0.49.0", path = "./utils", optional = true}
swc_ecma_visit = {version = "0.42.0", path = "./visit", optional = true}

View File

@ -7,7 +7,7 @@ include = ["Cargo.toml", "src/**/*.rs", "src/lists/*.json"]
license = "Apache-2.0/MIT"
name = "swc_ecma_minifier"
repository = "https://github.com/swc-project/swc.git"
version = "0.46.7"
version = "0.47.0"
[features]
debug = ["backtrace"]
@ -29,7 +29,7 @@ swc_common = {version = "0.14.0", path = "../../common"}
swc_ecma_ast = {version = "0.56.0", path = "../ast"}
swc_ecma_codegen = {version = "0.78.0", path = "../codegen"}
swc_ecma_parser = {version = "0.76.0", path = "../parser"}
swc_ecma_transforms = {version = "0.90.0", path = "../transforms/", features = ["optimization"]}
swc_ecma_transforms = {version = "0.91.0", path = "../transforms/", features = ["optimization"]}
swc_ecma_transforms_base = {version = "0.41.1", path = "../transforms/base"}
swc_ecma_utils = {version = "0.49.0", path = "../utils"}
swc_ecma_visit = {version = "0.42.0", path = "../visit"}

View File

@ -5,7 +5,7 @@ documentation = "https://rustdoc.swc.rs/swc_ecma_preset_env/"
edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_preset_env"
version = "0.61.0"
version = "0.62.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -22,7 +22,7 @@ string_enum = {version = "0.3.1", path = "../../macros/string_enum"}
swc_atoms = {version = "0.2", path = "../../atoms"}
swc_common = {version = "0.14.0", path = "../../common"}
swc_ecma_ast = {version = "0.56.0", path = "../ast"}
swc_ecma_transforms = {version = "0.90.0", path = "../transforms", features = ["compat", "proposal"]}
swc_ecma_transforms = {version = "0.91.0", path = "../transforms", features = ["compat", "proposal"]}
swc_ecma_utils = {version = "0.49.0", path = "../utils"}
swc_ecma_visit = {version = "0.42.0", path = "../visit"}
walkdir = "2"

View File

@ -159,7 +159,12 @@ where
es2015::destructuring(es2015::destructuring::Config { loose }),
true
);
let pass = add!(pass, Regenerator, es2015::regenerator(global_mark), true);
let pass = add!(
pass,
Regenerator,
es2015::regenerator(Default::default(), global_mark),
true
);
let pass = add!(pass, BlockScoping, es2015::block_scoping(), true);
// TODO:

View File

@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_transforms"
repository = "https://github.com/swc-project/swc.git"
version = "0.90.0"
version = "0.91.0"
[package.metadata.docs.rs]
all-features = true
@ -27,12 +27,12 @@ swc_common = {version = "0.14.0", path = "../../common"}
swc_ecma_ast = {version = "0.56.0", path = "../ast"}
swc_ecma_parser = {version = "0.76.0", path = "../parser"}
swc_ecma_transforms_base = {version = "0.41.0", path = "./base"}
swc_ecma_transforms_compat = {version = "0.47.0", path = "./compat", optional = true}
swc_ecma_transforms_module = {version = "0.53.0", path = "./module", optional = true}
swc_ecma_transforms_optimization = {version = "0.60.0", path = "./optimization", optional = true}
swc_ecma_transforms_proposal = {version = "0.53.0", path = "./proposal", optional = true}
swc_ecma_transforms_react = {version = "0.55.0", path = "./react", optional = true}
swc_ecma_transforms_typescript = {version = "0.56.0", path = "./typescript", optional = true}
swc_ecma_transforms_compat = {version = "0.48.0", path = "./compat", optional = true}
swc_ecma_transforms_module = {version = "0.54.0", path = "./module", optional = true}
swc_ecma_transforms_optimization = {version = "0.61.0", path = "./optimization", optional = true}
swc_ecma_transforms_proposal = {version = "0.54.0", path = "./proposal", optional = true}
swc_ecma_transforms_react = {version = "0.56.0", path = "./react", optional = true}
swc_ecma_transforms_typescript = {version = "0.57.0", path = "./typescript", optional = true}
swc_ecma_utils = {version = "0.49.0", path = "../utils"}
swc_ecma_visit = {version = "0.42.0", path = "../visit"}
unicode-xid = "0.2"

View File

@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_transforms_compat"
repository = "https://github.com/swc-project/swc.git"
version = "0.47.2"
version = "0.48.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]

View File

@ -22,7 +22,7 @@ mod function_name;
mod instanceof;
pub mod new_target;
mod parameters;
mod regenerator;
pub mod regenerator;
mod shorthand_property;
pub mod spread;
mod sticky_regex;
@ -56,7 +56,7 @@ where
for_of(c.for_of),
// Should come before parameters
// See: https://github.com/swc-project/swc/issues/1036
regenerator(global_mark),
regenerator(c.regenerator, global_mark),
parameters(),
computed_properties(),
destructuring(c.destructuring),
@ -64,7 +64,8 @@ where
)
}
#[derive(Debug, Default, Deserialize)]
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Config {
#[serde(flatten)]
pub for_of: for_of::Config,
@ -74,6 +75,9 @@ pub struct Config {
#[serde(flatten)]
pub spread: spread::Config,
#[serde(default)]
pub regenerator: regenerator::Config,
}
#[cfg(test)]

View File

@ -1,6 +1,7 @@
use self::{case::CaseHandler, hoist::hoist};
use serde::{Deserialize, Serialize};
use std::mem::take;
use swc_atoms::js_word;
use swc_atoms::{js_word, JsWord};
use swc_common::{Mark, Spanned, DUMMY_SP};
use swc_ecma_ast::*;
use swc_ecma_utils::{
@ -12,9 +13,19 @@ mod case;
mod hoist;
mod leap;
pub fn regenerator(top_level_mark: Mark) -> impl Fold {
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Config {
/// Import path used instead of `regenerator-runtime`
#[serde(default)]
pub import_path: Option<JsWord>,
}
pub fn regenerator(config: Config, top_level_mark: Mark) -> impl Fold {
Regenerator {
global_mark: top_level_mark,
config,
top_level_mark,
regenerator_runtime: Default::default(),
top_level_vars: Default::default(),
}
@ -22,14 +33,15 @@ pub fn regenerator(top_level_mark: Mark) -> impl Fold {
#[derive(Debug)]
struct Regenerator {
global_mark: Mark,
config: Config,
top_level_mark: Mark,
/// [Some] if used.
regenerator_runtime: Option<Ident>,
/// mark
top_level_vars: Vec<VarDeclarator>,
}
fn require_rt(global_mark: Mark, rt: Ident) -> Stmt {
fn require_rt(global_mark: Mark, rt: Ident, src: Option<JsWord>) -> Stmt {
Stmt::Decl(Decl::Var(VarDecl {
span: DUMMY_SP,
kind: VarDeclKind::Var,
@ -40,7 +52,9 @@ fn require_rt(global_mark: Mark, rt: Ident) -> Stmt {
init: Some(Box::new(Expr::Call(CallExpr {
span: DUMMY_SP,
callee: quote_ident!(DUMMY_SP.apply_mark(global_mark), "require").as_callee(),
args: vec![quote_str!("regenerator-runtime").as_arg()],
args: vec![
quote_str!(src.unwrap_or_else(|| "regenerator-runtime".into())).as_arg(),
],
type_args: Default::default(),
}))),
definite: false,
@ -177,7 +191,11 @@ impl Fold for Regenerator {
ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl {
span: DUMMY_SP,
specifiers: vec![specifier],
src: quote_str!("regenerator-runtime"),
src: quote_str!(self
.config
.import_path
.clone()
.unwrap_or_else(|| "regenerator-runtime".into())),
type_only: Default::default(),
asserts: Default::default(),
})),
@ -279,7 +297,15 @@ impl Fold for Regenerator {
fn fold_script(&mut self, s: Script) -> Script {
let mut s: Script = s.fold_children_with(self);
if let Some(rt_ident) = self.regenerator_runtime.take() {
prepend(&mut s.body, require_rt(self.global_mark, rt_ident).into());
prepend(
&mut s.body,
require_rt(
self.top_level_mark,
rt_ident,
self.config.import_path.clone(),
)
.into(),
);
}
s
}

View File

@ -12,7 +12,10 @@ fn syntax() -> Syntax {
}
fn tr(_: ()) -> impl Fold {
chain!(resolver(), regenerator(Mark::fresh(Mark::root())))
chain!(
resolver(),
regenerator(Default::default(), Mark::fresh(Mark::root()))
)
}
// computed_properties_example
@ -946,7 +949,7 @@ test_exec!(
|_| chain!(
async_to_generator(),
es2015::for_of(Default::default()),
es2015::regenerator(Mark::fresh(Mark::root())),
es2015::regenerator(Default::default(), Mark::fresh(Mark::root())),
),
issue_600_exact_passes,
"async function foo(b) {
@ -958,7 +961,7 @@ test_exec!(
test_exec!(
syntax(),
|_| es2015::regenerator(Mark::fresh(Mark::root())),
|_| es2015::regenerator(Default::default(), Mark::fresh(Mark::root())),
issue_600_min,
"function* foo() {
try {
@ -982,7 +985,7 @@ test_exec!(
test_exec!(
syntax(),
|_| es2015::regenerator(Mark::fresh(Mark::root())),
|_| es2015::regenerator(Default::default(), Mark::fresh(Mark::root())),
issue_831_1,
"function* myGenerator() {
yield* [1,2,3];
@ -1002,7 +1005,7 @@ test!(
|_| {
let mark = Mark::fresh(Mark::root());
es2015::regenerator(mark)
es2015::regenerator(Default::default(), mark)
},
issue_831_3,
"export function* myGenerator() {
@ -1030,7 +1033,7 @@ export function myGenerator() {
test_exec!(
syntax(),
|_| es2015::regenerator(Mark::fresh(Mark::root())),
|_| es2015::regenerator(Default::default(), Mark::fresh(Mark::root())),
delegate_context,
"function* a() {
yield 5;
@ -1045,7 +1048,7 @@ test_exec!(
test_exec!(
syntax(),
|_| es2015::regenerator(Mark::fresh(Mark::root())),
|_| es2015::regenerator(Default::default(), Mark::fresh(Mark::root())),
issue_849_1,
"function* gen() { yield 1 };
function genFactory() { return function*() { yield 1 }; }
@ -1056,7 +1059,7 @@ expect(v.next()).toEqual({ done: true })"
test_exec!(
syntax(),
|_| es2015::regenerator(Mark::fresh(Mark::root())),
|_| es2015::regenerator(Default::default(), Mark::fresh(Mark::root())),
issue_853_1,
"function throwingFn() { throw 'Error' }
function* gen() {
@ -1669,7 +1672,7 @@ test_exec!(
chain!(
async_to_generator(),
es2015::for_of(Default::default()),
regenerator(mark)
regenerator(Default::default(), mark)
)
},
issue_1918_1,

View File

@ -2419,7 +2419,7 @@ test_exec!(
Syntax::default(),
|_| {
let mark = Mark::fresh(Mark::root());
chain!(async_to_generator(), regenerator(mark))
chain!(async_to_generator(), regenerator(Default::default(), mark))
},
issue_1575_2,
"
@ -2569,7 +2569,10 @@ test!(
Syntax::default(),
|_| {
let top_level_mark = Mark::fresh(Mark::root());
chain!(async_to_generator(), regenerator(top_level_mark))
chain!(
async_to_generator(),
regenerator(Default::default(), top_level_mark)
)
},
issue_1684_2,
"
@ -2709,7 +2712,7 @@ fn exec_regenerator(input: PathBuf) {
chain!(
async_to_generator(),
es2015::for_of(Default::default()),
regenerator(top_level_mark)
regenerator(Default::default(), top_level_mark)
)
},
&input,

View File

@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_transforms_module"
repository = "https://github.com/swc-project/swc.git"
version = "0.53.0"
version = "0.54.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
@ -26,6 +26,6 @@ swc_ecma_utils = {version = "0.49.0", path = "../../utils"}
swc_ecma_visit = {version = "0.42.0", path = "../../visit"}
[dev-dependencies]
swc_ecma_transforms_compat = {version = "0.47.0", path = "../compat"}
swc_ecma_transforms_compat = {version = "0.48.0", path = "../compat"}
swc_ecma_transforms_testing = {version = "0.42.0", path = "../testing/"}
testing = {version = "0.15.0", path = "../../../testing/"}

View File

@ -4449,7 +4449,7 @@ test!(
syntax(),
|_| chain!(
resolver(),
regenerator(Mark::fresh(Mark::root())),
regenerator(Default::default(), Mark::fresh(Mark::root())),
common_js(Mark::fresh(Mark::root()), Default::default(), None)
),
regression_6733,
@ -4492,7 +4492,10 @@ test!(
|_| {
let mark = Mark::fresh(Mark::root());
chain!(regenerator(mark), common_js(mark, Default::default(), None),)
chain!(
regenerator(Default::default(), mark),
common_js(mark, Default::default(), None),
)
},
issue_831_2,
"export function* myGenerator() {

View File

@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_transforms_optimization"
repository = "https://github.com/swc-project/swc.git"
version = "0.60.2"
version = "0.61.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
@ -37,10 +37,10 @@ swc_ecma_visit = {version = "0.42.0", path = "../../visit"}
tracing = "0.1.28"
[dev-dependencies]
swc_ecma_transforms_compat = {version = "0.47.0", path = "../compat"}
swc_ecma_transforms_module = {version = "0.53.0", path = "../module"}
swc_ecma_transforms_proposal = {version = "0.53.0", path = "../proposal"}
swc_ecma_transforms_react = {version = "0.55.0", path = "../react"}
swc_ecma_transforms_compat = {version = "0.48.0", path = "../compat"}
swc_ecma_transforms_module = {version = "0.54.0", path = "../module"}
swc_ecma_transforms_proposal = {version = "0.54.0", path = "../proposal"}
swc_ecma_transforms_react = {version = "0.56.0", path = "../react"}
swc_ecma_transforms_testing = {version = "0.42.0", path = "../testing"}
swc_ecma_transforms_typescript = {version = "0.56.0", path = "../typescript"}
swc_ecma_transforms_typescript = {version = "0.57.0", path = "../typescript"}
testing = {version = "0.15.0", path = "../../../testing"}

View File

@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_transforms_proposal"
repository = "https://github.com/swc-project/swc.git"
version = "0.53.0"
version = "0.54.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -31,7 +31,7 @@ swc_ecma_visit = {version = "0.42.0", path = "../../visit"}
[dev-dependencies]
serde_json = "1.0.66"
swc_ecma_transforms_compat = {version = "0.47.0", path = "../compat"}
swc_ecma_transforms_module = {version = "0.53.0", path = "../module"}
swc_ecma_transforms_compat = {version = "0.48.0", path = "../compat"}
swc_ecma_transforms_module = {version = "0.54.0", path = "../module"}
swc_ecma_transforms_testing = {version = "0.42.0", path = "../testing"}
testing = {version = "0.15.0", path = "../../../testing"}

View File

@ -7,7 +7,7 @@ include = ["Cargo.toml", "src/**/*.rs"]
license = "Apache-2.0/MIT"
name = "swc_ecma_transforms_react"
repository = "https://github.com/swc-project/swc.git"
version = "0.55.2"
version = "0.56.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
@ -31,7 +31,7 @@ swc_ecma_visit = {version = "0.42.0", path = "../../visit"}
[dev-dependencies]
swc_ecma_codegen = {version = "0.78.0", path = "../../codegen/"}
swc_ecma_transforms_compat = {version = "0.47.0", path = "../compat/"}
swc_ecma_transforms_module = {version = "0.53.0", path = "../module"}
swc_ecma_transforms_compat = {version = "0.48.0", path = "../compat/"}
swc_ecma_transforms_module = {version = "0.54.0", path = "../module"}
swc_ecma_transforms_testing = {version = "0.42.0", path = "../testing/"}
testing = {version = "0.15.0", path = "../../../testing"}

View File

@ -6,7 +6,7 @@ edition = "2018"
license = "Apache-2.0/MIT"
name = "swc_ecma_transforms_typescript"
repository = "https://github.com/swc-project/swc.git"
version = "0.56.1"
version = "0.57.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
@ -16,15 +16,15 @@ swc_common = {version = "0.14.0", path = "../../../common"}
swc_ecma_ast = {version = "0.56.0", path = "../../ast"}
swc_ecma_parser = {version = "0.76.0", path = "../../parser"}
swc_ecma_transforms_base = {version = "0.41.0", path = "../base"}
swc_ecma_transforms_react = {version = "0.55.0", path = "../react"}
swc_ecma_transforms_react = {version = "0.56.0", path = "../react"}
swc_ecma_utils = {version = "0.49.0", path = "../../utils"}
swc_ecma_visit = {version = "0.42.0", path = "../../visit"}
[dev-dependencies]
swc_ecma_codegen = {version = "0.78.0", path = "../../codegen"}
swc_ecma_transforms_compat = {version = "0.47.0", path = "../compat"}
swc_ecma_transforms_module = {version = "0.53.0", path = "../module"}
swc_ecma_transforms_proposal = {version = "0.53.0", path = "../proposal/"}
swc_ecma_transforms_compat = {version = "0.48.0", path = "../compat"}
swc_ecma_transforms_module = {version = "0.54.0", path = "../module"}
swc_ecma_transforms_proposal = {version = "0.54.0", path = "../proposal/"}
swc_ecma_transforms_testing = {version = "0.42.0", path = "../testing"}
testing = {version = "0.15.0", path = "../../../testing"}
walkdir = "2.3.1"

View File

@ -189,6 +189,7 @@ impl SwcLoader {
legacy_decorator: c.legacy_decorator,
decorator_metadata: c.decorator_metadata,
hidden: Default::default(),
..Default::default()
})
} else {
None

View File

@ -5,7 +5,7 @@ use crate::{
},
SwcComments,
};
use compat::es2020::export_namespace_from;
use compat::{es2015::regenerator, es2020::export_namespace_from};
use either::Either;
use std::{cell::RefCell, collections::HashMap, path::PathBuf, rc::Rc, sync::Arc};
use swc_atoms::JsWord;
@ -37,6 +37,7 @@ pub struct PassBuilder<'a, 'b, P: swc_ecma_visit::Fold> {
fixer: bool,
inject_helpers: bool,
minify: Option<JsMinifyOptions>,
regenerator: regenerator::Config,
}
impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
@ -59,6 +60,7 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
fixer: true,
inject_helpers: true,
minify: None,
regenerator: Default::default(),
}
}
@ -79,6 +81,7 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
fixer: self.fixer,
inject_helpers: self.inject_helpers,
minify: self.minify,
regenerator: self.regenerator,
}
}
@ -132,6 +135,11 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
self
}
pub fn regenerator(mut self, config: regenerator::Config) -> Self {
self.regenerator = config;
self
}
/// # Arguments
/// ## module
/// - Use `None` if you want swc to emit import statements.
@ -212,6 +220,7 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
destructuring: compat::es2015::destructuring::Config {
loose: self.loose
},
regenerator: self.regenerator,
}
),
should_enable(self.target, JscTarget::Es2015)

View File

@ -43,6 +43,7 @@ use swc_ecma_transforms::{
proposals::{decorators, export_default_from, import_assertions},
react, resolver_with_mark, typescript,
};
use swc_ecma_transforms_compat::es2015::regenerator;
use swc_ecma_transforms_optimization::{inline_globals2, GlobalExprMap};
use swc_ecma_visit::Fold;
@ -214,6 +215,8 @@ impl Options {
let syntax = syntax.unwrap_or_default();
let mut transform = transform.unwrap_or_default();
let regenerator = transform.regenerator.clone();
let preserve_comments = js_minify.as_ref().map(|v| v.format.comments.clone());
if syntax.typescript() {
@ -272,6 +275,7 @@ impl Options {
})
.fixer(!self.disable_fixer)
.preset_env(config.env)
.regenerator(regenerator)
.finalize(
base_url,
paths.into_iter().collect(),
@ -951,6 +955,9 @@ pub struct TransformConfig {
#[serde(default)]
pub hidden: HiddenTransformConfig,
#[serde(default)]
pub regenerator: regenerator::Config,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]

View File

@ -0,0 +1,9 @@
{
"jsc": {
"transform": {
"regenerator": {
"importPath": "custom"
}
}
}
}

View File

@ -0,0 +1,8 @@
function* gen() {
yield 1;
yield 2;
yield 3;
}

View File

@ -0,0 +1,20 @@
import regeneratorRuntime from "custom";
var _marked = regeneratorRuntime.mark(gen);
function gen() {
return regeneratorRuntime.wrap(function gen$(_ctx) {
while(1)switch(_ctx.prev = _ctx.next){
case 0:
_ctx.next = 2;
return 1;
case 2:
_ctx.next = 4;
return 2;
case 4:
_ctx.next = 6;
return 3;
case 6:
case "end":
return _ctx.stop();
}
}, _marked);
}