vike 0.4.232-commit-1690f53 → 0.4.232

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 (56) hide show
  1. package/dist/cjs/node/prerender/runPrerender.js +4 -9
  2. package/dist/cjs/node/runtime/renderPage/execHookServer.js +4 -1
  3. package/dist/cjs/node/runtime/renderPage/{execHookDataAndOnBeforeRender.js → executeOnBeforeRenderAndDataHooks.js} +2 -2
  4. package/dist/cjs/node/runtime/renderPage/{execHookOnRenderHtml.js → executeOnRenderHtmlHook.js} +3 -3
  5. package/dist/cjs/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +13 -18
  6. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -11
  7. package/dist/cjs/node/runtime/renderPage.js +48 -55
  8. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +2 -0
  9. package/dist/cjs/shared/createPageContextShared.js +3 -1
  10. package/dist/cjs/shared/hooks/execHook.js +54 -31
  11. package/dist/cjs/shared/route/{execHookGuard.js → executeGuardHook.js} +3 -3
  12. package/dist/cjs/shared/route/{execHookOnBeforeRoute.js → executeOnBeforeRouteHook.js} +4 -4
  13. package/dist/cjs/shared/route/index.js +2 -3
  14. package/dist/cjs/shared/route/resolveRouteFunction.js +1 -1
  15. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  16. package/dist/cjs/utils/styleFileRE.js +0 -1
  17. package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.d.ts +2 -2
  18. package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.js +9 -9
  19. package/dist/esm/client/runtime-client-routing/renderPageClientSide.js +62 -97
  20. package/dist/esm/client/runtime-server-routing/createPageContextClientSide.js +4 -11
  21. package/dist/esm/client/runtime-server-routing/entry.js +2 -2
  22. package/dist/esm/client/shared/{execHookOnRenderClient.d.ts → executeOnRenderClientHook.d.ts} +2 -2
  23. package/dist/esm/client/shared/{execHookOnRenderClient.js → executeOnRenderClientHook.js} +4 -4
  24. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.d.ts +4 -12
  25. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.js +4 -4
  26. package/dist/esm/node/prerender/runPrerender.d.ts +4 -250
  27. package/dist/esm/node/prerender/runPrerender.js +6 -11
  28. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +1 -1
  29. package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +3 -3
  30. package/dist/esm/node/runtime/renderPage/execHookServer.js +4 -1
  31. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +6 -0
  32. package/dist/esm/node/runtime/renderPage/{execHookDataAndOnBeforeRender.js → executeOnBeforeRenderAndDataHooks.js} +2 -2
  33. package/dist/esm/node/runtime/renderPage/{execHookOnRenderHtml.d.ts → executeOnRenderHtmlHook.d.ts} +2 -2
  34. package/dist/esm/node/runtime/renderPage/{execHookOnRenderHtml.js → executeOnRenderHtmlHook.js} +4 -4
  35. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.d.ts +1 -1
  36. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.d.ts +6 -15
  37. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +13 -18
  38. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +2 -2
  39. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +13 -13
  40. package/dist/esm/node/runtime/renderPage.js +50 -57
  41. package/dist/esm/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +2 -0
  42. package/dist/esm/shared/createPageContextShared.js +3 -1
  43. package/dist/esm/shared/hooks/execHook.d.ts +28 -14
  44. package/dist/esm/shared/hooks/execHook.js +54 -31
  45. package/dist/esm/shared/route/executeGuardHook.d.ts +8 -0
  46. package/dist/esm/shared/route/{execHookGuard.js → executeGuardHook.js} +4 -4
  47. package/dist/esm/shared/route/{execHookOnBeforeRoute.d.ts → executeOnBeforeRouteHook.d.ts} +2 -2
  48. package/dist/esm/shared/route/{execHookOnBeforeRoute.js → executeOnBeforeRouteHook.js} +5 -5
  49. package/dist/esm/shared/route/index.js +2 -3
  50. package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
  51. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  52. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  53. package/dist/esm/utils/styleFileRE.js +0 -1
  54. package/package.json +1 -1
  55. package/dist/esm/node/runtime/renderPage/execHookDataAndOnBeforeRender.d.ts +0 -6
  56. package/dist/esm/shared/route/execHookGuard.d.ts +0 -8
