1.4.1: nested pages dirs, CommonJS require of react in client bundles
- Page URL paths are now relative to src/pages. The old greedy
`.*/pages/` cut mapped src/pages/admin/pages/index.tsx to /index, so
every page under a nested `pages` directory collided with the home page
and was never bundled. SSR also tells API routes by URL path now.
- CommonJS `require("react…")` in client bundles (for example
use-sync-external-store/shim, pulled in by MUI) threw "Dynamic require
of "react" is not supported" in the browser. Those requires now go
through a small bundled ESM module that imports the external.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Vendored
+9
@@ -5,4 +5,13 @@ type Params = {
|
||||
include_server?: boolean;
|
||||
};
|
||||
export default function grabAllPages(params?: Params): PageFiles[];
|
||||
/**
|
||||
* The URL path is the file's path relative to the pages root, so a nested
|
||||
* directory that happens to be called `pages` (e.g. `src/pages/admin/pages/
|
||||
* index.tsx` -> `/admin/pages/index`) is kept, not treated as the root.
|
||||
*/
|
||||
export declare function grabPageFileObject({ file_path, pages_root, }: {
|
||||
file_path: string;
|
||||
pages_root: string;
|
||||
}): PageFiles | undefined;
|
||||
export {};
|
||||
|
||||
Vendored
+17
-11
@@ -17,13 +17,9 @@ export default function grabAllPages(params) {
|
||||
}
|
||||
return pages;
|
||||
}
|
||||
function grabPageDirRecursively({ page_dir, include_server, }) {
|
||||
function grabPageDirRecursively({ page_dir, pages_root = page_dir, include_server, }) {
|
||||
const pages = readdirSync(page_dir);
|
||||
const pages_files = [];
|
||||
const root_pages_file = grabPageFileObject({ file_path: `` });
|
||||
if (root_pages_file) {
|
||||
pages_files.push(root_pages_file);
|
||||
}
|
||||
for (let i = 0; i < pages.length; i++) {
|
||||
const page = pages[i];
|
||||
const page_name = page.split("/").pop();
|
||||
@@ -56,6 +52,7 @@ function grabPageDirRecursively({ page_dir, include_server, }) {
|
||||
continue;
|
||||
const new_page_files = grabPageDirRecursively({
|
||||
page_dir: full_page_path,
|
||||
pages_root,
|
||||
include_server,
|
||||
});
|
||||
pages_files.push(...new_page_files);
|
||||
@@ -63,6 +60,7 @@ function grabPageDirRecursively({ page_dir, include_server, }) {
|
||||
else if (page.match(/\.(ts|js)x?$/)) {
|
||||
const pages_file = grabPageFileObject({
|
||||
file_path: full_page_path,
|
||||
pages_root,
|
||||
});
|
||||
if (pages_file) {
|
||||
pages_files.push(pages_file);
|
||||
@@ -77,14 +75,22 @@ function grabPageDirRecursively({ page_dir, include_server, }) {
|
||||
return 0;
|
||||
});
|
||||
}
|
||||
function grabPageFileObject({ file_path, }) {
|
||||
let url_path = file_path
|
||||
.replace(/.*\/pages\//, "/")
|
||||
?.replace(/\.(ts|js)x?$/, "");
|
||||
let file_name = url_path.split("/").pop();
|
||||
/**
|
||||
* The URL path is the file's path relative to the pages root, so a nested
|
||||
* directory that happens to be called `pages` (e.g. `src/pages/admin/pages/
|
||||
* index.tsx` -> `/admin/pages/index`) is kept, not treated as the root.
|
||||
*/
|
||||
export function grabPageFileObject({ file_path, pages_root, }) {
|
||||
const relative_path = path
|
||||
.relative(pages_root, file_path)
|
||||
.split(path.sep)
|
||||
.join("/");
|
||||
if (!relative_path || relative_path.startsWith("../"))
|
||||
return;
|
||||
const url_path = "/" + relative_path.replace(/\.(ts|js)x?$/, "");
|
||||
const file_name = url_path.split("/").pop();
|
||||
if (!file_name)
|
||||
return;
|
||||
// const transformed_path = pagePathTransform({ page_path: file_path });
|
||||
return {
|
||||
local_path: file_path,
|
||||
url_path,
|
||||
|
||||
Reference in New Issue
Block a user