Skip to content

Commit

Permalink
feat(next-api): insert dynamic middleware rule for edge
Browse files Browse the repository at this point in the history
  • Loading branch information
kwonoj committed Mar 20, 2024
1 parent 3b8ef89 commit 6fd259a
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 9 deletions.
45 changes: 42 additions & 3 deletions packages/next-swc/crates/next-api/src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,19 @@ impl AppProject {
Value::new(self.rsc_ty()),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::NodeJs,
))
}

#[turbo_tasks::function]
async fn edge_rsc_module_options_context(self: Vc<Self>) -> Result<Vc<ModuleOptionsContext>> {
Ok(get_server_module_options_context(
self.project().project_path(),
self.project().execution_context(),
Value::new(self.rsc_ty()),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::Edge,
))
}

Expand All @@ -188,6 +201,19 @@ impl AppProject {
Value::new(self.route_ty()),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::NodeJs,
))
}

#[turbo_tasks::function]
async fn edge_route_module_options_context(self: Vc<Self>) -> Result<Vc<ModuleOptionsContext>> {
Ok(get_server_module_options_context(
self.project().project_path(),
self.project().execution_context(),
Value::new(self.route_ty()),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::Edge,
))
}

Expand Down Expand Up @@ -292,7 +318,7 @@ impl AppProject {
ModuleAssetContext::new(
Vc::cell(transitions),
self.project().edge_compile_time_info(),
self.rsc_module_options_context(),
self.edge_rsc_module_options_context(),
self.edge_rsc_resolve_options_context(),
Vc::cell("app-edge-rsc".to_string()),
)
Expand All @@ -314,7 +340,7 @@ impl AppProject {
ModuleAssetContext::new(
Default::default(),
self.project().edge_compile_time_info(),
self.route_module_options_context(),
self.edge_route_module_options_context(),
self.edge_route_resolve_options_context(),
Vc::cell("app-edge-route".to_string()),
)
Expand All @@ -339,6 +365,19 @@ impl AppProject {
Value::new(self.ssr_ty()),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::NodeJs,
))
}

#[turbo_tasks::function]
async fn edge_ssr_module_options_context(self: Vc<Self>) -> Result<Vc<ModuleOptionsContext>> {
Ok(get_server_module_options_context(
self.project().project_path(),
self.project().execution_context(),
Value::new(self.ssr_ty()),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::Edge,
))
}

Expand Down Expand Up @@ -378,7 +417,7 @@ impl AppProject {
fn edge_ssr_transition(self: Vc<Self>) -> Vc<ContextTransition> {
ContextTransition::new(
self.project().edge_compile_time_info(),
self.ssr_module_options_context(),
self.edge_ssr_module_options_context(),
self.edge_ssr_resolve_options_context(),
Vc::cell("app-edge-ssr".to_string()),
)
Expand Down
53 changes: 50 additions & 3 deletions packages/next-swc/crates/next-api/src/pages.rs
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ impl PagesProject {
ModuleAssetContext::new(
Default::default(),
self.project().edge_compile_time_info(),
self.ssr_module_options_context(),
self.edge_ssr_module_options_context(),
self.edge_ssr_resolve_options_context(),
Vc::cell("edge-ssr".to_string()),
)
Expand All @@ -373,7 +373,7 @@ impl PagesProject {
ModuleAssetContext::new(
Default::default(),
self.project().edge_compile_time_info(),
self.api_module_options_context(),
self.edge_api_module_options_context(),
self.edge_ssr_resolve_options_context(),
Vc::cell("edge-api".to_string()),
)
Expand All @@ -384,7 +384,7 @@ impl PagesProject {
ModuleAssetContext::new(
Default::default(),
self.project().edge_compile_time_info(),
self.ssr_data_module_options_context(),
self.edge_ssr_data_module_options_context(),
self.edge_ssr_resolve_options_context(),
Vc::cell("edge-ssr-data".to_string()),
)
Expand All @@ -400,6 +400,21 @@ impl PagesProject {
}),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::NodeJs,
))
}

#[turbo_tasks::function]
async fn edge_ssr_module_options_context(self: Vc<Self>) -> Result<Vc<ModuleOptionsContext>> {
Ok(get_server_module_options_context(
self.project().project_path(),
self.project().execution_context(),
Value::new(ServerContextType::Pages {
pages_dir: self.pages_dir(),
}),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::Edge,
))
}

Expand All @@ -413,6 +428,21 @@ impl PagesProject {
}),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::NodeJs,
))
}

