vike 0.4.223 → 0.4.224

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 (161) hide show
  1. package/dist/cjs/node/api/build.js +4 -37
  2. package/dist/cjs/node/api/prepareViteApiCall.js +9 -3
  3. package/dist/cjs/node/plugin/index.js +8 -20
  4. package/dist/cjs/node/plugin/plugins/baseUrls.js +3 -1
  5. package/dist/cjs/node/plugin/plugins/{buildConfig/fixServerAssets.js → build/handleAssetsManifest.js} +130 -52
  6. package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +145 -0
  7. package/dist/cjs/node/plugin/plugins/build/pluginBuildApp.js +52 -0
  8. package/dist/cjs/node/plugin/plugins/{buildConfig.js → build/pluginBuildConfig.js} +22 -84
  9. package/dist/cjs/node/plugin/plugins/{buildEntry/index.js → build/pluginBuildEntry.js} +9 -9
  10. package/dist/cjs/node/plugin/plugins/{distFileNames.js → build/pluginDistFileNames.js} +7 -7
  11. package/dist/cjs/node/plugin/plugins/{packageJsonFile.js → build/pluginDistPackageJsonFile.js} +6 -6
  12. package/dist/cjs/node/plugin/plugins/{suppressRollupWarning.js → build/pluginSuppressRollupWarning.js} +3 -3
  13. package/dist/cjs/node/plugin/plugins/build.js +21 -0
  14. package/dist/cjs/node/plugin/plugins/commonConfig.js +22 -4
  15. package/dist/cjs/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  17. package/dist/cjs/node/plugin/plugins/envVars.js +2 -2
  18. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +9 -9
  19. package/dist/cjs/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
  20. package/dist/cjs/node/plugin/plugins/fileEnv.js +5 -2
  21. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
  22. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +2 -5
  23. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +5 -5
  24. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +7 -2
  25. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +16 -0
  26. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +50 -64
  27. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +2 -1
  28. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
  29. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +19 -7
  30. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +277 -212
  31. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
  32. package/dist/cjs/node/plugin/shared/findPageFiles.js +3 -3
  33. package/dist/cjs/node/plugin/shared/getOutDirs.js +8 -7
  34. package/dist/cjs/node/plugin/shared/isViteServerBuild.js +47 -0
  35. package/dist/cjs/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  36. package/dist/cjs/node/plugin/utils.js +1 -0
  37. package/dist/cjs/node/prerender/context.js +3 -8
  38. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +23 -21
  39. package/dist/cjs/node/prerender/runPrerender.js +28 -28
  40. package/dist/cjs/node/prerender/utils.js +1 -0
  41. package/dist/cjs/node/runtime/renderPage/logErrorHint.js +7 -1
  42. package/dist/cjs/shared/getPageContextUrlComputed.js +1 -1
  43. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +2 -5
  44. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +3 -1
  45. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +20 -9
  46. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  47. package/dist/cjs/utils/findFile.js +1 -1
  48. package/dist/cjs/utils/findPackageJson.js +1 -1
  49. package/dist/cjs/utils/isFilePathAbsoluteFilesystem.js +10 -4
  50. package/dist/cjs/utils/path.js +1 -0
  51. package/dist/cjs/utils/requireResolve.js +11 -4
  52. package/dist/cjs/utils/sorter.js +0 -3
  53. package/dist/esm/client/client-routing-runtime/index.d.ts +1 -0
  54. package/dist/esm/client/client-routing-runtime/index.js +1 -0
  55. package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +8 -0
  56. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +10 -1
  57. package/dist/esm/node/api/build.js +4 -4
  58. package/dist/esm/node/api/prepareViteApiCall.js +9 -3
  59. package/dist/esm/node/plugin/index.d.ts +2 -1
  60. package/dist/esm/node/plugin/index.js +4 -17
  61. package/dist/esm/node/plugin/plugins/baseUrls.js +3 -1
  62. package/dist/esm/node/plugin/plugins/build/handleAssetsManifest.d.ts +18 -0
  63. package/dist/esm/node/plugin/plugins/{buildConfig/fixServerAssets.js → build/handleAssetsManifest.js} +131 -53
  64. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.d.ts +5 -0
  65. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +140 -0
  66. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.d.ts +3 -0
  67. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.js +50 -0
  68. package/dist/esm/node/plugin/plugins/{buildConfig.d.ts → build/pluginBuildConfig.d.ts} +3 -3
  69. package/dist/esm/node/plugin/plugins/{buildConfig.js → build/pluginBuildConfig.js} +22 -81
  70. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.d.ts +7 -0
  71. package/dist/esm/node/plugin/plugins/{buildEntry/index.js → build/pluginBuildEntry.js} +9 -9
  72. package/dist/esm/node/plugin/plugins/build/pluginDistFileNames.d.ts +3 -0
  73. package/dist/esm/node/plugin/plugins/{distFileNames.js → build/pluginDistFileNames.js} +7 -7
  74. package/dist/esm/node/plugin/plugins/build/pluginDistPackageJsonFile.d.ts +3 -0
  75. package/dist/esm/node/plugin/plugins/{packageJsonFile.js → build/pluginDistPackageJsonFile.js} +7 -6
  76. package/dist/esm/node/plugin/plugins/build/pluginSuppressRollupWarning.d.ts +3 -0
  77. package/dist/esm/node/plugin/plugins/{suppressRollupWarning.js → build/pluginSuppressRollupWarning.js} +3 -3
  78. package/dist/esm/node/plugin/plugins/build.d.ts +3 -0
  79. package/dist/esm/node/plugin/plugins/build.js +19 -0
  80. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +15 -6
  81. package/dist/esm/node/plugin/plugins/commonConfig.js +22 -4
  82. package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
  83. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  84. package/dist/esm/node/plugin/plugins/envVars.js +2 -2
  85. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +10 -10
  86. package/dist/esm/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
  87. package/dist/esm/node/plugin/plugins/fileEnv.js +5 -2
  88. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
  89. package/dist/esm/node/plugin/plugins/importUserCode/index.js +2 -5
  90. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +5 -5
  91. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +7 -2
  92. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.d.ts +1 -0
  93. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +13 -0
  94. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.d.ts +1 -1
  95. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +50 -64
  96. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +2 -1
  97. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
  98. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +0 -1
  99. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +20 -8
  100. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +8 -6
  101. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +279 -214
  102. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
  103. package/dist/esm/node/plugin/shared/findPageFiles.js +3 -3
  104. package/dist/esm/node/plugin/shared/getHttpRequestAsyncStore.js +1 -3
  105. package/dist/esm/node/plugin/shared/getOutDirs.d.ts +2 -2
  106. package/dist/esm/node/plugin/shared/getOutDirs.js +8 -7
  107. package/dist/esm/node/plugin/shared/isViteServerBuild.d.ts +15 -0
  108. package/dist/esm/node/plugin/shared/isViteServerBuild.js +45 -0
  109. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  110. package/dist/esm/node/plugin/utils.d.ts +1 -0
  111. package/dist/esm/node/plugin/utils.js +1 -0
  112. package/dist/esm/node/prerender/context.d.ts +0 -2
  113. package/dist/esm/node/prerender/context.js +4 -9
  114. package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +10 -6
  115. package/dist/esm/node/prerender/resolvePrerenderConfig.js +24 -22
  116. package/dist/esm/node/prerender/runPrerender.d.ts +7 -25
  117. package/dist/esm/node/prerender/runPrerender.js +29 -29
  118. package/dist/esm/node/prerender/utils.d.ts +1 -0
  119. package/dist/esm/node/prerender/utils.js +1 -0
  120. package/dist/esm/node/runtime/globalContext.d.ts +2 -1
  121. package/dist/esm/node/runtime/renderPage/logErrorHint.js +7 -1
  122. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +165 -5
  123. package/dist/esm/shared/getPageContextUrlComputed.js +1 -1
  124. package/dist/esm/shared/page-configs/Config.d.ts +12 -2
  125. package/dist/esm/shared/page-configs/PageConfig.d.ts +5 -5
  126. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +2 -5
  127. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +3 -1
  128. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +2 -0
  129. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +20 -9
  130. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  131. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  132. package/dist/esm/utils/findFile.js +1 -1
  133. package/dist/esm/utils/findPackageJson.js +1 -1
  134. package/dist/esm/utils/isFilePathAbsoluteFilesystem.js +8 -2
  135. package/dist/esm/utils/path.js +1 -0
  136. package/dist/esm/utils/projectInfo.d.ts +1 -1
  137. package/dist/esm/utils/requireResolve.js +11 -4
  138. package/dist/esm/utils/sorter.d.ts +18 -5
  139. package/dist/esm/utils/sorter.js +0 -3
  140. package/package.json +8 -16
  141. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +0 -119
  142. package/dist/cjs/node/plugin/plugins/buildApp.js +0 -76
  143. package/dist/cjs/node/plugin/plugins/removeRequireHookPlugin.js +0 -17
  144. package/dist/cjs/node/plugin/shared/getFullBuildInlineConfig.js +0 -20
  145. package/dist/cjs/node/plugin/shared/viteIsSSR.js +0 -31
  146. package/dist/esm/node/plugin/plugins/autoFullBuild.d.ts +0 -3
  147. package/dist/esm/node/plugin/plugins/autoFullBuild.js +0 -114
  148. package/dist/esm/node/plugin/plugins/buildApp.d.ts +0 -3
  149. package/dist/esm/node/plugin/plugins/buildApp.js +0 -74
  150. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.d.ts +0 -20
  151. package/dist/esm/node/plugin/plugins/buildEntry/index.d.ts +0 -8
  152. package/dist/esm/node/plugin/plugins/distFileNames.d.ts +0 -3
  153. package/dist/esm/node/plugin/plugins/packageJsonFile.d.ts +0 -3
  154. package/dist/esm/node/plugin/plugins/removeRequireHookPlugin.d.ts +0 -3
  155. package/dist/esm/node/plugin/plugins/removeRequireHookPlugin.js +0 -15
  156. package/dist/esm/node/plugin/plugins/suppressRollupWarning.d.ts +0 -3
  157. package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.d.ts +0 -2
  158. package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.js +0 -17
  159. package/dist/esm/node/plugin/shared/viteIsSSR.d.ts +0 -11
  160. package/dist/esm/node/plugin/shared/viteIsSSR.js +0 -29
  161. package/dist-cjs-fixup.mjs +0 -41
