vike 0.4.229-commit-7056ef0 → 0.4.229-commit-e27d672

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 (149) hide show
  1. package/dist/cjs/client/server-routing-runtime/utils.js +1 -0
  2. package/dist/cjs/client/shared/{preparePageContextForUserConsumptionClientSide.js → preparePageContextForPublicUsageClientShared.js} +14 -19
  3. package/dist/cjs/node/api/build.js +1 -5
  4. package/dist/cjs/node/plugin/shared/loggerNotProd.js +2 -2
  5. package/dist/cjs/node/prerender/runPrerender.js +40 -36
  6. package/dist/cjs/node/prerender/utils.js +1 -1
  7. package/dist/cjs/node/runtime/globalContext.js +13 -27
  8. package/dist/cjs/node/runtime/html/serializeContext.js +1 -1
  9. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +4 -8
  10. package/dist/cjs/node/runtime/renderPage/execHookServer.js +11 -0
  11. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +9 -9
  12. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -12
  13. package/dist/cjs/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +10 -0
  14. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
  15. package/dist/cjs/node/runtime/renderPage.js +4 -4
  16. package/dist/cjs/node/runtime/utils.js +1 -1
  17. package/dist/cjs/shared/NOT_SERIALIZABLE.js +0 -1
  18. package/dist/cjs/shared/addIs404ToPageProps.js +0 -7
  19. package/dist/cjs/shared/createGlobalContextShared.js +6 -3
  20. package/dist/cjs/shared/createPageContextShared.js +12 -3
  21. package/dist/cjs/shared/getPageContext.js +3 -3
  22. package/dist/cjs/shared/getPageContextUrlComputed.js +2 -36
  23. package/dist/cjs/shared/getProxyForPublicUsage.js +55 -0
  24. package/dist/cjs/shared/hooks/execHook.js +164 -0
  25. package/dist/cjs/shared/page-configs/getUserFriendlyConfigs.js +17 -15
  26. package/dist/cjs/shared/prepareGlobalContextForPublicUsage.js +10 -0
  27. package/dist/cjs/shared/preparePageContextForPublicUsage.js +75 -0
  28. package/dist/cjs/shared/route/abort.js +2 -2
  29. package/dist/cjs/shared/route/executeGuardHook.js +4 -9
  30. package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +4 -3
  31. package/dist/cjs/shared/route/index.js +2 -4
  32. package/dist/cjs/shared/route/loadPageRoutes.js +6 -0
  33. package/dist/cjs/shared/route/resolveRouteFunction.js +14 -10
  34. package/dist/cjs/shared/utils.js +1 -0
  35. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  36. package/dist/cjs/utils/objectAssign.js +3 -3
  37. package/dist/cjs/utils/objectDefineProperty.js +1 -1
  38. package/dist/esm/client/client-routing-runtime/createPageContextClientSide.d.ts +10 -7
  39. package/dist/esm/client/client-routing-runtime/createPageContextClientSide.js +8 -10
  40. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +397 -20
  41. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +15 -15
  42. package/dist/esm/client/client-routing-runtime/globalContext.d.ts +1 -0
  43. package/dist/esm/client/client-routing-runtime/prefetch.d.ts +3 -8
  44. package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.d.ts +11 -0
  45. package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
  46. package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +135 -0
  47. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +66 -72
  48. package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
  49. package/dist/esm/client/client-routing-runtime/utils.js +1 -0
  50. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +8 -6
  51. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +8 -10
  52. package/dist/esm/client/server-routing-runtime/entry.js +4 -6
  53. package/dist/esm/client/server-routing-runtime/globalContext.d.ts +1 -0
  54. package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.d.ts +9 -0
  55. package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
  56. package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -0
  57. package/dist/esm/client/server-routing-runtime/utils.js +1 -0
  58. package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +1 -0
  59. package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +3 -3
  60. package/dist/esm/client/shared/executeOnRenderClientHook.js +4 -13
  61. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.d.ts +13 -0
  62. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.js +39 -0
  63. package/dist/esm/node/api/build.js +1 -2
  64. package/dist/esm/node/plugin/shared/loggerNotProd.js +1 -1
  65. package/dist/esm/node/prerender/runPrerender.d.ts +15 -115
  66. package/dist/esm/node/prerender/runPrerender.js +40 -36
  67. package/dist/esm/node/prerender/utils.d.ts +1 -1
  68. package/dist/esm/node/prerender/utils.js +1 -1
  69. package/dist/esm/node/runtime/globalContext.d.ts +5 -373
  70. package/dist/esm/node/runtime/globalContext.js +14 -28
  71. package/dist/esm/node/runtime/html/serializeContext.d.ts +1 -1
  72. package/dist/esm/node/runtime/html/serializeContext.js +1 -1
  73. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +15 -62
  74. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +5 -9
  75. package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +12 -0
  76. package/dist/esm/node/runtime/renderPage/execHookServer.js +9 -0
  77. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +1 -1
  78. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +9 -9
  79. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +4 -2
  80. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -12
  81. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.d.ts +20 -0
  82. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +8 -0
  83. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +15 -115
  84. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
  85. package/dist/esm/node/runtime/renderPage.d.ts +10 -60
  86. package/dist/esm/node/runtime/renderPage.js +4 -4
  87. package/dist/esm/node/runtime/utils.d.ts +1 -1
  88. package/dist/esm/node/runtime/utils.js +1 -1
  89. package/dist/esm/shared/NOT_SERIALIZABLE.js +0 -1
  90. package/dist/esm/shared/addIs404ToPageProps.d.ts +1 -6
  91. package/dist/esm/shared/addIs404ToPageProps.js +1 -8
  92. package/dist/esm/shared/createGlobalContextShared.d.ts +2 -0
  93. package/dist/esm/shared/createGlobalContextShared.js +7 -4
  94. package/dist/esm/shared/createPageContextShared.d.ts +6 -2
  95. package/dist/esm/shared/createPageContextShared.js +13 -4
  96. package/dist/esm/shared/getPageContext.d.ts +1 -1
  97. package/dist/esm/shared/getPageContext.js +1 -1
  98. package/dist/esm/shared/getPageContextUrlComputed.d.ts +2 -5
  99. package/dist/esm/shared/getPageContextUrlComputed.js +3 -37
  100. package/dist/esm/shared/getProxyForPublicUsage.d.ts +4 -0
  101. package/dist/esm/shared/getProxyForPublicUsage.js +53 -0
  102. package/dist/esm/shared/hooks/execHook.d.ts +63 -0
  103. package/dist/esm/shared/hooks/execHook.js +162 -0
  104. package/dist/esm/shared/hooks/getHook.d.ts +3 -1
  105. package/dist/esm/shared/page-configs/Config.d.ts +3 -3
  106. package/dist/esm/shared/page-configs/getUserFriendlyConfigs.js +18 -16
  107. package/dist/esm/shared/prepareGlobalContextForPublicUsage.d.ts +7 -0
  108. package/dist/esm/shared/prepareGlobalContextForPublicUsage.js +8 -0
  109. package/dist/esm/shared/preparePageContextForPublicUsage.d.ts +13 -0
  110. package/dist/esm/shared/preparePageContextForPublicUsage.js +73 -0
  111. package/dist/esm/shared/route/abort.js +1 -1
  112. package/dist/esm/shared/route/executeGuardHook.d.ts +4 -3
  113. package/dist/esm/shared/route/executeGuardHook.js +4 -9
  114. package/dist/esm/shared/route/executeOnBeforeRouteHook.js +4 -3
  115. package/dist/esm/shared/route/index.js +2 -4
  116. package/dist/esm/shared/route/loadPageRoutes.d.ts +2 -1
  117. package/dist/esm/shared/route/loadPageRoutes.js +7 -1
  118. package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
  119. package/dist/esm/shared/route/resolveRouteFunction.js +14 -10
  120. package/dist/esm/shared/types.d.ts +13 -3
  121. package/dist/esm/shared/utils.d.ts +1 -0
  122. package/dist/esm/shared/utils.js +1 -0
  123. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  124. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  125. package/dist/esm/utils/objectAssign.d.ts +1 -1
  126. package/dist/esm/utils/objectAssign.js +3 -3
  127. package/dist/esm/utils/objectDefineProperty.d.ts +0 -1
  128. package/dist/esm/utils/objectDefineProperty.js +1 -1
  129. package/package.json +2 -2
  130. package/dist/cjs/client/shared/getPageContextProxyForUser.js +0 -16
  131. package/dist/cjs/node/runtime/renderPage/executeHookServer.js +0 -11
  132. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -16
  133. package/dist/cjs/shared/hooks/executeHook.js +0 -108
  134. package/dist/cjs/shared/preparePageContextForUserConsumption.js +0 -34
  135. package/dist/cjs/utils/getPublicProxy.js +0 -27
  136. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +0 -2
  137. package/dist/esm/client/shared/getPageContextProxyForUser.js +0 -14
  138. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +0 -12
  139. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.js +0 -44
  140. package/dist/esm/node/runtime/renderPage/executeHookServer.d.ts +0 -13
  141. package/dist/esm/node/runtime/renderPage/executeHookServer.js +0 -9
  142. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +0 -24
  143. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -14
  144. package/dist/esm/shared/hooks/executeHook.d.ts +0 -34
  145. package/dist/esm/shared/hooks/executeHook.js +0 -106
  146. package/dist/esm/shared/preparePageContextForUserConsumption.d.ts +0 -5
  147. package/dist/esm/shared/preparePageContextForUserConsumption.js +0 -32
  148. package/dist/esm/utils/getPublicProxy.d.ts +0 -2
  149. package/dist/esm/utils/getPublicProxy.js +0 -25
