vike 0.4.225-commit-b8fc36e → 0.4.225-commit-706a37b

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 (62) hide show
  1. package/dist/cjs/node/api/prepareViteApiCall.js +4 -2
  2. package/dist/cjs/node/api/prerender.js +0 -1
  3. package/dist/cjs/node/api/preview.js +27 -6
  4. package/dist/cjs/node/cli/entry.js +4 -2
  5. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +51 -0
  6. package/dist/cjs/node/plugin/plugins/build.js +3 -1
  7. package/dist/cjs/node/plugin/plugins/commonConfig.js +4 -0
  8. package/dist/cjs/node/prerender/utils.js +1 -1
  9. package/dist/cjs/node/runtime/globalContext.js +8 -4
  10. package/dist/cjs/node/runtime/utils.js +1 -1
  11. package/dist/cjs/node/shared/utils.js +1 -1
  12. package/dist/cjs/node/shared/virtual-files.js +14 -10
  13. package/dist/cjs/shared/modifyUrl.js +3 -5
  14. package/dist/cjs/shared/modifyUrlSameOrigin.js +42 -0
  15. package/dist/cjs/shared/utils.js +2 -1
  16. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  17. package/dist/cjs/utils/assertSetup.js +17 -8
  18. package/dist/cjs/utils/isNullish.js +16 -0
  19. package/dist/cjs/utils/objectFilter.js +10 -0
  20. package/dist/esm/client/client-routing-runtime/navigate.d.ts +6 -5
  21. package/dist/esm/client/client-routing-runtime/navigate.js +6 -2
  22. package/dist/esm/client/client-routing-runtime/normalizeUrlArgument.js +1 -1
  23. package/dist/esm/node/api/prepareViteApiCall.d.ts +1 -0
  24. package/dist/esm/node/api/prepareViteApiCall.js +4 -2
  25. package/dist/esm/node/api/prerender.js +0 -1
  26. package/dist/esm/node/api/preview.d.ts +1 -1
  27. package/dist/esm/node/api/preview.js +24 -6
  28. package/dist/esm/node/cli/entry.js +4 -2
  29. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.d.ts +3 -0
  30. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +49 -0
  31. package/dist/esm/node/plugin/plugins/build.js +3 -1
  32. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +2 -0
  33. package/dist/esm/node/plugin/plugins/commonConfig.js +4 -0
  34. package/dist/esm/node/prerender/utils.d.ts +1 -1
  35. package/dist/esm/node/prerender/utils.js +1 -1
  36. package/dist/esm/node/runtime/globalContext.d.ts +2 -3
  37. package/dist/esm/node/runtime/globalContext.js +8 -4
  38. package/dist/esm/node/runtime/utils.d.ts +1 -1
  39. package/dist/esm/node/runtime/utils.js +1 -1
  40. package/dist/esm/node/shared/utils.d.ts +1 -1
  41. package/dist/esm/node/shared/utils.js +1 -1
  42. package/dist/esm/node/shared/virtual-files.d.ts +2 -0
  43. package/dist/esm/node/shared/virtual-files.js +14 -10
  44. package/dist/esm/shared/modifyUrl.d.ts +2 -2
  45. package/dist/esm/shared/modifyUrl.js +3 -5
  46. package/dist/esm/shared/modifyUrlSameOrigin.d.ts +9 -0
  47. package/dist/esm/shared/modifyUrlSameOrigin.js +40 -0
  48. package/dist/esm/shared/utils.d.ts +2 -1
  49. package/dist/esm/shared/utils.js +2 -1
  50. package/dist/esm/types/index.d.ts +0 -1
  51. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  52. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  53. package/dist/esm/utils/assertSetup.d.ts +2 -2
  54. package/dist/esm/utils/assertSetup.js +17 -8
  55. package/dist/esm/utils/isNullish.d.ts +3 -0
  56. package/dist/esm/utils/isNullish.js +11 -0
  57. package/dist/esm/utils/objectFilter.d.ts +1 -0
  58. package/dist/esm/utils/objectFilter.js +7 -0
  59. package/package.json +2 -2
  60. package/dist/cjs/utils/isNotNullish.js +0 -5
  61. package/dist/esm/utils/isNotNullish.d.ts +0 -1
  62. package/dist/esm/utils/isNotNullish.js +0 -1
@@ -62,11 +62,12 @@ function clear() {
62
62
  }
63
63
  async function resolveConfigs(viteConfigFromUserApiOptions, operation) {
64
64
  const viteInfo = await getViteInfo(viteConfigFromUserApiOptions, operation);
65
- await assertViteRoot2(viteInfo.root, viteInfo.viteConfigFromUserEnhanced, operation);
66
65
  const vikeConfig = await (0, getVikeConfig_js_1.getVikeConfig2)(viteInfo.root, operation === 'dev', viteInfo.vikeVitePluginOptions);
67
66
  const viteConfigFromUserEnhanced = applyVikeViteConfig(viteInfo.viteConfigFromUserEnhanced, vikeConfig);
67
+ const { viteConfigResolved } = await assertViteRoot2(viteInfo.root, viteConfigFromUserEnhanced, operation);
68
68
  return {
69
69
  vikeConfig,
70
+ viteConfigResolved, // ONLY USE if strictly necessary. (We plan to remove assertViteRoot2() as explained in the comments of that function.)
70
71
  viteConfigFromUserEnhanced
71
72
  };
72
73
  }
