vike 0.4.171-commit-f9548df → 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 (84) 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 +3 -2
  9. package/dist/cjs/node/runtime/renderPage/analyzePage.js +9 -7
  10. package/dist/cjs/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +1 -1
  11. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +2 -2
  12. package/dist/cjs/node/shared/assertV1Design.js +3 -4
  13. package/dist/cjs/shared/getPageContextUrlComputed.js +8 -6
  14. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +2 -2
  15. package/dist/cjs/shared/hooks/getHook.js +2 -2
  16. package/dist/cjs/shared/page-configs/getConfigValue.js +14 -17
  17. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +70 -0
  18. package/dist/cjs/shared/page-configs/loadConfigValues.js +3 -12
  19. package/dist/cjs/shared/page-configs/serialize/assertPageConfigsSerialized.js +1 -2
  20. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +110 -16
  21. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +198 -0
  22. package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
  23. package/dist/cjs/utils/hasProp.js +5 -7
  24. package/dist/cjs/utils/projectInfo.js +1 -1
  25. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +2 -2
  26. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +3 -3
  27. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +4 -4
  28. package/dist/esm/node/plugin/plugins/buildConfig.js +3 -4
  29. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +18 -15
  30. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +2 -1
  31. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -3
  32. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +30 -74
  33. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +4 -42
  34. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +9 -49
  35. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.d.ts +1 -0
  36. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/isRuntimeEnvMatch.js +6 -0
  37. package/dist/esm/node/prerender/runPrerender.js +4 -3
  38. package/dist/esm/node/runtime/renderPage/analyzePage.js +9 -7
  39. package/dist/esm/node/runtime/renderPage/createHttpResponseObject/getCacheControl.js +2 -2
  40. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -1
  41. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +4 -4
  42. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +2 -2
  43. package/dist/esm/node/shared/assertV1Design.d.ts +2 -2
  44. package/dist/esm/node/shared/assertV1Design.js +3 -4
  45. package/dist/esm/shared/getPageContextUrlComputed.js +8 -6
  46. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +3 -3
  47. package/dist/esm/shared/hooks/getHook.d.ts +2 -2
  48. package/dist/esm/shared/hooks/getHook.js +3 -3
  49. package/dist/esm/shared/page-configs/PageConfig.d.ts +10 -4
  50. package/dist/esm/shared/page-configs/getConfigValue.d.ts +12 -12
  51. package/dist/esm/shared/page-configs/getConfigValue.js +13 -16
  52. package/dist/esm/shared/page-configs/getConfigValueBuildTime.d.ts +9 -0
  53. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +67 -0
  54. package/dist/esm/shared/page-configs/loadConfigValues.js +3 -12
  55. package/dist/esm/shared/page-configs/serialize/PageConfigSerialized.d.ts +15 -19
  56. package/dist/esm/shared/page-configs/serialize/assertPageConfigsSerialized.js +1 -2
  57. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +4 -1
  58. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +109 -15
  59. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +5 -0
  60. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +192 -0
  61. package/dist/esm/shared/route/loadPageRoutes.js +3 -3
  62. package/dist/esm/utils/hasProp.d.ts +4 -13
  63. package/dist/esm/utils/hasProp.js +5 -7
  64. package/dist/esm/utils/projectInfo.d.ts +2 -2
  65. package/dist/esm/utils/projectInfo.js +1 -1
  66. package/package.json +2 -2
  67. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -101
  68. package/dist/cjs/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -14
  69. package/dist/cjs/node/shared/getClientEntry.js +0 -12
  70. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesImported.js +0 -85
  71. package/dist/cjs/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -24
  72. package/dist/cjs/shared/page-configs/serialize/serializeConfigValue.js +0 -49
  73. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.d.ts +0 -5
  74. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getConfigValuesSerialized.js +0 -95
  75. package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.d.ts +0 -5
  76. package/dist/esm/node/plugin/shared/getConfigValueSourcesNotOverriden.js +0 -11
  77. package/dist/esm/node/shared/getClientEntry.d.ts +0 -3
  78. package/dist/esm/node/shared/getClientEntry.js +0 -9
  79. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.d.ts +0 -4
  80. package/dist/esm/shared/page-configs/serialize/parseConfigValuesImported.js +0 -82
  81. package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.d.ts +0 -4
  82. package/dist/esm/shared/page-configs/serialize/parseConfigValuesSerialized.js +0 -21
  83. package/dist/esm/shared/page-configs/serialize/serializeConfigValue.d.ts +0 -6
  84. package/dist/esm/shared/page-configs/serialize/serializeConfigValue.js +0 -46
