vike 0.4.231-commit-e23b4f5 → 0.4.231-commit-8978b32
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/dist/cjs/node/api/build.js +5 -1
- package/dist/cjs/node/api/prerender.js +2 -2
- package/dist/cjs/node/cli/entry.js +1 -1
- package/dist/cjs/node/prerender/context.js +6 -6
- package/dist/cjs/node/prerender/runPrerender.js +7 -53
- package/dist/cjs/node/prerender/runPrerenderEntry.js +55 -0
- package/dist/cjs/node/vite/plugins/pluginBuild/pluginAutoFullBuild.js +19 -16
- package/dist/cjs/node/vite/plugins/pluginBuild/pluginBuildApp.js +2 -2
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/genPromise.js +20 -14
- package/dist/esm/node/api/build.js +6 -2
- package/dist/esm/node/api/prerender.d.ts +1 -1
- package/dist/esm/node/api/prerender.js +1 -1
- package/dist/esm/node/cli/entry.js +1 -1
- package/dist/esm/node/prerender/context.d.ts +5 -4
- package/dist/esm/node/prerender/context.js +6 -6
- package/dist/esm/node/prerender/runPrerender.d.ts +9 -16
- package/dist/esm/node/prerender/runPrerender.js +8 -54
- package/dist/esm/node/prerender/runPrerenderEntry.d.ts +14 -0
- package/dist/esm/node/prerender/runPrerenderEntry.js +53 -0
- package/dist/esm/node/vite/plugins/pluginBuild/pluginAutoFullBuild.js +18 -15
- package/dist/esm/node/vite/plugins/pluginBuild/pluginBuildApp.js +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/genPromise.d.ts +3 -1
- package/dist/esm/utils/genPromise.js +20 -14
- package/package.json +1 -1
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.build = build;
|
|
4
4
|
const prepareViteApiCall_js_1 = require("./prepareViteApiCall.js");
|
|
5
5
|
const vite_1 = require("vite");
|
|
6
|
+
const context_js_1 = require("../cli/context.js");
|
|
7
|
+
const context_js_2 = require("../prerender/context.js");
|
|
6
8
|
const utils_js_1 = require("./utils.js");
|
|
7
9
|
/**
|
|
8
10
|
* Programmatically trigger `$ vike build`
|
|
@@ -32,7 +34,9 @@ async function build(options = {}) {
|
|
|
32
34
|
// > Rationale: https://github.com/vikejs/vike/issues/2123
|
|
33
35
|
await (0, vite_1.build)(viteConfigFromUserEnhanced);
|
|
34
36
|
// After pre-rendering, when using the Vike CLI, the process is forcefully exited at the end of the buildVite() call above.
|
|
35
|
-
|
|
37
|
+
const prerenderTrigger = (0, context_js_2.wasPrerenderRun)();
|
|
38
|
+
if ((0, context_js_1.isVikeCli)() && prerenderTrigger && prerenderTrigger !== 'prerender()')
|
|
39
|
+
(0, utils_js_1.assert)(false);
|
|
36
40
|
}
|
|
37
41
|
return {
|
|
38
42
|
/* We don't return `viteConfig` because `viteConfigFromUserEnhanced` is `InlineConfig` not `ResolvedConfig`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.prerender = prerender;
|
|
4
|
-
const
|
|
4
|
+
const runPrerenderEntry_js_1 = require("../prerender/runPrerenderEntry.js");
|
|
5
5
|
const prepareViteApiCall_js_1 = require("./prepareViteApiCall.js");
|
|
6
6
|
/**
|
|
7
7
|
* Programmatically trigger `$ vike prerender`
|
|
@@ -11,7 +11,7 @@ const prepareViteApiCall_js_1 = require("./prepareViteApiCall.js");
|
|
|
11
11
|
async function prerender(options = {}) {
|
|
12
12
|
const { viteConfigFromUserEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options, 'prerender');
|
|
13
13
|
options.viteConfig = viteConfigFromUserEnhanced;
|
|
14
|
-
const { viteConfig } = await (0,
|
|
14
|
+
const { viteConfig } = await (0, runPrerenderEntry_js_1.runPrerenderFromAPI)(options);
|
|
15
15
|
return {
|
|
16
16
|
viteConfig
|
|
17
17
|
};
|
|
@@ -113,7 +113,7 @@ async function cmdPreview() {
|
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
async function cmdPrerender() {
|
|
116
|
-
const { runPrerenderFromCLIPrerenderCommand } = await Promise.resolve().then(() => __importStar(require('../prerender/
|
|
116
|
+
const { runPrerenderFromCLIPrerenderCommand } = await Promise.resolve().then(() => __importStar(require('../prerender/runPrerenderEntry.js')));
|
|
117
117
|
await runPrerenderFromCLIPrerenderCommand();
|
|
118
118
|
}
|
|
119
119
|
process.on('unhandledRejection', (rejectValue) => {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isPrerenderAutoRunEnabled = isPrerenderAutoRunEnabled;
|
|
4
4
|
exports.temp_disablePrerenderAutoRun = temp_disablePrerenderAutoRun;
|
|
5
|
-
exports.
|
|
6
|
-
exports.
|
|
5
|
+
exports.wasPrerenderRun = wasPrerenderRun;
|
|
6
|
+
exports.setWasPrerenderRun = setWasPrerenderRun;
|
|
7
7
|
const getGlobalObject_js_1 = require("../../utils/getGlobalObject.js");
|
|
8
8
|
const resolvePrerenderConfig_js_1 = require("./resolvePrerenderConfig.js");
|
|
9
9
|
const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('prerender/context.ts', {});
|
|
@@ -18,9 +18,9 @@ function isPrerenderAutoRunEnabled(vikeConfig) {
|
|
|
18
18
|
function temp_disablePrerenderAutoRun() {
|
|
19
19
|
globalObject.isDisabled = true;
|
|
20
20
|
}
|
|
21
|
-
function
|
|
22
|
-
return
|
|
21
|
+
function wasPrerenderRun() {
|
|
22
|
+
return globalObject.wasPrerenderRun;
|
|
23
23
|
}
|
|
24
|
-
function
|
|
25
|
-
globalObject.
|
|
24
|
+
function setWasPrerenderRun(trigger) {
|
|
25
|
+
globalObject.wasPrerenderRun = trigger;
|
|
26
26
|
}
|
|
@@ -36,10 +36,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
exports.runPrerender = runPrerender;
|
|
40
|
+
// Failed attempt to run this file (i.e. pre-rendering) in a separate process: https://github.com/vikejs/vike/commit/48feda87012115b32a5c9701da354cb8c138dfd2
|
|
41
|
+
// - The issue is that prerenderContext needs to be serialized for being able to pass it from the child process to the parent process.
|
|
42
|
+
// - The prerenderContext is used by vike-vercel
|
|
43
43
|
const path_1 = __importDefault(require("path"));
|
|
44
44
|
const index_js_1 = require("../../shared/route/index.js");
|
|
45
45
|
const utils_js_1 = require("./utils.js");
|
|
@@ -60,51 +60,15 @@ const loadPageConfigsLazyServerSide_js_1 = require("../runtime/renderPage/loadPa
|
|
|
60
60
|
const getHook_js_1 = require("../../shared/hooks/getHook.js");
|
|
61
61
|
const noRouteMatch_js_1 = require("../../shared/route/noRouteMatch.js");
|
|
62
62
|
const resolveVikeConfigInternal_js_1 = require("../vite/shared/resolveVikeConfigInternal.js");
|
|
63
|
-
const logErrorHint_js_1 = require("../runtime/renderPage/logErrorHint.js");
|
|
64
63
|
const execHook_js_1 = require("../../shared/hooks/execHook.js");
|
|
65
|
-
const prepareViteApiCall_js_1 = require("../api/prepareViteApiCall.js");
|
|
66
64
|
const context_js_1 = require("./context.js");
|
|
67
65
|
const resolvePrerenderConfig_js_1 = require("./resolvePrerenderConfig.js");
|
|
68
66
|
const getOutDirs_js_1 = require("../vite/shared/getOutDirs.js");
|
|
69
|
-
const context_js_2 = require("../cli/context.js");
|
|
70
|
-
const isViteCliCall_js_1 = require("../vite/shared/isViteCliCall.js");
|
|
71
67
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
72
68
|
const getProxyForPublicUsage_js_1 = require("../../shared/getProxyForPublicUsage.js");
|
|
73
69
|
const docLink = 'https://vike.dev/i18n#pre-rendering';
|
|
74
|
-
async function
|
|
75
|
-
|
|
76
|
-
// - 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.
|
|
77
|
-
// - 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.
|
|
78
|
-
}
|
|
79
|
-
async function runPrerenderFromCLIPrerenderCommand() {
|
|
80
|
-
try {
|
|
81
|
-
const { viteConfigFromUserEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)({}, 'prerender');
|
|
82
|
-
await runPrerender({ viteConfig: viteConfigFromUserEnhanced }, '$ vike prerender');
|
|
83
|
-
}
|
|
84
|
-
catch (err) {
|
|
85
|
-
console.error(err);
|
|
86
|
-
// Error may come from user-land; we need to use logErrorHint()
|
|
87
|
-
(0, logErrorHint_js_1.logErrorHint)(err);
|
|
88
|
-
process.exit(1);
|
|
89
|
-
}
|
|
90
|
-
runPrerender_forceExit();
|
|
91
|
-
(0, utils_js_1.assert)(false);
|
|
92
|
-
}
|
|
93
|
-
async function runPrerenderFromAutoRun(viteConfig) {
|
|
94
|
-
try {
|
|
95
|
-
await runPrerender({ viteConfig });
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
// Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
|
|
99
|
-
console.error(err);
|
|
100
|
-
(0, logErrorHint_js_1.logErrorHint)(err);
|
|
101
|
-
process.exit(1);
|
|
102
|
-
}
|
|
103
|
-
const forceExit = (0, context_js_2.isVikeCli)() || (0, isViteCliCall_js_1.isViteCliCall)();
|
|
104
|
-
return { forceExit };
|
|
105
|
-
}
|
|
106
|
-
async function runPrerender(options = {}, standaloneTrigger) {
|
|
107
|
-
(0, context_js_1.setContextIsPrerendering)();
|
|
70
|
+
async function runPrerender(options = {}, trigger) {
|
|
71
|
+
(0, context_js_1.setWasPrerenderRun)(trigger);
|
|
108
72
|
checkOutdatedOptions(options);
|
|
109
73
|
(0, utils_js_1.onSetupPrerender)();
|
|
110
74
|
(0, globalContext_js_1.setGlobalContext_isPrerendering)();
|
|
@@ -121,7 +85,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
121
85
|
const prerenderConfigGlobal = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(vikeConfig);
|
|
122
86
|
const { partial, noExtraDir, parallel, defaultLocalValue, isPrerenderingEnabled } = prerenderConfigGlobal;
|
|
123
87
|
if (!isPrerenderingEnabled) {
|
|
124
|
-
(0, utils_js_1.assert)(
|
|
88
|
+
(0, utils_js_1.assert)(trigger !== 'auto-run');
|
|
125
89
|
/* TODO/v1-release: use this assertUsage() again.
|
|
126
90
|
* - Make sure https://github.com/magne4000/vite-plugin-vercel/pull/156 is merged before using this assertUsage() again. (Otherwise vite-plugin-vercel will trigger this assertUsage() call.)
|
|
127
91
|
* - Done: PR is merged as of June 20205
|
|
@@ -736,16 +700,6 @@ function isSameUrl(url1, url2) {
|
|
|
736
700
|
function normalizeUrl(url) {
|
|
737
701
|
return '/' + url.split('/').filter(Boolean).join('/');
|
|
738
702
|
}
|
|
739
|
-
function runPrerender_forceExit() {
|
|
740
|
-
// Force exit; known situations where pre-rendering is hanging:
|
|
741
|
-
// - https://github.com/vikejs/vike/discussions/774#discussioncomment-5584551
|
|
742
|
-
// - https://github.com/vikejs/vike/issues/807#issuecomment-1519010902
|
|
743
|
-
process.exit(0);
|
|
744
|
-
/* I guess there is no need to tell the user about it? Let's see if a user complains.
|
|
745
|
-
* I don't known whether there is a way to call process.exit(0) only if needed, thus I'm not sure if there is a way to conditionally show a assertInfo().
|
|
746
|
-
assertInfo(false, "Pre-rendering was forced exit. (Didn't gracefully exit because the event queue isn't empty. This is usally fine, see ...", { onlyOnce: false })
|
|
747
|
-
*/
|
|
748
|
-
}
|
|
749
703
|
function assertIsNotAbort(err, urlOriginal) {
|
|
750
704
|
if (!(0, abort_js_1.isAbortError)(err))
|
|
751
705
|
return;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runPrerenderFromAPI = runPrerenderFromAPI;
|
|
4
|
+
exports.runPrerenderFromCLIPrerenderCommand = runPrerenderFromCLIPrerenderCommand;
|
|
5
|
+
exports.runPrerenderFromAutoRun = runPrerenderFromAutoRun;
|
|
6
|
+
exports.runPrerender_forceExit = runPrerender_forceExit;
|
|
7
|
+
const utils_js_1 = require("./utils.js");
|
|
8
|
+
const logErrorHint_js_1 = require("../runtime/renderPage/logErrorHint.js");
|
|
9
|
+
const prepareViteApiCall_js_1 = require("../api/prepareViteApiCall.js");
|
|
10
|
+
const context_js_1 = require("../cli/context.js");
|
|
11
|
+
const isViteCliCall_js_1 = require("../vite/shared/isViteCliCall.js");
|
|
12
|
+
const runPrerender_js_1 = require("./runPrerender.js");
|
|
13
|
+
async function runPrerenderFromAPI(options = {}) {
|
|
14
|
+
// - 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.
|
|
15
|
+
// - 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.
|
|
16
|
+
const { viteConfig } = await (0, runPrerender_js_1.runPrerender)(options, 'prerender()');
|
|
17
|
+
return { viteConfig };
|
|
18
|
+
}
|
|
19
|
+
async function runPrerenderFromCLIPrerenderCommand() {
|
|
20
|
+
try {
|
|
21
|
+
const { viteConfigFromUserEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)({}, 'prerender');
|
|
22
|
+
await (0, runPrerender_js_1.runPrerender)({ viteConfig: viteConfigFromUserEnhanced }, '$ vike prerender');
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error(err);
|
|
26
|
+
// Error may come from user-land; we need to use logErrorHint()
|
|
27
|
+
(0, logErrorHint_js_1.logErrorHint)(err);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
runPrerender_forceExit();
|
|
31
|
+
(0, utils_js_1.assert)(false);
|
|
32
|
+
}
|
|
33
|
+
async function runPrerenderFromAutoRun(viteConfig) {
|
|
34
|
+
try {
|
|
35
|
+
await (0, runPrerender_js_1.runPrerender)({ viteConfig }, 'auto-run');
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
// Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
|
|
39
|
+
console.error(err);
|
|
40
|
+
(0, logErrorHint_js_1.logErrorHint)(err);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
const forceExit = (0, context_js_1.isVikeCli)() || (0, isViteCliCall_js_1.isViteCliCall)();
|
|
44
|
+
return { forceExit };
|
|
45
|
+
}
|
|
46
|
+
function runPrerender_forceExit() {
|
|
47
|
+
// Force exit; known situations where pre-rendering is hanging:
|
|
48
|
+
// - https://github.com/vikejs/vike/discussions/774#discussioncomment-5584551
|
|
49
|
+
// - https://github.com/vikejs/vike/issues/807#issuecomment-1519010902
|
|
50
|
+
process.exit(0);
|
|
51
|
+
/* I guess there is no need to tell the user about it? Let's see if a user complains.
|
|
52
|
+
* I don't known whether there is a way to call process.exit(0) only if needed, thus I'm not sure if there is a way to conditionally show a assertInfo().
|
|
53
|
+
assertInfo(false, "Pre-rendering was forced exit. (Didn't gracefully exit because the event queue isn't empty. This is usally fine, see ...", { onlyOnce: false })
|
|
54
|
+
*/
|
|
55
|
+
}
|
|
@@ -7,7 +7,6 @@ exports.pluginAutoFullBuild = pluginAutoFullBuild;
|
|
|
7
7
|
exports.isPrerenderForceExit = isPrerenderForceExit;
|
|
8
8
|
const vite_1 = require("vite");
|
|
9
9
|
const utils_js_1 = require("../../utils.js");
|
|
10
|
-
const runPrerender_js_1 = require("../../../prerender/runPrerender.js");
|
|
11
10
|
const context_js_1 = require("../../../prerender/context.js");
|
|
12
11
|
const isViteCliCall_js_1 = require("../../shared/isViteCliCall.js");
|
|
13
12
|
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
@@ -17,6 +16,7 @@ const resolveVikeConfigInternal_js_1 = require("../../shared/resolveVikeConfigIn
|
|
|
17
16
|
const context_js_2 = require("../../../api/context.js");
|
|
18
17
|
const handleAssetsManifest_js_1 = require("./handleAssetsManifest.js");
|
|
19
18
|
const isViteServerBuild_js_1 = require("../../shared/isViteServerBuild.js");
|
|
19
|
+
const runPrerenderEntry_js_1 = require("../../../prerender/runPrerenderEntry.js");
|
|
20
20
|
(0, utils_js_1.assertIsSingleModuleInstance)('build/pluginAutoFullBuild.ts');
|
|
21
21
|
let forceExit = false;
|
|
22
22
|
function pluginAutoFullBuild() {
|
|
@@ -31,18 +31,28 @@ function pluginAutoFullBuild() {
|
|
|
31
31
|
await abortViteBuildSsr();
|
|
32
32
|
},
|
|
33
33
|
writeBundle: {
|
|
34
|
-
/* We can't use this because it breaks Vite's logging.
|
|
34
|
+
/* We can't use this because it breaks Vite's logging. TO-DO/eventually: try again with latest Vite version.
|
|
35
35
|
sequential: true,
|
|
36
36
|
order: 'pre',
|
|
37
37
|
*/
|
|
38
38
|
async handler(options, bundle) {
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
try {
|
|
40
|
+
await (0, handleAssetsManifest_js_1.handleAssetsManifest)(config, this.environment, options, bundle);
|
|
41
|
+
await triggerFullBuild(config, this.environment, bundle);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
// We use try-catch also because:
|
|
45
|
+
// - Vite/Rollup swallows errors thrown inside the writeBundle() hook. (It doesn't swallow errors thrown inside the first writeBundle() hook while building the client-side, but it does swallow errors thrown inside the second writeBundle() while building the server-side triggered after Vike calls Vite's `build()` API.)
|
|
46
|
+
// - Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
|
|
47
|
+
console.error(err);
|
|
48
|
+
(0, logErrorHint_js_1.logErrorHint)(err);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
41
51
|
}
|
|
42
52
|
}
|
|
43
53
|
},
|
|
44
54
|
{
|
|
45
|
-
name: 'vike:build:pluginAutoFullBuild:
|
|
55
|
+
name: 'vike:build:pluginAutoFullBuild:post',
|
|
46
56
|
apply: 'build',
|
|
47
57
|
enforce: 'post',
|
|
48
58
|
closeBundle: {
|
|
@@ -55,7 +65,7 @@ function pluginAutoFullBuild() {
|
|
|
55
65
|
if (forceExit &&
|
|
56
66
|
// Let vike:build:pluginBuildApp force exit
|
|
57
67
|
!vikeConfig.config.vite6BuilderApp) {
|
|
58
|
-
(0,
|
|
68
|
+
(0, runPrerenderEntry_js_1.runPrerender_forceExit)();
|
|
59
69
|
(0, utils_js_1.assert)(false);
|
|
60
70
|
}
|
|
61
71
|
}
|
|
@@ -81,22 +91,15 @@ async function triggerFullBuild(config, viteEnv, bundle) {
|
|
|
81
91
|
return;
|
|
82
92
|
const configInline = getFullBuildInlineConfig(config);
|
|
83
93
|
if (!isBuilderApp) {
|
|
84
|
-
|
|
85
|
-
await (0, vite_1.build)(setSSR(configInline));
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
// Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
|
|
89
|
-
console.error(err);
|
|
90
|
-
(0, logErrorHint_js_1.logErrorHint)(err);
|
|
91
|
-
process.exit(1);
|
|
92
|
-
}
|
|
94
|
+
await (0, vite_1.build)(setSSR(configInline));
|
|
93
95
|
}
|
|
94
96
|
else {
|
|
95
97
|
// The server bulid is already called by builder.buildApp()
|
|
96
98
|
}
|
|
97
99
|
if ((0, context_js_1.isPrerenderAutoRunEnabled)(vikeConfig)) {
|
|
98
|
-
const res = await (0,
|
|
100
|
+
const res = await (0, runPrerenderEntry_js_1.runPrerenderFromAutoRun)(configInline);
|
|
99
101
|
forceExit = res.forceExit;
|
|
102
|
+
(0, utils_js_1.assert)((0, context_js_1.wasPrerenderRun)());
|
|
100
103
|
}
|
|
101
104
|
}
|
|
102
105
|
function setSSR(configInline) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.pluginBuildApp = pluginBuildApp;
|
|
4
|
-
const
|
|
4
|
+
const runPrerenderEntry_js_1 = require("../../../prerender/runPrerenderEntry.js");
|
|
5
5
|
const getOutDirs_js_1 = require("../../shared/getOutDirs.js");
|
|
6
6
|
const utils_js_1 = require("../../utils.js");
|
|
7
7
|
const pluginAutoFullBuild_js_1 = require("./pluginAutoFullBuild.js");
|
|
@@ -24,7 +24,7 @@ function pluginBuildApp() {
|
|
|
24
24
|
await builder.build(builder.environments.client);
|
|
25
25
|
await builder.build(builder.environments.ssr);
|
|
26
26
|
if ((0, pluginAutoFullBuild_js_1.isPrerenderForceExit)()) {
|
|
27
|
-
(0,
|
|
27
|
+
(0, runPrerenderEntry_js_1.runPrerender_forceExit)();
|
|
28
28
|
(0, utils_js_1.assert)(false);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.genPromise = genPromise;
|
|
4
4
|
// Simple implementation without timeout: https://github.com/vikejs/vike/blob/2e59b922e7e0f227d26018dc2b74877c9b0f581b/vike/utils/genPromise.ts
|
|
5
5
|
const assert_js_1 = require("./assert.js");
|
|
6
|
-
const
|
|
7
|
-
function genPromise() {
|
|
6
|
+
const timeoutSecondsDefault = 25;
|
|
7
|
+
function genPromise({ timeout: timeoutSeconds = timeoutSecondsDefault } = {}) {
|
|
8
8
|
let resolve;
|
|
9
9
|
let reject;
|
|
10
10
|
let finished = false;
|
|
@@ -22,19 +22,25 @@ function genPromise() {
|
|
|
22
22
|
});
|
|
23
23
|
const timeoutClear = () => timeouts.forEach((t) => clearTimeout(t));
|
|
24
24
|
const timeouts = [];
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
let promise;
|
|
26
|
+
if (!timeoutSeconds) {
|
|
27
|
+
promise = promise_internal;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
promise = new Proxy(promise_internal, {
|
|
31
|
+
get(target, prop) {
|
|
32
|
+
if (prop === 'then' && !finished) {
|
|
33
|
+
const err = new Error(`Promise hasn't resolved after ${timeoutSeconds} seconds`);
|
|
34
|
+
timeouts.push(setTimeout(() => {
|
|
35
|
+
(0, assert_js_1.assert)(err.stack);
|
|
36
|
+
(0, assert_js_1.assertWarning)(false, removeStackErrorPrefix(err.stack), { onlyOnce: false });
|
|
37
|
+
}, timeoutSeconds * 1000));
|
|
38
|
+
}
|
|
39
|
+
const value = Reflect.get(target, prop);
|
|
40
|
+
return typeof value === 'function' ? value.bind(target) : value;
|
|
33
41
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
38
44
|
return { promise, resolve, reject };
|
|
39
45
|
}
|
|
40
46
|
function removeStackErrorPrefix(errStack) {
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { build };
|
|
2
2
|
import { prepareViteApiCall } from './prepareViteApiCall.js';
|
|
3
3
|
import { build as buildVite, version, createBuilder } from 'vite';
|
|
4
|
-
import {
|
|
4
|
+
import { isVikeCli } from '../cli/context.js';
|
|
5
|
+
import { wasPrerenderRun } from '../prerender/context.js';
|
|
6
|
+
import { assert, assertVersion } from './utils.js';
|
|
5
7
|
/**
|
|
6
8
|
* Programmatically trigger `$ vike build`
|
|
7
9
|
*
|
|
@@ -30,7 +32,9 @@ async function build(options = {}) {
|
|
|
30
32
|
// > Rationale: https://github.com/vikejs/vike/issues/2123
|
|
31
33
|
await buildVite(viteConfigFromUserEnhanced);
|
|
32
34
|
// After pre-rendering, when using the Vike CLI, the process is forcefully exited at the end of the buildVite() call above.
|
|
33
|
-
|
|
35
|
+
const prerenderTrigger = wasPrerenderRun();
|
|
36
|
+
if (isVikeCli() && prerenderTrigger && prerenderTrigger !== 'prerender()')
|
|
37
|
+
assert(false);
|
|
34
38
|
}
|
|
35
39
|
return {
|
|
36
40
|
/* We don't return `viteConfig` because `viteConfigFromUserEnhanced` is `InlineConfig` not `ResolvedConfig`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { prerender };
|
|
2
|
-
import { runPrerenderFromAPI } from '../prerender/
|
|
2
|
+
import { runPrerenderFromAPI } from '../prerender/runPrerenderEntry.js';
|
|
3
3
|
import { prepareViteApiCall } from './prepareViteApiCall.js';
|
|
4
4
|
/**
|
|
5
5
|
* Programmatically trigger `$ vike prerender`
|
|
@@ -75,7 +75,7 @@ async function cmdPreview() {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
async function cmdPrerender() {
|
|
78
|
-
const { runPrerenderFromCLIPrerenderCommand } = await import('../prerender/
|
|
78
|
+
const { runPrerenderFromCLIPrerenderCommand } = await import('../prerender/runPrerenderEntry.js');
|
|
79
79
|
await runPrerenderFromCLIPrerenderCommand();
|
|
80
80
|
}
|
|
81
81
|
process.on('unhandledRejection', (rejectValue) => {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export { isPrerenderAutoRunEnabled };
|
|
2
2
|
export { temp_disablePrerenderAutoRun };
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { wasPrerenderRun };
|
|
4
|
+
export { setWasPrerenderRun };
|
|
5
5
|
import type { VikeConfigInternal } from '../vite/shared/resolveVikeConfigInternal.js';
|
|
6
|
+
import type { PrerenderTrigger } from './runPrerender.js';
|
|
6
7
|
declare function isPrerenderAutoRunEnabled(vikeConfig: VikeConfigInternal): boolean;
|
|
7
8
|
declare function temp_disablePrerenderAutoRun(): void;
|
|
8
|
-
declare function
|
|
9
|
-
declare function
|
|
9
|
+
declare function wasPrerenderRun(): PrerenderTrigger | undefined;
|
|
10
|
+
declare function setWasPrerenderRun(trigger: PrerenderTrigger): void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { isPrerenderAutoRunEnabled };
|
|
2
2
|
export { temp_disablePrerenderAutoRun };
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { wasPrerenderRun };
|
|
4
|
+
export { setWasPrerenderRun };
|
|
5
5
|
import { getGlobalObject } from '../../utils/getGlobalObject.js';
|
|
6
6
|
import { resolvePrerenderConfigGlobal } from './resolvePrerenderConfig.js';
|
|
7
7
|
const globalObject = getGlobalObject('prerender/context.ts', {});
|
|
@@ -16,9 +16,9 @@ function isPrerenderAutoRunEnabled(vikeConfig) {
|
|
|
16
16
|
function temp_disablePrerenderAutoRun() {
|
|
17
17
|
globalObject.isDisabled = true;
|
|
18
18
|
}
|
|
19
|
-
function
|
|
20
|
-
return
|
|
19
|
+
function wasPrerenderRun() {
|
|
20
|
+
return globalObject.wasPrerenderRun;
|
|
21
21
|
}
|
|
22
|
-
function
|
|
23
|
-
globalObject.
|
|
22
|
+
function setWasPrerenderRun(trigger) {
|
|
23
|
+
globalObject.wasPrerenderRun = trigger;
|
|
24
24
|
}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { runPrerenderFromCLIPrerenderCommand };
|
|
3
|
-
export { runPrerenderFromAutoRun };
|
|
4
|
-
export { runPrerender_forceExit };
|
|
1
|
+
export { runPrerender };
|
|
5
2
|
export type { PrerenderOptions };
|
|
6
3
|
export type { PrerenderContextPublic };
|
|
4
|
+
export type { PrerenderTrigger };
|
|
7
5
|
import type { PageFile } from '../../shared/getPageFiles.js';
|
|
8
6
|
import { type GlobalContextServerInternal } from '../runtime/globalContext.js';
|
|
9
|
-
import type { InlineConfig, ResolvedConfig } from 'vite';
|
|
10
7
|
import type { APIOptions } from '../api/types.js';
|
|
11
8
|
type ProvidedByHook = null | {
|
|
12
9
|
hookFilePath: string;
|
|
@@ -60,12 +57,9 @@ type PrerenderOptions = APIOptions & {
|
|
|
60
57
|
/** @deprecated */
|
|
61
58
|
base?: string;
|
|
62
59
|
};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
declare function runPrerenderFromCLIPrerenderCommand(): Promise<void>;
|
|
67
|
-
declare function runPrerenderFromAutoRun(viteConfig: InlineConfig | undefined): Promise<{
|
|
68
|
-
forceExit: boolean;
|
|
60
|
+
type PrerenderTrigger = '$ vike prerender' | 'prerender()' | 'auto-run';
|
|
61
|
+
declare function runPrerender(options: PrerenderOptions | undefined, trigger: PrerenderTrigger): Promise<{
|
|
62
|
+
viteConfig: import("vite").ResolvedConfig;
|
|
69
63
|
}>;
|
|
70
64
|
declare function createPageContextPrerendering(urlOriginal: string, prerenderContext: PrerenderContext, globalContext: GlobalContextServerInternal, is404: boolean, pageId: string | undefined, providedByHook: ProvidedByHook): Promise<((({
|
|
71
65
|
_isOriginalObject: true;
|
|
@@ -100,7 +94,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
100
94
|
_isPrerendering: false;
|
|
101
95
|
assetsManifest: null;
|
|
102
96
|
_viteDevServer: import("vite").ViteDevServer;
|
|
103
|
-
viteConfig: ResolvedConfig;
|
|
97
|
+
viteConfig: import("vite").ResolvedConfig;
|
|
104
98
|
viteConfigRuntime: {
|
|
105
99
|
root: string;
|
|
106
100
|
build: {
|
|
@@ -118,7 +112,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
118
112
|
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
119
113
|
} | {
|
|
120
114
|
_isPrerendering: true;
|
|
121
|
-
viteConfig: ResolvedConfig;
|
|
115
|
+
viteConfig: import("vite").ResolvedConfig;
|
|
122
116
|
_isProduction: true;
|
|
123
117
|
assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
|
|
124
118
|
_viteDevServer: null;
|
|
@@ -221,7 +215,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
221
215
|
_isPrerendering: false;
|
|
222
216
|
assetsManifest: null;
|
|
223
217
|
_viteDevServer: import("vite").ViteDevServer;
|
|
224
|
-
viteConfig: ResolvedConfig;
|
|
218
|
+
viteConfig: import("vite").ResolvedConfig;
|
|
225
219
|
viteConfigRuntime: {
|
|
226
220
|
root: string;
|
|
227
221
|
build: {
|
|
@@ -239,7 +233,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
239
233
|
_onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
|
|
240
234
|
} | {
|
|
241
235
|
_isPrerendering: true;
|
|
242
|
-
viteConfig: ResolvedConfig;
|
|
236
|
+
viteConfig: import("vite").ResolvedConfig;
|
|
243
237
|
_isProduction: true;
|
|
244
238
|
assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
|
|
245
239
|
_viteDevServer: null;
|
|
@@ -323,4 +317,3 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
|
|
|
323
317
|
}) & {
|
|
324
318
|
_usesClientRouter: boolean;
|
|
325
319
|
}>;
|
|
326
|
-
declare function runPrerender_forceExit(): void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
export { runPrerender };
|
|
2
|
+
// Failed attempt to run this file (i.e. pre-rendering) in a separate process: https://github.com/vikejs/vike/commit/48feda87012115b32a5c9701da354cb8c138dfd2
|
|
3
|
+
// - The issue is that prerenderContext needs to be serialized for being able to pass it from the child process to the parent process.
|
|
4
|
+
// - The prerenderContext is used by vike-vercel
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import { route } from '../../shared/route/index.js';
|
|
7
7
|
import { assert, assertUsage, assertWarning, hasProp, objectAssign, isObjectWithKeys, isCallable, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, onSetupPrerender, PROJECT_VERSION, preservePropertyGetters, changeEnumerable } from './utils.js';
|
|
@@ -22,51 +22,15 @@ import { loadPageConfigsLazyServerSide } from '../runtime/renderPage/loadPageCon
|
|
|
22
22
|
import { getHookFromPageConfig, getHookFromPageConfigGlobal, getHookTimeoutDefault, getHook_setIsPrerenderering } from '../../shared/hooks/getHook.js';
|
|
23
23
|
import { noRouteMatch } from '../../shared/route/noRouteMatch.js';
|
|
24
24
|
import { getVikeConfigInternal } from '../vite/shared/resolveVikeConfigInternal.js';
|
|
25
|
-
import { logErrorHint } from '../runtime/renderPage/logErrorHint.js';
|
|
26
25
|
import { execHookWithoutPageContext, isUserHookError } from '../../shared/hooks/execHook.js';
|
|
27
|
-
import {
|
|
28
|
-
import { setContextIsPrerendering } from './context.js';
|
|
26
|
+
import { setWasPrerenderRun } from './context.js';
|
|
29
27
|
import { resolvePrerenderConfigGlobal, resolvePrerenderConfigLocal } from './resolvePrerenderConfig.js';
|
|
30
28
|
import { getOutDirs } from '../vite/shared/getOutDirs.js';
|
|
31
|
-
import { isVikeCli } from '../cli/context.js';
|
|
32
|
-
import { isViteCliCall } from '../vite/shared/isViteCliCall.js';
|
|
33
29
|
import fs from 'node:fs';
|
|
34
30
|
import { getProxyForPublicUsage } from '../../shared/getProxyForPublicUsage.js';
|
|
35
31
|
const docLink = 'https://vike.dev/i18n#pre-rendering';
|
|
36
|
-
async function
|
|
37
|
-
|
|
38
|
-
// - 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.
|
|
39
|
-
// - 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.
|
|
40
|
-
}
|
|
41
|
-
async function runPrerenderFromCLIPrerenderCommand() {
|
|
42
|
-
try {
|
|
43
|
-
const { viteConfigFromUserEnhanced } = await prepareViteApiCall({}, 'prerender');
|
|
44
|
-
await runPrerender({ viteConfig: viteConfigFromUserEnhanced }, '$ vike prerender');
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
console.error(err);
|
|
48
|
-
// Error may come from user-land; we need to use logErrorHint()
|
|
49
|
-
logErrorHint(err);
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
52
|
-
runPrerender_forceExit();
|
|
53
|
-
assert(false);
|
|
54
|
-
}
|
|
55
|
-
async function runPrerenderFromAutoRun(viteConfig) {
|
|
56
|
-
try {
|
|
57
|
-
await runPrerender({ viteConfig });
|
|
58
|
-
}
|
|
59
|
-
catch (err) {
|
|
60
|
-
// Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
|
|
61
|
-
console.error(err);
|
|
62
|
-
logErrorHint(err);
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
const forceExit = isVikeCli() || isViteCliCall();
|
|
66
|
-
return { forceExit };
|
|
67
|
-
}
|
|
68
|
-
async function runPrerender(options = {}, standaloneTrigger) {
|
|
69
|
-
setContextIsPrerendering();
|
|
32
|
+
async function runPrerender(options = {}, trigger) {
|
|
33
|
+
setWasPrerenderRun(trigger);
|
|
70
34
|
checkOutdatedOptions(options);
|
|
71
35
|
onSetupPrerender();
|
|
72
36
|
setGlobalContext_isPrerendering();
|
|
@@ -83,7 +47,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
83
47
|
const prerenderConfigGlobal = resolvePrerenderConfigGlobal(vikeConfig);
|
|
84
48
|
const { partial, noExtraDir, parallel, defaultLocalValue, isPrerenderingEnabled } = prerenderConfigGlobal;
|
|
85
49
|
if (!isPrerenderingEnabled) {
|
|
86
|
-
assert(
|
|
50
|
+
assert(trigger !== 'auto-run');
|
|
87
51
|
/* TODO/v1-release: use this assertUsage() again.
|
|
88
52
|
* - Make sure https://github.com/magne4000/vite-plugin-vercel/pull/156 is merged before using this assertUsage() again. (Otherwise vite-plugin-vercel will trigger this assertUsage() call.)
|
|
89
53
|
* - Done: PR is merged as of June 20205
|
|
@@ -698,16 +662,6 @@ function isSameUrl(url1, url2) {
|
|
|
698
662
|
function normalizeUrl(url) {
|
|
699
663
|
return '/' + url.split('/').filter(Boolean).join('/');
|
|
700
664
|
}
|
|
701
|
-
function runPrerender_forceExit() {
|
|
702
|
-
// Force exit; known situations where pre-rendering is hanging:
|
|
703
|
-
// - https://github.com/vikejs/vike/discussions/774#discussioncomment-5584551
|
|
704
|
-
// - https://github.com/vikejs/vike/issues/807#issuecomment-1519010902
|
|
705
|
-
process.exit(0);
|
|
706
|
-
/* I guess there is no need to tell the user about it? Let's see if a user complains.
|
|
707
|
-
* I don't known whether there is a way to call process.exit(0) only if needed, thus I'm not sure if there is a way to conditionally show a assertInfo().
|
|
708
|
-
assertInfo(false, "Pre-rendering was forced exit. (Didn't gracefully exit because the event queue isn't empty. This is usally fine, see ...", { onlyOnce: false })
|
|
709
|
-
*/
|
|
710
|
-
}
|
|
711
665
|
function assertIsNotAbort(err, urlOriginal) {
|
|
712
666
|
if (!isAbortError(err))
|
|
713
667
|
return;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { runPrerenderFromAPI };
|
|
2
|
+
export { runPrerenderFromCLIPrerenderCommand };
|
|
3
|
+
export { runPrerenderFromAutoRun };
|
|
4
|
+
export { runPrerender_forceExit };
|
|
5
|
+
import type { InlineConfig, ResolvedConfig } from 'vite';
|
|
6
|
+
import { PrerenderOptions } from './runPrerender.js';
|
|
7
|
+
declare function runPrerenderFromAPI(options?: PrerenderOptions): Promise<{
|
|
8
|
+
viteConfig: ResolvedConfig;
|
|
9
|
+
}>;
|
|
10
|
+
declare function runPrerenderFromCLIPrerenderCommand(): Promise<void>;
|
|
11
|
+
declare function runPrerenderFromAutoRun(viteConfig: InlineConfig | undefined): Promise<{
|
|
12
|
+
forceExit: boolean;
|
|
13
|
+
}>;
|
|
14
|
+
declare function runPrerender_forceExit(): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export { runPrerenderFromAPI };
|
|
2
|
+
export { runPrerenderFromCLIPrerenderCommand };
|
|
3
|
+
export { runPrerenderFromAutoRun };
|
|
4
|
+
export { runPrerender_forceExit };
|
|
5
|
+
import { assert } from './utils.js';
|
|
6
|
+
import { logErrorHint } from '../runtime/renderPage/logErrorHint.js';
|
|
7
|
+
import { prepareViteApiCall } from '../api/prepareViteApiCall.js';
|
|
8
|
+
import { isVikeCli } from '../cli/context.js';
|
|
9
|
+
import { isViteCliCall } from '../vite/shared/isViteCliCall.js';
|
|
10
|
+
import { runPrerender } from './runPrerender.js';
|
|
11
|
+
async function runPrerenderFromAPI(options = {}) {
|
|
12
|
+
// - 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.
|
|
13
|
+
// - 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.
|
|
14
|
+
const { viteConfig } = await runPrerender(options, 'prerender()');
|
|
15
|
+
return { viteConfig };
|
|
16
|
+
}
|
|
17
|
+
async function runPrerenderFromCLIPrerenderCommand() {
|
|
18
|
+
try {
|
|
19
|
+
const { viteConfigFromUserEnhanced } = await prepareViteApiCall({}, 'prerender');
|
|
20
|
+
await runPrerender({ viteConfig: viteConfigFromUserEnhanced }, '$ vike prerender');
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
console.error(err);
|
|
24
|
+
// Error may come from user-land; we need to use logErrorHint()
|
|
25
|
+
logErrorHint(err);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
runPrerender_forceExit();
|
|
29
|
+
assert(false);
|
|
30
|
+
}
|
|
31
|
+
async function runPrerenderFromAutoRun(viteConfig) {
|
|
32
|
+
try {
|
|
33
|
+
await runPrerender({ viteConfig }, 'auto-run');
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
// Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
|
|
37
|
+
console.error(err);
|
|
38
|
+
logErrorHint(err);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const forceExit = isVikeCli() || isViteCliCall();
|
|
42
|
+
return { forceExit };
|
|
43
|
+
}
|
|
44
|
+
function runPrerender_forceExit() {
|
|
45
|
+
// Force exit; known situations where pre-rendering is hanging:
|
|
46
|
+
// - https://github.com/vikejs/vike/discussions/774#discussioncomment-5584551
|
|
47
|
+
// - https://github.com/vikejs/vike/issues/807#issuecomment-1519010902
|
|
48
|
+
process.exit(0);
|
|
49
|
+
/* I guess there is no need to tell the user about it? Let's see if a user complains.
|
|
50
|
+
* I don't known whether there is a way to call process.exit(0) only if needed, thus I'm not sure if there is a way to conditionally show a assertInfo().
|
|
51
|
+
assertInfo(false, "Pre-rendering was forced exit. (Didn't gracefully exit because the event queue isn't empty. This is usally fine, see ...", { onlyOnce: false })
|
|
52
|
+
*/
|
|
53
|
+
}
|
|
@@ -2,8 +2,7 @@ export { pluginAutoFullBuild };
|
|
|
2
2
|
export { isPrerenderForceExit };
|
|
3
3
|
import { build } from 'vite';
|
|
4
4
|
import { assert, assertIsSingleModuleInstance, assertWarning, onSetupBuild } from '../../utils.js';
|
|
5
|
-
import {
|
|
6
|
-
import { isPrerenderAutoRunEnabled } from '../../../prerender/context.js';
|
|
5
|
+
import { isPrerenderAutoRunEnabled, wasPrerenderRun } from '../../../prerender/context.js';
|
|
7
6
|
import { isViteCliCall, getViteConfigFromCli } from '../../shared/isViteCliCall.js';
|
|
8
7
|
import pc from '@brillout/picocolors';
|
|
9
8
|
import { logErrorHint } from '../../../runtime/renderPage/logErrorHint.js';
|
|
@@ -12,6 +11,7 @@ import { getVikeConfigInternal } from '../../shared/resolveVikeConfigInternal.js
|
|
|
12
11
|
import { isVikeCliOrApi } from '../../../api/context.js';
|
|
13
12
|
import { handleAssetsManifest, handleAssetsManifest_assertUsageCssTarget } from './handleAssetsManifest.js';
|
|
14
13
|
import { isViteClientBuild, isViteServerBuild_onlySsrEnv } from '../../shared/isViteServerBuild.js';
|
|
14
|
+
import { runPrerender_forceExit, runPrerenderFromAutoRun } from '../../../prerender/runPrerenderEntry.js';
|
|
15
15
|
assertIsSingleModuleInstance('build/pluginAutoFullBuild.ts');
|
|
16
16
|
let forceExit = false;
|
|
17
17
|
function pluginAutoFullBuild() {
|
|
@@ -26,18 +26,28 @@ function pluginAutoFullBuild() {
|
|
|
26
26
|
await abortViteBuildSsr();
|
|
27
27
|
},
|
|
28
28
|
writeBundle: {
|
|
29
|
-
/* We can't use this because it breaks Vite's logging.
|
|
29
|
+
/* We can't use this because it breaks Vite's logging. TO-DO/eventually: try again with latest Vite version.
|
|
30
30
|
sequential: true,
|
|
31
31
|
order: 'pre',
|
|
32
32
|
*/
|
|
33
33
|
async handler(options, bundle) {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
try {
|
|
35
|
+
await handleAssetsManifest(config, this.environment, options, bundle);
|
|
36
|
+
await triggerFullBuild(config, this.environment, bundle);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
// We use try-catch also because:
|
|
40
|
+
// - Vite/Rollup swallows errors thrown inside the writeBundle() hook. (It doesn't swallow errors thrown inside the first writeBundle() hook while building the client-side, but it does swallow errors thrown inside the second writeBundle() while building the server-side triggered after Vike calls Vite's `build()` API.)
|
|
41
|
+
// - Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
|
|
42
|
+
console.error(err);
|
|
43
|
+
logErrorHint(err);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
36
46
|
}
|
|
37
47
|
}
|
|
38
48
|
},
|
|
39
49
|
{
|
|
40
|
-
name: 'vike:build:pluginAutoFullBuild:
|
|
50
|
+
name: 'vike:build:pluginAutoFullBuild:post',
|
|
41
51
|
apply: 'build',
|
|
42
52
|
enforce: 'post',
|
|
43
53
|
closeBundle: {
|
|
@@ -76,15 +86,7 @@ async function triggerFullBuild(config, viteEnv, bundle) {
|
|
|
76
86
|
return;
|
|
77
87
|
const configInline = getFullBuildInlineConfig(config);
|
|
78
88
|
if (!isBuilderApp) {
|
|
79
|
-
|
|
80
|
-
await build(setSSR(configInline));
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
// Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
|
|
84
|
-
console.error(err);
|
|
85
|
-
logErrorHint(err);
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
89
|
+
await build(setSSR(configInline));
|
|
88
90
|
}
|
|
89
91
|
else {
|
|
90
92
|
// The server bulid is already called by builder.buildApp()
|
|
@@ -92,6 +94,7 @@ async function triggerFullBuild(config, viteEnv, bundle) {
|
|
|
92
94
|
if (isPrerenderAutoRunEnabled(vikeConfig)) {
|
|
93
95
|
const res = await runPrerenderFromAutoRun(configInline);
|
|
94
96
|
forceExit = res.forceExit;
|
|
97
|
+
assert(wasPrerenderRun());
|
|
95
98
|
}
|
|
96
99
|
}
|
|
97
100
|
function setSSR(configInline) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { pluginBuildApp };
|
|
2
|
-
import { runPrerender_forceExit } from '../../../prerender/
|
|
2
|
+
import { runPrerender_forceExit } from '../../../prerender/runPrerenderEntry.js';
|
|
3
3
|
import { resolveOutDir } from '../../shared/getOutDirs.js';
|
|
4
4
|
import { assert } from '../../utils.js';
|
|
5
5
|
import { isPrerenderForceExit } from './pluginAutoFullBuild.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PROJECT_VERSION: "0.4.231-commit-
|
|
1
|
+
export declare const PROJECT_VERSION: "0.4.231-commit-8978b32";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Automatically updated by @brillout/release-me
|
|
2
|
-
export const PROJECT_VERSION = '0.4.231-commit-
|
|
2
|
+
export const PROJECT_VERSION = '0.4.231-commit-8978b32';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { genPromise };
|
|
2
|
-
declare function genPromise<T = void>(
|
|
2
|
+
declare function genPromise<T = void>({ timeout: timeoutSeconds }?: {
|
|
3
|
+
timeout?: number | null | undefined;
|
|
4
|
+
}): {
|
|
3
5
|
promise: Promise<T>;
|
|
4
6
|
resolve: (val: T) => void;
|
|
5
7
|
reject: (err: unknown) => void;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { genPromise };
|
|
2
2
|
// Simple implementation without timeout: https://github.com/vikejs/vike/blob/2e59b922e7e0f227d26018dc2b74877c9b0f581b/vike/utils/genPromise.ts
|
|
3
3
|
import { assert, assertWarning } from './assert.js';
|
|
4
|
-
const
|
|
5
|
-
function genPromise() {
|
|
4
|
+
const timeoutSecondsDefault = 25;
|
|
5
|
+
function genPromise({ timeout: timeoutSeconds = timeoutSecondsDefault } = {}) {
|
|
6
6
|
let resolve;
|
|
7
7
|
let reject;
|
|
8
8
|
let finished = false;
|
|
@@ -20,19 +20,25 @@ function genPromise() {
|
|
|
20
20
|
});
|
|
21
21
|
const timeoutClear = () => timeouts.forEach((t) => clearTimeout(t));
|
|
22
22
|
const timeouts = [];
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
let promise;
|
|
24
|
+
if (!timeoutSeconds) {
|
|
25
|
+
promise = promise_internal;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
promise = new Proxy(promise_internal, {
|
|
29
|
+
get(target, prop) {
|
|
30
|
+
if (prop === 'then' && !finished) {
|
|
31
|
+
const err = new Error(`Promise hasn't resolved after ${timeoutSeconds} seconds`);
|
|
32
|
+
timeouts.push(setTimeout(() => {
|
|
33
|
+
assert(err.stack);
|
|
34
|
+
assertWarning(false, removeStackErrorPrefix(err.stack), { onlyOnce: false });
|
|
35
|
+
}, timeoutSeconds * 1000));
|
|
36
|
+
}
|
|
37
|
+
const value = Reflect.get(target, prop);
|
|
38
|
+
return typeof value === 'function' ? value.bind(target) : value;
|
|
31
39
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
36
42
|
return { promise, resolve, reject };
|
|
37
43
|
}
|
|
38
44
|
function removeStackErrorPrefix(errStack) {
|