@@ -189,9 +190,10 @@ function normalizeViteRoot(root) {
189
190
  const errMsg = `A Vite plugin is modifying Vite's setting ${picocolors_1.default.cyan('root')} which is forbidden`;
190
191
  async function assertViteRoot2(root, viteConfigFromUserEnhanced, operation) {
191
192
  const args = getResolveConfigArgs(viteConfigFromUserEnhanced, operation);
192
- // We can eventually this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
193
+ // We can eventually remove this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering and preview which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
193
194
  const viteConfigResolved = await (0, vite_1.resolveConfig)(...args);
194
195
  (0, utils_js_1.assertUsage)(normalizeViteRoot(viteConfigResolved.root) === normalizeViteRoot(root), errMsg);
196
+ return { viteConfigResolved };
195
197
  }
196
198
  function assertViteRoot(root, config) {
197
199
  if (globalObject.root)
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.prerender = prerender;
4
4
  const runPrerender_js_1 = require("../prerender/runPrerender.js");
5
5
  const prepareViteApiCall_js_1 = require("./prepareViteApiCall.js");
6
- // TODO/soon use importServerProductionIndex()
7
6
  /**
8
7
  * Programmatically trigger `$ vike prerender`
9
8
  *
@@ -1,18 +1,39 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.preview = preview;
4
7
  const prepareViteApiCall_js_1 = require("./prepareViteApiCall.js");
5
8
  const vite_1 = require("vite");
9
+ const runtime_1 = require("@brillout/vite-plugin-server-entry/runtime");
10
+ const getOutDirs_js_1 = require("../plugin/shared/getOutDirs.js");
11
+ const utils_js_1 = require("./utils.js");
12
+ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
13
+ const node_path_1 = __importDefault(require("node:path"));
14
+ const utils_js_2 = require("../runtime/utils.js");
6
15
  /**
7
16
  * Programmatically trigger `$ vike preview`
8
17
  *
9
18
  * https://vike.dev/api#preview
10
19
  */
11
20
  async function preview(options = {}) {
12
- const { viteConfigFromUserEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options, 'preview');
13
- const server = await (0, vite_1.preview)(viteConfigFromUserEnhanced);
14
- return {
15
- viteServer: server,
16
- viteConfig: server.config
17
- };
21
+ (0, utils_js_2.onSetupPreview)();
22
+ const { viteConfigFromUserEnhanced, viteConfigResolved } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(options, 'preview');
23
+ if (viteConfigResolved.vitePluginServerEntry?.inject) {
24
+ const outDir = (0, getOutDirs_js_1.getOutDirs)(viteConfigResolved).outDirRoot;
25
+ const { outServerIndex } = await (0, runtime_1.importServerProductionIndex)({ outDir });
26
+ const outServerIndexRelative = node_path_1.default.relative(viteConfigResolved.root, outServerIndex);
27
+ (0, utils_js_1.assertWarning)(false, `Never run ${picocolors_1.default.cyan('$ vike preview')} in production, run ${picocolors_1.default.cyan(`$ node ${outServerIndexRelative}`)} instead.`, { onlyOnce: true });
28
+ return {
29
+ viteConfig: viteConfigResolved
30
+ };
31
+ }
32
+ else {
33
+ const server = await (0, vite_1.preview)(viteConfigFromUserEnhanced);
34
+ return {
35
+ viteServer: server,
36
+ viteConfig: server.config
37
+ };
38
+ }
18
39
  }
@@ -95,8 +95,10 @@ async function cmdBuild() {
95
95
  async function cmdPreview() {
96
96
  try {
97
97
  const { viteServer } = await (0, index_js_1.preview)();
98
- viteServer.printUrls();
99
- viteServer.bindCLIShortcuts({ print: true });
98
+ if (viteServer) {
99
+ viteServer.printUrls();
100
+ viteServer.bindCLIShortcuts({ print: true });
101
+ }
100
102
  }
101
103
  catch (err) {
102
104
  console.error(picocolors_1.default.red(`Error while starting preview server:`));
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pluginModuleBanner = pluginModuleBanner;
4
+ const utils_js_1 = require("../../utils.js");
5
+ const virtual_files_js_1 = require("../../../shared/virtual-files.js");
6
+ const isViteServerBuild_js_1 = require("../../shared/isViteServerBuild.js");
7
+ // Rollup's banner feature doesn't work with Vite: https://github.com/vitejs/vite/issues/8412
8
+ // But, anyways, we want to prepend the banner at the beginning of each module, not at the beginning of each file (I believe that's what Rollup's banner feature does).
9
+ const vikeModuleBannerPlaceholder = 'vikeModuleBannerPlaceholder';
10
+ function pluginModuleBanner() {
11
+ let config;
12
+ return {
13
+ name: 'vike:pluginModuleBanner',
14
+ enforce: 'post',
15
+ apply: 'build',
16
+ configResolved(config_) {
17
+ config = config_;
18
+ },
19
+ generateBundle: {
20
+ order: 'post',
21
+ handler(_options, bundle) {
22
+ for (const module of Object.values(bundle)) {
23
+ if (module.type === 'chunk') {
24
+ if ((0, isViteServerBuild_js_1.isViteServerBuild)(config)) {
25
+ const codeOld = module.code;
26
+ const codeNew = codeOld.replace(/vikeModuleBannerPlaceholder\("([^"]*)"\);/g, '/* $1 [vike:pluginModuleBanner] */');
27
+ (0, utils_js_1.assert)(!codeNew.includes(vikeModuleBannerPlaceholder));
28
+ module.code = codeNew;
29
+ }
30
+ else {
31
+ (0, utils_js_1.assert)(!module.code.includes(vikeModuleBannerPlaceholder));
32
+ }
33
+ }
34
+ }
35
+ }
36
+ },
37
+ transform: {
38
+ order: 'post',
39
+ handler(code, id, options) {
40
+ if (!(0, isViteServerBuild_js_1.isViteServerBuild_safe)(config, options))
41
+ return;
42
+ if (id.startsWith('\0'))
43
+ id = id;
44
+ id = (0, virtual_files_js_1.removeVirtualIdTag)(id);
45
+ if (id.startsWith(config.root))
46
+ id = id.slice(config.root.length + 1);
47
+ return `${vikeModuleBannerPlaceholder}(${JSON.stringify(id)}); ${code}`;
48
+ }
49
+ }
50
+ };
51
+ }
@@ -8,6 +8,7 @@ const pluginDistFileNames_js_1 = require("./build/pluginDistFileNames.js");
8
8
  const pluginAutoFullBuild_js_1 = require("./build/pluginAutoFullBuild.js");
9
9
  const pluginBuildEntry_js_1 = require("./build/pluginBuildEntry.js");
10
10
  const pluginBuildConfig_js_1 = require("./build/pluginBuildConfig.js");
11
+ const pluginModuleBanner_js_1 = require("./build/pluginModuleBanner.js");
11
12
  function build() {
12
13
  return [
13
14
  ...(0, pluginBuildConfig_js_1.pluginBuildConfig)(),
@@ -16,6 +17,7 @@ function build() {
16
17
  ...(0, pluginBuildEntry_js_1.pluginBuildEntry)(),
17
18
  (0, pluginDistPackageJsonFile_js_1.pluginDistPackageJsonFile)(),
18
19
  (0, pluginSuppressRollupWarning_js_1.pluginSuppressRollupWarning)(),
19
- (0, pluginDistFileNames_js_1.pluginDistFileNames)()
20
+ (0, pluginDistFileNames_js_1.pluginDistFileNames)(),
21
+ (0, pluginModuleBanner_js_1.pluginModuleBanner)()
20
22
  ];
21
23
  }
@@ -71,6 +71,10 @@ function commonConfig(vikeVitePluginOptions) {
71
71
  assertEsm(config.root);
72
72
  assertVikeCliOrApi(config);
73
73
  temp_supportOldInterface(config);
74
+ // Only emit dist/server/entry.mjs if necessary
75
+ if (config.vitePluginServerEntry?.inject &&
76
+ !(0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(config._vikeConfigObject).isPrerenderingEnabled)
77
+ config.vitePluginServerEntry.disableServerEntryEmit = true;
74
78
  }
75
79
  },
76
80
  config: {
@@ -33,4 +33,4 @@ __exportStar(require("../../utils/isArray.js"), exports);
33
33
  __exportStar(require("../../utils/isObject.js"), exports);
34
34
  __exportStar(require("../../utils/changeEnumerable.js"), exports);
35
35
  __exportStar(require("../../utils/makePublicCopy.js"), exports);
36
- __exportStar(require("../../utils/isNotNullish.js"), exports);
36
+ __exportStar(require("../../utils/isNullish.js"), exports);
@@ -311,10 +311,14 @@ async function loadBuildEntry(outDir) {
311
311
  globalObject.buildEntry = globalObject.buildEntryPrevious;
312
312
  }
313
313
  (0, utils_js_1.assert)(globalObject.buildEntry);
314
- (0, utils_js_1.assertWarning)(!globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject,
315
- // TODO/soon: show precise path
316
- // TODO/soon: make this warning work on test/vike-node/
317
- `Run the server production build (e.g. ${picocolors_1.default.cyan('$ node dist/server/index.mjs')}) instead of running the original server entry (e.g. ${picocolors_1.default.cyan('$ ts-node server/index.ts')})`, { onlyOnce: true });
314
+ (0, utils_js_1.assertWarning)(
315
+ // vike-server => `vitePluginServerEntry.inject === true`
316
+ // vike-node => `vitePluginServerEntry.inject === [ 'index' ]`
317
+ globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject !== true,
318
+ /* TO-DO/eventually:
319
+ !!globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject,
320
+ */
321
+ `Run the built server entry (e.g. ${picocolors_1.default.cyan('$ node dist/server/index.mjs')}) instead of the original server entry (e.g. ${picocolors_1.default.cyan('$ ts-node server/index.ts')})`, { onlyOnce: true });
318
322
  }
319
323
  const { buildEntry } = globalObject;
320
324
  assertBuildEntry(buildEntry);
@@ -51,7 +51,7 @@ __exportStar(require("../../utils/urlToFile.js"), exports);
51
51
  __exportStar(require("../../utils/getGlobalObject.js"), exports);
52
52
  __exportStar(require("../../utils/freezePartial.js"), exports);
53
53
  __exportStar(require("../../utils/isNpmPackage.js"), exports);
54
- __exportStar(require("../../utils/isNotNullish.js"), exports);
54
+ __exportStar(require("../../utils/isNullish.js"), exports);
55
55
  __exportStar(require("../../utils/isScriptFile.js"), exports);
56
56
  __exportStar(require("../../utils/removeFileExtention.js"), exports);
57
57
  __exportStar(require("../../utils/objectKeys.js"), exports);
@@ -28,6 +28,6 @@ __exportStar(require("../../utils/parseUrl.js"), exports);
28
28
  __exportStar(require("../../utils/parseUrl-extras.js"), exports);
29
29
  __exportStar(require("../../utils/isObject.js"), exports);
30
30
  __exportStar(require("../../utils/assertIsNotBrowser.js"), exports);
31
- __exportStar(require("../../utils/isNotNullish.js"), exports);
31
+ __exportStar(require("../../utils/isNullish.js"), exports);
32
32
  __exportStar(require("../../utils/unique.js"), exports);
33
33
  __exportStar(require("../../utils/debug.js"), exports);
@@ -6,32 +6,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.isVirtualFileId = isVirtualFileId;
7
7
  exports.getVirtualFileId = getVirtualFileId;
8
8
  exports.resolveVirtualFileId = resolveVirtualFileId;
9
+ exports.removeVirtualIdTag = removeVirtualIdTag;
9
10
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
10
11
  const utils_js_1 = require("./utils.js");
11
12
  const idBase = 'virtual:vike:';
12
13
  // https://vitejs.dev/guide/api-plugin.html#virtual-modules-convention
13
- const tag = '\0';
14
+ const virtualIdTag = '\0';
14
15
  function isVirtualFileId(id) {
15
16
  if (id.startsWith(idBase))
16
17
  return true;
17
- if (id.startsWith(tag + idBase))
18
+ if (id.startsWith(virtualIdTag + idBase))
18
19
  return true;
19
20
  // https://github.com/vikejs/vike/issues/1985
20
21
  (0, utils_js_1.assertUsage)(!id.includes(idBase), `Encountered a module ID ${picocolors_1.default.cyan(id)} that is unexpected. Are you using a tool that modifies the ID of modules? For example, the baseUrl setting in tsconfig.json cannot be used.`);
21
22
  return false;
22
23
  }
23
24
  function getVirtualFileId(id) {
24
- if (id.startsWith(tag)) {
25
- id = id.slice(tag.length);
26
- }
27
- (0, utils_js_1.assert)(!id.startsWith(tag));
28
- return id;
25
+ return removeVirtualIdTag(id);
29
26
  }
30
27
  function resolveVirtualFileId(id) {
31
28
  (0, utils_js_1.assert)(isVirtualFileId(id));
32
- if (!id.startsWith(tag)) {
33
- id = tag + id;
29
+ if (!id.startsWith(virtualIdTag)) {
30
+ id = virtualIdTag + id;
31
+ }
32
+ (0, utils_js_1.assert)(id.startsWith(virtualIdTag));
33
+ return id;
34
+ }
35
+ function removeVirtualIdTag(id) {
36
+ if (id.startsWith(virtualIdTag)) {
37
+ id = id.slice(virtualIdTag.length);
34
38
  }
35
- (0, utils_js_1.assert)(id.startsWith(tag));
39
+ (0, utils_js_1.assert)(!id.startsWith(virtualIdTag));
36
40
  return id;
37
41
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.modifyUrl = modifyUrl;
4
+ const modifyUrlSameOrigin_js_1 = require("./modifyUrlSameOrigin.js");
4
5
  const utils_js_1 = require("./utils.js");
5
6
  /**
6
7
  * Modify a URL.
@@ -10,9 +11,8 @@ const utils_js_1 = require("./utils.js");
10
11
  * https://vike.dev/modifyUrl
11
12
  */
12
13
  function modifyUrl(url, modify) {
14
+ url = (0, modifyUrlSameOrigin_js_1.modifyUrlSameOrigin)(url, modify);
13
15
  const urlParsed = (0, utils_js_1.parseUrl)(url, '/');
14
- // Pathname
15
- const pathname = modify.pathname ?? urlParsed.pathname;
16
16
  // Origin
17
17
  const originParts = [
18
18
  modify.protocol ?? urlParsed.protocol ?? '',
@@ -23,8 +23,6 @@ function modifyUrl(url, modify) {
23
23
  originParts.push(`:${port}`);
24
24
  }
25
25
  const origin = originParts.join('');
26
- const urlModified = (0, utils_js_1.createUrlFromComponents)(origin, pathname,
27
- // Should we also support modifying search and hash?
28
- urlParsed.searchOriginal, urlParsed.hashOriginal);
26
+ const urlModified = (0, utils_js_1.createUrlFromComponents)(origin, urlParsed.pathname, urlParsed.searchOriginal, urlParsed.hashOriginal);
29
27
  return urlModified;
30
28
  }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modifyUrlSameOrigin = modifyUrlSameOrigin;
4
+ const utils_js_1 = require("./utils.js");
5
+ function modifyUrlSameOrigin(url, modify) {
6
+ const urlParsed = (0, utils_js_1.parseUrl)(url, '/');
7
+ // Pathname
8
+ const pathname = modify.pathname ?? urlParsed.pathnameOriginal;
9
+ (0, utils_js_1.assertUsageUrlPathnameAbsolute)(pathname, 'modify.pathname');
10
+ // Search
11
+ let search = modify.search === null ? '' : !modify.search ? urlParsed.searchOriginal : resolveSearch(urlParsed, modify.search);
12
+ if (search === '?')
13
+ search = '';
14
+ // Hash
15
+ let hash;
16
+ if (modify.hash === null) {
17
+ hash = '';
18
+ }
19
+ else if (modify.hash === undefined) {
20
+ hash = urlParsed.hashOriginal ?? '';
21
+ }
22
+ else {
23
+ hash = modify.hash;
24
+ if (!hash.startsWith('#'))
25
+ hash = '#' + hash;
26
+ }
27
+ const urlModified = (0, utils_js_1.createUrlFromComponents)(urlParsed.origin, pathname, search, hash);
28
+ return urlModified;
29
+ }
30
+ function resolveSearch(urlParsed, search) {
31
+ let searchParams;
32
+ if (search instanceof URLSearchParams) {
33
+ // Overwrite
34
+ searchParams = search;
35
+ }
36
+ else {
37
+ // Merge
38
+ const searchMap = (0, utils_js_1.objectFilter)({ ...urlParsed.search, ...search }, (utils_js_1.isNotNullish_keyVal));
39
+ searchParams = new URLSearchParams(searchMap);
40
+ }
41
+ return '?' + searchParams.toString();
42
+ }
@@ -30,7 +30,7 @@ __exportStar(require("../utils/isBrowser.js"), exports);
30
30
  __exportStar(require("../utils/hasProp.js"), exports);
31
31
  __exportStar(require("../utils/isPlainObject.js"), exports);
32
32
  __exportStar(require("../utils/compareString.js"), exports);
33
- __exportStar(require("../utils/isNotNullish.js"), exports);
33
+ __exportStar(require("../utils/isNullish.js"), exports);
34
34
  __exportStar(require("../utils/stringifyStringArray.js"), exports);
35
35
  __exportStar(require("../utils/cast.js"), exports);
36
36
  __exportStar(require("../utils/isPropertyGetter.js"), exports);
@@ -42,3 +42,4 @@ __exportStar(require("../utils/isArray.js"), exports);
42
42
  __exportStar(require("../utils/changeEnumerable.js"), exports);
43
43
  __exportStar(require("../utils/objectDefineProperty.js"), exports);
44
44
  __exportStar(require("../utils/isScriptFile.js"), exports);
45
+ __exportStar(require("../utils/objectFilter.js"), exports);
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROJECT_VERSION = void 0;
4
4
  // Automatically updated by @brillout/release-me
5
- exports.PROJECT_VERSION = '0.4.225-commit-b8fc36e';
5
+ exports.PROJECT_VERSION = '0.4.225-commit-706a37b';
@@ -7,12 +7,12 @@ exports.assertIsNotProductionRuntime = assertIsNotProductionRuntime;
7
7
  exports.onSetupRuntime = onSetupRuntime;
8
8
  exports.onSetupBuild = onSetupBuild;
9
9
  exports.onSetupPrerender = onSetupPrerender;
10
+ exports.onSetupPreview = onSetupPreview;
10
11
  exports.setNodeEnvProduction = setNodeEnvProduction;
11
12
  exports.markSetup_viteDevServer = markSetup_viteDevServer;
12
13
  exports.markSetup_vitePreviewServer = markSetup_vitePreviewServer;
13
14
  exports.markSetup_vikeVitePlugin = markSetup_vikeVitePlugin;
14
15
  exports.markSetup_isViteDev = markSetup_isViteDev;
15
- exports.markSetup_isPrerendering = markSetup_isPrerendering;
16
16
  const assert_js_1 = require("./assert.js");
17
17
  const assertIsNotBrowser_js_1 = require("./assertIsNotBrowser.js");
18
18
  const debug_js_1 = require("./debug.js");
@@ -34,7 +34,7 @@ function onSetupRuntime() {
34
34
  if (isTest())
35
35
  return;
36
36
  assertNodeEnvIsNotUndefinedString();
37
- if (!isViteLoaded()) {
37
+ if (!setup.isViteDev) {
38
38
  // TODO: make it assertUsage() again once https://github.com/vikejs/vike/issues/1528 is implemented.
39
39
  (0, assert_js_1.assertWarning)(!isNodeEnvDev(), `The ${getEnvDescription()}, which is contradictory because the environment seems to be a production environment (Vite isn't loaded), see https://vike.dev/NODE_ENV`, { onlyOnce: true });
40
40
  (0, assert_js_1.assertUsage)(!setup.vikeVitePlugin, `Loading Vike's Vite plugin (the ${picocolors_1.default.cyan('vike/plugin')} module) is prohibited in production.`);
@@ -42,11 +42,12 @@ function onSetupRuntime() {
42
42
  (0, assert_js_1.assert)(!setup.shouldNotBeProduction);
43
43
  }
44
44
  else {
45
- if (!setup.vitePreviewServer && !setup.isPrerendering) {
45
+ if (!setup.isPreview && !setup.vitePreviewServer && !setup.isPrerendering) {
46
46
  // TODO: make it assertUsage() again once https://github.com/vikejs/vike/issues/1528 is implemented.
47
47
  (0, assert_js_1.assertWarning)(isNodeEnvDev(), `The ${getEnvDescription()}, but Vite is loaded which is prohibited in production, see https://vike.dev/NODE_ENV`, { onlyOnce: true });
48
48
  }
49
- // These two assert() calls aren't that interesting
49
+ // These assert() calls aren't that interesting
50
+ (0, assert_js_1.assert)(setup.viteDevServer);
50
51
  (0, assert_js_1.assert)(setup.vikeVitePlugin);
51
52
  (0, assert_js_1.assert)(setup.shouldNotBeProduction);
52
53
  }
@@ -63,15 +64,19 @@ function onSetupBuild() {
63
64
  setNodeEnvProduction()
64
65
  */
65
66
  }
67
+ // Called by ../node/prerender/runPrerender.ts
66
68
  function onSetupPrerender() {
67
69
  markSetup_isPrerendering();
68
70
  if (getNodeEnv())
69
71
  assertUsageNodeEnvIsNotDev('pre-rendering');
70
72
  setNodeEnvProduction();
71
73
  }
72
- function isViteLoaded() {
73
- // Do we need setup.viteDevServer or setup.vitePreviewServer ?
74
- return setup.viteDevServer || setup.vitePreviewServer || setup.isViteDev !== undefined;
74
+ // Called by ../node/api/preview.ts
75
+ function onSetupPreview() {
76
+ markSetup_isPreview();
77
+ if (getNodeEnv())
78
+ assertUsageNodeEnvIsNotDev('pre-rendering');
79
+ setNodeEnvProduction();
75
80
  }
76
81
  function isTest() {
77
82
  return (0, isVitest_js_1.isVitest)() || isNodeEnv('test');
@@ -100,12 +105,16 @@ function markSetup_isViteDev(isViteDev) {
100
105
  debug('markSetup_isViteDev()', new Error().stack);
101
106
  setup.isViteDev = isViteDev;
102
107
  }
103
- // Called by ../node/prerender/runPrerender.ts
104
108
  function markSetup_isPrerendering() {
105
109
  if (debug.isActivated)
106
110
  debug('markSetup_isPrerendering()', new Error().stack);
107
111
  setup.isPrerendering = true;
108
112
  }
113
+ function markSetup_isPreview() {
114
+ if (debug.isActivated)
115
+ debug('markSetup_isPreview()', new Error().stack);
116
+ setup.isPreview = true;
117
+ }
109
118
  function assertUsageNodeEnvIsNotDev(operation) {
110
119
  if (!isNodeEnvDev())
111
120
  return;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNullish = isNullish;
4
+ exports.isNotNullish = isNotNullish;
5
+ exports.isNotNullish_keyVal = isNotNullish_keyVal;
6
+ function isNullish(val) {
7
+ return val === null || val === undefined;
8
+ }
9
+ // someArray.filter(isNotNullish)
10
+ function isNotNullish(p) {
11
+ return !isNullish(p);
12
+ }
13
+ // objectFilter(obj).filter(isNotNullish_keyVal)
14
+ function isNotNullish_keyVal(arg) {
15
+ return !isNullish(arg[1]);
16
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.objectFilter = objectFilter;
4
+ // Type inference for:
5
+ // ```js
6
+ // Object.fromEntries(Object.entries(obj).filter(someFilter))
7
+ // ```
8
+ function objectFilter(obj, filter) {
9
+ return Object.fromEntries(Object.entries(obj).filter(filter));
10
+ }
@@ -1,5 +1,10 @@
1
1
  export { navigate };
2
2
  export { reload };
3
+ type Options = {
4
+ keepScrollPosition?: boolean;
5
+ overwriteLastHistoryEntry?: boolean;
6
+ pageContext?: Record<string, unknown>;
7
+ };
3
8
  /** Programmatically navigate to a new page.
4
9
  *
5
10
  * https://vike.dev/navigate
@@ -8,9 +13,5 @@ export { reload };
8
13
  * @param keepScrollPosition - Don't scroll to the top of the page, instead keep the current scroll position.
9
14
  * @param overwriteLastHistoryEntry - Don't create a new entry in the browser's history, instead let the new URL replace the current URL. (This effectively removes the current URL from the browser history).
10
15
  */
11
- declare function navigate(url: string, { keepScrollPosition, overwriteLastHistoryEntry, pageContext }?: {
12
- keepScrollPosition?: boolean;
13
- overwriteLastHistoryEntry?: boolean;
14
- pageContext?: Record<string, unknown>;
15
- }): Promise<void>;
16
+ declare function navigate(url: string, options?: Options): Promise<void>;
16
17
  declare function reload(): Promise<void>;
@@ -1,5 +1,6 @@
1
1
  export { navigate };
2
2
  export { reload };
3
+ // import { modifyUrlSameOrigin, ModifyUrlSameOriginOptions } from '../../shared/modifyUrlSameOrigin.js'
3
4
  import { getCurrentUrl } from '../shared/getCurrentUrl.js';
4
5
  import { normalizeUrlArgument } from './normalizeUrlArgument.js';
5
6
  import { firstRenderStartPromise, renderPageClientSide } from './renderPageClientSide.js';
@@ -13,11 +14,14 @@ assertClientRouting();
13
14
  * @param keepScrollPosition - Don't scroll to the top of the page, instead keep the current scroll position.
14
15
  * @param overwriteLastHistoryEntry - Don't create a new entry in the browser's history, instead let the new URL replace the current URL. (This effectively removes the current URL from the browser history).
15
16
  */
16
- async function navigate(url, { keepScrollPosition = false, overwriteLastHistoryEntry = false, pageContext } = {}) {
17
+ async function navigate(url, options) {
18
+ // let url = normalizeUrlArgument(options.url ?? getCurrentUrl(), 'navigate')
19
+ // url = modifyUrlSameOrigin(url, options)
17
20
  normalizeUrlArgument(url, 'navigate');
18
21
  // If `hydrationCanBeAborted === false` (e.g. Vue) then we can apply navigate() only after hydration is done
19
22
  await firstRenderStartPromise;
20
- const scrollTarget = { preserveScroll: keepScrollPosition };
23
+ const { keepScrollPosition, overwriteLastHistoryEntry, pageContext } = options ?? {};
24
+ const scrollTarget = { preserveScroll: keepScrollPosition ?? false };
21
25
  await renderPageClientSide({
22
26
  scrollTarget,
23
27
  urlOriginal: url,
@@ -2,7 +2,7 @@ export { normalizeUrlArgument };
2
2
  import { assertUsage, isUrl, isUrlRelative } from './utils.js';
3
3
  function normalizeUrlArgument(url, fnName) {
4
4
  // Succinct error message to save client-side KBs
5
- const errMsg = `[${fnName}(url)] Invalid URL ${url}`;
5
+ const errMsg = `URL ${url} passed to ${fnName}() is invalid`;
6
6
  assertUsage(isUrl(url), errMsg);
7
7
  if (url.startsWith(location.origin)) {
8
8
  // Use normalizeClientSideUrl() instead?
@@ -7,6 +7,7 @@ import type { APIOptions, Operation } from './types.js';
7
7
  import { type VikeConfigObject } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
8
8
  declare function prepareViteApiCall(options: APIOptions, operation: Operation): Promise<{
9
9
  vikeConfig: VikeConfigObject;
10
+ viteConfigResolved: ResolvedConfig;
10
11
  viteConfigFromUserEnhanced: InlineConfig | undefined;
11
12
  }>;
12
13
  declare function getViteRoot(operation: Operation): Promise<string>;
@@ -24,11 +24,12 @@ function clear() {
24
24
  }
25
25
  async function resolveConfigs(viteConfigFromUserApiOptions, operation) {
26
26
  const viteInfo = await getViteInfo(viteConfigFromUserApiOptions, operation);
27
- await assertViteRoot2(viteInfo.root, viteInfo.viteConfigFromUserEnhanced, operation);
28
27
  const vikeConfig = await getVikeConfig2(viteInfo.root, operation === 'dev', viteInfo.vikeVitePluginOptions);
29
28
  const viteConfigFromUserEnhanced = applyVikeViteConfig(viteInfo.viteConfigFromUserEnhanced, vikeConfig);
29
+ const { viteConfigResolved } = await assertViteRoot2(viteInfo.root, viteConfigFromUserEnhanced, operation);
30
30
  return {
31
31
  vikeConfig,
32
+ viteConfigResolved, // ONLY USE if strictly necessary. (We plan to remove assertViteRoot2() as explained in the comments of that function.)
32
33
  viteConfigFromUserEnhanced
33
34
  };
34
35
  }
@@ -151,9 +152,10 @@ function normalizeViteRoot(root) {
151
152
  const errMsg = `A Vite plugin is modifying Vite's setting ${pc.cyan('root')} which is forbidden`;
152
153
  async function assertViteRoot2(root, viteConfigFromUserEnhanced, operation) {
153
154
  const args = getResolveConfigArgs(viteConfigFromUserEnhanced, operation);
154
- // We can eventually this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
155
+ // We can eventually remove this resolveConfig() call (along with removing the whole assertViteRoot2() function which is redundant with the assertViteRoot() function) so that Vike doesn't make any resolveConfig() (except for pre-rendering and preview which is required). But let's keep it for now, just to see whether calling resolveConfig() can be problematic.
155
156
  const viteConfigResolved = await resolveConfig(...args);
156
157
  assertUsage(normalizeViteRoot(viteConfigResolved.root) === normalizeViteRoot(root), errMsg);
158
+ return { viteConfigResolved };
157
159
  }
158
160
  function assertViteRoot(root, config) {
159
161
  if (globalObject.root)
@@ -1,7 +1,6 @@
1
1
  export { prerender };
2
2
  import { runPrerenderFromAPI } from '../prerender/runPrerender.js';
3
3
  import { prepareViteApiCall } from './prepareViteApiCall.js';
4
- // TODO/soon use importServerProductionIndex()
5
4
  /**
6
5
  * Programmatically trigger `$ vike prerender`
7
6
  *
@@ -7,6 +7,6 @@ import type { APIOptions } from './types.js';
7
7
  * https://vike.dev/api#preview
8
8
  */
9
9
  declare function preview(options?: APIOptions): Promise<{
10
- viteServer: PreviewServer;
10
+ viteServer?: PreviewServer;
11
11
  viteConfig: ResolvedConfig;
12
12
  }>;
@@ -1,16 +1,34 @@
1
1
  export { preview };
2
2
  import { prepareViteApiCall } from './prepareViteApiCall.js';
3
3
  import { preview as previewVite } from 'vite';
4
+ import { importServerProductionIndex } from '@brillout/vite-plugin-server-entry/runtime';
5
+ import { getOutDirs } from '../plugin/shared/getOutDirs.js';
6
+ import { assertWarning } from './utils.js';
7
+ import pc from '@brillout/picocolors';
8
+ import path from 'node:path';
9
+ import { onSetupPreview } from '../runtime/utils.js';
4
10
  /**
5
11
  * Programmatically trigger `$ vike preview`
6
12
  *
7
13
  * https://vike.dev/api#preview
8
14
  */
9
15
  async function preview(options = {}) {
10
- const { viteConfigFromUserEnhanced } = await prepareViteApiCall(options, 'preview');
11
- const server = await previewVite(viteConfigFromUserEnhanced);
12
- return {
13
- viteServer: server,
14
- viteConfig: server.config
15
- };
16
+ onSetupPreview();
17
+ const { viteConfigFromUserEnhanced, viteConfigResolved } = await prepareViteApiCall(options, 'preview');
18
+ if (viteConfigResolved.vitePluginServerEntry?.inject) {
19
+ const outDir = getOutDirs(viteConfigResolved).outDirRoot;
20
+ const { outServerIndex } = await importServerProductionIndex({ outDir });
21
+ const outServerIndexRelative = path.relative(viteConfigResolved.root, outServerIndex);
22
+ assertWarning(false, `Never run ${pc.cyan('$ vike preview')} in production, run ${pc.cyan(`$ node ${outServerIndexRelative}`)} instead.`, { onlyOnce: true });
23
+ return {
24
+ viteConfig: viteConfigResolved
25
+ };
26
+ }
27
+ else {
28
+ const server = await previewVite(viteConfigFromUserEnhanced);
29
+ return {
30
+ viteServer: server,
31
+ viteConfig: server.config
32
+ };
33
+ }
16
34
  }