@@ -5,7 +5,8 @@ exports.createGlobalContextShared = createGlobalContextShared;
5
5
  const utils_js_1 = require("./utils.js");
6
6
  const parseGlobResults_js_1 = require("./getPageFiles/parseGlobResults.js");
7
7
  const getUserFriendlyConfigs_js_1 = require("./page-configs/getUserFriendlyConfigs.js");
8
- const executeHook_js_1 = require("./hooks/executeHook.js");
8
+ const execHook_js_1 = require("./hooks/execHook.js");
9
+ const prepareGlobalContextForPublicUsage_js_1 = require("./prepareGlobalContextForPublicUsage.js");
9
10
  const getGlobalContextSyncErrMsg = "The global context isn't set yet, call getGlobalContextSync() later or use getGlobalContext() instead.";
10
11
  exports.getGlobalContextSyncErrMsg = getGlobalContextSyncErrMsg;
11
12
  async function createGlobalContextShared(virtualFileExports, globalObject, addGlobalContext) {
@@ -25,12 +26,12 @@ async function createGlobalContextShared(virtualFileExports, globalObject, addGl
25
26
  // - globalContext._viteDevServer.hot.send()
26
27
  // - Send 'full-server-reload' signal whenever a onCreateGlobalContext() function is modified => we need a globalObject to track all hooks and see if one of them is new/modified.
27
28
  // - Seems less idiomatic
28
- await (0, executeHook_js_1.executeHookGlobalCumulative)('onCreateGlobalContext', globalContext._pageConfigGlobal, null, globalContext);
29
+ await (0, execHook_js_1.execHookGlobal)('onCreateGlobalContext', globalContext._pageConfigGlobal, null, globalContext, prepareGlobalContextForPublicUsage_js_1.prepareGlobalContextForPublicUsage);
29
30
  }
30
31
  else {
31
32
  // Singleton: ensure all `globalContext` user-land references are preserved & updated.
32
33
  // We don't use objectReplace() in order to keep user-land properties.
33
- (0, utils_js_1.objectAssign)(globalObject.globalContext, globalContext);
34
+ (0, utils_js_1.objectAssign)(globalObject.globalContext, globalContext, true);
34
35
  }
35
36
  return globalObject.globalContext;
36
37
  }
