vike 0.4.232 → 0.4.233-commit-e534fd6

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 (61) hide show
  1. package/dist/cjs/node/prerender/runPrerender.js +9 -4
  2. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +20 -3
  3. package/dist/cjs/node/runtime/html/injectAssets/mergeScriptTags.js +7 -1
  4. package/dist/cjs/node/runtime/renderPage/{executeOnBeforeRenderAndDataHooks.js → execHookDataAndOnBeforeRender.js} +2 -2
  5. package/dist/cjs/node/runtime/renderPage/{executeOnRenderHtmlHook.js → execHookOnRenderHtml.js} +3 -3
  6. package/dist/cjs/node/runtime/renderPage/execHookServer.js +1 -4
  7. package/dist/cjs/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +18 -13
  8. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -11
  9. package/dist/cjs/node/runtime/renderPage.js +55 -48
  10. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +0 -2
  11. package/dist/cjs/shared/createPageContextShared.js +1 -3
  12. package/dist/cjs/shared/hooks/execHook.js +31 -54
  13. package/dist/cjs/shared/route/{executeGuardHook.js → execHookGuard.js} +3 -3
  14. package/dist/cjs/shared/route/{executeOnBeforeRouteHook.js → execHookOnBeforeRoute.js} +4 -4
  15. package/dist/cjs/shared/route/index.js +3 -2
  16. package/dist/cjs/shared/route/resolveRouteFunction.js +1 -1
  17. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  18. package/dist/cjs/utils/styleFileRE.js +1 -0
  19. package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.d.ts +2 -2
  20. package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.js +9 -9
  21. package/dist/esm/client/runtime-client-routing/renderPageClientSide.d.ts +1 -1
  22. package/dist/esm/client/runtime-client-routing/renderPageClientSide.js +97 -62
  23. package/dist/esm/client/runtime-server-routing/createPageContextClientSide.js +11 -4
  24. package/dist/esm/client/runtime-server-routing/entry.js +2 -2
  25. package/dist/esm/client/shared/{executeOnRenderClientHook.d.ts → execHookOnRenderClient.d.ts} +2 -2
  26. package/dist/esm/client/shared/{executeOnRenderClientHook.js → execHookOnRenderClient.js} +4 -4
  27. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.d.ts +12 -4
  28. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.js +4 -4
  29. package/dist/esm/node/prerender/runPrerender.d.ts +250 -4
  30. package/dist/esm/node/prerender/runPrerender.js +11 -6
  31. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +20 -3
  32. package/dist/esm/node/runtime/html/injectAssets/mergeScriptTags.js +7 -1
  33. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +1 -1
  34. package/dist/esm/node/runtime/renderPage/execHookDataAndOnBeforeRender.d.ts +6 -0
  35. package/dist/esm/node/runtime/renderPage/{executeOnBeforeRenderAndDataHooks.js → execHookDataAndOnBeforeRender.js} +2 -2
  36. package/dist/esm/node/runtime/renderPage/{executeOnRenderHtmlHook.d.ts → execHookOnRenderHtml.d.ts} +2 -2
  37. package/dist/esm/node/runtime/renderPage/{executeOnRenderHtmlHook.js → execHookOnRenderHtml.js} +4 -4
  38. package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +3 -3
  39. package/dist/esm/node/runtime/renderPage/execHookServer.js +1 -4
  40. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.d.ts +1 -1
  41. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.d.ts +15 -6
  42. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +18 -13
  43. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +2 -2
  44. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +13 -13
  45. package/dist/esm/node/runtime/renderPage.js +57 -50
  46. package/dist/esm/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +0 -2
  47. package/dist/esm/shared/createPageContextShared.js +1 -3
  48. package/dist/esm/shared/hooks/execHook.d.ts +14 -28
  49. package/dist/esm/shared/hooks/execHook.js +31 -54
  50. package/dist/esm/shared/route/execHookGuard.d.ts +8 -0
  51. package/dist/esm/shared/route/{executeGuardHook.js → execHookGuard.js} +4 -4
  52. package/dist/esm/shared/route/{executeOnBeforeRouteHook.d.ts → execHookOnBeforeRoute.d.ts} +2 -2
  53. package/dist/esm/shared/route/{executeOnBeforeRouteHook.js → execHookOnBeforeRoute.js} +5 -5
  54. package/dist/esm/shared/route/index.js +3 -2
  55. package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
  56. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  57. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  58. package/dist/esm/utils/styleFileRE.js +1 -0
  59. package/package.json +1 -1
  60. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +0 -6
  61. package/dist/esm/shared/route/executeGuardHook.d.ts +0 -8
