vike 0.4.225 → 0.4.226-commit-8f5c172

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 (157) hide show
  1. package/dist/cjs/client/shared/getPageContextProxyForUser.js +3 -66
  2. package/dist/cjs/node/api/build.js +7 -7
  3. package/dist/cjs/node/api/dev.js +2 -2
  4. package/dist/cjs/node/api/prepareViteApiCall.js +55 -30
  5. package/dist/cjs/node/api/prerender.js +2 -3
  6. package/dist/cjs/node/api/preview.js +27 -6
  7. package/dist/cjs/node/api/utils.js +1 -0
  8. package/dist/cjs/node/cli/entry.js +4 -2
  9. package/dist/cjs/node/cli/parseCli.js +10 -4
  10. package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +3 -3
  11. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +51 -0
  12. package/dist/cjs/node/plugin/plugins/build.js +3 -1
  13. package/dist/cjs/node/plugin/plugins/commonConfig.js +22 -8
  14. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  15. package/dist/cjs/node/plugin/plugins/fileEnv.js +3 -0
  16. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +14 -10
  17. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -1
  18. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  19. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +99 -85
  20. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +10 -1
  21. package/dist/cjs/node/plugin/shared/getEnvVarObject.js +7 -0
  22. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +3 -3
  23. package/dist/cjs/node/prerender/runPrerender.js +21 -28
  24. package/dist/cjs/node/prerender/utils.js +1 -1
  25. package/dist/cjs/node/runtime/globalContext.js +13 -8
  26. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  27. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +67 -14
  28. package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +3 -2
  29. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  30. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  31. package/dist/cjs/node/runtime/renderPage.js +13 -28
  32. package/dist/cjs/node/runtime/utils.js +1 -1
  33. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +2 -2
  34. package/dist/cjs/node/shared/assertV1Design.js +1 -1
  35. package/dist/cjs/node/shared/utils.js +1 -1
  36. package/dist/cjs/node/shared/virtual-files.js +14 -10
  37. package/dist/cjs/shared/NOT_SERIALIZABLE.js +5 -0
  38. package/dist/cjs/shared/modifyUrl.js +3 -5
  39. package/dist/cjs/shared/modifyUrlSameOrigin.js +42 -0
  40. package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +3 -2
  41. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +5 -5
  42. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +9 -9
  43. package/dist/cjs/shared/utils.js +2 -1
  44. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  45. package/dist/cjs/utils/assert.js +10 -3
  46. package/dist/cjs/utils/assertSetup.js +12 -8
  47. package/dist/cjs/utils/assertSingleInstance.js +19 -4
  48. package/dist/cjs/utils/getRandomId.js +1 -1
  49. package/dist/cjs/utils/isNullish.js +16 -0
  50. package/dist/cjs/utils/normalizeHeaders.js +1 -1
  51. package/dist/cjs/utils/objectAssign.js +7 -2
  52. package/dist/cjs/utils/objectFilter.js +10 -0
  53. package/dist/cjs/utils/pick.js +12 -0
  54. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +3 -1
  55. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
  56. package/dist/esm/client/client-routing-runtime/navigate.d.ts +6 -5
  57. package/dist/esm/client/client-routing-runtime/navigate.js +6 -2
  58. package/dist/esm/client/client-routing-runtime/normalizeUrlArgument.js +1 -1
  59. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
  60. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +6 -3
  61. package/dist/esm/client/server-routing-runtime/getPageContext.js +6 -3
  62. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +1 -11
  63. package/dist/esm/client/shared/getPageContextProxyForUser.js +4 -67
  64. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  65. package/dist/esm/node/api/build.js +7 -7
  66. package/dist/esm/node/api/dev.js +2 -2
  67. package/dist/esm/node/api/prepareViteApiCall.d.ts +2 -1
  68. package/dist/esm/node/api/prepareViteApiCall.js +57 -32
  69. package/dist/esm/node/api/prerender.js +2 -3
  70. package/dist/esm/node/api/preview.d.ts +1 -1
  71. package/dist/esm/node/api/preview.js +24 -6
  72. package/dist/esm/node/api/utils.d.ts +1 -0
  73. package/dist/esm/node/api/utils.js +1 -0
  74. package/dist/esm/node/cli/entry.js +4 -2
  75. package/dist/esm/node/cli/parseCli.js +10 -4
  76. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +3 -3
  77. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.d.ts +3 -0
  78. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +49 -0
  79. package/dist/esm/node/plugin/plugins/build.js +3 -1
  80. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +10 -2
  81. package/dist/esm/node/plugin/plugins/commonConfig.js +22 -8
  82. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  83. package/dist/esm/node/plugin/plugins/fileEnv.js +3 -0
  84. package/dist/esm/node/plugin/plugins/importUserCode/index.js +15 -11
  85. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -1
  86. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +5 -2
  87. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  88. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +11 -2
  89. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +101 -86
  90. package/dist/esm/node/plugin/plugins/setGlobalContext.js +11 -2
  91. package/dist/esm/node/plugin/shared/getEnvVarObject.js +7 -0
  92. package/dist/esm/node/prerender/resolvePrerenderConfig.js +3 -3
  93. package/dist/esm/node/prerender/runPrerender.d.ts +1 -1
  94. package/dist/esm/node/prerender/runPrerender.js +21 -28
  95. package/dist/esm/node/prerender/utils.d.ts +1 -1
  96. package/dist/esm/node/prerender/utils.js +1 -1
  97. package/dist/esm/node/runtime/globalContext.d.ts +2 -3
  98. package/dist/esm/node/runtime/globalContext.js +13 -8
  99. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  100. package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +2 -0
  101. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +69 -15
  102. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +1 -1
  103. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +3 -2
  104. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  105. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +27 -1
  106. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  107. package/dist/esm/node/runtime/renderPage.js +14 -29
  108. package/dist/esm/node/runtime/utils.d.ts +1 -1
  109. package/dist/esm/node/runtime/utils.js +1 -1
  110. package/dist/esm/node/runtime-dev/createDevMiddleware.js +2 -2
  111. package/dist/esm/node/shared/assertV1Design.js +1 -1
  112. package/dist/esm/node/shared/utils.d.ts +1 -1
  113. package/dist/esm/node/shared/utils.js +1 -1
  114. package/dist/esm/node/shared/virtual-files.d.ts +2 -0
  115. package/dist/esm/node/shared/virtual-files.js +14 -10
  116. package/dist/esm/shared/NOT_SERIALIZABLE.d.ts +1 -0
  117. package/dist/esm/shared/NOT_SERIALIZABLE.js +2 -0
  118. package/dist/esm/shared/modifyUrl.d.ts +2 -2
  119. package/dist/esm/shared/modifyUrl.js +3 -5
  120. package/dist/esm/shared/modifyUrlSameOrigin.d.ts +9 -0
  121. package/dist/esm/shared/modifyUrlSameOrigin.js +40 -0
  122. package/dist/esm/shared/page-configs/Config.d.ts +11 -3
  123. package/dist/esm/shared/page-configs/PageConfig.d.ts +2 -2
  124. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +3 -1
  125. package/dist/esm/shared/page-configs/getConfigDefinedAt.js +3 -2
  126. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +5 -5
  127. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +9 -9
  128. package/dist/esm/shared/route/abort.d.ts +2 -2
  129. package/dist/esm/shared/types.d.ts +39 -3
  130. package/dist/esm/shared/utils.d.ts +2 -1
  131. package/dist/esm/shared/utils.js +2 -1
  132. package/dist/esm/types/index.d.ts +0 -1
  133. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  134. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  135. package/dist/esm/utils/assert.d.ts +2 -1
  136. package/dist/esm/utils/assert.js +10 -3
  137. package/dist/esm/utils/assertSetup.d.ts +2 -2
  138. package/dist/esm/utils/assertSetup.js +12 -8
  139. package/dist/esm/utils/assertSingleInstance.js +19 -4
  140. package/dist/esm/utils/getRandomId.d.ts +1 -1
  141. package/dist/esm/utils/getRandomId.js +1 -1
  142. package/dist/esm/utils/isNullish.d.ts +3 -0
  143. package/dist/esm/utils/isNullish.js +11 -0
  144. package/dist/esm/utils/normalizeHeaders.js +1 -1
  145. package/dist/esm/utils/objectAssign.d.ts +1 -1
  146. package/dist/esm/utils/objectAssign.js +7 -2
  147. package/dist/esm/utils/objectFilter.d.ts +1 -0
  148. package/dist/esm/utils/objectFilter.js +7 -0
  149. package/dist/esm/utils/pick.d.ts +1 -0
  150. package/dist/esm/utils/pick.js +9 -0
  151. package/package.json +4 -2
  152. package/dist/cjs/shared/notSerializable.js +0 -5
  153. package/dist/cjs/utils/isNotNullish.js +0 -5
  154. package/dist/esm/shared/notSerializable.d.ts +0 -1
  155. package/dist/esm/shared/notSerializable.js +0 -2
  156. package/dist/esm/utils/isNotNullish.d.ts +0 -1
  157. package/dist/esm/utils/isNotNullish.js +0 -1
