diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index eda9c06fb578f6e..0e6116daa45af7d 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -2209,6 +2209,22 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +[[package]] +name = "next-binding" +version = "0.1.0" +source = "git+https://github.com/vercel/turbo.git?rev=cc024fa59f1c3ad253e74eefe86e0386455455d1#cc024fa59f1c3ad253e74eefe86e0386455455d1" +dependencies = [ + "mdxjs", + "modularize_imports", + "next-dev", + "node-file-trace", + "styled_components", + "styled_jsx", + "swc_core 0.45.4", + "swc_emotion", + "testing", +] + [[package]] name = "next-core" version = "0.1.0" @@ -2276,6 +2292,7 @@ dependencies = [ "either", "fxhash", "modularize_imports", + "next-binding", "once_cell", "pathdiff", "regex", @@ -2283,9 +2300,7 @@ dependencies = [ "serde_json", "styled_components", "styled_jsx", - "swc_core 0.45.4", "swc_emotion", - "testing", "tracing", "walkdir", ] @@ -2297,18 +2312,15 @@ dependencies = [ "anyhow", "backtrace", "fxhash", - "mdxjs", "napi", "napi-build", "napi-derive", - "next-dev", + "next-binding", "next-swc", - "node-file-trace", "once_cell", "sentry", "serde", "serde_json", - "swc_core 0.45.4", "tracing", "tracing-chrome", "tracing-futures", @@ -2321,9 +2333,11 @@ version = "0.1.0" source = "git+https://github.com/vercel/turbo.git?rev=cc024fa59f1c3ad253e74eefe86e0386455455d1#cc024fa59f1c3ad253e74eefe86e0386455455d1" dependencies = [ "anyhow", + "clap", "serde", "serde_json", "tokio", + "turbo-malloc", "turbo-tasks", "turbo-tasks-build", "turbo-tasks-fs", @@ -3039,9 +3053,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" +checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" dependencies = [ "base64", "bytes", @@ -5890,7 +5904,7 @@ dependencies = [ "console_error_panic_hook", "getrandom", "js-sys", - "mdxjs", + "next-binding", "next-swc", "once_cell", "parking_lot_core 0.8.0", @@ -5898,7 +5912,6 @@ dependencies = [ "serde", "serde-wasm-bindgen", "serde_json", - "swc_core 0.45.4", "tracing", "wasm-bindgen", "wasm-bindgen-futures", diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 69ae74471decc84..7b9d28176fc5e2c 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -5,9 +5,7 @@ version = "0.0.0" publish = false [features] -plugin = [ - "swc_core/plugin_transform_host_native" -] +plugin = ["next-binding/__swc_core_binding_napi_plugin"] [dependencies] chrono = "0.4" @@ -25,26 +23,19 @@ styled_jsx = "0.29.8" modularize_imports = "0.25.8" tracing = { version = "0.1.37", features = ["release_max_level_info"] } -swc_core = { features = [ - "common_concurrent", - "ecma_ast", - "ecma_visit", - "ecma_loader_node", - "ecma_loader_lru", - "ecma_utils", - "ecma_minifier", - "ecma_transforms", - "__ecma_transforms", - "ecma_transforms_react", - "ecma_transforms_typescript", - "ecma_transforms_optimization", - "ecma_parser", - "ecma_parser_typescript", - "cached", - "base" -], version = "0.45.4" } +next-binding = { git = "https://github.com/vercel/turbo.git", rev = "cc024fa59f1c3ad253e74eefe86e0386455455d1", features = [ + "__swc_core", + "__swc_core_next_core", + "__swc_transform_styled_jsx", + "__swc_transform_emotion", + "__swc_transform_styled_components", + "__swc_transform_modularize_imports", +] } [dev-dependencies] -swc_core = { features = ["testing_transform"], version = "0.45.4" } -testing = "0.31.14" +next-binding = { git = "https://github.com/vercel/turbo.git", rev = "cc024fa59f1c3ad253e74eefe86e0386455455d1", features = [ + "__swc_core_testing_transform", + "__swc_testing", +] } + walkdir = "2.3.2" diff --git a/packages/next-swc/crates/core/src/amp_attributes.rs b/packages/next-swc/crates/core/src/amp_attributes.rs index 386980d5e465398..7d0f82317f896d5 100644 --- a/packages/next-swc/crates/core/src/amp_attributes.rs +++ b/packages/next-swc/crates/core/src/amp_attributes.rs @@ -1,4 +1,4 @@ -use swc_core::{ +use next_binding::swc::core::{ ecma::ast::{Ident, JSXAttr, JSXAttrName, JSXAttrOrSpread, JSXElementName, JSXOpeningElement}, ecma::atoms::JsWord, ecma::visit::Fold, diff --git a/packages/next-swc/crates/core/src/auto_cjs/mod.rs b/packages/next-swc/crates/core/src/auto_cjs/mod.rs index 0859f9ebe11e0fc..239a82a2b8df60b 100644 --- a/packages/next-swc/crates/core/src/auto_cjs/mod.rs +++ b/packages/next-swc/crates/core/src/auto_cjs/mod.rs @@ -1,4 +1,4 @@ -use swc_core::{ +use next_binding::swc::core::{ ecma::ast::*, ecma::visit::{Visit, VisitWith}, }; diff --git a/packages/next-swc/crates/core/src/disallow_re_export_all_in_page.rs b/packages/next-swc/crates/core/src/disallow_re_export_all_in_page.rs index 3636c4774fcf3a4..50f588ed3341c13 100644 --- a/packages/next-swc/crates/core/src/disallow_re_export_all_in_page.rs +++ b/packages/next-swc/crates/core/src/disallow_re_export_all_in_page.rs @@ -1,4 +1,4 @@ -use swc_core::{ +use next_binding::swc::core::{ common::errors::HANDLER, ecma::ast::ExportAll, ecma::transforms::base::pass::Optional, diff --git a/packages/next-swc/crates/core/src/lib.rs b/packages/next-swc/crates/core/src/lib.rs index 32c6c02218955a2..8229d41cf9e89e9 100644 --- a/packages/next-swc/crates/core/src/lib.rs +++ b/packages/next-swc/crates/core/src/lib.rs @@ -38,7 +38,7 @@ use std::cell::RefCell; use std::rc::Rc; use std::{path::PathBuf, sync::Arc}; -use swc_core::{ +use next_binding::swc::core::{ base::config::ModuleConfig, common::{chain, comments::Comments, pass::Optional, FileName, SourceFile, SourceMap}, ecma::ast::EsVersion, @@ -66,7 +66,7 @@ mod top_level_binding_collector; #[serde(rename_all = "camelCase")] pub struct TransformOptions { #[serde(flatten)] - pub swc: swc_core::base::config::Options, + pub swc: next_binding::swc::core::base::config::Options, #[serde(default)] pub disable_next_ssg: bool, @@ -93,7 +93,7 @@ pub struct TransformOptions { pub styled_jsx: bool, #[serde(default)] - pub styled_components: Option, + pub styled_components: Option, #[serde(default)] pub remove_console: Option, @@ -115,10 +115,10 @@ pub struct TransformOptions { pub shake_exports: Option, #[serde(default)] - pub emotion: Option, + pub emotion: Option, #[serde(default)] - pub modularize_imports: Option, + pub modularize_imports: Option, #[serde(default)] pub font_loaders: Option, @@ -162,19 +162,23 @@ where _ => Either::Right(noop()), }, if opts.styled_jsx { - Either::Left(styled_jsx::visitor::styled_jsx( - cm.clone(), - file.name.clone(), - )) + Either::Left( + next_binding::swc::custom_transform::styled_jsx::visitor::styled_jsx( + cm.clone(), + file.name.clone(), + ), + ) } else { Either::Right(noop()) }, match &opts.styled_components { - Some(config) => Either::Left(styled_components::styled_components( - file.name.clone(), - file.src_hash, - config.clone(), - )), + Some(config) => Either::Left( + next_binding::swc::custom_transform::styled_components::styled_components( + file.name.clone(), + file.src_hash, + config.clone(), + ) + ), None => Either::Right(noop()), }, Optional::new( @@ -216,12 +220,14 @@ where } if let FileName::Real(path) = &file.name { path.to_str().map(|_| { - Either::Left(swc_emotion::EmotionTransformer::new( - config.clone(), - path, - cm, - comments, - )) + Either::Left( + next_binding::swc::custom_transform::emotion::EmotionTransformer::new( + config.clone(), + path, + cm, + comments, + ), + ) }) } else { None @@ -229,7 +235,11 @@ where }) .unwrap_or_else(|| Either::Right(noop())), match &opts.modularize_imports { - Some(config) => Either::Left(modularize_imports::modularize_imports(config.clone())), + Some(config) => Either::Left( + next_binding::swc::custom_transform::modularize_imports::modularize_imports( + config.clone() + ) + ), None => Either::Right(noop()), }, match &opts.font_loaders { diff --git a/packages/next-swc/crates/core/src/next_dynamic.rs b/packages/next-swc/crates/core/src/next_dynamic.rs index 422e2515a9da159..78444171bf2e790 100644 --- a/packages/next-swc/crates/core/src/next_dynamic.rs +++ b/packages/next-swc/crates/core/src/next_dynamic.rs @@ -2,7 +2,7 @@ use std::path::{Path, PathBuf}; use pathdiff::diff_paths; -use swc_core::{ +use next_binding::swc::core::{ common::{errors::HANDLER, FileName, DUMMY_SP}, ecma::ast::{ ArrayLit, ArrowExpr, BinExpr, BinaryOp, BlockStmtOrExpr, Bool, CallExpr, Callee, Expr, diff --git a/packages/next-swc/crates/core/src/next_font_loaders/find_functions_outside_module_scope.rs b/packages/next-swc/crates/core/src/next_font_loaders/find_functions_outside_module_scope.rs index f83742d20543635..3ccf5af4d1a617a 100644 --- a/packages/next-swc/crates/core/src/next_font_loaders/find_functions_outside_module_scope.rs +++ b/packages/next-swc/crates/core/src/next_font_loaders/find_functions_outside_module_scope.rs @@ -1,7 +1,7 @@ -use swc_core::common::errors::HANDLER; -use swc_core::ecma::ast::*; -use swc_core::ecma::visit::noop_visit_type; -use swc_core::ecma::visit::Visit; +use next_binding::swc::core::common::errors::HANDLER; +use next_binding::swc::core::ecma::ast::*; +use next_binding::swc::core::ecma::visit::noop_visit_type; +use next_binding::swc::core::ecma::visit::Visit; pub struct FindFunctionsOutsideModuleScope<'a> { pub state: &'a super::State, diff --git a/packages/next-swc/crates/core/src/next_font_loaders/font_functions_collector.rs b/packages/next-swc/crates/core/src/next_font_loaders/font_functions_collector.rs index e8fdfce66f0e65c..2465e885ace6ba6 100644 --- a/packages/next-swc/crates/core/src/next_font_loaders/font_functions_collector.rs +++ b/packages/next-swc/crates/core/src/next_font_loaders/font_functions_collector.rs @@ -1,8 +1,8 @@ -use swc_core::common::errors::HANDLER; -use swc_core::ecma::ast::*; -use swc_core::ecma::atoms::JsWord; -use swc_core::ecma::visit::noop_visit_type; -use swc_core::ecma::visit::Visit; +use next_binding::swc::core::common::errors::HANDLER; +use next_binding::swc::core::ecma::ast::*; +use next_binding::swc::core::ecma::atoms::JsWord; +use next_binding::swc::core::ecma::visit::noop_visit_type; +use next_binding::swc::core::ecma::visit::Visit; pub struct FontFunctionsCollector<'a> { pub font_loaders: &'a [JsWord], diff --git a/packages/next-swc/crates/core/src/next_font_loaders/font_imports_generator.rs b/packages/next-swc/crates/core/src/next_font_loaders/font_imports_generator.rs index d6a92447b833d54..c80e24f85c800bf 100644 --- a/packages/next-swc/crates/core/src/next_font_loaders/font_imports_generator.rs +++ b/packages/next-swc/crates/core/src/next_font_loaders/font_imports_generator.rs @@ -1,9 +1,9 @@ +use next_binding::swc::core::common::errors::HANDLER; +use next_binding::swc::core::common::{Spanned, DUMMY_SP}; +use next_binding::swc::core::ecma::ast::*; +use next_binding::swc::core::ecma::atoms::JsWord; +use next_binding::swc::core::ecma::visit::{noop_visit_type, Visit}; use serde_json::Value; -use swc_core::common::errors::HANDLER; -use swc_core::common::{Spanned, DUMMY_SP}; -use swc_core::ecma::ast::*; -use swc_core::ecma::atoms::JsWord; -use swc_core::ecma::visit::{noop_visit_type, Visit}; pub struct FontImportsGenerator<'a> { pub state: &'a mut super::State, diff --git a/packages/next-swc/crates/core/src/next_font_loaders/mod.rs b/packages/next-swc/crates/core/src/next_font_loaders/mod.rs index e39e83c69d58ab0..28f4cac2b83c312 100644 --- a/packages/next-swc/crates/core/src/next_font_loaders/mod.rs +++ b/packages/next-swc/crates/core/src/next_font_loaders/mod.rs @@ -1,6 +1,5 @@ use fxhash::FxHashSet; -use serde::Deserialize; -use swc_core::{ +use next_binding::swc::core::{ common::{collections::AHashMap, BytePos, Spanned}, ecma::{ ast::Id, @@ -8,6 +7,7 @@ use swc_core::{ }, ecma::{ast::ModuleItem, atoms::JsWord}, }; +use serde::Deserialize; mod find_functions_outside_module_scope; mod font_functions_collector; diff --git a/packages/next-swc/crates/core/src/next_ssg.rs b/packages/next-swc/crates/core/src/next_ssg.rs index e1344cb97d79a32..e1fdb0842ba4c02 100644 --- a/packages/next-swc/crates/core/src/next_ssg.rs +++ b/packages/next-swc/crates/core/src/next_ssg.rs @@ -4,7 +4,7 @@ use std::cell::RefCell; use std::mem::take; use std::rc::Rc; -use swc_core::{ +use next_binding::swc::core::{ common::{ errors::HANDLER, pass::{Repeat, Repeated}, diff --git a/packages/next-swc/crates/core/src/page_config.rs b/packages/next-swc/crates/core/src/page_config.rs index f37beeb04909e4f..c800f315a43fc4f 100644 --- a/packages/next-swc/crates/core/src/page_config.rs +++ b/packages/next-swc/crates/core/src/page_config.rs @@ -1,6 +1,6 @@ use chrono::Utc; -use swc_core::{ +use next_binding::swc::core::{ common::{errors::HANDLER, Span, DUMMY_SP}, ecma::ast::*, ecma::visit::{Fold, FoldWith}, diff --git a/packages/next-swc/crates/core/src/react_remove_properties.rs b/packages/next-swc/crates/core/src/react_remove_properties.rs index 5e4b03a6b754f67..900078a9bfc0828 100644 --- a/packages/next-swc/crates/core/src/react_remove_properties.rs +++ b/packages/next-swc/crates/core/src/react_remove_properties.rs @@ -1,7 +1,7 @@ use regex::Regex; use serde::Deserialize; -use swc_core::{ +use next_binding::swc::core::{ ecma::ast::*, ecma::visit::{noop_fold_type, Fold, FoldWith}, }; diff --git a/packages/next-swc/crates/core/src/react_server_components.rs b/packages/next-swc/crates/core/src/react_server_components.rs index 81ad12f596df8a6..ee670930165fa10 100644 --- a/packages/next-swc/crates/core/src/react_server_components.rs +++ b/packages/next-swc/crates/core/src/react_server_components.rs @@ -1,7 +1,7 @@ use regex::Regex; use serde::Deserialize; -use swc_core::{ +use next_binding::swc::core::{ common::{ comments::{Comment, CommentKind, Comments}, errors::HANDLER, diff --git a/packages/next-swc/crates/core/src/relay.rs b/packages/next-swc/crates/core/src/relay.rs index aced684c13ea4e2..803e2a9530efbcb 100644 --- a/packages/next-swc/crates/core/src/relay.rs +++ b/packages/next-swc/crates/core/src/relay.rs @@ -3,7 +3,7 @@ use regex::Regex; use serde::Deserialize; use std::path::{Path, PathBuf}; -use swc_core::{ +use next_binding::swc::core::{ common::{errors::HANDLER, FileName}, ecma::ast::*, ecma::atoms::JsWord, diff --git a/packages/next-swc/crates/core/src/remove_console.rs b/packages/next-swc/crates/core/src/remove_console.rs index 035b7dba776cedb..1b8e80e2a0fde5b 100644 --- a/packages/next-swc/crates/core/src/remove_console.rs +++ b/packages/next-swc/crates/core/src/remove_console.rs @@ -1,6 +1,6 @@ use serde::Deserialize; -use swc_core::{ +use next_binding::swc::core::{ common::{collections::AHashSet, DUMMY_SP}, ecma::ast::*, ecma::atoms::JsWord, diff --git a/packages/next-swc/crates/core/src/shake_exports.rs b/packages/next-swc/crates/core/src/shake_exports.rs index c08a19ea28ef9d2..49fa2d1b3610a3e 100644 --- a/packages/next-swc/crates/core/src/shake_exports.rs +++ b/packages/next-swc/crates/core/src/shake_exports.rs @@ -1,6 +1,6 @@ use serde::Deserialize; -use swc_core::{ +use next_binding::swc::core::{ common::Mark, ecma::ast::*, ecma::atoms::{js_word, JsWord}, diff --git a/packages/next-swc/crates/core/src/top_level_binding_collector.rs b/packages/next-swc/crates/core/src/top_level_binding_collector.rs index 1eef9229528d1fd..62d0b18f74f9a4c 100644 --- a/packages/next-swc/crates/core/src/top_level_binding_collector.rs +++ b/packages/next-swc/crates/core/src/top_level_binding_collector.rs @@ -1,6 +1,6 @@ use std::hash::Hash; -use swc_core::{ +use next_binding::swc::core::{ common::{collections::AHashSet, SyntaxContext}, ecma::ast::{ ClassDecl, FnDecl, Ident, ImportDefaultSpecifier, ImportNamedSpecifier, diff --git a/packages/next-swc/crates/core/tests/errors.rs b/packages/next-swc/crates/core/tests/errors.rs index 6d627c12e665e3f..2d55603c9c37542 100644 --- a/packages/next-swc/crates/core/tests/errors.rs +++ b/packages/next-swc/crates/core/tests/errors.rs @@ -1,3 +1,13 @@ +use next_binding::swc::{ + core::{ + common::FileName, + ecma::{ + parser::{EsConfig, Syntax}, + transforms::testing::{test_fixture, FixtureTestConfig}, + }, + }, + testing::fixture, +}; use next_swc::{ disallow_re_export_all_in_page::disallow_re_export_all_in_page, next_dynamic::next_dynamic, @@ -6,14 +16,6 @@ use next_swc::{ react_server_components::server_components, }; use std::path::PathBuf; -use swc_core::{ - common::FileName, - ecma::{ - parser::{EsConfig, Syntax}, - transforms::testing::{test_fixture, FixtureTestConfig}, - }, -}; -use testing::fixture; fn syntax() -> Syntax { Syntax::Es(EsConfig { diff --git a/packages/next-swc/crates/core/tests/fixture.rs b/packages/next-swc/crates/core/tests/fixture.rs index 478f667c1ccd066..b362230d95b7f78 100644 --- a/packages/next-swc/crates/core/tests/fixture.rs +++ b/packages/next-swc/crates/core/tests/fixture.rs @@ -1,3 +1,12 @@ +use next_binding::swc::{ + core::{ + common::{chain, comments::SingleThreadedComments, FileName, Mark}, + ecma::parser::{EsConfig, Syntax}, + ecma::transforms::react::jsx, + ecma::transforms::testing::{test, test_fixture}, + }, + testing::fixture, +}; use next_swc::{ amp_attributes::amp_attributes, next_dynamic::next_dynamic, @@ -11,13 +20,6 @@ use next_swc::{ shake_exports::{shake_exports, Config as ShakeExportsConfig}, }; use std::path::PathBuf; -use swc_core::{ - common::{chain, comments::SingleThreadedComments, FileName, Mark}, - ecma::parser::{EsConfig, Syntax}, - ecma::transforms::react::jsx, - ecma::transforms::testing::{test, test_fixture}, -}; -use testing::fixture; fn syntax() -> Syntax { Syntax::Es(EsConfig { @@ -100,7 +102,7 @@ fn next_ssg_fixture(input: PathBuf) { let jsx = jsx::( tr.cm.clone(), None, - swc_core::ecma::transforms::react::Options { + next_binding::swc::core::ecma::transforms::react::Options { next: false.into(), runtime: None, import_source: Some("".into()), diff --git a/packages/next-swc/crates/core/tests/full.rs b/packages/next-swc/crates/core/tests/full.rs index 02e87ff6781cf11..d45ffe9cc4e78a9 100644 --- a/packages/next-swc/crates/core/tests/full.rs +++ b/packages/next-swc/crates/core/tests/full.rs @@ -1,20 +1,22 @@ +use next_binding::swc::{ + core::{ + base::Compiler, + common::comments::SingleThreadedComments, + ecma::parser::{Syntax, TsConfig}, + ecma::transforms::base::pass::noop, + }, + testing::{NormalizedOutput, Tester}, +}; use next_swc::{custom_before_pass, TransformOptions}; use serde::de::DeserializeOwned; use std::path::{Path, PathBuf}; -use swc_core::{ - base::Compiler, - common::comments::SingleThreadedComments, - ecma::parser::{Syntax, TsConfig}, - ecma::transforms::base::pass::noop, -}; -use testing::{NormalizedOutput, Tester}; -#[testing::fixture("tests/full/**/input.js")] +#[next_binding::swc::testing::fixture("tests/full/**/input.js")] fn full(input: PathBuf) { test(&input, true); } -#[testing::fixture("tests/loader/**/input.js")] +#[next_binding::swc::testing::fixture("tests/loader/**/input.js")] fn loader(input: PathBuf) { test(&input, false); } @@ -29,14 +31,14 @@ fn test(input: &Path, minify: bool) { let fm = cm.load_file(input).expect("failed to load file"); let options = TransformOptions { - swc: swc_core::base::config::Options { + swc: next_binding::swc::core::base::config::Options { swcrc: true, output_path: Some(output.clone()), - config: swc_core::base::config::Config { - is_module: swc_core::base::config::IsModule::Bool(true), + config: next_binding::swc::core::base::config::Config { + is_module: next_binding::swc::core::base::config::IsModule::Bool(true), - jsc: swc_core::base::config::JscConfig { + jsc: next_binding::swc::core::base::config::JscConfig { minify: if minify { Some(assert_json("{ \"compress\": true, \"mangle\": true }")) } else { diff --git a/packages/next-swc/crates/core/tests/telemetry.rs b/packages/next-swc/crates/core/tests/telemetry.rs index c0f99b160d21949..cbf2199a031851b 100644 --- a/packages/next-swc/crates/core/tests/telemetry.rs +++ b/packages/next-swc/crates/core/tests/telemetry.rs @@ -6,7 +6,7 @@ use fxhash::FxHashSet; use next_swc::next_ssg::next_ssg; use once_cell::sync::Lazy; -use swc_core::{ +use next_binding::swc::core::{ base::{try_with_handler, Compiler}, common::{comments::SingleThreadedComments, FileName, FilePathMapping, SourceMap, GLOBALS}, ecma::transforms::base::pass::noop, diff --git a/packages/next-swc/crates/napi/Cargo.toml b/packages/next-swc/crates/napi/Cargo.toml index 479fc76001449e8..51bd83b6055ba88 100644 --- a/packages/next-swc/crates/napi/Cargo.toml +++ b/packages/next-swc/crates/napi/Cargo.toml @@ -13,10 +13,7 @@ default = [] # when build (i.e napi --build --features plugin), same for the wasm as well. # this is due to some of transitive dependencies have features cannot be enabled at the same time # (i.e wasmer/default vs wasmer/js-default) while cargo merges all the features at once. -plugin = [ - "swc_core/plugin_transform_host_native", - "next-swc/plugin" -] +plugin = ["next-binding/__swc_core_binding_napi_plugin", "next-swc/plugin"] sentry_native_tls = ["_sentry_native_tls"] sentry_rustls = ["_sentry_rustls"] @@ -24,40 +21,28 @@ sentry_rustls = ["_sentry_rustls"] anyhow = "1.0.66" backtrace = "0.3" fxhash = "0.2.1" -napi = { version = "2", default-features = false, features = ["napi3", "serde-json", "tokio_rt", "error_anyhow"] } +napi = { version = "2", default-features = false, features = [ + "napi3", + "serde-json", + "tokio_rt", + "error_anyhow", +] } napi-derive = "2" -next-swc = {version = "0.0.0", path = "../core"} +next-swc = { version = "0.0.0", path = "../core" } once_cell = "1.13.0" serde = "1" serde_json = "1" -swc_core = { features = [ - "allocator_node", - "base_concurrent", # concurrent? - "base_node", - "common_concurrent", - "ecma_ast", - "ecma_loader_node", - "ecma_loader_lru", - "bundler", - "bundler_concurrent", - "ecma_codegen", - "ecma_minifier", - "ecma_parser", - "ecma_parser_typescript", - "ecma_transforms", - "ecma_transforms_optimization", - "ecma_transforms_react", - "ecma_transforms_typescript", - "ecma_utils", - "ecma_visit", -], version = "0.45.4" } tracing = { version = "0.1.37", features = ["release_max_level_info"] } tracing-futures = "0.2.5" tracing-subscriber = "0.3.9" tracing-chrome = "0.5.0" -next-dev = { git = "https://github.com/vercel/turbo.git", rev = "cc024fa59f1c3ad253e74eefe86e0386455455d1", features = ["serializable"] } -node-file-trace = { git = "https://github.com/vercel/turbo.git", rev = "cc024fa59f1c3ad253e74eefe86e0386455455d1", default-features = false, features = ["node-api"] } -mdxjs = { version = "0.1.3", features = ["serializable"] } +next-binding = { git = "https://github.com/vercel/turbo.git", rev = "cc024fa59f1c3ad253e74eefe86e0386455455d1", features = [ + "__swc_core_binding_napi", + "__turbo_next_dev_server", + "__turbo_node_file_trace", + "__feature_mdx_rs", +] } + # There are few build targets we can't use native-tls which default features rely on, # allow to specify alternative (rustls) instead via features. # Note to opt in rustls default-features should be disabled @@ -68,7 +53,7 @@ _sentry_rustls = { package = "sentry", version = "0.27.0", default-features = fa "contexts", "panic", "rustls", - "reqwest" + "reqwest", ], optional = true } [build-dependencies] diff --git a/packages/next-swc/crates/napi/src/lib.rs b/packages/next-swc/crates/napi/src/lib.rs index acdfd2d187a06d0..2ef6b0548b57cd6 100644 --- a/packages/next-swc/crates/napi/src/lib.rs +++ b/packages/next-swc/crates/napi/src/lib.rs @@ -32,14 +32,14 @@ DEALINGS IN THE SOFTWARE. #[macro_use] extern crate napi_derive; /// Explicit extern crate to use allocator. -extern crate swc_core; +extern crate next_binding; use std::{env, panic::set_hook, sync::Arc}; use backtrace::Backtrace; use fxhash::FxHashSet; use napi::bindgen_prelude::*; -use swc_core::{ +use next_binding::swc::core::{ base::{Compiler, TransformOutput}, common::{sync::Lazy, FilePathMapping, SourceMap}, }; diff --git a/packages/next-swc/crates/napi/src/mdx.rs b/packages/next-swc/crates/napi/src/mdx.rs index f0bea1073ecc5c1..999fd7f37d17ebf 100644 --- a/packages/next-swc/crates/napi/src/mdx.rs +++ b/packages/next-swc/crates/napi/src/mdx.rs @@ -1,5 +1,5 @@ -use mdxjs::{compile, Options}; use napi::bindgen_prelude::*; +use next_binding::features::mdxjs::{compile, Options}; pub struct MdxCompileTask { pub input: String, diff --git a/packages/next-swc/crates/napi/src/minify.rs b/packages/next-swc/crates/napi/src/minify.rs index 7845566291291e2..fb9ac27c451dd20 100644 --- a/packages/next-swc/crates/napi/src/minify.rs +++ b/packages/next-swc/crates/napi/src/minify.rs @@ -29,18 +29,18 @@ use std::sync::Arc; use fxhash::FxHashMap; use napi::bindgen_prelude::*; -use serde::Deserialize; -use swc_core::{ +use next_binding::swc::core::{ base::{try_with_handler, TransformOutput}, common::{errors::ColorConfig, sync::Lrc, FileName, SourceFile, SourceMap, GLOBALS}, }; +use serde::Deserialize; use crate::{get_compiler, util::MapErr}; pub struct MinifyTask { - c: Arc, + c: Arc, code: MinifyTarget, - opts: swc_core::base::config::JsMinifyOptions, + opts: next_binding::swc::core::base::config::JsMinifyOptions, } #[derive(Deserialize)] @@ -80,7 +80,7 @@ impl Task for MinifyTask { fn compute(&mut self) -> napi::Result { try_with_handler( self.c.cm.clone(), - swc_core::base::HandlerOpts { + next_binding::swc::core::base::HandlerOpts { color: ColorConfig::Never, skip_filename: true, }, @@ -127,7 +127,7 @@ pub fn minify_sync(input: Buffer, opts: Buffer) -> napi::Result try_with_handler( c.cm.clone(), - swc_core::base::HandlerOpts { + next_binding::swc::core::base::HandlerOpts { color: ColorConfig::Never, skip_filename: true, }, diff --git a/packages/next-swc/crates/napi/src/parse.rs b/packages/next-swc/crates/napi/src/parse.rs index 540ed746a9f897c..bdd49b830775221 100644 --- a/packages/next-swc/crates/napi/src/parse.rs +++ b/packages/next-swc/crates/napi/src/parse.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use anyhow::Context as _; use napi::bindgen_prelude::*; -use swc_core::{ +use next_binding::swc::core::{ base::{config::ParseOptions, try_with_handler}, common::{ comments::Comments, errors::ColorConfig, FileName, FilePathMapping, SourceMap, GLOBALS, @@ -24,8 +24,9 @@ impl Task for ParseTask { fn compute(&mut self) -> napi::Result { GLOBALS.set(&Default::default(), || { - let c = - swc_core::base::Compiler::new(Arc::new(SourceMap::new(FilePathMapping::empty()))); + let c = next_binding::swc::core::base::Compiler::new(Arc::new(SourceMap::new( + FilePathMapping::empty(), + ))); let options: ParseOptions = serde_json::from_slice(self.options.as_ref())?; let comments = c.comments().clone(); @@ -38,7 +39,7 @@ impl Task for ParseTask { c.cm.new_source_file(self.filename.clone(), self.src.clone()); let program = try_with_handler( c.cm.clone(), - swc_core::base::HandlerOpts { + next_binding::swc::core::base::HandlerOpts { color: ColorConfig::Never, skip_filename: false, }, diff --git a/packages/next-swc/crates/napi/src/transform.rs b/packages/next-swc/crates/napi/src/transform.rs index f1104fb5f20e0da..1d2b40d37d3bd13 100644 --- a/packages/next-swc/crates/napi/src/transform.rs +++ b/packages/next-swc/crates/napi/src/transform.rs @@ -37,13 +37,12 @@ use std::{ use anyhow::{anyhow, bail, Context as _}; use fxhash::FxHashSet; use napi::bindgen_prelude::*; -use next_swc::{custom_before_pass, TransformOptions}; -use swc_core::common::comments::SingleThreadedComments; -use swc_core::{ +use next_binding::swc::core::{ base::{try_with_handler, Compiler, TransformOutput}, - common::{errors::ColorConfig, FileName, GLOBALS}, + common::{comments::SingleThreadedComments, errors::ColorConfig, FileName, GLOBALS}, ecma::transforms::base::pass::noop, }; +use next_swc::{custom_before_pass, TransformOptions}; use crate::{complete_output, get_compiler, util::MapErr}; @@ -72,7 +71,7 @@ impl Task for TransformTask { let res = catch_unwind(AssertUnwindSafe(|| { try_with_handler( self.c.cm.clone(), - swc_core::base::HandlerOpts { + next_binding::swc::core::base::HandlerOpts { color: ColorConfig::Never, skip_filename: true, }, diff --git a/packages/next-swc/crates/napi/src/turbopack.rs b/packages/next-swc/crates/napi/src/turbopack.rs index a51bb50b9b5cb5d..61ea6f3689147a7 100644 --- a/packages/next-swc/crates/napi/src/turbopack.rs +++ b/packages/next-swc/crates/napi/src/turbopack.rs @@ -1,6 +1,6 @@ use crate::util::MapErr; use napi::bindgen_prelude::*; -use next_dev::{devserver_options::DevServerOptions, start_server}; +use next_binding::turbo::next_dev::{devserver_options::DevServerOptions, start_server}; #[napi] pub async fn start_turbo_dev(options: Buffer) -> napi::Result<()> { diff --git a/packages/next-swc/crates/napi/src/turbotrace.rs b/packages/next-swc/crates/napi/src/turbotrace.rs index 05b046ab5f7fb2f..b1006276917a838 100644 --- a/packages/next-swc/crates/napi/src/turbotrace.rs +++ b/packages/next-swc/crates/napi/src/turbotrace.rs @@ -1,7 +1,7 @@ use std::sync::Arc; use napi::bindgen_prelude::*; -use node_file_trace::{start, Args}; +use next_binding::turbo::node_file_trace::{start, Args}; #[napi] pub async fn run_turbo_tracing(options: Buffer) -> napi::Result> { diff --git a/packages/next-swc/crates/wasm/Cargo.toml b/packages/next-swc/crates/wasm/Cargo.toml index 968c9f8fe2e93d1..894b9860ddabac4 100644 --- a/packages/next-swc/crates/wasm/Cargo.toml +++ b/packages/next-swc/crates/wasm/Cargo.toml @@ -13,7 +13,7 @@ swc_v1 = [] plugin = [ "getrandom/js", - "swc_core/plugin_transform_host_js" + "next-binding/__swc_core_binding_wasm_plugin" ] [dependencies] @@ -31,22 +31,10 @@ wasm-bindgen-futures = "0.4.8" getrandom = { version = "0.2.5", optional = true, default-features = false } js-sys = "0.3.59" serde-wasm-bindgen = "0.4.3" -mdxjs = { version = "0.1.3", features = ["serializable"] } - -swc_core = { features = [ - "common_concurrent", - "binding_macro_wasm", - "ecma_codegen", - "ecma_minifier", - "ecma_transforms", - "ecma_transforms_typescript", - "ecma_transforms_optimization", - "ecma_transforms_react", - "ecma_parser", - "ecma_parser_typescript", - "ecma_utils", - "ecma_visit" -], version = "0.45.4" } +next-binding = { git = "https://github.com/vercel/turbo.git", rev = "cc024fa59f1c3ad253e74eefe86e0386455455d1", features = [ + "__swc_core_binding_wasm", + "__feature_mdx_rs", +] } # Workaround a bug diff --git a/packages/next-swc/crates/wasm/src/lib.rs b/packages/next-swc/crates/wasm/src/lib.rs index 1b16b6a79bd1f82..5ebef8613c2b970 100644 --- a/packages/next-swc/crates/wasm/src/lib.rs +++ b/packages/next-swc/crates/wasm/src/lib.rs @@ -5,7 +5,7 @@ use std::sync::Arc; use wasm_bindgen::{prelude::*, JsCast}; use wasm_bindgen_futures::future_to_promise; -use swc_core::{ +use next_binding::swc::core::{ base::{config::JsMinifyOptions, config::ParseOptions, try_with_handler, Compiler}, common::{ comments::{Comments, SingleThreadedComments}, @@ -31,7 +31,7 @@ pub fn minify_sync(s: JsString, opts: JsValue) -> Result { let value = try_with_handler( c.cm.clone(), - swc_core::base::HandlerOpts { + next_binding::swc::core::base::HandlerOpts { color: ColorConfig::Never, skip_filename: false, }, @@ -68,7 +68,7 @@ pub fn transform_sync(s: JsValue, opts: JsValue) -> Result { let s = s.dyn_into::(); let out = try_with_handler( c.cm.clone(), - swc_core::base::HandlerOpts { + next_binding::swc::core::base::HandlerOpts { color: ColorConfig::Never, skip_filename: false, }, @@ -133,12 +133,14 @@ pub fn transform(s: JsValue, opts: JsValue) -> js_sys::Promise { pub fn parse_sync(s: JsString, opts: JsValue) -> Result { console_error_panic_hook::set_once(); - let c = swc_core::base::Compiler::new(Arc::new(SourceMap::new(FilePathMapping::empty()))); + let c = next_binding::swc::core::base::Compiler::new(Arc::new(SourceMap::new( + FilePathMapping::empty(), + ))); let opts: ParseOptions = serde_wasm_bindgen::from_value(opts)?; try_with_handler( c.cm.clone(), - swc_core::base::HandlerOpts { + next_binding::swc::core::base::HandlerOpts { ..Default::default() }, |handler| { diff --git a/packages/next-swc/crates/wasm/src/mdx.rs b/packages/next-swc/crates/wasm/src/mdx.rs index 0186a9d7a1fe9c8..616d72417e064e1 100644 --- a/packages/next-swc/crates/wasm/src/mdx.rs +++ b/packages/next-swc/crates/wasm/src/mdx.rs @@ -1,5 +1,5 @@ use js_sys::JsString; -use mdxjs::{compile, Options}; +use next_binding::features::mdxjs::{compile, Options}; use wasm_bindgen::prelude::*; use wasm_bindgen_futures::future_to_promise;