@@ -43,6 +44,7 @@ function createGlobalContextBase(virtualFileExports) {
43
44
  * https://vike.dev/globalContext#typescript
44
45
  */
45
46
  isGlobalContext: true,
47
+ _isOriginalObject: true,
46
48
  _virtualFileExports: virtualFileExports,
47
49
  _pageFilesAll: pageFilesAll,
48
50
  _pageConfigs: pageConfigs,
@@ -52,6 +54,7 @@ function createGlobalContextBase(virtualFileExports) {
52
54
  config: userFriendlyConfigsGlobal.config,
53
55
  pages: userFriendlyConfigsPageEager
54
56
  };
57
+ (0, utils_js_1.changeEnumerable)(globalContext, '_isOriginalObject', false);
55
58
  return globalContext;
56
59
  }
57
60
  function getConfigsAll(virtualFileExports) {
@@ -1,11 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createPageContextShared = createPageContextShared;
4
- const executeHook_js_1 = require("./hooks/executeHook.js");
4
+ exports.createPageContextObject = createPageContextObject;
5
+ const execHook_js_1 = require("./hooks/execHook.js");
6
+ const preparePageContextForPublicUsage_js_1 = require("./preparePageContextForPublicUsage.js");
5
7
  const utils_js_1 = require("./utils.js");
6
8
  async function createPageContextShared(pageContextCreated, pageConfigGlobal, userFriendlyConfigsGlobal) {
7
- (0, utils_js_1.objectAssign)(pageContextCreated, { isPageContext: true }, true);
8
9
  (0, utils_js_1.objectAssign)(pageContextCreated, userFriendlyConfigsGlobal);
9
- await (0, executeHook_js_1.executeHookGlobalCumulative)('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated);
10
+ await (0, execHook_js_1.execHookGlobal)('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated, preparePageContextForPublicUsage_js_1.preparePageContextForPublicUsage);
10
11
  return pageContextCreated;
11
12
  }
13
+ function createPageContextObject() {
14
+ const pageContext = {
15
+ _isOriginalObject: true,
16
+ isPageContext: true
17
+ };
18
+ (0, utils_js_1.changeEnumerable)(pageContext, '_isOriginalObject', false);
19
+ return pageContext;
20
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.providePageContext = exports.getPageContext = void 0;
4
- var executeHook_js_1 = require("./hooks/executeHook.js");
5
- Object.defineProperty(exports, "getPageContext", { enumerable: true, get: function () { return executeHook_js_1.getPageContext; } });
6
- Object.defineProperty(exports, "providePageContext", { enumerable: true, get: function () { return executeHook_js_1.providePageContext; } });
4
+ var execHook_js_1 = require("./hooks/execHook.js");
5
+ Object.defineProperty(exports, "getPageContext", { enumerable: true, get: function () { return execHook_js_1.getPageContext; } });
6
+ Object.defineProperty(exports, "providePageContext", { enumerable: true, get: function () { return execHook_js_1.providePageContext; } });
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPageContextUrlComputed = getPageContextUrlComputed;
4
- exports.assertPageContextUrl = assertPageContextUrl;
5
4
  // =====================
6
5
  // File determining the URL logic.
7
6
  // URLs need to be computed, because the user can modify the URL e.g. with onBeforeRoute() for i18n.
8
7
  // =====================
9
8
  const objectDefineProperty_js_1 = require("../utils/objectDefineProperty.js");
9
+ const preparePageContextForPublicUsage_js_1 = require("./preparePageContextForPublicUsage.js");
10
10
  const utils_js_1 = require("./utils.js");
11
11
  function getPageContextUrlComputed(pageContext) {
12
12
  (0, utils_js_1.assert)(typeof pageContext.urlOriginal === 'string');
13
- assertPageContextUrlComputed(pageContext);
13
+ (0, preparePageContextForPublicUsage_js_1.assertPropertyGetters)(pageContext);
14
14
  const pageContextUrlComputed = {};
15
15
  (0, objectDefineProperty_js_1.objectDefineProperty)(pageContextUrlComputed, 'urlPathname', {
16
16
  get: urlPathnameGetter,
@@ -130,37 +130,3 @@ function urlParsedGetter() {
130
130
  }
131
131
  return urlParsedEnhanced;
132
132
  }
133
- function assertPageContextUrl(pageContext) {
134
- (0, utils_js_1.assert)(typeof pageContext.urlOriginal === 'string');
135
- (0, utils_js_1.assert)(typeof pageContext.urlPathname === 'string');
136
- (0, utils_js_1.assert)((0, utils_js_1.isPlainObject)(pageContext.urlParsed));
137
- (0, utils_js_1.assert)(pageContext.urlPathname === pageContext.urlParsed.pathname);
138
- assertPageContextUrlComputed(pageContext);
139
- }
140
- function assertPageContextUrlComputed(pageContext) {
141
- /*
142
- If the isPropertyGetter() assertions fail then it's most likely because Object.assign() was used instead of `objectAssign()`:
143
- ```js
144
- const PageContextUrlComputed = getPageContextUrlComputed(pageContext)
145
-
146
- // ❌ Breaks the property descriptors/getters of pageContext defined by getPageContextUrlComputed() such as pageContext.urlPathname
147
- Object.assign(pageContext, pageContextUrlComputed)
148
-
149
- // ❌ Also breaks property descriptors/getters
150
- const pageContext = { ...pageContextUrlComputed }
151
-
152
- // ✅ Preserves property descriptors/getters (see objectAssign() implementation)
153
- objectAssign(pageContext, pageContextUrlComputed)
154
- ```
155
- */
156
- if ('urlPathname' in pageContext) {
157
- (0, utils_js_1.assert)(typeof pageContext.urlPathname === 'string');
158
- (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlPathname'));
159
- (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'urlParsed'));
160
- (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, 'url'));
161
- }
162
- else {
163
- (0, utils_js_1.assert)(!('urlParsed' in pageContext));
164
- (0, utils_js_1.assert)(!('url' in pageContext));
165
- }
166
- }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProxyForPublicUsage = getProxyForPublicUsage;
4
+ // We use a proxy instead of property getters.
5
+ // - The issue with property getters is that they can't be `writable: true` but we do want the user to be able to modify the value of internal properties.
6
+ // ```console
7
+ // TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute, #<Object>
8
+ // ```
9
+ // - Previous implementation using property getters: https://github.com/vikejs/vike/blob/main/vike/utils/makePublicCopy.ts
10
+ // Show warning when user is accessing internal `_` properties.
11
+ const NOT_SERIALIZABLE_js_1 = require("./NOT_SERIALIZABLE.js");
12
+ const utils_js_1 = require("./utils.js");
13
+ function getProxyForPublicUsage(obj, objName, skipOnInternalProp, fallback) {
14
+ return new Proxy(obj, {
15
+ get: getTrapGet(obj, objName, skipOnInternalProp, fallback)
16
+ });
17
+ }
18
+ function getTrapGet(obj, objName, skipOnInternalProp, fallback) {
19
+ return function (_, prop) {
20
+ const propStr = String(prop);
21
+ if (!skipOnInternalProp)
22
+ onInternalProp(propStr, objName);
23
+ if (fallback) {
24
+ // Rudimentary flat pageContext implementation https://github.com/vikejs/vike/issues/1268
25
+ // Failed full-fledged implementation: https://github.com/vikejs/vike/pull/2458
26
+ if (!(prop in obj) && prop in fallback)
27
+ return fallback[prop];
28
+ }
29
+ const val = obj[prop];
30
+ onNotSerializable(propStr, val, objName);
31
+ return val;
32
+ };
33
+ }
34
+ function onNotSerializable(propStr, val, objName) {
35
+ if (val !== NOT_SERIALIZABLE_js_1.NOT_SERIALIZABLE)
36
+ return;
37
+ const propName = (0, utils_js_1.getPropAccessNotation)(propStr);
38
+ (0, utils_js_1.assert)((0, utils_js_1.isBrowser)());
39
+ (0, utils_js_1.assertUsage)(false, `Can't access ${objName}${propName} on the client side. Because it can't be serialized, see server logs.`);
40
+ }
41
+ function onInternalProp(propStr, objName) {
42
+ // - We must skip it in the client-side because of the reactivity mechanism of UI frameworks like Solid.
43
+ // - TO-DO/eventually: use import.meta.CLIENT instead of isBrowser()
44
+ // - Where import.meta.CLIENT is defined by Vike
45
+ // - Using import.meta.env.CLIENT (note `.env.`) doesn't seem possible: https://github.com/brillout/playground_node_import.meta.env
46
+ // - If Rolldown Vite + Rolldowns always transpiles node_modules/ then we can simply use import.meta.env.SSR
47
+ if ((0, utils_js_1.isBrowser)())
48
+ return;
49
+ // TODO/now remove this and only warn on built-in access instead
50
+ if (propStr === '_configFromHook')
51
+ return;
52
+ if (propStr.startsWith('_')) {
53
+ (0, utils_js_1.assertWarning)(false, `Using internal ${objName}.${propStr} which may break in any minor version update. Reach out on GitHub to request official support for your use case.`, { onlyOnce: true, showStackTrace: true });
54
+ }
55
+ }
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.execHook = execHook;
4
+ exports.execHookSingle = execHookSingle;
5
+ exports.execHookSingleWithReturn = execHookSingleWithReturn;
6
+ exports.execHookErrorHandling = execHookErrorHandling;
7
+ exports.execHooksErrorHandling = execHooksErrorHandling;
8
+ exports.execHookWithoutPageContext = execHookWithoutPageContext;
9
+ exports.execHookGlobal = execHookGlobal;
10
+ exports.execHookSync = execHookSync;
11
+ exports.getPageContext = getPageContext;
12
+ exports.providePageContext = providePageContext;
13
+ exports.isUserHookError = isUserHookError;
14
+ const assert_js_1 = require("../../utils/assert.js");
15
+ const getGlobalObject_js_1 = require("../../utils/getGlobalObject.js");
16
+ const humanizeTime_js_1 = require("../../utils/humanizeTime.js");
17
+ const isObject_js_1 = require("../../utils/isObject.js");
18
+ const getHook_js_1 = require("./getHook.js");
19
+ const preparePageContextForPublicUsage_js_1 = require("../preparePageContextForPublicUsage.js");
20
+ const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('utils/execHook.ts', {
21
+ userHookErrors: new WeakMap(),
22
+ pageContext: null
23
+ });
24
+ async function execHookSingle(hook, pageContext, preparePageContextForPublicUsage) {
25
+ const res = await execHooksErrorHandling([hook], pageContext, preparePageContextForPublicUsage);
26
+ if ('err' in res)
27
+ throw res.err;
28
+ const { hookReturn } = res.hooks[0];
29
+ (0, assert_js_1.assertUsage)(hookReturn === undefined, `The ${hook.hookName}() hook defined by ${hook.hookFilePath} isn't allowed to return a value`);
30
+ }
31
+ async function execHookSingleWithReturn(hook, pageContext, preparePageContextForPublicUsage) {
32
+ const res = await execHooksErrorHandling([hook], pageContext, preparePageContextForPublicUsage);
33
+ if ('err' in res)
34
+ throw res.err;
35
+ const { hookReturn } = res.hooks[0];
36
+ return { hookReturn };
37
+ }
38
+ async function execHook(hookName, pageContext, preparePageContextForPublicUsage) {
39
+ const res = await execHookErrorHandling(hookName, pageContext, preparePageContextForPublicUsage);
40
+ if ('err' in res)
41
+ throw res.err;
42
+ return res.hooks;
43
+ }
44
+ async function execHookErrorHandling(hookName, pageContext, preparePageContextForPublicUsage) {
45
+ const hooks = (0, getHook_js_1.getHookFromPageContextNew)(hookName, pageContext);
46
+ return execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsage);
47
+ }
48
+ async function execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsage) {
49
+ if (!hooks.length)
50
+ return { hooks: [] };
51
+ const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
52
+ let hooksWithResult;
53
+ let err;
54
+ try {
55
+ hooksWithResult = await Promise.all(hooks.map(async (hook) => {
56
+ const hookReturn = await execHookAsync(() => hook.hookFn(pageContextForPublicUsage), hook, pageContextForPublicUsage);
57
+ return { ...hook, hookReturn };
58
+ }));
59
+ }
60
+ catch (err_) {
61
+ err = err_;
62
+ }
63
+ if (hooksWithResult) {
64
+ return { hooks: hooksWithResult };
65
+ }
66
+ else {
67
+ return { hooks, err };
68
+ }
69
+ }
70
+ async function execHookGlobal(hookName, pageConfigGlobal, pageContext, hookArg, prepareForPublicUsage) {
71
+ const hooks = (0, getHook_js_1.getHookFromPageConfigGlobalCumulative)(pageConfigGlobal, hookName);
72
+ const hookArgForPublicUsage = prepareForPublicUsage(hookArg);
73
+ await Promise.all(hooks.map(async (hook) => {
74
+ await execHookAsync(() => hook.hookFn(hookArgForPublicUsage), hook, pageContext);
75
+ }));
76
+ }
77
+ function isUserHookError(err) {
78
+ if (!(0, isObject_js_1.isObject)(err))
79
+ return false;
80
+ return globalObject.userHookErrors.get(err) ?? false;
81
+ }
82
+ async function execHookWithoutPageContext(hookFnCaller, hook) {
83
+ const { hookName, hookFilePath, hookTimeout } = hook;
84
+ const hookReturn = await execHookAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, null);
85
+ return hookReturn;
86
+ }
87
+ function execHookAsync(hookFnCaller, hook, pageContextForPublicUsage) {
88
+ const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn } } = hook;
89
+ let resolve;
90
+ let reject;
91
+ const promise = new Promise((resolve_, reject_) => {
92
+ resolve = (ret) => {
93
+ clearTimeouts();
94
+ resolve_(ret);
95
+ };
96
+ reject = (err) => {
97
+ clearTimeouts();
98
+ reject_(err);
99
+ };
100
+ });
101
+ const clearTimeouts = () => {
102
+ if (currentTimeoutWarn)
103
+ clearTimeout(currentTimeoutWarn);
104
+ if (currentTimeoutErr)
105
+ clearTimeout(currentTimeoutErr);
106
+ };
107
+ const currentTimeoutWarn = isNotDisabled(timeoutWarn) &&
108
+ setTimeout(() => {
109
+ (0, assert_js_1.assertWarning)(false, `The ${hookName}() hook defined by ${hookFilePath} is slow: it's taking more than ${(0, humanizeTime_js_1.humanizeTime)(timeoutWarn)} (https://vike.dev/hooksTimeout)`, { onlyOnce: false });
110
+ }, timeoutWarn);
111
+ const currentTimeoutErr = isNotDisabled(timeoutErr) &&
112
+ setTimeout(() => {
113
+ const err = (0, assert_js_1.getProjectError)(`The ${hookName}() hook defined by ${hookFilePath} timed out: it didn't finish after ${(0, humanizeTime_js_1.humanizeTime)(timeoutErr)} (https://vike.dev/hooksTimeout)`);
114
+ reject(err);
115
+ }, timeoutErr);
116
+ (async () => {
117
+ try {
118
+ providePageContext(pageContextForPublicUsage);
119
+ const ret = await hookFnCaller();
120
+ resolve(ret);
121
+ }
122
+ catch (err) {
123
+ if ((0, isObject_js_1.isObject)(err)) {
124
+ globalObject.userHookErrors.set(err, { hookName, hookFilePath });
125
+ }
126
+ reject(err);
127
+ }
128
+ })();
129
+ return promise;
130
+ }
131
+ function execHookSync(hook, pageContext, preparePageContextForPublicUsage) {
132
+ const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
133
+ providePageContext(pageContextForPublicUsage);
134
+ const hookReturn = hook.hookFn(pageContextForPublicUsage);
135
+ return { hookReturn };
136
+ }
137
+ function isNotDisabled(timeout) {
138
+ return !!timeout && timeout !== Infinity;
139
+ }
140
+ /**
141
+ * Access `pageContext` object inside Vike hooks, in order to create universal hooks.
142
+ *
143
+ * https://vike.dev/getPageContext
144
+ */
145
+ function getPageContext() {
146
+ const { pageContext } = globalObject;
147
+ if (!pageContext)
148
+ return pageContext;
149
+ const pageContextForPublicUsage = (0, preparePageContextForPublicUsage_js_1.preparePageContextForPublicUsage)(pageContext);
150
+ return pageContextForPublicUsage;
151
+ }
152
+ /**
153
+ * Provide `pageContext` for universal hooks.
154
+ *
155
+ * https://vike.dev/getPageContext
156
+ */
157
+ function providePageContext(pageContext) {
158
+ globalObject.pageContext = pageContext;
159
+ // Promise.resolve() is quicker than process.nextTick() and setImmediate()
160
+ // https://stackoverflow.com/questions/67949576/process-nexttick-before-promise-resolve-then
161
+ Promise.resolve().then(() => {
162
+ globalObject.pageContext = null;
163
+ });
164
+ }
@@ -97,7 +97,7 @@ pageConfigGlobal) {
97
97
  configsComputed: {}
98
98
  };
