vike 0.4.224-commit-00ed9fe → 0.4.225

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 (90) hide show
  1. package/dist/cjs/node/api/build.js +1 -1
  2. package/dist/cjs/node/api/context.js +4 -4
  3. package/dist/cjs/node/api/dev.js +1 -1
  4. package/dist/cjs/node/api/prepareViteApiCall.js +3 -2
  5. package/dist/cjs/node/api/prerender.js +1 -1
  6. package/dist/cjs/node/api/preview.js +1 -1
  7. package/dist/cjs/node/cli/context.js +5 -4
  8. package/dist/cjs/node/cli/entry.js +3 -3
  9. package/dist/cjs/node/cli/parseCli.js +43 -15
  10. package/dist/cjs/node/cli/utils.js +1 -1
  11. package/dist/cjs/node/plugin/plugins/build/pluginBuildEntry.js +1 -1
  12. package/dist/cjs/node/plugin/plugins/commonConfig.js +15 -4
  13. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +2 -0
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +9 -1
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +75 -21
  16. package/dist/cjs/node/plugin/shared/getEnvVarObject.js +9 -8
  17. package/dist/cjs/node/plugin/shared/loggerNotProd/log.js +1 -1
  18. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +25 -17
  19. package/dist/cjs/node/prerender/runPrerender.js +2 -2
  20. package/dist/cjs/node/prerender/utils.js +1 -1
  21. package/dist/cjs/node/runtime/globalContext.js +9 -5
  22. package/dist/cjs/node/runtime/utils.js +0 -1
  23. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +10 -8
  24. package/dist/cjs/node/shared/assertV1Design.js +2 -1
  25. package/dist/cjs/node/shared/utils.js +0 -1
  26. package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +18 -2
  27. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +8 -5
  28. package/dist/cjs/shared/page-configs/helpers.js +1 -1
  29. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +2 -5
  30. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +6 -2
  31. package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
  32. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  33. package/dist/cjs/utils/assert.js +2 -2
  34. package/dist/cjs/utils/assertSingleInstance.js +11 -17
  35. package/dist/esm/node/api/build.js +1 -1
  36. package/dist/esm/node/api/context.d.ts +8 -2
  37. package/dist/esm/node/api/context.js +4 -4
  38. package/dist/esm/node/api/dev.js +1 -1
  39. package/dist/esm/node/api/prepareViteApiCall.d.ts +2 -2
  40. package/dist/esm/node/api/prepareViteApiCall.js +3 -2
  41. package/dist/esm/node/api/prerender.js +1 -1
  42. package/dist/esm/node/api/preview.js +1 -1
  43. package/dist/esm/node/api/types.d.ts +7 -0
  44. package/dist/esm/node/cli/context.d.ts +4 -2
  45. package/dist/esm/node/cli/context.js +5 -4
  46. package/dist/esm/node/cli/entry.js +4 -4
  47. package/dist/esm/node/cli/parseCli.d.ts +3 -0
  48. package/dist/esm/node/cli/parseCli.js +44 -16
  49. package/dist/esm/node/cli/utils.d.ts +1 -1
  50. package/dist/esm/node/cli/utils.js +1 -1
  51. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +2 -2
  52. package/dist/esm/node/plugin/plugins/commonConfig.js +15 -4
  53. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +2 -0
  54. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +3 -1
  55. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +9 -1
  56. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +75 -21
  57. package/dist/esm/node/plugin/shared/getEnvVarObject.d.ts +3 -1
  58. package/dist/esm/node/plugin/shared/getEnvVarObject.js +9 -8
  59. package/dist/esm/node/plugin/shared/loggerNotProd/log.js +2 -2
  60. package/dist/esm/node/prerender/resolvePrerenderConfig.js +26 -18
  61. package/dist/esm/node/prerender/runPrerender.js +3 -3
  62. package/dist/esm/node/prerender/utils.d.ts +1 -1
  63. package/dist/esm/node/prerender/utils.js +1 -1
  64. package/dist/esm/node/runtime/globalContext.js +10 -6
  65. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -3
  66. package/dist/esm/node/runtime/utils.d.ts +0 -1
  67. package/dist/esm/node/runtime/utils.js +0 -1
  68. package/dist/esm/node/runtime-dev/createDevMiddleware.js +10 -8
  69. package/dist/esm/node/shared/assertV1Design.js +2 -1
  70. package/dist/esm/node/shared/utils.d.ts +0 -1
  71. package/dist/esm/node/shared/utils.js +0 -1
  72. package/dist/esm/shared/page-configs/Config.d.ts +19 -1
  73. package/dist/esm/shared/page-configs/PageConfig.d.ts +16 -5
  74. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +3 -3
  75. package/dist/esm/shared/page-configs/getConfigDefinedAt.js +19 -3
  76. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +8 -5
  77. package/dist/esm/shared/page-configs/helpers.js +1 -1
  78. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +1 -1
  79. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +2 -5
  80. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +3 -3
  81. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +6 -2
  82. package/dist/esm/shared/route/loadPageRoutes.js +2 -2
  83. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  84. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  85. package/dist/esm/utils/assert.js +2 -2
  86. package/dist/esm/utils/assertSingleInstance.js +11 -17
  87. package/package.json +3 -3
  88. package/dist/cjs/utils/projectInfo.js +0 -8
  89. package/dist/esm/utils/projectInfo.d.ts +0 -4
  90. package/dist/esm/utils/projectInfo.js +0 -5
