vike 0.4.228-commit-67e28cd → 0.4.228-commit-ae4784f

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/client/client-routing-runtime/globalContextClientSide.js +10 -0
  2. package/dist/cjs/client/client-routing-runtime/onLoad.js +10 -0
  3. package/dist/cjs/client/client-routing-runtime/utils.js +43 -0
  4. package/dist/cjs/client/server-routing-runtime/utils.js +0 -1
  5. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
  6. package/dist/cjs/node/prerender/runPrerender.js +8 -7
  7. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +8 -3
  8. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +73 -0
  9. package/dist/cjs/node/runtime/renderPage/executeHookGeneric.js +18 -0
  10. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
  11. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +2 -2
  12. package/dist/cjs/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +1 -17
  13. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +0 -65
  14. package/dist/cjs/node/runtime/renderPage.js +96 -75
  15. package/dist/cjs/shared/hooks/getHook.js +45 -27
  16. package/dist/cjs/shared/route/executeGuardHook.js +1 -1
  17. package/dist/cjs/shared/route/loadPageRoutes.js +1 -0
  18. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  19. package/dist/cjs/utils/objectAssign.js +2 -6
  20. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +3 -0
  21. package/dist/esm/client/client-routing-runtime/createPageContext.js +2 -0
  22. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +4 -3
  23. package/dist/esm/client/client-routing-runtime/globalContextClientSide.d.ts +5 -0
  24. package/dist/esm/client/client-routing-runtime/globalContextClientSide.js +8 -0
  25. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +8 -6
  26. package/dist/esm/client/client-routing-runtime/utils.d.ts +0 -1
  27. package/dist/esm/client/client-routing-runtime/utils.js +0 -1
  28. package/dist/esm/client/server-routing-runtime/utils.d.ts +0 -1
  29. package/dist/esm/client/server-routing-runtime/utils.js +0 -1
  30. package/dist/esm/client/shared/executeOnRenderClientHook.js +5 -4
  31. package/dist/esm/client/shared/removeFoucBuster.js +1 -0
  32. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
  33. package/dist/esm/node/prerender/runPrerender.js +9 -8
  34. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +5 -4
  35. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +8 -3
  36. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +85 -0
  37. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +71 -0
  38. package/dist/esm/node/runtime/renderPage/executeHookGeneric.d.ts +9 -0
  39. package/dist/esm/node/runtime/renderPage/executeHookGeneric.js +16 -0
  40. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +3 -3
  41. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +3 -3
  42. package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +1 -17
  43. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +15 -113
  44. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +1 -66
  45. package/dist/esm/node/runtime/renderPage.d.ts +74 -7
  46. package/dist/esm/node/runtime/renderPage.js +98 -77
  47. package/dist/esm/shared/hooks/getHook.d.ts +4 -2
  48. package/dist/esm/shared/hooks/getHook.js +47 -29
  49. package/dist/esm/shared/page-configs/Config.d.ts +6 -1
  50. package/dist/esm/shared/route/executeGuardHook.js +2 -2
  51. package/dist/esm/shared/route/loadPageRoutes.js +1 -0
  52. package/dist/esm/shared/types.d.ts +8 -6
  53. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  54. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  55. package/dist/esm/utils/objectAssign.js +2 -6
  56. package/package.json +1 -1
@@ -3,13 +3,13 @@ export { getRenderCount };
3
3
  export { disableClientRouting };
4
4
  export { firstRenderStartPromise };
5
5
  export { getPageContextClient };
6
- import { assert, isSameErrorMessage, objectAssign, redirectHard, getGlobalObject, executeHook, hasProp, augmentType, genPromise, isCallable, catchInfiniteLoop } from './utils.js';
6
+ import { assert, isSameErrorMessage, objectAssign, redirectHard, getGlobalObject, hasProp, augmentType, genPromise, isCallable, catchInfiniteLoop } from './utils.js';
7
7
  import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageContextFromHooks_isHydration, getPageContextFromHooks_serialized, setPageContextInitIsPassedToClient } from './getPageContextFromHooks.js';
8
8
  import { createPageContext } from './createPageContext.js';
9
9
  import { addLinkPrefetchHandlers, addLinkPrefetchHandlers_unwatch, addLinkPrefetchHandlers_watch, getPageContextPrefetched, populatePageContextPrefetchCache } from './prefetch.js';
