vike 0.4.219 → 0.4.220-commit-a9f46b8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/cjs/node/api/build.js +23 -58
  2. package/dist/cjs/node/api/context.js +6 -8
  3. package/dist/cjs/node/api/prepareViteApiCall.js +6 -7
  4. package/dist/cjs/node/cli/context.js +16 -0
  5. package/dist/cjs/node/cli/entry.js +2 -0
  6. package/dist/cjs/node/cli/utils.js +1 -0
  7. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +32 -19
  8. package/dist/cjs/node/plugin/plugins/baseUrls.js +1 -1
  9. package/dist/cjs/node/plugin/plugins/commonConfig.js +10 -8
  10. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +3 -2
  11. package/dist/cjs/node/prerender/{isPrerenderAutoRunEnabled.js → context.js} +9 -1
  12. package/dist/cjs/node/prerender/runPrerender.js +55 -33
  13. package/dist/cjs/node/prerender/utils.js +1 -0
  14. package/dist/cjs/node/runtime/globalContext.js +2 -22
  15. package/dist/cjs/node/runtime/page-files/setup.js +1 -1
  16. package/dist/cjs/node/runtime/utils.js +1 -0
  17. package/dist/cjs/shared/page-configs/loadConfigValues.js +5 -1
  18. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  19. package/dist/cjs/utils/assertSetup.js +15 -1
  20. package/dist/cjs/utils/catchInfiniteLoop.js +34 -0
  21. package/dist/cjs/utils/isDev.js +2 -0
  22. package/dist/cjs/utils/makePublicCopy.js +32 -0
  23. package/dist/esm/client/client-routing-runtime/history.d.ts +3 -1
  24. package/dist/esm/client/client-routing-runtime/history.js +23 -18
  25. package/dist/esm/client/client-routing-runtime/index.d.ts +0 -1
  26. package/dist/esm/client/client-routing-runtime/index.js +0 -1
  27. package/dist/esm/client/client-routing-runtime/initClientRouter.js +2 -2
  28. package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +3 -4
  29. package/dist/esm/client/client-routing-runtime/initOnPopState.d.ts +0 -10
  30. package/dist/esm/client/client-routing-runtime/initOnPopState.js +50 -62
  31. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +15 -15
  32. package/dist/esm/client/client-routing-runtime/scrollRestoration.d.ts +4 -6
  33. package/dist/esm/client/client-routing-runtime/scrollRestoration.js +17 -12
  34. package/dist/esm/client/client-routing-runtime/setScrollPosition.d.ts +1 -1
  35. package/dist/esm/client/client-routing-runtime/setScrollPosition.js +29 -5
  36. package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
  37. package/dist/esm/client/client-routing-runtime/utils.js +1 -0
  38. package/dist/esm/client/shared/normalizeClientSideUrl.js +2 -3
  39. package/dist/esm/node/api/build.d.ts +1 -6
  40. package/dist/esm/node/api/build.js +20 -25
  41. package/dist/esm/node/api/context.d.ts +4 -4
  42. package/dist/esm/node/api/context.js +6 -9
  43. package/dist/esm/node/api/prepareViteApiCall.d.ts +0 -1
  44. package/dist/esm/node/api/prepareViteApiCall.js +7 -8
  45. package/dist/esm/node/cli/context.d.ts +5 -0
  46. package/dist/esm/node/cli/context.js +14 -0
  47. package/dist/esm/node/cli/entry.js +2 -0
  48. package/dist/esm/node/cli/parseCli.d.ts +3 -1
  49. package/dist/esm/node/cli/utils.d.ts +1 -0
  50. package/dist/esm/node/cli/utils.js +1 -0
  51. package/dist/esm/node/plugin/plugins/autoFullBuild.js +31 -18
  52. package/dist/esm/node/plugin/plugins/baseUrls.js +1 -1
  53. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +8 -2
  54. package/dist/esm/node/plugin/plugins/commonConfig.js +8 -6
  55. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +3 -2
  56. package/dist/esm/node/prerender/{isPrerenderAutoRunEnabled.d.ts → context.d.ts} +4 -0
  57. package/dist/esm/node/prerender/{isPrerenderAutoRunEnabled.js → context.js} +9 -1
  58. package/dist/esm/node/prerender/runPrerender.d.ts +42 -1
  59. package/dist/esm/node/prerender/runPrerender.js +56 -34
  60. package/dist/esm/node/prerender/utils.d.ts +1 -0
  61. package/dist/esm/node/prerender/utils.js +1 -0
  62. package/dist/esm/node/runtime/globalContext.js +3 -23
  63. package/dist/esm/node/runtime/page-files/setup.js +1 -1
  64. package/dist/esm/node/runtime/utils.d.ts +1 -0
  65. package/dist/esm/node/runtime/utils.js +1 -0
  66. package/dist/esm/shared/page-configs/PageConfig.d.ts +6 -3
  67. package/dist/esm/shared/page-configs/loadConfigValues.js +6 -2
  68. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  69. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  70. package/dist/esm/utils/assertSetup.js +15 -1
  71. package/dist/esm/utils/catchInfiniteLoop.d.ts +2 -0
  72. package/dist/esm/utils/catchInfiniteLoop.js +32 -0
  73. package/dist/esm/utils/isDev.js +2 -0
  74. package/dist/esm/utils/makePublicCopy.d.ts +3 -0
  75. package/dist/esm/utils/makePublicCopy.js +30 -0
  76. package/dist/esm/utils/projectInfo.d.ts +1 -1
  77. package/package.json +1 -1
