From 3760b1d78166ec7f346b1efc8dc34e90ddee6e03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Mon, 3 Feb 2025 14:34:02 +0900 Subject: [PATCH] perf: Make `cjs_optimizer` use `Atom` instead of `String` --- .../transforms/next_cjs_optimizer.rs | 25 ++++++++++--------- .../src/transforms/cjs_optimizer.rs | 12 ++++----- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/crates/next-core/src/next_shared/transforms/next_cjs_optimizer.rs b/crates/next-core/src/next_shared/transforms/next_cjs_optimizer.rs index b1c8f218612ae..c110270382281 100644 --- a/crates/next-core/src/next_shared/transforms/next_cjs_optimizer.rs +++ b/crates/next-core/src/next_shared/transforms/next_cjs_optimizer.rs @@ -3,6 +3,7 @@ use async_trait::async_trait; use next_custom_transforms::transforms::cjs_optimizer::{cjs_optimizer, Config, PackageConfig}; use rustc_hash::FxHashMap; use swc_core::{ + atoms::atom, common::SyntaxContext, ecma::{ast::*, visit::VisitMutWith}, }; @@ -18,30 +19,30 @@ pub fn get_next_cjs_optimizer_rule(enable_mdx_rs: bool) -> ModuleRule { // build it internally without accepting customization. let config = Config { packages: FxHashMap::from_iter([( - "next/server".to_string(), + atom!("next/server"), PackageConfig { transforms: FxHashMap::from_iter([ ( - "NextRequest".into(), - "next/dist/server/web/spec-extension/request".into(), + atom!("NextRequest"), + atom!("next/dist/server/web/spec-extension/request"), ), ( - "NextResponse".into(), - "next/dist/server/web/spec-extension/response".into(), + atom!("NextResponse"), + atom!("next/dist/server/web/spec-extension/response"), ), ( - "ImageResponse".into(), - "next/dist/server/web/spec-extension/image-response".into(), + atom!("ImageResponse"), + atom!("next/dist/server/web/spec-extension/image-response"), ), ( - "userAgentFromString".into(), - "next/dist/server/web/spec-extension/user-agent".into(), + atom!("userAgentFromString"), + atom!("next/dist/server/web/spec-extension/user-agent"), ), ( - "userAgent".into(), - "next/dist/server/web/spec-extension/user-agent".into(), + atom!("userAgent"), + atom!("next/dist/server/web/spec-extension/user-agent"), ), - ("after".into(), "next/dist/server/after".into()), + (atom!("after"), atom!("next/dist/server/after")), ]), }, )]), diff --git a/crates/next-custom-transforms/src/transforms/cjs_optimizer.rs b/crates/next-custom-transforms/src/transforms/cjs_optimizer.rs index 3bb376ee861df..837f5597ed512 100644 --- a/crates/next-custom-transforms/src/transforms/cjs_optimizer.rs +++ b/crates/next-custom-transforms/src/transforms/cjs_optimizer.rs @@ -7,7 +7,7 @@ use swc_core::{ CallExpr, Callee, Decl, Expr, Id, Ident, IdentName, Lit, MemberExpr, MemberProp, Module, ModuleItem, Pat, Script, Stmt, VarDecl, VarDeclKind, VarDeclarator, }, - atoms::{Atom, JsWord}, + atoms::Atom, utils::{prepend_stmts, private_ident, ExprFactory, IdentRenamer}, visit::{noop_visit_mut_type, noop_visit_type, Visit, VisitMut, VisitMutWith, VisitWith}, }, @@ -23,18 +23,18 @@ pub fn cjs_optimizer(config: Config, unresolved_ctxt: SyntaxContext) -> CjsOptim #[derive(Clone, Debug, Deserialize)] pub struct Config { - pub packages: FxHashMap, + pub packages: FxHashMap, } #[derive(Clone, Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub struct PackageConfig { - pub transforms: FxHashMap, + pub transforms: FxHashMap, } pub struct CjsOptimizer { data: State, - packages: FxHashMap, + packages: FxHashMap, unresolved_ctxt: SyntaxContext, } @@ -46,7 +46,7 @@ struct State { imports: FxHashMap, /// `(module_specifier, property): (identifier)` - replaced: FxHashMap<(Atom, JsWord), Id>, + replaced: FxHashMap<(Atom, Atom), Id>, extra_stmts: Vec, @@ -64,7 +64,7 @@ struct ImportRecord { } impl CjsOptimizer { - fn should_rewrite(&self, module_specifier: &str) -> Option<&FxHashMap> { + fn should_rewrite(&self, module_specifier: &Atom) -> Option<&FxHashMap> { self.packages.get(module_specifier).map(|v| &v.transforms) } }