gemi 0.126.0 → 0.127.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.
Files changed (34) hide show
  1. package/dist/{chunk-ravssmdy.js → chunk-3hndrc5z.js} +2 -2
  2. package/dist/{chunk-ravssmdy.js.map → chunk-3hndrc5z.js.map} +1 -1
  3. package/dist/{chunk-zbvdkh6q.js → chunk-3p9vj0h6.js} +1 -1
  4. package/dist/{chunk-cwpezdpw.js → chunk-6c8pn6hj.js} +13 -13
  5. package/dist/{chunk-cwpezdpw.js.map → chunk-6c8pn6hj.js.map} +3 -3
  6. package/dist/{chunk-mpt5jg4e.js → chunk-pxstrw29.js} +1 -1
  7. package/dist/{chunk-zy5gxk1g.js → chunk-yhxjhrvp.js} +1 -1
  8. package/dist/chunks/{ThemeProvider-CS2a1snV.js → ThemeProvider-BIrCSrFY.js} +2 -2
  9. package/dist/chunks/{ThemeProvider-CS2a1snV.js.map → ThemeProvider-BIrCSrFY.js.map} +1 -1
  10. package/dist/client/fetchFile.d.ts +66 -0
  11. package/dist/client/fetchFile.d.ts.map +1 -0
  12. package/dist/client/index.d.ts +3 -1
  13. package/dist/client/index.d.ts.map +1 -1
  14. package/dist/client/index.js +75 -2
  15. package/dist/client/index.js.map +1 -1
  16. package/dist/client/rpc.d.ts +11 -0
  17. package/dist/client/rpc.d.ts.map +1 -1
  18. package/dist/facades/index.js +1 -1
  19. package/dist/gemi.d.ts +4 -0
  20. package/dist/http/ApiRouter.d.ts +40 -3
  21. package/dist/http/ApiRouter.d.ts.map +1 -1
  22. package/dist/http/index.d.ts +1 -1
  23. package/dist/http/index.d.ts.map +1 -1
  24. package/dist/http/index.js +1 -1
  25. package/dist/i18n/index.js +1 -1
  26. package/dist/kernel/index.js +1 -1
  27. package/dist/server/index.js +1 -1
  28. package/dist/services/index.js +1 -1
  29. package/dist/testing/index.js +1 -1
  30. package/package.json +1 -1
  31. package/skills/gemi-react-best-practices/rules/query-no-hand-rolled-fetch.md +14 -0
  32. /package/dist/{chunk-zbvdkh6q.js.map → chunk-3p9vj0h6.js.map} +0 -0
  33. /package/dist/{chunk-mpt5jg4e.js.map → chunk-pxstrw29.js.map} +0 -0
  34. /package/dist/{chunk-zy5gxk1g.js.map → chunk-yhxjhrvp.js.map} +0 -0