@@ -1,72 +1,37 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
35
5
  Object.defineProperty(exports, "__esModule", { value: true });
36
6
  exports.build = build;
37
7
  const prepareViteApiCall_js_1 = require("./prepareViteApiCall.js");
38
8
  const vite_1 = require("vite");
39
- const isPrerenderAutoRunEnabled_js_1 = require("../prerender/isPrerenderAutoRunEnabled.js");
9
+ const assert_1 = __importDefault(require("assert"));
10
+ const context_js_1 = require("../cli/context.js");
11
+ const context_js_2 = require("../prerender/context.js");
40
12
  /**
41
13
  * Programmatically trigger `$ vike build`
42
14
  *
43
15
  * https://vike.dev/api#build
44
16
  */
45
17
  async function build(options = {}) {
46
- const { viteConfigEnhanced, vikeConfigGlobal } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options.viteConfig, 'build');
47
- // Build client-side
48
- const outputClient = await (0, vite_1.build)(viteConfigEnhanced);
49
- // Build server-side
50
- const outputServer = await (0, vite_1.build)(setSSR(viteConfigEnhanced));
51
- // Pre-render
52
- if ((0, isPrerenderAutoRunEnabled_js_1.isPrerenderAutoRunEnabled)(vikeConfigGlobal)) {
53
- const { runPrerenderFromAutoRun } = await Promise.resolve().then(() => __importStar(require('../prerender/runPrerender.js')));
54
- await runPrerenderFromAutoRun(viteConfigEnhanced);
55
- }
56
- return {
57
- /* We don't return `viteConfig` because `viteConfigEnhanced` is `InlineConfig` not `ResolvedConfig`
58
- viteConfig: viteConfigEnhanced,
59
- */
60
- rollupOutputClient: outputClient,
61
- rollupOutputServer: outputServer
62
- };
63
- }
64
- function setSSR(viteConfig) {
18
+ const { viteConfigEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options.viteConfig, 'build');
19
+ // Pass it to autoFullBuild()
20
+ if (viteConfigEnhanced)
21
+ viteConfigEnhanced._viteConfigEnhanced = viteConfigEnhanced;
22
+ // 1. Build client-side
23
+ // 2. Build server-side
24
+ // > See: https://github.com/vikejs/vike/blob/c6c7533a56b3a16fc43ed644fc5c10c02d0ff375/vike/node/plugin/plugins/autoFullBuild.ts#L90
25
+ // 3. Pre-render (if enabled)
26
+ // > See: https://github.com/vikejs/vike/blob/c6c7533a56b3a16fc43ed644fc5c10c02d0ff375/vike/node/plugin/plugins/autoFullBuild.ts#L98
27
+ // > We purposely don't start the pre-rendering in this `build()` function but in a Rollup hook instead.
28
+ // > Rationale: https://github.com/vikejs/vike/issues/2123
29
+ await (0, vite_1.build)(viteConfigEnhanced);
30
+ // When using the Vike CLI with pre-rendering the process is forcefully exited at the end of the buildVite() call above
31
+ (0, assert_1.default)(!((0, context_js_1.isVikeCli)() && (0, context_js_2.isPrerendering)()));
65
32
  return {
66
- ...viteConfig,
67
- build: {
68
- ...viteConfig?.build,
69
- ssr: true
70
- }
33
+ /* We don't return `viteConfig` because `viteConfigEnhanced` is `InlineConfig` not `ResolvedConfig`
34
+ viteConfig: viteConfigEnhanced,
35
+ */
71
36
  };
72
37
  }
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setOperation = setOperation;
4
- exports.clearOperation = clearOperation;
5
3
  exports.isVikeCliOrApi = isVikeCliOrApi;
4
+ exports.setContextApiOperation = setContextApiOperation;
5
+ exports.clearContextApiOperation = clearContextApiOperation;
6
6
  const utils_js_1 = require("./utils.js");