#[turbo_tasks::function]
async fn edge_api_module_options_context(self: Vc<Self>) -> Result<Vc<ModuleOptionsContext>> {
Ok(get_server_module_options_context(
self.project().project_path(),
self.project().execution_context(),
Value::new(ServerContextType::PagesApi {
pages_dir: self.pages_dir(),
}),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::Edge,
))
}

Expand All @@ -426,6 +456,23 @@ impl PagesProject {
}),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::NodeJs,
))
}

#[turbo_tasks::function]
async fn edge_ssr_data_module_options_context(
self: Vc<Self>,
) -> Result<Vc<ModuleOptionsContext>> {
Ok(get_server_module_options_context(
self.project().project_path(),
self.project().execution_context(),
Value::new(ServerContextType::PagesData {
pages_dir: self.pages_dir(),
}),
self.project().next_mode(),
self.project().next_config(),
NextRuntime::Edge,
))
}

Expand Down
3 changes: 3 additions & 0 deletions packages/next-swc/crates/next-api/src/project.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ use next_core::{
get_server_resolve_options_context, ServerContextType,
},
next_telemetry::NextFeatureTelemetry,
util::NextRuntime,
};
use serde::{Deserialize, Serialize};
use tracing::Instrument;
Expand Down Expand Up @@ -809,6 +810,7 @@ impl Project {
Value::new(ServerContextType::Middleware),
self.next_mode(),
self.next_config(),
NextRuntime::Edge,
),
get_edge_resolve_options_context(
self.project_path(),
Expand Down Expand Up @@ -842,6 +844,7 @@ impl Project {
Value::new(ServerContextType::Instrumentation),
self.next_mode(),
self.next_config(),
NextRuntime::NodeJs,
),
get_server_resolve_options_context(
self.project_path(),
Expand Down
9 changes: 6 additions & 3 deletions packages/next-swc/crates/next-core/src/next_server/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ use crate::{
get_decorators_transform_options, get_jsx_transform_options,
get_typescript_transform_options,
},
util::{foreign_code_context_condition, load_next_js_templateon},
util::{foreign_code_context_condition, load_next_js_templateon, NextRuntime},
};

#[turbo_tasks::value(serialization = "auto_for_input")]
Expand Down Expand Up @@ -325,11 +325,14 @@ pub async fn get_server_module_options_context(
ty: Value<ServerContextType>,
mode: Vc<NextMode>,
next_config: Vc<NextConfig>,
next_runtime: NextRuntime,
) -> Result<Vc<ModuleOptionsContext>> {
let mut next_server_rules =
get_next_server_transforms_rules(next_config, ty.into_value(), mode, false).await?;
get_next_server_transforms_rules(next_config, ty.into_value(), mode, false, next_runtime)
.await?;
let mut foreign_next_server_rules =
get_next_server_transforms_rules(next_config, ty.into_value(), mode, true).await?;
get_next_server_transforms_rules(next_config, ty.into_value(), mode, true, next_runtime)
.await?;
let internal_custom_rules =
get_next_server_internal_transforms_rules(ty.into_value(), *next_config.mdx_rs().await?)
.await?;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ use crate::{
get_server_actions_transform_rule, next_amp_attributes::get_next_amp_attr_rule,
next_cjs_optimizer::get_next_cjs_optimizer_rule,
next_disallow_re_export_all_in_page::get_next_disallow_export_all_in_page_rule,
next_middleware_dynamic_assert::get_middleware_dynamic_assert_rule,
next_pure::get_next_pure_rule, server_actions::ActionsTransform,
},
util::NextRuntime,
};

/// Returns a list of module rules which apply server-side, Next.js-specific
Expand All @@ -25,6 +27,7 @@ pub async fn get_next_server_transforms_rules(
context_ty: ServerContextType,
mode: Vc<NextMode>,
foreign_code: bool,
next_runtime: NextRuntime,
) -> Result<Vec<ModuleRule>> {
let mut rules = vec![];

Expand Down Expand Up @@ -111,6 +114,10 @@ pub async fn get_next_server_transforms_rules(
// optimize_use_state))

rules.push(get_next_image_rule());

if let NextRuntime::Edge = next_runtime {
rules.push(get_middleware_dynamic_assert_rule(mdx_rs));
}
}

Ok(rules)
Expand Down

0 comments on commit 6fd259a

Please sign in to comment.