vike 0.4.259 → 0.4.260-commit-2e7fb2a

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 (104) hide show
  1. package/AGENTS.md +3 -0
  2. package/README.md +2 -0
  3. package/dist/client/runtime-client-routing/renderPageClient.js +1 -1
  4. package/dist/client/shared/getJsonSerializedInHtml.js +1 -10
  5. package/dist/node/api/build.js +6 -6
  6. package/dist/node/api/dev.d.ts +2 -10
  7. package/dist/node/api/dev.js +5 -52
  8. package/dist/node/api/prepareViteApiCall.d.ts +1 -1
  9. package/dist/node/api/prepareViteApiCall.js +2 -2
  10. package/dist/node/api/prerender.js +2 -2
  11. package/dist/node/api/preview.d.ts +2 -2
  12. package/dist/node/api/preview.js +15 -16
  13. package/dist/node/api/{resolveViteConfigFromUser.d.ts → resolveViteConfigUser.d.ts} +5 -5
  14. package/dist/node/api/{resolveViteConfigFromUser.js → resolveViteConfigUser.js} +100 -69
  15. package/dist/node/api/startupLog.d.ts +4 -0
  16. package/dist/node/api/{getStartupLogFirstLine.js → startupLog.js} +14 -1
  17. package/dist/node/api/types.d.ts +9 -0
  18. package/dist/node/cli/entry.js +1 -5
  19. package/dist/node/cli/parseCli.js +26 -12
  20. package/dist/node/createDevMiddleware.js +2 -2
  21. package/dist/node/prerender/runPrerender.d.ts +8 -2
  22. package/dist/node/prerender/runPrerender.js +3 -1
  23. package/dist/node/prerender/runPrerenderEntry.js +2 -2
  24. package/dist/node/vite/index.js +2 -2
  25. package/dist/node/vite/plugins/build/handleAssetsManifest.d.ts +2 -6
  26. package/dist/node/vite/plugins/build/handleAssetsManifest.js +16 -9
  27. package/dist/node/vite/plugins/build/pluginBuildApp.js +10 -5
  28. package/dist/node/vite/plugins/build/pluginBuildConfig.d.ts +6 -1
  29. package/dist/node/vite/plugins/build/pluginBuildConfig.js +13 -11
  30. package/dist/node/vite/plugins/build/pluginDistFileNames.js +1 -6
  31. package/dist/node/vite/plugins/build/pluginModuleBanner.js +2 -4
  32. package/dist/node/vite/plugins/pluginCommon.d.ts +1 -1
  33. package/dist/node/vite/plugins/pluginCommon.js +15 -7
  34. package/dist/node/vite/plugins/pluginDev/autoAddVikeSkill.d.ts +3 -0
  35. package/dist/node/vite/plugins/pluginDev/autoAddVikeSkill.js +174 -0
  36. package/dist/node/vite/plugins/pluginDev/optimizeDeps.js +67 -31
  37. package/dist/node/vite/plugins/pluginDev.js +17 -0
  38. package/dist/node/vite/plugins/pluginStripPointerImportAttribute.js +31 -10
  39. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFilePageEntry.js +5 -7
  40. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.d.ts +2 -2
  41. package/dist/node/vite/plugins/pluginVirtualFiles.js +1 -1
  42. package/dist/node/vite/shared/addSsrMiddleware.js +1 -1
  43. package/dist/node/vite/shared/getMagicString.d.ts +1 -1
  44. package/dist/node/vite/shared/getMagicString.js +3 -0
  45. package/dist/node/vite/shared/isVite8OrAbove.d.ts +4 -0
  46. package/dist/node/vite/shared/isVite8OrAbove.js +9 -0
  47. package/dist/node/vite/shared/isViteCli.d.ts +9 -4
  48. package/dist/node/vite/shared/isViteCli.js +24 -4
  49. package/dist/node/vite/shared/loggerDev.js +6 -5
  50. package/dist/node/vite/shared/loggerVite.js +3 -2
  51. package/dist/node/vite/shared/resolveVikeConfigInternal/assertExtensions.d.ts +3 -1
  52. package/dist/node/vite/shared/resolveVikeConfigInternal/assertExtensions.js +6 -5
  53. package/dist/node/vite/shared/resolveVikeConfigInternal/{crawlPlusFilePaths.d.ts → crawlPlusFiles.d.ts} +2 -2
  54. package/dist/node/vite/shared/resolveVikeConfigInternal/crawlPlusFiles.js +71 -0
  55. package/dist/node/vite/shared/resolveVikeConfigInternal/{getPlusFilesByLocationId.d.ts → getPlusFiles.d.ts} +5 -3
  56. package/dist/node/vite/shared/resolveVikeConfigInternal/{getPlusFilesByLocationId.js → getPlusFiles.js} +18 -17
  57. package/dist/node/vite/shared/resolveVikeConfigInternal/loadFileAtConfigTime.d.ts +1 -1
  58. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.d.ts +15 -15
  59. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.js +19 -0
  60. package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +19 -4
  61. package/dist/node/vite/shared/resolveVikeConfigInternal.js +217 -76
  62. package/dist/server/runtime/globalContext.js +4 -1
  63. package/dist/server/runtime/renderPageServer/createPageContextServer.d.ts +12 -3
  64. package/dist/server/runtime/renderPageServer/html/injectAssets/getHtmlTags.js +2 -3
  65. package/dist/server/runtime/renderPageServer/html/injectAssets/injectHtmlTags.js +3 -1
  66. package/dist/server/runtime/renderPageServer/html/serializeContext.js +5 -10
  67. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +8 -2
  68. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +32 -8
  69. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +1 -1
  70. package/dist/server/runtime/renderPageServer.d.ts +8 -2
  71. package/dist/server/runtime/renderPageServer.js +6 -4
  72. package/dist/shared-server-client/page-configs/serialize/serializeConfigValues.d.ts +3 -3
  73. package/dist/shared-server-client/page-configs/serialize/serializeConfigValues.js +8 -1
  74. package/dist/types/Config.d.ts +54 -6
  75. package/dist/types/PageConfig.d.ts +12 -10
  76. package/dist/types/PageContext.d.ts +8 -3
  77. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  78. package/dist/utils/PROJECT_VERSION.js +1 -1
  79. package/dist/utils/assert.d.ts +2 -0
  80. package/dist/utils/assert.js +8 -8
  81. package/dist/utils/assertViteVersion.js +1 -1
  82. package/dist/utils/crawlFiles/ignorePatternsBuiltIn.d.ts +1 -0
  83. package/dist/{node/vite/shared/resolveVikeConfigInternal/crawlPlusFilePaths → utils/crawlFiles}/ignorePatternsBuiltIn.js +1 -1
  84. package/dist/utils/crawlFiles.d.ts +21 -0
  85. package/dist/utils/crawlFiles.js +195 -0
  86. package/dist/utils/debug.d.ts +1 -1
  87. package/dist/utils/debug.js +1 -0
  88. package/dist/{node/vite/shared → utils}/getEnvVarObject.d.ts +0 -1
  89. package/dist/{node/vite/shared → utils}/getEnvVarObject.js +4 -3
  90. package/dist/utils/getViteRPC.js +1 -1
  91. package/dist/utils/objectMap.d.ts +2 -0
  92. package/dist/utils/objectMap.js +4 -0
  93. package/dist/utils/parseNpmPackage.js +4 -1
  94. package/dist/utils/pick.d.ts +1 -1
  95. package/dist/utils/setTimeoutUnref.d.ts +2 -0
  96. package/dist/utils/setTimeoutUnref.js +11 -0
  97. package/package.json +19 -21
  98. package/dist/node/api/getStartupLogFirstLine.d.ts +0 -7
  99. package/dist/node/vite/shared/resolveVikeConfigInternal/crawlPlusFilePaths/ignorePatternsBuiltIn.d.ts +0 -2
  100. package/dist/node/vite/shared/resolveVikeConfigInternal/crawlPlusFilePaths.js +0 -258
  101. package/dist/server/__internal/vite.d.ts +0 -2
  102. package/dist/server/__internal/vite.js +0 -2
  103. package/dist/server/runtime/renderPageServer/html/injectAssets/sanitizeJson.d.ts +0 -4
  104. package/dist/server/runtime/renderPageServer/html/injectAssets/sanitizeJson.js +0 -7