99
99
  }
100
- const pageExports = createObjectWithDeprecationWarning();
100
+ const pageExports = {};
101
101
  const exports = {};
102
102
  Object.entries(exportsAll).forEach(([exportName, values]) => {
103
103
  values.forEach(({ exportValue, _fileType, _isFromDefaultExport }) => {
@@ -120,9 +120,23 @@ pageConfigGlobal) {
120
120
  // TODO/eventually: deprecate/remove every prop below
121
121
  configEntries,
122
122
  exports,
123
- exportsAll,
124
- pageExports
123
+ exportsAll
125
124
  };
125
+ // TODO/v1-release: remove
126
+ (0, utils_js_1.objectDefineProperty)(pageContextExports, 'pageExports', {
127
+ get: () => {
128
+ // We only show the warning in Node.js because when using Client Routing Vue integration uses `Object.assign(pageContextReactive, pageContext)` which will wrongully trigger the warning. There is no cross-browser way to catch whether the property accessor was initiated by an `Object.assign()` call.
129
+ if (!(0, utils_js_1.isBrowser)()) {
130
+ (0, utils_js_1.assertWarning)(false, 'pageContext.pageExports is outdated, use pageContext.exports instead', {
131
+ onlyOnce: true,
132
+ showStackTrace: true
133
+ });
134
+ }
135
+ return pageExports;
136
+ },
137
+ enumerable: false,
138
+ configurable: true
139
+ });
126
140
  return pageContextExports;
127
141
  }
128
142
  // V1 design
@@ -249,15 +263,3 @@ function getExportValues(pageFile) {
249
263
  });
250
264
  return exportValues;
251
265
  }