@@ -3,7 +3,7 @@ export { renderPage_addAsyncHookwrapper };
3
3
  import { renderPageAlreadyRouted } from './renderPage/renderPageAlreadyRouted.js';
4
4
  import { createPageContextServerSide, createPageContextServerSideWithoutGlobalContext, } from './renderPage/createPageContextServerSide.js';
5
5
  import { route } from '../../shared/route/index.js';
6
- import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty, augmentType, } from './utils.js';
6
+ import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty, } from './utils.js';
7
7
  import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled, } from '../../shared/route/abort.js';
8
8
  import { getGlobalContextServerInternal, initGlobalContext_renderPage, } from './globalContext.js';
9
9
  import { handlePageContextRequestUrl } from './renderPage/handlePageContextRequestUrl.js';
@@ -16,7 +16,7 @@ import pc from '@brillout/picocolors';
16
16
  import { getPageContextClientSerializedAbort, getPageContextClientSerialized } from './html/serializeContext.js';
17
17
  import { getErrorPageId } from '../../shared/error-page.js';
18
18
  import { handleErrorWithoutErrorPage } from './renderPage/handleErrorWithoutErrorPage.js';
19
- import { loadPageConfigsLazyServerSideAndExecHook } from './renderPage/loadPageConfigsLazyServerSide.js';
19
+ import { loadPageConfigsLazyServerSide } from './renderPage/loadPageConfigsLazyServerSide.js';
20
20
  import { resolveRedirects } from './renderPage/resolveRedirects.js';
21
21
  import { getVikeConfigError } from '../shared/getVikeConfigError.js';
22
22
  const globalObject = getGlobalObject('runtime/renderPage.ts', { httpRequestsCount: 0 });
