vike 0.4.228-commit-c2f6e1f → 0.4.228-commit-8d90991

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 (115) hide show
  1. package/dist/cjs/__internal/index.js +2 -2
  2. package/dist/cjs/client/client-routing-runtime/globalContext.js +49 -0
  3. package/dist/cjs/client/server-routing-runtime/globalContext.js +41 -0
  4. package/dist/cjs/client/shared/createGetGlobalContext.js +31 -0
  5. package/dist/cjs/client/shared/getJsonSerializedInHtml.js +31 -0
  6. package/dist/cjs/client/shared/utils.js +21 -0
  7. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +1 -0
  8. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
  9. package/dist/cjs/node/prerender/runPrerender.js +42 -40
  10. package/dist/cjs/node/prerender/utils.js +1 -1
  11. package/dist/cjs/node/runtime/globalContext.js +87 -119
  12. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +18 -5
  13. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +2 -2
  14. package/dist/cjs/node/runtime/html/propKeys.js +47 -0
  15. package/dist/cjs/node/runtime/html/renderHtml.js +1 -1
  16. package/dist/cjs/node/runtime/html/{serializePageContextClientSide.js → serializeContext.js} +37 -67
  17. package/dist/cjs/node/runtime/renderPage/analyzePage.js +1 -1
  18. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +14 -13
  19. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +2 -2
  20. package/dist/cjs/node/runtime/renderPage/handleErrorWithoutErrorPage.js +1 -1
  21. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  22. package/dist/cjs/node/runtime/renderPage/log404/index.js +1 -1
  23. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
  24. package/dist/cjs/node/runtime/renderPage.js +10 -10
  25. package/dist/cjs/node/runtime/utils.js +1 -1
  26. package/dist/cjs/shared/createGlobalContextShared.js +45 -0
  27. package/dist/cjs/shared/createPageContextShared.js +2 -2
  28. package/dist/cjs/{node/runtime/renderPage → shared/hooks}/executeHookGeneric.js +4 -4
  29. package/dist/cjs/shared/htmlElementIds.js +5 -0
  30. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  31. package/dist/cjs/utils/catchInfiniteLoop.js +3 -3
  32. package/dist/cjs/utils/getPublicProxy.js +27 -0
  33. package/dist/cjs/utils/objectAssign.js +5 -5
  34. package/dist/cjs/utils/objectReplace.js +4 -4
  35. package/dist/esm/__internal/index.js +2 -2
  36. package/dist/esm/client/client-routing-runtime/{createPageContextClientSide.d.ts → createPageContext.d.ts} +17 -8
  37. package/dist/esm/client/client-routing-runtime/{createPageContextClientSide.js → createPageContext.js} +14 -16
  38. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +1 -1
  39. package/dist/esm/client/client-routing-runtime/globalContext.d.ts +16 -0
  40. package/dist/esm/client/client-routing-runtime/globalContext.js +13 -0
  41. package/dist/esm/client/client-routing-runtime/prefetch.js +1 -1
  42. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +2 -3
  43. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +13 -4
  44. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +16 -15
  45. package/dist/esm/client/server-routing-runtime/globalContext.d.ts +13 -0
  46. package/dist/esm/client/server-routing-runtime/globalContext.js +5 -0
  47. package/dist/esm/client/shared/createGetGlobalContext.d.ts +11 -0
  48. package/dist/esm/client/shared/createGetGlobalContext.js +29 -0
  49. package/dist/esm/client/shared/{getPageContextSerializedInHtml.d.ts → getJsonSerializedInHtml.d.ts} +2 -0
  50. package/dist/esm/client/shared/getJsonSerializedInHtml.js +29 -0
  51. package/dist/esm/client/shared/utils.d.ts +3 -0
  52. package/dist/esm/client/shared/utils.js +3 -0
  53. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +1 -0
  54. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
  55. package/dist/esm/node/prerender/runPrerender.d.ts +300 -5
  56. package/dist/esm/node/prerender/runPrerender.js +43 -41
  57. package/dist/esm/node/prerender/utils.d.ts +1 -1
  58. package/dist/esm/node/prerender/utils.js +1 -1
  59. package/dist/esm/node/runtime/globalContext.d.ts +393 -46
  60. package/dist/esm/node/runtime/globalContext.js +88 -120
  61. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +18 -5
  62. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +2 -2
  63. package/dist/esm/node/runtime/html/injectAssets.d.ts +1 -1
  64. package/dist/esm/node/runtime/html/propKeys.d.ts +8 -0
  65. package/dist/esm/node/runtime/html/propKeys.js +45 -0
  66. package/dist/esm/node/runtime/html/renderHtml.js +1 -1
  67. package/dist/esm/node/runtime/html/{serializePageContextClientSide.d.ts → serializeContext.d.ts} +7 -6
  68. package/dist/esm/node/runtime/html/{serializePageContextClientSide.js → serializeContext.js} +36 -67
  69. package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
  70. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +95 -35
  71. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +14 -13
  72. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +1 -1
  73. package/dist/esm/node/runtime/renderPage/getPageAssets.js +2 -2
  74. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.js +1 -1
  75. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  76. package/dist/esm/node/runtime/renderPage/log404/index.js +1 -1
  77. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
  78. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +186 -64
  79. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
  80. package/dist/esm/node/runtime/renderPage.d.ts +95 -34
  81. package/dist/esm/node/runtime/renderPage.js +10 -10
  82. package/dist/esm/node/runtime/utils.d.ts +1 -1
  83. package/dist/esm/node/runtime/utils.js +1 -1
  84. package/dist/esm/shared/VikeNamespace.d.ts +32 -10
  85. package/dist/esm/shared/createGlobalContextShared.d.ts +25 -0
  86. package/dist/esm/shared/createGlobalContextShared.js +43 -0
  87. package/dist/esm/shared/createPageContextShared.js +2 -2
  88. package/dist/esm/shared/hooks/executeHookGeneric.d.ts +8 -0
  89. package/dist/esm/{node/runtime/renderPage → shared/hooks}/executeHookGeneric.js +4 -4
  90. package/dist/esm/shared/htmlElementIds.d.ts +2 -0
  91. package/dist/esm/shared/htmlElementIds.js +2 -0
  92. package/dist/esm/shared/page-configs/Config.d.ts +7 -2
  93. package/dist/esm/shared/types.d.ts +20 -13
  94. package/dist/esm/types/index.d.ts +1 -5
  95. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  96. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  97. package/dist/esm/utils/catchInfiniteLoop.js +4 -4
  98. package/dist/esm/utils/getGlobalObject.d.ts +1 -1
  99. package/dist/esm/utils/getPublicProxy.d.ts +2 -0
  100. package/dist/esm/utils/getPublicProxy.js +25 -0
  101. package/dist/esm/utils/objectAssign.d.ts +1 -1
  102. package/dist/esm/utils/objectAssign.js +5 -5
  103. package/dist/esm/utils/objectReplace.d.ts +1 -1
  104. package/dist/esm/utils/objectReplace.js +4 -4
  105. package/package.json +2 -2
  106. package/dist/cjs/client/client-routing-runtime/globalContextClientSide.js +0 -10
  107. package/dist/cjs/client/client-routing-runtime/onLoad.js +0 -10
  108. package/dist/cjs/client/client-routing-runtime/utils.js +0 -43
  109. package/dist/cjs/utils/makePublicCopy.js +0 -32
  110. package/dist/esm/client/client-routing-runtime/globalContextClientSide.d.ts +0 -5
  111. package/dist/esm/client/client-routing-runtime/globalContextClientSide.js +0 -8
  112. package/dist/esm/client/shared/getPageContextSerializedInHtml.js +0 -20
  113. package/dist/esm/node/runtime/renderPage/executeHookGeneric.d.ts +0 -8
  114. package/dist/esm/utils/makePublicCopy.d.ts +0 -3
  115. package/dist/esm/utils/makePublicCopy.js +0 -30