7
- const globalObject = (0, utils_js_1.getGlobalObject)('context.ts', {
8
- apiOperation: undefined
9
- });
10
- function getOperation() {
7
+ const globalObject = (0, utils_js_1.getGlobalObject)('api/context.ts', {});
8
+ function getApiOperation() {
11
9
  (0, utils_js_1.assert)(globalObject.apiOperation);
12
10
  return globalObject.apiOperation;
13
11
  }
@@ -15,10 +13,10 @@ function isVikeCliOrApi() {
15
13
  // The CLI uses the API
16
14
  return !!globalObject.apiOperation;
17
15
  }
18
- function setOperation(operation) {
16
+ function setContextApiOperation(operation) {
19
17
  (0, utils_js_1.assert)(!globalObject.apiOperation);
20
18
  globalObject.apiOperation = operation;
21
19
  }
22
- function clearOperation() {
20
+ function clearContextApiOperation() {
23
21
  globalObject.apiOperation = undefined;
24
22
  }
@@ -51,31 +51,30 @@ const globalContext_js_1 = require("../runtime/globalContext.js");
51
51
  const globalObject = (0, utils_js_1.getGlobalObject)('prepareViteApiCall.ts', {});
52
52
  async function prepareViteApiCall(viteConfig, operation) {
53
53
  clear();
54
- (0, context_js_1.setOperation)(operation);
54
+ (0, context_js_1.setContextApiOperation)(operation);
55
55
  return enhanceViteConfig(viteConfig, operation);
56
56
  }
57
57
  // For subsequent API calls, e.g. calling prerender() after build()
58
58
  function clear() {
59
- (0, context_js_1.clearOperation)();
59
+ (0, context_js_1.clearContextApiOperation)();
60
60
  (0, globalContext_js_1.clearGlobalContext)();
61
61
  }
62
62
  async function enhanceViteConfig(viteConfig, operation) {
63
63
  const viteInfo = await getInfoFromVite(viteConfig, operation);
64
64
  await assertViteRoot2(viteInfo.root, viteInfo.viteConfigEnhanced, operation);
65
65
  const vikeConfig = await (0, getVikeConfig_js_1.getVikeConfig2)(viteInfo.root, operation === 'dev', viteInfo.vikeVitePluginOptions);
66
- const viteConfigEnhanced = addViteSettingsSetByUser(viteInfo.viteConfigEnhanced, vikeConfig);
66
+ const viteConfigEnhanced = addViteSettingsSetByVikeConfig(viteInfo.viteConfigEnhanced, vikeConfig);
67
67
  return {
68
- viteConfigEnhanced,
69
- vikeConfigGlobal: vikeConfig.vikeConfigGlobal
68
+ viteConfigEnhanced
70
69
  };
71
70
  }
72
- function addViteSettingsSetByUser(viteConfigEnhanced, vikeConfig) {
71
+ function addViteSettingsSetByVikeConfig(viteConfigEnhanced, vikeConfig) {
73
72
  const viteConfigs = vikeConfig.global.from.configsCumulative.vite;
74
73
  if (!viteConfigs)
75
74
  return viteConfigEnhanced;
76
75
  viteConfigs.values.forEach((v) => {
77
76
  (0, utils_js_1.assertUsage)((0, utils_js_1.isObject)(v.value), `${v.definedAt} should be an object`);
78
- viteConfigEnhanced = (0, vite_1.mergeConfig)(v.value, viteConfigEnhanced ?? {});
77
+ viteConfigEnhanced = (0, vite_1.mergeConfig)(viteConfigEnhanced ?? {}, v.value);
79
78
  });
80
79
  return viteConfigEnhanced;
81
80
  }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isVikeCli = isVikeCli;
4
+ exports.setContextCliCommand = setContextCliCommand;
5
+ const utils_js_1 = require("./utils.js");
6
+ const globalObject = (0, utils_js_1.getGlobalObject)('cli/context.ts', {});
7
+ function getCliCommand() {
8
+ return globalObject.cliCommand;
9
+ }
10
+ function isVikeCli() {
11
+ return !!globalObject.cliCommand;
12
+ }
13
+ function setContextCliCommand(command) {
14
+ (0, utils_js_1.assert)(!globalObject.cliCommand);
15
+ globalObject.cliCommand = command;
16
+ }
@@ -40,9 +40,11 @@ const utils_js_1 = require("./utils.js");
40
40
  const index_js_1 = require("../api/index.js");
41
41
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
42
42
  const parseCli_js_1 = require("./parseCli.js");
43
+ const context_js_1 = require("./context.js");
43
44
  cli();
44
45
  async function cli() {
45
46
  const { command } = (0, parseCli_js_1.parseCli)();
47
+ (0, context_js_1.setContextCliCommand)(command);
46
48
  if (command === 'dev') {
47
49
  await cmdDev();
48
50
  }
@@ -21,3 +21,4 @@ const onLoad_js_1 = require("./onLoad.js");
21
21
  __exportStar(require("../../utils/assert.js"), exports);
22
22
  __exportStar(require("../../utils/projectInfo.js"), exports);
23
23
  __exportStar(require("../../utils/includes.js"), exports);
24
+ __exportStar(require("../../utils/getGlobalObject.js"), exports);
@@ -8,12 +8,14 @@ exports.autoFullBuild = autoFullBuild;
8
8
  const vite_1 = require("vite");
9
9
  const utils_js_1 = require("../utils.js");
10
10
  const runPrerender_js_1 = require("../../prerender/runPrerender.js");
11
- const isPrerenderAutoRunEnabled_js_1 = require("../../prerender/isPrerenderAutoRunEnabled.js");
11
+ const context_js_1 = require("../../prerender/context.js");
12
12
  const isViteCliCall_js_1 = require("../shared/isViteCliCall.js");
13
13
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
14
14
  const logErrorHint_js_1 = require("../../runtime/renderPage/logErrorHint.js");
15
15
  const buildConfig_js_1 = require("./buildConfig.js");
16
16
  const getVikeConfig_js_1 = require("./importUserCode/v1-design/getVikeConfig.js");
17
+ const context_js_2 = require("../../api/context.js");
18
+ const context_js_3 = require("../../cli/context.js");
17
19
  let forceExit = false;
18
20
  function autoFullBuild() {
19
21
  let config;
@@ -74,33 +76,43 @@ async function triggerFullBuild(config, vikeConfigGlobal, bundle) {
74
76
  if (!bundle[buildConfig_js_1.manifestTempFile])
75
77
  return;
76
78
  const configFromCli = !(0, isViteCliCall_js_1.isViteCliCall)() ? null : (0, isViteCliCall_js_1.getViteConfigFromCli)();
77
- const configInline = {
78
- ...configFromCli,
79
- configFile: configFromCli?.configFile || config.configFile,
80
- root: config.root,
81
- build: {
82
- ...configFromCli?.build
83
- }
84
- };
85
- try {
86
- await (0, vite_1.build)({
87
- ...configInline,
79
+ let configInline;
80
+ if (config._viteConfigEnhanced) {
81
+ configInline = config._viteConfigEnhanced;
82
+ }
83
+ else {
84
+ configInline = {
85
+ ...configFromCli,
86
+ configFile: configFromCli?.configFile || config.configFile,
87
+ root: config.root,
88
88
  build: {
89
- ...configInline.build,
90
- ssr: true
89
+ ...configFromCli?.build
91
90
  }
92
- });
91
+ };
92
+ }
93
+ try {
94
+ await (0, vite_1.build)(setSSR(configInline));
93
95
  }
94
96
  catch (err) {
95
97
  console.error(err);
96
98
  (0, logErrorHint_js_1.logErrorHint)(err);
97
99
  process.exit(1);
98
100
  }
99
- if ((0, isPrerenderAutoRunEnabled_js_1.isPrerenderAutoRunEnabled)(vikeConfigGlobal)) {
100
- await (0, runPrerender_js_1.runPrerenderFromAutoRun)(configInline);
101
- forceExit = true;
101
+ if ((0, context_js_1.isPrerenderAutoRunEnabled)(vikeConfigGlobal)) {
102
+ const { prerenderContextPublic } = await (0, runPrerender_js_1.runPrerenderFromAutoRun)(configInline);
103
+ config.vike.prerenderContext = prerenderContextPublic;
104
+ forceExit = (0, context_js_3.isVikeCli)() || (0, isViteCliCall_js_1.isViteCliCall)();
102
105
  }
103
106
  }
107
+ function setSSR(configInline) {
108
+ return {
109
+ ...configInline,
110
+ build: {
111
+ ...configInline.build,
112
+ ssr: true
113
+ }
114
+ };
115
+ }
104
116
  function abortViteBuildSsr(vikeConfigGlobal) {
105
117
  if (vikeConfigGlobal.disableAutoFullBuild !== true && (0, isViteCliCall_js_1.isViteCliCall)() && (0, isViteCliCall_js_1.getViteConfigFromCli)()?.build.ssr) {
106
118
  (0, utils_js_1.assertWarning)(false, `The CLI call ${picocolors_1.default.cyan('$ vite build --ssr')} is superfluous since ${picocolors_1.default.cyan('$ vite build')} also builds the server-side. If you want two separate build steps then use https://vike.dev/disableAutoFullBuild or use Vite's ${picocolors_1.default.cyan('build()')} API.`, { onlyOnce: true });
@@ -110,7 +122,8 @@ function abortViteBuildSsr(vikeConfigGlobal) {
110
122
  function isDisabled(vikeConfigGlobal) {
111
123
  const { disableAutoFullBuild } = vikeConfigGlobal;
112
124
  if (disableAutoFullBuild === null || disableAutoFullBuild === 'prerender') {
113
- return !(0, isViteCliCall_js_1.isViteCliCall)();
125
+ const isViteApi = !(0, isViteCliCall_js_1.isViteCliCall)() && !(0, context_js_2.isVikeCliOrApi)();
126
+ return isViteApi;
114
127
  }
115
128
  else {
116
129
  return disableAutoFullBuild;
@@ -13,7 +13,7 @@ function baseUrls() {
13
13
  const isDev = config._isDev;
14
14
  (0, utils_js_1.assert)(typeof isDev === 'boolean');
15
15
  const baseViteOriginal = config.base ?? '/__UNSET__'; // '/__UNSET__' because Vite resolves `_baseViteOriginal: null` to `undefined`
16
- basesResolved = (0, resolveBase_js_1.resolveBase)(baseViteOriginal, config.vike.vikeConfigGlobal.baseServer, config.vike.vikeConfigGlobal.baseAssets);
16
+ basesResolved = (0, resolveBase_js_1.resolveBase)(baseViteOriginal, config._vikeConfigGlobal.baseServer, config._vikeConfigGlobal.baseAssets);
17
17
  // We cannot define these in configResolved() because Vite picks up the env variables before any configResolved() hook is called
18
18
  process.env.BASE_SERVER = basesResolved.baseServer;
19
19
  process.env.BASE_ASSETS = basesResolved.baseAssets;
@@ -16,7 +16,7 @@ const isViteCliCall_js_1 = require("../shared/isViteCliCall.js");
16
16
  const context_js_1 = require("../../api/context.js");
17
17
  const getVikeConfig_js_1 = require("./importUserCode/v1-design/getVikeConfig.js");
18
18
  const prepareViteApiCall_js_1 = require("../../api/prepareViteApiCall.js");
19
- const isPrerenderAutoRunEnabled_js_1 = require("../../prerender/isPrerenderAutoRunEnabled.js");
19
+ const context_js_2 = require("../../prerender/context.js");
20
20
  const pluginName = 'vike:commonConfig';
21
21
  function commonConfig(vikeVitePluginOptions) {
22
22
  return [
@@ -35,9 +35,11 @@ function commonConfig(vikeVitePluginOptions) {
35
35
  _isDev: isDev,
36
36
  _root: root,
37
37
  _vikeVitePluginOptions: vikeVitePluginOptions,
38
- vike: vikeConfig,
39
- // TODO/v1-release: remove
40
- configVikePromise: Promise.resolve(vikeConfig.vikeConfigGlobal)
38
+ vike: { global: vikeConfig.global },
39
+ // TODO/now: remove
40
+ _vikeConfigGlobal: vikeConfig.vikeConfigGlobal,
41
+ // TODO/v1-release: remove https://github.com/vikejs/vike/issues/2122
42
+ configVikePromise: Promise.resolve({ prerender: !!vikeConfig.vikeConfigGlobal.prerender })
41
43
  };
42
44
  }
43
45
  }
@@ -80,7 +82,7 @@ function commonConfig(vikeVitePluginOptions) {
80
82
  // VITE_CONFIG
81
83
  const configFromEnvVar = (0, getEnvVarObject_js_1.getEnvVarObject)('VITE_CONFIG');
82
84
  if (configFromEnvVar)
83
- configFromVike = (0, vite_1.mergeConfig)(configFromEnvVar, configFromVike);
85
+ configFromVike = (0, vite_1.mergeConfig)(configFromVike, configFromEnvVar);
84
86
  return configFromVike;
85
87
  }
86
88
  }
@@ -147,7 +149,7 @@ function assertVikeCliOrApi(config) {
147
149
  onlyOnce: true
148
150
  });
149
151
  }
150
- // TODO/v1-release: remove
152
+ // TODO/v1-release: remove https://github.com/vikejs/vike/issues/2122
151
153
  function temp_supportOldInterface(config) {
152
154
  if (!('vitePluginSsr' in config))
153
155
  return;
@@ -155,14 +157,14 @@ function temp_supportOldInterface(config) {
155
157
  if ((0, utils_js_1.hasProp)(config.vitePluginSsr, 'prerender', 'object')) {
156
158
  (0, utils_js_1.assert)((0, utils_js_1.hasProp)(config.vitePluginSsr.prerender, 'disableAutoRun', 'boolean'));
157
159
  if (config.vitePluginSsr.prerender.disableAutoRun) {
158
- (0, isPrerenderAutoRunEnabled_js_1.temp_disablePrerenderAutoRun)();
160
+ (0, context_js_2.temp_disablePrerenderAutoRun)();
159
161
  }
160
162
  return;
161
163
  }
162
164
  if ((0, utils_js_1.hasProp)(config.vitePluginSsr, 'disableAutoFullBuild')) {
163
165
  if (config.vitePluginSsr.disableAutoFullBuild) {
164
166
  (0, utils_js_1.assert)(config.vitePluginSsr.disableAutoFullBuild === 'prerender');
165
- (0, isPrerenderAutoRunEnabled_js_1.temp_disablePrerenderAutoRun)();
167
+ (0, context_js_2.temp_disablePrerenderAutoRun)();
166
168
  }
167
169
  return;
168
170
  }
@@ -28,12 +28,13 @@ function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRout
28
28
  const lines = [];
29
29
  pageConfigs.forEach((pageConfig) => {
30
30
  const { pageId, routeFilesystem, isErrorPage } = pageConfig;
31
- const virtualFileIdPageConfigValuesAll = (0, virtualFilePageConfigValuesAll_js_1.getVirtualFileIdPageConfigValuesAll)(pageId, isForClientSide);
32
31
  lines.push(` {`);
33
32
  lines.push(` pageId: ${JSON.stringify(pageId)},`);
34
33
  lines.push(` isErrorPage: ${JSON.stringify(isErrorPage)},`);
35
34
  lines.push(` routeFilesystem: ${JSON.stringify(routeFilesystem)},`);
36
- lines.push(` loadConfigValuesAll: () => import(${JSON.stringify(virtualFileIdPageConfigValuesAll)}),`);
35
+ const virtualFileId = JSON.stringify((0, virtualFilePageConfigValuesAll_js_1.getVirtualFileIdPageConfigValuesAll)(pageId, isForClientSide));
36
+ const load = `() => ({ moduleId: ${virtualFileId}, moduleExports: import(${virtualFileId}) })`;
37
+ lines.push(` loadConfigValuesAll: ${load},`);
37
38
  lines.push(` configValuesSerialized: {`);
38
39
  lines.push(...(0, serializeConfigValues_js_1.serializeConfigValues)(pageConfig, importStatements, (configEnv) => (0, isRuntimeEnvMatch_js_1.isRuntimeEnvMatch)(configEnv, { isForClientSide, isClientRouting, isDev }), ' ', true));
39
40
  lines.push(` },`);
@@ -2,8 +2,10 @@
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
7
  const getGlobalObject_js_1 = require("../../utils/getGlobalObject.js");
6
- const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('isPrerenderAutoRunEnabled.ts', {});
8
+ const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('prerender/context.ts', {});
7
9
  function isPrerenderAutoRunEnabled(vikeConfigGlobal) {
8
10
  return (vikeConfigGlobal.prerender &&
9
11
  !vikeConfigGlobal.prerender.disableAutoRun &&
@@ -14,3 +16,9 @@ function isPrerenderAutoRunEnabled(vikeConfigGlobal) {
14
16
  function temp_disablePrerenderAutoRun() {
15
17
  globalObject.isDisabled = true;
16
18
  }
19
+ function isPrerendering() {
20
+ return !!globalObject.isPrerendering;
21
+ }
22
+ function setContextIsPrerendering() {
23
+ globalObject.isPrerendering = true;
24
+ }
@@ -65,6 +65,7 @@ const logErrorHint_js_1 = require("../runtime/renderPage/logErrorHint.js");
65
65
  const executeHook_js_1 = require("../../shared/hooks/executeHook.js");
66
66
  const getConfigValueBuildTime_js_1 = require("../../shared/page-configs/getConfigValueBuildTime.js");
67
67
  const prepareViteApiCall_js_1 = require("../api/prepareViteApiCall.js");
68
+ const context_js_1 = require("./context.js");
68
69
  async function runPrerenderFromAPI(options = {}) {
69
70
  return await runPrerender(options, 'prerender()');
70
71
  // - 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.
@@ -84,16 +85,20 @@ async function runPrerenderFromCLIPrerenderCommand() {
84
85
  runPrerender_forceExit();
85
86
  }
86
87
  async function runPrerenderFromAutoRun(viteConfig) {
88
+ let prerenderContextPublic;
87
89
  try {
88
- await runPrerender({ viteConfig });
90
+ const ret = await runPrerender({ viteConfig });
91
+ prerenderContextPublic = ret.prerenderContextPublic;
89
92
  }
90
93
  catch (err) {
91
94
  console.error(err);
92
95
  (0, logErrorHint_js_1.logErrorHint)(err);
93
96
  process.exit(1);
94
97
  }
98
+ return { prerenderContextPublic };
95
99
  }
96
100
  async function runPrerender(options = {}, standaloneTrigger) {
101
+ (0, context_js_1.setContextIsPrerendering)();
97
102
  checkOutdatedOptions(options);
98
103
  (0, utils_js_1.onSetupPrerender)();
99
104
  (0, globalContext_js_1.setGlobalContext_isPrerendering)();
@@ -120,35 +125,36 @@ async function runPrerender(options = {}, standaloneTrigger) {
120
125
  await (0, globalContext_js_1.initGlobalContext_runPrerender)();
121
126
  const globalContext = (0, globalContext_js_1.getGlobalContext)();
122
127
  globalContext.pageFilesAll.forEach(assertExportNames);
123
- const prerenderContext = {};
124
- (0, utils_js_1.objectAssign)(prerenderContext, {
125
- _urlHandler: null,
126
- _noExtraDir: noExtraDir ?? false,
128
+ const prerenderContext = {
129
+ noExtraDir: noExtraDir ?? false,
127
130
  pageContexts: [],
128
- pageContextInit: options.pageContextInit ?? null
129
- });
131
+ pageContextInit: options.pageContextInit ?? null,
132
+ prerenderedPageContexts: {},
133
+ output: []
134
+ };
130
135
  const doNotPrerenderList = [];
131
136
  await collectDoNoPrerenderList(vikeConfig.pageConfigs, doNotPrerenderList, concurrencyLimit);
132
137
  await callOnBeforePrerenderStartHooks(prerenderContext, concurrencyLimit, doNotPrerenderList);
133
138
  await handlePagesWithStaticRoutes(prerenderContext, doNotPrerenderList, concurrencyLimit);
134
139
  await callOnPrerenderStartHook(prerenderContext);
135
- const prerenderedPageContexts = {};
136
140
  let prerenderedCount = 0;
141
+ // Write files as soon as pages finish rendering (instead of writing all files at once only after all pages have rendered).
137
142
  const onComplete = async (htmlFile) => {
138
143
  prerenderedCount++;
139
144
  if (htmlFile.pageId) {
140
- prerenderedPageContexts[htmlFile.pageId] = htmlFile.pageContext;
145
+ prerenderContext.prerenderedPageContexts[htmlFile.pageId] = htmlFile.pageContext;
141
146
  }
142
- await writeFiles(htmlFile, root, outDirClient, options.onPagePrerender, logLevel);
147
+ await writeFiles(htmlFile, root, outDirClient, options.onPagePrerender, prerenderContext.output, logLevel);
143
148
  };
144
149
  await routeAndPrerender(prerenderContext, concurrencyLimit, onComplete);
145
- warnContradictoryNoPrerenderList(prerenderedPageContexts, doNotPrerenderList);
146
- await prerender404(prerenderedPageContexts, prerenderContext, onComplete);
150
+ warnContradictoryNoPrerenderList(prerenderContext.prerenderedPageContexts, doNotPrerenderList);
151
+ await prerender404(prerenderContext, onComplete);
147
152
  if (logLevel === 'info') {
148
153
  console.log(`${picocolors_1.default.green(`✓`)} ${prerenderedCount} HTML documents pre-rendered.`);
149
154
  }
150
- warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial);
151
- return { viteConfig };
155
+ warnMissingPages(prerenderContext.prerenderedPageContexts, doNotPrerenderList, partial);
156
+ const prerenderContextPublic = makePublic(prerenderContext);
157
+ return { viteConfig, prerenderContextPublic };
152
158
  }
153
159
  async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, concurrencyLimit) {
154
160
  // V1 design
@@ -339,7 +345,7 @@ function createPageContext(urlOriginal, prerenderContext) {
339
345
  const pageContext = {
340
346
  _urlHandler: null,
341
347
  _urlRewrite: null,
342
- _noExtraDir: prerenderContext._noExtraDir,
348
+ _noExtraDir: prerenderContext.noExtraDir,
343
349
  _prerenderContext: prerenderContext
344
350
  };
345
351
  const pageContextInit = {
@@ -425,17 +431,20 @@ async function callOnPrerenderStartHook(prerenderContext) {
425
431
  const docLink = 'https://vike.dev/i18n#pre-rendering';
426
432
  // Set `enumerable` to `false` to avoid computed URL properties from being iterated & copied in onPrerenderStart() hook, e.g. /examples/i18n/
427
433
  const { restoreEnumerable, addPageContextComputedUrl } = makePageContextComputedUrlNonEnumerable(prerenderContext.pageContexts);
428
- let result = await (0, executeHook_js_1.executeHook)(() => hookFn({
429
- pageContexts: prerenderContext.pageContexts,
434
+ let result = await (0, executeHook_js_1.executeHook)(() => {
435
+ const prerenderContextPublic = makePublic(prerenderContext);
430
436
  // TODO/v1-release: remove warning
431
- get prerenderPageContexts() {
432
- (0, utils_js_1.assertWarning)(false, `prerenderPageContexts has been renamed pageContexts, see ${docLink}`, {
433
- showStackTrace: true,
434
- onlyOnce: true
435
- });
436
- return prerenderContext.pageContexts;
437
- }
438
- }), onPrerenderStartHook, null);
437
+ Object.defineProperty(prerenderContextPublic, 'prerenderPageContexts', {
438
+ get() {
439
+ (0, utils_js_1.assertWarning)(false, `prerenderPageContexts has been renamed pageContexts, see ${docLink}`, {
440
+ showStackTrace: true,
441
+ onlyOnce: true
442
+ });
443
+ return prerenderContext.pageContexts;
444
+ }
445
+ });
446
+ return hookFn(prerenderContextPublic);
447
+ }, onPrerenderStartHook, null);
439
448
  restoreEnumerable();
440
449
  if (result === null || result === undefined) {
441
450
  return;
@@ -542,7 +551,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
542
551
  pageContext,
543
552
  htmlString: documentHtml,
544
553
  pageContextSerialized,
545
- doNotCreateExtraDirectory: prerenderContext._noExtraDir,
554
+ doNotCreateExtraDirectory: prerenderContext.noExtraDir,
546
555
  pageId
547
556
  });
548
557
  })));
@@ -577,8 +586,8 @@ function warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial)
577
586
  (0, utils_js_1.assertWarning)(partial, `Cannot pre-render page ${pageAt} because it has a non-static route, while no ${hookName}() hook returned any URL matching the page's route. You need to use a ${hookName}() hook (https://vike.dev/${hookName}) providing a list of URLs for ${pageAt} that should be pre-rendered. If you don't want to pre-render ${pageAt} then use the option prerender.partial (https://vike.dev/prerender#partial) to suppress this warning.`, { onlyOnce: true });
578
587
  });
579
588
  }
580
- async function prerender404(prerenderedPageContexts, prerenderContext, onComplete) {
581
- if (!Object.values(prerenderedPageContexts).find(({ urlOriginal }) => urlOriginal === '/404')) {
589
+ async function prerender404(prerenderContext, onComplete) {
590
+ if (!Object.values(prerenderContext.prerenderedPageContexts).find(({ urlOriginal }) => urlOriginal === '/404')) {
582
591
  let result;
583
592
  try {
584
593
  result = await (0, renderPageAlreadyRouted_js_1.prerender404Page)(prerenderContext.pageContextInit);
@@ -601,22 +610,23 @@ async function prerender404(prerenderedPageContexts, prerenderContext, onComplet
601
610
  }
602
611
  }
603
612
  }
604
- async function writeFiles({ urlOriginal, pageContext, htmlString, pageContextSerialized, doNotCreateExtraDirectory }, root, outDirClient, onPagePrerender, logLevel) {
613
+ async function writeFiles({ urlOriginal, pageContext, htmlString, pageContextSerialized, doNotCreateExtraDirectory }, root, outDirClient, onPagePrerender, output, logLevel) {
605
614
  (0, utils_js_1.assert)(urlOriginal.startsWith('/'));
606
615
  const writeJobs = [
607
- write(urlOriginal, pageContext, '.html', htmlString, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, logLevel)
616
+ write(urlOriginal, pageContext, 'HTML', htmlString, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, output, logLevel)
608
617
  ];
609
618
  if (pageContextSerialized !== null) {
610
- writeJobs.push(write(urlOriginal, pageContext, '.pageContext.json', pageContextSerialized, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, logLevel));
619
+ writeJobs.push(write(urlOriginal, pageContext, 'JSON', pageContextSerialized, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, output, logLevel));
611
620
  }
612
621
  await Promise.all(writeJobs);
613
622
  }
614
- async function write(urlOriginal, pageContext, fileExtension, fileContent, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, logLevel) {
623
+ async function write(urlOriginal, pageContext, fileType, fileContent, root, outDirClient, doNotCreateExtraDirectory, onPagePrerender, output, logLevel) {
615
624
  let fileUrl;
616
- if (fileExtension === '.html') {
625
+ if (fileType === 'HTML') {
617
626
  fileUrl = (0, utils_js_1.urlToFile)(urlOriginal, '.html', doNotCreateExtraDirectory);
618
627
  }
619
628
  else {
629
+ (0, utils_js_1.assert)(fileType === 'JSON');
620
630
  fileUrl = (0, getPageContextRequestUrl_js_1.getPageContextRequestUrl)(urlOriginal);
621
631
  }
622
632
  (0, utils_js_1.assertPosixPath)(fileUrl);
@@ -628,6 +638,12 @@ async function write(urlOriginal, pageContext, fileExtension, fileContent, root,
628
638
  (0, utils_js_1.assertPosixPath)(outDirClient);
629
639
  (0, utils_js_1.assertPosixPath)(filePathRelative);
630
640
  const filePath = path_1.default.posix.join(outDirClient, filePathRelative);
641
+ output.push({
642
+ filePath,
643
+ fileType,
644
+ fileContent,
645
+ pageContext
646
+ });
631
647
  if (onPagePrerender) {
632
648
  const prerenderPageContext = {};
633
649
  (0, utils_js_1.objectAssign)(prerenderPageContext, pageContext);
@@ -796,3 +812,9 @@ prerenderConfig) {
796
812
  (0, utils_js_1.assertUsage)(false, `Setting ${picocolors_1.default.cyan(`prerender.${prop}`)} ${errMsg}`);
797
813
  }
798
814
  }
815
+ function makePublic(prerenderContext) {
816
+ const prerenderContextPublic = (0, utils_js_1.makePublicCopy)(prerenderContext, 'prerenderContext', [
817
+ 'pageContexts'
818
+ ]);
819
+ return prerenderContextPublic;
820
+ }
@@ -33,3 +33,4 @@ __exportStar(require("../../utils/isFilePathAbsoluteFilesystem.js"), exports);
33
33
  __exportStar(require("../../utils/isArray.js"), exports);
34
34
  __exportStar(require("../../utils/isObject.js"), exports);
35
35
  __exportStar(require("../../utils/changeEnumerable.js"), exports);
36
+ __exportStar(require("../../utils/makePublicCopy.js"), exports);
@@ -53,28 +53,8 @@ async function getGlobalContextAsync(isProduction) {
53
53
  return makePublic(globalContext);
54
54
  }
55
55
  function makePublic(globalContext) {
56
- const globalContextPublic = {
57
- // TODO/now: add viteConfig and vikeConfig
58
- assetsManifest: globalContext.assetsManifest
59
- };
60
- // Add internals (and prepended _ prefix to their keys)
61
- {
62
- const publicKeys = Object.keys(globalContextPublic);
63
- (0, utils_js_1.objectKeys)(globalContext)
64
- .filter((key) => !publicKeys.includes(key))
65
- .forEach((key) => {
66
- const keyPublic = `_${key}`;
67
- Object.defineProperty(globalContextPublic, keyPublic, {
68
- enumerable: true,
69
- get() {
70
- (0, utils_js_1.assertWarning)(false, `Using internal globalContext.${keyPublic} which is discouraged: it may break in any minor version update. Instead, reach out on GitHub and elaborate your use case.`, {
71
- onlyOnce: true
72
- });
73
- return globalContext[key];
74
- }
75
- });
76
- });
77
- }
56
+ // TODO/now: add viteConfig and vikeConfig
57
+ const globalContextPublic = (0, utils_js_1.makePublicCopy)(globalContext, 'globalContext', ['assetsManifest']);
78
58
  return globalContextPublic;
79
59
  }
80
60
  function setGlobalContext_viteDevServer(viteDevServer) {
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
- // TODO/v1-release: remove
2
+ // TODO/v1-release: remove https://github.com/vikejs/vike/issues/2122
3
3
  // This doesn't do anything anymore. (It's kept to avoid introducing a breaking change.)
@@ -76,3 +76,4 @@ __exportStar(require("../../utils/isVikeReactApp.js"), exports);
76
76
  __exportStar(require("../../utils/getPropAccessNotation.js"), exports);
77
77
  __exportStar(require("../../utils/PROJECT_VERSION.js"), exports);
78
78
  __exportStar(require("../../utils/genPromise.js"), exports);
79
+ __exportStar(require("../../utils/makePublicCopy.js"), exports);