@@ -0,0 +1,66 @@
1
+ import type { FileRPC } from "./rpc";
2
+ import type { UrlParser } from "./types";
3
+ /**
4
+ * The paths `fetchBlob` and `fetchText` take: the app's file routes
5
+ * (`this.stream(...)` and `this.file(...)`), or any path while `FileRPC` is
6
+ * empty — an app without file routes, or a program without the app's types.
7
+ */
8
+ export type FilePath = FilePathOf<FileRPC>;
9
+ /** `FilePath` over a given table, for tests. @internal */
10
+ export type FilePathOf<T> = [keyof T] extends [never] ? string : keyof T & string;
11
+ export type FetchFileOptions<P extends string> = {
12
+ /** The path's `:params`, substituted as `useQuery` does. */
13
+ params?: Partial<UrlParser<P>>;
14
+ /** The query string. `null` and `undefined` values are left out. */
15
+ search?: Record<string, string | number | boolean | null | undefined> | URLSearchParams;
16
+ /** Aborts the request; the returned promise then rejects with an `AbortError`. */
17
+ signal?: AbortSignal;
18
+ /** Anything else `fetch` takes (headers, `cache`, `credentials`). Always a `GET`. */
19
+ init?: Omit<RequestInit, "method" | "body" | "signal">;
20
+ };
21
+ /** @internal */
22
+ export type FetchFileArgs<P extends string> = {} extends UrlParser<P> ? [options?: FetchFileOptions<P>] : [options: FetchFileOptions<P> & {
23
+ params: UrlParser<P>;
24
+ }];
25
+ interface Fetched {
26
+ /**
27
+ * The file name the server gave in `Content-Disposition` (`filename*`
28
+ * first, then `filename`), or `null` when it gave none.
29
+ */
30
+ filename: string | null;
31
+ /** The response, for its headers and status. Its body has been read. */
32
+ response: Response;
33
+ }
34
+ export interface FetchedBlob extends Fetched {
35
+ blob: Blob;
36
+ }
37
+ export interface FetchedText extends Fetched {
38
+ text: string;
39
+ }
40
+ /**
41
+ * Downloads a file route's body as a `Blob`.
42
+ *
43
+ * ```ts
44
+ * const { blob, filename } = await fetchBlob("/pages/:pageId/post/image", {
45
+ * params: { pageId },
46
+ * search: { format: "png" },
47
+ * });
48
+ * ```
49
+ *
50
+ * A non-2xx rejects with a `QueryError` (`status`, the JSON `body` or `null`,
51
+ * `retryAfter`), the error `useQuery` throws, so `mutationErrorList(error)`
52
+ * reads its message. A network failure rejects with the browser's `TypeError`,
53
+ * an abort with its `AbortError`.
54
+ */
55
+ export declare function fetchBlob<P extends FilePath>(path: P, ...args: FetchFileArgs<P>): Promise<FetchedBlob>;
56
+ /** `fetchBlob`, with the body read as text. */
57
+ export declare function fetchText<P extends FilePath>(path: P, ...args: FetchFileArgs<P>): Promise<FetchedText>;
58
+ /**
59
+ * The file name in a `Content-Disposition` header: the RFC 5987
60
+ * `filename*=UTF-8''...` form when present and decodable, else `filename`.
61
+ *
62
+ * @internal Exported for tests.
63
+ */
64
+ export declare function filenameOf(response: Response): string | null;
65
+ export {};
66
+ //# sourceMappingURL=fetchFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchFile.d.ts","sourceRoot":"","sources":["../../client/fetchFile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAE3C,0DAA0D;AAC1D,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAElF,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI;IAC/C,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,oEAAoE;IACpE,MAAM,CAAC,EACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GAC5D,eAAe,CAAC;IACpB,kFAAkF;IAClF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qFAAqF;IACrF,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;CACxD,CAAC;AAGF,gBAAgB;AAChB,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,IACxC,EAAE,SAAS,SAAS,CAAC,CAAC,CAAC,GACnB,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAC/B,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AAEhE,UAAU,OAAO;IACf;;;OAGG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,wEAAwE;IACxE,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAChD,IAAI,EAAE,CAAC,EACP,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,WAAW,CAAC,CAGtB;AAED,+CAA+C;AAC/C,wBAAsB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAChD,IAAI,EAAE,CAAC,EACP,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,WAAW,CAAC,CAGtB;AAuCD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAe5D"}
@@ -9,6 +9,8 @@ export type { QueryFailure, RetryOption, RetryDelayOption, } from "./retryPolicy
9
9
  export { useMutation, useDelete, usePatch, usePost, usePut, useUpload } from "./useMutation";
10
10
  export type { MutationCallConfig, MutationConcurrency } from "./useMutation";
11
11
  export { useMutate } from "./useMutate";
12
+ export { fetchBlob, fetchText } from "./fetchFile";
13
+ export type { FetchedBlob, FetchedText, FetchFileOptions, FilePath } from "./fetchFile";
12
14
  export { useSetQueryData } from "./useSetQueryData";
13
15
  export type { QueryTarget, QueryUpdate } from "./useSetQueryData";
14
16
  export { useSubscription } from "./useSubscription";
@@ -42,7 +44,7 @@ export type { InitOptions } from "./init";
42
44
  export { isChunkLoadError, recoverFromChunkLoadError, CHUNK_RELOAD_MARKER, } from "./chunkLoadRecovery";
43
45
  export type { ChunkLoadErrorContext, ChunkLoadErrorSource, ChunkLoadRecoveryOptions, ChunkReloadBlock, } from "./chunkLoadRecovery";
44
46
  export { createRoot } from "./createRoot";
45
- export type { RPC, ViewRPC, I18nDictionary, BroadcastRPC, Features, FeatureKey, ClientFeatureKey, } from "./rpc";
47
+ export type { RPC, FileRPC, ViewRPC, I18nDictionary, BroadcastRPC, Features, FeatureKey, ClientFeatureKey, } from "./rpc";
46
48
  export type { ViewProps, LayoutProps, ViewPaths } from "./types";
47
49
  export type { CreateI18nDictionary } from "./I18nContext";
