vike 0.4.171 → 0.4.172-commit-c1b0884
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/index.js +3 -0
- package/dist/cjs/node/plugin/plugins/buildConfig.js +3 -4
- package/dist/cjs/node/plugin/plugins/config/index.js +9 -5
- 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 +19 -7
- 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 +43 -85
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +5 -44
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +10 -51
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
- package/dist/cjs/node/plugin/resolveClientEntriesDev.js +59 -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/serializePageContextClientSide.js +1 -1
- 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/getPageAssets.js +9 -59
- 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 +3 -3
- 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/index.js +3 -0
- package/dist/esm/node/plugin/plugins/buildConfig.js +3 -4
- package/dist/esm/node/plugin/plugins/config/index.js +9 -5
- 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.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +20 -8
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +4 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +43 -85
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +5 -44
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +10 -51
- 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/resolveClientEntriesDev.d.ts +4 -0
- package/dist/esm/node/plugin/resolveClientEntriesDev.js +56 -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/serializePageContextClientSide.js +1 -1
- 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/getPageAssets.d.ts +3 -0
- package/dist/esm/node/runtime/renderPage/getPageAssets.js +9 -59
- 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/ConfigVike.d.ts +7 -0
- 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 +3 -3
- 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 +23 -14
- 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
package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js
CHANGED
|
@@ -4,13 +4,11 @@ import { getVirtualFileIdPageConfigValuesAll, isVirtualFileIdPageConfigValuesAll
|
|
|
4
4
|
import { getVikeConfig } from './getVikeConfig.js';
|
|
5
5
|
import { extractAssetsAddQuery } from '../../../../shared/extractAssetsQuery.js';
|
|
6
6
|
import { debug } from './debug.js';
|
|
7
|
-
import { getConfigValue } from '../../../../../shared/page-configs/getConfigValue.js';
|
|
8
|
-
import { getConfigValueSourcesNotOverriden } from '../../../shared/getConfigValueSourcesNotOverriden.js';
|
|
9
7
|
import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
|
|
10
|
-
import {
|
|
8
|
+
import { serializeConfigValues } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
|
|
11
9
|
import { getConfigVike } from '../../../../shared/getConfigVike.js';
|
|
12
|
-
import { getConfigValuesSerialized } from './getConfigValuesSerialized.js';
|
|
13
10
|
import { fixServerAssets_isEnabled } from '../../buildConfig/fixServerAssets.js';
|
|
11
|
+
import { getConfigValueBuildTime } from '../../../../../shared/page-configs/getConfigValueBuildTime.js';
|
|
14
12
|
async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
|
|
15
13
|
const result = isVirtualFileIdPageConfigValuesAll(id);
|
|
16
14
|
assert(result);
|
|
@@ -21,7 +19,7 @@ async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
|
|
|
21
19
|
}
|
|
22
20
|
*/
|
|
23
21
|
const { pageId, isForClientSide } = result;
|
|
24
|
-
const { pageConfigs } = await getVikeConfig(config, isDev, true);
|
|
22
|
+
const { pageConfigs } = await getVikeConfig(config, isDev, { tolerateInvalidConfig: true });
|
|
25
23
|
const pageConfig = pageConfigs.find((pageConfig) => pageConfig.pageId === pageId);
|
|
26
24
|
assert(pageConfig);
|
|
27
25
|
const configVike = await getConfigVike(config);
|
|
@@ -32,16 +30,9 @@ async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
|
|
|
32
30
|
function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAssetsImportedByServer, isDev) {
|
|
33
31
|
const lines = [];
|
|
34
32
|
const importStatements = [];
|
|
35
|
-
const isClientRouting =
|
|
36
|
-
lines.push('export const configValuesImported = [');
|
|
37
|
-
lines.push(getConfigValuesImported(pageConfig, isForClientSide, isClientRouting, importStatements));
|
|
38
|
-
lines.push('];');
|
|
33
|
+
const isClientRouting = getConfigValueBuildTime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
|
|
39
34
|
lines.push('export const configValuesSerialized = {');
|
|
40
|
-
lines.push(
|
|
41
|
-
isImport: false,
|
|
42
|
-
isForClientSide,
|
|
43
|
-
isClientRouting
|
|
44
|
-
})));
|
|
35
|
+
lines.push(...serializeConfigValues(pageConfig, importStatements, (configEnv) => isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isEager: false, isDev }), ''));
|
|
45
36
|
lines.push('};');
|
|
46
37
|
if (!fixServerAssets_isEnabled() && includeAssetsImportedByServer && isForClientSide && !isDev) {
|
|
47
38
|
importStatements.push(`import '${extractAssetsAddQuery(getVirtualFileIdPageConfigValuesAll(pageId, false))}'`);
|
|
@@ -49,33 +40,3 @@ function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAsse
|
|
|
49
40
|
const code = [...importStatements, ...lines].join('\n');
|
|
50
41
|
return code;
|
|
51
42
|
}
|
|
52
|
-
function getConfigValuesImported(pageConfig, isForClientSide, isClientRouting, importStatements) {
|
|
53
|
-
const lines = [];
|
|
54
|
-
const varCounterContainer = { varCounter: 0 };
|
|
55
|
-
getConfigValueSourcesNotOverriden(pageConfig).forEach((configValueSource) => {
|
|
56
|
-
if (!isEnvMatch(configValueSource.configEnv, checkWhetherIsImport(configValueSource), {
|
|
57
|
-
isImport: true,
|
|
58
|
-
isForClientSide,
|
|
59
|
-
isClientRouting
|
|
60
|
-
}))
|
|
61
|
-
return;
|
|
62
|
-
const whitespace = ' ';
|
|
63
|
-
lines.push(...serializeConfigValueImported(configValueSource, configValueSource.configName, whitespace, varCounterContainer, importStatements));
|
|
64
|
-
});
|
|
65
|
-
const code = lines.join('\n');
|
|
66
|
-
return code;
|
|
67
|
-
}
|
|
68
|
-
function checkWhetherIsImport(configValueSource) {
|
|
69
|
-
const { valueIsImportedAtRuntime, valueIsFilePath } = configValueSource;
|
|
70
|
-
return valueIsImportedAtRuntime && !valueIsFilePath;
|
|
71
|
-
}
|
|
72
|
-
function isEnvMatch(configEnv, isImport, runtime) {
|
|
73
|
-
// Whether config value is imported or serialized
|
|
74
|
-
if (isImport !== runtime.isImport)
|
|
75
|
-
return false;
|
|
76
|
-
// Runtime match
|
|
77
|
-
const { isForClientSide, isClientRouting } = runtime;
|
|
78
|
-
if (!isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isEager: false }))
|
|
79
|
-
return false;
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
@@ -1,30 +1,27 @@
|
|
|
1
1
|
export { getVirtualFilePageConfigs };
|
|
2
|
-
import { assert, objectEntries } from '../../../utils.js';
|
|
3
2
|
import { getVirtualFileIdPageConfigValuesAll } from '../../../../shared/virtual-files/virtualFilePageConfigValuesAll.js';
|
|
4
3
|
import { debug } from './debug.js';
|
|
5
4
|
import { getVikeConfig } from './getVikeConfig.js';
|
|
6
5
|
import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
|
|
7
|
-
import {
|
|
8
|
-
import { getConfigValuesSerialized } from './getConfigValuesSerialized.js';
|
|
6
|
+
import { serializeConfigValues } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
|
|
9
7
|
async function getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, config) {
|
|
10
|
-
const { pageConfigs, pageConfigGlobal } = await getVikeConfig(config, isDev, true);
|
|
8
|
+
const { pageConfigs, pageConfigGlobal } = await getVikeConfig(config, isDev, { tolerateInvalidConfig: true });
|
|
11
9
|
return getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
|
|
12
10
|
}
|
|
13
11
|
function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
|
|
14
12
|
const lines = [];
|
|
15
13
|
const importStatements = [];
|
|
16
|
-
const varCounterContainer = { varCounter: 0 };
|
|
17
14
|
lines.push('export const pageConfigsSerialized = [');
|
|
18
|
-
lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting,
|
|
15
|
+
lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements));
|
|
19
16
|
lines.push('];');
|
|
20
17
|
lines.push('export const pageConfigGlobalSerialized = {');
|
|
21
|
-
lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements
|
|
18
|
+
lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements));
|
|
22
19
|
lines.push('};');
|
|
23
20
|
const code = [...importStatements, ...lines].join('\n');
|
|
24
21
|
debug(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
|
|
25
22
|
return code;
|
|
26
23
|
}
|
|
27
|
-
function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting,
|
|
24
|
+
function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements) {
|
|
28
25
|
const lines = [];
|
|
29
26
|
pageConfigs.forEach((pageConfig) => {
|
|
30
27
|
const { pageId, routeFilesystem, isErrorPage } = pageConfig;
|
|
@@ -34,57 +31,19 @@ function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRout
|
|
|
34
31
|
lines.push(` isErrorPage: ${JSON.stringify(isErrorPage)},`);
|
|
35
32
|
lines.push(` routeFilesystem: ${JSON.stringify(routeFilesystem)},`);
|
|
36
33
|
lines.push(` loadConfigValuesAll: () => import(${JSON.stringify(virtualFileIdPageConfigValuesAll)}),`);
|
|
37
|
-
// Serialized config values
|
|
38
34
|
lines.push(` configValuesSerialized: {`);
|
|
39
|
-
lines.push(
|
|
35
|
+
lines.push(...serializeConfigValues(pageConfig, importStatements, (configEnv) => isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isEager: true, isDev }), ' '));
|
|
40
36
|
lines.push(` },`);
|
|
41
|
-
// Imported config values
|
|
42
|
-
const whitespace = ' ';
|
|
43
|
-
lines.push(`${whitespace}configValuesImported: [`);
|
|
44
|
-
Object.entries(pageConfig.configValueSources).forEach(([configName, sources]) => {
|
|
45
|
-
const configValue = pageConfig.configValues[configName];
|
|
46
|
-
if (configValue)
|
|
47
|
-
return;
|
|
48
|
-
const configValueSource = sources[0];
|
|
49
|
-
assert(configValueSource);
|
|
50
|
-
if (!configValueSource.configEnv.eager)
|
|
51
|
-
return;
|
|
52
|
-
if (!isRuntimeEnvMatch(configValueSource.configEnv, { isForClientSide, isClientRouting, isEager: true }))
|
|
53
|
-
return;
|
|
54
|
-
lines.push(...serializeConfigValueImported(configValueSource, configName, whitespace, varCounterContainer, importStatements));
|
|
55
|
-
});
|
|
56
|
-
lines.push(`${whitespace}],`);
|
|
57
37
|
lines.push(` },`);
|
|
58
38
|
});
|
|
59
39
|
const code = lines.join('\n');
|
|
60
40
|
return code;
|
|
61
41
|
}
|
|
62
|
-
function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements
|
|
42
|
+
function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements) {
|
|
63
43
|
const lines = [];
|
|
64
|
-
|
|
65
|
-
lines.push(
|
|
66
|
-
lines.push(` },`)
|
|
67
|
-
*/
|
|
68
|
-
lines.push(` configValuesImported: [`);
|
|
69
|
-
objectEntries(pageConfigGlobal.configValueSources).forEach(([configName, sources]) => {
|
|
70
|
-
if (configName === 'onBeforeRoute') {
|
|
71
|
-
// if( isForClientSide && !isClientRouting ) return
|
|
72
|
-
}
|
|
73
|
-
else if (configName === 'onPrerenderStart') {
|
|
74
|
-
if (isDev || isForClientSide) {
|
|
75
|
-
// Only load onPrerenderStart() in server production runtime
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
assert(false);
|
|
81
|
-
}
|
|
82
|
-
const configValueSource = sources[0];
|
|
83
|
-
assert(configValueSource);
|
|
84
|
-
const whitespace = ' ';
|
|
85
|
-
lines.push(...serializeConfigValueImported(configValueSource, configName, whitespace, varCounterContainer, importStatements));
|
|
86
|
-
});
|
|
87
|
-
lines.push(` ],`);
|
|
44
|
+
lines.push(` configValuesSerialized: {`);
|
|
45
|
+
lines.push(...serializeConfigValues(pageConfigGlobal, importStatements, (configEnv) => isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isEager: true, isDev }), ' '));
|
|
46
|
+
lines.push(` },`);
|
|
88
47
|
const code = lines.join('\n');
|
|
89
48
|
return code;
|
|
90
49
|
}
|
|
@@ -14,5 +14,11 @@ function isRuntimeEnvMatch(configEnv, runtime) {
|
|
|
14
14
|
// Eager
|
|
15
15
|
if (runtime.isEager !== !!configEnv.eager)
|
|
16
16
|
return false;
|
|
17
|
+
// Production/development
|
|
18
|
+
if (
|
|
19
|
+
//
|
|
20
|
+
(configEnv.production === true && runtime.isDev) ||
|
|
21
|
+
(configEnv.production === false && !runtime.isDev))
|
|
22
|
+
return false;
|
|
17
23
|
return true;
|
|
18
24
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export { resolveClientEntriesDev };
|
|
2
|
+
import { assert, assertPosixPath, toPosixPath, pathJoin, assertIsNpmPackageImport, assertIsNotProductionRuntime } from './utils.js';
|
|
3
|
+
import { createRequire } from 'module';
|
|
4
|
+
import { dirname } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
// @ts-ignore Shimmed by dist-cjs-fixup.js for CJS build.
|
|
7
|
+
const importMetaUrl = import.meta.url;
|
|
8
|
+
const require_ = createRequire(importMetaUrl);
|
|
9
|
+
const __dirname_ = dirname(fileURLToPath(importMetaUrl));
|
|
10
|
+
assertIsNotProductionRuntime();
|
|
11
|
+
async function resolveClientEntriesDev(clientEntry, viteDevServer) {
|
|
12
|
+
let root = viteDevServer.config.root;
|
|
13
|
+
assert(root);
|
|
14
|
+
root = toPosixPath(root);
|
|
15
|
+
// The `?import` suffix is needed for MDX to be transpiled:
|
|
16
|
+
// - Not transpiled: `/pages/markdown.page.mdx`
|
|
17
|
+
// - Transpiled: `/pages/markdown.page.mdx?import`
|
|
18
|
+
// But `?import` doesn't work with `/@fs/`:
|
|
19
|
+
// - Not transpiled: /@fs/home/runner/work/vike/vike/examples/react-full/pages/markdown.page.mdx
|
|
20
|
+
// - Not transpiled: /@fs/home/runner/work/vike/vike/examples/react-full/pages/markdown.page.mdx?import
|
|
21
|
+
if (clientEntry.endsWith('?import')) {
|
|
22
|
+
assert(clientEntry.startsWith('/'));
|
|
23
|
+
return clientEntry;
|
|
24
|
+
}
|
|
25
|
+
assertPosixPath(clientEntry);
|
|
26
|
+
let filePath;
|
|
27
|
+
if (clientEntry.startsWith('/')) {
|
|
28
|
+
filePath = pathJoin(root, clientEntry);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
if (clientEntry.startsWith('@@vike/')) {
|
|
32
|
+
assert(clientEntry.endsWith('.js'));
|
|
33
|
+
try {
|
|
34
|
+
// For Vitest (which doesn't resolve vike to its dist but to its source files)
|
|
35
|
+
// [RELATIVE_PATH_FROM_DIST] Current file: node_modules/vike/node/plugin/resolveClientEntriesDev.js
|
|
36
|
+
filePath = toPosixPath(require_.resolve(clientEntry.replace('@@vike/dist/esm/client/', '../../client/').replace('.js', '.ts')));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// For users
|
|
40
|
+
// [RELATIVE_PATH_FROM_DIST] Current file: node_modules/vike/dist/esm/node/plugin/resolveClientEntriesDev.js
|
|
41
|
+
filePath = toPosixPath(require_.resolve(clientEntry.replace('@@vike/dist/esm/client/', '../../../../dist/esm/client/')));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
assertIsNpmPackageImport(clientEntry);
|
|
46
|
+
filePath = require_.resolve(clientEntry);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (!filePath.startsWith('/')) {
|
|
50
|
+
assert(process.platform === 'win32');
|
|
51
|
+
filePath = '/' + filePath;
|
|
52
|
+
}
|
|
53
|
+
filePath = '/@fs' + filePath;
|
|
54
|
+
assertPosixPath(filePath);
|
|
55
|
+
return filePath;
|
|
56
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { addSsrMiddleware };
|
|
2
2
|
import { renderPage } from '../../runtime/renderPage.js';
|
|
3
|
+
import { assertWarning } from '../utils.js';
|
|
4
|
+
import pc from '@brillout/picocolors';
|
|
3
5
|
function addSsrMiddleware(middlewares) {
|
|
4
6
|
middlewares.use(async (req, res, next) => {
|
|
5
7
|
if (res.headersSent)
|
|
@@ -8,11 +10,21 @@ function addSsrMiddleware(middlewares) {
|
|
|
8
10
|
if (!url)
|
|
9
11
|
return next();
|
|
10
12
|
const { headers } = req;
|
|
11
|
-
const userAgent = headers['user-agent'];
|
|
12
13
|
const pageContextInit = {
|
|
13
14
|
urlOriginal: url,
|
|
14
|
-
|
|
15
|
+
headersOriginal: headers
|
|
15
16
|
};
|
|
17
|
+
Object.defineProperty(pageContextInit, 'userAgent', {
|
|
18
|
+
get() {
|
|
19
|
+
// TODO/next-major-release: assertUsage() instead of assertWarning()
|
|
20
|
+
assertWarning(false, `${pc.cyan('pageContext.userAgent')} is deprecated: use ${pc.cyan("pageContext.headers['user-agent']")} instead.`, {
|
|
21
|
+
showStackTrace: true,
|
|
22
|
+
onlyOnce: true
|
|
23
|
+
});
|
|
24
|
+
return headers['user-agent'];
|
|
25
|
+
},
|
|
26
|
+
enumerable: false
|
|
27
|
+
});
|
|
16
28
|
let pageContext;
|
|
17
29
|
try {
|
|
18
30
|
pageContext = await renderPage(pageContextInit);
|
|
@@ -5,7 +5,7 @@ export { runPrerender_forceExit };
|
|
|
5
5
|
import '../runtime/page-files/setup.js';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { route } from '../../shared/route/index.js';
|
|
8
|
-
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, handleNodeEnv_prerender, pLimit, assertPathFilesystemAbsolute, isArray } from './utils.js';
|
|
8
|
+
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, handleNodeEnv_prerender, pLimit, assertPathFilesystemAbsolute, isArray, changeEnumerable } from './utils.js';
|
|
9
9
|
import { prerenderPage, prerender404Page, getRenderContext, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
|
|
10
10
|
import pc from '@brillout/picocolors';
|
|
11
11
|
import { cpus } from 'os';
|
|
@@ -16,10 +16,10 @@ import { getPageFilesServerSide } from '../../shared/getPageFiles.js';
|
|
|
16
16
|
import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';
|
|
17
17
|
import { getUrlFromRouteString } from '../../shared/route/resolveRouteString.js';
|
|
18
18
|
import { getConfigValueFilePathToShowToUser } from '../../shared/page-configs/helpers.js';
|
|
19
|
-
import {
|
|
19
|
+
import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValue.js';
|
|
20
20
|
import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
|
|
21
21
|
import { isErrorPage } from '../../shared/error-page.js';
|
|
22
|
-
import {
|
|
22
|
+
import { getPageContextUrlComputed } from '../../shared/getPageContextUrlComputed.js';
|
|
23
23
|
import { isAbortError } from '../../shared/route/abort.js';
|
|
24
24
|
import { loadUserFilesServerSide } from '../runtime/renderPage/loadUserFilesServerSide.js';
|
|
25
25
|
import { getHookFromPageConfig, getHookFromPageConfigGlobal, getHookTimeoutDefault, setIsPrerenderering } from '../../shared/hooks/getHook.js';
|
|
@@ -27,6 +27,7 @@ import { noRouteMatch } from '../../shared/route/noRouteMatch.js';
|
|
|
27
27
|
import { getVikeConfig } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
28
28
|
import { logErrorHint } from '../runtime/renderPage/logErrorHint.js';
|
|
29
29
|
import { executeHook, isUserHookError } from '../../shared/hooks/executeHook.js';
|
|
30
|
+
import { getConfigValueBuildTime } from '../../shared/page-configs/getConfigValueBuildTime.js';
|
|
30
31
|
async function runPrerenderFromAPI(options = {}) {
|
|
31
32
|
await runPrerender(options, 'prerender()');
|
|
32
33
|
// - 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.
|
|
@@ -114,7 +115,7 @@ async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerend
|
|
|
114
115
|
// V1 design
|
|
115
116
|
pageConfigs.forEach((pageConfig) => {
|
|
116
117
|
const configName = 'prerender';
|
|
117
|
-
const configValue =
|
|
118
|
+
const configValue = getConfigValueBuildTime(pageConfig, configName, 'boolean');
|
|
118
119
|
if (configValue?.value === false) {
|
|
119
120
|
const configValueFilePathToShowToUser = getConfigValueFilePathToShowToUser(configValue.definedAtData);
|
|
120
121
|
assert(configValueFilePathToShowToUser);
|
|
@@ -217,7 +218,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
|
|
|
217
218
|
if (doNotPrerenderList.find((p) => p.pageId === pageId)) {
|
|
218
219
|
return;
|
|
219
220
|
}
|
|
220
|
-
const prerenderResult = await executeHook(() => hookFn(), { hookName, hookFilePath, hookTimeout });
|
|
221
|
+
const prerenderResult = await executeHook(() => hookFn(), { hookName, hookFilePath, hookTimeout }, null);
|
|
221
222
|
const result = normalizeOnPrerenderHookResult(prerenderResult, hookFilePath, hookName);
|
|
222
223
|
result.forEach(({ url, pageContext }) => {
|
|
223
224
|
{
|
|
@@ -240,9 +241,9 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
|
|
|
240
241
|
prerenderContext.pageContexts.push(pageContextNew);
|
|
241
242
|
if (pageContext) {
|
|
242
243
|
objectAssign(pageContextNew, {
|
|
243
|
-
_pageContextAlreadyProvidedByOnPrerenderHook: true
|
|
244
|
-
...pageContext
|
|
244
|
+
_pageContextAlreadyProvidedByOnPrerenderHook: true
|
|
245
245
|
});
|
|
246
|
+
objectAssign(pageContextNew, pageContext);
|
|
246
247
|
}
|
|
247
248
|
});
|
|
248
249
|
})));
|
|
@@ -300,14 +301,11 @@ function createPageContext(urlOriginal, renderContext, prerenderContext) {
|
|
|
300
301
|
_prerenderContext: prerenderContext
|
|
301
302
|
};
|
|
302
303
|
const pageContextInit = {
|
|
303
|
-
urlOriginal
|
|
304
|
-
...prerenderContext.pageContextInit
|
|
304
|
+
urlOriginal
|
|
305
305
|
};
|
|
306
|
+
objectAssign(pageContextInit, prerenderContext.pageContextInit);
|
|
306
307
|
{
|
|
307
|
-
const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, renderContext
|
|
308
|
-
// We set `enumerable` to `false` to avoid computed URL properties from being iterated & copied in a onPrerenderStart() hook, e.g. /examples/i18n/
|
|
309
|
-
urlComputedPropsNonEnumerable: true
|
|
310
|
-
});
|
|
308
|
+
const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, renderContext);
|
|
311
309
|
objectAssign(pageContext, pageContextInitEnhanced);
|
|
312
310
|
}
|
|
313
311
|
return pageContext;
|
|
@@ -382,6 +380,8 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
|
|
|
382
380
|
pageContext._urlOriginalBeforeHook = pageContext.urlOriginal;
|
|
383
381
|
});
|
|
384
382
|
const docLink = 'https://vike.dev/i18n#pre-rendering';
|
|
383
|
+
// Set `enumerable` to `false` to avoid computed URL properties from being iterated & copied in onPrerenderStart() hook, e.g. /examples/i18n/
|
|
384
|
+
const { restoreEnumerable, addPageContextComputedUrl } = makePageContextComputedUrlNonEnumerable(prerenderContext.pageContexts);
|
|
385
385
|
let result = await executeHook(() => hookFn({
|
|
386
386
|
pageContexts: prerenderContext.pageContexts,
|
|
387
387
|
// TODO/v1-release: remove warning
|
|
@@ -392,7 +392,8 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
|
|
|
392
392
|
});
|
|
393
393
|
return prerenderContext.pageContexts;
|
|
394
394
|
}
|
|
395
|
-
}), onPrerenderStartHook);
|
|
395
|
+
}), onPrerenderStartHook, null);
|
|
396
|
+
restoreEnumerable();
|
|
396
397
|
if (result === null || result === undefined) {
|
|
397
398
|
return;
|
|
398
399
|
}
|
|
@@ -430,9 +431,8 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
|
|
|
430
431
|
hookName
|
|
431
432
|
};
|
|
432
433
|
}
|
|
433
|
-
// Restore as URL computed props are lost when user makes a pageContext copy
|
|
434
|
-
addUrlComputedProps(pageContext);
|
|
435
434
|
});
|
|
435
|
+
addPageContextComputedUrl(prerenderContext.pageContexts);
|
|
436
436
|
}
|
|
437
437
|
async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete) {
|
|
438
438
|
const globalContext = getGlobalContext();
|
|
@@ -474,7 +474,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
|
|
|
474
474
|
if (pageContext._pageConfigs.length > 0) {
|
|
475
475
|
const pageConfig = pageContext._pageConfigs.find((p) => p.pageId === pageId);
|
|
476
476
|
assert(pageConfig);
|
|
477
|
-
usesClientRouter =
|
|
477
|
+
usesClientRouter = getConfigValueRuntime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
|
|
478
478
|
}
|
|
479
479
|
else {
|
|
480
480
|
usesClientRouter = globalContext.pluginManifest.usesClientRouter;
|
|
@@ -714,3 +714,23 @@ function assertIsNotAbort(err, urlOr404) {
|
|
|
714
714
|
assert(abortCall);
|
|
715
715
|
assertUsage(false, `${pc.cyan(abortCall)} thrown${thrownBy} while pre-rendering ${urlOr404} but ${pc.cyan(abortCaller)} isn't supported for pre-rendered pages`);
|
|
716
716
|
}
|
|
717
|
+
function makePageContextComputedUrlNonEnumerable(pageContexts) {
|
|
718
|
+
change(false);
|
|
719
|
+
return { restoreEnumerable, addPageContextComputedUrl };
|
|
720
|
+
function restoreEnumerable() {
|
|
721
|
+
change(true);
|
|
722
|
+
}
|
|
723
|
+
function addPageContextComputedUrl(pageContexts) {
|
|
724
|
+
// Add URL computed props to the user-generated pageContext copies
|
|
725
|
+
pageContexts.forEach((pageContext) => {
|
|
726
|
+
const pageContextUrlComputed = getPageContextUrlComputed(pageContext);
|
|
727
|
+
objectAssign(pageContext, pageContextUrlComputed);
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
function change(enumerable) {
|
|
731
|
+
pageContexts.forEach((pageContext) => {
|
|
732
|
+
changeEnumerable(pageContext, 'urlPathname', enumerable);
|
|
733
|
+
changeEnumerable(pageContext, 'urlParsed', enumerable);
|
|
734
|
+
});
|
|
735
|
+
}
|
|
736
|
+
}
|
|
@@ -107,7 +107,7 @@ async function getHtmlTags(pageContext, injectToStream, injectFilter) {
|
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
// The JavaScript entry <script> tag
|
|
110
|
-
const scriptEntry = await mergeScriptEntries(pageAssets
|
|
110
|
+
const scriptEntry = await mergeScriptEntries(pageAssets);
|
|
111
111
|
if (scriptEntry) {
|
|
112
112
|
htmlTags.push({
|
|
113
113
|
htmlTag: scriptEntry,
|
|
@@ -128,11 +128,11 @@ async function getHtmlTags(pageContext, injectToStream, injectFilter) {
|
|
|
128
128
|
});
|
|
129
129
|
return htmlTags;
|
|
130
130
|
}
|
|
131
|
-
async function mergeScriptEntries(pageAssets
|
|
131
|
+
async function mergeScriptEntries(pageAssets) {
|
|
132
132
|
const scriptEntries = pageAssets.filter((pageAsset) => pageAsset.isEntry && pageAsset.assetType === 'script');
|
|
133
133
|
const viteScripts = await getViteDevScripts();
|
|
134
134
|
const scriptTagsHtml = `${viteScripts}${scriptEntries.map((asset) => inferAssetTag(asset)).join('')}`;
|
|
135
|
-
const scriptTag = mergeScriptTags(scriptTagsHtml
|
|
135
|
+
const scriptTag = mergeScriptTags(scriptTagsHtml);
|
|
136
136
|
return scriptTag;
|
|
137
137
|
}
|
|
138
138
|
function getPageContextJsonScriptTag(pageContext) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { getViteDevScripts };
|
|
2
2
|
import { getGlobalContext } from '../../globalContext.js';
|
|
3
|
-
import { assert, assertUsage } from '../../utils.js';
|
|
3
|
+
import { assert, assertUsage, assertWarning } from '../../utils.js';
|
|
4
4
|
import pc from '@brillout/picocolors';
|
|
5
5
|
async function getViteDevScripts() {
|
|
6
6
|
const globalContext = getGlobalContext();
|
|
@@ -16,7 +16,8 @@ async function getViteDevScripts() {
|
|
|
16
16
|
assertUsage(!fakeHtml.startsWith(fakeHtmlBegin.replace(' ', '')), 'Vite plugins that minify the HTML are not supported by vike, see https://github.com/vikejs/vike/issues/224');
|
|
17
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. Create a new GitHub ticket to discuss a solution.');
|
|
18
18
|
const viteInjection = fakeHtml.slice(fakeHtmlBegin.length, -1 * fakeHtmlEnd.length);
|
|
19
|
-
assert(viteInjection.includes('script')
|
|
19
|
+
assert(viteInjection.includes('script'));
|
|
20
|
+
assertWarning(!viteInjection.includes('import('), 'Unexpected Vite HMR code. Reach out to a Vike maintainer on GitHub.', { onlyOnce: true });
|
|
20
21
|
const scriptTags = viteInjection;
|
|
21
22
|
return scriptTags;
|
|
22
23
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { mergeScriptTags };
|
|
2
|
-
declare function mergeScriptTags(scriptTagsHtml: string
|
|
2
|
+
declare function mergeScriptTags(scriptTagsHtml: string): string;
|
|
@@ -4,7 +4,7 @@ import { scriptAttrs } from './inferHtmlTags.js';
|
|
|
4
4
|
const scriptRE = /(<script\b(?:\s[^>]*>|>))(.*?)<\/script>/gims;
|
|
5
5
|
const srcRE = /\bsrc\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/im;
|
|
6
6
|
const typeRE = /\btype\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/im;
|
|
7
|
-
function mergeScriptTags(scriptTagsHtml
|
|
7
|
+
function mergeScriptTags(scriptTagsHtml) {
|
|
8
8
|
let scriptTag = '';
|
|
9
9
|
const scripts = parseScripts(scriptTagsHtml);
|
|
10
10
|
// We need to merge module scripts to ensure execution order
|
|
@@ -19,13 +19,7 @@ function mergeScriptTags(scriptTagsHtml, isProduction) {
|
|
|
19
19
|
const hasInnerHtml = !!innerHtml.trim();
|
|
20
20
|
if (src) {
|
|
21
21
|
assert(!hasInnerHtml);
|
|
22
|
-
|
|
23
|
-
contents.push(`import ${JSON.stringify(src)};`);
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
// Ensure HMR preamble code is executed before client entries
|
|
27
|
-
contents.push(`import(${JSON.stringify(src)});`);
|
|
28
|
-
}
|
|
22
|
+
contents.push(`import ${JSON.stringify(src)};`);
|
|
29
23
|
}
|
|
30
24
|
else if (hasInnerHtml) {
|
|
31
25
|
innerHtml = innerHtml.split('\n').filter(Boolean).join('\n');
|
|
@@ -3,7 +3,7 @@ export { dangerouslySkipEscape };
|
|
|
3
3
|
export { renderDocumentHtml };
|
|
4
4
|
export { isDocumentHtml };
|
|
5
5
|
export { getHtmlString };
|
|
6
|
-
import { assert, assertUsage, assertWarning, checkType, hasProp, isHtml, isPromise, objectAssign } from '../utils.js';
|
|
6
|
+
import { assert, assertUsage, assertWarning, checkType, escapeHtml, hasProp, isHtml, isPromise, objectAssign } from '../utils.js';
|
|
7
7
|
import { injectHtmlTagsToString, injectHtmlTagsToStream } from './injectAssets.js';
|
|
8
8
|
import { processStream, isStream, streamToString } from './stream.js';
|
|
9
9
|
import { isStreamReactStreaming } from './stream/react-streaming.js';
|
|
@@ -165,31 +165,40 @@ async function renderTemplate(templateContent, pageContext) {
|
|
|
165
165
|
setStream(templateVar);
|
|
166
166
|
continue;
|
|
167
167
|
}
|
|
168
|
-
const getErrMsg = (
|
|
168
|
+
const getErrMsg = (msg) => {
|
|
169
169
|
const { hookName, hookFilePath } = pageContext._renderHook;
|
|
170
170
|
const nth = (i === 0 && '1st') || (i === 1 && '2nd') || (i === 2 && '3rd') || `${i}-th`;
|
|
171
|
-
return [
|
|
171
|
+
return [
|
|
172
|
+
`The ${nth} HTML variable is ${msg}`,
|
|
173
|
+
`The HTML was provided by the ${hookName}() hook at ${hookFilePath}.`
|
|
174
|
+
]
|
|
172
175
|
.filter(Boolean)
|
|
173
176
|
.join(' ');
|
|
174
177
|
};
|
|
175
|
-
assertUsage(!isPromise(templateVar), getErrMsg(
|
|
178
|
+
assertUsage(!isPromise(templateVar), getErrMsg(`a promise, did you forget to ${pc.cyan('await')} the promise?`));
|
|
176
179
|
if (templateVar === undefined || templateVar === null) {
|
|
177
|
-
|
|
180
|
+
const msgVal = pc.cyan(String(templateVar));
|
|
181
|
+
const msgEmptyString = pc.cyan("''");
|
|
182
|
+
const msg = `${msgVal} which will be converted to an empty string. Pass the empty string ${msgEmptyString} instead of ${msgVal} to remove this warning.`;
|
|
183
|
+
assertWarning(false, getErrMsg(msg), { onlyOnce: false });
|
|
178
184
|
templateVar = '';
|
|
179
185
|
}
|
|
180
186
|
{
|
|
181
187
|
const varType = typeof templateVar;
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
188
|
+
if (varType !== 'string') {
|
|
189
|
+
const msgType = pc.cyan(`typeof htmlVariable === "${varType}"`);
|
|
190
|
+
const msg = `${msgType} but a string or stream (https://vike.dev/streaming) is expected instead.`;
|
|
191
|
+
assertUsage(false, getErrMsg(msg));
|
|
192
|
+
}
|
|
186
193
|
}
|
|
187
194
|
{
|
|
188
195
|
const { isProduction } = getGlobalContext();
|
|
189
196
|
if (isHtml(templateVar) &&
|
|
190
197
|
// We don't show this warning in production because it's expected that some users may (un)willingly do some XSS injection: we avoid flooding the production logs.
|
|
191
198
|
!isProduction) {
|
|
192
|
-
|
|
199
|
+
const msgVal = pc.cyan(String(templateVar));
|
|
200
|
+
const msg = `${msgVal} which seems to be HTML code. Did you forget to wrap the value with dangerouslySkipEscape()?`;
|
|
201
|
+
assertWarning(false, getErrMsg(msg), { onlyOnce: false });
|
|
193
202
|
}
|
|
194
203
|
}
|
|
195
204
|
// Escape untrusted template variable
|
|
@@ -209,16 +218,6 @@ async function renderTemplate(templateContent, pageContext) {
|
|
|
209
218
|
htmlPartsEnd
|
|
210
219
|
};
|
|
211
220
|
}
|
|
212
|
-
function escapeHtml(unsafeString) {
|
|
213
|
-
// Source: https://stackoverflow.com/questions/6234773/can-i-escape-html-special-chars-in-javascript/6234804#6234804
|
|
214
|
-
const safe = unsafeString
|
|
215
|
-
.replace(/&/g, '&')
|
|
216
|
-
.replace(/</g, '<')
|
|
217
|
-
.replace(/>/g, '>')
|
|
218
|
-
.replace(/"/g, '"')
|
|
219
|
-
.replace(/'/g, ''');
|
|
220
|
-
return safe;
|
|
221
|
-
}
|
|
222
221
|
async function getHtmlString(htmlRender) {
|
|
223
222
|
if (typeof htmlRender === 'string') {
|
|
224
223
|
return htmlRender;
|
|
@@ -31,7 +31,7 @@ function serializePageContextClientSide(pageContext) {
|
|
|
31
31
|
pageContextClient[prop] = pageContext[prop];
|
|
32
32
|
});
|
|
33
33
|
if (Object.keys(pageContext._pageContextInit).some((p) => passToClient.includes(p))) {
|
|
34
|
-
pageContextClient
|
|
34
|
+
pageContextClient[pageContextInitIsPassedToClient] = true;
|
|
35
35
|
}
|
|
36
36
|
let pageContextSerialized;
|
|
37
37
|
try {
|
|
@@ -80,5 +80,5 @@ type StreamPipeWrapped = {
|
|
|
80
80
|
};
|
|
81
81
|
declare function pipeStream(pipe: StreamPipe): StreamPipeWrapped;
|
|
82
82
|
declare function streamToString(stream: StreamProviderAny): Promise<string>;
|
|
83
|
-
declare function getStreamName(
|
|
83
|
+
declare function getStreamName(kind: 'pipe' | 'readable' | 'writable', type: 'web' | 'node'): `a ${string} Stream` | `a ${string} Stream Pipe`;
|
|
84
84
|
declare function inferStreamName(stream: StreamProviderNormalized): `a ${string} Stream` | `a ${string} Stream Pipe`;
|
|
@@ -758,17 +758,17 @@ async function loadStreamNodeModule() {
|
|
|
758
758
|
const { Readable, Writable } = streamModule;
|
|
759
759
|
return { Readable, Writable };
|
|
760
760
|
}
|
|
761
|
-
function getStreamName(
|
|
762
|
-
let
|
|
763
|
-
if (
|
|
764
|
-
|
|
761
|
+
function getStreamName(kind, type) {
|
|
762
|
+
let typeName = capitalizeFirstLetter(type);
|
|
763
|
+
if (typeName === 'Node') {
|
|
764
|
+
typeName = 'Node.js';
|
|
765
765
|
}
|
|
766
|
-
const
|
|
767
|
-
if (
|
|
768
|
-
return `a ${
|
|
766
|
+
const kindName = capitalizeFirstLetter(kind);
|
|
767
|
+
if (kind !== 'pipe') {
|
|
768
|
+
return `a ${kindName} ${typeName} Stream`;
|
|
769
769
|
}
|
|
770
|
-
if (
|
|
771
|
-
return `a ${
|
|
770
|
+
if (kind === 'pipe') {
|
|
771
|
+
return `a ${typeName} Stream Pipe`;
|
|
772
772
|
}
|
|
773
773
|
assert(false);
|
|
774
774
|
}
|