vike 0.4.225 → 0.4.226-commit-8f5c172

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 (157) hide show
  1. package/dist/cjs/client/shared/getPageContextProxyForUser.js +3 -66
  2. package/dist/cjs/node/api/build.js +7 -7
  3. package/dist/cjs/node/api/dev.js +2 -2
  4. package/dist/cjs/node/api/prepareViteApiCall.js +55 -30
  5. package/dist/cjs/node/api/prerender.js +2 -3
  6. package/dist/cjs/node/api/preview.js +27 -6
  7. package/dist/cjs/node/api/utils.js +1 -0
  8. package/dist/cjs/node/cli/entry.js +4 -2
  9. package/dist/cjs/node/cli/parseCli.js +10 -4
  10. package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +3 -3
  11. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +51 -0
  12. package/dist/cjs/node/plugin/plugins/build.js +3 -1
  13. package/dist/cjs/node/plugin/plugins/commonConfig.js +22 -8
  14. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  15. package/dist/cjs/node/plugin/plugins/fileEnv.js +3 -0
  16. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +14 -10
  17. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -1
  18. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  19. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +99 -85
  20. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +10 -1
  21. package/dist/cjs/node/plugin/shared/getEnvVarObject.js +7 -0
  22. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +3 -3
  23. package/dist/cjs/node/prerender/runPrerender.js +21 -28
  24. package/dist/cjs/node/prerender/utils.js +1 -1
  25. package/dist/cjs/node/runtime/globalContext.js +13 -8
  26. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  27. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +67 -14
  28. package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +3 -2
  29. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  30. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  31. package/dist/cjs/node/runtime/renderPage.js +13 -28
  32. package/dist/cjs/node/runtime/utils.js +1 -1
  33. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +2 -2
  34. package/dist/cjs/node/shared/assertV1Design.js +1 -1
  35. package/dist/cjs/node/shared/utils.js +1 -1
  36. package/dist/cjs/node/shared/virtual-files.js +14 -10
  37. package/dist/cjs/shared/NOT_SERIALIZABLE.js +5 -0
  38. package/dist/cjs/shared/modifyUrl.js +3 -5
  39. package/dist/cjs/shared/modifyUrlSameOrigin.js +42 -0
  40. package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +3 -2
  41. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +5 -5
  42. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +9 -9
  43. package/dist/cjs/shared/utils.js +2 -1
  44. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  45. package/dist/cjs/utils/assert.js +10 -3
  46. package/dist/cjs/utils/assertSetup.js +12 -8
  47. package/dist/cjs/utils/assertSingleInstance.js +19 -4
  48. package/dist/cjs/utils/getRandomId.js +1 -1
  49. package/dist/cjs/utils/isNullish.js +16 -0
  50. package/dist/cjs/utils/normalizeHeaders.js +1 -1
  51. package/dist/cjs/utils/objectAssign.js +7 -2
  52. package/dist/cjs/utils/objectFilter.js +10 -0
  53. package/dist/cjs/utils/pick.js +12 -0
  54. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +3 -1
  55. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
  56. package/dist/esm/client/client-routing-runtime/navigate.d.ts +6 -5
  57. package/dist/esm/client/client-routing-runtime/navigate.js +6 -2
  58. package/dist/esm/client/client-routing-runtime/normalizeUrlArgument.js +1 -1
  59. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
  60. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +6 -3
  61. package/dist/esm/client/server-routing-runtime/getPageContext.js +6 -3
  62. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +1 -11
  63. package/dist/esm/client/shared/getPageContextProxyForUser.js +4 -67
  64. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  65. package/dist/esm/node/api/build.js +7 -7
  66. package/dist/esm/node/api/dev.js +2 -2
  67. package/dist/esm/node/api/prepareViteApiCall.d.ts +2 -1
  68. package/dist/esm/node/api/prepareViteApiCall.js +57 -32
  69. package/dist/esm/node/api/prerender.js +2 -3
  70. package/dist/esm/node/api/preview.d.ts +1 -1
  71. package/dist/esm/node/api/preview.js +24 -6
  72. package/dist/esm/node/api/utils.d.ts +1 -0
  73. package/dist/esm/node/api/utils.js +1 -0
  74. package/dist/esm/node/cli/entry.js +4 -2
  75. package/dist/esm/node/cli/parseCli.js +10 -4
  76. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +3 -3
  77. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.d.ts +3 -0
  78. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +49 -0
  79. package/dist/esm/node/plugin/plugins/build.js +3 -1
  80. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +10 -2
  81. package/dist/esm/node/plugin/plugins/commonConfig.js +22 -8
  82. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  83. package/dist/esm/node/plugin/plugins/fileEnv.js +3 -0
  84. package/dist/esm/node/plugin/plugins/importUserCode/index.js +15 -11
  85. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -1
  86. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +5 -2
  87. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  88. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +11 -2
  89. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +101 -86
  90. package/dist/esm/node/plugin/plugins/setGlobalContext.js +11 -2
  91. package/dist/esm/node/plugin/shared/getEnvVarObject.js +7 -0
  92. package/dist/esm/node/prerender/resolvePrerenderConfig.js +3 -3
  93. package/dist/esm/node/prerender/runPrerender.d.ts +1 -1
  94. package/dist/esm/node/prerender/runPrerender.js +21 -28
  95. package/dist/esm/node/prerender/utils.d.ts +1 -1
  96. package/dist/esm/node/prerender/utils.js +1 -1
  97. package/dist/esm/node/runtime/globalContext.d.ts +2 -3
  98. package/dist/esm/node/runtime/globalContext.js +13 -8
  99. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  100. package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +2 -0
  101. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +69 -15
  102. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +1 -1
  103. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +3 -2
  104. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  105. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +27 -1
  106. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  107. package/dist/esm/node/runtime/renderPage.js +14 -29
  108. package/dist/esm/node/runtime/utils.d.ts +1 -1
  109. package/dist/esm/node/runtime/utils.js +1 -1
  110. package/dist/esm/node/runtime-dev/createDevMiddleware.js +2 -2
  111. package/dist/esm/node/shared/assertV1Design.js +1 -1
  112. package/dist/esm/node/shared/utils.d.ts +1 -1
  113. package/dist/esm/node/shared/utils.js +1 -1
  114. package/dist/esm/node/shared/virtual-files.d.ts +2 -0
  115. package/dist/esm/node/shared/virtual-files.js +14 -10
  116. package/dist/esm/shared/NOT_SERIALIZABLE.d.ts +1 -0
  117. package/dist/esm/shared/NOT_SERIALIZABLE.js +2 -0
  118. package/dist/esm/shared/modifyUrl.d.ts +2 -2
  119. package/dist/esm/shared/modifyUrl.js +3 -5
  120. package/dist/esm/shared/modifyUrlSameOrigin.d.ts +9 -0
  121. package/dist/esm/shared/modifyUrlSameOrigin.js +40 -0
  122. package/dist/esm/shared/page-configs/Config.d.ts +11 -3
  123. package/dist/esm/shared/page-configs/PageConfig.d.ts +2 -2
  124. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +3 -1
  125. package/dist/esm/shared/page-configs/getConfigDefinedAt.js +3 -2
  126. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +5 -5
  127. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +9 -9
  128. package/dist/esm/shared/route/abort.d.ts +2 -2
  129. package/dist/esm/shared/types.d.ts +39 -3
  130. package/dist/esm/shared/utils.d.ts +2 -1
  131. package/dist/esm/shared/utils.js +2 -1
  132. package/dist/esm/types/index.d.ts +0 -1
  133. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  134. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  135. package/dist/esm/utils/assert.d.ts +2 -1
  136. package/dist/esm/utils/assert.js +10 -3
  137. package/dist/esm/utils/assertSetup.d.ts +2 -2
  138. package/dist/esm/utils/assertSetup.js +12 -8
  139. package/dist/esm/utils/assertSingleInstance.js +19 -4
  140. package/dist/esm/utils/getRandomId.d.ts +1 -1
  141. package/dist/esm/utils/getRandomId.js +1 -1
  142. package/dist/esm/utils/isNullish.d.ts +3 -0
  143. package/dist/esm/utils/isNullish.js +11 -0
  144. package/dist/esm/utils/normalizeHeaders.js +1 -1
  145. package/dist/esm/utils/objectAssign.d.ts +1 -1
  146. package/dist/esm/utils/objectAssign.js +7 -2
  147. package/dist/esm/utils/objectFilter.d.ts +1 -0
  148. package/dist/esm/utils/objectFilter.js +7 -0
  149. package/dist/esm/utils/pick.d.ts +1 -0
  150. package/dist/esm/utils/pick.js +9 -0
  151. package/package.json +4 -2
  152. package/dist/cjs/shared/notSerializable.js +0 -5
  153. package/dist/cjs/utils/isNotNullish.js +0 -5
  154. package/dist/esm/shared/notSerializable.d.ts +0 -1
  155. package/dist/esm/shared/notSerializable.js +0 -2
  156. package/dist/esm/utils/isNotNullish.d.ts +0 -1
  157. package/dist/esm/utils/isNotNullish.js +0 -1