@@ -2,16 +2,16 @@ export { renderPageAlreadyRouted };
2
2
  export { prerenderPage };
3
3
  import { getErrorPageId } from '../../../shared/error-page.js';
4
4
  import { getHtmlString } from '../html/renderHtml.js';
5
- import { assert, assertUsage, hasProp, objectAssign } from '../utils.js';
5
+ import { assert, assertUsage, augmentType, hasProp, objectAssign } from '../utils.js';
6
6
  import { getPageContextClientSerialized } from '../html/serializeContext.js';
7
7
  import { createHttpResponsePage, createHttpResponsePageContextJson } from './createHttpResponse.js';
8
- import { loadPageConfigsLazyServerSide, } from './loadPageConfigsLazyServerSide.js';
9
- import { executeOnRenderHtmlHook } from './executeOnRenderHtmlHook.js';
10
- import { executeOnBeforeRenderAndDataHooks } from './executeOnBeforeRenderAndDataHooks.js';
8
+ import { loadPageConfigsLazyServerSideAndExecHook, } from './loadPageConfigsLazyServerSide.js';
9
+ import { execHookOnRenderHtml } from './execHookOnRenderHtml.js';
10
+ import { execHookDataAndOnBeforeRender } from './execHookDataAndOnBeforeRender.js';
11
11
  import { logRuntimeError } from '../loggerRuntime.js';
12
12
  import { isNewError } from './isNewError.js';
13
13
  import { preparePageContextForPublicUsageServer } from './preparePageContextForPublicUsageServer.js';
14
- import { executeGuardHook } from '../../../shared/route/executeGuardHook.js';
14
+ import { execHookGuard } from '../../../shared/route/execHookGuard.js';
15
15
  import pc from '@brillout/picocolors';
16
16
  import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