@@ -5,7 +5,7 @@ import { assert } from '../../utils.js';
5
5
  import { createRequire } from 'module';
6
6
  import { dirname } from 'path';
7
7
  import { fileURLToPath } from 'url';
8
- // @ts-ignore Shimmed by dist-cjs-fixup.js for CJS build.
8
+ // @ts-ignore import.meta.url is shimmed at dist/cjs by dist-cjs-fixup.js.
9
9
  const importMetaUrl = import.meta.url;
10
10
  const require_ = createRequire(importMetaUrl);
11
11
  const __dirname_ = dirname(fileURLToPath(importMetaUrl));
@@ -1,8 +1,8 @@
1
1
  export { determineOptimizeDeps };
2
2
  import { findPageFiles } from '../../shared/findPageFiles.js';
3
3
  import { assert, assertIsNpmPackageImport, createDebugger, isArray, unique } from '../../utils.js';
4
- import { getVikeConfig } from '../importUserCode/v1-design/getVikeConfig.js';
5
- import { analyzeClientEntries } from '../buildConfig.js';
4
+ import { getVikeConfig, isOverriden } from '../importUserCode/v1-design/getVikeConfig.js';
5
+ import { analyzeClientEntries } from '../build/pluginBuildConfig.js';
6
6
  import { virtualFileIdImportUserCodeClientCR, virtualFileIdImportUserCodeClientSR } from '../../../shared/virtual-files/virtualFileImportUserCode.js';
7
7
  import { getFilePathResolved } from '../../shared/getFilePath.js';
8
8
  const debug = createDebugger('vike:optimizeDeps');
