Skip to content

Commit

Permalink
fix edge import map and merge issues
Browse files Browse the repository at this point in the history
  • Loading branch information
sokra committed Aug 2, 2023
1 parent 7cc98e7 commit eb532e4
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 16 deletions.
17 changes: 11 additions & 6 deletions packages/next-swc/crates/next-core/src/next_app/app_route_entry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,13 @@ pub async fn get_app_route_entry(
original_name: String,
project_root: Vc<FileSystemPath>,
) -> Result<Vc<AppEntry>> {
let userland_module = nodejs_context.process(
let config = parse_segment_config_from_source(
nodejs_context.process(
source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::AppRoute)),
),
source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::AppRoute)),
);
let config = parse_segment_config_from_source(userland_module, source);
let is_edge = matches!(config.await?.runtime, Some(NextRuntime::Edge));
let context = if is_edge {
edge_context
Expand Down Expand Up @@ -103,6 +105,11 @@ pub async fn get_app_route_entry(

let virtual_source = VirtualSource::new(template_path, AssetContent::file(file.into()));

let userland_module = context.process(
source,
Value::new(ReferenceType::Entry(EntryReferenceSubType::AppRoute)),
);

let inner_assets = indexmap! {
"VAR_USERLAND".to_string() => userland_module
};
Expand All @@ -113,7 +120,7 @@ pub async fn get_app_route_entry(
);

if is_edge {
rsc_entry = wrap_edge_entry(context, project_root, rsc_entry, original_name.clone());
rsc_entry = wrap_edge_entry(context, project_root, rsc_entry, original_page_name.clone());
}

let Some(rsc_entry) =
Expand Down Expand Up @@ -145,8 +152,6 @@ pub async fn wrap_edge_entry(
import {{ EdgeRouteModuleWrapper }} from 'next/dist/esm/server/web/edge-route-module-wrapper'
import * as module from "MODULE"
export const ComponentMod = module
self._ENTRIES ||= {{}}
self._ENTRIES[{}] = {{
ComponentMod: module,
Expand Down
29 changes: 19 additions & 10 deletions packages/next-swc/crates/next-core/src/next_import_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ pub async fn get_next_server_import_map(

let ty = ty.into_value();

insert_next_server_special_aliases(&mut import_map, ty, mode).await?;
insert_next_server_special_aliases(&mut import_map, ty, mode, false).await?;
let external = ImportMapping::External(None).cell();

match ty {
Expand Down Expand Up @@ -283,7 +283,7 @@ pub async fn get_next_edge_import_map(

let ty = ty.into_value();

insert_next_server_special_aliases(&mut import_map, ty, mode).await?;
insert_next_server_special_aliases(&mut import_map, ty, mode, true).await?;

match ty {
ServerContextType::Pages { .. } | ServerContextType::PagesData { .. } => {}
Expand Down Expand Up @@ -360,37 +360,45 @@ pub async fn insert_next_server_special_aliases(
import_map: &mut ImportMap,
ty: ServerContextType,
mode: NextMode,
is_edge: bool,
) -> Result<()> {
let external_if_node = move |context_dir: Vc<FileSystemPath>, request: &str| {
if is_edge {
request_to_import_mapping(context_dir, request)
} else {
external_request_to_import_mapping(request)
}
};
match (mode, ty) {
(_, ServerContextType::Pages { pages_dir }) => {
import_map.insert_exact_alias(
"@opentelemetry/api",
// TODO(WEB-625) this actually need to prefer the local version of
// @opentelemetry/api
external_request_to_import_mapping("next/dist/compiled/@opentelemetry/api"),
external_if_node(pages_dir, "next/dist/compiled/@opentelemetry/api"),
);
insert_alias_to_alternatives(
import_map,
format!("{VIRTUAL_PACKAGE_NAME}/pages/_app"),
vec![
request_to_import_mapping(pages_dir, "./_app"),
external_request_to_import_mapping("next/app"),
external_if_node(pages_dir, "next/app"),
],
);
insert_alias_to_alternatives(
import_map,
format!("{VIRTUAL_PACKAGE_NAME}/pages/_document"),
vec![
request_to_import_mapping(pages_dir, "./_document"),
external_request_to_import_mapping("next/document"),
external_if_node(pages_dir, "next/document"),
],
);
insert_alias_to_alternatives(
import_map,
format!("{VIRTUAL_PACKAGE_NAME}/pages/_error"),
vec![
request_to_import_mapping(pages_dir, "./_error"),
external_request_to_import_mapping("next/error"),
external_if_node(pages_dir, "next/error"),
],
);
}
Expand Down Expand Up @@ -485,14 +493,15 @@ pub async fn insert_next_server_special_aliases(
// * maps react-dom -> react-dom/server-rendering-stub
// * passes through react and (react|react-dom|react-server-dom-webpack)/(.*) to
// next/dist/compiled/react and next/dist/compiled/$1/$2 resp.
(NextMode::Build | NextMode::Development, ServerContextType::AppSSR { .. }) => {
(NextMode::Build | NextMode::Development, ServerContextType::AppSSR { app_dir }) => {
import_map.insert_exact_alias(
"react",
external_request_to_import_mapping("next/dist/compiled/react"),
external_if_node(app_dir, "next/dist/compiled/react"),
);
import_map.insert_exact_alias(
"react-dom",
external_request_to_import_mapping(
external_if_node(
app_dir,
"next/dist/compiled/react-dom/server-rendering-stub",
),
);
Expand All @@ -505,7 +514,7 @@ pub async fn insert_next_server_special_aliases(
"next/dist/compiled/react-server-dom-webpack/*",
),
] {
let import_mapping = external_request_to_import_mapping(request);
let import_mapping = external_if_node(app_dir, request);
import_map.insert_wildcard_alias(wildcard_alias, import_mapping);
}
}
Expand Down

0 comments on commit eb532e4

Please # to comment.