@@ -34,9 +34,9 @@ function importUserCode() {
34
34
  return (0, virtual_files_js_1.resolveVirtualFileId)(id);
35
35
  }
36
36
  },
37
- handleHotUpdate(ctx) {
37
+ async handleHotUpdate(ctx) {
38
38
  try {
39
- return handleHotUpdate(ctx, config);
39
+ return await handleHotUpdate(ctx, config);
40
40
  }
41
41
  catch (err) {
42
42
  // Vite swallows errors thrown by handleHotUpdate()
@@ -68,9 +68,9 @@ function handleFileAddRemove(server, config) {
68
68
  server.watcher.prependListener('add', (f) => listener(f, false));
69
69
  server.watcher.prependListener('unlink', (f) => listener(f, true));
70
70
  return;
71
- function listener(file, isRemove) {
71
+ async function listener(file, isRemove) {
72
72
  file = (0, vite_1.normalizePath)(file);
73
- if ((0, crawlPlusFiles_js_1.isPlusFile)(file) || isVikeConfigDependency(file, server.moduleGraph)?.modifiesVikeVirtualFiles) {
73
+ if ((0, crawlPlusFiles_js_1.isPlusFile)(file) || (await isVikeConfigDependency(file, server.moduleGraph))?.modifiesVikeVirtualFiles) {
74
74
  invalidateVikeVirtualFiles(server);
75
75
  reloadConfig(file, config, isRemove ? 'removed' : 'created');
76
76
  }
@@ -82,9 +82,9 @@ function invalidateVikeVirtualFiles(server) {
82
82
  server.moduleGraph.invalidateModule(mod);
83
83
  });
84
84
  }
85
- function handleHotUpdate(ctx, config) {
85
+ async function handleHotUpdate(ctx, config) {
86
86
  const { file, server } = ctx;
87
- const isVikeConfig = isVikeConfigDependency(ctx.file, ctx.server.moduleGraph);
87
+ const isVikeConfig = await isVikeConfigDependency(ctx.file, ctx.server.moduleGraph);
88
88
  if (isVikeConfig) {
89
89
  if (isVikeConfig.modifiesVikeVirtualFiles) {
90
90
  /* Tailwind breaks this assertion, see https://github.com/vikejs/vike/discussions/1330#discussioncomment-7787238
@@ -106,12 +106,16 @@ function handleHotUpdate(ctx, config) {
106
106
  }
107
107
  }
108
108
  }
109
- function isVikeConfigDependency(filePathAbsoluteFilesystem, moduleGraph) {
109
+ async function isVikeConfigDependency(filePathAbsoluteFilesystem, moduleGraph) {
110
110
  // Check config-only files, for example all pages/+config.js dependencies. (There aren't part of Vite's module graph.)
111
111
  (0, utils_js_1.assertPosixPath)(filePathAbsoluteFilesystem);
112
- getVikeConfig_js_1.vikeConfigDependencies.forEach((f) => (0, utils_js_1.assertPosixPath)(f));
113
- if (getVikeConfig_js_1.vikeConfigDependencies.has(filePathAbsoluteFilesystem))
114
- return { modifiesVikeVirtualFiles: true };
112
+ const vikeConfigObject = await (0, getVikeConfig_js_1.getVikeConfigOptional)();
113
+ if (vikeConfigObject) {
114
+ const { vikeConfigDependencies } = vikeConfigObject;
115
+ vikeConfigDependencies.forEach((f) => (0, utils_js_1.assertPosixPath)(f));
116
+ if (vikeConfigDependencies.has(filePathAbsoluteFilesystem))
117
+ return { modifiesVikeVirtualFiles: true };
118
+ }
115
119
  // Check using Vite's module graph, for example all +htmlAttributes dependencies.
116
120
  // Alternatively, simply call updateUserFiles() on every handleHotUpdate() call.
117
121
  const importers = getImporters(filePathAbsoluteFilesystem, moduleGraph);
@@ -98,7 +98,7 @@ const configDefinitionsBuiltIn = {
98
98
  (0, utils_js_1.assert)(source.valueIsLoaded);
99
99
  if (source.value !== null) {
100
100
  const { value } = source;
101
- const definedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', 'clientHooks', source.definedAtFilePath);
101
+ const definedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', 'clientHooks', source.definedAt);
102
102
  (0, utils_js_1.assertUsage)(typeof value === 'boolean', `${definedAt} should be a boolean`);
103
103
  return value;
104
104
  }
@@ -133,6 +133,10 @@ const configDefinitionsBuiltIn = {
133
133
  env: { config: true },
134
134
  global: true
135
135
  },
136
+ mode: {
137
+ env: { config: true },
138
+ global: true
139
+ },
136
140
  injectScriptsAt: {
137
141
  env: { server: true }
138
142
  },
@@ -14,7 +14,6 @@ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
14
14
  const import_1 = require("@brillout/import");
15
15
  const utils_js_1 = require("../../../../utils.js");
16
16
  const transformPointerImports_js_1 = require("./transformPointerImports.js");
17
- const getVikeConfig_js_1 = require("../getVikeConfig.js");
18
17
  const source_map_support_1 = __importDefault(require("source-map-support"));
19
18
  const getFilePath_js_1 = require("../../../../shared/getFilePath.js");
20
19
  const module_1 = require("module");
@@ -31,11 +30,11 @@ async function transpileAndExecuteFile(filePath, userRootDir, isExtensionConfig,
31
30
  const { filePathAbsoluteFilesystem, filePathToShowToUserResolved } = filePath;
32
31
  (0, utils_js_1.assert)(filePathAbsoluteFilesystem);
33
32
  const fileExtension = getFileExtension(filePathAbsoluteFilesystem);
34
- if (esbuildCache[filePathAbsoluteFilesystem]) {
35
- return await esbuildCache[filePathAbsoluteFilesystem];
33
+ if (esbuildCache.transpileCache[filePathAbsoluteFilesystem]) {
34
+ return await esbuildCache.transpileCache[filePathAbsoluteFilesystem];
36
35
  }
37
36
  const { promise, resolve } = (0, utils_js_1.genPromise)();
38
- esbuildCache[filePathAbsoluteFilesystem] = promise;
37
+ esbuildCache.transpileCache[filePathAbsoluteFilesystem] = promise;
39
38
  (0, utils_js_1.assertUsage)((0, utils_js_1.isPlainJavaScriptFile)(filePathAbsoluteFilesystem), `${filePathToShowToUserResolved} has file extension .${fileExtension} but a config file can only be a JavaScript/TypeScript file`);
40
39
  const isHeader = isHeaderFile(filePathAbsoluteFilesystem);
41
40
  if (isHeader) {
@@ -48,20 +47,20 @@ async function transpileAndExecuteFile(filePath, userRootDir, isExtensionConfig,
48
47
  }
49
48
  else {
50
49
  const transformImports = isHeader ? 'all' : true;
51
- const code = await transpileFile(filePath, transformImports, userRootDir);
50
+ const code = await transpileFile(filePath, transformImports, userRootDir, esbuildCache);
52
51
  fileExports = await executeTranspiledFile(filePath, code);
53
52
  }
54
53
  resolve({ fileExports });
55
54
  return { fileExports };
56
55
  }
57
- async function transpileFile(filePath, transformImports, userRootDir) {
56
+ async function transpileFile(filePath, transformImports, userRootDir, esbuildCache) {
58
57
  const { filePathAbsoluteFilesystem, filePathToShowToUserResolved } = filePath;
59
58
  (0, utils_js_1.assert)(filePathAbsoluteFilesystem);
60
59
  (0, utils_js_1.assertPosixPath)(filePathAbsoluteFilesystem);
61
- getVikeConfig_js_1.vikeConfigDependencies.add(filePathAbsoluteFilesystem);
60
+ esbuildCache.vikeConfigDependencies.add(filePathAbsoluteFilesystem);
62
61
  if (debug.isActivated)
63
62
  debug('transpile', filePathToShowToUserResolved);
64
- let { code, pointerImports } = await transpileWithEsbuild(filePath, userRootDir, transformImports);
63
+ let { code, pointerImports } = await transpileWithEsbuild(filePath, userRootDir, transformImports, esbuildCache);
65
64
  if (debug.isActivated)
66
65
  debug(`code, post esbuild (${filePathToShowToUserResolved})`, code);
67
66
  let isImportTransformed = false;
@@ -80,7 +79,7 @@ async function transpileFile(filePath, transformImports, userRootDir) {
80
79
  }
81
80
  return code;
82
81
  }
83
- async function transpileWithEsbuild(filePath, userRootDir, transformImports) {
82
+ async function transpileWithEsbuild(filePath, userRootDir, transformImports, esbuildCache) {
84
83
  const entryFilePath = filePath.filePathAbsoluteFilesystem;
85
84
  const entryFileDir = path_1.default.posix.dirname(entryFilePath);
86
85
  const options = {
@@ -234,7 +233,7 @@ async function transpileWithEsbuild(filePath, userRootDir, transformImports) {
234
233
  // We collect the dependency `args.path` in case the bulid fails (upon build error => error is thrown => no metafile)
235
234
  let { path } = args;
236
235
  path = (0, utils_js_1.toPosixPath)(path);
237
- getVikeConfig_js_1.vikeConfigDependencies.add(path);
236
+ esbuildCache.vikeConfigDependencies.add(path);
238
237
  return undefined;
239
238
  });
240
239
  /* To exhaustively collect all dependencies upon build failure, we would also need to use onResolve().
@@ -263,7 +262,7 @@ async function transpileWithEsbuild(filePath, userRootDir, transformImports) {
263
262
  filePathRelative = (0, utils_js_1.toPosixPath)(filePathRelative);
264
263
  (0, utils_js_1.assertPosixPath)(userRootDir);
265
264
  const filePathAbsoluteFilesystem = path_1.default.posix.join(userRootDir, filePathRelative);
266
- getVikeConfig_js_1.vikeConfigDependencies.add(filePathAbsoluteFilesystem);
265
+ esbuildCache.vikeConfigDependencies.add(filePathAbsoluteFilesystem);
267
266
  });
268
267
  const code = result.outputFiles[0].text;
269
268
  (0, utils_js_1.assert)(typeof code === 'string');
@@ -335,7 +334,7 @@ function getTemporaryBuildFilePath(filePathAbsoluteFilesystem) {
335
334
  const dirname = path_1.default.posix.dirname(filePathAbsoluteFilesystem);
336
335
  const filename = path_1.default.posix.basename(filePathAbsoluteFilesystem);
337
336
  // Syntax with semicolon `build:${/*...*/}` doesn't work on Windows: https://github.com/vikejs/vike/issues/800#issuecomment-1517329455
338
- const filePathTmp = path_1.default.posix.join(dirname, `${filename}.build-${(0, utils_js_1.getRandomId)(12)}.mjs`);
337
+ const filePathTmp = path_1.default.posix.join(dirname, `${filename}.build-${(0, utils_js_1.getRandomId)()}.mjs`);
339
338
  (0, utils_js_1.assert)(isTemporaryBuildFile(filePathTmp));
340
339
  return filePathTmp;
341
340
  }
@@ -3,13 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.vikeConfigDependencies = void 0;
7
6
  exports.getVikeConfig = getVikeConfig;
7
+ exports.getVikeConfigOptional = getVikeConfigOptional;
8
8
  exports.getVikeConfig2 = getVikeConfig2;
9
9
  exports.reloadVikeConfig = reloadVikeConfig;
10
10
  exports.isV1Design = isV1Design;
11
11
  exports.getConfVal = getConfVal;
12
12
  exports.getConfigDefinitionOptional = getConfigDefinitionOptional;
13
+ exports.getVikeConfigFromCliOrEnv = getVikeConfigFromCliOrEnv;
13
14
  exports.isOverriden = isOverriden;
14
15
  const utils_js_1 = require("../../../utils.js");
15
16
  const configDefinitionsBuiltIn_js_1 = require("./getVikeConfig/configDefinitionsBuiltIn.js");
@@ -32,17 +33,14 @@ const getEnvVarObject_js_1 = require("../../../shared/getEnvVarObject.js");
32
33
  const context_js_1 = require("../../../../api/context.js");
33
34
  const context_js_2 = require("../../../../cli/context.js");
34
35
  (0, utils_js_1.assertIsNotProductionRuntime)();
36
+ (0, utils_js_1.assertIsSingleModuleInstance)('v1-design/getVikeConfig.ts');
35
37
  let restartVite = false;
36
38
  let wasConfigInvalid = null;
37
39
  let vikeConfigPromise = null;
38
- const vikeConfigDependencies = new Set();
39
- exports.vikeConfigDependencies = vikeConfigDependencies;
40
40
  function reloadVikeConfig(config) {
41
41
  const userRootDir = config.root;
42
42
  const vikeVitePluginOptions = config._vikeVitePluginOptions;
43
43
  (0, utils_js_1.assert)(vikeVitePluginOptions);
44
- // TODO/now: unify with esbuildCache
45
- vikeConfigDependencies.clear();
46
44
  vikeConfigPromise = loadVikeConfig_withErrorHandling(userRootDir, true, vikeVitePluginOptions);
47
45
  handleReloadSideEffects();
48
46
  }
@@ -96,6 +94,11 @@ async function getVikeConfigEntry(userRootDir, isDev, vikeVitePluginOptions, doN
96
94
  }
97
95
  return await vikeConfigPromise;
98
96
  }
97
+ async function getVikeConfigOptional() {
98
+ if (!vikeConfigPromise)
99
+ return null;
100
+ return await vikeConfigPromise;
101
+ }
99
102
  function isV1Design(config) {
100
103
  const vikeConfig = config._vikeConfigObject;
101
104
  (0, utils_js_1.assert)(vikeConfig);
@@ -140,22 +143,24 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
140
143
  configValueSources: {}
141
144
  },
142
145
  global: (0, getPageConfigUserFriendly_js_1.getPageConfigGlobalUserFriendly)({ pageConfigGlobalValues: {} }),
143
- pages: {}
146
+ pages: {},
147
+ vikeConfigDependencies: new Set()
144
148
  };
145
149
  return dummyData;
146
150
  }
147
151
  }
148
152
  }
149
153
  async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
150
- const esbuildCache = {};
154
+ const esbuildCache = {
155
+ transpileCache: {},
156
+ vikeConfigDependencies: new Set()
157
+ };
151
158
  const plusFilesAll = await (0, getPlusFilesAll_js_1.getPlusFilesAll)(userRootDir, esbuildCache);
152
159
  const configDefinitionsResolved = await resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache);
153
- assertKnownConfigs(configDefinitionsResolved, plusFilesAll);
154
160
  const { pageConfigGlobal, pageConfigs } = getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRootDir);
155
161
  // Backwards compatibility for vike(options) in vite.config.js
156
162
  temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir);
157
- // TODO/now: add validation
158
- setCliAndApiOptions(pageConfigGlobal);
163
+ setCliAndApiOptions(pageConfigGlobal, configDefinitionsResolved);
159
164
  // global
160
165
  const pageConfigGlobalValues = getConfigValues(pageConfigGlobal);
161
166
  const global = (0, getPageConfigUserFriendly_js_1.getPageConfigGlobalUserFriendly)({ pageConfigGlobalValues });
@@ -164,7 +169,7 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
164
169
  const pageConfigValues = getConfigValues(pageConfig, true);
165
170
  return (0, getPageConfigUserFriendly_js_1.getPageConfigUserFriendly)(pageConfigGlobalValues, pageConfig, pageConfigValues);
166
171
  }));
167
- return { pageConfigs, pageConfigGlobal, global, pages };
172
+ return { pageConfigs, pageConfigGlobal, global, pages, vikeConfigDependencies: esbuildCache.vikeConfigDependencies };
168
173
  }
169
174
  async function resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache) {
170
175
  const plusFilesAllOrdered = Object.values(plusFilesAll)
@@ -174,6 +179,10 @@ async function resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache)
174
179
  // We use `plusFilesAll` in order to allow local Vike extensions to create global configs, and to set the value of global configs such as `+vite` (enabling Vike extensions to add Vite plugins).
175
180
  plusFilesAllOrdered, (configDef) => !!configDef.global);
176
181
  await loadCustomConfigBuildTimeFiles(plusFilesAll, configDefinitionsGlobal, userRootDir, esbuildCache);
182
+ const configDefinitionsAll = getConfigDefinitions(Object.values(plusFilesAll).flat());
183
+ const configNamesKnownAll = Object.keys(configDefinitionsAll);
184
+ const configNamesKnownGlobal = Object.keys(configDefinitionsGlobal);
185
+ (0, utils_js_1.assert)(configNamesKnownGlobal.every((configName) => configNamesKnownAll.includes(configName)));
177
186
  const configDefinitionsLocal = {};
178
187
  await Promise.all((0, utils_js_1.objectEntries)(plusFilesAll).map(async ([locationIdPage, plusFiles]) => {
179
188
  const plusFilesRelevant = (0, utils_js_1.objectEntries)(plusFilesAll)
@@ -183,12 +192,23 @@ async function resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache)
183
192
  .sort((plusFile1, plusFile2) => sortAfterInheritanceOrderPage(plusFile1, plusFile2, locationIdPage, null));
184
193
  const configDefinitions = getConfigDefinitions(plusFilesRelevant, (configDef) => configDef.global !== true);
185
194
  await loadCustomConfigBuildTimeFiles(plusFiles, configDefinitions, userRootDir, esbuildCache);
186
- configDefinitionsLocal[locationIdPage] = { configDefinitions, plusFiles, plusFilesRelevant };
195
+ const configNamesKnownLocal = (0, utils_js_1.unique)([...Object.keys(configDefinitions), ...configNamesKnownGlobal]);
196
+ (0, utils_js_1.assert)(configNamesKnownLocal.every((configName) => configNamesKnownAll.includes(configName)));
197
+ configDefinitionsLocal[locationIdPage] = {
198
+ configDefinitions,
199
+ plusFiles,
200
+ plusFilesRelevant,
201
+ configNamesKnownLocal
202
+ };
187
203
  }));
188
204
  const configDefinitionsResolved = {
189
205
  configDefinitionsGlobal,
190
- configDefinitionsLocal
206
+ configDefinitionsLocal,
207
+ configDefinitionsAll,
208
+ configNamesKnownAll,
209
+ configNamesKnownGlobal
191
210
  };
211
+ assertKnownConfigs(configDefinitionsResolved);
192
212
  return configDefinitionsResolved;
193
213
  }
194
214
  // Load value files (with `env.config===true`) of *custom* configs.
@@ -291,7 +311,7 @@ function assertGlobalConfigLocation(configName, sources, plusFilesAll, configDef
291
311
  : 'to a value that is global';
292
312
  const what = isConditionallyGlobal ? 'global values' : picocolors_1.default.cyan(configName);
293
313
  const errEnd = configFilePathsGlobal.length > 0
294
- ? `define ${what} at a global config file such as ${(0, utils_js_1.joinEnglish)(configFilePathsGlobal, 'or')} instead`
314
+ ? `define ${what} at a global config file such as ${(0, utils_js_1.joinEnglish)(configFilePathsGlobal.map(picocolors_1.default.bold), 'or')} instead`
295
315
  : `create a global config file (e.g. /pages/+config.js) and define ${what} there instead`;
296
316
  // When updating this error message => also update error message at https://vike.dev/warning/global-config
297
317
  const errMsg = `${errBeg} ${errMid}: ${errEnd} (https://vike.dev/warning/global-config).`;
@@ -360,56 +380,55 @@ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, use
360
380
  (0, utils_js_1.assertWarning)(Object.keys(vikeVitePluginOptions).length === 0, `Define Vike settings in +config.js instead of vite.config.js ${picocolors_1.default.underline('https://vike.dev/migration/settings')}`, { onlyOnce: true });
361
381
  Object.entries(vikeVitePluginOptions).forEach(([configName, value]) => {
362
382
  var _a;
363
- (0, utils_js_1.assert)((0, utils_js_1.includes)((0, utils_js_1.objectKeys)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn), configName));
364
- const configDef = configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn[configName];
365
383
  const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
366
- // TODO/now: use getSourceNonConfigFile()
367
- sources.push({
368
- valueIsLoaded: true,
369
- value,
370
- configEnv: configDef.env,
371
- definedAtFilePath: {
372
- ...(0, getFilePath_js_1.getFilePathResolved)({
373
- userRootDir,
374
- filePathAbsoluteUserRootDir: '/vite.config.js'
375
- }),
376
- fileExportPathToShowToUser: null
377
- },
378
- locationId: '/',
379
- plusFile: null,
380
- valueIsLoadedWithImport: false,
381
- valueIsDefinedByPlusValueFile: false
382
- });
384
+ sources.push(getSourceNonConfigFile(configName, value, {
385
+ ...(0, getFilePath_js_1.getFilePathResolved)({
386
+ userRootDir,
387
+ filePathAbsoluteUserRootDir: '/vite.config.js'
388
+ }),
389
+ fileExportPathToShowToUser: null
390
+ }));
383
391
  });
384
392
  }
385
- function setCliAndApiOptions(pageConfigGlobal) {
386
- // VIKE_CONFIG
387
- const configFromEnv = (0, getEnvVarObject_js_1.getEnvVarObject)('VIKE_CONFIG');
388
- if (configFromEnv) {
389
- add(configFromEnv, { definedBy: 'env' });
390
- }
391
- // Vike API — passed options
393
+ function setCliAndApiOptions(pageConfigGlobal, configDefinitionsResolved) {
394
+ // Vike API — passed options [lowest precedence]
392
395
  const apiOperation = (0, context_js_1.getApiOperation)();
393
396
  if (apiOperation?.options.vikeConfig) {
394
- add(apiOperation.options.vikeConfig, {
395
- definedBy: 'api',
396
- operation: apiOperation.operation
397
- });
397
+ addSources(apiOperation.options.vikeConfig, { definedBy: 'api', operation: apiOperation.operation }, false);
398
398
  }
399
+ const { configFromCliOptions, configFromEnvVar } = getVikeConfigFromCliOrEnv();
399
400
  // Vike CLI options
400
- const cliOptions = (0, context_js_2.getCliOptions)();
401
- if (cliOptions) {
402
- add(cliOptions, { definedBy: 'cli' });
401
+ if (configFromCliOptions) {
402
+ addSources(configFromCliOptions, { definedBy: 'cli' }, true);
403
+ }
404
+ // VIKE_CONFIG [highest precedence]
405
+ if (configFromEnvVar) {
406
+ addSources(configFromEnvVar, { definedBy: 'env' }, false);
403
407
  }
404
408
  return;
405
- function add(configValues, definedBy) {
409
+ function addSources(configValues, definedBy, exitOnError) {
406
410
  Object.entries(configValues).forEach(([configName, value]) => {
407
411
  var _a;
412
+ const sourceName = `The ${(0, getConfigDefinedAt_js_1.getDefinedByString)(definedBy, configName)}`;
413
+ assertKnownConfig(configName, configDefinitionsResolved.configNamesKnownGlobal, configDefinitionsResolved, '/', sourceName, exitOnError);
408
414
  const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
409
415
  sources.unshift(getSourceNonConfigFile(configName, value, definedBy));
410
416
  });
411
417
  }
412
418
  }
419
+ function getVikeConfigFromCliOrEnv() {
420
+ const configFromCliOptions = (0, context_js_2.getCliOptions)();
421
+ const configFromEnvVar = (0, getEnvVarObject_js_1.getEnvVarObject)('VIKE_CONFIG');
422
+ const vikeConfigFromCliOrEnv = {
423
+ ...configFromCliOptions, // Lower precedence
424
+ ...configFromEnvVar // Higher precedence
425
+ };
426
+ return {
427
+ vikeConfigFromCliOrEnv,
428
+ configFromCliOptions,
429
+ configFromEnvVar
430
+ };
431
+ }
413
432
  function getSourceNonConfigFile(configName, value, definedAt) {
414
433
  (0, utils_js_1.assert)((0, utils_js_1.includes)((0, utils_js_1.objectKeys)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn), configName));
415
434
  const configDef = configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn[configName];
@@ -417,7 +436,7 @@ function getSourceNonConfigFile(configName, value, definedAt) {
417
436
  valueIsLoaded: true,
418
437
  value,
419
438
  configEnv: configDef.env,
420
- definedAtFilePath: definedAt,
439
+ definedAt,
421
440
  locationId: '/',
422
441
  plusFile: null,
423
442
  valueIsLoadedWithImport: false,
@@ -533,7 +552,7 @@ function resolveConfigValueSources(configName, configDef, plusFilesRelevant, use
533
552
  return sources;
534
553
  }
535
554
  function isDefiningConfig(plusFile, configName) {
536
- return getDefiningConfigNames(plusFile).includes(configName);
555
+ return getConfigNamesSetByPlusFile(plusFile).includes(configName);
537
556
  }
538
557
  function getConfigValueSource(configName, plusFile, configDef, userRootDir) {
539
558
  const confVal = getConfVal(plusFile, configName);
@@ -576,7 +595,7 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir) {
576
595
  configEnv: configDef.env,
577
596
  valueIsLoadedWithImport: false,
578
597
  valueIsDefinedByPlusValueFile: false,
579
- definedAtFilePath
598
+ definedAt: definedAtFilePath
580
599
  };
581
600
  return configValueSource;
582
601
  }
@@ -600,7 +619,7 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir) {
600
619
  configEnv: resolveConfigEnv(configDef.env, pointerImport.fileExportPath),
601
620
  valueIsLoadedWithImport: true,
602
621
  valueIsDefinedByPlusValueFile: false,
603
- definedAtFilePath: pointerImport.fileExportPath
622
+ definedAt: pointerImport.fileExportPath
604
623
  };
605
624
  return configValueSource;
606
625
  }
@@ -612,7 +631,7 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir) {
612
631
  configEnv: configDef.env,
613
632
  valueIsLoadedWithImport: false,
614
633
  valueIsDefinedByPlusValueFile: false,
615
- definedAtFilePath: definedAtFilePath_
634
+ definedAt: definedAtFilePath_
616
635
  };
617
636
  return configValueSource;
618
637
  }
@@ -626,7 +645,7 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir) {
626
645
  configEnv: configEnvResolved,
627
646
  valueIsLoadedWithImport: !confVal.valueIsLoaded || !(0, serializeConfigValues_js_1.isJsonValue)(confVal.value),
628
647
  valueIsDefinedByPlusValueFile: true,
629
- definedAtFilePath: {
648
+ definedAt: {
630
649
  ...plusFile.filePath,
631
650
  fileExportPathToShowToUser: configName === plusFile.configName
632
651
  ? []
@@ -640,7 +659,7 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir) {
640
659
  }
641
660
  function isDefiningPage(plusFiles) {
642
661
  for (const plusFile of plusFiles) {
643
- const configNames = getDefiningConfigNames(plusFile);
662
+ const configNames = getConfigNamesSetByPlusFile(plusFile);
644
663
  if (configNames.some((configName) => isDefiningPageConfig(configName))) {
645
664
  return true;
646
665
  }
@@ -662,7 +681,7 @@ function resolveIsGlobalValue(configDefGlobal, source, plusFilesAll) {
662
681
  (0, utils_js_1.assert)(typeof isGlobal === 'boolean');
663
682
  return isGlobal;
664
683
  }
665
- function getDefiningConfigNames(plusFile) {
684
+ function getConfigNamesSetByPlusFile(plusFile) {
666
685
  let configNames = [];
667
686
  if (!plusFile.isConfigFile) {
668
687
  configNames.push(plusFile.configName);
@@ -782,7 +801,7 @@ function runEffect(configName, configDef, source) {
782
801
  // Call effect
783
802
  const configModFromEffect = configDef.effect({
784
803
  configValue: source.value,
785
- configDefinedAt: (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, source.definedAtFilePath)
804
+ configDefinedAt: (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, source.definedAt)
786
805
  });
787
806
  if (!configModFromEffect)
788
807
  return null;
@@ -796,7 +815,7 @@ function applyEffectConfVal(configModFromEffect, sourceEffect, configValueSource
796
815
  (0, utils_js_1.assert)(configDef);
797
816
  (0, utils_js_1.assert)(configDefEffect._userEffectDefinedAtFilePath);
798
817
  const configValueSource = {
799
- definedAtFilePath: configDefEffect._userEffectDefinedAtFilePath,
818
+ definedAt: configDefEffect._userEffectDefinedAtFilePath,
800
819
  plusFile: sourceEffect.plusFile,
801
820
  locationId: sourceEffect.locationId,
802
821
  configEnv: configDef.env,
@@ -859,33 +878,30 @@ function getComputed(configValueSources, configDefinitions) {
859
878
  return configValuesComputed;
860
879
  }
861
880
  // Show error message upon unknown config
862
- function assertKnownConfigs(configDefinitionsResolved, plusFilesAll) {
863
- const configDefinitionsAll = getConfigDefinitions(Object.values(plusFilesAll).flat());
864
- const configNamesKnownAll = Object.keys(configDefinitionsAll);
865
- const configNamesGlobal = Object.keys(configDefinitionsResolved.configDefinitionsGlobal);
866
- (0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsLocal).forEach(([_locationId, { configDefinitions, plusFiles }]) => {
867
- const configDefinitionsLocal = configDefinitions;
868
- const configNamesKnownLocal = [...Object.keys(configDefinitionsLocal), ...configNamesGlobal];
881
+ function assertKnownConfigs(configDefinitionsResolved) {
882
+ (0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsLocal).forEach(([_locationId, { configNamesKnownLocal, plusFiles }]) => {
869
883
  plusFiles.forEach((plusFile) => {
870
- const configNames = getDefiningConfigNames(plusFile);
884
+ const configNames = getConfigNamesSetByPlusFile(plusFile);
871
885
  configNames.forEach((configName) => {
872
- assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal, plusFile);
873
- (0, utils_js_1.assert)(configNamesKnownLocal.includes(configName));
874
- (0, utils_js_1.assert)(configNamesKnownAll.includes(configName));
886
+ const { locationId } = plusFile;
887
+ const sourceName = plusFile.filePath.filePathToShowToUser;
888
+ assertKnownConfig(configName, configNamesKnownLocal, configDefinitionsResolved, locationId, sourceName, false);
875
889
  });
876
890
  });
877
891
  });
878
892
  }
879
- function assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal, plusFile) {
880
- if (configNamesKnownLocal.includes(configName))
893
+ function assertKnownConfig(configName, configNamesKnownRelevant, configDefinitionsResolved, locationId, sourceName, exitOnError) {
894
+ const { configNamesKnownAll } = configDefinitionsResolved;
895
+ if (configNamesKnownRelevant.includes(configName)) {
896
+ (0, utils_js_1.assert)(configNamesKnownAll.includes(configName));
881
897
  return;
898
+ }
882
899
  const configNameColored = picocolors_1.default.cyan(configName);
883
- const { locationId, filePath: { filePathToShowToUser } } = plusFile;
884
- const errMsg = `${filePathToShowToUser} sets an unknown config ${configNameColored}`;
885
900
  // Inheritance issue: config is known but isn't defined at `locationId`
886
901
  if (configNamesKnownAll.includes(configName)) {
887
- (0, utils_js_1.assertUsage)(false, `${filePathToShowToUser} sets the value of the config ${configNameColored} which is a custom config that is defined with ${picocolors_1.default.underline('https://vike.dev/meta')} at a path that doesn't apply to ${locationId} — see ${picocolors_1.default.underline('https://vike.dev/config#inheritance')}`);
902
+ (0, utils_js_1.assertUsage)(false, `${sourceName} sets the value of the config ${configNameColored} which is a custom config that is defined with ${picocolors_1.default.underline('https://vike.dev/meta')} at a path that doesn't apply to ${locationId} — see ${picocolors_1.default.underline('https://vike.dev/config#inheritance')}`, { exitOnError });
888
903
  }
904
+ const errMsg = `${sourceName} sets an unknown config ${configNameColored}`;
889
905
  // Missing vike-{react,vue,solid} installation
890
906
  {
891
907
  const ui = ['vike-react', 'vike-vue', 'vike-solid'];
@@ -901,11 +917,9 @@ function assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLoca
901
917
  Wrapper: ui
902
918
  };
903
919
  if (configName in knownVikeExntensionConfigs) {
904
- const requiredVikeExtension = knownVikeExntensionConfigs[configName]
905
- .map((e) => picocolors_1.default.bold(e))
906
- .join('/');
920
+ const requiredVikeExtension = (0, utils_js_1.joinEnglish)(knownVikeExntensionConfigs[configName].map((e) => picocolors_1.default.bold(e)), 'or');
907
921
  const errMsgEnhanced = `${errMsg}. If you want to use the configuration ${configNameColored} documented at ${picocolors_1.default.underline(`https://vike.dev/${configName}`)} then make sure to install ${requiredVikeExtension}. (Alternatively, you can define ${configNameColored} yourself by using ${picocolors_1.default.cyan('meta')}, see ${picocolors_1.default.underline('https://vike.dev/meta')} for more information.)`;
908
- (0, utils_js_1.assertUsage)(false, errMsgEnhanced);
922
+ (0, utils_js_1.assertUsage)(false, errMsgEnhanced, { exitOnError });
909
923
  }
910
924
  }
911
925
  // Similarity hint
@@ -922,9 +936,9 @@ function assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLoca
922
936
  if (configName === 'page') {
923
937
  errMsgEnhanced += ` (The name of the config ${picocolors_1.default.cyan('Page')} starts with a capital letter ${picocolors_1.default.cyan('P')} because it defines a UI component: a ubiquitous JavaScript convention is that the name of UI components start with a capital letter.)`;
924
938
  }
925
- (0, utils_js_1.assertUsage)(false, errMsgEnhanced);
939
+ (0, utils_js_1.assertUsage)(false, errMsgEnhanced, { exitOnError });
926
940
  }
927
- (0, utils_js_1.assertUsage)(false, errMsg);
941
+ (0, utils_js_1.assertUsage)(false, errMsg, { exitOnError });
928
942
  }
929
943
  function determineRouteFilesystem(locationId, configValueSources) {
930
944
  const configName = 'filesystemRoutingRoot';
@@ -956,12 +970,12 @@ function getFilesystemRoutingRootEffect(configFilesystemRoutingRoot, configName)
956
970
  // Eagerly loaded since it's config-only
957
971
  (0, utils_js_1.assert)(configFilesystemRoutingRoot.valueIsLoaded);
958
972
  const { value } = configFilesystemRoutingRoot;
959
- const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, configFilesystemRoutingRoot.definedAtFilePath);
973
+ const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, configFilesystemRoutingRoot.definedAt);
960
974
  (0, utils_js_1.assertUsage)(typeof value === 'string', `${configDefinedAt} should be a string`);
961
975
  (0, utils_js_1.assertUsage)(value.startsWith('/'), `${configDefinedAt} is ${picocolors_1.default.cyan(value)} but it should start with a leading slash ${picocolors_1.default.cyan('/')}`);
962
- const { definedAtFilePath } = configFilesystemRoutingRoot;
963
- (0, utils_js_1.assert)(!definedAtFilePath.definedBy);
964
- const { filePathAbsoluteUserRootDir } = definedAtFilePath;
976
+ const { definedAt } = configFilesystemRoutingRoot;
977
+ (0, utils_js_1.assert)(!definedAt.definedBy);
978
+ const { filePathAbsoluteUserRootDir } = definedAt;
965
979
  (0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
966
980
  const before = (0, filesystemRouting_js_1.getFilesystemRouteString)((0, filesystemRouting_js_1.getLocationId)(filePathAbsoluteUserRootDir));
967
981
  const after = value;
@@ -1012,7 +1026,7 @@ function getConfigDefinitionOptional(configDefinitions, configName) {
1012
1026
  return configDefinitions[configName] ?? null;
1013
1027
  }
1014
1028
  function getConfVal(plusFile, configName) {
1015
- const configNames = getDefiningConfigNames(plusFile);
1029
+ const configNames = getConfigNamesSetByPlusFile(plusFile);
1016
1030
  if (!configNames.includes(configName))
1017
1031
  return null;
1018
1032
  if (plusFile.isNotLoaded)
@@ -4,14 +4,22 @@ exports.setGlobalContext = setGlobalContext;
4
4
  const globalContext_js_1 = require("../../runtime/globalContext.js");
5
5
  const utils_js_1 = require("../utils.js");
6
6
  const getOutDirs_js_1 = require("../shared/getOutDirs.js");
7
+ const getVikeConfig_js_1 = require("./importUserCode/v1-design/getVikeConfig.js");
7
8
  function setGlobalContext() {
9
+ let isServerReload = false;
10
+ let config;
8
11
  return [
9
12
  {
10
13
  name: 'vike:setGlobalContext:pre',
11
14
  enforce: 'pre',
15
+ // This hook is called not only at server start but also at server restart (a new `viteDevServer` instance is created)
12
16
  configureServer: {
13
17
  order: 'pre',
14
18
  handler(viteDevServer) {
19
+ (0, utils_js_1.assert)(config);
20
+ if (isServerReload)
21
+ (0, getVikeConfig_js_1.reloadVikeConfig)(config);
22
+ isServerReload = true;
15
23
  (0, globalContext_js_1.setGlobalContext_viteDevServer)(viteDevServer);
16
24
  (0, utils_js_1.markSetup_viteDevServer)();
17
25
  }
@@ -33,7 +41,8 @@ function setGlobalContext() {
33
41
  enforce: 'post',
34
42
  configResolved: {
35
43
  order: 'post',
36
- async handler(config) {
44
+ async handler(config_) {
45
+ config = config_;
37
46
  const { outDirRoot } = (0, getOutDirs_js_1.getOutDirs)(config);
38
47
  (0, utils_js_1.assertFilePathAbsoluteFilesystem)(outDirRoot); // Needed for `importServerProductionEntry({ outDir })` of @brillout/vite-plugin-server-entry
39
48
  (0, globalContext_js_1.setGlobalContext_viteConfig)(config, outDirRoot);
@@ -23,8 +23,15 @@ function parseJson5(valueStr, what) {
23
23
  value = json5_1.default.parse(valueStr);
24
24
  }
25
25
  catch (err) {
26
+ if (isNotJavaScriptLike(valueStr)) {
27
+ // Interpret as string
28
+ return valueStr;
29
+ }
26
30
  console.error(err);
27
31
  (0, utils_js_1.assertUsage)(false, `Cannot parse ${picocolors_1.default.cyan(what)} (see error above) because it's set to the following which isn't a valid JSON5 string: ${picocolors_1.default.bold(valueStr)}`);
28
32
  }
29
33
  return value;
30
34
  }
35
+ function isNotJavaScriptLike(valueStr) {
36
+ return ![':', ',', '{', '}', '(', ')'].some((c) => valueStr.includes(c));
37
+ }
@@ -17,8 +17,8 @@ function resolvePrerenderConfigGlobal(vikeConfig) {
17
17
  };
18
18
  let defaultLocalValue = false;
19
19
  {
20
- const valueFirst = prerenderConfigs.filter((p) => !(0, utils_js_1.isObject)(p) || p.value !== null)[0];
21
- if (valueFirst === true || ((0, utils_js_1.isObject)(valueFirst) && (valueFirst.value ?? defaultValueForObject))) {
20
+ const valueFirst = prerenderConfigs.filter((p) => !(0, utils_js_1.isObject)(p) || p.enable !== null)[0];
21
+ if (valueFirst === true || ((0, utils_js_1.isObject)(valueFirst) && (valueFirst.enable ?? defaultValueForObject))) {
22
22
  defaultLocalValue = true;
23
23
  }
24
24
  }
@@ -49,7 +49,7 @@ function resolvePrerenderConfigLocal(pageConfig) {
49
49
  const values = configValue.value;
50
50
  (0, utils_js_1.assert)((0, utils_js_1.isArray)(values));
51
51
  const value = values[0];
52
- // TODO/now I believe this assert() can fail
52
+ // If it's set to an object in a local config then Vike considers it a global config and it's skipped from local inheritance, thus we can assume the value to be a boolean.
53
53
  (0, utils_js_1.assert)(typeof value === 'boolean');
54
54
  (0, utils_js_1.assert)((0, utils_js_1.isArray)(configValue.definedAtData));
55
55
  const prerenderConfigLocal = { value };