vike 0.4.259 → 0.4.260

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 (83) 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} +99 -68
  15. package/dist/node/api/startupLog.d.ts +4 -0
  16. package/dist/node/api/{getStartupLogFirstLine.js → startupLog.js} +15 -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 +25 -11
  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/optimizeDeps.js +67 -31
  35. package/dist/node/vite/plugins/pluginStripPointerImportAttribute.js +31 -10
  36. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFilePageEntry.js +5 -7
  37. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.d.ts +2 -2
  38. package/dist/node/vite/shared/addSsrMiddleware.js +1 -1
  39. package/dist/node/vite/shared/isVite8OrAbove.d.ts +4 -0
  40. package/dist/node/vite/shared/isVite8OrAbove.js +9 -0
  41. package/dist/node/vite/shared/isViteCli.d.ts +9 -4
  42. package/dist/node/vite/shared/isViteCli.js +24 -4
  43. package/dist/node/vite/shared/loggerDev.js +6 -5
  44. package/dist/node/vite/shared/resolveVikeConfigInternal/assertExtensions.d.ts +2 -0
  45. package/dist/node/vite/shared/resolveVikeConfigInternal/assertExtensions.js +6 -5
  46. package/dist/node/vite/shared/resolveVikeConfigInternal/crawlPlusFilePaths.js +1 -0
  47. package/dist/node/vite/shared/resolveVikeConfigInternal/getPlusFilesByLocationId.d.ts +3 -1
  48. package/dist/node/vite/shared/resolveVikeConfigInternal/getPlusFilesByLocationId.js +15 -13
  49. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.d.ts +15 -15
  50. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.js +15 -0
  51. package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +18 -3
  52. package/dist/node/vite/shared/resolveVikeConfigInternal.js +213 -72
  53. package/dist/server/runtime/globalContext.js +4 -1
  54. package/dist/server/runtime/renderPageServer/createPageContextServer.d.ts +12 -3
  55. package/dist/server/runtime/renderPageServer/html/injectAssets/getHtmlTags.js +2 -3
  56. package/dist/server/runtime/renderPageServer/html/serializeContext.js +5 -10
  57. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +8 -2
  58. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +32 -8
  59. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +1 -1
  60. package/dist/server/runtime/renderPageServer.d.ts +8 -2
  61. package/dist/server/runtime/renderPageServer.js +6 -4
  62. package/dist/shared-server-client/page-configs/serialize/serializeConfigValues.d.ts +3 -3
  63. package/dist/shared-server-client/page-configs/serialize/serializeConfigValues.js +8 -1
  64. package/dist/types/Config.d.ts +34 -6
  65. package/dist/types/PageConfig.d.ts +11 -9
  66. package/dist/types/PageContext.d.ts +8 -3
  67. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  68. package/dist/utils/PROJECT_VERSION.js +1 -1
  69. package/dist/utils/assert.d.ts +2 -0
  70. package/dist/utils/assert.js +8 -8
  71. package/dist/utils/debug.d.ts +1 -1
  72. package/dist/utils/debug.js +1 -0
  73. package/dist/utils/getViteRPC.js +1 -1
  74. package/dist/utils/objectMap.d.ts +2 -0
  75. package/dist/utils/objectMap.js +4 -0
  76. package/dist/utils/parseNpmPackage.js +4 -1
  77. package/dist/utils/pick.d.ts +1 -1
  78. package/package.json +13 -15
  79. package/dist/node/api/getStartupLogFirstLine.d.ts +0 -7
  80. package/dist/server/__internal/vite.d.ts +0 -2
  81. package/dist/server/__internal/vite.js +0 -2
  82. package/dist/server/runtime/renderPageServer/html/injectAssets/sanitizeJson.d.ts +0 -4
  83. package/dist/server/runtime/renderPageServer/html/injectAssets/sanitizeJson.js +0 -7
@@ -1,4 +1,5 @@
1
1
  export type { ApiOptions };
2
+ export type { ApiOptionsStartupLog };
2
3
  export type { ApiOperation };
3
4
  import type { InlineConfig } from 'vite';
4
5
  import type { Config } from '../../types/Config.js';
@@ -16,4 +17,12 @@ type ApiOptions = {
16
17
  */
17
18
  vikeConfig?: Config;
18
19
  };
20
+ type ApiOptionsStartupLog = {
21
+ /**
22
+ * Whether to print Vike's startup log.
23
+ *
24
+ * https://vike.dev/api
25
+ */
26
+ startupLog?: boolean;
27
+ };
19
28
  type ApiOperation = 'build' | 'dev' | 'preview' | 'prerender';
@@ -46,11 +46,7 @@ async function cmdBuild() {
46
46
  }
47
47
  async function cmdPreview() {
48
48
  try {
49
- const { viteServer } = await preview();
50
- if (viteServer) {
51
- viteServer.printUrls();
52
- viteServer.bindCLIShortcuts({ print: true });
53
- }
49
+ await preview({ startupLog: true });
54
50
  }
55
51
  catch (err) {
56
52
  console.error(pc.red(`Error while starting preview server:`));
@@ -29,28 +29,41 @@ function getCommand() {
29
29
  function getCliOptions() {
30
30
  let cliOptions = {};
31
31
  let configNameCurrent;
32
- const commitIfDefinedWithoutValue = () => {
32
+ const addConfig = (configValue) => {
33
+ assert(configNameCurrent);
34
+ cliOptions[configNameCurrent] = configValue;
35
+ configNameCurrent = undefined;
36
+ };
37
+ const addConfigWithoutValue = () => {
33
38
  if (configNameCurrent)
34
- commit(true);
39
+ addConfig(true);
35
40
  };
36
- const commit = (val) => {
41
+ const addConfigWithValue = (configValueStr) => {
37
42
  assert(configNameCurrent);
38
- cliOptions[configNameCurrent] = val;
39
- configNameCurrent = undefined;
43
+ addConfig(parseJson5(configValueStr, `CLI option --${configNameCurrent}`));
40
44
  };
41
45
  for (const arg of process.argv.slice(3)) {
42
46
  showHelpOrVersion(arg);
43
47
  if (arg.startsWith('--')) {
44
- commitIfDefinedWithoutValue();
45
- configNameCurrent = arg.slice('--'.length);
48
+ addConfigWithoutValue();
49
+ const str = arg.slice('--'.length);
50
+ const eqIdx = str.indexOf('=');
51
+ if (eqIdx === -1) {
52
+ configNameCurrent = str;
53
+ }
54
+ else {
55
+ configNameCurrent = str.slice(0, eqIdx);
56
+ const configValueStr = str.slice(eqIdx + 1);
57
+ addConfigWithValue(configValueStr);
58
+ }
46
59
  }
47
60
  else {
48
61
  if (!configNameCurrent)
49
62
  wrongUsage(`Unknown option ${pc.bold(arg)}`);
50
- commit(parseJson5(arg, `CLI option --${configNameCurrent}`));
63
+ addConfigWithValue(arg);
51
64
  }
52
65
  }
53
- commitIfDefinedWithoutValue();
66
+ addConfigWithoutValue();
54
67
  return cliOptions;
55
68
  }
56
69
  function showHelp() {
@@ -65,9 +78,10 @@ function showHelp() {
65
78
  'Common CLI options:',
66
79
  [
67
80
  `vike dev ${pc.cyan('--host')} ${TAB}${pc.dim('# Make server available over LAN and public addresses')}`,
68
- `vike dev ${pc.cyan('--port')} 80 ${TAB}${pc.dim('# Change the server port')}`,
69
- `vike build ${pc.cyan('--mode')} staging${TAB}${pc.dim('# Set the mode to run in')}`,
81
+ `vike dev ${pc.cyan('--port')} 80 ${TAB}${pc.dim('# Set server port')}`,
82
+ `vike dev ${pc.cyan('--root')} src ${TAB}${pc.dim('# Set project root directory')}`,
70
83
  `vike dev ${pc.cyan('--force')} ${TAB}${pc.dim("# Disable Vite's cache")}`,
84
+ `vike build ${pc.cyan('--mode')} staging${TAB}${pc.dim('# Set mode (e.g. development, production, staging)')}`,
71
85
  ]
72
86
  .map((o) => ` ${pc.dim('$')} ${o}`)
73
87
  .join('\n'),
@@ -18,8 +18,8 @@ async function createDevMiddleware(options = {}) {
18
18
  },
19
19
  },
20
20
  };
21
- const { viteConfigFromUserResolved } = await prepareViteApiCall(optionsMod, 'dev');
22
- const server = await createServer(viteConfigFromUserResolved);
21
+ const { viteConfigUser } = await prepareViteApiCall(optionsMod, 'dev');
22
+ const server = await createServer(viteConfigUser);
23
23
  const devMiddleware = server.middlewares;
24
24
  return { devMiddleware, viteServer: server, viteConfig: server.config };
25
25
  }
@@ -72,7 +72,10 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
72
72
  isPrerendering: boolean;
73
73
  _requestId: number;
74
74
  } & import("../../types/PageContext.js").PageContextInit & {
75
- _reqDev?: import("http").IncomingMessage;
75
+ _nodeDev?: {
76
+ req: import("http").IncomingMessage;
77
+ res: import("http").ServerResponse;
78
+ };
76
79
  _reqWeb?: Request;
77
80
  } & {
78
81
  _globalContext: ({
@@ -148,7 +151,10 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
148
151
  _baseServer: string;
149
152
  _baseAssets: string;
150
153
  _pageContextInit: import("../../types/PageContext.js").PageContextInit & {
151
- _reqDev?: import("http").IncomingMessage;
154
+ _nodeDev?: {
155
+ req: import("http").IncomingMessage;
156
+ res: import("http").ServerResponse;
157
+ };
152
158
  _reqWeb?: Request;
153
159
  } & {
154
160
  headers?: Record<string, unknown>;
@@ -20,6 +20,7 @@ import { pLimit } from '../../utils/pLimit.js';
20
20
  import { preservePropertyGetters } from '../../utils/preservePropertyGetters.js';
21
21
  import { assertPosixPath } from '../../utils/path.js';
22
22
  import { urlToFile } from '../../utils/urlToFile.js';
23
+ import { prependBase } from '../../utils/parseUrl-extras.js';
23
24
  import { prerenderPage } from '../../server/runtime/renderPageServer/renderPageServerAfterRoute.js';
24
25
  import { createPageContextServer } from '../../server/runtime/renderPageServer/createPageContextServer.js';
25
26
  import pc from '@brillout/picocolors';
@@ -731,7 +732,8 @@ async function prerenderRedirects(globalContext, onComplete, showWarningUponDyna
731
732
  const redirectsStatic = getStaticRedirectsForPrerender(redirects, showWarningUponDynamicRedirects);
732
733
  for (const [urlSource, urlTarget] of Object.entries(redirectsStatic)) {
733
734
  const urlOriginal = urlSource;
734
- const htmlString = getRedirectHtml(urlTarget);
735
+ const urlTargetWithBase = urlTarget.startsWith('/') ? prependBase(urlTarget, globalContext.baseServer) : urlTarget;
736
+ const htmlString = getRedirectHtml(urlTargetWithBase);
735
737
  await onComplete({
736
738
  pageContext: { urlOriginal, pageId: null, is404: false, isRedirect: true },
737
739
  htmlString,
@@ -19,8 +19,8 @@ async function runPrerenderFromAPI(options = {}) {
19
19
  }
20
20
  async function runPrerenderFromCLIPrerenderCommand() {
21
21
  try {
22
- const { viteConfigFromUserResolved } = await prepareViteApiCall({}, 'prerender');
23
- await runPrerender({ viteConfig: viteConfigFromUserResolved }, '$ vike prerender');
22
+ const { viteConfigUser } = await prepareViteApiCall({}, 'prerender');
23
+ await runPrerender({ viteConfig: viteConfigUser }, '$ vike prerender');
24
24
  }
25
25
  catch (err) {
26
26
  // Error may come from user-land
@@ -37,7 +37,7 @@ import { pluginReplaceConstantsNonRunnableDev } from './plugins/non-runnable-dev
37
37
  import { isVikeCliOrApi } from '../../shared-server-node/api-context.js';
38
38
  import { pluginViteConfigVikeExtensions } from './plugins/pluginViteConfigVikeExtensions.js';
39
39
  import { pluginStripPointerImportAttribute } from './plugins/pluginStripPointerImportAttribute.js';
40
- import { getVikeConfigInternalEarly, isOnlyResolvingUserConfig } from '../api/resolveViteConfigFromUser.js';
40
+ import { getVikeConfigInternalEarly, isResolvingViteConfigUser } from '../api/resolveViteConfigUser.js';
41
41
  import './assertEnvVite.js';
42
42
  import { isStorybook } from '../../utils/isStorybook.js';
43
43
  import { pluginUniversalDeploy } from './plugins/pluginUniversalDeploy.js';
@@ -96,7 +96,7 @@ function pluginNonRunnabeDev() {
96
96
  }
97
97
  function removeVitePlugin() {
98
98
  // Early resolving of user Vite configs
99
- if (isOnlyResolvingUserConfig()) {
99
+ if (isResolvingViteConfigUser()) {
100
100
  return true;
101
101
  }
102
102
  // *****************/
@@ -4,18 +4,14 @@ export { handleAssetsManifest_isFixEnabled };
4
4
  export { handleAssetsManifest_assertUsageCssCodeSplit };
5
5
  export { handleAssetsManifest_assertUsageCssTarget };
6
6
  export { handleAssetsManifest_alignCssTarget };
7
- import type { Environment, ResolvedConfig, Rollup } from 'vite';
7
+ import type { Environment, ResolvedConfig, Rollup, UserConfig } from 'vite';
8
8
  import '../../assertEnvVite.js';
9
9
  type Bundle = Rollup.OutputBundle;
10
10
  declare function handleAssetsManifest_isFixEnabled(): boolean;
11
11
  declare function handleAssetsManifest_assertUsageCssCodeSplit(config: ResolvedConfig): void;
12
12
  declare function handleAssetsManifest_alignCssTarget(config: ResolvedConfig): void;
13
13
  declare function handleAssetsManifest_assertUsageCssTarget(config: ResolvedConfig, env: Environment): void;
14
- declare function handleAssetsManifest_getBuildConfig(): Promise<{
15
- readonly ssrEmitAssets: true | undefined;
16
- readonly cssMinify: "esbuild" | undefined;
17
- readonly manifest: true;
18
- }>;
14
+ declare function handleAssetsManifest_getBuildConfig(config: UserConfig): Promise<import("vite").BuildEnvironmentOptions>;
19
15
  declare function handleAssetsManifest(config: ResolvedConfig, viteEnv: Environment, options: {
20
16
  dir: string | undefined;
21
17
  }, bundle: Bundle): Promise<void>;
@@ -16,6 +16,7 @@ import { pLimit } from '../../../../utils/pLimit.js';
16
16
  import { unique } from '../../../../utils/unique.js';
17
17
  import { parseVirtualFileId } from '../../../../shared-server-node/virtualFileId.js';
18
18
  import { getAssetsDir } from '../../shared/getAssetsDir.js';
19
+ import { isVite8OrAbove } from '../../shared/isVite8OrAbove.js';
19
20
  import pc from '@brillout/picocolors';
20
21
  import { isV1Design } from '../../shared/resolveVikeConfigInternal.js';
21
22
  import { getOutDirs } from '../../shared/getOutDirs.js';
@@ -297,18 +298,24 @@ async function writeManifestFile(manifest, manifestFilePath) {
297
298
  const manifestFileContent = JSON.stringify(manifest, null, 2);
298
299
  await fs.writeFile(manifestFilePath, manifestFileContent, 'utf-8');
299
300
  }
300
- async function handleAssetsManifest_getBuildConfig() {
301
+ async function handleAssetsManifest_getBuildConfig(config) {
301
302
  const isFixEnabled = handleAssetsManifest_isFixEnabled();
302
- return {
303
+ // Set default values (i.e. allow user to override these values)
304
+ const build = {};
305
+ if (isFixEnabled) {
303
306
  // https://github.com/vikejs/vike/issues/1339
304
- ssrEmitAssets: isFixEnabled ? true : undefined,
307
+ if (config.build?.ssrEmitAssets === undefined)
308
+ build.ssrEmitAssets = true;
305
309
  // Required if `ssrEmitAssets: true`, see https://github.com/vitejs/vite/pull/11430#issuecomment-1454800934
306
- cssMinify: isFixEnabled ? 'esbuild' : undefined,
307
- manifest: true,
308
- /* Already set by vike:build:pluginBuildApp
309
- copyPublicDir: !isViteServerSide_viteEnvOptional(config),
310
- */
311
- };
310
+ if (config.build?.cssMinify === undefined)
311
+ build.cssMinify = isVite8OrAbove(config) ? true : 'esbuild';
312
+ }
313
+ if (config.build?.manifest === undefined)
314
+ build.manifest = true;
315
+ /* Already set by vike:build:pluginBuildApp
316
+ if (config.build?.copyPublicDir === undefined) build.copyPublicDir = !isViteServerSide_viteEnvOptional(config)
317
+ */
318
+ return build;
312
319
  }
313
320
  async function handleAssetsManifest(config, viteEnv, options, bundle) {
314
321
  const isSsrEnv = isViteServerSide_onlySsrEnv(config, viteEnv);
@@ -5,7 +5,7 @@ import { assert, assertWarning } from '../../../../utils/assert.js';
5
5
  import { onSetupBuild } from '../../../../utils/assertSetup.js';
6
6
  import { getGlobalObject } from '../../../../utils/getGlobalObject.js';
7
7
  import { isPrerenderAutoRunEnabled, wasPrerenderRun } from '../../../prerender/context.js';
8
- import { isViteCli, getViteConfigForBuildFromCli } from '../../shared/isViteCli.js';
8
+ import { isViteCli, getViteBuildCliArgs } from '../../shared/isViteCli.js';
9
9
  import pc from '@brillout/picocolors';
10
10
  import { getVikeConfigInternal } from '../../shared/resolveVikeConfigInternal.js';
11
11
  import { isVikeCliOrApi } from '../../../../shared-server-node/api-context.js';
@@ -20,6 +20,7 @@ const globalObject = getGlobalObject('build/pluginBuildApp.ts', {
20
20
  });
21
21
  function pluginBuildApp() {
22
22
  let config;
23
+ let alreadyBuilt = false;
23
24
  return [
24
25
  {
25
26
  name: 'vike:build:pluginBuildApp:pre',
@@ -32,11 +33,15 @@ function pluginBuildApp() {
32
33
  builder: {
33
34
  // Can be overridden by another plugin e.g vike-vercel https://github.com/vikejs/vike/pull/2184#issuecomment-2659425195
34
35
  async buildApp(builder) {
36
+ if (alreadyBuilt)
37
+ return;
38
+ alreadyBuilt = true;
35
39
  assert(builder.environments.client);
36
40
  assert(builder.environments.ssr);
37
41
  await builder.build(builder.environments.client);
38
42
  await builder.build(builder.environments.ssr);
39
43
  if (isPrerenderForceExit()) {
44
+ await builder.buildApp();
40
45
  runPrerender_forceExit();
41
46
  assert(false);
42
47
  }
@@ -141,7 +146,7 @@ async function triggerPrerendering(config, viteEnv, bundle) {
141
146
  }
142
147
  async function abortViteBuildSsr() {
143
148
  const vikeConfig = await getVikeConfigInternal();
144
- if (vikeConfig.config.disableAutoFullBuild !== true && isViteCli() && getViteConfigForBuildFromCli()?.build.ssr) {
149
+ if (vikeConfig.config.disableAutoFullBuild !== true && isViteCli() && getViteBuildCliArgs()?.build.ssr) {
145
150
  assertWarning(false, `The CLI call ${pc.cyan('$ vite build --ssr')} is superfluous since ${pc.cyan('$ vite build')} also builds the server-side. If you want two separate build steps then use https://vike.dev/disableAutoFullBuild or use Vite's ${pc.cyan('build()')} API.`, { onlyOnce: true });
146
151
  process.exit(0);
147
152
  }
@@ -160,9 +165,9 @@ function isPrerenderForceExit() {
160
165
  return globalObject.forceExit;
161
166
  }
162
167
  function getFullBuildInlineConfig(config) {
163
- const configFromCli = !isViteCli() ? null : getViteConfigForBuildFromCli();
164
- if (config._viteConfigFromUserResolved) {
165
- return config._viteConfigFromUserResolved;
168
+ const configFromCli = !isViteCli() ? null : getViteBuildCliArgs();
169
+ if (config._viteConfigUser) {
170
+ return config._viteConfigUser;
166
171
  }
167
172
  else {
168
173
  return {
@@ -3,11 +3,16 @@ export { assertRollupInput };
3
3
  export { analyzeClientEntries };
4
4
  import type { ResolvedConfig, Plugin } from 'vite';
5
5
  import type { PageConfigBuildTime } from '../../../../types/PageConfig.js';
6
+ import type { FilePath } from '../../../../types/FilePath.js';
6
7
  import '../../assertEnvVite.js';
7
8
  declare function pluginBuildConfig(): Plugin[];
9
+ type ClientEntry = {
10
+ entryTarget: string;
11
+ entryFilePath: null | FilePath;
12
+ };
8
13
  declare function analyzeClientEntries(pageConfigs: PageConfigBuildTime[], config: ResolvedConfig): {
9
14
  hasClientRouting: boolean;
10
15
  hasServerRouting: boolean;
11
- clientEntries: Record<string, string>;
16
+ clientEntries: Record<string, ClientEntry>;
12
17
  };
13
18
  declare function assertRollupInput(config: ResolvedConfig): void;
@@ -8,12 +8,13 @@ import { assertImportIsNpmPackage } from '../../../../utils/parseNpmPackage.js';
8
8
  import { removeFileExtension } from '../../../../utils/removeFileExtension.js';
9
9
  import { requireResolveDistFile } from '../../../../utils/requireResolve.js';
10
10
  import { unique } from '../../../../utils/unique.js';
11
+ import { objectMap } from '../../../../utils/objectMap.js';
11
12
  import { getVikeConfigInternal } from '../../shared/resolveVikeConfigInternal.js';
12
13
  import { findPageFiles } from '../../shared/findPageFiles.js';
13
14
  import { generateVirtualFileId } from '../../../../shared-server-node/virtualFileId.js';
14
15
  import { extractAssetsAddQuery } from '../../../../shared-server-node/extractAssetsQuery.js';
15
16
  import { prependEntriesDir } from '../../../../shared-server-node/prependEntriesDir.js';
16
- import { getFilePathResolved } from '../../shared/getFilePath.js';
17
+ import { getFilePathResolved, getFilePathUnresolved } from '../../shared/getFilePath.js';
17
18
  import { getConfigValueBuildTime } from '../../../../shared-server-client/page-configs/getConfigValueBuildTime.js';
18
19
  import { isViteServerSide_viteEnvOptional } from '../../shared/isViteServerSide.js';
19
20
  import { handleAssetsManifest_assertUsageCssCodeSplit, handleAssetsManifest_getBuildConfig, handleAssetsManifest_alignCssTarget, } from './handleAssetsManifest.js';
@@ -40,9 +41,9 @@ function pluginBuildConfig() {
40
41
  },
41
42
  config: {
42
43
  order: 'post',
43
- async handler() {
44
+ async handler(config) {
44
45
  onSetupBuild();
45
- const build = await handleAssetsManifest_getBuildConfig();
46
+ const build = await handleAssetsManifest_getBuildConfig(config);
46
47
  return { build };
47
48
  },
48
49
  },
@@ -76,7 +77,7 @@ async function getEntries(config) {
76
77
  hasServerRouting = true;
77
78
  }
78
79
  const entries = {
79
- ...clientEntries,
80
+ ...objectMap(clientEntries, (clientEntry) => clientEntry.entryTarget),
80
81
  ...pageFileEntries,
81
82
  };
82
83
  const clientRoutingEntry = requireResolveDistFile('dist/client/runtime-client-routing/entry.js');
@@ -113,8 +114,8 @@ function analyzeClientEntries(pageConfigs, config) {
113
114
  }
114
115
  {
115
116
  // Ensure Rollup generates a bundle per page: https://github.com/vikejs/vike/issues/349#issuecomment-1166247275
116
- const { entryName, entryTarget } = getEntryFromPageConfig(pageConfig, true);
117
- clientEntries[entryName] = entryTarget;
117
+ const { entryName, entryTarget, entryFilePath } = getEntryFromPageConfig(pageConfig, true);
118
+ clientEntries[entryName] = { entryTarget, entryFilePath };
118
119
  }
119
120
  {
120
121
  const clientEntry = getConfigValueBuildTime(pageConfig, 'client', 'string')?.value ?? null;
@@ -125,8 +126,8 @@ function analyzeClientEntries(pageConfigs, config) {
125
126
  });
126
127
  clientEntryList = unique(clientEntryList);
127
128
  clientEntryList.forEach((clientEntry) => {
128
- const { entryName, entryTarget } = getEntryFromClientEntry(clientEntry, config);
129
- clientEntries[entryName] = entryTarget;
129
+ const { entryName, entryTarget, entryFilePath } = getEntryFromClientEntry(clientEntry, config);
130
+ clientEntries[entryName] = { entryTarget, entryFilePath };
130
131
  });
131
132
  return { hasClientRouting, hasServerRouting, clientEntries };
132
133
  }
@@ -157,7 +158,8 @@ function getEntryFromClientEntry(clientEntry, config, addExtractAssetsQuery) {
157
158
  assertImportIsNpmPackage(clientEntry);
158
159
  const entryTarget = clientEntry;
159
160
  const entryName = prependEntriesDir(clientEntry);
160
- return { entryName, entryTarget };
161
+ const entryFilePath = getFilePathUnresolved({ importPathAbsolute: clientEntry });
162
+ return { entryName, entryTarget, entryFilePath };
161
163
  }
162
164
  const filePathAbsoluteUserRootDir = clientEntry;
163
165
  assert(filePathAbsoluteUserRootDir.startsWith('/'));
@@ -173,7 +175,7 @@ function getEntryFromClientEntry(clientEntry, config, addExtractAssetsQuery) {
173
175
  entryName = extractAssetsAddQuery(entryName);
174
176
  entryName = removeFileExtension(entryName);
175
177
  entryName = prependEntriesDir(entryName);
176
- return { entryName, entryTarget };
178
+ return { entryName, entryTarget, entryFilePath: filePath };
177
179
  }
178
180
  function getEntryFromPageConfig(pageConfig, isForClientSide) {
179
181
  let { pageId } = pageConfig;
@@ -188,7 +190,7 @@ function getEntryFromPageConfig(pageConfig, isForClientSide) {
188
190
  entryName = 'root';
189
191
  entryName = prependEntriesDir(entryName);
190
192
  assert(!entryName.endsWith('/'));
191
- return { entryName, entryTarget };
193
+ return { entryName, entryTarget, entryFilePath: null };
192
194
  }
193
195
  function addLogHook() {
194
196
  const tty = process.stdout.isTTY && !process.env.CI; // Equals https://github.com/vitejs/vite/blob/193d55c7b9cbfec5b79ebfca276d4a721e7de14d/packages/vite/src/node/plugins/reporter.ts#L27
@@ -11,7 +11,7 @@ import crypto from 'node:crypto';
11
11
  import { getAssetsDir } from '../../shared/getAssetsDir.js';
12
12
  import { assertModuleId, getFilePathToShowToUserModule } from '../../shared/getFilePath.js';
13
13
  import '../../assertEnvVite.js';
14
- import { isVersionMatch } from '../../../../utils/assertVersion.js';
14
+ import { isVite8OrAbove } from '../../shared/isVite8OrAbove.js';
15
15
  function pluginDistFileNames() {
16
16
  return [
17
17
  {
@@ -291,11 +291,6 @@ function getCssChunkName(id, config) {
291
291
  return `${name}-${hash}`;
292
292
  }
293
293
  }
294
- function isVite8OrAbove(config) {
295
- const viteVersion = config._viteVersionResolved;
296
- assert(viteVersion);
297
- return isVersionMatch(viteVersion, ['8.0.0']);
298
- }
299
294
  function getRollupOutputs(config) {
300
295
  var _a, _b;
301
296
  // @ts-expect-error is read-only
@@ -1,8 +1,8 @@
1
1
  export { pluginModuleBanner };
2
2
  import { assert } from '../../../../utils/assert.js';
3
- import { isVersionMatch } from '../../../../utils/assertVersion.js';
4
3
  import { removeVirtualFileIdPrefix } from '../../../../utils/virtualFileId.js';
5
4
  import { getMagicString } from '../../shared/getMagicString.js';
5
+ import { isVite8OrAbove } from '../../shared/isVite8OrAbove.js';
6
6
  import '../../assertEnvVite.js';
7
7
  // Misusing legal comments so that esbuild doesn't remove them.
8
8
  // - Legal comments: https://esbuild.github.io/api/#legal-comments
@@ -68,7 +68,5 @@ function checkIsEnabled(config) {
68
68
  // - https://github.com/vitejs/vite/issues/21228#issuecomment-3627899741
69
69
  // - TO-DO/eventually: remove this file once Vike requires Vite 8 or above
70
70
  function hasNativeModuleRegions(config) {
71
- const viteVersion = config._viteVersionResolved;
72
- assert(viteVersion);
73
- return isVersionMatch(viteVersion, ['8.0.0']);
71
+ return isVite8OrAbove(config);
74
72
  }
@@ -8,7 +8,7 @@ declare module 'vite' {
8
8
  _isDev?: boolean;
9
9
  _rootResolvedEarly?: string;
10
10
  _baseViteOriginal?: string;
11
- _viteConfigFromUserResolved?: InlineConfig;
11
+ _viteConfigUser?: InlineConfig;
12
12
  _viteVersionResolved?: string;
13
13
  }
14
14
  }
@@ -9,7 +9,7 @@ import { assertRollupInput } from './build/pluginBuildConfig.js';
9
9
  import pc from '@brillout/picocolors';
10
10
  import { assertResolveAlias } from './pluginCommon/assertResolveAlias.js';
11
11
  import { getVikeConfigInternal, setVikeConfigContext } from '../shared/resolveVikeConfigInternal.js';
12
- import { assertViteRoot, getViteRoot, normalizeViteRoot } from '../../api/resolveViteConfigFromUser.js';
12
+ import { assertViteRoot, getViteRoot, normalizeViteRoot } from '../../api/resolveViteConfigUser.js';
13
13
  import { temp_disablePrerenderAutoRun } from '../../prerender/context.js';
14
14
  import { version as viteVersionVike } from 'vite';
15
15
  import '../assertEnvVite.js';
@@ -79,26 +79,29 @@ function pluginCommon(vikeVitePluginOptions) {
79
79
  config: {
80
80
  order: 'post',
81
81
  async handler(configFromUser) {
82
- let configFromVike = { server: {}, preview: {} };
82
+ const configFromVike = { server: {}, preview: {} };
83
83
  const vikeConfig = await getVikeConfigInternal();
84
+ // A value the user set through Vike (+config.js, CLI option, or VIKE_CONFIG) overrides vite.config.js:
85
+ // Vike's config has higher precedence than vite.config.js (see precedence list at resolveViteConfigUser.ts).
86
+ // Vike's own fallbacks (default port, Docker `--host`) use setDefault() so they don't override vite.config.js.
84
87
  if (vikeConfig.config.port !== undefined) {
85
88
  // https://vike.dev/port
86
- setDefault('port', vikeConfig.config.port, configFromUser, configFromVike);
89
+ setOverride('port', vikeConfig.config.port, configFromVike);
87
90
  }
88
91
  else {
89
92
  // Change Vite's default port
90
93
  setDefault('port', 3000, configFromUser, configFromVike);
91
94
  }
92
- if (vikeConfig.config.host) {
95
+ if (vikeConfig.config.host !== undefined) {
93
96
  // https://vike.dev/host
94
- setDefault('host', vikeConfig.config.host, configFromUser, configFromVike);
97
+ setOverride('host', vikeConfig.config.host, configFromVike);
95
98
  }
96
99
  else if (isDocker()) {
97
100
  // Set `--host` for Docker/Podman
98
101
  setDefault('host', true, configFromUser, configFromVike);
99
102
  }
100
103
  // https://vike.dev/force
101
- if (vikeConfig.config.force !== undefined && configFromUser.optimizeDeps?.force === undefined) {
104
+ if (vikeConfig.config.force !== undefined) {
102
105
  configFromVike.optimizeDeps ?? (configFromVike.optimizeDeps = {});
103
106
  configFromVike.optimizeDeps.force = vikeConfig.config.force;
104
107
  }
@@ -108,7 +111,12 @@ function pluginCommon(vikeVitePluginOptions) {
108
111
  },
109
112
  ];
110
113
  }
111
- // Override Vite's default value without overriding user settings
114
+ // Apply a Vike-provided value, overriding vite.config.js (Vike's config has higher precedence than vite.config.js)
115
+ function setOverride(setting, value, configFromVike) {
116
+ configFromVike.server[setting] = value;
117
+ configFromVike.preview[setting] = value;
118
+ }
119
+ // Apply a Vike fallback without overriding the user's vite.config.js
112
120
  function setDefault(setting, value, configFromUser, configFromVike) {
113
121
  if (configFromUser.server?.[setting] === undefined)
114
122
  configFromVike.server[setting] = value;