@@ -9,6 +9,7 @@ import { removeEmptyLines } from '../../../utils/removeEmptyLines.js';
9
9
  import { trimWithAnsi, trimWithAnsiTrailOnly } from '../../../utils/trimWithAnsi.js';
10
10
  import { assert } from '../../../utils/assert.js';
11
11
  import { getGlobalObject } from '../../../utils/getGlobalObject.js';
12
+ import { setTimeoutUnref } from '../../../utils/setTimeoutUnref.js';
12
13
  import { getRequestId_withAsyncHook } from '../../../server/runtime/asyncHook.js';
13
14
  import { logErrorServerDev, logVite } from './loggerDev.js';
14
15
  import '../assertEnvVite.js';
@@ -28,7 +29,7 @@ function interceptViteLogs(config) {
28
29
  }
29
30
  function intercept(loggerType, config) {
30
31
  let isBeginning = true;
31
- setTimeout(() => (isBeginning = false), 10 * 1000);
32
+ setTimeoutUnref(() => (isBeginning = false), 10 * 1000);
32
33
  config.logger[loggerType] = (msg, options = {}) => {
33
34
  assert(!isDebugError());
34
35
  if (swallowViteLogForceOptimization(msg))
@@ -132,7 +133,7 @@ function swallowViteLogConnected() {
132
133
  globalObject.swallowViteLogConnected_originalConsoleLog = console.log;
133
134
  // The message `[vite] connected.` doesn't go through Vite's logger thus we must monkey patch console.log()
134
135
  console.log = swallowViteLogConnected_logPatch;
135
- setTimeout(swallowViteLogConnected_clean, 3000);
136
+ setTimeoutUnref(swallowViteLogConnected_clean, 3000);
136
137
  }
137
138
  // Remove console.log() monkey patch
138
139
  function swallowViteLogConnected_clean() {
@@ -1,6 +1,8 @@
1
1
  export { assertExtensionsConventions };
2
2
  export { assertExtensionsRequire };
3
- import type { PlusFile } from './getPlusFilesByLocationId.js';
3
+ export { getExtensionName };
4
+ import type { PlusFile } from './getPlusFiles.js';
4
5
  import '../../assertEnvVite.js';
5
6
  declare function assertExtensionsConventions(plusFile: PlusFile): void;
6
7
  declare function assertExtensionsRequire(plusFiles: PlusFile[]): void;
8
+ declare function getExtensionName(plusFile: PlusFile): null | string;
@@ -1,5 +1,6 @@
1
1
  export { assertExtensionsConventions };
2
2
  export { assertExtensionsRequire };
3
+ export { getExtensionName };
3
4
  import pc from '@brillout/picocolors';
4
5
  import { PROJECT_VERSION } from '../../../../utils/PROJECT_VERSION.js';
5
6
  import { assert, assertUsage, assertWarning } from '../../../../utils/assert.js';
@@ -21,14 +22,14 @@ function assertConfigExportPath(plusFile) {
21
22
  assert(!p.includes('node_modules'));
22
23
  return;
23
24
  }
24
- const name = getNameValue(plusFile);
25
+ const name = getExtensionName(plusFile);
25
26
  assert(name); // already asserted in assertExtensionName()
26
27
  const importPathAbsoluteExpected = `${name}/config`;
27
28
  assertWarning(importPathAbsolute === importPathAbsoluteExpected, `The Vike configuration of ${pc.bold(name)} is exported at ${pc.bold(importPathAbsolute)}, but it should be exported at ${pc.bold(importPathAbsoluteExpected)} instead.`, { onlyOnce: true });
28
29
  }
29
30
  function assertExtensionName(plusFile) {
30
31
  const filePathToShowToUser = getFilePathToShowToUser(plusFile);
31
- const name = getNameValue(plusFile);
32
+ const name = getExtensionName(plusFile);
32
33
  assertUsage(name, `Vike extension name missing: the config ${filePathToShowToUser} must define the setting ${pc.cyan('name')}`);
33
34
  }
34
35
  function assertExtensionsRequire(plusFiles) {
@@ -36,7 +37,7 @@ function assertExtensionsRequire(plusFiles) {
36
37
  // Collect extensions
37
38
  const extensions = {};
38
39
  plusFilesRelevantList.forEach((plusFile) => {
39
- const name = getNameValue(plusFile);
40
+ const name = getExtensionName(plusFile);
40
41
  if (name) {
41
42
  const version = getExtensionVersion(name, plusFile);
42
43
  extensions[name] = version;
@@ -47,7 +48,7 @@ function assertExtensionsRequire(plusFiles) {
47
48
  const require = resolveRequireSetting(plusFile);
48
49
  if (!require)
49
50
  return;
50
- const name = getNameValue(plusFile);
51
+ const name = getExtensionName(plusFile);
51
52
  const filePathToShowToUser = getFilePathToShowToUser(plusFile);
52
53
  assertUsage(name, `Setting ${pc.bold('name')} is required for being able to use setting ${pc.bold('require')} in ${filePathToShowToUser}.`);
53
54
  Object.entries(require).forEach(([reqName, req]) => {
@@ -96,7 +97,7 @@ function resolveRequireSetting(plusFile) {
96
97
  });
97
98
  return requireSetting;
98
99
  }
99
- function getNameValue(plusFile) {
100
+ function getExtensionName(plusFile) {
100
101
  const confVal = getConfVal(plusFile, 'name');
101
102
  if (!confVal)
102
103
  return null;
@@ -1,8 +1,8 @@
1
- export { crawlPlusFilePaths };
1
+ export { crawlPlusFiles };
2
2
  export { isPlusFile };
3
3
  export { getPlusFileValueConfigName };
4
4
  import '../../assertEnvVite.js';
5
- declare function crawlPlusFilePaths(userRootDir: string): Promise<{
5
+ declare function crawlPlusFiles(userRootDir: string): Promise<{
6
6
  filePathAbsoluteUserRootDir: string;
7
7
  }[]>;
8
8
  declare function isPlusFile(filePath: string): boolean;
@@ -0,0 +1,71 @@
1
+ export { crawlPlusFiles };
2
+ export { isPlusFile };
3
+ export { getPlusFileValueConfigName };
4
+ import { assert, assertUsage } from '../../../../utils/assert.js';
5
+ import { assertFilePathAbsoluteFilesystem } from '../../../../utils/isFilePathAbsoluteFilesystem.js';
6
+ import { assertPosixPath } from '../../../../utils/path.js';
7
+ import path from 'node:path';
8
+ import { isTemporaryBuildFile } from './transpileAndExecuteFile.js';
9
+ import '../../assertEnvVite.js';
10
+ import { crawlFiles } from '../../../../utils/crawlFiles.js';
11
+ import { scriptFileExtensionList } from '../../../../utils/isScriptFile.js';
12
+ import { assertIsNotProductionRuntime } from '../../../../utils/assertSetup.js';
13
+ assertIsNotProductionRuntime();
14
+ async function crawlPlusFiles(userRootDir) {
15
+ assertPosixPath(userRootDir);
16
+ assertFilePathAbsoluteFilesystem(userRootDir);
17
+ let files = await crawlFiles({
18
+ filePattern: '**/+*',
19
+ fileExtension: scriptFileExtensionList,
20
+ cwd: userRootDir,
21
+ dot: false,
22
+ // Fallback to tinyglobby for users that dynamically generate plus files (and `.gitignore`s them)
23
+ globFallback: true,
24
+ });
25
+ // Filter build files
26
+ files = files.filter((filePath) => !isTemporaryBuildFile(filePath));
27
+ // Normalize
28
+ const plusFiles = files.map((filePath) => {
29
+ // Both `$ git-ls files` and tinyglobby return posix paths
30
+ assertPosixPath(filePath);
31
+ assert(!filePath.startsWith(userRootDir));
32
+ const filePathAbsoluteUserRootDir = path.posix.join('/', filePath);
33
+ assert(isPlusFile(filePathAbsoluteUserRootDir));
34
+ return { filePathAbsoluteUserRootDir };
35
+ });
36
+ return plusFiles;
37
+ }
38
+ function isPlusFile(filePath) {
39
+ assertPosixPath(filePath);
40
+ if (isTemporaryBuildFile(filePath))
41
+ return false;
42
+ const fileName = filePath.split('/').pop();
43
+ return fileName.startsWith('+');
44
+ }
45
+ function getPlusFileValueConfigName(filePath) {
46
+ if (!isPlusFile(filePath))
47
+ return null;
48
+ const fileName = path.posix.basename(filePath);
49
+ // assertNoUnexpectedPlusSign(filePath, fileName)
50
+ const basename = fileName.split('.')[0];
51
+ assert(basename.startsWith('+'));
52
+ const configName = basename.slice(1);
53
+ assertUsage(configName !== '', `${filePath} Invalid filename ${fileName}`);
54
+ return configName;
55
+ }
56
+ /* https://github.com/vikejs/vike/issues/1407
57
+ function assertNoUnexpectedPlusSign(filePath: string, fileName: string) {
58
+ const dirs = path.posix.dirname(filePath).split('/')
59
+ dirs.forEach((dir, i) => {
60
+ const dirPath = dirs.slice(0, i + 1).join('/')
61
+ assertUsage(
62
+ !dir.includes('+'),
63
+ `Character '+' is a reserved character: remove '+' from the directory name ${dirPath}/`
64
+ )
65
+ })
66
+ assertUsage(
67
+ !fileName.slice(1).includes('+'),
68
+ `Character '+' is only allowed at the beginning of filenames: make sure ${filePath} doesn't contain any '+' in its filename other than its first letter`
69
+ )
70
+ }
71
+ */
@@ -1,10 +1,11 @@
1
- export { getPlusFilesByLocationId };
1
+ export { getPlusFiles };
2
+ export { getPlusFileFromConfigFile };
2
3
  export type { PlusFileValue };
3
4
  export type { PlusFile };
4
5
  export type { PlusFilesByLocationId };
5
6
  import { type LocationId } from './filesystemRouting.js';
6
7
  import { type EsbuildCache } from './transpileAndExecuteFile.js';
7
- import { PointerImportLoaded } from './loadFileAtConfigTime.js';
8
+ import { type ConfigFile, PointerImportLoaded } from './loadFileAtConfigTime.js';
8
9
  import type { FilePathResolved } from '../../../../types/FilePath.js';
9
10
  import '../../assertEnvVite.js';
10
11
  type PlusFile = PlusFileConfig | PlusFileValue;
@@ -39,4 +40,5 @@ type PlusFileValue = PlusFileCommon & {
39
40
  isExtensionConfig?: undefined;
40
41
  };
41
42
  type PlusFilesByLocationId = Record<LocationId, PlusFile[]>;
42
- declare function getPlusFilesByLocationId(userRootDir: string, esbuildCache: EsbuildCache): Promise<PlusFilesByLocationId>;
43
+ declare function getPlusFiles(userRootDir: string, esbuildCache: EsbuildCache): Promise<PlusFilesByLocationId>;
44
+ declare function getPlusFileFromConfigFile(configFile: ConfigFile, isExtensionConfig: boolean, locationId: LocationId, userRootDir: string): PlusFileConfig;
@@ -1,16 +1,17 @@
1
- export { getPlusFilesByLocationId };
1
+ export { getPlusFiles };
2
+ export { getPlusFileFromConfigFile };
2
3
  import { assert } from '../../../../utils/assert.js';
3
4
  import { metaBuiltIn } from './metaBuiltIn.js';
4
5
  import { getLocationId } from './filesystemRouting.js';
5
- import { crawlPlusFilePaths, getPlusFileValueConfigName } from './crawlPlusFilePaths.js';
6
+ import { crawlPlusFiles, getPlusFileValueConfigName } from './crawlPlusFiles.js';
6
7
  import { getConfigFileExport } from './getConfigFileExport.js';
7
8
  import { loadConfigFile, loadValueFile } from './loadFileAtConfigTime.js';
8
9
  import { resolvePointerImport } from './resolvePointerImport.js';
9
10
  import { getFilePathResolved } from '../getFilePath.js';
10
11
  import { assertExtensionsConventions, assertExtensionsRequire } from './assertExtensions.js';
11
12
  import '../../assertEnvVite.js';
12
- async function getPlusFilesByLocationId(userRootDir, esbuildCache) {
13
- const plusFilePaths = (await crawlPlusFilePaths(userRootDir)).map(({ filePathAbsoluteUserRootDir }) => getFilePathResolved({ filePathAbsoluteUserRootDir, userRootDir }));
13
+ async function getPlusFiles(userRootDir, esbuildCache) {
14
+ const plusFilePaths = (await crawlPlusFiles(userRootDir)).map(({ filePathAbsoluteUserRootDir }) => getFilePathResolved({ filePathAbsoluteUserRootDir, userRootDir }));
14
15
  const plusFilesByLocationId = {};
15
16
  await Promise.all(plusFilePaths.map(async (filePath) => {
16
17
  if (getPlusFileValueConfigName(filePath.filePathAbsoluteFilesystem) === 'config') {
@@ -25,21 +26,21 @@ async function getPlusFilesByLocationId(userRootDir, esbuildCache) {
25
26
  plusFilesByLocationId[locationId].push(plusFile);
26
27
  extendsConfigs.forEach((extendsConfig) => {
27
28
  /* We purposely use the same locationId because the Vike extension's config should only apply to where it's being extended from, for example:
28
- ```js
29
- // /pages/admin/+config.js
29
+ ```js
30
+ // /pages/admin/+config.js
30
31
 
31
- import vikeVue from 'vike-vue/config'
32
- // Should only apply to /pages/admin/**
33
- export default { extends: [vikeVue] }
34
- ```
35
- ```js
36
- // /pages/marketing/+config.js
32
+ import vikeVue from 'vike-vue/config'
33
+ // Should only apply to /pages/admin/**
34
+ export default { extends: [vikeVue] }
35
+ ```
36
+ ```js
37
+ // /pages/marketing/+config.js
37
38
 
38
- import vikeReact from 'vike-react/config'
39
- // Should only apply to /pages/marketing/**
40
- export default { extends: [vikeReact] }
41
- ```
42
- */
39
+ import vikeReact from 'vike-react/config'
40
+ // Should only apply to /pages/marketing/**
41
+ export default { extends: [vikeReact] }
42
+ ```
43
+ */
43
44
  const plusFile = getPlusFileFromConfigFile(extendsConfig, true, locationId, userRootDir);
44
45
  assertExtensionsConventions(plusFile);
45
46
  plusFilesByLocationId[locationId].push(plusFile);
@@ -5,7 +5,7 @@ export type { ConfigFile };
5
5
  export type { PointerImportLoaded };
6
6
  import type { FilePathResolved } from '../../../../types/FilePath.js';
7
7
  import { type EsbuildCache } from './transpileAndExecuteFile.js';
8
- import type { PlusFileValue } from './getPlusFilesByLocationId.js';
8
+ import type { PlusFileValue } from './getPlusFiles.js';
9
9
  import { PointerImport } from './resolvePointerImport.js';
10
10
  import type { ConfigDefinitionsInternal } from './metaBuiltIn.js';
11
11
  import '../../assertEnvVite.js';
@@ -4,8 +4,8 @@ export type { ConfigDefinitions };
4
4
  export type { ConfigDefinitionsInternal };
5
5
  export type { ConfigDefinitionInternal };
6
6
  export type { ConfigEffect };
7
- import type { ConfigEnvInternal, ConfigEnv, DefinedAtFilePath } from '../../../../types/PageConfig.js';
8
- import type { Config, ConfigNameBuiltIn, ConfigNameGlobal } from '../../../../types/Config.js';
7
+ import type { ConfigEnv, DefinedAtFilePath } from '../../../../types/PageConfig.js';
8
+ import type { Config, ConfigNameBuiltIn, ConfigNameBuiltInGlobal } from '../../../../types/Config.js';
9
9
  import { type ConfigDefinedAt } from '../../../../shared-server-client/page-configs/getConfigDefinedAt.js';
10
10
  import type { PageConfigBuildTimeBeforeComputed } from '../resolveVikeConfigInternal.js';
11
11
  import '../../assertEnvVite.js';
@@ -13,8 +13,7 @@ import '../../assertEnvVite.js';
13
13
  *
14
14
  * https://vike.dev/meta
15
15
  */
16
- type ConfigDefinition = ConfigDefinition_ | ConfigDefinitionDefinedByPeerDependency;
17
- type ConfigDefinition_ = {
16
+ type ConfigDefinition = {
18
17
  /** In what environment(s) the config value is loaded.
19
18
  *
20
19
  * https://vike.dev/meta
@@ -57,7 +56,14 @@ type ConfigDefinition_ = {
57
56
  }) => boolean);
58
57
  /** Whether changes to the configuration should trigger a Vite restart. */
59
58
  vite?: boolean;
60
- };
59
+ /** @experimental */
60
+ _computed?: (pageConfig: PageConfigBuildTimeBeforeComputed) => unknown;
61
+ /** @experimental */
62
+ _valueIsFilePath?: true;
63
+ /** @experimental */
64
+ _userEffectDefinedAtFilePath?: DefinedAtFilePath;
65
+ isDefinedByPeerDependency?: undefined;
66
+ } | ConfigDefinitionDefinedByPeerDependency;
61
67
  type ConfigDefinitionDefinedByPeerDependency = {
62
68
  /**
63
69
  * Omit the "unknown config" error without defining the config — useful for optional peer dependencies: for example, vike-server sets +stream.require which is defined by vike-{react,vue,solid} but some users don't use vike-{react,vue,solid}
@@ -70,27 +76,21 @@ type ConfigDefinitionDefinedByPeerDependency = {
70
76
  * https://vike.dev/meta
71
77
  */
72
78
  type ConfigEffect = (config: {
73
- /** The config value.
79
+ /** The config's value.
74
80
  *
75
81
  * https://vike.dev/meta
76
82
  */
77
83
  configValue: unknown;
78
- /** Where the config value is defined.
84
+ /** Where the config's value is defined.
79
85
  *
80
86
  * https://vike.dev/meta
81
87
  */
82
88
  configDefinedAt: ConfigDefinedAt;
83
89
  }) => Config | undefined;
84
- /** For Vike internal use */
85
- type ConfigDefinitionInternal = Omit<ConfigDefinition_, 'env'> & {
86
- _computed?: (pageConfig: PageConfigBuildTimeBeforeComputed) => unknown;
87
- _valueIsFilePath?: true;
88
- _userEffectDefinedAtFilePath?: DefinedAtFilePath;
89
- env: ConfigEnvInternal;
90
- };
90
+ type ConfigDefinitionInternal = Exclude<ConfigDefinition, ConfigDefinitionDefinedByPeerDependency>;
91
91
  type ConfigDefinitions = Record<string, // configName
92
92
  ConfigDefinition>;
93
93
  type ConfigDefinitionsInternal = Record<string, // configName
94
94
  ConfigDefinitionInternal>;
95
- type ConfigDefinitionsBuiltIn = Record<ConfigNameBuiltIn | ConfigNameGlobal, ConfigDefinitionInternal>;
95
+ type ConfigDefinitionsBuiltIn = Record<ConfigNameBuiltIn | ConfigNameBuiltInGlobal, ConfigDefinitionInternal>;
96
96
  declare const metaBuiltIn: ConfigDefinitionsBuiltIn;
@@ -4,6 +4,7 @@ import { getConfigDefinedAt, } from '../../../../shared-server-client/page-confi
4
4
  import { getConfigValueSourceRelevantAnyEnv, getConfigValueSourcesRelevant, isConfigSourceValueNull, } from '../../plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.js';
5
5
  import { getFileSuffixes } from '../../../../shared-server-node/getFileSuffixes.js';
6
6
  import '../../assertEnvVite.js';
7
+ // @AI (CRITICAL FOR AI AGENTS): the values below (e.g. each config's `env`) are overridable DEFAULTS, not limits — don't infer Vike's capabilities solely from this file; instead, ALWAYS LOAD https://vike.dev/llms.txt (Vike documentation index) in your context when using Vike.
7
8
  const metaBuiltIn = {
8
9
  onRenderHtml: {
9
10
  env: { server: true },
@@ -102,6 +103,11 @@ const metaBuiltIn = {
102
103
  extends: {
103
104
  env: { config: true },
104
105
  },
106
+ pages: {
107
+ env: { config: true },
108
+ global: true,
109
+ cumulative: true,
110
+ },
105
111
  meta: {
106
112
  env: { config: true },
107
113
  },
@@ -197,13 +203,22 @@ const metaBuiltIn = {
197
203
  mode: {
198
204
  env: { config: true },
199
205
  global: true,
206
+ /* +mode can't be set in +config.js => a +config.js change never affects it — no Vite restart needed
200
207
  vite: true,
208
+ */
201
209
  },
202
210
  force: {
203
211
  env: { config: true },
204
212
  global: true,
205
213
  vite: true,
206
214
  },
215
+ root: {
216
+ env: { config: true },
217
+ global: true,
218
+ /* +root can't be set in +config.js => a +config.js change never affects it — no Vite restart needed
219
+ vite: true,
220
+ */
221
+ },
207
222
  csp: {
208
223
  env: { server: true },
209
224
  },
@@ -312,6 +327,10 @@ const metaBuiltIn = {
312
327
  vercel: {
313
328
  env: { config: true },
314
329
  },
330
+ ai: {
331
+ env: { config: true },
332
+ global: true,
333
+ },
315
334
  };
316
335
  function getConfigEnv(pageConfig, configName) {
317
336
  const source = getConfigValueSourceRelevantAnyEnv(configName, pageConfig);
@@ -9,12 +9,13 @@ export { isV1Design };
9
9
  export { getConfVal };
10
10
  export { getConfigDefinitionOptional };
11
11
  export { getVikeConfigFromCliOrEnv };
12
+ export { EARLY_SETTINGS };
12
13
  export type { VikeConfigInternal };
13
14
  export type { PageConfigBuildTimeBeforeComputed };
14
- import type { PageConfigGlobalBuildTime, PageConfigBuildTime } from '../../../types/PageConfig.js';
15
- import { type ConfigDefinitionsInternal, type ConfigDefinitionInternal } from './resolveVikeConfigInternal/metaBuiltIn.js';
15
+ import type { PageConfigGlobalBuildTime, ConfigEnv, PageConfigBuildTime, DefinedAtFilePath } from '../../../types/PageConfig.js';
16
+ import { type ConfigDefinitionsInternal } from './resolveVikeConfigInternal/metaBuiltIn.js';
16
17
  import { type GlobalConfigPublic } from '../../../shared-server-client/page-configs/resolveVikeConfigPublic.js';
17
- import { type PlusFile } from './resolveVikeConfigInternal/getPlusFilesByLocationId.js';
18
+ import { type PlusFile } from './resolveVikeConfigInternal/getPlusFiles.js';
18
19
  import type { PrerenderContextPublic } from '../../prerender/runPrerender.js';
19
20
  import type { ResolvedConfig, UserConfig } from 'vite';
20
21
  import { type DangerouslyUseInternals } from '../../../shared-server-client/getPublicProxy.js';
@@ -62,8 +63,22 @@ declare function getVikeConfigFromCliOrEnv(): {
62
63
  configFromCliOptions: import("../../cli/parseCli.js").CliOptions | null;
63
64
  configFromEnvVar: Record<string, unknown> | null;
64
65
  };
66
+ declare const EARLY_SETTINGS: readonly ["root", "mode"];
65
67
  type PageConfigBuildTimeBeforeComputed = Omit<PageConfigBuildTime, 'configValuesComputed'>;
66
- declare function getConfigDefinitionOptional(configDefinitions: ConfigDefinitionsInternal, configName: string): ConfigDefinitionInternal | null;
68
+ declare function getConfigDefinitionOptional(configDefinitions: ConfigDefinitionsInternal, configName: string): {
69
+ env: ConfigEnv;
70
+ cumulative?: boolean;
71
+ effect?: import("./resolveVikeConfigInternal/metaBuiltIn.js").ConfigEffect;
72
+ eager?: boolean;
73
+ global?: boolean | ((value: unknown, moreInfo: {
74
+ isGlobalLocation: boolean;
75
+ }) => boolean);
76
+ vite?: boolean;
77
+ _computed?: (pageConfig: PageConfigBuildTimeBeforeComputed) => unknown;
78
+ _valueIsFilePath?: true;
79
+ _userEffectDefinedAtFilePath?: DefinedAtFilePath;
80
+ isDefinedByPeerDependency?: undefined;
81
+ } | null;
67
82
  declare function getConfVal(plusFile: PlusFile, configName: string): null | {
68
83
  value: unknown;
69
84
  valueIsLoaded: true;