Update swc_core to v0.90.7 and update turbopack (#61662)

# Turbopack changes

* https://github.com/vercel/turbo/pull/7342 <!-- OJ Kwon - docs(turbopack): build, deploy rustdocs -->
* https://github.com/vercel/turbo/pull/7356 <!-- OJ Kwon - ci(workflow): remove doc deploy -->
* https://github.com/vercel/turbo/pull/7272 <!-- Donny/강동윤 - build: Update `swc_core` to `v0.90.7` -->


### What?

Update swc crates

### Why?

- To apply https://github.com/swc-project/swc/pull/8532 and other bugfixes

### How?

 - Closes PACK-2389
 - Closes PACK-2446
 - Closes #61788
This commit is contained in:
Donny/강동윤 2024-02-13 13:20:16 +09:00 committed by GitHub
parent a4f46bc157
commit 42872bf423
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 697 additions and 592 deletions

1029
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -30,18 +30,18 @@ next-core = { path = "packages/next-swc/crates/next-core" }
next-custom-transforms = { path = "packages/next-swc/crates/next-custom-transforms" } next-custom-transforms = { path = "packages/next-swc/crates/next-custom-transforms" }
# SWC crates # SWC crates
swc_core = { version = "0.89.6", features = [ swc_core = { version = "0.90.7", features = [
"ecma_loader_lru", "ecma_loader_lru",
"ecma_loader_parking_lot", "ecma_loader_parking_lot",
] } ] }
testing = { version = "0.35.16" } testing = { version = "0.35.18" }
# Turbo crates # Turbo crates
turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240212.3" } turbopack-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240213.2" }
# [TODO]: need to refactor embed_directory! macro usages, as well as resolving turbo_tasks::function, macros.. # [TODO]: need to refactor embed_directory! macro usages, as well as resolving turbo_tasks::function, macros..
turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240212.3" } turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240213.2" }
# [TODO]: need to refactor embed_directory! macro usage in next-core # [TODO]: need to refactor embed_directory! macro usage in next-core
turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240212.3" } turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-240213.2" }
# General Deps # General Deps

View file