17
17
  async function renderPageAlreadyRouted(pageContext) {
@@ -23,16 +23,16 @@ async function renderPageAlreadyRouted(pageContext) {
23
23
  assert(isError ===
24
24
  (pageContext.pageId ===
25
25
  getErrorPageId(pageContext._globalContext._pageFilesAll, pageContext._globalContext._pageConfigs)));
26
- objectAssign(pageContext, await loadPageConfigsLazyServerSide(pageContext));
26
+ augmentType(pageContext, await loadPageConfigsLazyServerSideAndExecHook(pageContext));
27
27
  if (!isError) {
28
- await executeGuardHook(pageContext, (pageContext) => preparePageContextForPublicUsageServer(pageContext));
28
+ await execHookGuard(pageContext, (pageContext) => preparePageContextForPublicUsageServer(pageContext));
29
29
  }
30
30
  if (!isError) {
31
- await executeOnBeforeRenderAndDataHooks(pageContext);
31
+ await execHookDataAndOnBeforeRender(pageContext);
32
32
  }
33
33
  else {
34
34
  try {
35
- await executeOnBeforeRenderAndDataHooks(pageContext);
35
+ await execHookDataAndOnBeforeRender(pageContext);
36
36
  }
37
37
  catch (err) {
38
38
  if (isNewError(err, pageContext.errorWhileRendering)) {
@@ -49,7 +49,7 @@ async function renderPageAlreadyRouted(pageContext) {
49
49
  objectAssign(pageContext, { httpResponse });
50
50
  return pageContext;
51
51
  }
52
- const renderHookResult = await executeOnRenderHtmlHook(pageContext);
52
+ const renderHookResult = await execHookOnRenderHtml(pageContext);
53
53
  const { htmlRender, renderHook } = renderHookResult;
54
54
  const httpResponse = await createHttpResponsePage(htmlRender, renderHook, pageContext);
55
55
  objectAssign(pageContext, { httpResponse });
@@ -62,10 +62,10 @@ async function prerenderPage(pageContext) {
62
62
  });
63
63
  /* Should we execute the guard() hook upon pre-rendering? Is there a use case for this?
64
64
  * - It isn't trivial to implement, as it requires to duplicate / factor out the isAbortError() handling
65
- await executeGuardHook(pageContext, (pageContext) => preparePageContextForPublicUsageServer(pageContext))
65
+ await execHookGuard(pageContext, (pageContext) => preparePageContextForPublicUsageServer(pageContext))
66
66
  */
67
- await executeOnBeforeRenderAndDataHooks(pageContext);
68
- const { htmlRender, renderHook } = await executeOnRenderHtmlHook(pageContext);
67
+ await execHookDataAndOnBeforeRender(pageContext);
68
+ const { htmlRender, renderHook } = await execHookOnRenderHtml(pageContext);
69
69
  assertUsage(htmlRender !== null, `Cannot pre-render ${pc.cyan(pageContext.urlOriginal)} because the ${renderHook.hookName}() hook defined by ${renderHook.hookFilePath} didn't return an HTML string.`);
70
70
  assert(pageContext.isClientSideNavigation === false);
71
71
  const documentHtml = await getHtmlString(htmlRender);
@@ -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, } from './utils.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';
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 { loadPageConfigsLazyServerSide } from './renderPage/loadPageConfigsLazyServerSide.js';
19
+ import { loadPageConfigsLazyServerSideAndExecHook } 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,59 +138,66 @@ async function renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRe
138
138
  else {
139
139
  assert(errNominalPage);
140
140
  assert(pageContextNominalPageSuccess === undefined);
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);
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;
157
160
  }
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
- }
161
+ else {
162
+ // - throw render(abortStatusCode) if not .pageContext.json request
167
163
  }
168
- let pageContextErrorPage;
169
- try {
170
- pageContextErrorPage = await renderPageAlreadyRouted(pageContextErrorPageInit);
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);
171
171
  }
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;
185
- }
186
- if (isNewError(errErrorPage, errNominalPage)) {
187
- logRuntimeError(errErrorPage, httpRequestId);
172
+ else {
173
+ objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
174
+ }
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;
188
190
  }
189
- const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
190
- return pageContextWithError;
191
+ // `throw redirect()` / `throw render(url)`
192
+ return handled.pageContextReturn;
191
193
  }
192
- return pageContextErrorPage;
194
+ if (isNewError(errErrorPage, errNominalPage)) {
195
+ logRuntimeError(errErrorPage, httpRequestId);
196
+ }
197
+ const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
198
+ return pageContextWithError;
193
199
  }
200
+ return pageContextErrorPage;
194
201
  }
195
202
  function logHttpRequest(urlOriginal, httpRequestId) {
196
203
  logRuntimeInfo?.(getRequestInfoMessage(urlOriginal), httpRequestId, 'info');
@@ -412,7 +419,7 @@ pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalCont
412
419
  objectAssign(pageContext, { pageId: errorPageId });
413
420
  objectAssign(pageContext, pageContextAbort);
414
421
  objectAssign(pageContext, pageContextErrorPageInit, true);
415
- objectAssign(pageContext, await loadPageConfigsLazyServerSide(pageContext));
422
+ augmentType(pageContext, await loadPageConfigsLazyServerSideAndExecHook(pageContext));
416
423
  // We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
417
424
  pageContextSerialized = getPageContextClientSerialized(pageContext);
418
425
  }
@@ -19,8 +19,6 @@ 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,
24
22
  cumulative: true,
