vike 0.4.145 → 0.4.146-commit-701e2e5

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.
Files changed (41) hide show
  1. package/dist/cjs/node/plugin/plugins/buildConfig.js +1 -1
  2. package/dist/cjs/node/plugin/plugins/config/index.js +3 -3
  3. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +1 -1
  4. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +1 -1
  5. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +1 -1
  6. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +1 -1
  7. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +5 -2
  8. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -2
  9. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +18 -6
  10. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/transpileAndExecuteFile.js +2 -2
  11. package/dist/cjs/node/prerender/runPrerender.js +8 -3
  12. package/dist/cjs/node/runtime/renderPage.js +2 -2
  13. package/dist/cjs/node/shared/getConfigVike.js +4 -1
  14. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesImported.js +8 -5
  15. package/dist/cjs/utils/parseUrl-extras.js +16 -7
  16. package/dist/cjs/utils/projectInfo.js +1 -1
  17. package/dist/esm/client/client-routing-runtime/history.js +9 -5
  18. package/dist/esm/node/plugin/plugins/buildConfig.js +2 -2
  19. package/dist/esm/node/plugin/plugins/config/index.js +4 -4
  20. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +2 -2
  21. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +1 -1
  22. package/dist/esm/node/plugin/plugins/importUserCode/index.js +1 -1
  23. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +1 -1
  24. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +2 -1
  25. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +6 -3
  26. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.d.ts +2 -2
  27. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -2
  28. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.d.ts +2 -2
  29. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +18 -6
  30. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/transpileAndExecuteFile.js +3 -3
  31. package/dist/esm/node/prerender/runPrerender.js +8 -3
  32. package/dist/esm/node/runtime/renderPage.js +2 -2
  33. package/dist/esm/node/shared/getConfigVike.d.ts +2 -1
  34. package/dist/esm/node/shared/getConfigVike.js +4 -1
  35. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.js +9 -3
  36. package/dist/esm/utils/parseUrl-extras.d.ts +1 -1
  37. package/dist/esm/utils/parseUrl-extras.js +16 -7
  38. package/dist/esm/utils/projectInfo.d.ts +1 -1
  39. package/dist/esm/utils/projectInfo.js +1 -1
  40. package/node/cli/bin-entry.js +1 -1
  41. package/package.json +1 -1