@@ -130,22 +130,24 @@ function assertPageContextUrlComputed(pageContext) {
130
130
  ```js
131
131
  const PageContextUrlComputed = getPageContextUrlComputed(pageContext)
132
132
 
133
- // ❌ Breaks the property getters of pageContext set by getPageContextUrlComputed() such as pageContext.urlPathname
133
+ // ❌ Breaks the property descriptors/getters of pageContext defined by getPageContextUrlComputed() such as pageContext.urlPathname
134
134
  Object.assign(pageContext, pageContextUrlComputed)
135
135
 
136
- // ❌ Also breaks property getters
136
+ // ❌ Also breaks property descriptors/getters
137
137
  const pageContext = { ...pageContextUrlComputed }
138
138
 
139
- // ✅ Preserves property getters of pageContext (see objectAssign() implementation)
139
+ // ✅ Preserves property descriptors/getters (see objectAssign() implementation)
140
140
  objectAssign(pageContext, pageContextUrlComputed)
141
141
  ```
142
142
  */
143
143
  if ('urlPathname' in pageContext) {
144
144
  (0, utils_js_1.assert)(typeof pageContext.urlPathname === 'string');
145
145
  (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlPathname'));
146
- }
147
- if ('urlParsed' in pageContext)
148
146
  (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlParsed'));
149
- if ('url' in pageContext)
150
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
+ }
151
153
  }
@@ -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;
@@ -1,23 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parsePageConfigs = void 0;
4
- const parseConfigValuesImported_js_1 = require("./parseConfigValuesImported.js");
3
+ exports.parseConfigValuesSerialized = exports.parsePageConfigs = void 0;
5
4
  const utils_js_1 = require("../../utils.js");
6
5
  const getConfigDefinedAt_js_1 = require("../getConfigDefinedAt.js");
7
- const parseConfigValuesSerialized_js_1 = require("./parseConfigValuesSerialized.js");
6
+ const parse_1 = require("@brillout/json-serializer/parse");
7
+ const assertPlusFileExport_js_1 = require("../assertPlusFileExport.js");
8
+ function parseConfigValuesSerialized(configValuesSerialized) {
9
+ const configValues = parseConfigValuesSerialized_tmp(configValuesSerialized);
10
+ return configValues;
11
+ }
12
+ exports.parseConfigValuesSerialized = parseConfigValuesSerialized;
8
13
  function parsePageConfigs(pageConfigsSerialized, pageConfigGlobalSerialized) {
14
+ // pageConfigs
9
15
  const pageConfigs = pageConfigsSerialized.map((pageConfigSerialized) => {
10
- const configValues = {};
11
- {
12
- const { configValuesSerialized } = pageConfigSerialized;
13
- const configValuesAddendum = (0, parseConfigValuesSerialized_js_1.parseConfigValuesSerialized)(configValuesSerialized);
14
- Object.assign(configValues, configValuesAddendum);
15
- }
16
- {
17
- const { configValuesImported } = pageConfigSerialized;
18
- const configValuesAddendum = (0, parseConfigValuesImported_js_1.parseConfigValuesImported)(configValuesImported);
19
- Object.assign(configValues, configValuesAddendum);
20
- }
16
+ const configValues = parseConfigValuesSerialized(pageConfigSerialized.configValuesSerialized);
21
17
  const { pageId, isErrorPage, routeFilesystem, loadConfigValuesAll } = pageConfigSerialized;
22
18
  assertRouteConfigValue(configValues);
23
19
  return {
@@ -28,10 +24,11 @@ function parsePageConfigs(pageConfigsSerialized, pageConfigGlobalSerialized) {
28
24
  loadConfigValuesAll
29
25
  };
30
26
  });
27
+ // pageConfigsGlobal
31
28
  const pageConfigGlobal = { configValues: {} };
32
29
  {
33
- const configValuesAddendum = (0, parseConfigValuesImported_js_1.parseConfigValuesImported)(pageConfigGlobalSerialized.configValuesImported);
34
- Object.assign(pageConfigGlobal.configValues, configValuesAddendum);
30
+ const configValues = parseConfigValuesSerialized(pageConfigGlobalSerialized.configValuesSerialized);
31
+ Object.assign(pageConfigGlobal.configValues, configValues);
35
32
  }
36
33
  return { pageConfigs, pageConfigGlobal };
37
34
  }
@@ -55,3 +52,100 @@ function assertRouteConfigValue(configValues) {
55
52
  }
56
53
  */
57
54
  }
55
+ function parseConfigValuesSerialized_tmp(configValuesSerialized) {
56
+ const configValues = {};
57
+ Object.entries(configValuesSerialized).forEach(([configName, configValueSeriliazed]) => {
58
+ let configValue;
59
+ if (configValueSeriliazed.type === 'cumulative') {
60
+ const { valueSerialized, ...common } = configValueSeriliazed;
61
+ const value = valueSerialized.map((valueSerializedElement, i) => {
62
+ const { value, sideExports } = parseValueSerialized(valueSerializedElement, configName, () => {
63
+ const definedAtFile = configValueSeriliazed.definedAtData[i];
64
+ (0, utils_js_1.assert)(definedAtFile);
65
+ return definedAtFile;
66
+ });
67
+ addSideExports(sideExports);
68
+ return value;
69
+ });
70
+ configValue = { value, ...common };
71
+ }
72
+ else {
73
+ const { valueSerialized, ...common } = configValueSeriliazed;
74
+ const { value, sideExports } = parseValueSerialized(valueSerialized, configName, () => {
75
+ (0, utils_js_1.assert)(configValueSeriliazed.type !== 'computed');
76
+ return configValueSeriliazed.definedAtData;
77
+ });
78
+ addSideExports(sideExports);
79
+ configValue = { value, ...common };
80
+ }
81
+ configValues[configName] = configValue;
82
+ });
83
+ return configValues;
84
+ function addSideExports(sideExports) {
85
+ sideExports.forEach((sideExport) => {
86
+ const { configName, configValue } = sideExport;
87
+ if (!configValues[configName]) {
88
+ configValues[configName] = configValue;
89
+ }
90
+ else {
91
+ // Side-exports have lower precedence.
92
+ // We can't avoid side-export conflicts upstream. (We cannot know about side-exports at build-time.)
93
+ }
94
+ });
95
+ }
96
+ }
97
+ function parseValueSerialized(valueSerialized, configName, getDefinedAtFile) {
98
+ if (valueSerialized.type === 'js-serialized') {
99
+ let { value } = valueSerialized;
100
+ value = (0, parse_1.parseTransform)(value);
101
+ return { value, sideExports: [] };
102
+ }
103
+ if (valueSerialized.type === 'pointer-import') {
104
+ const { value } = valueSerialized;
105
+ return { value, sideExports: [] };
106
+ }
107
+ if (valueSerialized.type === 'plus-file') {
108
+ const definedAtFile = getDefinedAtFile();
109
+ const { exportValues } = valueSerialized;
110
+ (0, assertPlusFileExport_js_1.assertPlusFileExport)(exportValues, definedAtFile.filePathToShowToUser, configName);
111
+ let value;
112
+ let valueWasFound = false;
113
+ const sideExports = [];
114
+ Object.entries(exportValues).forEach(([exportName, exportValue]) => {
115
+ const isSideExport = exportName !== 'default' && exportName !== configName;
116
+ if (!isSideExport) {
117
+ value = exportValue;
118
+ (0, utils_js_1.assert)(!valueWasFound);
119
+ valueWasFound = true;
120
+ }
121
+ else {
122
+ sideExports.push({
123
+ configName: exportName,
124
+ configValue: {
125
+ type: 'standard', // We don't support side exports for cumulative values. We could support it but it isn't trivial.
126
+ value: exportValue,
127
+ definedAtData: {
128
+ filePathToShowToUser: definedAtFile.filePathToShowToUser,
129
+ fileExportPathToShowToUser: [exportName]
130
+ }
131
+ }
132
+ });
133
+ }
134
+ });
135
+ (0, utils_js_1.assert)(valueWasFound);
136
+ return { value, sideExports };
137
+ }
138
+ (0, utils_js_1.assert)(false);
139
+ }
140
+ /* [NULL_HANDLING] Do we really need this?
141
+ function assertIsNotNull(configValue: unknown, configName: string, filePathToShowToUser: string) {
142
+ assert(!filePathToShowToUser.includes('+config.'))
143
+ // Re-use this for:
144
+ // - upcoming config.requestPageContextOnNavigation
145
+ // - for cumulative values in the future: we don't need this for now because, currently, cumulative values are never imported.
146
+ assertUsage(
147
+ configValue !== null,
148
+ `Set ${pc.cyan(configName)} to ${pc.cyan('null')} in a +config.js file instead of ${filePathToShowToUser}`
149
+ )
150
+ }
151
+ */
@@ -0,0 +1,198 @@
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.serializeConfigValues = void 0;
7
+ const assertIsNotProductionRuntime_js_1 = require("../../../utils/assertIsNotProductionRuntime.js");
8
+ const utils_js_1 = require("../../../node/plugin/utils.js");
9
+ const addImportStatement_js_1 = require("../../../node/plugin/plugins/importUserCode/addImportStatement.js");
10
+ const transformFileImports_js_1 = require("../../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transformFileImports.js");
11
+ const helpers_js_1 = require("../helpers.js");
12
+ const stringify_1 = require("@brillout/json-serializer/stringify");
13
+ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
14
+ const REPLACE_ME_BEFORE = '__VIKE__REPLACE_ME_BEFORE__';
15
+ const REPLACE_ME_AFTER = '__VIKE__REPLACE_ME_AFTER__';
16
+ // This file is never loaded on the client-side but we save it under the vike/shared/ directory in order to collocate it with parsePageConfigs()
17
+ // - vike/shared/page-configs/serialize/parsePageConfigs.ts
18
+ // - parsePageConfigs() is loaded on both the client- and server-side.
19
+ (0, assertIsNotProductionRuntime_js_1.assertIsNotProductionRuntime)();
20
+ function serializeConfigValues(pageConfig, importStatements, isEnvMatch, tabspace) {
21
+ const lines = [];
22
+ tabspace += ' ';
23
+ Object.entries(pageConfig.configValuesComputed ?? {}).forEach(([configName, configValuesComputed]) => {
24
+ if (!isEnvMatch(configValuesComputed.configEnv))
25
+ return;
26
+ // Is there a use case for overriding computed values? If yes, then configValeSources has higher precedence
27
+ if (pageConfig.configValueSources[configName])
28
+ return;
29
+ const valueData = serializeWithJson(configValuesComputed.value, configName, null, importStatements);
30
+ const configValueBase = {
31
+ type: 'computed',
32
+ definedAtData: null
33
+ };
34
+ serializeConfigValue(configValueBase, valueData, configName, lines, tabspace);
35
+ });
36
+ Object.entries(pageConfig.configValueSources).forEach(([configName, sources]) => {
37
+ const configDef = pageConfig.configDefinitions[configName];
38
+ (0, utils_js_1.assert)(configDef);
39
+ if (!configDef.cumulative) {
40
+ const configValueSource = sources[0];
41
+ (0, utils_js_1.assert)(configValueSource);
42
+ (0, utils_js_1.assert)(sources.slice(1).every((s) => s.isOverriden === true));
43
+ if (!isEnvMatch(configValueSource.configEnv))
44
+ return;
45
+ const { valueData, definedAtFile } = serializeConfigValueSource(configValueSource, configName, importStatements);
46
+ const configValueBase = {
47
+ type: 'standard',
48
+ definedAtData: definedAtFile
49
+ };
50
+ serializeConfigValue(configValueBase, valueData, configName, lines, tabspace);
51
+ }
52
+ else {
53
+ const valueDataList = [];
54
+ const definedAtData = [];
55
+ sources
56
+ .filter((s) => !s.isOverriden)
57
+ .forEach((configValueSource) => {
58
+ if (!isEnvMatch(configValueSource.configEnv))
59
+ return;
60
+ const { valueData, definedAtFile } = serializeConfigValueSource(configValueSource, configName, importStatements);
61
+ valueDataList.push(valueData);
62
+ definedAtData.push(definedAtFile);
63
+ });
64
+ if (valueDataList.length === 0)
65
+ return;
66
+ const configValueBase = {
67
+ type: 'cumulative',
68
+ definedAtData
69
+ };
70
+ serializeConfigValue(configValueBase, valueDataList, configName, lines, tabspace);
71
+ }
72
+ });
73
+ return lines;
74
+ }
75
+ exports.serializeConfigValues = serializeConfigValues;
76
+ function serializeConfigValueSource(configValueSource, configName, importStatements) {
77
+ (0, utils_js_1.assert)(configValueSource.isOverriden === false);
78
+ let valueData;
79
+ if ('value' in configValueSource) {
80
+ valueData = serializeWithJson(configValueSource.value, configName, configValueSource.definedAtFilePath, importStatements);
81
+ }
82
+ else {
83
+ valueData = serializeWithImport(configValueSource, importStatements);
84
+ }
85
+ const definedAtFile = {
86
+ filePathToShowToUser: configValueSource.definedAtFilePath.filePathToShowToUser,
87
+ fileExportPathToShowToUser: configValueSource.definedAtFilePath.fileExportPathToShowToUser
88
+ };
89
+ return { valueData, definedAtFile };
90
+ }
91
+ function serializeConfigValue(configValueBase, valueData, configName, lines, tabspace) {
92
+ lineAdd(`[${JSON.stringify(configName)}]: {`);
93
+ {
94
+ tab();
95
+ lineAdd(`type: "${configValueBase.type}",`);
96
+ lineAdd(`definedAtData: ${JSON.stringify(configValueBase.definedAtData)},`);
97
+ lineAdd(`valueSerialized:`);
98
+ if (!Array.isArray(valueData)) {
99
+ serializeValueData(valueData);
100
+ }
101
+ else {
102
+ lineAppend(' [');
103
+ valueData.forEach(serializeValueData);
104
+ lineAppend(` ],`);
105
+ }
106
+ untab();
107
+ }
108
+ lineAdd('},');
109
+ return;
110
+ function serializeValueData(valueData) {
111
+ lineAppend(` {`);
112
+ tab();
113
+ lineAdd(`type: "${valueData.type}",`);
114
+ const valueProp = valueData.type !== 'plus-file' ? 'value' : 'exportValues';
115
+ lineAdd(`${valueProp}: ${valueData.valueAsJsCode},`);
116
+ untab();
117
+ lineAdd(`},`);
118
+ }
119
+ function lineAppend(str) {
120
+ const i = lines.length - 1;
121
+ lines[i] = lines[i] += str;
122
+ }
123
+ function lineAdd(str) {
124
+ lines.push(`${tabspace}${str}`);
125
+ }
126
+ function tab() {
127
+ tabspace += ' ';
128
+ }
129
+ function untab() {
130
+ tabspace = tabspace.slice(2);
131
+ }
132
+ }
133
+ function serializeWithImport(configValueSource, importStatements) {
134
+ (0, utils_js_1.assert)(!configValueSource.valueIsFilePath);
135
+ const { valueIsImportedAtRuntime, valueIsDefinedByPlusFile, definedAtFilePath } = configValueSource;
136
+ (0, utils_js_1.assert)(valueIsImportedAtRuntime);
137
+ const { filePathAbsoluteVite, fileExportName } = definedAtFilePath;
138
+ if (valueIsDefinedByPlusFile)
139
+ (0, utils_js_1.assert)(fileExportName === undefined);
140
+ const { importName } = (0, addImportStatement_js_1.addImportStatement)(importStatements, filePathAbsoluteVite, fileExportName || '*');
141
+ return {
142
+ type: valueIsDefinedByPlusFile ? 'plus-file' : 'pointer-import',
143
+ valueAsJsCode: importName
144
+ };
145
+ }
146
+ function serializeWithJson(value, configName, definedAtData, importStatements) {
147
+ const valueAsJsCode = valueToJson(value, configName, definedAtData, importStatements);
148
+ return {
149
+ type: 'js-serialized',
150
+ valueAsJsCode
151
+ };
152
+ }
153
+ function valueToJson(value, configName, definedAtData, importStatements) {
154
+ const valueName = `config${(0, utils_js_1.getPropAccessNotation)(configName)}`;
155
+ let configValueSerialized;
156
+ try {
157
+ configValueSerialized = (0, stringify_1.stringify)(value, {
158
+ valueName,
159
+ forbidReactElements: true,
160
+ replacer(_, value) {
161
+ if (typeof value === 'string') {
162
+ const importData = (0, transformFileImports_js_1.parsePointerImportData)(value);
163
+ if (importData) {
164
+ const { importName } = (0, addImportStatement_js_1.addImportStatement)(importStatements, importData.importPath, importData.exportName);
165
+ const replacement = [REPLACE_ME_BEFORE, importName, REPLACE_ME_AFTER].join('');
166
+ return { replacement };
167
+ }
168
+ }
169
+ }
170
+ });
171
+ }
172
+ catch (err) {
173
+ logJsonSerializeError(err, configName, definedAtData);
174
+ (0, utils_js_1.assert)(false);
175
+ }
176
+ configValueSerialized = configValueSerialized.replaceAll(`"${REPLACE_ME_BEFORE}`, '');
177
+ configValueSerialized = configValueSerialized.replaceAll(`${REPLACE_ME_AFTER}"`, '');
178
+ (0, utils_js_1.assert)(!configValueSerialized.includes(REPLACE_ME_BEFORE));
179
+ (0, utils_js_1.assert)(!configValueSerialized.includes(REPLACE_ME_AFTER));
180
+ return configValueSerialized;
181
+ }
182
+ function logJsonSerializeError(err, configName, definedAtData) {
183
+ /*
184
+ // import { isJsonSerializerError } from '@brillout/json-serializer/stringify'
185
+ let serializationErrMsg = ''
186
+ if (isJsonSerializerError(err)) {
187
+ serializationErrMsg = err.messageCore
188
+ } else {
189
+ // When a property getter throws an error
190
+ console.error('Serialization error:')
191
+ console.error(err)
192
+ serializationErrMsg = 'see serialization error printed above'
193
+ }
194
+ //*/
195
+ const configValueFilePathToShowToUser = (0, helpers_js_1.getConfigValueFilePathToShowToUser)(definedAtData);
196
+ (0, utils_js_1.assert)(configValueFilePathToShowToUser);
197
+ (0, utils_js_1.assertUsage)(false, `${picocolors_1.default.cyan(configName)} defined by ${configValueFilePathToShowToUser} must be defined over a so-called "pointer import", see https://vike.dev/config#pointer-imports`);
198
+ }
@@ -31,7 +31,7 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
31
31
  let pageRoute = null;
32
32
  {
33
33
  const configName = 'route';
34
- const configValue = (0, getConfigValue_js_1.getConfigValue)(pageConfig, configName);
34
+ const configValue = (0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, configName);
35
35
  if (configValue) {
36
36
  const route = configValue.value;
37
37
  (0, utils_js_1.assert)(configValue.definedAtData);
@@ -47,7 +47,7 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
47
47
  }
48
48
  else {
49
49
  (0, utils_js_1.assert)((0, utils_js_2.isCallable)(route));
50
- if ((0, getConfigValue_js_1.getConfigValue)(pageConfig, 'iKnowThePerformanceRisksOfAsyncRouteFunctions', 'boolean'))
50
+ if ((0, getConfigValue_js_1.getConfigValueRuntime)(pageConfig, 'iKnowThePerformanceRisksOfAsyncRouteFunctions', 'boolean'))
51
51
  (0, resolveRouteFunction_js_1.warnDeprecatedAllowKey)();
52
52
  pageRoute = {
53
53
  pageId,
@@ -1,23 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasProp = void 0;
4
- // - https://2ality.com/2020/06/type-guards-assertion-functions-typescript.html
5
- // - https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABDAzgFQJ4AcCmdgAUAbgIYA2IOAXIiWBgDSJTbWIDkARnHGTnewCUNUhRzIUibr35gA3AFgAUKEiwEEzLnzFylGnUbNWNdmBABbTjgBOQkXvGpE5q7cUrw0eElRa8hKL6tPRMLLimKFA2MGAA5vaIQU6SUTHxHqreGn6sOskGocYRHOAA1mBwAO5gickSiOWVNZle6r7oeYGOhUbhbGmxcYgAvKVgFdW1wlI8fHSIAN7KiMiExeIjW+OTNeyIgksrq4g2OFAgNkjRlMcAvsdnF1cb+EmOo9v9Hg9KyhAIKK0GhNKajRAAFgATMplCQUChbFACLltIQSEwzJZrHZBIJ-oCZAA6MhwOIEEj4v6eNQ+WgIpEEAFgAAmMHaIImzTAM3hiJsUEkzLZ7SOShOa0QTIQIp8hyelzAx1WUAAFjZqi4cFVEABRGwamwEdgAQQZArpADESDAyEJlHcgA
6
4
  const isCallable_js_1 = require("./isCallable.js");
7
5
  const isObject_js_1 = require("./isObject.js");
8
6
  const isArrayOfStrings_js_1 = require("./isArrayOfStrings.js");
9
7
  const isObjectOfStrings_js_1 = require("./isObjectOfStrings.js");
10
8
  const isArray_js_1 = require("./isArray.js");
11
- function hasProp(obj, prop, type = 'unknown') {
9
+ function hasProp(obj, prop, type) {
12
10
  if (!(0, isObject_js_1.isObject)(obj))
13
11
  return false;
14
12
  if (!(prop in obj)) {
15
13
  return type === 'undefined';
16
14
  }
17
- if (type === 'unknown') {
15
+ if (type === undefined) {
18
16
  return true;
19
17
  }
20
18
  const propValue = obj[prop];
19
+ if (type === 'undefined') {
20
+ return propValue === undefined;
21
+ }
21
22
  if (type === 'array') {
22
23
  return (0, isArray_js_1.isArray)(propValue);
23
24
  }
@@ -39,9 +40,6 @@ function hasProp(obj, prop, type = 'unknown') {
39
40
  if (type === 'null') {
40
41
  return propValue === null;
41
42
  }
42
- if (type === 'undefined') {
43
- return propValue === undefined;
44
- }
45
43
  if (type === 'true') {
46
44
  return propValue === true;
47
45
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROJECT_VERSION = exports.projectInfo = void 0;
4
- const PROJECT_VERSION = '0.4.171-commit-f9548df';
4
+ const PROJECT_VERSION = '0.4.171-commit-6e37128';
5
5
  exports.PROJECT_VERSION = PROJECT_VERSION;
6
6
  const projectInfo = {
7
7
  projectName: 'Vike',
@@ -5,8 +5,8 @@ declare function createPageContext(urlOriginal: string): Promise<{
5
5
  _urlHandler: null;
6
6
  _urlRewrite: null;
7
7
  _baseServer: string;
8
- _pageFilesAll: import("../../shared/getPageFiles/getPageFileObject.js").PageFile[];
9
- _pageConfigs: import("../../shared/page-configs/PageConfig.js").PageConfigRuntime[];
8
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
9
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
10
10
  _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
11
11
  _allPageIds: string[];
12
12
  _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;