mirror of
https://github.com/swc-project/swc.git
synced 2024-10-05 04:39:06 +03:00
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:
parent
f9a8ad386d
commit
33bc3d2b91
24
Cargo.lock
generated
24
Cargo.lock
generated
@ -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",
|
||||
|
14
Cargo.toml
14
Cargo.toml
@ -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"
|
||||
|
||||
|
@ -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"}
|
||||
|
@ -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}
|
||||
|
||||
|
@ -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"}
|
||||
|
@ -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"
|
||||
|
@ -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:
|
||||
|
@ -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"
|
||||
|
@ -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]
|
||||
|
@ -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)]
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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/"}
|
||||
|
@ -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() {
|
||||
|
@ -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"}
|
||||
|
@ -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"}
|
||||
|
@ -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"}
|
||||
|
@ -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"
|
||||
|
@ -189,6 +189,7 @@ impl SwcLoader {
|
||||
legacy_decorator: c.legacy_decorator,
|
||||
decorator_metadata: c.decorator_metadata,
|
||||
hidden: Default::default(),
|
||||
..Default::default()
|
||||
})
|
||||
} else {
|
||||
None
|
||||
|
@ -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)
|
||||
|
@ -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)]
|
||||
|
9
tests/fixture/config/regenerator/import-path/1/.swcrc
Normal file
9
tests/fixture/config/regenerator/import-path/1/.swcrc
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"jsc": {
|
||||
"transform": {
|
||||
"regenerator": {
|
||||
"importPath": "custom"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
|
||||
|
||||
function* gen() {
|
||||
|
||||
yield 1;
|
||||
yield 2;
|
||||
yield 3;
|
||||
}
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user