@@ -2,7 +2,7 @@ export { renderPage };
2
2
  export { renderPage_addAsyncHookwrapper };
3
3
  export type { PageContextInit };
4
4
  export type { PageContextBegin };
5
- import { type GlobalContextInternal } from './globalContext.js';
5
+ import { type GlobalContextServer, type GlobalContextInternal } from './globalContext.js';
6
6
  import { type HttpResponse } from './renderPage/createHttpResponse.js';
7
7
  import type { PageContextServer } from '../../types/index.js';
8
8
  import type { PageContextBuiltInServerInternal } from '../../shared/types.js';
@@ -18,13 +18,106 @@ declare let asyncHookWrapper: <PageContext>(_httpRequestId: number, ret: () => P
18
18
  pageContextReturn: Awaited<PageContext>;
19
19
  }>;
20
20
  declare function renderPage_addAsyncHookwrapper(wrapper: typeof asyncHookWrapper): void;
21
- declare function getPageContextBegin(pageContextInit: PageContextInit, globalContext: GlobalContextInternal, httpRequestId: number): Promise<{
21
+ declare function getPageContextBegin(pageContextInit: PageContextInit, globalContext: GlobalContextInternal, globalContext_public: GlobalContextServer, httpRequestId: number): Promise<{
22
22
  isClientSide: boolean;
23
23
  isPrerendering: boolean;
24
24
  } & Pick<PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
25
25
  /** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
26
26
  /** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
27
27
  } & {
28
+ globalContext: GlobalContextServer;
29
+ _globalContext: {
30
+ _virtualFileExports: unknown;
31
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
32
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
33
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
34
+ _allPageIds: string[];
35
+ config: import("../../types/index.js").ConfigResolved;
36
+ pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
37
+ } & ({
38
+ _isProduction: false;
39
+ _isPrerendering: false;
40
+ assetsManifest: null;
41
+ _viteDevServer: import("vite").ViteDevServer;
42
+ viteConfig: import("vite").ResolvedConfig;
43
+ viteConfigRuntime: {
44
+ root: string;
45
+ build: {
46
+ outDir: string;
47
+ };
48
+ _baseViteOriginal: string;
49
+ vitePluginServerEntry: {
50
+ inject: boolean | undefined;
51
+ };
52
+ };
53
+ baseServer: string;
54
+ baseAssets: string;
55
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
56
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
57
+ _virtualFileExports: unknown;
58
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
59
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
60
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
61
+ _allPageIds: string[];
62
+ config: import("../../types/index.js").ConfigResolved;
63
+ pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
64
+ } | {
65
+ _isPrerendering: true;
66
+ viteConfig: import("vite").ResolvedConfig;
67
+ _isProduction: true;
68
+ assetsManifest: import("../shared/ViteManifest.js").ViteManifest;
69
+ _viteDevServer: null;
70
+ viteConfigRuntime: {
71
+ root: string;
72
+ build: {
73
+ outDir: string;
74
+ };
75
+ _baseViteOriginal: string;
76
+ vitePluginServerEntry: {
77
+ inject: boolean | undefined;
78
+ };
79
+ };
80
+ _usesClientRouter: boolean;
81
+ baseServer: string;
82
+ baseAssets: string;
83
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
84
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
85
+ _virtualFileExports: unknown;
86
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
87
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
88
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
89
+ _allPageIds: string[];
90
+ config: import("../../types/index.js").ConfigResolved;
91
+ pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
92
+ } | {
93
+ _isPrerendering: false;
94
+ viteConfig: null;
95
+ _isProduction: true;
96
+ assetsManifest: import("../shared/ViteManifest.js").ViteManifest;
97
+ _viteDevServer: null;
98
+ viteConfigRuntime: {
99
+ root: string;
100
+ build: {
101
+ outDir: string;
102
+ };
103
+ _baseViteOriginal: string;
104
+ vitePluginServerEntry: {
105
+ inject: boolean | undefined;
106
+ };
107
+ };
108
+ _usesClientRouter: boolean;
109
+ baseServer: string;
110
+ baseAssets: string;
111
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
112
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
113
+ _virtualFileExports: unknown;
114
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
115
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
116
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
117
+ _allPageIds: string[];
118
+ config: import("../../types/index.js").ConfigResolved;
119
+ pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
120
+ });
28
121
  _baseServer: string;
29
122
  _baseAssets: string;
30
123
  _includeAssetsImportedByServer: boolean;
@@ -34,38 +127,6 @@ declare function getPageContextBegin(pageContextInit: PageContextInit, globalCon
34
127
  _allPageIds: string[];
35
128
  _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
36
129
  _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
37
- _globalContext: GlobalContextInternal;
38
- globalContext: Pick<{
39
- viteConfigRuntime: import("../plugin/shared/getViteConfigRuntime.js").ViteConfigRuntime;
40
- config: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
41
- pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
42
- } & import("../shared/resolveBase.js").BaseUrlsResolved & ({
43
- pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
44
- pageConfigs: import("../../__internal/index.js").PageConfig[];
45
- pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
46
- allPageIds: string[];
47
- pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
48
- onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
49
- pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
50
- config: import("../../types/index.js").ConfigResolved;
51
- } & ({
52
- isProduction: false;
53
- isPrerendering: false;
54
- viteConfig: import("vite").ResolvedConfig;
55
- viteDevServer: import("vite").ViteDevServer;
56
- assetsManifest: null;
57
- } | ({
58
- isProduction: true;
59
- assetsManifest: import("../shared/ViteManifest.js").ViteManifest;
60
- viteDevServer: null;
61
- } & ({
62
- isPrerendering: false;
63
- viteConfig: null;
64
- } | {
65
- isPrerendering: true;
66
- usesClientRouter: boolean;
67
- viteConfig: import("vite").ResolvedConfig;
68
- })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig" | "viteConfigRuntime">;
69
130
  _pageContextInit: PageContextInit;
70
131
  _urlRewrite: null;
71
132
  _urlHandler: ((url: string) => string) | null;
@@ -14,7 +14,7 @@ import { assertArguments } from './renderPage/assertArguments.js';
14
14
  import { log404 } from './renderPage/log404/index.js';
15
15
  import { isVikeConfigInvalid } from './renderPage/isVikeConfigInvalid.js';
16
16
  import pc from '@brillout/picocolors';
17
- import { serializePageContextAbort, serializePageContextClientSide } from './html/serializePageContextClientSide.js';
17
+ import { getPageContextClientSerializedAbort, getPageContextClientSerialized } from './html/serializeContext.js';
18
18
  import { getErrorPageId } from '../../shared/error-page.js';
19
19
  import { handleErrorWithoutErrorPage } from './renderPage/handleErrorWithoutErrorPage.js';
20
20
  import { loadUserFilesServerSide } from './renderPage/loadUserFilesServerSide.js';
@@ -76,8 +76,8 @@ async function renderPagePrepare(pageContextInit, httpRequestId) {
76
76
  else {
77
77
  // `globalContext` now contains the entire Vike config and getVikeConfig() isn't called anymore for this request.
78
78
  }
79
- const globalContext = await getGlobalContextInternal();
80
- const pageContextBegin = await getPageContextBegin(pageContextInit, globalContext, httpRequestId);
79
+ const { globalContext, globalContext_public } = await getGlobalContextInternal();
80
+ const pageContextBegin = await getPageContextBegin(pageContextInit, globalContext, globalContext_public, httpRequestId);
81
81
  // Check Base URL
82
82
  {
83
83
  const pageContextHttpResponse = await checkBaseUrl(pageContextBegin, globalContext);
@@ -154,7 +154,7 @@ async function renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRe
154
154
  Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
155
155
  }
156
156
  {
157
- const errorPageId = getErrorPageId(globalContext.pageFilesAll, globalContext.pageConfigs);
157
+ const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
158
158
  if (!errorPageId) {
159
159
  objectAssign(pageContextErrorPageInit, { pageId: null });
160
160
  return handleErrorWithoutErrorPage(pageContextErrorPageInit);
@@ -299,9 +299,9 @@ async function getPageContextErrorPageInit(pageContextBegin, errNominalPage, pag
299
299
  assert(pageContext.errorWhileRendering);
300
300
  return pageContext;
301
301
  }
302
- async function getPageContextBegin(pageContextInit, globalContext, httpRequestId) {
302
+ async function getPageContextBegin(pageContextInit, globalContext, globalContext_public, httpRequestId) {
303
303
  const { isClientSideNavigation, _urlHandler } = handlePageContextUrl(pageContextInit.urlOriginal);
304
- const pageContextBegin = await createPageContextServerSide(pageContextInit, globalContext, {
304
+ const pageContextBegin = await createPageContextServerSide(pageContextInit, globalContext, globalContext_public, {
305
305
  isPrerendering: false,
306
306
  ssr: {
307
307
  urlHandler: _urlHandler,
@@ -397,12 +397,12 @@ function normalize(url) {
397
397
  async function handleAbortError(errAbort, pageContextsFromRewrite, pageContextBegin,
398
398
  // handleAbortError() creates a new pageContext object and we don't merge pageContextNominalPageBegin to it: we only use some pageContextNominalPageBegin information.
399
399
  pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext) {
400
- logAbortErrorHandled(errAbort, globalContext.isProduction, pageContextNominalPageBegin);
400
+ logAbortErrorHandled(errAbort, globalContext._isProduction, pageContextNominalPageBegin);
401
401
  const pageContextAbort = errAbort._pageContextAbort;
402
402
  let pageContextSerialized;
403
403
  if (pageContextNominalPageBegin.isClientSideNavigation) {
404
404
  if (pageContextAbort.abortStatusCode) {
405
- const errorPageId = getErrorPageId(globalContext.pageFilesAll, globalContext.pageConfigs);
405
+ const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
406
406
  const abortCall = pageContextAbort._abortCall;
407
407
  assert(abortCall);
408
408
  assertUsage(errorPageId, `You called ${pc.cyan(abortCall)} but you didn't define an error page, make sure to define one https://vike.dev/error-page`);
@@ -412,10 +412,10 @@ pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalCont
412
412
  objectAssign(pageContext, pageContextErrorPageInit, true);
413
413
  objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
414
414
  // We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
415
- pageContextSerialized = serializePageContextClientSide(pageContext);
415
+ pageContextSerialized = getPageContextClientSerialized(pageContext);
416
416
  }
417
417
  else {
418
- pageContextSerialized = serializePageContextAbort(pageContextAbort);
418
+ pageContextSerialized = getPageContextClientSerializedAbort(pageContextAbort);
419
419
  }
420
420
  const httpResponse = await createHttpResponsePageContextJson(pageContextSerialized);
421
421
  const pageContextReturn = { httpResponse };
@@ -54,5 +54,5 @@ export * from '../../utils/isVikeReactApp.js';
54
54
  export * from '../../utils/getPropAccessNotation.js';
55
55
  export * from '../../utils/PROJECT_VERSION.js';
56
56
  export * from '../../utils/genPromise.js';
57
- export * from '../../utils/makePublicCopy.js';
57
+ export * from '../../utils/getPublicProxy.js';
58
58
  export * from '../../utils/augmentType.js';
@@ -58,5 +58,5 @@ export * from '../../utils/isVikeReactApp.js';
58
58
  export * from '../../utils/getPropAccessNotation.js';
59
59
  export * from '../../utils/PROJECT_VERSION.js';
60
60
  export * from '../../utils/genPromise.js';
61
- export * from '../../utils/makePublicCopy.js';
61
+ export * from '../../utils/getPublicProxy.js';
62
62
  export * from '../../utils/augmentType.js';
@@ -3,26 +3,30 @@ export type { VikePackages };
3
3
  declare global {
4
4
  /** Refine Vike types. */
5
5
  namespace Vike {
6
- /** Extend and/or refine the `Config` type (`import type { Config } from 'vike/types'`).
7
- *
8
- * For example:
9
- * - You can refine the type of `Config['Page']`.
10
- * - You can define the type of custom configurations created with `config.meta` (https://vike.dev/meta)
6
+ /** Extend the `Config` type (`import type { Config } from 'vike/types'`).
11
7
  *
12
8
  * https://vike.dev/meta#typescript
13
9
  */
14
10
  interface Config {
15
11
  }
16
- /** Extend and/or refine the `PageContext` type (`import type { PageContext } from 'vike/types'`).
17
- *
18
- * For example:
19
- * - You can refine the type of `PageContext['Page']`.
20
- * - You can define the type of custom `pageContext` values such as `pageContext.user`, see https://vike.dev/pageContext#custom
12
+ /** Extend the `PageContext` type (`import type { PageContext } from 'vike/types'`).
21
13
  *
22
14
  * https://vike.dev/pageContext#typescript
23
15
  */
24
16
  interface PageContext {
25
17
  }
18
+ /** Extend the `PageContextClient` type (`import type { PageContextClient } from 'vike/types'`).
19
+ *
20
+ * https://vike.dev/pageContext#typescript
21
+ */
22
+ interface PageContextClient {
23
+ }
24
+ /** Extend the `PageContextServer` type (`import type { PageContextServer } from 'vike/types'`).
25
+ *
26
+ * https://vike.dev/pageContext#typescript
27
+ */
28
+ interface PageContextServer {
29
+ }
26
30
  /** Refine the `pageContext.config` type.
27
31
  *
28
32
  * It's used for cumulative configs: the `pageContext.config[configName]` type is an `array` whereas `Config[configName]` isn't.
@@ -31,6 +35,24 @@ declare global {
31
35
  */
32
36
  interface ConfigResolved {
33
37
  }
38
+ /** Extend the `GlobalContext` type (`import type { GlobalContext } from 'vike/types'`).
39
+ *
40
+ * https://vike.dev/globalContext#typescript
41
+ */
42
+ interface GlobalContext {
43
+ }
44
+ /** Extend the `GlobalContextClient` type (`import type { GlobalContextClient } from 'vike/types'`).
45
+ *
46
+ * https://vike.dev/globalContext#typescript
47
+ */
48
+ interface GlobalContextClient {
49
+ }
50
+ /** Extend the `GlobalContextServer` type (`import type { GlobalContextServer } from 'vike/types'`).
51
+ *
52
+ * https://vike.dev/globalContext#typescript
53
+ */
54
+ interface GlobalContextServer {
55
+ }
34
56
  }
35
57
  /** This namespace is only used by:
36
58
  * - `vike-react`
@@ -0,0 +1,25 @@
1
+ export { createGlobalContextShared };
2
+ export type { GlobalContextShared };
3
+ export type { GlobalContextSharedPublic };
4
+ declare function createGlobalContextShared<GlobalContextAddendum extends object>(virtualFileExports: unknown, globalObject: {
5
+ globalContext?: Record<string, unknown>;
6
+ }, addGlobalContext?: (globalContext: GlobalContextShared) => Promise<GlobalContextAddendum>): Promise<{
7
+ _virtualFileExports: unknown;
8
+ _pageFilesAll: import("./getPageFiles.js").PageFile[];
9
+ _pageConfigs: import("./page-configs/PageConfig.js").PageConfigRuntime[];
10
+ _pageConfigGlobal: import("./page-configs/PageConfig.js").PageConfigGlobalRuntime;
11
+ _allPageIds: string[];
12
+ config: import("./page-configs/Config/PageContextConfig.js").ConfigResolved;
13
+ pages: import("./page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
14
+ } & Awaited<GlobalContextAddendum>>;
15
+ type GlobalContextSharedPublic = Pick<GlobalContextShared, 'config' | 'pages'>;
16
+ type GlobalContextShared = ReturnType<typeof createGlobalContextBase>;
17
+ declare function createGlobalContextBase(virtualFileExports: unknown): {
18
+ _virtualFileExports: unknown;
19
+ _pageFilesAll: import("./getPageFiles.js").PageFile[];
20
+ _pageConfigs: import("./page-configs/PageConfig.js").PageConfigRuntime[];
21
+ _pageConfigGlobal: import("./page-configs/PageConfig.js").PageConfigGlobalRuntime;
22
+ _allPageIds: string[];
23
+ config: import("./page-configs/Config/PageContextConfig.js").ConfigResolved;
24
+ pages: import("./page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
25
+ };
@@ -0,0 +1,43 @@
1
+ export { createGlobalContextShared };
2
+ import { getPageConfigsRuntime } from './getPageConfigsRuntime.js';
3
+ import { executeHookGenericGlobalCumulative } from './hooks/executeHookGeneric.js';
4
+ import { objectAssign } from './utils.js';
5
+ async function createGlobalContextShared(virtualFileExports, globalObject, addGlobalContext) {
6
+ const globalContext = createGlobalContextBase(virtualFileExports);
7
+ const globalContextAddendum = await addGlobalContext?.(globalContext);
8
+ objectAssign(globalContext, globalContextAddendum);
9
+ if (!globalObject.globalContext) {
10
+ globalObject.globalContext = globalContext;
11
+ // - We deliberately call onCreateGlobalContext() only at the beginning and only once per process.
12
+ // - TO-DO/eventually: HMR
13
+ // - Once Photon supports it: `server.hot.send({ type: 'full-server-reload' })`
14
+ // - Either use:
15
+ // - import.meta.hot
16
+ // - https://vite.dev/guide/api-hmr.html
17
+ // - Use a Vite transformer to inject import.meta.hot code into each user-land `+onCreateGlobalContext.js` file
18
+ // - Seems more idiomatic
19
+ // - globalContext._viteDevServer.hot.send()
20
+ // - Send 'full-server-reload' signal whenever a onCreateGlobalContext() function is modified => we need a globalObject to track all hooks and see if one of them is new/modified.
21
+ // - Seems less idiomatic
22
+ await executeHookGenericGlobalCumulative('onCreateGlobalContext', globalContext._pageConfigGlobal, null, globalContext);
23
+ }
24
+ else {
25
+ // Singleton: ensure all `globalContext` user-land references are preserved & updated.
26
+ // We don't use objectReplace() in order to keep user-land properties.
27
+ objectAssign(globalObject.globalContext, globalContext);
28
+ }
29
+ return globalObject.globalContext;
30
+ }
31
+ function createGlobalContextBase(virtualFileExports) {
32
+ const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal, globalConfig, pageConfigsUserFriendly } = getPageConfigsRuntime(virtualFileExports);
33
+ const globalContext = {
34
+ _virtualFileExports: virtualFileExports,
35
+ _pageFilesAll: pageFilesAll,
36
+ _pageConfigs: pageConfigs,
37
+ _pageConfigGlobal: pageConfigGlobal,
38
+ _allPageIds: allPageIds,
39
+ config: globalConfig.config,
40
+ pages: pageConfigsUserFriendly
41
+ };
42
+ return globalContext;
43
+ }
@@ -1,5 +1,5 @@
1
1
  export { createPageContextShared };
2
- import { executeHookGenericGlobalCumulative } from '../node/runtime/renderPage/executeHookGeneric.js';
2
+ import { executeHookGenericGlobalCumulative } from './hooks/executeHookGeneric.js';
3
3
  import { getPageConfigGlobalUserFriendly } from './page-configs/getPageConfigUserFriendly.js';
4
4
  import { objectAssign } from './utils.js';
5
5
  async function createPageContextShared(pageContextCreated, pageConfigGlobal) {
@@ -10,6 +10,6 @@ async function createPageContextShared(pageContextCreated, pageConfigGlobal) {
10
10
  _isPageContextObject: true,
11
11
  ...pageConfigGlobalUserFriendly
12
12
  }, true);
13
- await executeHookGenericGlobalCumulative('onCreatePageContext', pageConfigGlobal, pageContextCreated);
13
+ await executeHookGenericGlobalCumulative('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated);
14
14
  return pageContextCreated;
15
15
  }
@@ -0,0 +1,8 @@
1
+ export { executeHookGeneric };
2
+ export { executeHookGenericGlobalCumulative };
3
+ import type { PageConfigUserFriendlyOld } from '../getPageFiles.js';
4
+ import { type HookName } from './getHook.js';
5
+ import type { HookNameGlobal } from '../page-configs/Config.js';
6
+ import type { PageConfigGlobalRuntime } from '../page-configs/PageConfig.js';
7
+ declare function executeHookGeneric(hookName: HookName, pageContext: PageConfigUserFriendlyOld): Promise<void>;
8
+ declare function executeHookGenericGlobalCumulative(hookName: HookNameGlobal, pageConfigGlobal: PageConfigGlobalRuntime, pageContext: object | null, arg: object): Promise<void>;
@@ -1,16 +1,16 @@
1
1
  export { executeHookGeneric }; // TO-DO/refactor: start using executeHookGeneric() and, eventually, prominently use it
2
2
  export { executeHookGenericGlobalCumulative };
3
- import { executeHook } from '../../../shared/hooks/executeHook.js';
4
- import { getHookFromPageContext, getHookFromPageConfigGlobalCumulative } from '../../../shared/hooks/getHook.js';
3
+ import { executeHook } from './executeHook.js';
4
+ import { getHookFromPageContext, getHookFromPageConfigGlobalCumulative } from './getHook.js';
5
5
  async function executeHookGeneric(hookName, pageContext) {
6
6
  const hook = getHookFromPageContext(pageContext, hookName);
7
7
  if (!hook)
8
8
  return;
9
9
  await executeHook(() => hook.hookFn(pageContext), hook, pageContext);
10
10
  }
11
- async function executeHookGenericGlobalCumulative(hookName, pageConfigGlobal, pageContext) {
11
+ async function executeHookGenericGlobalCumulative(hookName, pageConfigGlobal, pageContext, arg) {
12
12
  const hooks = getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName);
13
13
  await Promise.all(hooks.map(async (hook) => {
14
- await executeHook(() => hook.hookFn(pageContext), hook, null);
14
+ await executeHook(() => hook.hookFn(arg), hook, pageContext);
15
15
  }));
16
16
  }
@@ -0,0 +1,2 @@
1
+ export declare const htmlElementId_pageContext = "vike_pageContext";
2
+ export declare const htmlElementId_globalContext = "vike_globalContext";
@@ -0,0 +1,2 @@
1
+ export const htmlElementId_pageContext = 'vike_pageContext';
2
+ export const htmlElementId_globalContext = 'vike_globalContext';
@@ -41,11 +41,11 @@ import type { InjectFilterEntry } from '../../types/index.js';
41
41
  import type { VikeVitePluginOptions } from '../../node/plugin/index.js';
42
42
  import type { Vike, VikePackages } from '../VikeNamespace.js';
43
43
  import type { HooksTimeoutProvidedByUser } from '../hooks/getHook.js';
44
- import type { PageContextClient, PageContextServer } from '../types.js';
44
+ import type { GlobalContext, PageContextClient, PageContextServer } from '../types.js';
45
45
  import type { InlineConfig } from 'vite';
46
46
  type HookName = HookNamePage | HookNameGlobal | HookNameOldDesign;
47
47
  type HookNamePage = 'onHydrationEnd' | 'onBeforePrerenderStart' | 'onBeforeRender' | 'onPageTransitionStart' | 'onPageTransitionEnd' | 'onRenderHtml' | 'onRenderClient' | 'guard' | 'data';
48
- type HookNameGlobal = 'onBeforePrerender' | 'onBeforeRoute' | 'onPrerenderStart' | 'onCreatePageContext';
48
+ type HookNameGlobal = 'onBeforePrerender' | 'onBeforeRoute' | 'onPrerenderStart' | 'onCreatePageContext' | 'onCreateGlobalContext';
49
49
  type HookNameOldDesign = 'render' | 'prerender';
50
50
  type ConfigNameBuiltIn = Exclude<keyof Config, keyof VikeVitePluginOptions | 'onBeforeRoute' | 'onPrerenderStart' | 'vite' | 'redirects'> | 'prerender' | 'isClientRuntimeLoaded' | 'onBeforeRenderEnv' | 'dataEnv' | 'hooksTimeout' | 'clientHooks' | 'middleware';
51
51
  type ConfigNameGlobal = 'onPrerenderStart' | 'onBeforeRoute' | 'prerender' | 'disableAutoFullBuild' | 'includeAssetsImportedByServer' | 'baseAssets' | 'baseServer' | 'redirects' | 'trailingSlash' | 'disableUrlNormalization' | 'vite';
@@ -335,6 +335,11 @@ type ConfigBuiltIn = {
335
335
  * https://vike.dev/onCreatePageContext
336
336
  */
337
337
  onCreatePageContext?: ((pageContext: PageContextServer) => void) | ImportString | null;
338
+ /** Hook called when the `globalContext` object is created.
339
+ *
340
+ * https://vike.dev/onCreateGlobalContext
341
+ */
342
+ onCreateGlobalContext?: ((globalContext: GlobalContext) => void) | ImportString | null;
338
343
  /** Hook for fetching data.
339
344
  *
340
345
  * https://vike.dev/data
@@ -1,22 +1,28 @@
1
- export { PageContext };
2
- export { PageContextServer };
3
- export { PageContextClient };
4
- export { PageContextWithServerRouting };
5
- export { PageContextClientWithServerRouting };
6
- export { PageContextBuiltInServerInternal };
7
- export { PageContextBuiltInServer_deprecated as PageContextBuiltInServer };
8
- export { PageContextBuiltInClientWithClientRouting_deprecated as PageContextBuiltInClientWithClientRouting };
9
- export { PageContextBuiltInClientWithServerRouting_deprecated as PageContextBuiltInClientWithServerRouting };
1
+ export type { PageContext };
2
+ export type { PageContextServer };
3
+ export type { PageContextClient };
4
+ export type { GlobalContext };
5
+ export type { GlobalContextServer };
6
+ export type { GlobalContextClient };
7
+ export type { PageContextWithServerRouting };
8
+ export type { PageContextClientWithServerRouting };
9
+ export type { GlobalContextClientWithServerRouting };
10
+ export type { PageContextBuiltInServerInternal };
11
+ export type { PageContextBuiltInServer_deprecated as PageContextBuiltInServer };
12
+ export type { PageContextBuiltInClientWithClientRouting_deprecated as PageContextBuiltInClientWithClientRouting };
13
+ export type { PageContextBuiltInClientWithServerRouting_deprecated as PageContextBuiltInClientWithServerRouting };
10
14
  import type { PageContextUrlInternal, PageContextUrlClient, PageContextUrlServer } from './getPageContextUrlComputed.js';
11
15
  import type { ConfigEntries, ExportsAll, From, Source, Sources } from './page-configs/getPageConfigUserFriendly.js';
12
16
  import type { Config } from './page-configs/Config.js';
13
17
  import type { PageContextConfig } from './page-configs/Config/PageContextConfig.js';
14
18
  import type { AbortStatusCode } from './route/abort.js';
15
- import type { GlobalContextPublic } from '../node/runtime/globalContext.js';
16
- import type { GlobalContextPublicClientSide } from '../client/client-routing-runtime/globalContextClientSide.js';
19
+ import type { GlobalContextServer } from '../node/runtime/globalContext.js';
20
+ import type { GlobalContextClient } from '../client/client-routing-runtime/globalContext.js';
21
+ import type { GlobalContextClientWithServerRouting } from '../client/server-routing-runtime/globalContext.js';
17
22
  type PageContextServer<Data = unknown> = PageContextBuiltInServer<Data> & Vike.PageContext;
18
23
  type PageContext<Data = unknown> = PageContextClient<Data> | PageContextServer<Data>;
19
24
  type PageContextClient<Data = unknown> = PageContextBuiltInClientWithClientRouting<Data> & Vike.PageContext;
25
+ type GlobalContext = GlobalContextServer | GlobalContextClient;
20
26
  type PageContextWithServerRouting<Data = unknown> = PageContextClientWithServerRouting<Data> | PageContextServer<Data>;
21
27
  type PageContextClientWithServerRouting<Data = unknown> = PageContextBuiltInClientWithServerRouting<Data> & Vike.PageContext;
22
28
  type PageContextBuiltInCommon<Data> = {
@@ -152,7 +158,7 @@ type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageConte
152
158
  *
153
159
  * https://vike.dev/getGlobalContext
154
160
  */
155
- globalContext: GlobalContextPublic;
161
+ globalContext: GlobalContextServer;
156
162
  isHydration?: undefined;
157
163
  isBackwardNavigation?: undefined;
158
164
  previousPageContext?: undefined;
@@ -172,6 +178,7 @@ type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltI
172
178
  * https://vike.dev/pageContext
173
179
  */
174
180
  previousPageContext: PageContextClient<Data> | null;
181
+ globalContext: GlobalContextClient;
175
182
  } & PageContextUrlClient;
