vike 0.4.231-commit-e23b4f5 → 0.4.231-commit-7a947d3

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.
@@ -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
- // if (isVikeCli() && isPrerendering()) assert(false)
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 runPrerender_js_1 = require("../prerender/runPrerender.js");
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, runPrerender_js_1.runPrerenderFromAPI)(options);
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/runPrerender.js')));
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.isPrerendering = isPrerendering;
6
- exports.setContextIsPrerendering = setContextIsPrerendering;
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 isPrerendering() {
22
- return !!globalObject.isPrerendering;
21
+ function wasPrerenderRun() {
22
+ return globalObject.wasPrerenderRun;
23
23
  }
24
- function setContextIsPrerendering() {
25
- globalObject.isPrerendering = true;
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.runPrerenderFromAPI = runPrerenderFromAPI;
40
- exports.runPrerenderFromCLIPrerenderCommand = runPrerenderFromCLIPrerenderCommand;
41
- exports.runPrerenderFromAutoRun = runPrerenderFromAutoRun;
42
- exports.runPrerender_forceExit = runPrerender_forceExit;
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 runPrerenderFromAPI(options = {}) {
75
- return await runPrerender(options, 'prerender()');
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)(standaloneTrigger);
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. TODO/eventually: try again with latest Vite version.
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
- await (0, handleAssetsManifest_js_1.handleAssetsManifest)(config, this.environment, options, bundle);
40
- await triggerFullBuild(config, this.environment, bundle);
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:forceExit',
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, runPrerender_js_1.runPrerender_forceExit)();
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
- try {
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, runPrerender_js_1.runPrerenderFromAutoRun)(configInline);
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 runPrerender_js_1 = require("../../../prerender/runPrerender.js");
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, runPrerender_js_1.runPrerender_forceExit)();
27
+ (0, runPrerenderEntry_js_1.runPrerender_forceExit)();
28
28
  (0, utils_js_1.assert)(false);
29
29
  }
30
30
  }
@@ -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.231-commit-e23b4f5';
5
+ exports.PROJECT_VERSION = '0.4.231-commit-7a947d3';
@@ -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 timeoutSeconds = 25;
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
- const promise = new Proxy(promise_internal, {
26
- get(target, prop) {
27
- if (prop === 'then' && !finished) {
28
- const err = new Error(`Promise hasn't resolved after ${timeoutSeconds} seconds`);
29
- timeouts.push(setTimeout(() => {
30
- (0, assert_js_1.assert)(err.stack);
31
- (0, assert_js_1.assertWarning)(false, removeStackErrorPrefix(err.stack), { onlyOnce: false });
32
- }, timeoutSeconds * 1000));
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
- const value = Reflect.get(target, prop);
35
- return typeof value === 'function' ? value.bind(target) : value;
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 { assertVersion } from './utils.js';
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
- // if (isVikeCli() && isPrerendering()) assert(false)
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 { type PrerenderOptions } from '../prerender/runPrerender.js';
2
+ import type { PrerenderOptions } from '../prerender/runPrerender.js';
3
3
  import type { ResolvedConfig } from 'vite';
4
4
  /**
5
5
  * Programmatically trigger `$ vike prerender`
@@ -1,5 +1,5 @@
1
1
  export { prerender };
2
- import { runPrerenderFromAPI } from '../prerender/runPrerender.js';
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/runPrerender.js');
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 { isPrerendering };
4
- export { setContextIsPrerendering };
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 isPrerendering(): boolean;
9
- declare function setContextIsPrerendering(): void;
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 { isPrerendering };
4
- export { setContextIsPrerendering };
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 isPrerendering() {
20
- return !!globalObject.isPrerendering;
19
+ function wasPrerenderRun() {
20
+ return globalObject.wasPrerenderRun;
21
21
  }
22
- function setContextIsPrerendering() {
23
- globalObject.isPrerendering = true;
22
+ function setWasPrerenderRun(trigger) {
23
+ globalObject.wasPrerenderRun = trigger;
24
24
  }
@@ -1,12 +1,9 @@
1
- export { runPrerenderFromAPI };
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
- declare function runPrerenderFromAPI(options?: PrerenderOptions): Promise<{
64
- viteConfig: ResolvedConfig;
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 { runPrerenderFromAPI };
2
- export { runPrerenderFromCLIPrerenderCommand };
3
- export { runPrerenderFromAutoRun };
4
- export { runPrerender_forceExit };
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 { prepareViteApiCall } from '../api/prepareViteApiCall.js';
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 runPrerenderFromAPI(options = {}) {
37
- return await runPrerender(options, 'prerender()');
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(standaloneTrigger);
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 { runPrerenderFromAutoRun, runPrerender_forceExit } from '../../../prerender/runPrerender.js';
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. TODO/eventually: try again with latest Vite version.
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
- await handleAssetsManifest(config, this.environment, options, bundle);
35
- await triggerFullBuild(config, this.environment, bundle);
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:forceExit',
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
- try {
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/runPrerender.js';
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-e23b4f5";
1
+ export declare const PROJECT_VERSION: "0.4.231-commit-7a947d3";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.231-commit-e23b4f5';
2
+ export const PROJECT_VERSION = '0.4.231-commit-7a947d3';
@@ -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 timeoutSeconds = 25;
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
- const promise = new Proxy(promise_internal, {
24
- get(target, prop) {
25
- if (prop === 'then' && !finished) {
26
- const err = new Error(`Promise hasn't resolved after ${timeoutSeconds} seconds`);
27
- timeouts.push(setTimeout(() => {
28
- assert(err.stack);
29
- assertWarning(false, removeStackErrorPrefix(err.stack), { onlyOnce: false });
30
- }, timeoutSeconds * 1000));
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
- const value = Reflect.get(target, prop);
33
- return typeof value === 'function' ? value.bind(target) : value;
34
- }
35
- });
40
+ });
41
+ }
36
42
  return { promise, resolve, reject };
37
43
  }
38
44
  function removeStackErrorPrefix(errStack) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.231-commit-e23b4f5",
3
+ "version": "0.4.231-commit-7a947d3",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {