Skip to content

Commit

Permalink
apply page transforms only on pages (#60779)
Browse files Browse the repository at this point in the history
### What?

apply page transforms only on pages as intended

### Why?

Before they were applied on all files


Closes PACK-2250
  • Loading branch information
sokra committed Jan 17, 2024
1 parent 4548fed commit b24ba17
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 30 deletions.
10 changes: 5 additions & 5 deletions packages/next-swc/crates/next-core/src/next_client/transforms.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ pub async fn get_next_client_transforms_rules(
get_next_pages_transforms_rule(pages_dir, ExportFilter::StripDataExports, mdx_rs)
.await?,
);
rules.push(get_next_disallow_export_all_in_page_rule(
mdx_rs,
pages_dir.await?,
));
rules.push(get_next_page_config_rule(mdx_rs, pages_dir.await?));
Some(pages_dir)
}
ClientContextType::App { .. } => {
Expand All @@ -58,11 +63,6 @@ pub async fn get_next_client_transforms_rules(

rules.push(get_next_amp_attr_rule(mdx_rs));
rules.push(get_next_cjs_optimizer_rule(mdx_rs));
rules.push(get_next_disallow_export_all_in_page_rule(
mdx_rs,
pages_dir.is_some(),
));
rules.push(get_next_page_config_rule(mdx_rs, pages_dir.is_some()));
rules.push(get_next_pure_rule(mdx_rs));

rules.push(get_next_dynamic_transform_rule(false, false, pages_dir, mode, mdx_rs).await?);
Expand Down
12 changes: 8 additions & 4 deletions packages/next-swc/crates/next-core/src/next_server/transforms.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,21 @@ pub async fn get_next_server_transforms_rules(

let (is_server_components, pages_dir) = match context_ty {
ServerContextType::Pages { pages_dir } | ServerContextType::PagesApi { pages_dir } => {
rules.push(get_next_disallow_export_all_in_page_rule(
mdx_rs,
pages_dir.await?,
));
(false, Some(pages_dir))
}
ServerContextType::PagesData { pages_dir } => {
rules.push(
get_next_pages_transforms_rule(pages_dir, ExportFilter::StripDefaultExport, mdx_rs)
.await?,
);
rules.push(get_next_disallow_export_all_in_page_rule(
mdx_rs,
pages_dir.await?,
));
(false, Some(pages_dir))
}
ServerContextType::AppSSR { .. } => {
Expand Down Expand Up @@ -90,10 +98,6 @@ pub async fn get_next_server_transforms_rules(

rules.push(get_next_amp_attr_rule(mdx_rs));
rules.push(get_next_cjs_optimizer_rule(mdx_rs));
rules.push(get_next_disallow_export_all_in_page_rule(
mdx_rs,
pages_dir.is_some(),
));
rules.push(get_next_pure_rule(mdx_rs));

// [NOTE]: this rule only works in prod config
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ pub use next_font::get_next_font_transform_rule;
pub use next_strip_page_exports::get_next_pages_transforms_rule;
pub use relay::get_relay_transform_plugin;
pub use server_actions::get_server_actions_transform_rule;
use turbo_tasks::{Value, Vc};
use turbo_tasks::{ReadRef, Value, Vc};
use turbo_tasks_fs::FileSystemPath;
use turbopack_binding::turbopack::{
core::reference_type::{ReferenceType, UrlReferenceSubType},
turbopack::module_options::{ModuleRule, ModuleRuleCondition, ModuleRuleEffect, ModuleType},
Expand Down Expand Up @@ -63,8 +64,7 @@ pub fn get_next_image_rule() -> ModuleRule {
)
}

/// Returns a rule which applies the Next.js dynamic transform.
pub(crate) fn module_rule_match_js_no_url(enable_mdx_rs: bool) -> ModuleRuleCondition {
fn match_js_extension(enable_mdx_rs: bool) -> Vec<ModuleRuleCondition> {
let mut conditions = vec![
ModuleRuleCondition::ResourcePathEndsWith(".js".to_string()),
ModuleRuleCondition::ResourcePathEndsWith(".jsx".to_string()),
Expand All @@ -81,11 +81,32 @@ pub(crate) fn module_rule_match_js_no_url(enable_mdx_rs: bool) -> ModuleRuleCond
.as_mut(),
);
}
conditions
}

/// Returns a rule which applies the Next.js dynamic transform.
pub(crate) fn module_rule_match_js_no_url(enable_mdx_rs: bool) -> ModuleRuleCondition {
let conditions = match_js_extension(enable_mdx_rs);

ModuleRuleCondition::all(vec![
ModuleRuleCondition::not(ModuleRuleCondition::ReferenceType(ReferenceType::Url(
UrlReferenceSubType::Undefined,
))),
ModuleRuleCondition::any(conditions),
])
}

pub(crate) fn module_rule_match_pages_page_file(
enable_mdx_rs: bool,
pages_directory: ReadRef<FileSystemPath>,
) -> ModuleRuleCondition {
let conditions = match_js_extension(enable_mdx_rs);

ModuleRuleCondition::all(vec![
ModuleRuleCondition::not(ModuleRuleCondition::ReferenceType(ReferenceType::Url(
UrlReferenceSubType::Undefined,
))),
ModuleRuleCondition::ResourcePathInExactDirectory(pages_directory),
ModuleRuleCondition::any(conditions),
])
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use anyhow::Result;
use async_trait::async_trait;
use next_custom_transforms::transforms::disallow_re_export_all_in_page::disallow_re_export_all_in_page;
use turbo_tasks::Vc;
use turbo_tasks::{ReadRef, Vc};
use turbo_tasks_fs::FileSystemPath;
use turbopack_binding::{
swc::core::{
common::util::take::Take,
Expand All @@ -13,34 +14,30 @@ use turbopack_binding::{
},
};

use super::module_rule_match_js_no_url;
use super::module_rule_match_pages_page_file;

pub fn get_next_disallow_export_all_in_page_rule(
enable_mdx_rs: bool,
is_page_file: bool,
pages_dir: ReadRef<FileSystemPath>,
) -> ModuleRule {
let transformer =
EcmascriptInputTransform::Plugin(Vc::cell(Box::new(NextDisallowReExportAllInPage {
is_page_file,
}) as _));
EcmascriptInputTransform::Plugin(Vc::cell(Box::new(NextDisallowReExportAllInPage) as _));
ModuleRule::new(
module_rule_match_js_no_url(enable_mdx_rs),
module_rule_match_pages_page_file(enable_mdx_rs, pages_dir),
vec![ModuleRuleEffect::AddEcmascriptTransforms(Vc::cell(vec![
transformer,
]))],
)
}

#[derive(Debug)]
struct NextDisallowReExportAllInPage {
is_page_file: bool,
}
struct NextDisallowReExportAllInPage;

#[async_trait]
impl CustomTransformer for NextDisallowReExportAllInPage {
async fn transform(&self, program: &mut Program, _ctx: &TransformContext<'_>) -> Result<()> {
let p = std::mem::replace(program, Program::Module(Module::dummy()));
*program = p.fold_with(&mut disallow_re_export_all_in_page(self.is_page_file));
*program = p.fold_with(&mut disallow_re_export_all_in_page(true));
Ok(())
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use anyhow::Result;
use async_trait::async_trait;
use next_custom_transforms::transforms::page_config::page_config;
use turbo_tasks::Vc;
use turbo_tasks::{ReadRef, Vc};
use turbo_tasks_fs::FileSystemPath;
use turbopack_binding::{
swc::core::{
common::util::take::Take,
Expand All @@ -13,16 +14,18 @@ use turbopack_binding::{
},
};

use super::module_rule_match_js_no_url;
use super::module_rule_match_pages_page_file;

pub fn get_next_page_config_rule(enable_mdx_rs: bool, is_page_file: bool) -> ModuleRule {
pub fn get_next_page_config_rule(
enable_mdx_rs: bool,
pages_dir: ReadRef<FileSystemPath>,
) -> ModuleRule {
let transformer = EcmascriptInputTransform::Plugin(Vc::cell(Box::new(NextPageConfig {
// [TODO]: update once turbopack build works
is_development: true,
is_page_file,
}) as _));
ModuleRule::new(
module_rule_match_js_no_url(enable_mdx_rs),
module_rule_match_pages_page_file(enable_mdx_rs, pages_dir),
vec![ModuleRuleEffect::AddEcmascriptTransforms(Vc::cell(vec![
transformer,
]))],
Expand All @@ -32,15 +35,14 @@ pub fn get_next_page_config_rule(enable_mdx_rs: bool, is_page_file: bool) -> Mod
#[derive(Debug)]
struct NextPageConfig {
is_development: bool,
is_page_file: bool,
}

#[async_trait]
impl CustomTransformer for NextPageConfig {
async fn transform(&self, program: &mut Program, _ctx: &TransformContext<'_>) -> Result<()> {
let p = std::mem::replace(program, Program::Module(Module::dummy()));

*program = p.fold_with(&mut page_config(self.is_development, self.is_page_file));
*program = p.fold_with(&mut page_config(self.is_development, true));
Ok(())
}
}

0 comments on commit b24ba17

Please sign in to comment.