@@ -44,11 +44,11 @@ async function getPageDeps(config, pageConfigs) {
44
44
  // V1 design
45
45
  {
46
46
  pageConfigs.forEach((pageConfig) => {
47
- Object.values(pageConfig.configValueSources).forEach((sources) => {
47
+ Object.entries(pageConfig.configValueSources).forEach(([configName, sources]) => {
48
48
  sources
49
- .filter((c) => !c.isOverriden)
49
+ .filter((source) => !isOverriden(source, configName, pageConfig))
50
50
  .forEach((configValueSource) => {
51
- if (!configValueSource.valueIsImportedAtRuntime)
51
+ if (!configValueSource.valueIsLoadedWithImport && !configValueSource.valueIsFilePath)
52
52
  return;
53
53
  const { definedAtFilePath, configEnv } = configValueSource;
54
54
  if (!configEnv.client)
@@ -4,7 +4,7 @@ import { assert, assertPosixPath, assertUsage, assertWarning, escapeRegex, isArr
4
4
  import { sourceMapPassthrough } from '../shared/rollupSourceMap.js';
5
5
  import { getModuleFilePathAbsolute } from '../shared/getFilePath.js';
6
6
  import { normalizeId } from '../shared/normalizeId.js';
7
- import { viteIsSSR_safe } from '../shared/viteIsSSR.js';
7
+ import { isViteServerBuild_safe } from '../shared/isViteServerBuild.js';
8
8
  // TODO/enventually: (after we implemented vike.config.js)
9
9
  // - Make import.meta.env work inside +config.js
10
10
  // - For it to work, we'll probably need the user to define the settings (e.g. `envDir`) for loadEnv() inside vike.config.js instead of vite.config.js
@@ -37,7 +37,7 @@ function envVarsPlugin() {
37
37
  if (!code.includes('import.meta.env.'))
38
38
  return;
39
39
  const isBuild = config.command === 'build';
40
- const isClientSide = !viteIsSSR_safe(config, options);
40
+ const isClientSide = !isViteServerBuild_safe(config, options);
41
41
  Object.entries(envsAll)
42
42
  .filter(([key]) => {
43
43
  // Already handled by Vite
@@ -13,11 +13,11 @@ import { isAsset } from '../shared/isAsset.js';
13
13
  import { getImportStatements } from '../shared/parseEsModule.js';
14
14
  import { sourceMapRemove } from '../shared/rollupSourceMap.js';
15
15
  import pc from '@brillout/picocolors';
16
- import { fixServerAssets_isEnabled } from './buildConfig/fixServerAssets.js';
17
- import { getVikeConfig, isV1Design } from './importUserCode/v1-design/getVikeConfig.js';
16
+ import { handleAssetsManifest_isFixEnabled } from './build/handleAssetsManifest.js';
17
+ import { getVikeConfig } from './importUserCode/v1-design/getVikeConfig.js';
18
18
  import { assertV1Design } from '../../shared/assertV1Design.js';
19
19
  import { normalizeId } from '../shared/normalizeId.js';
20
- import { viteIsSSR_safe } from '../shared/viteIsSSR.js';
20
+ import { isViteServerBuild_safe } from '../shared/isViteServerBuild.js';
21
21
  const extractAssetsRE = /(\?|&)extractAssets(?:&|$)/;
22
22
  const rawRE = /(\?|&)raw(?:&|$)/;
23
23
  const urlRE = /(\?|&)url(?:&|$)/;
@@ -26,7 +26,7 @@ const debug = createDebugger('vike:extractAssets');
26
26
  function extractAssetsPlugin() {
27
27
  let config;
28
28
  let vikeConfig;
29
- let isServerAssetsFixEnabled;
29
+ let isFixEnabled;
30
30
  return [
31
31
  // This plugin removes all JavaScript from server-side only code, so that only CSS imports remains. (And also satic files imports e.g. `import logoURL from './logo.svg.js'`).
32
32
  {
@@ -39,14 +39,14 @@ function extractAssetsPlugin() {
39
39
  if (!extractAssetsRE.test(id)) {
40
40
  return;
41
41
  }
42
- if (isServerAssetsFixEnabled) {
43
- // I'm guessing isServerAssetsFixEnabled can only be true when mixing both designs: https://github.com/vikejs/vike/issues/1480
42
+ if (isFixEnabled) {
43
+ // I'm guessing isFixEnabled can only be true when mixing both designs: https://github.com/vikejs/vike/issues/1480
44
44
  assertV1Design(vikeConfig.pageConfigs, true);
45
45
  assert(false);
46
46
  }
47
47
  // TODO/now: add meta.default
48
48
  assert(vikeConfig.global.config.includeAssetsImportedByServer ?? true);
49
- assert(!viteIsSSR_safe(config, options));
49
+ assert(!isViteServerBuild_safe(config, options));
50
50
  const importStatements = await getImportStatements(src);
51
51
  const moduleNames = getImportedModules(importStatements);
52
52
  const code = moduleNames.map((moduleName) => `import '${moduleName}';`).join('\n');
@@ -63,7 +63,7 @@ function extractAssetsPlugin() {
63
63
  // - Vite's `vite:resolve` plugin; https://github.com/vitejs/vite/blob/d649daba7682791178b711d9a3e44a6b5d00990c/packages/vite/src/node/plugins/resolve.ts#L105
64
64
  enforce: 'pre',
65
65
  async resolveId(source, importer, options) {
66
- if (viteIsSSR_safe(config, options)) {
66
+ if (isViteServerBuild_safe(config, options)) {
67
67
  // When building for the server, there should never be a `?extractAssets` query
68
68
  assert(!extractAssetsRE.test(source));
69
69
  assert(importer === undefined || !extractAssetsRE.test(importer));
@@ -140,8 +140,8 @@ function extractAssetsPlugin() {
140
140
  async configResolved(config_) {
141
141
  config = config_;
142
142
  vikeConfig = await getVikeConfig(config);
143
- isServerAssetsFixEnabled = fixServerAssets_isEnabled() && (await isV1Design(config));
144
- if (!isServerAssetsFixEnabled) {
143
+ isFixEnabled = handleAssetsManifest_isFixEnabled(config);
144
+ if (!isFixEnabled) {
145
145
  // https://github.com/vikejs/vike/issues/1060
146
146
  assertUsage(!config.plugins.find((p) => p.name === 'vite-tsconfig-paths'), 'vite-tsconfig-paths not supported, remove it and use vite.config.js#resolve.alias instead');
147
147
  }
@@ -5,7 +5,7 @@ import { assert, getFileExtension, createDebugger, getGlobalObject, assertUsage
5
5
  import { getExportNames } from '../shared/parseEsModule.js';
6
6
  import { sourceMapRemove } from '../shared/rollupSourceMap.js';
7
7
  import { normalizeId } from '../shared/normalizeId.js';
8
- import { viteIsSSR_options } from '../shared/viteIsSSR.js';
8
+ import { isViteServerBuild_options } from '../shared/isViteServerBuild.js';
9
9
  const extractExportNamesRE = /(\?|&)extractExportNames(?:&|$)/;
10
10
  const debug = createDebugger('vike:extractExportNames');
11
11
  const globalObject = getGlobalObject('plugins/extractExportNamesPlugin.ts', {});
@@ -16,7 +16,7 @@ function extractExportNamesPlugin() {
16
16
  enforce: 'post',
17
17
  async transform(src, id, options) {
18
18
  id = normalizeId(id);
19
- const isClientSide = !viteIsSSR_options(options);
19
+ const isClientSide = !isViteServerBuild_options(options);
20
20
  if (extractExportNamesRE.test(id)) {
21
21
  const code = await getExtractExportNamesCode(src, isClientSide, !isDev, id);
22
22
  debug('id ' + id, ['result:\n' + code.code.trim(), 'src:\n' + src.trim()]);
@@ -55,10 +55,13 @@ function fileEnv() {
55
55
  Array.from(this.getModuleIds())
56
56
  .filter((id) => !skip(id))
57
57
  .forEach((moduleId) => {
58
- const { importers, dynamicImporters } = this.getModuleInfo(moduleId);
58
+ const mod = this.getModuleInfo(moduleId);
59
+ const { importers } = mod;
59
60
  if (importers.length === 0) {
60
61
  // Dynamic imports can only be verified at runtime
61
- assert(dynamicImporters.length > 0);
62
+ /* This assertion can fail: https://github.com/vikejs/vike/issues/2227
63
+ assert(dynamicImporters.length > 0)
64
+ */
62
65
  return;
63
66
  }
64
67
  assertFileEnv(moduleId, !!config.build.ssr, importers, false);
@@ -7,12 +7,12 @@ import path from 'path';
7
7
  import { getVirtualFilePageConfigs } from './v1-design/virtual-files/getVirtualFilePageConfigs.js';
8
8
  import { isV1Design as isV1Design_ } from './v1-design/getVikeConfig.js';
9
9
  import { getOutDirs } from '../../shared/getOutDirs.js';
10
- import { viteIsSSR_options } from '../../shared/viteIsSSR.js';
10
+ import { isViteServerBuild_options } from '../../shared/isViteServerBuild.js';
11
11
  async function getVirtualFileImportUserCode(id, options, vikeConfig, config, isDev) {
12
12
  const idParsed = isVirtualFileIdImportUserCode(id);
13
13
  assert(idParsed);
14
14
  const { isForClientSide, isClientRouting } = idParsed;
15
- assert(isForClientSide === !viteIsSSR_options(options));
15
+ assert(isForClientSide === !isViteServerBuild_options(options));
16
16
  const code = await getCode(config, vikeConfig, isForClientSide, isClientRouting, isDev, id);
17
17
  return code;
18
18
  }
@@ -69,7 +69,7 @@ ${await getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, c
69
69
 
70
70
  `;
71
71
  // We still use import.meta.glob() when using th V1 design in order to not break the V1 design deprecation warning
72
- const isV1Design = await isV1Design_(config);
72
+ const isV1Design = isV1Design_(config);
73
73
  // Old design => no + files => only to enable pre-rendering is setting `vike({prerender})` in vite.config.js
74
74
  const isPrerendering = !!vikeConfig.global.config.prerender;
75
75
  fileTypes
@@ -21,11 +21,8 @@ function importUserCode() {
21
21
  vikeConfig = await getVikeConfig(config_);
22
22
  config = config_;
23
23
  // TODO/v1-release: remove
24
- {
25
- const isV1 = await isV1Design(config);
26
- if (!isV1)
27
- config.experimental.importGlobRestoreExtension = true;
28
- }
24
+ if (!isV1Design(config))
25
+ config.experimental.importGlobRestoreExtension = true;
29
26
  },
30
27
  resolveId(id) {
31
28
  if (isVirtualFileId(id)) {
@@ -29,7 +29,7 @@ function assertExtensionName(plusFile) {
29
29
  assertUsage(name, `Vike extension name missing: the config ${filePathToShowToUser} must define the setting ${pc.cyan('name')}`);
30
30
  }
31
31
  function assertExtensionsRequire(pageConfig) {
32
- const plusFilesRelevantList = Object.values(pageConfig.plusFiles).flat(1);
32
+ const plusFilesRelevantList = pageConfig.plusFiles;
33
33
  // Collect extensions
34
34
  const extensions = {};
35
35
  plusFilesRelevantList.forEach((plusFile) => {
@@ -63,8 +63,8 @@ function getConfigRequireValue(plusFile) {
63
63
  const confVal = getConfVal(plusFile, 'require');
64
64
  if (!confVal)
65
65
  return null;
66
- assert(confVal.configValueLoaded);
67
- const require = confVal.configValue;
66
+ assert(confVal.valueIsLoaded);
67
+ const require = confVal.value;
68
68
  const { filePathToShowToUserResolved } = plusFile.filePath;
69
69
  assert(filePathToShowToUserResolved);
70
70
  assertUsage(isObjectOfStrings(require), `The setting ${pc.bold('require')} defined at ${filePathToShowToUserResolved} should be an object with string values (${pc.bold('Record<string, string>')}).`);
@@ -74,8 +74,8 @@ function getNameValue(plusFile) {
74
74
  const confVal = getConfVal(plusFile, 'name');
75
75
  if (!confVal)
76
76
  return null;
77
- assert(confVal.configValueLoaded);
78
- const name = confVal.configValue;
77
+ assert(confVal.valueIsLoaded);
78
+ const name = confVal.value;
79
79
  const filePathToShowToUser = getFilePathToShowToUser(plusFile);
80
80
  assertUsage(typeof name === 'string', `The setting ${pc.bold('name')} defined at ${filePathToShowToUser} should be a string.`);
81
81
  return name;
@@ -31,7 +31,12 @@ const configDefinitionsBuiltIn = {
31
31
  cumulative: true
32
32
  },
33
33
  route: {
34
- env: { server: true, client: 'if-client-routing' },
34
+ env: {
35
+ server: true,
36
+ client: 'if-client-routing',
37
+ // For vite-plugin-vercel
38
+ config: true
39
+ },
35
40
  eager: true
36
41
  },
37
42
  guard: {
@@ -157,7 +162,7 @@ const configDefinitionsBuiltIn = {
157
162
  'string'
158
163
  ]
159
164
  },
160
- viteEnvironmentAPI: {
165
+ vite6BuilderApp: {
161
166
  env: { config: true },
162
167
  global: true,
163
168
  type: 'boolean'
@@ -0,0 +1 @@
1
+ export declare const ignorePatternsBuiltIn: readonly ["**/node_modules/**", "**/ejected/**", "**/*.telefunc.*", "**/*.generated.*"];
@@ -0,0 +1,13 @@
1
+ export const ignorePatternsBuiltIn = [
2
+ '**/node_modules/**',
3
+ // Ejected Vike extensions, see https://github.com/snake-py/eject
4
+ '**/ejected/**',
5
+ // Allow:
6
+ // ```bash
7
+ // +Page.js
8
+ // +Page.telefunc.js
9
+ // ```
10
+ '**/*.telefunc.*',
11
+ // https://github.com/vikejs/vike/discussions/2222
12
+ '**/*.generated.*'
13
+ ];
@@ -1,7 +1,7 @@
1
1
  export { crawlPlusFiles };
2
2
  export { isPlusFile };
3
3
  export { getPlusFileValueConfigName };
4
- declare function crawlPlusFiles(userRootDir: string, outDirAbsoluteFilesystem: null | string): Promise<{
4
+ declare function crawlPlusFiles(userRootDir: string): Promise<{
5
5
  filePathAbsoluteUserRootDir: string;
6
6
  }[]>;
7
7
  declare function isPlusFile(filePath: string): boolean;
@@ -1,53 +1,45 @@
1
1
  export { crawlPlusFiles };
2
2
  export { isPlusFile };
3
3
  export { getPlusFileValueConfigName };
4
- import { assertPosixPath, assert, scriptFileExtensions, assertIsSingleModuleInstance, assertIsNotProductionRuntime, isVersionOrAbove, isScriptFile, scriptFileExtensionList, createDebugger, deepEqual, assertUsage } from '../../../../utils.js';
4
+ import { assertPosixPath, assert, scriptFileExtensions, assertIsSingleModuleInstance, assertIsNotProductionRuntime, isVersionOrAbove, isScriptFile, scriptFileExtensionList, createDebugger, deepEqual, assertUsage, assertFilePathAbsoluteFilesystem, assertWarning, hasProp, isNotNullish } from '../../../../utils.js';
5
5
  import path from 'path';
6
- import glob from 'fast-glob';
6
+ import { glob } from 'tinyglobby';
7
7
  import { exec } from 'child_process';
8
8
  import { promisify } from 'util';
9
9
  import { isTemporaryBuildFile } from './transpileAndExecuteFile.js';
10
10
  import { getEnvVarObject } from '../../../../shared/getEnvVarObject.js';
11
+ import pc from '@brillout/picocolors';
12
+ import picomatch from 'picomatch';
13
+ import { ignorePatternsBuiltIn } from './crawlPlusFiles/ignorePatternsBuiltIn.js';
11
14
  const execA = promisify(exec);
12
15
  const debug = createDebugger('vike:crawl');
13
16
  assertIsNotProductionRuntime();
14
17
  assertIsSingleModuleInstance('getVikeConfig/crawlPlusFiles.ts');
15
18
  let gitIsNotUsable = false;
16
- async function crawlPlusFiles(userRootDir, outDirAbsoluteFilesystem) {
19
+ async function crawlPlusFiles(userRootDir) {
17
20
  assertPosixPath(userRootDir);
18
- //*/
19
- const outDirRelativeFromUserRootDir = null;
20
- /*/
21
- assertPosixPath(outDirAbsoluteFilesystem)
22
- let outDirRelativeFromUserRootDir: string | null = path.posix.relative(userRootDir, outDirAbsoluteFilesystem)
23
- if (outDirRelativeFromUserRootDir.startsWith('../')) {
24
- // config.outDir is outside of config.root => it's going to be ignored anyways
25
- outDirRelativeFromUserRootDir = null
26
- }
27
- //*/
28
- assert(outDirRelativeFromUserRootDir === null ||
29
- /* Not true if outDirRelativeFromUserRootDir starts with a hidden directory (i.e. a directory with a name that starts with `.`)
30
- !outDirRelativeFromUserRootDir.startsWith('.') &&
31
- */
32
- (!outDirRelativeFromUserRootDir.startsWith('./') &&
33
- //
34
- !outDirRelativeFromUserRootDir.startsWith('../')));
21
+ assertFilePathAbsoluteFilesystem(userRootDir);
22
+ const userSettings = getUserSettings();
23
+ const { ignorePatterns, ignoreMatchers } = getIgnore(userSettings);
35
24
  // Crawl
36
- const filesGit = !isGitCrawlDisabled() && (await gitLsFiles(userRootDir, outDirRelativeFromUserRootDir));
25
+ const filesGit = userSettings.git !== false && (await gitLsFiles(userRootDir, ignorePatterns, ignoreMatchers));
37
26
  const filesGitNothingFound = !filesGit || filesGit.length === 0;
38
- const filesGlob = (filesGitNothingFound || debug.isActivated) && (await fastGlob(userRootDir, outDirRelativeFromUserRootDir));
27
+ const filesGlob = (filesGitNothingFound || debug.isActivated) && (await tinyglobby(userRootDir, ignorePatterns));
39
28
  let files = !filesGitNothingFound
40
29
  ? filesGit
41
- : // Fallback to fast-glob for users that dynamically generate plus files. (Assuming that no plus file is found because of the user's .gitignore list.)
30
+ : // Fallback to tinyglobby for users that dynamically generate plus files. (Assuming that no plus file is found because of the user's .gitignore list.)
42
31
  filesGlob;
43
32
  assert(files);
44
- if (debug.isActivated)
45
- assert(deepEqual(filesGlob, filesGit), "Git and glob results aren't matching.");
33
+ if (debug.isActivated) {
34
+ assert(filesGit);
35
+ assert(filesGlob);
36
+ assertWarning(deepEqual(filesGlob.slice().sort(), filesGit.slice().sort()), "Git and glob results aren't matching.", { onlyOnce: false });
37
+ }
46
38
  // Filter build files
47
39
  files = files.filter((filePath) => !isTemporaryBuildFile(filePath));
48
40
  // Normalize
49
41
  const plusFiles = files.map((filePath) => {
50
- // Both `$ git-ls files` and fast-glob return posix paths
42
+ // Both `$ git-ls files` and tinyglobby return posix paths
51
43
  assertPosixPath(filePath);
52
44
  assert(!filePath.startsWith(userRootDir));
53
45
  const filePathAbsoluteUserRootDir = path.posix.join('/', filePath);
@@ -56,8 +48,8 @@ async function crawlPlusFiles(userRootDir, outDirAbsoluteFilesystem) {
56
48
  });
57
49
  return plusFiles;
58
50
  }
59
- // Same as fastGlob() but using `$ git ls-files`
60
- async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
51
+ // Same as tinyglobby() but using `$ git ls-files`
52
+ async function gitLsFiles(userRootDir, ignorePatterns, ignoreMatchers) {
61
53
  if (gitIsNotUsable)
62
54
  return null;
63
55
  // Preserve UTF-8 file paths.
@@ -65,8 +57,6 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
65
57
  // https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8-encoded-pathnames-in-the-console-window/22828826#22828826
66
58
  // https://stackoverflow.com/questions/15884180/how-do-i-override-git-configuration-options-by-command-line-parameters/15884261#15884261
67
59
  const preserveUTF8 = '-c core.quotepath=off';
68
- const ignoreAsPatterns = getIgnoreAsPatterns(outDirRelativeFromUserRootDir);
69
- const ignoreAsFilterFn = getIgnoreAsFilterFn(outDirRelativeFromUserRootDir);
70
60
  const cmd = [
71
61
  'git',
72
62
  preserveUTF8,
@@ -76,7 +66,7 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
76
66
  // Performance gain is non-negligible.
77
67
  // - https://github.com/vikejs/vike/pull/1688#issuecomment-2166206648
78
68
  // - When node_modules/ is untracked the performance gain could be significant?
79
- ...ignoreAsPatterns.map((pattern) => `--exclude="${pattern}"`),
69
+ ...ignorePatterns.map((pattern) => `--exclude="${pattern}"`),
80
70
  // --others --exclude-standard => list untracked files (--others) while using .gitignore (--exclude-standard)
81
71
  // --cached => list tracked files
82
72
  '--others --exclude-standard --cached'
@@ -111,7 +101,7 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
111
101
  if (!path.posix.basename(filePath).startsWith('+'))
112
102
  continue;
113
103
  // We have to repeat the same exclusion logic here because the option --exclude of `$ git ls-files` only applies to untracked files. (We use --exclude only to speed up the `$ git ls-files` command.)
114
- if (!ignoreAsFilterFn(filePath))
104
+ if (ignoreMatchers.some((m) => m(filePath)))
115
105
  continue;
116
106
  // JavaScript file?
117
107
  if (!isScriptFile(filePath))
@@ -123,11 +113,11 @@ async function gitLsFiles(userRootDir, outDirRelativeFromUserRootDir) {
123
113
  }
124
114
  return files;
125
115
  }
126
- // Same as gitLsFiles() but using fast-glob
127
- async function fastGlob(userRootDir, outDirRelativeFromUserRootDir) {
116
+ // Same as gitLsFiles() but using tinyglobby
117
+ async function tinyglobby(userRootDir, ignorePatterns) {
128
118
  const pattern = `**/+*.${scriptFileExtensions}`;
129
119
  const options = {
130
- ignore: getIgnoreAsPatterns(outDirRelativeFromUserRootDir),
120
+ ignore: ignorePatterns,
131
121
  cwd: userRootDir,
132
122
  dot: false
133
123
  };
@@ -142,32 +132,6 @@ async function fastGlob(userRootDir, outDirRelativeFromUserRootDir) {
142
132
  }
143
133
  return files;
144
134
  }
145
- // Same as getIgnoreAsFilterFn() but as glob pattern
146
- function getIgnoreAsPatterns(outDirRelativeFromUserRootDir) {
147
- const ignoreAsPatterns = [
148
- '**/node_modules/**',
149
- '**/ejected/**',
150
- // Allow:
151
- // ```
152
- // +Page.js
153
- // +Page.telefunc.js
154
- // ```
155
- '**/*.telefunc.*'
156
- ];
157
- if (outDirRelativeFromUserRootDir) {
158
- assert(!outDirRelativeFromUserRootDir.startsWith('/'));
159
- ignoreAsPatterns.push(`${outDirRelativeFromUserRootDir}/**`);
160
- }
161
- return ignoreAsPatterns;
162
- }
163
- // Same as getIgnoreAsPatterns() but for Array.filter()
164
- function getIgnoreAsFilterFn(outDirRelativeFromUserRootDir) {
165
- assert(outDirRelativeFromUserRootDir === null || !outDirRelativeFromUserRootDir.startsWith('/'));
166
- return (file) => !file.includes('node_modules/') &&
167
- !file.includes('ejected/') &&
168
- !file.includes('.telefunc.') &&
169
- (outDirRelativeFromUserRootDir === null || !file.startsWith(`${outDirRelativeFromUserRootDir}/`));
170
- }
171
135
  // Whether Git is installed and whether we can use it
172
136
  async function isGitNotUsable(userRootDir) {
173
137
  // Check Git version
@@ -222,9 +186,19 @@ async function runCmd2(cmd, cwd) {
222
186
  stderr = stderr.toString().trim();
223
187
  return { stdout, stderr };
224
188
  }
225
- function isGitCrawlDisabled() {
226
- const crawSettings = getEnvVarObject('VIKE_CRAWL');
227
- return crawSettings?.git === false;
189
+ function getUserSettings() {
190
+ const userSettings = getEnvVarObject('VIKE_CRAWL') ?? {};
191
+ const wrongUsage = (settingName, settingType) => `Setting ${pc.cyan(settingName)} in VIKE_CRAWL should be a ${pc.cyan(settingType)}`;
192
+ assertUsage(hasProp(userSettings, 'git', 'boolean') || hasProp(userSettings, 'git', 'undefined'), wrongUsage('git', 'boolean'));
193
+ assertUsage(hasProp(userSettings, 'ignore', 'string[]') ||
194
+ hasProp(userSettings, 'ignore', 'string') ||
195
+ hasProp(userSettings, 'ignore', 'undefined'), wrongUsage('git', 'string or an array of strings'));
196
+ assertUsage(hasProp(userSettings, 'ignoreBuiltIn', 'boolean') || hasProp(userSettings, 'ignoreBuiltIn', 'undefined'), wrongUsage('ignoreBuiltIn', 'boolean'));
197
+ const settingNames = ['git', 'ignore', 'ignoreBuiltIn'];
198
+ Object.keys(userSettings).forEach((name) => {
199
+ assertUsage(settingNames.includes(name), `Unknown setting ${pc.bold(pc.red(name))} in VIKE_CRAWL`);
200
+ });
201
+ return userSettings;
228
202
  }
229
203
  function isPlusFile(filePath) {
230
204
  assertPosixPath(filePath);
@@ -260,3 +234,15 @@ function assertNoUnexpectedPlusSign(filePath: string, fileName: string) {
260
234
  )
261
235
  }
262
236
  */
237
+ function getIgnore(userSettings) {
238
+ const ignorePatternsSetByUser = [userSettings.ignore].flat().filter(isNotNullish);
239
+ const { ignoreBuiltIn } = userSettings;
240
+ const ignorePatterns = [...(ignoreBuiltIn === false ? [] : ignorePatternsBuiltIn), ...ignorePatternsSetByUser];
241
+ const ignoreMatchers = ignorePatterns.map((p) => picomatch(p, {
242
+ // We must pass the same settings than tinyglobby
243
+ // https://github.com/SuperchupuDev/tinyglobby/blob/fcfb08a36c3b4d48d5488c21000c95a956d9797c/src/index.ts#L191-L194
244
+ dot: false,
245
+ nocase: false
246
+ }));
247
+ return { ignorePatterns, ignoreMatchers };
248
+ }
@@ -40,6 +40,7 @@ function getLogicalPath(locationId, ignoredDirs, removeParenthesesDirs) {
40
40
  assertIsPath(logicalPath);
41
41
  return logicalPath;
42
42
  }
43
+ // See getPlusFilesRelevant() and getPlusFilesOrdered()
43
44
  function sortAfterInheritanceOrder(locationId1, locationId2, locationIdPage) {
44
45
  assertLocationId(locationId1);
45
46
  assertLocationId(locationId2);
@@ -48,7 +49,7 @@ function sortAfterInheritanceOrder(locationId1, locationId2, locationIdPage) {
48
49
  const inheritanceRoot1 = getInheritanceRoot(locationId1);
49
50
  const inheritanceRoot2 = getInheritanceRoot(locationId2);
50
51
  const inheritanceRootPage = getInheritanceRoot(locationIdPage);
51
- // sortAfterInheritanceOrder() only works if both locationId1 and locationId2 are inherited by the same page
52
+ // Only works if both locationId1 and locationId2 are inherited by the same page
52
53
  assert(isInherited(locationId1, locationIdPage));
53
54
  assert(isInherited(locationId2, locationIdPage));
54
55
  // Equivalent assertion (see isInherited() implementation)
@@ -9,7 +9,7 @@ import { resolvePointerImport } from './resolvePointerImport.js';
9
9
  import { getFilePathResolved } from '../../../../shared/getFilePath.js';
10
10
  import { assertExtensionsConventions } from './assertExtensions.js';
11
11
  async function getPlusFilesAll(userRootDir, esbuildCache) {
12
- const plusFiles = await findPlusFiles(userRootDir, null);
12
+ const plusFiles = await findPlusFiles(userRootDir);
13
13
  const configFiles = [];
14
14
  const valueFiles = [];
15
15
  plusFiles.forEach((f) => {
@@ -112,8 +112,8 @@ function getPlusFileFromConfigFile(configFile, isExtensionConfig, locationId, us
112
112
  function sortMakeDeterministic(plusFile1, plusFile2) {
113
113
  return plusFile1.filePath.filePathAbsoluteVite < plusFile2.filePath.filePathAbsoluteVite ? -1 : 1;
114
114
  }
115
- async function findPlusFiles(userRootDir, outDirRoot) {
116
- const files = await crawlPlusFiles(userRootDir, outDirRoot);
115
+ async function findPlusFiles(userRootDir) {
116
+ const files = await crawlPlusFiles(userRootDir);
117
117
  const plusFiles = files.map(({ filePathAbsoluteUserRootDir }) => getFilePathResolved({ filePathAbsoluteUserRootDir, userRootDir }));
118
118
  return plusFiles;
119
119
  }
@@ -3,7 +3,6 @@ export { getConfigBuildErrorFormatted };
3
3
  export { getConfigExecutionErrorIntroMsg };
4
4
  export { isTemporaryBuildFile };
5
5
  export type { EsbuildCache };
6
- import 'source-map-support/register.js';
7
6
  import type { FilePathResolved } from '../../../../../../shared/page-configs/FilePath.js';
8
7
  type FileExports = {
9
8
  fileExports: Record<string, unknown>;
@@ -7,16 +7,17 @@ import fs from 'fs';
7
7
  import path from 'path';
8
8
  import pc from '@brillout/picocolors';
9
9
  import { import_ } from '@brillout/import';
10
- import { assertPosixPath, getRandomId, assertIsNotProductionRuntime, assert, assertWarning, isObject, toPosixPath, assertUsage, isPlainJavaScriptFile, createDebugger, assertFilePathAbsoluteFilesystem, assertIsNpmPackageImport, genPromise } from '../../../../utils.js';
10
+ import { assertPosixPath, getRandomId, assertIsNotProductionRuntime, assert, assertWarning, isObject, toPosixPath, assertUsage, isPlainJavaScriptFile, createDebugger, assertFilePathAbsoluteFilesystem, assertIsNpmPackageImport, genPromise, isVitest } from '../../../../utils.js';
11
11
  import { transformPointerImports } from './transformPointerImports.js';
12
12
  import { vikeConfigDependencies } from '../getVikeConfig.js';
13
- import 'source-map-support/register.js';
13
+ import sourceMapSupport from 'source-map-support';
14
14
  import { getFilePathAbsoluteUserRootDir } from '../../../../shared/getFilePath.js';
15
15
  import { createRequire } from 'module';
16
- // @ts-ignore Shimmed by dist-cjs-fixup.js for CJS build.
16
+ // @ts-ignore import.meta.url is shimmed at dist/cjs by dist-cjs-fixup.js.
17
17
  const importMetaUrl = import.meta.url;
18
18
  const require_ = createRequire(importMetaUrl);
19
19
  assertIsNotProductionRuntime();
20
+ installSourceMapSupport();
20
21
  const debug = createDebugger('vike:pointer-imports');
21
22
  const debugEsbuildResolve = createDebugger('vike:esbuild-resolve');
22
23
  if (debugEsbuildResolve.isActivated)
@@ -163,14 +164,17 @@ async function transpileWithEsbuild(filePath, userRootDir, transformImports) {
163
164
  // - vike@0.4.162 started soft-requiring Vike extensions to set the name config.
164
165
  // - In practice, it seems like it requires some (non-trivial?) refactoring.
165
166
  isVikeExtensionImport;
167
+ // Externalize npm package imports
166
168
  assertPosixPath(importPathResolved);
167
- const isNodeModules = importPathResolved.includes('/node_modules/');
169
+ const isNpmPkgImport = importPathResolved.includes('/node_modules/') ||
170
+ // Linked npm packages
171
+ !importPathResolved.startsWith(userRootDir);
168
172
  const isExternal = isPointerImport ||
169
173
  // Performance: npm package imports can be externalized. (We could as well let esbuild transpile /node_modules/ code but it's useless as /node_modules/ code is already built. It would unnecessarily slow down transpilation.)
170
- isNodeModules;
174
+ isNpmPkgImport;
171
175
  if (!isExternal) {
172
176
  // User-land config code (i.e. not runtime code) => let esbuild transpile it
173
- assert(!isPointerImport && !isNodeModules);
177
+ assert(!isPointerImport && !isNpmPkgImport);
174
178
  if (debug.isActivated)
175
179
  debug('onResolved()', { args, resolved, isPointerImport, isExternal });
176
180
  return resolved;
@@ -189,7 +193,7 @@ async function transpileWithEsbuild(filePath, userRootDir, transformImports) {
189
193
  userRootDir
190
194
  });
191
195
  // We assuming that path aliases always resolve inside `userRootDir`.
192
- if (filePathAbsoluteUserRootDir && !isNodeModules) {
196
+ if (filePathAbsoluteUserRootDir && !isNpmPkgImport) {
193
197
  // `importPathOriginal` is a path alias.
194
198
  // - We have to use esbuild's path alias resolution, because:
195
199
  // - Vike doesn't resolve path aliases at all.
@@ -211,7 +215,7 @@ async function transpileWithEsbuild(filePath, userRootDir, transformImports) {
211
215
  // Import of runtime code => handled by Vike
212
216
  isPointerImport ||
213
217
  // Import of config code => loaded by Node.js at build-time
214
- isNodeModules);
218
+ isNpmPkgImport);
215
219
  pointerImports[importPathTranspiled] = isPointerImport;
216
220
  return { external: true, path: importPathTranspiled };
217
221
  });
@@ -398,3 +402,11 @@ function cleanEsbuildErrors(errors) {
398
402
  // ```
399
403
  !note.text.includes('as external to exclude it from the bundle'))));
400
404
  }
405
+ function installSourceMapSupport() {
406
+ // Don't break Vitest's source mapping
407
+ if (isVitest())
408
+ return;
409
+ // How about other test runners?
410
+ // Should we call installSourceMapSupport() lazily in transpileAndExecuteFile() instead?
411
+ sourceMapSupport.install();
412
+ }
@@ -5,10 +5,11 @@ export { vikeConfigDependencies };
5
5
  export { isV1Design };
6
6
  export { getConfVal };
7
7
  export { getConfigDefinitionOptional };
8
+ export { isOverriden };
8
9
  export type { VikeConfigObject };
9
- import type { PageConfigGlobalBuildTime, PageConfigBuildTime } from '../../../../../shared/page-configs/PageConfig.js';
10
+ import type { PageConfigGlobalBuildTime, ConfigValueSource, PageConfigBuildTime } from '../../../../../shared/page-configs/PageConfig.js';
10
11
  import { type ConfigDefinitions, type ConfigDefinitionInternal } from './getVikeConfig/configDefinitionsBuiltIn.js';
11
- import type { ResolvedConfig } from 'vite';
12
+ import type { ResolvedConfig, UserConfig } from 'vite';
12
13
  import { type PageConfigUserFriendly, type PageConfigsUserFriendly } from '../../../../../shared/page-configs/getPageConfigUserFriendly.js';
13
14
  import { type PlusFile } from './getVikeConfig/getPlusFilesAll.js';
14
15
  type VikeConfigObject = {
@@ -23,11 +24,12 @@ declare function getVikeConfig(config: ResolvedConfig, { doNotRestartViteOnError
23
24
  doNotRestartViteOnError?: true;
24
25
  }): Promise<VikeConfigObject>;
25
26
  declare function getVikeConfig2(userRootDir: string, isDev: boolean, vikeVitePluginOptions: unknown): Promise<VikeConfigObject>;
26
- declare function isV1Design(config: ResolvedConfig): Promise<boolean>;
27
+ declare function isV1Design(config: ResolvedConfig | UserConfig): boolean;
27
28
  declare function getConfigDefinitionOptional(configDefinitions: ConfigDefinitions, configName: string): ConfigDefinitionInternal | null;
28
29
  declare function getConfVal(plusFile: PlusFile, configName: string): null | {
29
- configValue: unknown;
30
- configValueLoaded: true;
30
+ value: unknown;
31
+ valueIsLoaded: true;
31
32
  } | {
32
- configValueLoaded: false;
33
+ valueIsLoaded: false;
33
34
  };
35
+ declare function isOverriden(source: ConfigValueSource, configName: string, pageConfig: PageConfigBuildTime | PageConfigGlobalBuildTime): boolean;