vike 0.4.218 → 0.4.220
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/__internal/index.js +11 -11
- package/dist/cjs/node/api/build.js +20 -11
- package/dist/cjs/node/api/context.js +5 -1
- package/dist/cjs/node/api/index.js +17 -7
- package/dist/cjs/node/api/prepareViteApiCall.js +39 -11
- package/dist/cjs/node/cli/entry.js +19 -7
- package/dist/cjs/node/plugin/index.js +5 -5
- package/dist/cjs/node/plugin/plugins/autoFullBuild.js +3 -4
- package/dist/cjs/node/plugin/plugins/baseUrls.js +3 -10
- package/dist/cjs/node/plugin/plugins/buildConfig.js +2 -2
- package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
- package/dist/cjs/node/plugin/plugins/commonConfig.js +39 -4
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +26 -23
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +171 -68
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +4 -3
- package/dist/cjs/node/plugin/plugins/setGlobalContext.js +1 -1
- package/dist/cjs/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
- package/dist/cjs/node/plugin/shared/getHttpRequestAsyncStore.js +17 -7
- package/dist/cjs/node/prerender/isPrerenderAutoRunEnabled.js +16 -0
- package/dist/cjs/node/prerender/runPrerender.js +94 -66
- package/dist/cjs/node/prerender/utils.js +1 -0
- package/dist/cjs/node/runtime/globalContext.js +108 -34
- package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +2 -2
- package/dist/cjs/node/runtime/index-common.js +0 -15
- package/dist/cjs/node/runtime/onLoad.js +17 -3
- package/dist/cjs/node/runtime/page-files/setup.js +2 -4
- package/dist/cjs/node/runtime/renderPage/analyzePage.js +2 -2
- package/dist/cjs/node/runtime/renderPage/createHttpResponse/getCacheControl.js +2 -2
- package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
- package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +9 -1
- package/dist/cjs/node/runtime/renderPage.js +21 -22
- package/dist/cjs/node/runtime/utils.js +1 -0
- package/dist/cjs/node/runtime-dev/index.js +17 -7
- package/dist/cjs/node/shared/assertRuntimeManifest.js +0 -2
- package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +3 -3
- package/dist/cjs/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +8 -6
- package/dist/cjs/shared/getPageFiles.js +3 -9
- package/dist/cjs/shared/hooks/getHook.js +3 -3
- package/dist/cjs/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +113 -81
- package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +80 -55
- package/dist/cjs/shared/route/loadPageRoutes.js +3 -3
- package/dist/cjs/shared/utils.js +1 -0
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/assert.js +4 -3
- package/dist/cjs/utils/assertSetup.js +47 -16
- package/dist/cjs/utils/debug.js +11 -6
- package/dist/cjs/utils/getGlobalObject.js +1 -2
- package/dist/cjs/utils/objectReplace.js +9 -0
- package/dist/esm/__internal/index.d.ts +3 -5
- package/dist/esm/__internal/index.js +6 -8
- package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -1
- package/dist/esm/client/client-routing-runtime/entry.d.ts +1 -1
- package/dist/esm/client/client-routing-runtime/entry.js +0 -1
- package/dist/esm/client/client-routing-runtime/getPageContextCurrent.d.ts +2 -2
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +4 -4
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +1 -1
- package/dist/esm/client/client-routing-runtime/initOnLinkClick.d.ts +4 -0
- package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +13 -3
- package/dist/esm/client/client-routing-runtime/initOnPopState.js +8 -0
- package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.d.ts +2 -2
- package/dist/esm/client/client-routing-runtime/prefetch.d.ts +2 -2
- package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
- package/dist/esm/client/client-routing-runtime/skipLink.d.ts +2 -0
- package/dist/esm/client/client-routing-runtime/skipLink.js +1 -0
- package/dist/esm/client/server-routing-runtime/entry.d.ts +1 -1
- package/dist/esm/client/server-routing-runtime/entry.js +0 -1
- package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +1 -1
- package/dist/esm/client/server-routing-runtime/getPageContext.js +5 -2
- package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +2 -2
- package/dist/esm/client/shared/loadUserFilesClientSide.d.ts +2 -2
- package/dist/esm/client/shared/loadUserFilesClientSide.js +2 -2
- package/dist/esm/client/shared/normalizeClientSideUrl.js +2 -3
- package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
- package/dist/esm/node/api/build.js +3 -4
- package/dist/esm/node/api/context.d.ts +3 -1
- package/dist/esm/node/api/context.js +6 -2
- package/dist/esm/node/api/prepareViteApiCall.d.ts +1 -1
- package/dist/esm/node/api/prepareViteApiCall.js +25 -7
- package/dist/esm/node/cli/entry.js +2 -0
- package/dist/esm/node/cli/parseCli.d.ts +1 -1
- package/dist/esm/node/plugin/index.d.ts +1 -1
- package/dist/esm/node/plugin/index.js +5 -5
- package/dist/esm/node/plugin/plugins/autoFullBuild.js +3 -4
- package/dist/esm/node/plugin/plugins/baseUrls.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/baseUrls.js +4 -11
- package/dist/esm/node/plugin/plugins/buildConfig.js +2 -2
- package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.d.ts +2 -2
- package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
- package/dist/esm/node/plugin/plugins/commonConfig.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/commonConfig.js +40 -5
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +6 -9
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +25 -22
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +96 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +167 -64
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +4 -3
- package/dist/esm/node/plugin/plugins/setGlobalContext.js +1 -1
- package/dist/esm/node/plugin/plugins/workaroundVite6HmrRegression.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
- package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.d.ts +5 -0
- package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.js +14 -0
- package/dist/esm/node/prerender/runPrerender.d.ts +1 -2
- package/dist/esm/node/prerender/runPrerender.js +78 -60
- package/dist/esm/node/prerender/utils.d.ts +1 -0
- package/dist/esm/node/prerender/utils.js +1 -0
- package/dist/esm/node/runtime/globalContext.d.ts +23 -7
- package/dist/esm/node/runtime/globalContext.js +108 -34
- package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +1 -1
- package/dist/esm/node/runtime/index-common.d.ts +0 -1
- package/dist/esm/node/runtime/index-common.js +0 -15
- package/dist/esm/node/runtime/index-deprecated.d.ts +1 -0
- package/dist/esm/node/runtime/onLoad.js +16 -2
- package/dist/esm/node/runtime/page-files/setup.js +3 -3
- package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
- package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.js +1 -1
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +2 -2
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +31 -46
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
- package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/resolveRedirects.js +9 -1
- package/dist/esm/node/runtime/renderPage.js +22 -23
- package/dist/esm/node/runtime/utils.d.ts +1 -0
- package/dist/esm/node/runtime/utils.js +1 -0
- package/dist/esm/node/shared/assertPluginManifest.d.ts +0 -1
- package/dist/esm/node/shared/assertRuntimeManifest.d.ts +0 -1
- package/dist/esm/node/shared/assertRuntimeManifest.js +1 -3
- package/dist/esm/shared/getPageFiles/analyzeClientSide.js +1 -1
- package/dist/esm/shared/getPageFiles/{setPageFiles.d.ts → getPageFiles.d.ts} +3 -1
- package/dist/esm/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +8 -6
- package/dist/esm/shared/getPageFiles.d.ts +2 -5
- package/dist/esm/shared/getPageFiles.js +1 -4
- package/dist/esm/shared/hooks/getHook.d.ts +3 -3
- package/dist/esm/shared/hooks/getHook.js +1 -1
- package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +9 -5
- package/dist/esm/shared/page-configs/Config.d.ts +20 -2
- package/dist/esm/shared/page-configs/PageConfig.d.ts +7 -3
- package/dist/esm/shared/{getPageFiles/getExports.d.ts → page-configs/getPageConfigUserFriendly.d.ts} +26 -12
- package/dist/esm/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +112 -80
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +26 -6
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +80 -55
- package/dist/esm/shared/route/executeGuardHook.d.ts +2 -2
- package/dist/esm/shared/route/loadPageRoutes.js +1 -1
- package/dist/esm/shared/types.d.ts +1 -1
- package/dist/esm/shared/utils.d.ts +1 -0
- package/dist/esm/shared/utils.js +1 -0
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/assert.js +4 -3
- package/dist/esm/utils/assertSetup.js +47 -16
- package/dist/esm/utils/debug.d.ts +1 -1
- package/dist/esm/utils/debug.js +11 -6
- package/dist/esm/utils/getGlobalObject.js +1 -2
- package/dist/esm/utils/objectReplace.d.ts +1 -0
- package/dist/esm/utils/objectReplace.js +6 -0
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/package.json +4 -13
- package/__internal/loadImportBuild.js +0 -3
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -128
- package/dist/cjs/node/runtime/globalContext/loadImportBuild.js +0 -25
- package/dist/cjs/node/runtime/page-files/getPageFilesExports.js +0 -22
- package/dist/esm/client/client-routing-runtime/pageFiles.d.ts +0 -1
- package/dist/esm/client/client-routing-runtime/pageFiles.js +0 -4
- package/dist/esm/client/server-routing-runtime/pageFiles.d.ts +0 -1
- package/dist/esm/client/server-routing-runtime/pageFiles.js +0 -4
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.d.ts +0 -104
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -123
- package/dist/esm/node/plugin/plugins/vite6HmrRegressionWorkaround.d.ts +0 -3
- package/dist/esm/node/runtime/globalContext/loadImportBuild.d.ts +0 -18
- package/dist/esm/node/runtime/globalContext/loadImportBuild.js +0 -23
- package/dist/esm/node/runtime/page-files/getPageFilesExports.d.ts +0 -2
- package/dist/esm/node/runtime/page-files/getPageFilesExports.js +0 -20
- /package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
- /package/dist/cjs/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
- /package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
- /package/dist/esm/shared/page-configs/{getConfigValue.d.ts → getConfigValueRuntime.d.ts} +0 -0
- /package/dist/esm/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
|
@@ -2,11 +2,10 @@ export { runPrerenderFromAPI };
|
|
|
2
2
|
export { runPrerenderFromCLIPrerenderCommand };
|
|
3
3
|
export { runPrerenderFromAutoRun };
|
|
4
4
|
export { runPrerender_forceExit };
|
|
5
|
-
import '../runtime/page-files/setup.js';
|
|
6
5
|
import path from 'path';
|
|
7
6
|
import { route } from '../../shared/route/index.js';
|
|
8
|
-
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender } from './utils.js';
|
|
9
|
-
import { prerenderPage, prerender404Page,
|
|
7
|
+
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender, isObject } from './utils.js';
|
|
8
|
+
import { prerenderPage, prerender404Page, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
|
|
10
9
|
import pc from '@brillout/picocolors';
|
|
11
10
|
import { cpus } from 'os';
|
|
12
11
|
import { getGlobalContext, initGlobalContext_runPrerender, setGlobalContext_isPrerendering } from '../runtime/globalContext.js';
|
|
@@ -15,7 +14,7 @@ import { getPageFilesServerSide } from '../../shared/getPageFiles.js';
|
|
|
15
14
|
import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';
|
|
16
15
|
import { getUrlFromRouteString } from '../../shared/route/resolveRouteString.js';
|
|
17
16
|
import { getConfigValueFilePathToShowToUser } from '../../shared/page-configs/helpers.js';
|
|
18
|
-
import { getConfigValueRuntime } from '../../shared/page-configs/
|
|
17
|
+
import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValueRuntime.js';
|
|
19
18
|
import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
|
|
20
19
|
import { isErrorPage } from '../../shared/error-page.js';
|
|
21
20
|
import { getPageContextUrlComputed } from '../../shared/getPageContextUrlComputed.js';
|
|
@@ -46,7 +45,7 @@ async function runPrerenderFromCLIPrerenderCommand() {
|
|
|
46
45
|
}
|
|
47
46
|
runPrerender_forceExit();
|
|
48
47
|
}
|
|
49
|
-
async function runPrerenderFromAutoRun(viteConfig
|
|
48
|
+
async function runPrerenderFromAutoRun(viteConfig) {
|
|
50
49
|
try {
|
|
51
50
|
await runPrerender({ viteConfig });
|
|
52
51
|
}
|
|
@@ -55,8 +54,6 @@ async function runPrerenderFromAutoRun(viteConfig, forceExit) {
|
|
|
55
54
|
logErrorHint(err);
|
|
56
55
|
process.exit(1);
|
|
57
56
|
}
|
|
58
|
-
if (forceExit)
|
|
59
|
-
runPrerender_forceExit();
|
|
60
57
|
}
|
|
61
58
|
async function runPrerender(options = {}, standaloneTrigger) {
|
|
62
59
|
checkOutdatedOptions(options);
|
|
@@ -69,11 +66,11 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
69
66
|
}
|
|
70
67
|
await disableReactStreaming();
|
|
71
68
|
const viteConfig = await resolveConfig(options.viteConfig || {}, 'build', 'production');
|
|
72
|
-
assertLoadedConfig(viteConfig, options);
|
|
73
69
|
const vikeConfig = await getVikeConfig(viteConfig);
|
|
74
70
|
const { outDirClient } = getOutDirs(viteConfig);
|
|
75
71
|
const { root } = viteConfig;
|
|
76
72
|
const prerenderConfig = vikeConfig.vikeConfigGlobal.prerender;
|
|
73
|
+
validatePrerenderConfig(prerenderConfig);
|
|
77
74
|
if (!prerenderConfig) {
|
|
78
75
|
assert(standaloneTrigger);
|
|
79
76
|
assertWarning(prerenderConfig, `You're executing ${pc.cyan(standaloneTrigger)} but the config ${pc.cyan('prerender')} isn't set to true`, {
|
|
@@ -83,8 +80,8 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
83
80
|
const { partial = false, noExtraDir = false, parallel = true } = prerenderConfig || {};
|
|
84
81
|
const concurrencyLimit = pLimit(parallel === false || parallel === 0 ? 1 : parallel === true || parallel === undefined ? cpus().length : parallel);
|
|
85
82
|
await initGlobalContext_runPrerender();
|
|
86
|
-
const
|
|
87
|
-
|
|
83
|
+
const globalContext = getGlobalContext();
|
|
84
|
+
globalContext.pageFilesAll.forEach(assertExportNames);
|
|
88
85
|
const prerenderContext = {};
|
|
89
86
|
objectAssign(prerenderContext, {
|
|
90
87
|
_urlHandler: null,
|
|
@@ -93,10 +90,10 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
93
90
|
pageContextInit: options.pageContextInit ?? null
|
|
94
91
|
});
|
|
95
92
|
const doNotPrerenderList = [];
|
|
96
|
-
await collectDoNoPrerenderList(
|
|
97
|
-
await callOnBeforePrerenderStartHooks(prerenderContext,
|
|
98
|
-
await handlePagesWithStaticRoutes(prerenderContext,
|
|
99
|
-
await callOnPrerenderStartHook(prerenderContext
|
|
93
|
+
await collectDoNoPrerenderList(vikeConfig.pageConfigs, doNotPrerenderList, concurrencyLimit);
|
|
94
|
+
await callOnBeforePrerenderStartHooks(prerenderContext, concurrencyLimit, doNotPrerenderList);
|
|
95
|
+
await handlePagesWithStaticRoutes(prerenderContext, doNotPrerenderList, concurrencyLimit);
|
|
96
|
+
await callOnPrerenderStartHook(prerenderContext);
|
|
100
97
|
const prerenderedPageContexts = {};
|
|
101
98
|
let prerenderedCount = 0;
|
|
102
99
|
const onComplete = async (htmlFile) => {
|
|
@@ -108,14 +105,14 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
108
105
|
};
|
|
109
106
|
await routeAndPrerender(prerenderContext, concurrencyLimit, onComplete);
|
|
110
107
|
warnContradictoryNoPrerenderList(prerenderedPageContexts, doNotPrerenderList);
|
|
111
|
-
await prerender404(prerenderedPageContexts,
|
|
108
|
+
await prerender404(prerenderedPageContexts, prerenderContext, onComplete);
|
|
112
109
|
if (logLevel === 'info') {
|
|
113
110
|
console.log(`${pc.green(`✓`)} ${prerenderedCount} HTML documents pre-rendered.`);
|
|
114
111
|
}
|
|
115
|
-
warnMissingPages(prerenderedPageContexts, doNotPrerenderList,
|
|
112
|
+
warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial);
|
|
116
113
|
return { viteConfig };
|
|
117
114
|
}
|
|
118
|
-
async function collectDoNoPrerenderList(
|
|
115
|
+
async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, concurrencyLimit) {
|
|
119
116
|
// V1 design
|
|
120
117
|
pageConfigs.forEach((pageConfig) => {
|
|
121
118
|
const configName = 'prerender';
|
|
@@ -133,7 +130,8 @@ async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerend
|
|
|
133
130
|
});
|
|
134
131
|
// Old design
|
|
135
132
|
// TODO/v1-release: remove
|
|
136
|
-
|
|
133
|
+
const globalContext = getGlobalContext();
|
|
134
|
+
await Promise.all(globalContext.pageFilesAll
|
|
137
135
|
.filter((p) => {
|
|
138
136
|
assertExportNames(p);
|
|
139
137
|
if (!p.exportNames?.includes('doNotPrerender'))
|
|
@@ -145,8 +143,8 @@ async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerend
|
|
|
145
143
|
assert(p.loadFile);
|
|
146
144
|
await p.loadFile();
|
|
147
145
|
})));
|
|
148
|
-
|
|
149
|
-
const pageFilesServerSide = getPageFilesServerSide(
|
|
146
|
+
globalContext.allPageIds.forEach((pageId) => {
|
|
147
|
+
const pageFilesServerSide = getPageFilesServerSide(globalContext.pageFilesAll, pageId);
|
|
150
148
|
for (const p of pageFilesServerSide) {
|
|
151
149
|
if (!p.exportNames?.includes('doNotPrerender'))
|
|
152
150
|
continue;
|
|
@@ -175,10 +173,11 @@ function assertExportNames(pageFile) {
|
|
|
175
173
|
const { exportNames, fileType } = pageFile;
|
|
176
174
|
assert(exportNames || fileType === '.page.route' || fileType === '.css', pageFile.filePath);
|
|
177
175
|
}
|
|
178
|
-
async function callOnBeforePrerenderStartHooks(prerenderContext,
|
|
176
|
+
async function callOnBeforePrerenderStartHooks(prerenderContext, concurrencyLimit, doNotPrerenderList) {
|
|
179
177
|
const onBeforePrerenderStartHooks = [];
|
|
178
|
+
const globalContext = getGlobalContext();
|
|
180
179
|
// V1 design
|
|
181
|
-
await Promise.all(
|
|
180
|
+
await Promise.all(globalContext.pageConfigs.map((pageConfig) => concurrencyLimit(async () => {
|
|
182
181
|
const hookName = 'onBeforePrerenderStart';
|
|
183
182
|
const pageConfigLoaded = await loadConfigValues(pageConfig, false);
|
|
184
183
|
const hook = getHookFromPageConfig(pageConfigLoaded, hookName);
|
|
@@ -194,7 +193,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
|
|
|
194
193
|
});
|
|
195
194
|
})));
|
|
196
195
|
// 0.4 design
|
|
197
|
-
await Promise.all(
|
|
196
|
+
await Promise.all(globalContext.pageFilesAll
|
|
198
197
|
.filter((p) => {
|
|
199
198
|
assertExportNames(p);
|
|
200
199
|
if (!p.exportNames?.includes('prerender'))
|
|
@@ -235,7 +234,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
|
|
|
235
234
|
assertUsage(false, `URL ${pc.cyan(url)} provided ${providedTwice}. Make sure to provide the URL only once instead.`);
|
|
236
235
|
}
|
|
237
236
|
}
|
|
238
|
-
const pageContextNew = createPageContext(url,
|
|
237
|
+
const pageContextNew = createPageContext(url, prerenderContext);
|
|
239
238
|
objectAssign(pageContextNew, {
|
|
240
239
|
_providedByHook: {
|
|
241
240
|
hookFilePath,
|
|
@@ -252,9 +251,10 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
|
|
|
252
251
|
});
|
|
253
252
|
})));
|
|
254
253
|
}
|
|
255
|
-
async function handlePagesWithStaticRoutes(prerenderContext,
|
|
254
|
+
async function handlePagesWithStaticRoutes(prerenderContext, doNotPrerenderList, concurrencyLimit) {
|
|
256
255
|
// Pre-render pages with a static route
|
|
257
|
-
|
|
256
|
+
const globalContext = getGlobalContext();
|
|
257
|
+
await Promise.all(globalContext.pageRoutes.map((pageRoute) => concurrencyLimit(async () => {
|
|
258
258
|
const { pageId } = pageRoute;
|
|
259
259
|
if (doNotPrerenderList.find((p) => p.pageId === pageId)) {
|
|
260
260
|
return;
|
|
@@ -279,7 +279,7 @@ async function handlePagesWithStaticRoutes(prerenderContext, renderContext, doNo
|
|
|
279
279
|
return;
|
|
280
280
|
}
|
|
281
281
|
const routeParams = {};
|
|
282
|
-
const pageContext = createPageContext(urlOriginal,
|
|
282
|
+
const pageContext = createPageContext(urlOriginal, prerenderContext);
|
|
283
283
|
objectAssign(pageContext, {
|
|
284
284
|
_providedByHook: null,
|
|
285
285
|
routeParams,
|
|
@@ -297,7 +297,7 @@ async function handlePagesWithStaticRoutes(prerenderContext, renderContext, doNo
|
|
|
297
297
|
prerenderContext.pageContexts.push(pageContext);
|
|
298
298
|
})));
|
|
299
299
|
}
|
|
300
|
-
function createPageContext(urlOriginal,
|
|
300
|
+
function createPageContext(urlOriginal, prerenderContext) {
|
|
301
301
|
const pageContext = {
|
|
302
302
|
_urlHandler: null,
|
|
303
303
|
_urlRewrite: null,
|
|
@@ -309,17 +309,18 @@ function createPageContext(urlOriginal, renderContext, prerenderContext) {
|
|
|
309
309
|
};
|
|
310
310
|
objectAssign(pageContextInit, prerenderContext.pageContextInit);
|
|
311
311
|
{
|
|
312
|
-
const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit
|
|
312
|
+
const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit);
|
|
313
313
|
objectAssign(pageContext, pageContextInitEnhanced);
|
|
314
314
|
}
|
|
315
315
|
return pageContext;
|
|
316
316
|
}
|
|
317
|
-
async function callOnPrerenderStartHook(prerenderContext
|
|
317
|
+
async function callOnPrerenderStartHook(prerenderContext) {
|
|
318
|
+
const globalContext = getGlobalContext();
|
|
318
319
|
let onPrerenderStartHook;
|
|
319
320
|
// V1 design
|
|
320
|
-
if (
|
|
321
|
+
if (globalContext.pageConfigs.length > 0) {
|
|
321
322
|
const hookName = 'onPrerenderStart';
|
|
322
|
-
const hook = getHookFromPageConfigGlobal(
|
|
323
|
+
const hook = getHookFromPageConfigGlobal(globalContext.pageConfigGlobal, hookName);
|
|
323
324
|
if (hook) {
|
|
324
325
|
assert(hook.hookName === 'onPrerenderStart');
|
|
325
326
|
onPrerenderStartHook = {
|
|
@@ -331,9 +332,9 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
|
|
|
331
332
|
}
|
|
332
333
|
// Old design
|
|
333
334
|
// TODO/v1-release: remove
|
|
334
|
-
if (
|
|
335
|
+
if (globalContext.pageConfigs.length === 0) {
|
|
335
336
|
const hookTimeout = getHookTimeoutDefault('onBeforePrerender');
|
|
336
|
-
const pageFilesWithOnBeforePrerenderHook =
|
|
337
|
+
const pageFilesWithOnBeforePrerenderHook = globalContext.pageFilesAll.filter((p) => {
|
|
337
338
|
assertExportNames(p);
|
|
338
339
|
if (!p.exportNames?.includes('onBeforePrerender'))
|
|
339
340
|
return false;
|
|
@@ -481,7 +482,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
|
|
|
481
482
|
usesClientRouter = getConfigValueRuntime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
|
|
482
483
|
}
|
|
483
484
|
else {
|
|
484
|
-
usesClientRouter = globalContext.
|
|
485
|
+
usesClientRouter = globalContext.usesClientRouter;
|
|
485
486
|
}
|
|
486
487
|
}
|
|
487
488
|
objectAssign(pageContext, {
|
|
@@ -521,27 +522,28 @@ function warnContradictoryNoPrerenderList(prerenderedPageContexts, doNotPrerende
|
|
|
521
522
|
assertWarning(false, `The ${providedByHook.hookName}() hook defined by ${providedByHook.hookFilePath} returns the URL ${pc.cyan(urlOriginal)}, while ${setByConfigFile} sets the config ${pc.cyan(setByConfigName)} to ${pc.cyan(String(setByConfigValue))}. This is contradictory: either don't set the config ${pc.cyan(setByConfigName)} to ${pc.cyan(String(setByConfigValue))} or remove the URL ${pc.cyan(urlOriginal)} from the list of URLs to be pre-rendered.`, { onlyOnce: true });
|
|
522
523
|
});
|
|
523
524
|
}
|
|
524
|
-
function warnMissingPages(prerenderedPageContexts, doNotPrerenderList,
|
|
525
|
-
const
|
|
525
|
+
function warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial) {
|
|
526
|
+
const globalContext = getGlobalContext();
|
|
527
|
+
const isV1 = globalContext.pageConfigs.length > 0;
|
|
526
528
|
const hookName = isV1 ? 'onBeforePrerenderStart' : 'prerender';
|
|
527
529
|
/* TODO/after-v1-design-release: document setting `prerender: false` as an alternative to using prerender.partial (both in the warnings and the docs)
|
|
528
530
|
const optOutName = isV1 ? 'prerender' : 'doNotPrerender'
|
|
529
531
|
const msgAddendum = `Explicitly opt-out by setting the config ${optOutName} to ${isV1 ? 'false' : 'true'} or use the option prerender.partial`
|
|
530
532
|
*/
|
|
531
|
-
|
|
533
|
+
globalContext.allPageIds
|
|
532
534
|
.filter((pageId) => !prerenderedPageContexts[pageId])
|
|
533
535
|
.filter((pageId) => !doNotPrerenderList.find((p) => p.pageId === pageId))
|
|
534
|
-
.filter((pageId) => !isErrorPage(pageId,
|
|
536
|
+
.filter((pageId) => !isErrorPage(pageId, globalContext.pageConfigs))
|
|
535
537
|
.forEach((pageId) => {
|
|
536
538
|
const pageAt = isV1 ? pageId : `\`${pageId}.page.*\``;
|
|
537
539
|
assertWarning(partial, `Cannot pre-render page ${pageAt} because it has a non-static route, while no ${hookName}() hook returned any URL matching the page's route. You need to use a ${hookName}() hook (https://vike.dev/${hookName}) providing a list of URLs for ${pageAt} that should be pre-rendered. If you don't want to pre-render ${pageAt} then use the option prerender.partial (https://vike.dev/prerender#partial) to suppress this warning.`, { onlyOnce: true });
|
|
538
540
|
});
|
|
539
541
|
}
|
|
540
|
-
async function prerender404(prerenderedPageContexts,
|
|
542
|
+
async function prerender404(prerenderedPageContexts, prerenderContext, onComplete) {
|
|
541
543
|
if (!Object.values(prerenderedPageContexts).find(({ urlOriginal }) => urlOriginal === '/404')) {
|
|
542
544
|
let result;
|
|
543
545
|
try {
|
|
544
|
-
result = await prerender404Page(
|
|
546
|
+
result = await prerender404Page(prerenderContext.pageContextInit);
|
|
545
547
|
}
|
|
546
548
|
catch (err) {
|
|
547
549
|
assertIsNotAbort(err, 'the 404 page');
|
|
@@ -672,25 +674,6 @@ async function disableReactStreaming() {
|
|
|
672
674
|
const { disable } = mod;
|
|
673
675
|
disable();
|
|
674
676
|
}
|
|
675
|
-
function assertLoadedConfig(viteConfig, options) {
|
|
676
|
-
if (viteConfig.plugins.some((p) => p.name.startsWith('vike'))) {
|
|
677
|
-
return;
|
|
678
|
-
}
|
|
679
|
-
const { configFile } = viteConfig;
|
|
680
|
-
if (configFile) {
|
|
681
|
-
assertUsage(false, `${configFile} doesn't install the vike plugin`);
|
|
682
|
-
}
|
|
683
|
-
else {
|
|
684
|
-
if (!options.viteConfig) {
|
|
685
|
-
assertUsage(false, `[prerender()] No vite.config.js file found at ${process.cwd()}. Use the option ${pc.cyan('prerender({ viteConfig })')}.`, { showStackTrace: true });
|
|
686
|
-
}
|
|
687
|
-
else {
|
|
688
|
-
assertUsage(false, `[prerender()] The Vite config ${pc.cyan('prerender({ viteConfig })')} is missing the vike plugin.`, {
|
|
689
|
-
showStackTrace: true
|
|
690
|
-
});
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
677
|
function isSameUrl(url1, url2) {
|
|
695
678
|
return normalizeUrl(url1) === normalizeUrl(url2);
|
|
696
679
|
}
|
|
@@ -740,3 +723,38 @@ function makePageContextComputedUrlNonEnumerable(pageContexts) {
|
|
|
740
723
|
});
|
|
741
724
|
}
|
|
742
725
|
}
|
|
726
|
+
function validatePrerenderConfig(
|
|
727
|
+
// Guaranteed by configDef.type to be either an object or boolean
|
|
728
|
+
prerenderConfig) {
|
|
729
|
+
if (!prerenderConfig || typeof prerenderConfig === 'boolean')
|
|
730
|
+
return;
|
|
731
|
+
assert(isObject(prerenderConfig));
|
|
732
|
+
const wrongValue = (() => {
|
|
733
|
+
{
|
|
734
|
+
const p = 'partial';
|
|
735
|
+
if (!hasProp(prerenderConfig, p, 'boolean') && !hasProp(prerenderConfig, p, 'undefined'))
|
|
736
|
+
return { prop: p, errMsg: 'should be a boolean' };
|
|
737
|
+
}
|
|
738
|
+
{
|
|
739
|
+
const p = 'noExtraDir';
|
|
740
|
+
if (!hasProp(prerenderConfig, p, 'boolean') && !hasProp(prerenderConfig, p, 'undefined'))
|
|
741
|
+
return { prop: p, errMsg: 'should be a boolean' };
|
|
742
|
+
}
|
|
743
|
+
{
|
|
744
|
+
const p = 'disableAutoRun';
|
|
745
|
+
if (!hasProp(prerenderConfig, p, 'boolean') && !hasProp(prerenderConfig, p, 'undefined'))
|
|
746
|
+
return { prop: p, errMsg: 'should be a boolean' };
|
|
747
|
+
}
|
|
748
|
+
{
|
|
749
|
+
const p = 'parallel';
|
|
750
|
+
if (!hasProp(prerenderConfig, p, 'boolean') &&
|
|
751
|
+
!hasProp(prerenderConfig, p, 'number') &&
|
|
752
|
+
!hasProp(prerenderConfig, p, 'undefined'))
|
|
753
|
+
return { prop: p, errMsg: 'should be a boolean or a number' };
|
|
754
|
+
}
|
|
755
|
+
})();
|
|
756
|
+
if (wrongValue) {
|
|
757
|
+
const { prop, errMsg } = wrongValue;
|
|
758
|
+
assertUsage(false, `Setting ${pc.cyan(`prerender.${prop}`)} ${errMsg}`);
|
|
759
|
+
}
|
|
760
|
+
}
|
|
@@ -13,4 +13,5 @@ export * from '../../utils/assertSetup.js';
|
|
|
13
13
|
export * from '../../utils/pLimit.js';
|
|
14
14
|
export * from '../../utils/isFilePathAbsoluteFilesystem.js';
|
|
15
15
|
export * from '../../utils/isArray.js';
|
|
16
|
+
export * from '../../utils/isObject.js';
|
|
16
17
|
export * from '../../utils/changeEnumerable.js';
|
|
@@ -15,4 +15,5 @@ export * from '../../utils/assertSetup.js';
|
|
|
15
15
|
export * from '../../utils/pLimit.js';
|
|
16
16
|
export * from '../../utils/isFilePathAbsoluteFilesystem.js';
|
|
17
17
|
export * from '../../utils/isArray.js';
|
|
18
|
+
export * from '../../utils/isObject.js';
|
|
18
19
|
export * from '../../utils/changeEnumerable.js';
|
|
@@ -12,40 +12,43 @@ export { setGlobalContext_viteConfig };
|
|
|
12
12
|
export { setGlobalContext_vikeConfig };
|
|
13
13
|
export { setGlobalContext_isViteDev };
|
|
14
14
|
export { setGlobalContext_isPrerendering };
|
|
15
|
+
export { setGlobalContext_buildEntry };
|
|
16
|
+
export { clearGlobalContext };
|
|
15
17
|
import type { ViteManifest } from '../shared/ViteManifest.js';
|
|
16
18
|
import type { ResolvedConfig, ViteDevServer } from 'vite';
|
|
17
|
-
import {
|
|
18
|
-
import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js';
|
|
19
|
+
import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
19
20
|
import { type RuntimeManifest } from '../shared/assertRuntimeManifest.js';
|
|
20
21
|
import type { VikeConfigObject } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
22
|
+
import type { ConfigUserFriendly } from '../../shared/page-configs/getPageConfigUserFriendly.js';
|
|
21
23
|
type GlobalContextPublic = {
|
|
22
24
|
assetsManifest: null | ViteManifest;
|
|
23
25
|
};
|
|
26
|
+
type PageRuntimeInfo = Awaited<ReturnType<typeof getPageRuntimeInfo>>['userFiles'];
|
|
24
27
|
type GlobalContext = {
|
|
25
28
|
baseServer: string;
|
|
26
29
|
baseAssets: null | string;
|
|
27
30
|
includeAssetsImportedByServer: boolean;
|
|
28
|
-
redirects: Record<string, string>;
|
|
29
31
|
trailingSlash: boolean;
|
|
30
32
|
disableUrlNormalization: boolean;
|
|
31
|
-
|
|
33
|
+
vikeConfig: {
|
|
34
|
+
global: ConfigUserFriendly;
|
|
35
|
+
};
|
|
36
|
+
} & PageRuntimeInfo & ({
|
|
32
37
|
isProduction: false;
|
|
33
38
|
isPrerendering: false;
|
|
34
39
|
viteConfig: ResolvedConfig;
|
|
35
|
-
vikeConfig: VikeConfigObject;
|
|
36
40
|
viteDevServer: ViteDevServer;
|
|
37
41
|
assetsManifest: null;
|
|
38
|
-
pluginManifest: null;
|
|
39
42
|
} | ({
|
|
40
43
|
isProduction: true;
|
|
41
44
|
assetsManifest: ViteManifest;
|
|
42
|
-
pluginManifest: PluginManifest;
|
|
43
45
|
viteDevServer: null;
|
|
44
46
|
} & ({
|
|
45
47
|
isPrerendering: false;
|
|
46
48
|
viteConfig: null;
|
|
47
49
|
} | {
|
|
48
50
|
isPrerendering: true;
|
|
51
|
+
usesClientRouter: boolean;
|
|
49
52
|
viteConfig: ResolvedConfig;
|
|
50
53
|
})));
|
|
51
54
|
declare function getGlobalContext(): GlobalContext;
|
|
@@ -63,4 +66,17 @@ declare function getViteConfig(): ResolvedConfig | null;
|
|
|
63
66
|
declare function initGlobalContext_renderPage(): Promise<void>;
|
|
64
67
|
declare function initGlobalContext_runPrerender(): Promise<void>;
|
|
65
68
|
declare function initGlobalContext_getGlobalContextAsync(isProduction: boolean): Promise<void>;
|
|
69
|
+
declare function getPageRuntimeInfo(isProduction: boolean): Promise<{
|
|
70
|
+
userFiles: {
|
|
71
|
+
pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
|
|
72
|
+
pageConfigs: import("../../__internal/index.js").PageConfig[];
|
|
73
|
+
pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
|
|
74
|
+
allPageIds: string[];
|
|
75
|
+
pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
|
|
76
|
+
onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
77
|
+
};
|
|
78
|
+
globalConfig: ConfigUserFriendly;
|
|
79
|
+
}>;
|
|
66
80
|
declare function getRuntimeManifest(vikeConfigGlobal: VikeConfigGlobal, viteConfig: ResolvedConfig): RuntimeManifest;
|
|
81
|
+
declare function setGlobalContext_buildEntry(buildEntry: unknown): void;
|
|
82
|
+
declare function clearGlobalContext(): void;
|
|
@@ -14,23 +14,26 @@ export { setGlobalContext_viteConfig };
|
|
|
14
14
|
export { setGlobalContext_vikeConfig };
|
|
15
15
|
export { setGlobalContext_isViteDev };
|
|
16
16
|
export { setGlobalContext_isPrerendering };
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import {
|
|
17
|
+
export { setGlobalContext_buildEntry };
|
|
18
|
+
export { clearGlobalContext };
|
|
19
|
+
import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, objectKeys, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger } from './utils.js';
|
|
20
|
+
import { importServerProductionEntry } from '@brillout/vite-plugin-server-entry/runtime';
|
|
21
|
+
import { virtualFileIdImportUserCodeServer } from '../shared/virtual-files/virtualFileImportUserCode.js';
|
|
22
|
+
import { getPageFilesAll, setPageFiles, setPageFilesAsync } from '../../shared/getPageFiles/getPageFiles.js';
|
|
20
23
|
import { assertPluginManifest } from '../shared/assertPluginManifest.js';
|
|
21
24
|
import { assertRuntimeManifest } from '../shared/assertRuntimeManifest.js';
|
|
22
25
|
import pc from '@brillout/picocolors';
|
|
23
|
-
import { getPageFilesExports } from './page-files/getPageFilesExports.js';
|
|
24
26
|
import { resolveBaseFromResolvedConfig } from '../shared/resolveBase.js';
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
};
|
|
31
|
-
})());
|
|
27
|
+
import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
|
|
28
|
+
import { assertV1Design } from '../shared/assertV1Design.js';
|
|
29
|
+
const debug = createDebugger('vike:globalContext');
|
|
30
|
+
const globalObject = getGlobalObject('globalContext.ts', getInitialGlobalContext());
|
|
31
|
+
initDevEntry();
|
|
32
32
|
function getGlobalContext() {
|
|
33
|
-
|
|
33
|
+
if (!globalObject.globalContext) {
|
|
34
|
+
debug('getGlobalContext()', new Error().stack);
|
|
35
|
+
assert(false);
|
|
36
|
+
}
|
|
34
37
|
return globalObject.globalContext;
|
|
35
38
|
}
|
|
36
39
|
/** @experimental https://vike.dev/getGlobalContext */
|
|
@@ -48,6 +51,7 @@ async function getGlobalContextAsync(isProduction) {
|
|
|
48
51
|
}
|
|
49
52
|
function makePublic(globalContext) {
|
|
50
53
|
const globalContextPublic = {
|
|
54
|
+
// TODO/now: add viteConfig and vikeConfig
|
|
51
55
|
assetsManifest: globalContext.assetsManifest
|
|
52
56
|
};
|
|
53
57
|
// Add internals (and prepended _ prefix to their keys)
|
|
@@ -109,9 +113,11 @@ function getViteConfig() {
|
|
|
109
113
|
return globalObject.viteConfig ?? null;
|
|
110
114
|
}
|
|
111
115
|
async function initGlobalContext_renderPage() {
|
|
116
|
+
debug('initGlobalContext_renderPage()');
|
|
112
117
|
await initGlobalContext(!globalObject.isViteDev);
|
|
113
118
|
}
|
|
114
119
|
async function initGlobalContext_runPrerender() {
|
|
120
|
+
debug('initGlobalContext_runPrerender()');
|
|
115
121
|
if (globalObject.initGlobalContext_runPrerender_alreadyCalled)
|
|
116
122
|
return;
|
|
117
123
|
globalObject.initGlobalContext_runPrerender_alreadyCalled = true;
|
|
@@ -125,6 +131,7 @@ async function initGlobalContext_runPrerender() {
|
|
|
125
131
|
await initGlobalContext(true);
|
|
126
132
|
}
|
|
127
133
|
async function initGlobalContext_getGlobalContextAsync(isProduction) {
|
|
134
|
+
debug('initGlobalContext_getGlobalContextAsync()');
|
|
128
135
|
if (!isProduction) {
|
|
129
136
|
const waitFor = 20;
|
|
130
137
|
const timeout = setTimeout(() => {
|
|
@@ -138,6 +145,7 @@ async function initGlobalContext_getGlobalContextAsync(isProduction) {
|
|
|
138
145
|
}
|
|
139
146
|
await initGlobalContext(isProduction);
|
|
140
147
|
}
|
|
148
|
+
// TODO/now: refactor: move this to the top of the file
|
|
141
149
|
async function initGlobalContext(isProduction) {
|
|
142
150
|
if (globalObject.globalContext) {
|
|
143
151
|
assert(globalObject.globalContext.isProduction === isProduction);
|
|
@@ -152,41 +160,45 @@ async function initGlobalContext(isProduction) {
|
|
|
152
160
|
assert(vikeConfig);
|
|
153
161
|
assert(viteDevServer);
|
|
154
162
|
assert(!isPrerendering);
|
|
155
|
-
const
|
|
156
|
-
const pluginManifest = getRuntimeManifest(vikeConfigGlobal, viteConfig);
|
|
163
|
+
const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
|
|
164
|
+
const pluginManifest = getRuntimeManifest(vikeConfig.vikeConfigGlobal, viteConfig);
|
|
157
165
|
globalObject.globalContext = {
|
|
158
166
|
isProduction: false,
|
|
159
167
|
isPrerendering: false,
|
|
160
168
|
assetsManifest: null,
|
|
161
|
-
pluginManifest: null,
|
|
162
169
|
viteDevServer,
|
|
163
170
|
viteConfig,
|
|
164
|
-
vikeConfig
|
|
171
|
+
vikeConfig: {
|
|
172
|
+
global: globalConfig
|
|
173
|
+
},
|
|
174
|
+
...userFiles,
|
|
165
175
|
baseServer: pluginManifest.baseServer,
|
|
166
176
|
baseAssets: pluginManifest.baseAssets,
|
|
167
177
|
includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
|
|
168
|
-
redirects: pluginManifest.redirects,
|
|
169
178
|
trailingSlash: pluginManifest.trailingSlash,
|
|
170
179
|
disableUrlNormalization: pluginManifest.disableUrlNormalization
|
|
171
180
|
};
|
|
172
181
|
}
|
|
173
182
|
else {
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
183
|
+
const buildEntry = await getBuildEntry(globalObject.outDirRoot, isPrerendering);
|
|
184
|
+
const { assetsManifest, pluginManifest } = buildEntry;
|
|
185
|
+
setPageFiles(buildEntry.pageFiles);
|
|
186
|
+
const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
|
|
178
187
|
assertViteManifest(assetsManifest);
|
|
179
188
|
assertPluginManifest(pluginManifest);
|
|
180
189
|
const globalContext = {
|
|
181
190
|
isProduction: true,
|
|
182
191
|
assetsManifest,
|
|
183
|
-
|
|
192
|
+
vikeConfig: {
|
|
193
|
+
global: globalConfig
|
|
194
|
+
},
|
|
195
|
+
...userFiles,
|
|
184
196
|
viteDevServer: null,
|
|
185
197
|
baseServer: pluginManifest.baseServer,
|
|
186
198
|
baseAssets: pluginManifest.baseAssets,
|
|
187
199
|
includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
|
|
188
|
-
redirects: pluginManifest.redirects,
|
|
189
200
|
trailingSlash: pluginManifest.trailingSlash,
|
|
201
|
+
usesClientRouter: pluginManifest.usesClientRouter,
|
|
190
202
|
disableUrlNormalization: pluginManifest.disableUrlNormalization
|
|
191
203
|
};
|
|
192
204
|
if (isPrerendering) {
|
|
@@ -206,29 +218,35 @@ async function initGlobalContext(isProduction) {
|
|
|
206
218
|
}
|
|
207
219
|
}
|
|
208
220
|
}
|
|
221
|
+
async function getPageRuntimeInfo(isProduction) {
|
|
222
|
+
const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal, globalConfig } = await getPageFilesAll(false, isProduction);
|
|
223
|
+
const { pageRoutes, onBeforeRouteHook } = await loadPageRoutes(pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds);
|
|
224
|
+
const userFiles = {
|
|
225
|
+
pageFilesAll,
|
|
226
|
+
pageConfigs,
|
|
227
|
+
pageConfigGlobal,
|
|
228
|
+
allPageIds,
|
|
229
|
+
pageRoutes,
|
|
230
|
+
onBeforeRouteHook
|
|
231
|
+
};
|
|
232
|
+
assertV1Design(
|
|
233
|
+
// pageConfigs is PageConfigRuntime[] but assertV1Design() requires PageConfigBuildTime[]
|
|
234
|
+
pageConfigs.length > 0, pageFilesAll);
|
|
235
|
+
return { userFiles, globalConfig };
|
|
236
|
+
}
|
|
209
237
|
function getRuntimeManifest(vikeConfigGlobal, viteConfig) {
|
|
210
|
-
const { includeAssetsImportedByServer,
|
|
238
|
+
const { includeAssetsImportedByServer, trailingSlash, disableUrlNormalization } = vikeConfigGlobal;
|
|
211
239
|
const { baseServer, baseAssets } = resolveBaseFromResolvedConfig(vikeConfigGlobal.baseServer, vikeConfigGlobal.baseAssets, viteConfig);
|
|
212
240
|
const manifest = {
|
|
213
241
|
baseServer,
|
|
214
242
|
baseAssets,
|
|
215
243
|
includeAssetsImportedByServer,
|
|
216
|
-
redirects,
|
|
217
244
|
trailingSlash,
|
|
218
245
|
disableUrlNormalization
|
|
219
246
|
};
|
|
220
247
|
assertRuntimeManifest(manifest);
|
|
221
248
|
return manifest;
|
|
222
249
|
}
|
|
223
|
-
function assertBuildEntries(buildEntries, isPreRendering) {
|
|
224
|
-
const errMsg = [
|
|
225
|
-
`You are tyring to run`,
|
|
226
|
-
isPreRendering ? 'pre-rendering' : 'the server for production',
|
|
227
|
-
`but your app isn't built yet. Run ${pc.cyan('$ vike build')} before `,
|
|
228
|
-
isPreRendering ? 'pre-rendering.' : 'running the server.'
|
|
229
|
-
].join(' ');
|
|
230
|
-
assertUsage(buildEntries, errMsg);
|
|
231
|
-
}
|
|
232
250
|
function assertViteManifest(manifest) {
|
|
233
251
|
assert(isPlainObject(manifest));
|
|
234
252
|
/* We should include these assertions but we don't as a workaround for PWA manifests: https://github.com/vikejs/vike/issues/769
|
|
@@ -247,3 +265,59 @@ function eagerlyLoadUserFiles() {
|
|
|
247
265
|
// We call it as early as possible here for better performance.
|
|
248
266
|
getPageFilesExports();
|
|
249
267
|
}
|
|
268
|
+
async function getBuildEntry(outDir, isPrerendering) {
|
|
269
|
+
debug('getBuildEntry()');
|
|
270
|
+
if (!globalObject.buildEntry) {
|
|
271
|
+
debug('importServerProductionEntry()');
|
|
272
|
+
// importServerProductionEntry() loads dist/server/entry.mjs which calls setGlobalContext_buildEntry()
|
|
273
|
+
await importServerProductionEntry({ outDir, doNotLoadServer: isPrerendering });
|
|
274
|
+
if (!globalObject.buildEntry) {
|
|
275
|
+
debug('globalObject.buildEntryPrevious');
|
|
276
|
+
// Needed, for example, when calling the API prerender() then preview() because both trigger a importServerProductionEntry() call but only the first only is applied because of the import() cache. (A proper implementation would be to clear the import() cache, but it probably isn't possible on platforms such as Cloudflare Workers.)
|
|
277
|
+
globalObject.buildEntry = globalObject.buildEntryPrevious;
|
|
278
|
+
}
|
|
279
|
+
assert(globalObject.buildEntry);
|
|
280
|
+
}
|
|
281
|
+
const { buildEntry } = globalObject;
|
|
282
|
+
assert(isObject(buildEntry));
|
|
283
|
+
assert(hasProp(buildEntry, 'pageFiles', 'object'));
|
|
284
|
+
assert(hasProp(buildEntry, 'assetsManifest', 'object'));
|
|
285
|
+
assert(hasProp(buildEntry, 'pluginManifest', 'object'));
|
|
286
|
+
return buildEntry;
|
|
287
|
+
}
|
|
288
|
+
function setGlobalContext_buildEntry(buildEntry) {
|
|
289
|
+
debug('setGlobalContext_buildEntry()');
|
|
290
|
+
globalObject.buildEntry = buildEntry;
|
|
291
|
+
globalObject.buildEntryPrevious = buildEntry;
|
|
292
|
+
}
|
|
293
|
+
function initDevEntry() {
|
|
294
|
+
setPageFilesAsync(getPageFilesExports);
|
|
295
|
+
}
|
|
296
|
+
async function getPageFilesExports() {
|
|
297
|
+
const viteDevServer = getViteDevServer();
|
|
298
|
+
assert(viteDevServer);
|
|
299
|
+
let moduleExports;
|
|
300
|
+
try {
|
|
301
|
+
moduleExports = await viteDevServer.ssrLoadModule(virtualFileIdImportUserCodeServer);
|
|
302
|
+
}
|
|
303
|
+
catch (err) {
|
|
304
|
+
debugGlob(`Glob error: ${virtualFileIdImportUserCodeServer} transpile error: `, err);
|
|
305
|
+
throw err;
|
|
306
|
+
}
|
|
307
|
+
moduleExports = moduleExports.default || moduleExports;
|
|
308
|
+
debugGlob('Glob result: ', moduleExports);
|
|
309
|
+
assert(isObject(moduleExports));
|
|
310
|
+
return moduleExports;
|
|
311
|
+
}
|
|
312
|
+
function clearGlobalContext() {
|
|
313
|
+
debug('clearGlobalContext()');
|
|
314
|
+
objectReplace(globalObject, getInitialGlobalContext(), ['buildEntryPrevious']);
|
|
315
|
+
}
|
|
316
|
+
function getInitialGlobalContext() {
|
|
317
|
+
debug('getInitialGlobalContext()');
|
|
318
|
+
const { promise: viteDevServerPromise, resolve: viteDevServerPromiseResolve } = genPromise();
|
|
319
|
+
return {
|
|
320
|
+
viteDevServerPromise,
|
|
321
|
+
viteDevServerPromiseResolve
|
|
322
|
+
};
|
|
323
|
+
}
|
|
@@ -5,7 +5,7 @@ import { sanitizeJson } from './sanitizeJson.js';
|
|
|
5
5
|
import { inferAssetTag, inferPreloadTag } from './inferHtmlTags.js';
|
|
6
6
|
import { mergeScriptTags } from './mergeScriptTags.js';
|
|
7
7
|
import { getPageConfig } from '../../../../shared/page-configs/helpers.js';
|
|
8
|
-
import { getConfigValueRuntime } from '../../../../shared/page-configs/
|
|
8
|
+
import { getConfigValueRuntime } from '../../../../shared/page-configs/getConfigValueRuntime.js';
|
|
9
9
|
import { getGlobalContext } from '../../globalContext.js';
|
|
10
10
|
import pc from '@brillout/picocolors';
|
|
11
11
|
import { getConfigDefinedAt } from '../../../../shared/page-configs/getConfigDefinedAt.js';
|
|
@@ -6,4 +6,3 @@ export { getGlobalContextSync, getGlobalContextAsync } from './globalContext.js'
|
|
|
6
6
|
export { createDevMiddleware } from '../runtime-dev/index.js';
|
|
7
7
|
export { injectAssets__public as _injectAssets } from './html/injectAssets/injectAssets__public.js';
|
|
8
8
|
export { createPageRenderer } from '../createPageRenderer.js';
|
|
9
|
-
import './page-files/setup.js';
|