@@ -138,66 +138,59 @@ async function renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRe
138
138
  else {
139
139
  assert(errNominalPage);
140
140
  assert(pageContextNominalPageSuccess === undefined);
141
- return await renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite);
142
- }
143
- }
144
- // When the normal page threw an error
145
- // - Can be a URL rewrite upon `throw render('/some-url')`
146
- // - Can be rendering the error page
147
- // - Can be rendering Vike's generic error page (if no error page is defined, or if the error page throws an error)
148
- async function renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite) {
149
- assert(pageContextNominalPageBegin);
150
- assert(hasProp(pageContextNominalPageBegin, 'urlOriginal', 'string'));
151
- const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
152
- // Handle `throw redirect()` and `throw render()` while rendering nominal page
153
- if (isAbortError(errNominalPage)) {
154
- const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
155
- if (handled.pageContextReturn) {
156
- // - throw redirect()
157
- // - throw render(url)
158
- // - throw render(abortStatusCode) if .pageContext.json request
159
- return handled.pageContextReturn;
160
- }
161
- else {
162
- // - throw render(abortStatusCode) if not .pageContext.json request
141
+ assert(pageContextNominalPageBegin);
142
+ assert(hasProp(pageContextNominalPageBegin, 'urlOriginal', 'string'));
143
+ const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
144
+ // Handle `throw redirect()` and `throw render()` while rendering nominal page
145
+ if (isAbortError(errNominalPage)) {
146
+ const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
147
+ if (handled.pageContextReturn) {
148
+ // - throw redirect()
149
+ // - throw render(url)
150
+ // - throw render(abortStatusCode) if .pageContext.json request
151
+ return handled.pageContextReturn;
152
+ }
153
+ else {
154
+ // - throw render(abortStatusCode) if not .pageContext.json request
155
+ }
156
+ Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
163
157
  }
164
- Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
165
- }
166
- {
167
- const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
168
- if (!errorPageId) {
169
- objectAssign(pageContextErrorPageInit, { pageId: null });
170
- return handleErrorWithoutErrorPage(pageContextErrorPageInit);
158
+ {
159
+ const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
160
+ if (!errorPageId) {
161
+ objectAssign(pageContextErrorPageInit, { pageId: null });
162
+ return handleErrorWithoutErrorPage(pageContextErrorPageInit);
163
+ }
164
+ else {
165
+ objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
166
+ }
171
167
  }
172
- else {
173
- objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
168
+ let pageContextErrorPage;
169
+ try {
170
+ pageContextErrorPage = await renderPageAlreadyRouted(pageContextErrorPageInit);
174
171
  }
175
- }
176
- let pageContextErrorPage;
177
- try {
178
- pageContextErrorPage = await renderPageAlreadyRouted(pageContextErrorPageInit);
179
- }
180
- catch (errErrorPage) {
181
- // Handle `throw redirect()` and `throw render()` while rendering error page
182
- if (isAbortError(errErrorPage)) {
183
- const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
184
- // throw render(abortStatusCode)
185
- if (!handled.pageContextReturn) {
186
- const pageContextAbort = errErrorPage._pageContextAbort;
187
- assertWarning(false, `Failed to render error page because ${pc.cyan(pageContextAbort._abortCall)} was called: make sure ${pc.cyan(pageContextAbort._abortCaller)} doesn't occur while the error page is being rendered.`, { onlyOnce: false });
188
- const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
189
- return pageContextHttpWithError;
172
+ catch (errErrorPage) {
173
+ // Handle `throw redirect()` and `throw render()` while rendering error page
174
+ if (isAbortError(errErrorPage)) {
175
+ const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
176
+ // throw render(abortStatusCode)
177
+ if (!handled.pageContextReturn) {
178
+ const pageContextAbort = errErrorPage._pageContextAbort;
179
+ assertWarning(false, `Failed to render error page because ${pc.cyan(pageContextAbort._abortCall)} was called: make sure ${pc.cyan(pageContextAbort._abortCaller)} doesn't occur while the error page is being rendered.`, { onlyOnce: false });
180
+ const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
181
+ return pageContextHttpWithError;
182
+ }
183
+ // `throw redirect()` / `throw render(url)`
184
+ return handled.pageContextReturn;
190
185
  }
191
- // `throw redirect()` / `throw render(url)`
192
- return handled.pageContextReturn;
193
- }
194
- if (isNewError(errErrorPage, errNominalPage)) {
195
- logRuntimeError(errErrorPage, httpRequestId);
186
+ if (isNewError(errErrorPage, errNominalPage)) {
187
+ logRuntimeError(errErrorPage, httpRequestId);
188
+ }
189
+ const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
190
+ return pageContextWithError;
196
191
  }
197
- const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
198
- return pageContextWithError;
192
+ return pageContextErrorPage;
199
193
  }
200
- return pageContextErrorPage;
201
194
  }
202
195
  function logHttpRequest(urlOriginal, httpRequestId) {
203
196
  logRuntimeInfo?.(getRequestInfoMessage(urlOriginal), httpRequestId, 'info');
@@ -419,7 +412,7 @@ pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalCont
419
412
  objectAssign(pageContext, { pageId: errorPageId });
420
413
  objectAssign(pageContext, pageContextAbort);
421
414
  objectAssign(pageContext, pageContextErrorPageInit, true);
422
- augmentType(pageContext, await loadPageConfigsLazyServerSideAndExecHook(pageContext));
415
+ objectAssign(pageContext, await loadPageConfigsLazyServerSide(pageContext));
423
416
  // We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
424
417
  pageContextSerialized = getPageContextClientSerialized(pageContext);
425
418
  }
@@ -19,6 +19,8 @@ const configDefinitionsBuiltIn = {
19
19
  },
20
20
  onCreatePageContext: {
21
21
  env: { server: true, client: true },
22
+ // Required because `onCreatePageContext()` is called before routing
23
+ global: true,
22
24
  cumulative: true,
23
25
  },
24
26
  onCreateGlobalContext: {
@@ -1,9 +1,11 @@
1
1
  export { createPageContextShared };
2
2
  export { createPageContextObject };
3
+ import { execHookGlobal } from './hooks/execHook.js';
4
+ import { preparePageContextForPublicUsage } from './preparePageContextForPublicUsage.js';
3
5
  import { changeEnumerable, objectAssign } from './utils.js';
4
- // TODO/now: make this and parents sync
5
6
  async function createPageContextShared(pageContextCreated, pageConfigGlobal, vikeConfigPublicGlobal) {
6
7
  objectAssign(pageContextCreated, vikeConfigPublicGlobal);
8
+ await execHookGlobal('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated, preparePageContextForPublicUsage);
7
9
  return pageContextCreated;
8
10
  }
9
11
  function createPageContextObject() {
@@ -1,14 +1,15 @@
1
1
  export { execHook };
2
+ export { execHookSingle };
3
+ export { execHookSingleWithReturn };
4
+ export { execHookErrorHandling };
5
+ export { execHooksErrorHandling };
6
+ export { execHookWithoutPageContext };
2
7
  export { execHookGlobal };
3
- export { execHookDirect };
4
- export { execHookDirectSingle };
5
- export { execHookDirectSingleWithReturn };
6
- export { execHookDirectWithoutPageContext };
7
- export { execHookDirectSync };
8
+ export { execHookSync };
8
9
  export { getPageContext };
9
10
  export { providePageContext };
10
11
  export { isUserHookError };
11
- export type { PageContextExecHook };
12
+ export type { PageContextExecuteHook };
12
13
  import type { PageContextClient, PageContextServer } from '../../types/PageContext.js';
13
14
  import type { Hook, HookLoc } from './getHook.js';
14
15
  import type { VikeConfigPublicPageLazy } from '../getPageFiles.js';
@@ -18,21 +19,34 @@ import type { PageContextForPublicUsageServer } from '../../node/runtime/renderP
18
19
  import type { PageContextForPublicUsageClientShared } from '../../client/shared/preparePageContextForPublicUsageClientShared.js';
19
20
  import { type PageContextPrepareMinimum } from '../preparePageContextForPublicUsage.js';
20
21
  import type { GlobalContextPrepareMinimum } from '../prepareGlobalContextForPublicUsage.js';
21
- type PageContextExecHook = VikeConfigPublicPageLazy & PageContextForPublicUsage;
22
+ type PageContextExecuteHook = VikeConfigPublicPageLazy & PageContextForPublicUsage;
22
23
  type PageContextForPublicUsage = PageContextForPublicUsageServer | PageContextForPublicUsageClientShared;
23
24
  type HookWithResult = Hook & {
24
25
  hookReturn: unknown;
25
26
  };
26
- declare function execHook<PageContext extends PageContextExecHook>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
27
- declare function execHookGlobal<HookArg extends PageContextPrepareMinimum | GlobalContextPrepareMinimum>(hookName: HookNameGlobal, pageConfigGlobal: PageConfigGlobalRuntime, pageContext: PageContextPrepareMinimum | null, hookArg: HookArg, prepareForPublicUsage: (hookArg: HookArg) => HookArg): Promise<void>;
28
- declare function execHookDirect<PageContext extends PageContextPrepareMinimum>(hooks: Hook[], pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
29
- declare function execHookDirectSingle<PageContext extends PageContextExecHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<void>;
30
- declare function execHookDirectSingleWithReturn<PageContext extends PageContextExecHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
27
+ declare function execHookSingle<PageContext extends PageContextExecuteHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<void>;
28
+ declare function execHookSingleWithReturn<PageContext extends PageContextExecuteHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
31
29
  hookReturn: unknown;
32
30
  }>;
31
+ declare function execHook<PageContext extends PageContextExecuteHook>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
32
+ declare function execHookErrorHandling<PageContext extends PageContextExecuteHook>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
33
+ hooks: HookWithResult[];
34
+ err?: undefined;
35
+ } | {
36
+ hooks: Hook[];
37
+ err: unknown;
38
+ }>;
39
+ declare function execHooksErrorHandling<PageContext extends PageContextPrepareMinimum>(hooks: Hook[], pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
40
+ hooks: HookWithResult[];
41
+ err?: undefined;
42
+ } | {
43
+ hooks: Hook[];
44
+ err: unknown;
45
+ }>;
46
+ declare function execHookGlobal<HookArg extends PageContextPrepareMinimum | GlobalContextPrepareMinimum>(hookName: HookNameGlobal, pageConfigGlobal: PageConfigGlobalRuntime, pageContext: PageContextPrepareMinimum | null, hookArg: HookArg, prepareForPublicUsage: (hookArg: HookArg) => HookArg): Promise<void>;
33
47
  declare function isUserHookError(err: unknown): false | HookLoc;
34
- declare function execHookDirectWithoutPageContext<HookReturn>(hookFnCaller: () => HookReturn, hook: Omit<Hook, 'hookFn'>): Promise<HookReturn>;
35
- declare function execHookDirectSync<PageContext extends PageContextPrepareMinimum>(hook: Omit<Hook, 'hookTimeout'>, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): {
48
+ declare function execHookWithoutPageContext<HookReturn>(hookFnCaller: () => HookReturn, hook: Omit<Hook, 'hookFn'>): Promise<HookReturn>;
49
+ declare function execHookSync<PageContext extends PageContextPrepareMinimum>(hook: Omit<Hook, 'hookTimeout'>, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): {
36
50
  hookReturn: unknown;
37
51
  };
38
52
  /**
@@ -1,10 +1,11 @@
1
1
  export { execHook };
2
+ export { execHookSingle };
3
+ export { execHookSingleWithReturn };
4
+ export { execHookErrorHandling };
5
+ export { execHooksErrorHandling };
6
+ export { execHookWithoutPageContext };
2
7
  export { execHookGlobal };
3
- export { execHookDirect };
4
- export { execHookDirectSingle };
5
- export { execHookDirectSingleWithReturn };
6
- export { execHookDirectWithoutPageContext };
7
- export { execHookDirectSync };
8
+ export { execHookSync };
8
9
  export { getPageContext };
9
10
  export { providePageContext };
10
11
  export { isUserHookError };
@@ -18,48 +19,70 @@ const globalObject = getGlobalObject('utils/execHook.ts', {
18
19
  userHookErrors: new WeakMap(),
19
20
  pageContext: null,
20
21
  });
22
+ async function execHookSingle(hook, pageContext, preparePageContextForPublicUsage) {
23
+ const res = await execHooksErrorHandling([hook], pageContext, preparePageContextForPublicUsage);
24
+ if ('err' in res)
25
+ throw res.err;
26
+ const { hookReturn } = res.hooks[0];
27
+ assertUsage(hookReturn === undefined, `The ${hook.hookName}() hook defined by ${hook.hookFilePath} isn't allowed to return a value`);
28
+ }
29
+ async function execHookSingleWithReturn(hook, pageContext, preparePageContextForPublicUsage) {
30
+ const res = await execHooksErrorHandling([hook], pageContext, preparePageContextForPublicUsage);
31
+ if ('err' in res)
32
+ throw res.err;
33
+ const { hookReturn } = res.hooks[0];
34
+ return { hookReturn };
35
+ }
21
36
  async function execHook(hookName, pageContext, preparePageContextForPublicUsage) {
37
+ const res = await execHookErrorHandling(hookName, pageContext, preparePageContextForPublicUsage);
38
+ if ('err' in res)
39
+ throw res.err;
40
+ return res.hooks;
41
+ }
42
+ async function execHookErrorHandling(hookName, pageContext, preparePageContextForPublicUsage) {
22
43
  const hooks = getHookFromPageContextNew(hookName, pageContext);
23
- return await execHookDirect(hooks, pageContext, preparePageContextForPublicUsage);
44
+ return execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsage);
45
+ }
46
+ async function execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsage) {
47
+ if (!hooks.length)
48
+ return { hooks: [] };
49
+ const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
50
+ let hooksWithResult;
51
+ let err;
52
+ try {
53
+ hooksWithResult = await Promise.all(hooks.map(async (hook) => {
54
+ const hookReturn = await execHookAsync(() => hook.hookFn(pageContextForPublicUsage), hook, pageContextForPublicUsage);
55
+ return { ...hook, hookReturn };
56
+ }));
57
+ }
58
+ catch (err_) {
59
+ err = err_;
60
+ }
61
+ if (hooksWithResult) {
62
+ return { hooks: hooksWithResult };
63
+ }
64
+ else {
65
+ return { hooks, err };
66
+ }
24
67
  }
25
68
  async function execHookGlobal(hookName, pageConfigGlobal, pageContext, hookArg, prepareForPublicUsage) {
26
69
  const hooks = getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName);
27
70
  const hookArgForPublicUsage = prepareForPublicUsage(hookArg);
28
71
  await Promise.all(hooks.map(async (hook) => {
29
- await execHookDirectAsync(() => hook.hookFn(hookArgForPublicUsage), hook, pageContext);
72
+ await execHookAsync(() => hook.hookFn(hookArgForPublicUsage), hook, pageContext);
30
73
  }));
31
74
  }
32
- async function execHookDirect(hooks, pageContext, preparePageContextForPublicUsage) {
33
- if (!hooks.length)
34
- return [];
35
- const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
36
- const hooksWithResult = await Promise.all(hooks.map(async (hook) => {
37
- const hookReturn = await execHookDirectAsync(() => hook.hookFn(pageContextForPublicUsage), hook, pageContextForPublicUsage);
38
- return { ...hook, hookReturn };
39
- }));
40
- return hooksWithResult;
41
- }
42
- async function execHookDirectSingle(hook, pageContext, preparePageContextForPublicUsage) {
43
- const hooksWithResult = await execHookDirect([hook], pageContext, preparePageContextForPublicUsage);
44
- const { hookReturn } = hooksWithResult[0];
45
- assertUsage(hookReturn === undefined, `The ${hook.hookName}() hook defined by ${hook.hookFilePath} isn't allowed to return a value`);
46
- }
47
- async function execHookDirectSingleWithReturn(hook, pageContext, preparePageContextForPublicUsage) {
48
- const hooksWithResult = await execHookDirect([hook], pageContext, preparePageContextForPublicUsage);
49
- const { hookReturn } = hooksWithResult[0];
50
- return { hookReturn };
51
- }
52
75
  function isUserHookError(err) {
53
76
  if (!isObject(err))
54
77
  return false;
55
78
  return globalObject.userHookErrors.get(err) ?? false;
56
79
  }
57
- async function execHookDirectWithoutPageContext(hookFnCaller, hook) {
80
+ async function execHookWithoutPageContext(hookFnCaller, hook) {
58
81
  const { hookName, hookFilePath, hookTimeout } = hook;
59
- const hookReturn = await execHookDirectAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, null);
82
+ const hookReturn = await execHookAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, null);
60
83
  return hookReturn;
61
84
  }
62
- function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
85
+ function execHookAsync(hookFnCaller, hook, pageContextForPublicUsage) {
63
86
  const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn }, } = hook;
64
87
  let resolve;
65
88
  let reject;
@@ -103,7 +126,7 @@ function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
103
126
  })();
104
127
  return promise;
105
128
  }
106
- function execHookDirectSync(hook, pageContext, preparePageContextForPublicUsage) {
129
+ function execHookSync(hook, pageContext, preparePageContextForPublicUsage) {
107
130
  const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
108
131
  providePageContextInternal(pageContextForPublicUsage);
109
132
  const hookReturn = hook.hookFn(pageContextForPublicUsage);
@@ -0,0 +1,8 @@
1
+ export { executeGuardHook };
2
+ import { type PageContextExecuteHook } from '../hooks/execHook.js';
3
+ import type { GlobalContextInternal } from '../createGlobalContextShared.js';
4
+ declare function executeGuardHook<PageContext extends {
5
+ pageId: string;
6
+ } & {
7
+ _globalContext: GlobalContextInternal;
8
+ } & PageContextExecuteHook>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
@@ -1,9 +1,9 @@
1
- export { execHookGuard };
1
+ export { executeGuardHook };
2
2
  import { getHookFromPageContext, getHookTimeoutDefault } from '../hooks/getHook.js';
3
3
  import { assert, assertUsage, isCallable } from './utils.js';
4
- import { execHookDirectSingle } from '../hooks/execHook.js';
4
+ import { execHookSingle } from '../hooks/execHook.js';
5
5
  const errIntro = 'The guard() hook defined by';
6
- async function execHookGuard(pageContext, prepareForPublicUsage) {
6
+ async function executeGuardHook(pageContext, prepareForPublicUsage) {
7
7
  let hook;
8
8
  if (pageContext._globalContext._pageFilesAll.length > 0) {
9
9
  // TODO/v1-release: remove
@@ -17,7 +17,7 @@ async function execHookGuard(pageContext, prepareForPublicUsage) {
17
17
  }
18
18
  if (!hook)
19
19
  return;
20
- await execHookDirectSingle(hook, pageContext, prepareForPublicUsage);
20
+ await execHookSingle(hook, pageContext, prepareForPublicUsage);
21
21
  }
22
22
  function findPageGuard(pageId, pageFilesAll) {
23
23
  const pageRouteFile = pageFilesAll.find((p) => p.pageId === pageId && p.fileType === '.page.route');
@@ -1,6 +1,6 @@
1
- export { execHookOnBeforeRoute };
1
+ export { executeOnBeforeRouteHook };
2
2
  import type { PageContextForRoute, PageContextFromRoute } from './index.js';
3
- declare function execHookOnBeforeRoute(pageContext: PageContextForRoute): Promise<null | ({
3
+ declare function executeOnBeforeRouteHook(pageContext: PageContextForRoute): Promise<null | ({
4
4
  _routingProvidedByOnBeforeRouteHook: true;
5
5
  } & PageContextFromRoute) | {
6
6
  _routingProvidedByOnBeforeRouteHook: false;
@@ -1,11 +1,11 @@
1
- export { execHookOnBeforeRoute };
1
+ export { executeOnBeforeRouteHook };
2
2
  import { assertPageContextProvidedByUser } from '../assertPageContextProvidedByUser.js';
3
3
  import { assertUsage, hasProp, isObjectWithKeys, objectAssign, assertWarning, assertUsageUrlPathnameAbsolute, joinEnglish, assert, } from './utils.js';
4
4
  import { assertRouteParams, assertSyncRouting } from './resolveRouteFunction.js';
5
5
  import pc from '@brillout/picocolors';
6
- import { execHookDirectSync } from '../hooks/execHook.js';
6
+ import { execHookSync } from '../hooks/execHook.js';
7
7
  import { preparePageContextForPublicUsage, } from '../preparePageContextForPublicUsage.js';
8
- async function execHookOnBeforeRoute(pageContext) {
8
+ async function executeOnBeforeRouteHook(pageContext) {
9
9
  const pageContextFromOnBeforeRouteHook = {};
10
10
  if (!pageContext._globalContext._onBeforeRouteHook)
11
11
  return null;
@@ -34,9 +34,9 @@ async function execHookOnBeforeRoute(pageContext) {
34
34
  return pageContextFromOnBeforeRouteHook;
35
35
  }
36
36
  async function getPageContextFromHook(onBeforeRouteHook, pageContext) {
37
- let { hookReturn } = execHookDirectSync(onBeforeRouteHook, pageContext, preparePageContextForPublicUsage);
37
+ let { hookReturn } = execHookSync(onBeforeRouteHook, pageContext, preparePageContextForPublicUsage);
38
38
  assertSyncRouting(hookReturn, `The onBeforeRoute() hook ${onBeforeRouteHook.hookFilePath}`);
39
- // TODO/v1-release: make execHookOnBeforeRoute() and route() sync
39
+ // TODO/v1-release: make executeOnBeforeRouteHook() and route() sync
40
40
  hookReturn = await hookReturn;
41
41
  const errPrefix = `The onBeforeRoute() hook defined by ${onBeforeRouteHook.hookFilePath}`;
42
42
  assertUsage(hookReturn === null ||
@@ -9,16 +9,15 @@ import { assert, assertUsage, isPlainObject, objectAssign } from './utils.js';
9
9
  import { resolvePrecedence } from './resolvePrecedence.js';
10
10
  import { resolveRouteString } from './resolveRouteString.js';
11
11
  import { resolveRouteFunction } from './resolveRouteFunction.js';
12
- import { execHookOnBeforeRoute } from './execHookOnBeforeRoute.js';
12
+ import { executeOnBeforeRouteHook } from './executeOnBeforeRouteHook.js';
13
13
  import { debug } from './debug.js';
14
14
  import pc from '@brillout/picocolors';
15
- // TODO/next-major-release: make it sync
16
15
  async function route(pageContext, skipOnBeforeRouteHook) {
17
16
  debug('Pages routes:', pageContext._globalContext._pageRoutes);
18
17
  const pageContextFromRoute = {};
19
18
  // onBeforeRoute()
20
19
  if (!skipOnBeforeRouteHook) {
21
- const pageContextFromOnBeforeRouteHook = await execHookOnBeforeRoute(pageContext);
20
+ const pageContextFromOnBeforeRouteHook = await executeOnBeforeRouteHook(pageContext);
22
21
  if (pageContextFromOnBeforeRouteHook) {
23
22
  if (pageContextFromOnBeforeRouteHook._routingProvidedByOnBeforeRouteHook) {
24
23
  assert(pageContextFromOnBeforeRouteHook.pageId);
@@ -2,12 +2,12 @@ export { resolveRouteFunction };
2
2
  export { assertRouteParams };
3
3
  export { assertSyncRouting };
4
4
  export { warnDeprecatedAllowKey };
5
- import { execHookDirectSync } from '../hooks/execHook.js';
5
+ import { execHookSync } from '../hooks/execHook.js';
6
6
  import { preparePageContextForPublicUsage } from '../preparePageContextForPublicUsage.js';
7
7
  import { assert, assertUsage, assertWarning, hasProp, isPlainObject, isPromise } from './utils.js';
8
8
  import pc from '@brillout/picocolors';
9
9
  async function resolveRouteFunction(routeFunction, pageContext, routeFunctionFilePath) {
10
- let { hookReturn: result } = execHookDirectSync({
10
+ let { hookReturn: result } = execHookSync({
11
11
  hookFn: routeFunction,
12
12
  hookFilePath: routeFunctionFilePath,
13
13
  hookName: 'route',
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.232-commit-1690f53";
1
+ export declare const PROJECT_VERSION: "0.4.232";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.232-commit-1690f53';
2
+ export const PROJECT_VERSION = '0.4.232';
@@ -1,3 +1,2 @@
1
1
  // Copied from https://github.com/vitejs/vite/blob/d649daba7682791178b711d9a3e44a6b5d00990c/packages/vite/src/node/plugins/css.ts#L90-L91
2
- // spellcheck-ignore
3
2
  export const styleFileRE = /\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\?)/;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.232-commit-1690f53",
3
+ "version": "0.4.232",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -1,6 +0,0 @@
1
- export { execHookDataAndOnBeforeRender };
2
- import { type PageContextExecHookServer } from './execHookServer.js';
3
- declare function execHookDataAndOnBeforeRender(pageContext: {
4
- pageId: string;
5
- _pageContextAlreadyProvidedByOnPrerenderHook?: true;
6
- } & PageContextExecHookServer): Promise<void>;
@@ -1,8 +0,0 @@
1
- export { execHookGuard };
2
- import { type PageContextExecHook } from '../hooks/execHook.js';
3
- import type { GlobalContextInternal } from '../createGlobalContextShared.js';
4
- declare function execHookGuard<PageContext extends {
5
- pageId: string;
6
- } & {
7
- _globalContext: GlobalContextInternal;
8
- } & PageContextExecHook>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;