@@ -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
+ }
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getConfigDefinedAt = getConfigDefinedAt;
7
7
  exports.getConfigDefinedAtOptional = getConfigDefinedAtOptional;
8
8
  exports.getDefinedAtString = getDefinedAtString;
9
+ exports.getDefinedByString = getDefinedByString;
9
10
  const utils_js_1 = require("../utils.js");
10
11
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
11
12
  const getExportPath_js_1 = require("./getExportPath.js");
@@ -49,14 +50,14 @@ function getDefinedAtString(definedAtData, configName) {
49
50
  }
50
51
  function getDefinedByString(definedAt, configName) {
51
52
  if (definedAt.definedBy === 'api') {
52
- return `API call ${picocolors_1.default.cyan(`${definedAt.operation}({${configName}})`)}`;
53
+ return `API call ${picocolors_1.default.cyan(`${definedAt.operation}({ vikeConfig: { ${configName} } })`)}`;
53
54
  }
54
55
  const { definedBy } = definedAt;
55
56
  if (definedBy === 'cli') {
56
57
  return `CLI option ${picocolors_1.default.cyan(`--${configName}`)}`;
57
58
  }
58
59
  if (definedBy === 'env') {
59
- return `environment variable ${picocolors_1.default.cyan(`VIKE_OPTIONS="{${configName}}"`)}`;
60
+ return `environment variable ${picocolors_1.default.cyan(`VIKE_CONFIG="{${configName}}"`)}`;
60
61
  }
61
62
  (0, utils_js_1.checkType)(definedBy);
62
63
  (0, utils_js_1.assert)(false);
@@ -58,11 +58,11 @@ function mergeCumulative(configValueSources) {
58
58
  return { value, definedAtData };
59
59
  }
60
60
  function getDefinedAt(configValueSource) {
61
- const { definedAtFilePath } = configValueSource;
62
- if (definedAtFilePath.definedBy)
63
- return definedAtFilePath;
61
+ const { definedAt } = configValueSource;
62
+ if (definedAt.definedBy)
63
+ return definedAt;
64
64
  return {
65
- filePathToShowToUser: definedAtFilePath.filePathToShowToUser,
66
- fileExportPathToShowToUser: definedAtFilePath.fileExportPathToShowToUser
65
+ filePathToShowToUser: definedAt.filePathToShowToUser,
66
+ fileExportPathToShowToUser: definedAt.fileExportPathToShowToUser
67
67
  };
68
68
  }
@@ -52,7 +52,7 @@ function serializeConfigValues(pageConfig, importStatements, filesEnv, isEnvMatc
52
52
  function getValueSerializedFromSource(configValueSource, configName, importStatements, filesEnv) {
53
53
  let valueData;
54
54
  if (configValueSource.valueIsLoaded && !configValueSource.valueIsLoadedWithImport) {
55
- valueData = getValueSerializedWithJson(configValueSource.value, configName, configValueSource.definedAtFilePath, importStatements, filesEnv, configValueSource.configEnv);
55
+ valueData = getValueSerializedWithJson(configValueSource.value, configName, configValueSource.definedAt, importStatements, filesEnv, configValueSource.configEnv);
56
56
  }
57
57
  else {
58
58
  valueData = getValueSerializedWithImport(configValueSource, importStatements, filesEnv, configName);
@@ -103,9 +103,9 @@ function serializeConfigValue(configValueBase, valueData, configName, lines, tab
103
103
  }
104
104
  function getValueSerializedWithImport(configValueSource, importStatements, filesEnv, configName) {
105
105
  (0, utils_js_1.assert)(!configValueSource.valueIsFilePath);
106
- const { valueIsDefinedByPlusValueFile, definedAtFilePath, configEnv } = configValueSource;
107
- (0, utils_js_1.assert)(!definedAtFilePath.definedBy);
108
- const { filePathAbsoluteVite, fileExportName } = definedAtFilePath;
106
+ const { valueIsDefinedByPlusValueFile, definedAt, configEnv } = configValueSource;
107
+ (0, utils_js_1.assert)(!definedAt.definedBy);
108
+ const { filePathAbsoluteVite, fileExportName } = definedAt;
109
109
  if (valueIsDefinedByPlusValueFile)
110
110
  (0, utils_js_1.assert)(fileExportName === undefined);
111
111
  const { importName } = addImportStatement(importStatements, filePathAbsoluteVite, fileExportName || '*', filesEnv, configEnv, configName);
@@ -232,12 +232,12 @@ function getConfigValuesBase(pageConfig, isEnvMatch, isEager) {
232
232
  return [...fromComputed, ...fromSources].filter((r) => r !== 'SKIP');
233
233
  }
234
234
  function getDefinedAtFileSource(source) {
235
- const { definedAtFilePath } = source;
236
- if (definedAtFilePath.definedBy)
237
- return definedAtFilePath;
235
+ const { definedAt } = source;
236
+ if (definedAt.definedBy)
237
+ return definedAt;
238
238
  const definedAtFile = {
239
- filePathToShowToUser: definedAtFilePath.filePathToShowToUser,
240
- fileExportPathToShowToUser: definedAtFilePath.fileExportPathToShowToUser
239
+ filePathToShowToUser: definedAt.filePathToShowToUser,
240
+ fileExportPathToShowToUser: definedAt.fileExportPathToShowToUser
241
241
  };
242
242
  return definedAtFile;
243
243
  }
@@ -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';
5
+ exports.PROJECT_VERSION = '0.4.226-commit-8f5c172';
@@ -47,7 +47,7 @@ function assert(condition, debugInfo) {
47
47
  const debugInfoSerialized = typeof debugInfo === 'string' ? debugInfo : JSON.stringify(debugInfo);
48
48
  return picocolors_1.default.dim(`Debug info (for Vike maintainers; you can ignore this): ${debugInfoSerialized}`);
49
49
  })();
50
- const link = picocolors_1.default.blue('https://github.com/vikejs/vike/issues/new?template=bug.yml');
50
+ const link = picocolors_1.default.underline('https://github.com/vikejs/vike/issues/new?template=bug.yml');
51
51
  let errMsg = [
52
52
  `You stumbled upon a Vike bug. Go to ${link} and copy-paste this error. A maintainer will fix the bug (usually within 24 hours).`,
53
53
  debugStr
@@ -61,7 +61,7 @@ function assert(condition, debugInfo) {
61
61
  globalObject.onBeforeLog?.();
62
62
  throw internalError;
63
63
  }
64
- function assertUsage(condition, errMsg, { showStackTrace } = {}) {
64
+ function assertUsage(condition, errMsg, { showStackTrace, exitOnError } = {}) {
65
65
  if (condition)
66
66
  return;
67
67
  showStackTrace = showStackTrace || globalObject.alwaysShowStackTrace;
@@ -73,7 +73,13 @@ function assertUsage(condition, errMsg, { showStackTrace } = {}) {
73
73
  globalObject.showStackTraceList.add(usageError);
74
74
  }
75
75
  globalObject.onBeforeLog?.();
76
- throw usageError;
76
+ if (!exitOnError) {
77
+ throw usageError;
78
+ }
79
+ else {
80
+ console.error(showStackTrace ? usageError : errMsg);
81
+ process.exit(1);
82
+ }
77
83
  }
78
84
  function getProjectError(errMsg) {
79
85
  errMsg = addWhitespace(errMsg);
@@ -187,6 +193,7 @@ function overwriteAssertProductionLogger(logger) {
187
193
  function isBug(err) {
188
194
  return String(err).includes(`[${bugTag}]`);
189
195
  }
196
+ // Called upon `DEBUG=vike:error`
190
197
  function setAlwaysShowStackTrace() {
191
198
  globalObject.alwaysShowStackTrace = true;
192
199
  }
@@ -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.viteDevServer && setup.isViteDev === undefined) {
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,10 @@ 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
50
49
  (0, assert_js_1.assert)(setup.vikeVitePlugin);
51
50
  (0, assert_js_1.assert)(setup.shouldNotBeProduction);
52
51
  }
@@ -63,15 +62,16 @@ function onSetupBuild() {
63
62
  setNodeEnvProduction()
64
63
  */
65
64
  }
65
+ // Called by ../node/prerender/runPrerender.ts
66
66
  function onSetupPrerender() {
67
67
  markSetup_isPrerendering();
68
68
  if (getNodeEnv())
69
69
  assertUsageNodeEnvIsNotDev('pre-rendering');
70
70
  setNodeEnvProduction();
71
71
  }
72
- function isViteLoaded() {
73
- // Do we need setup.viteDevServer or setup.vitePreviewServer ?
74
- return setup.viteDevServer || setup.vitePreviewServer || setup.isViteDev !== undefined;
72
+ // Called by ../node/api/preview.ts
73
+ function onSetupPreview() {
74
+ markSetup_isPreview();
75
75
  }
76
76
  function isTest() {
77
77
  return (0, isVitest_js_1.isVitest)() || isNodeEnv('test');
@@ -100,12 +100,16 @@ function markSetup_isViteDev(isViteDev) {
100
100
  debug('markSetup_isViteDev()', new Error().stack);
101
101
  setup.isViteDev = isViteDev;
102
102
  }
103
- // Called by ../node/prerender/runPrerender.ts
104
103
  function markSetup_isPrerendering() {
105
104
  if (debug.isActivated)
106
105
  debug('markSetup_isPrerendering()', new Error().stack);
107
106
  setup.isPrerendering = true;
108
107
  }
108
+ function markSetup_isPreview() {
109
+ if (debug.isActivated)
110
+ debug('markSetup_isPreview()', new Error().stack);
111
+ setup.isPreview = true;
112
+ }
109
113
  function assertUsageNodeEnvIsNotDev(operation) {
110
114
  if (!isNodeEnvDev())
111
115
  return;
@@ -16,13 +16,24 @@ const PROJECT_VERSION_js_1 = require("./PROJECT_VERSION.js");
16
16
  /* Use original assertWarning() after all CJS is removed from node_modules/vike/dist/
17
17
  import { assertWarning } from './assert.js'
18
18
  */
19
- const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('utils/assertSingleInstance.ts', {
20
- instances: [],
21
- alreadyLogged: new Set()
22
- });
19
+ let globalObject;
20
+ // getGlobalObjectSafe() can be called before this line
21
+ globalObject ?? (globalObject = genGlobalConfig());
22
+ function genGlobalConfig() {
23
+ return (0, getGlobalObject_js_1.getGlobalObject)('utils/assertSingleInstance.ts', {
24
+ instances: [],
25
+ alreadyLogged: new Set()
26
+ });
27
+ }
28
+ // We need getGlobalObjectSafe() because globalObject is `undefined` when exported functions are called before globalObject is initialized
29
+ function getGlobalObjectSafe() {
30
+ globalObject ?? (globalObject = genGlobalConfig());
31
+ return globalObject;
32
+ }
23
33
  const clientRuntimesClonflict = 'Client runtime of both Server Routing and Client Routing loaded https://vike.dev/client-runtimes-conflict';
24
34
  const clientNotSingleInstance = 'Client runtime loaded twice https://vike.dev/client-runtime-duplicated';
25
35
  function assertSingleInstance() {
36
+ const globalObject = getGlobalObjectSafe();
26
37
  {
27
38
  const versions = (0, unique_js_1.unique)(globalObject.instances);
28
39
  assertWarning(versions.length <= 1,
@@ -39,6 +50,7 @@ function assertSingleInstance() {
39
50
  }
40
51
  }
41
52
  function assertSingleInstance_onClientEntryServerRouting(isProduction) {
53
+ const globalObject = getGlobalObjectSafe();
42
54
  assertWarning(globalObject.isClientRouting !== true, clientRuntimesClonflict, {
43
55
  onlyOnce: true,
44
56
  showStackTrace: true
@@ -53,6 +65,7 @@ function assertSingleInstance_onClientEntryServerRouting(isProduction) {
53
65
  assertSingleInstance();
54
66
  }
55
67
  function assertSingleInstance_onClientEntryClientRouting(isProduction) {
68
+ const globalObject = getGlobalObjectSafe();
56
69
  assertWarning(globalObject.isClientRouting !== false, clientRuntimesClonflict, {
57
70
  onlyOnce: true,
58
71
  showStackTrace: true
@@ -68,10 +81,12 @@ function assertSingleInstance_onClientEntryClientRouting(isProduction) {
68
81
  }
69
82
  // Called by utils/assert.ts which is (most certainly) loaded by all entries. That way we don't have to call a callback for every entry. (There are a lot of entries: `client/router/`, `client/`, `node/runtime/`, `node/plugin/`, `node/cli`.)
70
83
  function assertSingleInstance_onAssertModuleLoad() {
84
+ const globalObject = getGlobalObjectSafe();
71
85
  globalObject.instances.push(PROJECT_VERSION_js_1.PROJECT_VERSION);
72
86
  assertSingleInstance();
73
87
  }
74
88
  function assertWarning(condition, errorMessage, { onlyOnce, showStackTrace }) {
89
+ const globalObject = getGlobalObjectSafe();
75
90
  if (condition) {
76
91
  return;
77
92
  }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRandomId = getRandomId;
4
4
  const assert_js_1 = require("./assert.js");
5
5
  // https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
6
- function getRandomId(length) {
6
+ function getRandomId(length = 12) {
7
7
  let randomId = '';
8
8
  while (randomId.length < length) {
9
9
  randomId += Math.random().toString(36).slice(2);
@@ -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
+ }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeHeaders = normalizeHeaders;
4
4
  const isObject_js_1 = require("./isObject.js");
5
5
  function normalizeHeaders(
6
- /* This type is precise, too precise which can be annoying: e.g. cannot pass a string[][] argument because it doesn't match the more precise [string,string][] type.
6
+ /* This type is too strict which is annoying: cannot pass `string[][]` because it doesn't match the more precise type `[string,string][]`.
7
7
  headersOriginal ConstructorParameters<typeof Headers>[0]
8
8
  */
9
9
  headersOriginal) {
@@ -5,9 +5,14 @@ const assert_js_1 = require("./assert.js");
5
5
  // Same as Object.assign() but:
6
6
  // - With type inference
7
7
  // - Preserves property descriptors, which we need for preserving the getters added by getPageContextUrlComputed()
8
- function objectAssign(obj, objAddendum) {
8
+ function objectAssign(obj, objAddendum, objAddendumCanBePageContextObject) {
9
9
  if (objAddendum) {
10
- (0, assert_js_1.assert)(!('_isPageContextObject' in objAddendum));
10
+ if (!objAddendumCanBePageContextObject) {
11
+ // We only need this assert() in the rare case when the user is expected to mutate `pageContext` after the Vike hook was executed (and its promise resolved).
12
+ // - The only use case I can think of is the user mutating `pageContext` after the onRenderClient() promise resolved (which can happen when client-side rendering finishes after onRenderClient() resolves). In that case, having Vike await async Vike hooks isn't enough.
13
+ // - IIRC this assert() was mostly needed for preserving the getters added by getPageContextUrlComputed() but we don't need this anymore.
14
+ (0, assert_js_1.assert)(!('_isPageContextObject' in objAddendum));
15
+ }
11
16
  Object.defineProperties(obj, Object.getOwnPropertyDescriptors(objAddendum));
12
17
  }
13
18
  }
@@ -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
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pick = pick;
4
+ function pick(obj, keys) {
5
+ const result = {};
6
+ for (const key of keys) {
7
+ if (key in obj) {
8
+ result[key] = obj[key];
9
+ }
10
+ }
11
+ return result;
12
+ }
@@ -1,5 +1,8 @@
1
1
  export { createPageContext };
2
2
  declare function createPageContext(urlOriginal: string): Promise<{
3
+ _isPageContextObject: boolean;
4
+ isClientSide: boolean;
5
+ isPrerendering: boolean;
3
6
  urlOriginal: string;
4
7
  _objectCreatedByVike: boolean;
5
8
  _urlHandler: null;
@@ -11,7 +14,6 @@ declare function createPageContext(urlOriginal: string): Promise<{
11
14
  _allPageIds: string[];
12
15
  _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
13
16
  _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
14
- _isPageContextObject: boolean;
15
17
  } & {
16
18
  urlParsed: import("./utils.js").UrlPublic;
17
19
  urlPathname: string;
@@ -4,7 +4,6 @@ import { getPageContextUrlComputed } from '../../shared/getPageContextUrlCompute
4
4
  import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
5
5
  import { getBaseServer } from './getBaseServer.js';
6
6
  import { assert, isBaseServer, objectAssign } from './utils.js';
7
- // TODO/now: can we avoid optimizeDeps.exclude of client runtime?
8
7
  // @ts-ignore
9
8
  import * as virtualFileExports from 'virtual:vike:importUserCode:client:client-routing';
10
9
  const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal } = getPageConfigsRuntime(virtualFileExports);
@@ -13,6 +12,9 @@ async function createPageContext(urlOriginal) {
13
12
  const baseServer = getBaseServer();
14
13
  assert(isBaseServer(baseServer));
15
14
  const pageContext = {
15
+ _isPageContextObject: true,
16
+ isClientSide: true,
17
+ isPrerendering: false,
16
18
  urlOriginal,
17
19
  _objectCreatedByVike: true,
18
20
  _urlHandler: null,
@@ -23,8 +25,7 @@ async function createPageContext(urlOriginal) {
23
25
  _pageConfigGlobal: pageConfigGlobal,
24
26
  _allPageIds: allPageIds,
25
27
  _pageRoutes: pageRoutes,
26
- _onBeforeRouteHook: onBeforeRouteHook,
27
- _isPageContextObject: true
28
+ _onBeforeRouteHook: onBeforeRouteHook
28
29
  };
29
30
  const pageContextUrlComputed = getPageContextUrlComputed(pageContext);
30
31
  objectAssign(pageContext, pageContextUrlComputed);
@@ -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?
@@ -276,7 +276,7 @@ async function renderPageClientSide(renderArgs) {
276
276
  if ('err' in args) {
277
277
  const { err } = args;
278
278
  assert(!('errorWhileRendering' in pageContext));
279
- pageContext.errorWhileRendering = err;
279
+ objectAssign(pageContext, { errorWhileRendering: err });
280
280
  if (isAbortError(err)) {
281
281
  const errAbort = err;
282
282
  logAbortErrorHandled(err, !import.meta.env.DEV, pageContext);
@@ -1,12 +1,15 @@
1
1
  export { getPageContext };
2
2
  declare function getPageContext(): Promise<{
3
- pageId: string;
4
- routeParams: Record<string, string>;
5
- } & {
3
+ _isPageContextObject: boolean;
4
+ isPrerendering: boolean;
5
+ isClientSide: boolean;
6
6
  isHydration: true;
7
7
  isBackwardNavigation: null;
8
8
  _hasPageContextFromServer: true;
9
9
  _hasPageContextFromClient: false;
10
+ } & {
11
+ pageId: string;
12
+ routeParams: Record<string, string>;
10
13
  } & {
11
14
  _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
12
15
  _pageConfigs: import("../../__internal/index.js").PageConfig[];
@@ -9,13 +9,16 @@ import * as virtualFileExports from 'virtual:vike:importUserCode:client:server-r
9
9
  const { pageFilesAll, pageConfigs, pageConfigGlobal } = getPageConfigsRuntime(virtualFileExports);
10
10
  const urlFirst = getCurrentUrl({ withoutHash: true });
11
11
  async function getPageContext() {
12
- const pageContext = getPageContextSerializedInHtml();
13
- objectAssign(pageContext, {
12
+ const pageContext = {
13
+ _isPageContextObject: true,
14
+ isPrerendering: false,
15
+ isClientSide: true,
14
16
  isHydration: true,
15
17
  isBackwardNavigation: null,
16
18
  _hasPageContextFromServer: true,
17
19
  _hasPageContextFromClient: false
18
- });
20
+ };
21
+ objectAssign(pageContext, getPageContextSerializedInHtml());
19
22
  objectAssign(pageContext, await loadPageUserFiles(pageContext.pageId));
20
23
  assertPristineUrl();
21
24
  return pageContext;
@@ -1,12 +1,2 @@
1
1
  export { getPageContextProxyForUser };
2
- export { PageContextForPassToClientWarning };
3
- type PageContextForPassToClientWarning = {
4
- _hasPageContextFromServer: boolean;
5
- _hasPageContextFromClient: boolean;
6
- };
7
- /**
8
- * Throw error when pageContext value isn't:
9
- * - serializable, or
10
- * - defined.
11
- */
12
- declare function getPageContextProxyForUser<PageContext extends Record<string, unknown> & PageContextForPassToClientWarning>(pageContext: PageContext): PageContext;
2
+ declare function getPageContextProxyForUser<PageContext extends Record<string, unknown>>(pageContext: PageContext): PageContext;