@fragno-dev/core 0.1.0 → 0.1.1
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/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +6 -0
- package/dist/api/fragment-builder.d.ts +1 -1
- package/dist/api/fragment-instantiation.d.ts +1 -1
- package/dist/client/client.d.ts +1 -1
- package/dist/client/client.js +1 -1
- package/dist/client/client.svelte.d.ts +1 -1
- package/dist/client/client.svelte.js +1 -1
- package/dist/client/react.d.ts +1 -1
- package/dist/client/react.js +1 -1
- package/dist/client/solid.d.ts +1 -1
- package/dist/client/solid.js +1 -1
- package/dist/client/vanilla.d.ts +1 -1
- package/dist/client/vanilla.js +1 -1
- package/dist/client/vue.d.ts +1 -1
- package/dist/client/vue.js +1 -1
- package/dist/{client-CZCasGGB.js → client-D5ORmjBP.js} +3 -3
- package/dist/client-D5ORmjBP.js.map +1 -0
- package/dist/{fragment-builder-Dcdsms1l.d.ts → fragment-builder-D6-oLYnH.d.ts} +4 -2
- package/dist/{fragment-builder-Dcdsms1l.d.ts.map → fragment-builder-D6-oLYnH.d.ts.map} +1 -1
- package/dist/mod.d.ts +1 -1
- package/package.json +1 -1
- package/src/client/client.ts +6 -3
- package/dist/client-CZCasGGB.js.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -15,10 +15,10 @@ $ tsdown
|
|
|
15
15
|
[34mℹ[39m [2mdist/[22m[1mapi/fragment-instantiation.js[22m [2m 0.23 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
16
16
|
[34mℹ[39m [2mdist/[22m[1mapi/api.js[22m [2m 0.17 kB[22m [2m│ gzip: 0.12 kB[22m
|
|
17
17
|
[34mℹ[39m [2mdist/[22m[1mapi/fragment-builder.js[22m [2m 0.14 kB[22m [2m│ gzip: 0.11 kB[22m
|
|
18
|
-
[34mℹ[39m [2mdist/[22mclient-
|
|
18
|
+
[34mℹ[39m [2mdist/[22mclient-D5ORmjBP.js.map [2m72.56 kB[22m [2m│ gzip: 16.39 kB[22m
|
|
19
19
|
[34mℹ[39m [2mdist/[22mroute-B4RbOWjd.js.map [2m24.64 kB[22m [2m│ gzip: 6.78 kB[22m
|
|
20
|
-
[34mℹ[39m [2mdist/[22mclient-
|
|
21
|
-
[34mℹ[39m [2mdist/[22mfragment-builder-
|
|
20
|
+
[34mℹ[39m [2mdist/[22mclient-D5ORmjBP.js [2m24.49 kB[22m [2m│ gzip: 6.21 kB[22m
|
|
21
|
+
[34mℹ[39m [2mdist/[22mfragment-builder-D6-oLYnH.d.ts.map [2m19.06 kB[22m [2m│ gzip: 7.41 kB[22m
|
|
22
22
|
[34mℹ[39m [2mdist/[22mfragment-instantiation-f4AhwQss.js.map [2m18.81 kB[22m [2m│ gzip: 5.03 kB[22m
|
|
23
23
|
[34mℹ[39m [2mdist/[22mclient/vanilla.js.map [2m12.96 kB[22m [2m│ gzip: 3.58 kB[22m
|
|
24
24
|
[34mℹ[39m [2mdist/[22mclient/client.svelte.js.map [2m11.35 kB[22m [2m│ gzip: 2.76 kB[22m
|
|
@@ -41,18 +41,18 @@ $ tsdown
|
|
|
41
41
|
[34mℹ[39m [2mdist/[22mfragment-builder-DOnCVBqc.js [2m 1.09 kB[22m [2m│ gzip: 0.42 kB[22m
|
|
42
42
|
[34mℹ[39m [2mdist/[22mapi-DngJDcmO.js [2m 1.08 kB[22m [2m│ gzip: 0.43 kB[22m
|
|
43
43
|
[34mℹ[39m [2mdist/[22mintegrations/react-ssr.d.ts.map [2m 0.23 kB[22m [2m│ gzip: 0.17 kB[22m
|
|
44
|
-
[34mℹ[39m [2mdist/[22m[32m[1mclient/vanilla.d.ts[22m[39m [2m 3.65 kB[22m [2m│ gzip: 1.
|
|
44
|
+
[34mℹ[39m [2mdist/[22m[32m[1mclient/vanilla.d.ts[22m[39m [2m 3.65 kB[22m [2m│ gzip: 1.06 kB[22m
|
|
45
45
|
[34mℹ[39m [2mdist/[22m[32m[1mclient/react.d.ts[22m[39m [2m 3.44 kB[22m [2m│ gzip: 1.20 kB[22m
|
|
46
46
|
[34mℹ[39m [2mdist/[22m[32m[1mclient/solid.d.ts[22m[39m [2m 3.09 kB[22m [2m│ gzip: 0.97 kB[22m
|
|
47
47
|
[34mℹ[39m [2mdist/[22m[32m[1mclient/client.svelte.d.ts[22m[39m [2m 2.83 kB[22m [2m│ gzip: 0.83 kB[22m
|
|
48
|
-
[34mℹ[39m [2mdist/[22m[32m[1mclient/vue.d.ts[22m[39m [2m 2.76 kB[22m [2m│ gzip: 0.
|
|
48
|
+
[34mℹ[39m [2mdist/[22m[32m[1mclient/vue.d.ts[22m[39m [2m 2.76 kB[22m [2m│ gzip: 0.93 kB[22m
|
|
49
49
|
[34mℹ[39m [2mdist/[22m[32m[1mclient/client.d.ts[22m[39m [2m 1.39 kB[22m [2m│ gzip: 0.47 kB[22m
|
|
50
50
|
[34mℹ[39m [2mdist/[22m[32m[1mmod.d.ts[22m[39m [2m 0.81 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
51
51
|
[34mℹ[39m [2mdist/[22m[32m[1mintegrations/react-ssr.d.ts[22m[39m [2m 0.78 kB[22m [2m│ gzip: 0.38 kB[22m
|
|
52
52
|
[34mℹ[39m [2mdist/[22m[32m[1mapi/fragment-instantiation.d.ts[22m[39m [2m 0.49 kB[22m [2m│ gzip: 0.20 kB[22m
|
|
53
53
|
[34mℹ[39m [2mdist/[22m[32m[1mapi/api.d.ts[22m[39m [2m 0.31 kB[22m [2m│ gzip: 0.18 kB[22m
|
|
54
54
|
[34mℹ[39m [2mdist/[22m[32m[1mapi/fragment-builder.d.ts[22m[39m [2m 0.21 kB[22m [2m│ gzip: 0.14 kB[22m
|
|
55
|
-
[34mℹ[39m [2mdist/[22m[32mfragment-builder-
|
|
55
|
+
[34mℹ[39m [2mdist/[22m[32mfragment-builder-D6-oLYnH.d.ts[39m [2m23.08 kB[22m [2m│ gzip: 4.79 kB[22m
|
|
56
56
|
[34mℹ[39m [2mdist/[22m[32mapi-Dcr4_-3g.d.ts[39m [2m12.25 kB[22m [2m│ gzip: 3.51 kB[22m
|
|
57
|
-
[34mℹ[39m 50 files, total: 341.
|
|
58
|
-
[32m✔[39m Build complete in [
|
|
57
|
+
[34mℹ[39m 50 files, total: 341.57 kB
|
|
58
|
+
[32m✔[39m Build complete in [32m6900ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import "../api-Dcr4_-3g.js";
|
|
2
|
-
import { n as FragmentDefinition, r as defineFragment, t as FragmentBuilder } from "../fragment-builder-
|
|
2
|
+
import { n as FragmentDefinition, r as defineFragment, t as FragmentBuilder } from "../fragment-builder-D6-oLYnH.js";
|
|
3
3
|
export { FragmentBuilder, FragmentDefinition, defineFragment };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import "../api-Dcr4_-3g.js";
|
|
2
|
-
import { a as FragnoFragmentSharedConfig, c as FragnoPublicConfig, i as AnyFragnoFragmentSharedConfig, l as createFragment, o as FragnoInstantiatedFragment, s as FragnoPublicClientConfig, u as instantiatedFragmentFakeSymbol } from "../fragment-builder-
|
|
2
|
+
import { a as FragnoFragmentSharedConfig, c as FragnoPublicConfig, i as AnyFragnoFragmentSharedConfig, l as createFragment, o as FragnoInstantiatedFragment, s as FragnoPublicClientConfig, u as instantiatedFragmentFakeSymbol } from "../fragment-builder-D6-oLYnH.js";
|
|
3
3
|
export { AnyFragnoFragmentSharedConfig, FragnoFragmentSharedConfig, FragnoInstantiatedFragment, FragnoPublicClientConfig, FragnoPublicConfig, createFragment, instantiatedFragmentFakeSymbol };
|
package/dist/client/client.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import "../api-Dcr4_-3g.js";
|
|
2
|
-
import { A as isGetHook, C as HasGetRoutes, D as buildUrl, E as ValidateGetRoutePath, F as FragnoClientFetchAbortError, I as FragnoClientFetchError, L as FragnoClientFetchNetworkError, M as isStore, N as FragnoClientApiError, O as createClientBuilder, P as FragnoClientError, R as FragnoClientUnknownApiError, S as FragnoStoreData, T as ObjectContainingStoreField, _ as ExtractOutputSchemaForPath, b as FragnoClientHookData, d as CacheLine, f as ClientBuilder, g as ExtractNonGetRoutePaths, h as ExtractGetRoutes, j as isMutatorHook, k as getCacheKey, m as ExtractGetRoutePaths, p as CreateHookOptions, v as ExtractRouteByPath, w as IsValidGetRoutePath, x as FragnoClientMutatorData, y as ExtractRoutePath, z as FragnoErrorOptions } from "../fragment-builder-
|
|
2
|
+
import { A as isGetHook, C as HasGetRoutes, D as buildUrl, E as ValidateGetRoutePath, F as FragnoClientFetchAbortError, I as FragnoClientFetchError, L as FragnoClientFetchNetworkError, M as isStore, N as FragnoClientApiError, O as createClientBuilder, P as FragnoClientError, R as FragnoClientUnknownApiError, S as FragnoStoreData, T as ObjectContainingStoreField, _ as ExtractOutputSchemaForPath, b as FragnoClientHookData, d as CacheLine, f as ClientBuilder, g as ExtractNonGetRoutePaths, h as ExtractGetRoutes, j as isMutatorHook, k as getCacheKey, m as ExtractGetRoutePaths, p as CreateHookOptions, v as ExtractRouteByPath, w as IsValidGetRoutePath, x as FragnoClientMutatorData, y as ExtractRoutePath, z as FragnoErrorOptions } from "../fragment-builder-D6-oLYnH.js";
|
|
3
3
|
export { CacheLine, ClientBuilder, CreateHookOptions, ExtractGetRoutePaths, ExtractGetRoutes, ExtractNonGetRoutePaths, ExtractOutputSchemaForPath, ExtractRouteByPath, ExtractRoutePath, FragnoClientApiError, FragnoClientError, FragnoClientFetchAbortError, FragnoClientFetchError, FragnoClientFetchNetworkError, FragnoClientHookData, FragnoClientMutatorData, FragnoClientUnknownApiError, FragnoErrorOptions, FragnoStoreData, HasGetRoutes, IsValidGetRoutePath, ObjectContainingStoreField, ValidateGetRoutePath, buildUrl, createClientBuilder, getCacheKey, isGetHook, isMutatorHook, isStore };
|
package/dist/client/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../api-DngJDcmO.js";
|
|
2
2
|
import "../route-B4RbOWjd.js";
|
|
3
|
-
import { a as isGetHook, d as FragnoClientFetchAbortError, f as FragnoClientFetchError, i as getCacheKey, l as FragnoClientApiError, m as FragnoClientUnknownApiError, n as buildUrl, o as isMutatorHook, p as FragnoClientFetchNetworkError, r as createClientBuilder, s as isStore, t as ClientBuilder, u as FragnoClientError } from "../client-
|
|
3
|
+
import { a as isGetHook, d as FragnoClientFetchAbortError, f as FragnoClientFetchError, i as getCacheKey, l as FragnoClientApiError, m as FragnoClientUnknownApiError, n as buildUrl, o as isMutatorHook, p as FragnoClientFetchNetworkError, r as createClientBuilder, s as isStore, t as ClientBuilder, u as FragnoClientError } from "../client-D5ORmjBP.js";
|
|
4
4
|
import "../ssr-CamRrMc0.js";
|
|
5
5
|
|
|
6
6
|
export { ClientBuilder, FragnoClientApiError, FragnoClientError, FragnoClientFetchAbortError, FragnoClientFetchError, FragnoClientFetchNetworkError, FragnoClientUnknownApiError, buildUrl, createClientBuilder, getCacheKey, isGetHook, isMutatorHook, isStore };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { h as QueryParamsHint, l as InferOr, m as MaybeExtractPathParamsOrWiden, r as NonGetHTTPMethod } from "../api-Dcr4_-3g.js";
|
|
2
|
-
import { P as FragnoClientError, S as FragnoStoreData, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-
|
|
2
|
+
import { P as FragnoClientError, S as FragnoStoreData, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-D6-oLYnH.js";
|
|
3
3
|
import { ReadableAtom } from "nanostores";
|
|
4
4
|
import { Readable } from "svelte/store";
|
|
5
5
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../api-DngJDcmO.js";
|
|
2
2
|
import "../route-B4RbOWjd.js";
|
|
3
|
-
import { a as isGetHook, o as isMutatorHook, s as isStore } from "../client-
|
|
3
|
+
import { a as isGetHook, o as isMutatorHook, s as isStore } from "../client-D5ORmjBP.js";
|
|
4
4
|
import "../ssr-CamRrMc0.js";
|
|
5
5
|
import { atom } from "nanostores";
|
|
6
6
|
import { get, writable } from "svelte/store";
|
package/dist/client/react.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { f as ExtractPathParamsOrWiden, h as QueryParamsHint, l as InferOr, m as MaybeExtractPathParamsOrWiden, p as HasPathParams, r as NonGetHTTPMethod } from "../api-Dcr4_-3g.js";
|
|
2
|
-
import { P as FragnoClientError, S as FragnoStoreData, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-
|
|
2
|
+
import { P as FragnoClientError, S as FragnoStoreData, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-D6-oLYnH.js";
|
|
3
3
|
import { ReadableAtom, Store, StoreValue } from "nanostores";
|
|
4
4
|
import { FetcherValue } from "@nanostores/query";
|
|
5
5
|
import * as react0 from "react";
|
package/dist/client/react.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../api-DngJDcmO.js";
|
|
2
2
|
import "../route-B4RbOWjd.js";
|
|
3
|
-
import { a as isGetHook, c as isReadableAtom, o as isMutatorHook, s as isStore } from "../client-
|
|
3
|
+
import { a as isGetHook, c as isReadableAtom, o as isMutatorHook, s as isStore } from "../client-D5ORmjBP.js";
|
|
4
4
|
import { o as hydrateFromWindow } from "../ssr-CamRrMc0.js";
|
|
5
5
|
import { listenKeys } from "nanostores";
|
|
6
6
|
import { useCallback, useMemo, useRef, useSyncExternalStore } from "react";
|
package/dist/client/solid.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { h as QueryParamsHint, l as InferOr, m as MaybeExtractPathParamsOrWiden, r as NonGetHTTPMethod } from "../api-Dcr4_-3g.js";
|
|
2
|
-
import { P as FragnoClientError, S as FragnoStoreData, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-
|
|
2
|
+
import { P as FragnoClientError, S as FragnoStoreData, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-D6-oLYnH.js";
|
|
3
3
|
import { ReadableAtom, Store, StoreValue } from "nanostores";
|
|
4
4
|
import { Accessor } from "solid-js";
|
|
5
5
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
package/dist/client/solid.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../api-DngJDcmO.js";
|
|
2
2
|
import "../route-B4RbOWjd.js";
|
|
3
|
-
import { a as isGetHook, c as isReadableAtom, o as isMutatorHook, s as isStore } from "../client-
|
|
3
|
+
import { a as isGetHook, c as isReadableAtom, o as isMutatorHook, s as isStore } from "../client-D5ORmjBP.js";
|
|
4
4
|
import "../ssr-CamRrMc0.js";
|
|
5
5
|
import { atom } from "nanostores";
|
|
6
6
|
import { useStore } from "@nanostores/solid";
|
package/dist/client/vanilla.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { f as ExtractPathParamsOrWiden, l as InferOr, m as MaybeExtractPathParamsOrWiden, p as HasPathParams, r as NonGetHTTPMethod } from "../api-Dcr4_-3g.js";
|
|
2
|
-
import { P as FragnoClientError, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-
|
|
2
|
+
import { P as FragnoClientError, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-D6-oLYnH.js";
|
|
3
3
|
import { ReadableAtom } from "nanostores";
|
|
4
4
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
5
5
|
|
package/dist/client/vanilla.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../api-DngJDcmO.js";
|
|
2
2
|
import "../route-B4RbOWjd.js";
|
|
3
|
-
import { a as isGetHook, o as isMutatorHook } from "../client-
|
|
3
|
+
import { a as isGetHook, o as isMutatorHook } from "../client-D5ORmjBP.js";
|
|
4
4
|
import "../ssr-CamRrMc0.js";
|
|
5
5
|
|
|
6
6
|
//#region src/util/async.ts
|
package/dist/client/vue.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { h as QueryParamsHint, l as InferOr, m as MaybeExtractPathParamsOrWiden, r as NonGetHTTPMethod } from "../api-Dcr4_-3g.js";
|
|
2
|
-
import { P as FragnoClientError, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-
|
|
2
|
+
import { P as FragnoClientError, b as FragnoClientHookData, x as FragnoClientMutatorData } from "../fragment-builder-D6-oLYnH.js";
|
|
3
3
|
import { ReadableAtom, Store, StoreValue } from "nanostores";
|
|
4
4
|
import { DeepReadonly, Ref, ShallowRef, UnwrapNestedRefs } from "vue";
|
|
5
5
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
package/dist/client/vue.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../api-DngJDcmO.js";
|
|
2
2
|
import "../route-B4RbOWjd.js";
|
|
3
|
-
import { a as isGetHook, o as isMutatorHook } from "../client-
|
|
3
|
+
import { a as isGetHook, o as isMutatorHook } from "../client-D5ORmjBP.js";
|
|
4
4
|
import "../ssr-CamRrMc0.js";
|
|
5
5
|
import { atom } from "nanostores";
|
|
6
6
|
import { computed, getCurrentScope, isRef, onScopeDispose, ref, shallowRef, watch } from "vue";
|
|
@@ -677,8 +677,8 @@ var ClientBuilder = class {
|
|
|
677
677
|
this.#invalidateKeys((key) => key.startsWith(prefix));
|
|
678
678
|
}
|
|
679
679
|
};
|
|
680
|
-
function createClientBuilder(
|
|
681
|
-
const definition =
|
|
680
|
+
function createClientBuilder(fragmentBuilder, publicConfig, routesOrFactories) {
|
|
681
|
+
const definition = fragmentBuilder.definition;
|
|
682
682
|
const routes = resolveRouteFactories({
|
|
683
683
|
config: {},
|
|
684
684
|
deps: {},
|
|
@@ -697,4 +697,4 @@ function createClientBuilder(fragmentDefinition, publicConfig, routesOrFactories
|
|
|
697
697
|
|
|
698
698
|
//#endregion
|
|
699
699
|
export { isGetHook as a, isReadableAtom as c, FragnoClientFetchAbortError as d, FragnoClientFetchError as f, getCacheKey as i, FragnoClientApiError as l, FragnoClientUnknownApiError as m, buildUrl as n, isMutatorHook as o, FragnoClientFetchNetworkError as p, createClientBuilder as r, isStore as s, ClientBuilder as t, FragnoClientError as u };
|
|
700
|
-
//# sourceMappingURL=client-
|
|
700
|
+
//# sourceMappingURL=client-D5ORmjBP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-D5ORmjBP.js","names":["names: string[]","builtSegments: string[]","#code","#status","parameters: Record<string, string>","firstItem: StandardSchemaV1.InferOutput<TOutputSchema> | null","items: StandardSchemaV1.InferOutput<TOutputSchema>[]","lines","#publicConfig","#fragmentConfig","#cache","#createFetcherStore","#createMutatorStore","#invalidateKeys","#createRouteQueryHook","#createRouteQueryMutator","response: Response","mutatorStore: FragnoClientMutatorData<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >[\"mutatorStore\"]","#invalidate","fragmentConfig: FragnoFragmentSharedConfig<FlattenRouteFactories<TRoutesOrFactories>>"],"sources":["../src/api/internal/path.ts","../src/client/client-error.ts","../src/util/content-type.ts","../src/client/internal/ndjson-streaming.ts","../src/util/nanostores.ts","../src/client/client.ts"],"sourcesContent":["// Helper type to split a string by '/'\ntype SplitPath<T extends string> = T extends `${infer First}/${infer Rest}`\n ? First extends \"\"\n ? SplitPath<Rest>\n : [First, ...SplitPath<Rest>]\n : T extends \"\"\n ? []\n : [T];\n\n// Helper type to extract parameter name from a single segment\ntype ExtractParam<T extends string> = T extends `:${infer Name}`\n ? Name\n : T extends `**:${infer Name}`\n ? Name\n : T extends \"**\"\n ? \"**\"\n : never;\n\n// Helper type to extract all parameter names from path segments\ntype ExtractParamsFromSegments<T extends readonly string[]> = T extends readonly [\n infer First,\n ...infer Rest,\n]\n ? First extends string\n ? Rest extends readonly string[]\n ? ExtractParam<First> | ExtractParamsFromSegments<Rest>\n : ExtractParam<First>\n : never\n : never;\n\n/**\n * Type helper to extract path parameters from a const string path\n *\n * Supports:\n * - Regular paths: \"/path\" -> never\n * - Named parameters: \"/path/:name\" -> \"name\"\n * - Wildcard paths: \"/path/foo/**\" -> \"**\"\n * - Named wildcard paths: \"/path/foo/**:name\" -> \"name\"\n * - String (narrows): string -> never\n */\nexport type ExtractPathParams<T extends string, ValueType = string> =\n ExtractParamsFromSegments<SplitPath<T>> extends never\n ? Record<string, never>\n : Record<ExtractParamsFromSegments<SplitPath<T>>, ValueType>;\n\n/**\n * Same as @see ExtractPathParams, but returns `Record<string, ValueType>` when a string is\n * passed in.\n */\nexport type ExtractPathParamsOrWiden<T extends string, ValueType = string> = string extends T\n ? Record<string, ValueType>\n : ExtractPathParams<T, ValueType>;\n\n// TODO: MaybeExtractPathParamsOrWiden<string> --> undefined, should that be Record<string, string>?\n/**\n * Same as @see ExtractPathParamsOrWiden, but returns `undefined` when no path parameters in the\n * const.\n */\nexport type MaybeExtractPathParamsOrWiden<T extends string, ValueType = string> =\n HasPathParams<T> extends true ? ExtractPathParamsOrWiden<T, ValueType> : undefined;\n\n// Alternative version that returns the parameter names as a union type\nexport type ExtractPathParamNames<T extends string> = ExtractParamsFromSegments<SplitPath<T>>;\n\n// Helper type to extract parameter names as an ordered tuple from path segments\ntype ExtractParamNamesAsTuple<T extends readonly string[]> = T extends readonly [\n infer First,\n ...infer Rest,\n]\n ? First extends string\n ? Rest extends readonly string[]\n ? ExtractParam<First> extends never\n ? ExtractParamNamesAsTuple<Rest>\n : [ExtractParam<First>, ...ExtractParamNamesAsTuple<Rest>]\n : ExtractParam<First> extends never\n ? []\n : [ExtractParam<First>]\n : []\n : [];\n\n// Type to convert ExtractPathParamNames result to a string tuple with the same number of elements\nexport type ExtractPathParamNamesAsTuple<T extends string> = ExtractParamNamesAsTuple<SplitPath<T>>;\n\n// Helper type to create labeled tuple from parameter names\ntype CreateLabeledTuple<T extends readonly string[], ElementType = string> = T extends readonly [\n infer First,\n ...infer Rest,\n]\n ? First extends string\n ? Rest extends readonly string[]\n ? [{ [K in First]: ElementType }[First], ...CreateLabeledTuple<Rest, ElementType>]\n : [{ [K in First]: ElementType }[First]]\n : []\n : [];\n\n// Type to convert path parameters to a labeled tuple\nexport type ExtractPathParamsAsLabeledTuple<\n T extends string,\n ElementType = string,\n> = CreateLabeledTuple<ExtractParamNamesAsTuple<SplitPath<T>>, ElementType>;\n\n// Type to check if a path has parameters\nexport type HasPathParams<T extends string> = ExtractPathParamNames<T> extends never ? false : true;\n\n/**\n * Creates a query parameters type where the specified keys are hints (optional)\n * and additional string keys are also allowed.\n *\n * This allows for flexible query parameter typing where:\n * - All hinted parameters are optional\n * - Additional parameters beyond the hints are allowed\n * - Values can be of any specified type (defaults to string)\n *\n * @example\n * ```ts\n * type MyQuery = QueryParamsHint<\"page\" | \"limit\", string>;\n * // Allows: { page?: string, limit?: string, [key: string]: string }\n *\n * const query1: MyQuery = {}; // Valid - no params required\n * const query2: MyQuery = { page: \"1\" }; // Valid - hinted param\n * const query3: MyQuery = { page: \"1\", sort: \"asc\" }; // Valid - additional param\n * ```\n */\nexport type QueryParamsHint<TQueryParameters extends string, ValueType = string> = Partial<\n Record<TQueryParameters, ValueType>\n> &\n Record<string, ValueType>;\n\n// Runtime utilities\n\n/**\n * Extract parameter names from a path pattern at runtime.\n * Examples:\n * - \"/users/:id\" => [\"id\"]\n * - \"/files/**\" => [\"**\"]\n * - \"/files/**:rest\" => [\"rest\"]\n */\nexport function extractPathParams<TPath extends string>(\n pathPattern: TPath,\n): ExtractPathParamNames<TPath>[] {\n const segments = pathPattern.split(\"/\").filter((s) => s.length > 0);\n const names: string[] = [];\n\n for (const segment of segments) {\n if (segment.startsWith(\":\")) {\n names.push(segment.slice(1));\n continue;\n }\n\n if (segment === \"**\") {\n names.push(\"**\");\n continue;\n }\n\n if (segment.startsWith(\"**:\")) {\n names.push(segment.slice(3));\n continue;\n }\n }\n\n return names as ExtractPathParamNames<TPath>[];\n}\n\n/**\n * Match an actual path against a path pattern and return extracted params.\n *\n * Notes and limitations:\n * - Named segment \":name\" captures a single path segment.\n * - Wildcard \"**\" or \"**:name\" greedily captures the remainder of the path and\n * should be placed at the end of the pattern.\n * - If the path does not match the pattern, an empty object is returned.\n */\nexport function matchPathParams<TPath extends string>(\n pathPattern: TPath,\n actualPath: string,\n): ExtractPathParams<TPath> {\n const patternSegments = pathPattern.split(\"/\").filter((s) => s.length > 0);\n const actualSegments = actualPath.split(\"/\").filter((s) => s.length > 0);\n\n const params: Record<string, string> = {};\n\n let i = 0;\n let j = 0;\n\n while (i < patternSegments.length && j < actualSegments.length) {\n const patternSegment = patternSegments[i];\n const actualSegment = actualSegments[j];\n\n if (patternSegment.startsWith(\":\")) {\n const name = patternSegment.slice(1);\n params[name] = decodeURIComponent(actualSegment);\n i += 1;\n j += 1;\n continue;\n }\n\n if (patternSegment === \"**\") {\n const remainder = actualSegments.slice(j).join(\"/\");\n params[\"**\"] = remainder ? decodeURIComponent(remainder) : \"\";\n // Wildcard consumes the rest; pattern should end here\n i = patternSegments.length;\n j = actualSegments.length;\n break;\n }\n\n if (patternSegment.startsWith(\"**:\")) {\n const name = patternSegment.slice(3);\n const remainder = actualSegments.slice(j).join(\"/\");\n params[name] = remainder ? decodeURIComponent(remainder) : \"\";\n // Wildcard consumes the rest; pattern should end here\n i = patternSegments.length;\n j = actualSegments.length;\n break;\n }\n\n // Literal segment must match exactly\n if (patternSegment === actualSegment) {\n i += 1;\n j += 1;\n continue;\n }\n\n // Mismatch\n return {} as ExtractPathParams<TPath>;\n }\n\n // If there are remaining pattern segments\n while (i < patternSegments.length) {\n const remaining = patternSegments[i];\n if (remaining === \"**\") {\n params[\"**\"] = \"\";\n i += 1;\n continue;\n }\n if (remaining.startsWith(\":\")) {\n const name = remaining.slice(1);\n params[name] = \"\";\n i += 1;\n continue;\n }\n if (remaining.startsWith(\"**:\")) {\n const name = remaining.slice(3);\n params[name] = \"\";\n i += 1;\n continue;\n }\n // Non-parameter remaining segment without corresponding actual segment → mismatch\n return {} as ExtractPathParams<TPath>;\n }\n\n // If there are remaining actual segments without pattern to match → mismatch\n if (j < actualSegments.length) {\n return {} as ExtractPathParams<TPath>;\n }\n\n return params as ExtractPathParams<TPath>;\n}\n\n/**\n * Build a concrete path by replacing placeholders in a path pattern with values.\n *\n * Supports the same placeholder syntax as the matcher:\n * - Named parameter \":name\" is URL-encoded as a single segment\n * - Anonymous wildcard \"**\" inserts the remainder as-is (slashes preserved)\n * - Named wildcard \"**:name\" inserts the remainder from the named key\n *\n * Examples:\n * - buildPath(\"/users/:id\", { id: \"123\" }) => \"/users/123\"\n * - buildPath(\"/files/**\", { \"**\": \"a/b\" }) => \"/files/a/b\"\n * - buildPath(\"/files/**:rest\", { rest: \"a/b\" }) => \"/files/a/b\"\n */\nexport function buildPath<TPath extends string>(\n pathPattern: TPath,\n params: ExtractPathParams<TPath>,\n): string {\n const patternSegments = pathPattern.split(\"/\");\n\n const builtSegments: string[] = [];\n\n for (const segment of patternSegments) {\n if (segment.length === 0) {\n // Preserve leading/trailing/duplicate slashes\n builtSegments.push(\"\");\n continue;\n }\n\n if (segment.startsWith(\":\")) {\n const name = segment.slice(1);\n const value = (params as Record<string, string | undefined>)[name];\n if (value === undefined) {\n throw new Error(`Missing value for path parameter :${name}`);\n }\n builtSegments.push(encodeURIComponent(value));\n continue;\n }\n\n if (segment === \"**\") {\n const value = (params as Record<string, string | undefined>)[\"**\"];\n if (value === undefined) {\n throw new Error(\"Missing value for path wildcard **\");\n }\n builtSegments.push(value);\n continue;\n }\n\n if (segment.startsWith(\"**:\")) {\n const name = segment.slice(3);\n const value = (params as Record<string, string | undefined>)[name];\n if (value === undefined) {\n throw new Error(`Missing value for path wildcard **:${name}`);\n }\n builtSegments.push(value);\n continue;\n }\n\n // Literal segment\n builtSegments.push(segment);\n }\n\n // Join with '/'. Empty segments preserve leading/trailing slashes\n return builtSegments.join(\"/\");\n}\n","import type { StatusCode } from \"../http/http-status\";\n\nexport type FragnoErrorOptions = {\n cause?: Error | unknown;\n};\n\n/**\n * Base error class for all Fragno client errors.\n */\nexport abstract class FragnoClientError<TCode extends string = string> extends Error {\n readonly #code: TCode;\n\n constructor(message: string, code: TCode, options: FragnoErrorOptions = {}) {\n super(message, { cause: options.cause });\n this.name = \"FragnoClientError\";\n this.#code = code;\n }\n\n get code(): TCode | (string & {}) {\n return this.#code;\n }\n}\n\nexport class FragnoClientFetchError extends FragnoClientError<\n \"NO_BODY\" | \"NETWORK_ERROR\" | \"ABORT_ERROR\"\n> {\n constructor(\n message: string,\n code: \"NO_BODY\" | \"NETWORK_ERROR\" | \"ABORT_ERROR\",\n options: FragnoErrorOptions = {},\n ) {\n super(message, code, options);\n this.name = \"FragnoClientFetchError\";\n }\n\n static fromUnknownFetchError(error: unknown): FragnoClientFetchError {\n if (!(error instanceof Error)) {\n return new FragnoClientFetchNetworkError(\"Network request failed\", { cause: error });\n }\n\n if (error.name === \"AbortError\") {\n return new FragnoClientFetchAbortError(\"Request was aborted\", { cause: error });\n }\n\n return new FragnoClientFetchNetworkError(\"Network request failed\", { cause: error });\n }\n}\n\n/**\n * Error thrown when a network request fails (e.g., no internet connection, DNS failure).\n */\nexport class FragnoClientFetchNetworkError extends FragnoClientFetchError {\n constructor(message: string = \"Network request failed\", options: FragnoErrorOptions = {}) {\n super(message, \"NETWORK_ERROR\", options);\n this.name = \"FragnoClientFetchNetworkError\";\n }\n}\n\n/**\n * Error thrown when a request is aborted (e.g., user cancels request, timeout).\n */\nexport class FragnoClientFetchAbortError extends FragnoClientFetchError {\n constructor(message: string = \"Request was aborted\", options: FragnoErrorOptions = {}) {\n super(message, \"ABORT_ERROR\", options);\n this.name = \"FragnoClientFetchAbortError\";\n }\n}\n\n/**\n * Error thrown when the API result is unexpected, e.g. no json is returned.\n */\nexport class FragnoClientUnknownApiError extends FragnoClientError<\"UNKNOWN_API_ERROR\"> {\n readonly #status: StatusCode;\n\n constructor(\n message: string = \"Unknown API error\",\n status: StatusCode,\n options: FragnoErrorOptions = {},\n ) {\n super(message, \"UNKNOWN_API_ERROR\", options);\n this.name = \"FragnoClientUnknownApiError\";\n this.#status = status;\n }\n\n get status(): StatusCode {\n return this.#status;\n }\n}\n\nexport class FragnoClientApiError<\n TErrorCode extends string = string,\n> extends FragnoClientError<TErrorCode> {\n readonly #status: StatusCode;\n\n constructor(\n { message, code }: { message: string; code: TErrorCode },\n status: StatusCode,\n options: FragnoErrorOptions = {},\n ) {\n super(message, code, options);\n this.name = \"FragnoClientApiError\";\n this.#status = status;\n }\n\n get status(): StatusCode {\n return this.#status;\n }\n\n /**\n * The error code returned by the API.\n *\n * The type is `TErrorCode` (the set of known error codes for this route), but may also be a string\n * for forward compatibility with future error codes.\n */\n get code(): TErrorCode | (string & {}) {\n return super.code as TErrorCode | (string & {});\n }\n\n static async fromResponse<TErrorCode extends string = string>(\n response: Response,\n ): Promise<FragnoClientApiError<TErrorCode> | FragnoClientUnknownApiError> {\n const unknown = await response.json();\n const status = response.status as StatusCode;\n\n if (!(\"message\" in unknown || \"code\" in unknown)) {\n return new FragnoClientUnknownApiError(\"Unknown API error\", status);\n }\n\n if (!(typeof unknown.message === \"string\" && typeof unknown.code === \"string\")) {\n return new FragnoClientUnknownApiError(\"Unknown API error\", status);\n }\n\n return new FragnoClientApiError(\n {\n message: unknown.message,\n code: unknown.code as TErrorCode,\n },\n status,\n );\n }\n}\n","/**\n * Represents a parsed content-type header\n */\nexport interface ParsedContentType {\n /** The main type (e.g., \"application\", \"text\", \"image\") */\n type: string;\n /** The subtype (e.g., \"json\", \"html\", \"png\") */\n subtype: string;\n /** The full media type (e.g., \"application/json\") */\n mediaType: string;\n /** Additional parameters like charset, boundary, etc. */\n parameters: Record<string, string>;\n}\n\n/**\n * Parses a content-type header string into its components\n *\n * @param contentType - The content-type header value to parse\n * @returns A ParsedContentType object or null if the input is invalid\n *\n * @example\n * ```ts\n * const { type, subtype, mediaType, parameters }\n * = parseContentType(\"application/json; charset=utf-8\");\n * console.assert(type === \"application\");\n * console.assert(subtype === \"json\");\n * console.assert(mediaType === \"application/json\");\n * console.assert(parameters[\"charset\"] === \"utf-8\");\n */\nexport function parseContentType(contentType: string | null | undefined): ParsedContentType | null {\n if (!contentType || typeof contentType !== \"string\") {\n return null;\n }\n\n const trimmed = contentType.trim();\n if (!trimmed) {\n return null;\n }\n\n const parts = trimmed.split(\";\").map((part) => part.trim());\n const mediaType = parts[0];\n\n if (!mediaType) {\n return null;\n }\n\n const typeParts = mediaType.split(\"/\");\n if (typeParts.length !== 2) {\n return null;\n }\n\n const [type, subtype] = typeParts.map((part) => part.trim().toLowerCase());\n\n if (!type || !subtype) {\n return null;\n }\n\n const parameters: Record<string, string> = {};\n\n for (let i = 1; i < parts.length; i++) {\n const param = parts[i];\n const equalIndex = param.indexOf(\"=\");\n\n if (equalIndex > 0) {\n const key = param.slice(0, equalIndex).trim().toLowerCase();\n let value = param.slice(equalIndex + 1).trim();\n\n if (value.startsWith('\"') && value.endsWith('\"')) {\n value = value.slice(1, -1);\n }\n\n if (key) {\n parameters[key] = value;\n }\n }\n }\n\n return {\n type,\n subtype,\n mediaType: `${type}/${subtype}`,\n parameters,\n };\n}\n","import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport {\n FragnoClientError,\n FragnoClientFetchError,\n FragnoClientFetchAbortError,\n FragnoClientUnknownApiError,\n} from \"../client-error\";\n\n/**\n * Creates a promise that rejects when the abort signal is triggered\n */\nfunction createAbortPromise(abortSignal: AbortSignal): Promise<never> {\n return new Promise<never>((_, reject) => {\n const abortHandler = () => {\n reject(new FragnoClientFetchAbortError(\"Operation was aborted\"));\n };\n\n if (abortSignal.aborted) {\n abortHandler();\n } else {\n abortSignal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n });\n}\n\n/**\n * Result of NDJSON streaming that includes the first item and a promise for the streaming continuation\n */\nexport interface NdjsonStreamingResult<T> {\n firstItem: T;\n streamingPromise: Promise<T[]>;\n}\n\nexport interface NdjsonStreamingStore<\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n> {\n setData(value: StandardSchemaV1.InferOutput<TOutputSchema>): void;\n setError(value: FragnoClientError<TErrorCode>): void;\n}\n\n/**\n * Handles NDJSON streaming responses by returning the first item from the fetcher\n * and then continuing to stream updates via the store's mutate method.\n *\n * This makes it so that we can wait until the first chunk before updating the store, if we did\n * not do this, `loading` would briefly be false before the first item would be populated in the\n * result.\n *\n * @param response - The fetch Response object containing the NDJSON stream\n * @param store - The fetcher store to update with streaming data\n * @param abortSignal - Optional AbortSignal to cancel the streaming operation\n * @returns A promise that resolves to an object containing the first item and a streaming promise\n */\nexport async function handleNdjsonStreamingFirstItem<\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n>(\n response: Response,\n store?: NdjsonStreamingStore<TOutputSchema, TErrorCode>,\n options: { abortSignal?: AbortSignal } = {},\n): Promise<NdjsonStreamingResult<StandardSchemaV1.InferOutput<TOutputSchema>>> {\n if (!response.body) {\n throw new FragnoClientFetchError(\"Streaming response has no body\", \"NO_BODY\");\n }\n\n const { abortSignal } = options;\n\n if (abortSignal?.aborted) {\n throw new FragnoClientFetchAbortError(\"Operation was aborted\");\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n let buffer = \"\";\n let firstItem: StandardSchemaV1.InferOutput<TOutputSchema> | null = null;\n const items: StandardSchemaV1.InferOutput<TOutputSchema>[] = [];\n\n try {\n // Read until we get the first item\n while (firstItem === null) {\n // Check for abort signal before each read\n if (abortSignal?.aborted) {\n reader.releaseLock();\n throw new FragnoClientFetchAbortError(\"Operation was aborted\");\n }\n\n const { done, value } = await (abortSignal\n ? Promise.race([reader.read(), createAbortPromise(abortSignal)])\n : reader.read());\n\n if (done) {\n break;\n }\n\n // Decode the chunk and add to buffer\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\"; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (!line.trim()) {\n continue;\n }\n\n try {\n const jsonObject = JSON.parse(line) as StandardSchemaV1.InferOutput<TOutputSchema>;\n items.push(jsonObject);\n\n if (firstItem === null) {\n firstItem = jsonObject;\n // We don't call store.setKey here for the first item\n // The caller will handle it via the return value\n\n // Start background streaming for remaining items and return the promise\n const streamingPromise = continueStreaming(\n reader,\n decoder,\n buffer,\n items,\n store,\n abortSignal,\n );\n return {\n firstItem,\n streamingPromise,\n };\n }\n } catch (parseError) {\n throw new FragnoClientUnknownApiError(\"Failed to parse NDJSON line\", 500, {\n cause: parseError,\n });\n }\n }\n }\n\n // If we get here and haven't returned a first item, the stream was empty\n if (firstItem === null) {\n reader.releaseLock();\n throw new FragnoClientUnknownApiError(\"NDJSON stream contained no valid items\", 500);\n }\n\n // This should never be reached, but TypeScript needs it\n reader.releaseLock();\n throw new FragnoClientFetchError(\"Unexpected end of stream processing\", \"NO_BODY\");\n } catch (error) {\n // Handle errors during streaming\n if (error instanceof FragnoClientError) {\n store?.setError(error);\n throw error;\n } else {\n // TODO: Not sure about the typing here\n const clientError = new FragnoClientUnknownApiError(\"Unknown streaming error\", 500, {\n cause: error,\n }) as unknown as FragnoClientError<TErrorCode>;\n store?.setError(clientError);\n throw clientError;\n }\n }\n}\n\n/**\n * Continues streaming the remaining items in the background\n */\n// FIXME: Shitty code\nasync function continueStreaming<TOutputSchema extends StandardSchemaV1, TErrorCode extends string>(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n initialBuffer: string,\n items: StandardSchemaV1.InferOutput<TOutputSchema>[],\n store?: NdjsonStreamingStore<TOutputSchema, TErrorCode>,\n abortSignal?: AbortSignal,\n): Promise<StandardSchemaV1.InferOutput<TOutputSchema>[]> {\n let buffer = initialBuffer;\n\n try {\n while (true) {\n // Check for abort signal before each read\n if (abortSignal?.aborted) {\n throw new FragnoClientFetchAbortError(\"Operation was aborted\");\n }\n\n const { done, value } = await (abortSignal\n ? Promise.race([reader.read(), createAbortPromise(abortSignal)])\n : reader.read());\n\n if (done) {\n // Process any remaining buffer content\n if (buffer.trim()) {\n const lines = buffer.split(\"\\n\");\n for (const line of lines) {\n if (!line.trim()) continue;\n\n try {\n const jsonObject = JSON.parse(line) as StandardSchemaV1.InferOutput<TOutputSchema>;\n items.push(jsonObject);\n store?.setData([...items]);\n } catch (parseError) {\n throw new FragnoClientUnknownApiError(\"Failed to parse NDJSON line\", 400, {\n cause: parseError,\n });\n }\n }\n }\n break;\n }\n\n // Decode the chunk and add to buffer\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\"; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (!line.trim()) continue;\n\n try {\n const jsonObject = JSON.parse(line) as StandardSchemaV1.InferOutput<TOutputSchema>;\n items.push(jsonObject);\n store?.setData([...items]);\n } catch (parseError) {\n throw new FragnoClientUnknownApiError(\"Failed to parse NDJSON line\", 400, {\n cause: parseError,\n });\n }\n }\n }\n } catch (error) {\n if (error instanceof FragnoClientError) {\n store?.setError(error);\n } else {\n const clientError = new FragnoClientUnknownApiError(\"Unknown streaming error\", 400, {\n cause: error,\n }) as unknown as FragnoClientError<TErrorCode>;\n store?.setError(clientError);\n throw clientError;\n }\n\n throw error;\n } finally {\n reader.releaseLock();\n }\n\n return items;\n}\n","import type { ReadableAtom } from \"nanostores\";\n\ntype MaybeAtom<T> = T | ReadableAtom<T>;\n\n/**\n * Normalizes a value that could be a plain value, an Atom, or a Vue Ref to a plain value.\n */\nexport function unwrapAtom<T>(value: MaybeAtom<T>): T {\n // Check if it's an Atom (has .get method)\n if (value && typeof value === \"object\" && \"get\" in value && typeof value.get === \"function\") {\n return value.get();\n }\n\n return value as T;\n}\n\n/**\n * Normalizes an object where values can be plain values, Atoms, or Vue Refs.\n * Returns a new object with all values normalized to plain values.\n */\nexport function unwrapObject<T>(\n params: Record<string, MaybeAtom<T>> | undefined,\n): Record<string, T> | undefined {\n if (!params) {\n return undefined;\n }\n\n return Object.fromEntries(Object.entries(params).map(([key, value]) => [key, unwrapAtom(value)]));\n}\n\nexport function isReadableAtom(value: unknown): value is ReadableAtom<unknown> {\n if (!value) {\n return false;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n if (!(\"get\" in value) || typeof value.get !== \"function\") {\n return false;\n }\n\n if (!(\"lc\" in value) || typeof value.lc !== \"number\") {\n return false;\n }\n\n if (!(\"notify\" in value) || typeof value.notify !== \"function\") {\n return false;\n }\n\n if (!(\"off\" in value) || typeof value.off !== \"function\") {\n return false;\n }\n\n if (!(\"subscribe\" in value) || typeof value.subscribe !== \"function\") {\n return false;\n }\n\n if (!(\"value\" in value)) {\n return false;\n }\n\n return true;\n}\n","import { nanoquery, type FetcherStore, type MutatorStore } from \"@nanostores/query\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { task, type ReadableAtom, type Store } from \"nanostores\";\nimport type { FragnoRouteConfig, HTTPMethod, NonGetHTTPMethod } from \"../api/api\";\nimport {\n buildPath,\n extractPathParams,\n type ExtractPathParams,\n type ExtractPathParamsOrWiden,\n type MaybeExtractPathParamsOrWiden,\n} from \"../api/internal/path\";\nimport { getMountRoute } from \"../api/internal/route\";\nimport { RequestInputContext } from \"../api/request-input-context\";\nimport { RequestOutputContext } from \"../api/request-output-context\";\nimport type {\n FragnoFragmentSharedConfig,\n FragnoPublicClientConfig,\n} from \"../api/fragment-instantiation\";\nimport { FragnoClientApiError, FragnoClientError, FragnoClientFetchError } from \"./client-error\";\nimport type { InferOr } from \"../util/types-util\";\nimport { parseContentType } from \"../util/content-type\";\nimport {\n handleNdjsonStreamingFirstItem,\n type NdjsonStreamingStore,\n} from \"./internal/ndjson-streaming\";\nimport { addStore, getInitialData, SSR_ENABLED } from \"../util/ssr\";\nimport { unwrapObject } from \"../util/nanostores\";\nimport type { FragmentDefinition } from \"../api/fragment-builder\";\nimport {\n type AnyRouteOrFactory,\n type FlattenRouteFactories,\n resolveRouteFactories,\n} from \"../api/route\";\n\n/**\n * Symbols used to identify hook types\n */\nconst GET_HOOK_SYMBOL = Symbol(\"fragno-get-hook\");\nconst MUTATOR_HOOK_SYMBOL = Symbol(\"fragno-mutator-hook\");\nconst STORE_SYMBOL = Symbol(\"fragno-store\");\n\n/**\n * Extract only GET routes from a library config's routes array\n */\nexport type ExtractGetRoutes<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n> = {\n [K in keyof T]: T[K] extends FragnoRouteConfig<\n infer Method,\n infer Path,\n infer Input,\n infer Output,\n infer ErrorCode,\n infer QueryParams\n >\n ? Method extends \"GET\"\n ? FragnoRouteConfig<Method, Path, Input, Output, ErrorCode, QueryParams>\n : never\n : never;\n}[number][];\n\n/**\n * Extract the path from a route configuration for a given method\n */\nexport type ExtractRoutePath<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TExpectedMethod extends HTTPMethod = HTTPMethod,\n> = {\n [K in keyof T]: T[K] extends FragnoRouteConfig<\n infer Method,\n infer Path,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >\n ? Method extends TExpectedMethod\n ? Path\n : never\n : never;\n}[number];\n\nexport type ExtractGetRoutePaths<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n> = ExtractRoutePath<T, \"GET\">;\n\nexport type ExtractNonGetRoutePaths<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n> = ExtractRoutePath<T, NonGetHTTPMethod>;\n\n/**\n * Extract the route configuration type(s) for a given path from a routes array.\n * Optionally narrow by HTTP method via the third type parameter.\n *\n * Defaults to extracting all methods for the matching path, producing a union\n * if multiple methods exist for the same path.\n */\nexport type ExtractRouteByPath<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TPath extends string,\n TMethod extends HTTPMethod = HTTPMethod,\n> = {\n [K in keyof TRoutes]: TRoutes[K] extends FragnoRouteConfig<\n infer M,\n TPath,\n infer Input,\n infer Output,\n infer ErrorCode,\n infer QueryParams\n >\n ? M extends TMethod\n ? FragnoRouteConfig<M, TPath, Input, Output, ErrorCode, QueryParams>\n : never\n : never;\n}[number];\n\n/**\n * Extract the output schema type for a specific route path from a routes array\n */\nexport type ExtractOutputSchemaForPath<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined\n >[],\n TPath extends string,\n> = {\n [K in keyof TRoutes]: TRoutes[K] extends FragnoRouteConfig<\n infer Method,\n TPath,\n StandardSchemaV1 | undefined,\n infer Output\n >\n ? Method extends \"GET\"\n ? Output\n : never\n : never;\n}[number];\n\n/**\n * Check if a path exists as a GET route in the routes array\n */\nexport type IsValidGetRoutePath<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TPath extends string,\n> = TPath extends ExtractGetRoutePaths<TRoutes> ? true : false;\n\n/**\n * Utility type to ensure only valid GET route paths can be used\n */\nexport type ValidateGetRoutePath<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TPath extends string,\n> =\n TPath extends ExtractGetRoutePaths<TRoutes>\n ? TPath\n : `Error: Path '${TPath}' is not a valid GET route. Available GET routes: ${ExtractGetRoutePaths<TRoutes>}`;\n\n/**\n * Helper type to check if a routes array has any GET routes\n */\nexport type HasGetRoutes<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n> = ExtractGetRoutePaths<T> extends never ? false : true;\n\nexport type ObjectContainingStoreField<T extends object> = T extends Store\n ? T\n : {\n [K in keyof T]: T[K] extends Store ? { [P in K]: T[P] } & Partial<Omit<T, K>> : never;\n }[keyof T] extends never\n ? never\n : T;\n\nexport type FragnoStoreData<T extends object> = {\n obj: T;\n [STORE_SYMBOL]: true;\n};\n\nexport type FragnoClientHookData<\n TMethod extends HTTPMethod,\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = {\n route: FragnoRouteConfig<\n TMethod,\n TPath,\n StandardSchemaV1 | undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >;\n query(args?: {\n path?: MaybeExtractPathParamsOrWiden<TPath, string>;\n query?: Record<TQueryParameters, string>;\n }): Promise<StandardSchemaV1.InferOutput<TOutputSchema>>;\n store(args?: {\n path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;\n query?: Record<TQueryParameters, string | ReadableAtom<string>>;\n }): FetcherStore<StandardSchemaV1.InferOutput<TOutputSchema>, FragnoClientError<TErrorCode>>;\n [GET_HOOK_SYMBOL]: true;\n} & {\n // Phantom field that preserves the specific TOutputSchema type parameter\n // in the structural type. This makes the type covariant, allowing more\n // specific schema types (like z.ZodString) to be assigned to variables\n // typed with more general schema types (like StandardSchemaV1<any, any>)\n readonly _outputSchema?: TOutputSchema;\n};\n\nexport type FragnoClientMutatorData<\n TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = {\n route: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >;\n\n mutateQuery(args?: {\n body?: InferOr<TInputSchema, undefined>;\n path?: MaybeExtractPathParamsOrWiden<TPath, string>;\n query?: Record<TQueryParameters, string>;\n }): Promise<InferOr<TOutputSchema, undefined>>;\n\n mutatorStore: MutatorStore<\n {\n body?: InferOr<TInputSchema, undefined>;\n path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;\n query?: Record<TQueryParameters, string | ReadableAtom<string>>;\n },\n InferOr<TOutputSchema, undefined>,\n FragnoClientError<TErrorCode>\n >;\n [MUTATOR_HOOK_SYMBOL]: true;\n} & {\n readonly _inputSchema?: TInputSchema;\n readonly _outputSchema?: TOutputSchema;\n};\n\nexport function buildUrl<TPath extends string>(\n config: {\n baseUrl?: string;\n mountRoute: string;\n path: TPath;\n },\n params: {\n pathParams?: Record<string, string | ReadableAtom<string>>;\n queryParams?: Record<string, string | ReadableAtom<string>>;\n },\n): string {\n const { baseUrl = \"\", mountRoute, path } = config;\n const { pathParams, queryParams } = params ?? {};\n\n const normalizedPathParams = unwrapObject(pathParams) as ExtractPathParams<TPath, string>;\n const normalizedQueryParams = unwrapObject(queryParams) ?? {};\n\n const searchParams = new URLSearchParams(normalizedQueryParams);\n const builtPath = buildPath(path, normalizedPathParams ?? {});\n const search = searchParams.toString() ? `?${searchParams.toString()}` : \"\";\n return `${baseUrl}${mountRoute}${builtPath}${search}`;\n}\n\n/**\n * This method returns an array, which can be passed directly to nanostores.\n *\n * The returned array is always: path, pathParams (In order they appear in the path), queryParams (In alphabetical order)\n * Missing pathParams are replaced with \"<missing>\".\n * @param path\n * @param params\n * @returns\n */\nexport function getCacheKey<TMethod extends HTTPMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n params?: {\n pathParams?: Record<string, string | ReadableAtom<string>>;\n queryParams?: Record<string, string | ReadableAtom<string>>;\n },\n): (string | ReadableAtom<string>)[] {\n if (!params) {\n return [method, path];\n }\n\n const { pathParams, queryParams } = params;\n\n const pathParamNames = extractPathParams(path);\n const pathParamValues = pathParamNames.map((name) => pathParams?.[name] ?? \"<missing>\");\n\n const queryParamValues = queryParams\n ? Object.keys(queryParams)\n .sort()\n .map((key) => queryParams[key])\n : [];\n\n return [method, path, ...pathParamValues, ...queryParamValues];\n}\n\nfunction isStreamingResponse(response: Response): false | \"ndjson\" | \"octet-stream\" {\n const contentType = parseContentType(response.headers.get(\"content-type\"));\n\n if (!contentType) {\n // Always assume 'normal' JSON by default.\n return false;\n }\n\n const isChunked = response.headers.get(\"transfer-encoding\") === \"chunked\";\n\n if (!isChunked) {\n return false;\n }\n\n if (contentType.subtype === \"octet-stream\") {\n // TODO(Wilco): This is not actually supported properly\n return \"octet-stream\";\n }\n\n if (contentType.subtype === \"x-ndjson\") {\n return \"ndjson\";\n }\n\n return false;\n}\n\n// Type guard to check if a hook is a GET hook\nexport function isGetHook<\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n>(\n hook: unknown,\n): hook is FragnoClientHookData<\"GET\", TPath, TOutputSchema, TErrorCode, TQueryParameters> {\n return (\n typeof hook === \"object\" &&\n hook !== null &&\n GET_HOOK_SYMBOL in hook &&\n hook[GET_HOOK_SYMBOL] === true\n );\n}\n\n// Type guard to check if a hook is a mutator\nexport function isMutatorHook<\n TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n>(\n hook: unknown,\n): hook is FragnoClientMutatorData<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n> {\n return (\n typeof hook === \"object\" &&\n hook !== null &&\n MUTATOR_HOOK_SYMBOL in hook &&\n hook[MUTATOR_HOOK_SYMBOL] === true\n );\n}\n\nexport function isStore<TStore extends Store>(obj: unknown): obj is FragnoStoreData<TStore> {\n return (\n typeof obj === \"object\" && obj !== null && STORE_SYMBOL in obj && obj[STORE_SYMBOL] === true\n );\n}\n\ntype OnErrorRetryFn = (opts: {\n error: unknown;\n key: string;\n retryCount: number;\n}) => number | undefined;\n\nexport type CreateHookOptions = {\n /**\n * A function that will be called when an error occurs. Implements an exponential backoff strategy\n * when left undefined. When null, retries will be disabled. The number returned (> 0) by the\n * callback will determine in how many ms to retry next.\n */\n onErrorRetry?: OnErrorRetryFn | null;\n};\n\ntype OnInvalidateFn<TPath extends string> = (\n invalidate: <TInnerPath extends string>(\n method: HTTPMethod,\n path: TInnerPath,\n params: {\n pathParams?: MaybeExtractPathParamsOrWiden<TInnerPath, string>;\n queryParams?: Record<string, string>;\n },\n ) => void,\n params: {\n pathParams: MaybeExtractPathParamsOrWiden<TPath, string>;\n queryParams?: Record<string, string>;\n },\n) => void;\n\nexport type CacheLine = {\n data: unknown;\n error: unknown;\n retryCount: number;\n created: number;\n expires: number;\n};\n\nexport class ClientBuilder<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TFragmentConfig extends FragnoFragmentSharedConfig<TRoutes>,\n> {\n #publicConfig: FragnoPublicClientConfig;\n #fragmentConfig: TFragmentConfig;\n\n #cache = new Map<string, CacheLine>();\n\n #createFetcherStore;\n #createMutatorStore;\n #invalidateKeys;\n\n constructor(publicConfig: FragnoPublicClientConfig, fragmentConfig: TFragmentConfig) {\n this.#publicConfig = publicConfig;\n this.#fragmentConfig = fragmentConfig;\n\n const [createFetcherStore, createMutatorStore, { invalidateKeys }] = nanoquery({\n cache: this.#cache,\n });\n this.#createFetcherStore = createFetcherStore;\n this.#createMutatorStore = createMutatorStore;\n this.#invalidateKeys = invalidateKeys;\n }\n\n get cacheEntries(): Readonly<Record<string, CacheLine>> {\n return Object.fromEntries(this.#cache.entries());\n }\n\n createStore<const T extends object>(obj: T): FragnoStoreData<T> {\n return { obj: obj, [STORE_SYMBOL]: true };\n }\n\n createHook<TPath extends ExtractGetRoutePaths<TFragmentConfig[\"routes\"]>>(\n path: ValidateGetRoutePath<TFragmentConfig[\"routes\"], TPath>,\n options?: CreateHookOptions,\n ): FragnoClientHookData<\n \"GET\",\n TPath,\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"outputSchema\"]>,\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"errorCodes\"]>[number],\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"queryParameters\"]>[number]\n > {\n const route = this.#fragmentConfig.routes.find(\n (\n r,\n ): r is FragnoRouteConfig<\n \"GET\",\n TPath,\n StandardSchemaV1 | undefined,\n StandardSchemaV1,\n string,\n string\n > => r.path === path && r.method === \"GET\" && r.outputSchema !== undefined,\n );\n\n if (!route) {\n throw new Error(`Route '${path}' not found or is not a GET route with an output schema.`);\n }\n\n return this.#createRouteQueryHook(route, options);\n }\n\n createMutator<TPath extends ExtractNonGetRoutePaths<TFragmentConfig[\"routes\"]>>(\n method: NonGetHTTPMethod,\n path: TPath,\n onInvalidate?: OnInvalidateFn<TPath>,\n ): FragnoClientMutatorData<\n NonGetHTTPMethod, // TODO: This can be any Method, but should be related to TPath\n TPath,\n ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"inputSchema\"],\n ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"outputSchema\"],\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"errorCodes\"]>[number],\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"queryParameters\"]>[number]\n > {\n type TRoute = ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>;\n\n const route = this.#fragmentConfig.routes.find(\n (\n r,\n ): r is FragnoRouteConfig<\n NonGetHTTPMethod,\n TPath,\n TRoute[\"inputSchema\"],\n TRoute[\"outputSchema\"],\n string,\n string\n > => r.method !== \"GET\" && r.path === path && r.method === method,\n );\n\n if (!route) {\n throw new Error(\n `Route '${path}' not found or is a GET route with an input and output schema.`,\n );\n }\n\n return this.#createRouteQueryMutator(route, onInvalidate);\n }\n\n #createRouteQueryHook<\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n >(\n route: FragnoRouteConfig<\n \"GET\",\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >,\n options: CreateHookOptions = {},\n ): FragnoClientHookData<\"GET\", TPath, TOutputSchema, TErrorCode, TQueryParameters> {\n if (route.method !== \"GET\") {\n throw new Error(\n `Only GET routes are supported for hooks. Route '${route.path}' is a ${route.method} route.`,\n );\n }\n\n if (!route.outputSchema) {\n throw new Error(\n `Output schema is required for GET routes. Route '${route.path}' has no output schema.`,\n );\n }\n\n const baseUrl = this.#publicConfig.baseUrl ?? \"\";\n const mountRoute = getMountRoute(this.#fragmentConfig);\n\n async function callServerSideHandler(params: {\n pathParams?: Record<string, string | ReadableAtom<string>>;\n queryParams?: Record<string, string | ReadableAtom<string>>;\n }): Promise<Response> {\n const { pathParams, queryParams } = params ?? {};\n\n const normalizedPathParams = unwrapObject(pathParams) as ExtractPathParams<TPath, string>;\n const normalizedQueryParams = unwrapObject(queryParams) ?? {};\n\n const searchParams = new URLSearchParams(normalizedQueryParams);\n\n const result = await route.handler(\n RequestInputContext.fromSSRContext({\n method: route.method,\n path: route.path,\n pathParams: normalizedPathParams,\n searchParams,\n }),\n new RequestOutputContext(route.outputSchema),\n );\n\n return result;\n }\n\n async function executeQuery(params?: {\n pathParams?: Record<string, string | ReadableAtom<string>>;\n queryParams?: Record<string, string | ReadableAtom<string>>;\n }): Promise<Response> {\n const { pathParams, queryParams } = params ?? {};\n\n if (typeof window === \"undefined\") {\n return task(async () => callServerSideHandler({ pathParams, queryParams }));\n }\n\n const url = buildUrl({ baseUrl, mountRoute, path: route.path }, { pathParams, queryParams });\n\n let response: Response;\n try {\n response = await fetch(url);\n } catch (error) {\n throw FragnoClientFetchError.fromUnknownFetchError(error);\n }\n\n if (!response.ok) {\n throw await FragnoClientApiError.fromResponse<TErrorCode>(response);\n }\n\n return response;\n }\n\n return {\n route,\n store: (args) => {\n const { path, query } = args ?? {};\n\n const key = getCacheKey(route.method, route.path, {\n pathParams: path,\n queryParams: query,\n });\n\n const store = this.#createFetcherStore<\n StandardSchemaV1.InferOutput<TOutputSchema>,\n FragnoClientError<TErrorCode>\n >(key, {\n fetcher: async (): Promise<StandardSchemaV1.InferOutput<TOutputSchema>> => {\n if (SSR_ENABLED) {\n const initialData = getInitialData(\n key.map((d) => (typeof d === \"string\" ? d : d.get())).join(\"\"),\n );\n\n if (initialData) {\n return initialData;\n }\n }\n\n const response = await executeQuery({ pathParams: path, queryParams: query });\n const isStreaming = isStreamingResponse(response);\n\n if (!isStreaming) {\n return response.json() as Promise<StandardSchemaV1.InferOutput<TOutputSchema>>;\n }\n\n if (typeof window === \"undefined\") {\n return [];\n }\n\n if (isStreaming === \"ndjson\") {\n const storeAdapter: NdjsonStreamingStore<TOutputSchema, TErrorCode> = {\n setData: (value) => {\n store.set({\n ...store.get(),\n loading: !(Array.isArray(value) && value.length > 0),\n data: value as InferOr<TOutputSchema, undefined>,\n });\n },\n setError: (value) => {\n store.set({\n ...store.get(),\n error: value,\n });\n },\n };\n\n // Start streaming in background and return first item\n const { firstItem } = await handleNdjsonStreamingFirstItem(response, storeAdapter);\n return [firstItem];\n }\n\n if (isStreaming === \"octet-stream\") {\n // TODO(Wilco): Implement this\n throw new Error(\"Octet-stream streaming is not supported.\");\n }\n\n throw new Error(\"Unreachable\");\n },\n\n onErrorRetry: options?.onErrorRetry,\n dedupeTime: Infinity,\n });\n\n if (typeof window === \"undefined\") {\n addStore(store);\n }\n\n return store;\n },\n query: async (args) => {\n const { path, query } = args ?? {};\n\n const response = await executeQuery({ pathParams: path, queryParams: query });\n\n const isStreaming = isStreamingResponse(response);\n\n if (!isStreaming) {\n return (await response.json()) as StandardSchemaV1.InferOutput<TOutputSchema>;\n }\n\n if (isStreaming === \"ndjson\") {\n const { streamingPromise } = await handleNdjsonStreamingFirstItem(response);\n // Resolves once the stream is done\n return await streamingPromise;\n }\n\n if (isStreaming === \"octet-stream\") {\n // TODO(Wilco): Implement this\n throw new Error(\"Octet-stream streaming is not supported.\");\n }\n\n throw new Error(\"Unreachable\");\n },\n [GET_HOOK_SYMBOL]: true,\n };\n }\n\n #createRouteQueryMutator<\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n >(\n route: FragnoRouteConfig<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >,\n onInvalidate: OnInvalidateFn<TPath> = (invalidate, params) =>\n invalidate(\"GET\", route.path, params),\n ): FragnoClientMutatorData<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n > {\n const method = route.method;\n\n const baseUrl = this.#publicConfig.baseUrl ?? \"\";\n const mountRoute = getMountRoute(this.#fragmentConfig);\n\n async function executeMutateQuery({\n body,\n path,\n query,\n }: {\n body?: InferOr<TInputSchema, undefined>;\n path?: ExtractPathParamsOrWiden<TPath, string>;\n query?: Record<string, string>;\n }): Promise<Response> {\n if (typeof window === \"undefined\") {\n return task(async () =>\n route.handler(\n RequestInputContext.fromSSRContext({\n inputSchema: route.inputSchema,\n method,\n path: route.path,\n pathParams: (path ?? {}) as ExtractPathParams<TPath, string>,\n searchParams: new URLSearchParams(query),\n body,\n }),\n new RequestOutputContext(route.outputSchema),\n ),\n );\n }\n\n const url = buildUrl(\n { baseUrl, mountRoute, path: route.path },\n { pathParams: path, queryParams: query },\n );\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n } catch (error) {\n throw FragnoClientFetchError.fromUnknownFetchError(error);\n }\n\n if (!response.ok) {\n throw await FragnoClientApiError.fromResponse<TErrorCode>(response);\n }\n\n return response;\n }\n\n const mutatorStore: FragnoClientMutatorData<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >[\"mutatorStore\"] = this.#createMutatorStore(\n async ({ data }) => {\n if (typeof window === \"undefined\") {\n // TODO(Wilco): Handle server-side rendering.\n }\n\n const { body, path, query } = data as {\n body?: InferOr<TInputSchema, undefined>;\n path?: ExtractPathParamsOrWiden<TPath, string>;\n query?: Record<string, string>;\n };\n\n if (typeof body === \"undefined\" && route.inputSchema !== undefined) {\n throw new Error(\"Body is required.\");\n }\n\n const response = await executeMutateQuery({ body, path, query });\n\n onInvalidate(this.#invalidate.bind(this), {\n pathParams: (path ?? {}) as MaybeExtractPathParamsOrWiden<TPath, string>,\n queryParams: query,\n });\n\n if (response.status === 201 || response.status === 204) {\n return undefined;\n }\n\n const isStreaming = isStreamingResponse(response);\n\n if (!isStreaming) {\n return response.json();\n }\n\n if (typeof window === \"undefined\") {\n return [];\n }\n\n if (isStreaming === \"ndjson\") {\n const storeAdapter: NdjsonStreamingStore<NonNullable<TOutputSchema>, TErrorCode> = {\n setData: (value) => {\n mutatorStore.set({\n ...mutatorStore.get(),\n loading: !(Array.isArray(value) && value.length > 0),\n data: value as InferOr<TOutputSchema, undefined>,\n });\n },\n setError: (value) => {\n mutatorStore.set({\n ...mutatorStore.get(),\n error: value,\n });\n },\n };\n\n // Start streaming in background and return first item\n const { firstItem } = await handleNdjsonStreamingFirstItem(response, storeAdapter);\n\n // Return the first item immediately. The streaming will continue in the background\n return [firstItem];\n }\n\n if (isStreaming === \"octet-stream\") {\n // TODO(Wilco): Implement this\n throw new Error(\"Octet-stream streaming is not supported.\");\n }\n\n throw new Error(\"Unreachable\");\n },\n {\n onError: (error) => {\n console.error(\"Error in mutatorStore\", error);\n },\n },\n );\n\n const mutateQuery = (async (data) => {\n // TypeScript infers the fields to not exist, even though they might\n const { body, path, query } = data as {\n body?: InferOr<TInputSchema, undefined>;\n path?: ExtractPathParamsOrWiden<TPath, string>;\n query?: Record<string, string>;\n };\n\n if (typeof body === \"undefined\" && route.inputSchema !== undefined) {\n throw new Error(\"Body is required for mutateQuery\");\n }\n\n const response = await executeMutateQuery({ body, path, query });\n\n if (response.status === 201 || response.status === 204) {\n return undefined;\n }\n\n const isStreaming = isStreamingResponse(response);\n\n if (!isStreaming) {\n return response.json();\n }\n\n if (isStreaming === \"ndjson\") {\n const { streamingPromise } = await handleNdjsonStreamingFirstItem(response);\n // Resolves once the stream is done, i.e. we block until done\n return await streamingPromise;\n }\n\n if (isStreaming === \"octet-stream\") {\n throw new Error(\"Octet-stream streaming is not supported for mutations\");\n }\n\n throw new Error(\"Unreachable\");\n }) satisfies FragnoClientMutatorData<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >[\"mutateQuery\"];\n\n return {\n route,\n mutateQuery,\n mutatorStore,\n [MUTATOR_HOOK_SYMBOL]: true,\n };\n }\n\n #invalidate<TPath extends string>(\n method: HTTPMethod,\n path: TPath,\n params: {\n pathParams?: MaybeExtractPathParamsOrWiden<TPath, string>;\n queryParams?: Record<string, string>;\n },\n ) {\n const prefixArray = getCacheKey(method, path, {\n pathParams: params?.pathParams,\n queryParams: params?.queryParams,\n });\n\n const prefix = prefixArray.map((k) => (typeof k === \"string\" ? k : k.get())).join(\"\");\n\n this.#invalidateKeys((key) => key.startsWith(prefix));\n }\n}\n\nexport function createClientBuilder<\n TConfig,\n TDeps,\n TServices extends Record<string, unknown>,\n const TRoutesOrFactories extends readonly AnyRouteOrFactory[],\n const TAdditionalContext extends Record<string, unknown>,\n>(\n fragmentBuilder: {\n definition: FragmentDefinition<TConfig, TDeps, TServices, TAdditionalContext>;\n },\n publicConfig: FragnoPublicClientConfig,\n routesOrFactories: TRoutesOrFactories,\n): ClientBuilder<\n FlattenRouteFactories<TRoutesOrFactories>,\n FragnoFragmentSharedConfig<FlattenRouteFactories<TRoutesOrFactories>>\n> {\n const definition = fragmentBuilder.definition;\n\n // For client-side, we resolve route factories with dummy context\n // This will be removed by the bundle plugin anyway\n const dummyContext = {\n config: {} as TConfig,\n deps: {} as TDeps,\n services: {} as TServices,\n };\n\n const routes = resolveRouteFactories(dummyContext, routesOrFactories);\n\n const fragmentConfig: FragnoFragmentSharedConfig<FlattenRouteFactories<TRoutesOrFactories>> = {\n name: definition.name,\n routes,\n };\n\n const mountRoute = publicConfig.mountRoute ?? `/${definition.name}`;\n const fullPublicConfig = {\n ...publicConfig,\n mountRoute,\n };\n\n return new ClientBuilder(fullPublicConfig, fragmentConfig);\n}\n\nexport * from \"./client-error\";\n"],"mappings":"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"}
|
|
@@ -217,7 +217,9 @@ declare class ClientBuilder<TRoutes$1 extends readonly FragnoRouteConfig<HTTPMet
|
|
|
217
217
|
// TODO: This can be any Method, but should be related to TPath
|
|
218
218
|
TPath, ExtractRouteByPath<TFragmentConfig["routes"], TPath>["inputSchema"], ExtractRouteByPath<TFragmentConfig["routes"], TPath>["outputSchema"], NonNullable<ExtractRouteByPath<TFragmentConfig["routes"], TPath>["errorCodes"]>[number], NonNullable<ExtractRouteByPath<TFragmentConfig["routes"], TPath>["queryParameters"]>[number]>;
|
|
219
219
|
}
|
|
220
|
-
declare function createClientBuilder<TConfig, TDeps, TServices extends Record<string, unknown>, const TRoutesOrFactories extends readonly AnyRouteOrFactory[]
|
|
220
|
+
declare function createClientBuilder<TConfig, TDeps, TServices extends Record<string, unknown>, const TRoutesOrFactories extends readonly AnyRouteOrFactory[], const TAdditionalContext extends Record<string, unknown>>(fragmentBuilder: {
|
|
221
|
+
definition: FragmentDefinition<TConfig, TDeps, TServices, TAdditionalContext>;
|
|
222
|
+
}, publicConfig: FragnoPublicClientConfig, routesOrFactories: TRoutesOrFactories): ClientBuilder<FlattenRouteFactories<TRoutesOrFactories>, FragnoFragmentSharedConfig<FlattenRouteFactories<TRoutesOrFactories>>>;
|
|
221
223
|
//#endregion
|
|
222
224
|
//#region src/api/request-middleware.d.ts
|
|
223
225
|
type FragnoMiddlewareCallback<TRoutes$1 extends readonly AnyFragnoRouteConfig[], TDeps, TServices extends Record<string, unknown>> = (inputContext: RequestMiddlewareInputContext<TRoutes$1>, outputContext: RequestMiddlewareOutputContext<TDeps, TServices>) => Promise<Response | undefined> | Response | undefined;
|
|
@@ -353,4 +355,4 @@ declare class FragmentBuilder<const TConfig, const TDeps = {}, const TServices e
|
|
|
353
355
|
declare function defineFragment<TConfig = {}>(name: string): FragmentBuilder<TConfig, {}, {}, {}>;
|
|
354
356
|
//#endregion
|
|
355
357
|
export { isGetHook as A, AnyRouteOrFactory as B, HasGetRoutes as C, buildUrl as D, ValidateGetRoutePath as E, FragnoClientFetchAbortError as F, defineRoutes as G, RouteFactory as H, FragnoClientFetchError as I, FragnoClientFetchNetworkError as L, isStore as M, FragnoClientApiError as N, createClientBuilder as O, FragnoClientError as P, FragnoClientUnknownApiError as R, FragnoStoreData as S, ObjectContainingStoreField as T, RouteFactoryContext as U, FlattenRouteFactories as V, defineRoute as W, ExtractOutputSchemaForPath as _, FragnoFragmentSharedConfig as a, FragnoClientHookData as b, FragnoPublicConfig as c, CacheLine as d, ClientBuilder as f, ExtractNonGetRoutePaths as g, ExtractGetRoutes as h, AnyFragnoFragmentSharedConfig as i, isMutatorHook as j, getCacheKey as k, createFragment as l, ExtractGetRoutePaths as m, FragmentDefinition as n, FragnoInstantiatedFragment as o, CreateHookOptions as p, defineFragment as r, FragnoPublicClientConfig as s, FragmentBuilder as t, instantiatedFragmentFakeSymbol as u, ExtractRouteByPath as v, IsValidGetRoutePath as w, FragnoClientMutatorData as x, ExtractRoutePath as y, FragnoErrorOptions as z };
|
|
356
|
-
//# sourceMappingURL=fragment-builder-
|
|
358
|
+
//# sourceMappingURL=fragment-builder-D6-oLYnH.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragment-builder-Dcdsms1l.d.ts","names":[],"sources":["../src/api/route.ts","../src/client/client-error.ts","../src/client/client.ts","../src/api/request-middleware.ts","../src/api/fragment-instantiation.ts","../src/api/fragment-builder.ts"],"sourcesContent":[],"mappings":";;;;;;KAIY,oBAAA,GAAuB,kBAAkB;UAEpC;UACP;QACF;EAJI,QAAA,EAKA,SALA;AAEZ;AACU,KAKE,YALF,CAAA,OAAA,EAAA,KAAA,EAAA,SAAA,EAAA,kBAAA,SASiB,iBATjB,CAUN,UAVM,EAAA,MAAA,EAYN,gBAZM,GAAA,SAAA,EAaN,gBAbM,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAA,OAAA,EAiBI,mBAjBJ,CAiBwB,OAjBxB,EAiBiC,KAjBjC,EAiBwC,SAjBxC,CAAA,EAAA,GAiBuD,SAjBvD;AACF,KAmBI,iBAAA,GAAoB,oBAnBxB,GAmB+C,YAnB/C,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA;AACI,KAoBA,qBApBA,CAAA,YAAA,SAoByC,iBApBzC,EAAA,CAAA,GAoBgE,GApBhE,SAAA,SAAA,CAAS,KAAA,MAAA,EAGT,GAAA,KAAA,cAAY,SAmBS,iBAnBT,EAAA,CAKpB,GAiBA,KAjBA,SAiBc,YAjBd,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,KAAA,QAAA,CAAA,GAAA,CAAA,GAkBM,OAlBN,EAAA,GAkBkB,qBAlBlB,CAkBwC,IAlBxC,CAAA,CAAA,GAAA,CAmBG,KAnBH,EAAA,GAmBa,qBAnBb,CAmBmC,IAnBnC,CAAA,CAAA,GAAA,EAAA;AAGA,iBAkDY,WAlDZ,CAAA,wBAmDoB,UAnDpB,EAAA,sBAAA,MAAA,EAAA,4BAqD0B,gBArD1B,GAAA,SAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,+BAAA,MAAA,GAAA,MAAA,CAAA,CAAA,MAAA,EAyDM,iBAzDN,CA0DA,SA1DA,EA2DA,OA3DA,EAAA,SAAA,EA6DA,aA7DA,EA8DA,UA9DA,EA+DA,gBA/DA,CAAA,GAAA;EAJuB,WAAA,CAAA,EAAA,SAAA;CAQO,CAAA,EA6D/B,iBA7D+B,CA6Db,SA7Da,EA6DJ,OA7DI,EAAA,SAAA,EA6Dc,aA7Dd,EA6D6B,UA7D7B,EA6DyC,gBA7DzC,CAAA;AAAS,iBAgE3B,WAhE2B,CAAA,wBAiEnB,UAjEmB,EAAA,sBAAA,MAAA,EAAA,2BAmEd,gBAnEc,EAAA,4BAoEb,gBApEa,GAAA,SAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,+BAAA,MAAA,GAAA,MAAA,CAAA,CAAA,MAAA,EAwEjC,iBAxEiC,CAyEvC,SAzEuC,EA0EvC,OA1EuC,EA2EvC,YA3EuC,EA4EvC,aA5EuC,EA6EvC,UA7EuC,EA8EvC,gBA9EuC,CAAA,GAAA;EAAO,WAAA,EA+E7B,YA/E6B;CAApC,CAAA,EAgFX,iBAhFW,CAgFO,SAhFP,EAgFgB,OAhFhB,EAgFuB,YAhFvB,EAgFqC,aAhFrC,EAgFoD,UAhFpD,EAgFgE,gBAhFhE,CAAA;AAAmD,iBAuGjD,YAvGiD,CAAA,UAAA,CAAA,CAAA,EAAA,QAAA,CAAA,CAAA,EAAA,YAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;EAAO,MAAA,EAAA,CAAA,sBAAA,SA0GnC,iBA1GmC,CA2GhE,UA3GgE,EAAA,MAAA,EA6GhE,gBA7GgE,GAAA,SAAA,EA8GhE,gBA9GgE,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAmHpD,mBAnHoD,CAmHhC,OAnHgC,EAmHvB,KAnHuB,EAmHhB,SAnHgB,CAAA,EAAA,GAmHD,OAnHC,EAAA,GAoHjE,YApHiE,CAoHpD,OApHoD,EAoH3C,KApH2C,EAoHpC,SApHoC,EAoHzB,OApHyB,CAAA;AAGxE,CAAA;;;KCzBY,kBAAA;UACF;;;;ADCV;AAEiB,uBCGK,iBDHc,CAAA,cAAA,MAAA,GAAA,MAAA,CAAA,SCG2C,KAAA,CDH3C;EAC1B,CAAA,OAAA;EACF,WAAA,CAAA,OAAA,EAAA,MAAA,EAAA,IAAA,ECI6B,KDJ7B,EAAA,OAAA,CAAA,ECI6C,kBDJ7C;EACI,IAAA,IAAA,CAAA,CAAA,ECSE,KDTF,GAAA,CAAA,MAAA,GAAA,CAAA,CAAA,CAAA;;AAGA,cCWC,sBAAA,SAA+B,iBDXpB,CAAA,SAAA,GAAA,eAAA,GAAA,aAAA,CAAA,CAAA;EAKpB,WAAA,CAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAA,GAAA,eAAA,GAAA,aAAA,EAAA,OAAA,CAAA,ECYS,kBDZT;EAEA,OAAA,qBAAA,CAAA,KAAA,EAAA,OAAA,CAAA,ECgB4C,sBDhB5C;;;;;AAK8C,cC2BrC,6BAAA,SAAsC,sBAAA,CD3BD;EAApC,WAAA,CAAA,OAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EC4BqD,kBD5BrD;;;AAGd;AAEA;AAAqD,cCgCxC,2BAAA,SAAoC,sBAAA,CDhCI;EAAuB,WAAA,CAAA,OAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,ECiCZ,kBDjCY;;;;;AAMhC,cCoC/B,2BAAA,SAAoC,iBDpCL,CAAA,mBAAA,CAAA,CAAA;EAAtB,CAAA,OAAA;EACf,WAAA,CAAA,OAAA,EAAA,MAAA,GAAA,SAAA,EAAA,MAAA,ECwCK,UDxCL,EAAA,OAAA,CAAA,ECyCM,kBDzCN;EAAgC,IAAA,MAAA,CAAA,CAAA,ECgDvB,UDhDuB;;AAAD,cCqDzB,oBDrDyB,CAAA,mBAAA,MAAA,GAAA,MAAA,CAAA,SCuD5B,iBDvD4B,CCuDV,UDvDU,CAAA,CAAA;EAkCtB,CAAA,OAAA;EACQ,WAAA,CAAA;IAAA,OAAA;IAAA;EAQpB,CARoB,EAAA;IAEM,OAAA,EAAA,MAAA;IAK1B,IAAA,ECiB4C,UDjB5C;EACA,CAAA,EAAA,MAAA,ECiBQ,UDjBR,EAAA,OAAA,CAAA,ECkBS,kBDlBT;EAEA,IAAA,MAAA,CAAA,CAAA,ECuBY,UDvBZ;EACA;;;;;;EAG2D,IAAA,IAAA,CAAA,CAAA,EC6BjD,UD7BiD,GAAA,CAAA,MAAA,GAAA,CAAA,CAAA,CAAA;EAAY,OAAA,YAAA,CAAA,mBAAA,MAAA,GAAA,MAAA,CAAA,CAAA,QAAA,ECkC7D,QDlC6D,CAAA,ECmCtE,ODnCsE,CCmC9D,oBDnC8D,CCmCzC,UDnCyC,CAAA,GCmC3B,2BDnC2B,CAAA;;;;;;AAzE3E;cEyBM,eFpBF,EAAA,OAAA,MAAA;cEqBE,mBFnBF,EAAA,OAAA,MAAA;cEoBE,YFnBF,EAAA,OAAA,MAAA;;;;AAI8C,KEoBtC,gBFpBsC,CAAA,YAAA,SEqB7B,iBFrB6B,CEsB9C,UFtB8C,EAAA,MAAA,EEwB9C,gBFxB8C,GAAA,SAAA,EEyB9C,gBFzB8C,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GAAA,QAApC,ME8BA,GF9BA,GE8BI,GF9BJ,CE8BM,CF9BN,CAAA,SE8BiB,iBF9BjB,CAAA,KAAA,OAAA,EAAA,KAAA,KAAA,EAAA,KAAA,MAAA,EAAA,KAAA,OAAA,EAAA,KAAA,UAAA,EAAA,KAAA,YAAA,CAAA,GEsCR,MFtCQ,SAAA,KAAA,GEuCN,iBFvCM,CEuCY,MFvCZ,EEuCoB,IFvCpB,EEuC0B,KFvC1B,EEuCiC,MFvCjC,EEuCyC,SFvCzC,EEuCoD,WFvCpD,CAAA,GAAA,KAAA,GAAA,KAAA,EAAmD,CAAA,MAAA,CAAA,EAAA;;AAGjE;AAEA;AAAqD,KE0CzC,gBF1CyC,CAAA,YAAA,SE2ChC,iBF3CgC,CE4CjD,UF5CiD,EAAA,MAAA,EE8CjD,gBF9CiD,GAAA,SAAA,EE+CjD,gBF/CiD,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,wBEmD3B,UFnD2B,GEmDd,UFnDc,CAAA,GAAA,QAAuB,MEqD9D,GFrD8D,GEqD1D,GFrD0D,CEqDxD,CFrDwD,CAAA,SEqD7C,iBFrD6C,CAAA,KAAA,OAAA,EAAA,KAAA,KAAA,EEwDxE,gBFxDwE,GAAA,SAAA,EEyDxE,gBFzDwE,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,GE6DtE,MF7DsE,SE6DvD,eF7DuD,GE8DpE,IF9DoE,GAAA,KAAA,GAAA,KAAA,EAE3C,CAAA,MAAA,CAAA;AAG7B,KE8DQ,oBF9DR,CAAA,YAAA,SE+DiB,iBF/DjB,CEgEA,UFhEA,EAAA,MAAA,EEkEA,gBFlEA,GAAA,SAAA,EEmEA,gBFnEA,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GEuEA,gBFvEA,CEuEiB,GFvEjB,EAAA,KAAA,CAAA;AAAc,KEyEN,uBFzEM,CAAA,YAAA,SE0EG,iBF1EH,CE2Ed,UF3Ec,EAAA,MAAA,EE6Ed,gBF7Ec,GAAA,SAAA,EE8Ed,gBF9Ec,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GEkFd,gBFlFc,CEkFG,GFlFH,EEkFM,gBFlFN,CAAA;;;;;;;;AAoCF,KEuDJ,kBFvDe,CAAA,kBAAA,SEwDA,iBFxDA,CEyDvB,UFzDuB,EAAA,MAAA,EE2DvB,gBF3DuB,GAAA,SAAA,EE4DvB,gBF5DuB,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,gBAAA,MAAA,EAAA,kBEiET,UFjES,GEiEI,UFjEJ,CAAA,GAAA,QACH,MEkEV,SFlEU,GEkEA,SFlEA,CEkEQ,CFlER,CAAA,SEkEmB,iBFlEnB,CAAA,KAAA,EAAA,EEoEpB,OFpEoB,EAAA,KAAA,MAAA,EAAA,KAAA,OAAA,EAAA,KAAA,UAAA,EAAA,KAAA,YAAA,CAAA,GE0ElB,CF1EkB,SE0ER,SF1EQ,GE2EhB,iBF3EgB,CE2EE,CF3EF,EE2EK,OF3EL,EE2EY,KF3EZ,EE2EmB,MF3EnB,EE2E2B,SF3E3B,EE2EsC,WF3EtC,CAAA,GAAA,KAAA,GAAA,KAAA,EAEM,CAAA,MAAA,CAAA;;;;AAS1B,KEwEQ,0BFxER,CAAA,kBAAA,SEyEuB,iBFzEvB,CE0EA,UF1EA,EAAA,MAAA,EE4EA,gBF5EA,GAAA,SAAA,EE6EA,gBF7EA,GAAA,SAAA,CAAA,EAAA,EAAA,gBAAA,MAAA,CAAA,GAAA,QACA,MEgFU,SFhFV,GEgFoB,SFhFpB,CEgF4B,CFhF5B,CAAA,SEgFuC,iBFhFvC,CAAA,KAAA,OAAA,EEkFA,OFlFA,EEmFA,gBFnFA,GAAA,SAAA,EAAA,KAAA,OAAA,CAAA,GEsFE,MFtFF,SAAA,KAAA,GEuFI,MFvFJ,GAAA,KAAA,GAAA,KAAA,EANM,CAAA,MAAA,CAAA;;;;AAQqD,KE6FnD,mBF7FmD,CAAA,kBAAA,SE8FpC,iBF9FoC,CE+F3D,UF/F2D,EAAA,MAAA,EEiG3D,gBFjG2D,GAAA,SAAA,EEkG3D,gBFlG2D,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,gBAAA,MAAA,CAAA,GEuG3D,OFvG2D,SEuG7C,oBFvG6C,CEuGxB,SFvGwB,CAAA,GAAA,IAAA,GAAA,KAAA;;;;AAG/C,KEyGJ,oBFzGe,CAAA,kBAAA,SE0GA,iBF1GA,CE2GvB,UF3GuB,EAAA,MAAA,EE6GvB,gBF7GuB,GAAA,SAAA,EE8GvB,gBF9GuB,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,gBAAA,MAAA,CAAA,GEoHzB,OFpHyB,SEoHX,oBFpHW,CEoHU,SFpHV,CAAA,GEqHrB,OFrHqB,GAAA,gBEsHL,OFtHK,qDEsHqD,oBFtHrD,CEsH0E,SFtH1E,CAAA,EAAA;;;;AASvB,KEkHQ,YFlHR,CAAA,YAAA,SEmHiB,iBFnHjB,CEoHA,UFpHA,EAAA,MAAA,EEsHA,gBFtHA,GAAA,SAAA,EEuHA,gBFvHA,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GE2HA,oBF3HA,CE2HqB,GF3HrB,CAAA,SAAA,KAAA,GAAA,KAAA,GAAA,IAAA;AACA,KE4HQ,0BF5HR,CAAA,YAAA,MAAA,CAAA,GE4HuD,GF5HvD,SE4HiE,KF5HjE,GE6HA,GF7HA,GAAA,QACA,ME8HgB,GF9HhB,GE8HoB,GF9HpB,CE8HsB,CF9HtB,CAAA,SE8HiC,KF9HjC,GAAA,QE8HiD,CF7HjD,GE6HqD,GF7HrD,CE6HuD,CF7HvD,CAAA,EACA,GE4H8D,OF5H9D,CE4HsE,IF5HtE,CE4H2E,GF5H3E,EE4H8E,CF5H9E,CAAA,CAAA,GAAA,KAAA,EACA,CAAA,ME4HU,GF5HV,CAAA,SAAA,KAAA,GAAA,KAAA,GE8HE,GF9HF;AANM,KEsIE,eFtIF,CAAA,YAAA,MAAA,CAAA,GAAA;EAOW,GAAA,EEgId,GFhIc;EACA,CEgIlB,YAAA,CFhIkB,EAAA,IAAA;CAAS;AAAO,KEmIzB,oBFnIyB,CAAA,kBEoInB,UFpImB,EAAA,gBAAA,MAAA,EAAA,sBEsIb,gBFtIa,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,GAAA;EAAc,KAAA,EE0I1C,iBF1I0C,CE2I/C,SF3I+C,EE4I/C,OF5I+C,EE6I/C,gBF7I+C,GAAA,SAAA,EE8I/C,aF9I+C,EE+I/C,UF/I+C,EEgJ/C,gBFhJ+C,CAAA;EAAe,KAAA,CAAA,IAA9C,CAA8C,EAAA;IAAY,IAAA,CAAA,EEmJnE,6BFnJmE,CEmJrC,OFnJqC,EAAA,MAAA,CAAA;IAA3E,KAAA,CAAA,EEoJS,MFpJT,CEoJgB,gBFpJhB,EAAA,MAAA,CAAA;EAAiB,CAAA,CAAA,EEqJd,OFrJc,CEqJN,gBAAA,CAAiB,WFrJX,CEqJuB,aFrJvB,CAAA,CAAA;EAuBJ,KAAA,CAAA,IAOR,CAPQ,EAAA;IAIR,IAAA,CAAA,EE4HG,6BF5HH,CE4HiC,OF5HjC,EAAA,MAAA,GE4HiD,YF5HjD,CAAA,MAAA,CAAA,CAAA;IAEA,KAAA,CAAA,EE2HI,MF3HJ,CE2HW,gBF3HX,EAAA,MAAA,GE2HsC,YF3HtC,CAAA,MAAA,CAAA,CAAA;EACA,CAAA,CAAA,EE2HF,YF3HE,CE2HW,gBAAA,CAAiB,WF3H5B,CE2HwC,aF3HxC,CAAA,EE2HwD,iBF3HxD,CE2H0E,UF3H1E,CAAA,CAAA;EAJ6B,CEgIlC,eAAA,CFhIkC,EAAA,IAAA;CASG,GAAA;EAAS,SAAA,aAAA,CAAA,EE6HtB,aF7HsB;CAAO;AAApC,KEgIR,uBFhIQ,CAAA,kBEiIF,gBFjIE,EAAA,gBAAA,MAAA,EAAA,qBEmIG,gBFnIH,GAAA,SAAA,EAAA,sBEoII,gBFpIJ,GAAA,SAAA,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,GAAA;EAAmD,KAAA,EEwI9D,iBFxI8D,CEyInE,SFzImE,EE0InE,OF1ImE,EE2InE,YF3ImE,EE4InE,aF5ImE,EE6InE,UF7ImE,EE8InE,gBF9ImE,CAAA;EACnD,WAAA,CAAA,IAAb,CAAa,EAAA;IAAS,IAAA,CAAA,EEiJlB,OFjJkB,CEiJV,YFjJU,EAAA,SAAA,CAAA;IAAO,IAAA,CAAA,EEkJzB,6BFlJyB,CEkJK,OFlJL,EAAA,MAAA,CAAA;IAAW,KAAA,CAAA,EEmJnC,MFnJmC,CEmJ5B,gBFnJ4B,EAAA,MAAA,CAAA;EAAxC,CAAA,CAAA,EEoJD,OFpJC,CEoJO,OFpJP,CEoJe,aFpJf,EAAA,SAAA,CAAA,CAAA;EAAY,YAAA,EEsJH,YFtJG,CAAA;WEwJN,QAAQ;WACR,8BAA8B,kBAAgB;YAC7C,OAAO,2BAA2B;EDpSpC,CAAA,ECsSR,ODtSQ,CCsSA,aDtSkB,EAAA,SACpB,CAAA,ECsSN,iBDtSW,CCsSO,UDtSP,CAAA,CAAA;EAMO,CCkSnB,mBAAA,CDlSoC,EAAA,IAAA;CAGF,GAAA;EAAgB,SAAA,YAAA,CAAA,ECiS3B,YDjS2B;EAMvC,SAAA,aAAA,CAAA,EC4Ra,aD5Rb;CATiE;AAAK,iBCwSpE,QDxSoE,CAAA,gBAAA,MAAA,CAAA,CAAA,MAAA,EAAA;EAcvE,OAAA,CAAA,EAAA,MAAA;EAMA,UAAA,EAAA,MAAA;EAMmC,IAAA,ECkRtC,ODlRsC;CAZJ,EAAA,MAAA,EAAA;EAAiB,UAAA,CAAA,ECiS5C,MDjS4C,CAAA,MAAA,EAAA,MAAA,GCiSpB,YDjSoB,CAAA,MAAA,CAAA,CAAA;EA4BhD,WAAA,CAAA,ECsQK,MDtQL,CAAA,MAAA,EAAA,MAA8B,GCsQD,YDrQyB,CAAA,MAAA,CAAA,CAAA;AASnE,CAAA,CAAA,EAAa,MAAA;AAUb;;;;;;AAkBA;;;AAMe,iBCkPC,WDlPD,CAAA,kBCkP6B,UDlP7B,EAAA,gBAAA,MAAA,CAAA,CAAA,MAAA,ECmPL,SDnPK,EAAA,IAAA,ECoPP,ODpPO,EAAA,MAEF,CAFE,EAAA;EAAiC,UAAA,CAAA,ECsP/B,MDtP+B,CAAA,MAAA,EAAA,MAAA,GCsPP,YDtPO,CAAA,MAAA,CAAA,CAAA;EACpC,WAAA,CAAA,ECsPM,MDtPN,CAAA,MAAA,EAAA,MAAA,GCsP8B,YDtP9B,CAAA,MAAA,CAAA,CAAA;CACC,CAAA,EAAA,CAAA,MAAA,GCuPA,YDvPA,CAAA,MAAA,CAAA,CAAA,EAAA;AAOG,iBC8RA,SD9RA,CAAA,gBAAA,MAAA,EAAA,sBCgSQ,gBDhSR,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,CAAA,IAAA,EAAA,OAAA,CAAA,EAAA,IAAA,ICqSL,oBDrSK,CAAA,KAAA,ECqSuB,ODrSvB,ECqS8B,aDrS9B,ECqS6C,UDrS7C,ECqSyD,gBDrSzD,CAAA;AAUF,iBCqSE,aDrSF,CAAA,kBCsSI,gBDtSJ,EAAA,gBAAA,MAAA,EAAA,qBCwSS,gBDxST,GAAA,SAAA,EAAA,sBCySU,gBDzSV,GAAA,SAAA,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,CAAA,IAAA,EAAA,OAAA,CAAA,EAAA,IAAA,IC8SH,uBD9SG,CC+SZ,SD/SY,ECgTZ,ODhTY,ECiTZ,YDjTY,ECkTZ,aDlTY,ECmTZ,UDnTY,ECoTZ,gBDpTY,CAAA;AAKA,iBCyTE,ODzTF,CAAA,eCyTyB,KDzTzB,CAAA,CAAA,GAAA,EAAA,OAAA,CAAA,EAAA,GAAA,ICyTsD,eDzTtD,CCyTsE,MDzTtE,CAAA;KC+TT,cAAA,GD9T6B,CAAA,IAAA,EAAA;EAArB,KAAA,EAAA,OAAA;EAAmC,GAAA,EAAA,MAAA;EAA3C,UAAA,EAAA,MAAA;CA7BK,EAAA,GAAA,MAAA,GAAA,SAAA;AAAiB,KCiWf,iBAAA,GDjWe;;;;AC3DL;AAK2B;EAE3C,YAAA,CAAA,EA2ZW,cA3Z0B,GAAA,IAAA;AAK3C,CAAA;KAyZK,cAvZD,CAAA,gBAAA,MAAA,CAAA,GAAA,CAAA,UAAA,EAAA,CAAA,mBAAA,MAAA,CAAA,CAAA,MAAA,EAyZQ,UAzZR,EAAA,IAAA,EA0ZM,UA1ZN,EAAA,MAAA,EAAA;EAEA,UAAA,CAAA,EA0Ze,6BA1Zf,CA0Z6C,UA1Z7C,EAAA,MAAA,CAAA;EACA,WAAA,CAAA,EA0ZgB,MA1ZhB,CAAA,MAAA,EAAA,MAAA,CAAA;CAJiB,EAAA,GAAA,IAAA,EAAA,MAAA,EAAA;EASP,UAAA,EAyZE,6BAzZF,CAyZgC,OAzZhC,EAAA,MAAA,CAAA;EAAI,WAAA,CAAA,EA0ZA,MA1ZA,CAAA,MAAA,EAAA,MAAA,CAAA;CAAE,EAAA,GAAA,IAAA;AAAW,KA8ZnB,SAAA,GA9ZmB;EAQzB,IAAA,EAAA,OAAA;EACoB,KAAA,EAAA,OAAA;EAAQ,UAAA,EAAA,MAAA;EAAM,OAAA,EAAA,MAAA;EAAO,OAAA,EAAA,MAAA;CAAQ;AAAW,cA6ZrD,aA7ZqD,CAAA,kBAAA,SA8ZvC,iBA9ZuC,CA+Z9D,UA/Z8D,EAAA,MAAA,EAia9D,gBAja8D,GAAA,SAAA,EAka9D,gBAla8D,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,wBAsaxC,0BAtawC,CAsab,SAtaa,CAAA,CAAA,CAAA;EAA1D,CAAA,OAAA;EAAiB,WAAA,CAAA,YAAA,EAibG,wBAjbH,EAAA,cAAA,EAib6C,eAjb7C;EAQb,IAAA,YAAA,CAAA,CAAA,EAqbU,QArbM,CAqbG,MArbH,CAAA,MAAA,EAqbkB,SArblB,CAAA,CAAA;EAExB,WAAA,CAAA,gBAAA,MAAA,CAAA,CAAA,GAAA,EAubuC,CAvbvC,CAAA,EAub2C,eAvb3C,CAub2D,CAvb3D,CAAA;EAEA,UAAA,CAAA,cAybuB,oBAzbvB,CAyb4C,eAzb5C,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EA0bM,oBA1bN,CA0b2B,eA1b3B,CAAA,QAAA,CAAA,EA0bsD,KA1btD,CAAA,EAAA,OAAA,CAAA,EA2bU,iBA3bV,CAAA,EA4bC,oBA5bD,CAAA,KAAA,EA8bA,KA9bA,EA+bA,WA/bA,CA+bY,kBA/bZ,CA+b+B,eA/b/B,CAAA,QAAA,CAAA,EA+b0D,KA/b1D,CAAA,CAAA,cAAA,CAAA,CAAA,EAgcA,WAhcA,CAgcY,kBAhcZ,CAgc+B,eAhc/B,CAAA,QAAA,CAAA,EAgc0D,KAhc1D,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,MAAA,CAAA,EAicA,WAjcA,CAicY,kBAjcZ,CAic+B,eAjc/B,CAAA,QAAA,CAAA,EAic0D,KAjc1D,CAAA,CAAA,iBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;EACA,aAAA,CAAA,cAsd0B,uBAtd1B,CAsdkD,eAtdlD,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,MAAA,EAudQ,gBAvdR,EAAA,IAAA,EAwdM,KAxdN,EAAA,YAAA,CAAA,EAyde,cAzdf,CAyd8B,KAzd9B,CAAA,CAAA,EA0dC,uBA1dD,CA2dA,gBA3dA;EAAA;EA4dA,KAheiB,EAiejB,kBAjeiB,CAieE,eAjeF,CAAA,QAAA,CAAA,EAie6B,KAje7B,CAAA,CAAA,aAAA,CAAA,EAkejB,kBAleiB,CAkeE,eAleF,CAAA,QAAA,CAAA,EAke6B,KAle7B,CAAA,CAAA,cAAA,CAAA,EAmejB,WAneiB,CAmeL,kBAneK,CAmec,eAned,CAAA,QAAA,CAAA,EAmeyC,KAnezC,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,MAAA,CAAA,EAoejB,WApeiB,CAoeL,kBApeK,CAoec,eAped,CAAA,QAAA,CAAA,EAoeyC,KApezC,CAAA,CAAA,iBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;;AAQkB,iBAs5BvB,mBAt5BuB,CAAA,OAAA,EAAA,KAAA,EAAA,kBAy5BnB,MAz5BmB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,iCAAA,SA05BK,iBA15BL,EAAA,CAAA,CAAA,kBAAA,EA45BjB,eA55BiB,CA45BD,OA55BC,EA45BQ,KA55BR,EA45Be,SA55Bf,CAAA,EAAA,YAAA,EA65BvB,wBA75BuB,EAAA,iBAAA,EA85BlB,kBA95BkB,CAAA,EA+5BpC,aA/5BoC,CAg6BrC,qBAh6BqC,CAg6Bf,kBAh6Be,CAAA,EAi6BrC,0BAj6BqC,CAi6BV,qBAj6BU,CAi6BY,kBAj6BZ,CAAA,CAAA,CAAA;;;AF5E3B,KGKA,wBHLoB,CAAA,kBAAG,SGMR,oBHNyB,EAAA,EAAA,KAAA,EAAA,kBGQhC,MHRgC,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,GAAA,CAAA,YAAA,EGUpC,6BHVoC,CGUN,SHVM,CAAA,EAAA,aAAA,EGWnC,8BHXmC,CGWJ,KHXI,EGWG,SHXH,CAAA,EAAA,GGY/C,OHZ+C,CGYvC,QHZuC,GAAA,SAAA,CAAA,GGYf,QHZe,GAAA,SAAA;AAEnC,UGYA,wBAAA,CHZmB;EAC1B,IAAA,EAAA,MAAA;EACF,MAAA,EGYE,UHZF;EACI,UAAA,CAAA,EGYG,MHZH,CAAA,MAAA,EAAA,MAAA,CAAA;EAAS,YAAA,EGaL,eHbK;EAGT,IAAA,EGWJ,eHXgB;EAKpB,OAAA,EGOO,OHPP;;AAGA,cGOS,8BHPT,CAAA,WAAA,EAAA,wBGSsB,MHTtB,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SGUM,aHVN,CAAA,OAAA,EAAA,MAAA,CAAA,CAAA;EAJuB,CAAA,OAAA;EAQO,WAAA,CAAA,IAAA,EGUd,KHVc,EAAA,QAAA,EGUG,SHVH;EAAS,IAAA,IAAA,CAAA,CAAA,EGgB7B,KHhB6B;EAAO,IAAA,QAAA,CAAA,CAAA,EGoBhC,SHpBgC;;AAAe,cGyBpD,6BHzBoD,CAAA,wBAAA,SGyBS,oBHzBT,EAAA,CAAA,CAAA;EAAO,CAAA,OAAA;EAG5D,WAAA,CAAA,MAAA,EG0BU,SH1BO,EAAA,OAAG,EG0BQ,wBH1Be;EAE3C,IAAA,IAAA,CAAA,CAAA,EAAA,MAAA;EAAyC,IAAA,MAAA,CAAA,CAAA,EG0CrC,UH1CqC;EAAuB,IAAA,UAAA,CAAA,CAAA,EG8CxD,MH9CwD,CAAA,MAAA,EAAA,MAAA,CAAA;EAE3C,IAAA,WAAA,CAAA,CAAA,EGgDZ,eHhDY;EAG7B,IAAA,WAAA,CAAA,CAAA,EGiDiB,gBHjDjB,GAAA,SAAA;EAAc,IAAA,YAAA,CAAA,CAAA,EGqDI,gBHrDJ,GAAA,SAAA;EACR,cAAA,EAAA,CAAA,sBG0DgB,UH1DhB,EAAA,oBG2Dc,gBH3Dd,CG2D+B,SH3D/B,CAAA,EAAA,qBG4De,kBH5Df,CG4DkC,SH5DlC,EG4D2C,KH5D3C,EG4DkD,OH5DlD,CAAA,GG4D6D,kBH5D7D,CG6DJ,SH7DI,EG8DJ,KH9DI,EG+DJ,OH/DI,CAAA,CAAA,CAAA,MAAA,EGkEE,OHlEF,EAAA,IAAA,EGmEA,KHnEA,EAAA,OAAA,EAAA,CAAA,GAAA,IAAA,EGqEK,UHrEL,CGqEgB,MHrEhB,CAAA,SAAA,CAAA,CAAA,EAAA,GGsED,OHtEC,CGsEO,QHtEP,GAAA,SAAA,GAAA,IAAA,CAAA,GGsEsC,QHtEtC,GAAA,SAAA,GAAA,IAAA,EAAA,GGuEL,OHvEK,CGuEG,QHvEH,GAAA,SAAA,CAAA;;;;UIdO,kBAAA;EJjBL,UAAA,CAAA,EAAA,MAAA;AAEZ;AACU,UIkBO,wBAAA,CJlBP;EACF,UAAA,CAAA,EAAA,MAAA;EACI,OAAA,CAAA,EAAA,MAAA;;AAGZ,KIkBK,aAAA,GJlBmB;EAKpB,GAAA,EAAA,CAAA,GAAA,EIcS,OJdT,EAAA,GIcqB,OJdrB,CIc6B,QJd7B,CAAA;CAEA;KIeC,mBAAA,GJdD;EAJuB,MAAA,EAAA,CAAA,IAAA,EAAA;IAQO,OAAA,EIWN,OJXM;EAAS,CAAA,EAAA,GIWD,OJXC,CIWO,QJXP,CAAA;EAAO,MAAA,EAAA,CAAA,IAAA,EAAA;IAApC,OAAA,EIYc,OJZd;EAAmD,CAAA,EAAA,GIYvB,OJZuB,CIYf,QJZe,CAAA;CAAO;AAGxE,KIYK,kBAAA,GJZwB;EAEjB,GAAA,EAAA,CAAA,IAAA,EAAA;IAAyC,OAAA,EIW5B,OJX4B;EAAuB,CAAA,EAAA,GIWrC,OJXqC,CIW7B,QJX6B,CAAA;EAE3C,IAAA,EAAA,CAAA,IAAA,EAAA;IAG7B,OAAA,EIOsB,OJPtB;EAAc,CAAA,EAAA,GIOsB,OJPtB,CIO8B,QJP9B,CAAA;EACR,GAAA,EAAA,CAAA,IAAA,EAAA;IAAkC,OAAA,EIOnB,OJPmB;EAAtB,CAAA,EAAA,GIOiB,OJPjB,CIOyB,QJPzB,CAAA;EACf,MAAA,EAAA,CAAA,IAAA,EAAA;IAAgC,OAAA,EIOX,OJPW;EAAtB,CAAA,EAAA,GIOyB,OJPzB,CIOiC,QJPjC,CAAA;EAAqB,KAAA,EAAA,CAAA,IAAA,EAAA;IAkCtB,OAAA,EI1BW,OJ0BA;EACH,CAAA,EAAA,GI3BiB,OJ2BjB,CI3ByB,QJ2BzB,CAAA;EAEM,IAAA,EAAA,CAAA,IAAA,EAAA;IAK1B,OAAA,EIjCsB,OJiCtB;EACA,CAAA,EAAA,GIlCoC,OJkCpC,CIlC4C,QJkC5C,CAAA;EAEA,OAAA,EAAA,CAAA,IAAA,EAAA;IACA,OAAA,EIpCyB,OJoCzB;EACA,CAAA,EAAA,GIrCuC,OJqCvC,CIrC+C,QJqC/C,CAAA;CANM;KI5BL,gBAAA,GJoCgB;EAAS,GAAA,EAAA,CAAA,GAAA,EInCjB,OJmCiB,EAAA,GInCL,OJmCK,CInCG,QJmCH,CAAA;EAAkB,IAAA,EAAA,CAAA,GAAA,EIlClC,OJkCkC,EAAA,GIlCtB,OJkCsB,CIlCd,QJkCc,CAAA;EAAe,GAAA,EAAA,CAAA,GAAA,EIjClD,OJiCkD,EAAA,GIjCtC,OJiCsC,CIjC9B,QJiC8B,CAAA;EAAY,MAAA,EAAA,CAAA,GAAA,EIhC3D,OJgC2D,EAAA,GIhC/C,OJgC+C,CIhCvC,QJgCuC,CAAA;EAAxE,KAAA,EAAA,CAAA,GAAA,EI/BY,OJ+BZ,EAAA,GI/BwB,OJ+BxB,CI/BgC,QJ+BhC,CAAA;EAAiB,IAAA,EAAA,CAAA,GAAA,EI9BN,OJ8BM,EAAA,GI9BM,OJ8BN,CI9Bc,QJ8Bd,CAAA;EAGJ,OAAA,EAAA,CAAA,GAAA,EIhCC,OJgCU,EAAA,GIhCE,OJgCF,CIhCU,QJgCV,CAAA;CACH;KI9BnB,mBAAA,GJgCwB;EACC,KAAA,EIhCrB,aJgCqB;EAK1B,cAAA,EIpCc,mBJoCd;EACA,SAAA,EIpCS,gBJoCT;EACA,YAAA,EIpCY,gBJoCZ;EACA,aAAA,EIpCa,kBJoCb;CACA;AACA,cIlCS,8BJkCT,EAAA,+BAAA;KIhCC,mBAAA,GJ0BK,MI1BuB,mBJ0BvB;AAOW,UI/BJ,0BJ+BI,CAAA,kBAAA,SI9BM,oBJ8BN,EAAA,GAAA,EAAA,EAAA,QAAA,CAAA,CAAA,EAAA,kBI5BD,MJ4BC,CAAA,MAAA,EAAA,OAAA,CAAA,GI5ByB,MJ4BzB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,2BI3BQ,MJ2BR,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;EACA,CI1BlB,8BAAA,CJ0BkB,EAAA,OI1BsB,8BJ0BtB;EAAS,MAAA,EIxBpB,0BJwBoB,CIxBO,SJwBP,CAAA;EAAO,IAAA,EIvB7B,KJuB6B;EAAc,QAAA,EItBvC,SJsBuC;EAAe,iBAAA,CAAA,EIrB5C,kBJqB4C;EAAY,WAAA,EAAA,CAAA,UIpBpD,mBJoBoD,CAAA,CAAA,SAAA,EIpBpB,CJoBoB,EAAA,GIpBd,mBJoBc,CIpBM,CJoBN,CAAA;EAA3E,OAAA,EAAA,CAAA,GAAA,EInBc,OJmBd,EAAA,GInB0B,OJmB1B,CInBkC,QJmBlC,CAAA;EAAiB,UAAA,EAAA,MAAA;EAuBJ,cAAA,EAAY,CAAA,OAAA,EIvCf,wBJuCe,CIvCU,SJuCV,EIvCmB,KJuCnB,EIvC0B,SJuC1B,CAAA,EAAA,GItCrB,0BJsCqB,CItCM,SJsCN,EItCe,KJsCf,EItCsB,SJsCtB,EItCiC,kBJsCjC,CAAA;;AAMpB,UIzCS,0BJyCT,CAAA,kBAAA,SIxCmB,iBJwCnB,CIvCJ,UJuCI,EAAA,MAAA,EIrCJ,gBJqCI,GAAA,SAAA,EIpCJ,gBJoCI,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA;EACA,IAAA,EAAA,MAAA;EAJ6B,MAAA,EI3B3B,SJ2B2B;;AASY,KIjCrC,6BAAA,GAAgC,0BJiCK,CAAA,SIhCtC,oBJgCsC,EAAA,CAAA;AAAO,iBI7BxC,cJ6BwC,CAAA,aAAA,EAAA,WAAA,EAAA,wBI1B9B,MJ0B8B,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,iCAAA,SIzBZ,iBJyBY,EAAA,EAAA,iCIxBrB,MJwBqB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,uBIvB/B,kBJuB+B,CAAA,CAAA,eAAA,EAAA;EAApC,UAAA,EIpBJ,kBJoBI,CIpBe,OJoBf,EIpBwB,KJoBxB,EIpB+B,SJoB/B,EIpB0C,kBJoB1C,CAAA;EAAmD,gBAAA,EInBjD,QJmBiD;CACnD,EAAA,MAAA,EIlBV,OJkBU,EAAA,iBAAA,EIjBC,kBJiBD,EAAA,OAAA,EIhBT,QJgBS,CAAA,EIfjB,0BJeiB,CIdlB,qBJckB,CIdI,kBJcJ,CAAA,EIblB,KJakB,EIZlB,SJYkB,EIXlB,kBJWkB,CAAA;;;UK1IH,0DAGG,yDACS;;0BAGH,kBAAkB,uBAAuB;sBAC7C,kBAAkB,0BAA0B,UAAU;sBACtD;ALPtB;AAEiB,cKQJ,eLRuB,CAAA,aAAA,EAAA,cAAA,CAAA,CAAA,EAAA,wBKWV,MLXU,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,CAAA,CAAA,EAAA,iCKYD,MLZC,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;EAC1B,CAAA,OAAA;EACF,WAAA,CAAA,UAAA,EKckB,kBLdlB,CKcqC,OLdrC,EKc8C,KLd9C,EKcqD,SLdrD,EKcgE,kBLdhE,CAAA;EACI,IAAA,UAAA,CAAA,CAAA,EKiBI,kBLjBJ,CKiBI,OLjBJ,EKiBI,KLjBJ,EKiBI,SLjBJ,EKiBI,kBLjBJ,CAAA;EAAS,IAAA,gBAAA,CAAA,CAAA,EKqBK,kBLrBL;EAGT,gBAAY,CAAA,QAAA,CAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAAA;IAKpB,MAAA,EKmBqB,OLnBrB;IAEA,YAAA,EKiB4C,kBLjB5C;EACA,CAAA,GKgBmE,kBLhBnE,EAAA,GKiBK,QLjBL,CAAA,EKkBC,eLlBD,CKkBiB,OLlBjB,EKkB0B,QLlB1B,EAAA,CAAA,CAAA,EKkBwC,kBLlBxC,CAAA;EAJuB,YAAA,CAAA,qBKoCS,MLpCT,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAAA;IAQO,MAAA,EK+BlB,OL/BkB;IAAS,YAAA,EKgCrB,kBLhCqB;IAAO,IAAA,EKiCpC,KLjCoC;EAApC,CAAA,GKkCJ,kBLlCI,EAAA,GKmCL,YLnCK,CAAA,EKoCT,eLpCS,CKoCO,OLpCP,EKoCgB,KLpChB,EKoCuB,YLpCvB,EKoCqC,kBLpCrC,CAAA;;AAA0D,iBKoDxD,cLpDwD,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EKoDZ,eLpDY,CKoDI,OLpDJ,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"fragment-builder-D6-oLYnH.d.ts","names":[],"sources":["../src/api/route.ts","../src/client/client-error.ts","../src/client/client.ts","../src/api/request-middleware.ts","../src/api/fragment-instantiation.ts","../src/api/fragment-builder.ts"],"sourcesContent":[],"mappings":";;;;;;KAIY,oBAAA,GAAuB,kBAAkB;UAEpC;UACP;QACF;EAJI,QAAA,EAKA,SALA;AAEZ;AACU,KAKE,YALF,CAAA,OAAA,EAAA,KAAA,EAAA,SAAA,EAAA,kBAAA,SASiB,iBATjB,CAUN,UAVM,EAAA,MAAA,EAYN,gBAZM,GAAA,SAAA,EAaN,gBAbM,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAA,OAAA,EAiBI,mBAjBJ,CAiBwB,OAjBxB,EAiBiC,KAjBjC,EAiBwC,SAjBxC,CAAA,EAAA,GAiBuD,SAjBvD;AACF,KAmBI,iBAAA,GAAoB,oBAnBxB,GAmB+C,YAnB/C,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA;AACI,KAoBA,qBApBA,CAAA,YAAA,SAoByC,iBApBzC,EAAA,CAAA,GAoBgE,GApBhE,SAAA,SAAA,CAAS,KAAA,MAAA,EAGT,GAAA,KAAA,cAAY,SAmBS,iBAnBT,EAAA,CAKpB,GAiBA,KAjBA,SAiBc,YAjBd,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,KAAA,QAAA,CAAA,GAAA,CAAA,GAkBM,OAlBN,EAAA,GAkBkB,qBAlBlB,CAkBwC,IAlBxC,CAAA,CAAA,GAAA,CAmBG,KAnBH,EAAA,GAmBa,qBAnBb,CAmBmC,IAnBnC,CAAA,CAAA,GAAA,EAAA;AAGA,iBAkDY,WAlDZ,CAAA,wBAmDoB,UAnDpB,EAAA,sBAAA,MAAA,EAAA,4BAqD0B,gBArD1B,GAAA,SAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,+BAAA,MAAA,GAAA,MAAA,CAAA,CAAA,MAAA,EAyDM,iBAzDN,CA0DA,SA1DA,EA2DA,OA3DA,EAAA,SAAA,EA6DA,aA7DA,EA8DA,UA9DA,EA+DA,gBA/DA,CAAA,GAAA;EAJuB,WAAA,CAAA,EAAA,SAAA;CAQO,CAAA,EA6D/B,iBA7D+B,CA6Db,SA7Da,EA6DJ,OA7DI,EAAA,SAAA,EA6Dc,aA7Dd,EA6D6B,UA7D7B,EA6DyC,gBA7DzC,CAAA;AAAS,iBAgE3B,WAhE2B,CAAA,wBAiEnB,UAjEmB,EAAA,sBAAA,MAAA,EAAA,2BAmEd,gBAnEc,EAAA,4BAoEb,gBApEa,GAAA,SAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,+BAAA,MAAA,GAAA,MAAA,CAAA,CAAA,MAAA,EAwEjC,iBAxEiC,CAyEvC,SAzEuC,EA0EvC,OA1EuC,EA2EvC,YA3EuC,EA4EvC,aA5EuC,EA6EvC,UA7EuC,EA8EvC,gBA9EuC,CAAA,GAAA;EAAO,WAAA,EA+E7B,YA/E6B;CAApC,CAAA,EAgFX,iBAhFW,CAgFO,SAhFP,EAgFgB,OAhFhB,EAgFuB,YAhFvB,EAgFqC,aAhFrC,EAgFoD,UAhFpD,EAgFgE,gBAhFhE,CAAA;AAAmD,iBAuGjD,YAvGiD,CAAA,UAAA,CAAA,CAAA,EAAA,QAAA,CAAA,CAAA,EAAA,YAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;EAAO,MAAA,EAAA,CAAA,sBAAA,SA0GnC,iBA1GmC,CA2GhE,UA3GgE,EAAA,MAAA,EA6GhE,gBA7GgE,GAAA,SAAA,EA8GhE,gBA9GgE,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAmHpD,mBAnHoD,CAmHhC,OAnHgC,EAmHvB,KAnHuB,EAmHhB,SAnHgB,CAAA,EAAA,GAmHD,OAnHC,EAAA,GAoHjE,YApHiE,CAoHpD,OApHoD,EAoH3C,KApH2C,EAoHpC,SApHoC,EAoHzB,OApHyB,CAAA;AAGxE,CAAA;;;KCzBY,kBAAA;UACF;;;;ADCV;AAEiB,uBCGK,iBDHc,CAAA,cAAA,MAAA,GAAA,MAAA,CAAA,SCG2C,KAAA,CDH3C;EAC1B,CAAA,OAAA;EACF,WAAA,CAAA,OAAA,EAAA,MAAA,EAAA,IAAA,ECI6B,KDJ7B,EAAA,OAAA,CAAA,ECI6C,kBDJ7C;EACI,IAAA,IAAA,CAAA,CAAA,ECSE,KDTF,GAAA,CAAA,MAAA,GAAA,CAAA,CAAA,CAAA;;AAGA,cCWC,sBAAA,SAA+B,iBDXpB,CAAA,SAAA,GAAA,eAAA,GAAA,aAAA,CAAA,CAAA;EAKpB,WAAA,CAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAA,GAAA,eAAA,GAAA,aAAA,EAAA,OAAA,CAAA,ECYS,kBDZT;EAEA,OAAA,qBAAA,CAAA,KAAA,EAAA,OAAA,CAAA,ECgB4C,sBDhB5C;;;;;AAK8C,cC2BrC,6BAAA,SAAsC,sBAAA,CD3BD;EAApC,WAAA,CAAA,OAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EC4BqD,kBD5BrD;;;AAGd;AAEA;AAAqD,cCgCxC,2BAAA,SAAoC,sBAAA,CDhCI;EAAuB,WAAA,CAAA,OAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,ECiCZ,kBDjCY;;;;;AAMhC,cCoC/B,2BAAA,SAAoC,iBDpCL,CAAA,mBAAA,CAAA,CAAA;EAAtB,CAAA,OAAA;EACf,WAAA,CAAA,OAAA,EAAA,MAAA,GAAA,SAAA,EAAA,MAAA,ECwCK,UDxCL,EAAA,OAAA,CAAA,ECyCM,kBDzCN;EAAgC,IAAA,MAAA,CAAA,CAAA,ECgDvB,UDhDuB;;AAAD,cCqDzB,oBDrDyB,CAAA,mBAAA,MAAA,GAAA,MAAA,CAAA,SCuD5B,iBDvD4B,CCuDV,UDvDU,CAAA,CAAA;EAkCtB,CAAA,OAAA;EACQ,WAAA,CAAA;IAAA,OAAA;IAAA;EAQpB,CARoB,EAAA;IAEM,OAAA,EAAA,MAAA;IAK1B,IAAA,ECiB4C,UDjB5C;EACA,CAAA,EAAA,MAAA,ECiBQ,UDjBR,EAAA,OAAA,CAAA,ECkBS,kBDlBT;EAEA,IAAA,MAAA,CAAA,CAAA,ECuBY,UDvBZ;EACA;;;;;;EAG2D,IAAA,IAAA,CAAA,CAAA,EC6BjD,UD7BiD,GAAA,CAAA,MAAA,GAAA,CAAA,CAAA,CAAA;EAAY,OAAA,YAAA,CAAA,mBAAA,MAAA,GAAA,MAAA,CAAA,CAAA,QAAA,ECkC7D,QDlC6D,CAAA,ECmCtE,ODnCsE,CCmC9D,oBDnC8D,CCmCzC,UDnCyC,CAAA,GCmC3B,2BDnC2B,CAAA;;;;;;AAzE3E;cEyBM,eFpBF,EAAA,OAAA,MAAA;cEqBE,mBFnBF,EAAA,OAAA,MAAA;cEoBE,YFnBF,EAAA,OAAA,MAAA;;;;AAI8C,KEoBtC,gBFpBsC,CAAA,YAAA,SEqB7B,iBFrB6B,CEsB9C,UFtB8C,EAAA,MAAA,EEwB9C,gBFxB8C,GAAA,SAAA,EEyB9C,gBFzB8C,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GAAA,QAApC,ME8BA,GF9BA,GE8BI,GF9BJ,CE8BM,CF9BN,CAAA,SE8BiB,iBF9BjB,CAAA,KAAA,OAAA,EAAA,KAAA,KAAA,EAAA,KAAA,MAAA,EAAA,KAAA,OAAA,EAAA,KAAA,UAAA,EAAA,KAAA,YAAA,CAAA,GEsCR,MFtCQ,SAAA,KAAA,GEuCN,iBFvCM,CEuCY,MFvCZ,EEuCoB,IFvCpB,EEuC0B,KFvC1B,EEuCiC,MFvCjC,EEuCyC,SFvCzC,EEuCoD,WFvCpD,CAAA,GAAA,KAAA,GAAA,KAAA,EAAmD,CAAA,MAAA,CAAA,EAAA;;AAGjE;AAEA;AAAqD,KE0CzC,gBF1CyC,CAAA,YAAA,SE2ChC,iBF3CgC,CE4CjD,UF5CiD,EAAA,MAAA,EE8CjD,gBF9CiD,GAAA,SAAA,EE+CjD,gBF/CiD,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,wBEmD3B,UFnD2B,GEmDd,UFnDc,CAAA,GAAA,QAAuB,MEqD9D,GFrD8D,GEqD1D,GFrD0D,CEqDxD,CFrDwD,CAAA,SEqD7C,iBFrD6C,CAAA,KAAA,OAAA,EAAA,KAAA,KAAA,EEwDxE,gBFxDwE,GAAA,SAAA,EEyDxE,gBFzDwE,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,GE6DtE,MF7DsE,SE6DvD,eF7DuD,GE8DpE,IF9DoE,GAAA,KAAA,GAAA,KAAA,EAE3C,CAAA,MAAA,CAAA;AAG7B,KE8DQ,oBF9DR,CAAA,YAAA,SE+DiB,iBF/DjB,CEgEA,UFhEA,EAAA,MAAA,EEkEA,gBFlEA,GAAA,SAAA,EEmEA,gBFnEA,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GEuEA,gBFvEA,CEuEiB,GFvEjB,EAAA,KAAA,CAAA;AAAc,KEyEN,uBFzEM,CAAA,YAAA,SE0EG,iBF1EH,CE2Ed,UF3Ec,EAAA,MAAA,EE6Ed,gBF7Ec,GAAA,SAAA,EE8Ed,gBF9Ec,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GEkFd,gBFlFc,CEkFG,GFlFH,EEkFM,gBFlFN,CAAA;;;;;;;;AAoCF,KEuDJ,kBFvDe,CAAA,kBAAA,SEwDA,iBFxDA,CEyDvB,UFzDuB,EAAA,MAAA,EE2DvB,gBF3DuB,GAAA,SAAA,EE4DvB,gBF5DuB,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,gBAAA,MAAA,EAAA,kBEiET,UFjES,GEiEI,UFjEJ,CAAA,GAAA,QACH,MEkEV,SFlEU,GEkEA,SFlEA,CEkEQ,CFlER,CAAA,SEkEmB,iBFlEnB,CAAA,KAAA,EAAA,EEoEpB,OFpEoB,EAAA,KAAA,MAAA,EAAA,KAAA,OAAA,EAAA,KAAA,UAAA,EAAA,KAAA,YAAA,CAAA,GE0ElB,CF1EkB,SE0ER,SF1EQ,GE2EhB,iBF3EgB,CE2EE,CF3EF,EE2EK,OF3EL,EE2EY,KF3EZ,EE2EmB,MF3EnB,EE2E2B,SF3E3B,EE2EsC,WF3EtC,CAAA,GAAA,KAAA,GAAA,KAAA,EAEM,CAAA,MAAA,CAAA;;;;AAS1B,KEwEQ,0BFxER,CAAA,kBAAA,SEyEuB,iBFzEvB,CE0EA,UF1EA,EAAA,MAAA,EE4EA,gBF5EA,GAAA,SAAA,EE6EA,gBF7EA,GAAA,SAAA,CAAA,EAAA,EAAA,gBAAA,MAAA,CAAA,GAAA,QACA,MEgFU,SFhFV,GEgFoB,SFhFpB,CEgF4B,CFhF5B,CAAA,SEgFuC,iBFhFvC,CAAA,KAAA,OAAA,EEkFA,OFlFA,EEmFA,gBFnFA,GAAA,SAAA,EAAA,KAAA,OAAA,CAAA,GEsFE,MFtFF,SAAA,KAAA,GEuFI,MFvFJ,GAAA,KAAA,GAAA,KAAA,EANM,CAAA,MAAA,CAAA;;;;AAQqD,KE6FnD,mBF7FmD,CAAA,kBAAA,SE8FpC,iBF9FoC,CE+F3D,UF/F2D,EAAA,MAAA,EEiG3D,gBFjG2D,GAAA,SAAA,EEkG3D,gBFlG2D,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,gBAAA,MAAA,CAAA,GEuG3D,OFvG2D,SEuG7C,oBFvG6C,CEuGxB,SFvGwB,CAAA,GAAA,IAAA,GAAA,KAAA;;;;AAG/C,KEyGJ,oBFzGe,CAAA,kBAAA,SE0GA,iBF1GA,CE2GvB,UF3GuB,EAAA,MAAA,EE6GvB,gBF7GuB,GAAA,SAAA,EE8GvB,gBF9GuB,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,gBAAA,MAAA,CAAA,GEoHzB,OFpHyB,SEoHX,oBFpHW,CEoHU,SFpHV,CAAA,GEqHrB,OFrHqB,GAAA,gBEsHL,OFtHK,qDEsHqD,oBFtHrD,CEsH0E,SFtH1E,CAAA,EAAA;;;;AASvB,KEkHQ,YFlHR,CAAA,YAAA,SEmHiB,iBFnHjB,CEoHA,UFpHA,EAAA,MAAA,EEsHA,gBFtHA,GAAA,SAAA,EEuHA,gBFvHA,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GE2HA,oBF3HA,CE2HqB,GF3HrB,CAAA,SAAA,KAAA,GAAA,KAAA,GAAA,IAAA;AACA,KE4HQ,0BF5HR,CAAA,YAAA,MAAA,CAAA,GE4HuD,GF5HvD,SE4HiE,KF5HjE,GE6HA,GF7HA,GAAA,QACA,ME8HgB,GF9HhB,GE8HoB,GF9HpB,CE8HsB,CF9HtB,CAAA,SE8HiC,KF9HjC,GAAA,QE8HiD,CF7HjD,GE6HqD,GF7HrD,CE6HuD,CF7HvD,CAAA,EACA,GE4H8D,OF5H9D,CE4HsE,IF5HtE,CE4H2E,GF5H3E,EE4H8E,CF5H9E,CAAA,CAAA,GAAA,KAAA,EACA,CAAA,ME4HU,GF5HV,CAAA,SAAA,KAAA,GAAA,KAAA,GE8HE,GF9HF;AANM,KEsIE,eFtIF,CAAA,YAAA,MAAA,CAAA,GAAA;EAOW,GAAA,EEgId,GFhIc;EACA,CEgIlB,YAAA,CFhIkB,EAAA,IAAA;CAAS;AAAO,KEmIzB,oBFnIyB,CAAA,kBEoInB,UFpImB,EAAA,gBAAA,MAAA,EAAA,sBEsIb,gBFtIa,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,GAAA;EAAc,KAAA,EE0I1C,iBF1I0C,CE2I/C,SF3I+C,EE4I/C,OF5I+C,EE6I/C,gBF7I+C,GAAA,SAAA,EE8I/C,aF9I+C,EE+I/C,UF/I+C,EEgJ/C,gBFhJ+C,CAAA;EAAe,KAAA,CAAA,IAA9C,CAA8C,EAAA;IAAY,IAAA,CAAA,EEmJnE,6BFnJmE,CEmJrC,OFnJqC,EAAA,MAAA,CAAA;IAA3E,KAAA,CAAA,EEoJS,MFpJT,CEoJgB,gBFpJhB,EAAA,MAAA,CAAA;EAAiB,CAAA,CAAA,EEqJd,OFrJc,CEqJN,gBAAA,CAAiB,WFrJX,CEqJuB,aFrJvB,CAAA,CAAA;EAuBJ,KAAA,CAAA,IAOR,CAPQ,EAAA;IAIR,IAAA,CAAA,EE4HG,6BF5HH,CE4HiC,OF5HjC,EAAA,MAAA,GE4HiD,YF5HjD,CAAA,MAAA,CAAA,CAAA;IAEA,KAAA,CAAA,EE2HI,MF3HJ,CE2HW,gBF3HX,EAAA,MAAA,GE2HsC,YF3HtC,CAAA,MAAA,CAAA,CAAA;EACA,CAAA,CAAA,EE2HF,YF3HE,CE2HW,gBAAA,CAAiB,WF3H5B,CE2HwC,aF3HxC,CAAA,EE2HwD,iBF3HxD,CE2H0E,UF3H1E,CAAA,CAAA;EAJ6B,CEgIlC,eAAA,CFhIkC,EAAA,IAAA;CASG,GAAA;EAAS,SAAA,aAAA,CAAA,EE6HtB,aF7HsB;CAAO;AAApC,KEgIR,uBFhIQ,CAAA,kBEiIF,gBFjIE,EAAA,gBAAA,MAAA,EAAA,qBEmIG,gBFnIH,GAAA,SAAA,EAAA,sBEoII,gBFpIJ,GAAA,SAAA,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,GAAA;EAAmD,KAAA,EEwI9D,iBFxI8D,CEyInE,SFzImE,EE0InE,OF1ImE,EE2InE,YF3ImE,EE4InE,aF5ImE,EE6InE,UF7ImE,EE8InE,gBF9ImE,CAAA;EACnD,WAAA,CAAA,IAAb,CAAa,EAAA;IAAS,IAAA,CAAA,EEiJlB,OFjJkB,CEiJV,YFjJU,EAAA,SAAA,CAAA;IAAO,IAAA,CAAA,EEkJzB,6BFlJyB,CEkJK,OFlJL,EAAA,MAAA,CAAA;IAAW,KAAA,CAAA,EEmJnC,MFnJmC,CEmJ5B,gBFnJ4B,EAAA,MAAA,CAAA;EAAxC,CAAA,CAAA,EEoJD,OFpJC,CEoJO,OFpJP,CEoJe,aFpJf,EAAA,SAAA,CAAA,CAAA;EAAY,YAAA,EEsJH,YFtJG,CAAA;WEwJN,QAAQ;WACR,8BAA8B,kBAAgB;YAC7C,OAAO,2BAA2B;EDpSpC,CAAA,ECsSR,ODtSQ,CCsSA,aDtSkB,EAAA,SACpB,CAAA,ECsSN,iBDtSW,CCsSO,UDtSP,CAAA,CAAA;EAMO,CCkSnB,mBAAA,CDlSoC,EAAA,IAAA;CAGF,GAAA;EAAgB,SAAA,YAAA,CAAA,ECiS3B,YDjS2B;EAMvC,SAAA,aAAA,CAAA,EC4Ra,aD5Rb;CATiE;AAAK,iBCwSpE,QDxSoE,CAAA,gBAAA,MAAA,CAAA,CAAA,MAAA,EAAA;EAcvE,OAAA,CAAA,EAAA,MAAA;EAMA,UAAA,EAAA,MAAA;EAMmC,IAAA,ECkRtC,ODlRsC;CAZJ,EAAA,MAAA,EAAA;EAAiB,UAAA,CAAA,ECiS5C,MDjS4C,CAAA,MAAA,EAAA,MAAA,GCiSpB,YDjSoB,CAAA,MAAA,CAAA,CAAA;EA4BhD,WAAA,CAAA,ECsQK,MDtQL,CAAA,MAAA,EAAA,MAA8B,GCsQD,YDrQyB,CAAA,MAAA,CAAA,CAAA;AASnE,CAAA,CAAA,EAAa,MAAA;AAUb;;;;;;AAkBA;;;AAMe,iBCkPC,WDlPD,CAAA,kBCkP6B,UDlP7B,EAAA,gBAAA,MAAA,CAAA,CAAA,MAAA,ECmPL,SDnPK,EAAA,IAAA,ECoPP,ODpPO,EAAA,MAEF,CAFE,EAAA;EAAiC,UAAA,CAAA,ECsP/B,MDtP+B,CAAA,MAAA,EAAA,MAAA,GCsPP,YDtPO,CAAA,MAAA,CAAA,CAAA;EACpC,WAAA,CAAA,ECsPM,MDtPN,CAAA,MAAA,EAAA,MAAA,GCsP8B,YDtP9B,CAAA,MAAA,CAAA,CAAA;CACC,CAAA,EAAA,CAAA,MAAA,GCuPA,YDvPA,CAAA,MAAA,CAAA,CAAA,EAAA;AAOG,iBC8RA,SD9RA,CAAA,gBAAA,MAAA,EAAA,sBCgSQ,gBDhSR,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,CAAA,IAAA,EAAA,OAAA,CAAA,EAAA,IAAA,ICqSL,oBDrSK,CAAA,KAAA,ECqSuB,ODrSvB,ECqS8B,aDrS9B,ECqS6C,UDrS7C,ECqSyD,gBDrSzD,CAAA;AAUF,iBCqSE,aDrSF,CAAA,kBCsSI,gBDtSJ,EAAA,gBAAA,MAAA,EAAA,qBCwSS,gBDxST,GAAA,SAAA,EAAA,sBCySU,gBDzSV,GAAA,SAAA,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,CAAA,IAAA,EAAA,OAAA,CAAA,EAAA,IAAA,IC8SH,uBD9SG,CC+SZ,SD/SY,ECgTZ,ODhTY,ECiTZ,YDjTY,ECkTZ,aDlTY,ECmTZ,UDnTY,ECoTZ,gBDpTY,CAAA;AAKA,iBCyTE,ODzTF,CAAA,eCyTyB,KDzTzB,CAAA,CAAA,GAAA,EAAA,OAAA,CAAA,EAAA,GAAA,ICyTsD,eDzTtD,CCyTsE,MDzTtE,CAAA;KC+TT,cAAA,GD9T6B,CAAA,IAAA,EAAA;EAArB,KAAA,EAAA,OAAA;EAAmC,GAAA,EAAA,MAAA;EAA3C,UAAA,EAAA,MAAA;CA7BK,EAAA,GAAA,MAAA,GAAA,SAAA;AAAiB,KCiWf,iBAAA,GDjWe;;;;AC3DL;AAK2B;EAE3C,YAAA,CAAA,EA2ZW,cA3Z0B,GAAA,IAAA;AAK3C,CAAA;KAyZK,cAvZD,CAAA,gBAAA,MAAA,CAAA,GAAA,CAAA,UAAA,EAAA,CAAA,mBAAA,MAAA,CAAA,CAAA,MAAA,EAyZQ,UAzZR,EAAA,IAAA,EA0ZM,UA1ZN,EAAA,MAAA,EAAA;EAEA,UAAA,CAAA,EA0Ze,6BA1Zf,CA0Z6C,UA1Z7C,EAAA,MAAA,CAAA;EACA,WAAA,CAAA,EA0ZgB,MA1ZhB,CAAA,MAAA,EAAA,MAAA,CAAA;CAJiB,EAAA,GAAA,IAAA,EAAA,MAAA,EAAA;EASP,UAAA,EAyZE,6BAzZF,CAyZgC,OAzZhC,EAAA,MAAA,CAAA;EAAI,WAAA,CAAA,EA0ZA,MA1ZA,CAAA,MAAA,EAAA,MAAA,CAAA;CAAE,EAAA,GAAA,IAAA;AAAW,KA8ZnB,SAAA,GA9ZmB;EAQzB,IAAA,EAAA,OAAA;EACoB,KAAA,EAAA,OAAA;EAAQ,UAAA,EAAA,MAAA;EAAM,OAAA,EAAA,MAAA;EAAO,OAAA,EAAA,MAAA;CAAQ;AAAW,cA6ZrD,aA7ZqD,CAAA,kBAAA,SA8ZvC,iBA9ZuC,CA+Z9D,UA/Z8D,EAAA,MAAA,EAia9D,gBAja8D,GAAA,SAAA,EAka9D,gBAla8D,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,wBAsaxC,0BAtawC,CAsab,SAtaa,CAAA,CAAA,CAAA;EAA1D,CAAA,OAAA;EAAiB,WAAA,CAAA,YAAA,EAibG,wBAjbH,EAAA,cAAA,EAib6C,eAjb7C;EAQb,IAAA,YAAA,CAAA,CAAA,EAqbU,QArbM,CAqbG,MArbH,CAAA,MAAA,EAqbkB,SArblB,CAAA,CAAA;EAExB,WAAA,CAAA,gBAAA,MAAA,CAAA,CAAA,GAAA,EAubuC,CAvbvC,CAAA,EAub2C,eAvb3C,CAub2D,CAvb3D,CAAA;EAEA,UAAA,CAAA,cAybuB,oBAzbvB,CAyb4C,eAzb5C,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EA0bM,oBA1bN,CA0b2B,eA1b3B,CAAA,QAAA,CAAA,EA0bsD,KA1btD,CAAA,EAAA,OAAA,CAAA,EA2bU,iBA3bV,CAAA,EA4bC,oBA5bD,CAAA,KAAA,EA8bA,KA9bA,EA+bA,WA/bA,CA+bY,kBA/bZ,CA+b+B,eA/b/B,CAAA,QAAA,CAAA,EA+b0D,KA/b1D,CAAA,CAAA,cAAA,CAAA,CAAA,EAgcA,WAhcA,CAgcY,kBAhcZ,CAgc+B,eAhc/B,CAAA,QAAA,CAAA,EAgc0D,KAhc1D,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,MAAA,CAAA,EAicA,WAjcA,CAicY,kBAjcZ,CAic+B,eAjc/B,CAAA,QAAA,CAAA,EAic0D,KAjc1D,CAAA,CAAA,iBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;EACA,aAAA,CAAA,cAsd0B,uBAtd1B,CAsdkD,eAtdlD,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,MAAA,EAudQ,gBAvdR,EAAA,IAAA,EAwdM,KAxdN,EAAA,YAAA,CAAA,EAyde,cAzdf,CAyd8B,KAzd9B,CAAA,CAAA,EA0dC,uBA1dD,CA2dA,gBA3dA;EAAA;EA4dA,KAheiB,EAiejB,kBAjeiB,CAieE,eAjeF,CAAA,QAAA,CAAA,EAie6B,KAje7B,CAAA,CAAA,aAAA,CAAA,EAkejB,kBAleiB,CAkeE,eAleF,CAAA,QAAA,CAAA,EAke6B,KAle7B,CAAA,CAAA,cAAA,CAAA,EAmejB,WAneiB,CAmeL,kBAneK,CAmec,eAned,CAAA,QAAA,CAAA,EAmeyC,KAnezC,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,MAAA,CAAA,EAoejB,WApeiB,CAoeL,kBApeK,CAoec,eAped,CAAA,QAAA,CAAA,EAoeyC,KApezC,CAAA,CAAA,iBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;;AAQkB,iBAs5BvB,mBAt5BuB,CAAA,OAAA,EAAA,KAAA,EAAA,kBAy5BnB,MAz5BmB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,iCAAA,SA05BK,iBA15BL,EAAA,EAAA,iCA25BJ,MA35BI,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,CAAA,eAAA,EAAA;EAEzB,UAAA,EA45BE,kBA55BF,CA45BqB,OA55BrB,EA45B8B,KA55B9B,EA45BqC,SA55BrC,EA45BgD,kBA55BhD,CAAA;CAAI,EAAA,YAAA,EA85BF,wBA95BE,EAAA,iBAAA,EA+5BG,kBA/5BH,CAAA,EAg6Bf,aAh6Be,CAi6BhB,qBAj6BgB,CAi6BM,kBAj6BN,CAAA,EAk6BhB,0BAl6BgB,CAk6BW,qBAl6BX,CAk6BiC,kBAl6BjC,CAAA,CAAA,CAAA;;;AF9EN,KGKA,wBHLoB,CAAA,kBAAG,SGMR,oBHNyB,EAAA,EAAA,KAAA,EAAA,kBGQhC,MHRgC,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,GAAA,CAAA,YAAA,EGUpC,6BHVoC,CGUN,SHVM,CAAA,EAAA,aAAA,EGWnC,8BHXmC,CGWJ,KHXI,EGWG,SHXH,CAAA,EAAA,GGY/C,OHZ+C,CGYvC,QHZuC,GAAA,SAAA,CAAA,GGYf,QHZe,GAAA,SAAA;AAEnC,UGYA,wBAAA,CHZmB;EAC1B,IAAA,EAAA,MAAA;EACF,MAAA,EGYE,UHZF;EACI,UAAA,CAAA,EGYG,MHZH,CAAA,MAAA,EAAA,MAAA,CAAA;EAAS,YAAA,EGaL,eHbK;EAGT,IAAA,EGWJ,eHXgB;EAKpB,OAAA,EGOO,OHPP;;AAGA,cGOS,8BHPT,CAAA,WAAA,EAAA,wBGSsB,MHTtB,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SGUM,aHVN,CAAA,OAAA,EAAA,MAAA,CAAA,CAAA;EAJuB,CAAA,OAAA;EAQO,WAAA,CAAA,IAAA,EGUd,KHVc,EAAA,QAAA,EGUG,SHVH;EAAS,IAAA,IAAA,CAAA,CAAA,EGgB7B,KHhB6B;EAAO,IAAA,QAAA,CAAA,CAAA,EGoBhC,SHpBgC;;AAAe,cGyBpD,6BHzBoD,CAAA,wBAAA,SGyBS,oBHzBT,EAAA,CAAA,CAAA;EAAO,CAAA,OAAA;EAG5D,WAAA,CAAA,MAAA,EG0BU,SH1BO,EAAA,OAAG,EG0BQ,wBH1Be;EAE3C,IAAA,IAAA,CAAA,CAAA,EAAA,MAAA;EAAyC,IAAA,MAAA,CAAA,CAAA,EG0CrC,UH1CqC;EAAuB,IAAA,UAAA,CAAA,CAAA,EG8CxD,MH9CwD,CAAA,MAAA,EAAA,MAAA,CAAA;EAE3C,IAAA,WAAA,CAAA,CAAA,EGgDZ,eHhDY;EAG7B,IAAA,WAAA,CAAA,CAAA,EGiDiB,gBHjDjB,GAAA,SAAA;EAAc,IAAA,YAAA,CAAA,CAAA,EGqDI,gBHrDJ,GAAA,SAAA;EACR,cAAA,EAAA,CAAA,sBG0DgB,UH1DhB,EAAA,oBG2Dc,gBH3Dd,CG2D+B,SH3D/B,CAAA,EAAA,qBG4De,kBH5Df,CG4DkC,SH5DlC,EG4D2C,KH5D3C,EG4DkD,OH5DlD,CAAA,GG4D6D,kBH5D7D,CG6DJ,SH7DI,EG8DJ,KH9DI,EG+DJ,OH/DI,CAAA,CAAA,CAAA,MAAA,EGkEE,OHlEF,EAAA,IAAA,EGmEA,KHnEA,EAAA,OAAA,EAAA,CAAA,GAAA,IAAA,EGqEK,UHrEL,CGqEgB,MHrEhB,CAAA,SAAA,CAAA,CAAA,EAAA,GGsED,OHtEC,CGsEO,QHtEP,GAAA,SAAA,GAAA,IAAA,CAAA,GGsEsC,QHtEtC,GAAA,SAAA,GAAA,IAAA,EAAA,GGuEL,OHvEK,CGuEG,QHvEH,GAAA,SAAA,CAAA;;;;UIdO,kBAAA;EJjBL,UAAA,CAAA,EAAA,MAAA;AAEZ;AACU,UIkBO,wBAAA,CJlBP;EACF,UAAA,CAAA,EAAA,MAAA;EACI,OAAA,CAAA,EAAA,MAAA;;AAGZ,KIkBK,aAAA,GJlBmB;EAKpB,GAAA,EAAA,CAAA,GAAA,EIcS,OJdT,EAAA,GIcqB,OJdrB,CIc6B,QJd7B,CAAA;CAEA;KIeC,mBAAA,GJdD;EAJuB,MAAA,EAAA,CAAA,IAAA,EAAA;IAQO,OAAA,EIWN,OJXM;EAAS,CAAA,EAAA,GIWD,OJXC,CIWO,QJXP,CAAA;EAAO,MAAA,EAAA,CAAA,IAAA,EAAA;IAApC,OAAA,EIYc,OJZd;EAAmD,CAAA,EAAA,GIYvB,OJZuB,CIYf,QJZe,CAAA;CAAO;AAGxE,KIYK,kBAAA,GJZwB;EAEjB,GAAA,EAAA,CAAA,IAAA,EAAA;IAAyC,OAAA,EIW5B,OJX4B;EAAuB,CAAA,EAAA,GIWrC,OJXqC,CIW7B,QJX6B,CAAA;EAE3C,IAAA,EAAA,CAAA,IAAA,EAAA;IAG7B,OAAA,EIOsB,OJPtB;EAAc,CAAA,EAAA,GIOsB,OJPtB,CIO8B,QJP9B,CAAA;EACR,GAAA,EAAA,CAAA,IAAA,EAAA;IAAkC,OAAA,EIOnB,OJPmB;EAAtB,CAAA,EAAA,GIOiB,OJPjB,CIOyB,QJPzB,CAAA;EACf,MAAA,EAAA,CAAA,IAAA,EAAA;IAAgC,OAAA,EIOX,OJPW;EAAtB,CAAA,EAAA,GIOyB,OJPzB,CIOiC,QJPjC,CAAA;EAAqB,KAAA,EAAA,CAAA,IAAA,EAAA;IAkCtB,OAAA,EI1BW,OJ0BA;EACH,CAAA,EAAA,GI3BiB,OJ2BjB,CI3ByB,QJ2BzB,CAAA;EAEM,IAAA,EAAA,CAAA,IAAA,EAAA;IAK1B,OAAA,EIjCsB,OJiCtB;EACA,CAAA,EAAA,GIlCoC,OJkCpC,CIlC4C,QJkC5C,CAAA;EAEA,OAAA,EAAA,CAAA,IAAA,EAAA;IACA,OAAA,EIpCyB,OJoCzB;EACA,CAAA,EAAA,GIrCuC,OJqCvC,CIrC+C,QJqC/C,CAAA;CANM;KI5BL,gBAAA,GJoCgB;EAAS,GAAA,EAAA,CAAA,GAAA,EInCjB,OJmCiB,EAAA,GInCL,OJmCK,CInCG,QJmCH,CAAA;EAAkB,IAAA,EAAA,CAAA,GAAA,EIlClC,OJkCkC,EAAA,GIlCtB,OJkCsB,CIlCd,QJkCc,CAAA;EAAe,GAAA,EAAA,CAAA,GAAA,EIjClD,OJiCkD,EAAA,GIjCtC,OJiCsC,CIjC9B,QJiC8B,CAAA;EAAY,MAAA,EAAA,CAAA,GAAA,EIhC3D,OJgC2D,EAAA,GIhC/C,OJgC+C,CIhCvC,QJgCuC,CAAA;EAAxE,KAAA,EAAA,CAAA,GAAA,EI/BY,OJ+BZ,EAAA,GI/BwB,OJ+BxB,CI/BgC,QJ+BhC,CAAA;EAAiB,IAAA,EAAA,CAAA,GAAA,EI9BN,OJ8BM,EAAA,GI9BM,OJ8BN,CI9Bc,QJ8Bd,CAAA;EAGJ,OAAA,EAAA,CAAA,GAAA,EIhCC,OJgCU,EAAA,GIhCE,OJgCF,CIhCU,QJgCV,CAAA;CACH;KI9BnB,mBAAA,GJgCwB;EACC,KAAA,EIhCrB,aJgCqB;EAK1B,cAAA,EIpCc,mBJoCd;EACA,SAAA,EIpCS,gBJoCT;EACA,YAAA,EIpCY,gBJoCZ;EACA,aAAA,EIpCa,kBJoCb;CACA;AACA,cIlCS,8BJkCT,EAAA,+BAAA;KIhCC,mBAAA,GJ0BK,MI1BuB,mBJ0BvB;AAOW,UI/BJ,0BJ+BI,CAAA,kBAAA,SI9BM,oBJ8BN,EAAA,GAAA,EAAA,EAAA,QAAA,CAAA,CAAA,EAAA,kBI5BD,MJ4BC,CAAA,MAAA,EAAA,OAAA,CAAA,GI5ByB,MJ4BzB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,2BI3BQ,MJ2BR,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;EACA,CI1BlB,8BAAA,CJ0BkB,EAAA,OI1BsB,8BJ0BtB;EAAS,MAAA,EIxBpB,0BJwBoB,CIxBO,SJwBP,CAAA;EAAO,IAAA,EIvB7B,KJuB6B;EAAc,QAAA,EItBvC,SJsBuC;EAAe,iBAAA,CAAA,EIrB5C,kBJqB4C;EAAY,WAAA,EAAA,CAAA,UIpBpD,mBJoBoD,CAAA,CAAA,SAAA,EIpBpB,CJoBoB,EAAA,GIpBd,mBJoBc,CIpBM,CJoBN,CAAA;EAA3E,OAAA,EAAA,CAAA,GAAA,EInBc,OJmBd,EAAA,GInB0B,OJmB1B,CInBkC,QJmBlC,CAAA;EAAiB,UAAA,EAAA,MAAA;EAuBJ,cAAA,EAAY,CAAA,OAAA,EIvCf,wBJuCe,CIvCU,SJuCV,EIvCmB,KJuCnB,EIvC0B,SJuC1B,CAAA,EAAA,GItCrB,0BJsCqB,CItCM,SJsCN,EItCe,KJsCf,EItCsB,SJsCtB,EItCiC,kBJsCjC,CAAA;;AAMpB,UIzCS,0BJyCT,CAAA,kBAAA,SIxCmB,iBJwCnB,CIvCJ,UJuCI,EAAA,MAAA,EIrCJ,gBJqCI,GAAA,SAAA,EIpCJ,gBJoCI,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA;EACA,IAAA,EAAA,MAAA;EAJ6B,MAAA,EI3B3B,SJ2B2B;;AASY,KIjCrC,6BAAA,GAAgC,0BJiCK,CAAA,SIhCtC,oBJgCsC,EAAA,CAAA;AAAO,iBI7BxC,cJ6BwC,CAAA,aAAA,EAAA,WAAA,EAAA,wBI1B9B,MJ0B8B,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,iCAAA,SIzBZ,iBJyBY,EAAA,EAAA,iCIxBrB,MJwBqB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,uBIvB/B,kBJuB+B,CAAA,CAAA,eAAA,EAAA;EAApC,UAAA,EIpBJ,kBJoBI,CIpBe,OJoBf,EIpBwB,KJoBxB,EIpB+B,SJoB/B,EIpB0C,kBJoB1C,CAAA;EAAmD,gBAAA,EInBjD,QJmBiD;CACnD,EAAA,MAAA,EIlBV,OJkBU,EAAA,iBAAA,EIjBC,kBJiBD,EAAA,OAAA,EIhBT,QJgBS,CAAA,EIfjB,0BJeiB,CIdlB,qBJckB,CIdI,kBJcJ,CAAA,EIblB,KJakB,EIZlB,SJYkB,EIXlB,kBJWkB,CAAA;;;UK1IH,0DAGG,yDACS;;0BAGH,kBAAkB,uBAAuB;sBAC7C,kBAAkB,0BAA0B,UAAU;sBACtD;ALPtB;AAEiB,cKQJ,eLRuB,CAAA,aAAA,EAAA,cAAA,CAAA,CAAA,EAAA,wBKWV,MLXU,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,CAAA,CAAA,EAAA,iCKYD,MLZC,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;EAC1B,CAAA,OAAA;EACF,WAAA,CAAA,UAAA,EKckB,kBLdlB,CKcqC,OLdrC,EKc8C,KLd9C,EKcqD,SLdrD,EKcgE,kBLdhE,CAAA;EACI,IAAA,UAAA,CAAA,CAAA,EKiBI,kBLjBJ,CKiBI,OLjBJ,EKiBI,KLjBJ,EKiBI,SLjBJ,EKiBI,kBLjBJ,CAAA;EAAS,IAAA,gBAAA,CAAA,CAAA,EKqBK,kBLrBL;EAGT,gBAAY,CAAA,QAAA,CAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAAA;IAKpB,MAAA,EKmBqB,OLnBrB;IAEA,YAAA,EKiB4C,kBLjB5C;EACA,CAAA,GKgBmE,kBLhBnE,EAAA,GKiBK,QLjBL,CAAA,EKkBC,eLlBD,CKkBiB,OLlBjB,EKkB0B,QLlB1B,EAAA,CAAA,CAAA,EKkBwC,kBLlBxC,CAAA;EAJuB,YAAA,CAAA,qBKoCS,MLpCT,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAAA;IAQO,MAAA,EK+BlB,OL/BkB;IAAS,YAAA,EKgCrB,kBLhCqB;IAAO,IAAA,EKiCpC,KLjCoC;EAApC,CAAA,GKkCJ,kBLlCI,EAAA,GKmCL,YLnCK,CAAA,EKoCT,eLpCS,CKoCO,OLpCP,EKoCgB,KLpChB,EKoCuB,YLpCvB,EKoCqC,kBLpCrC,CAAA;;AAA0D,iBKoDxD,cLpDwD,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EKoDZ,eLpDY,CKoDI,OLpDJ,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
|
package/dist/mod.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as FragnoRouteConfig } from "./api-Dcr4_-3g.js";
|
|
2
|
-
import { B as AnyRouteOrFactory, G as defineRoutes, H as RouteFactory, U as RouteFactoryContext, V as FlattenRouteFactories, W as defineRoute, a as FragnoFragmentSharedConfig, c as FragnoPublicConfig, l as createFragment, n as FragmentDefinition, o as FragnoInstantiatedFragment, r as defineFragment, s as FragnoPublicClientConfig, t as FragmentBuilder } from "./fragment-builder-
|
|
2
|
+
import { B as AnyRouteOrFactory, G as defineRoutes, H as RouteFactory, U as RouteFactoryContext, V as FlattenRouteFactories, W as defineRoute, a as FragnoFragmentSharedConfig, c as FragnoPublicConfig, l as createFragment, n as FragmentDefinition, o as FragnoInstantiatedFragment, r as defineFragment, s as FragnoPublicClientConfig, t as FragmentBuilder } from "./fragment-builder-D6-oLYnH.js";
|
|
3
3
|
export { type AnyRouteOrFactory, type FlattenRouteFactories, FragmentBuilder, type FragmentDefinition, type FragnoFragmentSharedConfig, type FragnoInstantiatedFragment, type FragnoPublicClientConfig, type FragnoPublicConfig, type FragnoRouteConfig, type RouteFactory, type RouteFactoryContext, createFragment, defineFragment, defineRoute, defineRoutes };
|
package/package.json
CHANGED
package/src/client/client.ts
CHANGED
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
} from "./internal/ndjson-streaming";
|
|
26
26
|
import { addStore, getInitialData, SSR_ENABLED } from "../util/ssr";
|
|
27
27
|
import { unwrapObject } from "../util/nanostores";
|
|
28
|
-
import type {
|
|
28
|
+
import type { FragmentDefinition } from "../api/fragment-builder";
|
|
29
29
|
import {
|
|
30
30
|
type AnyRouteOrFactory,
|
|
31
31
|
type FlattenRouteFactories,
|
|
@@ -1001,15 +1001,18 @@ export function createClientBuilder<
|
|
|
1001
1001
|
TDeps,
|
|
1002
1002
|
TServices extends Record<string, unknown>,
|
|
1003
1003
|
const TRoutesOrFactories extends readonly AnyRouteOrFactory[],
|
|
1004
|
+
const TAdditionalContext extends Record<string, unknown>,
|
|
1004
1005
|
>(
|
|
1005
|
-
|
|
1006
|
+
fragmentBuilder: {
|
|
1007
|
+
definition: FragmentDefinition<TConfig, TDeps, TServices, TAdditionalContext>;
|
|
1008
|
+
},
|
|
1006
1009
|
publicConfig: FragnoPublicClientConfig,
|
|
1007
1010
|
routesOrFactories: TRoutesOrFactories,
|
|
1008
1011
|
): ClientBuilder<
|
|
1009
1012
|
FlattenRouteFactories<TRoutesOrFactories>,
|
|
1010
1013
|
FragnoFragmentSharedConfig<FlattenRouteFactories<TRoutesOrFactories>>
|
|
1011
1014
|
> {
|
|
1012
|
-
const definition =
|
|
1015
|
+
const definition = fragmentBuilder.definition;
|
|
1013
1016
|
|
|
1014
1017
|
// For client-side, we resolve route factories with dummy context
|
|
1015
1018
|
// This will be removed by the bundle plugin anyway
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-CZCasGGB.js","names":["names: string[]","builtSegments: string[]","#code","#status","parameters: Record<string, string>","firstItem: StandardSchemaV1.InferOutput<TOutputSchema> | null","items: StandardSchemaV1.InferOutput<TOutputSchema>[]","lines","#publicConfig","#fragmentConfig","#cache","#createFetcherStore","#createMutatorStore","#invalidateKeys","#createRouteQueryHook","#createRouteQueryMutator","response: Response","mutatorStore: FragnoClientMutatorData<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >[\"mutatorStore\"]","#invalidate","fragmentConfig: FragnoFragmentSharedConfig<FlattenRouteFactories<TRoutesOrFactories>>"],"sources":["../src/api/internal/path.ts","../src/client/client-error.ts","../src/util/content-type.ts","../src/client/internal/ndjson-streaming.ts","../src/util/nanostores.ts","../src/client/client.ts"],"sourcesContent":["// Helper type to split a string by '/'\ntype SplitPath<T extends string> = T extends `${infer First}/${infer Rest}`\n ? First extends \"\"\n ? SplitPath<Rest>\n : [First, ...SplitPath<Rest>]\n : T extends \"\"\n ? []\n : [T];\n\n// Helper type to extract parameter name from a single segment\ntype ExtractParam<T extends string> = T extends `:${infer Name}`\n ? Name\n : T extends `**:${infer Name}`\n ? Name\n : T extends \"**\"\n ? \"**\"\n : never;\n\n// Helper type to extract all parameter names from path segments\ntype ExtractParamsFromSegments<T extends readonly string[]> = T extends readonly [\n infer First,\n ...infer Rest,\n]\n ? First extends string\n ? Rest extends readonly string[]\n ? ExtractParam<First> | ExtractParamsFromSegments<Rest>\n : ExtractParam<First>\n : never\n : never;\n\n/**\n * Type helper to extract path parameters from a const string path\n *\n * Supports:\n * - Regular paths: \"/path\" -> never\n * - Named parameters: \"/path/:name\" -> \"name\"\n * - Wildcard paths: \"/path/foo/**\" -> \"**\"\n * - Named wildcard paths: \"/path/foo/**:name\" -> \"name\"\n * - String (narrows): string -> never\n */\nexport type ExtractPathParams<T extends string, ValueType = string> =\n ExtractParamsFromSegments<SplitPath<T>> extends never\n ? Record<string, never>\n : Record<ExtractParamsFromSegments<SplitPath<T>>, ValueType>;\n\n/**\n * Same as @see ExtractPathParams, but returns `Record<string, ValueType>` when a string is\n * passed in.\n */\nexport type ExtractPathParamsOrWiden<T extends string, ValueType = string> = string extends T\n ? Record<string, ValueType>\n : ExtractPathParams<T, ValueType>;\n\n// TODO: MaybeExtractPathParamsOrWiden<string> --> undefined, should that be Record<string, string>?\n/**\n * Same as @see ExtractPathParamsOrWiden, but returns `undefined` when no path parameters in the\n * const.\n */\nexport type MaybeExtractPathParamsOrWiden<T extends string, ValueType = string> =\n HasPathParams<T> extends true ? ExtractPathParamsOrWiden<T, ValueType> : undefined;\n\n// Alternative version that returns the parameter names as a union type\nexport type ExtractPathParamNames<T extends string> = ExtractParamsFromSegments<SplitPath<T>>;\n\n// Helper type to extract parameter names as an ordered tuple from path segments\ntype ExtractParamNamesAsTuple<T extends readonly string[]> = T extends readonly [\n infer First,\n ...infer Rest,\n]\n ? First extends string\n ? Rest extends readonly string[]\n ? ExtractParam<First> extends never\n ? ExtractParamNamesAsTuple<Rest>\n : [ExtractParam<First>, ...ExtractParamNamesAsTuple<Rest>]\n : ExtractParam<First> extends never\n ? []\n : [ExtractParam<First>]\n : []\n : [];\n\n// Type to convert ExtractPathParamNames result to a string tuple with the same number of elements\nexport type ExtractPathParamNamesAsTuple<T extends string> = ExtractParamNamesAsTuple<SplitPath<T>>;\n\n// Helper type to create labeled tuple from parameter names\ntype CreateLabeledTuple<T extends readonly string[], ElementType = string> = T extends readonly [\n infer First,\n ...infer Rest,\n]\n ? First extends string\n ? Rest extends readonly string[]\n ? [{ [K in First]: ElementType }[First], ...CreateLabeledTuple<Rest, ElementType>]\n : [{ [K in First]: ElementType }[First]]\n : []\n : [];\n\n// Type to convert path parameters to a labeled tuple\nexport type ExtractPathParamsAsLabeledTuple<\n T extends string,\n ElementType = string,\n> = CreateLabeledTuple<ExtractParamNamesAsTuple<SplitPath<T>>, ElementType>;\n\n// Type to check if a path has parameters\nexport type HasPathParams<T extends string> = ExtractPathParamNames<T> extends never ? false : true;\n\n/**\n * Creates a query parameters type where the specified keys are hints (optional)\n * and additional string keys are also allowed.\n *\n * This allows for flexible query parameter typing where:\n * - All hinted parameters are optional\n * - Additional parameters beyond the hints are allowed\n * - Values can be of any specified type (defaults to string)\n *\n * @example\n * ```ts\n * type MyQuery = QueryParamsHint<\"page\" | \"limit\", string>;\n * // Allows: { page?: string, limit?: string, [key: string]: string }\n *\n * const query1: MyQuery = {}; // Valid - no params required\n * const query2: MyQuery = { page: \"1\" }; // Valid - hinted param\n * const query3: MyQuery = { page: \"1\", sort: \"asc\" }; // Valid - additional param\n * ```\n */\nexport type QueryParamsHint<TQueryParameters extends string, ValueType = string> = Partial<\n Record<TQueryParameters, ValueType>\n> &\n Record<string, ValueType>;\n\n// Runtime utilities\n\n/**\n * Extract parameter names from a path pattern at runtime.\n * Examples:\n * - \"/users/:id\" => [\"id\"]\n * - \"/files/**\" => [\"**\"]\n * - \"/files/**:rest\" => [\"rest\"]\n */\nexport function extractPathParams<TPath extends string>(\n pathPattern: TPath,\n): ExtractPathParamNames<TPath>[] {\n const segments = pathPattern.split(\"/\").filter((s) => s.length > 0);\n const names: string[] = [];\n\n for (const segment of segments) {\n if (segment.startsWith(\":\")) {\n names.push(segment.slice(1));\n continue;\n }\n\n if (segment === \"**\") {\n names.push(\"**\");\n continue;\n }\n\n if (segment.startsWith(\"**:\")) {\n names.push(segment.slice(3));\n continue;\n }\n }\n\n return names as ExtractPathParamNames<TPath>[];\n}\n\n/**\n * Match an actual path against a path pattern and return extracted params.\n *\n * Notes and limitations:\n * - Named segment \":name\" captures a single path segment.\n * - Wildcard \"**\" or \"**:name\" greedily captures the remainder of the path and\n * should be placed at the end of the pattern.\n * - If the path does not match the pattern, an empty object is returned.\n */\nexport function matchPathParams<TPath extends string>(\n pathPattern: TPath,\n actualPath: string,\n): ExtractPathParams<TPath> {\n const patternSegments = pathPattern.split(\"/\").filter((s) => s.length > 0);\n const actualSegments = actualPath.split(\"/\").filter((s) => s.length > 0);\n\n const params: Record<string, string> = {};\n\n let i = 0;\n let j = 0;\n\n while (i < patternSegments.length && j < actualSegments.length) {\n const patternSegment = patternSegments[i];\n const actualSegment = actualSegments[j];\n\n if (patternSegment.startsWith(\":\")) {\n const name = patternSegment.slice(1);\n params[name] = decodeURIComponent(actualSegment);\n i += 1;\n j += 1;\n continue;\n }\n\n if (patternSegment === \"**\") {\n const remainder = actualSegments.slice(j).join(\"/\");\n params[\"**\"] = remainder ? decodeURIComponent(remainder) : \"\";\n // Wildcard consumes the rest; pattern should end here\n i = patternSegments.length;\n j = actualSegments.length;\n break;\n }\n\n if (patternSegment.startsWith(\"**:\")) {\n const name = patternSegment.slice(3);\n const remainder = actualSegments.slice(j).join(\"/\");\n params[name] = remainder ? decodeURIComponent(remainder) : \"\";\n // Wildcard consumes the rest; pattern should end here\n i = patternSegments.length;\n j = actualSegments.length;\n break;\n }\n\n // Literal segment must match exactly\n if (patternSegment === actualSegment) {\n i += 1;\n j += 1;\n continue;\n }\n\n // Mismatch\n return {} as ExtractPathParams<TPath>;\n }\n\n // If there are remaining pattern segments\n while (i < patternSegments.length) {\n const remaining = patternSegments[i];\n if (remaining === \"**\") {\n params[\"**\"] = \"\";\n i += 1;\n continue;\n }\n if (remaining.startsWith(\":\")) {\n const name = remaining.slice(1);\n params[name] = \"\";\n i += 1;\n continue;\n }\n if (remaining.startsWith(\"**:\")) {\n const name = remaining.slice(3);\n params[name] = \"\";\n i += 1;\n continue;\n }\n // Non-parameter remaining segment without corresponding actual segment → mismatch\n return {} as ExtractPathParams<TPath>;\n }\n\n // If there are remaining actual segments without pattern to match → mismatch\n if (j < actualSegments.length) {\n return {} as ExtractPathParams<TPath>;\n }\n\n return params as ExtractPathParams<TPath>;\n}\n\n/**\n * Build a concrete path by replacing placeholders in a path pattern with values.\n *\n * Supports the same placeholder syntax as the matcher:\n * - Named parameter \":name\" is URL-encoded as a single segment\n * - Anonymous wildcard \"**\" inserts the remainder as-is (slashes preserved)\n * - Named wildcard \"**:name\" inserts the remainder from the named key\n *\n * Examples:\n * - buildPath(\"/users/:id\", { id: \"123\" }) => \"/users/123\"\n * - buildPath(\"/files/**\", { \"**\": \"a/b\" }) => \"/files/a/b\"\n * - buildPath(\"/files/**:rest\", { rest: \"a/b\" }) => \"/files/a/b\"\n */\nexport function buildPath<TPath extends string>(\n pathPattern: TPath,\n params: ExtractPathParams<TPath>,\n): string {\n const patternSegments = pathPattern.split(\"/\");\n\n const builtSegments: string[] = [];\n\n for (const segment of patternSegments) {\n if (segment.length === 0) {\n // Preserve leading/trailing/duplicate slashes\n builtSegments.push(\"\");\n continue;\n }\n\n if (segment.startsWith(\":\")) {\n const name = segment.slice(1);\n const value = (params as Record<string, string | undefined>)[name];\n if (value === undefined) {\n throw new Error(`Missing value for path parameter :${name}`);\n }\n builtSegments.push(encodeURIComponent(value));\n continue;\n }\n\n if (segment === \"**\") {\n const value = (params as Record<string, string | undefined>)[\"**\"];\n if (value === undefined) {\n throw new Error(\"Missing value for path wildcard **\");\n }\n builtSegments.push(value);\n continue;\n }\n\n if (segment.startsWith(\"**:\")) {\n const name = segment.slice(3);\n const value = (params as Record<string, string | undefined>)[name];\n if (value === undefined) {\n throw new Error(`Missing value for path wildcard **:${name}`);\n }\n builtSegments.push(value);\n continue;\n }\n\n // Literal segment\n builtSegments.push(segment);\n }\n\n // Join with '/'. Empty segments preserve leading/trailing slashes\n return builtSegments.join(\"/\");\n}\n","import type { StatusCode } from \"../http/http-status\";\n\nexport type FragnoErrorOptions = {\n cause?: Error | unknown;\n};\n\n/**\n * Base error class for all Fragno client errors.\n */\nexport abstract class FragnoClientError<TCode extends string = string> extends Error {\n readonly #code: TCode;\n\n constructor(message: string, code: TCode, options: FragnoErrorOptions = {}) {\n super(message, { cause: options.cause });\n this.name = \"FragnoClientError\";\n this.#code = code;\n }\n\n get code(): TCode | (string & {}) {\n return this.#code;\n }\n}\n\nexport class FragnoClientFetchError extends FragnoClientError<\n \"NO_BODY\" | \"NETWORK_ERROR\" | \"ABORT_ERROR\"\n> {\n constructor(\n message: string,\n code: \"NO_BODY\" | \"NETWORK_ERROR\" | \"ABORT_ERROR\",\n options: FragnoErrorOptions = {},\n ) {\n super(message, code, options);\n this.name = \"FragnoClientFetchError\";\n }\n\n static fromUnknownFetchError(error: unknown): FragnoClientFetchError {\n if (!(error instanceof Error)) {\n return new FragnoClientFetchNetworkError(\"Network request failed\", { cause: error });\n }\n\n if (error.name === \"AbortError\") {\n return new FragnoClientFetchAbortError(\"Request was aborted\", { cause: error });\n }\n\n return new FragnoClientFetchNetworkError(\"Network request failed\", { cause: error });\n }\n}\n\n/**\n * Error thrown when a network request fails (e.g., no internet connection, DNS failure).\n */\nexport class FragnoClientFetchNetworkError extends FragnoClientFetchError {\n constructor(message: string = \"Network request failed\", options: FragnoErrorOptions = {}) {\n super(message, \"NETWORK_ERROR\", options);\n this.name = \"FragnoClientFetchNetworkError\";\n }\n}\n\n/**\n * Error thrown when a request is aborted (e.g., user cancels request, timeout).\n */\nexport class FragnoClientFetchAbortError extends FragnoClientFetchError {\n constructor(message: string = \"Request was aborted\", options: FragnoErrorOptions = {}) {\n super(message, \"ABORT_ERROR\", options);\n this.name = \"FragnoClientFetchAbortError\";\n }\n}\n\n/**\n * Error thrown when the API result is unexpected, e.g. no json is returned.\n */\nexport class FragnoClientUnknownApiError extends FragnoClientError<\"UNKNOWN_API_ERROR\"> {\n readonly #status: StatusCode;\n\n constructor(\n message: string = \"Unknown API error\",\n status: StatusCode,\n options: FragnoErrorOptions = {},\n ) {\n super(message, \"UNKNOWN_API_ERROR\", options);\n this.name = \"FragnoClientUnknownApiError\";\n this.#status = status;\n }\n\n get status(): StatusCode {\n return this.#status;\n }\n}\n\nexport class FragnoClientApiError<\n TErrorCode extends string = string,\n> extends FragnoClientError<TErrorCode> {\n readonly #status: StatusCode;\n\n constructor(\n { message, code }: { message: string; code: TErrorCode },\n status: StatusCode,\n options: FragnoErrorOptions = {},\n ) {\n super(message, code, options);\n this.name = \"FragnoClientApiError\";\n this.#status = status;\n }\n\n get status(): StatusCode {\n return this.#status;\n }\n\n /**\n * The error code returned by the API.\n *\n * The type is `TErrorCode` (the set of known error codes for this route), but may also be a string\n * for forward compatibility with future error codes.\n */\n get code(): TErrorCode | (string & {}) {\n return super.code as TErrorCode | (string & {});\n }\n\n static async fromResponse<TErrorCode extends string = string>(\n response: Response,\n ): Promise<FragnoClientApiError<TErrorCode> | FragnoClientUnknownApiError> {\n const unknown = await response.json();\n const status = response.status as StatusCode;\n\n if (!(\"message\" in unknown || \"code\" in unknown)) {\n return new FragnoClientUnknownApiError(\"Unknown API error\", status);\n }\n\n if (!(typeof unknown.message === \"string\" && typeof unknown.code === \"string\")) {\n return new FragnoClientUnknownApiError(\"Unknown API error\", status);\n }\n\n return new FragnoClientApiError(\n {\n message: unknown.message,\n code: unknown.code as TErrorCode,\n },\n status,\n );\n }\n}\n","/**\n * Represents a parsed content-type header\n */\nexport interface ParsedContentType {\n /** The main type (e.g., \"application\", \"text\", \"image\") */\n type: string;\n /** The subtype (e.g., \"json\", \"html\", \"png\") */\n subtype: string;\n /** The full media type (e.g., \"application/json\") */\n mediaType: string;\n /** Additional parameters like charset, boundary, etc. */\n parameters: Record<string, string>;\n}\n\n/**\n * Parses a content-type header string into its components\n *\n * @param contentType - The content-type header value to parse\n * @returns A ParsedContentType object or null if the input is invalid\n *\n * @example\n * ```ts\n * const { type, subtype, mediaType, parameters }\n * = parseContentType(\"application/json; charset=utf-8\");\n * console.assert(type === \"application\");\n * console.assert(subtype === \"json\");\n * console.assert(mediaType === \"application/json\");\n * console.assert(parameters[\"charset\"] === \"utf-8\");\n */\nexport function parseContentType(contentType: string | null | undefined): ParsedContentType | null {\n if (!contentType || typeof contentType !== \"string\") {\n return null;\n }\n\n const trimmed = contentType.trim();\n if (!trimmed) {\n return null;\n }\n\n const parts = trimmed.split(\";\").map((part) => part.trim());\n const mediaType = parts[0];\n\n if (!mediaType) {\n return null;\n }\n\n const typeParts = mediaType.split(\"/\");\n if (typeParts.length !== 2) {\n return null;\n }\n\n const [type, subtype] = typeParts.map((part) => part.trim().toLowerCase());\n\n if (!type || !subtype) {\n return null;\n }\n\n const parameters: Record<string, string> = {};\n\n for (let i = 1; i < parts.length; i++) {\n const param = parts[i];\n const equalIndex = param.indexOf(\"=\");\n\n if (equalIndex > 0) {\n const key = param.slice(0, equalIndex).trim().toLowerCase();\n let value = param.slice(equalIndex + 1).trim();\n\n if (value.startsWith('\"') && value.endsWith('\"')) {\n value = value.slice(1, -1);\n }\n\n if (key) {\n parameters[key] = value;\n }\n }\n }\n\n return {\n type,\n subtype,\n mediaType: `${type}/${subtype}`,\n parameters,\n };\n}\n","import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport {\n FragnoClientError,\n FragnoClientFetchError,\n FragnoClientFetchAbortError,\n FragnoClientUnknownApiError,\n} from \"../client-error\";\n\n/**\n * Creates a promise that rejects when the abort signal is triggered\n */\nfunction createAbortPromise(abortSignal: AbortSignal): Promise<never> {\n return new Promise<never>((_, reject) => {\n const abortHandler = () => {\n reject(new FragnoClientFetchAbortError(\"Operation was aborted\"));\n };\n\n if (abortSignal.aborted) {\n abortHandler();\n } else {\n abortSignal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n });\n}\n\n/**\n * Result of NDJSON streaming that includes the first item and a promise for the streaming continuation\n */\nexport interface NdjsonStreamingResult<T> {\n firstItem: T;\n streamingPromise: Promise<T[]>;\n}\n\nexport interface NdjsonStreamingStore<\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n> {\n setData(value: StandardSchemaV1.InferOutput<TOutputSchema>): void;\n setError(value: FragnoClientError<TErrorCode>): void;\n}\n\n/**\n * Handles NDJSON streaming responses by returning the first item from the fetcher\n * and then continuing to stream updates via the store's mutate method.\n *\n * This makes it so that we can wait until the first chunk before updating the store, if we did\n * not do this, `loading` would briefly be false before the first item would be populated in the\n * result.\n *\n * @param response - The fetch Response object containing the NDJSON stream\n * @param store - The fetcher store to update with streaming data\n * @param abortSignal - Optional AbortSignal to cancel the streaming operation\n * @returns A promise that resolves to an object containing the first item and a streaming promise\n */\nexport async function handleNdjsonStreamingFirstItem<\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n>(\n response: Response,\n store?: NdjsonStreamingStore<TOutputSchema, TErrorCode>,\n options: { abortSignal?: AbortSignal } = {},\n): Promise<NdjsonStreamingResult<StandardSchemaV1.InferOutput<TOutputSchema>>> {\n if (!response.body) {\n throw new FragnoClientFetchError(\"Streaming response has no body\", \"NO_BODY\");\n }\n\n const { abortSignal } = options;\n\n if (abortSignal?.aborted) {\n throw new FragnoClientFetchAbortError(\"Operation was aborted\");\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n let buffer = \"\";\n let firstItem: StandardSchemaV1.InferOutput<TOutputSchema> | null = null;\n const items: StandardSchemaV1.InferOutput<TOutputSchema>[] = [];\n\n try {\n // Read until we get the first item\n while (firstItem === null) {\n // Check for abort signal before each read\n if (abortSignal?.aborted) {\n reader.releaseLock();\n throw new FragnoClientFetchAbortError(\"Operation was aborted\");\n }\n\n const { done, value } = await (abortSignal\n ? Promise.race([reader.read(), createAbortPromise(abortSignal)])\n : reader.read());\n\n if (done) {\n break;\n }\n\n // Decode the chunk and add to buffer\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\"; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (!line.trim()) {\n continue;\n }\n\n try {\n const jsonObject = JSON.parse(line) as StandardSchemaV1.InferOutput<TOutputSchema>;\n items.push(jsonObject);\n\n if (firstItem === null) {\n firstItem = jsonObject;\n // We don't call store.setKey here for the first item\n // The caller will handle it via the return value\n\n // Start background streaming for remaining items and return the promise\n const streamingPromise = continueStreaming(\n reader,\n decoder,\n buffer,\n items,\n store,\n abortSignal,\n );\n return {\n firstItem,\n streamingPromise,\n };\n }\n } catch (parseError) {\n throw new FragnoClientUnknownApiError(\"Failed to parse NDJSON line\", 500, {\n cause: parseError,\n });\n }\n }\n }\n\n // If we get here and haven't returned a first item, the stream was empty\n if (firstItem === null) {\n reader.releaseLock();\n throw new FragnoClientUnknownApiError(\"NDJSON stream contained no valid items\", 500);\n }\n\n // This should never be reached, but TypeScript needs it\n reader.releaseLock();\n throw new FragnoClientFetchError(\"Unexpected end of stream processing\", \"NO_BODY\");\n } catch (error) {\n // Handle errors during streaming\n if (error instanceof FragnoClientError) {\n store?.setError(error);\n throw error;\n } else {\n // TODO: Not sure about the typing here\n const clientError = new FragnoClientUnknownApiError(\"Unknown streaming error\", 500, {\n cause: error,\n }) as unknown as FragnoClientError<TErrorCode>;\n store?.setError(clientError);\n throw clientError;\n }\n }\n}\n\n/**\n * Continues streaming the remaining items in the background\n */\n// FIXME: Shitty code\nasync function continueStreaming<TOutputSchema extends StandardSchemaV1, TErrorCode extends string>(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n initialBuffer: string,\n items: StandardSchemaV1.InferOutput<TOutputSchema>[],\n store?: NdjsonStreamingStore<TOutputSchema, TErrorCode>,\n abortSignal?: AbortSignal,\n): Promise<StandardSchemaV1.InferOutput<TOutputSchema>[]> {\n let buffer = initialBuffer;\n\n try {\n while (true) {\n // Check for abort signal before each read\n if (abortSignal?.aborted) {\n throw new FragnoClientFetchAbortError(\"Operation was aborted\");\n }\n\n const { done, value } = await (abortSignal\n ? Promise.race([reader.read(), createAbortPromise(abortSignal)])\n : reader.read());\n\n if (done) {\n // Process any remaining buffer content\n if (buffer.trim()) {\n const lines = buffer.split(\"\\n\");\n for (const line of lines) {\n if (!line.trim()) continue;\n\n try {\n const jsonObject = JSON.parse(line) as StandardSchemaV1.InferOutput<TOutputSchema>;\n items.push(jsonObject);\n store?.setData([...items]);\n } catch (parseError) {\n throw new FragnoClientUnknownApiError(\"Failed to parse NDJSON line\", 400, {\n cause: parseError,\n });\n }\n }\n }\n break;\n }\n\n // Decode the chunk and add to buffer\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\"; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (!line.trim()) continue;\n\n try {\n const jsonObject = JSON.parse(line) as StandardSchemaV1.InferOutput<TOutputSchema>;\n items.push(jsonObject);\n store?.setData([...items]);\n } catch (parseError) {\n throw new FragnoClientUnknownApiError(\"Failed to parse NDJSON line\", 400, {\n cause: parseError,\n });\n }\n }\n }\n } catch (error) {\n if (error instanceof FragnoClientError) {\n store?.setError(error);\n } else {\n const clientError = new FragnoClientUnknownApiError(\"Unknown streaming error\", 400, {\n cause: error,\n }) as unknown as FragnoClientError<TErrorCode>;\n store?.setError(clientError);\n throw clientError;\n }\n\n throw error;\n } finally {\n reader.releaseLock();\n }\n\n return items;\n}\n","import type { ReadableAtom } from \"nanostores\";\n\ntype MaybeAtom<T> = T | ReadableAtom<T>;\n\n/**\n * Normalizes a value that could be a plain value, an Atom, or a Vue Ref to a plain value.\n */\nexport function unwrapAtom<T>(value: MaybeAtom<T>): T {\n // Check if it's an Atom (has .get method)\n if (value && typeof value === \"object\" && \"get\" in value && typeof value.get === \"function\") {\n return value.get();\n }\n\n return value as T;\n}\n\n/**\n * Normalizes an object where values can be plain values, Atoms, or Vue Refs.\n * Returns a new object with all values normalized to plain values.\n */\nexport function unwrapObject<T>(\n params: Record<string, MaybeAtom<T>> | undefined,\n): Record<string, T> | undefined {\n if (!params) {\n return undefined;\n }\n\n return Object.fromEntries(Object.entries(params).map(([key, value]) => [key, unwrapAtom(value)]));\n}\n\nexport function isReadableAtom(value: unknown): value is ReadableAtom<unknown> {\n if (!value) {\n return false;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n if (!(\"get\" in value) || typeof value.get !== \"function\") {\n return false;\n }\n\n if (!(\"lc\" in value) || typeof value.lc !== \"number\") {\n return false;\n }\n\n if (!(\"notify\" in value) || typeof value.notify !== \"function\") {\n return false;\n }\n\n if (!(\"off\" in value) || typeof value.off !== \"function\") {\n return false;\n }\n\n if (!(\"subscribe\" in value) || typeof value.subscribe !== \"function\") {\n return false;\n }\n\n if (!(\"value\" in value)) {\n return false;\n }\n\n return true;\n}\n","import { nanoquery, type FetcherStore, type MutatorStore } from \"@nanostores/query\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { task, type ReadableAtom, type Store } from \"nanostores\";\nimport type { FragnoRouteConfig, HTTPMethod, NonGetHTTPMethod } from \"../api/api\";\nimport {\n buildPath,\n extractPathParams,\n type ExtractPathParams,\n type ExtractPathParamsOrWiden,\n type MaybeExtractPathParamsOrWiden,\n} from \"../api/internal/path\";\nimport { getMountRoute } from \"../api/internal/route\";\nimport { RequestInputContext } from \"../api/request-input-context\";\nimport { RequestOutputContext } from \"../api/request-output-context\";\nimport type {\n FragnoFragmentSharedConfig,\n FragnoPublicClientConfig,\n} from \"../api/fragment-instantiation\";\nimport { FragnoClientApiError, FragnoClientError, FragnoClientFetchError } from \"./client-error\";\nimport type { InferOr } from \"../util/types-util\";\nimport { parseContentType } from \"../util/content-type\";\nimport {\n handleNdjsonStreamingFirstItem,\n type NdjsonStreamingStore,\n} from \"./internal/ndjson-streaming\";\nimport { addStore, getInitialData, SSR_ENABLED } from \"../util/ssr\";\nimport { unwrapObject } from \"../util/nanostores\";\nimport type { FragmentBuilder } from \"../api/fragment-builder\";\nimport {\n type AnyRouteOrFactory,\n type FlattenRouteFactories,\n resolveRouteFactories,\n} from \"../api/route\";\n\n/**\n * Symbols used to identify hook types\n */\nconst GET_HOOK_SYMBOL = Symbol(\"fragno-get-hook\");\nconst MUTATOR_HOOK_SYMBOL = Symbol(\"fragno-mutator-hook\");\nconst STORE_SYMBOL = Symbol(\"fragno-store\");\n\n/**\n * Extract only GET routes from a library config's routes array\n */\nexport type ExtractGetRoutes<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n> = {\n [K in keyof T]: T[K] extends FragnoRouteConfig<\n infer Method,\n infer Path,\n infer Input,\n infer Output,\n infer ErrorCode,\n infer QueryParams\n >\n ? Method extends \"GET\"\n ? FragnoRouteConfig<Method, Path, Input, Output, ErrorCode, QueryParams>\n : never\n : never;\n}[number][];\n\n/**\n * Extract the path from a route configuration for a given method\n */\nexport type ExtractRoutePath<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TExpectedMethod extends HTTPMethod = HTTPMethod,\n> = {\n [K in keyof T]: T[K] extends FragnoRouteConfig<\n infer Method,\n infer Path,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >\n ? Method extends TExpectedMethod\n ? Path\n : never\n : never;\n}[number];\n\nexport type ExtractGetRoutePaths<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n> = ExtractRoutePath<T, \"GET\">;\n\nexport type ExtractNonGetRoutePaths<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n> = ExtractRoutePath<T, NonGetHTTPMethod>;\n\n/**\n * Extract the route configuration type(s) for a given path from a routes array.\n * Optionally narrow by HTTP method via the third type parameter.\n *\n * Defaults to extracting all methods for the matching path, producing a union\n * if multiple methods exist for the same path.\n */\nexport type ExtractRouteByPath<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TPath extends string,\n TMethod extends HTTPMethod = HTTPMethod,\n> = {\n [K in keyof TRoutes]: TRoutes[K] extends FragnoRouteConfig<\n infer M,\n TPath,\n infer Input,\n infer Output,\n infer ErrorCode,\n infer QueryParams\n >\n ? M extends TMethod\n ? FragnoRouteConfig<M, TPath, Input, Output, ErrorCode, QueryParams>\n : never\n : never;\n}[number];\n\n/**\n * Extract the output schema type for a specific route path from a routes array\n */\nexport type ExtractOutputSchemaForPath<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined\n >[],\n TPath extends string,\n> = {\n [K in keyof TRoutes]: TRoutes[K] extends FragnoRouteConfig<\n infer Method,\n TPath,\n StandardSchemaV1 | undefined,\n infer Output\n >\n ? Method extends \"GET\"\n ? Output\n : never\n : never;\n}[number];\n\n/**\n * Check if a path exists as a GET route in the routes array\n */\nexport type IsValidGetRoutePath<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TPath extends string,\n> = TPath extends ExtractGetRoutePaths<TRoutes> ? true : false;\n\n/**\n * Utility type to ensure only valid GET route paths can be used\n */\nexport type ValidateGetRoutePath<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TPath extends string,\n> =\n TPath extends ExtractGetRoutePaths<TRoutes>\n ? TPath\n : `Error: Path '${TPath}' is not a valid GET route. Available GET routes: ${ExtractGetRoutePaths<TRoutes>}`;\n\n/**\n * Helper type to check if a routes array has any GET routes\n */\nexport type HasGetRoutes<\n T extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n> = ExtractGetRoutePaths<T> extends never ? false : true;\n\nexport type ObjectContainingStoreField<T extends object> = T extends Store\n ? T\n : {\n [K in keyof T]: T[K] extends Store ? { [P in K]: T[P] } & Partial<Omit<T, K>> : never;\n }[keyof T] extends never\n ? never\n : T;\n\nexport type FragnoStoreData<T extends object> = {\n obj: T;\n [STORE_SYMBOL]: true;\n};\n\nexport type FragnoClientHookData<\n TMethod extends HTTPMethod,\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = {\n route: FragnoRouteConfig<\n TMethod,\n TPath,\n StandardSchemaV1 | undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >;\n query(args?: {\n path?: MaybeExtractPathParamsOrWiden<TPath, string>;\n query?: Record<TQueryParameters, string>;\n }): Promise<StandardSchemaV1.InferOutput<TOutputSchema>>;\n store(args?: {\n path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;\n query?: Record<TQueryParameters, string | ReadableAtom<string>>;\n }): FetcherStore<StandardSchemaV1.InferOutput<TOutputSchema>, FragnoClientError<TErrorCode>>;\n [GET_HOOK_SYMBOL]: true;\n} & {\n // Phantom field that preserves the specific TOutputSchema type parameter\n // in the structural type. This makes the type covariant, allowing more\n // specific schema types (like z.ZodString) to be assigned to variables\n // typed with more general schema types (like StandardSchemaV1<any, any>)\n readonly _outputSchema?: TOutputSchema;\n};\n\nexport type FragnoClientMutatorData<\n TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = {\n route: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >;\n\n mutateQuery(args?: {\n body?: InferOr<TInputSchema, undefined>;\n path?: MaybeExtractPathParamsOrWiden<TPath, string>;\n query?: Record<TQueryParameters, string>;\n }): Promise<InferOr<TOutputSchema, undefined>>;\n\n mutatorStore: MutatorStore<\n {\n body?: InferOr<TInputSchema, undefined>;\n path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;\n query?: Record<TQueryParameters, string | ReadableAtom<string>>;\n },\n InferOr<TOutputSchema, undefined>,\n FragnoClientError<TErrorCode>\n >;\n [MUTATOR_HOOK_SYMBOL]: true;\n} & {\n readonly _inputSchema?: TInputSchema;\n readonly _outputSchema?: TOutputSchema;\n};\n\nexport function buildUrl<TPath extends string>(\n config: {\n baseUrl?: string;\n mountRoute: string;\n path: TPath;\n },\n params: {\n pathParams?: Record<string, string | ReadableAtom<string>>;\n queryParams?: Record<string, string | ReadableAtom<string>>;\n },\n): string {\n const { baseUrl = \"\", mountRoute, path } = config;\n const { pathParams, queryParams } = params ?? {};\n\n const normalizedPathParams = unwrapObject(pathParams) as ExtractPathParams<TPath, string>;\n const normalizedQueryParams = unwrapObject(queryParams) ?? {};\n\n const searchParams = new URLSearchParams(normalizedQueryParams);\n const builtPath = buildPath(path, normalizedPathParams ?? {});\n const search = searchParams.toString() ? `?${searchParams.toString()}` : \"\";\n return `${baseUrl}${mountRoute}${builtPath}${search}`;\n}\n\n/**\n * This method returns an array, which can be passed directly to nanostores.\n *\n * The returned array is always: path, pathParams (In order they appear in the path), queryParams (In alphabetical order)\n * Missing pathParams are replaced with \"<missing>\".\n * @param path\n * @param params\n * @returns\n */\nexport function getCacheKey<TMethod extends HTTPMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n params?: {\n pathParams?: Record<string, string | ReadableAtom<string>>;\n queryParams?: Record<string, string | ReadableAtom<string>>;\n },\n): (string | ReadableAtom<string>)[] {\n if (!params) {\n return [method, path];\n }\n\n const { pathParams, queryParams } = params;\n\n const pathParamNames = extractPathParams(path);\n const pathParamValues = pathParamNames.map((name) => pathParams?.[name] ?? \"<missing>\");\n\n const queryParamValues = queryParams\n ? Object.keys(queryParams)\n .sort()\n .map((key) => queryParams[key])\n : [];\n\n return [method, path, ...pathParamValues, ...queryParamValues];\n}\n\nfunction isStreamingResponse(response: Response): false | \"ndjson\" | \"octet-stream\" {\n const contentType = parseContentType(response.headers.get(\"content-type\"));\n\n if (!contentType) {\n // Always assume 'normal' JSON by default.\n return false;\n }\n\n const isChunked = response.headers.get(\"transfer-encoding\") === \"chunked\";\n\n if (!isChunked) {\n return false;\n }\n\n if (contentType.subtype === \"octet-stream\") {\n // TODO(Wilco): This is not actually supported properly\n return \"octet-stream\";\n }\n\n if (contentType.subtype === \"x-ndjson\") {\n return \"ndjson\";\n }\n\n return false;\n}\n\n// Type guard to check if a hook is a GET hook\nexport function isGetHook<\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n>(\n hook: unknown,\n): hook is FragnoClientHookData<\"GET\", TPath, TOutputSchema, TErrorCode, TQueryParameters> {\n return (\n typeof hook === \"object\" &&\n hook !== null &&\n GET_HOOK_SYMBOL in hook &&\n hook[GET_HOOK_SYMBOL] === true\n );\n}\n\n// Type guard to check if a hook is a mutator\nexport function isMutatorHook<\n TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n>(\n hook: unknown,\n): hook is FragnoClientMutatorData<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n> {\n return (\n typeof hook === \"object\" &&\n hook !== null &&\n MUTATOR_HOOK_SYMBOL in hook &&\n hook[MUTATOR_HOOK_SYMBOL] === true\n );\n}\n\nexport function isStore<TStore extends Store>(obj: unknown): obj is FragnoStoreData<TStore> {\n return (\n typeof obj === \"object\" && obj !== null && STORE_SYMBOL in obj && obj[STORE_SYMBOL] === true\n );\n}\n\ntype OnErrorRetryFn = (opts: {\n error: unknown;\n key: string;\n retryCount: number;\n}) => number | undefined;\n\nexport type CreateHookOptions = {\n /**\n * A function that will be called when an error occurs. Implements an exponential backoff strategy\n * when left undefined. When null, retries will be disabled. The number returned (> 0) by the\n * callback will determine in how many ms to retry next.\n */\n onErrorRetry?: OnErrorRetryFn | null;\n};\n\ntype OnInvalidateFn<TPath extends string> = (\n invalidate: <TInnerPath extends string>(\n method: HTTPMethod,\n path: TInnerPath,\n params: {\n pathParams?: MaybeExtractPathParamsOrWiden<TInnerPath, string>;\n queryParams?: Record<string, string>;\n },\n ) => void,\n params: {\n pathParams: MaybeExtractPathParamsOrWiden<TPath, string>;\n queryParams?: Record<string, string>;\n },\n) => void;\n\nexport type CacheLine = {\n data: unknown;\n error: unknown;\n retryCount: number;\n created: number;\n expires: number;\n};\n\nexport class ClientBuilder<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n TFragmentConfig extends FragnoFragmentSharedConfig<TRoutes>,\n> {\n #publicConfig: FragnoPublicClientConfig;\n #fragmentConfig: TFragmentConfig;\n\n #cache = new Map<string, CacheLine>();\n\n #createFetcherStore;\n #createMutatorStore;\n #invalidateKeys;\n\n constructor(publicConfig: FragnoPublicClientConfig, fragmentConfig: TFragmentConfig) {\n this.#publicConfig = publicConfig;\n this.#fragmentConfig = fragmentConfig;\n\n const [createFetcherStore, createMutatorStore, { invalidateKeys }] = nanoquery({\n cache: this.#cache,\n });\n this.#createFetcherStore = createFetcherStore;\n this.#createMutatorStore = createMutatorStore;\n this.#invalidateKeys = invalidateKeys;\n }\n\n get cacheEntries(): Readonly<Record<string, CacheLine>> {\n return Object.fromEntries(this.#cache.entries());\n }\n\n createStore<const T extends object>(obj: T): FragnoStoreData<T> {\n return { obj: obj, [STORE_SYMBOL]: true };\n }\n\n createHook<TPath extends ExtractGetRoutePaths<TFragmentConfig[\"routes\"]>>(\n path: ValidateGetRoutePath<TFragmentConfig[\"routes\"], TPath>,\n options?: CreateHookOptions,\n ): FragnoClientHookData<\n \"GET\",\n TPath,\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"outputSchema\"]>,\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"errorCodes\"]>[number],\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"queryParameters\"]>[number]\n > {\n const route = this.#fragmentConfig.routes.find(\n (\n r,\n ): r is FragnoRouteConfig<\n \"GET\",\n TPath,\n StandardSchemaV1 | undefined,\n StandardSchemaV1,\n string,\n string\n > => r.path === path && r.method === \"GET\" && r.outputSchema !== undefined,\n );\n\n if (!route) {\n throw new Error(`Route '${path}' not found or is not a GET route with an output schema.`);\n }\n\n return this.#createRouteQueryHook(route, options);\n }\n\n createMutator<TPath extends ExtractNonGetRoutePaths<TFragmentConfig[\"routes\"]>>(\n method: NonGetHTTPMethod,\n path: TPath,\n onInvalidate?: OnInvalidateFn<TPath>,\n ): FragnoClientMutatorData<\n NonGetHTTPMethod, // TODO: This can be any Method, but should be related to TPath\n TPath,\n ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"inputSchema\"],\n ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"outputSchema\"],\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"errorCodes\"]>[number],\n NonNullable<ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>[\"queryParameters\"]>[number]\n > {\n type TRoute = ExtractRouteByPath<TFragmentConfig[\"routes\"], TPath>;\n\n const route = this.#fragmentConfig.routes.find(\n (\n r,\n ): r is FragnoRouteConfig<\n NonGetHTTPMethod,\n TPath,\n TRoute[\"inputSchema\"],\n TRoute[\"outputSchema\"],\n string,\n string\n > => r.method !== \"GET\" && r.path === path && r.method === method,\n );\n\n if (!route) {\n throw new Error(\n `Route '${path}' not found or is a GET route with an input and output schema.`,\n );\n }\n\n return this.#createRouteQueryMutator(route, onInvalidate);\n }\n\n #createRouteQueryHook<\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n >(\n route: FragnoRouteConfig<\n \"GET\",\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >,\n options: CreateHookOptions = {},\n ): FragnoClientHookData<\"GET\", TPath, TOutputSchema, TErrorCode, TQueryParameters> {\n if (route.method !== \"GET\") {\n throw new Error(\n `Only GET routes are supported for hooks. Route '${route.path}' is a ${route.method} route.`,\n );\n }\n\n if (!route.outputSchema) {\n throw new Error(\n `Output schema is required for GET routes. Route '${route.path}' has no output schema.`,\n );\n }\n\n const baseUrl = this.#publicConfig.baseUrl ?? \"\";\n const mountRoute = getMountRoute(this.#fragmentConfig);\n\n async function callServerSideHandler(params: {\n pathParams?: Record<string, string | ReadableAtom<string>>;\n queryParams?: Record<string, string | ReadableAtom<string>>;\n }): Promise<Response> {\n const { pathParams, queryParams } = params ?? {};\n\n const normalizedPathParams = unwrapObject(pathParams) as ExtractPathParams<TPath, string>;\n const normalizedQueryParams = unwrapObject(queryParams) ?? {};\n\n const searchParams = new URLSearchParams(normalizedQueryParams);\n\n const result = await route.handler(\n RequestInputContext.fromSSRContext({\n method: route.method,\n path: route.path,\n pathParams: normalizedPathParams,\n searchParams,\n }),\n new RequestOutputContext(route.outputSchema),\n );\n\n return result;\n }\n\n async function executeQuery(params?: {\n pathParams?: Record<string, string | ReadableAtom<string>>;\n queryParams?: Record<string, string | ReadableAtom<string>>;\n }): Promise<Response> {\n const { pathParams, queryParams } = params ?? {};\n\n if (typeof window === \"undefined\") {\n return task(async () => callServerSideHandler({ pathParams, queryParams }));\n }\n\n const url = buildUrl({ baseUrl, mountRoute, path: route.path }, { pathParams, queryParams });\n\n let response: Response;\n try {\n response = await fetch(url);\n } catch (error) {\n throw FragnoClientFetchError.fromUnknownFetchError(error);\n }\n\n if (!response.ok) {\n throw await FragnoClientApiError.fromResponse<TErrorCode>(response);\n }\n\n return response;\n }\n\n return {\n route,\n store: (args) => {\n const { path, query } = args ?? {};\n\n const key = getCacheKey(route.method, route.path, {\n pathParams: path,\n queryParams: query,\n });\n\n const store = this.#createFetcherStore<\n StandardSchemaV1.InferOutput<TOutputSchema>,\n FragnoClientError<TErrorCode>\n >(key, {\n fetcher: async (): Promise<StandardSchemaV1.InferOutput<TOutputSchema>> => {\n if (SSR_ENABLED) {\n const initialData = getInitialData(\n key.map((d) => (typeof d === \"string\" ? d : d.get())).join(\"\"),\n );\n\n if (initialData) {\n return initialData;\n }\n }\n\n const response = await executeQuery({ pathParams: path, queryParams: query });\n const isStreaming = isStreamingResponse(response);\n\n if (!isStreaming) {\n return response.json() as Promise<StandardSchemaV1.InferOutput<TOutputSchema>>;\n }\n\n if (typeof window === \"undefined\") {\n return [];\n }\n\n if (isStreaming === \"ndjson\") {\n const storeAdapter: NdjsonStreamingStore<TOutputSchema, TErrorCode> = {\n setData: (value) => {\n store.set({\n ...store.get(),\n loading: !(Array.isArray(value) && value.length > 0),\n data: value as InferOr<TOutputSchema, undefined>,\n });\n },\n setError: (value) => {\n store.set({\n ...store.get(),\n error: value,\n });\n },\n };\n\n // Start streaming in background and return first item\n const { firstItem } = await handleNdjsonStreamingFirstItem(response, storeAdapter);\n return [firstItem];\n }\n\n if (isStreaming === \"octet-stream\") {\n // TODO(Wilco): Implement this\n throw new Error(\"Octet-stream streaming is not supported.\");\n }\n\n throw new Error(\"Unreachable\");\n },\n\n onErrorRetry: options?.onErrorRetry,\n dedupeTime: Infinity,\n });\n\n if (typeof window === \"undefined\") {\n addStore(store);\n }\n\n return store;\n },\n query: async (args) => {\n const { path, query } = args ?? {};\n\n const response = await executeQuery({ pathParams: path, queryParams: query });\n\n const isStreaming = isStreamingResponse(response);\n\n if (!isStreaming) {\n return (await response.json()) as StandardSchemaV1.InferOutput<TOutputSchema>;\n }\n\n if (isStreaming === \"ndjson\") {\n const { streamingPromise } = await handleNdjsonStreamingFirstItem(response);\n // Resolves once the stream is done\n return await streamingPromise;\n }\n\n if (isStreaming === \"octet-stream\") {\n // TODO(Wilco): Implement this\n throw new Error(\"Octet-stream streaming is not supported.\");\n }\n\n throw new Error(\"Unreachable\");\n },\n [GET_HOOK_SYMBOL]: true,\n };\n }\n\n #createRouteQueryMutator<\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n >(\n route: FragnoRouteConfig<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >,\n onInvalidate: OnInvalidateFn<TPath> = (invalidate, params) =>\n invalidate(\"GET\", route.path, params),\n ): FragnoClientMutatorData<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n > {\n const method = route.method;\n\n const baseUrl = this.#publicConfig.baseUrl ?? \"\";\n const mountRoute = getMountRoute(this.#fragmentConfig);\n\n async function executeMutateQuery({\n body,\n path,\n query,\n }: {\n body?: InferOr<TInputSchema, undefined>;\n path?: ExtractPathParamsOrWiden<TPath, string>;\n query?: Record<string, string>;\n }): Promise<Response> {\n if (typeof window === \"undefined\") {\n return task(async () =>\n route.handler(\n RequestInputContext.fromSSRContext({\n inputSchema: route.inputSchema,\n method,\n path: route.path,\n pathParams: (path ?? {}) as ExtractPathParams<TPath, string>,\n searchParams: new URLSearchParams(query),\n body,\n }),\n new RequestOutputContext(route.outputSchema),\n ),\n );\n }\n\n const url = buildUrl(\n { baseUrl, mountRoute, path: route.path },\n { pathParams: path, queryParams: query },\n );\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n } catch (error) {\n throw FragnoClientFetchError.fromUnknownFetchError(error);\n }\n\n if (!response.ok) {\n throw await FragnoClientApiError.fromResponse<TErrorCode>(response);\n }\n\n return response;\n }\n\n const mutatorStore: FragnoClientMutatorData<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >[\"mutatorStore\"] = this.#createMutatorStore(\n async ({ data }) => {\n if (typeof window === \"undefined\") {\n // TODO(Wilco): Handle server-side rendering.\n }\n\n const { body, path, query } = data as {\n body?: InferOr<TInputSchema, undefined>;\n path?: ExtractPathParamsOrWiden<TPath, string>;\n query?: Record<string, string>;\n };\n\n if (typeof body === \"undefined\" && route.inputSchema !== undefined) {\n throw new Error(\"Body is required.\");\n }\n\n const response = await executeMutateQuery({ body, path, query });\n\n onInvalidate(this.#invalidate.bind(this), {\n pathParams: (path ?? {}) as MaybeExtractPathParamsOrWiden<TPath, string>,\n queryParams: query,\n });\n\n if (response.status === 201 || response.status === 204) {\n return undefined;\n }\n\n const isStreaming = isStreamingResponse(response);\n\n if (!isStreaming) {\n return response.json();\n }\n\n if (typeof window === \"undefined\") {\n return [];\n }\n\n if (isStreaming === \"ndjson\") {\n const storeAdapter: NdjsonStreamingStore<NonNullable<TOutputSchema>, TErrorCode> = {\n setData: (value) => {\n mutatorStore.set({\n ...mutatorStore.get(),\n loading: !(Array.isArray(value) && value.length > 0),\n data: value as InferOr<TOutputSchema, undefined>,\n });\n },\n setError: (value) => {\n mutatorStore.set({\n ...mutatorStore.get(),\n error: value,\n });\n },\n };\n\n // Start streaming in background and return first item\n const { firstItem } = await handleNdjsonStreamingFirstItem(response, storeAdapter);\n\n // Return the first item immediately. The streaming will continue in the background\n return [firstItem];\n }\n\n if (isStreaming === \"octet-stream\") {\n // TODO(Wilco): Implement this\n throw new Error(\"Octet-stream streaming is not supported.\");\n }\n\n throw new Error(\"Unreachable\");\n },\n {\n onError: (error) => {\n console.error(\"Error in mutatorStore\", error);\n },\n },\n );\n\n const mutateQuery = (async (data) => {\n // TypeScript infers the fields to not exist, even though they might\n const { body, path, query } = data as {\n body?: InferOr<TInputSchema, undefined>;\n path?: ExtractPathParamsOrWiden<TPath, string>;\n query?: Record<string, string>;\n };\n\n if (typeof body === \"undefined\" && route.inputSchema !== undefined) {\n throw new Error(\"Body is required for mutateQuery\");\n }\n\n const response = await executeMutateQuery({ body, path, query });\n\n if (response.status === 201 || response.status === 204) {\n return undefined;\n }\n\n const isStreaming = isStreamingResponse(response);\n\n if (!isStreaming) {\n return response.json();\n }\n\n if (isStreaming === \"ndjson\") {\n const { streamingPromise } = await handleNdjsonStreamingFirstItem(response);\n // Resolves once the stream is done, i.e. we block until done\n return await streamingPromise;\n }\n\n if (isStreaming === \"octet-stream\") {\n throw new Error(\"Octet-stream streaming is not supported for mutations\");\n }\n\n throw new Error(\"Unreachable\");\n }) satisfies FragnoClientMutatorData<\n NonGetHTTPMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >[\"mutateQuery\"];\n\n return {\n route,\n mutateQuery,\n mutatorStore,\n [MUTATOR_HOOK_SYMBOL]: true,\n };\n }\n\n #invalidate<TPath extends string>(\n method: HTTPMethod,\n path: TPath,\n params: {\n pathParams?: MaybeExtractPathParamsOrWiden<TPath, string>;\n queryParams?: Record<string, string>;\n },\n ) {\n const prefixArray = getCacheKey(method, path, {\n pathParams: params?.pathParams,\n queryParams: params?.queryParams,\n });\n\n const prefix = prefixArray.map((k) => (typeof k === \"string\" ? k : k.get())).join(\"\");\n\n this.#invalidateKeys((key) => key.startsWith(prefix));\n }\n}\n\nexport function createClientBuilder<\n TConfig,\n TDeps,\n TServices extends Record<string, unknown>,\n const TRoutesOrFactories extends readonly AnyRouteOrFactory[],\n>(\n fragmentDefinition: FragmentBuilder<TConfig, TDeps, TServices>,\n publicConfig: FragnoPublicClientConfig,\n routesOrFactories: TRoutesOrFactories,\n): ClientBuilder<\n FlattenRouteFactories<TRoutesOrFactories>,\n FragnoFragmentSharedConfig<FlattenRouteFactories<TRoutesOrFactories>>\n> {\n const definition = fragmentDefinition.definition;\n\n // For client-side, we resolve route factories with dummy context\n // This will be removed by the bundle plugin anyway\n const dummyContext = {\n config: {} as TConfig,\n deps: {} as TDeps,\n services: {} as TServices,\n };\n\n const routes = resolveRouteFactories(dummyContext, routesOrFactories);\n\n const fragmentConfig: FragnoFragmentSharedConfig<FlattenRouteFactories<TRoutesOrFactories>> = {\n name: definition.name,\n routes,\n };\n\n const mountRoute = publicConfig.mountRoute ?? `/${definition.name}`;\n const fullPublicConfig = {\n ...publicConfig,\n mountRoute,\n };\n\n return new ClientBuilder(fullPublicConfig, fragmentConfig);\n}\n\nexport * from \"./client-error\";\n"],"mappings":"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"}
|