48
50
  export { Image } from "./Image";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC7F,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,YAAY,EACV,GAAG,EACH,OAAO,EACP,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,gBAAgB,GACjB,MAAM,OAAO,CAAC;AACf,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EACL,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { $ as shouldRetryQuery, A as useLocation, B as getRealtimeClient, C as useRoute, D as I18nProvider, E as I18nContext, G as QueryConfigContext, H as SOCKET_ID_HEADER, I as RealtimeContext, J as USER_QUERY_CONFIG_KEYS, K as QueryManagerContext, L as channelKey, M as isAbsoluteUrl, O as ServerDataContext, P as Action, Q as retryDelayFor, R as configureRealtime, S as routeDataUrl, T as useNavigate, U as toVariantKey, V as reconnectRealtime, W as applyParams$1, X as DEFAULT_STALE_TIME, Y as pickDefined, Z as isRetryableQueryError, _ as loadDictionary, a as useRouteTransition, b as setActiveLocale, c as ComponentsContext, d as loadViewModule, et as QueryError, f as subscribeViewModules, g as recoverFromChunkLoadError, h as isChunkLoadError, i as RouteTransitionProvider, j as domainUrl, k as ServerDataProvider, l as ComponentsProvider, m as configureChunkLoadRecovery, n as useTheme, o as ClientRouterContext, p as CHUNK_RELOAD_MARKER, q as QueryManagerProvider, r as m, s as ClientRouterProvider, t as ThemeProvider, tt as Subject, u as initialViewModulesReady, v as loadDictionaryForRender, w as useSearchParams, x as readRoutePayload, y as registerDictionary, z as currentSocketId } from "../chunks/ThemeProvider-CS2a1snV.js";
1
+ import { $ as retryDelayFor, A as useLocation, B as getRealtimeClient, C as useRoute, D as I18nProvider, E as I18nContext, G as QueryConfigContext, H as SOCKET_ID_HEADER, I as RealtimeContext, J as USER_QUERY_CONFIG_KEYS, K as QueryManagerContext, L as channelKey, M as isAbsoluteUrl, O as ServerDataContext, P as Action, Q as parseRetryAfter, R as configureRealtime, S as routeDataUrl, T as useNavigate, U as toVariantKey, V as reconnectRealtime, W as applyParams$1, X as DEFAULT_STALE_TIME, Y as pickDefined, Z as isRetryableQueryError, _ as loadDictionary, a as useRouteTransition, b as setActiveLocale, c as ComponentsContext, d as loadViewModule, et as shouldRetryQuery, f as subscribeViewModules, g as recoverFromChunkLoadError, h as isChunkLoadError, i as RouteTransitionProvider, j as domainUrl, k as ServerDataProvider, l as ComponentsProvider, m as configureChunkLoadRecovery, n as useTheme, nt as Subject, o as ClientRouterContext, p as CHUNK_RELOAD_MARKER, q as QueryManagerProvider, r as m, s as ClientRouterProvider, t as ThemeProvider, tt as QueryError, u as initialViewModulesReady, v as loadDictionaryForRender, w as useSearchParams, x as readRoutePayload, y as registerDictionary, z as currentSocketId } from "../chunks/ThemeProvider-BIrCSrFY.js";
2
2
  import { n as RouteStateContext, r as RouteStateProvider, t as useParams } from "../chunks/useParams-BN3XXfmG.js";
3
3
  import { Fragment, StrictMode, Suspense, createContext, createElement, isValidElement, lazy, memo, use, useCallback, useContext, useDeferredValue, useEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1308,6 +1308,79 @@ function useMutate() {
1308
1308
  };
1309
1309
  }
1310
1310
  //#endregion
