gemi 0.181.0 → 0.182.0
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.
- package/dist/{chunk-28mrg70g.js → chunk-4e9hnb5e.js} +2 -2
- package/dist/{chunk-28mrg70g.js.map → chunk-4e9hnb5e.js.map} +1 -1
- package/dist/{chunk-m3ncxcw8.js → chunk-723a6j04.js} +1 -1
- package/dist/{chunk-n5gvv25q.js → chunk-q743rhy6.js} +1 -1
- package/dist/chunks/{RealtimeClient-CHNbqDr7.js → RealtimeClient-v3orUDdN.js} +2 -2
- package/dist/chunks/{RealtimeClient-CHNbqDr7.js.map → RealtimeClient-v3orUDdN.js.map} +1 -1
- package/dist/chunks/{ThemeProvider-Bkc6A9Nn.js → ThemeProvider-CDm5TXZC.js} +12 -5
- package/dist/chunks/ThemeProvider-CDm5TXZC.js.map +1 -0
- package/dist/chunks/{fetchFileRequest-BGEW4Wd7.js → fetchFileRequest-B6tFA-uV.js} +2 -2
- package/dist/chunks/{fetchFileRequest-BGEW4Wd7.js.map → fetchFileRequest-B6tFA-uV.js.map} +1 -1
- package/dist/chunks/{live-l4vtaqXd.js → live-JhGCkWuM.js} +3 -3
- package/dist/chunks/{live-l4vtaqXd.js.map → live-JhGCkWuM.js.map} +1 -1
- package/dist/chunks/{mutationExtras-C7UPW9XP.js → mutationExtras-BnDYKenf.js} +2 -2
- package/dist/chunks/{mutationExtras-C7UPW9XP.js.map → mutationExtras-BnDYKenf.js.map} +1 -1
- package/dist/chunks/{subscriptionStream-CULcRbx0.js → subscriptionStream-BdxPsTI_.js} +16 -4
- package/dist/chunks/subscriptionStream-BdxPsTI_.js.map +1 -0
- package/dist/client/index.js +7 -6
- package/dist/client/index.js.map +1 -1
- package/dist/client/retryPolicy.d.ts +6 -0
- package/dist/client/retryPolicy.d.ts.map +1 -1
- package/dist/client/subscriptionStream.d.ts +10 -1
- package/dist/client/subscriptionStream.d.ts.map +1 -1
- package/dist/client/useSubscription.d.ts +3 -2
- package/dist/client/useSubscription.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/testing/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunks/ThemeProvider-Bkc6A9Nn.js.map +0 -1
- package/dist/chunks/subscriptionStream-CULcRbx0.js.map +0 -1
- /package/dist/{chunk-m3ncxcw8.js.map → chunk-723a6j04.js.map} +0 -0
- /package/dist/{chunk-n5gvv25q.js.map → chunk-q743rhy6.js.map} +0 -0
|
@@ -52,6 +52,12 @@ export declare function shouldRetryQuery(failureCount: number, error: QueryFailu
|
|
|
52
52
|
* `random` is `Math.random` unless a test passes its own.
|
|
53
53
|
*/
|
|
54
54
|
export declare function retryDelayFor(failureCount: number, error: QueryFailure, retryDelay: RetryDelayOption | undefined, baseDelay?: number, random?: () => number): number;
|
|
55
|
+
/**
|
|
56
|
+
* "Equal jitter": a random point between half of `step` and all of it, in
|
|
57
|
+
* whole ms. Shared by `useQuery`'s default retries and `useSubscription`'s
|
|
58
|
+
* reconnects.
|
|
59
|
+
*/
|
|
60
|
+
export declare function equalJitter(step: number, random?: () => number): number;
|
|
55
61
|
/**
|
|
56
62
|
* A `Retry-After` header value in ms: delta-seconds or an HTTP date.
|
|
57
63
|
* `undefined` when absent or unreadable.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retryPolicy.d.ts","sourceRoot":"","sources":["../../client/retryPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,MAAM,GACN,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC,CAAC;AAE5D,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK7D;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,YAAY,EACnB,KAAK,GAAE,WAAW,GAAG,SAAyB,GAC7C,OAAO,CAKT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,SAAS,GAAE,MAAiC,EAC5C,MAAM,GAAE,MAAM,MAAoB,GACjC,MAAM,CAWR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,GAAG,GAAE,MAAmB,GACvB,MAAM,GAAG,SAAS,CAQpB"}
|
|
1
|
+
{"version":3,"file":"retryPolicy.d.ts","sourceRoot":"","sources":["../../client/retryPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,MAAM,GACN,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC,CAAC;AAE5D,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK7D;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,YAAY,EACnB,KAAK,GAAE,WAAW,GAAG,SAAyB,GAC7C,OAAO,CAKT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,SAAS,GAAE,MAAiC,EAC5C,MAAM,GAAE,MAAM,MAAoB,GACjC,MAAM,CAWR;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,MAAoB,GAAG,MAAM,CAEpF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,GAAG,GAAE,MAAmB,GACvB,MAAM,GAAG,SAAS,CAQpB"}
|
|
@@ -17,13 +17,22 @@ export interface FollowOptions {
|
|
|
17
17
|
current: SubscriptionConfig<unknown>;
|
|
18
18
|
};
|
|
19
19
|
setState: Dispatch<SetStateAction<SubscriptionState>>;
|
|
20
|
+
/** The jitter's random source; `Math.random` unless a test passes its own. */
|
|
21
|
+
random?: () => number;
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* Follows `endpoint` until the returned function is called: connects,
|
|
23
25
|
* reconnects with backoff, pauses while the tab is hidden, and reports
|
|
24
26
|
* through `setState` and `callbacks`.
|
|
27
|
+
*
|
|
28
|
+
* The backoff step is 1s, doubling per failed attempt up to 30s, and back to
|
|
29
|
+
* 1s once a stream reaches `ready`. Each wait is jittered ("equal jitter", a
|
|
30
|
+
* random point between half the step and all of it): a server restart ends
|
|
31
|
+
* every open tab's stream in the same instant, and an exact schedule would
|
|
32
|
+
* bring them all back in the same instant too. A `Retry-After` the server
|
|
33
|
+
* sent is waited out exactly.
|
|
25
34
|
*/
|
|
26
|
-
export declare function follow({ endpoint, pauseWhenHidden, cursor, callbacks, setState, }: FollowOptions): () => void;
|
|
35
|
+
export declare function follow({ endpoint, pauseWhenHidden, cursor, callbacks, setState, random, }: FollowOptions): () => void;
|
|
27
36
|
/**
|
|
28
37
|
* The events of an SSE body: `id` and the JSON `data`. Comments (keepalives)
|
|
29
38
|
* and events without data are skipped; an event whose data is not JSON is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptionStream.d.ts","sourceRoot":"","sources":["../../client/subscriptionStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"subscriptionStream.d.ts","sourceRoot":"","sources":["../../client/subscriptionStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAiBhF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,kDAAkD;IAClD,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACnC,SAAS,EAAE;QAAE,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IACpD,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACtD,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,eAAe,EACf,MAAM,EACN,SAAS,EACT,QAAQ,EACR,MAAoB,GACrB,EAAE,aAAa,GAAG,MAAM,IAAI,CA6F5B;AAED;;;;GAIG;AACH,wBAAuB,UAAU,CAC/B,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAC/B,cAAc,CAAC;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAqC7D"}
|
|
@@ -52,8 +52,9 @@ export declare const streamModule: {
|
|
|
52
52
|
* );
|
|
53
53
|
* ```
|
|
54
54
|
*
|
|
55
|
-
* It reconnects after a drop with backoff (
|
|
56
|
-
*
|
|
55
|
+
* It reconnects after a drop with jittered backoff (a random wait between half
|
|
56
|
+
* and all of a step of 1 s doubling to 30 s, or exactly the server's
|
|
57
|
+
* `Retry-After`), resuming with `Last-Event-ID` from the last event
|
|
57
58
|
* it saw. A `4xx` other than `408` and `429` stops it, with status `closed`.
|
|
58
59
|
* The callbacks may change between renders without reconnecting.
|
|
59
60
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSubscription.d.ts","sourceRoot":"","sources":["../../client/useSubscription.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAIvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG/C,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,MAAM,IACjD,IAAI,CAAC,CAAC,CAAC,SAAS,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7E,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,MAAM,IAAI;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAClC,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC5E;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC1E;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,YAAY;;CAExB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"useSubscription.d.ts","sourceRoot":"","sources":["../../client/useSubscription.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAIvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG/C,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,MAAM,IACjD,IAAI,CAAC,CAAC,CAAC,SAAS,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7E,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,MAAM,IAAI;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAClC,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC5E;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC1E;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,YAAY;;CAExB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,MAAM,EACpD,GAAG,EAAE,CAAC,EACN,OAAO,GAAE,mBAAmB,CAAC,CAAC,CAAM,EACpC,MAAM,GAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAM,GACnD;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CAAE,CAiE5E"}
|
package/dist/server/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Da as f}from"../chunk-s0z61m9j.js";import{Ea as S}from"../chunk-3jnnma7m.js";import{sl as Q,ul as Z,vl as P,wl as y,xl as U,yl as A}from"../chunk-8z1z4zbq.js";import{Cl as H}from"../chunk-62v0y132.js";import"../chunk-r1sjx2q9.js";import{Kl as F}from"../chunk-xh3qqmbk.js";var x="/__gemi__/health",$=Symbol.for("gemi.server.health");function V(){let z=globalThis;return z[$]??={lagMs:0,consecutiveBreaches:0,degraded:!1,timer:void 0},z[$]}function W(){let z=V(),B=Q();return{healthy:!B&&!z.degraded,shuttingDown:B,lagMs:z.lagMs,consecutiveBreaches:z.consecutiveBreaches}}function E(z,B){let I=V();I.lagMs=z,I.consecutiveBreaches=z>B.maxLagMs?I.consecutiveBreaches+1:0;let J=I.consecutiveBreaches>=B.breaches;if(J&&!I.degraded)console.warn(`[gemi] Health: degraded (event-loop lag ${Math.round(z)}ms, ${I.consecutiveBreaches} samples in a row over ${B.maxLagMs}ms).`);else if(!J&&I.degraded)console.log(`[gemi] Health: recovered (event-loop lag ${Math.round(z)}ms).`);I.degraded=J}function G(z){let B=V();if(B.timer)return;let I=performance.now()+z.intervalMs;B.timer=setInterval(()=>{let J=performance.now();E(Math.max(0,J-I),z),I=J+z.intervalMs},z.intervalMs),B.timer.unref?.()}function _(z=process.env){return{paths:D(z.GEMI_HEALTH_PATH),intervalMs:O("GEMI_HEALTH_INTERVAL_MS",z.GEMI_HEALTH_INTERVAL_MS,500),maxLagMs:O("GEMI_HEALTH_MAX_LAG_MS",z.GEMI_HEALTH_MAX_LAG_MS,1000),breaches:Math.ceil(O("GEMI_HEALTH_BREACHES",z.GEMI_HEALTH_BREACHES,3))}}function D(z){if(z===void 0||z.trim()==="")return[x];if(z.trim().toLowerCase()==="off")return[];let B=z.split(",").map((J)=>J.trim()).filter(Boolean);if(B.filter((J)=>!J.startsWith("/")).length>0)throw Error(`GEMI_HEALTH_PATH: expected comma-separated paths starting with "/", or "off"; got ${JSON.stringify(z)}.`);return B}function O(z,B,I){if(B===void 0||B.trim()==="")return I;let J=Number(B);if(Number.isFinite(J)&&J>0)return J;return console.warn(`[gemi] Ignoring ${z}="${B}": expected a positive number.`),I}function j(z,B){if(B.length===0)return z;let I=new Set(B);return async(J,K)=>{if(!B.some((b)=>J.url.includes(b))||!I.has(new URL(J.url).pathname))return z(J,K);return y(R(J.method))}}function R(z){let B={"Cache-Control":"no-store","Content-Type":"text/plain; charset=utf-8"};if(z!=="GET"&&z!=="HEAD")return new Response("Method Not Allowed",{status:405,headers:{...B,Allow:"GET, HEAD"}});let{healthy:I,shuttingDown:J}=W();return new Response(z==="HEAD"?null:I?"ok":J?"shutting down":"degraded",{status:I?200:503,headers:B})}var L=Symbol.for("gemi.server.devGeneration"),X={graceMs:1e4,providerTimeoutMs:5000};class Y{app;inFlight=0;waiters=new Set;constructor(z){this.app=z}track(z){return async(B,I)=>{this.inFlight++;try{return await z(B,I)}finally{if(this.inFlight--,this.inFlight===0)this.wake()}}}get pending(){return this.inFlight}async retire({graceMs:z,providerTimeoutMs:B}){try{await this.idle(z),await Promise.resolve().then(()=>this.app.shutdown({timeoutMs:B}))}catch(I){C(I)}}idle(z){if(this.inFlight===0)return Promise.resolve();return new Promise((B)=>{let I=()=>{clearTimeout(J),this.waiters.delete(I),B()},J=setTimeout(I,z);this.waiters.add(I)})}wake(){for(let z of this.waiters)z()}}function N(z,B=X){let I=globalThis,J=I[L];if(I[L]=z,!J||J===z||typeof J.retire!=="function")return Promise.resolve();let K=J.retire.bind(J);return Promise.resolve().then(()=>K(B)).catch(C)}function C(z){console.error("[gemi] Shutting down the application a reload replaced failed:",z)}class k{app;instrumentation;handleSignals;server;stopping;settings;constructor(z){this.app=new S({kernel:z.kernel}),this.handleSignals=z.handleSignals??!0,this.instrumentation=U(z.instrumentation??((B,I)=>I(B)))}async start(){process.env.ROOT_DIR=H();let z=Bun.env.NODE_ENV==="production",B=_();if(z)G(B);let I=j(this.instrumentation,B.paths);if(z){if(this.handleSignals)A(()=>this.stop());this.settings=Z()}try{await this.app.waitForBoot()}catch(J){if(!z)this.app.shutdown({timeoutMs:X.providerTimeoutMs});throw J}if(z){let{httpProd:J}=await import("../chunk-
|
|
2
|
+
import{Da as f}from"../chunk-s0z61m9j.js";import{Ea as S}from"../chunk-3jnnma7m.js";import{sl as Q,ul as Z,vl as P,wl as y,xl as U,yl as A}from"../chunk-8z1z4zbq.js";import{Cl as H}from"../chunk-62v0y132.js";import"../chunk-r1sjx2q9.js";import{Kl as F}from"../chunk-xh3qqmbk.js";var x="/__gemi__/health",$=Symbol.for("gemi.server.health");function V(){let z=globalThis;return z[$]??={lagMs:0,consecutiveBreaches:0,degraded:!1,timer:void 0},z[$]}function W(){let z=V(),B=Q();return{healthy:!B&&!z.degraded,shuttingDown:B,lagMs:z.lagMs,consecutiveBreaches:z.consecutiveBreaches}}function E(z,B){let I=V();I.lagMs=z,I.consecutiveBreaches=z>B.maxLagMs?I.consecutiveBreaches+1:0;let J=I.consecutiveBreaches>=B.breaches;if(J&&!I.degraded)console.warn(`[gemi] Health: degraded (event-loop lag ${Math.round(z)}ms, ${I.consecutiveBreaches} samples in a row over ${B.maxLagMs}ms).`);else if(!J&&I.degraded)console.log(`[gemi] Health: recovered (event-loop lag ${Math.round(z)}ms).`);I.degraded=J}function G(z){let B=V();if(B.timer)return;let I=performance.now()+z.intervalMs;B.timer=setInterval(()=>{let J=performance.now();E(Math.max(0,J-I),z),I=J+z.intervalMs},z.intervalMs),B.timer.unref?.()}function _(z=process.env){return{paths:D(z.GEMI_HEALTH_PATH),intervalMs:O("GEMI_HEALTH_INTERVAL_MS",z.GEMI_HEALTH_INTERVAL_MS,500),maxLagMs:O("GEMI_HEALTH_MAX_LAG_MS",z.GEMI_HEALTH_MAX_LAG_MS,1000),breaches:Math.ceil(O("GEMI_HEALTH_BREACHES",z.GEMI_HEALTH_BREACHES,3))}}function D(z){if(z===void 0||z.trim()==="")return[x];if(z.trim().toLowerCase()==="off")return[];let B=z.split(",").map((J)=>J.trim()).filter(Boolean);if(B.filter((J)=>!J.startsWith("/")).length>0)throw Error(`GEMI_HEALTH_PATH: expected comma-separated paths starting with "/", or "off"; got ${JSON.stringify(z)}.`);return B}function O(z,B,I){if(B===void 0||B.trim()==="")return I;let J=Number(B);if(Number.isFinite(J)&&J>0)return J;return console.warn(`[gemi] Ignoring ${z}="${B}": expected a positive number.`),I}function j(z,B){if(B.length===0)return z;let I=new Set(B);return async(J,K)=>{if(!B.some((b)=>J.url.includes(b))||!I.has(new URL(J.url).pathname))return z(J,K);return y(R(J.method))}}function R(z){let B={"Cache-Control":"no-store","Content-Type":"text/plain; charset=utf-8"};if(z!=="GET"&&z!=="HEAD")return new Response("Method Not Allowed",{status:405,headers:{...B,Allow:"GET, HEAD"}});let{healthy:I,shuttingDown:J}=W();return new Response(z==="HEAD"?null:I?"ok":J?"shutting down":"degraded",{status:I?200:503,headers:B})}var L=Symbol.for("gemi.server.devGeneration"),X={graceMs:1e4,providerTimeoutMs:5000};class Y{app;inFlight=0;waiters=new Set;constructor(z){this.app=z}track(z){return async(B,I)=>{this.inFlight++;try{return await z(B,I)}finally{if(this.inFlight--,this.inFlight===0)this.wake()}}}get pending(){return this.inFlight}async retire({graceMs:z,providerTimeoutMs:B}){try{await this.idle(z),await Promise.resolve().then(()=>this.app.shutdown({timeoutMs:B}))}catch(I){C(I)}}idle(z){if(this.inFlight===0)return Promise.resolve();return new Promise((B)=>{let I=()=>{clearTimeout(J),this.waiters.delete(I),B()},J=setTimeout(I,z);this.waiters.add(I)})}wake(){for(let z of this.waiters)z()}}function N(z,B=X){let I=globalThis,J=I[L];if(I[L]=z,!J||J===z||typeof J.retire!=="function")return Promise.resolve();let K=J.retire.bind(J);return Promise.resolve().then(()=>K(B)).catch(C)}function C(z){console.error("[gemi] Shutting down the application a reload replaced failed:",z)}class k{app;instrumentation;handleSignals;server;stopping;settings;constructor(z){this.app=new S({kernel:z.kernel}),this.handleSignals=z.handleSignals??!0,this.instrumentation=U(z.instrumentation??((B,I)=>I(B)))}async start(){process.env.ROOT_DIR=H();let z=Bun.env.NODE_ENV==="production",B=_();if(z)G(B);let I=j(this.instrumentation,B.paths);if(z){if(this.handleSignals)A(()=>this.stop());this.settings=Z()}try{await this.app.waitForBoot()}catch(J){if(!z)this.app.shutdown({timeoutMs:X.providerTimeoutMs});throw J}if(z){let{httpProd:J}=await import("../chunk-q743rhy6.js");this.server=await J(this.app,I)}else{f();let{httpDev:J}=await import("../chunk-723a6j04.js"),K=new Y(this.app);this.server=await J(this.app,K.track(I)),N(K)}return this.server}stop(z={}){let B=this.app.sockets();return this.stopping??=P({server:this.server,closeSockets:B?()=>B.shutdown():void 0,shutdownProviders:(I)=>this.app.shutdown(I),settings:{...this.settings??Z(),...z}}),this.stopping}}export{W as liveness,Q as isShuttingDown,k as Server};
|
|
3
3
|
|
|
4
4
|
//# debugId=C97EF7FFD4053E3164756E2164756E21
|
package/dist/testing/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as followLive } from "../chunks/live-
|
|
2
|
-
import { $ as QueryManagerProvider, B as createMemoryHistory, M as I18nProvider, N as ServerDataContext, Q as QueryManagerContext, R as ProgressManager, V as RealtimeContext, W as liveModule, X as applyParams, Y as toVariantKey,
|
|
1
|
+
import { t as followLive } from "../chunks/live-JhGCkWuM.js";
|
|
2
|
+
import { $ as QueryManagerProvider, B as createMemoryHistory, M as I18nProvider, N as ServerDataContext, Q as QueryManagerContext, R as ProgressManager, V as RealtimeContext, W as liveModule, X as applyParams, Y as toVariantKey, _t as Subject, c as ClientRouterContext, i as RouteTransitionProvider, r as m, t as ThemeProvider, z as Action } from "../chunks/ThemeProvider-CDm5TXZC.js";
|
|
3
3
|
import { r as RouteStateProvider } from "../chunks/useParams-BN3XXfmG.js";
|
|
4
4
|
import { t as channelKey } from "../chunks/channelKey-CIhHpX6x.js";
|
|
5
5
|
import { Suspense, createElement, useContext, useMemo, useRef, useState } from "react";
|