vike 0.4.250-commit-193dea3 → 0.4.250-commit-2686732

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 (43) hide show
  1. package/dist/client/runtime-client-routing/createPageContextClientSide.d.ts +19 -1
  2. package/dist/client/runtime-client-routing/createPageContextClientSide.js +19 -11
  3. package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +58 -70
  4. package/dist/client/runtime-client-routing/renderPageClient.d.ts +100 -98
  5. package/dist/client/runtime-server-routing/createPageContextClientSide.d.ts +14 -1
  6. package/dist/client/runtime-server-routing/createPageContextClientSide.js +10 -4
  7. package/dist/node/prerender/context.d.ts +1 -1
  8. package/dist/node/prerender/context.js +2 -2
  9. package/dist/node/prerender/resolvePrerenderConfig.d.ts +4 -4
  10. package/dist/node/prerender/resolvePrerenderConfig.js +17 -11
  11. package/dist/node/prerender/runPrerender.d.ts +2 -5
  12. package/dist/node/prerender/runPrerender.js +6 -6
  13. package/dist/node/vite/onLoad.js +3 -2
  14. package/dist/node/vite/plugins/build/pluginBuildApp.js +1 -1
  15. package/dist/node/vite/plugins/build/pluginModuleBanner.js +2 -1
  16. package/dist/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +5 -0
  17. package/dist/node/vite/shared/resolveVikeConfigInternal.js +6 -6
  18. package/dist/server/onLoad.js +2 -0
  19. package/dist/server/runtime/logErrorServer.d.ts +2 -2
  20. package/dist/server/runtime/loggerRuntime.d.ts +2 -2
  21. package/dist/server/runtime/renderPageServer/createPageContextServerSide.d.ts +12 -10
  22. package/dist/server/runtime/renderPageServer/createPageContextServerSide.js +11 -11
  23. package/dist/server/runtime/renderPageServer/execHookOnError.d.ts +2 -2
  24. package/dist/server/runtime/renderPageServer/execHookOnError.js +3 -1
  25. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +1 -4
  26. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +4 -16
  27. package/dist/server/runtime/renderPageServer.d.ts +2 -9
  28. package/dist/shared-server-client/createGlobalContextShared.js +1 -1
  29. package/dist/shared-server-client/createPageContextShared.d.ts +12 -2
  30. package/dist/shared-server-client/createPageContextShared.js +1 -0
  31. package/dist/shared-server-client/getPageContextUrlComputed.d.ts +5 -2
  32. package/dist/shared-server-client/hooks/execHook.d.ts +5 -7
  33. package/dist/shared-server-client/hooks/execHook.js +77 -12
  34. package/dist/shared-server-client/prepareGlobalContextForPublicUsage.d.ts +2 -0
  35. package/dist/shared-server-client/preparePageContextForPublicUsage.d.ts +2 -3
  36. package/dist/types/Config.d.ts +81 -71
  37. package/dist/types/Config.js +1 -0
  38. package/dist/types/PageContext.d.ts +33 -26
  39. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  40. package/dist/utils/PROJECT_VERSION.js +1 -1
  41. package/dist/utils/installUncaughtErrorHandlers.d.ts +2 -0
  42. package/dist/utils/installUncaughtErrorHandlers.js +20 -0
  43. package/package.json +2 -2
@@ -1,3 +1,4 @@
1
+ // TODO: rename all exports
1
2
  export { execHook };
2
3
  export { execHookGlobal };
3
4
  export { execHookDirect };
@@ -5,10 +6,12 @@ export { execHookDirectSingle };
5
6
  export { execHookDirectSingleWithReturn };
6
7
  export { execHookDirectWithoutPageContext };
7
8
  export { execHookDirectSync };
9
+ export { execHookBase };
8
10
  export { getPageContext_sync };
9
11
  export { providePageContext };
10
12
  export { isUserHookError };