1311
+ //#region client/fetchFile.ts
1312
+ /**
1313
+ * Downloads a file route's body as a `Blob`.
1314
+ *
1315
+ * ```ts
1316
+ * const { blob, filename } = await fetchBlob("/pages/:pageId/post/image", {
1317
+ * params: { pageId },
1318
+ * search: { format: "png" },
1319
+ * });
1320
+ * ```
1321
+ *
1322
+ * A non-2xx rejects with a `QueryError` (`status`, the JSON `body` or `null`,
1323
+ * `retryAfter`), the error `useQuery` throws, so `mutationErrorList(error)`
1324
+ * reads its message. A network failure rejects with the browser's `TypeError`,
1325
+ * an abort with its `AbortError`.
1326
+ */
1327
+ async function fetchBlob(path, ...args) {
1328
+ const response = await request(path, args[0]);
1329
+ return {
1330
+ blob: await response.blob(),
1331
+ filename: filenameOf(response),
1332
+ response
1333
+ };
1334
+ }
1335
+ /** `fetchBlob`, with the body read as text. */
1336
+ async function fetchText(path, ...args) {
1337
+ const response = await request(path, args[0]);
1338
+ return {
1339
+ text: await response.text(),
1340
+ filename: filenameOf(response),
1341
+ response
1342
+ };
1343
+ }
1344
+ async function request(path, options = {}) {
1345
+ const { params = {}, search, signal, init } = options;
1346
+ const url = applyParams$1(path, params);
1347
+ const query = searchString(search);
1348
+ const response = await fetch(`/api${url}${query ? `?${query}` : ""}`, {
1349
+ ...init,
1350
+ method: "GET",
1351
+ signal
1352
+ });
1353
+ if (!response.ok) {
1354
+ const body = await response.json().catch(() => null);
1355
+ throw new QueryError(url, query, response.status, body, parseRetryAfter(response.headers.get("retry-after")));
1356
+ }
1357
+ return response;
1358
+ }
1359
+ function searchString(search) {
1360
+ if (!search) return "";
1361
+ if (search instanceof URLSearchParams) return search.toString();
1362
+ const params = new URLSearchParams();
1363
+ for (const [key, value] of Object.entries(search)) if (value !== null && value !== void 0) params.append(key, String(value));
1364
+ return params.toString();
1365
+ }
1366
+ /**
1367
+ * The file name in a `Content-Disposition` header: the RFC 5987
1368
+ * `filename*=UTF-8''...` form when present and decodable, else `filename`.
1369
+ *
1370
+ * @internal Exported for tests.
1371
+ */
1372
+ function filenameOf(response) {
1373
+ const header = response.headers.get("content-disposition");
1374
+ if (!header) return null;
1375
+ const extended = /filename\*\s*=\s*([^']*)'[^']*'([^;]+)/i.exec(header);
1376
+ if (extended) try {
1377
+ return decodeURIComponent(extended[2].trim());
1378
+ } catch {}
1379
+ const plain = /filename\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([^;]+))/i.exec(header);
1380
+ if (!plain) return null;
1381
+ return (plain[1] !== void 0 ? plain[1].replace(/\\(.)/g, "$1") : plain[2].trim()) || null;
1382
+ }
1383
+ //#endregion
1311
1384
  //#region client/useSubscription.ts
1312
1385
  var MIN_RETRY_MS = 1e3;
1313
1386
  var MAX_RETRY_MS = 3e4;
@@ -3512,6 +3585,6 @@ function onStaticNavigate(callback) {
3512
3585
  return () => document.removeEventListener("gemi:page-load", listener);
3513
3586
  }
3514
3587
  //#endregion
3515
- export { CHUNK_RELOAD_MARKER, Form, FormError, FormFieldContainer, Head, Image, Link, OpenGraphImage, QueryError, QueryManagerProvider, Redirect, ValidationErrors, configureRealtime, create, createRoot, defineDictionary, init, isAuthenticationError, isChunkLoadError, isCsrfError, isFormError, isHttpError, isNetworkError, isNotFoundError, isPermissionError, isRateLimitError, isRetryableQueryError, isServerError, isValidationError, island, mutationErrorField, mutationErrorKind, mutationErrorList, onStaticNavigate, recoverFromChunkLoadError, textDirection, useAppIdMissmatch, useBreadcrumbs, useChannel, useChannelInvalidate, useDelete, useDictionary, useDomain, useEmailCode, useFeature, useFeatures, useForgotPassword, useFormData, useFormStatus, useFormatter, useInfiniteQuery, useIntendedUrl, useIsNavigationPending, useLocale, useLocation, useMutate, useMutation, useMutationStatus, useNavigate, useNavigationProgress, useParams, usePatch, usePost, usePrefetch, usePut, useQuery, useResetPassword, useRoute, useRouteTransition, useSearchParams, useSetQueryData, useSignIn, useSignOut, useSignUp, useSubscription, useTheme, useTranslator, useUpload, useUser };
3588
+ export { CHUNK_RELOAD_MARKER, Form, FormError, FormFieldContainer, Head, Image, Link, OpenGraphImage, QueryError, QueryManagerProvider, Redirect, ValidationErrors, configureRealtime, create, createRoot, defineDictionary, fetchBlob, fetchText, init, isAuthenticationError, isChunkLoadError, isCsrfError, isFormError, isHttpError, isNetworkError, isNotFoundError, isPermissionError, isRateLimitError, isRetryableQueryError, isServerError, isValidationError, island, mutationErrorField, mutationErrorKind, mutationErrorList, onStaticNavigate, recoverFromChunkLoadError, textDirection, useAppIdMissmatch, useBreadcrumbs, useChannel, useChannelInvalidate, useDelete, useDictionary, useDomain, useEmailCode, useFeature, useFeatures, useForgotPassword, useFormData, useFormStatus, useFormatter, useInfiniteQuery, useIntendedUrl, useIsNavigationPending, useLocale, useLocation, useMutate, useMutation, useMutationStatus, useNavigate, useNavigationProgress, useParams, usePatch, usePost, usePrefetch, usePut, useQuery, useResetPassword, useRoute, useRouteTransition, useSearchParams, useSetQueryData, useSignIn, useSignOut, useSignUp, useSubscription, useTheme, useTranslator, useUpload, useUser };
3516
3589
 
3517
3590
  //# sourceMappingURL=index.js.map