176
183
  type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'pageExports' | 'exports' | 'abortReason' | 'pageId' | 'data'> & PageContextClientCommon & {
177
184
  /**
@@ -186,6 +193,7 @@ type PageContextBuiltInClientWithServerRouting<Data> = Partial<PageContextBuiltI
186
193
  * The `isBackwardNavigation` property only works with Client Routing. (The value is always `null` when using Server Routing.)
187
194
  */
188
195
  isBackwardNavigation: null;
196
+ globalContext: GlobalContextClientWithServerRouting;
189
197
  };
190
198
  type PageContextClientCommon = {
191
199
  /**
@@ -203,7 +211,6 @@ type PageContextClientCommon = {
203
211
  * https://vike.dev/pageContext
204
212
  */
205
213
  isPrerendering: false;
206
- globalContext: GlobalContextPublicClientSide;
207
214
  };
208
215
  /** For Vike internal use */
209
216
  type PageContextBuiltInServerInternal = Omit<PageContextBuiltInCommon<unknown> & PageContextUrlInternal, 'data'>;
@@ -1,8 +1,4 @@
1
- export type { PageContext } from '../shared/types.js';
2
- export type { PageContextServer } from '../shared/types.js';
3
- export type { PageContextClient } from '../shared/types.js';
4
- export type { PageContextWithServerRouting } from '../shared/types.js';
5
- export type { PageContextClientWithServerRouting } from '../shared/types.js';
1
+ export type { PageContext, PageContextServer, PageContextClient, GlobalContext, GlobalContextServer, GlobalContextClient, PageContextWithServerRouting, PageContextClientWithServerRouting, GlobalContextClientWithServerRouting } from '../shared/types.js';
6
2
  export type { PageContextBuiltInServer } from '../shared/types.js';
