gemi 0.120.0 → 0.121.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/auth/connections/ConnectionManager.d.ts +9 -0
- package/dist/auth/connections/ConnectionManager.d.ts.map +1 -1
- package/dist/auth/connections/OAuthConnectionProvider.d.ts +21 -5
- package/dist/auth/connections/OAuthConnectionProvider.d.ts.map +1 -1
- package/dist/bin/gemi.js +2 -2
- package/dist/bin/gemi.js.map +2 -2
- package/dist/{chunk-dc8gyybt.js → chunk-03fez0pt.js} +1 -1
- package/dist/{chunk-hhymaj0m.js → chunk-baz7ne68.js} +3 -3
- package/dist/{chunk-hhymaj0m.js.map → chunk-baz7ne68.js.map} +3 -3
- package/dist/{chunk-wnj7q0th.js → chunk-f8xvjx6m.js} +1 -1
- package/dist/{chunk-dbx3g5ck.js → chunk-fpc7bfa9.js} +2 -2
- package/dist/{chunk-dbx3g5ck.js.map → chunk-fpc7bfa9.js.map} +1 -1
- package/dist/chunk-pspthd52.js +71 -0
- package/dist/chunk-pspthd52.js.map +13 -0
- package/dist/{chunk-231a9920.js → chunk-rhmxpjce.js} +1 -1
- package/dist/console/run.js +1 -1
- package/dist/facades/index.js +1 -1
- package/dist/http/index.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/internal/staticNavigationRuntime.d.ts +2 -2
- package/dist/internal/staticNavigationRuntime.d.ts.map +1 -1
- package/dist/kernel/index.js +1 -1
- package/dist/server/index.js +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-1xdrs2hx.js +0 -71
- package/dist/chunk-1xdrs2hx.js.map +0 -13
- /package/dist/{chunk-dc8gyybt.js.map → chunk-03fez0pt.js.map} +0 -0
- /package/dist/{chunk-wnj7q0th.js.map → chunk-f8xvjx6m.js.map} +0 -0
- /package/dist/{chunk-231a9920.js.map → chunk-rhmxpjce.js.map} +0 -0
|
@@ -4,6 +4,8 @@ import { type OAuthConnectionProvider, type OAuthTokenSet } from "./OAuthConnect
|
|
|
4
4
|
export type ConnectionOwner = {
|
|
5
5
|
id: string | number;
|
|
6
6
|
} | string | number;
|
|
7
|
+
/** See `ProviderConnection.status`. */
|
|
8
|
+
export type ConnectionStatus = "connected" | "needs_reconnect";
|
|
7
9
|
/** What `Connections.fake` answers an API request with. */
|
|
8
10
|
export type FakeConnectionHandler = (request: Request) => Response | Promise<Response>;
|
|
9
11
|
export interface ConnectionManagerOptions {
|
|
@@ -82,6 +84,12 @@ export declare class ProviderConnection {
|
|
|
82
84
|
/** A refresh was refused: the user has to connect again. */
|
|
83
85
|
get needsReconnect(): boolean;
|
|
84
86
|
get connectedAt(): Date;
|
|
87
|
+
/**
|
|
88
|
+
* What to show the user: `"needs_reconnect"` when a refresh was refused, or
|
|
89
|
+
* when the access token has expired and there is no refresh token to renew
|
|
90
|
+
* it; `"connected"` otherwise. Read without calling the provider.
|
|
91
|
+
*/
|
|
92
|
+
get status(): ConnectionStatus;
|
|
85
93
|
/** Whether every one of `scopes` was granted. */
|
|
86
94
|
hasScopes(...scopes: string[]): boolean;
|
|
87
95
|
/**
|
|
@@ -122,6 +130,7 @@ export declare class ProviderConnection {
|
|
|
122
130
|
scopes: string[];
|
|
123
131
|
expiresAt: Date;
|
|
124
132
|
needsReconnect: boolean;
|
|
133
|
+
status: ConnectionStatus;
|
|
125
134
|
connectedAt: Date;
|
|
126
135
|
};
|
|
127
136
|
private current;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionManager.d.ts","sourceRoot":"","sources":["../../../auth/connections/ConnectionManager.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAGrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,KAAK,uBAAuB,EAAE,KAAK,aAAa,EAAc,MAAM,2BAA2B,CAAC;AAEzG,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,MAAM,CAAC;AAExE,2DAA2D;AAC3D,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvF,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IACnD,+EAA+E;IAC/E,KAAK,CAAC,EAAE,eAAe,GAAG,CAAC,MAAM,eAAe,CAAC,CAAC;CACnD;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAShB,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,MAAM,CAAC,KAAK,SAAsB;IAElC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgD;IAC3E,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,SAAS,CAAoC;IACrD,QAAQ,CAAC,YAAY,EAAE,OAAO,EAAE,CAAM;gBAET,OAAO,EAAE,wBAAwB;IAE9D,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAEvD;IAED,yCAAyC;IACzC,IAAI,KAAK,IAAI,eAAe,CAW3B;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB;IAa/C,sFAAsF;IAChF,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAMtF,qCAAqC;IAC/B,IAAI,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAOhE;;;;OAIG;IACG,IAAI,CACR,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,kBAAkB,CAAC;IAe9B;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAM,GAAG,IAAI;IAOhE,qBAAqB;IACrB,OAAO,IAAI,IAAI;IAMf,IAAI,KAAK,IAAI,OAAO,CAEnB;IAID,gBAAgB;IACV,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAUjE;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAU9C,WAAW;
|
|
1
|
+
{"version":3,"file":"ConnectionManager.d.ts","sourceRoot":"","sources":["../../../auth/connections/ConnectionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
export interface OAuthConnectionProviderConfig {
|
|
2
2
|
/** The provider's authorization endpoint: `https://www.figma.com/oauth`. */
|
|
3
3
|
authorizeUrl: string;
|
|
4
|
-
/** The token endpoint, for the code exchange and refreshes. */
|
|
4
|
+
/** The token endpoint, for the code exchange (and refreshes, unless `refreshUrl` says otherwise). */
|
|
5
5
|
tokenUrl: string;
|
|
6
|
+
/**
|
|
7
|
+
* Where refresh tokens are spent, for a provider with a refresh endpoint of
|
|
8
|
+
* its own: Figma refreshes at `https://api.figma.com/v1/oauth/refresh`.
|
|
9
|
+
* Default `tokenUrl`.
|
|
10
|
+
*/
|
|
11
|
+
refreshUrl?: string;
|
|
12
|
+
/**
|
|
13
|
+
* The `grant_type` sent with a refresh. Default `"refresh_token"` (RFC 6749
|
|
14
|
+
* §6). `false` leaves it out, for a refresh endpoint that documents only
|
|
15
|
+
* `refresh_token` (Figma's).
|
|
16
|
+
*/
|
|
17
|
+
refreshGrantType?: string | false;
|
|
6
18
|
/**
|
|
7
19
|
* The RFC 7009 revocation endpoint. Without one, `revoke()` is refused and
|
|
8
20
|
* `disconnect()` (which forgets the tokens locally) is the way to remove a
|
|
@@ -16,7 +28,7 @@ export interface OAuthConnectionProviderConfig {
|
|
|
16
28
|
/** How `scopes` are joined on the authorization URL. Default `" "` (RFC 6749). */
|
|
17
29
|
scopeSeparator?: string;
|
|
18
30
|
/**
|
|
19
|
-
* How the client authenticates to the token and revocation endpoints:
|
|
31
|
+
* How the client authenticates to the token, refresh and revocation endpoints:
|
|
20
32
|
* `"body"` sends `client_id` and `client_secret` as form fields (what most
|
|
21
33
|
* providers document), `"basic"` sends them as HTTP Basic credentials.
|
|
22
34
|
* Default `"body"`.
|
|
@@ -71,6 +83,9 @@ export interface OAuthTokenSet {
|
|
|
71
83
|
* figma: new OAuthConnectionProvider({
|
|
72
84
|
* authorizeUrl: "https://www.figma.com/oauth",
|
|
73
85
|
* tokenUrl: "https://api.figma.com/v1/oauth/token",
|
|
86
|
+
* refreshUrl: "https://api.figma.com/v1/oauth/refresh",
|
|
87
|
+
* refreshGrantType: false,
|
|
88
|
+
* clientAuth: "basic",
|
|
74
89
|
* clientId: process.env.FIGMA_CLIENT_ID!,
|
|
75
90
|
* clientSecret: process.env.FIGMA_CLIENT_SECRET!,
|
|
76
91
|
* scopes: ["file_content:read"],
|
|
@@ -80,7 +95,7 @@ export interface OAuthTokenSet {
|
|
|
80
95
|
* ```
|
|
81
96
|
*/
|
|
82
97
|
export declare class OAuthConnectionProvider {
|
|
83
|
-
readonly config: Required<Omit<OAuthConnectionProviderConfig, "revokeUrl" | "redirectUri">> & Pick<OAuthConnectionProviderConfig, "revokeUrl" | "redirectUri">;
|
|
98
|
+
readonly config: Required<Omit<OAuthConnectionProviderConfig, "revokeUrl" | "redirectUri" | "refreshUrl">> & Pick<OAuthConnectionProviderConfig, "revokeUrl" | "redirectUri" | "refreshUrl">;
|
|
84
99
|
constructor(config: OAuthConnectionProviderConfig);
|
|
85
100
|
/** The URL to send the browser to. */
|
|
86
101
|
authorizationUrl(args: {
|
|
@@ -95,8 +110,9 @@ export declare class OAuthConnectionProvider {
|
|
|
95
110
|
redirectUri: string;
|
|
96
111
|
}): Promise<OAuthTokenSet>;
|
|
97
112
|
/**
|
|
98
|
-
* Spends `refreshToken` for a new access token
|
|
99
|
-
*
|
|
113
|
+
* Spends `refreshToken` for a new access token at `refreshUrl` (default
|
|
114
|
+
* `tokenUrl`). A provider that does not rotate refresh tokens (Figma)
|
|
115
|
+
* answers without one, and the old one is kept.
|
|
100
116
|
*/
|
|
101
117
|
refresh(refreshToken: string, scopes: string[]): Promise<OAuthTokenSet>;
|
|
102
118
|
/** Revokes `token` at the provider (RFC 7009). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthConnectionProvider.d.ts","sourceRoot":"","sources":["../../../auth/connections/OAuthConnectionProvider.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,6BAA6B;IAC5C,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB
|
|
1
|
+
{"version":3,"file":"OAuthConnectionProvider.d.ts","sourceRoot":"","sources":["../../../auth/connections/OAuthConnectionProvider.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,6BAA6B;IAC5C,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,kGAAkG;IAClG,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mEAAmE;IACnE,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,gFAAgF;IAChF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,uBAAuB;IAClC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CACvB,IAAI,CAAC,6BAA6B,EAAE,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC,CAChF,GACC,IAAI,CAAC,6BAA6B,EAAE,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;gBAEtE,MAAM,EAAE,6BAA6B;IA6BjD,sCAAsC;IACtC,gBAAgB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAkB7F,kDAAkD;IAClD,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAcvG;;;;OAIG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAYvE,kDAAkD;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBlF,OAAO,CAAC,IAAI;YAgBE,YAAY;CA2C3B;AAgBD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
package/dist/bin/gemi.js
CHANGED
|
@@ -41580,7 +41580,7 @@ import { join as join8 } from "path";
|
|
|
41580
41580
|
import { brotliCompressSync, constants as constants3, gzipSync } from "zlib";
|
|
41581
41581
|
|
|
41582
41582
|
// internal/staticNavigationRuntime.ts
|
|
41583
|
-
var STATIC_NAVIGATION_SOURCE =
|
|
41583
|
+
var STATIC_NAVIGATION_SOURCE = 'var r=document,i=window,a=history;i.__gemi_nav?.d();var L=new AbortController,h=(t,e,n,s)=>t.addEventListener(e,n,{signal:L.signal,...s}),q=i.__gemi_nav={d:()=>L.abort()},v=(t,e)=>{if(!t.g)t.g=1,import(e.s).then((n)=>{if(t.isConnected)t.r=n.h(t,n.m[e.e])}).catch((n)=>console.error(n))},D=(t)=>{let e=t.getElementById("gemi-islands");return e?JSON.parse(e.textContent):{i:[]}},R=(t,e)=>{for(let n of t.querySelectorAll("gemi-island")){let s=e.i[n.dataset.island];if(!s||n.o)continue;if(s.l=="eager")v(n,s);else if(s.l=="idle"||!i.IntersectionObserver||!n.children.length)(i.requestIdleCallback||setTimeout)(()=>v(n,s));else{let l=new IntersectionObserver((m)=>{if(m.some((d)=>d.isIntersecting))l.disconnect(),v(n,s)});for(let m of n.children)l.observe(m)}}},O=\'meta[name="gemi-static"]\',A="style:not([data-gemi-fonts])",T=A+",link[rel=stylesheet]",K=`head>${A},body>${A},link[rel=stylesheet]`,I=\'meta[name]:not([name=viewport]),meta[property],link[rel~=canonical],link[rel~=alternate],link[rel~=icon],link[rel=preload][as=font],style[data-gemi-fonts],script[type="application/ld+json"]\',w=(t)=>t.querySelector(O)?.content,C=(t)=>[...t.querySelectorAll(K)].map((e)=>e.outerHTML).join(),c=(t)=>t.href.split("#")[0],p=r.createElement("div");p.setAttribute("aria-live","polite");p.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap";r.body.append(p);var _=(t)=>{q.p={url:location.href,title:r.title,initial:t},r.dispatchEvent(new CustomEvent("gemi:page-load",{detail:q.p}))},f=new Map,k=(t)=>{let e=f.get(t);if(!e||Date.now()-e[0]>30000){let n=fetch(t,{headers:{accept:"text/html","x-gemi-navigate":"1"},signal:AbortSignal.timeout(1e4)}).then((s)=>{if(!s.ok||!/^text\\/html/.test(s.headers.get("content-type"))||new URL(s.url||t).origin!=location.origin)throw s;return s.text().then((l)=>[s.url||t,l])});e=[Date.now(),n],n.catch(()=>f.get(t)==e&&f.delete(t))}if(f.delete(t),f.set(t,e),f.size>10)f.delete(f.keys().next().value);return e[1]},M=(t)=>{let e=t.target.closest?.("a[href]"),n=e?.getAttribute("target");if(!e||n&&n!="_self"||e.hasAttribute("download")||/(^|\\s)external(\\s|$)/i.test(e.getAttribute("rel"))||e.closest("[data-gemi-reload]"))return;let s=new URL(e.getAttribute("href"),r.baseURI);if(s.origin==location.origin&&!(s.href.includes("#")&&c(s)==c(location)))return s},y={},U=()=>Math.random().toString(36).slice(2),E=()=>a.state?.g||a.replaceState({...a.state,g:U()},""),P=c(location),b=0,N=(t)=>{if(!t.hasAttribute("tabindex"))t.setAttribute("tabindex","-1"),t.addEventListener("blur",()=>t.removeAttribute("tabindex"),{once:!0});t.focus({preventScroll:!0})},Y=(t)=>{let e=r.body,n=t.body,s=D(t),l=r.documentElement;r.title=t.title;for(let o of["lang","dir"]){let u=t.documentElement.getAttribute(o);if(u==null)l.removeAttribute(o);else l.setAttribute(o,u)}for(let o of r.head.querySelectorAll(I))o.remove();let m=new Set([...r.querySelectorAll("link[rel=modulepreload]")].map((o)=>o.getAttribute("href")));r.head.append(...t.head.querySelectorAll(I),...[...t.head.querySelectorAll("link[rel=modulepreload]")].filter((o)=>!m.has(o.getAttribute("href"))));let d=new Map([...e.querySelectorAll("[data-gemi-persist]")].map((o)=>[o.dataset.gemiPersist,o])),g=[...n.querySelectorAll("[data-gemi-persist]")].map((o)=>[o,d.get(o.dataset.gemiPersist)]).filter((o)=>o[1]);for(let o of[...e.querySelectorAll("gemi-island")].reverse())if(o.o=1,!g.some((u)=>u[1].contains(o)))try{o.r?.unmount()}catch(u){console.error(u)}for(let[o,u]of g)o.replaceWith(u);for(let o of[...e.childNodes])if(!o.matches?.(T))o.remove();for(let o of[...n.children])if(o.matches(T))o.remove();for(let o of[...e.attributes])e.removeAttribute(o.name);for(let o of n.attributes)e.setAttribute(o.name,o.value);e.append(...n.childNodes,p),R(e,s)},H=async(t,e)=>{let n=++b,s=!e&&y[a.state?.g];a.scrollRestoration="manual";try{let[l,m]=await k(c(t));if(n!=b)return;let d=new DOMParser().parseFromString(m,"text/html");if(w(d)==null||w(d)!=w(r)||C(d)!=C(r))throw 0;if(e){let o=new URL(l);o.hash=t.hash,a.pushState({g:U()},"",o.href)}P=c(location),Y(d);let g=e&&t.hash&&r.getElementById(decodeURIComponent(t.hash.slice(1)));if(g)g.scrollIntoView({behavior:"instant"});else i.scrollTo({left:s?.[0]||0,top:s?.[1]||0,behavior:"instant"});if(e)N(g||r.querySelector("h1")||r.querySelector("main")||r.body);p.textContent=r.title,_(!1)}catch{if(n!=b)return;if(e)location.assign(t.href);else location.reload()}};h(r,"click",(t)=>{if(t.defaultPrevented||t.button||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let e=M(t);if(e&&r.dispatchEvent(new CustomEvent("gemi:before-navigate",{cancelable:!0,detail:{url:e.href}})))t.preventDefault(),E(),y[a.state.g]=[i.scrollX,i.scrollY],H(e,1)});h(i,"popstate",()=>{if(b++,c(location)==P){let t=y[a.state?.g];if(t)i.scrollTo({left:t[0],top:t[1],behavior:"instant"})}else if(a.state?.g)H(new URL(location.href),0);else location.reload()});h(i,"hashchange",E);h(i,"scroll",()=>a.state?.g&&(y[a.state.g]=[i.scrollX,i.scrollY]),{passive:!0});var S,x=(t)=>{if(r.querySelector(O)?.dataset.prefetch=="none"||navigator.connection?.saveData)return;let e=M(t);if(e&&c(e)!=c(location))k(c(e))};h(r,"pointerover",(t)=>{clearTimeout(S),S=setTimeout(()=>x(t),65)});h(r,"pointerout",()=>clearTimeout(S));h(r,"focusin",x);h(r,"touchstart",x,{passive:!0});E();R(r,D(r));_(!0);';
|
|
41584
41584
|
|
|
41585
41585
|
// server/modulePreloads.ts
|
|
41586
41586
|
var CLIENT_ENTRY_KEY = "app/client.tsx";
|
|
@@ -42191,5 +42191,5 @@ program.command("app:route-manifest").action(async () => {
|
|
|
42191
42191
|
});
|
|
42192
42192
|
program.parse();
|
|
42193
42193
|
|
|
42194
|
-
//# debugId=
|
|
42194
|
+
//# debugId=F237D3A6A8EE524064756E2164756E21
|
|
42195
42195
|
//# sourceMappingURL=gemi.js.map
|