vike 0.4.219 → 0.4.220-commit-9a798ce
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/api/build.js +23 -58
- package/dist/cjs/node/api/context.js +6 -8
- package/dist/cjs/node/api/prepareViteApiCall.js +6 -7
- package/dist/cjs/node/api/utils.js +1 -1
- package/dist/cjs/node/cli/context.js +16 -0
- package/dist/cjs/node/cli/entry.js +2 -0
- package/dist/cjs/node/cli/utils.js +1 -0
- package/dist/cjs/{utils → node/plugin}/getOutDirs.js +11 -11
- package/dist/cjs/node/plugin/index.js +1 -7
- package/dist/cjs/node/plugin/onLoad.js +6 -1
- package/dist/cjs/node/plugin/plugins/autoFullBuild.js +43 -31
- package/dist/cjs/node/plugin/plugins/baseUrls.js +2 -2
- package/dist/cjs/node/plugin/plugins/buildConfig.js +6 -3
- package/dist/cjs/node/plugin/plugins/buildEntry/index.js +24 -21
- package/dist/cjs/node/plugin/plugins/commonConfig.js +11 -8
- package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +4 -2
- package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +10 -7
- package/dist/cjs/node/plugin/plugins/importUserCode/index.js +3 -4
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/assertExtensions.js +10 -9
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +8 -3
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +158 -176
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +3 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +3 -2
- package/dist/cjs/node/plugin/plugins/previewConfig.js +3 -4
- package/dist/cjs/node/plugin/utils.js +1 -1
- package/dist/cjs/node/prerender/context.js +26 -0
- package/dist/cjs/node/prerender/resolvePrerenderConfig.js +25 -0
- package/dist/cjs/node/prerender/runPrerender.js +64 -37
- package/dist/cjs/node/prerender/utils.js +3 -2
- package/dist/cjs/node/runtime/globalContext.js +44 -58
- package/dist/cjs/node/runtime/page-files/setup.js +1 -1
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +6 -3
- package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +6 -5
- package/dist/cjs/node/runtime/renderPage.js +10 -5
- package/dist/cjs/node/runtime/utils.js +3 -2
- package/dist/cjs/node/shared/resolveBase.js +9 -0
- package/dist/cjs/shared/page-configs/getPageConfigUserFriendly.js +2 -2
- package/dist/cjs/shared/page-configs/loadConfigValues.js +5 -1
- package/dist/cjs/shared/utils.js +1 -1
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/assertSetup.js +15 -1
- package/dist/cjs/utils/catchInfiniteLoop.js +34 -0
- package/dist/cjs/utils/findFile.js +3 -3
- package/dist/cjs/utils/isDev.js +4 -1
- package/dist/cjs/utils/isFilePathAbsoluteFilesystem.js +2 -2
- package/dist/cjs/utils/makePublicCopy.js +32 -0
- package/dist/cjs/utils/requireResolve.js +3 -3
- package/dist/esm/client/client-routing-runtime/history.d.ts +3 -1
- package/dist/esm/client/client-routing-runtime/history.js +23 -18
- package/dist/esm/client/client-routing-runtime/index.d.ts +0 -1
- package/dist/esm/client/client-routing-runtime/index.js +0 -1
- package/dist/esm/client/client-routing-runtime/initClientRouter.js +2 -2
- package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +3 -4
- package/dist/esm/client/client-routing-runtime/initOnPopState.d.ts +0 -10
- package/dist/esm/client/client-routing-runtime/initOnPopState.js +50 -62
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +15 -15
- package/dist/esm/client/client-routing-runtime/scrollRestoration.d.ts +4 -6
- package/dist/esm/client/client-routing-runtime/scrollRestoration.js +17 -12
- package/dist/esm/client/client-routing-runtime/setScrollPosition.d.ts +1 -1
- package/dist/esm/client/client-routing-runtime/setScrollPosition.js +29 -5
- package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
- package/dist/esm/client/client-routing-runtime/utils.js +1 -0
- package/dist/esm/client/shared/normalizeClientSideUrl.js +2 -3
- package/dist/esm/node/api/build.d.ts +1 -6
- package/dist/esm/node/api/build.js +20 -25
- package/dist/esm/node/api/context.d.ts +4 -4
- package/dist/esm/node/api/context.js +6 -9
- package/dist/esm/node/api/prepareViteApiCall.d.ts +0 -1
- package/dist/esm/node/api/prepareViteApiCall.js +7 -8
- package/dist/esm/node/api/utils.d.ts +1 -1
- package/dist/esm/node/api/utils.js +1 -1
- package/dist/esm/node/cli/context.d.ts +5 -0
- package/dist/esm/node/cli/context.js +14 -0
- package/dist/esm/node/cli/entry.js +2 -0
- package/dist/esm/node/cli/parseCli.d.ts +3 -1
- package/dist/esm/node/cli/utils.d.ts +1 -0
- package/dist/esm/node/cli/utils.js +1 -0
- package/dist/esm/{utils → node/plugin}/getOutDirs.js +5 -5
- package/dist/esm/node/plugin/index.d.ts +29 -1
- package/dist/esm/node/plugin/index.js +2 -8
- package/dist/esm/node/plugin/onLoad.js +7 -2
- package/dist/esm/node/plugin/plugins/autoFullBuild.js +43 -31
- package/dist/esm/node/plugin/plugins/baseUrls.js +2 -2
- package/dist/esm/node/plugin/plugins/buildConfig.js +7 -4
- package/dist/esm/node/plugin/plugins/buildEntry/index.d.ts +3 -3
- package/dist/esm/node/plugin/plugins/buildEntry/index.js +25 -22
- package/dist/esm/node/plugin/plugins/commonConfig.d.ts +8 -2
- package/dist/esm/node/plugin/plugins/commonConfig.js +9 -6
- package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +4 -2
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.d.ts +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +10 -7
- package/dist/esm/node/plugin/plugins/importUserCode/index.js +3 -4
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/assertExtensions.d.ts +3 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/assertExtensions.js +10 -9
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +8 -3
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +2 -95
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +159 -177
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +3 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +3 -2
- package/dist/esm/node/plugin/plugins/previewConfig.js +3 -4
- package/dist/esm/node/plugin/utils.js +1 -1
- package/dist/esm/node/prerender/context.d.ts +9 -0
- package/dist/esm/node/prerender/context.js +24 -0
- package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +5 -0
- package/dist/esm/node/prerender/resolvePrerenderConfig.js +23 -0
- package/dist/esm/node/prerender/runPrerender.d.ts +42 -1
- package/dist/esm/node/prerender/runPrerender.js +65 -38
- package/dist/esm/node/prerender/utils.d.ts +3 -2
- package/dist/esm/node/prerender/utils.js +3 -2
- package/dist/esm/node/runtime/globalContext.d.ts +15 -9
- package/dist/esm/node/runtime/globalContext.js +45 -59
- package/dist/esm/node/runtime/page-files/setup.js +1 -1
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +5 -5
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +6 -3
- package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +2 -0
- package/dist/esm/node/runtime/renderPage/resolveRedirects.js +5 -5
- package/dist/esm/node/runtime/renderPage.js +10 -5
- package/dist/esm/node/runtime/utils.d.ts +3 -2
- package/dist/esm/node/runtime/utils.js +3 -2
- package/dist/esm/node/shared/resolveBase.d.ts +4 -1
- package/dist/esm/node/shared/resolveBase.js +9 -0
- package/dist/esm/shared/page-configs/Config.d.ts +76 -3
- package/dist/esm/shared/page-configs/PageConfig.d.ts +25 -16
- package/dist/esm/shared/page-configs/getPageConfigUserFriendly.d.ts +1 -1
- package/dist/esm/shared/page-configs/getPageConfigUserFriendly.js +2 -2
- package/dist/esm/shared/page-configs/loadConfigValues.js +6 -2
- package/dist/esm/shared/utils.d.ts +1 -1
- package/dist/esm/shared/utils.js +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/assertSetup.js +15 -1
- package/dist/esm/utils/catchInfiniteLoop.d.ts +2 -0
- package/dist/esm/utils/catchInfiniteLoop.js +32 -0
- package/dist/esm/utils/findFile.js +1 -1
- package/dist/esm/utils/isDev.js +4 -1
- package/dist/esm/utils/isFilePathAbsoluteFilesystem.js +1 -1
- package/dist/esm/utils/makePublicCopy.d.ts +3 -0
- package/dist/esm/utils/makePublicCopy.js +30 -0
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/dist/esm/utils/requireResolve.js +1 -1
- package/package.json +1 -1
- package/dist/cjs/node/plugin/plugins/buildEntry/getVikeManifest.js +0 -17
- package/dist/cjs/node/prerender/isPrerenderAutoRunEnabled.js +0 -16
- package/dist/cjs/node/shared/assertPluginManifest.js +0 -20
- package/dist/cjs/node/shared/assertRuntimeManifest.js +0 -16
- package/dist/esm/node/plugin/plugins/buildEntry/getVikeManifest.d.ts +0 -5
- package/dist/esm/node/plugin/plugins/buildEntry/getVikeManifest.js +0 -15
- package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.d.ts +0 -5
- package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.js +0 -14
- package/dist/esm/node/shared/assertPluginManifest.d.ts +0 -12
- package/dist/esm/node/shared/assertPluginManifest.js +0 -18
- package/dist/esm/node/shared/assertRuntimeManifest.d.ts +0 -10
- package/dist/esm/node/shared/assertRuntimeManifest.js +0 -14
- /package/dist/cjs/utils/{filesystemPathHandling.js → toPosixPath.js} +0 -0
- /package/dist/esm/{utils → node/plugin}/getOutDirs.d.ts +0 -0
- /package/dist/esm/utils/{filesystemPathHandling.d.ts → toPosixPath.d.ts} +0 -0
- /package/dist/esm/utils/{filesystemPathHandling.js → toPosixPath.js} +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export { resolvePrerenderConfig };
|
|
2
|
+
// TODO/now:
|
|
3
|
+
// - prerender.value
|
|
4
|
+
// - correct isPrerendering
|
|
5
|
+
function resolvePrerenderConfig(prerenderConfigs) {
|
|
6
|
+
if (!prerenderConfigs || prerenderConfigs.every((configVal) => !configVal)) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
const prerenderSettings = prerenderConfigs.filter(isObject2);
|
|
10
|
+
const prerenderConfig = {
|
|
11
|
+
partial: pickFirst(prerenderSettings.map((c) => c.partial)) ?? false,
|
|
12
|
+
noExtraDir: pickFirst(prerenderSettings.map((c) => c.noExtraDir)) ?? false,
|
|
13
|
+
parallel: pickFirst(prerenderSettings.map((c) => c.parallel)) ?? true,
|
|
14
|
+
disableAutoRun: pickFirst(prerenderSettings.map((c) => c.disableAutoRun)) ?? false
|
|
15
|
+
};
|
|
16
|
+
return prerenderConfig;
|
|
17
|
+
}
|
|
18
|
+
function isObject2(p) {
|
|
19
|
+
return typeof p === 'object';
|
|
20
|
+
}
|
|
21
|
+
function pickFirst(arr) {
|
|
22
|
+
return arr.filter((v) => v !== undefined)[0];
|
|
23
|
+
}
|
|
@@ -3,8 +3,47 @@ export { runPrerenderFromCLIPrerenderCommand };
|
|
|
3
3
|
export { runPrerenderFromAutoRun };
|
|
4
4
|
export { runPrerender_forceExit };
|
|
5
5
|
export type { PrerenderOptions };
|
|
6
|
+
export type { PrerenderContextPublic };
|
|
7
|
+
import { PageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
|
|
6
8
|
import type { InlineConfig, ResolvedConfig } from 'vite';
|
|
9
|
+
import { PageContextUrlInternal } from '../../shared/getPageContextUrlComputed.js';
|
|
7
10
|
import type { APIOptions } from '../api/types.js';
|
|
11
|
+
type ProvidedByHook = null | {
|
|
12
|
+
hookFilePath: string;
|
|
13
|
+
hookName: 'onBeforePrerenderStart' | 'prerender';
|
|
14
|
+
};
|
|
15
|
+
type TransformerHook = {
|
|
16
|
+
hookFilePath: string;
|
|
17
|
+
hookName: 'onPrerenderStart' | 'onBeforePrerender';
|
|
18
|
+
};
|
|
19
|
+
type PageContextPrerendered = {
|
|
20
|
+
urlOriginal: string;
|
|
21
|
+
_providedByHook?: ProvidedByHook;
|
|
22
|
+
};
|
|
23
|
+
type PrerenderedPageContexts = Record<string, PageContextPrerendered>;
|
|
24
|
+
type PrerenderContext = {
|
|
25
|
+
pageContexts: PageContext[];
|
|
26
|
+
pageContextInit: Record<string, unknown> | null;
|
|
27
|
+
noExtraDir: boolean;
|
|
28
|
+
prerenderedPageContexts: PrerenderedPageContexts;
|
|
29
|
+
output: Output;
|
|
30
|
+
};
|
|
31
|
+
type Output = {
|
|
32
|
+
filePath: string;
|
|
33
|
+
fileType: FileType;
|
|
34
|
+
fileContent: string;
|
|
35
|
+
pageContext: PageContextPrerendered;
|
|
36
|
+
}[];
|
|
37
|
+
type FileType = 'HTML' | 'JSON';
|
|
38
|
+
type PrerenderContextPublic = Pick<PrerenderContext, 'pageContexts'>;
|
|
39
|
+
type PageContext = PageContextInitEnhanced & {
|
|
40
|
+
_urlRewrite: null;
|
|
41
|
+
_urlHandler: null;
|
|
42
|
+
_urlOriginalBeforeHook?: string;
|
|
43
|
+
_urlOriginalModifiedByHook?: TransformerHook;
|
|
44
|
+
_providedByHook: ProvidedByHook;
|
|
45
|
+
_pageContextAlreadyProvidedByOnPrerenderHook?: true;
|
|
46
|
+
} & PageContextUrlInternal;
|
|
8
47
|
type PrerenderOptions = APIOptions & {
|
|
9
48
|
/** Initial `pageContext` values */
|
|
10
49
|
pageContextInit?: Record<string, unknown>;
|
|
@@ -29,5 +68,7 @@ declare function runPrerenderFromAPI(options?: PrerenderOptions): Promise<{
|
|
|
29
68
|
viteConfig: ResolvedConfig;
|
|
30
69
|
}>;
|
|
31
70
|
declare function runPrerenderFromCLIPrerenderCommand(): Promise<void>;
|
|
32
|
-
declare function runPrerenderFromAutoRun(viteConfig: InlineConfig | undefined): Promise<
|
|
71
|
+
declare function runPrerenderFromAutoRun(viteConfig: InlineConfig | undefined): Promise<{
|
|
72
|
+
prerenderContextPublic: PrerenderContextPublic;
|
|
73
|
+
}>;
|
|
33
74
|
declare function runPrerender_forceExit(): void;
|
|
@@ -4,7 +4,7 @@ export { runPrerenderFromAutoRun };
|
|
|
4
4
|
export { runPrerender_forceExit };
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import { route } from '../../shared/route/index.js';
|
|
7
|
-
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender, isObject } from './utils.js';
|
|
7
|
+
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender, isObject, makePublicCopy } from './utils.js';
|
|
8
8
|
import { prerenderPage, prerender404Page, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
|
|
9
9
|
import pc from '@brillout/picocolors';
|
|
10
10
|
import { cpus } from 'os';
|
|
@@ -27,6 +27,8 @@ import { logErrorHint } from '../runtime/renderPage/logErrorHint.js';
|
|
|
27
27
|
import { executeHook, isUserHookError } from '../../shared/hooks/executeHook.js';
|
|
28
28
|
import { getConfigValueBuildTime } from '../../shared/page-configs/getConfigValueBuildTime.js';
|
|
29
29
|
import { prepareViteApiCall } from '../api/prepareViteApiCall.js';
|
|
30
|
+
import { setContextIsPrerendering } from './context.js';
|
|
31
|
+
import { resolvePrerenderConfig } from './resolvePrerenderConfig.js';
|
|
30
32
|
async function runPrerenderFromAPI(options = {}) {
|
|
31
33
|
return await runPrerender(options, 'prerender()');
|
|
32
34
|
// - We purposely propagate the error to the user land, so that the error interrupts the user land. It's also, I guess, a nice-to-have that the user has control over the error.
|
|
@@ -46,16 +48,20 @@ async function runPrerenderFromCLIPrerenderCommand() {
|
|
|
46
48
|
runPrerender_forceExit();
|
|
47
49
|
}
|
|
48
50
|
async function runPrerenderFromAutoRun(viteConfig) {
|
|
51
|
+
let prerenderContextPublic;
|
|
49
52
|
try {
|
|
50
|
-
await runPrerender({ viteConfig });
|
|
53
|
+
const ret = await runPrerender({ viteConfig });
|
|
54
|
+
prerenderContextPublic = ret.prerenderContextPublic;
|
|
51
55
|
}
|
|
52
56
|
catch (err) {
|
|
53
57
|
console.error(err);
|
|
54
58
|
logErrorHint(err);
|
|
55
59
|
process.exit(1);
|
|
56
60
|
}
|
|
61
|
+
return { prerenderContextPublic };
|
|
57
62
|
}
|
|
58
63
|
async function runPrerender(options = {}, standaloneTrigger) {
|
|
64
|
+
setContextIsPrerendering();
|
|
59
65
|
checkOutdatedOptions(options);
|
|
60
66
|
onSetupPrerender();
|
|
61
67
|
setGlobalContext_isPrerendering();
|
|
@@ -69,7 +75,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
69
75
|
const vikeConfig = await getVikeConfig(viteConfig);
|
|
70
76
|
const { outDirClient } = getOutDirs(viteConfig);
|
|
71
77
|
const { root } = viteConfig;
|
|
72
|
-
const prerenderConfig = vikeConfig.
|
|
78
|
+
const prerenderConfig = resolvePrerenderConfig(vikeConfig.global.config.prerender);
|
|
73
79
|
validatePrerenderConfig(prerenderConfig);
|
|
74
80
|
if (!prerenderConfig) {
|
|
75
81
|
assert(standaloneTrigger);
|
|
@@ -82,43 +88,48 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
82
88
|
await initGlobalContext_runPrerender();
|
|
83
89
|
const globalContext = getGlobalContext();
|
|
84
90
|
globalContext.pageFilesAll.forEach(assertExportNames);
|
|
85
|
-
const prerenderContext = {
|
|
86
|
-
|
|
87
|
-
_urlHandler: null,
|
|
88
|
-
_noExtraDir: noExtraDir ?? false,
|
|
91
|
+
const prerenderContext = {
|
|
92
|
+
noExtraDir: noExtraDir ?? false,
|
|
89
93
|
pageContexts: [],
|
|
90
|
-
pageContextInit: options.pageContextInit ?? null
|
|
91
|
-
|
|
94
|
+
pageContextInit: options.pageContextInit ?? null,
|
|
95
|
+
prerenderedPageContexts: {},
|
|
96
|
+
output: []
|
|
97
|
+
};
|
|
92
98
|
const doNotPrerenderList = [];
|
|
93
99
|
await collectDoNoPrerenderList(vikeConfig.pageConfigs, doNotPrerenderList, concurrencyLimit);
|
|
94
100
|
await callOnBeforePrerenderStartHooks(prerenderContext, concurrencyLimit, doNotPrerenderList);
|
|
95
101
|
await handlePagesWithStaticRoutes(prerenderContext, doNotPrerenderList, concurrencyLimit);
|
|
96
102
|
await callOnPrerenderStartHook(prerenderContext);
|
|
97
|
-
const prerenderedPageContexts = {};
|
|
98
103
|
let prerenderedCount = 0;
|
|
104
|
+
// Write files as soon as pages finish rendering (instead of writing all files at once only after all pages have rendered).
|
|
99
105
|
const onComplete = async (htmlFile) => {
|
|
100
106
|
prerenderedCount++;
|
|
101
107
|
if (htmlFile.pageId) {
|
|
102
|
-
prerenderedPageContexts[htmlFile.pageId] = htmlFile.pageContext;
|
|
108
|
+
prerenderContext.prerenderedPageContexts[htmlFile.pageId] = htmlFile.pageContext;
|
|
103
109
|
}
|
|
104
|
-
await writeFiles(htmlFile, root, outDirClient, options.onPagePrerender, logLevel);
|
|
110
|
+
await writeFiles(htmlFile, root, outDirClient, options.onPagePrerender, prerenderContext.output, logLevel);
|
|
105
111
|
};
|
|
106
112
|
await routeAndPrerender(prerenderContext, concurrencyLimit, onComplete);
|
|
107
|
-
warnContradictoryNoPrerenderList(prerenderedPageContexts, doNotPrerenderList);
|
|
108
|
-
await prerender404(
|
|
113
|
+
warnContradictoryNoPrerenderList(prerenderContext.prerenderedPageContexts, doNotPrerenderList);
|
|
114
|
+
await prerender404(prerenderContext, onComplete);
|
|
109
115
|
if (logLevel === 'info') {
|
|
110
116
|
console.log(`${pc.green(`✓`)} ${prerenderedCount} HTML documents pre-rendered.`);
|
|
111
117
|
}
|
|
112
|
-
warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial);
|
|
113
|
-
|
|
118
|
+
warnMissingPages(prerenderContext.prerenderedPageContexts, doNotPrerenderList, partial);
|
|
119
|
+
const prerenderContextPublic = makePublic(prerenderContext);
|
|
120
|
+
return { viteConfig, prerenderContextPublic };
|
|
114
121
|
}
|
|
115
122
|
async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, concurrencyLimit) {
|
|
116
123
|
// V1 design
|
|
117
124
|
pageConfigs.forEach((pageConfig) => {
|
|
118
125
|
const configName = 'prerender';
|
|
119
|
-
const configValue = getConfigValueBuildTime(pageConfig, configName
|
|
120
|
-
if (configValue
|
|
121
|
-
|
|
126
|
+
const configValue = getConfigValueBuildTime(pageConfig, configName);
|
|
127
|
+
if (!configValue)
|
|
128
|
+
return;
|
|
129
|
+
assert(hasProp(configValue, 'value', 'array'));
|
|
130
|
+
if (configValue.value[0] === false) {
|
|
131
|
+
assert(isArray(configValue.definedAtData));
|
|
132
|
+
const configValueFilePathToShowToUser = getConfigValueFilePathToShowToUser(configValue.definedAtData[0]);
|
|
122
133
|
assert(configValueFilePathToShowToUser);
|
|
123
134
|
doNotPrerenderList.push({
|
|
124
135
|
pageId: pageConfig.pageId,
|
|
@@ -301,7 +312,7 @@ function createPageContext(urlOriginal, prerenderContext) {
|
|
|
301
312
|
const pageContext = {
|
|
302
313
|
_urlHandler: null,
|
|
303
314
|
_urlRewrite: null,
|
|
304
|
-
_noExtraDir: prerenderContext.
|
|
315
|
+
_noExtraDir: prerenderContext.noExtraDir,
|
|
305
316
|
_prerenderContext: prerenderContext
|
|
306
317
|
};
|
|
307
318
|
const pageContextInit = {
|
|
@@ -387,17 +398,20 @@ async function callOnPrerenderStartHook(prerenderContext) {
|
|
|
387
398
|
const docLink = 'https://vike.dev/i18n#pre-rendering';
|
|
388
399
|
// Set `enumerable` to `false` to avoid computed URL properties from being iterated & copied in onPrerenderStart() hook, e.g. /examples/i18n/
|
|
389
400
|
const { restoreEnumerable, addPageContextComputedUrl } = makePageContextComputedUrlNonEnumerable(prerenderContext.pageContexts);
|
|
390
|
-
let result = await executeHook(() =>
|
|
391
|
-
|
|
401
|
+
let result = await executeHook(() => {
|
|
402
|
+
const prerenderContextPublic = makePublic(prerenderContext);
|
|
392
403
|
// TODO/v1-release: remove warning
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
404
|
+
Object.defineProperty(prerenderContextPublic, 'prerenderPageContexts', {
|
|
405
|
+
get() {
|
|
406
|
+
assertWarning(false, `prerenderPageContexts has been renamed pageContexts, see ${docLink}`, {
|
|
407
|
+
showStackTrace: true,
|
|
408
|
+
onlyOnce: true
|
|
409
|
+
});
|
|
410
|
+
return prerenderContext.pageContexts;
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
return hookFn(prerenderContextPublic);
|
|
414
|
+
}, onPrerenderStartHook, null);
|
|
401
415
|
restoreEnumerable();
|
|
402
416
|
if (result === null || result === undefined) {
|
|
403
417
|
return;
|
|
@@ -504,7 +518,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
|
|
|
504
518
|
pageContext,
|
|
505
519
|
htmlString: documentHtml,
|
|
506
520
|
pageContextSerialized,
|
|
507
|
-
doNotCreateExtraDirectory: prerenderContext.
|
|
521
|
+
doNotCreateExtraDirectory: prerenderContext.noExtraDir,
|
|
508
522
|
pageId
|
|
509
523
|
});
|
|
510
524
|
})));
|
|
@@ -539,8 +553,8 @@ function warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial)
|
|
|
539
553
|
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 });
|
|
540
554
|
});
|
|
541
555
|
}
|
|
542
|
-
async function prerender404(
|
|
543
|
-
if (!Object.values(prerenderedPageContexts).find(({ urlOriginal }) => urlOriginal === '/404')) {
|
|
556
|
+
async function prerender404(prerenderContext, onComplete) {
|
|
557
|
+
if (!Object.values(prerenderContext.prerenderedPageContexts).find(({ urlOriginal }) => urlOriginal === '/404')) {
|
|
544
558
|
let result;
|
|
545
559
|
try {
|
|
546
560
|
result = await prerender404Page(prerenderContext.pageContextInit);
|
|
@@ -563,22 +577,23 @@ async function prerender404(prerenderedPageContexts, prerenderContext, onComplet
|
|
|
563
577
|
}
|
|
564
578
|
}
|
|
565
579
|
}
|
|
566
|
-
async function writeFiles({ urlOriginal, pageContext, htmlString, pageContextSerialized, doNotCreateExtraDirectory }, root, outDirClient, onPagePrerender, logLevel) {
|
|
580
|
+
async function writeFiles({ urlOriginal, pageContext, htmlString, pageContextSerialized, doNotCreateExtraDirectory }, root, outDirClient, onPagePrerender, output, logLevel) {
|
|
567
581
|
assert(urlOriginal.startsWith('/'));
|
|
568
582
|
const writeJobs = [
|
|
569
|
-
write(urlOriginal, pageContext, '
|
|
583
|
+
write(urlOriginal, pageContext, 'HTML', htmlString, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, output, logLevel)
|
|
570
584
|
];
|
|
571
585
|
if (pageContextSerialized !== null) {
|
|
572
|
-
writeJobs.push(write(urlOriginal, pageContext, '
|
|
586
|
+
writeJobs.push(write(urlOriginal, pageContext, 'JSON', pageContextSerialized, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, output, logLevel));
|
|
573
587
|
}
|
|
574
588
|
await Promise.all(writeJobs);
|
|
575
589
|
}
|
|
576
|
-
async function write(urlOriginal, pageContext,
|
|
590
|
+
async function write(urlOriginal, pageContext, fileType, fileContent, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, output, logLevel) {
|
|
577
591
|
let fileUrl;
|
|
578
|
-
if (
|
|
592
|
+
if (fileType === 'HTML') {
|
|
579
593
|
fileUrl = urlToFile(urlOriginal, '.html', doNotCreateExtraDirectory);
|
|
580
594
|
}
|
|
581
595
|
else {
|
|
596
|
+
assert(fileType === 'JSON');
|
|
582
597
|
fileUrl = getPageContextRequestUrl(urlOriginal);
|
|
583
598
|
}
|
|
584
599
|
assertPosixPath(fileUrl);
|
|
@@ -590,6 +605,12 @@ async function write(urlOriginal, pageContext, fileExtension, fileContent, root,
|
|
|
590
605
|
assertPosixPath(outDirClient);
|
|
591
606
|
assertPosixPath(filePathRelative);
|
|
592
607
|
const filePath = path.posix.join(outDirClient, filePathRelative);
|
|
608
|
+
output.push({
|
|
609
|
+
filePath,
|
|
610
|
+
fileType,
|
|
611
|
+
fileContent,
|
|
612
|
+
pageContext
|
|
613
|
+
});
|
|
593
614
|
if (onPagePrerender) {
|
|
594
615
|
const prerenderPageContext = {};
|
|
595
616
|
objectAssign(prerenderPageContext, pageContext);
|
|
@@ -758,3 +779,9 @@ prerenderConfig) {
|
|
|
758
779
|
assertUsage(false, `Setting ${pc.cyan(`prerender.${prop}`)} ${errMsg}`);
|
|
759
780
|
}
|
|
760
781
|
}
|
|
782
|
+
function makePublic(prerenderContext) {
|
|
783
|
+
const prerenderContextPublic = makePublicCopy(prerenderContext, 'prerenderContext', [
|
|
784
|
+
'pageContexts'
|
|
785
|
+
]);
|
|
786
|
+
return prerenderContextPublic;
|
|
787
|
+
}
|
|
@@ -4,9 +4,9 @@ export * from '../../utils/projectInfo.js';
|
|
|
4
4
|
export * from '../../utils/objectAssign.js';
|
|
5
5
|
export * from '../../utils/isObjectWithKeys.js';
|
|
6
6
|
export * from '../../utils/isCallable.js';
|
|
7
|
-
export * from '
|
|
7
|
+
export * from '../plugin/getOutDirs.js';
|
|
8
8
|
export * from '../../utils/isPropertyGetter.js';
|
|
9
|
-
export * from '../../utils/
|
|
9
|
+
export * from '../../utils/toPosixPath.js';
|
|
10
10
|
export * from '../../utils/urlToFile.js';
|
|
11
11
|
export * from '../../utils/isPlainObject.js';
|
|
12
12
|
export * from '../../utils/assertSetup.js';
|
|
@@ -15,3 +15,4 @@ export * from '../../utils/isFilePathAbsoluteFilesystem.js';
|
|
|
15
15
|
export * from '../../utils/isArray.js';
|
|
16
16
|
export * from '../../utils/isObject.js';
|
|
17
17
|
export * from '../../utils/changeEnumerable.js';
|
|
18
|
+
export * from '../../utils/makePublicCopy.js';
|
|
@@ -6,9 +6,9 @@ export * from '../../utils/projectInfo.js';
|
|
|
6
6
|
export * from '../../utils/objectAssign.js';
|
|
7
7
|
export * from '../../utils/isObjectWithKeys.js';
|
|
8
8
|
export * from '../../utils/isCallable.js';
|
|
9
|
-
export * from '
|
|
9
|
+
export * from '../plugin/getOutDirs.js';
|
|
10
10
|
export * from '../../utils/isPropertyGetter.js';
|
|
11
|
-
export * from '../../utils/
|
|
11
|
+
export * from '../../utils/toPosixPath.js';
|
|
12
12
|
export * from '../../utils/urlToFile.js';
|
|
13
13
|
export * from '../../utils/isPlainObject.js';
|
|
14
14
|
export * from '../../utils/assertSetup.js';
|
|
@@ -17,3 +17,4 @@ export * from '../../utils/isFilePathAbsoluteFilesystem.js';
|
|
|
17
17
|
export * from '../../utils/isArray.js';
|
|
18
18
|
export * from '../../utils/isObject.js';
|
|
19
19
|
export * from '../../utils/changeEnumerable.js';
|
|
20
|
+
export * from '../../utils/makePublicCopy.js';
|
|
@@ -3,7 +3,6 @@ export { getGlobalContextAsync };
|
|
|
3
3
|
export { getGlobalContext };
|
|
4
4
|
export { getViteDevServer };
|
|
5
5
|
export { getViteConfig };
|
|
6
|
-
export { getRuntimeManifest };
|
|
7
6
|
export { initGlobalContext_renderPage };
|
|
8
7
|
export { initGlobalContext_runPrerender };
|
|
9
8
|
export { initGlobalContext_getGlobalContextAsync };
|
|
@@ -14,10 +13,11 @@ export { setGlobalContext_isViteDev };
|
|
|
14
13
|
export { setGlobalContext_isPrerendering };
|
|
15
14
|
export { setGlobalContext_buildEntry };
|
|
16
15
|
export { clearGlobalContext };
|
|
16
|
+
export { assertBuildInfo };
|
|
17
|
+
export { getViteConfigRuntime };
|
|
18
|
+
export type { BuildInfo };
|
|
17
19
|
import type { ViteManifest } from '../shared/ViteManifest.js';
|
|
18
20
|
import type { ResolvedConfig, ViteDevServer } from 'vite';
|
|
19
|
-
import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
20
|
-
import { type RuntimeManifest } from '../shared/assertRuntimeManifest.js';
|
|
21
21
|
import type { VikeConfigObject } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
22
22
|
import type { ConfigUserFriendly } from '../../shared/page-configs/getPageConfigUserFriendly.js';
|
|
23
23
|
type GlobalContextPublic = {
|
|
@@ -25,11 +25,9 @@ type GlobalContextPublic = {
|
|
|
25
25
|
};
|
|
26
26
|
type PageRuntimeInfo = Awaited<ReturnType<typeof getPageRuntimeInfo>>['userFiles'];
|
|
27
27
|
type GlobalContext = {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
trailingSlash: boolean;
|
|
32
|
-
disableUrlNormalization: boolean;
|
|
28
|
+
viteConfigRuntime: {
|
|
29
|
+
_baseViteOriginal: null | string;
|
|
30
|
+
};
|
|
33
31
|
vikeConfig: {
|
|
34
32
|
global: ConfigUserFriendly;
|
|
35
33
|
};
|
|
@@ -77,6 +75,14 @@ declare function getPageRuntimeInfo(isProduction: boolean): Promise<{
|
|
|
77
75
|
};
|
|
78
76
|
globalConfig: ConfigUserFriendly;
|
|
79
77
|
}>;
|
|
80
|
-
declare function getRuntimeManifest(vikeConfigGlobal: VikeConfigGlobal, viteConfig: ResolvedConfig): RuntimeManifest;
|
|
81
78
|
declare function setGlobalContext_buildEntry(buildEntry: unknown): void;
|
|
79
|
+
type BuildInfo = {
|
|
80
|
+
versionAtBuildTime: string;
|
|
81
|
+
usesClientRouter: boolean;
|
|
82
|
+
viteConfigRuntime: {
|
|
83
|
+
_baseViteOriginal: string;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
declare function assertBuildInfo(buildInfo: unknown): asserts buildInfo is BuildInfo;
|
|
87
|
+
declare function getViteConfigRuntime(viteConfig: ResolvedConfig): BuildInfo['viteConfigRuntime'];
|
|
82
88
|
declare function clearGlobalContext(): void;
|
|
@@ -5,7 +5,6 @@ export { getGlobalContextAsync };
|
|
|
5
5
|
export { getGlobalContext };
|
|
6
6
|
export { getViteDevServer };
|
|
7
7
|
export { getViteConfig };
|
|
8
|
-
export { getRuntimeManifest };
|
|
9
8
|
export { initGlobalContext_renderPage };
|
|
10
9
|
export { initGlobalContext_runPrerender };
|
|
11
10
|
export { initGlobalContext_getGlobalContextAsync };
|
|
@@ -16,14 +15,13 @@ export { setGlobalContext_isViteDev };
|
|
|
16
15
|
export { setGlobalContext_isPrerendering };
|
|
17
16
|
export { setGlobalContext_buildEntry };
|
|
18
17
|
export { clearGlobalContext };
|
|
19
|
-
|
|
18
|
+
export { assertBuildInfo };
|
|
19
|
+
export { getViteConfigRuntime };
|
|
20
|
+
import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger, makePublicCopy, projectInfo, checkType } from './utils.js';
|
|
20
21
|
import { importServerProductionEntry } from '@brillout/vite-plugin-server-entry/runtime';
|
|
21
22
|
import { virtualFileIdImportUserCodeServer } from '../shared/virtual-files/virtualFileImportUserCode.js';
|
|
22
23
|
import { getPageFilesAll, setPageFiles, setPageFilesAsync } from '../../shared/getPageFiles/getPageFiles.js';
|
|
23
|
-
import { assertPluginManifest } from '../shared/assertPluginManifest.js';
|
|
24
|
-
import { assertRuntimeManifest } from '../shared/assertRuntimeManifest.js';
|
|
25
24
|
import pc from '@brillout/picocolors';
|
|
26
|
-
import { resolveBaseFromResolvedConfig } from '../shared/resolveBase.js';
|
|
27
25
|
import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
|
|
28
26
|
import { assertV1Design } from '../shared/assertV1Design.js';
|
|
29
27
|
const debug = createDebugger('vike:globalContext');
|
|
@@ -50,28 +48,8 @@ async function getGlobalContextAsync(isProduction) {
|
|
|
50
48
|
return makePublic(globalContext);
|
|
51
49
|
}
|
|
52
50
|
function makePublic(globalContext) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
assetsManifest: globalContext.assetsManifest
|
|
56
|
-
};
|
|
57
|
-
// Add internals (and prepended _ prefix to their keys)
|
|
58
|
-
{
|
|
59
|
-
const publicKeys = Object.keys(globalContextPublic);
|
|
60
|
-
objectKeys(globalContext)
|
|
61
|
-
.filter((key) => !publicKeys.includes(key))
|
|
62
|
-
.forEach((key) => {
|
|
63
|
-
const keyPublic = `_${key}`;
|
|
64
|
-
Object.defineProperty(globalContextPublic, keyPublic, {
|
|
65
|
-
enumerable: true,
|
|
66
|
-
get() {
|
|
67
|
-
assertWarning(false, `Using internal globalContext.${keyPublic} which is discouraged: it may break in any minor version update. Instead, reach out on GitHub and elaborate your use case.`, {
|
|
68
|
-
onlyOnce: true
|
|
69
|
-
});
|
|
70
|
-
return globalContext[key];
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
}
|
|
51
|
+
// TODO/now: add viteConfig and vikeConfig
|
|
52
|
+
const globalContextPublic = makePublicCopy(globalContext, 'globalContext', ['assetsManifest']);
|
|
75
53
|
return globalContextPublic;
|
|
76
54
|
}
|
|
77
55
|
function setGlobalContext_viteDevServer(viteDevServer) {
|
|
@@ -161,7 +139,7 @@ async function initGlobalContext(isProduction) {
|
|
|
161
139
|
assert(viteDevServer);
|
|
162
140
|
assert(!isPrerendering);
|
|
163
141
|
const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
|
|
164
|
-
const
|
|
142
|
+
const viteConfigRuntime = getViteConfigRuntime(viteConfig);
|
|
165
143
|
globalObject.globalContext = {
|
|
166
144
|
isProduction: false,
|
|
167
145
|
isPrerendering: false,
|
|
@@ -172,20 +150,14 @@ async function initGlobalContext(isProduction) {
|
|
|
172
150
|
global: globalConfig
|
|
173
151
|
},
|
|
174
152
|
...userFiles,
|
|
175
|
-
|
|
176
|
-
baseAssets: pluginManifest.baseAssets,
|
|
177
|
-
includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
|
|
178
|
-
trailingSlash: pluginManifest.trailingSlash,
|
|
179
|
-
disableUrlNormalization: pluginManifest.disableUrlNormalization
|
|
153
|
+
viteConfigRuntime
|
|
180
154
|
};
|
|
181
155
|
}
|
|
182
156
|
else {
|
|
183
157
|
const buildEntry = await getBuildEntry(globalObject.outDirRoot, isPrerendering);
|
|
184
|
-
const { assetsManifest,
|
|
158
|
+
const { assetsManifest, buildInfo } = buildEntry;
|
|
185
159
|
setPageFiles(buildEntry.pageFiles);
|
|
186
160
|
const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
|
|
187
|
-
assertViteManifest(assetsManifest);
|
|
188
|
-
assertPluginManifest(pluginManifest);
|
|
189
161
|
const globalContext = {
|
|
190
162
|
isProduction: true,
|
|
191
163
|
assetsManifest,
|
|
@@ -194,12 +166,8 @@ async function initGlobalContext(isProduction) {
|
|
|
194
166
|
},
|
|
195
167
|
...userFiles,
|
|
196
168
|
viteDevServer: null,
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
|
|
200
|
-
trailingSlash: pluginManifest.trailingSlash,
|
|
201
|
-
usesClientRouter: pluginManifest.usesClientRouter,
|
|
202
|
-
disableUrlNormalization: pluginManifest.disableUrlNormalization
|
|
169
|
+
viteConfigRuntime: buildInfo.viteConfigRuntime,
|
|
170
|
+
usesClientRouter: buildInfo.usesClientRouter
|
|
203
171
|
};
|
|
204
172
|
if (isPrerendering) {
|
|
205
173
|
assert(viteConfig);
|
|
@@ -234,19 +202,6 @@ async function getPageRuntimeInfo(isProduction) {
|
|
|
234
202
|
pageConfigs.length > 0, pageFilesAll);
|
|
235
203
|
return { userFiles, globalConfig };
|
|
236
204
|
}
|
|
237
|
-
function getRuntimeManifest(vikeConfigGlobal, viteConfig) {
|
|
238
|
-
const { includeAssetsImportedByServer, trailingSlash, disableUrlNormalization } = vikeConfigGlobal;
|
|
239
|
-
const { baseServer, baseAssets } = resolveBaseFromResolvedConfig(vikeConfigGlobal.baseServer, vikeConfigGlobal.baseAssets, viteConfig);
|
|
240
|
-
const manifest = {
|
|
241
|
-
baseServer,
|
|
242
|
-
baseAssets,
|
|
243
|
-
includeAssetsImportedByServer,
|
|
244
|
-
trailingSlash,
|
|
245
|
-
disableUrlNormalization
|
|
246
|
-
};
|
|
247
|
-
assertRuntimeManifest(manifest);
|
|
248
|
-
return manifest;
|
|
249
|
-
}
|
|
250
205
|
function assertViteManifest(manifest) {
|
|
251
206
|
assert(isPlainObject(manifest));
|
|
252
207
|
/* We should include these assertions but we don't as a workaround for PWA manifests: https://github.com/vikejs/vike/issues/769
|
|
@@ -279,17 +234,48 @@ async function getBuildEntry(outDir, isPrerendering) {
|
|
|
279
234
|
assert(globalObject.buildEntry);
|
|
280
235
|
}
|
|
281
236
|
const { buildEntry } = globalObject;
|
|
282
|
-
|
|
283
|
-
assert(hasProp(buildEntry, 'pageFiles', 'object'));
|
|
284
|
-
assert(hasProp(buildEntry, 'assetsManifest', 'object'));
|
|
285
|
-
assert(hasProp(buildEntry, 'pluginManifest', 'object'));
|
|
237
|
+
assertBuildEntry(buildEntry);
|
|
286
238
|
return buildEntry;
|
|
287
239
|
}
|
|
288
240
|
function setGlobalContext_buildEntry(buildEntry) {
|
|
289
241
|
debug('setGlobalContext_buildEntry()');
|
|
242
|
+
assertBuildEntry(buildEntry);
|
|
290
243
|
globalObject.buildEntry = buildEntry;
|
|
291
244
|
globalObject.buildEntryPrevious = buildEntry;
|
|
292
245
|
}
|
|
246
|
+
function assertBuildEntry(buildEntry) {
|
|
247
|
+
assert(isObject(buildEntry));
|
|
248
|
+
assert(hasProp(buildEntry, 'pageFiles', 'object'));
|
|
249
|
+
const { pageFiles } = buildEntry;
|
|
250
|
+
assert(hasProp(buildEntry, 'assetsManifest', 'object'));
|
|
251
|
+
const { assetsManifest } = buildEntry;
|
|
252
|
+
assertViteManifest(assetsManifest);
|
|
253
|
+
assert(hasProp(buildEntry, 'buildInfo', 'object'));
|
|
254
|
+
const { buildInfo } = buildEntry;
|
|
255
|
+
assertBuildInfo(buildInfo);
|
|
256
|
+
checkType({ pageFiles, assetsManifest, buildInfo });
|
|
257
|
+
}
|
|
258
|
+
function assertBuildInfo(buildInfo) {
|
|
259
|
+
assert(isObject(buildInfo));
|
|
260
|
+
assert(hasProp(buildInfo, 'versionAtBuildTime', 'string'));
|
|
261
|
+
assertVersionAtBuildTime(buildInfo.versionAtBuildTime);
|
|
262
|
+
assert(hasProp(buildInfo, 'viteConfigRuntime', 'object'));
|
|
263
|
+
assert(hasProp(buildInfo.viteConfigRuntime, '_baseViteOriginal', 'string'));
|
|
264
|
+
assert(hasProp(buildInfo, 'usesClientRouter', 'boolean'));
|
|
265
|
+
checkType({ ...buildInfo, viteConfigRuntime: buildInfo.viteConfigRuntime });
|
|
266
|
+
}
|
|
267
|
+
function assertVersionAtBuildTime(versionAtBuildTime) {
|
|
268
|
+
const versionAtRuntime = projectInfo.projectVersion;
|
|
269
|
+
const pretty = (version) => pc.bold(`vike@${version}`);
|
|
270
|
+
assertUsage(versionAtBuildTime === versionAtRuntime, `Re-build your app (you're using ${pretty(versionAtRuntime)} but your app was built with ${pretty(versionAtBuildTime)})`);
|
|
271
|
+
}
|
|
272
|
+
function getViteConfigRuntime(viteConfig) {
|
|
273
|
+
assert(hasProp(viteConfig, '_baseViteOriginal', 'string'));
|
|
274
|
+
const viteConfigRuntime = {
|
|
275
|
+
_baseViteOriginal: viteConfig._baseViteOriginal
|
|
276
|
+
};
|
|
277
|
+
return viteConfigRuntime;
|
|
278
|
+
}
|
|
293
279
|
function initDevEntry() {
|
|
294
280
|
setPageFilesAsync(getPageFilesExports);
|
|
295
281
|
}
|
|
@@ -37,7 +37,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
|
|
|
37
37
|
} & {
|
|
38
38
|
_objectCreatedByVike: boolean;
|
|
39
39
|
_baseServer: string;
|
|
40
|
-
_baseAssets: string
|
|
40
|
+
_baseAssets: string;
|
|
41
41
|
_includeAssetsImportedByServer: boolean;
|
|
42
42
|
_pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
|
|
43
43
|
_pageConfigs: import("../../../__internal/index.js").PageConfig[];
|
|
@@ -88,7 +88,7 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
|
|
|
88
88
|
} & {
|
|
89
89
|
_objectCreatedByVike: boolean;
|
|
90
90
|
_baseServer: string;
|
|
91
|
-
_baseAssets: string
|
|
91
|
+
_baseAssets: string;
|
|
92
92
|
_includeAssetsImportedByServer: boolean;
|
|
93
93
|
_pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
|
|
94
94
|
_pageConfigs: import("../../../__internal/index.js").PageConfig[];
|
|
@@ -140,7 +140,7 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
|
|
|
140
140
|
} & {
|
|
141
141
|
_objectCreatedByVike: boolean;
|
|
142
142
|
_baseServer: string;
|
|
143
|
-
_baseAssets: string
|
|
143
|
+
_baseAssets: string;
|
|
144
144
|
_includeAssetsImportedByServer: boolean;
|
|
145
145
|
_pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
|
|
146
146
|
_pageConfigs: import("../../../__internal/index.js").PageConfig[];
|
|
@@ -191,7 +191,7 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
|
|
|
191
191
|
} & {
|
|
192
192
|
_objectCreatedByVike: boolean;
|
|
193
193
|
_baseServer: string;
|
|
194
|
-
_baseAssets: string
|
|
194
|
+
_baseAssets: string;
|
|
195
195
|
_includeAssetsImportedByServer: boolean;
|
|
196
196
|
_pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
|
|
197
197
|
_pageConfigs: import("../../../__internal/index.js").PageConfig[];
|
|
@@ -251,7 +251,7 @@ declare function getPageContextInitEnhanced(pageContextInit: {
|
|
|
251
251
|
} & {
|
|
252
252
|
_objectCreatedByVike: boolean;
|
|
253
253
|
_baseServer: string;
|
|
254
|
-
_baseAssets: string
|
|
254
|
+
_baseAssets: string;
|
|
255
255
|
_includeAssetsImportedByServer: boolean;
|
|
256
256
|
_pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
|
|
257
257
|
_pageConfigs: import("../../../__internal/index.js").PageConfig[];
|
|
@@ -18,6 +18,7 @@ import { preparePageContextForUserConsumptionServerSide } from './preparePageCon
|
|
|
18
18
|
import { executeGuardHook } from '../../../shared/route/executeGuardHook.js';
|
|
19
19
|
import pc from '@brillout/picocolors';
|
|
20
20
|
import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
|
|
21
|
+
import { resolveBaseRuntime } from '../../shared/resolveBase.js';
|
|
21
22
|
async function renderPageAlreadyRouted(pageContext) {
|
|
22
23
|
// pageContext.pageId can either be the:
|
|
23
24
|
// - ID of the page matching the routing, or the
|
|
@@ -114,14 +115,16 @@ function getPageContextInitEnhanced(pageContextInit, { ssr: { urlRewrite, urlHan
|
|
|
114
115
|
} } = {}) {
|
|
115
116
|
assert(pageContextInit.urlOriginal);
|
|
116
117
|
const globalContext = getGlobalContext();
|
|
118
|
+
const { baseServer, baseAssets } = resolveBaseRuntime();
|
|
117
119
|
const pageContextInitEnhanced = {};
|
|
118
120
|
objectAssign(pageContextInitEnhanced, pageContextInit);
|
|
119
121
|
objectAssign(pageContextInitEnhanced, {
|
|
120
122
|
_objectCreatedByVike: true,
|
|
121
123
|
// The following is defined on `pageContext` because we can eventually make these non-global
|
|
122
|
-
_baseServer:
|
|
123
|
-
_baseAssets:
|
|
124
|
-
|
|
124
|
+
_baseServer: baseServer,
|
|
125
|
+
_baseAssets: baseAssets,
|
|
126
|
+
// TODO/now: add meta.default
|
|
127
|
+
_includeAssetsImportedByServer: globalContext.vikeConfig.global.config.includeAssetsImportedByServer ?? true,
|
|
125
128
|
// TODO: use GloablContext instead
|
|
126
129
|
_pageFilesAll: globalContext.pageFilesAll,
|
|
127
130
|
_pageConfigs: globalContext.pageConfigs,
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { resolveRedirects };
|
|
2
2
|
export { resolveRouteStringRedirect };
|
|
3
|
+
export { redirectsErrPrefix };
|
|
4
|
+
declare const redirectsErrPrefix = "[+redirects]";
|
|
3
5
|
declare function resolveRedirects(redirectsAll: Record<string, string>[], urlPathname: string): null | string;
|
|
4
6
|
declare function resolveRouteStringRedirect(urlSource: string, urlTarget: string, urlPathname: string): null | string;
|