1
- import { existsSync , readFileSync } from "node:fs" ;
2
1
import { readFile } from "node:fs/promises" ;
3
2
import { join } from "node:path" ;
4
3
@@ -20,27 +19,37 @@ export function inlineRequirePagePlugin(buildOpts: BuildOptions) {
20
19
async ( { path } ) => {
21
20
const jsCode = await readFile ( path , "utf8" ) ;
22
21
if ( / f u n c t i o n r e q u i r e P a g e \( / . test ( jsCode ) ) {
23
- return { contents : patchCode ( jsCode , getRule ( buildOpts ) ) } ;
22
+ return { contents : patchCode ( jsCode , await getRule ( buildOpts ) ) } ;
24
23
}
25
24
}
26
25
) ;
27
26
} ,
28
27
} ;
29
28
}
30
29
31
- function getRule ( buildOpts : BuildOptions ) {
30
+ async function getRule ( buildOpts : BuildOptions ) {
32
31
const { outputDir } = buildOpts ;
33
32
const serverDir = join ( outputDir , "server-functions/default" , getPackagePath ( buildOpts ) , ".next/server" ) ;
34
33
35
34
const pagesManifestFile = join ( serverDir , "pages-manifest.json" ) ;
36
35
const appPathsManifestFile = join ( serverDir , "app-paths-manifest.json" ) ;
37
36
38
- const pagesManifests : string [ ] = existsSync ( pagesManifestFile )
39
- ? Object . values ( JSON . parse ( readFileSync ( pagesManifestFile , "utf-8" ) ) )
40
- : [ ] ;
41
- const appPathsManifests : string [ ] = existsSync ( appPathsManifestFile )
42
- ? Object . values ( JSON . parse ( readFileSync ( appPathsManifestFile , "utf-8" ) ) )
43
- : [ ] ;
37
+ let pagesManifests : string [ ] = [ ] ;
38
+ try {
39
+ pagesManifests = Object . values ( JSON . parse ( await readFile ( pagesManifestFile , "utf-8" ) ) ) ;
40
+ } catch {
41
+ // The file does not exists
42
+ pagesManifests = [ ] ;
43
+ }
44
+
45
+ let appPathsManifests : string [ ] ;
46
+ try {
47
+ appPathsManifests = Object . values ( JSON . parse ( await readFile ( appPathsManifestFile , "utf-8" ) ) ) ;
48
+ } catch {
49
+ // The file does not exists
50
+ appPathsManifests = [ ] ;
51
+ }
52
+
44
53
const manifests = pagesManifests . concat ( appPathsManifests ) ;
45
54
46
55
const htmlFiles = manifests . filter ( ( file ) => file . endsWith ( ".html" ) ) ;
@@ -49,13 +58,15 @@ function getRule(buildOpts: BuildOptions) {
49
58
// Inline fs access and dynamic require that are not supported by workerd.
50
59
const fnBody = `
51
60
// html
52
- ${ htmlFiles
53
- . map (
54
- ( file ) => `if (pagePath.endsWith("${ file } ")) {
55
- return ${ JSON . stringify ( readFileSync ( join ( serverDir , file ) , "utf-8" ) ) } ;
61
+ ${ (
62
+ await Promise . all (
63
+ htmlFiles . map (
64
+ async ( file ) => `if (pagePath.endsWith("${ file } ")) {
65
+ return ${ JSON . stringify ( await readFile ( join ( serverDir , file ) , "utf-8" ) ) } ;
56
66
}`
67
+ )
57
68
)
58
- . join ( "\n" ) }
69
+ ) . join ( "\n" ) }
59
70
// js
60
71
process.env.__NEXT_PRIVATE_RUNTIME_TYPE = isAppPath ? 'app' : 'pages';
61
72
try {
@@ -74,13 +85,13 @@ try {
74
85
return {
75
86
rule : {
76
87
pattern : `
77
- function requirePage($PAGE, $DIST_DIR, $IS_APPP_ATH ) {
88
+ function requirePage($PAGE, $DIST_DIR, $IS_APP_PATH ) {
78
89
const $_ = getPagePath($$$ARGS);
79
90
$$$_BODY
80
91
}` ,
81
92
} ,
82
93
fix : `
83
- function requirePage($PAGE, $DIST_DIR, $IS_APPP_ATH ) {
94
+ function requirePage($PAGE, $DIST_DIR, $IS_APP_PATH ) {
84
95
const pagePath = getPagePath($$$ARGS);
85
96
${ fnBody }
86
97
}` ,
0 commit comments