vike 0.4.225 → 0.4.226-commit-a0035ee
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/client/shared/getPageContextProxyForUser.js +3 -66
- package/dist/cjs/node/api/build.js +7 -7
- package/dist/cjs/node/api/dev.js +2 -2
- package/dist/cjs/node/api/prepareViteApiCall.js +55 -30
- package/dist/cjs/node/api/prerender.js +2 -3
- package/dist/cjs/node/api/preview.js +27 -6
- package/dist/cjs/node/api/utils.js +1 -0
- package/dist/cjs/node/cli/entry.js +4 -2
- package/dist/cjs/node/cli/parseCli.js +10 -4
- package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +3 -3
- package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +51 -0
- package/dist/cjs/node/plugin/plugins/build.js +3 -1
- package/dist/cjs/node/plugin/plugins/commonConfig.js +16 -8
- package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
- package/dist/cjs/node/plugin/plugins/fileEnv.js +3 -0
- package/dist/cjs/node/plugin/plugins/importUserCode/index.js +14 -10
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +99 -85
- package/dist/cjs/node/plugin/plugins/setGlobalContext.js +10 -1
- package/dist/cjs/node/plugin/shared/getEnvVarObject.js +7 -0
- package/dist/cjs/node/prerender/resolvePrerenderConfig.js +3 -3
- package/dist/cjs/node/prerender/runPrerender.js +14 -19
- package/dist/cjs/node/prerender/utils.js +1 -1
- package/dist/cjs/node/runtime/globalContext.js +13 -8
- package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
- package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +67 -14
- package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +3 -2
- package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
- package/dist/cjs/node/runtime/renderPage.js +13 -28
- package/dist/cjs/node/runtime/utils.js +1 -1
- package/dist/cjs/node/runtime-dev/createDevMiddleware.js +2 -2
- package/dist/cjs/node/shared/assertV1Design.js +1 -1
- package/dist/cjs/node/shared/utils.js +1 -1
- package/dist/cjs/node/shared/virtual-files.js +14 -10
- package/dist/cjs/shared/NOT_SERIALIZABLE.js +5 -0
- package/dist/cjs/shared/modifyUrl.js +3 -5
- package/dist/cjs/shared/modifyUrlSameOrigin.js +42 -0
- package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +3 -2
- package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +5 -5
- package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +9 -9
- package/dist/cjs/shared/utils.js +2 -1
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/assert.js +10 -3
- package/dist/cjs/utils/assertSetup.js +12 -8
- package/dist/cjs/utils/assertSingleInstance.js +19 -4
- package/dist/cjs/utils/getRandomId.js +1 -1
- package/dist/cjs/utils/isNullish.js +16 -0
- package/dist/cjs/utils/normalizeHeaders.js +1 -1
- package/dist/cjs/utils/objectAssign.js +7 -2
- package/dist/cjs/utils/objectFilter.js +10 -0
- package/dist/cjs/utils/pick.js +12 -0
- package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +3 -1
- package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
- package/dist/esm/client/client-routing-runtime/navigate.d.ts +6 -5
- package/dist/esm/client/client-routing-runtime/navigate.js +6 -2
- package/dist/esm/client/client-routing-runtime/normalizeUrlArgument.js +1 -1
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
- package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +6 -3
- package/dist/esm/client/server-routing-runtime/getPageContext.js +6 -3
- package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +1 -11
- package/dist/esm/client/shared/getPageContextProxyForUser.js +4 -67
- package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
- package/dist/esm/node/api/build.js +7 -7
- package/dist/esm/node/api/dev.js +2 -2
- package/dist/esm/node/api/prepareViteApiCall.d.ts +2 -1
- package/dist/esm/node/api/prepareViteApiCall.js +57 -32
- package/dist/esm/node/api/prerender.js +2 -3
- package/dist/esm/node/api/preview.d.ts +1 -1
- package/dist/esm/node/api/preview.js +24 -6
- package/dist/esm/node/api/utils.d.ts +1 -0
- package/dist/esm/node/api/utils.js +1 -0
- package/dist/esm/node/cli/entry.js +4 -2
- package/dist/esm/node/cli/parseCli.js +10 -4
- package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +3 -3
- package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +49 -0
- package/dist/esm/node/plugin/plugins/build.js +3 -1
- package/dist/esm/node/plugin/plugins/commonConfig.d.ts +9 -2
- package/dist/esm/node/plugin/plugins/commonConfig.js +16 -8
- package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
- package/dist/esm/node/plugin/plugins/fileEnv.js +3 -0
- package/dist/esm/node/plugin/plugins/importUserCode/index.js +15 -11
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +5 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +11 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +101 -86
- package/dist/esm/node/plugin/plugins/setGlobalContext.js +11 -2
- package/dist/esm/node/plugin/shared/getEnvVarObject.js +7 -0
- package/dist/esm/node/prerender/resolvePrerenderConfig.js +3 -3
- package/dist/esm/node/prerender/runPrerender.d.ts +1 -1
- package/dist/esm/node/prerender/runPrerender.js +14 -19
- package/dist/esm/node/prerender/utils.d.ts +1 -1
- package/dist/esm/node/prerender/utils.js +1 -1
- package/dist/esm/node/runtime/globalContext.d.ts +2 -3
- package/dist/esm/node/runtime/globalContext.js +13 -8
- package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
- package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +2 -0
- package/dist/esm/node/runtime/html/serializePageContextClientSide.js +69 -15
- package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +3 -2
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +27 -1
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
- package/dist/esm/node/runtime/renderPage.js +14 -29
- package/dist/esm/node/runtime/utils.d.ts +1 -1
- package/dist/esm/node/runtime/utils.js +1 -1
- package/dist/esm/node/runtime-dev/createDevMiddleware.js +2 -2
- package/dist/esm/node/shared/assertV1Design.js +1 -1
- package/dist/esm/node/shared/utils.d.ts +1 -1
- package/dist/esm/node/shared/utils.js +1 -1
- package/dist/esm/node/shared/virtual-files.d.ts +2 -0
- package/dist/esm/node/shared/virtual-files.js +14 -10
- package/dist/esm/shared/NOT_SERIALIZABLE.d.ts +1 -0
- package/dist/esm/shared/NOT_SERIALIZABLE.js +2 -0
- package/dist/esm/shared/modifyUrl.d.ts +2 -2
- package/dist/esm/shared/modifyUrl.js +3 -5
- package/dist/esm/shared/modifyUrlSameOrigin.d.ts +9 -0
- package/dist/esm/shared/modifyUrlSameOrigin.js +40 -0
- package/dist/esm/shared/page-configs/Config.d.ts +11 -3
- package/dist/esm/shared/page-configs/PageConfig.d.ts +2 -2
- package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +3 -1
- package/dist/esm/shared/page-configs/getConfigDefinedAt.js +3 -2
- package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +5 -5
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +9 -9
- package/dist/esm/shared/route/abort.d.ts +2 -2
- package/dist/esm/shared/types.d.ts +39 -3
- package/dist/esm/shared/utils.d.ts +2 -1
- package/dist/esm/shared/utils.js +2 -1
- package/dist/esm/types/index.d.ts +0 -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.d.ts +2 -1
- package/dist/esm/utils/assert.js +10 -3
- package/dist/esm/utils/assertSetup.d.ts +2 -2
- package/dist/esm/utils/assertSetup.js +12 -8
- package/dist/esm/utils/assertSingleInstance.js +19 -4
- package/dist/esm/utils/getRandomId.d.ts +1 -1
- package/dist/esm/utils/getRandomId.js +1 -1
- package/dist/esm/utils/isNullish.d.ts +3 -0
- package/dist/esm/utils/isNullish.js +11 -0
- package/dist/esm/utils/normalizeHeaders.js +1 -1
- package/dist/esm/utils/objectAssign.d.ts +1 -1
- package/dist/esm/utils/objectAssign.js +7 -2
- package/dist/esm/utils/objectFilter.d.ts +1 -0
- package/dist/esm/utils/objectFilter.js +7 -0
- package/dist/esm/utils/pick.d.ts +1 -0
- package/dist/esm/utils/pick.js +9 -0
- package/package.json +4 -2
- package/dist/cjs/shared/notSerializable.js +0 -5
- package/dist/cjs/utils/isNotNullish.js +0 -5
- package/dist/esm/shared/notSerializable.d.ts +0 -1
- package/dist/esm/shared/notSerializable.js +0 -2
- package/dist/esm/utils/isNotNullish.d.ts +0 -1
- package/dist/esm/utils/isNotNullish.js +0 -1
|
@@ -64,6 +64,7 @@ function getGlobalContextSync() {
|
|
|
64
64
|
}
|
|
65
65
|
/** @experimental https://vike.dev/getGlobalContext */
|
|
66
66
|
async function getGlobalContextAsync(isProduction) {
|
|
67
|
+
debug('getGlobalContextAsync()');
|
|
67
68
|
assertUsage(typeof isProduction === 'boolean', `[getGlobalContextAsync(isProduction)] Argument ${pc.cyan('isProduction')} ${isProduction === undefined ? 'is missing' : `should be ${pc.cyan('true')} or ${pc.cyan('false')}`}`);
|
|
68
69
|
setIsProduction(isProduction);
|
|
69
70
|
if (!globalObject.globalContext)
|
|
@@ -89,10 +90,10 @@ function makePublic(globalContext) {
|
|
|
89
90
|
async function setGlobalContext_viteDevServer(viteDevServer) {
|
|
90
91
|
debug('setGlobalContext_viteDevServer()');
|
|
91
92
|
setIsProduction(false);
|
|
92
|
-
|
|
93
|
-
if (globalObject.viteDevServer)
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
// We cannot cache globalObject.viteDevServer because it's fully replaced when the user modifies vite.config.js => Vite's dev server is fully reloaded and a new viteDevServer replaces the previous one.
|
|
94
|
+
if (!globalObject.viteDevServer) {
|
|
95
|
+
assertIsNotInitilizedYet();
|
|
96
|
+
}
|
|
96
97
|
assert(globalObject.viteConfig);
|
|
97
98
|
globalObject.viteDevServer = viteDevServer;
|
|
98
99
|
await updateUserFiles();
|
|
@@ -308,10 +309,14 @@ async function loadBuildEntry(outDir) {
|
|
|
308
309
|
globalObject.buildEntry = globalObject.buildEntryPrevious;
|
|
309
310
|
}
|
|
310
311
|
assert(globalObject.buildEntry);
|
|
311
|
-
assertWarning(
|
|
312
|
-
//
|
|
313
|
-
//
|
|
314
|
-
|
|
312
|
+
assertWarning(
|
|
313
|
+
// vike-server => `vitePluginServerEntry.inject === true`
|
|
314
|
+
// vike-node => `vitePluginServerEntry.inject === [ 'index' ]`
|
|
315
|
+
globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject !== true,
|
|
316
|
+
/* TO-DO/eventually:
|
|
317
|
+
!!globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject,
|
|
318
|
+
*/
|
|
319
|
+
`Run the built server entry (e.g. ${pc.cyan('$ node dist/server/index.mjs')}) instead of the original server entry (e.g. ${pc.cyan('$ ts-node server/index.ts')})`, { onlyOnce: true });
|
|
315
320
|
}
|
|
316
321
|
const { buildEntry } = globalObject;
|
|
317
322
|
assertBuildEntry(buildEntry);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { getViteDevScript };
|
|
2
2
|
import { assert, assertUsage, assertWarning } from '../../utils.js';
|
|
3
3
|
import pc from '@brillout/picocolors';
|
|
4
|
+
const reachOutCTA = 'Create a new GitHub issue to discuss a solution.';
|
|
4
5
|
async function getViteDevScript(pageContext) {
|
|
5
6
|
const globalContext = pageContext._globalContext;
|
|
6
7
|
if (globalContext.isProduction) {
|
|
@@ -12,11 +13,13 @@ async function getViteDevScript(pageContext) {
|
|
|
12
13
|
let fakeHtml = fakeHtmlBegin + fakeHtmlEnd;
|
|
13
14
|
fakeHtml = await viteDevServer.transformIndexHtml('/', fakeHtml);
|
|
14
15
|
assertUsage(!fakeHtml.includes('vite-plugin-pwa'), `The HTML transformer of ${pc.cyan('vite-plugin-pwa')} cannot be applied, see workaround at https://github.com/vikejs/vike/issues/388#issuecomment-1199280084`);
|
|
15
|
-
assertUsage(!fakeHtml.startsWith(fakeHtmlBegin.replace(' ', '')),
|
|
16
|
-
assertUsage(fakeHtml.startsWith(fakeHtmlBegin) && fakeHtml.endsWith(fakeHtmlEnd),
|
|
16
|
+
assertUsage(!fakeHtml.startsWith(fakeHtmlBegin.replace(' ', '')), `Vite plugins that minify the HTML cannot be applied, see https://github.com/vikejs/vike/issues/224`);
|
|
17
|
+
assertUsage(fakeHtml.startsWith(fakeHtmlBegin) && fakeHtml.endsWith(fakeHtmlEnd), `You are using a Vite Plugin that transforms the HTML in a way that conflicts with Vike. ${reachOutCTA}`);
|
|
17
18
|
const viteInjection = fakeHtml.slice(fakeHtmlBegin.length, -1 * fakeHtmlEnd.length);
|
|
18
19
|
assert(viteInjection.includes('script'));
|
|
19
|
-
assertWarning(!viteInjection.includes('import('),
|
|
20
|
+
assertWarning(!viteInjection.includes('import('), `Unexpected Vite injected HMR code. ${reachOutCTA}`, {
|
|
21
|
+
onlyOnce: true
|
|
22
|
+
});
|
|
20
23
|
const viteDevScript = viteInjection;
|
|
21
24
|
return viteDevScript;
|
|
22
25
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { serializePageContextClientSide };
|
|
2
2
|
export { serializePageContextAbort };
|
|
3
3
|
export type { PageContextSerialization };
|
|
4
|
+
export { getPropKeys };
|
|
4
5
|
import type { PageConfigRuntime } from '../../../shared/page-configs/PageConfig.js';
|
|
5
6
|
import type { UrlRedirect } from '../../../shared/route/abort.js';
|
|
6
7
|
type PageContextSerialization = {
|
|
@@ -20,3 +21,4 @@ declare function serializePageContextAbort(pageContext: Record<string, unknown>
|
|
|
20
21
|
} | {
|
|
21
22
|
abortStatusCode: number;
|
|
22
23
|
})): string;
|
|
24
|
+
declare function getPropKeys(prop: string): string[];
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export { serializePageContextClientSide };
|
|
2
2
|
export { serializePageContextAbort };
|
|
3
|
+
// For ./serializePageContextClientSide.spec.ts
|
|
4
|
+
export { getPropKeys };
|
|
3
5
|
import { stringify, isJsonSerializerError } from '@brillout/json-serializer/stringify';
|
|
4
|
-
import { assert, assertUsage, assertWarning, getPropAccessNotation, hasProp, unique } from '../utils.js';
|
|
6
|
+
import { assert, assertUsage, assertWarning, getPropAccessNotation, hasProp, isObject, unique } from '../utils.js';
|
|
5
7
|
import { isErrorPage } from '../../../shared/error-page.js';
|
|
6
8
|
import { addIs404ToPageProps } from '../../../shared/addIs404ToPageProps.js';
|
|
7
9
|
import pc from '@brillout/picocolors';
|
|
8
|
-
import {
|
|
10
|
+
import { NOT_SERIALIZABLE } from '../../../shared/NOT_SERIALIZABLE.js';
|
|
9
11
|
import { pageContextInitIsPassedToClient } from '../../../shared/misc/pageContextInitIsPassedToClient.js';
|
|
10
12
|
import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
|
|
11
13
|
const PASS_TO_CLIENT = [
|
|
@@ -25,12 +27,8 @@ const PASS_TO_CLIENT = [
|
|
|
25
27
|
const PASS_TO_CLIENT_ERROR_PAGE = ['pageProps', 'is404', isServerSideError];
|
|
26
28
|
function serializePageContextClientSide(pageContext) {
|
|
27
29
|
const passToClient = getPassToClient(pageContext);
|
|
28
|
-
const pageContextClient =
|
|
29
|
-
passToClient.
|
|
30
|
-
// We set non-existing props to `undefined`, in order to pass the list of passToClient values to the client-side
|
|
31
|
-
pageContextClient[prop] = pageContext[prop];
|
|
32
|
-
});
|
|
33
|
-
if (Object.keys(pageContext._pageContextInit).some((p) => passToClient.includes(p))) {
|
|
30
|
+
const pageContextClient = applyPassToClient(passToClient, pageContext);
|
|
31
|
+
if (passToClient.some((prop) => getPropVal(pageContext._pageContextInit, prop))) {
|
|
34
32
|
pageContextClient[pageContextInitIsPassedToClient] = true;
|
|
35
33
|
}
|
|
36
34
|
let pageContextSerialized;
|
|
@@ -42,14 +40,15 @@ function serializePageContextClientSide(pageContext) {
|
|
|
42
40
|
let hasWarned = false;
|
|
43
41
|
const propsNonSerializable = [];
|
|
44
42
|
passToClient.forEach((prop) => {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
const res = getPropVal(pageContext, prop);
|
|
44
|
+
if (!res)
|
|
45
|
+
return;
|
|
46
|
+
const { value } = res;
|
|
47
|
+
const varName = `pageContext${getPropKeys(prop).map(getPropAccessNotation).join('')}`;
|
|
48
48
|
try {
|
|
49
|
-
serialize(
|
|
49
|
+
serialize(value, varName);
|
|
50
50
|
}
|
|
51
51
|
catch (err) {
|
|
52
|
-
hasWarned = true;
|
|
53
52
|
propsNonSerializable.push(prop);
|
|
54
53
|
// useConfig() wrong usage
|
|
55
54
|
if (prop === '_configFromHook') {
|
|
@@ -62,7 +61,7 @@ function serializePageContextClientSide(pageContext) {
|
|
|
62
61
|
// Non-serializable pageContext set by the user
|
|
63
62
|
let msg = [
|
|
64
63
|
`${h(varName)} can't be serialized and, therefore, can't be passed to the client side.`,
|
|
65
|
-
`Make sure ${h(varName)} is serializable, or remove ${h(
|
|
64
|
+
`Make sure ${h(varName)} is serializable, or remove ${h(JSON.stringify(prop))} from ${h('passToClient')}.`
|
|
66
65
|
].join(' ');
|
|
67
66
|
if (isJsonSerializerError(err)) {
|
|
68
67
|
msg = `${msg} Serialization error: ${err.messageCore}.`;
|
|
@@ -75,11 +74,12 @@ function serializePageContextClientSide(pageContext) {
|
|
|
75
74
|
}
|
|
76
75
|
// We warn (instead of throwing an error) since Vike's client runtime throws an error (with `assertUsage()`) if the user's client code tries to access the property that cannot be serialized
|
|
77
76
|
assertWarning(false, msg, { onlyOnce: false });
|
|
77
|
+
hasWarned = true;
|
|
78
78
|
}
|
|
79
79
|
});
|
|
80
80
|
assert(hasWarned);
|
|
81
81
|
propsNonSerializable.forEach((prop) => {
|
|
82
|
-
pageContextClient[prop] =
|
|
82
|
+
pageContextClient[getPropKeys(prop)[0]] = NOT_SERIALIZABLE;
|
|
83
83
|
});
|
|
84
84
|
try {
|
|
85
85
|
pageContextSerialized = serialize(pageContextClient);
|
|
@@ -138,3 +138,57 @@ function serializePageContextAbort(pageContext) {
|
|
|
138
138
|
}
|
|
139
139
|
return serialize(pageContext);
|
|
140
140
|
}
|
|
141
|
+
function applyPassToClient(passToClient, pageContext) {
|
|
142
|
+
const pageContextClient = {};
|
|
143
|
+
passToClient.forEach((prop) => {
|
|
144
|
+
// Get value from pageContext
|
|
145
|
+
const res = getPropVal(pageContext, prop);
|
|
146
|
+
if (!res)
|
|
147
|
+
return;
|
|
148
|
+
const { value } = res;
|
|
149
|
+
// Set value to pageContextClient
|
|
150
|
+
setPropVal(pageContextClient, prop, value);
|
|
151
|
+
});
|
|
152
|
+
return pageContextClient;
|
|
153
|
+
}
|
|
154
|
+
// Get a nested property from an object using a dot-separated path such as 'user.id'
|
|
155
|
+
function getPropVal(obj, prop) {
|
|
156
|
+
const keys = getPropKeys(prop);
|
|
157
|
+
let value = obj;
|
|
158
|
+
for (const key of keys) {
|
|
159
|
+
if (isObject(value) && key in value) {
|
|
160
|
+
value = value[key];
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
return null; // Property or intermediate property doesn't exist
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return { value };
|
|
167
|
+
}
|
|
168
|
+
// Set a nested property in an object using a dot-separated path such as 'user.id'
|
|
169
|
+
function setPropVal(obj, prop, val) {
|
|
170
|
+
const keys = getPropKeys(prop);
|
|
171
|
+
let currentObj = obj;
|
|
172
|
+
// Creating intermediate objects if necessary
|
|
173
|
+
for (let i = 0; i <= keys.length - 2; i++) {
|
|
174
|
+
const key = keys[i];
|
|
175
|
+
if (!(key in currentObj)) {
|
|
176
|
+
// Create intermediate object
|
|
177
|
+
currentObj[key] = {};
|
|
178
|
+
}
|
|
179
|
+
if (!isObject(currentObj[key])) {
|
|
180
|
+
// Skip value upon data structure conflict
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
currentObj = currentObj[key];
|
|
184
|
+
}
|
|
185
|
+
// Set the final key to the value
|
|
186
|
+
const finalKey = keys[keys.length - 1];
|
|
187
|
+
currentObj[finalKey] = val;
|
|
188
|
+
}
|
|
189
|
+
function getPropKeys(prop) {
|
|
190
|
+
// Like `prop.split('.')` but with added support for `\` escaping, see serializePageContextClientSide.spec.ts
|
|
191
|
+
return prop
|
|
192
|
+
.split(/(?<!\\)\./) // Split on unescaped dots
|
|
193
|
+
.map((key) => key.replace(/\\\./g, '.')); // Replace escaped dots with literal dots
|
|
194
|
+
}
|
|
@@ -4,14 +4,15 @@ import pc from '@brillout/picocolors';
|
|
|
4
4
|
const globalObject = getGlobalObject('createHttpResponse/assertNoInfiniteHttpRedirect.ts', {
|
|
5
5
|
redirectGraph: {}
|
|
6
6
|
});
|
|
7
|
-
// It's too strict, see https://github.com/vikejs/vike/issues/1270#issuecomment-1820608999
|
|
8
|
-
// - Let's create a new setting `+doNotCatchInfiniteRedirect` if someone complains.
|
|
9
7
|
function assertNoInfiniteHttpRedirect(
|
|
10
8
|
// The exact URL that the user will be redirected to.
|
|
11
9
|
// - It includes the Base URL as well as the locale (i18n) base.
|
|
12
10
|
urlRedirectTarget,
|
|
13
11
|
// Rationale for checking against `pageContextInit.urlOriginal`: https://github.com/vikejs/vike/pull/2264#issuecomment-2713890263
|
|
14
12
|
pageContextInit) {
|
|
13
|
+
// TO-DO/eventually: use cookie as described at https://github.com/vikejs/vike/pull/2273
|
|
14
|
+
if (true)
|
|
15
|
+
return 'DISABLED'; // Disabled until we make it reliable.
|
|
15
16
|
if (!urlRedirectTarget.startsWith('/')) {
|
|
16
17
|
// We assume that urlRedirectTarget points to an origin that is external (not the same origin), and we can therefore assume that the app doesn't define an infinite loop (at least not in itself).
|
|
17
18
|
// - There isn't a reliable way to check whether the redirect points to an external origin or the same origin; we hope/assume the user sets the URL without origin.
|
|
@@ -7,5 +7,8 @@ function preparePageContextForUserConsumptionServerSide(pageContext) {
|
|
|
7
7
|
assert(isPlainObject(pageContext.routeParams));
|
|
8
8
|
assert('Page' in pageContext);
|
|
9
9
|
assert(typeof pageContext.isClientSideNavigation === 'boolean');
|
|
10
|
+
assert(pageContext._isPageContextObject);
|
|
11
|
+
assert(pageContext.isClientSide === false);
|
|
12
|
+
assert(typeof pageContext.isPrerendering === 'boolean');
|
|
10
13
|
preparePageContextForUserConsumption(pageContext);
|
|
11
14
|
}
|
|
@@ -2,6 +2,7 @@ export { renderPageAlreadyRouted };
|
|
|
2
2
|
export { prerenderPage };
|
|
3
3
|
export { prerender404Page };
|
|
4
4
|
export { getPageContextInitEnhanced };
|
|
5
|
+
export { createPageContext };
|
|
5
6
|
export type { PageContextAfterRender };
|
|
6
7
|
export type { PageContextInitEnhanced };
|
|
7
8
|
import { type PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
|
|
@@ -32,6 +33,10 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
|
|
|
32
33
|
documentHtml: string;
|
|
33
34
|
pageContextSerialized: null;
|
|
34
35
|
pageContext: {
|
|
36
|
+
_isPageContextObject: boolean;
|
|
37
|
+
isClientSide: boolean;
|
|
38
|
+
isPrerendering: boolean;
|
|
39
|
+
} & Record<string, unknown> & {
|
|
35
40
|
urlOriginal: string;
|
|
36
41
|
headersOriginal?: unknown;
|
|
37
42
|
headers?: unknown;
|
|
@@ -118,6 +123,10 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
|
|
|
118
123
|
documentHtml: string;
|
|
119
124
|
pageContextSerialized: string;
|
|
120
125
|
pageContext: {
|
|
126
|
+
_isPageContextObject: boolean;
|
|
127
|
+
isClientSide: boolean;
|
|
128
|
+
isPrerendering: boolean;
|
|
129
|
+
} & Record<string, unknown> & {
|
|
121
130
|
urlOriginal: string;
|
|
122
131
|
headersOriginal?: unknown;
|
|
123
132
|
headers?: unknown;
|
|
@@ -205,6 +214,10 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
|
|
|
205
214
|
documentHtml: string;
|
|
206
215
|
pageContextSerialized: null;
|
|
207
216
|
pageContext: {
|
|
217
|
+
_isPageContextObject: boolean;
|
|
218
|
+
isClientSide: boolean;
|
|
219
|
+
isPrerendering: boolean;
|
|
220
|
+
} & Record<string, unknown> & {
|
|
208
221
|
urlOriginal: string;
|
|
209
222
|
headersOriginal?: unknown;
|
|
210
223
|
headers?: unknown;
|
|
@@ -291,6 +304,10 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
|
|
|
291
304
|
documentHtml: string;
|
|
292
305
|
pageContextSerialized: string;
|
|
293
306
|
pageContext: {
|
|
307
|
+
_isPageContextObject: boolean;
|
|
308
|
+
isClientSide: boolean;
|
|
309
|
+
isPrerendering: boolean;
|
|
310
|
+
} & Record<string, unknown> & {
|
|
294
311
|
urlOriginal: string;
|
|
295
312
|
headersOriginal?: unknown;
|
|
296
313
|
headers?: unknown;
|
|
@@ -379,13 +396,17 @@ declare function getPageContextInitEnhanced(pageContextInit: {
|
|
|
379
396
|
urlOriginal: string;
|
|
380
397
|
headersOriginal?: unknown;
|
|
381
398
|
headers?: unknown;
|
|
382
|
-
}, globalContext: GlobalContextInternal, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } }?: {
|
|
399
|
+
}, globalContext: GlobalContextInternal, isPrerendering: boolean, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } }?: {
|
|
383
400
|
ssr?: {
|
|
384
401
|
urlRewrite: null | string;
|
|
385
402
|
urlHandler: null | ((url: string) => string);
|
|
386
403
|
isClientSideNavigation: boolean;
|
|
387
404
|
};
|
|
388
405
|
}): Promise<{
|
|
406
|
+
_isPageContextObject: boolean;
|
|
407
|
+
isClientSide: boolean;
|
|
408
|
+
isPrerendering: boolean;
|
|
409
|
+
} & Record<string, unknown> & {
|
|
389
410
|
urlOriginal: string;
|
|
390
411
|
headersOriginal?: unknown;
|
|
391
412
|
headers?: unknown;
|
|
@@ -450,3 +471,8 @@ declare function getPageContextInitEnhanced(pageContextInit: {
|
|
|
450
471
|
} & {
|
|
451
472
|
headers: Record<string, string> | null;
|
|
452
473
|
}>;
|
|
474
|
+
declare function createPageContext(pageContextInit: Record<string, unknown>, isPrerendering: boolean): {
|
|
475
|
+
_isPageContextObject: boolean;
|
|
476
|
+
isClientSide: boolean;
|
|
477
|
+
isPrerendering: boolean;
|
|
478
|
+
} & Record<string, unknown>;
|
|
@@ -2,6 +2,7 @@ export { renderPageAlreadyRouted };
|
|
|
2
2
|
export { prerenderPage };
|
|
3
3
|
export { prerender404Page };
|
|
4
4
|
export { getPageContextInitEnhanced };
|
|
5
|
+
export { createPageContext };
|
|
5
6
|
import { getErrorPageId } from '../../../shared/error-page.js';
|
|
6
7
|
import { getHtmlString } from '../html/renderHtml.js';
|
|
7
8
|
import { assert, assertUsage, assertWarning, hasProp, normalizeHeaders, objectAssign } from '../utils.js';
|
|
@@ -84,7 +85,11 @@ async function prerender404Page(pageContextInit_, globalContext) {
|
|
|
84
85
|
if (!errorPageId) {
|
|
85
86
|
return null;
|
|
86
87
|
}
|
|
87
|
-
|
|
88
|
+
// A URL is required for `viteDevServer.transformIndexHtml(url,html)`
|
|
89
|
+
const pageContextInit = { urlOriginal: '/fake-404-url' };
|
|
90
|
+
objectAssign(pageContextInit, pageContextInit_);
|
|
91
|
+
const pageContext = await getPageContextInitEnhanced(pageContextInit, globalContext, true);
|
|
92
|
+
objectAssign(pageContext, {
|
|
88
93
|
pageId: errorPageId,
|
|
89
94
|
_httpRequestId: null,
|
|
90
95
|
_urlRewrite: null,
|
|
@@ -93,25 +98,17 @@ async function prerender404Page(pageContextInit_, globalContext) {
|
|
|
93
98
|
// `prerender404Page()` is about generating `dist/client/404.html` for static hosts; there is no Client Routing.
|
|
94
99
|
_usesClientRouter: false,
|
|
95
100
|
_debugRouteMatches: []
|
|
96
|
-
};
|
|
97
|
-
const pageContextInit = {
|
|
98
|
-
urlOriginal: '/fake-404-url' // A URL is needed for `applyViteHtmlTransform`
|
|
99
|
-
};
|
|
100
|
-
objectAssign(pageContextInit, pageContextInit_);
|
|
101
|
-
{
|
|
102
|
-
const pageContextInitEnhanced = await getPageContextInitEnhanced(pageContextInit, globalContext);
|
|
103
|
-
objectAssign(pageContext, pageContextInitEnhanced);
|
|
104
|
-
}
|
|
101
|
+
});
|
|
105
102
|
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
106
103
|
return prerenderPage(pageContext);
|
|
107
104
|
}
|
|
108
|
-
async function getPageContextInitEnhanced(pageContextInit, globalContext, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
|
|
105
|
+
async function getPageContextInitEnhanced(pageContextInit, globalContext, isPrerendering, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
|
|
109
106
|
urlRewrite: null,
|
|
110
107
|
urlHandler: null,
|
|
111
108
|
isClientSideNavigation: false
|
|
112
109
|
} } = {}) {
|
|
113
110
|
assert(pageContextInit.urlOriginal);
|
|
114
|
-
const pageContextInitEnhanced =
|
|
111
|
+
const pageContextInitEnhanced = createPageContext(pageContextInit, isPrerendering);
|
|
115
112
|
objectAssign(pageContextInitEnhanced, pageContextInit);
|
|
116
113
|
objectAssign(pageContextInitEnhanced, {
|
|
117
114
|
_objectCreatedByVike: true,
|
|
@@ -158,3 +155,12 @@ async function getPageContextInitEnhanced(pageContextInit, globalContext, { ssr:
|
|
|
158
155
|
}
|
|
159
156
|
return pageContextInitEnhanced;
|
|
160
157
|
}
|
|
158
|
+
function createPageContext(pageContextInit, isPrerendering) {
|
|
159
|
+
const pageContext = {
|
|
160
|
+
_isPageContextObject: true,
|
|
161
|
+
isClientSide: false,
|
|
162
|
+
isPrerendering
|
|
163
|
+
};
|
|
164
|
+
objectAssign(pageContext, pageContextInit);
|
|
165
|
+
return pageContext;
|
|
166
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { renderPage };
|
|
2
2
|
export { renderPage_addAsyncHookwrapper };
|
|
3
|
-
import { getPageContextInitEnhanced, renderPageAlreadyRouted } from './renderPage/renderPageAlreadyRouted.js';
|
|
3
|
+
import { getPageContextInitEnhanced, renderPageAlreadyRouted, createPageContext } from './renderPage/renderPageAlreadyRouted.js';
|
|
4
4
|
import { route } from '../../shared/route/index.js';
|
|
5
5
|
import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty } from './utils.js';
|
|
6
6
|
import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
|
|
@@ -103,15 +103,9 @@ async function renderPageAlreadyPrepared(pageContextInit, globalContext, httpReq
|
|
|
103
103
|
// https://stackoverflow.com/questions/9683007/detect-infinite-http-redirect-loop-on-server-side
|
|
104
104
|
0);
|
|
105
105
|
let pageContextNominalPageSuccess;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
objectAssign(pageContextNominalPageInit, pageContextFromAllRewrites);
|
|
110
|
-
}
|
|
111
|
-
{
|
|
112
|
-
const pageContextInitEnhanced = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, pageContextNominalPageInit._urlRewrite, httpRequestId);
|
|
113
|
-
objectAssign(pageContextNominalPageInit, pageContextInitEnhanced);
|
|
114
|
-
}
|
|
106
|
+
const pageContextFromAllRewrites = getPageContextFromAllRewrites(pageContextsFromRewrite);
|
|
107
|
+
const pageContextNominalPageInit = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, pageContextFromAllRewrites._urlRewrite, httpRequestId);
|
|
108
|
+
objectAssign(pageContextNominalPageInit, pageContextFromAllRewrites);
|
|
115
109
|
let errNominalPage;
|
|
116
110
|
{
|
|
117
111
|
try {
|
|
@@ -242,7 +236,7 @@ function prettyUrl(url) {
|
|
|
242
236
|
return pc.bold(decodeURI(url));
|
|
243
237
|
}
|
|
244
238
|
function getPageContextHttpResponseError(err, pageContextInit, pageContext) {
|
|
245
|
-
const pageContextWithError = createPageContext(pageContextInit);
|
|
239
|
+
const pageContextWithError = createPageContext(pageContextInit, false);
|
|
246
240
|
const httpResponse = createHttpResponseError(pageContext);
|
|
247
241
|
objectAssign(pageContextWithError, {
|
|
248
242
|
httpResponse,
|
|
@@ -250,13 +244,6 @@ function getPageContextHttpResponseError(err, pageContextInit, pageContext) {
|
|
|
250
244
|
});
|
|
251
245
|
return pageContextWithError;
|
|
252
246
|
}
|
|
253
|
-
function createPageContext(pageContextInit) {
|
|
254
|
-
const pageContext = {
|
|
255
|
-
_isPageContextObject: true
|
|
256
|
-
};
|
|
257
|
-
Object.assign(pageContext, pageContextInit);
|
|
258
|
-
return pageContext;
|
|
259
|
-
}
|
|
260
247
|
async function renderPageNominal(pageContext) {
|
|
261
248
|
objectAssign(pageContext, { errorWhileRendering: null });
|
|
262
249
|
// Route
|
|
@@ -281,10 +268,8 @@ async function renderPageNominal(pageContext) {
|
|
|
281
268
|
return pageContextAfterRender;
|
|
282
269
|
}
|
|
283
270
|
async function getPageContextErrorPageInit(pageContextInit, globalContext, errNominalPage, pageContextNominalPagePartial, httpRequestId) {
|
|
284
|
-
const
|
|
271
|
+
const pageContext = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, null, httpRequestId);
|
|
285
272
|
assert(errNominalPage);
|
|
286
|
-
const pageContext = {};
|
|
287
|
-
objectAssign(pageContext, pageContextInitEnhanced);
|
|
288
273
|
objectAssign(pageContext, {
|
|
289
274
|
is404: false,
|
|
290
275
|
errorWhileRendering: errNominalPage,
|
|
@@ -298,7 +283,7 @@ async function getPageContextErrorPageInit(pageContextInit, globalContext, errNo
|
|
|
298
283
|
}
|
|
299
284
|
async function getPageContextInitEnhancedSSR(pageContextInit, globalContext, urlRewrite, httpRequestId) {
|
|
300
285
|
const { isClientSideNavigation, _urlHandler } = handlePageContextUrl(pageContextInit.urlOriginal);
|
|
301
|
-
const pageContextInitEnhanced = await getPageContextInitEnhanced(pageContextInit, globalContext, {
|
|
286
|
+
const pageContextInitEnhanced = await getPageContextInitEnhanced(pageContextInit, globalContext, false, {
|
|
302
287
|
ssr: {
|
|
303
288
|
urlRewrite,
|
|
304
289
|
urlHandler: _urlHandler,
|
|
@@ -342,7 +327,7 @@ async function normalizeUrl(pageContextInit, globalContext, httpRequestId) {
|
|
|
342
327
|
return null;
|
|
343
328
|
logRuntimeInfo?.(`URL normalized from ${pc.cyan(urlOriginal)} to ${pc.cyan(urlNormalized)} (https://vike.dev/url-normalization)`, httpRequestId, 'info');
|
|
344
329
|
const httpResponse = createHttpResponseRedirect({ url: urlNormalized, statusCode: 301 }, pageContextInit);
|
|
345
|
-
const pageContextHttpResponse = createPageContext(pageContextInit);
|
|
330
|
+
const pageContextHttpResponse = createPageContext(pageContextInit, false);
|
|
346
331
|
objectAssign(pageContextHttpResponse, { httpResponse });
|
|
347
332
|
return pageContextHttpResponse;
|
|
348
333
|
}
|
|
@@ -384,7 +369,7 @@ async function getPermanentRedirect(pageContextInit, globalContext, httpRequestI
|
|
|
384
369
|
}
|
|
385
370
|
logRuntimeInfo?.(`Permanent redirection defined by config.redirects (https://vike.dev/redirects)`, httpRequestId, 'info');
|
|
386
371
|
const httpResponse = createHttpResponseRedirect({ url: urlTarget, statusCode: 301 }, pageContextInit);
|
|
387
|
-
const pageContextHttpResponse = createPageContext(pageContextInit);
|
|
372
|
+
const pageContextHttpResponse = createPageContext(pageContextInit, false);
|
|
388
373
|
objectAssign(pageContextHttpResponse, { httpResponse });
|
|
389
374
|
return pageContextHttpResponse;
|
|
390
375
|
}
|
|
@@ -405,10 +390,10 @@ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalConte
|
|
|
405
390
|
const abortCall = pageContextAbort._abortCall;
|
|
406
391
|
assert(abortCall);
|
|
407
392
|
assertUsage(errorPageId, `You called ${pc.cyan(abortCall)} but you didn't define an error page, make sure to define one https://vike.dev/error-page`);
|
|
408
|
-
const pageContext = createPageContext({});
|
|
393
|
+
const pageContext = createPageContext({}, false);
|
|
409
394
|
objectAssign(pageContext, { pageId: errorPageId });
|
|
410
395
|
objectAssign(pageContext, pageContextAbort);
|
|
411
|
-
objectAssign(pageContext, pageContextErrorPageInit);
|
|
396
|
+
objectAssign(pageContext, pageContextErrorPageInit, true);
|
|
412
397
|
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
413
398
|
// We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
|
|
414
399
|
pageContextSerialized = serializePageContextClientSide(pageContext);
|
|
@@ -429,7 +414,7 @@ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalConte
|
|
|
429
414
|
return { pageContextReturn };
|
|
430
415
|
}
|
|
431
416
|
if (pageContextAbort._urlRedirect) {
|
|
432
|
-
const pageContextReturn = createPageContext(pageContextInit);
|
|
417
|
+
const pageContextReturn = createPageContext(pageContextInit, false);
|
|
433
418
|
objectAssign(pageContextReturn, pageContextAbort);
|
|
434
419
|
const httpResponse = createHttpResponseRedirect(pageContextAbort._urlRedirect, pageContextInit);
|
|
435
420
|
objectAssign(pageContextReturn, { httpResponse });
|
|
@@ -444,7 +429,7 @@ async function checkBaseUrl(pageContextInit, globalContext) {
|
|
|
444
429
|
const { isBaseMissing } = parseUrl(urlOriginal, baseServer);
|
|
445
430
|
if (!isBaseMissing)
|
|
446
431
|
return;
|
|
447
|
-
const pageContext = createPageContext(pageContextInit);
|
|
432
|
+
const pageContext = createPageContext(pageContextInit, false);
|
|
448
433
|
const httpResponse = createHttpResponseBaseIsMissing(urlOriginal, baseServer);
|
|
449
434
|
objectAssign(pageContext, {
|
|
450
435
|
httpResponse,
|
|
@@ -457,7 +442,7 @@ function renderInvalidRequest(pageContextInit) {
|
|
|
457
442
|
const urlPathnameWithBase = parseUrl(pageContextInit.urlOriginal, '/').pathname;
|
|
458
443
|
assertIsNotViteRequest(urlPathnameWithBase, pageContextInit.urlOriginal);
|
|
459
444
|
if (urlPathnameWithBase.endsWith('/favicon.ico')) {
|
|
460
|
-
const pageContext = createPageContext(pageContextInit);
|
|
445
|
+
const pageContext = createPageContext(pageContextInit, false);
|
|
461
446
|
const httpResponse = createHttpResponseFavicon404();
|
|
462
447
|
objectAssign(pageContext, { httpResponse });
|
|
463
448
|
checkType(pageContext);
|
|
@@ -31,7 +31,7 @@ export * from '../../utils/urlToFile.js';
|
|
|
31
31
|
export * from '../../utils/getGlobalObject.js';
|
|
32
32
|
export * from '../../utils/freezePartial.js';
|
|
33
33
|
export * from '../../utils/isNpmPackage.js';
|
|
34
|
-
export * from '../../utils/
|
|
34
|
+
export * from '../../utils/isNullish.js';
|
|
35
35
|
export * from '../../utils/isScriptFile.js';
|
|
36
36
|
export * from '../../utils/removeFileExtention.js';
|
|
37
37
|
export * from '../../utils/objectKeys.js';
|
|
@@ -35,7 +35,7 @@ export * from '../../utils/urlToFile.js';
|
|
|
35
35
|
export * from '../../utils/getGlobalObject.js';
|
|
36
36
|
export * from '../../utils/freezePartial.js';
|
|
37
37
|
export * from '../../utils/isNpmPackage.js';
|
|
38
|
-
export * from '../../utils/
|
|
38
|
+
export * from '../../utils/isNullish.js';
|
|
39
39
|
export * from '../../utils/isScriptFile.js';
|
|
40
40
|
export * from '../../utils/removeFileExtention.js';
|
|
41
41
|
export * from '../../utils/objectKeys.js';
|
|
@@ -20,8 +20,8 @@ async function createDevMiddleware(options = {}) {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
-
const {
|
|
24
|
-
const server = await createServer(
|
|
23
|
+
const { viteConfigFromUserEnhanced } = await prepareViteApiCall(optionsMod, 'dev');
|
|
24
|
+
const server = await createServer(viteConfigFromUserEnhanced);
|
|
25
25
|
const devMiddleware = server.middlewares;
|
|
26
26
|
return { devMiddleware, viteServer: server, viteConfig: server.config };
|
|
27
27
|
}
|
|
@@ -10,7 +10,7 @@ function assertV1Design(pageConfigs, pageFilesAll) {
|
|
|
10
10
|
assert(pageConfigs.length > 0);
|
|
11
11
|
const filesV1 = unique(pageConfigs
|
|
12
12
|
.map((p) => Object.values(p.configValueSources).map((sources) => sources
|
|
13
|
-
.map((c) => c.
|
|
13
|
+
.map((c) => c.definedAt)
|
|
14
14
|
.map((definedAt) => (definedAt.definedBy ? null : definedAt.filePathAbsoluteUserRootDir))
|
|
15
15
|
.filter(isNotNullish)
|
|
16
16
|
.map((filePathToShowToUser) => indent + filePathToShowToUser)))
|
|
@@ -10,6 +10,6 @@ export * from '../../utils/parseUrl.js';
|
|
|
10
10
|
export * from '../../utils/parseUrl-extras.js';
|
|
11
11
|
export * from '../../utils/isObject.js';
|
|
12
12
|
export * from '../../utils/assertIsNotBrowser.js';
|
|
13
|
-
export * from '../../utils/
|
|
13
|
+
export * from '../../utils/isNullish.js';
|
|
14
14
|
export * from '../../utils/unique.js';
|
|
15
15
|
export * from '../../utils/debug.js';
|
|
@@ -12,6 +12,6 @@ export * from '../../utils/parseUrl.js';
|
|
|
12
12
|
export * from '../../utils/parseUrl-extras.js';
|
|
13
13
|
export * from '../../utils/isObject.js';
|
|
14
14
|
export * from '../../utils/assertIsNotBrowser.js';
|
|
15
|
-
export * from '../../utils/
|
|
15
|
+
export * from '../../utils/isNullish.js';
|
|
16
16
|
export * from '../../utils/unique.js';
|
|
17
17
|
export * from '../../utils/debug.js';
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { isVirtualFileId };
|
|
2
2
|
export { getVirtualFileId };
|
|
3
3
|
export { resolveVirtualFileId };
|
|
4
|
+
export { removeVirtualIdTag };
|
|
4
5
|
declare function isVirtualFileId(id: string): boolean;
|
|
5
6
|
declare function getVirtualFileId(id: string): string;
|
|
6
7
|
declare function resolveVirtualFileId(id: string): string;
|
|
8
|
+
declare function removeVirtualIdTag(id: string): string;
|
|
@@ -1,32 +1,36 @@
|
|
|
1
1
|
export { isVirtualFileId };
|
|
2
2
|
export { getVirtualFileId };
|
|
3
3
|
export { resolveVirtualFileId };
|
|
4
|
+
export { removeVirtualIdTag };
|
|
4
5
|
import pc from '@brillout/picocolors';
|
|
5
6
|
import { assert, assertUsage } from './utils.js';
|
|
6
7
|
const idBase = 'virtual:vike:';
|
|
7
8
|
// https://vitejs.dev/guide/api-plugin.html#virtual-modules-convention
|
|
8
|
-
const
|
|
9
|
+
const virtualIdTag = '\0';
|
|
9
10
|
function isVirtualFileId(id) {
|
|
10
11
|
if (id.startsWith(idBase))
|
|
11
12
|
return true;
|
|
12
|
-
if (id.startsWith(
|
|
13
|
+
if (id.startsWith(virtualIdTag + idBase))
|
|
13
14
|
return true;
|
|
14
15
|
// https://github.com/vikejs/vike/issues/1985
|
|
15
16
|
assertUsage(!id.includes(idBase), `Encountered a module ID ${pc.cyan(id)} that is unexpected. Are you using a tool that modifies the ID of modules? For example, the baseUrl setting in tsconfig.json cannot be used.`);
|
|
16
17
|
return false;
|
|
17
18
|
}
|
|
18
19
|
function getVirtualFileId(id) {
|
|
19
|
-
|
|
20
|
-
id = id.slice(tag.length);
|
|
21
|
-
}
|
|
22
|
-
assert(!id.startsWith(tag));
|
|
23
|
-
return id;
|
|
20
|
+
return removeVirtualIdTag(id);
|
|
24
21
|
}
|
|
25
22
|
function resolveVirtualFileId(id) {
|
|
26
23
|
assert(isVirtualFileId(id));
|
|
27
|
-
if (!id.startsWith(
|
|
28
|
-
id =
|
|
24
|
+
if (!id.startsWith(virtualIdTag)) {
|
|
25
|
+
id = virtualIdTag + id;
|
|
26
|
+
}
|
|
27
|
+
assert(id.startsWith(virtualIdTag));
|
|
28
|
+
return id;
|
|
29
|
+
}
|
|
30
|
+
function removeVirtualIdTag(id) {
|
|
31
|
+
if (id.startsWith(virtualIdTag)) {
|
|
32
|
+
id = id.slice(virtualIdTag.length);
|
|
29
33
|
}
|
|
30
|
-
assert(id.startsWith(
|
|
34
|
+
assert(!id.startsWith(virtualIdTag));
|
|
31
35
|
return id;
|
|
32
36
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOT_SERIALIZABLE = "__VIKE__NOT_SERIALIZABLE__";
|