vike 0.4.171-commit-75e1588 → 0.4.171-commit-6e37128

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 (116) hide show
  1. package/dist/cjs/node/plugin/plugins/buildConfig.js +3 -4
  2. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
  3. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
  4. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +30 -74
  5. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -42
  6. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +9 -49
  7. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
  8. package/dist/cjs/node/prerender/runPrerender.js +33 -13
  9. package/dist/cjs/node/prerender/utils.js +1 -0
  10. package/dist/cjs/node/runtime/renderPage/analyzePage.js +9 -7
  11. package/dist/cjs/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +1 -1
  12. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +7 -7
  13. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
  14. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
  15. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +6 -5
  16. package/dist/cjs/node/shared/assertV1Design.js +3 -4
  17. package/dist/cjs/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
  18. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +2 -2
  19. package/dist/cjs/shared/hooks/getHook.js +2 -2
  20. package/dist/cjs/shared/page-configs/getConfigValue.js +14 -17
  21. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +70 -0
  22. package/dist/cjs/shared/page-configs/loadConfigValues.js +3 -12
  23. package/dist/cjs/shared/page-configs/serialize/assertPageConfigsSerialized.js +1 -2
  24. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +110 -16
  25. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +198 -0
  26. package/dist/cjs/shared/route/index.js +2 -2
  27. package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
  28. package/dist/cjs/shared/route/resolveRouteFunction.js +2 -2
  29. package/dist/cjs/shared/utils.js +2 -0
  30. package/dist/cjs/utils/changeEnumerable.js +9 -0
  31. package/dist/cjs/utils/hasProp.js +5 -7
  32. package/dist/cjs/utils/objectAssign.js +1 -1
  33. package/dist/cjs/utils/objectDefineProperty.js +8 -0
  34. package/dist/cjs/utils/projectInfo.js +1 -1
  35. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +6 -4
  36. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
  37. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +14 -10
  38. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +4 -4
  39. package/dist/esm/client/shared/loadUserFilesClientSide.js +4 -4
  40. package/dist/esm/node/plugin/plugins/buildConfig.js +3 -4
  41. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
  42. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +2 -1
  43. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
  44. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +30 -74
  45. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -42
  46. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +9 -49
  47. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.d.ts +1 -0
  48. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
  49. package/dist/esm/node/prerender/runPrerender.js +35 -15
  50. package/dist/esm/node/prerender/utils.d.ts +1 -0
  51. package/dist/esm/node/prerender/utils.js +1 -0
  52. package/dist/esm/node/runtime/renderPage/analyzePage.js +9 -7
  53. package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +2 -2
  54. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +7 -7
  55. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -9
  56. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +4 -5
  57. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
  58. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +2 -2
  59. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +27 -50
  60. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +6 -5
  61. package/dist/esm/node/shared/assertV1Design.d.ts +2 -2
  62. package/dist/esm/node/shared/assertV1Design.js +3 -4
  63. package/dist/esm/shared/{addUrlComputedProps.d.ts → getPageContextUrlComputed.d.ts} +23 -21
  64. package/dist/esm/shared/{addUrlComputedProps.js → getPageContextUrlComputed.js} +52 -42
  65. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +3 -3
  66. package/dist/esm/shared/hooks/getHook.d.ts +2 -2
  67. package/dist/esm/shared/hooks/getHook.js +3 -3
  68. package/dist/esm/shared/page-configs/PageConfig.d.ts +10 -4
  69. package/dist/esm/shared/page-configs/getConfigValue.d.ts +12 -12
  70. package/dist/esm/shared/page-configs/getConfigValue.js +13 -16
  71. package/dist/esm/shared/page-configs/getConfigValueBuildTime.d.ts +9 -0
  72. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +67 -0
  73. package/dist/esm/shared/page-configs/loadConfigValues.js +3 -12
  74. package/dist/esm/shared/page-configs/serialize/PageConfigSerialized.d.ts +15 -19
  75. package/dist/esm/shared/page-configs/serialize/assertPageConfigsSerialized.js +1 -2
  76. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +4 -1
  77. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +109 -15
  78. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +5 -0
  79. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +192 -0
  80. package/dist/esm/shared/route/index.d.ts +3 -3
  81. package/dist/esm/shared/route/index.js +2 -2
  82. package/dist/esm/shared/route/loadPageRoutes.js +3 -3
  83. package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
  84. package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
  85. package/dist/esm/shared/types.d.ts +4 -4
  86. package/dist/esm/shared/utils.d.ts +2 -0
  87. package/dist/esm/shared/utils.js +2 -0
  88. package/dist/esm/types/index.d.ts +1 -1
  89. package/dist/esm/utils/changeEnumerable.d.ts +2 -0
  90. package/dist/esm/utils/changeEnumerable.js +5 -0
  91. package/dist/esm/utils/hasProp.d.ts +4 -13
  92. package/dist/esm/utils/hasProp.js +5 -7
  93. package/dist/esm/utils/objectAssign.js +1 -1
  94. package/dist/esm/utils/objectDefineProperty.d.ts +4 -0
  95. package/dist/esm/utils/objectDefineProperty.js +4 -0
  96. package/dist/esm/utils/projectInfo.d.ts +2 -2
  97. package/dist/esm/utils/projectInfo.js +1 -1
  98. package/package.json +2 -2
  99. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -101
  100. package/dist/cjs/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -14
  101. package/dist/cjs/node/shared/getClientEntry.js +0 -12
  102. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesImported.js +0 -85
  103. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -24
  104. package/dist/cjs/shared/page-configs/serialize/serializeConfigValue.js +0 -49
  105. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.d.ts +0 -5
  106. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -95
  107. package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.d.ts +0 -5
  108. package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -11
  109. package/dist/esm/node/shared/getClientEntry.d.ts +0 -3
  110. package/dist/esm/node/shared/getClientEntry.js +0 -9
  111. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.d.ts +0 -4
  112. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.js +0 -82
  113. package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.d.ts +0 -4
  114. package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -21
  115. package/dist/esm/shared/page-configs/serialize/serializeConfigValue.d.ts +0 -6
  116. package/dist/esm/shared/page-configs/serialize/serializeConfigValue.js +0 -46