@@ -73,7 +73,7 @@ exports.buildConfig = buildConfig;
73
73
  async function getEntries(config) {
74
74
  const configVike = await (0, getConfigVike_js_1.getConfigVike)(config);
75
75
  const pageFileEntries = await getPageFileEntries(config, configVike.includeAssetsImportedByServer); // TODO/v1-release: remove
76
- const { pageConfigs } = await (0, getVikeConfig_js_1.getVikeConfig)(config.root, (0, utils_js_1.getOutDirs)(config).outDirRoot, false, configVike.extensions);
76
+ const { pageConfigs } = await (0, getVikeConfig_js_1.getVikeConfig)(config, false);
77
77
  (0, utils_js_1.assertUsage)(Object.keys(pageFileEntries).length !== 0 || pageConfigs.length !== 0, 'At least one page should be defined, see https://vike.dev/add');
78
78
  if ((0, utils_js_1.viteIsSSR)(config)) {
79
79
  const serverEntries = analyzeServerEntries(pageConfigs);
@@ -17,20 +17,20 @@ function resolveVikeConfig(vikeConfig) {
17
17
  name: 'vike:resolveVikeConfig',
18
18
  enforce: 'pre',
19
19
  async configResolved(config) {
20
- const promise = resolveConfig(vikeConfig, config);
20
+ const promise = getConfigVikPromise(vikeConfig, config);
21
21
  config.configVikePromise = promise;
22
22
  await promise;
23
23
  }
24
24
  };
25
25
  }
26
26
  exports.resolveVikeConfig = resolveVikeConfig;
27
- async function resolveConfig(vikeConfig, config) {
27
+ async function getConfigVikPromise(vikeConfig, config) {
28
28
  const fromPluginOptions = (vikeConfig ?? {});
29
29
  const fromViteConfig = (config.vike ?? {});
30
30
  const fromStemPackages = await (0, findConfigVikeFromStemPackages_js_1.findConfigVikeFromStemPackages)(config.root);
31
31
  const configs = [fromPluginOptions, ...fromStemPackages, fromViteConfig];
32
32
  const extensions = (0, resolveExtensions_js_1.resolveExtensions)(configs, config);
33
- const { globalVikeConfig: fromPlusConfigFile } = await (0, getVikeConfig_js_1.getVikeConfig)(config.root, (0, utils_js_1.getOutDirs)(config).outDirRoot, (0, utils_js_1.isDev2)(config), extensions);
33
+ const { globalVikeConfig: fromPlusConfigFile } = await (0, getVikeConfig_js_1.getVikeConfig)(config, (0, utils_js_1.isDev2)(config), false, extensions);
34
34
  configs.push(fromPlusConfigFile);
35
35
  (0, assertVikeConfig_js_1.assertVikeConfig)(fromPlusConfigFile, ({ prop, errMsg }) => {
36
36
  // TODO: add config file path ?
@@ -8,7 +8,7 @@ const getConfigValueSourcesRelevant_js_1 = require("../../shared/getConfigValueS
8
8
  const buildConfig_js_1 = require("../buildConfig.js");
9
9
  const virtualFileImportUserCode_js_1 = require("../../../shared/virtual-files/virtualFileImportUserCode.js");
10
10
  async function determineOptimizeDeps(config, configVike, isDev) {
11
- const { pageConfigs } = await (0, getVikeConfig_js_1.getVikeConfig)(config.root, (0, utils_js_1.getOutDirs)(config).outDirRoot, isDev, configVike.extensions);
11
+ const { pageConfigs } = await (0, getVikeConfig_js_1.getVikeConfig)(config, isDev);
12
12
  const { entries, include } = await getPageDeps(config, pageConfigs, isDev);
13
13
  {
14
14
  // This actually doesn't work: Vite's dep optimizer doesn't seem to be able to crawl virtual files.
@@ -146,7 +146,7 @@ export const pageFilesList = [];
146
146
  export const neverLoaded = {};
147
147
  export const isGeneratedFile = true;
148
148
 
149
- ${await (0, getVirtualFilePageConfigs_js_1.getVirtualFilePageConfigs)(config.root, (0, utils_js_1.getOutDirs)(config).outDirRoot, isForClientSide, isDev, id, configVike, isClientRouting)}
149
+ ${await (0, getVirtualFilePageConfigs_js_1.getVirtualFilePageConfigs)(isForClientSide, isDev, id, isClientRouting, config)}
150
150
 
151
151
  `;
152
152
  fileTypes_js_1.fileTypes
@@ -52,7 +52,7 @@ function importUserCode() {
52
52
  return undefined;
53
53
  id = (0, utils_js_1.getVirtualFileId)(id);
54
54
  if ((0, virtualFilePageConfigValuesAll_js_1.isVirtualFileIdPageConfigValuesAll)(id)) {
55
- const code = await (0, getVirtualFilePageConfigValuesAll_js_1.getVirtualFilePageConfigValuesAll)(id, config.root, (0, utils_js_1.getOutDirs)(config).outDirRoot, isDev, configVike);
55
+ const code = await (0, getVirtualFilePageConfigValuesAll_js_1.getVirtualFilePageConfigValuesAll)(id, isDev, config);
56
56
  return code;
57
57
  }
58
58
  if ((0, virtualFileImportUserCode_js_1.isVirtualFileIdImportUserCode)(id)) {
@@ -53,7 +53,7 @@ const configDefinitionsBuiltIn = {
53
53
  env: 'server-and-client'
54
54
  },
55
55
  prerender: {
56
- env: 'server-only'
56
+ env: 'config-only'
57
57
  },
58
58
  hydrationCanBeAborted: {
59
59
  env: 'client-only'
@@ -19,6 +19,7 @@ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
19
19
  const helpers_js_1 = require("../../../../../shared/page-configs/helpers.js");
20
20
  const assertExports_js_1 = require("../../../../../shared/page-configs/assertExports.js");
21
21
  const getVirtualFilePageConfigs_js_1 = require("./getVirtualFilePageConfigs.js");
22
+ const getConfigVike_js_1 = require("../../../../shared/getConfigVike.js");
22
23
  (0, utils_js_1.assertIsNotProductionRuntime)();
23
24
  let devServerIsCorrupt = false;
24
25
  let wasConfigInvalid = null;
@@ -64,9 +65,11 @@ async function handleReloadSideEffects() {
64
65
  }
65
66
  }
66
67
  }
67
- async function getVikeConfig(userRootDir, outDirRoot, isDev, extensions, tolerateInvalidConfig = false) {
68
+ async function getVikeConfig(config, isDev, tolerateInvalidConfig = false, extensions) {
69
+ const { outDirRoot } = (0, utils_js_1.getOutDirs)(config);
70
+ const userRootDir = config.root;
68
71
  if (!vikeConfigPromise) {
69
- vikeConfigPromise = loadVikeConfig_withErrorHandling(userRootDir, outDirRoot, isDev, extensions, tolerateInvalidConfig);
72
+ vikeConfigPromise = loadVikeConfig_withErrorHandling(userRootDir, outDirRoot, isDev, extensions ?? (await (0, getConfigVike_js_1.getConfigVike)(config)).extensions, tolerateInvalidConfig);
70
73
  }
71
74
  return await vikeConfigPromise;
72
75
  }
@@ -10,7 +10,8 @@ const helpers_js_1 = require("../../../../../shared/page-configs/helpers.js");
10
10
  const getConfigValueSourcesRelevant_js_1 = require("../../../shared/getConfigValueSourcesRelevant.js");
11
11
  const isRuntimeEnvMatch_js_1 = require("./isRuntimeEnvMatch.js");
12
12
  const serializeConfigValue_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValue.js");
13
- async function getVirtualFilePageConfigValuesAll(id, userRootDir, outDirRoot, isDev, configVike) {
13
+ const getConfigVike_js_1 = require("../../../../shared/getConfigVike.js");
14
+ async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
14
15
  const result = (0, virtualFilePageConfigValuesAll_js_1.isVirtualFileIdPageConfigValuesAll)(id);
15
16
  (0, utils_js_1.assert)(result);
16
17
  /* This assertion fails when using includeAssetsImportedByServer
@@ -20,9 +21,10 @@ async function getVirtualFilePageConfigValuesAll(id, userRootDir, outDirRoot, is
20
21
  }
21
22
  */
22
23
  const { pageId, isForClientSide } = result;
23
- const { pageConfigs } = await (0, getVikeConfig_js_1.getVikeConfig)(userRootDir, outDirRoot, isDev, configVike.extensions, true);
24
+ const { pageConfigs } = await (0, getVikeConfig_js_1.getVikeConfig)(config, isDev, true);
24
25
  const pageConfig = pageConfigs.find((pageConfig) => pageConfig.pageId === pageId);
25
26
  (0, utils_js_1.assert)(pageConfig);
27
+ const configVike = await (0, getConfigVike_js_1.getConfigVike)(config);
26
28
  const code = getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, configVike.includeAssetsImportedByServer, isDev);
27
29
  (0, debug_js_1.debug)(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
28
30
  return code;
@@ -14,15 +14,23 @@ const getVikeConfig_js_1 = require("./getVikeConfig.js");
14
14
  const isRuntimeEnvMatch_js_1 = require("./isRuntimeEnvMatch.js");
15
15
  const helpers_js_2 = require("../../../../../shared/page-configs/helpers.js");
16
16
  const serializeConfigValue_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValue.js");
17
- async function getVirtualFilePageConfigs(userRootDir, outDirRoot, isForClientSide, isDev, id, configVike, isClientRouting) {
18
- const { pageConfigs, pageConfigGlobal } = await (0, getVikeConfig_js_1.getVikeConfig)(userRootDir, outDirRoot, isDev, configVike.extensions, true);
19
- return getContent(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
17
+ async function getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, config) {
18
+ const { pageConfigs, pageConfigGlobal } = await (0, getVikeConfig_js_1.getVikeConfig)(config, isDev, true);
19
+ return getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
20
20
  }
21
21
  exports.getVirtualFilePageConfigs = getVirtualFilePageConfigs;
22
- function getContent(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
22
+ function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
23
23
  const lines = [];
24
24
  const importStatements = [];
25
25
  const varCounterContainer = { varCounter: 0 };
26
+ lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, importStatements, varCounterContainer));
27
+ lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements, varCounterContainer));
28
+ const code = [...importStatements, ...lines].join('\n');
29
+ (0, debug_js_1.debug)(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
30
+ return code;
31
+ }
32
+ function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, importStatements, varCounterContainer) {
33
+ const lines = [];
26
34
  lines.push('export const pageConfigsSerialized = [');
27
35
  pageConfigs.forEach((pageConfig) => {
28
36
  const { pageId, routeFilesystem, isErrorPage } = pageConfig;
@@ -76,6 +84,11 @@ function getContent(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, i
76
84
  lines.push(` },`);
77
85
  });
78
86
  lines.push('];');
87
+ const code = lines.join('\n');
88
+ return code;
89
+ }
90
+ function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements, varCounterContainer) {
91
+ const lines = [];
79
92
  lines.push('export const pageConfigGlobalSerialized = {');
80
93
  /* Nothing (yet)
81
94
  lines.push(` configValuesSerialized: {`)
@@ -102,8 +115,7 @@ function getContent(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, i
102
115
  });
103
116
  lines.push(` ],`);
104
117
  lines.push('};');
105
- const code = [...importStatements, ...lines].join('\n');
106
- (0, debug_js_1.debug)(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
118
+ const code = lines.join('\n');
107
119
  return code;
108
120
  }
109
121
  function getConfigValueSerialized(value, configName, definedAt) {
@@ -232,11 +232,11 @@ function assertImportsAreReExported(fileImports, fileExports, filePathToShowToUs
232
232
  const importStatements = (0, utils_js_1.unique)(fileImportsUnused.map((fi) => fi.importStatementCode));
233
233
  const importNamesUnused = fileImportsUnused.map((fi) => picocolors_1.default.cyan(fi.importLocalName)).join(', ');
234
234
  const singular = fileImportsUnused.length === 1;
235
- (0, utils_js_1.assertUsage)(fileImportsUnused.length === 0, [
235
+ (0, utils_js_1.assertWarning)(fileImportsUnused.length === 0, [
236
236
  `${filePathToShowToUser} imports the following:`,
237
237
  ...importStatements.map((s) => picocolors_1.default.cyan(` ${s}`)),
238
238
  `But the import${singular ? '' : 's'} ${importNamesUnused} ${singular ? "isn't" : "aren't"} re-exported at ${picocolors_1.default.cyan('export default { ... }')} and therefore ${singular ? 'has' : 'have'} no effect, see explanation at https://vike.dev/header-file`
239
- ].join('\n'));
239
+ ].join('\n'), { onlyOnce: true });
240
240
  }
241
241
  function getExportedStrings(obj) {
242
242
  const exportedStrings = [];
@@ -50,6 +50,7 @@ const abort_js_1 = require("../../shared/route/abort.js");
50
50
  const loadPageFilesServerSide_js_1 = require("../runtime/renderPage/loadPageFilesServerSide.js");
51
51
  const getHook_js_1 = require("../../shared/hooks/getHook.js");
52
52
  const noRouteMatch_js_1 = require("../../shared/route/noRouteMatch.js");
53
+ const getVikeConfig_js_1 = require("../plugin/plugins/importUserCode/v1-design/getVikeConfig.js");
53
54
  async function prerenderFromAPI(options = {}) {
54
55
  await runPrerender(options, 'prerender()');
55
56
  }
@@ -96,7 +97,8 @@ async function runPrerender(options, manuallyTriggered) {
96
97
  pageContextInit: options.pageContextInit ?? null
97
98
  });
98
99
  const doNotPrerenderList = [];
99
- await collectDoNoPrerenderList(renderContext, doNotPrerenderList, concurrencyLimit);
100
+ const vikeConfig = await (0, getVikeConfig_js_1.getVikeConfig)(viteConfig, false);
101
+ await collectDoNoPrerenderList(renderContext, vikeConfig.pageConfigs, doNotPrerenderList, concurrencyLimit);
100
102
  await callOnBeforePrerenderStartHooks(prerenderContext, renderContext, concurrencyLimit);
101
103
  await handlePagesWithStaticRoutes(prerenderContext, renderContext, doNotPrerenderList, concurrencyLimit);
102
104
  await callOnPrerenderStartHook(prerenderContext, renderContext);
@@ -111,8 +113,9 @@ async function runPrerender(options, manuallyTriggered) {
111
113
  await Promise.all(htmlFiles.map((htmlFile) => writeHtmlFile(htmlFile, root, outDirClient, concurrencyLimit, options.onPagePrerender, logLevel)));
112
114
  warnMissingPages(prerenderPageIds, doNotPrerenderList, renderContext, partial);
113
115
  }
114
- async function collectDoNoPrerenderList(renderContext, doNotPrerenderList, concurrencyLimit) {
115
- renderContext.pageConfigs.forEach((pageConfig) => {
116
+ async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerenderList, concurrencyLimit) {
117
+ // V1 design
118
+ pageConfigs.forEach((pageConfig) => {
116
119
  const configName = 'prerender';
117
120
  const configValue = (0, helpers_js_1.getConfigValue)(pageConfig, configName, 'boolean');
118
121
  if (configValue?.value === false) {
@@ -126,6 +129,8 @@ async function collectDoNoPrerenderList(renderContext, doNotPrerenderList, concu
126
129
  });
127
130
  }
128
131
  });
132
+ // Old design
133
+ // TODO/v1-release: remove
129
134
  await Promise.all(renderContext.pageFilesAll
130
135
  .filter((p) => {
131
136
  assertExportNames(p);
@@ -318,11 +318,11 @@ function skipRequest(urlOriginal) {
318
318
  isViteClientRequest);
319
319
  }
320
320
  function normalizeUrl(pageContextInit, httpRequestId) {
321
- const { trailingSlash, disableUrlNormalization } = (0, globalContext_js_1.getGlobalContext)();
321
+ const { trailingSlash, disableUrlNormalization, baseServer } = (0, globalContext_js_1.getGlobalContext)();
322
322
  if (disableUrlNormalization)
323
323
  return null;
324
324
  const { urlOriginal } = pageContextInit;
325
- const urlNormalized = (0, utils_js_1.normalizeUrlPathname)(urlOriginal, trailingSlash);
325
+ const urlNormalized = (0, utils_js_1.normalizeUrlPathname)(urlOriginal, trailingSlash, baseServer);
326
326
  if (!urlNormalized)
327
327
  return null;
328
328
  (0, loggerRuntime_js_1.logRuntimeInfo)?.(`URL normalized from ${picocolors_1.default.cyan(urlOriginal)} to ${picocolors_1.default.cyan(urlNormalized)} (https://vike.dev/url-normalization)`, httpRequestId, 'info');
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getConfigVike = void 0;
4
+ const utils_js_1 = require("./utils.js");
4
5
  async function getConfigVike(config) {
5
- const configVike = (await config.configVikePromise);
6
+ const { configVikePromise } = config;
7
+ (0, utils_js_1.assert)(configVikePromise);
8
+ const configVike = await configVikePromise;
6
9
  return configVike;
7
10
  }
8
11
  exports.getConfigVike = getConfigVike;
@@ -1,12 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.parseConfigValuesImported = void 0;
7
4
  const utils_js_1 = require("../../utils.js");
8
5
  const assertExports_js_1 = require("../assertExports.js");
9
- const picocolors_1 = __importDefault(require("@brillout/picocolors"));
10
6
  function parseConfigValuesImported(configValuesImported) {
11
7
  const configValues = {};
12
8
  const addConfigValue = (configName, value, importPath, exportName) => {
@@ -50,5 +46,12 @@ function parseConfigValuesImported(configValuesImported) {
50
46
  exports.parseConfigValuesImported = parseConfigValuesImported;
51
47
  function assertIsNotNull(configValue, configName, importPath) {
52
48
  (0, utils_js_1.assert)(!importPath.includes('+config.'));
53
- (0, utils_js_1.assertUsage)(configValue !== null, `Set ${picocolors_1.default.cyan(configName)} to ${picocolors_1.default.cyan('null')} in a +config.h.js file instead of ${importPath}`);
49
+ /* Re-use this for:
50
+ * - upcoming config.requestPageContextOnNavigation
51
+ * - for cumulative values in the future: we don't need this for now because, currently, cumulative values are never imported.
52
+ assertUsage(
53
+ configValue !== null,
54
+ `Set ${pc.cyan(configName)} to ${pc.cyan('null')} in a +config.h.js file instead of ${importPath}`
55
+ )
56
+ */
54
57
  }
@@ -52,15 +52,20 @@ function isBaseAssets(base) {
52
52
  return base.startsWith('/') || base.startsWith('http://') || base.startsWith('https://');
53
53
  }
54
54
  exports.isBaseAssets = isBaseAssets;
55
- function normalizeUrlPathname(urlOriginal, trailingSlash) {
55
+ function normalizeUrlPathname(urlOriginal, trailingSlash, baseServer) {
56
56
  const urlNormalized = modifyUrlPathname(urlOriginal, (urlPathname) => {
57
57
  (0, assert_js_1.assert)(urlPathname.startsWith('/'));
58
- let urlPathnameNormalized = '/' + urlPathname.split('/').filter(Boolean).join('/');
59
- if (urlPathnameNormalized !== '/') {
60
- (0, assert_js_1.assert)(!urlPathnameNormalized.endsWith('/'));
61
- if (trailingSlash) {
62
- urlPathnameNormalized = urlPathnameNormalized + '/';
63
- }
58
+ let urlPathnameNormalized = normalize(urlPathname);
59
+ if (urlPathnameNormalized === '/') {
60
+ return urlPathnameNormalized;
61
+ }
62
+ // If the Base URL has a trailing slash, then Vite (as of vite@5.0.0-beta.19) expects the root URL to also have a trailing slash, see https://github.com/vikejs/vike/issues/1258#issuecomment-1812226260
63
+ if (baseServer.endsWith('/') && baseServer !== '/' && normalize(baseServer) === urlPathnameNormalized) {
64
+ trailingSlash = true;
65
+ }
66
+ (0, assert_js_1.assert)(!urlPathnameNormalized.endsWith('/'));
67
+ if (trailingSlash) {
68
+ urlPathnameNormalized = urlPathnameNormalized + '/';
64
69
  }
65
70
  return urlPathnameNormalized;
66
71
  });
@@ -69,6 +74,10 @@ function normalizeUrlPathname(urlOriginal, trailingSlash) {
69
74
  return urlNormalized;
70
75
  }
71
76
  exports.normalizeUrlPathname = normalizeUrlPathname;
77
+ function normalize(urlPathname) {
78
+ (0, assert_js_1.assert)(urlPathname.startsWith('/'));
79
+ return '/' + urlPathname.split('/').filter(Boolean).join('/');
80
+ }
72
81
  function modifyUrlPathname(url, modifier) {
73
82
  const { origin, pathnameOriginal, searchOriginal, hashOriginal } = (0, parseUrl_js_1.parseUrl)(url, '/');
74
83
  const pathnameModified = modifier(pathnameOriginal);
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectInfo = void 0;
4
4
  const assertSingleInstance_js_1 = require("./assertSingleInstance.js");
5
- const PROJECT_VERSION = '0.4.145';
5
+ const PROJECT_VERSION = '0.4.146-commit-701e2e5';
6
6
  const projectInfo = {
7
7
  projectName: 'Vike',
8
8
  projectVersion: PROJECT_VERSION,
@@ -1,5 +1,6 @@
1
1
  export { initHistoryState, getHistoryState, pushHistory, saveScrollPosition, monkeyPatchHistoryPushState };
2
- import { assert, assertUsage, hasProp, isObject } from './utils.js';
2
+ import { assert, assertUsage, getGlobalObject, hasProp, isObject } from './utils.js';
3
+ const globalObject = getGlobalObject('history.ts', {});
3
4
  // Fill missing state information:
4
5
  // - `history.state` can uninitialized (i.e. `null`):
5
6
  // - The very first render
@@ -71,11 +72,11 @@ function replaceHistoryState(state, url) {
71
72
  window.history.replaceState(state, '', url ?? /* Passing `undefined` chokes older Edge versions */ null);
72
73
  }
73
74
  function pushHistoryState(state, url) {
74
- window.history.pushState(state, '', url);
75
+ pushStateOriginal(state, '', url);
75
76
  }
76
77
  function monkeyPatchHistoryPushState() {
77
- const pushStateOriginal = history.pushState;
78
- history.pushState = (stateFromUser = {}, ...rest) => {
78
+ globalObject.pushStateOriginal = globalObject.pushStateOriginal ?? window.history.pushState;
79
+ window.history.pushState = (stateFromUser = {}, ...rest) => {
79
80
  assertUsage(null === stateFromUser || undefined === stateFromUser || isObject(stateFromUser), 'history.pushState(state) argument state must be an object');
80
81
  const state = {
81
82
  scrollPosition: getScrollPosition(),
@@ -84,6 +85,9 @@ function monkeyPatchHistoryPushState() {
84
85
  // Don't allow user to overwrite triggedBy as it would break Vike's handling of the 'popstate' event
85
86
  triggedBy: 'user'
86
87
  };
87
- return pushStateOriginal.apply(history, [state, ...rest]);
88
+ return pushStateOriginal(state, ...rest);
88
89
  };
89
90
  }
91
+ function pushStateOriginal(...args) {
92
+ globalObject.pushStateOriginal.apply(history, args);
93
+ }
@@ -1,7 +1,7 @@
1
1
  export { buildConfig };
2
2
  export { assertRollupInput };
3
3
  export { analyzeClientEntries };
4
- import { assert, resolveOutDir, isObject, viteIsSSR, getFilePathAbsolute, addOnBeforeLogHook, removeFileExtention, unique, assertPosixPath, assertUsage, getOutDirs } from '../utils.js';
4
+ import { assert, resolveOutDir, isObject, viteIsSSR, getFilePathAbsolute, addOnBeforeLogHook, removeFileExtention, unique, assertPosixPath, assertUsage } from '../utils.js';
5
5
  import { virtualFileIdImportUserCodeServer } from '../../shared/virtual-files/virtualFileImportUserCode.js';
6
6
  import { getVikeConfig } from './importUserCode/v1-design/getVikeConfig.js';
7
7
  import { getConfigValue } from '../../../shared/page-configs/helpers.js';
@@ -69,7 +69,7 @@ function buildConfig() {
69
69
  async function getEntries(config) {
70
70
  const configVike = await getConfigVike(config);
71
71
  const pageFileEntries = await getPageFileEntries(config, configVike.includeAssetsImportedByServer); // TODO/v1-release: remove
72
- const { pageConfigs } = await getVikeConfig(config.root, getOutDirs(config).outDirRoot, false, configVike.extensions);
72
+ const { pageConfigs } = await getVikeConfig(config, false);
73
73
  assertUsage(Object.keys(pageFileEntries).length !== 0 || pageConfigs.length !== 0, 'At least one page should be defined, see https://vike.dev/add');
74
74
  if (viteIsSSR(config)) {
75
75
  const serverEntries = analyzeServerEntries(pageConfigs);
@@ -1,6 +1,6 @@
1
1
  export { resolveVikeConfig };
2
2
  import { assertVikeConfig } from './assertVikeConfig.js';
3
- import { getOutDirs, isDev2 } from '../../utils.js';
3
+ import { isDev2 } from '../../utils.js';
4
4
  import { findConfigVikeFromStemPackages } from './findConfigVikeFromStemPackages.js';
5
5
  import { pickFirst } from './pickFirst.js';
6
6
  import { resolveExtensions } from './resolveExtensions.js';
@@ -12,19 +12,19 @@ function resolveVikeConfig(vikeConfig) {
12
12
  name: 'vike:resolveVikeConfig',
13
13
  enforce: 'pre',
14
14
  async configResolved(config) {
15
- const promise = resolveConfig(vikeConfig, config);
15
+ const promise = getConfigVikPromise(vikeConfig, config);
16
16
  config.configVikePromise = promise;
17
17
  await promise;
18
18
  }
19
19
  };
20
20
  }
21
- async function resolveConfig(vikeConfig, config) {
21
+ async function getConfigVikPromise(vikeConfig, config) {
22
22
  const fromPluginOptions = (vikeConfig ?? {});
23
23
  const fromViteConfig = (config.vike ?? {});
24
24
  const fromStemPackages = await findConfigVikeFromStemPackages(config.root);
25
25
  const configs = [fromPluginOptions, ...fromStemPackages, fromViteConfig];
26
26
  const extensions = resolveExtensions(configs, config);
27
- const { globalVikeConfig: fromPlusConfigFile } = await getVikeConfig(config.root, getOutDirs(config).outDirRoot, isDev2(config), extensions);
27
+ const { globalVikeConfig: fromPlusConfigFile } = await getVikeConfig(config, isDev2(config), false, extensions);
28
28
  configs.push(fromPlusConfigFile);
29
29
  assertVikeConfig(fromPlusConfigFile, ({ prop, errMsg }) => {
30
30
  // TODO: add config file path ?
@@ -1,12 +1,12 @@
1
1
  export { determineOptimizeDeps };
2
2
  import { findPageFiles } from '../../shared/findPageFiles.js';
3
- import { assert, getFilePathAbsolute, getOutDirs, isNotNullish, isNpmPackageImport, unique } from '../../utils.js';
3
+ import { assert, getFilePathAbsolute, isNotNullish, isNpmPackageImport, unique } from '../../utils.js';
4
4
  import { getVikeConfig } from '../importUserCode/v1-design/getVikeConfig.js';
5
5
  import { getConfigValueSourcesRelevant } from '../../shared/getConfigValueSourcesRelevant.js';
6
6
  import { analyzeClientEntries } from '../buildConfig.js';
7
7
  import { virtualFileIdImportUserCodeClientCR, virtualFileIdImportUserCodeClientSR } from '../../../shared/virtual-files/virtualFileImportUserCode.js';
8
8
  async function determineOptimizeDeps(config, configVike, isDev) {
9
- const { pageConfigs } = await getVikeConfig(config.root, getOutDirs(config).outDirRoot, isDev, configVike.extensions);
9
+ const { pageConfigs } = await getVikeConfig(config, isDev);
10
10
  const { entries, include } = await getPageDeps(config, pageConfigs, isDev);
11
11
  {
12
12
  // This actually doesn't work: Vite's dep optimizer doesn't seem to be able to crawl virtual files.
@@ -140,7 +140,7 @@ export const pageFilesList = [];
140
140
  export const neverLoaded = {};
141
141
  export const isGeneratedFile = true;
142
142
 
143
- ${await getVirtualFilePageConfigs(config.root, getOutDirs(config).outDirRoot, isForClientSide, isDev, id, configVike, isClientRouting)}
143
+ ${await getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, config)}
144
144
 
145
145
  `;
146
146
  fileTypes
@@ -47,7 +47,7 @@ function importUserCode() {
47
47
  return undefined;
48
48
  id = getVirtualFileId(id);
49
49
  if (isVirtualFileIdPageConfigValuesAll(id)) {
50
- const code = await getVirtualFilePageConfigValuesAll(id, config.root, getOutDirs(config).outDirRoot, isDev, configVike);
50
+ const code = await getVirtualFilePageConfigValuesAll(id, isDev, config);
51
51
  return code;
52
52
  }
53
53
  if (isVirtualFileIdImportUserCode(id)) {
@@ -52,7 +52,7 @@ const configDefinitionsBuiltIn = {
52
52
  env: 'server-and-client'
53
53
  },
54
54
  prerender: {
55
- env: 'server-only'
55
+ env: 'config-only'
56
56
  },
57
57
  hydrationCanBeAborted: {
58
58
  env: 'client-only'
@@ -4,6 +4,7 @@ export { vikeConfigDependencies };
4
4
  export { isVikeConfigFile };
5
5
  import type { PageConfigGlobalBuildTime, PageConfigBuildTime } from '../../../../../shared/page-configs/PageConfig.js';
6
6
  import type { ExtensionResolved } from '../../../../../shared/ConfigVike.js';
7
+ import type { ResolvedConfig } from 'vite';
7
8
  type VikeConfig = {
8
9
  pageConfigs: PageConfigBuildTime[];
9
10
  pageConfigGlobal: PageConfigGlobalBuildTime;
@@ -11,5 +12,5 @@ type VikeConfig = {
11
12
  };
12
13
  declare const vikeConfigDependencies: Set<string>;
13
14
  declare function reloadVikeConfig(userRootDir: string, outDirRoot: string, extensions: ExtensionResolved[]): void;
14
- declare function getVikeConfig(userRootDir: string, outDirRoot: string, isDev: boolean, extensions: ExtensionResolved[], tolerateInvalidConfig?: boolean): Promise<VikeConfig>;
15
+ declare function getVikeConfig(config: ResolvedConfig, isDev: boolean, tolerateInvalidConfig?: boolean, extensions?: ExtensionResolved[]): Promise<VikeConfig>;
15
16
  declare function isVikeConfigFile(filePath: string): boolean;
@@ -2,7 +2,7 @@ export { getVikeConfig };
2
2
  export { reloadVikeConfig };
3
3
  export { vikeConfigDependencies };
4
4
  export { isVikeConfigFile };
5
- import { assertPosixPath, assert, isObject, assertUsage, toPosixPath, assertWarning, objectEntries, hasProp, arrayIncludes, assertIsNotProductionRuntime, getMostSimilar, isNpmPackageImport, joinEnglish, lowerFirst, scriptFileExtensions, mergeCumulativeValues, requireResolve } from '../../../utils.js';
5
+ import { assertPosixPath, assert, isObject, assertUsage, toPosixPath, assertWarning, objectEntries, hasProp, arrayIncludes, assertIsNotProductionRuntime, getMostSimilar, isNpmPackageImport, joinEnglish, lowerFirst, scriptFileExtensions, mergeCumulativeValues, requireResolve, getOutDirs } from '../../../utils.js';
6
6
  import path from 'path';
7
7
  import { configDefinitionsBuiltIn, configDefinitionsBuiltInGlobal } from './getVikeConfig/configDefinitionsBuiltIn.js';
8
8
  import glob from 'fast-glob';
@@ -17,6 +17,7 @@ import pc from '@brillout/picocolors';
17
17
  import { getConfigDefinedAtString } from '../../../../../shared/page-configs/helpers.js';
18
18
  import { assertExportsOfConfigFile, assertExportsOfValueFile } from '../../../../../shared/page-configs/assertExports.js';
19
19
  import { getConfigValueSerialized } from './getVirtualFilePageConfigs.js';
20
+ import { getConfigVike } from '../../../../shared/getConfigVike.js';
20
21
  assertIsNotProductionRuntime();
21
22
  let devServerIsCorrupt = false;
22
23
  let wasConfigInvalid = null;
@@ -60,9 +61,11 @@ async function handleReloadSideEffects() {
60
61
  }
61
62
  }
62
63
  }
63
- async function getVikeConfig(userRootDir, outDirRoot, isDev, extensions, tolerateInvalidConfig = false) {
64
+ async function getVikeConfig(config, isDev, tolerateInvalidConfig = false, extensions) {
65
+ const { outDirRoot } = getOutDirs(config);
66
+ const userRootDir = config.root;
64
67
  if (!vikeConfigPromise) {
65
- vikeConfigPromise = loadVikeConfig_withErrorHandling(userRootDir, outDirRoot, isDev, extensions, tolerateInvalidConfig);
68
+ vikeConfigPromise = loadVikeConfig_withErrorHandling(userRootDir, outDirRoot, isDev, extensions ?? (await getConfigVike(config)).extensions, tolerateInvalidConfig);
66
69
  }
67
70
  return await vikeConfigPromise;
68
71
  }
@@ -1,3 +1,3 @@
1
1
  export { getVirtualFilePageConfigValuesAll };
2
- import type { ConfigVikeResolved } from '../../../../../shared/ConfigVike.js';
3
- declare function getVirtualFilePageConfigValuesAll(id: string, userRootDir: string, outDirRoot: string, isDev: boolean, configVike: ConfigVikeResolved): Promise<string>;
2
+ import type { ResolvedConfig } from 'vite';
3
+ declare function getVirtualFilePageConfigValuesAll(id: string, isDev: boolean, config: ResolvedConfig): Promise<string>;
@@ -8,7 +8,8 @@ import { getConfigValue } from '../../../../../shared/page-configs/helpers.js';
8
8
  import { getConfigValueSourcesRelevant } from '../../../shared/getConfigValueSourcesRelevant.js';
9
9
  import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
10
10
  import { serializeConfigValueImported } from '../../../../../shared/page-configs/serialize/serializeConfigValue.js';
11
- async function getVirtualFilePageConfigValuesAll(id, userRootDir, outDirRoot, isDev, configVike) {
11
+ import { getConfigVike } from '../../../../shared/getConfigVike.js';
12
+ async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
12
13
  const result = isVirtualFileIdPageConfigValuesAll(id);
13
14
  assert(result);
14
15
  /* This assertion fails when using includeAssetsImportedByServer
@@ -18,9 +19,10 @@ async function getVirtualFilePageConfigValuesAll(id, userRootDir, outDirRoot, is
18
19
  }
19
20
  */
20
21
  const { pageId, isForClientSide } = result;
21
- const { pageConfigs } = await getVikeConfig(userRootDir, outDirRoot, isDev, configVike.extensions, true);
22
+ const { pageConfigs } = await getVikeConfig(config, isDev, true);
22
23
  const pageConfig = pageConfigs.find((pageConfig) => pageConfig.pageId === pageId);
23
24
  assert(pageConfig);
25
+ const configVike = await getConfigVike(config);
24
26
  const code = getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, configVike.includeAssetsImportedByServer, isDev);
25
27
  debug(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
26
28
  return code;
@@ -1,6 +1,6 @@
1
1
  export { getVirtualFilePageConfigs };
2
2
  export { getConfigValueSerialized };
3
3
  import type { DefinedAt } from '../../../../../shared/page-configs/PageConfig.js';
4
- import type { ConfigVikeResolved } from '../../../../../shared/ConfigVike.js';
5
- declare function getVirtualFilePageConfigs(userRootDir: string, outDirRoot: string, isForClientSide: boolean, isDev: boolean, id: string, configVike: ConfigVikeResolved, isClientRouting: boolean): Promise<string>;
4
+ import type { ResolvedConfig } from 'vite';
5
+ declare function getVirtualFilePageConfigs(isForClientSide: boolean, isDev: boolean, id: string, isClientRouting: boolean, config: ResolvedConfig): Promise<string>;
6
6
  declare function getConfigValueSerialized(value: unknown, configName: string, definedAt: DefinedAt): string;
@@ -10,14 +10,22 @@ import { getVikeConfig } from './getVikeConfig.js';
10
10
  import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
11
11
  import { getConfigValueFilePathToShowToUser } from '../../../../../shared/page-configs/helpers.js';
12
12
  import { serializeConfigValue, serializeConfigValueImported } from '../../../../../shared/page-configs/serialize/serializeConfigValue.js';
13
- async function getVirtualFilePageConfigs(userRootDir, outDirRoot, isForClientSide, isDev, id, configVike, isClientRouting) {
14
- const { pageConfigs, pageConfigGlobal } = await getVikeConfig(userRootDir, outDirRoot, isDev, configVike.extensions, true);
15
- return getContent(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
13
+ async function getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, config) {
14
+ const { pageConfigs, pageConfigGlobal } = await getVikeConfig(config, isDev, true);
15
+ return getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
16
16
  }
17
- function getContent(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
17
+ function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
18
18
  const lines = [];
19
19
  const importStatements = [];
20
20
  const varCounterContainer = { varCounter: 0 };
21
+ lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, importStatements, varCounterContainer));
22
+ lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements, varCounterContainer));
23
+ const code = [...importStatements, ...lines].join('\n');
24
+ debug(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
25
+ return code;
26
+ }
27
+ function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, importStatements, varCounterContainer) {
28
+ const lines = [];
21
29
  lines.push('export const pageConfigsSerialized = [');
22
30
  pageConfigs.forEach((pageConfig) => {
23
31
  const { pageId, routeFilesystem, isErrorPage } = pageConfig;
@@ -71,6 +79,11 @@ function getContent(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, i
71
79
  lines.push(` },`);
72
80
  });
73
81
  lines.push('];');
82
+ const code = lines.join('\n');
83
+ return code;
84
+ }
85
+ function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isDev, importStatements, varCounterContainer) {
86
+ const lines = [];
74
87
  lines.push('export const pageConfigGlobalSerialized = {');
75
88
  /* Nothing (yet)
76
89
  lines.push(` configValuesSerialized: {`)
@@ -97,8 +110,7 @@ function getContent(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, i
97
110
  });
98
111
  lines.push(` ],`);
99
112
  lines.push('};');
100
- const code = [...importStatements, ...lines].join('\n');
101
- debug(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
113
+ const code = lines.join('\n');
102
114
  return code;
103
115
  }
104
116
  function getConfigValueSerialized(value, configName, definedAt) {
@@ -7,7 +7,7 @@ import fs from 'fs';
7
7
  import path from 'path';
8
8
  import pc from '@brillout/picocolors';
9
9
  import { import_ } from '@brillout/import';
10
- import { assertPosixPath, getRandomId, assertIsNotProductionRuntime, assert, unique, assertWarning, isObject, toPosixPath, assertUsage } from '../../../utils.js';
10
+ import { assertPosixPath, getRandomId, assertIsNotProductionRuntime, assert, unique, assertWarning, isObject, toPosixPath } from '../../../utils.js';
11
11
  import { isImportData, replaceImportStatements } from './replaceImportStatements.js';
12
12
  import { vikeConfigDependencies } from './getVikeConfig.js';
13
13
  import 'source-map-support/register.js';
@@ -226,11 +226,11 @@ function assertImportsAreReExported(fileImports, fileExports, filePathToShowToUs
226
226
  const importStatements = unique(fileImportsUnused.map((fi) => fi.importStatementCode));
227
227
  const importNamesUnused = fileImportsUnused.map((fi) => pc.cyan(fi.importLocalName)).join(', ');
228
228
  const singular = fileImportsUnused.length === 1;
229
- assertUsage(fileImportsUnused.length === 0, [
229
+ assertWarning(fileImportsUnused.length === 0, [
230
230
  `${filePathToShowToUser} imports the following:`,
231
231
  ...importStatements.map((s) => pc.cyan(` ${s}`)),
232
232
  `But the import${singular ? '' : 's'} ${importNamesUnused} ${singular ? "isn't" : "aren't"} re-exported at ${pc.cyan('export default { ... }')} and therefore ${singular ? 'has' : 'have'} no effect, see explanation at https://vike.dev/header-file`
233
- ].join('\n'));
233
+ ].join('\n'), { onlyOnce: true });
234
234
  }
235
235
  function getExportedStrings(obj) {
236
236
  const exportedStrings = [];
@@ -25,6 +25,7 @@ import { isAbortError } from '../../shared/route/abort.js';
25
25
  import { loadPageFilesServerSide } from '../runtime/renderPage/loadPageFilesServerSide.js';
26
26
  import { assertHookFn } from '../../shared/hooks/getHook.js';
27
27
  import { noRouteMatch } from '../../shared/route/noRouteMatch.js';
28
+ import { getVikeConfig } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
28
29
  async function prerenderFromAPI(options = {}) {
29
30
  await runPrerender(options, 'prerender()');
30
31
  }
@@ -68,7 +69,8 @@ async function runPrerender(options, manuallyTriggered) {
68
69
  pageContextInit: options.pageContextInit ?? null
69
70
  });
70
71
  const doNotPrerenderList = [];
71
- await collectDoNoPrerenderList(renderContext, doNotPrerenderList, concurrencyLimit);
72
+ const vikeConfig = await getVikeConfig(viteConfig, false);
73
+ await collectDoNoPrerenderList(renderContext, vikeConfig.pageConfigs, doNotPrerenderList, concurrencyLimit);
72
74
  await callOnBeforePrerenderStartHooks(prerenderContext, renderContext, concurrencyLimit);
73
75
  await handlePagesWithStaticRoutes(prerenderContext, renderContext, doNotPrerenderList, concurrencyLimit);
74
76
  await callOnPrerenderStartHook(prerenderContext, renderContext);
@@ -83,8 +85,9 @@ async function runPrerender(options, manuallyTriggered) {
83
85
  await Promise.all(htmlFiles.map((htmlFile) => writeHtmlFile(htmlFile, root, outDirClient, concurrencyLimit, options.onPagePrerender, logLevel)));
84
86
  warnMissingPages(prerenderPageIds, doNotPrerenderList, renderContext, partial);
85
87
  }
86
- async function collectDoNoPrerenderList(renderContext, doNotPrerenderList, concurrencyLimit) {
87
- renderContext.pageConfigs.forEach((pageConfig) => {
88
+ async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerenderList, concurrencyLimit) {
89
+ // V1 design
90
+ pageConfigs.forEach((pageConfig) => {
88
91
  const configName = 'prerender';
89
92
  const configValue = getConfigValue(pageConfig, configName, 'boolean');
90
93
  if (configValue?.value === false) {
@@ -98,6 +101,8 @@ async function collectDoNoPrerenderList(renderContext, doNotPrerenderList, concu
98
101
  });
99
102
  }
100
103
  });
104
+ // Old design
105
+ // TODO/v1-release: remove
101
106
  await Promise.all(renderContext.pageFilesAll
102
107
  .filter((p) => {
103
108
  assertExportNames(p);
@@ -312,11 +312,11 @@ function skipRequest(urlOriginal) {
312
312
  isViteClientRequest);
313
313
  }
314
314
  function normalizeUrl(pageContextInit, httpRequestId) {
315
- const { trailingSlash, disableUrlNormalization } = getGlobalContext();
315
+ const { trailingSlash, disableUrlNormalization, baseServer } = getGlobalContext();
316
316
  if (disableUrlNormalization)
317
317
  return null;
318
318
  const { urlOriginal } = pageContextInit;
319
- const urlNormalized = normalizeUrlPathname(urlOriginal, trailingSlash);
319
+ const urlNormalized = normalizeUrlPathname(urlOriginal, trailingSlash, baseServer);
320
320
  if (!urlNormalized)
321
321
  return null;
322
322
  logRuntimeInfo?.(`URL normalized from ${pc.cyan(urlOriginal)} to ${pc.cyan(urlNormalized)} (https://vike.dev/url-normalization)`, httpRequestId, 'info');
@@ -1,3 +1,4 @@
1
1
  export { getConfigVike };
2
+ import { ResolvedConfig } from 'vite';
2
3
  import type { ConfigVikeResolved } from '../../shared/ConfigVike.js';
3
- declare function getConfigVike(config: Record<string, unknown>): Promise<ConfigVikeResolved>;
4
+ declare function getConfigVike(config: ResolvedConfig): Promise<ConfigVikeResolved>;
@@ -1,5 +1,8 @@
1
1
  export { getConfigVike };
2
+ import { assert } from './utils.js';
2
3
  async function getConfigVike(config) {
3
- const configVike = (await config.configVikePromise);
4
+ const { configVikePromise } = config;
5
+ assert(configVikePromise);
6
+ const configVike = await configVikePromise;
4
7
  return configVike;
5
8
  }
@@ -1,7 +1,6 @@
1
1
  export { parseConfigValuesImported };
2
- import { assert, assertUsage } from '../../utils.js';
2
+ import { assert } from '../../utils.js';
3
3
  import { assertExportsOfValueFile } from '../assertExports.js';
4
- import pc from '@brillout/picocolors';
5
4
  function parseConfigValuesImported(configValuesImported) {
6
5
  const configValues = {};
7
6
  const addConfigValue = (configName, value, importPath, exportName) => {
@@ -44,5 +43,12 @@ function parseConfigValuesImported(configValuesImported) {
44
43
  }
45
44
  function assertIsNotNull(configValue, configName, importPath) {
46
45
  assert(!importPath.includes('+config.'));
47
- assertUsage(configValue !== null, `Set ${pc.cyan(configName)} to ${pc.cyan('null')} in a +config.h.js file instead of ${importPath}`);
46
+ /* Re-use this for:
47
+ * - upcoming config.requestPageContextOnNavigation
48
+ * - for cumulative values in the future: we don't need this for now because, currently, cumulative values are never imported.
49
+ assertUsage(
50
+ configValue !== null,
51
+ `Set ${pc.cyan(configName)} to ${pc.cyan('null')} in a +config.h.js file instead of ${importPath}`
52
+ )
53
+ */
48
54
  }
@@ -8,7 +8,7 @@ export { addUrlOrigin };
8
8
  declare function prependBase(url: string, baseServer: string): string;
9
9
  declare function removeBaseServer(url: string, baseServer: string): string;
10
10
  declare function isBaseAssets(base: string): boolean;
11
- declare function normalizeUrlPathname(urlOriginal: string, trailingSlash: boolean): string | null;
11
+ declare function normalizeUrlPathname(urlOriginal: string, trailingSlash: boolean, baseServer: string): string | null;
12
12
  declare function modifyUrlPathname(url: string, modifier: (urlPathname: string) => string | null): string;
13
13
  declare function removeUrlOrigin(url: string): {
14
14
  urlModified: string;
@@ -53,15 +53,20 @@ function normalizeBaseServer(baseServer) {
53
53
  function isBaseAssets(base) {
54
54
  return base.startsWith('/') || base.startsWith('http://') || base.startsWith('https://');
55
55
  }
56
- function normalizeUrlPathname(urlOriginal, trailingSlash) {
56
+ function normalizeUrlPathname(urlOriginal, trailingSlash, baseServer) {
57
57
  const urlNormalized = modifyUrlPathname(urlOriginal, (urlPathname) => {
58
58
  assert(urlPathname.startsWith('/'));
59
- let urlPathnameNormalized = '/' + urlPathname.split('/').filter(Boolean).join('/');
60
- if (urlPathnameNormalized !== '/') {
61
- assert(!urlPathnameNormalized.endsWith('/'));
62
- if (trailingSlash) {
63
- urlPathnameNormalized = urlPathnameNormalized + '/';
64
- }
59
+ let urlPathnameNormalized = normalize(urlPathname);
60
+ if (urlPathnameNormalized === '/') {
61
+ return urlPathnameNormalized;
62
+ }
63
+ // If the Base URL has a trailing slash, then Vite (as of vite@5.0.0-beta.19) expects the root URL to also have a trailing slash, see https://github.com/vikejs/vike/issues/1258#issuecomment-1812226260
64
+ if (baseServer.endsWith('/') && baseServer !== '/' && normalize(baseServer) === urlPathnameNormalized) {
65
+ trailingSlash = true;
66
+ }
67
+ assert(!urlPathnameNormalized.endsWith('/'));
68
+ if (trailingSlash) {
69
+ urlPathnameNormalized = urlPathnameNormalized + '/';
65
70
  }
66
71
  return urlPathnameNormalized;
67
72
  });
@@ -69,6 +74,10 @@ function normalizeUrlPathname(urlOriginal, trailingSlash) {
69
74
  return null;
70
75
  return urlNormalized;
71
76
  }
77
+ function normalize(urlPathname) {
78
+ assert(urlPathname.startsWith('/'));
79
+ return '/' + urlPathname.split('/').filter(Boolean).join('/');
80
+ }
72
81
  function modifyUrlPathname(url, modifier) {
73
82
  const { origin, pathnameOriginal, searchOriginal, hashOriginal } = parseUrl(url, '/');
74
83
  const pathnameModified = modifier(pathnameOriginal);
@@ -5,7 +5,7 @@ type ProjectVersion = typeof projectInfo.projectVersion;
5
5
  type ProjectTag = `[${PackageName}]` | `[${PackageName}@${ProjectVersion}]`;
6
6
  declare const projectInfo: {
7
7
  projectName: "Vike";
8
- projectVersion: "0.4.145";
8
+ projectVersion: "0.4.146-commit-701e2e5";
9
9
  npmPackageName: "vike";
10
10
  githubRepository: "https://github.com/vikejs/vike";
11
11
  };
@@ -1,6 +1,6 @@
1
1
  export { projectInfo };
2
2
  import { onProjectInfo } from './assertSingleInstance.js';
3
- const PROJECT_VERSION = '0.4.145';
3
+ const PROJECT_VERSION = '0.4.146-commit-701e2e5';
4
4
  const projectInfo = {
5
5
  projectName: 'Vike',
6
6
  projectVersion: PROJECT_VERSION,
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import '../../dist/esm/node/cli/bin.mjs'
3
+ import '../../dist/esm/node/cli/bin.js'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.145",
3
+ "version": "0.4.146-commit-701e2e5",
4
4
  "scripts": {
5
5
  "dev": "tsc --watch",
6
6
  "build": "rimraf dist/ && pnpm run build:esm && pnpm run build:cjs",