@@ -16,7 +16,7 @@ const utils_js_1 = require("./utils.js");
16
16
  * https://vike.dev/api#build
17
17
  */
18
18
  async function build(options = {}) {
19
- const { viteConfigEnhanced, vikeConfig } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options.viteConfig, 'build');
19
+ const { viteConfigEnhanced, vikeConfig } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options, 'build');
20
20
  // Pass it to pluginAutoFullBuild()
21
21
  if (viteConfigEnhanced)
22
22
  viteConfigEnhanced._viteConfigEnhanced = viteConfigEnhanced;
@@ -3,19 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isVikeCliOrApi = isVikeCliOrApi;
4
4
  exports.setContextApiOperation = setContextApiOperation;
5
5
  exports.clearContextApiOperation = clearContextApiOperation;
6
+ exports.getApiOperation = getApiOperation;
6
7
  const utils_js_1 = require("./utils.js");
7
8
  const globalObject = (0, utils_js_1.getGlobalObject)('api/context.ts', {});
8
9
  function getApiOperation() {
9
- (0, utils_js_1.assert)(globalObject.apiOperation);
10
- return globalObject.apiOperation;
10
+ return globalObject.apiOperation ?? null;
11
11
  }
12
12
  function isVikeCliOrApi() {
13
13
  // The CLI uses the API
14
14
  return !!globalObject.apiOperation;
15
15
  }
