vike 0.4.152 → 0.4.153-commit-01ab602
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/node/cli/bin.js +2 -2
- package/dist/cjs/node/plugin/index.js +2 -2
- package/dist/cjs/node/plugin/plugins/autoFullBuild.js +2 -2
- package/dist/cjs/node/plugin/plugins/envVars.js +1 -1
- package/dist/cjs/node/plugin/plugins/{assertFileEnv.js → fileEnv.js} +4 -4
- package/dist/cjs/node/plugin/plugins/importBuild/index.js +1 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +1 -9
- package/dist/cjs/node/prerender/index.js +1 -1
- package/dist/cjs/node/prerender/runPrerender.js +21 -13
- package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +5 -3
- package/dist/cjs/node/runtime/html/stream.js +2 -1
- package/dist/cjs/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +2 -1
- package/dist/cjs/node/runtime/renderPage/isNewError.js +1 -1
- package/dist/cjs/node/runtime/renderPage/{loadPageFilesServerSide.js → loadUserFilesServerSide.js} +5 -5
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -4
- package/dist/cjs/node/runtime/renderPage.js +2 -2
- package/dist/cjs/node/runtime/utils.js +1 -2
- package/dist/cjs/shared/hooks/getHook.js +14 -8
- package/dist/cjs/shared/misc/isRenderFailure.js +4 -0
- package/dist/cjs/shared/misc/pageContextInitIsPassedToClient.js +4 -0
- package/dist/cjs/shared/route/abort.js +15 -4
- package/dist/cjs/shared/route/loadPageRoutes.js +1 -9
- package/dist/cjs/utils/isSameErrorMessage.js +10 -0
- package/dist/cjs/utils/projectInfo.js +1 -1
- package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +0 -1
- package/dist/esm/client/client-routing-runtime/createPageContext.js +0 -3
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +28 -33
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +42 -58
- package/dist/esm/client/client-routing-runtime/installClientRouter.d.ts +1 -1
- package/dist/esm/client/client-routing-runtime/installClientRouter.js +8 -2
- package/dist/esm/client/client-routing-runtime/onBrowserHistoryNavigation.js +2 -2
- package/dist/esm/client/client-routing-runtime/onLinkClick.js +2 -2
- package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.d.ts +1 -3
- package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.js +1 -1
- package/dist/esm/client/client-routing-runtime/prefetch.d.ts +0 -1
- package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +1 -1
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +298 -204
- package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -1
- package/dist/esm/client/client-routing-runtime/utils.js +1 -1
- package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +2 -2
- package/dist/esm/client/server-routing-runtime/getPageContext.js +5 -4
- package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +4 -2
- package/dist/esm/client/shared/getPageContextSerializedInHtml.d.ts +0 -1
- package/dist/esm/client/shared/getPageContextSerializedInHtml.js +1 -4
- package/dist/esm/client/shared/{loadPageFilesClientSide.d.ts → loadUserFilesClientSide.d.ts} +7 -6
- package/dist/esm/client/shared/{loadPageFilesClientSide.js → loadUserFilesClientSide.js} +4 -4
- package/dist/esm/node/cli/bin.js +3 -3
- package/dist/esm/node/plugin/index.js +2 -2
- package/dist/esm/node/plugin/plugins/autoFullBuild.js +3 -3
- package/dist/esm/node/plugin/plugins/envVars.js +1 -1
- package/dist/esm/node/plugin/plugins/fileEnv.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/{assertFileEnv.js → fileEnv.js} +3 -3
- package/dist/esm/node/plugin/plugins/importBuild/index.js +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +1 -9
- package/dist/esm/node/prerender/index.d.ts +1 -1
- package/dist/esm/node/prerender/index.js +1 -1
- package/dist/esm/node/prerender/runPrerender.d.ts +8 -8
- package/dist/esm/node/prerender/runPrerender.js +22 -14
- package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +0 -1
- package/dist/esm/node/runtime/html/serializePageContextClientSide.js +5 -3
- package/dist/esm/node/runtime/html/stream.js +3 -2
- package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +2 -1
- package/dist/esm/node/runtime/renderPage/isNewError.js +2 -2
- package/dist/esm/node/runtime/renderPage/{loadPageFilesServerSide.d.ts → loadUserFilesServerSide.d.ts} +6 -6
- package/dist/esm/node/runtime/renderPage/{loadPageFilesServerSide.js → loadUserFilesServerSide.js} +4 -4
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -4
- package/dist/esm/node/runtime/renderPage.js +2 -2
- package/dist/esm/node/runtime/utils.d.ts +1 -2
- package/dist/esm/node/runtime/utils.js +1 -2
- package/dist/esm/shared/hooks/getHook.d.ts +2 -0
- package/dist/esm/shared/hooks/getHook.js +13 -7
- package/dist/esm/shared/misc/isRenderFailure.d.ts +1 -0
- package/dist/esm/shared/misc/isRenderFailure.js +1 -0
- package/dist/esm/shared/misc/pageContextInitIsPassedToClient.d.ts +1 -0
- package/dist/esm/shared/misc/pageContextInitIsPassedToClient.js +1 -0
- package/dist/esm/shared/page-configs/Config.d.ts +1 -1
- package/dist/esm/shared/route/abort.d.ts +1 -1
- package/dist/esm/shared/route/abort.js +16 -5
- package/dist/esm/shared/route/loadPageRoutes.js +1 -9
- package/dist/esm/utils/isSameErrorMessage.d.ts +2 -0
- package/dist/esm/utils/isSameErrorMessage.js +7 -0
- package/dist/esm/utils/projectInfo.d.ts +2 -2
- package/dist/esm/utils/projectInfo.js +1 -1
- package/package.json +2 -2
- package/dist/cjs/utils/dynamicImport.js +0 -8
- package/dist/cjs/utils/isEquivalentError.js +0 -18
- package/dist/esm/node/plugin/plugins/assertFileEnv.d.ts +0 -3
- package/dist/esm/utils/dynamicImport.d.ts +0 -2
- package/dist/esm/utils/dynamicImport.js +0 -4
- package/dist/esm/utils/isEquivalentError.d.ts +0 -2
- package/dist/esm/utils/isEquivalentError.js +0 -15
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { getPageContext };
|
|
2
2
|
declare function getPageContext(): Promise<{
|
|
3
3
|
_pageId: string;
|
|
4
|
-
_hasPageContextFromServer: true;
|
|
5
4
|
} & {
|
|
6
5
|
isHydration: true;
|
|
7
6
|
isBackwardNavigation: null;
|
|
8
|
-
|
|
7
|
+
_hasPageContextFromServer: true;
|
|
8
|
+
_hasPageContextFromClient: false;
|
|
9
9
|
} & {
|
|
10
10
|
_pageFilesAll: import("../../shared/getPageFiles/getPageFileObject.js").PageFile[];
|
|
11
11
|
_pageConfigs: import("../../shared/page-configs/PageConfig.js").PageConfigRuntime[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { assertUsage, assertWarning, getCurrentUrl, objectAssign } from './utils.js';
|
|
2
2
|
import { getPageContextSerializedInHtml } from '../shared/getPageContextSerializedInHtml.js';
|
|
3
3
|
import { getPageFilesAll } from '../../shared/getPageFiles.js';
|
|
4
|
-
import {
|
|
4
|
+
import { loadUserFilesClientSide } from '../shared/loadUserFilesClientSide.js';
|
|
5
5
|
export { getPageContext };
|
|
6
6
|
const urlFirst = getCurrentUrl({ withoutHash: true });
|
|
7
7
|
async function getPageContext() {
|
|
@@ -9,9 +9,10 @@ async function getPageContext() {
|
|
|
9
9
|
objectAssign(pageContext, {
|
|
10
10
|
isHydration: true,
|
|
11
11
|
isBackwardNavigation: null,
|
|
12
|
+
_hasPageContextFromServer: true,
|
|
12
13
|
_hasPageContextFromClient: false
|
|
13
14
|
});
|
|
14
|
-
objectAssign(pageContext, await
|
|
15
|
+
objectAssign(pageContext, await loadPageUserFiles(pageContext._pageId));
|
|
15
16
|
assertPristineUrl();
|
|
16
17
|
return pageContext;
|
|
17
18
|
}
|
|
@@ -19,14 +20,14 @@ function assertPristineUrl() {
|
|
|
19
20
|
const urlCurrent = getCurrentUrl({ withoutHash: true });
|
|
20
21
|
assertUsage(urlFirst === urlCurrent, `The URL was manipulated before the hydration finished ('${urlFirst}' to '${urlCurrent}'). Ensure the hydration has finished before manipulating the URL. Consider using the onHydrationEnd() hook.`);
|
|
21
22
|
}
|
|
22
|
-
async function
|
|
23
|
+
async function loadPageUserFiles(pageId) {
|
|
23
24
|
const pageContextAddendum = {};
|
|
24
25
|
const { pageFilesAll, pageConfigs } = await getPageFilesAll(true);
|
|
25
26
|
objectAssign(pageContextAddendum, {
|
|
26
27
|
_pageFilesAll: pageFilesAll,
|
|
27
28
|
_pageConfigs: pageConfigs
|
|
28
29
|
});
|
|
29
|
-
objectAssign(pageContextAddendum, await
|
|
30
|
+
objectAssign(pageContextAddendum, await loadUserFilesClientSide(pageId, pageContextAddendum._pageFilesAll, pageContextAddendum._pageConfigs));
|
|
30
31
|
pageFilesAll
|
|
31
32
|
.filter((p) => p.fileType !== '.page.server')
|
|
32
33
|
.forEach((p) => {
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export { executeOnRenderClientHook };
|
|
2
|
+
export type { PageContextBeforeRenderClient };
|
|
2
3
|
import type { PageFile, PageContextExports } from '../../shared/getPageFiles.js';
|
|
3
4
|
import { type PageContextForUserConsumptionClientSide } from './preparePageContextForUserConsumptionClientSide.js';
|
|
4
5
|
import type { PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
|
|
5
|
-
|
|
6
|
+
type PageContextBeforeRenderClient = {
|
|
6
7
|
_pageFilesLoaded: PageFile[];
|
|
7
8
|
urlOriginal?: string;
|
|
8
9
|
urlPathname?: string;
|
|
9
10
|
_pageId: string;
|
|
10
11
|
_pageConfigs: PageConfigRuntime[];
|
|
11
|
-
} & PageContextExports & PageContextForUserConsumptionClientSide
|
|
12
|
+
} & PageContextExports & PageContextForUserConsumptionClientSide;
|
|
13
|
+
declare function executeOnRenderClientHook<PC extends PageContextBeforeRenderClient>(pageContext: PC, isClientRouting: boolean): Promise<void>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parse } from '@brillout/json-serializer/parse';
|
|
2
|
-
import { hasProp, assert, assertUsage
|
|
2
|
+
import { hasProp, assert, assertUsage } from '../server-routing-runtime/utils.js';
|
|
3
3
|
export { getPageContextSerializedInHtml };
|
|
4
4
|
function getPageContextSerializedInHtml() {
|
|
5
5
|
// elem should exist because:
|
|
@@ -15,8 +15,5 @@ function getPageContextSerializedInHtml() {
|
|
|
15
15
|
assert(pageContextJson);
|
|
16
16
|
const pageContextSerializedInHtml = parse(pageContextJson);
|
|
17
17
|
assert(hasProp(pageContextSerializedInHtml, '_pageId', 'string'));
|
|
18
|
-
objectAssign(pageContextSerializedInHtml, {
|
|
19
|
-
_hasPageContextFromServer: true
|
|
20
|
-
});
|
|
21
18
|
return pageContextSerializedInHtml;
|
|
22
19
|
}
|
package/dist/esm/client/shared/{loadPageFilesClientSide.d.ts → loadUserFilesClientSide.d.ts}
RENAMED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadUserFilesClientSide };
|
|
2
2
|
export { isErrorFetchingStaticAssets };
|
|
3
|
-
export type {
|
|
3
|
+
export type { PageContextUserFiles };
|
|
4
4
|
import { type PageFile, type PageContextExports } from '../../shared/getPageFiles.js';
|
|
5
5
|
import type { PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
|
|
6
|
-
type
|
|
6
|
+
type PageContextUserFilesLoaded = PageContextExports & {
|
|
7
|
+
_pageFilesLoaded: PageFile[];
|
|
8
|
+
};
|
|
9
|
+
type PageContextUserFiles = {
|
|
7
10
|
_pageFilesAll: PageFile[];
|
|
8
11
|
_pageConfigs: PageConfigRuntime[];
|
|
9
12
|
};
|
|
10
|
-
declare function
|
|
11
|
-
_pageFilesLoaded: PageFile[];
|
|
12
|
-
}>;
|
|
13
|
+
declare function loadUserFilesClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[]): Promise<PageContextUserFilesLoaded>;
|
|
13
14
|
declare function isErrorFetchingStaticAssets(err: unknown): boolean;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadUserFilesClientSide };
|
|
2
2
|
export { isErrorFetchingStaticAssets };
|
|
3
3
|
import { getPageFilesClientSide, getExports } from '../../shared/getPageFiles.js';
|
|
4
4
|
import { findPageConfig } from '../../shared/page-configs/findPageConfig.js';
|
|
5
5
|
import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
|
|
6
6
|
const stamp = '__whileFetchingAssets';
|
|
7
|
-
async function
|
|
8
|
-
const pageFilesClientSide = getPageFilesClientSide(
|
|
9
|
-
const pageConfig = findPageConfig(
|
|
7
|
+
async function loadUserFilesClientSide(pageId, pageFilesAll, pageConfigs) {
|
|
8
|
+
const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
|
|
9
|
+
const pageConfig = findPageConfig(pageConfigs, pageId);
|
|
10
10
|
let pageConfigLoaded;
|
|
11
11
|
// @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
|
|
12
12
|
const isDev = import.meta.env.DEV;
|
package/dist/esm/node/cli/bin.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cac } from 'cac';
|
|
2
2
|
import { resolve } from 'path';
|
|
3
|
-
import {
|
|
3
|
+
import { runPrerenderFromCLI, runPrerender_forceExit } from '../prerender/runPrerender.js';
|
|
4
4
|
import { projectInfo, assertUsage } from './utils.js';
|
|
5
5
|
const cli = cac(projectInfo.projectName);
|
|
6
6
|
cli
|
|
@@ -10,8 +10,8 @@ cli
|
|
|
10
10
|
assertOptions();
|
|
11
11
|
const { partial, noExtraDir, base, parallel, outDir, configFile } = options;
|
|
12
12
|
const root = options.root && resolve(options.root);
|
|
13
|
-
await
|
|
14
|
-
|
|
13
|
+
await runPrerenderFromCLI({ partial, noExtraDir, base, root, parallel, outDir, configFile });
|
|
14
|
+
runPrerender_forceExit();
|
|
15
15
|
});
|
|
16
16
|
function assertOptions() {
|
|
17
17
|
// Using process.argv because cac convert names to camelCase
|
|
@@ -23,7 +23,7 @@ import { extensionsAssets } from './plugins/extensionsAssets.js';
|
|
|
23
23
|
import { baseUrls } from './plugins/baseUrls.js';
|
|
24
24
|
import { envVarsPlugin } from './plugins/envVars.js';
|
|
25
25
|
import pc from '@brillout/picocolors';
|
|
26
|
-
import {
|
|
26
|
+
import { fileEnv } from './plugins/fileEnv.js';
|
|
27
27
|
markEnvAsVite();
|
|
28
28
|
// Return as `any` to avoid Plugin type mismatches when there are multiple Vite versions installed
|
|
29
29
|
function plugin(vikeConfig) {
|
|
@@ -46,7 +46,7 @@ function plugin(vikeConfig) {
|
|
|
46
46
|
extensionsAssets(),
|
|
47
47
|
baseUrls(vikeConfig),
|
|
48
48
|
envVarsPlugin(),
|
|
49
|
-
|
|
49
|
+
fileEnv()
|
|
50
50
|
];
|
|
51
51
|
return plugins;
|
|
52
52
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { autoFullBuild };
|
|
2
2
|
import { build } from 'vite';
|
|
3
3
|
import { assertWarning } from '../utils.js';
|
|
4
|
-
import {
|
|
4
|
+
import { runPrerenderFromAutoFullBuild, runPrerender_forceExit } from '../../prerender/runPrerender.js';
|
|
5
5
|
import { getConfigVike } from '../../shared/getConfigVike.js';
|
|
6
6
|
import { isViteCliCall, getViteConfigFromCli } from '../shared/isViteCliCall.js';
|
|
7
7
|
import pc from '@brillout/picocolors';
|
|
@@ -45,7 +45,7 @@ function autoFullBuild() {
|
|
|
45
45
|
order: 'post',
|
|
46
46
|
handler() {
|
|
47
47
|
if (forceExit) {
|
|
48
|
-
|
|
48
|
+
runPrerender_forceExit();
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
}
|
|
@@ -78,7 +78,7 @@ async function triggerFullBuild(config, configVike, bundle) {
|
|
|
78
78
|
}
|
|
79
79
|
});
|
|
80
80
|
if (configVike.prerender && !configVike.prerender.disableAutoRun) {
|
|
81
|
-
await
|
|
81
|
+
await runPrerenderFromAutoFullBuild({ viteConfig: configInline });
|
|
82
82
|
forceExit = true;
|
|
83
83
|
}
|
|
84
84
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { fileEnv };
|
|
2
2
|
import { assert, assertUsage, assertWarning, capitalizeFirstLetter, getFilePathRelativeToUserRootDir } from '../utils.js';
|
|
3
3
|
import { extractAssetsRE } from './extractAssetsPlugin.js';
|
|
4
4
|
import { extractExportNamesRE } from './extractExportNamesPlugin.js';
|
|
5
5
|
import pc from '@brillout/picocolors';
|
|
6
|
-
function
|
|
6
|
+
function fileEnv() {
|
|
7
7
|
let config;
|
|
8
8
|
let isDev = false;
|
|
9
9
|
return {
|
|
10
|
-
name: 'vike:
|
|
10
|
+
name: 'vike:fileEnv',
|
|
11
11
|
// - We need to set `enforce: 'pre'` because, otherwise, the resolvedId() hook of Vite's internal plugin `vite:resolve` is called before and it doesn't seem to call `this.resolve()` which means that the resolveId() hook below is never called.
|
|
12
12
|
// - Vite's `vite:resolve` plugin: https://github.com/vitejs/vite/blob/d649daba7682791178b711d9a3e44a6b5d00990c/packages/vite/src/node/plugins/resolve.ts#L105
|
|
13
13
|
// - It's actually a good thing if the resolveId() hook below is the first one to be called because it doesn't actually resolve any ID, so all other resolveId() hooks will be called as normal. And with `this.resolve()` we get the information we want from all other resolvedId() hooks.
|
|
@@ -45,7 +45,7 @@ function getEntryCode(config, configVike) {
|
|
|
45
45
|
' setImportBuildGetters({',
|
|
46
46
|
` pageFiles: () => pageFiles,`,
|
|
47
47
|
// TODO: rename clientManifest -> assetManifest
|
|
48
|
-
` clientManifest: () =>
|
|
48
|
+
` clientManifest: () => (${ASSETS_MAP}),`,
|
|
49
49
|
// TODO: rename pluginManifest -> vikeManifest
|
|
50
50
|
` pluginManifest: () => (${JSON.stringify(vikeManifest, null, 2)}),`,
|
|
51
51
|
' });',
|
|
@@ -829,7 +829,7 @@ function getConfigName(filePath) {
|
|
|
829
829
|
if (isTmpFile(filePath))
|
|
830
830
|
return null;
|
|
831
831
|
const fileName = path.posix.basename(filePath);
|
|
832
|
-
assertNoUnexpectedPlusSign(filePath, fileName)
|
|
832
|
+
// assertNoUnexpectedPlusSign(filePath, fileName)
|
|
833
833
|
const basename = fileName.split('.')[0];
|
|
834
834
|
if (!basename.startsWith('+')) {
|
|
835
835
|
return null;
|
|
@@ -839,14 +839,6 @@ function getConfigName(filePath) {
|
|
|
839
839
|
return configName;
|
|
840
840
|
}
|
|
841
841
|
}
|
|
842
|
-
function assertNoUnexpectedPlusSign(filePath, fileName) {
|
|
843
|
-
const dirs = path.posix.dirname(filePath).split('/');
|
|
844
|
-
dirs.forEach((dir, i) => {
|
|
845
|
-
const dirPath = dirs.slice(0, i + 1).join('/');
|
|
846
|
-
assertUsage(!dir.includes('+'), `Character '+' is a reserved character: remove '+' from the directory name ${dirPath}/`);
|
|
847
|
-
});
|
|
848
|
-
assertUsage(!fileName.slice(1).includes('+'), `Character '+' is only allowed at the beginning of filenames: make sure ${filePath} doesn't contain any '+' in its filename other than its first letter`);
|
|
849
|
-
}
|
|
850
842
|
async function loadConfigFile(configFilePath, userRootDir, visited) {
|
|
851
843
|
const { filePathAbsoluteFilesystem } = configFilePath;
|
|
852
844
|
assertNoInfiniteLoop(visited, filePathAbsoluteFilesystem);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { runPrerenderFromAPI as prerender } from './runPrerender.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { runPrerenderFromAPI as prerender } from './runPrerender.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
1
|
+
export { runPrerenderFromAPI };
|
|
2
|
+
export { runPrerenderFromCLI };
|
|
3
|
+
export { runPrerenderFromAutoFullBuild };
|
|
4
|
+
export { runPrerender_forceExit };
|
|
5
5
|
export type { PrerenderOptions };
|
|
6
6
|
import '../runtime/page-files/setup.js';
|
|
7
7
|
import type { InlineConfig } from 'vite';
|
|
@@ -47,7 +47,7 @@ type PrerenderOptions = {
|
|
|
47
47
|
/** @deprecated */
|
|
48
48
|
base?: string;
|
|
49
49
|
};
|
|
50
|
-
declare function
|
|
51
|
-
declare function
|
|
52
|
-
declare function
|
|
53
|
-
declare function
|
|
50
|
+
declare function runPrerenderFromAPI(options?: PrerenderOptions): Promise<void>;
|
|
51
|
+
declare function runPrerenderFromCLI(options: PrerenderOptions): Promise<void>;
|
|
52
|
+
declare function runPrerenderFromAutoFullBuild(options: PrerenderOptions): Promise<void>;
|
|
53
|
+
declare function runPrerender_forceExit(): void;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
1
|
+
export { runPrerenderFromAPI };
|
|
2
|
+
export { runPrerenderFromCLI };
|
|
3
|
+
export { runPrerenderFromAutoFullBuild };
|
|
4
|
+
export { runPrerender_forceExit };
|
|
5
5
|
import '../runtime/page-files/setup.js';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { route } from '../../shared/route/index.js';
|
|
8
|
-
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, executeHook, isPlainObject, setNodeEnvToProduction } from './utils.js';
|
|
8
|
+
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, executeHook, isPlainObject, setNodeEnvToProduction, isUserHookError } from './utils.js';
|
|
9
9
|
import { pLimit } from '../../utils/pLimit.js';
|
|
10
10
|
import { prerenderPage, prerender404Page, getRenderContext, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
|
|
11
11
|
import pc from '@brillout/picocolors';
|
|
@@ -22,21 +22,22 @@ import { isErrorPage } from '../../shared/error-page.js';
|
|
|
22
22
|
import { addUrlComputedProps } from '../../shared/addUrlComputedProps.js';
|
|
23
23
|
import { assertPathIsFilesystemAbsolute } from '../../utils/assertPathIsFilesystemAbsolute.js';
|
|
24
24
|
import { isAbortError } from '../../shared/route/abort.js';
|
|
25
|
-
import {
|
|
26
|
-
import { getHookFromPageConfig, getHookFromPageConfigGlobal, getHookTimeoutDefault } from '../../shared/hooks/getHook.js';
|
|
25
|
+
import { loadUserFilesServerSide } from '../runtime/renderPage/loadUserFilesServerSide.js';
|
|
26
|
+
import { getHookFromPageConfig, getHookFromPageConfigGlobal, getHookTimeoutDefault, setIsPrerenderering } from '../../shared/hooks/getHook.js';
|
|
27
27
|
import { noRouteMatch } from '../../shared/route/noRouteMatch.js';
|
|
28
28
|
import { getVikeConfig } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
29
|
-
async function
|
|
29
|
+
async function runPrerenderFromAPI(options = {}) {
|
|
30
30
|
await runPrerender(options, 'prerender()');
|
|
31
31
|
}
|
|
32
|
-
async function
|
|
32
|
+
async function runPrerenderFromCLI(options) {
|
|
33
33
|
await runPrerender(options, '$ vike prerender');
|
|
34
34
|
}
|
|
35
|
-
async function
|
|
35
|
+
async function runPrerenderFromAutoFullBuild(options) {
|
|
36
36
|
await runPrerender(options, null);
|
|
37
37
|
}
|
|
38
38
|
async function runPrerender(options, manuallyTriggered) {
|
|
39
39
|
checkOutdatedOptions(options);
|
|
40
|
+
setIsPrerenderering();
|
|
40
41
|
const logLevel = !!options.onPagePrerender ? 'warn' : 'info';
|
|
41
42
|
if (logLevel === 'info') {
|
|
42
43
|
console.log(`${pc.cyan(`vike v${projectInfo.projectVersion}`)} ${pc.green('pre-rendering HTML...')}`);
|
|
@@ -269,7 +270,7 @@ async function handlePagesWithStaticRoutes(prerenderContext, renderContext, doNo
|
|
|
269
270
|
}
|
|
270
271
|
]
|
|
271
272
|
});
|
|
272
|
-
objectAssign(pageContext, await
|
|
273
|
+
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
273
274
|
prerenderContext.pageContexts.push(pageContext);
|
|
274
275
|
})));
|
|
275
276
|
}
|
|
@@ -449,7 +450,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
|
|
|
449
450
|
assert(pageContextFromRoute._pageId);
|
|
450
451
|
objectAssign(pageContext, pageContextFromRoute);
|
|
451
452
|
const { _pageId: pageId } = pageContext;
|
|
452
|
-
objectAssign(pageContext, await
|
|
453
|
+
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
453
454
|
let usesClientRouter;
|
|
454
455
|
{
|
|
455
456
|
if (pageContext._pageConfigs.length > 0) {
|
|
@@ -672,7 +673,7 @@ function isSameUrl(url1, url2) {
|
|
|
672
673
|
function normalizeUrl(url) {
|
|
673
674
|
return '/' + url.split('/').filter(Boolean).join('/');
|
|
674
675
|
}
|
|
675
|
-
function
|
|
676
|
+
function runPrerender_forceExit() {
|
|
676
677
|
// Force exit; known situations where pre-rendering is hanging:
|
|
677
678
|
// - https://github.com/vikejs/vike/discussions/774#discussioncomment-5584551
|
|
678
679
|
// - https://github.com/vikejs/vike/issues/807#issuecomment-1519010902
|
|
@@ -686,5 +687,12 @@ function assertIsNotAbort(err, urlOr404) {
|
|
|
686
687
|
if (!isAbortError(err))
|
|
687
688
|
return;
|
|
688
689
|
const pageContextAbort = err._pageContextAbort;
|
|
689
|
-
|
|
690
|
+
const hookLoc = isUserHookError(err);
|
|
691
|
+
assert(hookLoc);
|
|
692
|
+
const thrownBy = ` by ${pc.cyan(`${hookLoc.hookName}()`)} hook defined at ${hookLoc.hookFilePath}`;
|
|
693
|
+
const abortCaller = pageContextAbort._abortCaller;
|
|
694
|
+
assert(abortCaller);
|
|
695
|
+
const abortCall = pageContextAbort._abortCall;
|
|
696
|
+
assert(abortCall);
|
|
697
|
+
assertUsage(false, `${pc.cyan(abortCall)} thrown${thrownBy} while pre-rendering ${urlOr404} but ${pc.cyan(abortCaller)} isn't supported for pre-rendered pages`);
|
|
690
698
|
}
|
|
@@ -9,7 +9,6 @@ type PageContextSerialization = {
|
|
|
9
9
|
_pageConfigs: PageConfigRuntime[];
|
|
10
10
|
is404: null | boolean;
|
|
11
11
|
pageProps?: Record<string, unknown>;
|
|
12
|
-
_isError?: true;
|
|
13
12
|
_pageContextInit: Record<string, unknown>;
|
|
14
13
|
};
|
|
15
14
|
declare function serializePageContextClientSide(pageContext: PageContextSerialization): string;
|
|
@@ -6,6 +6,8 @@ import { isErrorPage } from '../../../shared/error-page.js';
|
|
|
6
6
|
import { addIs404ToPageProps } from '../../../shared/addIs404ToPageProps.js';
|
|
7
7
|
import pc from '@brillout/picocolors';
|
|
8
8
|
import { notSerializable } from '../../../shared/notSerializable.js';
|
|
9
|
+
import { pageContextInitIsPassedToClient } from '../../../shared/misc/pageContextInitIsPassedToClient.js';
|
|
10
|
+
import { isRenderFailure } from '../../../shared/misc/isRenderFailure.js';
|
|
9
11
|
const PASS_TO_CLIENT = [
|
|
10
12
|
'abortReason',
|
|
11
13
|
'_urlRewrite',
|
|
@@ -15,11 +17,11 @@ const PASS_TO_CLIENT = [
|
|
|
15
17
|
/* Not needed on the client-side
|
|
16
18
|
'_abortCaller',
|
|
17
19
|
*/
|
|
18
|
-
|
|
20
|
+
pageContextInitIsPassedToClient,
|
|
19
21
|
'_pageId',
|
|
20
22
|
'data' // for data() hook
|
|
21
23
|
];
|
|
22
|
-
const PASS_TO_CLIENT_ERROR_PAGE = ['pageProps', 'is404',
|
|
24
|
+
const PASS_TO_CLIENT_ERROR_PAGE = ['pageProps', 'is404', isRenderFailure];
|
|
23
25
|
function serializePageContextClientSide(pageContext) {
|
|
24
26
|
const passToClient = getPassToClient(pageContext);
|
|
25
27
|
const pageContextClient = {};
|
|
@@ -28,7 +30,7 @@ function serializePageContextClientSide(pageContext) {
|
|
|
28
30
|
pageContextClient[prop] = pageContext[prop];
|
|
29
31
|
});
|
|
30
32
|
if (Object.keys(pageContext._pageContextInit).some((p) => passToClient.includes(p))) {
|
|
31
|
-
pageContextClient.
|
|
33
|
+
pageContextClient._pageContextInitIsPassedToClient = true;
|
|
32
34
|
}
|
|
33
35
|
let pageContextSerialized;
|
|
34
36
|
try {
|
|
@@ -19,8 +19,9 @@ export { streamReadableWebToString };
|
|
|
19
19
|
export { streamPipeNodeToString };
|
|
20
20
|
export { isStreamWritableWeb };
|
|
21
21
|
export { isStreamWritableNode };
|
|
22
|
-
import { assert, assertUsage, checkType, isObject, hasProp, objectAssign, capitalizeFirstLetter, assertWarning, isCallable, createDebugger,
|
|
22
|
+
import { assert, assertUsage, checkType, isObject, hasProp, objectAssign, capitalizeFirstLetter, assertWarning, isCallable, createDebugger, isBug } from '../utils.js';
|
|
23
23
|
import { getStreamFromReactStreaming, isStreamReactStreaming, streamReactStreamingToString } from './stream/react-streaming.js';
|
|
24
|
+
import { import_ } from '@brillout/import';
|
|
24
25
|
import pc from '@brillout/picocolors';
|
|
25
26
|
const debug = createDebugger('vike:stream');
|
|
26
27
|
function isStreamReadableWeb(thing) {
|
|
@@ -753,7 +754,7 @@ function encodeForWebStream(thing) {
|
|
|
753
754
|
}
|
|
754
755
|
// Because of Cloudflare Workers, we cannot statically import the `stream` module, instead we dynamically import it.
|
|
755
756
|
async function loadStreamNodeModule() {
|
|
756
|
-
const streamModule = await
|
|
757
|
+
const streamModule = (await import_('stream')).default;
|
|
757
758
|
const { Readable, Writable } = streamModule;
|
|
758
759
|
return { Readable, Writable };
|
|
759
760
|
}
|
|
@@ -43,7 +43,8 @@ function collectCss(mod, styleUrls, visitedModules, importer) {
|
|
|
43
43
|
// - I believe some Vite plugins don't respect the \0 virtual module convention. What should we do then?
|
|
44
44
|
// - https://github.com/vikejs/vike/issues/1327
|
|
45
45
|
// - https://github.com/vikejs/vike/commit/3f7b9916dddc84e29e2c20d2b0df7211b6f1acbd
|
|
46
|
-
|
|
46
|
+
// - https://github.com/vikejs/vike/issues/479#issuecomment-1870043943
|
|
47
|
+
styleUrls.add(`/@id/__x00__${mod.url.substring(1)}`);
|
|
47
48
|
}
|
|
48
49
|
else {
|
|
49
50
|
// Is this useful? Maybe for virtual modules that don't respect the \0 virtual module convention?
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export { isNewError };
|
|
2
2
|
export { setAlreadyLogged };
|
|
3
|
-
import { getGlobalObject, isObject,
|
|
3
|
+
import { getGlobalObject, isObject, isSameErrorMessage, warnIfErrorIsNotObject } from '../utils.js';
|
|
4
4
|
const globalObject = getGlobalObject('runtime/renderPage/isNewError.ts', {
|
|
5
5
|
wasAlreadyLogged: new WeakSet()
|
|
6
6
|
});
|
|
7
7
|
function isNewError(errErrorPage, errNominalPage) {
|
|
8
8
|
warnIfErrorIsNotObject(errErrorPage);
|
|
9
|
-
return !
|
|
9
|
+
return !isSameErrorMessage(errNominalPage, errErrorPage) || !hasAlreadyLogged(errNominalPage);
|
|
10
10
|
}
|
|
11
11
|
function hasAlreadyLogged(err) {
|
|
12
12
|
if (!isObject(err))
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadUserFilesServerSide };
|
|
2
2
|
export type { PageFiles };
|
|
3
|
-
export type {
|
|
3
|
+
export type { PageContext_loadUserFilesServerSide };
|
|
4
4
|
import { type PageFile } from '../../../shared/getPageFiles.js';
|
|
5
5
|
import { PromiseType } from '../utils.js';
|
|
6
6
|
import { PageContextGetPageAssets, type PageAsset } from './getPageAssets.js';
|
|
7
7
|
import { type PageContextDebugRouteMatches } from './debugPageFiles.js';
|
|
8
8
|
import type { PageConfigRuntime } from '../../../shared/page-configs/PageConfig.js';
|
|
9
|
-
type
|
|
9
|
+
type PageContext_loadUserFilesServerSide = PageContextGetPageAssets & PageContextDebugRouteMatches & {
|
|
10
10
|
urlOriginal: string;
|
|
11
11
|
_pageFilesAll: PageFile[];
|
|
12
12
|
_pageConfigs: PageConfigRuntime[];
|
|
13
13
|
};
|
|
14
|
-
type PageFiles = PromiseType<ReturnType<typeof
|
|
15
|
-
declare function
|
|
14
|
+
type PageFiles = PromiseType<ReturnType<typeof loadUserFilesServerSide>>;
|
|
15
|
+
declare function loadUserFilesServerSide(pageContext: {
|
|
16
16
|
_pageId: string;
|
|
17
|
-
} &
|
|
17
|
+
} & PageContext_loadUserFilesServerSide): Promise<{
|
|
18
18
|
config: Record<string, unknown>;
|
|
19
19
|
configEntries: import("../../../shared/getPageFiles/getExports.js").ConfigEntries;
|
|
20
20
|
exports: Record<string, unknown>;
|
package/dist/esm/node/runtime/renderPage/{loadPageFilesServerSide.js → loadUserFilesServerSide.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { loadUserFilesServerSide };
|
|
2
2
|
import { getExportUnion, getPageFilesServerSide, getExports } from '../../../shared/getPageFiles.js';
|
|
3
3
|
import { analyzePageClientSideInit } from '../../../shared/getPageFiles/analyzePageClientSide.js';
|
|
4
4
|
import { assertWarning, objectAssign } from '../utils.js';
|
|
@@ -8,10 +8,10 @@ import { findPageConfig } from '../../../shared/page-configs/findPageConfig.js';
|
|
|
8
8
|
import { analyzePage } from './analyzePage.js';
|
|
9
9
|
import { getGlobalContext } from '../globalContext.js';
|
|
10
10
|
import { loadConfigValues } from '../../../shared/page-configs/loadConfigValues.js';
|
|
11
|
-
async function
|
|
11
|
+
async function loadUserFilesServerSide(pageContext) {
|
|
12
12
|
const pageConfig = findPageConfig(pageContext._pageConfigs, pageContext._pageId); // Make pageConfig globally available as pageContext._pageConfig?
|
|
13
13
|
const [{ config, configEntries, exports, exportsAll, pageExports, pageFilesLoaded, pageConfigLoaded }] = await Promise.all([
|
|
14
|
-
|
|
14
|
+
loadPageUserFiles(pageContext._pageFilesAll, pageConfig, pageContext._pageId, !getGlobalContext().isProduction),
|
|
15
15
|
analyzePageClientSideInit(pageContext._pageFilesAll, pageContext._pageId, { sharedPageFilesAlreadyLoaded: true })
|
|
16
16
|
]);
|
|
17
17
|
const { isHtmlOnly, isClientRouting, clientEntries, clientDependencies, pageFilesClientSide, pageFilesServerSide } = analyzePage(pageContext._pageFilesAll, pageConfig, pageContext._pageId);
|
|
@@ -80,7 +80,7 @@ async function loadPageFilesServerSide(pageContext) {
|
|
|
80
80
|
}
|
|
81
81
|
return pageContextAddendum;
|
|
82
82
|
}
|
|
83
|
-
async function
|
|
83
|
+
async function loadPageUserFiles(pageFilesAll, pageConfig, pageId, isDev) {
|
|
84
84
|
const pageFilesServerSide = getPageFilesServerSide(pageFilesAll, pageId);
|
|
85
85
|
const pageConfigLoaded = !pageConfig ? null : await loadConfigValues(pageConfig, isDev);
|
|
86
86
|
await Promise.all(pageFilesServerSide.map((p) => p.loadFile?.()));
|
|
@@ -9,7 +9,7 @@ export type { PageContextInitEnhanced };
|
|
|
9
9
|
import { type PageFile } from '../../../shared/getPageFiles.js';
|
|
10
10
|
import { type PageContextUrlComputedPropsInternal } from '../../../shared/addUrlComputedProps.js';
|
|
11
11
|
import { HttpResponse } from './createHttpResponseObject.js';
|
|
12
|
-
import {
|
|
12
|
+
import { PageContext_loadUserFilesServerSide, type PageFiles } from './loadUserFilesServerSide.js';
|
|
13
13
|
import type { PageConfigRuntime, PageConfigGlobalRuntime } from '../../../shared/page-configs/PageConfig.js';
|
|
14
14
|
import { type PageRoutes } from '../../../shared/route/loadPageRoutes.js';
|
|
15
15
|
import type { Hook } from '../../../shared/hooks/getHook.js';
|
|
@@ -24,7 +24,7 @@ declare function renderPageAlreadyRouted<PageContext extends {
|
|
|
24
24
|
routeParams: Record<string, string>;
|
|
25
25
|
errorWhileRendering: null | Error;
|
|
26
26
|
_httpRequestId: number;
|
|
27
|
-
} & PageContextInitEnhanced & PageContextUrlComputedPropsInternal &
|
|
27
|
+
} & PageContextInitEnhanced & PageContextUrlComputedPropsInternal & PageContext_loadUserFilesServerSide>(pageContext: PageContext): Promise<PageContext & PageContextAfterRender>;
|
|
28
28
|
declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles & {
|
|
29
29
|
routeParams: Record<string, string>;
|
|
30
30
|
_pageId: string;
|
|
@@ -11,7 +11,7 @@ import { serializePageContextClientSide } from '../html/serializePageContextClie
|
|
|
11
11
|
import { addUrlComputedProps } from '../../../shared/addUrlComputedProps.js';
|
|
12
12
|
import { getGlobalContext } from '../globalContext.js';
|
|
13
13
|
import { createHttpResponseObject, createHttpResponsePageContextJson } from './createHttpResponseObject.js';
|
|
14
|
-
import {
|
|
14
|
+
import { loadUserFilesServerSide } from './loadUserFilesServerSide.js';
|
|
15
15
|
import { executeOnRenderHtmlHook } from './executeOnRenderHtmlHook.js';
|
|
16
16
|
import { executeOnBeforeRenderAndDataHooks } from './executeOnBeforeRenderAndDataHooks.js';
|
|
17
17
|
import { logRuntimeError } from './loggerRuntime.js';
|
|
@@ -21,6 +21,7 @@ import { executeGuardHook } from '../../../shared/route/executeGuardHook.js';
|
|
|
21
21
|
import { loadPageRoutes } from '../../../shared/route/loadPageRoutes.js';
|
|
22
22
|
import pc from '@brillout/picocolors';
|
|
23
23
|
import { getConfigValueFilePathToShowToUser } from '../../../shared/page-configs/helpers.js';
|
|
24
|
+
import { isRenderFailure } from '../../../shared/misc/isRenderFailure.js';
|
|
24
25
|
async function renderPageAlreadyRouted(pageContext) {
|
|
25
26
|
// pageContext._pageId can either be the:
|
|
26
27
|
// - ID of the page matching the routing, or the
|
|
@@ -28,7 +29,7 @@ async function renderPageAlreadyRouted(pageContext) {
|
|
|
28
29
|
assert(hasProp(pageContext, '_pageId', 'string'));
|
|
29
30
|
const isError = pageContext.is404 || !!pageContext.errorWhileRendering;
|
|
30
31
|
assert(isError === (pageContext._pageId === getErrorPageId(pageContext._pageFilesAll, pageContext._pageConfigs)));
|
|
31
|
-
objectAssign(pageContext, await
|
|
32
|
+
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
32
33
|
if (!isError) {
|
|
33
34
|
await executeGuardHook(pageContext, (pageContext) => preparePageContextForUserConsumptionServerSide(pageContext));
|
|
34
35
|
}
|
|
@@ -47,7 +48,7 @@ async function renderPageAlreadyRouted(pageContext) {
|
|
|
47
48
|
}
|
|
48
49
|
if (pageContext.isClientSideNavigation) {
|
|
49
50
|
if (isError) {
|
|
50
|
-
objectAssign(pageContext, {
|
|
51
|
+
objectAssign(pageContext, { [isRenderFailure]: true });
|
|
51
52
|
}
|
|
52
53
|
const pageContextSerialized = serializePageContextClientSide(pageContext);
|
|
53
54
|
const httpResponse = await createHttpResponsePageContextJson(pageContextSerialized);
|
|
@@ -112,7 +113,7 @@ async function prerender404Page(renderContext, pageContextInit_) {
|
|
|
112
113
|
const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, renderContext);
|
|
113
114
|
objectAssign(pageContext, pageContextInitEnhanced);
|
|
114
115
|
}
|
|
115
|
-
objectAssign(pageContext, await
|
|
116
|
+
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
116
117
|
return prerenderPage(pageContext);
|
|
117
118
|
}
|
|
118
119
|
function getPageContextInitEnhanced(pageContextInit, renderContext, { urlComputedPropsNonEnumerable = false, ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
|
|
@@ -16,7 +16,7 @@ import pc from '@brillout/picocolors';
|
|
|
16
16
|
import { serializePageContextAbort, serializePageContextClientSide } from './html/serializePageContextClientSide.js';
|
|
17
17
|
import { getErrorPageId } from '../../shared/error-page.js';
|
|
18
18
|
import { handleErrorWithoutErrorPage } from './renderPage/handleErrorWithoutErrorPage.js';
|
|
19
|
-
import {
|
|
19
|
+
import { loadUserFilesServerSide } from './renderPage/loadUserFilesServerSide.js';
|
|
20
20
|
import { resolveRedirects } from '../../shared/route/resolveRedirects.js';
|
|
21
21
|
const globalObject = getGlobalObject('runtime/renderPage.ts', {
|
|
22
22
|
httpRequestsCount: 0,
|
|
@@ -384,7 +384,7 @@ async function handleAbortError(errAbort, pageContextsFromRewrite, pageContextIn
|
|
|
384
384
|
...pageContextErrorPageInit,
|
|
385
385
|
...renderContext
|
|
386
386
|
};
|
|
387
|
-
objectAssign(pageContext, await
|
|
387
|
+
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
388
388
|
// We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
|
|
389
389
|
pageContextSerialized = serializePageContextClientSide(pageContext);
|
|
390
390
|
}
|