@ -40,9 +40,9 @@ turbopack-binding = { workspace = true, features = [
] } ] }
# To allow quote! macro works # To allow quote! macro works
swc_core = { workspace = true, features = ["ecma_quote"]} swc_core = { workspace = true, features = ["ecma_quote"]}
react_remove_properties = "0.24.1" react_remove_properties = "0.24.5"
remove_console = "0.25.1" remove_console = "0.25.5"
preset_env_base = "0.4.10" preset_env_base = "0.4.11"
[dev-dependencies] [dev-dependencies]
turbopack-binding = { workspace = true, features = [ turbopack-binding = { workspace = true, features = [

View file

@ -149,7 +149,7 @@ impl<C: Comments> ReactServerComponents<C> {
span: DUMMY_SP, span: DUMMY_SP,
props: vec![ObjectPatProp::Assign(AssignPatProp { props: vec![ObjectPatProp::Assign(AssignPatProp {
span: DUMMY_SP, span: DUMMY_SP,
key: proxy_ident, key: proxy_ident.into(),
value: None, value: None,
})], })],
optional: false, optional: false,
@ -169,11 +169,12 @@ impl<C: Comments> ReactServerComponents<C> {
span: DUMMY_SP, span: DUMMY_SP,
expr: Box::new(Expr::Assign(AssignExpr { expr: Box::new(Expr::Assign(AssignExpr {
span: DUMMY_SP, span: DUMMY_SP,
left: PatOrExpr::Expr(Box::new(Expr::Member(MemberExpr { left: MemberExpr {
span: DUMMY_SP, span: DUMMY_SP,
obj: Box::new(Expr::Ident(quote_ident!("module"))), obj: Box::new(Expr::Ident(quote_ident!("module"))),
prop: MemberProp::Ident(quote_ident!("exports")), prop: MemberProp::Ident(quote_ident!("exports")),
}))), }
.into(),
op: op!("="), op: op!("="),
right: Box::new(Expr::Call(CallExpr { right: Box::new(Expr::Call(CallExpr {
span: DUMMY_SP, span: DUMMY_SP,

View file

@ -1169,7 +1169,7 @@ fn attach_name_to_expr(ident: Ident, expr: Expr, extra_items: &mut Vec<ModuleIte
span: DUMMY_SP, span: DUMMY_SP,
expr: Box::new(Expr::Assign(AssignExpr { expr: Box::new(Expr::Assign(AssignExpr {
span: DUMMY_SP, span: DUMMY_SP,
left: PatOrExpr::Pat(Box::new(Pat::Ident(ident.into()))), left: ident.into(),
op: op!("="), op: op!("="),
right: Box::new(expr), right: Box::new(expr),
})), })),

View file

@ -642,8 +642,74 @@ impl Repeated for NextSsg {
/// ///
/// Note: We don't implement `fold_script` because next.js doesn't use it. /// Note: We don't implement `fold_script` because next.js doesn't use it.
impl Fold for NextSsg { impl Fold for NextSsg {
// This is important for reducing binary sizes. fn fold_array_pat(&mut self, mut arr: ArrayPat) -> ArrayPat {
noop_fold_type!(); arr = arr.fold_children_with(self);
if !arr.elems.is_empty() {
arr.elems.retain(|e| !matches!(e, Some(Pat::Invalid(..))));
}
arr
}
fn fold_assign_target_pat(&mut self, mut n: AssignTargetPat) -> AssignTargetPat {
n = n.fold_children_with(self);
match &n {
AssignTargetPat::Array(arr) => {
if arr.elems.is_empty() {
return AssignTargetPat::Invalid(Invalid { span: DUMMY_SP });
}
}
AssignTargetPat::Object(obj) => {
if obj.props.is_empty() {
return AssignTargetPat::Invalid(Invalid { span: DUMMY_SP });
}
}
_ => {}
}
n
}
fn fold_expr(&mut self, e: Expr) -> Expr {
match e {
Expr::Assign(assign_expr) => {
let mut retain = true;
let left =
self.within_lhs_of_var(true, |this| assign_expr.left.clone().fold_with(this));
let right = self.within_lhs_of_var(false, |this| {
match left {
AssignTarget::Simple(SimpleAssignTarget::Invalid(..))
| AssignTarget::Pat(AssignTargetPat::Invalid(..)) => {
retain = false;
this.mark_as_candidate(&assign_expr.right);
}
_ => {}
}
assign_expr.right.clone().fold_with(this)
});
if retain {
self.remove_expression = false;
Expr::Assign(AssignExpr {
left,
right,
..assign_expr
})
} else {
self.remove_expression = true;
*right
}
}
_ => {
self.remove_expression = false;
e.fold_children_with(self)
}
}
}
fn fold_import_decl(&mut self, mut i: ImportDecl) -> ImportDecl { fn fold_import_decl(&mut self, mut i: ImportDecl) -> ImportDecl {
// Imports for side effects. // Imports for side effects.
@ -812,6 +878,43 @@ impl Fold for NextSsg {
n n
} }
fn fold_object_pat(&mut self, mut obj: ObjectPat) -> ObjectPat {
obj = obj.fold_children_with(self);
if !obj.props.is_empty() {
obj.props = take(&mut obj.props)
.into_iter()
.filter_map(|prop| match prop {
ObjectPatProp::KeyValue(prop) => {
if prop.value.is_invalid() {
None
} else {
Some(ObjectPatProp::KeyValue(prop))
}
}
ObjectPatProp::Assign(prop) => {
if self.should_remove(&prop.key.to_id()) {
self.mark_as_candidate(&prop.value);
None
} else {
Some(ObjectPatProp::Assign(prop))
}
}
ObjectPatProp::Rest(prop) => {
if prop.arg.is_invalid() {
None
} else {
Some(ObjectPatProp::Rest(prop))
}
}
})
.collect();
}
obj
}
/// This methods returns [Pat::Invalid] if the pattern should be removed. /// This methods returns [Pat::Invalid] if the pattern should be removed.
fn fold_pat(&mut self, mut p: Pat) -> Pat { fn fold_pat(&mut self, mut p: Pat) -> Pat {
p = p.fold_children_with(self); p = p.fold_children_with(self);
@ -831,48 +934,13 @@ impl Fold for NextSsg {
} }
} }
Pat::Array(arr) => { Pat::Array(arr) => {
if !arr.elems.is_empty() { if arr.elems.is_empty() {
arr.elems.retain(|e| !matches!(e, Some(Pat::Invalid(..)))); return Pat::Invalid(Invalid { span: DUMMY_SP });
if arr.elems.is_empty() {
return Pat::Invalid(Invalid { span: DUMMY_SP });
}
} }
} }
Pat::Object(obj) => { Pat::Object(obj) => {
if !obj.props.is_empty() { if obj.props.is_empty() {
obj.props = take(&mut obj.props) return Pat::Invalid(Invalid { span: DUMMY_SP });
.into_iter()
.filter_map(|prop| match prop {
ObjectPatProp::KeyValue(prop) => {
if prop.value.is_invalid() {
None
} else {
Some(ObjectPatProp::KeyValue(prop))
}
}
ObjectPatProp::Assign(prop) => {
if self.should_remove(&prop.key.to_id()) {
self.mark_as_candidate(&prop.value);
None
} else {
Some(ObjectPatProp::Assign(prop))
}
}
ObjectPatProp::Rest(prop) => {
if prop.arg.is_invalid() {
None
} else {
Some(ObjectPatProp::Rest(prop))
}
}
})
.collect();
if obj.props.is_empty() {
return Pat::Invalid(Invalid { span: DUMMY_SP });
}
} }
} }
Pat::Rest(rest) => { Pat::Rest(rest) => {
@ -904,6 +972,40 @@ impl Fold for NextSsg {
p p
} }
fn fold_simple_assign_target(&mut self, mut n: SimpleAssignTarget) -> SimpleAssignTarget {
n = n.fold_children_with(self);
if let SimpleAssignTarget::Ident(name) = &n {
if self.should_remove(&name.id.to_id()) {
self.state.should_run_again = true;
tracing::trace!(
"Dropping var `{}{:?}` because it should be removed",
name.id.sym,
name.id.span.ctxt
);
return SimpleAssignTarget::Invalid(Invalid { span: DUMMY_SP });
}
}
if let SimpleAssignTarget::Member(member_expr) = &n {
if let Some(id) = find_member_root_id(member_expr) {
if self.should_remove(&id) {
self.state.should_run_again = true;
tracing::trace!(
"Dropping member expression object `{}{:?}` because it should be removed",
id.0,
id.1
);
return SimpleAssignTarget::Invalid(Invalid { span: DUMMY_SP });
}
}
}
n
}
#[allow(clippy::single_match)] #[allow(clippy::single_match)]
fn fold_stmt(&mut self, mut s: Stmt) -> Stmt { fn fold_stmt(&mut self, mut s: Stmt) -> Stmt {
match s { match s {
@ -946,42 +1048,6 @@ impl Fold for NextSsg {
s s
} }
fn fold_expr(&mut self, e: Expr) -> Expr {
match e {
Expr::Assign(assign_expr) => {
let mut retain = true;
let left =
self.within_lhs_of_var(true, |this| assign_expr.left.clone().fold_with(this));
let right = self.within_lhs_of_var(false, |this| {
if let PatOrExpr::Pat(pat) = &left {
if pat.is_invalid() {
retain = false;
this.mark_as_candidate(&assign_expr.right);
}
}
assign_expr.right.clone().fold_with(this)
});
if retain {
self.remove_expression = false;
Expr::Assign(AssignExpr {
left,
right,
..assign_expr
})
} else {
self.remove_expression = true;
*right
}
}
_ => {
self.remove_expression = false;
e.fold_children_with(self)
}
}
}
/// This method make `name` of [VarDeclarator] to [Pat::Invalid] if it /// This method make `name` of [VarDeclarator] to [Pat::Invalid] if it
/// should be removed. /// should be removed.
fn fold_var_declarator(&mut self, d: VarDeclarator) -> VarDeclarator { fn fold_var_declarator(&mut self, d: VarDeclarator) -> VarDeclarator {
@ -1003,6 +1069,9 @@ impl Fold for NextSsg {
decls decls
} }
// This is important for reducing binary sizes.
noop_fold_type!();
} }
/// Returns the root identifier of a member expression. /// Returns the root identifier of a member expression.

View file

@ -193,7 +193,7 @@
"@types/ws": "8.2.0", "@types/ws": "8.2.0",
"@vercel/ncc": "0.34.0", "@vercel/ncc": "0.34.0",
"@vercel/nft": "0.26.3", "@vercel/nft": "0.26.3",
"@vercel/turbopack-ecmascript-runtime": "https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240212.3", "@vercel/turbopack-ecmascript-runtime": "https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240213.2",
"acorn": "8.5.0", "acorn": "8.5.0",
"amphtml-validator": "1.0.35", "amphtml-validator": "1.0.35",
"anser": "1.4.9", "anser": "1.4.9",

View file

@ -1077,8 +1077,8 @@ importers:
specifier: 0.26.3 specifier: 0.26.3
version: 0.26.3 version: 0.26.3
'@vercel/turbopack-ecmascript-runtime': '@vercel/turbopack-ecmascript-runtime':
specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240212.3 specifier: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240213.2
version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240212.3(react-refresh@0.12.0)(webpack@5.90.0)' version: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240213.2(react-refresh@0.12.0)(webpack@5.90.0)'
acorn: acorn:
specifier: 8.5.0 specifier: 8.5.0
version: 8.5.0 version: 8.5.0
@ -25655,9 +25655,9 @@ packages:
/zwitch@2.0.4: /zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
'@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240212.3(react-refresh@0.12.0)(webpack@5.90.0)': '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240213.2(react-refresh@0.12.0)(webpack@5.90.0)':
resolution: {tarball: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240212.3} resolution: {tarball: https://gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240213.2}
id: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240212.3' id: '@gitpkg-fork.vercel.sh/vercel/turbo/crates/turbopack-ecmascript-runtime/js?turbopack-240213.2'
name: '@vercel/turbopack-ecmascript-runtime' name: '@vercel/turbopack-ecmascript-runtime'
version: 0.0.0 version: 0.0.0
dependencies: dependencies: