vike 0.4.212 → 0.4.213

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 (94) hide show
  1. package/RenderErrorPage.js +3 -3
  2. package/__internal/loadImportBuild.js +3 -0
  3. package/__internal/setup.js +3 -3
  4. package/__internal.js +3 -3
  5. package/abort.js +3 -3
  6. package/api.js +3 -0
  7. package/cli.js +3 -3
  8. package/client/router.js +3 -3
  9. package/client.js +3 -3
  10. package/dist/cjs/client/server-routing-runtime/utils.js +2 -2
  11. package/dist/cjs/node/api/APIOptions.js +2 -0
  12. package/dist/cjs/node/api/build.js +50 -0
  13. package/dist/cjs/node/api/dev.js +10 -0
  14. package/dist/cjs/node/api/enhanceViteConfig.js +52 -0
  15. package/dist/cjs/node/api/index.js +36 -0
  16. package/dist/cjs/node/api/prerender.js +10 -0
  17. package/dist/cjs/node/api/preview.js +10 -0
  18. package/dist/cjs/node/cli/entry.js +100 -0
  19. package/dist/cjs/node/cli/index.js +8 -7
  20. package/dist/cjs/node/cli/parseCli.js +61 -0
  21. package/dist/cjs/node/cli/utils.js +3 -1
  22. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +5 -5
  23. package/dist/cjs/node/plugin/plugins/buildConfig.js +13 -10
  24. package/dist/cjs/node/plugin/plugins/commonConfig/pluginName.js +4 -0
  25. package/dist/cjs/node/plugin/plugins/commonConfig.js +13 -5
  26. package/dist/cjs/node/plugin/plugins/previewConfig.js +1 -1
  27. package/dist/cjs/node/plugin/shared/getEnvVarObject.js +29 -0
  28. package/dist/cjs/node/plugin/utils.js +2 -2
  29. package/dist/cjs/node/prerender/index.js +9 -2
  30. package/dist/cjs/node/prerender/runPrerender.js +15 -9
  31. package/dist/cjs/node/runtime/globalContext.js +1 -1
  32. package/dist/cjs/node/runtime/utils.js +2 -1
  33. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  34. package/dist/cjs/utils/assertNodeEnv.js +1 -1
  35. package/dist/esm/client/client-routing-runtime/utils.js +2 -2
  36. package/dist/esm/client/server-routing-runtime/utils.js +2 -2
  37. package/dist/esm/node/api/APIOptions.d.ts +10 -0
  38. package/dist/esm/node/api/build.d.ts +6 -0
  39. package/dist/esm/node/api/build.js +25 -0
  40. package/dist/esm/node/api/dev.d.ts +3 -0
  41. package/dist/esm/node/api/dev.js +8 -0
  42. package/dist/esm/node/api/enhanceViteConfig.d.ts +6 -0
  43. package/dist/esm/node/api/enhanceViteConfig.js +27 -0
  44. package/dist/esm/node/api/index.d.ts +12 -0
  45. package/dist/esm/node/api/index.js +10 -0
  46. package/dist/esm/node/api/prerender.d.ts +3 -0
  47. package/dist/esm/node/api/prerender.js +8 -0
  48. package/dist/esm/node/api/preview.d.ts +3 -0
  49. package/dist/esm/node/api/preview.js +8 -0
  50. package/dist/esm/node/cli/entry.d.ts +1 -0
  51. package/dist/esm/node/cli/entry.js +72 -0
  52. package/dist/esm/node/cli/index.d.ts +1 -2
  53. package/dist/esm/node/cli/index.js +4 -6
  54. package/dist/esm/node/cli/parseCli.d.ts +4 -0
  55. package/dist/esm/node/cli/parseCli.js +56 -0
  56. package/dist/esm/node/cli/utils.d.ts +1 -0
  57. package/dist/esm/node/cli/utils.js +3 -1
  58. package/dist/esm/node/plugin/plugins/autoFullBuild.js +6 -6
  59. package/dist/esm/node/plugin/plugins/buildConfig.js +13 -10
  60. package/dist/esm/node/plugin/plugins/commonConfig/pluginName.d.ts +1 -0
  61. package/dist/esm/node/plugin/plugins/commonConfig/pluginName.js +1 -0
  62. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +1 -1
  63. package/dist/esm/node/plugin/plugins/commonConfig.js +11 -3
  64. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +1 -1
  65. package/dist/esm/node/plugin/plugins/previewConfig.js +1 -1
  66. package/dist/esm/node/plugin/shared/getEnvVarObject.d.ts +2 -0
  67. package/dist/esm/node/plugin/shared/getEnvVarObject.js +24 -0
  68. package/dist/esm/node/plugin/utils.js +2 -2
  69. package/dist/esm/node/prerender/index.d.ts +1 -1
  70. package/dist/esm/node/prerender/index.js +5 -1
  71. package/dist/esm/node/prerender/runPrerender.d.ts +7 -28
  72. package/dist/esm/node/prerender/runPrerender.js +15 -9
  73. package/dist/esm/node/runtime/globalContext.js +1 -1
  74. package/dist/esm/node/runtime/utils.js +2 -1
  75. package/dist/esm/shared/ConfigVike.d.ts +2 -8
  76. package/dist/esm/shared/page-configs/Config.d.ts +1 -1
  77. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  78. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  79. package/dist/esm/utils/assertNodeEnv.js +1 -1
  80. package/dist/esm/utils/projectInfo.d.ts +1 -1
  81. package/dist-cjs-fixup.mjs +41 -0
  82. package/getPageContext.js +3 -0
  83. package/modifyUrl.js +3 -0
  84. package/node/cli/bin.js +3 -0
  85. package/package.json +31 -14
  86. package/plugin.js +3 -3
  87. package/prerender.js +3 -3
  88. package/routing.js +3 -3
  89. package/server.js +3 -3
  90. package/types.js +3 -0
  91. package/dist/cjs/node/cli/bin.js +0 -49
  92. package/dist/esm/node/cli/bin.js +0 -44
  93. package/node/cli/bin-entry.js +0 -3
  94. /package/dist/esm/node/{cli/bin.d.ts → api/APIOptions.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Utils needed by Vike's Vite plugin.
2
+ // Utils needed by Vike's Vite plugin
3
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
4
  if (k2 === undefined) k2 = k;
5
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -15,7 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- // We assume all runtime entries will load this utils.ts file
18
+ // We call onLoad() here so that it's called even when only a subset of the plugin is loaded. (Making the assert() calls inside onLoad() a lot stronger.)
19
19
  const onLoad_js_1 = require("./onLoad.js");
20
20
  (0, onLoad_js_1.onLoad)();
21
21
  // We tolerate the fact that we load all of the runtime utils even though some of it isn't needed
@@ -1,5 +1,12 @@
1
1
  "use strict";
2
+ // TODO/v1-release: remove this file
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
2
6
  Object.defineProperty(exports, "__esModule", { value: true });
3
7
  exports.prerender = void 0;
4
- var runPrerender_js_1 = require("./runPrerender.js");
5
- Object.defineProperty(exports, "prerender", { enumerable: true, get: function () { return runPrerender_js_1.runPrerenderFromAPI; } });
8
+ var prerender_js_1 = require("../api/prerender.js");
9
+ Object.defineProperty(exports, "prerender", { enumerable: true, get: function () { return prerender_js_1.prerender; } });
10
+ const assert_js_1 = require("../../utils/assert.js");
11
+ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
12
+ (0, assert_js_1.assertWarning)(false, `${picocolors_1.default.cyan("import { prerender } from 'vike/prerender'")} is deprecated in favor of ${picocolors_1.default.cyan("import { prerender } from 'vike/api'")}`, { onlyOnce: true });
@@ -27,8 +27,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.runPrerenderFromAPI = runPrerenderFromAPI;
30
- exports.runPrerenderFromCLI = runPrerenderFromCLI;
31
- exports.runPrerenderFromAutoFullBuild = runPrerenderFromAutoFullBuild;
30
+ exports.runPrerenderFromCLIPrerenderCommand = runPrerenderFromCLIPrerenderCommand;
31
+ exports.runPrerenderFromAutoRun = runPrerenderFromAutoRun;
32
32
  exports.runPrerender_forceExit = runPrerender_forceExit;
33
33
  require("../runtime/page-files/setup.js");
34
34
  const path_1 = __importDefault(require("path"));
@@ -56,32 +56,38 @@ const getVikeConfig_js_1 = require("../plugin/plugins/importUserCode/v1-design/g
56
56
  const logErrorHint_js_1 = require("../runtime/renderPage/logErrorHint.js");
57
57
  const executeHook_js_1 = require("../../shared/hooks/executeHook.js");
58
58
  const getConfigValueBuildTime_js_1 = require("../../shared/page-configs/getConfigValueBuildTime.js");
59
+ const enhanceViteConfig_js_1 = require("../api/enhanceViteConfig.js");
59
60
  async function runPrerenderFromAPI(options = {}) {
60
61
  await runPrerender(options, 'prerender()');
61
62
  // - We purposely propagate the error to the user land, so that the error interrupts the user land. It's also, I guess, a nice-to-have that the user has control over the error.
62
63
  // - We don't use logErrorHint() because we don't have control over what happens with the error. For example, if the user land purposely swallows the error then the hint shouldn't be logged. Also, it's best if the hint is shown to the user *after* the error, but we cannot do/guarentee that.
63
64
  }
64
- async function runPrerenderFromCLI(options) {
65
+ async function runPrerenderFromCLIPrerenderCommand() {
65
66
  try {
66
- await runPrerender(options, '$ vike prerender');
67
+ const { viteConfigEnhanced } = await (0, enhanceViteConfig_js_1.enhanceViteConfig)(undefined, 'prerender');
68
+ await runPrerender({ viteConfig: viteConfigEnhanced }, '$ vike prerender');
67
69
  }
68
70
  catch (err) {
69
71
  console.error(err);
72
+ // Error may come from user-land; we need to use logErrorHint()
70
73
  (0, logErrorHint_js_1.logErrorHint)(err);
71
74
  process.exit(1);
72
75
  }
76
+ runPrerender_forceExit();
73
77
  }
74
- async function runPrerenderFromAutoFullBuild(options) {
78
+ async function runPrerenderFromAutoRun(viteConfig, forceExit) {
75
79
  try {
76
- await runPrerender(options, null);
80
+ await runPrerender({ viteConfig });
77
81
  }
78
82
  catch (err) {
79
83
  console.error(err);
80
84
  (0, logErrorHint_js_1.logErrorHint)(err);
81
85
  process.exit(1);
82
86
  }
87
+ if (forceExit)
88
+ runPrerender_forceExit();
83
89
  }
84
- async function runPrerender(options, manuallyTriggered) {
90
+ async function runPrerender(options = {}, standaloneTrigger) {
85
91
  checkOutdatedOptions(options);
86
92
  (0, globalContext_js_1.setGlobalContext_isPrerendering)();
87
93
  (0, getHook_js_1.getHook_setIsPrerenderering)();
@@ -98,8 +104,8 @@ async function runPrerender(options, manuallyTriggered) {
98
104
  const { root } = viteConfig;
99
105
  const prerenderConfig = configVike.prerender;
100
106
  if (!prerenderConfig) {
101
- (0, utils_js_1.assert)(manuallyTriggered);
102
- (0, utils_js_1.assertWarning)(prerenderConfig, `You're executing ${picocolors_1.default.cyan(manuallyTriggered)} but the config ${picocolors_1.default.cyan('prerender')} isn't set to true`, {
107
+ (0, utils_js_1.assert)(standaloneTrigger);
108
+ (0, utils_js_1.assertWarning)(prerenderConfig, `You're executing ${picocolors_1.default.cyan(standaloneTrigger)} but the config ${picocolors_1.default.cyan('prerender')} isn't set to true`, {
103
109
  onlyOnce: true
104
110
  });
105
111
  }
@@ -219,7 +219,7 @@ function assertBuildEntries(buildEntries, isPreRendering) {
219
219
  const errMsg = [
220
220
  `You are tyring to run`,
221
221
  isPreRendering ? 'pre-rendering' : 'the server for production',
222
- `but your app isn't built yet. Run ${picocolors_1.default.cyan('$ vite build')} before `,
222
+ `but your app isn't built yet. Run ${picocolors_1.default.cyan('$ vike build')} before `,
223
223
  isPreRendering ? 'pre-rendering.' : 'running the server.'
224
224
  ].join(' ');
225
225
  (0, utils_js_1.assertUsage)(buildEntries, errMsg);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ // Utils needed by Vike's server runtime
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -15,7 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
16
  };
16
17
  Object.defineProperty(exports, "__esModule", { value: true });
17
18
  require("../../utils/trackLogs.js");
18
- // We assume all runtime entries will load this utils.ts file
19
+ // We call onLoad() here so that it's called even when only a subset of the runtime is loaded. (Making the assert() calls inside onLoad() a lot stronger.)
19
20
  const onLoad_js_1 = require("./onLoad.js");
20
21
  (0, onLoad_js_1.onLoad)();
21
22
  __exportStar(require("../../utils/assert.js"), exports);
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROJECT_VERSION = void 0;
4
4
  // Automatically updated by @brillout/release-me
5
- exports.PROJECT_VERSION = '0.4.212';
5
+ exports.PROJECT_VERSION = '0.4.213';
@@ -37,7 +37,7 @@ function assertNodeEnv_runtime(isViteDev) {
37
37
  return;
38
38
  const nodeEnvDesc = getNodeEnvDesc();
39
39
  // TODO: make it assertUsage() again once #1528 is implemented.
40
- const errMsg = `Running ${isViteDev ? picocolors_1.default.cyan('$ vite dev') : 'app in production'} while the ${nodeEnvDesc} which is contradictory, see https://vike.dev/NODE_ENV`;
40
+ const errMsg = `Running ${isViteDev ? picocolors_1.default.cyan('$ vike dev') : 'app in production'} while the ${nodeEnvDesc} which is contradictory, see https://vike.dev/NODE_ENV`;
41
41
  (0, assert_js_1.assertWarning)(false, errMsg, { onlyOnce: true });
42
42
  }
43
43
  function assertNodeEnv_onVikePluginLoad() {
@@ -1,5 +1,5 @@
1
- // Utils needed by Client Routing.
2
- // We assume all runtime entries will load this utils.ts file
1
+ // Utils needed by Vike's client runtime (with Client Routing)
2
+ // We call onLoad() here so that it's called even when only a subset of the runtime is loaded. (Making the assert() calls inside onLoad() a lot stronger.)
3
3
  import { onLoad } from './onLoad.js';
4
4
  onLoad();
5
5
  export * from '../../utils/assert.js';
@@ -1,5 +1,5 @@
1
- // Utils needed by Server Routing.
2
- // We assume all runtime entries will load this utils.ts file
1
+ // Utils needed by Vike's client runtime (with Server Routing)
2
+ // We call onLoad() here so that it's called even when only a subset of the runtime is loaded. (Making the assert() calls inside onLoad() a lot stronger.)
3
3
  import { onLoad } from './onLoad.js';
4
4
  onLoad();
5
5
  export * from '../../utils/assert.js';
@@ -0,0 +1,10 @@
1
+ export { APIOptions };
2
+ import type { InlineConfig } from 'vite';
3
+ type APIOptions = {
4
+ /**
5
+ * Vite config.
6
+ *
7
+ * https://vike.dev/api
8
+ */
9
+ viteConfig?: InlineConfig;
10
+ };
@@ -0,0 +1,6 @@
1
+ export { build };
2
+ import type { APIOptions } from './APIOptions.js';
3
+ declare function build(options?: APIOptions): Promise<{
4
+ outputClient: import("rollup").RollupOutput | import("rollup").RollupOutput[] | import("rollup").RollupWatcher;
5
+ outputServer: import("rollup").RollupOutput | import("rollup").RollupOutput[] | import("rollup").RollupWatcher;
6
+ }>;
@@ -0,0 +1,25 @@
1
+ export { build };
2
+ import { enhanceViteConfig } from './enhanceViteConfig.js';
3
+ import { build as buildVite } from 'vite';
4
+ async function build(options = {}) {
5
+ const { viteConfigEnhanced, configVike } = await enhanceViteConfig(options.viteConfig, 'build');
6
+ // Build client-side
7
+ const outputClient = await buildVite(viteConfigEnhanced);
8
+ // Build server-side
9
+ const outputServer = await buildVite(setSSR(viteConfigEnhanced));
10
+ // Pre-render
11
+ if (configVike.prerender && !configVike.prerender.disableAutoRun && configVike.disableAutoFullBuild !== 'prerender') {
12
+ const { runPrerenderFromAutoRun } = await import('../prerender/runPrerender.js');
13
+ await runPrerenderFromAutoRun(viteConfigEnhanced, true);
14
+ }
15
+ return { outputClient, outputServer };
16
+ }
17
+ function setSSR(viteConfig) {
18
+ return {
19
+ ...viteConfig,
20
+ build: {
21
+ ...viteConfig.build,
22
+ ssr: true
23
+ }
24
+ };
25
+ }
@@ -0,0 +1,3 @@
1
+ export { dev };
2
+ import type { APIOptions } from './APIOptions.js';
3
+ declare function dev(options?: APIOptions): Promise<import("vite").ViteDevServer>;
@@ -0,0 +1,8 @@
1
+ export { dev };
2
+ import { enhanceViteConfig } from './enhanceViteConfig.js';
3
+ import { createServer } from 'vite';
4
+ async function dev(options = {}) {
5
+ const { viteConfigEnhanced } = await enhanceViteConfig(options.viteConfig, 'dev');
6
+ const server = await createServer(viteConfigEnhanced);
7
+ return server;
8
+ }
@@ -0,0 +1,6 @@
1
+ export { enhanceViteConfig };
2
+ import type { InlineConfig } from 'vite';
3
+ declare function enhanceViteConfig(viteConfig: InlineConfig | undefined, command: 'build' | 'dev' | 'preview' | 'prerender'): Promise<{
4
+ viteConfigEnhanced: InlineConfig;
5
+ configVike: import("../../shared/ConfigVike.js").ConfigVikeResolved;
6
+ }>;
@@ -0,0 +1,27 @@
1
+ export { enhanceViteConfig };
2
+ import { resolveConfig } from 'vite';
3
+ import { getConfigVike } from '../shared/getConfigVike.js';
4
+ import { pluginName } from '../plugin/plugins/commonConfig/pluginName.js';
5
+ async function enhanceViteConfig(viteConfig = {}, command) {
6
+ let viteConfigResolved = await resolveViteConfig(viteConfig, command);
7
+ let viteConfigEnhanced = viteConfig;
8
+ // Add vike to plugins if not present
9
+ if (!viteConfigResolved.plugins.some((p) => p.name === pluginName)) {
10
+ // Using a dynamic import because the script calling the Vike API may not live in the same place as vite.config.js, thus have vike/plugin may resolved to two different node_modules/vike directories
11
+ const { plugin: vikePlugin } = await import('../plugin/index.js');
12
+ viteConfigEnhanced = {
13
+ ...viteConfig,
14
+ plugins: [...(viteConfig.plugins ?? []), vikePlugin()]
15
+ };
16
+ viteConfigResolved = await resolveViteConfig(viteConfigEnhanced, command);
17
+ }
18
+ const configVike = await getConfigVike(viteConfigResolved);
19
+ // TODO: enable Vike extensions to add Vite plugins
20
+ return {
21
+ viteConfigEnhanced,
22
+ configVike
23
+ };
24
+ }
25
+ async function resolveViteConfig(viteConfig, command) {
26
+ return await resolveConfig(viteConfig, command === 'build' || command === 'prerender' ? 'build' : 'serve', 'custom', command === 'dev' ? 'development' : 'production', command === 'preview');
27
+ }
@@ -0,0 +1,12 @@
1
+ export { build_ as build };
2
+ export { dev_ as dev };
3
+ export { preview_ as preview };
4
+ export { prerender_ as prerender };
5
+ import type { build } from './build.js';
6
+ import type { dev } from './dev.js';
7
+ import type { preview } from './preview.js';
8
+ import type { prerender } from './prerender.js';
9
+ declare const build_: typeof build;
10
+ declare const dev_: typeof dev;
11
+ declare const preview_: typeof preview;
12
+ declare const prerender_: typeof prerender;
@@ -0,0 +1,10 @@
1
+ export { build_ as build };
2
+ export { dev_ as dev };
3
+ export { preview_ as preview };
4
+ export { prerender_ as prerender };
5
+ import { assertIsNotBrowser } from '../../utils/assertIsNotBrowser.js';
6
+ assertIsNotBrowser();
7
+ const build_ = async (...args) => (await import('./build.js')).build(...args);
8
+ const dev_ = async (...args) => (await import('./dev.js')).dev(...args);
9
+ const preview_ = async (...args) => (await import('./preview.js')).preview(...args);
10
+ const prerender_ = async (...args) => (await import('./prerender.js')).prerender(...args);
@@ -0,0 +1,3 @@
1
+ export { prerender };
2
+ import { type PrerenderOptions } from '../prerender/runPrerender.js';
3
+ declare function prerender(options?: PrerenderOptions): Promise<void>;
@@ -0,0 +1,8 @@
1
+ export { prerender };
2
+ import { runPrerenderFromAPI } from '../prerender/runPrerender.js';
3
+ import { enhanceViteConfig } from './enhanceViteConfig.js';
4
+ async function prerender(options = {}) {
5
+ const { viteConfigEnhanced } = await enhanceViteConfig(options.viteConfig, 'prerender');
6
+ options.viteConfig = viteConfigEnhanced;
7
+ await runPrerenderFromAPI(options);
8
+ }
@@ -0,0 +1,3 @@
1
+ export { preview };
2
+ import type { APIOptions } from './APIOptions.js';
3
+ declare function preview(options?: APIOptions): Promise<import("vite").PreviewServer>;
@@ -0,0 +1,8 @@
1
+ export { preview };
2
+ import { enhanceViteConfig } from './enhanceViteConfig.js';
3
+ import { preview as previewVite } from 'vite';
4
+ async function preview(options = {}) {
5
+ const { viteConfigEnhanced } = await enhanceViteConfig(options.viteConfig, 'preview');
6
+ const server = await previewVite(viteConfigEnhanced);
7
+ return server;
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,72 @@
1
+ import { projectInfo } from './utils.js';
2
+ import { dev, build, preview } from '../api/index.js';
3
+ import pc from '@brillout/picocolors';
4
+ import { parseCli } from './parseCli.js';
5
+ cli();
6
+ async function cli() {
7
+ const { command } = parseCli();
8
+ if (command === 'dev') {
9
+ await cmdDev();
10
+ }
11
+ else if (command === 'build') {
12
+ await cmdBuild();
13
+ }
14
+ else if (command === 'preview') {
15
+ await cmdPreview();
16
+ }
17
+ else if (command === 'prerender') {
18
+ await cmdPrerender();
19
+ }
20
+ }
21
+ async function cmdDev() {
22
+ const startTime = performance.now();
23
+ try {
24
+ const server = await dev();
25
+ await server.listen();
26
+ const info = server.config.logger.info;
27
+ const startupDurationString = pc.dim(`ready in ${pc.reset(pc.bold(String(Math.ceil(performance.now() - startTime))))} ms`);
28
+ const hasExistingLogs = process.stdout.bytesWritten > 0 || process.stderr.bytesWritten > 0;
29
+ info(` ${pc.yellow(`${pc.bold(projectInfo.projectName)} v${projectInfo.projectVersion}`)} ${startupDurationString}\n`, {
30
+ clear: !hasExistingLogs
31
+ });
32
+ server.printUrls();
33
+ server.bindCLIShortcuts({ print: true });
34
+ }
35
+ catch (err) {
36
+ console.error(pc.red(`Error while starting dev server:`));
37
+ // Error comes from Vite; no need to use logErrorHint()
38
+ console.error(err);
39
+ process.exit(1);
40
+ }
41
+ }
42
+ async function cmdBuild() {
43
+ try {
44
+ await build();
45
+ }
46
+ catch (err) {
47
+ console.error(pc.red(`Error during build:`));
48
+ // Error comes from Vite; no need to use logErrorHint()
49
+ console.error(err);
50
+ process.exit(1);
51
+ }
52
+ }
53
+ async function cmdPreview() {
54
+ try {
55
+ const server = await preview();
56
+ server.printUrls();
57
+ server.bindCLIShortcuts({ print: true });
58
+ }
59
+ catch (err) {
60
+ console.error(pc.red(`Error while starting preview server:`));
61
+ // Error comes from Vite; no need to use logErrorHint()
62
+ console.error(err);
63
+ process.exit(1);
64
+ }
65
+ }
66
+ async function cmdPrerender() {
67
+ const { runPrerenderFromCLIPrerenderCommand } = await import('../prerender/runPrerender.js');
68
+ await runPrerenderFromCLIPrerenderCommand();
69
+ }
70
+ process.on('unhandledRejection', (rejectValue) => {
71
+ throw rejectValue;
72
+ });
@@ -1,2 +1 @@
1
- import { prerender as prerenderOriginal } from '../prerender/index.js';
2
- export declare const prerender: typeof prerenderOriginal;
1
+ export { prerender } from '../api/prerender.js';
@@ -1,7 +1,5 @@
1
1
  // TODO/v1-release: remove this file
2
- import { prerender as prerenderOriginal } from '../prerender/index.js';
3
- import { assertWarning } from './utils.js';
4
- export const prerender = (options) => {
5
- assertWarning(false, "`import { prerender } from 'vike/cli'` is deprecated in favor of `import { prerender } from 'vike/prerender'``", { onlyOnce: true, showStackTrace: true });
6
- return prerenderOriginal(options);
7
- };
2
+ export { prerender } from '../api/prerender.js';
3
+ import { assertWarning } from '../../utils/assert.js';
4
+ import pc from '@brillout/picocolors';
5
+ assertWarning(false, `${pc.cyan("import { prerender } from 'vike/cli'")} is deprecated in favor of ${pc.cyan("import { prerender } from 'vike/api'")}`, { onlyOnce: true });
@@ -0,0 +1,4 @@
1
+ export { parseCli };
2
+ declare function parseCli(): {
3
+ command: "build" | "dev" | "preview" | "prerender";
4
+ };
@@ -0,0 +1,56 @@
1
+ export { parseCli };
2
+ import pc from '@brillout/picocolors';
3
+ import { projectInfo, includes } from './utils.js';
4
+ const commands = [
5
+ { name: 'dev', desc: 'Start development server' },
6
+ { name: 'build', desc: 'Build for production' },
7
+ { name: 'preview', desc: 'Start preview server using production build' },
8
+ { name: 'prerender', desc: 'Pre-render pages' }
9
+ ];
10
+ function parseCli() {
11
+ const command = (() => {
12
+ const firstArg = process.argv[2];
13
+ if (!firstArg) {
14
+ showHelp();
15
+ }
16
+ showHelpOrVersion(firstArg);
17
+ if (includes(commands.map((c) => c.name), firstArg))
18
+ return firstArg;
19
+ wrongUsage(`Unknown command ${pc.bold(firstArg)}`);
20
+ })();
21
+ for (const arg of process.argv.slice(3)) {
22
+ showHelpOrVersion(arg);
23
+ wrongUsage(`Unknown option ${pc.bold(arg)}`);
24
+ }
25
+ return { command };
26
+ }
27
+ function showHelp() {
28
+ const TAB = ' '.repeat(3);
29
+ const nameMaxLength = Math.max(...commands.map((c) => c.name.length));
30
+ console.log([
31
+ `vike@${projectInfo.projectVersion}`,
32
+ '',
33
+ 'Usage:',
34
+ ...[...commands, { name: '-v', desc: "Print Vike's installed version" }].map((c) => ` ${pc.dim('$')} ${pc.bold(`vike ${c.name}`)}${' '.repeat(nameMaxLength - c.name.length)}${TAB}${pc.dim(`# ${c.desc}`)}`),
35
+ '',
36
+ `More infos at ${pc.underline('https://vike.dev/cli')}`
37
+ ].join('\n'));
38
+ process.exit(1);
39
+ }
40
+ function showHelpOrVersion(arg) {
41
+ if (arg === '--version' || arg === '-v' || arg === '--v') {
42
+ showVersion();
43
+ }
44
+ if (arg === '--help' || arg === '-h' || arg === '--h') {
45
+ showHelp();
46
+ }
47
+ }
48
+ function showVersion() {
49
+ console.log(projectInfo.projectVersion);
50
+ process.exit(1);
51
+ }
52
+ function wrongUsage(msg) {
53
+ console.error(pc.red(msg));
54
+ console.log();
55
+ showHelp();
56
+ }
@@ -1,2 +1,3 @@
1
1
  export * from '../../utils/assert.js';
2
2
  export * from '../../utils/projectInfo.js';
3
+ export * from '../../utils/includes.js';
@@ -1,5 +1,7 @@
1
- // We assume all runtime entries will load this utils.ts file
1
+ // Utils needed by Vike's CLI
2
+ // We call onLoad() here so that it's called even when only a subset of the CLI is loaded. (Making the assert() calls inside onLoad() a lot stronger.)
2
3
  import { onLoad } from './onLoad.js';
3
4
  onLoad();
4
5
  export * from '../../utils/assert.js';
5
6
  export * from '../../utils/projectInfo.js';
7
+ export * from '../../utils/includes.js';
@@ -1,13 +1,17 @@
1
+ // TODO/v1-release: remove this file
1
2
  export { autoFullBuild };
2
3
  import { build } from 'vite';
3
4
  import { assertWarning } from '../utils.js';
4
- import { runPrerenderFromAutoFullBuild, runPrerender_forceExit } from '../../prerender/runPrerender.js';
5
+ import { runPrerenderFromAutoRun, runPrerender_forceExit } from '../../prerender/runPrerender.js';
5
6
  import { getConfigVike } from '../../shared/getConfigVike.js';
6
7
  import { isViteCliCall, getViteConfigFromCli } from '../shared/isViteCliCall.js';
7
8
  import pc from '@brillout/picocolors';
8
9
  import { logErrorHint } from '../../runtime/renderPage/logErrorHint.js';
9
10
  import { manifestTempFile } from './buildConfig.js';
10
11
  let forceExit = false;
12
+ assertWarning(!isViteCliCall(), `Vite's CLI is deprecated ${pc.underline('https://vike.dev/migration/cli')}`, {
13
+ onlyOnce: true
14
+ });
11
15
  function autoFullBuild() {
12
16
  let config;
13
17
  let configVike;
@@ -89,7 +93,7 @@ async function triggerFullBuild(config, configVike, bundle) {
89
93
  process.exit(1);
90
94
  }
91
95
  if (configVike.prerender && !configVike.prerender.disableAutoRun && configVike.disableAutoFullBuild !== 'prerender') {
92
- await runPrerenderFromAutoFullBuild({ viteConfig: configInline });
96
+ await runPrerenderFromAutoRun(configInline, false);
93
97
  forceExit = true;
94
98
  }
95
99
  }
@@ -102,10 +106,6 @@ function abortViteBuildSsr(configVike) {
102
106
  function isDisabled(configVike) {
103
107
  const { disableAutoFullBuild } = configVike;
104
108
  if (disableAutoFullBuild === null || disableAutoFullBuild === 'prerender') {
105
- // TODO/v1-release: remove autoFullBuild for both Vite's build() API and Vite's CLI
106
- // - Tell users to use `$ vike build` instead of `$ vite build`
107
- // - Remove the whole writeBundle() hook logic
108
- // - make `$ vite build` only build the client-side
109
109
  return !isViteCliCall();
110
110
  }
111
111
  else {
@@ -54,16 +54,19 @@ function buildConfig() {
54
54
  }
55
55
  }
56
56
  },
57
- config(config) {
58
- assertNodeEnv_build();
59
- isSsrBuild = viteIsSSR(config);
60
- return {
61
- build: {
62
- outDir: resolveOutDir(config),
63
- manifest: manifestTempFile,
64
- copyPublicDir: !isSsrBuild
65
- }
66
- };
57
+ config: {
58
+ order: 'post',
59
+ handler(config) {
60
+ assertNodeEnv_build();
61
+ isSsrBuild = viteIsSSR(config);
62
+ return {
63
+ build: {
64
+ outDir: resolveOutDir(config),
65
+ manifest: manifestTempFile,
66
+ copyPublicDir: !isSsrBuild
67
+ }
68
+ };
69
+ }
67
70
  },
68
71
  buildStart() {
69
72
  assertNodeEnv_build();
@@ -0,0 +1 @@
1
+ export declare const pluginName = "vike:commonConfig-1";
@@ -0,0 +1 @@
1
+ export const pluginName = 'vike:commonConfig-1';
@@ -1,3 +1,3 @@
1
1
  export { commonConfig };
2
- import type { Plugin } from 'vite';
2
+ import { type Plugin } from 'vite';
3
3
  declare function commonConfig(): Plugin[];
@@ -1,11 +1,13 @@
1
1
  export { commonConfig };
2
+ import { mergeConfig } from 'vite';
2
3
  import { assert, assertUsage, assertWarning, findPackageJson, isDocker } from '../utils.js';
3
4
  import { assertRollupInput } from './buildConfig.js';
4
5
  import { installRequireShim_setUserRootDir } from '@brillout/require-shim';
5
6
  import pc from '@brillout/picocolors';
6
7
  import path from 'path';
7
8
  import { assertResolveAlias } from './commonConfig/assertResolveAlias.js';
8
- const pluginName = 'vike:commonConfig-1';
9
+ import { pluginName } from './commonConfig/pluginName.js';
10
+ import { getEnvVarObject } from '../shared/getEnvVarObject.js';
9
11
  function commonConfig() {
10
12
  return [
11
13
  {
@@ -30,21 +32,27 @@ function commonConfig() {
30
32
  assertEsm(config.root);
31
33
  }
32
34
  },
33
- // Override Vite's default port without overriding the user
34
35
  config: {
35
36
  order: 'post',
36
37
  handler(configFromUser) {
37
- const configFromVike = { server: {}, preview: {} };
38
+ // Change default port
39
+ let configFromVike = { server: {}, preview: {} };
38
40
  setDefault('port', 3000, configFromUser, configFromVike);
41
+ // Set `--host` for Docker/Podman
39
42
  if (isDocker()) {
40
43
  setDefault('host', true, configFromUser, configFromVike);
41
44
  }
45
+ // VITE_CONFIG
46
+ const configFromEnvVar = getEnvVarObject('VITE_CONFIG');
47
+ if (configFromEnvVar)
48
+ configFromVike = mergeConfig(configFromEnvVar, configFromVike);
42
49
  return configFromVike;
43
50
  }
44
51
  }
45
52
  }
46
53
  ];
47
54
  }
55
+ // Override Vite's default value without overriding user settings
48
56
  function setDefault(setting, value, configFromUser, configFromVike) {
49
57
  if (configFromUser.server?.[setting] === undefined)
50
58
  configFromVike.server[setting] = value;
@@ -2,7 +2,7 @@
2
2
  // - Remove this file then revert this commit: https://github.com/vikejs/vike/commit/805a18974f13420a78fcc30fdd676696e405c3ca
3
3
  // Workaround to make client-side bundles include the CSS imports living in server-side-only code.
4
4
  // - This is needed for HTML-only pages, and React Server Components.
5
- // - We recommend using the debug flag to get an idea of how this plugin works: `$ DEBUG=vike:extractAssets pnpm exec vite build`. Then have a look at `dist/client/manifest.json` and see how `.page.server.js` entries have zero JavaScript but only CSS.
5
+ // - We recommend using the debug flag to get an idea of how this plugin works: `$ DEBUG=vike:extractAssets pnpm exec vike build`. Then have a look at `dist/client/manifest.json` and see how `.page.server.js` entries have zero JavaScript but only CSS.
6
6
  // - This appraoch supports import path aliases `vite.config.js#resolve.alias` https://vitejs.dev/config/#resolve-alias
7
7
  export { extractAssetsPlugin };
8
8
  export { extractAssetsRE };