vike 0.4.212 → 0.4.214
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.
- package/RenderErrorPage.js +3 -3
- package/__internal/loadImportBuild.js +3 -0
- package/__internal/setup.js +3 -3
- package/__internal.js +3 -3
- package/abort.js +3 -3
- package/api.js +3 -0
- package/cli.js +3 -3
- package/client/router.js +3 -3
- package/client.js +3 -3
- package/dist/cjs/client/server-routing-runtime/utils.js +2 -2
- package/dist/cjs/node/api/APIOptions.js +2 -0
- package/dist/cjs/node/api/build.js +50 -0
- package/dist/cjs/node/api/dev.js +10 -0
- package/dist/cjs/node/api/enhanceViteConfig.js +52 -0
- package/dist/cjs/node/api/index.js +36 -0
- package/dist/cjs/node/api/prerender.js +10 -0
- package/dist/cjs/node/api/preview.js +10 -0
- package/dist/cjs/node/cli/entry.js +100 -0
- package/dist/cjs/node/cli/index.js +8 -7
- package/dist/cjs/node/cli/parseCli.js +61 -0
- package/dist/cjs/node/cli/utils.js +3 -1
- package/dist/cjs/node/plugin/index.js +3 -1
- package/dist/cjs/node/plugin/plugins/autoFullBuild.js +5 -5
- package/dist/cjs/node/plugin/plugins/buildConfig.js +13 -10
- package/dist/cjs/node/plugin/plugins/commonConfig/pluginName.js +4 -0
- package/dist/cjs/node/plugin/plugins/commonConfig.js +13 -5
- package/dist/cjs/node/plugin/plugins/previewConfig.js +1 -1
- package/dist/cjs/node/plugin/plugins/vite6HmrRegressionWorkaround.js +35 -0
- package/dist/cjs/node/plugin/shared/getEnvVarObject.js +29 -0
- package/dist/cjs/node/plugin/utils.js +2 -2
- package/dist/cjs/node/prerender/index.js +9 -2
- package/dist/cjs/node/prerender/runPrerender.js +15 -9
- package/dist/cjs/node/runtime/globalContext.js +1 -1
- package/dist/cjs/node/runtime/utils.js +2 -1
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/assertNodeEnv.js +1 -1
- package/dist/esm/client/client-routing-runtime/utils.js +2 -2
- package/dist/esm/client/server-routing-runtime/utils.js +2 -2
- package/dist/esm/node/api/APIOptions.d.ts +10 -0
- package/dist/esm/node/api/build.d.ts +6 -0
- package/dist/esm/node/api/build.js +25 -0
- package/dist/esm/node/api/dev.d.ts +3 -0
- package/dist/esm/node/api/dev.js +8 -0
- package/dist/esm/node/api/enhanceViteConfig.d.ts +6 -0
- package/dist/esm/node/api/enhanceViteConfig.js +27 -0
- package/dist/esm/node/api/index.d.ts +12 -0
- package/dist/esm/node/api/index.js +10 -0
- package/dist/esm/node/api/prerender.d.ts +3 -0
- package/dist/esm/node/api/prerender.js +8 -0
- package/dist/esm/node/api/preview.d.ts +3 -0
- package/dist/esm/node/api/preview.js +8 -0
- package/dist/esm/node/cli/entry.d.ts +1 -0
- package/dist/esm/node/cli/entry.js +72 -0
- package/dist/esm/node/cli/index.d.ts +1 -2
- package/dist/esm/node/cli/index.js +4 -6
- package/dist/esm/node/cli/parseCli.d.ts +4 -0
- package/dist/esm/node/cli/parseCli.js +56 -0
- package/dist/esm/node/cli/utils.d.ts +1 -0
- package/dist/esm/node/cli/utils.js +3 -1
- package/dist/esm/node/plugin/index.js +3 -1
- package/dist/esm/node/plugin/plugins/autoFullBuild.js +6 -6
- package/dist/esm/node/plugin/plugins/buildConfig.js +13 -10
- package/dist/esm/node/plugin/plugins/commonConfig/pluginName.d.ts +1 -0
- package/dist/esm/node/plugin/plugins/commonConfig/pluginName.js +1 -0
- package/dist/esm/node/plugin/plugins/commonConfig.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/commonConfig.js +11 -3
- package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +1 -1
- package/dist/esm/node/plugin/plugins/previewConfig.js +1 -1
- package/dist/esm/node/plugin/plugins/vite6HmrRegressionWorkaround.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/vite6HmrRegressionWorkaround.js +33 -0
- package/dist/esm/node/plugin/shared/getEnvVarObject.d.ts +2 -0
- package/dist/esm/node/plugin/shared/getEnvVarObject.js +24 -0
- package/dist/esm/node/plugin/utils.js +2 -2
- package/dist/esm/node/prerender/index.d.ts +1 -1
- package/dist/esm/node/prerender/index.js +5 -1
- package/dist/esm/node/prerender/runPrerender.d.ts +7 -28
- package/dist/esm/node/prerender/runPrerender.js +15 -9
- package/dist/esm/node/runtime/globalContext.js +1 -1
- package/dist/esm/node/runtime/utils.js +2 -1
- package/dist/esm/shared/ConfigVike.d.ts +3 -9
- package/dist/esm/shared/page-configs/Config.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/assertNodeEnv.js +1 -1
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/dist-cjs-fixup.mjs +41 -0
- package/getPageContext.js +3 -0
- package/modifyUrl.js +3 -0
- package/node/cli/bin.js +3 -0
- package/package.json +43 -19
- package/plugin.js +3 -3
- package/prerender.js +3 -3
- package/routing.js +3 -3
- package/server.js +3 -3
- package/types.js +3 -0
- package/dist/cjs/node/cli/bin.js +0 -49
- package/dist/esm/node/cli/bin.js +0 -44
- package/node/cli/bin-entry.js +0 -3
- /package/dist/esm/node/{cli/bin.d.ts → api/APIOptions.js} +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.vite6HmrRegressionWorkaround = vite6HmrRegressionWorkaround;
|
|
4
|
+
// https://vite.dev/guide/migration (will be 404 after vite@7 release) > search for `hmrReload()`
|
|
5
|
+
// https://v6.vite.dev/guide/migration (will exist after vite@7 release) > search for `hmrReload()`
|
|
6
|
+
// Workaround seems to work for docs page /banner (which is HTML-only)
|
|
7
|
+
// But doesn't seem to work for /examples/render-modes/ (see https://github.com/vikejs/vike/pull/2069 commit `renable HMR test for HTML-only`)
|
|
8
|
+
function vite6HmrRegressionWorkaround() {
|
|
9
|
+
return {
|
|
10
|
+
name: 'vike:vite6HmrRegressionWorkaround',
|
|
11
|
+
enforce: 'post',
|
|
12
|
+
hotUpdate: {
|
|
13
|
+
order: 'post',
|
|
14
|
+
handler({ modules, server, timestamp }) {
|
|
15
|
+
if (this.environment.name !== 'ssr')
|
|
16
|
+
return;
|
|
17
|
+
let hasSsrOnlyModules = false;
|
|
18
|
+
const invalidatedModules = new Set();
|
|
19
|
+
for (const mod of modules) {
|
|
20
|
+
if (mod.id == null)
|
|
21
|
+
continue;
|
|
22
|
+
const clientModule = server.environments.client.moduleGraph.getModuleById(mod.id);
|
|
23
|
+
if (clientModule != null)
|
|
24
|
+
continue;
|
|
25
|
+
this.environment.moduleGraph.invalidateModule(mod, invalidatedModules, timestamp, true);
|
|
26
|
+
hasSsrOnlyModules = true;
|
|
27
|
+
}
|
|
28
|
+
if (hasSsrOnlyModules) {
|
|
29
|
+
server.ws.send({ type: 'full-reload' });
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getEnvVarObject = getEnvVarObject;
|
|
7
|
+
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
8
|
+
const utils_js_1 = require("../utils.js");
|
|
9
|
+
const json5_1 = __importDefault(require("json5"));
|
|
10
|
+
function getEnvVarObject(envVarName
|
|
11
|
+
/* Let's eventually implement this for Vike's config as well
|
|
12
|
+
| 'VIKE_CONFIG'
|
|
13
|
+
*/
|
|
14
|
+
) {
|
|
15
|
+
const valueStr = process.env[envVarName];
|
|
16
|
+
if (!valueStr)
|
|
17
|
+
return null;
|
|
18
|
+
let value;
|
|
19
|
+
try {
|
|
20
|
+
value = json5_1.default.parse(valueStr);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
console.error(err);
|
|
24
|
+
(0, utils_js_1.assertUsage)(false, `Cannot parse ${envVarName} (see error above) because it's set to the following which isn't a valid JSON5 string: ${picocolors_1.default.bold(valueStr)}`);
|
|
25
|
+
}
|
|
26
|
+
(0, utils_js_1.assertUsage)(value, `${envVarName} should define an object but it's ${picocolors_1.default.bold(String(value))} instead.`);
|
|
27
|
+
(0, utils_js_1.assertUsage)((0, utils_js_1.isObject)(value), `${envVarName} should define an object but it's set to the following which isn't an object: ${picocolors_1.default.bold(valueStr)}`);
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
@@ -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
|
|
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
|
|
5
|
-
Object.defineProperty(exports, "prerender", { enumerable: true, get: function () { return
|
|
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.
|
|
31
|
-
exports.
|
|
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
|
|
65
|
+
async function runPrerenderFromCLIPrerenderCommand() {
|
|
65
66
|
try {
|
|
66
|
-
await
|
|
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
|
|
78
|
+
async function runPrerenderFromAutoRun(viteConfig, forceExit) {
|
|
75
79
|
try {
|
|
76
|
-
await runPrerender(
|
|
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,
|
|
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)(
|
|
102
|
-
(0, utils_js_1.assertWarning)(prerenderConfig, `You're executing ${picocolors_1.default.cyan(
|
|
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('$
|
|
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
|
|
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);
|
|
@@ -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('$
|
|
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
|
|
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
|
|
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,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,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,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,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
|
-
|
|
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
|
-
|
|
3
|
-
import { assertWarning } from '
|
|
4
|
-
|
|
5
|
-
|
|
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,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 (only works for SSG apps)' },
|
|
8
|
+
{ name: 'prerender', desc: 'Pre-render pages (only needed when partial.disableAutoRun is true)' }
|
|
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,5 +1,7 @@
|
|
|
1
|
-
//
|
|
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';
|
|
@@ -27,6 +27,7 @@ import { fileEnv } from './plugins/fileEnv.js';
|
|
|
27
27
|
import { setResolveClientEntriesDev } from '../runtime/renderPage/getPageAssets.js';
|
|
28
28
|
import { resolveClientEntriesDev } from './resolveClientEntriesDev.js';
|
|
29
29
|
import { workaroundCssModuleHmr } from './plugins/workaroundCssModuleHmr.js';
|
|
30
|
+
import { vite6HmrRegressionWorkaround } from './plugins/vite6HmrRegressionWorkaround.js';
|
|
30
31
|
assertNodeEnv_onVikePluginLoad();
|
|
31
32
|
markEnvAsVikePluginLoaded();
|
|
32
33
|
assertViteVersion();
|
|
@@ -52,7 +53,8 @@ function plugin(vikeConfig) {
|
|
|
52
53
|
baseUrls(vikeConfig),
|
|
53
54
|
envVarsPlugin(),
|
|
54
55
|
fileEnv(),
|
|
55
|
-
workaroundCssModuleHmr()
|
|
56
|
+
workaroundCssModuleHmr(),
|
|
57
|
+
vite6HmrRegressionWorkaround()
|
|
56
58
|
];
|
|
57
59
|
return plugins;
|
|
58
60
|
}
|
|
@@ -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 {
|
|
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
|
|
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 {
|