11
- import { getProjectError, assertWarning, assertUsage } from '../../utils/assert.js';
13
+ // TODO: minor refactor maybe completely remove (some) utils.js files?
14
+ import { assert, getProjectError, assertWarning, assertUsage } from '../../utils/assert.js';
12
15
  import { getGlobalObject } from '../../utils/getGlobalObject.js';
13
16
  import { humanizeTime } from '../../utils/humanizeTime.js';
14
17
  import { isObject } from '../../utils/isObject.js';
@@ -18,15 +21,16 @@ const globalObject = getGlobalObject('utils/execHook.ts', {
18
21
  userHookErrors: new WeakMap(),
19
22
  pageContext: null,
20
23
  });
24
+ // TODO/refactor: export new type PageContextExecHookMinimum instead of PageContextPrepareMinimum ?
21
25
  async function execHook(hookName, pageContext, preparePageContextForPublicUsage) {
22
26
  const hooks = getHookFromPageContextNew(hookName, pageContext);
23
27
  return await execHookDirect(hooks, pageContext, preparePageContextForPublicUsage);
24
28
  }
25
- async function execHookGlobal(hookName, pageConfigGlobal, pageContext, hookArg, prepareForPublicUsage) {
26
- const hooks = getHookFromPageConfigGlobalCumulative(pageConfigGlobal, hookName);
29
+ async function execHookGlobal(hookName, globalContext, pageContext, hookArg, prepareForPublicUsage) {
30
+ const hooks = getHookFromPageConfigGlobalCumulative(globalContext._pageConfigGlobal, hookName);
27
31
  const hookArgForPublicUsage = prepareForPublicUsage(hookArg);
28
32
  await Promise.all(hooks.map(async (hook) => {
29
- await execHookDirectAsync(() => hook.hookFn(hookArgForPublicUsage), hook, pageContext);
33
+ await execHookDirectAsync(() => hook.hookFn(hookArgForPublicUsage), hook, globalContext, pageContext);
30
34
  }));
31
35
  }
32
36
  async function execHookDirect(hooks, pageContext, preparePageContextForPublicUsage) {
@@ -34,7 +38,7 @@ async function execHookDirect(hooks, pageContext, preparePageContextForPublicUsa
34
38
  return [];
35
39
  const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
36
40
  const hooksWithResult = await Promise.all(hooks.map(async (hook) => {
37
- const hookReturn = await execHookDirectAsync(() => hook.hookFn(pageContextForPublicUsage), hook, pageContextForPublicUsage);
41
+ const hookReturn = await execHookDirectAsync(() => hook.hookFn(pageContextForPublicUsage), hook, pageContext._globalContext, pageContextForPublicUsage);
38
42
  return { ...hook, hookReturn };
39
43
  }));
40
44
  return hooksWithResult;
@@ -54,12 +58,12 @@ function isUserHookError(err) {
54
58
  return false;
55
59
  return globalObject.userHookErrors.get(err) ?? false;
56
60
  }
57
- async function execHookDirectWithoutPageContext(hookFnCaller, hook) {
61
+ async function execHookDirectWithoutPageContext(hookFnCaller, hook, globalContext) {
58
62
  const { hookName, hookFilePath, hookTimeout } = hook;
59
- const hookReturn = await execHookDirectAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, null);
63
+ const hookReturn = await execHookDirectAsync(hookFnCaller, { hookName, hookFilePath, hookTimeout }, globalContext, null);
60
64
  return hookReturn;
61
65
  }
62
- function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
66
+ function execHookDirectAsync(hookFnCaller, hook, globalContext, pageContextForPublicUsage) {
63
67
  const { hookName, hookFilePath, hookTimeout: { error: timeoutErr, warning: timeoutWarn }, } = hook;
64
68
  let resolve;
65
69
  let reject;
@@ -90,8 +94,7 @@ function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
90
94
  }, timeoutErr);
91
95
  (async () => {
92
96
  try {
93
- providePageContextInternal(pageContextForPublicUsage);
94
- const ret = await hookFnCaller();
97
+ const ret = await execHookBase(hookFnCaller, hook, globalContext, pageContextForPublicUsage);
95
98
  resolve(ret);
96
99
  }
97
100
  catch (err) {
@@ -105,10 +108,72 @@ function execHookDirectAsync(hookFnCaller, hook, pageContextForPublicUsage) {
105
108
  }
106
109
  function execHookDirectSync(hook, pageContext, preparePageContextForPublicUsage) {
107
110
  const pageContextForPublicUsage = preparePageContextForPublicUsage(pageContext);
108
- providePageContextInternal(pageContextForPublicUsage);
109
- const hookReturn = hook.hookFn(pageContextForPublicUsage);
111
+ const hookReturn = execHookBase(() => hook.hookFn(pageContextForPublicUsage), hook, pageContext._globalContext, pageContextForPublicUsage);
110
112
  return { hookReturn };
111
113
  }
114
+ // Every execHook* variant should call this
115
+ function execHookBase(hookFnCaller, hook, globalContext, pageContext) {
116
+ const { hookName, hookFilePath } = hook;
117
+ assert(hookName !== 'onHookCall'); // ensure no infinite loop
118
+ const configValue = globalContext._pageConfigGlobal.configValues['onHookCall'];
119
+ const callOriginal = () => {
120
+ providePageContextInternal(pageContext);
121
+ return hookFnCaller();
122
+ };
123
+ // +onHookCall doesn't exist
124
+ if (!configValue?.value)
125
+ return callOriginal();
126
+ // +onHookCall wrapping
127
+ let originalCalled = false;
128
+ let originalReturn;
129
+ let originalError;
130
+ let call = () => {
131
+ originalCalled = true;
132
+ try {
133
+ originalReturn = callOriginal();
134
+ }
135
+ catch (err) {
136
+ originalError = err;
137
+ }
138
+ return originalReturn;
139
+ };
140
+ for (const onHookCall of configValue.value) {
141
+ const hookPublic = { name: hookName, filePath: hookFilePath, call };
142
+ // Recursively wrap callOriginal() so +onHookCall can use async hooks. (E.g. vike-react-sentry integrates Sentry's `Tracer.startActiveSpan()`.)
143
+ call = () => {
144
+ ;
145
+ (async () => {
146
+ try {
147
+ await onHookCall(hookPublic, pageContext);
148
+ }
149
+ catch (err) {
150
+ console.error(err);
151
+ /* TO-DO/eventually: use dependency injection to be able to use logErrorServer() when this function runs on the server-side.
152
+ if (
153
+ !globalThis.__VIKE__IS_CLIENT &&
154
+ pageContext &&
155
+ // Avoid infinite loop
156
+ hookName !== 'onError'
157
+ ) {
158
+ assert(!pageContext.isClientSide)
159
+ logErrorServer(err, pageContext)
160
+ } else {
161
+ logErrorClient(err)
162
+ }
163
+ //*/
164
+ }
165
+ })();
166
+ // +onHookCall must run hook.call() before any `await` — https://github.com/vikejs/vike/pull/2978#discussion_r2645232953
167
+ assertUsage(originalCalled, 'onHookCall() must run hook.call()');
168
+ return originalReturn;
169
+ };
170
+ }
171
+ // Start the call() chain
172
+ call();
173
+ if (originalError)
174
+ throw originalError;
175
+ return originalReturn;
176
+ }
112
177
  function isNotDisabled(timeout) {
113
178
  return !!timeout && timeout !== Infinity;
114
179
  }
@@ -1,8 +1,10 @@
1
1
  export { prepareGlobalContextForPublicUsage };
2
2
  export type { GlobalContextPrepareMinimum };
3
+ import type { PageConfigGlobalRuntime } from '../types/PageConfig.js';
3
4
  type GlobalContextPrepareMinimum = {
4
5
  _isOriginalObject: true;
5
6
  isGlobalContext: true;
7
+ _pageConfigGlobal: PageConfigGlobalRuntime;
6
8
  };
7
9
  declare function prepareGlobalContextForPublicUsage<GlobalContext extends GlobalContextPrepareMinimum>(globalContext: GlobalContext): GlobalContext & {
8
10
  _isProxyObject: true;
@@ -2,11 +2,10 @@ export { preparePageContextForPublicUsage };
2
2
  export { assertPropertyGetters };
3
3
  export type { PageContextPrepareMinimum };
4
4
  import { type GlobalContextPrepareMinimum } from './prepareGlobalContextForPublicUsage.js';
5
+ import type { PageContextCreatedBase } from './createPageContextShared.js';
5
6
  type PageContextPrepareMinimum = {
6
- _isOriginalObject: true;
7
- isPageContext: true;
8
7
  _globalContext: GlobalContextPrepareMinimum;
9
- };
8
+ } & PageContextCreatedBase;
10
9
  declare function preparePageContextForPublicUsage<PageContext extends PageContextPrepareMinimum>(pageContext: PageContext): PageContext & {
11
10
  _isProxyObject: true;
12
11
  _originalObject: PageContext;
@@ -51,7 +51,7 @@ import type { ImportStringList } from '../node/vite/shared/importString.js';
51
51
  type HookNameOld = HookName | HookNameOldDesign;
52
52
  type HookName = HookNamePage | HookNameGlobal;
53
53
  type HookNamePage = 'onHydrationEnd' | 'onBeforePrerenderStart' | 'onBeforeRender' | 'onPageTransitionStart' | 'onPageTransitionEnd' | 'onRenderHtml' | 'onRenderClient' | 'guard' | 'data' | 'onData' | 'route';
54
- type HookNameGlobal = 'onBeforeRoute' | 'onPrerenderStart' | 'onCreatePageContext' | 'onCreateGlobalContext' | 'onError';
54
+ type HookNameGlobal = 'onBeforeRoute' | 'onPrerenderStart' | 'onCreatePageContext' | 'onCreateGlobalContext' | 'onError' | 'onHookCall';
55
55
  type HookNameOldDesign = 'render' | 'prerender' | 'onBeforePrerender';
56
56
  type ConfigNameBuiltIn = Exclude<keyof ConfigBuiltIn, keyof VikeVitePluginOptions | 'onBeforeRoute' | 'onPrerenderStart' | 'vite' | 'redirects'> | 'prerender' | 'hasServerOnlyHook' | 'isClientRuntimeLoaded' | 'onBeforeRenderEnv' | 'dataEnv' | 'guardEnv' | 'hooksTimeout' | 'clientHooks' | 'middleware';
57
57
  type ConfigNameGlobal = 'onPrerenderStart' | 'onBeforeRoute' | 'prerender' | 'disableAutoFullBuild' | 'includeAssetsImportedByServer' | 'baseAssets' | 'baseServer' | 'redirects' | 'trailingSlash' | 'disableUrlNormalization' | 'vite';
@@ -265,76 +265,7 @@ type ConfigBuiltIn = {
265
265
  *
266
266
  * @default false
267
267
  */
268
- prerender?: boolean | ImportStringList | {
269
- /**
270
- * Allow only some of your pages to be pre-rendered.
271
- *
272
- * This setting doesn't affect the pre-rendering process: it merely suppresses the warnings when some of your pages cannot be pre-rendered.
273
- *
274
- * https://vike.dev/prerender#partial
275
- *
276
- * @default false
277
- */
278
- partial?: boolean;
279
- /**
280
- * Whether +redirects should be pre-rendered to HTML documents that redirect the user.
281
- *
282
- * https://vike.dev/prerender#redirects
283
- */
284
- redirects?: boolean;
285
- /**
286
- * Don't create a new directory for each HTML file.
287
- *
288
- * For example, generate `dist/client/about.html` instead of `dist/client/about/index.html`.
289
- *
290
- * https://vike.dev/prerender#noextradir
291
- *
292
- * @default false
293
- */
294
- noExtraDir?: boolean;
295
- /**
296
- * Number of concurrent pre-render jobs.
297
- *
298
- * Set to `false` to disable concurrency.
299
- *
300
- * https://vike.dev/prerender#parallel
301
- *
302
- * @default os.cpus().length
303
- */
304
- parallel?: boolean | number;
305
- /**
306
- * Disable the automatic initiation of the pre-rendering process when running `$ vike build`.
307
- *
308
- * Use this if you want to programmatically initiate the pre-rendering process instead.
309
- *
310
- * https://vike.dev/prerender#disableautorun
311
- *
312
- * @default false
313
- */
314
- disableAutoRun?: boolean;
315
- /**
316
- * Whether to enable pre-rendering.
317
- *
318
- * Setting `enable: null` enables you to set prerender settings without enabling pre-rendering by default.
319
- *
320
- * This is useful, for example, if you want pre-rendering to stay opt-in instead of opt-out while setting pre-render settings globally.
321
- *
322
- * https://vike.dev/prerender#enable
323
- *
324
- * @default true
325
- */
326
- enable?: boolean | null;
327
- /**
328
- * If you pre-render all your pages then Vike removes the `dist/server/` directory after pre-rendering has finished.
329
- *
330
- * If you set this setting to `true` then Vike won't remove the `dist/server/` directory.
331
- *
332
- * https://vike.dev/prerender#keepDistServer
333
- *
334
- * @default false
335
- */
336
- keepDistServer?: boolean;
337
- };
268
+ prerender?: PrerenderSetting | (() => PrerenderSetting | Promise<PrerenderSetting>) | ImportStringList;
338
269
  /**
339
270
  * Install Vike extensions.
340
271
  *
@@ -361,6 +292,15 @@ type ConfigBuiltIn = {
361
292
  * https://vike.dev/onCreateGlobalContext
362
293
  */
363
294
  onCreateGlobalContext?: ((globalContext: GlobalContext) => void) | ImportStringList | null;
295
+ /** Called whenever a hook is called.
296
+ *
297
+ * https://vike.dev/onHookCall
298
+ */
299
+ onHookCall?: ((hook: {
300
+ name: HookName;
301
+ filePath: string;
302
+ call: () => void | Promise<void>;
303
+ }, pageContext: PageContextClient | PageContextServer | null) => void | Promise<void>) | ImportStringList;
364
304
  /** Hook for fetching data.
365
305
  *
366
306
  * https://vike.dev/data
@@ -595,6 +535,76 @@ type ConfigBuiltIn = {
595
535
  */
596
536
  staticReplace?: StaticReplace[];
597
537
  };
538
+ type PrerenderSetting = boolean | {
539
+ /**
540
+ * Allow only some of your pages to be pre-rendered.
541
+ *
542
+ * This setting doesn't affect the pre-rendering process: it merely suppresses the warnings when some of your pages cannot be pre-rendered.
543
+ *
544
+ * https://vike.dev/prerender#partial
545
+ *
546
+ * @default false
547
+ */
548
+ partial?: boolean;
549
+ /**
550
+ * Whether +redirects should be pre-rendered to HTML documents that redirect the user.
551
+ *
552
+ * https://vike.dev/prerender#redirects
553
+ */
554
+ redirects?: boolean;
555
+ /**
556
+ * Don't create a new directory for each HTML file.
557
+ *
558
+ * For example, generate `dist/client/about.html` instead of `dist/client/about/index.html`.
559
+ *
560
+ * https://vike.dev/prerender#noextradir
561
+ *
562
+ * @default false
563
+ */
564
+ noExtraDir?: boolean;
565
+ /**
566
+ * Number of concurrent pre-render jobs.
567
+ *
568
+ * Set to `false` to disable concurrency.
569
+ *
570
+ * https://vike.dev/prerender#parallel
571
+ *
572
+ * @default os.cpus().length
573
+ */
574
+ parallel?: boolean | number;
575
+ /**
576
+ * Disable the automatic initiation of the pre-rendering process when running `$ vike build`.
577
+ *
578
+ * Use this if you want to programmatically initiate the pre-rendering process instead.
579
+ *
580
+ * https://vike.dev/prerender#disableautorun
581
+ *
582
+ * @default false
583
+ */
584
+ disableAutoRun?: boolean;
585
+ /**
586
+ * Whether to enable pre-rendering.
587
+ *
588
+ * Setting `enable: null` enables you to set prerender settings without enabling pre-rendering by default.
589
+ *
590
+ * This is useful, for example, if you want pre-rendering to stay opt-in instead of opt-out while setting pre-render settings globally.
591
+ *
592
+ * https://vike.dev/prerender#enable
593
+ *
594
+ * @default true
595
+ */
596
+ enable?: boolean | null;
597
+ /**
598
+ * If you pre-render all your pages then Vike removes the `dist/server/` directory after pre-rendering has finished.
599
+ *
600
+ * If you set this setting to `true` then Vike won't remove the `dist/server/` directory.
601
+ *
602
+ * https://vike.dev/prerender#keepDistServer
603
+ *
604
+ * @default false
605
+ */
606
+ keepDistServer?: boolean;
607
+ };
598
608
  type ConfigBuiltInResolved = {
599
609
  passToClient?: string[][];
600
610
  redirects?: Record<string, string>[];
@@ -1 +1,2 @@
1
+ // TODO: rename 'Hook called' Called
1
2
  export {};
@@ -7,6 +7,7 @@ export type { PageContextInternalServer };
7
7
  export type { PageContextInternalClient };
8
8
  export type { PageContextInternalClient_ServerRouting };
9
9
  export type { PageContextInternalClient_ClientRouting };
10
+ export type { PageContextInit };
10
11
  export type { PageContextBuiltInServer_deprecated as PageContextBuiltInServer };
11
12
  export type { PageContextBuiltInClientWithClientRouting_deprecated as PageContextBuiltInClientWithClientRouting };
12
13
  export type { PageContextBuiltInClientWithServerRouting_deprecated as PageContextBuiltInClientWithServerRouting };
@@ -56,29 +57,6 @@ type PageContextBuiltInCommon<Data> = PageContextConfig & {
56
57
  * https://vike.dev/pageContext#data
57
58
  */
58
59
  data: Data;
59
- /** The URL you provided to Vike when calling `renderPage({ urlOriginal })` in your server middleware.
60
- *
61
- * https://vike.dev/renderPage
62
- */
63
- urlOriginal: string;
64
- /**
65
- * The HTTP request headers.
66
- *
67
- * As a string object normalized by Vike.
68
- *
69
- * https://vike.dev/headers
70
- * https://vike.dev/pageContext#headers
71
- */
72
- headers: Record<string, string> | null;
73
- /**
74
- * The HTTP request headers.
75
- *
76
- * The original object provided by the server.
77
- *
78
- * https://vike.dev/headers
79
- * https://vike.dev/pageContext#headersOriginal
80
- */
81
- headersOriginal?: unknown;
82
60
  /**
83
61
  * The HTTP response headers.
84
62
  *
@@ -128,8 +106,6 @@ type PageContextBuiltInCommon<Data> = PageContextConfig & {
128
106
  /** @experimental https://github.com/vikejs/vike/issues/1268 */
129
107
  sources: Sources;
130
108
  /** @deprecated */
131
- url: string;
132
- /** @deprecated */
133
109
  pageExports: Record<string, unknown>;
134
110
  /**
135
111
  * Whether the Base URL is missing in the URL of the HTTP request made to the SSR server.
@@ -139,7 +115,34 @@ type PageContextBuiltInCommon<Data> = PageContextConfig & {
139
115
  */
140
116
  isBaseMissing?: true;
141
117
  };
142
- type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageContextUrlServer & {
118
+ type PageContextInit = {
119
+ /** The URL provided when `renderPage({ urlOriginal })` is called.
120
+ *
121
+ * https://vike.dev/renderPage
122
+ */
123
+ urlOriginal: string;
124
+ /**
125
+ * The HTTP request headers.
126
+ *
127
+ * The original object provided by the server.
128
+ *
129
+ * https://vike.dev/headers
130
+ * https://vike.dev/pageContext#headersOriginal
131
+ */
132
+ headersOriginal?: unknown;
133
+ /** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
134
+ /** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
135
+ };
136
+ type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageContextInit & PageContextUrlServer & {
137
+ /**
138
+ * The HTTP request headers.
139
+ *
140
+ * As a string object normalized by Vike.
141
+ *
142
+ * https://vike.dev/headers
143
+ * https://vike.dev/pageContext#headers
144
+ */
145
+ headers: Record<string, string> | null;
143
146
  /**
144
147
  * Whether the environment is the client-side:
145
148
  * - In the browser, the value is `true`.
@@ -182,6 +185,10 @@ type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageConte
182
185
  previousPageContext?: undefined;
183
186
  };
184
187
  type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'routeParams' | 'pageExports' | 'config' | 'configEntries' | 'exports' | 'exportsAll' | 'abortReason' | 'data' | 'pageId' | 'source' | 'sources' | 'from'> & PageContextClientCommon & {
188
+ /**
189
+ * The current URL unprocessed (e.g. with the Base URL).
190
+ */
191
+ urlOriginal: string;
185
192
  /**
186
193
  * Whether the page is the first page rendered.
187
194
  *
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.250-commit-193dea3";
1
+ export declare const PROJECT_VERSION: "0.4.250-commit-2686732";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.250-commit-193dea3';
2
+ export const PROJECT_VERSION = '0.4.250-commit-2686732';
@@ -0,0 +1,2 @@
1
+ export { installUncaughtErrorHandlers };
2
+ declare function installUncaughtErrorHandlers(): void;
@@ -0,0 +1,20 @@
1
+ export { installUncaughtErrorHandlers };
2
+ import { getGlobalObject } from './getGlobalObject.js';
3
+ const globalObject = getGlobalObject('./installUncaughtErrorHandlers.ts', {
4
+ installed: false,
5
+ });
6
+ // Avoid server shutdown upon uncaught errors, e.g. `setTimeout(() => throw new Error('Uncaught error'), 10)`
7
+ // If in the future we want to call +onError then let's use different handlers
8
+ function installUncaughtErrorHandlers() {
9
+ if (globalObject.installed)
10
+ return;
11
+ globalObject.installed = true;
12
+ if (typeof process === 'undefined')
13
+ return;
14
+ process?.addListener?.('uncaughtException', (err) => {
15
+ console.error(err);
16
+ });
17
+ process?.addListener?.('unhandledRejection', (err) => {
18
+ console.error(err);
19
+ });
20
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.250-commit-193dea3",
3
+ "version": "0.4.250-commit-2686732",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -124,7 +124,7 @@
124
124
  "@brillout/json-serializer": "^0.5.21",
125
125
  "@brillout/picocolors": "^1.0.30",
126
126
  "@brillout/require-shim": "^0.1.2",
127
- "@brillout/vite-plugin-server-entry": "^0.7.15",
127
+ "@brillout/vite-plugin-server-entry": "^0.7.17",
128
128
  "cac": "^6.0.0",
129
129
  "es-module-lexer": "^1.0.0",
130
130
  "esbuild": ">=0.19.0",