7
3
  export type { PageContextBuiltInClientWithClientRouting } from '../shared/types.js';
8
4
  export type { PageContextBuiltInClientWithServerRouting } from '../shared/types.js';
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.228-commit-c2f6e1f";
1
+ export declare const PROJECT_VERSION: "0.4.228-commit-8d90991";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.228-commit-c2f6e1f';
2
+ export const PROJECT_VERSION = '0.4.228-commit-8d90991';
@@ -1,5 +1,5 @@
1
1
  export { catchInfiniteLoop };
2
- import { assert, assertWarning } from './assert.js';
2
+ import { assertUsage, assertWarning } from './assert.js';
3
3
  const trackers = {};
4
4
  function catchInfiniteLoop(functionName, maxNumberOfCalls = 100, withinSeconds = 5) {
5
5
  // Init
@@ -12,14 +12,14 @@ function catchInfiniteLoop(functionName, maxNumberOfCalls = 100, withinSeconds =
12
12
  // Count
13
13
  tracker.count++;
14
14
  // Error
15
- const msg = `[Infinite Loop] ${functionName} called ${tracker.count} times within ${withinSeconds} seconds`;
15
+ const msg = `[Infinite Loop] Rendering ${tracker.count} times within ${withinSeconds} seconds [${functionName}]`;
16
16
  if (tracker.count > maxNumberOfCalls) {
17
- assert(false, msg);
17
+ assertUsage(false, msg);
18
18
  }
19
19
  // Warning, at 50% threshold
20
20
  if (!tracker.warned && tracker.count > maxNumberOfCalls * 0.5) {
21
21
  // Warning is shown upon 10 calls a second, on average during 5 seconds, given the default parameters
22
- assertWarning(false, msg, { onlyOnce: false });
22
+ assertWarning(false, msg, { onlyOnce: false, showStackTrace: true });
23
23
  tracker.warned = true;
24
24
  }
25
25
  }
@@ -1,6 +1,6 @@
1
1
  export { getGlobalObject };
2
2
  export { assertIsSingleModuleInstance };
3
- type Key = `${string}/${string}.ts`;
3
+ type Key = `${string}.ts`;
4
4
  /** Share information across module instances. */
5
5
  declare function getGlobalObject<T extends Record<string, unknown> = never>(key: Key, defaultValue: T): T;
6
6
  /** Assert that the module is instantiated only once. */
@@ -0,0 +1,2 @@
1
+ export { getPublicProxy };
2
+ declare function getPublicProxy<Obj extends Record<string, unknown>, PropsPublic extends readonly (keyof Obj)[]>(obj: Obj, objName: string, propsPublic: PropsPublic, expectCustomUserLandProps?: true): Pick<Obj, PropsPublic[number]>;
@@ -0,0 +1,25 @@
1
+ export { getPublicProxy };
2
+ // We use a proxy instead of property getters.
3
+ // - The issue with property getters is that they can't be `writable: true` but we do want the user to be able to modify the value of internal properties.
4
+ // ```console
5
+ // TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute, #<Object>
6
+ // ```
7
+ // - Previous implementation using property getters: https://github.com/vikejs/vike/blob/main/vike/utils/makePublicCopy.ts
8
+ import { assert, assertWarning } from './assert.js';
9
+ // Show warning when user is accessing internal `_` properties.
10
+ function getPublicProxy(obj, objName, propsPublic, expectCustomUserLandProps) {
11
+ if (!expectCustomUserLandProps) {
12
+ Object.keys(obj).forEach((key) => assert(key.startsWith('_') || propsPublic.includes(key)));
13
+ propsPublic.forEach((prop) => prop in obj);
14
+ }
15
+ return new Proxy(obj, {
16
+ get(_, prop) {
17
+ const propStr = String(prop);
18
+ if (propStr.startsWith('_')) {
19
+ assertWarning(false, `Using internal ${objName}.${propStr} which may break in any minor version update. Reach out on GitHub and elaborate your use case so that the Vike team can add official support for your use case.`, { onlyOnce: true });
20
+ }
21
+ // @ts-ignore Seems to be TypeScript bug
22
+ return Reflect.get(...arguments);
23
+ }
24
+ });
25
+ }
@@ -1,2 +1,2 @@
1
1
  export { objectAssign };
2
- declare function objectAssign<Obj extends object, ObjAddendum extends object | null>(obj: Obj, objAddendum: ObjAddendum, objAddendumCanBePageContextObject?: true): asserts obj is Obj & ObjAddendum;
2
+ declare function objectAssign<Obj extends object, ObjAddendum extends object | null | undefined>(obj: Obj, objAddendum: ObjAddendum, objAddendumCanBePageContextObject?: true): asserts obj is Obj & ObjAddendum;