@@ -6,12 +6,16 @@ const analyzePageClientSide_js_1 = require("../../../shared/getPageFiles/analyze
6
6
  const virtualFilePageConfigValuesAll_js_1 = require("../../shared/virtual-files/virtualFilePageConfigValuesAll.js");
7
7
  const analyzeClientSide_js_1 = require("../../../shared/getPageFiles/analyzeClientSide.js");
8
8
  const globalContext_js_1 = require("../globalContext.js");
9
- const getClientEntry_js_1 = require("../../shared/getClientEntry.js");
9
+ const getConfigValue_js_1 = require("../../../shared/page-configs/getConfigValue.js");
10
10
  function analyzePage(pageFilesAll, pageConfig, pageId) {
11
11
  if (pageConfig) {
12
12
  const { isClientSideRenderable, isClientRouting } = (0, analyzeClientSide_js_1.analyzeClientSide)(pageConfig, pageFilesAll, pageId);
13
- const clientFilePath = (0, getClientEntry_js_1.getClientEntry)(pageConfig);
14
- const clientEntry = !isClientSideRenderable ? clientFilePath : (0, determineClientEntry_js_1.getVikeClientEntry)(isClientRouting);
13
+ const clientEntries = [];
14
+ const clientFilePath = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, 'client', 'string')?.value ?? null;
15
+ if (clientFilePath)
16
+ clientEntries.push(clientFilePath);
17
+ if (isClientSideRenderable)
18
+ clientEntries.push((0, determineClientEntry_js_1.getVikeClientEntry)(isClientRouting));
15
19
  const clientDependencies = [];
16
20
  clientDependencies.push({
17
21
  id: (0, virtualFilePageConfigValuesAll_js_1.getVirtualFileIdPageConfigValuesAll)(pageConfig.pageId, true),
@@ -43,15 +47,13 @@ function analyzePage(pageFilesAll, pageConfig, pageId) {
43
47
  }
44
48
  })
45
49
  */
46
- const clientEntries = [];
47
- if (clientEntry) {
50
+ clientEntries.forEach((clientEntry) => {
48
51
  clientDependencies.push({
49
52
  id: clientEntry,
50
53
  onlyAssets: false,
51
54
  eagerlyImported: false
52
55
  });
53
- clientEntries.push(clientEntry);
54
- }
56
+ });
55
57
  return {
56
58
  isHtmlOnly: !isClientSideRenderable,
57
59
  isClientRouting,
@@ -9,7 +9,7 @@ function getCacheControl(pageId, pageConfigs) {
9
9
  if (pageConfigs.length === 0)
10
10
  return defaultValue;
11
11
  const pageConfig = (0, helpers_js_1.getPageConfig)(pageId, pageConfigs);
12
- const configValue = (0, getConfigValue_js_1.getConfigValue)(pageConfig, 'cacheControl', 'string');
12
+ const configValue = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, 'cacheControl', 'string');
13
13
  const value = configValue?.value;
14
14
  if (value)
15
15
  return value;
@@ -69,13 +69,13 @@ function getRenderHook(pageContext) {
69
69
  (0, utils_js_1.assertUsage)(false, [
70
70
  `No ${hookName}() hook found, see https://vike.dev/${hookName}`
71
71
  /*
72
- 'See https://vike.dev/render-modes for more information.',
73
- [
74
- // 'Loaded config files (none of them define the onRenderHtml() hook):',
75
- 'Loaded server-side page files (none of them `export { render }`):',
76
- ...pageContext._pageFilePathsLoaded.map((f, i) => ` (${i + 1}): ${f}`)
77
- ].join('\n')
78
- */
72
+ 'See https://vike.dev/render-modes for more information.',
73
+ [
74
+ // 'Loaded config files (none of them define the onRenderHtml() hook):',
75
+ 'Loaded server-side page files (none of them `export { render }`):',
76
+ ...pageContext._pageFilePathsLoaded.map((f, i) => ` (${i + 1}): ${f}`)
77
+ ].join('\n')
78
+ */
79
79
  ].join(' '));
80
80
  }
81
81
  return hookFound;
@@ -12,7 +12,7 @@ const globalContext_js_1 = require("../globalContext.js");
12
12
  const loadConfigValues_js_1 = require("../../../shared/page-configs/loadConfigValues.js");
13
13
  async function loadUserFilesServerSide(pageContext) {
14
14
  const pageConfig = (0, findPageConfig_js_1.findPageConfig)(pageContext._pageConfigs, pageContext._pageId); // Make pageConfig globally available as pageContext._pageConfig?
15
- const [{ pageFilesLoaded, pageConfigLoaded, ...pageContextExports }] = await Promise.all([
15
+ const [{ pageFilesLoaded, pageContextExports }] = await Promise.all([
16
16
  loadPageUserFiles(pageContext._pageFilesAll, pageConfig, pageContext._pageId, !(0, globalContext_js_1.getGlobalContext)().isProduction),
17
17
  (0, analyzePageClientSide_js_1.analyzePageClientSideInit)(pageContext._pageFilesAll, pageContext._pageId, { sharedPageFilesAlreadyLoaded: true })
18
18
  ]);
@@ -37,8 +37,8 @@ async function loadUserFilesServerSide(pageContext) {
37
37
  });
38
38
  }
39
39
  const pageContextAddendum = {};
40
+ (0, utils_js_1.objectAssign)(pageContextAddendum, pageContextExports);
40
41
  (0, utils_js_1.objectAssign)(pageContextAddendum, {
41
- ...pageContextExports,
42
42
  Page: pageContextExports.exports.Page,
43
43
  _isHtmlOnly: isHtmlOnly,
44
44
  _passToClient: passToClient,
@@ -104,8 +104,7 @@ async function loadPageUserFiles(pageFilesAll, pageConfig, pageId, isDev) {
104
104
  await Promise.all(pageFilesServerSide.map((p) => p.loadFile?.()));
105
105
  const pageContextExports = (0, getPageFiles_js_1.getPageContextExports)(pageFilesServerSide, pageConfigLoaded);
106
106
  return {
107
- ...pageContextExports,
108
- pageFilesLoaded: pageFilesServerSide,
109
- pageConfigLoaded
107
+ pageContextExports,
108
+ pageFilesLoaded: pageFilesServerSide
110
109
  };
111
110
  }
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.preparePageContextForUserConsumptionServerSide = void 0;
4
4
  const utils_js_1 = require("../utils.js");
5
5
  const sortPageContext_js_1 = require("../../../shared/sortPageContext.js");
6
- const addUrlComputedProps_js_1 = require("../../../shared/addUrlComputedProps.js");
6
+ const getPageContextUrlComputed_js_1 = require("../../../shared/getPageContextUrlComputed.js");
7
7
  const addIs404ToPageProps_js_1 = require("../../../shared/addIs404ToPageProps.js");
8
8
  function preparePageContextForUserConsumptionServerSide(pageContext) {
9
- (0, addUrlComputedProps_js_1.assertPageContextUrlComputedProps)(pageContext);
9
+ (0, getPageContextUrlComputed_js_1.assertPageContextUrl)(pageContext);
10
10
  (0, utils_js_1.assert)((0, utils_js_1.isPlainObject)(pageContext.routeParams));
11
11
  (0, utils_js_1.assert)('Page' in pageContext);
12
12
  (0, utils_js_1.assert)((0, utils_js_1.isObject)(pageContext.pageExports));
@@ -9,7 +9,7 @@ const renderHtml_js_1 = require("../html/renderHtml.js");
9
9
  const getPageFiles_js_1 = require("../../../shared/getPageFiles.js");
10
10
  const utils_js_1 = require("../utils.js");
11
11
  const serializePageContextClientSide_js_1 = require("../html/serializePageContextClientSide.js");
12
- const addUrlComputedProps_js_1 = require("../../../shared/addUrlComputedProps.js");
12
+ const getPageContextUrlComputed_js_1 = require("../../../shared/getPageContextUrlComputed.js");
13
13
  const globalContext_js_1 = require("../globalContext.js");
14
14
  const createHttpResponseObject_js_1 = require("./createHttpResponseObject.js");
15
15
  const loadUserFilesServerSide_js_1 = require("./loadUserFilesServerSide.js");
@@ -22,7 +22,6 @@ const executeGuardHook_js_1 = require("../../../shared/route/executeGuardHook.js
22
22
  const loadPageRoutes_js_1 = require("../../../shared/route/loadPageRoutes.js");
23
23
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
24
24
  const isServerSideError_js_1 = require("../../../shared/misc/isServerSideError.js");
25
- const assertV1Design_js_1 = require("../../shared/assertV1Design.js");
26
25
  async function renderPageAlreadyRouted(pageContext) {
27
26
  // pageContext._pageId can either be the:
28
27
  // - ID of the page matching the routing, or the
@@ -120,7 +119,7 @@ async function prerender404Page(renderContext, pageContextInit_) {
120
119
  return prerenderPage(pageContext);
121
120
  }
122
121
  exports.prerender404Page = prerender404Page;
123
- function getPageContextInitEnhanced(pageContextInit, renderContext, { urlComputedPropsNonEnumerable = false, ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
122
+ function getPageContextInitEnhanced(pageContextInit, renderContext, { ssr: { urlRewrite, urlHandler, isClientSideNavigation } = {
124
123
  urlRewrite: null,
125
124
  urlHandler: null,
126
125
  isClientSideNavigation: false
@@ -148,7 +147,8 @@ function getPageContextInitEnhanced(pageContextInit, renderContext, { urlCompute
148
147
  isClientSideNavigation
149
148
  });
150
149
  // pageContext.urlParsed
151
- (0, addUrlComputedProps_js_1.addUrlComputedProps)(pageContextInitEnhanced, !urlComputedPropsNonEnumerable);
150
+ const pageContextUrlComputed = (0, getPageContextUrlComputed_js_1.getPageContextUrlComputed)(pageContextInitEnhanced);
151
+ (0, utils_js_1.objectAssign)(pageContextInitEnhanced, pageContextUrlComputed);
152
152
  // pageContext.headers
153
153
  {
154
154
  let headers;
@@ -175,7 +175,8 @@ async function getRenderContext() {
175
175
  const globalContext = (0, globalContext_js_1.getGlobalContext)();
176
176
  const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal } = await (0, getPageFiles_js_1.getPageFilesAll)(false, globalContext.isProduction);
177
177
  const { pageRoutes, onBeforeRouteHook } = await (0, loadPageRoutes_js_1.loadPageRoutes)(pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds);
178
- (0, assertV1Design_js_1.assertV1Design)(pageFilesAll.length > 0, pageConfigs, pageFilesAll);
178
+ // We assume assertV1Design() was already called at build-time
179
+ (0, utils_js_1.assert)(pageFilesAll.length === 0 || pageConfigs.length === 0);
179
180
  const renderContext = {
180
181
  pageFilesAll: pageFilesAll,
181
182
  pageConfigs,
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assertV1Design = void 0;
4
- const helpers_js_1 = require("../../shared/page-configs/helpers.js");
5
4
  const utils_js_1 = require("./utils.js");
6
5
  function assertV1Design(isOldDesign, pageConfigs, pageFilesAll) {
7
6
  const isV1Design = pageConfigs.length > 0;
@@ -11,10 +10,10 @@ function assertV1Design(isOldDesign, pageConfigs, pageFilesAll) {
11
10
  (0, utils_js_1.assert)(pageFilesAll.length > 0);
12
11
  const indent = '- ';
13
12
  const filesV1 = (0, utils_js_1.unique)(pageConfigs
14
- .map((p) => Object.values(p.configValues)
15
- .map((c) => (0, helpers_js_1.getConfigValueFilePathToShowToUser)(c.definedAtData))
13
+ .map((p) => Object.values(p.configValueSources).map((sources) => sources
14
+ .map((c) => c.definedAtFilePath.filePathAbsoluteUserRootDir)
16
15
  .filter(utils_js_1.isNotNullish)
17
- .map((filePathToShowToUser) => indent + filePathToShowToUser))
16
+ .map((filePathToShowToUser) => indent + filePathToShowToUser)))
18
17
  .flat(2));
19
18
  const filesOld = pageFilesAll.map((p) => indent + p.filePath);
20
19
  lines.push(...['V1 design files:', ...filesV1, 'Old design files:', ...filesOld]);
@@ -1,48 +1,34 @@
1
1
  "use strict";
2
- // URLs props need to be computed props, because the user can modify the URL e.g. with onBeforeRoute() for i18n
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.assertPageContextUrlComputedProps = exports.addUrlComputedProps = void 0;
3
+ exports.assertPageContextUrl = exports.getPageContextUrlComputed = void 0;
4
+ // =====================
5
+ // File determining the URL logic.
6
+ // URLs need to be computed, because the user can modify the URL e.g. with onBeforeRoute() for i18n.
7
+ // =====================
8
+ const objectDefineProperty_js_1 = require("../utils/objectDefineProperty.js");
5
9
  const utils_js_1 = require("./utils.js");
6
- function addUrlComputedProps(pageContext, enumerable = true) {
7
- (0, utils_js_1.assert)(pageContext.urlOriginal);
8
- if ('urlPathname' in pageContext) {
9
- (0, utils_js_1.assert)(typeof pageContext.urlPathname === 'string');
10
- /* If the following 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'));
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'));
29
- Object.defineProperty(pageContext, 'urlPathname', {
10
+ function getPageContextUrlComputed(pageContext) {
11
+ (0, utils_js_1.assert)(typeof pageContext.urlOriginal === 'string');
12
+ assertPageContextUrlComputed(pageContext);
13
+ const pageContextUrlComputed = {};
14
+ (0, objectDefineProperty_js_1.objectDefineProperty)(pageContextUrlComputed, 'urlPathname', {
30
15
  get: urlPathnameGetter,
31
- enumerable,
16
+ enumerable: true,
32
17
  configurable: true
33
18
  });
34
- Object.defineProperty(pageContext, 'url', {
19
+ (0, objectDefineProperty_js_1.objectDefineProperty)(pageContextUrlComputed, 'url', {
35
20
  get: urlGetter,
36
21
  enumerable: false,
37
22
  configurable: true
38
23
  });
39
- Object.defineProperty(pageContext, 'urlParsed', {
24
+ (0, objectDefineProperty_js_1.objectDefineProperty)(pageContextUrlComputed, 'urlParsed', {
40
25
  get: urlParsedGetter,
41
- enumerable,
26
+ enumerable: true,
42
27
  configurable: true
43
28
  });
29
+ return pageContextUrlComputed;
44
30
  }
45
- exports.addUrlComputedProps = addUrlComputedProps;
31
+ exports.getPageContextUrlComputed = getPageContextUrlComputed;
46
32
  function getUrlParsed(pageContext) {
47
33
  // We need a url handler function because the onBeforeRoute() hook may set pageContext.urlLogical (typically for i18n)
48
34
  let urlHandler = pageContext._urlHandler;
@@ -92,7 +78,7 @@ function urlParsedGetter() {
92
78
  const { origin, pathname, pathnameOriginal, search, searchAll, searchOriginal, hash, hashOriginal } = urlParsedOriginal;
93
79
  const hashIsAvailable = (0, utils_js_1.isBrowser)();
94
80
  const warnHashNotAvailable = (prop) => {
95
- (0, utils_js_1.assertWarning)(hashIsAvailable, `pageContext.urlParsed.${prop} isn't available on the server-side (HTTP requests don't include the URL hash by design)`, { onlyOnce: true, showStackTrace: true });
81
+ (0, utils_js_1.assertWarning)(hashIsAvailable, `pageContext.urlParsed.${prop} isn't available on the server-side (HTTP requests don't include the URL hash)`, { onlyOnce: true, showStackTrace: true });
96
82
  };
97
83
  const urlParsed = {
98
84
  origin,
@@ -122,22 +108,46 @@ function urlParsedGetter() {
122
108
  return searchOriginal;
123
109
  }
124
110
  };
125
- makeNonEnumerable(urlParsed, 'hashString');
126
- makeNonEnumerable(urlParsed, 'searchString');
111
+ (0, utils_js_1.changeEnumerable)(urlParsed, 'hashString', false);
112
+ (0, utils_js_1.changeEnumerable)(urlParsed, 'searchString', false);
127
113
  if (!hashIsAvailable) {
128
- makeNonEnumerable(urlParsed, 'hash');
129
- makeNonEnumerable(urlParsed, 'hashOriginal');
114
+ (0, utils_js_1.changeEnumerable)(urlParsed, 'hash', false);
115
+ (0, utils_js_1.changeEnumerable)(urlParsed, 'hashOriginal', false);
130
116
  }
131
117
  return urlParsed;
132
118
  }
133
- function makeNonEnumerable(obj, prop) {
134
- const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
135
- Object.defineProperty(obj, prop, { ...descriptor, enumerable: false });
136
- }
137
- function assertPageContextUrlComputedProps(pageContext) {
119
+ function assertPageContextUrl(pageContext) {
138
120
  (0, utils_js_1.assert)(typeof pageContext.urlOriginal === 'string');
139
121
  (0, utils_js_1.assert)(typeof pageContext.urlPathname === 'string');
140
122
  (0, utils_js_1.assert)((0, utils_js_1.isPlainObject)(pageContext.urlParsed));
141
123
  (0, utils_js_1.assert)(pageContext.urlPathname === pageContext.urlParsed.pathname);
124
+ assertPageContextUrlComputed(pageContext);
125
+ }
126
+ exports.assertPageContextUrl = assertPageContextUrl;
127
+ function assertPageContextUrlComputed(pageContext) {
128
+ /*
129
+ If the isPropertyGetter() assertions fail then it's most likely because Object.assign() was used instead of `objectAssign()`:
130
+ ```js
131
+ const PageContextUrlComputed = getPageContextUrlComputed(pageContext)
132
+
133
+ // ❌ Breaks the property descriptors/getters of pageContext defined by getPageContextUrlComputed() such as pageContext.urlPathname
134
+ Object.assign(pageContext, pageContextUrlComputed)
135
+
136
+ // ❌ Also breaks property descriptors/getters
137
+ const pageContext = { ...pageContextUrlComputed }
138
+
139
+ // ✅ Preserves property descriptors/getters (see objectAssign() implementation)
140
+ objectAssign(pageContext, pageContextUrlComputed)
141
+ ```
142
+ */
143
+ if ('urlPathname' in pageContext) {
144
+ (0, utils_js_1.assert)(typeof pageContext.urlPathname === 'string');
145
+ (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlPathname'));
146
+ (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlParsed'));
147
+ (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'url'));
148
+ }
149
+ else {
150
+ (0, utils_js_1.assert)(!('urlParsed' in pageContext));
151
+ (0, utils_js_1.assert)(!('url' in pageContext));
152
+ }
142
153
  }
143
- exports.assertPageContextUrlComputedProps = assertPageContextUrlComputedProps;
@@ -6,8 +6,8 @@ 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, getConfigValue_js_1.getConfigValue)(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
10
- const isClientSideRenderable = (0, getConfigValue_js_1.getConfigValue)(pageConfig, 'isClientSideRenderable', 'boolean')?.value ?? false;
9
+ const isClientRouting = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
10
+ const isClientSideRenderable = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, 'isClientSideRenderable', 'boolean')?.value ?? false;
11
11
  return { isClientSideRenderable, isClientRouting };
12
12
  }
13
13
  else {
@@ -31,8 +31,8 @@ function getHook(pageContext, hookName) {
31
31
  }
32
32
  exports.getHook = getHook;
33
33
  function getHookFromPageConfig(pageConfig, hookName) {
34
- const configValue = (0, getConfigValue_js_1.getConfigValue)(pageConfig, hookName);
35
- const hooksTimeout = (0, getConfigValue_js_1.getConfigValue)(pageConfig, 'hooksTimeout')?.value;
34
+ const configValue = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, hookName);
35
+ const hooksTimeout = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, 'hooksTimeout')?.value;
36
36
  if (!configValue)
37
37
  return null;
38
38
  const hookFn = configValue.value;
@@ -3,22 +3,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getConfigValue = void 0;
6
+ exports.getConfigValueTyped = exports.getConfigValueRuntime = void 0;
7
7
  const utils_js_1 = require("../utils.js");
8
8
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
9
9
  const getConfigDefinedAt_js_1 = require("./getConfigDefinedAt.js");
10
- // prettier-ignore
11
- // biome-ignore format:
12
- function getConfigValue(pageConfig, configName, type) {
13
- const configValue = getConfigValueEntry(pageConfig, configName);
14
- if (configValue === null)
15
- return null;
10
+ function getConfigValueTyped(configValue, configName, type) {
11
+ /* [NULL_HANDLING] Do we really need this? This doesn't seem to make sense, let's eventually (re)move this.
12
+ // Enable users to suppress global config values by setting the local config value to null
13
+ if (configValue.value === null) return null
14
+ */
16
15
  const { value, definedAtData } = configValue;
17
16
  if (type)
18
17
  assertConfigValueType(value, type, configName, definedAtData);
19
18
  return configValue;
20
19
  }
21
- exports.getConfigValue = getConfigValue;
20
+ exports.getConfigValueTyped = getConfigValueTyped;
21
+ function getConfigValueRuntime(pageConfig, configName, type) {
22
+ const configValue = pageConfig.configValues[configName];
23
+ if (!configValue)
24
+ return null;
25
+ return getConfigValueTyped(configValue, configName, type);
26
+ }
27
+ exports.getConfigValueRuntime = getConfigValueRuntime;
22
28
  function assertConfigValueType(value, type, configName, definedAtData) {
23
29
  (0, utils_js_1.assert)(value !== null);
24
30
  const typeActual = typeof value;
@@ -32,12 +38,3 @@ function assertConfigValueType(value, type, configName, definedAtData) {
32
38
  const errMsg = `${configDefinedAt} has an invalid ${problem}: it should be a ${picocolors_1.default.cyan(type)} instead`;
33
39
  (0, utils_js_1.assertUsage)(false, errMsg);
34
40
  }
35
- function getConfigValueEntry(pageConfig, configName) {
36
- const configValue = pageConfig.configValues[configName];
37
- if (!configValue)
38
- return null;
39
- // Enable users to suppress global config values by setting the local config value to null
40
- if (configValue.value === null)
41
- return null;
42
- return configValue;
43
- }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConfigValueBuildTime = void 0;
4
+ const utils_js_1 = require("../utils.js");
5
+ const getConfigValue_js_1 = require("./getConfigValue.js");
6
+ const assertIsNotProductionRuntime_js_1 = require("../../utils/assertIsNotProductionRuntime.js");
7
+ (0, assertIsNotProductionRuntime_js_1.assertIsNotProductionRuntime)();
8
+ function getConfigValueBuildTime(pageConfig, configName, type) {
9
+ const configValue = getConfigValue(pageConfig, configName);
10
+ if (!configValue)
11
+ return null;
12
+ return (0, getConfigValue_js_1.getConfigValueTyped)(configValue, configName, type);
13
+ }
14
+ exports.getConfigValueBuildTime = getConfigValueBuildTime;
15
+ function getConfigValue(pageConfig, configName) {
16
+ const { configValueSources, configValuesComputed, configDefinitions } = pageConfig;
17
+ const configValueComputed = configValuesComputed[configName];
18
+ if (configValueComputed) {
19
+ return {
20
+ type: 'computed',
21
+ value: configValueComputed.value,
22
+ definedAtData: null
23
+ };
24
+ }
25
+ const sources = configValueSources[configName];
26
+ if (!sources)
27
+ return null;
28
+ (0, utils_js_1.assert)(sources.every((s) => s.configEnv.config === true));
29
+ const configDef = configDefinitions[configName];
30
+ (0, utils_js_1.assert)(configDef);
31
+ if (!configDef.cumulative) {
32
+ const configValueSource = sources[0];
33
+ (0, utils_js_1.assert)(configValueSource);
34
+ (0, utils_js_1.assert)(configValueSource.isOverriden === false);
35
+ (0, utils_js_1.assert)(sources.slice(1).every((s) => s.isOverriden === true));
36
+ (0, utils_js_1.assert)('value' in configValueSource);
37
+ return {
38
+ type: 'standard',
39
+ value: configValueSource.value,
40
+ definedAtData: getDefinedAtFile(configValueSource)
41
+ };
42
+ }
43
+ else {
44
+ const { value, definedAtData } = mergeCumulative(sources);
45
+ (0, utils_js_1.assert)(value.length === definedAtData.length);
46
+ return {
47
+ type: 'cumulative',
48
+ value,
49
+ definedAtData
50
+ };
51
+ }
52
+ }
53
+ function mergeCumulative(configValueSources) {
54
+ const value = [];
55
+ const definedAtData = [];
56
+ configValueSources.forEach((configValueSource) => {
57
+ (0, utils_js_1.assert)(configValueSource.isOverriden === false);
58
+ (0, utils_js_1.assert)(configValueSource.configEnv.config === true);
59
+ (0, utils_js_1.assert)('value' in configValueSource);
60
+ value.push(configValueSource.value);
61
+ definedAtData.push(getDefinedAtFile(configValueSource));
62
+ });
63
+ return { value, definedAtData };
64
+ }
65
+ function getDefinedAtFile(configValueSource) {
66
+ return {
67
+ filePathToShowToUser: configValueSource.definedAtFilePath.filePathToShowToUser,
68
+ fileExportPathToShowToUser: configValueSource.definedAtFilePath.fileExportPathToShowToUser
69
+ };
70
+ }
@@ -2,8 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadConfigValues = void 0;
4
4
  const utils_js_1 = require("../utils.js");
5
- const parseConfigValuesImported_js_1 = require("./serialize/parseConfigValuesImported.js");
6
- const parseConfigValuesSerialized_js_1 = require("./serialize/parseConfigValuesSerialized.js");
5
+ const parsePageConfigs_js_1 = require("./serialize/parsePageConfigs.js");
7
6
  async function loadConfigValues(pageConfig, isDev) {
8
7
  if ('isAllLoaded' in pageConfig &&
9
8
  // We don't need to cache in dev, since Vite already caches the virtual module
@@ -11,16 +10,8 @@ async function loadConfigValues(pageConfig, isDev) {
11
10
  return pageConfig;
12
11
  }
13
12
  const configValuesLoaded = await pageConfig.loadConfigValuesAll();
14
- {
15
- const { configValuesImported } = configValuesLoaded;
16
- const configValuesAddendum = (0, parseConfigValuesImported_js_1.parseConfigValuesImported)(configValuesImported);
17
- Object.assign(pageConfig.configValues, configValuesAddendum);
18
- }
19
- {
20
- const { configValuesSerialized } = configValuesLoaded;
21
- const configValuesAddendum = (0, parseConfigValuesSerialized_js_1.parseConfigValuesSerialized)(configValuesSerialized);
22
- Object.assign(pageConfig.configValues, configValuesAddendum);
23
- }
13
+ const configValues = (0, parsePageConfigs_js_1.parseConfigValuesSerialized)(configValuesLoaded.configValuesSerialized);
14
+ Object.assign(pageConfig.configValues, configValues);
24
15
  (0, utils_js_1.objectAssign)(pageConfig, { isAllLoaded: true });
25
16
  return pageConfig;
26
17
  }
@@ -9,11 +9,10 @@ function assertPageConfigsSerialized(pageConfigsSerialized) {
9
9
  (0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigSerialized, 'pageId', 'string'));
10
10
  (0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigSerialized, 'routeFilesystem'));
11
11
  (0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigSerialized, 'configValuesSerialized'));
12
- (0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigSerialized, 'configValuesImported'));
13
12
  });
14
13
  }
15
14
  exports.assertPageConfigsSerialized = assertPageConfigsSerialized;
16
15
  function assertPageConfigGlobalSerialized(pageConfigGlobalSerialized) {
17
- (0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigGlobalSerialized, 'configValuesImported'));
16
+ (0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageConfigGlobalSerialized, 'configValuesSerialized'));
18
17
  }
19
18
  exports.assertPageConfigGlobalSerialized = assertPageConfigGlobalSerialized;