vike 0.4.144-commit-6aef8a6 → 0.4.144-commit-7f5e99a

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 (112) hide show
  1. package/dist/cjs/__internal/index.js +6 -2
  2. package/dist/cjs/node/plugin/plugins/buildConfig.js +2 -2
  3. package/dist/cjs/node/plugin/plugins/commonConfig.js +0 -3
  4. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  5. package/dist/cjs/node/plugin/plugins/devConfig/index.js +1 -0
  6. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +4 -3
  7. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +29 -42
  8. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +2 -2
  9. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +14 -5
  10. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/helpers.js +1 -14
  11. package/dist/cjs/node/plugin/plugins/previewConfig.js +11 -2
  12. package/dist/cjs/node/prerender/runPrerender.js +16 -17
  13. package/dist/cjs/node/prerender/utils.js +1 -1
  14. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +20 -6
  15. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +2 -2
  16. package/dist/cjs/node/runtime/renderPage.js +2 -2
  17. package/dist/cjs/node/runtime/utils.js +1 -1
  18. package/dist/cjs/node/shared/getClientEntryFilePath.js +2 -2
  19. package/dist/cjs/shared/addUrlComputedProps.js +24 -12
  20. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +4 -6
  21. package/dist/cjs/shared/getPageFiles/getExports.js +3 -3
  22. package/dist/cjs/shared/hooks/getHook.js +1 -1
  23. package/dist/cjs/shared/page-configs/helpers/getConfigDefinedAtString.js +43 -0
  24. package/dist/cjs/shared/page-configs/helpers/getConfigValue.js +44 -0
  25. package/dist/cjs/shared/page-configs/helpers.js +33 -0
  26. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesImported.js +6 -8
  27. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +2 -2
  28. package/dist/cjs/shared/page-configs/serialize/serializeConfigValue.js +2 -2
  29. package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +11 -13
  30. package/dist/cjs/shared/route/index.js +3 -3
  31. package/dist/cjs/shared/route/loadPageRoutes.js +11 -10
  32. package/dist/cjs/shared/route/resolveRouteFunction.js +1 -1
  33. package/dist/cjs/shared/utils.js +1 -1
  34. package/dist/cjs/utils/{hasPropertyGetter.js → isPropertyGetter.js} +3 -3
  35. package/dist/cjs/utils/projectInfo.js +1 -1
  36. package/dist/esm/__internal/index.d.ts +6 -3
  37. package/dist/esm/__internal/index.js +8 -3
  38. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +2 -3
  39. package/dist/esm/client/client-routing-runtime/createPageContext.js +3 -3
  40. package/dist/esm/client/client-routing-runtime/entry.js +2 -2
  41. package/dist/esm/client/client-routing-runtime/getPageContext.d.ts +0 -1
  42. package/dist/esm/client/client-routing-runtime/getPageContext.js +4 -7
  43. package/dist/esm/client/client-routing-runtime/getPageId.d.ts +1 -1
  44. package/dist/esm/client/client-routing-runtime/getPageId.js +4 -7
  45. package/dist/esm/client/client-routing-runtime/history.d.ts +3 -1
  46. package/dist/esm/client/client-routing-runtime/history.js +26 -8
  47. package/dist/esm/client/client-routing-runtime/installClientRouter.d.ts +21 -0
  48. package/dist/esm/client/client-routing-runtime/{useClientRouter.js → installClientRouter.js} +248 -242
  49. package/dist/esm/client/client-routing-runtime/isClientSideRoutable.d.ts +8 -0
  50. package/dist/esm/client/client-routing-runtime/isClientSideRoutable.js +15 -0
  51. package/dist/esm/client/client-routing-runtime/navigate.d.ts +0 -2
  52. package/dist/esm/client/client-routing-runtime/navigate.js +10 -8
  53. package/dist/esm/client/client-routing-runtime/prefetch.js +12 -5
  54. package/dist/esm/client/client-routing-runtime/skipLink.d.ts +0 -1
  55. package/dist/esm/client/client-routing-runtime/skipLink.js +1 -2
  56. package/dist/esm/client/shared/executeOnRenderClientHook.js +6 -5
  57. package/dist/esm/client/shared/getPageContextProxyForUser.js +13 -7
  58. package/dist/esm/node/plugin/plugins/buildConfig.js +1 -1
  59. package/dist/esm/node/plugin/plugins/commonConfig.js +0 -3
  60. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  61. package/dist/esm/node/plugin/plugins/devConfig/index.js +1 -0
  62. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +2 -2
  63. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +4 -3
  64. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +29 -42
  65. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
  66. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +15 -6
  67. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/helpers.js +1 -14
  68. package/dist/esm/node/plugin/plugins/previewConfig.js +11 -2
  69. package/dist/esm/node/prerender/runPrerender.js +11 -12
  70. package/dist/esm/node/prerender/utils.d.ts +1 -1
  71. package/dist/esm/node/prerender/utils.js +1 -1
  72. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +21 -7
  73. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +1 -1
  74. package/dist/esm/node/runtime/renderPage.js +2 -2
  75. package/dist/esm/node/runtime/utils.d.ts +1 -1
  76. package/dist/esm/node/runtime/utils.js +1 -1
  77. package/dist/esm/node/shared/getClientEntryFilePath.js +1 -1
  78. package/dist/esm/shared/addUrlComputedProps.d.ts +1 -0
  79. package/dist/esm/shared/addUrlComputedProps.js +25 -13
  80. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +2 -4
  81. package/dist/esm/shared/getPageFiles/getExports.js +2 -2
  82. package/dist/esm/shared/hooks/getHook.js +1 -1
  83. package/dist/esm/shared/page-configs/PageConfig.d.ts +4 -12
  84. package/dist/esm/shared/page-configs/helpers/getConfigDefinedAtString.d.ts +7 -0
  85. package/dist/esm/shared/page-configs/helpers/getConfigDefinedAtString.js +37 -0
  86. package/dist/esm/shared/page-configs/helpers/getConfigValue.d.ts +14 -0
  87. package/dist/esm/shared/page-configs/helpers/getConfigValue.js +38 -0
  88. package/dist/esm/shared/page-configs/helpers.d.ts +13 -0
  89. package/dist/esm/shared/page-configs/helpers.js +27 -0
  90. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.js +6 -8
  91. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +2 -2
  92. package/dist/esm/shared/page-configs/serialize/serializeConfigValue.js +2 -2
  93. package/dist/esm/shared/route/executeOnBeforeRouteHook.d.ts +1 -1
  94. package/dist/esm/shared/route/executeOnBeforeRouteHook.js +11 -13
  95. package/dist/esm/shared/route/index.d.ts +11 -9
  96. package/dist/esm/shared/route/index.js +3 -3
  97. package/dist/esm/shared/route/loadPageRoutes.js +7 -6
  98. package/dist/esm/shared/route/resolveRouteFunction.js +1 -1
  99. package/dist/esm/shared/utils.d.ts +1 -1
  100. package/dist/esm/shared/utils.js +1 -1
  101. package/dist/esm/utils/isPropertyGetter.d.ts +1 -0
  102. package/dist/esm/utils/{hasPropertyGetter.js → isPropertyGetter.js} +1 -1
  103. package/dist/esm/utils/projectInfo.d.ts +1 -1
  104. package/dist/esm/utils/projectInfo.js +1 -1
  105. package/package.json +2 -2
  106. package/dist/cjs/shared/page-configs/utils.js +0 -96
  107. package/dist/esm/client/client-routing-runtime/skipLink/isClientSideRoutable.d.ts +0 -2
  108. package/dist/esm/client/client-routing-runtime/skipLink/isClientSideRoutable.js +0 -15
  109. package/dist/esm/client/client-routing-runtime/useClientRouter.d.ts +0 -6
  110. package/dist/esm/shared/page-configs/utils.d.ts +0 -35
  111. package/dist/esm/shared/page-configs/utils.js +0 -90
  112. package/dist/esm/utils/hasPropertyGetter.d.ts +0 -1
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getClientEntryFilePath = void 0;
4
- const utils_js_1 = require("../../shared/page-configs/utils.js");
4
+ const helpers_js_1 = require("../../shared/page-configs/helpers.js");
5
5
  function getClientEntryFilePath(pageConfig) {
6
6
  const configName = 'client';
7
- const configValue = (0, utils_js_1.getConfigValue)(pageConfig, configName, 'string');
7
+ const configValue = (0, helpers_js_1.getConfigValue)(pageConfig, configName, 'string');
8
8
  if (!configValue)
9
9
  return null;
10
10
  return configValue.value;
@@ -6,24 +6,36 @@ const utils_js_1 = require("./utils.js");
6
6
  function addUrlComputedProps(pageContext, enumerable = true) {
7
7
  (0, utils_js_1.assert)(pageContext.urlOriginal);
8
8
  if ('urlPathname' in pageContext) {
9
- (0, utils_js_1.assert)((0, utils_js_1.hasPropertyGetter)(pageContext, 'urlPathname'));
9
+ (0, utils_js_1.assert)(typeof pageContext.urlPathname === 'string');
10
+ /* If this assert() fails then it's most likely because Object.assign() was used instead of objectAssign(), i.e.:
11
+ ```js
12
+ // Add property getters such as pageContext.urlPathname to pageContext
13
+ addUrlComputedProps(pageContext)
14
+ // ❌ Breaks the property getters of pageContext set by addUrlComputedProps() such as pageContext.urlPathname
15
+ Object.assign(pageContext2, pageContext)
16
+ // ❌ Also breaks the property getters
17
+ const pageContext3 = { ...pageContext }
18
+ // ✅ Preserves property getters of pageContext (see objectAssign() implementation)
19
+ objectAssign(pageContext2, pageContext)
20
+ ```
21
+ */
22
+ (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlPathname'));
10
23
  }
24
+ if ('urlParsed' in pageContext)
25
+ (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlParsed'));
26
+ // TODO/v1-release: move pageContext.urlParsed to pageContext.url
27
+ if ('url' in pageContext)
28
+ (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'url'));
11
29
  Object.defineProperty(pageContext, 'urlPathname', {
12
30
  get: urlPathnameGetter,
13
31
  enumerable,
14
32
  configurable: true
15
33
  });
16
- // TODO/v1-release: move pageContext.urlParsed to pageContext.url
17
- if ('url' in pageContext)
18
- (0, utils_js_1.assert)((0, utils_js_1.hasPropertyGetter)(pageContext, 'url'));
19
34
  Object.defineProperty(pageContext, 'url', {
20
35
  get: urlGetter,
21
36
  enumerable: false,
22
37
  configurable: true
23
38
  });
24
- if ('urlParsed' in pageContext) {
25
- (0, utils_js_1.assert)((0, utils_js_1.hasPropertyGetter)(pageContext, 'urlParsed'));
26
- }
27
39
  Object.defineProperty(pageContext, 'urlParsed', {
28
40
  get: urlParsedGetter,
29
41
  enumerable,
@@ -32,17 +44,17 @@ function addUrlComputedProps(pageContext, enumerable = true) {
32
44
  }
33
45
  exports.addUrlComputedProps = addUrlComputedProps;
34
46
  function getUrlParsed(pageContext) {
35
- // We use a url handler function because the onBeforeRoute() hook may modify pageContext.urlOriginal (e.g. for i18n)
47
+ // We need a url handler function because the onBeforeRoute() hook may set pageContext.urlLogical (typically for i18n)
36
48
  let urlHandler = pageContext._urlHandler;
37
49
  if (!urlHandler) {
38
50
  urlHandler = (url) => url;
39
51
  }
40
- const url = pageContext._urlRewrite ?? pageContext.urlOriginal;
41
- (0, utils_js_1.assert)(url && typeof url === 'string');
42
- const urlLogical = urlHandler(url);
52
+ let urlResolved = pageContext._urlRewrite ?? pageContext.urlLogical ?? pageContext.urlOriginal;
53
+ urlResolved = urlHandler(urlResolved);
43
54
  const baseServer = pageContext._baseServer;
55
+ (0, utils_js_1.assert)(urlResolved && typeof urlResolved === 'string');
44
56
  (0, utils_js_1.assert)(baseServer.startsWith('/'));
45
- return (0, utils_js_1.parseUrl)(urlLogical, baseServer);
57
+ return (0, utils_js_1.parseUrl)(urlResolved, baseServer);
46
58
  }
47
59
  function urlPathnameGetter() {
48
60
  const { pathname } = getUrlParsed(this);
@@ -1,19 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.analyzeClientSide = void 0;
4
- const utils_js_1 = require("../page-configs/utils.js");
4
+ const helpers_js_1 = require("../page-configs/helpers.js");
5
5
  const analyzePageClientSide_js_1 = require("./analyzePageClientSide.js");
6
6
  function analyzeClientSide(pageConfig, pageFilesAll, pageId) {
7
7
  // V1 design
8
8
  if (pageConfig) {
9
- const isClientRouting = (0, utils_js_1.getConfigValue)(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
10
- const isClientSideRenderable = (0, utils_js_1.getConfigValue)(pageConfig, 'isClientSideRenderable', 'boolean')?.value ?? false;
9
+ const isClientRouting = (0, helpers_js_1.getConfigValue)(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
10
+ const isClientSideRenderable = (0, helpers_js_1.getConfigValue)(pageConfig, 'isClientSideRenderable', 'boolean')?.value ?? false;
11
11
  return { isClientSideRenderable, isClientRouting };
12
12
  }
13
13
  else {
14
- // TODO/v1-release:
15
- // - remove V0.4 implementation
16
- // - globally rename isHtmlOnly to !isClientSideRenderable
14
+ // TODO/v1-release: remove
17
15
  // V0.4 design
18
16
  const { isHtmlOnly, isClientRouting } = (0, analyzePageClientSide_js_1.analyzePageClientSide)(pageFilesAll, pageId);
19
17
  return { isClientSideRenderable: !isHtmlOnly, isClientRouting };
@@ -7,7 +7,7 @@ exports.getExports = exports.getExportUnion = void 0;
7
7
  const isScriptFile_js_1 = require("../../utils/isScriptFile.js");
8
8
  const utils_js_1 = require("../utils.js");
9
9
  const assert_exports_old_design_js_1 = require("./assert_exports_old_design.js");
10
- const utils_js_2 = require("../page-configs/utils.js");
10
+ const helpers_js_1 = require("../page-configs/helpers.js");
11
11
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
12
12
  function getExports(pageFiles, pageConfig) {
13
13
  const configEntries = {};
@@ -34,8 +34,8 @@ function getExports(pageFiles, pageConfig) {
34
34
  if (pageConfig) {
35
35
  Object.entries(pageConfig.configValues).forEach(([configName, configValue]) => {
36
36
  const { value } = configValue;
37
- const configValueFilePathToShowToUser = (0, utils_js_2.getConfigValueFilePathToShowToUser)(configValue);
38
- const configDefinedAt = (0, utils_js_2.getConfigDefinedAtString)(configName, configValue, true);
37
+ const configValueFilePathToShowToUser = (0, helpers_js_1.getConfigValueFilePathToShowToUser)(configValue);
38
+ const configDefinedAt = (0, helpers_js_1.getConfigDefinedAtString)('Config', configName, configValue);
39
39
  config[configName] = config[configName] ?? value;
40
40
  configEntries[configName] = configEntries[configName] ?? [];
41
41
  // Currently each configName has only one entry. Adding an entry for each overriden config value isn't implemented yet. (This is an isomorphic file and it isn't clear whether this can/should be implemented on the client-side. We should load a minimum amount of code on the client-side.)
@@ -25,7 +25,7 @@ exports.assertHook = assertHook;
25
25
  function assertHookFn(hookFn, { hookName, hookFilePath }) {
26
26
  (0, utils_js_1.assert)(hookName && hookFilePath);
27
27
  (0, utils_js_1.assert)(!hookName.endsWith(')'));
28
- (0, utils_js_1.assertUsage)((0, utils_js_1.isCallable)(hookFn), `hook ${hookName}() defined by ${hookFilePath} should be a function`);
28
+ (0, utils_js_1.assertUsage)((0, utils_js_1.isCallable)(hookFn), `Hook ${hookName}() defined by ${hookFilePath} should be a function`);
29
29
  (0, utils_js_1.checkType)(hookFn);
30
30
  }
31
31
  exports.assertHookFn = assertHookFn;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getDefinedAtString = exports.getConfigDefinedAtString = void 0;
7
+ const utils_js_1 = require("../../utils.js");
8
+ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
9
+ const getExportPath_js_1 = require("../getExportPath.js");
10
+ function getConfigDefinedAtString(sentenceBegin, configName, { definedAt }) {
11
+ const definedAtString = getDefinedAtString(definedAt, configName);
12
+ const definedAtStr = definedAtString === 'internally' ? definedAtString : `at ${definedAtString}`;
13
+ let configNameStr = `${configName}${sentenceBegin === 'Hook' ? '()' : ''}`;
14
+ const configDefinedAt = `${sentenceBegin} ${picocolors_1.default.cyan(configNameStr)} defined ${definedAtStr}`;
15
+ return configDefinedAt;
16
+ }
17
+ exports.getConfigDefinedAtString = getConfigDefinedAtString;
18
+ function getDefinedAtString(definedAt, configName) {
19
+ if ('isComputed' in definedAt) {
20
+ return 'internally';
21
+ }
22
+ let files;
23
+ if ('files' in definedAt) {
24
+ files = definedAt.files;
25
+ }
26
+ else {
27
+ files = [definedAt];
28
+ }
29
+ (0, utils_js_1.assert)(files.length >= 1);
30
+ const definedAtString = files
31
+ .map((source) => {
32
+ const { filePathToShowToUser, fileExportPathToShowToUser } = source;
33
+ let s = filePathToShowToUser;
34
+ const exportPath = (0, getExportPath_js_1.getExportPath)(fileExportPathToShowToUser, configName);
35
+ if (exportPath) {
36
+ s = `${s} > ${picocolors_1.default.cyan(exportPath)}`;
37
+ }
38
+ return s;
39
+ })
40
+ .join(' / ');
41
+ return definedAtString;
42
+ }
43
+ exports.getDefinedAtString = getDefinedAtString;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getConfigValue = void 0;
7
+ const utils_js_1 = require("../../utils.js");
8
+ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
9
+ const getConfigDefinedAtString_js_1 = require("./getConfigDefinedAtString.js");
10
+ // prettier-ignore
11
+ function getConfigValue(pageConfig, configName, type) {
12
+ const configValue = getConfigValueEntry(pageConfig, configName);
13
+ if (configValue === null)
14
+ return null;
15
+ const { value, definedAt } = configValue;
16
+ if (type)
17
+ assertConfigValueType(value, type, configName, definedAt);
18
+ return configValue;
19
+ }
20
+ exports.getConfigValue = getConfigValue;
21
+ function assertConfigValueType(value, type, configName, definedAt) {
22
+ (0, utils_js_1.assert)(value !== null);
23
+ const typeActual = typeof value;
24
+ if (typeActual === type)
25
+ return;
26
+ const valuePrintable = (0, utils_js_1.getValuePrintable)(value);
27
+ const problem = valuePrintable !== null
28
+ ? `value ${picocolors_1.default.cyan(valuePrintable)}`
29
+ : `type ${picocolors_1.default.cyan(typeActual)}`;
30
+ const configDefinedAt = (0, getConfigDefinedAtString_js_1.getConfigDefinedAtString)('Config', configName, {
31
+ definedAt
32
+ });
33
+ const errMsg = `${configDefinedAt} has an invalid ${problem}: it should be a ${picocolors_1.default.cyan(type)} instead`;
34
+ (0, utils_js_1.assertUsage)(false, errMsg);
35
+ }
36
+ function getConfigValueEntry(pageConfig, configName) {
37
+ const configValue = pageConfig.configValues[configName];
38
+ if (!configValue)
39
+ return null;
40
+ // Enable users to suppress global config values by setting the local config value to null
41
+ if (configValue.value === null)
42
+ return null;
43
+ return configValue;
44
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConfigValue = exports.getDefinedAtString = exports.getConfigDefinedAtString = exports.getHookFilePathToShowToUser = exports.getConfigValueFilePathToShowToUser = exports.getPageConfig = void 0;
4
+ var getConfigDefinedAtString_js_1 = require("./helpers/getConfigDefinedAtString.js");
5
+ Object.defineProperty(exports, "getConfigDefinedAtString", { enumerable: true, get: function () { return getConfigDefinedAtString_js_1.getConfigDefinedAtString; } });
6
+ Object.defineProperty(exports, "getDefinedAtString", { enumerable: true, get: function () { return getConfigDefinedAtString_js_1.getDefinedAtString; } });
7
+ var getConfigValue_js_1 = require("./helpers/getConfigValue.js");
8
+ Object.defineProperty(exports, "getConfigValue", { enumerable: true, get: function () { return getConfigValue_js_1.getConfigValue; } });
9
+ const utils_js_1 = require("../utils.js");
10
+ function getPageConfig(pageId, pageConfigs) {
11
+ const pageConfig = pageConfigs.find((p) => p.pageId === pageId);
12
+ (0, utils_js_1.assert)(pageConfigs.length > 0);
13
+ (0, utils_js_1.assert)(pageConfig);
14
+ return pageConfig;
15
+ }
16
+ exports.getPageConfig = getPageConfig;
17
+ function getConfigValueFilePathToShowToUser({ definedAt }) {
18
+ // A unique file path only exists if the config value isn't cumulative nor computed:
19
+ // - cumulative config values have multiple file paths
20
+ // - computed values don't have any file path
21
+ if ('isComputed' in definedAt || 'files' in definedAt)
22
+ return null;
23
+ const { filePathToShowToUser } = definedAt;
24
+ (0, utils_js_1.assert)(filePathToShowToUser);
25
+ return filePathToShowToUser;
26
+ }
27
+ exports.getConfigValueFilePathToShowToUser = getConfigValueFilePathToShowToUser;
28
+ function getHookFilePathToShowToUser({ definedAt }) {
29
+ const filePathToShowToUser = getConfigValueFilePathToShowToUser({ definedAt });
30
+ (0, utils_js_1.assert)(filePathToShowToUser);
31
+ return filePathToShowToUser;
32
+ }
33
+ exports.getHookFilePathToShowToUser = getHookFilePathToShowToUser;
@@ -13,14 +13,12 @@ function parseConfigValuesImported(configValuesImported) {
13
13
  configValues[configName] = {
14
14
  value,
15
15
  definedAt: {
16
- file: {
17
- // importPath cannot be relative to the current file, since the current file is a virtual file
18
- filePathToShowToUser: importPath,
19
- fileExportPathToShowToUser: [configName, 'default'].includes(exportName)
20
- ? []
21
- : // Side-effect config
22
- [exportName]
23
- }
16
+ // importPath cannot be relative to the current file, since the current file is a virtual file
17
+ filePathToShowToUser: importPath,
18
+ fileExportPathToShowToUser: [configName, 'default'].includes(exportName)
19
+ ? []
20
+ : // Side-effect config
21
+ [exportName]
24
22
  }
25
23
  };
26
24
  assertIsNotNull(value, configName, importPath);
@@ -4,7 +4,7 @@ exports.parsePageConfigs = void 0;
4
4
  const parse_1 = require("@brillout/json-serializer/parse");
5
5
  const parseConfigValuesImported_js_1 = require("./parseConfigValuesImported.js");
6
6
  const utils_js_1 = require("../../utils.js");
7
- const utils_js_2 = require("../utils.js");
7
+ const helpers_js_1 = require("../helpers.js");
8
8
  function parsePageConfigs(pageConfigsSerialized, pageConfigGlobalSerialized) {
9
9
  const pageConfigs = pageConfigsSerialized.map((pageConfigSerialized) => {
10
10
  const configValues = {};
@@ -52,7 +52,7 @@ function assertRouteConfigValue(configValues) {
52
52
  return;
53
53
  const { value } = configValue;
54
54
  const configValueType = typeof value;
55
- const configDefinedAt = (0, utils_js_2.getConfigDefinedAtString)(configName, configValue, true);
55
+ const configDefinedAt = (0, helpers_js_1.getConfigDefinedAtString)('Config', configName, configValue);
56
56
  (0, utils_js_1.assertUsage)(configValueType === 'string' || (0, utils_js_1.isCallable)(value), `${configDefinedAt} has an invalid type '${configValueType}': it should be a string or a function instead, see https://vike.dev/route`);
57
57
  /* We don't use assertRouteString() in order to avoid unnecessarily bloating the client-side bundle when using Server Routing:
58
58
  * - When using Server Routing, this file is loaded => loading assertRouteString() would bloat the client bundle.
@@ -28,9 +28,9 @@ exports.serializeConfigValue = serializeConfigValue;
28
28
  function serializeConfigValueImported(configValueSource, configName, whitespace, varCounterContainer, importStatements) {
29
29
  (0, utils_js_1.assert)(!configValueSource.valueIsFilePath);
30
30
  (0, utils_js_1.assert)(whitespace.replaceAll(' ', '').length === 0);
31
- const { valueIsImportedAtRuntime, definedAtInfo } = configValueSource;
31
+ const { valueIsImportedAtRuntime, definedAt } = configValueSource;
32
32
  (0, utils_js_1.assert)(valueIsImportedAtRuntime);
33
- const { filePathAbsoluteVite, fileExportName } = definedAtInfo;
33
+ const { filePathAbsoluteVite, fileExportName } = definedAt;
34
34
  (0, utils_js_1.assertPosixPath)(filePathAbsoluteVite);
35
35
  const fileName = path_1.default.posix.basename(filePathAbsoluteVite);
36
36
  const isValueFile = fileName.startsWith('+');
@@ -11,6 +11,7 @@ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
11
11
  async function executeOnBeforeRouteHook(onBeforeRouteHook, pageContext) {
12
12
  let hookReturn = onBeforeRouteHook.onBeforeRoute(pageContext);
13
13
  (0, resolveRouteFunction_js_1.assertSyncRouting)(hookReturn, `The onBeforeRoute() hook ${onBeforeRouteHook.hookFilePath}`);
14
+ // TODO/v1-release: make executeOnBeforeRouteHook() and route() sync
14
15
  hookReturn = await hookReturn;
15
16
  const errPrefix = `The onBeforeRoute() hook defined by ${onBeforeRouteHook.hookFilePath}`;
16
17
  (0, utils_js_1.assertUsage)(hookReturn === null ||
@@ -28,28 +29,25 @@ async function executeOnBeforeRouteHook(onBeforeRouteHook, pageContext) {
28
29
  if ((0, utils_js_1.hasProp)(hookReturn.pageContext, 'routeParams')) {
29
30
  (0, resolveRouteFunction_js_1.assertRouteParams)(hookReturn.pageContext, `${errPrefix} returned ${picocolors_1.default.cyan('{ pageContext: { routeParams } }')} but routeParams should`);
30
31
  }
31
- const pageContextAddendumHook = {};
32
+ const deprecatedReturn = (prop) => `${errPrefix} returned ${picocolors_1.default.cyan(`{ pageContext: { ${prop} } }`)} which is deprecated. Return ${picocolors_1.default.cyan('{ pageContext: { urlLogical } }')} instead.`;
32
33
  if ((0, utils_js_1.hasProp)(hookReturn.pageContext, 'url')) {
33
- (0, utils_js_1.assertWarning)(false, `${errPrefix} returned ${picocolors_1.default.cyan('{ pageContext: { url } }')} but ${picocolors_1.default.cyan('pageContext.url')} has been renamed to ${picocolors_1.default.cyan('pageContext.urlOriginal')}. Return ${picocolors_1.default.cyan('{ pageContext: { urlOriginal } }')} instead. (See https://vike.dev/migration/0.4.23 for more information.)`, { onlyOnce: true });
34
- hookReturn.pageContext.urlOriginal = hookReturn.pageContext.url;
34
+ (0, utils_js_1.assertWarning)(false, deprecatedReturn('url'), { onlyOnce: true });
35
+ hookReturn.pageContext.urlLogical = hookReturn.pageContext.url;
35
36
  delete hookReturn.pageContext.url;
36
37
  }
37
38
  if ((0, utils_js_1.hasProp)(hookReturn.pageContext, 'urlOriginal')) {
38
- (0, utils_js_1.assertUsageUrl)(hookReturn.pageContext.urlOriginal, `${errPrefix} returned ${picocolors_1.default.cyan('{ pageContext: { urlOriginal } }')} but ${picocolors_1.default.cyan('urlOriginal')}`);
39
- // Ugly workaround: ideally urlOriginal should be immutable.
40
- // - Instead of using pageContext._urlOriginalPristine, maybe we can keep pageContext.urlOriginal immutable while re-using `pageContext._urlRewrite`.
41
- // - Or better yet we rename pageContext._urlRewrite to pageContext.urlLogical and we allow the user to override pageContext.urlLogical, and we rename pageContext.urlOriginal => `pageContext.urlReal`.
42
- // - pageContext.urlReal / pageContext.urlLogical
43
- // VS
44
- // pageContext.urlReal / pageContext.urlModified
45
- // VS
46
- // pageContext.urlOriginal / pageContext.urlModified
47
- (0, utils_js_1.objectAssign)(pageContextAddendumHook, { _urlOriginalPristine: pageContext.urlOriginal });
39
+ (0, utils_js_1.assertWarning)(false, deprecatedReturn('urlOriginal'), { onlyOnce: true });
40
+ hookReturn.pageContext.urlLogical = hookReturn.pageContext.urlOriginal;
41
+ delete hookReturn.pageContext.urlOriginal;
42
+ }
43
+ if ((0, utils_js_1.hasProp)(hookReturn.pageContext, 'urlLogical')) {
44
+ (0, utils_js_1.assertUsageUrl)(hookReturn.pageContext.urlLogical, `${errPrefix} returned ${picocolors_1.default.cyan('{ pageContext: { urlLogical } }')} but ${picocolors_1.default.cyan('urlLogical')}`);
48
45
  }
49
46
  (0, assertPageContextProvidedByUser_js_1.assertPageContextProvidedByUser)(hookReturn.pageContext, {
50
47
  hookFilePath: onBeforeRouteHook.hookFilePath,
51
48
  hookName: 'onBeforeRoute'
52
49
  });
50
+ const pageContextAddendumHook = {};
53
51
  (0, utils_js_1.objectAssign)(pageContextAddendumHook, hookReturn.pageContext);
54
52
  return pageContextAddendumHook;
55
53
  }
@@ -38,7 +38,7 @@ async function route(pageContext) {
38
38
  _routingProvidedByOnBeforeRouteHook: true,
39
39
  _routeMatches: 'CUSTOM_ROUTE'
40
40
  });
41
- return { pageContextAddendum };
41
+ return pageContextAddendum;
42
42
  }
43
43
  // We already assign so that `pageContext.urlOriginal === pageContextAddendum.urlOriginal`; enabling the `onBeforeRoute()` hook to mutate `pageContext.urlOriginal` before routing.
44
44
  (0, utils_js_1.objectAssign)(pageContext, pageContextAddendum);
@@ -104,7 +104,7 @@ async function route(pageContext) {
104
104
  _pageId: null,
105
105
  routeParams: {}
106
106
  });
107
- return { pageContextAddendum };
107
+ return pageContextAddendum;
108
108
  }
109
109
  {
110
110
  const { routeParams } = winner;
@@ -114,6 +114,6 @@ async function route(pageContext) {
114
114
  routeParams: winner.routeParams
115
115
  });
116
116
  }
117
- return { pageContextAddendum };
117
+ return pageContextAddendum;
118
118
  }
119
119
  exports.route = route;
@@ -5,10 +5,10 @@ const error_page_js_1 = require("../error-page.js");
5
5
  const utils_js_1 = require("./utils.js");
6
6
  const deduceRouteStringFromFilesystemPath_js_1 = require("./deduceRouteStringFromFilesystemPath.js");
7
7
  const utils_js_2 = require("../utils.js");
8
- const utils_js_3 = require("../page-configs/utils.js");
8
+ const helpers_js_1 = require("../page-configs/helpers.js");
9
9
  const resolveRouteFunction_js_1 = require("./resolveRouteFunction.js");
10
10
  async function loadPageRoutes(
11
- // TODO: remove all arguments and use GlobalContext instead
11
+ // Remove all arguments and use GlobalContext instead?
12
12
  pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds) {
13
13
  await Promise.all(pageFilesAll.filter((p) => p.fileType === '.page.route').map((p) => p.loadFile?.()));
14
14
  const { onBeforeRouteHook, filesystemRoots } = getGlobalHooks(pageFilesAll, pageConfigs, pageConfigGlobal);
@@ -31,10 +31,10 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
31
31
  let pageRoute = null;
32
32
  {
33
33
  const configName = 'route';
34
- const configValue = (0, utils_js_3.getConfigValue)(pageConfig, configName);
34
+ const configValue = (0, helpers_js_1.getConfigValue)(pageConfig, configName);
35
35
  if (configValue) {
36
36
  const route = configValue.value;
37
- const definedAt = (0, utils_js_3.getDefinedAtString)(configValue.definedAt, configName);
37
+ const definedAt = (0, helpers_js_1.getDefinedAtString)(configValue.definedAt, configName);
38
38
  if (typeof route === 'string') {
39
39
  pageRoute = {
40
40
  pageId,
@@ -46,7 +46,7 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
46
46
  }
47
47
  else {
48
48
  (0, utils_js_1.assert)((0, utils_js_2.isCallable)(route));
49
- if ((0, utils_js_3.getConfigValue)(pageConfig, 'iKnowThePerformanceRisksOfAsyncRouteFunctions', 'boolean'))
49
+ if ((0, helpers_js_1.getConfigValue)(pageConfig, 'iKnowThePerformanceRisksOfAsyncRouteFunctions', 'boolean'))
50
50
  (0, resolveRouteFunction_js_1.warnDeprecatedAllowKey)();
51
51
  pageRoute = {
52
52
  pageId,
@@ -139,12 +139,13 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
139
139
  function getGlobalHooks(pageFilesAll, pageConfigs, pageConfigGlobal) {
140
140
  // V1 Design
141
141
  if (pageConfigs.length > 0) {
142
- if (pageConfigGlobal.configValues.onBeforeRoute?.value) {
143
- const configValue = pageConfigGlobal.configValues.onBeforeRoute;
142
+ const hookName = 'onBeforeRoute';
143
+ if (pageConfigGlobal.configValues[hookName]?.value) {
144
+ const configValue = pageConfigGlobal.configValues[hookName];
144
145
  const { value: hookFn } = configValue;
145
- const hookFilePath = (0, utils_js_3.getHookFilePathToShowToUser)(configValue);
146
- // TODO: use getConfigDefinedAtString()
147
- (0, utils_js_1.assertUsage)((0, utils_js_2.isCallable)(hookFn), `The hook onBeforeRoute() defined by ${hookFilePath} should be a function.`);
146
+ const hookFilePath = (0, helpers_js_1.getHookFilePathToShowToUser)(configValue);
147
+ const hookDefinedAt = (0, helpers_js_1.getConfigDefinedAtString)('Hook', hookName, configValue);
148
+ (0, utils_js_1.assertUsage)((0, utils_js_2.isCallable)(hookFn), `${hookDefinedAt} should be a function.`);
148
149
  const onBeforeRouteHook = {
149
150
  hookFilePath: hookFilePath,
150
151
  onBeforeRoute: hookFn
@@ -11,7 +11,7 @@ async function resolveRouteFunction(routeFunction, pageContext, routeDefinedAt)
11
11
  (0, addUrlComputedProps_js_1.assertPageContextUrlComputedProps)(pageContext);
12
12
  let result = routeFunction(pageContext);
13
13
  assertSyncRouting(result, `The Route Function ${routeDefinedAt}`);
14
- // TODO/v1-release
14
+ // TODO/v1-release: make resolveRouteFunction() and route() sync
15
15
  //* We disallow asynchronous routing, because we need to check whether a link is a Vike link in a synchronous fashion before calling ev.preventDefault() in the 'click' event listener
16
16
  result = await result;
17
17
  //*/
@@ -35,7 +35,7 @@ __exportStar(require("../utils/stringifyStringArray.js"), exports);
35
35
  __exportStar(require("../utils/filesystemPathHandling.js"), exports);
36
36
  __exportStar(require("../utils/cast.js"), exports);
37
37
  __exportStar(require("../utils/projectInfo.js"), exports);
38
- __exportStar(require("../utils/hasPropertyGetter.js"), exports);
38
+ __exportStar(require("../utils/isPropertyGetter.js"), exports);
39
39
  __exportStar(require("../utils/isPromise.js"), exports);
40
40
  __exportStar(require("../utils/checkType.js"), exports);
41
41
  __exportStar(require("../utils/objectEntries.js"), exports);
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasPropertyGetter = void 0;
4
- function hasPropertyGetter(obj, prop) {
3
+ exports.isPropertyGetter = void 0;
4
+ function isPropertyGetter(obj, prop) {
5
5
  const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
6
6
  return !!descriptor && !('value' in descriptor) && !!descriptor.get;
7
7
  }
8
- exports.hasPropertyGetter = hasPropertyGetter;
8
+ exports.isPropertyGetter = isPropertyGetter;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectInfo = void 0;
4
4
  const assertSingleInstance_js_1 = require("./assertSingleInstance.js");
5
- const PROJECT_VERSION = '0.4.144-commit-6aef8a6';
5
+ const PROJECT_VERSION = '0.4.144-commit-7f5e99a';
6
6
  const projectInfo = {
7
7
  projectName: 'Vike',
8
8
  projectVersion: PROJECT_VERSION,
@@ -1,8 +1,8 @@
1
- import { route, type PageRoutes } from '../shared/route/index.js';
2
- import { type PageFile } from '../shared/getPageFiles.js';
3
- import { PageConfigRuntime } from '../shared/page-configs/PageConfig.js';
4
1
  export { route, getPagesAndRoutes };
5
2
  export type { PageRoutes, PageFile, PageConfigRuntime as PageConfig };
3
+ import { route as routeInternal, type PageRoutes } from '../shared/route/index.js';
4
+ import { type PageFile } from '../shared/getPageFiles.js';
5
+ import { PageConfigRuntime } from '../shared/page-configs/PageConfig.js';
6
6
  /**
7
7
  * Used by {@link https://github.com/magne4000/vite-plugin-vercel|vite-plugin-vercel}
8
8
  * to compute some rewrite rules and extract { isr } configs.
@@ -15,3 +15,6 @@ declare function getPagesAndRoutes(): Promise<{
15
15
  pageConfigs: PageConfigRuntime[];
16
16
  allPageIds: string[];
17
17
  }>;
18
+ declare function route(pageContext: Parameters<typeof routeInternal>[0]): Promise<{
19
+ pageContextAddendum: import("../shared/route/index.js").PageContextFromRoute;
20
+ }>;
@@ -1,10 +1,10 @@
1
- // Internal functions of vike needed by other plugins are exported via this file
2
- import { route } from '../shared/route/index.js';
1
+ // Internals needed by vite-plugin-vercel
2
+ export { route, getPagesAndRoutes };
3
+ import { route as routeInternal } from '../shared/route/index.js';
3
4
  import { getGlobalContext, initGlobalContext } from '../node/runtime/globalContext.js';
4
5
  import { setNodeEnvToProduction } from '../utils/nodeEnv.js';
5
6
  import { assert } from '../utils/assert.js';
6
7
  import { getRenderContext } from '../node/runtime/renderPage/renderPageAlreadyRouted.js';
7
- export { route, getPagesAndRoutes };
8
8
  /**
9
9
  * Used by {@link https://github.com/magne4000/vite-plugin-vercel|vite-plugin-vercel}
10
10
  * to compute some rewrite rules and extract { isr } configs.
@@ -25,3 +25,8 @@ async function getPagesAndRoutes() {
25
25
  allPageIds
26
26
  };
27
27
  }
28
+ async function route(pageContext) {
29
+ const pageContextFromRoute = await routeInternal(pageContext);
30
+ // Old interface
31
+ return { pageContextAddendum: pageContextFromRoute };
32
+ }
@@ -1,7 +1,6 @@
1
1
  export { createPageContext };
2
- declare function createPageContext<T extends {
2
+ declare function createPageContext(urlOriginal: string): Promise<{
3
3
  urlOriginal: string;
4
- }>(pageContextBase?: T): Promise<{
5
4
  _objectCreatedByVike: boolean;
6
5
  _urlHandler: null;
7
6
  _urlRewrite: null;
@@ -13,6 +12,6 @@ declare function createPageContext<T extends {
13
12
  _allPageIds: string[];
14
13
  _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
15
14
  _onBeforeRouteHook: import("../../shared/route/executeOnBeforeRouteHook.js").OnBeforeRouteHook | null;
16
- } & T & import("../../shared/addUrlComputedProps.js").PageContextUrlComputedPropsClient & {
15
+ } & import("../../shared/addUrlComputedProps.js").PageContextUrlComputedPropsClient & {
17
16
  _urlRewrite: string | null;
18
17
  }>;
@@ -3,9 +3,9 @@ import { addUrlComputedProps } from '../../shared/addUrlComputedProps.js';
3
3
  import { getPageFilesAll } from '../../shared/getPageFiles.js';
4
4
  import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
5
5
  import { getBaseServer } from './getBaseServer.js';
6
- import { assert, isBaseServer, objectAssign, getGlobalObject } from './utils.js';
6
+ import { assert, isBaseServer, getGlobalObject } from './utils.js';
7
7
  const globalObject = getGlobalObject('createPageContext.ts', {});
8
- async function createPageContext(pageContextBase) {
8
+ async function createPageContext(urlOriginal) {
9
9
  if (!globalObject.pageFilesData) {
10
10
  globalObject.pageFilesData = await getPageFilesAll(true);
11
11
  }
@@ -16,6 +16,7 @@ async function createPageContext(pageContextBase) {
16
16
  // @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
17
17
  const isProd = import.meta.env.PROD;
18
18
  const pageContext = {
19
+ urlOriginal,
19
20
  _objectCreatedByVike: true,
20
21
  _urlHandler: null,
21
22
  _urlRewrite: null,
@@ -29,7 +30,6 @@ async function createPageContext(pageContextBase) {
29
30
  _pageRoutes: pageRoutes,
30
31
  _onBeforeRouteHook: onBeforeRouteHook
31
32
  };
32
- objectAssign(pageContext, pageContextBase);
33
33
  addUrlComputedProps(pageContext);
34
34
  return pageContext;
35
35
  }
@@ -1,9 +1,9 @@
1
1
  import { assertClientRouting } from '../../utils/assertRoutingType.js';
2
2
  assertClientRouting();
3
3
  import './pageFiles';
4
- import { useClientRouter } from './useClientRouter.js';
4
+ import { installClientRouter } from './installClientRouter.js';
5
5
  import { onClientEntry_ClientRouting } from './utils.js';
6
6
  // @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
7
7
  const isProd = import.meta.env.PROD;
8
8
  onClientEntry_ClientRouting(isProd);
9
- useClientRouter();
9
+ installClientRouter();
@@ -21,7 +21,6 @@ declare function getPageContext(pageContext: {
21
21
  declare function getPageContextErrorPage(pageContext: {
22
22
  urlOriginal: string;
23
23
  _allPageIds: string[];
24
- _isFirstRenderAttempt: boolean;
25
24
  _pageFilesAll: PageFile[];
26
25
  _pageConfigs: PageConfigRuntime[];
27
26
  } & PageContextPassThrough): Promise<PageContextAddendum>;