vike 0.4.229-commit-7056ef0 → 0.4.229-commit-5da80bf

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} +15 -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 +7 -5
  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 +14 -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 +106 -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 +2 -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 +11 -0
  62. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.js +40 -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 +7 -5
  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 +15 -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 +12 -0
  101. package/dist/esm/shared/getProxyForPublicUsage.js +104 -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 +12 -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 +2 -0
  122. package/dist/esm/shared/utils.js +2 -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
@@ -1,2 +1,2 @@
1
1
  export { objectAssign };
2
- declare function objectAssign<Obj extends object, ObjAddendum extends object | null | undefined>(obj: Obj, objAddendum: ObjAddendum, objAddendumCanBePageContextObject?: true): asserts obj is Obj & ObjAddendum;
2
+ declare function objectAssign<Obj extends object, ObjAddendum extends Record<string, any> | null | undefined>(obj: Obj, objAddendum: ObjAddendum, objAddendumCanBeOriginalObject?: true): asserts obj is Obj & ObjAddendum;
@@ -3,10 +3,10 @@ import { assert } from './assert.js';
3
3
  // Same as Object.assign() but:
4
4
  // - With type inference
5
5
  // - Preserves property descriptors, which we need for preserving the getters of getPageContextUrlComputed()
6
- function objectAssign(obj, objAddendum, objAddendumCanBePageContextObject) {
6
+ function objectAssign(obj, objAddendum, objAddendumCanBeOriginalObject) {
7
7
  if (!objAddendum)
8
8
  return;
9
- if (!objAddendumCanBePageContextObject)
10
- assert(!('isPageContext' in objAddendum));
9
+ if (!objAddendumCanBeOriginalObject)
10
+ assert(!objAddendum._isOriginalObject);
11
11
  Object.defineProperties(obj, Object.getOwnPropertyDescriptors(objAddendum));
12
12
  }
@@ -1,4 +1,3 @@
1
- /** Like Object.defineProperty() but with type inference */
2
1
  export declare function objectDefineProperty<Obj extends object, Prop extends PropertyKey, PropertyType>(obj: Obj, prop: Prop, { get, ...args }: {
3
2
  get: () => PropertyType;
4
3
  } & Omit<PropertyDescriptor, 'set' | 'get'>): asserts obj is Obj & Record<Prop, PropertyType>;
@@ -1,4 +1,4 @@
1
- /** Like Object.defineProperty() but with type inference */
1
+ // Same as Object.defineProperty() but with type inference
2
2
  export function objectDefineProperty(obj, prop, { get, ...args }) {
3
3
  Object.defineProperty(obj, prop, { ...args, get });
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.229-commit-7056ef0",
3
+ "version": "0.4.229-commit-5da80bf",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -254,7 +254,7 @@
254
254
  "@types/resolve": "^1.20.6",
255
255
  "@types/semver": "^7.5.8",
256
256
  "@types/source-map-support": "^0.5.10",
257
- "react-streaming": "^0.3.47",
257
+ "react-streaming": "^0.4.2",
258
258
  "rimraf": "^5.0.5",
259
259
  "typescript": "^5.8.3",
260
260
  "vite": "^6.3.2"
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPageContextProxyForUser = getPageContextProxyForUser;
4
- const utils_js_1 = require("../server-routing-runtime/utils.js");
5
- const NOT_SERIALIZABLE_js_1 = require("../../shared/NOT_SERIALIZABLE.js");
6
- // Throw error when pageContext value isn't serializable
7
- function getPageContextProxyForUser(pageContext) {
8
- return new Proxy(pageContext, {
9
- get(_, prop) {
10
- const val = pageContext[prop];
11
- const propName = (0, utils_js_1.getPropAccessNotation)(prop);
12
- (0, utils_js_1.assertUsage)(val !== NOT_SERIALIZABLE_js_1.NOT_SERIALIZABLE, `Can't access pageContext${propName} on the client side. Because it can't be serialized, see server logs.`);
13
- return val;
14
- }
15
- });
16
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executeHookServer = executeHookServer;
4
- const executeHook_js_1 = require("../../../shared/hooks/executeHook.js");
5
- const preparePageContextForUserConsumptionServerSide_js_1 = require("./preparePageContextForUserConsumptionServerSide.js");
6
- async function executeHookServer(hookName, pageContext) {
7
- return await (0, executeHook_js_1.executeHookNew)(hookName, pageContext, (p) => {
8
- (0, preparePageContextForUserConsumptionServerSide_js_1.preparePageContextForUserConsumptionServerSide)(p);
9
- return p;
10
- });
11
- }
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.preparePageContextForUserConsumptionServerSide = preparePageContextForUserConsumptionServerSide;
4
- const utils_js_1 = require("../utils.js");
5
- const getPageContextUrlComputed_js_1 = require("../../../shared/getPageContextUrlComputed.js");
6
- const preparePageContextForUserConsumption_js_1 = require("../../../shared/preparePageContextForUserConsumption.js");
7
- function preparePageContextForUserConsumptionServerSide(pageContext) {
8
- (0, getPageContextUrlComputed_js_1.assertPageContextUrl)(pageContext);
9
- (0, utils_js_1.assert)((0, utils_js_1.isPlainObject)(pageContext.routeParams));
10
- (0, utils_js_1.assert)('Page' in pageContext);
11
- (0, utils_js_1.assert)(typeof pageContext.isClientSideNavigation === 'boolean');
12
- (0, utils_js_1.assert)(pageContext.isPageContext);
13
- (0, utils_js_1.assert)(pageContext.isClientSide === false);
14
- (0, utils_js_1.assert)(typeof pageContext.isPrerendering === 'boolean');
15
- (0, preparePageContextForUserConsumption_js_1.preparePageContextForUserConsumption)(pageContext);
16
- }
@@ -1,108 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executeHook = executeHook;
4
- exports.executeHookNew = executeHookNew;
5
- exports.executeHookGlobalCumulative = executeHookGlobalCumulative;
6
- exports.getPageContext = getPageContext;
7
- exports.providePageContext = providePageContext;
8
- exports.isUserHookError = isUserHookError;
9
- const assert_js_1 = require("../../utils/assert.js");
10
- const getGlobalObject_js_1 = require("../../utils/getGlobalObject.js");
11
- const humanizeTime_js_1 = require("../../utils/humanizeTime.js");
12
- const isObject_js_1 = require("../../utils/isObject.js");
13
- const getHook_js_1 = require("./getHook.js");
14
- const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('utils/executeHook.ts', {
15
- userHookErrors: new WeakMap(),
16
- pageContext: null
17
- });
18
- // TO-DO/eventually: use this variant more prominently
19
- async function executeHookNew(hookName, pageContext, prepare) {
20
- const hooks = (0, getHook_js_1.getHookFromPageContextNew)(hookName, pageContext);
21
- if (!hooks.length)
22
- return [];
23
- const pageContextPrepared = prepare(pageContext);
24
- const hooksWithResult = await Promise.all(hooks.map(async (hook) => {
25
- const hookResult = await executeHook(() => hook.hookFn(pageContextPrepared), hook, pageContext);
26
- return { ...hook, hookResult };
27
- }));
28
- return hooksWithResult;
29
- }
30
- async function executeHookGlobalCumulative(hookName, pageConfigGlobal, pageContext, arg) {
31
- const hooks = (0, getHook_js_1.getHookFromPageConfigGlobalCumulative)(pageConfigGlobal, hookName);
32
- await Promise.all(hooks.map(async (hook) => {
33
- await executeHook(() => hook.hookFn(arg), hook, pageContext);
34
- }));
35
- }
36
- function isUserHookError(err) {
37
- if (!(0, isObject_js_1.isObject)(err))
38
- return false;
39
- return globalObject.userHookErrors.get(err) ?? false;
40
- }
41
- function executeHook(hookFnCaller, hook, pageContext) {
42
- const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn } } = hook;
43
- let resolve;
44
- let reject;
45
- const promise = new Promise((resolve_, reject_) => {
46
- resolve = (ret) => {
47
- clearTimeouts();
48
- resolve_(ret);
49
- };
50
- reject = (err) => {
51
- clearTimeouts();
52
- reject_(err);
53
- };
54
- });
55
- const clearTimeouts = () => {
56
- if (currentTimeoutWarn)
57
- clearTimeout(currentTimeoutWarn);
58
- if (currentTimeoutErr)
59
- clearTimeout(currentTimeoutErr);
60
- };
61
- const currentTimeoutWarn = isNotDisabled(timeoutWarn) &&
62
- setTimeout(() => {
63
- (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 });
64
- }, timeoutWarn);
65
- const currentTimeoutErr = isNotDisabled(timeoutErr) &&
66
- setTimeout(() => {
67
- 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)`);
68
- reject(err);
69
- }, timeoutErr);
70
- (async () => {
71
- try {
72
- providePageContext(pageContext);
73
- const ret = await hookFnCaller();
74
- resolve(ret);
75
- }
76
- catch (err) {
77
- if ((0, isObject_js_1.isObject)(err)) {
78
- globalObject.userHookErrors.set(err, { hookName, hookFilePath });
79
- }
80
- reject(err);
81
- }
82
- })();
83
- return promise;
84
- }
85
- function isNotDisabled(timeout) {
86
- return !!timeout && timeout !== Infinity;
87
- }
88
- /**
89
- * Access `pageContext` object inside Vike hooks, in order to create universal hooks.
90
- *
91
- * https://vike.dev/getPageContext
92
- */
93
- function getPageContext() {
94
- return globalObject.pageContext;
95
- }
96
- /**
97
- * Provide `pageContext` for universal hooks.
98
- *
99
- * https://vike.dev/getPageContext
100
- */
101
- function providePageContext(pageContext) {
102
- globalObject.pageContext = pageContext;
103
- // Promise.resolve() is quicker than process.nextTick() and setImmediate()
104
- // https://stackoverflow.com/questions/67949576/process-nexttick-before-promise-resolve-then
105
- Promise.resolve().then(() => {
106
- globalObject.pageContext = null;
107
- });
108
- }
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.preparePageContextForUserConsumption = preparePageContextForUserConsumption;
4
- const utils_js_1 = require("./utils.js");
5
- const addIs404ToPageProps_js_1 = require("./addIs404ToPageProps.js");
6
- function preparePageContextForUserConsumption(pageContext) {
7
- (0, utils_js_1.assert)(pageContext.pageId);
8
- (0, utils_js_1.assert)('config' in pageContext);
9
- (0, utils_js_1.assert)('configEntries' in pageContext);
10
- (0, addIs404ToPageProps_js_1.addIs404ToPageProps)(pageContext);
11
- // TODO/next-major-release: remove
12
- if (!('_pageId' in pageContext)) {
13
- Object.defineProperty(pageContext, '_pageId', {
14
- get() {
15
- (0, utils_js_1.assertWarning)(false, 'pageContext._pageId has been renamed to pageContext.pageId', {
16
- showStackTrace: true,
17
- onlyOnce: true
18
- });
19
- return pageContext.pageId;
20
- },
21
- enumerable: false
22
- });
23
- }
24
- // For a more readable `console.log(pageContext)` output
25
- sortPageContext(pageContext);
26
- }
27
- // Sort `pageContext` keys alphabetically, in order to make reading the `console.log(pageContext)` output easier
28
- function sortPageContext(pageContext) {
29
- let descriptors = Object.getOwnPropertyDescriptors(pageContext);
30
- for (const key of Object.keys(pageContext))
31
- delete pageContext[key];
32
- descriptors = Object.fromEntries(Object.entries(descriptors).sort(([key1], [key2]) => (0, utils_js_1.compareString)(key1, key2)));
33
- Object.defineProperties(pageContext, descriptors);
34
- }
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPublicProxy = getPublicProxy;
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
- const assert_js_1 = require("./assert.js");
11
- // Show warning when user is accessing internal `_` properties.
12
- function getPublicProxy(obj, objName, propsPublic, expectCustomUserLandProps) {
13
- if (!expectCustomUserLandProps) {
14
- Object.keys(obj).forEach((key) => (0, assert_js_1.assert)(key.startsWith('_') || propsPublic.includes(key)));
15
- propsPublic.forEach((prop) => prop in obj);
16
- }
17
- return new Proxy(obj, {
18
- get(_, prop) {
19
- const propStr = String(prop);
20
- if (propStr.startsWith('_')) {
21
- (0, assert_js_1.assertWarning)(false, `Using internal ${objName}.${propStr} which may break in any minor version update. Reach out on GitHub and elaborate your use case so that the Vike team can add official support for your use case.`, { onlyOnce: true });
22
- }
23
- // @ts-ignore Seems to be TypeScript bug
24
- return Reflect.get(...arguments);
25
- }
26
- });
27
- }
@@ -1,2 +0,0 @@
1
- export { getPageContextProxyForUser };
2
- declare function getPageContextProxyForUser<PageContext extends Record<string, unknown>>(pageContext: PageContext): PageContext;
@@ -1,14 +0,0 @@
1
- export { getPageContextProxyForUser };
2
- import { assertUsage, getPropAccessNotation } from '../server-routing-runtime/utils.js';
3
- import { NOT_SERIALIZABLE } from '../../shared/NOT_SERIALIZABLE.js';
4
- // Throw error when pageContext value isn't serializable
5
- function getPageContextProxyForUser(pageContext) {
6
- return new Proxy(pageContext, {
7
- get(_, prop) {
8
- const val = pageContext[prop];
9
- const propName = getPropAccessNotation(prop);
10
- assertUsage(val !== NOT_SERIALIZABLE, `Can't access pageContext${propName} on the client side. Because it can't be serialized, see server logs.`);
11
- return val;
12
- }
13
- });
14
- }
@@ -1,12 +0,0 @@
1
- export { preparePageContextForUserConsumptionClientSide };
2
- export type { PageContextForUserConsumptionClientSide };
3
- import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
4
- import type { PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
5
- type PageContextForUserConsumptionClientSide = PageConfigUserFriendlyOld & {
6
- pageId: string;
7
- _hasPageContextFromServer: boolean;
8
- _pageConfigs: PageConfigRuntime[];
9
- };
10
- declare function preparePageContextForUserConsumptionClientSide<T extends PageContextForUserConsumptionClientSide>(pageContext: T, isClientRouting: boolean): T & {
11
- Page: unknown;
12
- };
@@ -1,44 +0,0 @@
1
- export { preparePageContextForUserConsumptionClientSide };
2
- import { assert, objectAssign } from '../server-routing-runtime/utils.js';
3
- import { getPageContextProxyForUser } from './getPageContextProxyForUser.js';
4
- import { preparePageContextForUserConsumption } from '../../shared/preparePageContextForUserConsumption.js';
5
- function preparePageContextForUserConsumptionClientSide(pageContext, isClientRouting) {
6
- if (isClientRouting) {
7
- const pageContextTyped = pageContext;
8
- assert([true, false].includes(pageContextTyped.isHydration));
9
- assert([true, false, null].includes(pageContextTyped.isBackwardNavigation));
10
- }
11
- else {
12
- const pageContextTyped = pageContext;
13
- assert(pageContextTyped.isHydration === true);
14
- assert(pageContextTyped.isBackwardNavigation === null);
15
- }
16
- const Page = pageContext.config.Page ||
17
- // TODO/next-major-release: remove
18
- pageContext.exports.Page;
19
- objectAssign(pageContext, { Page });
20
- // TODO/next-major-release: remove
21
- // - Requires https://github.com/vikejs/vike-vue/issues/198
22
- // - Last time I tried to remove it (https://github.com/vikejs/vike/commit/705fd23598d9d69bf46a52c8550216cd7117ce71) the tests were failing as expected: only the Vue integrations that used shallowReactive() failed.
23
- supportVueReactiviy(pageContext);
24
- preparePageContextForUserConsumption(pageContext);
25
- const pageContextProxy = getPageContextProxyForUser(pageContext);
26
- return pageContextProxy;
27
- }
28
- // With Vue + Cient Routing, the `pageContext` is made reactive:
29
- // ```js
30
- // import { reactive } from 'vue'
31
- // // See /examples/vue-full/renderer/createVueApp.ts
32
- // const pageContextReactive = reactive(pageContext)
33
- // ```
34
- function supportVueReactiviy(pageContext) {
35
- resolveGetters(pageContext);
36
- }
37
- // Remove propery descriptor getters because they break Vue's reactivity.
38
- // E.g. resolve the `pageContext.urlPathname` getter.
39
- function resolveGetters(pageContext) {
40
- Object.entries(pageContext).forEach(([key, val]) => {
41
- delete pageContext[key];
42
- pageContext[key] = val;
43
- });
44
- }
@@ -1,13 +0,0 @@
1
- export { executeHookServer };
2
- export type { PageContextExecuteHookServer };
3
- import { type PageContextForUserConsumptionServerSide } from './preparePageContextForUserConsumptionServerSide.js';
4
- import type { PageConfigUserFriendlyOld } from '../../../shared/getPageFiles.js';
5
- import type { HookName } from '../../../shared/page-configs/Config.js';
6
- type PageContextExecuteHookServer = PageConfigUserFriendlyOld & PageContextForUserConsumptionServerSide;
7
- declare function executeHookServer(hookName: HookName, pageContext: PageContextExecuteHookServer): Promise<{
8
- hookResult: unknown;
9
- hookName: import("../../../shared/page-configs/Config.js").HookNameOld;
10
- hookFilePath: string;
11
- hookFn: (arg: object) => unknown;
12
- hookTimeout: import("../../../shared/hooks/getHook.js").HookTimeout;
13
- }[]>;
@@ -1,9 +0,0 @@
1
- export { executeHookServer };
2
- import { executeHookNew } from '../../../shared/hooks/executeHook.js';
3
- import { preparePageContextForUserConsumptionServerSide } from './preparePageContextForUserConsumptionServerSide.js';
4
- async function executeHookServer(hookName, pageContext) {
5
- return await executeHookNew(hookName, pageContext, (p) => {
6
- preparePageContextForUserConsumptionServerSide(p);
7
- return p;
8
- });
9
- }
@@ -1,24 +0,0 @@
1
- export { preparePageContextForUserConsumptionServerSide };
2
- export type { PageContextForUserConsumptionServerSide };
3
- import { PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
4
- import type { PageConfigRuntime } from '../../../shared/page-configs/PageConfig.js';
5
- import type { PageConfigUserFriendlyOld } from '../../../shared/page-configs/getUserFriendlyConfigs.js';
6
- import { PageContextBuiltInServerInternal } from '../../../shared/types.js';
7
- import type { GlobalContextServerInternal, GlobalContextServer } from '../globalContext.js';
8
- type PageContextForUserConsumptionServerSide = PageContextBuiltInServerInternal & PageConfigUserFriendlyOld & {
9
- urlOriginal: string;
10
- /** @deprecated */
11
- url: string;
12
- urlPathname: string;
13
- urlParsed: PageContextUrlInternal['urlParsed'];
14
- routeParams: Record<string, string>;
15
- Page: unknown;
16
- pageId: string;
17
- _pageConfigs: PageConfigRuntime[];
18
- is404: null | boolean;
19
- isClientSideNavigation: boolean;
20
- pageProps?: Record<string, unknown>;
21
- _globalContext: GlobalContextServerInternal;
22
- globalContext: GlobalContextServer;
23
- } & Record<string, unknown>;
24
- declare function preparePageContextForUserConsumptionServerSide(pageContext: PageContextForUserConsumptionServerSide): void;
@@ -1,14 +0,0 @@
1
- export { preparePageContextForUserConsumptionServerSide };
2
- import { assert, isPlainObject } from '../utils.js';
3
- import { assertPageContextUrl } from '../../../shared/getPageContextUrlComputed.js';
4
- import { preparePageContextForUserConsumption } from '../../../shared/preparePageContextForUserConsumption.js';
5
- function preparePageContextForUserConsumptionServerSide(pageContext) {
6
- assertPageContextUrl(pageContext);
7
- assert(isPlainObject(pageContext.routeParams));
8
- assert('Page' in pageContext);
9
- assert(typeof pageContext.isClientSideNavigation === 'boolean');
10
- assert(pageContext.isPageContext);
11
- assert(pageContext.isClientSide === false);
12
- assert(typeof pageContext.isPrerendering === 'boolean');
13
- preparePageContextForUserConsumption(pageContext);
14
- }
@@ -1,34 +0,0 @@
1
- export { executeHook };
2
- export { executeHookNew };
3
- export { executeHookGlobalCumulative };
4
- export { getPageContext };
5
- export { providePageContext };
6
- export { isUserHookError };
7
- import type { PageContextClient, PageContextServer } from '../types.js';
8
- import type { Hook, HookLoc } from './getHook.js';
9
- import type { PageConfigUserFriendlyOld } from '../getPageFiles.js';
10
- import type { HookName, HookNameGlobal } from '../page-configs/Config.js';
11
- import type { PageConfigGlobalRuntime } from '../page-configs/PageConfig.js';
12
- declare function executeHookNew<PageContext extends PageConfigUserFriendlyOld>(hookName: HookName, pageContext: PageContext, prepare: (pageContext: PageContext) => PageContext): Promise<{
13
- hookResult: unknown;
14
- hookName: import("../page-configs/Config.js").HookNameOld;
15
- hookFilePath: string;
16
- hookFn: (arg: object) => unknown;
17
- hookTimeout: import("./getHook.js").HookTimeout;
18
- }[]>;
19
- declare function executeHookGlobalCumulative(hookName: HookNameGlobal, pageConfigGlobal: PageConfigGlobalRuntime, pageContext: PageContextUnknown | null, arg: object): Promise<void>;
20
- type PageContextUnknown = null | Record<string, unknown>;
21
- declare function isUserHookError(err: unknown): false | HookLoc;
22
- declare function executeHook<T = unknown>(hookFnCaller: () => T, hook: Omit<Hook, 'hookFn'>, pageContext: PageContextUnknown): Promise<T>;
23
- /**
24
- * Access `pageContext` object inside Vike hooks, in order to create universal hooks.
25
- *
26
- * https://vike.dev/getPageContext
27
- */
28
- declare function getPageContext<PageContext = PageContextClient | PageContextServer>(): null | PageContext;
29
- /**
30
- * Provide `pageContext` for universal hooks.
31
- *
32
- * https://vike.dev/getPageContext
33
- */
34
- declare function providePageContext(pageContext: PageContextUnknown): void;
@@ -1,106 +0,0 @@
1
- export { executeHook };
2
- export { executeHookNew };
3
- export { executeHookGlobalCumulative };
4
- export { getPageContext };
5
- export { providePageContext };
6
- export { isUserHookError };
7
- import { getProjectError, assertWarning } from '../../utils/assert.js';
8
- import { getGlobalObject } from '../../utils/getGlobalObject.js';
9
- import { humanizeTime } from '../../utils/humanizeTime.js';
10
- import { isObject } from '../../utils/isObject.js';
11
- import { getHookFromPageConfigGlobalCumulative, getHookFromPageContextNew } from './getHook.js';
12
- const globalObject = getGlobalObject('utils/executeHook.ts', {
13
- userHookErrors: new WeakMap(),
14
- pageContext: null
15
- });
16
- // TO-DO/eventually: use this variant more prominently
17
- async function executeHookNew(hookName, pageContext, prepare) {
18
- const hooks = getHookFromPageContextNew(hookName, pageContext);
19
- if (!hooks.length)
20
- return [];
21
- const pageContextPrepared = prepare(pageContext);
22
- const hooksWithResult = await Promise.all(hooks.map(async (hook) => {
23
- const hookResult = await executeHook(() => hook.hookFn(pageContextPrepared), hook, pageContext);
24
- return { ...hook, hookResult };
25
- }));
26
- return hooksWithResult;
27
- }
28
- async function executeHookGlobalCumulative(hookName, pageConfigGlobal, pageContext, arg) {
29
- const hooks = getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName);
30
- await Promise.all(hooks.map(async (hook) => {
31
- await executeHook(() => hook.hookFn(arg), hook, pageContext);
32
- }));
33
- }
34
- function isUserHookError(err) {
35
- if (!isObject(err))
36
- return false;
37
- return globalObject.userHookErrors.get(err) ?? false;
38
- }
39
- function executeHook(hookFnCaller, hook, pageContext) {
40
- const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn } } = hook;
41
- let resolve;
42
- let reject;
43
- const promise = new Promise((resolve_, reject_) => {
44
- resolve = (ret) => {
45
- clearTimeouts();
46
- resolve_(ret);
47
- };
48
- reject = (err) => {
49
- clearTimeouts();
50
- reject_(err);
51
- };
52
- });
53
- const clearTimeouts = () => {
54
- if (currentTimeoutWarn)
55
- clearTimeout(currentTimeoutWarn);
56
- if (currentTimeoutErr)
57
- clearTimeout(currentTimeoutErr);
58
- };
59
- const currentTimeoutWarn = isNotDisabled(timeoutWarn) &&
60
- setTimeout(() => {
61
- assertWarning(false, `The ${hookName}() hook defined by ${hookFilePath} is slow: it's taking more than ${humanizeTime(timeoutWarn)} (https://vike.dev/hooksTimeout)`, { onlyOnce: false });
62
- }, timeoutWarn);
63
- const currentTimeoutErr = isNotDisabled(timeoutErr) &&
64
- setTimeout(() => {
65
- const err = getProjectError(`The ${hookName}() hook defined by ${hookFilePath} timed out: it didn't finish after ${humanizeTime(timeoutErr)} (https://vike.dev/hooksTimeout)`);
66
- reject(err);
67
- }, timeoutErr);
68
- (async () => {
69
- try {
70
- providePageContext(pageContext);
71
- const ret = await hookFnCaller();
72
- resolve(ret);
73
- }
74
- catch (err) {
75
- if (isObject(err)) {
76
- globalObject.userHookErrors.set(err, { hookName, hookFilePath });
77
- }
78
- reject(err);
79
- }
80
- })();
81
- return promise;
82
- }
83
- function isNotDisabled(timeout) {
84
- return !!timeout && timeout !== Infinity;
85
- }
86
- /**
87
- * Access `pageContext` object inside Vike hooks, in order to create universal hooks.
88
- *
89
- * https://vike.dev/getPageContext
90
- */
91
- function getPageContext() {
92
- return globalObject.pageContext;
93
- }
94
- /**
95
- * Provide `pageContext` for universal hooks.
96
- *
97
- * https://vike.dev/getPageContext
98
- */
99
- function providePageContext(pageContext) {
100
- globalObject.pageContext = pageContext;
101
- // Promise.resolve() is quicker than process.nextTick() and setImmediate()
102
- // https://stackoverflow.com/questions/67949576/process-nexttick-before-promise-resolve-then
103
- Promise.resolve().then(() => {
104
- globalObject.pageContext = null;
105
- });
106
- }
@@ -1,5 +0,0 @@
1
- export { preparePageContextForUserConsumption };
2
- import type { PageContextForUserConsumptionClientSide } from '../client/shared/preparePageContextForUserConsumptionClientSide.js';
3
- import type { PageContextForUserConsumptionServerSide } from '../node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js';
4
- type PageContextForUserConsumption = PageContextForUserConsumptionServerSide | PageContextForUserConsumptionClientSide;
5
- declare function preparePageContextForUserConsumption(pageContext: PageContextForUserConsumption): void;
@@ -1,32 +0,0 @@
1
- export { preparePageContextForUserConsumption };
2
- import { assert, assertWarning, compareString } from './utils.js';
3
- import { addIs404ToPageProps } from './addIs404ToPageProps.js';
4
- function preparePageContextForUserConsumption(pageContext) {
5
- assert(pageContext.pageId);
6
- assert('config' in pageContext);
7
- assert('configEntries' in pageContext);
8
- addIs404ToPageProps(pageContext);
9
- // TODO/next-major-release: remove
10
- if (!('_pageId' in pageContext)) {
11
- Object.defineProperty(pageContext, '_pageId', {
12
- get() {
13
- assertWarning(false, 'pageContext._pageId has been renamed to pageContext.pageId', {
14
- showStackTrace: true,
15
- onlyOnce: true
16
- });
17
- return pageContext.pageId;
18
- },
19
- enumerable: false
20
- });
21
- }
22
- // For a more readable `console.log(pageContext)` output
23
- sortPageContext(pageContext);
24
- }
25
- // Sort `pageContext` keys alphabetically, in order to make reading the `console.log(pageContext)` output easier
26
- function sortPageContext(pageContext) {
27
- let descriptors = Object.getOwnPropertyDescriptors(pageContext);
28
- for (const key of Object.keys(pageContext))
29
- delete pageContext[key];
30
- descriptors = Object.fromEntries(Object.entries(descriptors).sort(([key1], [key2]) => compareString(key1, key2)));
31
- Object.defineProperties(pageContext, descriptors);
32
- }
@@ -1,2 +0,0 @@
1
- export { getPublicProxy };
2
- declare function getPublicProxy<Obj extends Record<string, unknown>, PropsPublic extends readonly (keyof Obj)[]>(obj: Obj, objName: string, propsPublic: PropsPublic, expectCustomUserLandProps?: true): Pick<Obj, PropsPublic[number]>;
@@ -1,25 +0,0 @@
1
- export { getPublicProxy };
2
- // We use a proxy instead of property getters.
3
- // - 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.
4
- // ```console
5
- // TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute, #<Object>
6
- // ```
7
- // - Previous implementation using property getters: https://github.com/vikejs/vike/blob/main/vike/utils/makePublicCopy.ts
8
- import { assert, assertWarning } from './assert.js';
9
- // Show warning when user is accessing internal `_` properties.
10
- function getPublicProxy(obj, objName, propsPublic, expectCustomUserLandProps) {
11
- if (!expectCustomUserLandProps) {
12
- Object.keys(obj).forEach((key) => assert(key.startsWith('_') || propsPublic.includes(key)));
13
- propsPublic.forEach((prop) => prop in obj);
14
- }
15
- return new Proxy(obj, {
16
- get(_, prop) {
17
- const propStr = String(prop);
18
- if (propStr.startsWith('_')) {
19
- assertWarning(false, `Using internal ${objName}.${propStr} which may break in any minor version update. Reach out on GitHub and elaborate your use case so that the Vike team can add official support for your use case.`, { onlyOnce: true });
20
- }
21
- // @ts-ignore Seems to be TypeScript bug
22
- return Reflect.get(...arguments);
23
- }
24
- });
25
- }