25
23
  },
26
24
  onCreateGlobalContext: {
@@ -1,11 +1,9 @@
1
1
  export { createPageContextShared };
2
2
  export { createPageContextObject };
3
- import { execHookGlobal } from './hooks/execHook.js';
4
- import { preparePageContextForPublicUsage } from './preparePageContextForPublicUsage.js';
5
3
  import { changeEnumerable, objectAssign } from './utils.js';
4
+ // TODO/now: make this and parents sync
6
5
  async function createPageContextShared(pageContextCreated, pageConfigGlobal, vikeConfigPublicGlobal) {
7
6
  objectAssign(pageContextCreated, vikeConfigPublicGlobal);
8
- await execHookGlobal('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated, preparePageContextForPublicUsage);
9
7
  return pageContextCreated;
10
8
  }
11
9
  function createPageContextObject() {
@@ -1,15 +1,14 @@
1
1
  export { execHook };
2
- export { execHookSingle };
3
- export { execHookSingleWithReturn };
4
- export { execHookErrorHandling };
5
- export { execHooksErrorHandling };
6
- export { execHookWithoutPageContext };
7
2
  export { execHookGlobal };
8
- export { execHookSync };
3
+ export { execHookDirect };
4
+ export { execHookDirectSingle };
5
+ export { execHookDirectSingleWithReturn };
6
+ export { execHookDirectWithoutPageContext };
7
+ export { execHookDirectSync };
9
8
  export { getPageContext };
10
9
  export { providePageContext };
11
10
  export { isUserHookError };
12
- export type { PageContextExecuteHook };
11
+ export type { PageContextExecHook };
13
12
  import type { PageContextClient, PageContextServer } from '../../types/PageContext.js';
14
13
  import type { Hook, HookLoc } from './getHook.js';
15
14
  import type { VikeConfigPublicPageLazy } from '../getPageFiles.js';
@@ -19,34 +18,21 @@ import type { PageContextForPublicUsageServer } from '../../node/runtime/renderP
19
18
  import type { PageContextForPublicUsageClientShared } from '../../client/shared/preparePageContextForPublicUsageClientShared.js';
20
19
  import { type PageContextPrepareMinimum } from '../preparePageContextForPublicUsage.js';
21
20
  import type { GlobalContextPrepareMinimum } from '../prepareGlobalContextForPublicUsage.js';
22
- type PageContextExecuteHook = VikeConfigPublicPageLazy & PageContextForPublicUsage;
21
+ type PageContextExecHook = VikeConfigPublicPageLazy & PageContextForPublicUsage;
23
22
  type PageContextForPublicUsage = PageContextForPublicUsageServer | PageContextForPublicUsageClientShared;
24
23
  type HookWithResult = Hook & {
25
24
  hookReturn: unknown;
26
25
  };
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<{
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<{
29
31
  hookReturn: unknown;
30
32
  }>;
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>;
47
33
  declare function isUserHookError(err: unknown): false | HookLoc;
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): {
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): {
50
36
  hookReturn: unknown;
51
37
  };
52
38
  /**
@@ -1,11 +1,10 @@
1
1
  export { execHook };
2
- export { execHookSingle };
3
- export { execHookSingleWithReturn };
4
- export { execHookErrorHandling };
5
- export { execHooksErrorHandling };
6
- export { execHookWithoutPageContext };
7
2
  export { execHookGlobal };
8
- export { execHookSync };
3
+ export { execHookDirect };
4
+ export { execHookDirectSingle };
5
+ export { execHookDirectSingleWithReturn };
6
+ export { execHookDirectWithoutPageContext };
7
+ export { execHookDirectSync };
9
8
  export { getPageContext };
10
9
  export { providePageContext };
11
10
  export { isUserHookError };
@@ -19,70 +18,48 @@ const globalObject = getGlobalObject('utils/execHook.ts', {
19
18
  userHookErrors: new WeakMap(),
20
19
  pageContext: null,
21
20
  });
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
- }
36
21
  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) {
43
22
  const hooks = getHookFromPageContextNew(hookName, pageContext);
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
- }
23
+ return await execHookDirect(hooks, pageContext, preparePageContextForPublicUsage);
67
24
  }
68
25
  async function execHookGlobal(hookName, pageConfigGlobal, pageContext, hookArg, prepareForPublicUsage) {
69
26
  const hooks = getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName);
70
27
  const hookArgForPublicUsage = prepareForPublicUsage(hookArg);
71
28
  await Promise.all(hooks.map(async (hook) => {
72
- await execHookAsync(() => hook.hookFn(hookArgForPublicUsage), hook, pageContext);
29
+ await execHookDirectAsync(() => hook.hookFn(hookArgForPublicUsage), hook, pageContext);
73
30
  }));
74
31
  }
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
+ }
75
52
  function isUserHookError(err) {
76
53
  if (!isObject(err))
77
54
  return false;
78
55
  return globalObject.userHookErrors.get(err) ?? false;
79
56
  }
80
- async function execHookWithoutPageContext(hookFnCaller, hook) {
57
+ async function execHookDirectWithoutPageContext(hookFnCaller, hook) {
81
58
  const { hookName, hookFilePath, hookTimeout } = hook;
82
- const hookReturn = await execHookAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, null);
59
+ const hookReturn = await execHookDirectAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, null);
83
60
  return hookReturn;
84
61
  }
85
- function execHookAsync(hookFnCaller, hook, pageContextForPublicUsage) {
62
+ function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
86
63
  const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn }, } = hook;
87
64
  let resolve;
88
65
  let reject;
@@ -126,7 +103,7 @@ function execHookAsync(hookFnCaller, hook, pageContextForPublicUsage) {
126
103
  })();
127
104
  return promise;
128
105
  }
129
- function execHookSync(hook, pageContext, preparePageContextForPublicUsage) {
106
+ function execHookDirectSync(hook, pageContext, preparePageContextForPublicUsage) {
130
107
  const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
131
108
  providePageContextInternal(pageContextForPublicUsage);
132
109
  const hookReturn = hook.hookFn(pageContextForPublicUsage);
@@ -0,0 +1,8 @@
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>;
@@ -1,9 +1,9 @@
1
- export { executeGuardHook };
1
+ export { execHookGuard };
2
2
  import { getHookFromPageContext, getHookTimeoutDefault } from '../hooks/getHook.js';
3
3
  import { assert, assertUsage, isCallable } from './utils.js';
4
- import { execHookSingle } from '../hooks/execHook.js';
4
+ import { execHookDirectSingle } from '../hooks/execHook.js';
5
5
  const errIntro = 'The guard() hook defined by';
6
- async function executeGuardHook(pageContext, prepareForPublicUsage) {
6
+ async function execHookGuard(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 executeGuardHook(pageContext, prepareForPublicUsage) {
17
17
  }
18
18
  if (!hook)
19
19
  return;
20
- await execHookSingle(hook, pageContext, prepareForPublicUsage);
20
+ await execHookDirectSingle(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 { executeOnBeforeRouteHook };
1
+ export { execHookOnBeforeRoute };
2
2
  import type { PageContextForRoute, PageContextFromRoute } from './index.js';
3
- declare function executeOnBeforeRouteHook(pageContext: PageContextForRoute): Promise<null | ({
3
+ declare function execHookOnBeforeRoute(pageContext: PageContextForRoute): Promise<null | ({
4
4
  _routingProvidedByOnBeforeRouteHook: true;
5
5
  } & PageContextFromRoute) | {
6
6
  _routingProvidedByOnBeforeRouteHook: false;
@@ -1,11 +1,11 @@
1
- export { executeOnBeforeRouteHook };
1
+ export { execHookOnBeforeRoute };
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 { execHookSync } from '../hooks/execHook.js';
6
+ import { execHookDirectSync } from '../hooks/execHook.js';
7
7
  import { preparePageContextForPublicUsage, } from '../preparePageContextForPublicUsage.js';
8
- async function executeOnBeforeRouteHook(pageContext) {
8
+ async function execHookOnBeforeRoute(pageContext) {
9
9
  const pageContextFromOnBeforeRouteHook = {};
10
10
  if (!pageContext._globalContext._onBeforeRouteHook)
11
11
  return null;
@@ -34,9 +34,9 @@ async function executeOnBeforeRouteHook(pageContext) {
34
34
  return pageContextFromOnBeforeRouteHook;
35
35
  }
36
36
  async function getPageContextFromHook(onBeforeRouteHook, pageContext) {
37
- let { hookReturn } = execHookSync(onBeforeRouteHook, pageContext, preparePageContextForPublicUsage);
37
+ let { hookReturn } = execHookDirectSync(onBeforeRouteHook, pageContext, preparePageContextForPublicUsage);
38
38
  assertSyncRouting(hookReturn, `The onBeforeRoute() hook ${onBeforeRouteHook.hookFilePath}`);
39
- // TODO/v1-release: make executeOnBeforeRouteHook() and route() sync
39
+ // TODO/v1-release: make execHookOnBeforeRoute() 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,15 +9,16 @@ 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 { executeOnBeforeRouteHook } from './executeOnBeforeRouteHook.js';
12
+ import { execHookOnBeforeRoute } from './execHookOnBeforeRoute.js';
13
13
  import { debug } from './debug.js';
14
14
  import pc from '@brillout/picocolors';
15
+ // TODO/next-major-release: make it sync
15
16
  async function route(pageContext, skipOnBeforeRouteHook) {
16
17
  debug('Pages routes:', pageContext._globalContext._pageRoutes);
17
18
  const pageContextFromRoute = {};
18
19
  // onBeforeRoute()
19
20
  if (!skipOnBeforeRouteHook) {
20
- const pageContextFromOnBeforeRouteHook = await executeOnBeforeRouteHook(pageContext);
21
+ const pageContextFromOnBeforeRouteHook = await execHookOnBeforeRoute(pageContext);
21
22
  if (pageContextFromOnBeforeRouteHook) {
22
23
  if (pageContextFromOnBeforeRouteHook._routingProvidedByOnBeforeRouteHook) {
23
24
  assert(pageContextFromOnBeforeRouteHook.pageId);
@@ -2,12 +2,12 @@ export { resolveRouteFunction };
2
2
  export { assertRouteParams };
3
3
  export { assertSyncRouting };
4
4
  export { warnDeprecatedAllowKey };
5
- import { execHookSync } from '../hooks/execHook.js';
5
+ import { execHookDirectSync } 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 } = execHookSync({
10
+ let { hookReturn: result } = execHookDirectSync({
11
11
  hookFn: routeFunction,
12
12
  hookFilePath: routeFunctionFilePath,
13
13
  hookName: 'route',
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.232";
1
+ export declare const PROJECT_VERSION: "0.4.233-commit-e534fd6";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.232';
2
+ export const PROJECT_VERSION = '0.4.233-commit-e534fd6';
@@ -1,2 +1,3 @@
1
1
  // Copied from https://github.com/vitejs/vite/blob/d649daba7682791178b711d9a3e44a6b5d00990c/packages/vite/src/node/plugins/css.ts#L90-L91
2
+ // spellcheck-ignore
2
3
  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",
3
+ "version": "0.4.233-commit-e534fd6",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -1,6 +0,0 @@
1
- export { executeOnBeforeRenderAndDataHooks };
2
- import { type PageContextExecuteHookServer } from './execHookServer.js';
3
- declare function executeOnBeforeRenderAndDataHooks(pageContext: {
4
- pageId: string;
5
- _pageContextAlreadyProvidedByOnPrerenderHook?: true;
6
- } & PageContextExecuteHookServer): Promise<void>;
@@ -1,8 +0,0 @@
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>;