diff --git a/packages/next-swc/crates/next-core/src/app_structure.rs b/packages/next-swc/crates/next-core/src/app_structure.rs index bf3ed493ac86..869630c7117e 100644 --- a/packages/next-swc/crates/next-core/src/app_structure.rs +++ b/packages/next-swc/crates/next-core/src/app_structure.rs @@ -378,8 +378,11 @@ async fn get_directory_tree( } } DirectoryEntry::Directory(dir) => { - let result = get_directory_tree(dir, page_extensions); - subdirectories.insert(basename.to_string(), result); + // appDir ignores paths starting with an underscore + if !basename.starts_with('_') { + let result = get_directory_tree(dir, page_extensions); + subdirectories.insert(get_underscore_normalized_path(basename), result); + } } // TODO(WEB-952) handle symlinks in app dir _ => {} @@ -694,6 +697,12 @@ async fn directory_tree_to_entrypoints_internal( Ok(EntrypointsVc::cell(result)) } +/// ref: https://github.com/vercel/next.js/blob/c390c1662bc79e12cf7c037dcb382ef5ead6e492/packages/next/src/build/entries.ts#L119 +/// if path contains %5F, replace it with _. +fn get_underscore_normalized_path(path: &str) -> String { + path.replace("%5F", "_") +} + /// Returns the global metadata for an app directory. #[turbo_tasks::function] pub async fn get_global_metadata(