10
10
  import { assertInfo, assertWarning, isReact } from './utils.js';
11
11
  import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
12
- import { assertHook, getHook } from '../../shared/hooks/getHook.js';
12
+ import { assertHook, getHookFromPageContext } from '../../shared/hooks/getHook.js';
13
13
  import { isErrorFetchingStaticAssets, loadUserFilesClientSide } from '../shared/loadUserFilesClientSide.js';
14
14
  import { pushHistoryState } from './history.js';
15
15
  import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
@@ -21,12 +21,14 @@ import { getErrorPageId } from '../../shared/error-page.js';
21
21
  import { setPageContextCurrent } from './getPageContextCurrent.js';
22
22
  import { getRouteStringParameterList } from '../../shared/route/resolveRouteString.js';
23
23
  import { getCurrentUrl } from '../shared/getCurrentUrl.js';
24
+ import { executeHook } from '../../shared/hooks/executeHook.js';
24
25
  const globalObject = getGlobalObject('client-routing-runtime/renderPageClientSide.ts', (() => {
25
26
  const { promise: firstRenderStartPromise, resolve: firstRenderStartPromiseResolve } = genPromise();
26
27
  return {
27
28
  renderCounter: 0,
28
29
  firstRenderStartPromise,
29
- firstRenderStartPromiseResolve
30
+ firstRenderStartPromiseResolve,
31
+ globalContext: {}
30
32
  };
31
33
  })());
32
34
  const { firstRenderStartPromise } = globalObject;