16
- function setContextApiOperation(operation) {
16
+ function setContextApiOperation(operation, options) {
17
17
  (0, utils_js_1.assert)(!globalObject.apiOperation);
18
- globalObject.apiOperation = operation;
18
+ globalObject.apiOperation = { operation, options };
19
19
  }
20
20
  function clearContextApiOperation() {
21
21
  globalObject.apiOperation = undefined;
@@ -9,7 +9,7 @@ const vite_1 = require("vite");
9
9
  * https://vike.dev/api#dev
10
10
  */
11
11
  async function dev(options = {}) {
12
- const { viteConfigEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options.viteConfig, 'dev');
12
+ const { viteConfigEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options, 'dev');
13
13
  const server = await (0, vite_1.createServer)(viteConfigEnhanced);
14
14
  return {
15
15
  viteServer: server,
@@ -48,9 +48,10 @@ const utils_js_1 = require("./utils.js");
48
48
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
49
49
  const globalContext_js_1 = require("../runtime/globalContext.js");
50
50
  const globalObject = (0, utils_js_1.getGlobalObject)('api/prepareViteApiCall.ts', {});
51
- async function prepareViteApiCall(viteConfigFromOptions, operation) {
51
+ async function prepareViteApiCall(options, operation) {
52
52
  clear();
53
- (0, context_js_1.setContextApiOperation)(operation);
53
+ (0, context_js_1.setContextApiOperation)(operation, options);
54
+ const viteConfigFromOptions = options.viteConfig;
54
55
  return enhanceViteConfig(viteConfigFromOptions, operation);
55
56
  }
56
57
  // For subsequent API calls, e.g. calling prerender() after build()
@@ -10,7 +10,7 @@ const prepareViteApiCall_js_1 = require("./prepareViteApiCall.js");
10
10
  * https://vike.dev/api#prerender
11
11
  */
12
12
  async function prerender(options = {}) {
13
- const { viteConfigEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options.viteConfig, 'prerender');
13
+ const { viteConfigEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options, 'prerender');
14
14
  options.viteConfig = viteConfigEnhanced;
15
15
  const { viteConfig } = await (0, runPrerender_js_1.runPrerenderFromAPI)(options);
16
16
  return {
@@ -9,7 +9,7 @@ const vite_1 = require("vite");
9
9
  * https://vike.dev/api#preview
10
10
  */
11
11
  async function preview(options = {}) {
12
- const { viteConfigEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options.viteConfig, 'preview');
12
+ const { viteConfigEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options, 'preview');
13
13
  const server = await (0, vite_1.preview)(viteConfigEnhanced);
14
14
  return {
15
15
  viteServer: server,
@@ -2,15 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isVikeCli = isVikeCli;
4
4
  exports.setContextCliCommand = setContextCliCommand;
5
+ exports.getCliOptions = getCliOptions;
5
6
  const utils_js_1 = require("./utils.js");
6
7
  const globalObject = (0, utils_js_1.getGlobalObject)('cli/context.ts', {});
7
- function getCliCommand() {
8
- return globalObject.cliCommand;
8
+ function getCliOptions() {
9
+ return globalObject.cliCommand?.cliOptions ?? null;
9
10
  }
10
11
  function isVikeCli() {
11
12
  return !!globalObject.cliCommand;
12
13
  }
13
- function setContextCliCommand(command) {
14
+ function setContextCliCommand(command, cliOptions) {
14
15
  (0, utils_js_1.assert)(!globalObject.cliCommand);
15
- globalObject.cliCommand = command;
16
+ globalObject.cliCommand = { command, cliOptions };
16
17
  }
@@ -43,8 +43,8 @@ const parseCli_js_1 = require("./parseCli.js");
43
43
  const context_js_1 = require("./context.js");
44
44
  cli();
45
45
  async function cli() {
46
- const { command } = (0, parseCli_js_1.parseCli)();
47
- (0, context_js_1.setContextCliCommand)(command);
46
+ const { command, cliOptions } = (0, parseCli_js_1.parseCli)();
47
+ (0, context_js_1.setContextCliCommand)(command, cliOptions);
48
48
  if (command === 'dev') {
49
49
  await cmdDev();
50
50
  }
@@ -66,7 +66,7 @@ async function cmdDev() {
66
66
  const info = viteServer.config.logger.info;
67
67
  const startupDurationString = picocolors_1.default.dim(`ready in ${picocolors_1.default.reset(picocolors_1.default.bold(String(Math.ceil(performance.now() - startTime))))} ms`);
68
68
  const hasExistingLogs = process.stdout.bytesWritten > 0 || process.stderr.bytesWritten > 0;
69
- info(` ${picocolors_1.default.yellow(`${picocolors_1.default.bold(utils_js_1.projectInfo.projectName)} v${utils_js_1.projectInfo.projectVersion}`)} ${startupDurationString}\n`, {
69
+ info(` ${picocolors_1.default.yellow(`${picocolors_1.default.bold('Vike')} v${utils_js_1.PROJECT_VERSION}`)} ${startupDurationString}\n`, {
70
70
  clear: !hasExistingLogs
71
71
  });
72
72
  viteServer.printUrls();
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.parseCli = parseCli;
7
7
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
8
8
  const utils_js_1 = require("./utils.js");
9
+ const getEnvVarObject_js_1 = require("../plugin/shared/getEnvVarObject.js");
9
10
  const commands = [
10
11
  { name: 'dev', desc: 'Start development server' },
11
12
  { name: 'build', desc: 'Build for production' },
@@ -13,32 +14,59 @@ const commands = [
13
14
  { name: 'prerender', desc: 'Pre-render pages (only needed when partial.disableAutoRun is true)' }
14
15
  ];
15
16
  function parseCli() {
16
- const command = (() => {
17
- const firstArg = process.argv[2];
18
- if (!firstArg) {
19
- showHelp();
20
- }
21
- showHelpOrVersion(firstArg);
22
- if ((0, utils_js_1.includes)(commands.map((c) => c.name), firstArg))
23
- return firstArg;
24
- wrongUsage(`Unknown command ${picocolors_1.default.bold(firstArg)}`);
25
- })();
17
+ const command = getCommand();
18
+ const cliOptions = getCliOptions();
19
+ return { command, cliOptions };
20
+ }
21
+ function getCommand() {
22
+ const firstArg = process.argv[2];
23
+ if ((0, utils_js_1.includes)(commands.map((c) => c.name), firstArg)) {
24
+ return firstArg;
25
+ }
26
+ if (!firstArg)
27
+ showHelp();
28
+ showHelpOrVersion(firstArg);
29
+ wrongUsage(`Unknown command ${picocolors_1.default.bold(firstArg)}`);
30
+ }
31
+ function getCliOptions() {
32
+ let cliOptions = {};
33
+ let configNameCurrent;
34
+ const commitIfDefinedWithoutValue = () => {
35
+ if (configNameCurrent)
36
+ commit(true);
37
+ };
38
+ const commit = (val) => {
39
+ (0, utils_js_1.assert)(configNameCurrent);
40
+ cliOptions[configNameCurrent] = val;
41
+ configNameCurrent = undefined;
42
+ };
26
43
  for (const arg of process.argv.slice(3)) {
27
44
  showHelpOrVersion(arg);
28
- wrongUsage(`Unknown option ${picocolors_1.default.bold(arg)}`);
45
+ if (arg.startsWith('--')) {
46
+ commitIfDefinedWithoutValue();
47
+ configNameCurrent = arg.slice('--'.length);
48
+ }
49
+ else {
50
+ if (!configNameCurrent)
51
+ wrongUsage(`Unknown option ${picocolors_1.default.bold(arg)}`);
52
+ commit((0, getEnvVarObject_js_1.parseJson5)(arg, `CLI option --${configNameCurrent}`));
53
+ }
29
54
  }
30
- return { command };
55
+ commitIfDefinedWithoutValue();
56
+ return cliOptions;
31
57
  }
32
58
  function showHelp() {
33
59
  const TAB = ' '.repeat(3);
34
60
  const nameMaxLength = Math.max(...commands.map((c) => c.name.length));
35
61
  console.log([
36
- `vike@${utils_js_1.projectInfo.projectVersion}`,
62
+ `vike@${utils_js_1.PROJECT_VERSION}`,
37
63
  '',
38
64
  'Usage:',
39
65
  ...[...commands, { name: '-v', desc: "Print Vike's installed version" }].map((c) => ` ${picocolors_1.default.dim('$')} ${picocolors_1.default.bold(`vike ${c.name}`)}${' '.repeat(nameMaxLength - c.name.length)}${TAB}${picocolors_1.default.dim(`# ${c.desc}`)}`),
40
66
  '',
41
- `More infos at ${picocolors_1.default.underline('https://vike.dev/cli')}`
67
+ `Vike settings can be passed over the ${picocolors_1.default.cyan('VIKE_CONFIG')} environment variable or as ${picocolors_1.default.cyan('CLI options')} such as --host.`,
68
+ `Vite settings can be passed over the ${picocolors_1.default.cyan('VITE_CONFIG')} environment variable.`,
69
+ `See ${picocolors_1.default.underline('https://vike.dev/cli')} for more information.`
42
70
  ].join('\n'));
43
71
  process.exit(1);
44
72
  }
@@ -51,7 +79,7 @@ function showHelpOrVersion(arg) {
51
79
  }
52
80
  }
53
81
  function showVersion() {
54
- console.log(utils_js_1.projectInfo.projectVersion);
82
+ console.log(utils_js_1.PROJECT_VERSION);
55
83
  process.exit(1);
56
84
  }
57
85
  function wrongUsage(msg) {
@@ -19,6 +19,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
19
19
  const onLoad_js_1 = require("./onLoad.js");
20
20
  (0, onLoad_js_1.onLoad)();
21
21
  __exportStar(require("../../utils/assert.js"), exports);
22
- __exportStar(require("../../utils/projectInfo.js"), exports);
22
+ __exportStar(require("../../utils/PROJECT_VERSION.js"), exports);
23
23
  __exportStar(require("../../utils/includes.js"), exports);
24
24
  __exportStar(require("../../utils/getGlobalObject.js"), exports);
@@ -40,7 +40,7 @@ function pluginBuildEntry() {
40
40
  function getServerProductionEntryCode(config) {
41
41
  const importPath = getImportPath(config);
42
42
  const buildInfo = {
43
- versionAtBuildTime: utils_js_1.projectInfo.projectVersion,
43
+ versionAtBuildTime: utils_js_1.PROJECT_VERSION,
44
44
  usesClientRouter: (0, extractExportNamesPlugin_js_1.isUsingClientRouter)(), // TODO/v1-release: remove
45
45
  viteConfigRuntime: (0, globalContext_js_1.getViteConfigRuntime)(config)
46
46
  };
@@ -78,11 +78,22 @@ function commonConfig(vikeVitePluginOptions) {
78
78
  config: {
79
79
  order: 'post',
80
80
  handler(configFromUser) {
81
- // Change default port
82
81
  let configFromVike = { server: {}, preview: {} };
83
- setDefault('port', 3000, configFromUser, configFromVike);
84
- // Set `--host` for Docker/Podman
85
- if ((0, utils_js_1.isDocker)()) {
82
+ const vike = getVikeConfigPublic(configFromUser);
83
+ if (vike.config.port !== undefined) {
84
+ // https://vike.dev/port
85
+ setDefault('port', vike.config.port, configFromUser, configFromVike);
86
+ }
87
+ else {
88
+ // Change Vite's default port
89
+ setDefault('port', 3000, configFromUser, configFromVike);
90
+ }
91
+ if (vike.config.host) {
92
+ // https://vike.dev/host
93
+ setDefault('host', vike.config.host, configFromUser, configFromVike);
94
+ }
95
+ else if ((0, utils_js_1.isDocker)()) {
96
+ // Set `--host` for Docker/Podman
86
97
  setDefault('host', true, configFromUser, configFromVike);
87
98
  }
88
99
  // VITE_CONFIG
@@ -55,6 +55,8 @@ async function getPageDeps(config, pageConfigs) {
55
55
  const { definedAtFilePath, configEnv } = configValueSource;
56
56
  if (!configEnv.client)
57
57
  return;
58
+ if (definedAtFilePath.definedBy)
59
+ return;
58
60
  if (definedAtFilePath.filePathAbsoluteUserRootDir !== null) {
59
61
  // Vite expects entries to be filesystem absolute paths (surprisingly so).
60
62
  addEntry(definedAtFilePath.filePathAbsoluteFilesystem);
@@ -125,6 +125,14 @@ const configDefinitionsBuiltIn = {
125
125
  cacheControl: {
126
126
  env: { server: true }
127
127
  },
128
+ host: {
129
+ env: { config: true },
130
+ global: true
131
+ },
132
+ port: {
133
+ env: { config: true },
134
+ global: true
135
+ },
128
136
  injectScriptsAt: {
129
137
  env: { server: true }
130
138
  },
@@ -150,7 +158,7 @@ const configDefinitionsBuiltIn = {
150
158
  },
151
159
  prerender: {
152
160
  env: { config: true },
153
- global: (value) => typeof value === 'object',
161
+ global: (value, { isGlobalLocation }) => typeof value === 'object' || isGlobalLocation,
154
162
  type: ['boolean', 'object'],
155
163
  cumulative: true
156
164
  },
@@ -28,6 +28,9 @@ const assertExtensions_js_1 = require("./getVikeConfig/assertExtensions.js");
28
28
  const getPageConfigUserFriendly_js_1 = require("../../../../../shared/page-configs/getPageConfigUserFriendly.js");
29
29
  const serializeConfigValues_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValues.js");
30
30
  const getPlusFilesAll_js_1 = require("./getVikeConfig/getPlusFilesAll.js");
31
+ const getEnvVarObject_js_1 = require("../../../shared/getEnvVarObject.js");
32
+ const context_js_1 = require("../../../../api/context.js");
33
+ const context_js_2 = require("../../../../cli/context.js");
31
34
  (0, utils_js_1.assertIsNotProductionRuntime)();
32
35
  let restartVite = false;
33
36
  let wasConfigInvalid = null;
@@ -151,6 +154,8 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
151
154
  const { pageConfigGlobal, pageConfigs } = getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRootDir);
152
155
  // Backwards compatibility for vike(options) in vite.config.js
153
156
  temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir);
157
+ // TODO/now: add validation
158
+ setCliAndApiOptions(pageConfigGlobal);
154
159
  // global
155
160
  const pageConfigGlobalValues = getConfigValues(pageConfigGlobal);
156
161
  const global = (0, getPageConfigUserFriendly_js_1.getPageConfigGlobalUserFriendly)({ pageConfigGlobalValues });
@@ -209,13 +214,13 @@ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRo
209
214
  (0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsGlobal).forEach(([configName, configDef]) => {
210
215
  const sources = resolveConfigValueSources(configName, configDef,
211
216
  // 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).
212
- Object.values(plusFilesAll).flat(), userRootDir, true);
217
+ Object.values(plusFilesAll).flat(), userRootDir, true, plusFilesAll);
213
218
  if (sources.length === 0)
214
219
  return;
215
220
  pageConfigGlobal.configValueSources[configName] = sources;
216
221
  });
217
222
  applyEffectsMetaEnv(pageConfigGlobal.configValueSources, configDefinitionsResolved.configDefinitionsGlobal);
218
- applyEffectsConfVal(pageConfigGlobal.configValueSources, configDefinitionsResolved.configDefinitionsGlobal);
223
+ applyEffectsConfVal(pageConfigGlobal.configValueSources, configDefinitionsResolved.configDefinitionsGlobal, plusFilesAll);
219
224
  sortConfigValueSources(pageConfigGlobal.configValueSources, null);
220
225
  assertPageConfigGlobal(pageConfigGlobal, plusFilesAll);
221
226
  const pageConfigs = (0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsLocal)
@@ -226,14 +231,14 @@ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRo
226
231
  (0, utils_js_1.objectEntries)(configDefinitionsLocal)
227
232
  .filter(([_configName, configDef]) => configDef.global !== true)
228
233
  .forEach(([configName, configDef]) => {
229
- const sources = resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, false);
234
+ const sources = resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, false, plusFilesAll);
230
235
  if (sources.length === 0)
231
236
  return;
232
237
  configValueSources[configName] = sources;
233
238
  });
234
239
  const pageConfigRoute = determineRouteFilesystem(locationId, configValueSources);
235
240
  applyEffectsMetaEnv(configValueSources, configDefinitionsLocal);
236
- applyEffectsConfVal(configValueSources, configDefinitionsLocal);
241
+ applyEffectsConfVal(configValueSources, configDefinitionsLocal, plusFilesAll);
237
242
  sortConfigValueSources(configValueSources, locationId);
238
243
  const configValuesComputed = getComputed(configValueSources, configDefinitionsLocal);
239
244
  const pageConfig = {
@@ -358,6 +363,7 @@ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, use
358
363
  (0, utils_js_1.assert)((0, utils_js_1.includes)((0, utils_js_1.objectKeys)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn), configName));
359
364
  const configDef = configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn[configName];
360
365
  const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
366
+ // TODO/now: use getSourceNonConfigFile()
361
367
  sources.push({
362
368
  valueIsLoaded: true,
363
369
  value,
@@ -376,6 +382,49 @@ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, use
376
382
  });
377
383
  });
378
384
  }
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
392
+ const apiOperation = (0, context_js_1.getApiOperation)();
393
+ if (apiOperation?.options.vikeConfig) {
394
+ add(apiOperation.options.vikeConfig, {
395
+ definedBy: 'api',
396
+ operation: apiOperation.operation
397
+ });
398
+ }
399
+ // Vike CLI options
400
+ const cliOptions = (0, context_js_2.getCliOptions)();
401
+ if (cliOptions) {
402
+ add(cliOptions, { definedBy: 'cli' });
403
+ }
404
+ return;
405
+ function add(configValues, definedBy) {
406
+ Object.entries(configValues).forEach(([configName, value]) => {
407
+ var _a;
408
+ const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
409
+ sources.unshift(getSourceNonConfigFile(configName, value, definedBy));
410
+ });
411
+ }
412
+ }
413
+ function getSourceNonConfigFile(configName, value, definedAt) {
414
+ (0, utils_js_1.assert)((0, utils_js_1.includes)((0, utils_js_1.objectKeys)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn), configName));
415
+ const configDef = configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn[configName];
416
+ const source = {
417
+ valueIsLoaded: true,
418
+ value,
419
+ configEnv: configDef.env,
420
+ definedAtFilePath: definedAt,
421
+ locationId: '/',
422
+ plusFile: null,
423
+ valueIsLoadedWithImport: false,
424
+ valueIsDefinedByPlusValueFile: false
425
+ };
426
+ return source;
427
+ }
379
428
  function sortConfigValueSources(configValueSources, locationIdPage) {
380
429
  Object.entries(configValueSources).forEach(([configName, sources]) => {
381
430
  sources
@@ -462,7 +511,7 @@ function sortPlusFilesSameLocationId(plusFile1, plusFile2, configName) {
462
511
  // No need to make it deterministic: the overall order is arleady deterministic, see sortMakeDeterministic() at getPlusFilesAll()
463
512
  return 0;
464
513
  }
465
- function resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, isGlobal) {
514
+ function resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, isGlobal, plusFilesAll) {
466
515
  let sources = plusFilesRelevant
467
516
  .filter((plusFile) => isDefiningConfig(plusFile, configName))
468
517
  .map((plusFile) => getConfigValueSource(configName, plusFile, configDef, userRootDir));
@@ -477,7 +526,7 @@ function resolveConfigValueSources(configName, configDef, plusFilesRelevant, use
477
526
  sources = sources.filter((source) => {
478
527
  (0, utils_js_1.assert)(source.configEnv.config);
479
528
  (0, utils_js_1.assert)(source.valueIsLoaded);
480
- const valueIsGlobal = resolveIsGlobalValue(configDef.global, source.value);
529
+ const valueIsGlobal = resolveIsGlobalValue(configDef.global, source, plusFilesAll);
481
530
  return isGlobal ? valueIsGlobal : !valueIsGlobal;
482
531
  });
483
532
  }
@@ -601,10 +650,13 @@ function isDefiningPage(plusFiles) {
601
650
  function isDefiningPageConfig(configName) {
602
651
  return ['Page', 'route'].includes(configName);
603
652
  }
604
- function resolveIsGlobalValue(configDefGlobal, configValue) {
653
+ function resolveIsGlobalValue(configDefGlobal, source, plusFilesAll) {
654
+ (0, utils_js_1.assert)(source.valueIsLoaded);
605
655
  let isGlobal;
606
656
  if ((0, utils_js_1.isCallable)(configDefGlobal))
607
- isGlobal = configDefGlobal(configValue);
657
+ isGlobal = configDefGlobal(source.value, {
658
+ isGlobalLocation: isGlobalLocation(source.locationId, plusFilesAll)
659
+ });
608
660
  else
609
661
  isGlobal = configDefGlobal ?? false;
610
662
  (0, utils_js_1.assert)(typeof isGlobal === 'boolean');
@@ -694,7 +746,7 @@ function assertMetaUsage(metaVal, metaConfigDefinedAt) {
694
746
  });
695
747
  }
696
748
  // Test: https://github.com/vikejs/vike/blob/441a37c4c1a3b07bb8f6efb1d1f7be297a53974a/test/playground/vite.config.ts#L39
697
- function applyEffectsConfVal(configValueSources, configDefinitions) {
749
+ function applyEffectsConfVal(configValueSources, configDefinitions, plusFilesAll) {
698
750
  (0, utils_js_1.objectEntries)(configDefinitions).forEach(([configNameEffect, configDefEffect]) => {
699
751
  const sourceEffect = configValueSources[configNameEffect]?.[0];
700
752
  if (!sourceEffect)
@@ -702,8 +754,8 @@ function applyEffectsConfVal(configValueSources, configDefinitions) {
702
754
  const effect = runEffect(configNameEffect, configDefEffect, sourceEffect);
703
755
  if (!effect)
704
756
  return;
705
- const { configModFromEffect, configValueEffectSource } = effect;
706
- applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions, configValueEffectSource);
757
+ const configModFromEffect = effect;
758
+ applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions, plusFilesAll);
707
759
  });
708
760
  }
709
761
  // Test: https://github.com/vikejs/vike/blob/441a37c4c1a3b07bb8f6efb1d1f7be297a53974a/test/playground/pages/config-meta/effect/e2e-test.ts#L16
@@ -715,7 +767,7 @@ function applyEffectsMetaEnv(configValueSources, configDefinitions) {
715
767
  const effect = runEffect(configNameEffect, configDefEffect, sourceEffect);
716
768
  if (!effect)
717
769
  return;
718
- const { configModFromEffect } = effect;
770
+ const configModFromEffect = effect;
719
771
  applyEffectMetaEnv(configModFromEffect, configValueSources, configDefEffect);
720
772
  });
721
773
  }
@@ -727,17 +779,16 @@ function runEffect(configName, configDef, source) {
727
779
  `Cannot add meta.effect to ${picocolors_1.default.cyan(configName)} because its meta.env is ${picocolors_1.default.cyan(JSON.stringify(configDef.env))} but an effect can only be added to a config that has a meta.env with ${picocolors_1.default.cyan('{ config: true }')}.`
728
780
  ].join(' '));
729
781
  (0, utils_js_1.assert)(source.valueIsLoaded);
730
- const configValueEffectSource = source.value;
731
782
  // Call effect
732
783
  const configModFromEffect = configDef.effect({
733
- configValue: configValueEffectSource,
784
+ configValue: source.value,
734
785
  configDefinedAt: (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, source.definedAtFilePath)
735
786
  });
736
787
  if (!configModFromEffect)
737
788
  return null;
738
- return { configModFromEffect, configValueEffectSource };
789
+ return configModFromEffect;
739
790
  }
740
- function applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions, configValueEffectSource) {
791
+ function applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions, plusFilesAll) {
741
792
  (0, utils_js_1.objectEntries)(configModFromEffect).forEach(([configNameTarget, configValue]) => {
742
793
  if (configNameTarget === 'meta')
743
794
  return;
@@ -754,11 +805,12 @@ function applyEffectConfVal(configModFromEffect, sourceEffect, configValueSource
754
805
  valueIsLoaded: true,
755
806
  value: configValue
756
807
  };
757
- const isValueGlobalSource = resolveIsGlobalValue(configDefEffect.global, configValueEffectSource);
758
- const isValueGlobalTarget = resolveIsGlobalValue(configDef.global, configValue);
808
+ (0, utils_js_1.assert)(sourceEffect.valueIsLoaded);
809
+ const isValueGlobalSource = resolveIsGlobalValue(configDefEffect.global, sourceEffect, plusFilesAll);
810
+ const isValueGlobalTarget = resolveIsGlobalValue(configDef.global, configValueSource, plusFilesAll);
759
811
  const isGlobalHumanReadable = (isGlobal) => `${isGlobal ? 'non-' : ''}global`;
760
812
  // The error message make it sound like it's an inherent limitation, it actually isn't (both ways can make senses).
761
- (0, utils_js_1.assertUsage)(isValueGlobalSource === isValueGlobalTarget, `The configuration ${picocolors_1.default.cyan(configNameEffect)} is set to ${picocolors_1.default.cyan(JSON.stringify(configValueEffectSource))} which is considered ${isGlobalHumanReadable(isValueGlobalSource)}. However, it has a meta.effect that sets the configuration ${picocolors_1.default.cyan(configNameTarget)} to ${picocolors_1.default.cyan(JSON.stringify(configValue))} which is considered ${isGlobalHumanReadable(isValueGlobalTarget)}. This is contradictory: make sure the values are either both non-global or both global.`);
813
+ (0, utils_js_1.assertUsage)(isValueGlobalSource === isValueGlobalTarget, `The configuration ${picocolors_1.default.cyan(configNameEffect)} is set to ${picocolors_1.default.cyan(JSON.stringify(sourceEffect.value))} which is considered ${isGlobalHumanReadable(isValueGlobalSource)}. However, it has a meta.effect that sets the configuration ${picocolors_1.default.cyan(configNameTarget)} to ${picocolors_1.default.cyan(JSON.stringify(configValue))} which is considered ${isGlobalHumanReadable(isValueGlobalTarget)}. This is contradictory: make sure the values are either both non-global or both global.`);
762
814
  configValueSources[configNameTarget] ?? (configValueSources[configNameTarget] = []);
763
815
  configValueSources[configNameTarget].push(configValueSource);
764
816
  });
@@ -895,7 +947,7 @@ function determineRouteFilesystem(locationId, configValueSources) {
895
947
  (0, utils_js_1.assert)(filesystemRouteString.startsWith('/'));
896
948
  const routeFilesystem = {
897
949
  routeString: filesystemRouteString,
898
- definedBy: filesystemRouteDefinedBy
950
+ definedAtLocation: filesystemRouteDefinedBy
899
951
  };
900
952
  return { routeFilesystem, isErrorPage: undefined };
901
953
  }
@@ -907,7 +959,9 @@ function getFilesystemRoutingRootEffect(configFilesystemRoutingRoot, configName)
907
959
  const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, configFilesystemRoutingRoot.definedAtFilePath);
908
960
  (0, utils_js_1.assertUsage)(typeof value === 'string', `${configDefinedAt} should be a string`);
909
961
  (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('/')}`);
910
- const { filePathAbsoluteUserRootDir } = configFilesystemRoutingRoot.definedAtFilePath;
962
+ const { definedAtFilePath } = configFilesystemRoutingRoot;
963
+ (0, utils_js_1.assert)(!definedAtFilePath.definedBy);
964
+ const { filePathAbsoluteUserRootDir } = definedAtFilePath;
911
965
  (0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
912
966
  const before = (0, filesystemRouting_js_1.getFilesystemRouteString)((0, filesystemRouting_js_1.getLocationId)(filePathAbsoluteUserRootDir));
913
967
  const after = value;
@@ -4,26 +4,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getEnvVarObject = getEnvVarObject;
7
+ exports.parseJson5 = parseJson5;
7
8
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
8
9
  const utils_js_1 = require("../utils.js");
9
10
  const json5_1 = __importDefault(require("json5"));
10
- function getEnvVarObject(envVarName
11
- /* Let's eventually implement this for Vike's config as well
12
- | 'VIKE_CONFIG'
13
- */
14
- ) {
11
+ function getEnvVarObject(envVarName) {
15
12
  const valueStr = process.env[envVarName];
16
13
  if (!valueStr)
17
14
  return null;
15
+ const value = parseJson5(valueStr, envVarName);
16
+ (0, utils_js_1.assertUsage)(value, `${envVarName} should define an object but it's ${picocolors_1.default.bold(String(value))} instead.`);
17
+ (0, utils_js_1.assertUsage)((0, utils_js_1.isObject)(value), `${envVarName} should define an object but it's set to the following which isn't an object: ${picocolors_1.default.bold(valueStr)}`);
18
+ return value;
19
+ }
20
+ function parseJson5(valueStr, what) {
18
21
  let value;
19
22
  try {
20
23
  value = json5_1.default.parse(valueStr);
21
24
  }
22
25
  catch (err) {
23
26
  console.error(err);
24
- (0, utils_js_1.assertUsage)(false, `Cannot parse ${envVarName} (see error above) because it's set to the following which isn't a valid JSON5 string: ${picocolors_1.default.bold(valueStr)}`);
27
+ (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)}`);
25
28
  }
26
- (0, utils_js_1.assertUsage)(value, `${envVarName} should define an object but it's ${picocolors_1.default.bold(String(value))} instead.`);
27
- (0, utils_js_1.assertUsage)((0, utils_js_1.isObject)(value), `${envVarName} should define an object but it's set to the following which isn't an object: ${picocolors_1.default.bold(valueStr)}`);
28
29
  return value;
29
30
  }
@@ -20,7 +20,7 @@ function logWithVikeTag(msg, logType, category, showVikeVersion = false) {
20
20
  function getProjectTag(showVikeVersion) {
21
21
  let projectTag;
22
22
  if (showVikeVersion) {
23
- projectTag = `[vike@${utils_js_1.projectInfo.projectVersion}]`;
23
+ projectTag = `[vike@${utils_js_1.PROJECT_VERSION}]`;
24
24
  }
25
25
  else {
26
26
  projectTag = `[vike]`;
@@ -4,24 +4,32 @@ exports.resolvePrerenderConfigGlobal = resolvePrerenderConfigGlobal;
4
4
  exports.resolvePrerenderConfigLocal = resolvePrerenderConfigLocal;
5
5
  const utils_js_1 = require("./utils.js");
6
6
  const getConfigValueBuildTime_js_1 = require("../../shared/page-configs/getConfigValueBuildTime.js");
7
+ // When setting +prerender to an object => it also enables pre-rendering
8
+ const defaultValueForObject = true;
7
9
  function resolvePrerenderConfigGlobal(vikeConfig) {
8
- const prerenderConfigs = vikeConfig.global.config.prerender;
9
- let prerenderConfigList = prerenderConfigs || [];
10
- // Needed because of backwards compatibility of `vike({prerender:true})` in `vite.config.js`; after we remove it we can remove this line.
11
- prerenderConfigList = prerenderConfigList.filter(isObject2);
12
- (0, utils_js_1.assert)(prerenderConfigList.every(isObject2)); // Help TS
10
+ const prerenderConfigs = vikeConfig.global.config.prerender || [];
11
+ const prerenderSettings = prerenderConfigs.filter(isObject2);
13
12
  const prerenderConfigGlobal = {
14
- partial: pickFirst(prerenderConfigList.map((c) => c.partial)) ?? false,
15
- noExtraDir: pickFirst(prerenderConfigList.map((c) => c.noExtraDir)) ?? false,
16
- parallel: pickFirst(prerenderConfigList.map((c) => c.parallel)) ?? true,
17
- disableAutoRun: pickFirst(prerenderConfigList.map((c) => c.disableAutoRun)) ?? false
13
+ partial: pickFirst(prerenderSettings.map((c) => c.partial)) ?? false,
14
+ noExtraDir: pickFirst(prerenderSettings.map((c) => c.noExtraDir)) ?? false,
15
+ parallel: pickFirst(prerenderSettings.map((c) => c.parallel)) ?? true,
16
+ disableAutoRun: pickFirst(prerenderSettings.map((c) => c.disableAutoRun)) ?? false
18
17
  };
19
- const prerenderConfigGlobalLocalValue = prerenderConfigList.map((c) => c.value).filter((v) => v !== null);
20
- const defaultLocalValue = pickFirst(prerenderConfigGlobalLocalValue) ??
21
- (prerenderConfigGlobalLocalValue.length > 0 ||
22
- // Backwards compatibility for with vike({ prerender: true }) in vite.config.js
23
- prerenderConfigs?.some((p) => p === true) ||
24
- false);
18
+ let defaultLocalValue = false;
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))) {
22
+ defaultLocalValue = true;
23
+ }
24
+ }
25
+ // TODO/next-major: remove
26
+ // Backwards compatibility for `vike({prerender:true})` in vite.config.js
27
+ {
28
+ const valuesWithDefinedAt = vikeConfig.global._from.configsCumulative.prerender?.values ?? [];
29
+ if (valuesWithDefinedAt.some((v) => v.definedAt.includes('vite.config.js') && v.value)) {
30
+ defaultLocalValue = true;
31
+ }
32
+ }
25
33
  (0, utils_js_1.objectAssign)(prerenderConfigGlobal, {
26
34
  defaultLocalValue,
27
35
  isPrerenderingEnabledForAllPages: vikeConfig.pageConfigs.length > 0 &&
@@ -47,8 +55,8 @@ function resolvePrerenderConfigLocal(pageConfig) {
47
55
  const prerenderConfigLocal = { value };
48
56
  return prerenderConfigLocal;
49
57
  }
50
- function isObject2(p) {
51
- return typeof p === 'object' && p !== null;
58
+ function isObject2(value) {
59
+ return typeof value === 'object' && value !== null;
52
60
  }
53
61
  function pickFirst(arr) {
54
62
  return arr.filter((v) => v !== undefined)[0];