vike 0.4.171 → 0.4.172-commit-ea2b76c
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/plugin/plugins/buildConfig.js +3 -4
- package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
- package/dist/cjs/node/plugin/plugins/devConfig/index.js +2 -1
- package/dist/cjs/node/plugin/plugins/envVars.js +2 -1
- package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +1 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/{generateEagerImport.js → addImportStatement.js} +8 -10
- package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +0 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +17 -6
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +2 -2
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +31 -75
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -43
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +9 -50
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
- package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +17 -2
- package/dist/cjs/node/prerender/runPrerender.js +35 -15
- package/dist/cjs/node/prerender/utils.js +1 -0
- package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +3 -3
- package/dist/cjs/node/runtime/html/injectAssets/getViteDevScripts.js +2 -1
- package/dist/cjs/node/runtime/html/injectAssets/mergeScriptTags.js +2 -8
- package/dist/cjs/node/runtime/html/renderHtml.js +19 -20
- package/dist/cjs/node/runtime/html/stream.js +9 -9
- package/dist/cjs/node/runtime/renderPage/analyzePage.js +9 -7
- package/dist/cjs/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +1 -1
- package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
- package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -8
- package/dist/cjs/node/runtime/renderPage/getHttpResponseBody.js +2 -2
- package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
- package/dist/cjs/node/runtime/renderPage/logErrorHint.js +91 -282
- package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +30 -10
- package/dist/cjs/node/runtime/renderPage.js +24 -17
- package/dist/cjs/node/runtime/utils.js +2 -0
- package/dist/cjs/node/shared/assertV1Design.js +3 -4
- package/dist/cjs/shared/getPageContext.js +5 -0
- package/dist/cjs/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
- package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +2 -2
- package/dist/cjs/shared/getPageFiles/getExports.js +49 -1
- package/dist/cjs/shared/getPageFiles/parseGlobResults.js +15 -8
- package/dist/cjs/shared/hooks/executeHook.js +22 -3
- package/dist/cjs/shared/hooks/getHook.js +2 -2
- package/dist/cjs/shared/page-configs/getConfigValue.js +14 -17
- package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +70 -0
- package/dist/cjs/shared/page-configs/loadConfigValues.js +3 -12
- package/dist/cjs/shared/page-configs/serialize/assertPageConfigsSerialized.js +0 -18
- package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +110 -16
- package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +198 -0
- package/dist/cjs/shared/route/executeGuardHook.js +1 -1
- package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +1 -1
- package/dist/cjs/shared/route/index.js +2 -2
- package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
- package/dist/cjs/shared/route/resolveRouteFunction.js +2 -2
- package/dist/cjs/shared/sortPageContext.js +4 -8
- package/dist/cjs/shared/utils.js +2 -0
- package/dist/cjs/utils/assert.js +1 -1
- package/dist/cjs/utils/assertNodeVersion.js +1 -1
- package/dist/cjs/utils/changeEnumerable.js +9 -0
- package/dist/cjs/utils/escapeHtml.js +14 -0
- package/dist/cjs/utils/getPropAccessNotation.js +1 -4
- package/dist/cjs/utils/hasProp.js +5 -7
- package/dist/cjs/utils/normalizeHeaders.js +13 -0
- package/dist/cjs/utils/objectAssign.js +1 -1
- package/dist/cjs/utils/objectDefineProperty.js +8 -0
- package/dist/cjs/utils/objectKeys.js +8 -4
- package/dist/cjs/utils/projectInfo.js +1 -1
- package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +6 -4
- package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +16 -12
- package/dist/esm/client/client-routing-runtime/installClientRouter.js +18 -10
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +3 -3
- package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +4 -4
- package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -0
- package/dist/esm/client/server-routing-runtime/utils.js +1 -0
- package/dist/esm/client/shared/executeOnRenderClientHook.js +1 -1
- package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +3 -2
- package/dist/esm/client/shared/getPageContextProxyForUser.js +35 -48
- package/dist/esm/client/shared/loadUserFilesClientSide.js +4 -4
- package/dist/esm/node/plugin/plugins/buildConfig.js +3 -4
- package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
- package/dist/esm/node/plugin/plugins/devConfig/index.js +2 -1
- package/dist/esm/node/plugin/plugins/envVars.js +2 -1
- package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/addImportStatement.d.ts +14 -0
- package/dist/esm/node/plugin/plugins/importUserCode/{generateEagerImport.js → addImportStatement.js} +7 -9
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +0 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +2 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +18 -7
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +31 -75
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -43
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +9 -50
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.d.ts +1 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
- package/dist/esm/node/plugin/shared/addSsrMiddleware.js +14 -2
- package/dist/esm/node/prerender/runPrerender.js +37 -17
- package/dist/esm/node/prerender/utils.d.ts +1 -0
- package/dist/esm/node/prerender/utils.js +1 -0
- package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +3 -3
- package/dist/esm/node/runtime/html/injectAssets/getViteDevScripts.js +3 -2
- package/dist/esm/node/runtime/html/injectAssets/mergeScriptTags.d.ts +1 -1
- package/dist/esm/node/runtime/html/injectAssets/mergeScriptTags.js +2 -8
- package/dist/esm/node/runtime/html/renderHtml.js +19 -20
- package/dist/esm/node/runtime/html/stream.d.ts +1 -1
- package/dist/esm/node/runtime/html/stream.js +9 -9
- package/dist/esm/node/runtime/renderPage/analyzePage.js +9 -7
- package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +2 -2
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
- package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -8
- package/dist/esm/node/runtime/renderPage/getHttpResponseBody.js +2 -2
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -6
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
- package/dist/esm/node/runtime/renderPage/logErrorHint.d.ts +2 -6
- package/dist/esm/node/runtime/renderPage/logErrorHint.js +92 -283
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +65 -39
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +31 -11
- package/dist/esm/node/runtime/renderPage.js +24 -17
- package/dist/esm/node/runtime/utils.d.ts +2 -0
- package/dist/esm/node/runtime/utils.js +2 -0
- package/dist/esm/node/shared/assertV1Design.d.ts +2 -2
- package/dist/esm/node/shared/assertV1Design.js +3 -4
- package/dist/esm/shared/VikeNamespace.d.ts +9 -0
- package/dist/esm/shared/getPageContext.d.ts +1 -0
- package/dist/esm/shared/getPageContext.js +1 -0
- package/dist/esm/shared/{addUrlComputedProps.d.ts → getPageContextUrlComputed.d.ts} +23 -21
- package/dist/esm/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
- package/dist/esm/shared/getPageFiles/analyzeClientSide.js +3 -3
- package/dist/esm/shared/getPageFiles/getExports.d.ts +36 -0
- package/dist/esm/shared/getPageFiles/getExports.js +50 -2
- package/dist/esm/shared/getPageFiles/parseGlobResults.js +14 -7
- package/dist/esm/shared/hooks/executeHook.d.ts +10 -1
- package/dist/esm/shared/hooks/executeHook.js +21 -2
- package/dist/esm/shared/hooks/getHook.d.ts +2 -2
- package/dist/esm/shared/hooks/getHook.js +3 -3
- package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +2 -2
- package/dist/esm/shared/page-configs/PageConfig.d.ts +14 -8
- package/dist/esm/shared/page-configs/getConfigValue.d.ts +12 -12
- package/dist/esm/shared/page-configs/getConfigValue.js +13 -16
- package/dist/esm/shared/page-configs/getConfigValueBuildTime.d.ts +9 -0
- package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +67 -0
- package/dist/esm/shared/page-configs/loadConfigValues.js +3 -12
- package/dist/esm/shared/page-configs/serialize/PageConfigSerialized.d.ts +17 -21
- package/dist/esm/shared/page-configs/serialize/assertPageConfigsSerialized.d.ts +1 -5
- package/dist/esm/shared/page-configs/serialize/assertPageConfigsSerialized.js +1 -16
- package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +4 -1
- package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +109 -15
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +5 -0
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +192 -0
- package/dist/esm/shared/route/executeGuardHook.js +1 -1
- package/dist/esm/shared/route/executeOnBeforeRouteHook.js +1 -1
- package/dist/esm/shared/route/index.d.ts +3 -3
- package/dist/esm/shared/route/index.js +2 -2
- package/dist/esm/shared/route/loadPageRoutes.js +3 -3
- package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
- package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
- package/dist/esm/shared/sortPageContext.js +4 -8
- package/dist/esm/shared/types.d.ts +32 -6
- package/dist/esm/shared/utils.d.ts +2 -0
- package/dist/esm/shared/utils.js +2 -0
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/utils/assert.js +1 -1
- package/dist/esm/utils/assertNodeVersion.js +1 -1
- package/dist/esm/utils/changeEnumerable.d.ts +2 -0
- package/dist/esm/utils/changeEnumerable.js +5 -0
- package/dist/esm/utils/escapeHtml.d.ts +1 -0
- package/dist/esm/utils/escapeHtml.js +10 -0
- package/dist/esm/utils/getPropAccessNotation.d.ts +1 -2
- package/dist/esm/utils/getPropAccessNotation.js +2 -6
- package/dist/esm/utils/hasProp.d.ts +4 -13
- package/dist/esm/utils/hasProp.js +5 -7
- package/dist/esm/utils/normalizeHeaders.d.ts +1 -0
- package/dist/esm/utils/normalizeHeaders.js +9 -0
- package/dist/esm/utils/objectAssign.js +1 -1
- package/dist/esm/utils/objectDefineProperty.d.ts +4 -0
- package/dist/esm/utils/objectDefineProperty.js +4 -0
- package/dist/esm/utils/objectKeys.d.ts +1 -3
- package/dist/esm/utils/objectKeys.js +8 -4
- package/dist/esm/utils/projectInfo.d.ts +2 -2
- package/dist/esm/utils/projectInfo.js +1 -1
- package/package.json +21 -12
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -76
- package/dist/cjs/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -14
- package/dist/cjs/node/shared/getClientEntry.js +0 -12
- package/dist/cjs/shared/page-configs/serialize/parseConfigValuesImported.js +0 -85
- package/dist/cjs/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -24
- package/dist/cjs/shared/page-configs/serialize/serializeConfigValue.js +0 -50
- package/dist/esm/node/plugin/plugins/importUserCode/generateEagerImport.d.ts +0 -16
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.d.ts +0 -5
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -70
- package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.d.ts +0 -5
- package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -11
- package/dist/esm/node/shared/getClientEntry.d.ts +0 -3
- package/dist/esm/node/shared/getClientEntry.js +0 -9
- package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.d.ts +0 -4
- package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.js +0 -82
- package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.d.ts +0 -4
- package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -21
- package/dist/esm/shared/page-configs/serialize/serializeConfigValue.d.ts +0 -8
- package/dist/esm/shared/page-configs/serialize/serializeConfigValue.js +0 -47
|
@@ -6,9 +6,9 @@ export { getRenderContext };
|
|
|
6
6
|
import { getErrorPageId } from '../../../shared/error-page.js';
|
|
7
7
|
import { getHtmlString } from '../html/renderHtml.js';
|
|
8
8
|
import { getPageFilesAll } from '../../../shared/getPageFiles.js';
|
|
9
|
-
import { assert, assertUsage, hasProp, objectAssign } from '../utils.js';
|
|
9
|
+
import { assert, assertUsage, assertWarning, hasProp, normalizeHeaders, objectAssign } from '../utils.js';
|
|
10
10
|
import { serializePageContextClientSide } from '../html/serializePageContextClientSide.js';
|
|
11
|
-
import {
|
|
11
|
+
import { getPageContextUrlComputed } from '../../../shared/getPageContextUrlComputed.js';
|
|
12
12
|
import { getGlobalContext } from '../globalContext.js';
|
|
13
13
|
import { createHttpResponseObject, createHttpResponsePageContextJson } from './createHttpResponseObject.js';
|
|
14
14
|
import { loadUserFilesServerSide } from './loadUserFilesServerSide.js';
|
|
@@ -21,7 +21,6 @@ import { executeGuardHook } from '../../../shared/route/executeGuardHook.js';
|
|
|
21
21
|
import { loadPageRoutes } from '../../../shared/route/loadPageRoutes.js';
|
|
22
22
|
import pc from '@brillout/picocolors';
|
|
23
23
|
import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
|
|
24
|
-
import { assertV1Design } from '../../shared/assertV1Design.js';
|
|
25
24
|
async function renderPageAlreadyRouted(pageContext) {
|
|
26
25
|
// pageContext._pageId can either be the:
|
|
27
26
|
// - ID of the page matching the routing, or the
|
|
@@ -106,9 +105,9 @@ async function prerender404Page(renderContext, pageContextInit_) {
|
|
|
106
105
|
_debugRouteMatches: []
|
|
107
106
|
};
|
|
108
107
|
const pageContextInit = {
|
|
109
|
-
urlOriginal: '/fake-404-url'
|
|
110
|
-
...pageContextInit_
|
|
108
|
+
urlOriginal: '/fake-404-url' // A URL is needed for `applyViteHtmlTransform`
|
|
111
109
|
};
|
|
110
|
+
objectAssign(pageContextInit, pageContextInit_);
|
|
112
111
|
{
|
|
113
112
|
const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, renderContext);
|
|
114
113
|
objectAssign(pageContext, pageContextInitEnhanced);
|
|
@@ -116,15 +115,16 @@ async function prerender404Page(renderContext, pageContextInit_) {
|
|
|
116
115
|
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
117
116
|
return prerenderPage(pageContext);
|
|
118
117
|
}
|
|
119
|
-
function getPageContextInitEnhanced(pageContextInit, renderContext, {
|
|
118
|
+
function getPageContextInitEnhanced(pageContextInit, renderContext, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
|
|
120
119
|
urlRewrite: null,
|
|
121
120
|
urlHandler: null,
|
|
122
121
|
isClientSideNavigation: false
|
|
123
122
|
} } = {}) {
|
|
124
123
|
assert(pageContextInit.urlOriginal);
|
|
125
124
|
const globalContext = getGlobalContext();
|
|
126
|
-
const pageContextInitEnhanced = {
|
|
127
|
-
|
|
125
|
+
const pageContextInitEnhanced = {};
|
|
126
|
+
objectAssign(pageContextInitEnhanced, pageContextInit);
|
|
127
|
+
objectAssign(pageContextInitEnhanced, {
|
|
128
128
|
_objectCreatedByVike: true,
|
|
129
129
|
// The following is defined on `pageContext` because we can eventually make these non-global (e.g. sot that two pages can have different includeAssetsImportedByServer settings)
|
|
130
130
|
_baseServer: globalContext.baseServer,
|
|
@@ -141,8 +141,27 @@ function getPageContextInitEnhanced(pageContextInit, renderContext, { urlCompute
|
|
|
141
141
|
_urlRewrite: urlRewrite,
|
|
142
142
|
_urlHandler: urlHandler,
|
|
143
143
|
isClientSideNavigation
|
|
144
|
-
};
|
|
145
|
-
|
|
144
|
+
});
|
|
145
|
+
// pageContext.urlParsed
|
|
146
|
+
const pageContextUrlComputed = getPageContextUrlComputed(pageContextInitEnhanced);
|
|
147
|
+
objectAssign(pageContextInitEnhanced, pageContextUrlComputed);
|
|
148
|
+
// pageContext.headers
|
|
149
|
+
{
|
|
150
|
+
let headers;
|
|
151
|
+
if (pageContextInit.headersOriginal) {
|
|
152
|
+
headers = normalizeHeaders(pageContextInit.headersOriginal);
|
|
153
|
+
assertUsage(!('headers' in pageContextInit), "You're defining pageContextInit.headersOriginal as well as pageContextInit.headers but you should only define pageContextInit.headersOriginal instead, see https://vike.dev/headers");
|
|
154
|
+
}
|
|
155
|
+
else if (pageContextInit.headers) {
|
|
156
|
+
headers = pageContextInit.headers;
|
|
157
|
+
// TODO/next-major-release: assertUsage() instead of assertWarning()
|
|
158
|
+
assertWarning(false, 'Setting pageContextInit.headers is deprecated: set pageContextInit.headersOriginal instead, see https://vike.dev/headers', { onlyOnce: true });
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
headers = null;
|
|
162
|
+
}
|
|
163
|
+
objectAssign(pageContextInitEnhanced, { headers });
|
|
164
|
+
}
|
|
146
165
|
return pageContextInitEnhanced;
|
|
147
166
|
}
|
|
148
167
|
// TODO: remove getRenderContext() in favor of getGlobalObject() + reloadGlobalContext()
|
|
@@ -151,7 +170,8 @@ async function getRenderContext() {
|
|
|
151
170
|
const globalContext = getGlobalContext();
|
|
152
171
|
const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal } = await getPageFilesAll(false, globalContext.isProduction);
|
|
153
172
|
const { pageRoutes, onBeforeRouteHook } = await loadPageRoutes(pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds);
|
|
154
|
-
assertV1Design(
|
|
173
|
+
// We assume assertV1Design() was already called at build-time
|
|
174
|
+
assert(pageFilesAll.length === 0 || pageConfigs.length === 0);
|
|
155
175
|
const renderContext = {
|
|
156
176
|
pageFilesAll: pageFilesAll,
|
|
157
177
|
pageConfigs,
|
|
@@ -199,7 +199,7 @@ function logHttpRequest(urlOriginal, httpRequestId) {
|
|
|
199
199
|
logRuntimeInfo?.(getRequestInfoMessage(urlOriginal), httpRequestId, 'info', clearErrors);
|
|
200
200
|
}
|
|
201
201
|
function getRequestInfoMessage(urlOriginal) {
|
|
202
|
-
return `HTTP request: ${
|
|
202
|
+
return `HTTP request: ${prettyUrl(urlOriginal)}`;
|
|
203
203
|
}
|
|
204
204
|
function logHttpResponse(urlOriginal, httpRequestId, pageContextReturn) {
|
|
205
205
|
const statusCode = pageContextReturn.httpResponse?.statusCode ?? null;
|
|
@@ -215,7 +215,7 @@ function logHttpResponse(urlOriginal, httpRequestId, pageContextReturn) {
|
|
|
215
215
|
// - We should show `HTTP response ${urlOriginal} ERR` instead.
|
|
216
216
|
// - Maybe we can/should make the error available at pageContext.errorWhileRendering
|
|
217
217
|
assert(errorWhileRendering === null || errorWhileRendering === undefined);
|
|
218
|
-
msg = `HTTP response ${
|
|
218
|
+
msg = `HTTP response ${prettyUrl(urlOriginal)} ${pc.dim('null')}`;
|
|
219
219
|
// Erroneous value (it shoud sometimes be `false`) but it's fine as it doesn't seem to have much of an impact.
|
|
220
220
|
isNominal = true;
|
|
221
221
|
}
|
|
@@ -235,7 +235,7 @@ function logHttpResponse(urlOriginal, httpRequestId, pageContextReturn) {
|
|
|
235
235
|
const urlRedirect = headerRedirect[1];
|
|
236
236
|
urlOriginal = urlRedirect;
|
|
237
237
|
}
|
|
238
|
-
msg = `HTTP ${type} ${
|
|
238
|
+
msg = `HTTP ${type} ${prettyUrl(urlOriginal)} ${color(statusCode ?? 'ERR')}`;
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
241
|
logRuntimeInfo?.(msg, httpRequestId, isNominal ? 'info' : 'error');
|
|
@@ -283,12 +283,13 @@ async function renderPageNominal(pageContext) {
|
|
|
283
283
|
async function getPageContextErrorPageInit(pageContextInit, errNominalPage, pageContextNominalPagePartial, renderContext, httpRequestId) {
|
|
284
284
|
const pageContextInitEnhanced = getPageContextInitEnhancedSSR(pageContextInit, renderContext, null, httpRequestId);
|
|
285
285
|
assert(errNominalPage);
|
|
286
|
-
const pageContext = {
|
|
287
|
-
|
|
286
|
+
const pageContext = {};
|
|
287
|
+
objectAssign(pageContext, pageContextInitEnhanced);
|
|
288
|
+
objectAssign(pageContext, {
|
|
288
289
|
is404: false,
|
|
289
290
|
errorWhileRendering: errNominalPage,
|
|
290
291
|
routeParams: {}
|
|
291
|
-
};
|
|
292
|
+
});
|
|
292
293
|
objectAssign(pageContext, {
|
|
293
294
|
_debugRouteMatches: pageContextNominalPagePartial._debugRouteMatches || 'ROUTING_ERROR'
|
|
294
295
|
});
|
|
@@ -340,7 +341,9 @@ function normalizeUrl(pageContextInit, httpRequestId) {
|
|
|
340
341
|
return null;
|
|
341
342
|
logRuntimeInfo?.(`URL normalized from ${pc.cyan(urlOriginal)} to ${pc.cyan(urlNormalized)} (https://vike.dev/url-normalization)`, httpRequestId, 'info');
|
|
342
343
|
const httpResponse = createHttpResponseObjectRedirect({ url: urlNormalized, statusCode: 301 }, pageContextInit.urlOriginal);
|
|
343
|
-
const pageContextHttpResponse = {
|
|
344
|
+
const pageContextHttpResponse = {};
|
|
345
|
+
objectAssign(pageContextHttpResponse, pageContextInit);
|
|
346
|
+
objectAssign(pageContextHttpResponse, { httpResponse });
|
|
344
347
|
return pageContextHttpResponse;
|
|
345
348
|
}
|
|
346
349
|
function getPermanentRedirect(pageContextInit, httpRequestId) {
|
|
@@ -375,7 +378,9 @@ function getPermanentRedirect(pageContextInit, httpRequestId) {
|
|
|
375
378
|
}
|
|
376
379
|
logRuntimeInfo?.(`Permanent redirect defined by your config.redirects (https://vike.dev/redirects)`, httpRequestId, 'info');
|
|
377
380
|
const httpResponse = createHttpResponseObjectRedirect({ url: urlTarget, statusCode: 301 }, urlWithoutBase);
|
|
378
|
-
const pageContextHttpResponse = {
|
|
381
|
+
const pageContextHttpResponse = {};
|
|
382
|
+
objectAssign(pageContextHttpResponse, pageContextInit);
|
|
383
|
+
objectAssign(pageContextHttpResponse, { httpResponse });
|
|
379
384
|
return pageContextHttpResponse;
|
|
380
385
|
}
|
|
381
386
|
async function handleAbortError(errAbort, pageContextsFromRewrite, pageContextInit,
|
|
@@ -391,11 +396,11 @@ pageContextNominalPageInit, httpRequestId, renderContext, pageContextErrorPageIn
|
|
|
391
396
|
assert(abortCall);
|
|
392
397
|
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`);
|
|
393
398
|
const pageContext = {
|
|
394
|
-
_pageId: errorPageId
|
|
395
|
-
...pageContextAbort,
|
|
396
|
-
...pageContextErrorPageInit,
|
|
397
|
-
...renderContext
|
|
399
|
+
_pageId: errorPageId
|
|
398
400
|
};
|
|
401
|
+
objectAssign(pageContext, pageContextAbort);
|
|
402
|
+
objectAssign(pageContext, pageContextErrorPageInit);
|
|
403
|
+
objectAssign(pageContext, renderContext);
|
|
399
404
|
objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
|
|
400
405
|
// We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
|
|
401
406
|
pageContextSerialized = serializePageContextClientSide(pageContext);
|
|
@@ -416,10 +421,9 @@ pageContextNominalPageInit, httpRequestId, renderContext, pageContextErrorPageIn
|
|
|
416
421
|
return { pageContextReturn };
|
|
417
422
|
}
|
|
418
423
|
if (pageContextAbort._urlRedirect) {
|
|
419
|
-
const pageContextReturn = {
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
};
|
|
424
|
+
const pageContextReturn = {};
|
|
425
|
+
objectAssign(pageContextReturn, pageContextInit);
|
|
426
|
+
objectAssign(pageContextReturn, pageContextAbort);
|
|
423
427
|
const httpResponse = createHttpResponseObjectRedirect(pageContextAbort._urlRedirect, (() => {
|
|
424
428
|
const { pathname, searchOriginal } = pageContextNominalPageInit.urlParsed;
|
|
425
429
|
const urlLogical = createUrlFromComponents(null, pathname, searchOriginal,
|
|
@@ -439,9 +443,12 @@ function checkBaseUrl(pageContextInit, httpRequestId) {
|
|
|
439
443
|
const { urlWithoutPageContextRequestSuffix } = handlePageContextRequestUrl(urlOriginal);
|
|
440
444
|
const { hasBaseServer } = parseUrl(urlWithoutPageContextRequestSuffix, baseServer);
|
|
441
445
|
if (!hasBaseServer) {
|
|
442
|
-
logRuntimeInfo?.(`${getRequestInfoMessage(urlOriginal)} skipped because URL ${
|
|
446
|
+
logRuntimeInfo?.(`${getRequestInfoMessage(urlOriginal)} skipped because URL ${prettyUrl(urlOriginal)} doesn't start with Base URL ${prettyUrl(baseServer)} (https://vike.dev/base-url)`, httpRequestId, 'info');
|
|
443
447
|
const pageContextHttpResponseNull = getPageContextHttpResponseNull(pageContextInit);
|
|
444
448
|
return pageContextHttpResponseNull;
|
|
445
449
|
}
|
|
446
450
|
return null;
|
|
447
451
|
}
|
|
452
|
+
function prettyUrl(url) {
|
|
453
|
+
return pc.bold(decodeURI(url));
|
|
454
|
+
}
|
|
@@ -49,3 +49,5 @@ export * from '../../utils/truncateString.js';
|
|
|
49
49
|
export * from '../../utils/formatHintLog.js';
|
|
50
50
|
export * from '../../utils/joinEnglish.js';
|
|
51
51
|
export * from '../../utils/isArrayOfStrings.js';
|
|
52
|
+
export * from '../../utils/escapeHtml.js';
|
|
53
|
+
export * from '../../utils/normalizeHeaders.js';
|
|
@@ -52,3 +52,5 @@ export * from '../../utils/truncateString.js';
|
|
|
52
52
|
export * from '../../utils/formatHintLog.js';
|
|
53
53
|
export * from '../../utils/joinEnglish.js';
|
|
54
54
|
export * from '../../utils/isArrayOfStrings.js';
|
|
55
|
+
export * from '../../utils/escapeHtml.js';
|
|
56
|
+
export * from '../../utils/normalizeHeaders.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { assertV1Design };
|
|
2
2
|
import { PageFile } from '../../shared/getPageFiles.js';
|
|
3
|
-
import type { PageConfigBuildTime
|
|
4
|
-
declare function assertV1Design(isOldDesign: boolean, pageConfigs:
|
|
3
|
+
import type { PageConfigBuildTime } from '../../shared/page-configs/PageConfig.js';
|
|
4
|
+
declare function assertV1Design(isOldDesign: boolean, pageConfigs: PageConfigBuildTime[], pageFilesAll?: PageFile[]): void;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { assertV1Design };
|
|
2
|
-
import { getConfigValueFilePathToShowToUser } from '../../shared/page-configs/helpers.js';
|
|
3
2
|
import { assert, assertUsage, assertWarning, isNotNullish, unique } from './utils.js';
|
|
4
3
|
function assertV1Design(isOldDesign, pageConfigs, pageFilesAll) {
|
|
5
4
|
const isV1Design = pageConfigs.length > 0;
|
|
@@ -9,10 +8,10 @@ function assertV1Design(isOldDesign, pageConfigs, pageFilesAll) {
|
|
|
9
8
|
assert(pageFilesAll.length > 0);
|
|
10
9
|
const indent = '- ';
|
|
11
10
|
const filesV1 = unique(pageConfigs
|
|
12
|
-
.map((p) => Object.values(p.
|
|
13
|
-
.map((c) =>
|
|
11
|
+
.map((p) => Object.values(p.configValueSources).map((sources) => sources
|
|
12
|
+
.map((c) => c.definedAtFilePath.filePathAbsoluteUserRootDir)
|
|
14
13
|
.filter(isNotNullish)
|
|
15
|
-
.map((filePathToShowToUser) => indent + filePathToShowToUser))
|
|
14
|
+
.map((filePathToShowToUser) => indent + filePathToShowToUser)))
|
|
16
15
|
.flat(2));
|
|
17
16
|
const filesOld = pageFilesAll.map((p) => indent + p.filePath);
|
|
18
17
|
lines.push(...['V1 design files:', ...filesV1, 'Old design files:', ...filesOld]);
|
|
@@ -9,6 +9,7 @@ declare global {
|
|
|
9
9
|
* - You can refine the type of `Config['Page']`.
|
|
10
10
|
* - You can define the type of custom configurations created with `config.meta` (https://vike.dev/meta)
|
|
11
11
|
*
|
|
12
|
+
* https://vike.dev/meta#typescript
|
|
12
13
|
*/
|
|
13
14
|
interface Config {
|
|
14
15
|
}
|
|
@@ -22,6 +23,14 @@ declare global {
|
|
|
22
23
|
*/
|
|
23
24
|
interface PageContext {
|
|
24
25
|
}
|
|
26
|
+
/** Refine the `pageContext.config` type.
|
|
27
|
+
*
|
|
28
|
+
* It's used for cumulative configs: the `pageContext.config[configName]` type is an `array` whereas `Config[configName]` isn't.
|
|
29
|
+
*
|
|
30
|
+
* https://vike.dev/meta#typescript
|
|
31
|
+
*/
|
|
32
|
+
interface ConfigResolved {
|
|
33
|
+
}
|
|
25
34
|
}
|
|
26
35
|
/** This namespace is only used by:
|
|
27
36
|
* - `vike-react`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getPageContext } from './hooks/executeHook.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getPageContext } from './hooks/executeHook.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export type {
|
|
4
|
-
export type {
|
|
5
|
-
export type {
|
|
6
|
-
export type {
|
|
1
|
+
export { getPageContextUrlComputed };
|
|
2
|
+
export { assertPageContextUrl };
|
|
3
|
+
export type { PageContextUrlInternal };
|
|
4
|
+
export type { PageContextUrlClient };
|
|
5
|
+
export type { PageContextUrlServer };
|
|
6
|
+
export type { PageContextUrlSource };
|
|
7
7
|
export type { Url };
|
|
8
8
|
type Url = {
|
|
9
9
|
/** The URL origin, e.g. `https://example.com` of `https://example.com/product/42?details=yes#reviews` */
|
|
@@ -27,23 +27,24 @@ type Url = {
|
|
|
27
27
|
/** @deprecated */
|
|
28
28
|
searchString: null | string;
|
|
29
29
|
};
|
|
30
|
-
type
|
|
30
|
+
type PageContextUrlComputed = {
|
|
31
|
+
/** Parsed information about the current URL */
|
|
32
|
+
urlParsed: Url;
|
|
33
|
+
/** The URL pathname, e.g. `/product/42` of `https://example.com/product/42?details=yes#reviews` */
|
|
34
|
+
urlPathname: string;
|
|
31
35
|
/** @deprecated */
|
|
32
36
|
url: string;
|
|
37
|
+
};
|
|
38
|
+
type PageContextUrl = {
|
|
33
39
|
/** The URL of the HTTP request */
|
|
34
40
|
urlOriginal: string;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
/** Parsed information about the current URL */
|
|
38
|
-
urlParsed: Url;
|
|
39
|
-
};
|
|
40
|
-
/** For Vike internal use */
|
|
41
|
-
type PageContextUrlComputedPropsInternal = PageContextUrlComputedPropsClient & {
|
|
41
|
+
} & PageContextUrlComputed;
|
|
42
|
+
type PageContextUrlInternal = PageContextUrl & {
|
|
42
43
|
_urlRewrite: string | null;
|
|
43
44
|
};
|
|
44
|
-
type
|
|
45
|
-
type
|
|
46
|
-
urlParsed: Omit<
|
|
45
|
+
type PageContextUrlClient = PageContextUrl;
|
|
46
|
+
type PageContextUrlServer = PageContextUrl & {
|
|
47
|
+
urlParsed: Omit<PageContextUrl['urlParsed'], HashProps> & {
|
|
47
48
|
/** Only available on the client-side */
|
|
48
49
|
hash: '';
|
|
49
50
|
/** Only available on the client-side */
|
|
@@ -52,14 +53,15 @@ type PageContextUrlComputedPropsServer = PageContextUrlComputedPropsClient & {
|
|
|
52
53
|
hashOriginal: null;
|
|
53
54
|
};
|
|
54
55
|
};
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
type HashProps = 'hash' | 'hashString' | 'hashOriginal';
|
|
57
|
+
declare function getPageContextUrlComputed(pageContext: PageContextUrlSource): PageContextUrlComputed;
|
|
58
|
+
type PageContextUrlSource = {
|
|
57
59
|
urlOriginal: string;
|
|
58
60
|
urlLogical?: string;
|
|
59
61
|
_urlRewrite: string | null;
|
|
60
62
|
_baseServer: string;
|
|
61
63
|
_urlHandler: null | ((url: string) => string);
|
|
62
64
|
};
|
|
63
|
-
declare function
|
|
65
|
+
declare function assertPageContextUrl(pageContext: {
|
|
64
66
|
urlOriginal: string;
|
|
65
|
-
} &
|
|
67
|
+
} & PageContextUrlClient): void;
|
|
@@ -1,45 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Object.assign(pageContext2, pageContext)
|
|
15
|
-
// ❌ Also breaks the property getters
|
|
16
|
-
const pageContext3 = { ...pageContext }
|
|
17
|
-
// ✅ Preserves property getters of pageContext (see objectAssign() implementation)
|
|
18
|
-
objectAssign(pageContext2, pageContext)
|
|
19
|
-
```
|
|
20
|
-
*/
|
|
21
|
-
assert(isPropertyGetter(pageContext, 'urlPathname'));
|
|
22
|
-
}
|
|
23
|
-
if ('urlParsed' in pageContext)
|
|
24
|
-
assert(isPropertyGetter(pageContext, 'urlParsed'));
|
|
25
|
-
// TODO/v1-release: move pageContext.urlParsed to pageContext.url
|
|
26
|
-
if ('url' in pageContext)
|
|
27
|
-
assert(isPropertyGetter(pageContext, 'url'));
|
|
28
|
-
Object.defineProperty(pageContext, 'urlPathname', {
|
|
1
|
+
export { getPageContextUrlComputed };
|
|
2
|
+
export { assertPageContextUrl };
|
|
3
|
+
// =====================
|
|
4
|
+
// File determining the URL logic.
|
|
5
|
+
// URLs need to be computed, because the user can modify the URL e.g. with onBeforeRoute() for i18n.
|
|
6
|
+
// =====================
|
|
7
|
+
import { objectDefineProperty } from '../utils/objectDefineProperty.js';
|
|
8
|
+
import { assert, parseUrl, assertWarning, isPlainObject, isPropertyGetter, isBrowser, changeEnumerable } from './utils.js';
|
|
9
|
+
function getPageContextUrlComputed(pageContext) {
|
|
10
|
+
assert(typeof pageContext.urlOriginal === 'string');
|
|
11
|
+
assertPageContextUrlComputed(pageContext);
|
|
12
|
+
const pageContextUrlComputed = {};
|
|
13
|
+
objectDefineProperty(pageContextUrlComputed, 'urlPathname', {
|
|
29
14
|
get: urlPathnameGetter,
|
|
30
|
-
enumerable,
|
|
15
|
+
enumerable: true,
|
|
31
16
|
configurable: true
|
|
32
17
|
});
|
|
33
|
-
|
|
18
|
+
objectDefineProperty(pageContextUrlComputed, 'url', {
|
|
34
19
|
get: urlGetter,
|
|
35
20
|
enumerable: false,
|
|
36
21
|
configurable: true
|
|
37
22
|
});
|
|
38
|
-
|
|
23
|
+
objectDefineProperty(pageContextUrlComputed, 'urlParsed', {
|
|
39
24
|
get: urlParsedGetter,
|
|
40
|
-
enumerable,
|
|
25
|
+
enumerable: true,
|
|
41
26
|
configurable: true
|
|
42
27
|
});
|
|
28
|
+
return pageContextUrlComputed;
|
|
43
29
|
}
|
|
44
30
|
function getUrlParsed(pageContext) {
|
|
45
31
|
// We need a url handler function because the onBeforeRoute() hook may set pageContext.urlLogical (typically for i18n)
|
|
@@ -90,7 +76,7 @@ function urlParsedGetter() {
|
|
|
90
76
|
const { origin, pathname, pathnameOriginal, search, searchAll, searchOriginal, hash, hashOriginal } = urlParsedOriginal;
|
|
91
77
|
const hashIsAvailable = isBrowser();
|
|
92
78
|
const warnHashNotAvailable = (prop) => {
|
|
93
|
-
assertWarning(hashIsAvailable, `pageContext.urlParsed.${prop} isn't available on the server-side (HTTP requests don't include the URL hash
|
|
79
|
+
assertWarning(hashIsAvailable, `pageContext.urlParsed.${prop} isn't available on the server-side (HTTP requests don't include the URL hash)`, { onlyOnce: true, showStackTrace: true });
|
|
94
80
|
};
|
|
95
81
|
const urlParsed = {
|
|
96
82
|
origin,
|
|
@@ -120,21 +106,45 @@ function urlParsedGetter() {
|
|
|
120
106
|
return searchOriginal;
|
|
121
107
|
}
|
|
122
108
|
};
|
|
123
|
-
|
|
124
|
-
|
|
109
|
+
changeEnumerable(urlParsed, 'hashString', false);
|
|
110
|
+
changeEnumerable(urlParsed, 'searchString', false);
|
|
125
111
|
if (!hashIsAvailable) {
|
|
126
|
-
|
|
127
|
-
|
|
112
|
+
changeEnumerable(urlParsed, 'hash', false);
|
|
113
|
+
changeEnumerable(urlParsed, 'hashOriginal', false);
|
|
128
114
|
}
|
|
129
115
|
return urlParsed;
|
|
130
116
|
}
|
|
131
|
-
function
|
|
132
|
-
const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
|
|
133
|
-
Object.defineProperty(obj, prop, { ...descriptor, enumerable: false });
|
|
134
|
-
}
|
|
135
|
-
function assertPageContextUrlComputedProps(pageContext) {
|
|
117
|
+
function assertPageContextUrl(pageContext) {
|
|
136
118
|
assert(typeof pageContext.urlOriginal === 'string');
|
|
137
119
|
assert(typeof pageContext.urlPathname === 'string');
|
|
138
120
|
assert(isPlainObject(pageContext.urlParsed));
|
|
139
121
|
assert(pageContext.urlPathname === pageContext.urlParsed.pathname);
|
|
122
|
+
assertPageContextUrlComputed(pageContext);
|
|
123
|
+
}
|
|
124
|
+
function assertPageContextUrlComputed(pageContext) {
|
|
125
|
+
/*
|
|
126
|
+
If the isPropertyGetter() assertions fail then it's most likely because Object.assign() was used instead of `objectAssign()`:
|
|
127
|
+
```js
|
|
128
|
+
const PageContextUrlComputed = getPageContextUrlComputed(pageContext)
|
|
129
|
+
|
|
130
|
+
// ❌ Breaks the property descriptors/getters of pageContext defined by getPageContextUrlComputed() such as pageContext.urlPathname
|
|
131
|
+
Object.assign(pageContext, pageContextUrlComputed)
|
|
132
|
+
|
|
133
|
+
// ❌ Also breaks property descriptors/getters
|
|
134
|
+
const pageContext = { ...pageContextUrlComputed }
|
|
135
|
+
|
|
136
|
+
// ✅ Preserves property descriptors/getters (see objectAssign() implementation)
|
|
137
|
+
objectAssign(pageContext, pageContextUrlComputed)
|
|
138
|
+
```
|
|
139
|
+
*/
|
|
140
|
+
if ('urlPathname' in pageContext) {
|
|
141
|
+
assert(typeof pageContext.urlPathname === 'string');
|
|
142
|
+
assert(isPropertyGetter(pageContext, 'urlPathname'));
|
|
143
|
+
assert(isPropertyGetter(pageContext, 'urlParsed'));
|
|
144
|
+
assert(isPropertyGetter(pageContext, 'url'));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
assert(!('urlParsed' in pageContext));
|
|
148
|
+
assert(!('url' in pageContext));
|
|
149
|
+
}
|
|
140
150
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { analyzeClientSide };
|
|
2
|
-
import {
|
|
2
|
+
import { getConfigValueRuntime } from '../page-configs/getConfigValue.js';
|
|
3
3
|
import { analyzePageClientSide } from './analyzePageClientSide.js';
|
|
4
4
|
function analyzeClientSide(pageConfig, pageFilesAll, pageId) {
|
|
5
5
|
// V1 design
|
|
6
6
|
if (pageConfig) {
|
|
7
|
-
const isClientRouting =
|
|
8
|
-
const isClientSideRenderable =
|
|
7
|
+
const isClientRouting = getConfigValueRuntime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
|
|
8
|
+
const isClientSideRenderable = getConfigValueRuntime(pageConfig, 'isClientSideRenderable', 'boolean')?.value ?? false;
|
|
9
9
|
return { isClientSideRenderable, isClientRouting };
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
@@ -2,6 +2,9 @@ export { getPageContextExports };
|
|
|
2
2
|
export type { ExportsAll };
|
|
3
3
|
export type { PageContextExports };
|
|
4
4
|
export type { ConfigEntries };
|
|
5
|
+
export type { From };
|
|
6
|
+
export type { Sources };
|
|
7
|
+
export type { Source };
|
|
5
8
|
import type { FileType } from './fileTypes.js';
|
|
6
9
|
import type { PageConfigRuntimeLoaded } from './../page-configs/PageConfig.js';
|
|
7
10
|
import type { PageFile } from './getPageFileObject.js';
|
|
@@ -27,6 +30,9 @@ type ConfigEntries = Record<string, {
|
|
|
27
30
|
configDefinedByFile: string | null;
|
|
28
31
|
}[]>;
|
|
29
32
|
type PageContextExports = {
|
|
33
|
+
source: Source;
|
|
34
|
+
sources: Sources;
|
|
35
|
+
from: From;
|
|
30
36
|
config: Record<string, unknown>;
|
|
31
37
|
configEntries: ConfigEntries;
|
|
32
38
|
exports: Record<string, unknown>;
|
|
@@ -34,4 +40,34 @@ type PageContextExports = {
|
|
|
34
40
|
/** @deprecated */
|
|
35
41
|
pageExports: Record<string, unknown>;
|
|
36
42
|
};
|
|
43
|
+
type From = {
|
|
44
|
+
configsStandard: Record<string, // configName
|
|
45
|
+
SourceConfigsStandard>;
|
|
46
|
+
configsCumulative: Record<string, // configName
|
|
47
|
+
SourceConfigsCumulative>;
|
|
48
|
+
configsComputed: Record<string, // configName
|
|
49
|
+
SourceConfigsComputed>;
|
|
50
|
+
};
|
|
51
|
+
type Source = Record<string, // configName
|
|
52
|
+
SourceAny>;
|
|
53
|
+
type Sources = Record<string, // configName
|
|
54
|
+
SourceAny[]>;
|
|
55
|
+
type SourceAny = SourceConfigs;
|
|
56
|
+
type SourceConfigs = SourceConfigsStandard | SourceConfigsCumulative | SourceConfigsComputed;
|
|
57
|
+
type SourceConfigsStandard = {
|
|
58
|
+
type: 'configsStandard';
|
|
59
|
+
value: unknown;
|
|
60
|
+
definedAt: string;
|
|
61
|
+
};
|
|
62
|
+
type SourceConfigsCumulative = {
|
|
63
|
+
type: 'configsCumulative';
|
|
64
|
+
values: {
|
|
65
|
+
value: unknown;
|
|
66
|
+
definedAt: string;
|
|
67
|
+
}[];
|
|
68
|
+
};
|
|
69
|
+
type SourceConfigsComputed = {
|
|
70
|
+
type: 'configsComputed';
|
|
71
|
+
value: unknown;
|
|
72
|
+
};
|
|
37
73
|
declare function getPageContextExports(pageFiles: PageFile[], pageConfig: PageConfigRuntimeLoaded | null): PageContextExports;
|
|
@@ -2,7 +2,7 @@ export { getPageContextExports };
|
|
|
2
2
|
import { isScriptFile, isTemplateFile } from '../../utils/isScriptFile.js';
|
|
3
3
|
import { assert, isObject, assertWarning, assertUsage, makeLast, isBrowser } from '../utils.js';
|
|
4
4
|
import { assertDefaultExports, forbiddenDefaultExports } from './assert_exports_old_design.js';
|
|
5
|
-
import { getConfigDefinedAtOptional } from '../page-configs/getConfigDefinedAt.js';
|
|
5
|
+
import { getConfigDefinedAtOptional, getDefinedAtString } from '../page-configs/getConfigDefinedAt.js';
|
|
6
6
|
import { getConfigValueFilePathToShowToUser } from '../page-configs/helpers.js';
|
|
7
7
|
import pc from '@brillout/picocolors';
|
|
8
8
|
function getPageContextExports(pageFiles, pageConfig) {
|
|
@@ -27,6 +27,18 @@ function getPageContextExports(pageFiles, pageConfig) {
|
|
|
27
27
|
});
|
|
28
28
|
});
|
|
29
29
|
// V1 design
|
|
30
|
+
const source = {};
|
|
31
|
+
const sources = {};
|
|
32
|
+
const addSrc = (src, configName) => {
|
|
33
|
+
source[configName] = src;
|
|
34
|
+
sources[configName] ?? (sources[configName] = []);
|
|
35
|
+
sources[configName].push(src);
|
|
36
|
+
};
|
|
37
|
+
const from = {
|
|
38
|
+
configsStandard: {},
|
|
39
|
+
configsCumulative: {},
|
|
40
|
+
configsComputed: {}
|
|
41
|
+
};
|
|
30
42
|
if (pageConfig) {
|
|
31
43
|
Object.entries(pageConfig.configValues).forEach(([configName, configValue]) => {
|
|
32
44
|
const { value } = configValue;
|
|
@@ -41,6 +53,39 @@ function getPageContextExports(pageFiles, pageConfig) {
|
|
|
41
53
|
configDefinedAt,
|
|
42
54
|
configDefinedByFile: configValueFilePathToShowToUser
|
|
43
55
|
});
|
|
56
|
+
if (configValue.type === 'standard') {
|
|
57
|
+
const src = {
|
|
58
|
+
type: 'configsStandard',
|
|
59
|
+
value: configValue.value,
|
|
60
|
+
definedAt: getDefinedAtString(configValue.definedAtData, configName)
|
|
61
|
+
};
|
|
62
|
+
addSrc(src, configName);
|
|
63
|
+
from.configsStandard[configName] = src;
|
|
64
|
+
}
|
|
65
|
+
if (configValue.type === 'cumulative') {
|
|
66
|
+
const src = {
|
|
67
|
+
type: 'configsCumulative',
|
|
68
|
+
values: configValue.value.map((value, i) => {
|
|
69
|
+
const definedAtFile = configValue.definedAtData[i];
|
|
70
|
+
assert(definedAtFile);
|
|
71
|
+
const definedAt = getDefinedAtString(definedAtFile, configName);
|
|
72
|
+
return {
|
|
73
|
+
value,
|
|
74
|
+
definedAt
|
|
75
|
+
};
|
|
76
|
+
})
|
|
77
|
+
};
|
|
78
|
+
addSrc(src, configName);
|
|
79
|
+
from.configsCumulative[configName] = src;
|
|
80
|
+
}
|
|
81
|
+
if (configValue.type === 'computed') {
|
|
82
|
+
const src = {
|
|
83
|
+
type: 'configsComputed',
|
|
84
|
+
value: configValue.value
|
|
85
|
+
};
|
|
86
|
+
addSrc(src, configName);
|
|
87
|
+
from.configsComputed[configName] = src;
|
|
88
|
+
}
|
|
44
89
|
// TODO/v1-release: remove
|
|
45
90
|
const exportName = configName;
|
|
46
91
|
exportsAll[exportName] = exportsAll[exportName] ?? [];
|
|
@@ -70,9 +115,12 @@ function getPageContextExports(pageFiles, pageConfig) {
|
|
|
70
115
|
assert(!('default' in exports));
|
|
71
116
|
assert(!('default' in exportsAll));
|
|
72
117
|
const pageContextExports = {
|
|
118
|
+
from,
|
|
119
|
+
source,
|
|
120
|
+
sources,
|
|
121
|
+
// TODO/eventually: deprecate/remove every prop below
|
|
73
122
|
config,
|
|
74
123
|
configEntries,
|
|
75
|
-
// TODO/v1-release: remove
|
|
76
124
|
exports,
|
|
77
125
|
exportsAll,
|
|
78
126
|
pageExports
|