@@ -62,7 +64,7 @@ async function renderPageClientSide(renderArgs) {
62
64
  assertHook(previousPageContext, 'onPageTransitionStart');
63
65
  if (!globalObject.isTransitioning) {
64
66
  globalObject.isTransitioning = true;
65
- const onPageTransitionStartHook = getHook(previousPageContext, 'onPageTransitionStart');
67
+ const onPageTransitionStartHook = getHookFromPageContext(previousPageContext, 'onPageTransitionStart');
66
68
  if (onPageTransitionStartHook) {
67
69
  const hook = onPageTransitionStartHook;
68
70
  const { hookFn } = hook;
@@ -429,7 +431,7 @@ async function renderPageClientSide(renderArgs) {
429
431
  // onHydrationEnd()
430
432
  if (isFirstRender && !onRenderClientError) {
431
433
  assertHook(pageContext, 'onHydrationEnd');
432
- const hook = getHook(pageContext, 'onHydrationEnd');
434
+ const hook = getHookFromPageContext(pageContext, 'onHydrationEnd');
433
435
  if (hook) {
434
436
  const { hookFn } = hook;
435
437
  try {
@@ -452,7 +454,7 @@ async function renderPageClientSide(renderArgs) {
452
454
  globalObject.isTransitioning = undefined;
453
455
  assert(previousPageContext);
454
456
  assertHook(previousPageContext, 'onPageTransitionEnd');
455
- const hook = getHook(previousPageContext, 'onPageTransitionEnd');
457
+ const hook = getHookFromPageContext(previousPageContext, 'onPageTransitionEnd');
456
458
  if (hook) {
457
459
  const { hookFn } = hook;
458
460
  try {
@@ -1,6 +1,5 @@
1
1
  export * from '../../utils/assert.js';
2
2
  export * from '../../utils/assertSingleInstance.js';
3
- export * from '../../shared/hooks/executeHook.js';
4
3
  export * from '../../utils/getGlobalObject.js';
5
4
  export * from '../../utils/hasProp.js';
6
5
  export * from '../../utils/isBrowser.js';
@@ -4,7 +4,6 @@ import { onLoad } from './onLoad.js';
4
4
  onLoad();
5
5
  export * from '../../utils/assert.js';
6
6
  export * from '../../utils/assertSingleInstance.js';
7
- export * from '../../shared/hooks/executeHook.js';
8
7
  export * from '../../utils/getGlobalObject.js';
9
8
  export * from '../../utils/hasProp.js';
10
9
  export * from '../../utils/isBrowser.js';
@@ -1,6 +1,5 @@
1
1
  export * from '../../utils/assert.js';
2
2
  export * from '../../utils/assertSingleInstance.js';
3
- export * from '../../shared/hooks/executeHook.js';
4
3
  export * from '../../utils/checkType.js';
5
4
  export * from '../../utils/getGlobalObject.js';
6
5
  export * from '../../utils/hasProp.js';
@@ -4,7 +4,6 @@ import { onLoad } from './onLoad.js';
4
4
  onLoad();
5
5
  export * from '../../utils/assert.js';
6
6
  export * from '../../utils/assertSingleInstance.js';
7
- export * from '../../shared/hooks/executeHook.js';
8
7
  export * from '../../utils/checkType.js'; // Only used by Server Routing (not needed for Client Routing)
9
8
  export * from '../../utils/getGlobalObject.js';
10
9
  export * from '../../utils/hasProp.js';
@@ -1,18 +1,19 @@
1
1
  export { executeOnRenderClientHook };
2
- import { assert, assertUsage, executeHook } from '../server-routing-runtime/utils.js';
3
- import { getHook } from '../../shared/hooks/getHook.js';
2
+ import { assert, assertUsage } from '../server-routing-runtime/utils.js';
3
+ import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
4
4
  import { preparePageContextForUserConsumptionClientSide } from './preparePageContextForUserConsumptionClientSide.js';
5
+ import { executeHook } from '../../shared/hooks/executeHook.js';
5
6
  async function executeOnRenderClientHook(pageContext, isClientRouting) {
6
7
  const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide(pageContext, isClientRouting);
7
8
  let hook = null;
8
9
  let hookName;
9
10
  {
10
- const renderHook = getHook(pageContext, 'render');
11
+ const renderHook = getHookFromPageContext(pageContext, 'render');
11
12
  hook = renderHook;
12
13
  hookName = 'render';
13
14
  }
14
15
  {
15
- const renderHook = getHook(pageContext, 'onRenderClient');
16
+ const renderHook = getHookFromPageContext(pageContext, 'onRenderClient');
16
17
  if (renderHook) {
17
18
  hook = renderHook;
18
19
  hookName = 'onRenderClient';
@@ -6,6 +6,7 @@ import { assert } from './utils.js';
6
6
  // - https://github.com/rakkasjs/rakkasjs/blob/7d75ccc915e93bca04e6bab37dc6abdb68a85e4a/packages/rakkasjs/src/features/pages/middleware.tsx#L701
7
7
  // - https://github.com/remix-run/remix/issues/8830
8
8
  function removeFoucBuster() {
9
+ // In production removeFoucBuster() is expected to be have been removed by tree shaking
9
10
  assert(import.meta.env.DEV);
10
11
  let sleep = 2;
11
12
  setTimeout(runClean, sleep);
@@ -17,6 +17,11 @@ const configDefinitionsBuiltIn = {
17
17
  onPageTransitionEnd: {
18
18
  env: { client: true }
19
19
  },
20
+ onCreatePageContext: {
21
+ env: { server: true },
22
+ global: true,
23
+ cumulative: true
24
+ },
20
25
  onBeforeRender: {
21
26
  env: { server: true }
22
27
  },
@@ -5,7 +5,8 @@ export { runPrerender_forceExit };
5
5
  import path from 'path';
6
6
  import { route } from '../../shared/route/index.js';
7
7
  import { assert, assertUsage, assertWarning, hasProp, objectAssign, isObjectWithKeys, isCallable, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, onSetupPrerender, makePublicCopy, PROJECT_VERSION, preservePropertyGetters } from './utils.js';
8
- import { prerenderPage, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
8
+ import { prerenderPage } from '../runtime/renderPage/renderPageAlreadyRouted.js';
9
+ import { createPageContextServerSide } from '../runtime/renderPage/createPageContextServerSide.js';
9
10
  import pc from '@brillout/picocolors';
10
11
  import { cpus } from 'os';
11
12
  import { getGlobalContextInternal, initGlobalContext_runPrerender, setGlobalContext_isPrerendering } from '../runtime/globalContext.js';
@@ -109,10 +110,10 @@ async function runPrerender(options = {}, standaloneTrigger) {
109
110
  await callOnBeforePrerenderStartHooks(prerenderContext, globalContext, concurrencyLimit, doNotPrerenderList);
110
111
  // Create `pageContext` for each page with a static route
111
112
  const urlList = getUrlListFromPagesWithStaticRoute(globalContext, doNotPrerenderList);
112
- await createPageContextsForOnPrerenderStartHook(urlList, prerenderContext, globalContext, concurrencyLimit, false);
113
+ await createPageContexts(urlList, prerenderContext, globalContext, concurrencyLimit, false);
113
114
  // Create `pageContext` for 404 page
114
115
  const urlList404 = getUrlList404(globalContext);
115
- await createPageContextsForOnPrerenderStartHook(urlList404, prerenderContext, globalContext, concurrencyLimit, true);
116
+ await createPageContexts(urlList404, prerenderContext, globalContext, concurrencyLimit, true);
116
117
  // Allow user to duplicate the list of `pageContext` for i18n
117
118
  // https://vike.dev/onPrerenderStart
118
119
  await callOnPrerenderStartHook(prerenderContext, globalContext, concurrencyLimit);
@@ -257,7 +258,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, globalContext,
257
258
  }
258
259
  // Add result
259
260
  const providedByHook = { hookFilePath, hookName };
260
- const pageContextNew = await createPageContext(url, prerenderContext, globalContext, false, undefined, providedByHook);
261
+ const pageContextNew = await createPageContextPrerendering(url, prerenderContext, globalContext, false, undefined, providedByHook);
261
262
  prerenderContext.pageContexts.push(pageContextNew);
262
263
  if (pageContext) {
263
264
  objectAssign(pageContextNew, { _pageContextAlreadyProvidedByOnPrerenderHook: true });
@@ -303,22 +304,22 @@ function getUrlList404(globalContext) {
303
304
  }
304
305
  return urlList;
305
306
  }
306
- async function createPageContextsForOnPrerenderStartHook(urlList, prerenderContext, globalContext, concurrencyLimit, is404) {
307
+ async function createPageContexts(urlList, prerenderContext, globalContext, concurrencyLimit, is404) {
307
308
  await Promise.all(urlList.map(({ urlOriginal, pageId }) => concurrencyLimit(async () => {
308
309
  // Already included in a onBeforePrerenderStart() hook
309
310
  if (prerenderContext.pageContexts.find((pageContext) => isSameUrl(pageContext.urlOriginal, urlOriginal))) {
310
311
  return;
311
312
  }
312
- const pageContext = await createPageContext(urlOriginal, prerenderContext, globalContext, is404, pageId, null);
313
+ const pageContext = await createPageContextPrerendering(urlOriginal, prerenderContext, globalContext, is404, pageId, null);
313
314
  prerenderContext.pageContexts.push(pageContext);
314
315
  })));
315
316
  }
316
- async function createPageContext(urlOriginal, prerenderContext, globalContext, is404, pageId, providedByHook) {
317
+ async function createPageContextPrerendering(urlOriginal, prerenderContext, globalContext, is404, pageId, providedByHook) {
317
318
  const pageContextInit = {
318
319
  urlOriginal,
319
320
  ...prerenderContext.pageContextInit
320
321
  };
321
- const pageContext = await getPageContextInitEnhanced(pageContextInit, globalContext, true);
322
+ const pageContext = await createPageContextServerSide(pageContextInit, globalContext, { isPrerendering: true });
322
323
  assert(pageContext.isPrerendering === true);
323
324
  objectAssign(pageContext, {
324
325
  _urlHandler: null,
@@ -1,6 +1,7 @@
1
1
  export { createHttpResponsePage };
2
2
  export { createHttpResponsePageContextJson };
3
3
  export { createHttpResponseError };
4
+ export { createHttpResponseErrorWithoutGlobalContext };
4
5
  export { createHttpResponseRedirect };
5
6
  export { createHttpResponseFavicon404 };
6
7
  export { createHttpResponseBaseIsMissing };
@@ -13,6 +14,7 @@ import type { RedirectStatusCode, AbortStatusCode, UrlRedirect } from '../../../
13
14
  import { HttpResponseBody } from './getHttpResponseBody.js';
14
15
  import { type EarlyHint } from './getEarlyHints.js';
15
16
  import type { PageFile } from '../../../shared/getPageFiles.js';
17
+ import type { PageContextBegin } from '../renderPage.js';
16
18
  type HttpResponse = {
17
19
  statusCode: 200 | 404 | 500 | RedirectStatusCode | AbortStatusCode;
18
20
  headers: [string, string][];
@@ -30,11 +32,10 @@ declare function createHttpResponsePage(htmlRender: HtmlRender, renderHook: null
30
32
  }): Promise<HttpResponse>;
31
33
  declare function createHttpResponseFavicon404(): HttpResponse;
32
34
  declare function createHttpResponseBaseIsMissing(urlOriginal: string, baseServer: string): HttpResponse;
33
- declare function createHttpResponseError(pageContext: null | {
35
+ declare function createHttpResponseError(pageContext: {
34
36
  _pageFilesAll: PageFile[];
35
37
  _pageConfigs: PageConfigRuntime[];
36
38
  }): HttpResponse;
39
+ declare function createHttpResponseErrorWithoutGlobalContext(): HttpResponse;
37
40
  declare function createHttpResponsePageContextJson(pageContextSerialized: string): Promise<HttpResponse>;
38
- declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, pageContextInit: {
39
- urlOriginal: string;
40
- }): HttpResponse;
41
+ declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, pageContextInit: PageContextBegin): HttpResponse;
@@ -1,6 +1,7 @@
1
1
  export { createHttpResponsePage };
2
2
  export { createHttpResponsePageContextJson };
3
3
  export { createHttpResponseError };
4
+ export { createHttpResponseErrorWithoutGlobalContext };
4
5
  export { createHttpResponseRedirect };
5
6
  export { createHttpResponseFavicon404 };
6
7
  export { createHttpResponseBaseIsMissing };
@@ -64,9 +65,6 @@ function createHttpResponseBaseIsMissing(urlOriginal, baseServer) {
64
65
  }
65
66
  function createHttpResponseError(pageContext) {
66
67
  const reason = (() => {
67
- if (!pageContext) {
68
- return 'no error page (https://vike.dev/error-page) could be rendered';
69
- }
70
68
  const errorPageId = getErrorPageId(pageContext._pageFilesAll, pageContext._pageConfigs);
71
69
  if (errorPageId) {
72
70
  return "the error page (https://vike.dev/error-page) couldn't be rendered (for example if an error occurred while rendering the error page)";
@@ -75,6 +73,13 @@ function createHttpResponseError(pageContext) {
75
73
  return 'no error page (https://vike.dev/error-page) is defined, make sure to create one';
76
74
  }
77
75
  })();
76
+ return createHttpResponseError_(reason);
77
+ }
78
+ function createHttpResponseErrorWithoutGlobalContext() {
79
+ const reason = 'no error page (https://vike.dev/error-page) could be rendered';
80
+ return createHttpResponseError_(reason);
81
+ }
82
+ function createHttpResponseError_(reason) {
78
83
  const httpResponse = createHttpResponse(500, 'text/html;charset=utf-8', [], `<p>An error occurred.</p><script>console.log(${JSON.stringify(`This HTTP response was generated by Vike. Vike returned this response because ${reason}.`)})</script>`);
79
84
  return httpResponse;
80
85
  }
@@ -0,0 +1,85 @@
1
+ export { createPageContextServerSide };
2
+ export { createPageContextServerSideWithoutGlobalContext };
3
+ export type { PageContextServerSideCreated };
4
+ import type { GlobalContextInternal } from '../globalContext.js';
5
+ import type { PageContextInit } from '../renderPage.js';
6
+ type PageContextServerSideCreated = Awaited<ReturnType<typeof createPageContextServerSide>>;
7
+ declare function createPageContextServerSide(pageContextInit: PageContextInit, globalContext: GlobalContextInternal, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } }: {
8
+ isPrerendering: false;
9
+ ssr: {
10
+ urlHandler: null | ((url: string) => string);
11
+ isClientSideNavigation: boolean;
12
+ };
13
+ } | {
14
+ isPrerendering: true;
15
+ ssr?: undefined;
16
+ }): Promise<{
17
+ _isPageContextObject: boolean;
18
+ isClientSide: boolean;
19
+ isPrerendering: boolean;
20
+ } & Pick<import("../../../shared/types.js").PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
21
+ url?: string;
22
+ headers?: Record<string, string>;
23
+ } & {
24
+ _objectCreatedByVike: boolean;
25
+ _baseServer: string;
26
+ _baseAssets: string;
27
+ _includeAssetsImportedByServer: boolean;
28
+ _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
29
+ _pageConfigs: import("../../../__internal/index.js").PageConfig[];
30
+ _pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
31
+ _allPageIds: string[];
32
+ _pageRoutes: import("../../../__internal/index.js").PageRoutes;
33
+ _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
34
+ _globalContext: GlobalContextInternal;
35
+ /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
36
+ globalContext: Pick<{
37
+ viteConfigRuntime: import("../../plugin/shared/getViteConfigRuntime.js").ViteConfigRuntime;
38
+ config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
39
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
40
+ } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
41
+ pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
42
+ pageConfigs: import("../../../__internal/index.js").PageConfig[];
43
+ pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
44
+ allPageIds: string[];
45
+ pageRoutes: import("../../../__internal/index.js").PageRoutes;
46
+ onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
47
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
48
+ config: import("../../../types/index.js").ConfigResolved;
49
+ } & ({
50
+ isProduction: false;
51
+ isPrerendering: false;
52
+ viteConfig: import("vite").ResolvedConfig;
53
+ viteDevServer: import("vite").ViteDevServer;
54
+ assetsManifest: null;
55
+ } | ({
56
+ isProduction: true;
57
+ assetsManifest: import("../../shared/ViteManifest.js").ViteManifest;
58
+ viteDevServer: null;
59
+ } & ({
60
+ isPrerendering: false;
61
+ viteConfig: null;
62
+ } | {
63
+ isPrerendering: true;
64
+ usesClientRouter: boolean;
65
+ viteConfig: import("vite").ResolvedConfig;
66
+ })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig" | "viteConfigRuntime">;
67
+ _pageContextInit: PageContextInit;
68
+ _urlRewrite: null;
69
+ _urlHandler: ((url: string) => string) | null;
70
+ isClientSideNavigation: boolean;
71
+ } & {
72
+ urlParsed: import("../utils.js").UrlPublic;
73
+ urlPathname: string;
74
+ url: string;
75
+ } & {
76
+ headers: Record<string, string> | null;
77
+ }>;
78
+ declare function createPageContextServerSideWithoutGlobalContext(pageContextInit: PageContextInit): {
79
+ _isPageContextObject: boolean;
80
+ isClientSide: boolean;
81
+ isPrerendering: boolean;
82
+ } & Pick<import("../../../shared/types.js").PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
83
+ url?: string;
84
+ headers?: Record<string, string>;
85
+ };
@@ -0,0 +1,71 @@
1
+ export { createPageContextServerSide };
2
+ export { createPageContextServerSideWithoutGlobalContext };
3
+ import { assert, assertUsage, assertWarning, normalizeHeaders, objectAssign } from '../utils.js';
4
+ import { getPageContextUrlComputed } from '../../../shared/getPageContextUrlComputed.js';
5
+ import { executeHookGenericGlobalCumulative } from './executeHookGeneric.js';
6
+ async function createPageContextServerSide(pageContextInit, globalContext, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } = {
7
+ urlHandler: null,
8
+ isClientSideNavigation: false
9
+ } }) {
10
+ assert(pageContextInit.urlOriginal);
11
+ const pageContextCreated = createPageContext(pageContextInit, isPrerendering);
12
+ objectAssign(pageContextCreated, pageContextInit);
13
+ objectAssign(pageContextCreated, {
14
+ _objectCreatedByVike: true,
15
+ // The following is defined on `pageContext` because we can eventually make these non-global
16
+ _baseServer: globalContext.baseServer,
17
+ _baseAssets: globalContext.baseAssets,
18
+ // TODO/now: add meta.default
19
+ _includeAssetsImportedByServer: globalContext.config.includeAssetsImportedByServer ?? true,
20
+ // TODO/soon: use GloablContext instead
21
+ _pageFilesAll: globalContext.pageFilesAll,
22
+ _pageConfigs: globalContext.pageConfigs,
23
+ _pageConfigGlobal: globalContext.pageConfigGlobal,
24
+ _allPageIds: globalContext.allPageIds,
25
+ _pageRoutes: globalContext.pageRoutes,
26
+ _onBeforeRouteHook: globalContext.onBeforeRouteHook,
27
+ _globalContext: globalContext,
28
+ // TODO/now: add PageContext['globalContext']
29
+ /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
30
+ globalContext: globalContext.globalContext_public,
31
+ _pageContextInit: pageContextInit,
32
+ _urlRewrite: null,
33
+ _urlHandler: urlHandler,
34
+ isClientSideNavigation
35
+ });
36
+ // pageContext.urlParsed
37
+ const pageContextUrlComputed = getPageContextUrlComputed(pageContextCreated);
38
+ objectAssign(pageContextCreated, pageContextUrlComputed);
39
+ // pageContext.headers
40
+ {
41
+ let headers;
42
+ if (pageContextInit.headersOriginal) {
43
+ headers = normalizeHeaders(pageContextInit.headersOriginal);
44
+ assertUsage(!('headers' in pageContextInit), "You're defining pageContextInit.headersOriginal as well as pageContextInit.headers but you should only define pageContextInit.headersOriginal instead, see https://vike.dev/headers");
45
+ }
46
+ else if (pageContextInit.headers) {
47
+ headers = pageContextInit.headers;
48
+ // TODO/next-major-release: remove
49
+ assertWarning(false, 'Setting pageContextInit.headers is deprecated: set pageContextInit.headersOriginal instead, see https://vike.dev/headers', { onlyOnce: true });
50
+ }
51
+ else {
52
+ headers = null;
53
+ }
54
+ objectAssign(pageContextCreated, { headers });
55
+ }
56
+ await executeHookGenericGlobalCumulative('onCreatePageContext', globalContext, pageContextCreated);
57
+ return pageContextCreated;
58
+ }
59
+ function createPageContextServerSideWithoutGlobalContext(pageContextInit) {
60
+ const pageContext = createPageContext(pageContextInit, false);
61
+ return pageContext;
62
+ }
63
+ function createPageContext(pageContextInit, isPrerendering) {
64
+ const pageContext = {
65
+ _isPageContextObject: true,
66
+ isClientSide: false,
67
+ isPrerendering
68
+ };
69
+ objectAssign(pageContext, pageContextInit);
70
+ return pageContext;
71
+ }
@@ -0,0 +1,9 @@
1
+ export { executeHookGeneric };
2
+ export { executeHookGenericGlobalCumulative };
3
+ import type { PageConfigUserFriendlyOld } from '../../../shared/getPageFiles.js';
4
+ import { type HookName } from '../../../shared/hooks/getHook.js';
5
+ import type { HookNameGlobal } from '../../../shared/page-configs/Config.js';
6
+ import type { GlobalContextInternal } from '../globalContext.js';
7
+ import type { PageContextServerSideCreated } from './createPageContextServerSide.js';
8
+ declare function executeHookGeneric(hookName: HookName, pageContext: PageConfigUserFriendlyOld): Promise<void>;
9
+ declare function executeHookGenericGlobalCumulative(hookName: HookNameGlobal, globalContext: GlobalContextInternal, pageContext: PageContextServerSideCreated): Promise<void>;
@@ -0,0 +1,16 @@
1
+ export { executeHookGeneric }; // TO-DO/refactor: start using executeHookGeneric() and, eventually, prominently use it
2
+ export { executeHookGenericGlobalCumulative };
3
+ import { executeHook } from '../../../shared/hooks/executeHook.js';
4
+ import { getHookFromPageContext, getHookFromPageConfigGlobalCumulative } from '../../../shared/hooks/getHook.js';
5
+ async function executeHookGeneric(hookName, pageContext) {
6
+ const hook = getHookFromPageContext(pageContext, hookName);
7
+ if (!hook)
8
+ return;
9
+ await executeHook(() => hook.hookFn(pageContext), hook, pageContext);
10
+ }
11
+ async function executeHookGenericGlobalCumulative(hookName, globalContext, pageContext) {
12
+ const hooks = getHookFromPageConfigGlobalCumulative(globalContext.pageConfigGlobal, hookName);
13
+ await Promise.all(hooks.map(async (hook) => {
14
+ await executeHook(() => hook.hookFn(pageContext), hook, null);
15
+ }));
16
+ }
@@ -1,5 +1,5 @@
1
1
  export { executeOnBeforeRenderAndDataHooks };
2
- import { getHook } from '../../../shared/hooks/getHook.js';
2
+ import { getHookFromPageContext } from '../../../shared/hooks/getHook.js';
3
3
  import { preparePageContextForUserConsumptionServerSide } from './preparePageContextForUserConsumptionServerSide.js';
4
4
  import { assertOnBeforeRenderHookReturn } from '../../../shared/assertOnBeforeRenderHookReturn.js';
5
5
  import { executeHook } from '../../../shared/hooks/executeHook.js';
@@ -7,8 +7,8 @@ async function executeOnBeforeRenderAndDataHooks(pageContext) {
7
7
  if (pageContext._pageContextAlreadyProvidedByOnPrerenderHook) {
8
8
  return;
9
9
  }
10
- const dataHook = getHook(pageContext, 'data');
11
- const onBeforeRenderHook = getHook(pageContext, 'onBeforeRender');
10
+ const dataHook = getHookFromPageContext(pageContext, 'data');
11
+ const onBeforeRenderHook = getHookFromPageContext(pageContext, 'onBeforeRender');
12
12
  if (!dataHook && !onBeforeRenderHook) {
13
13
  return;
14
14
  }
@@ -1,6 +1,6 @@
1
1
  export { executeOnRenderHtmlHook };
2
2
  import { isDocumentHtml, renderDocumentHtml, dangerouslySkipEscape } from '../html/renderHtml.js';
3
- import { getHook } from '../../../shared/hooks/getHook.js';
3
+ import { getHookFromPageContext } from '../../../shared/hooks/getHook.js';
4
4
  import { assert, assertUsage, assertWarning, isObject, objectAssign, isPromise, isCallable } from '../utils.js';
5
5
  import { isStream } from '../html/stream.js';
6
6
  import { assertPageContextProvidedByUser } from '../../../shared/assertPageContextProvidedByUser.js';
@@ -36,12 +36,12 @@ function getRenderHook(pageContext) {
36
36
  {
37
37
  let hook;
38
38
  let hookName = undefined;
39
- hook = getHook(pageContext, 'onRenderHtml');
39
+ hook = getHookFromPageContext(pageContext, 'onRenderHtml');
40
40
  if (hook) {
41
41
  hookName = 'onRenderHtml';
42
42
  }
43
43
  else {
44
- hook = getHook(pageContext, 'render');
44
+ hook = getHookFromPageContext(pageContext, 'render');
45
45
  if (hook) {
46
46
  hookName = 'render';
47
47
  }
@@ -1,7 +1,6 @@
1
1
  export { retrieveAssetsDev };
2
2
  import { assert, styleFileRE } from '../../utils.js';
3
3
  async function retrieveAssetsDev(clientDependencies, viteDevServer) {
4
- const visitedModules = new Set();
5
4
  const assetUrls = new Set();
6
5
  await Promise.all(clientDependencies.map(async ({ id }) => {
7
6
  if (id.startsWith('@@vike'))
@@ -20,7 +19,7 @@ async function retrieveAssetsDev(clientDependencies, viteDevServer) {
20
19
  return;
21
20
  }
22
21
  assert(mod, { id });
23
- collectCss(mod, assetUrls, visitedModules);
22
+ collectCss(mod, assetUrls, new Set());
24
23
  }));
25
24
  return Array.from(assetUrls);
26
25
  }
@@ -50,9 +49,6 @@ function collectCss(mod, styleUrls, visitedModules, importer) {
50
49
  // Is this useful? Maybe for virtual modules that don't respect the \0 virtual module convention?
51
50
  styleUrls.add(`/@id/${mod.url}`);
52
51
  }
53
- /* Debug:
54
- logModule(mod)
55
- //*/
56
52
  }
57
53
  mod.importedModules.forEach((dep) => {
58
54
  collectCss(dep, styleUrls, visitedModules, mod);
@@ -67,15 +63,3 @@ function isStyle(mod) {
67
63
  // CSS of .vue files
68
64
  (mod.id && /\?vue&type=style/.test(mod.id)));
69
65
  }
70
- /*
71
- function logModule(mod: ModuleNode) {
72
- const redacted = 'redacted'
73
- console.log({
74
- ...mod,
75
- ssrModule: redacted,
76
- ssrTransformResult: redacted,
77
- importedModules: redacted,
78
- importers: redacted
79
- })
80
- }
81
- //*/