252
- // TODO/v1-release: remove
253
- function createObjectWithDeprecationWarning() {
254
- return new Proxy({}, {
255
- get(...args) {
256
- // We only show the warning in Node.js because when using Client Routing Vue integration uses `Object.assign(pageContextReactive, pageContext)` which will wrongully trigger the warning. There is no cross-browser way to catch whether the property accessor was initiated by an `Object.assign()` call.
257
- if (!(0, utils_js_1.isBrowser)()) {
258
- (0, utils_js_1.assertWarning)(false, '`pageContext.pageExports` is outdated. Use `pageContext.exports` instead, see https://vike.dev/exports', { onlyOnce: true, showStackTrace: true });
259
- }
260
- return Reflect.get(...args);
261
- }
262
- });
263
- }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prepareGlobalContextForPublicUsage = prepareGlobalContextForPublicUsage;
4
+ const getProxyForPublicUsage_js_1 = require("./getProxyForPublicUsage.js");
5
+ const utils_js_1 = require("./utils.js");
6
+ function prepareGlobalContextForPublicUsage(globalContext) {
7
+ (0, utils_js_1.assert)(globalContext._isOriginalObject); // ensure we preserve the original object reference
8
+ const globalContextPublic = (0, getProxyForPublicUsage_js_1.getProxyForPublicUsage)(globalContext, 'globalContext');
9
+ return globalContextPublic;
10
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.preparePageContextForPublicUsage = preparePageContextForPublicUsage;
4
+ exports.assertPropertyGetters = assertPropertyGetters;
5
+ const utils_js_1 = require("./utils.js");
6
+ const addIs404ToPageProps_js_1 = require("./addIs404ToPageProps.js");
7
+ const prepareGlobalContextForPublicUsage_js_1 = require("./prepareGlobalContextForPublicUsage.js");
8
+ const getProxyForPublicUsage_js_1 = require("./getProxyForPublicUsage.js");
9
+ function preparePageContextForPublicUsage(pageContext) {
10
+ (0, utils_js_1.assert)(!pageContext.globalContext); // pageContext.globalContext should only be available to users — Vike itself should use pageContext._globalContext instead
11
+ (0, utils_js_1.assert)(pageContext._isOriginalObject); // ensure we preserve the original object reference
12
+ const globalContextPublic = (0, prepareGlobalContextForPublicUsage_js_1.prepareGlobalContextForPublicUsage)(pageContext._globalContext);
13
+ (0, utils_js_1.objectAssign)(pageContext, {
14
+ globalContext: globalContextPublic
15
+ });
16
+ (0, addIs404ToPageProps_js_1.addIs404ToPageProps)(pageContext);
17
+ // TODO/next-major-release: remove
18
+ if (!('_pageId' in pageContext)) {
19
+ Object.defineProperty(pageContext, '_pageId', {
20
+ get() {
21
+ (0, utils_js_1.assertWarning)(false, 'pageContext._pageId has been renamed to pageContext.pageId', {
22
+ showStackTrace: true,
23
+ onlyOnce: true
24
+ });
25
+ return pageContext.pageId;
26
+ },
27
+ enumerable: false
28
+ });
29
+ }
30
+ // For a more readable `console.log(pageContext)` output
31
+ sortPageContext(pageContext);
32
+ const pageContextPublic = (0, getProxyForPublicUsage_js_1.getProxyForPublicUsage)(pageContext, 'pageContext',
33
+ // We must skip it in the client-side because of the reactivity mechanism of UI frameworks like Solid.
34
+ // - TODO/now: double check whether that's true
35
+ true, pageContext.globalContext);
36
+ return pageContextPublic;
37
+ }
38
+ // Sort `pageContext` keys alphabetically, in order to make reading the `console.log(pageContext)` output easier
39
+ function sortPageContext(pageContext) {
40
+ let descriptors = Object.getOwnPropertyDescriptors(pageContext);
41
+ for (const key of Object.keys(pageContext))
42
+ delete pageContext[key];
43
+ descriptors = Object.fromEntries(Object.entries(descriptors).sort(([key1], [key2]) => (0, utils_js_1.compareString)(key1, key2)));
44
+ Object.defineProperties(pageContext, descriptors);
45
+ }
46
+ function assertPropertyGetters(pageContext) {
47
+ /*
48
+ If the isPropertyGetter() assertions fail then it's most likely because Object.assign() was used instead of `objectAssign()`:
49
+ ```js
50
+ const PageContextUrlComputed = getPageContextUrlComputed(pageContext)
51
+
52
+ // ❌ Breaks the property descriptors/getters of pageContext defined by getPageContextUrlComputed() such as pageContext.urlPathname
53
+ Object.assign(pageContext, pageContextUrlComputed)
54
+
55
+ // ❌ Also breaks property descriptors/getters
56
+ const pageContext = { ...pageContextUrlComputed }
57
+
58
+ // ✅ Preserves property descriptors/getters (see objectAssign() implementation)
59
+ objectAssign(pageContext, pageContextUrlComputed)
60
+ ```
61
+ */
62
+ ;
63
+ [
64
+ 'urlPathname',
65
+ // TODO/v1-release: remove
66
+ 'urlParsed',
67
+ // TODO/v1-release: remove
68
+ 'url',
69
+ // TODO/v1-release: remove
70
+ 'pageExports'
71
+ ].forEach((prop) => {
72
+ if (pageContext.prop)
73
+ (0, utils_js_1.assert)((0, utils_js_1.isPropertyGetter)(pageContext, prop));
74
+ });
75
+ }
@@ -12,7 +12,7 @@ exports.logAbortErrorHandled = logAbortErrorHandled;
12
12
  exports.getPageContextFromAllRewrites = getPageContextFromAllRewrites;
13
13
  exports.AbortRender = AbortRender;
14
14
  exports.assertNoInfiniteAbortLoop = assertNoInfiniteAbortLoop;
15
- const executeHook_js_1 = require("../hooks/executeHook.js");
15
+ const execHook_js_1 = require("../hooks/execHook.js");
16
16
  const utils_js_1 = require("./utils.js");
17
17
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
18
18
  /**
@@ -124,7 +124,7 @@ function logAbortErrorHandled(err, isProduction, pageContext) {
124
124
  (0, utils_js_1.assert)(urlCurrent);
125
125
  const abortCall = err._pageContextAbort._abortCall;
126
126
  (0, utils_js_1.assert)(abortCall);
127
- const hookLoc = (0, executeHook_js_1.isUserHookError)(err);
127
+ const hookLoc = (0, execHook_js_1.isUserHookError)(err);
128
128
  let thrownBy = '';
129
129
  if (hookLoc) {
130
130
  thrownBy = ` by ${picocolors_1.default.cyan(`${hookLoc.hookName}()`)} hook defined at ${hookLoc.hookFilePath}`;
@@ -3,11 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.executeGuardHook = executeGuardHook;
4
4
  const getHook_js_1 = require("../hooks/getHook.js");
5
5
  const utils_js_1 = require("./utils.js");
6
- const executeHook_js_1 = require("../hooks/executeHook.js");
6
+ const execHook_js_1 = require("../hooks/execHook.js");
7
7
  const errIntro = 'The guard() hook defined by';
8
- async function executeGuardHook(pageContext, prepareForUserConsumption) {
8
+ async function executeGuardHook(pageContext, prepareForPublicUsage) {
9
9
  let hook;
10
10
  if (pageContext._pageFilesAll.length > 0) {
11
+ // TODO/v1-release: remove
11
12
  // V0.4 design
12
13
  (0, utils_js_1.assert)(pageContext._pageConfigs.length === 0);
13
14
  hook = findPageGuard(pageContext.pageId, pageContext._pageFilesAll);
@@ -18,13 +19,7 @@ async function executeGuardHook(pageContext, prepareForUserConsumption) {
18
19
  }
19
20
  if (!hook)
20
21
  return;
21
- const guard = hook.hookFn;
22
- let pageContextForUserConsumption = pageContext;
23
- const res = prepareForUserConsumption(pageContext);
24
- if (res)
25
- pageContextForUserConsumption = res;
26
- const hookResult = await (0, executeHook_js_1.executeHook)(() => guard(pageContextForUserConsumption), hook, pageContext);
27
- (0, utils_js_1.assertUsage)(hookResult === undefined, `${errIntro} ${hook.hookFilePath} returns a value, but guard() shouldn't return any value`);
22
+ await (0, execHook_js_1.execHookSingle)(hook, pageContext, prepareForPublicUsage);
28
23
  }
29
24
  function findPageGuard(pageId, pageFilesAll) {
30
25
  const pageRouteFile = pageFilesAll.find((p) => p.pageId === pageId && p.fileType === '.page.route');
@@ -8,7 +8,8 @@ const assertPageContextProvidedByUser_js_1 = require("../assertPageContextProvid
8
8
  const utils_js_1 = require("./utils.js");
9
9
  const resolveRouteFunction_js_1 = require("./resolveRouteFunction.js");
10
10
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
11
- const executeHook_js_1 = require("../hooks/executeHook.js");
11
+ const execHook_js_1 = require("../hooks/execHook.js");
12
+ const preparePageContextForPublicUsage_js_1 = require("../preparePageContextForPublicUsage.js");
12
13
  async function executeOnBeforeRouteHook(pageContext) {
13
14
  const pageContextFromOnBeforeRouteHook = {};
14
15
  if (!pageContext._onBeforeRouteHook)
@@ -38,10 +39,10 @@ async function executeOnBeforeRouteHook(pageContext) {
38
39
  return pageContextFromOnBeforeRouteHook;
39
40
  }
40
41
  async function getPageContextFromHook(onBeforeRouteHook, pageContext) {
41
- let hookReturn = onBeforeRouteHook.hookFn(pageContext);
42
+ let { hookReturn } = (0, execHook_js_1.execHookSync)(onBeforeRouteHook, pageContext, preparePageContextForPublicUsage_js_1.preparePageContextForPublicUsage);
42
43
  (0, resolveRouteFunction_js_1.assertSyncRouting)(hookReturn, `The onBeforeRoute() hook ${onBeforeRouteHook.hookFilePath}`);
43
44
  // TODO/v1-release: make executeOnBeforeRouteHook() and route() sync
44
- hookReturn = await (0, executeHook_js_1.executeHook)(() => hookReturn, onBeforeRouteHook, pageContext);
45
+ hookReturn = await hookReturn;
45
46
  const errPrefix = `The onBeforeRoute() hook defined by ${onBeforeRouteHook.hookFilePath}`;
46
47
  (0, utils_js_1.assertUsage)(hookReturn === null ||
47
48
  hookReturn === undefined ||
@@ -11,7 +11,6 @@ if ((0, isBrowser_js_1.isBrowser)()) {
11
11
  (0, assertRoutingType_js_1.assertClientRouting)();
12
12
  }
13
13
  const utils_js_1 = require("./utils.js");
14
- const getPageContextUrlComputed_js_1 = require("../getPageContextUrlComputed.js");
15
14
  const resolvePrecedence_js_1 = require("./resolvePrecedence.js");
16
15
  const resolveRouteString_js_1 = require("./resolveRouteString.js");
17
16
  const resolveRouteFunction_js_1 = require("./resolveRouteFunction.js");
@@ -20,7 +19,6 @@ const debug_js_1 = require("./debug.js");
20
19
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
21
20
  async function route(pageContext, skipOnBeforeRouteHook) {
22
21
  (0, debug_js_1.debug)('Pages routes:', pageContext._pageRoutes);
23
- (0, getPageContextUrlComputed_js_1.assertPageContextUrl)(pageContext);
24
22
  const pageContextFromRoute = {};
25
23
  // onBeforeRoute()
26
24
  if (!skipOnBeforeRouteHook) {
@@ -74,8 +72,8 @@ async function route(pageContext, skipOnBeforeRouteHook) {
74
72
  }
75
73
  // Route Function defined in `.page.route.js`
76
74
  if (pageRoute.routeType === 'FUNCTION') {
77
- const { routeFunction, routeDefinedAtString } = pageRoute;
78
- const match = await (0, resolveRouteFunction_js_1.resolveRouteFunction)(routeFunction, pageContext, routeDefinedAtString);
75
+ const { routeFunction, routeFunctionFilePath } = pageRoute;
76
+ const match = await (0, resolveRouteFunction_js_1.resolveRouteFunction)(routeFunction, pageContext, routeFunctionFilePath);
79
77
  if (match) {
80
78
  const { routeParams, precedence } = match;
81
79
  routeMatches.push({ pageId, precedence, routeParams, routeType });
@@ -46,6 +46,10 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
46
46
  };
47
47
  }
48
48
  else {
49
+ const { definedAtData } = configValue;
50
+ (0, utils_js_1.assert)(!(0, utils_js_2.isArray)(definedAtData) && !definedAtData.definedBy);
51
+ const { filePathToShowToUser } = definedAtData;
52
+ (0, utils_js_1.assert)(filePathToShowToUser);
49
53
  (0, utils_js_1.assert)((0, utils_js_2.isCallable)(route));
50
54
  // TODO/next-major: remove
51
55
  if ((0, getConfigValueRuntime_js_1.getConfigValueRuntime)(pageConfig, 'iKnowThePerformanceRisksOfAsyncRouteFunctions', 'boolean'))
@@ -54,6 +58,7 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
54
58
  pageId,
55
59
  comesFromV1PageConfig,
56
60
  routeFunction: route,
61
+ routeFunctionFilePath: filePathToShowToUser,
57
62
  routeDefinedAtString: definedAtString,
58
63
  routeType: 'FUNCTION'
59
64
  };
@@ -127,6 +132,7 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
127
132
  pageId,
128
133
  comesFromV1PageConfig,
129
134
  routeFunction,
135
+ routeFunctionFilePath: filePath,
130
136
  routeDefinedAtString: filePath,
131
137
  routeType: 'FUNCTION'
132
138
  });