@fragno-dev/core 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/.turbo/turbo-build.log +41 -32
  2. package/CHANGELOG.md +15 -0
  3. package/LICENSE.md +16 -0
  4. package/dist/api/api.d.ts +1 -1
  5. package/dist/api/fragment-builder.d.ts +2 -2
  6. package/dist/api/fragment-instantiation.d.ts +2 -2
  7. package/dist/api/fragment-instantiation.js +3 -2
  8. package/dist/{api-Dcr4_-3g.d.ts → api-BX90b4-D.d.ts} +92 -6
  9. package/dist/api-BX90b4-D.d.ts.map +1 -0
  10. package/dist/client/client.d.ts +2 -2
  11. package/dist/client/client.js +4 -3
  12. package/dist/client/client.svelte.d.ts +2 -2
  13. package/dist/client/client.svelte.js +4 -3
  14. package/dist/client/client.svelte.js.map +1 -1
  15. package/dist/client/react.d.ts +2 -2
  16. package/dist/client/react.d.ts.map +1 -1
  17. package/dist/client/react.js +4 -3
  18. package/dist/client/react.js.map +1 -1
  19. package/dist/client/solid.d.ts +2 -2
  20. package/dist/client/solid.js +4 -3
  21. package/dist/client/solid.js.map +1 -1
  22. package/dist/client/vanilla.d.ts +2 -2
  23. package/dist/client/vanilla.js +4 -3
  24. package/dist/client/vanilla.js.map +1 -1
  25. package/dist/client/vue.d.ts +2 -2
  26. package/dist/client/vue.js +4 -3
  27. package/dist/client/vue.js.map +1 -1
  28. package/dist/{client-D5ORmjBP.js → client-C6LChM0Y.js} +4 -3
  29. package/dist/client-C6LChM0Y.js.map +1 -0
  30. package/dist/{fragment-builder-D6-oLYnH.d.ts → fragment-builder-BZr2JkuW.d.ts} +51 -38
  31. package/dist/fragment-builder-BZr2JkuW.d.ts.map +1 -0
  32. package/dist/fragment-builder-DOnCVBqc.js.map +1 -1
  33. package/dist/{fragment-instantiation-f4AhwQss.js → fragment-instantiation-DMw8OKMC.js} +137 -11
  34. package/dist/fragment-instantiation-DMw8OKMC.js.map +1 -0
  35. package/dist/integrations/react-ssr.js +1 -1
  36. package/dist/mod.d.ts +2 -2
  37. package/dist/mod.js +3 -2
  38. package/dist/route-CTxjMtGZ.js +10 -0
  39. package/dist/route-CTxjMtGZ.js.map +1 -0
  40. package/dist/{route-B4RbOWjd.js → route-D1MZR6JL.js} +22 -22
  41. package/dist/route-D1MZR6JL.js.map +1 -0
  42. package/dist/{ssr-CamRrMc0.js → ssr-BByDVfFD.js} +1 -1
  43. package/dist/{ssr-CamRrMc0.js.map → ssr-BByDVfFD.js.map} +1 -1
  44. package/dist/test/test.d.ts +112 -0
  45. package/dist/test/test.d.ts.map +1 -0
  46. package/dist/test/test.js +155 -0
  47. package/dist/test/test.js.map +1 -0
  48. package/package.json +18 -24
  49. package/src/api/fragment-builder.ts +0 -1
  50. package/src/api/fragment-instantiation.ts +16 -3
  51. package/src/api/mutable-request-state.ts +107 -0
  52. package/src/api/request-input-context.test.ts +51 -0
  53. package/src/api/request-input-context.ts +20 -13
  54. package/src/api/request-middleware.test.ts +88 -2
  55. package/src/api/request-middleware.ts +28 -6
  56. package/src/api/request-output-context.test.ts +6 -2
  57. package/src/api/request-output-context.ts +15 -9
  58. package/src/client/component.test.svelte +2 -0
  59. package/src/client/internal/ndjson-streaming.ts +6 -2
  60. package/src/client/react.ts +3 -1
  61. package/src/test/test.test.ts +449 -0
  62. package/src/test/test.ts +379 -0
  63. package/src/util/async.test.ts +6 -2
  64. package/tsdown.config.ts +1 -0
  65. package/.turbo/turbo-test.log +0 -297
  66. package/.turbo/turbo-types$colon$check.log +0 -1
  67. package/dist/api-Dcr4_-3g.d.ts.map +0 -1
  68. package/dist/client-D5ORmjBP.js.map +0 -1
  69. package/dist/fragment-builder-D6-oLYnH.d.ts.map +0 -1
  70. package/dist/fragment-instantiation-f4AhwQss.js.map +0 -1
  71. package/dist/route-B4RbOWjd.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { c as OutputContext, d as RequestBodyType, l as InferOr, m as MaybeExtractPathParamsOrWiden, n as HTTPMethod, r as NonGetHTTPMethod, t as FragnoRouteConfig, u as StatusCode } from "./api-Dcr4_-3g.js";
1
+ import { c as OutputContext, d as MutableRequestState, h as MaybeExtractPathParamsOrWiden, l as InferOr, n as HTTPMethod, r as NonGetHTTPMethod, t as FragnoRouteConfig, u as StatusCode } from "./api-BX90b4-D.js";
2
2
  import { ReadableAtom, Store } from "nanostores";
3
3
  import { FetcherStore, MutatorStore } from "@nanostores/query";
4
4
  import { StandardSchemaV1 } from "@standard-schema/spec";
@@ -12,15 +12,15 @@ interface RouteFactoryContext<TConfig, TDeps, TServices> {
12
12
  }
13
13
  type RouteFactory<TConfig, TDeps, TServices, TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]> = (context: RouteFactoryContext<TConfig, TDeps, TServices>) => TRoutes$1;
14
14
  type AnyRouteOrFactory = AnyFragnoRouteConfig | RouteFactory<any, any, any, any>;
15
- type FlattenRouteFactories<T$1 extends readonly AnyRouteOrFactory[]> = T$1 extends readonly [infer First, ...infer Rest extends readonly AnyRouteOrFactory[]] ? First extends RouteFactory<any, any, any, infer TRoutes> ? [...TRoutes, ...FlattenRouteFactories<Rest>] : [First, ...FlattenRouteFactories<Rest>] : [];
16
- declare function defineRoute<const TMethod$1 extends HTTPMethod, const TPath$1 extends string, const TOutputSchema extends StandardSchemaV1 | undefined, const TErrorCode extends string = string, const TQueryParameters extends string = string>(config: FragnoRouteConfig<TMethod$1, TPath$1, undefined, TOutputSchema, TErrorCode, TQueryParameters> & {
15
+ type FlattenRouteFactories<T extends readonly AnyRouteOrFactory[]> = T extends readonly [infer First, ...infer Rest extends readonly AnyRouteOrFactory[]] ? First extends RouteFactory<any, any, any, infer TRoutes> ? [...TRoutes, ...FlattenRouteFactories<Rest>] : [First, ...FlattenRouteFactories<Rest>] : [];
16
+ declare function defineRoute<const TMethod extends HTTPMethod, const TPath extends string, const TOutputSchema extends StandardSchemaV1 | undefined, const TErrorCode extends string = string, const TQueryParameters extends string = string>(config: FragnoRouteConfig<TMethod, TPath, undefined, TOutputSchema, TErrorCode, TQueryParameters> & {
17
17
  inputSchema?: undefined;
18
- }): FragnoRouteConfig<TMethod$1, TPath$1, undefined, TOutputSchema, TErrorCode, TQueryParameters>;
19
- declare function defineRoute<const TMethod$1 extends HTTPMethod, const TPath$1 extends string, const TInputSchema extends StandardSchemaV1, const TOutputSchema extends StandardSchemaV1 | undefined, const TErrorCode extends string = string, const TQueryParameters extends string = string>(config: FragnoRouteConfig<TMethod$1, TPath$1, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters> & {
18
+ }): FragnoRouteConfig<TMethod, TPath, undefined, TOutputSchema, TErrorCode, TQueryParameters>;
19
+ declare function defineRoute<const TMethod extends HTTPMethod, const TPath extends string, const TInputSchema extends StandardSchemaV1, const TOutputSchema extends StandardSchemaV1 | undefined, const TErrorCode extends string = string, const TQueryParameters extends string = string>(config: FragnoRouteConfig<TMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters> & {
20
20
  inputSchema: TInputSchema;
21
- }): FragnoRouteConfig<TMethod$1, TPath$1, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters>;
21
+ }): FragnoRouteConfig<TMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters>;
22
22
  declare function defineRoutes<TConfig = {}, TDeps = {}, TServices = {}>(): {
23
- create: <const TRoutes extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]>(fn: (context: RouteFactoryContext<TConfig, TDeps, TServices>) => TRoutes) => RouteFactory<TConfig, TDeps, TServices, TRoutes>;
23
+ create: <const TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]>(fn: (context: RouteFactoryContext<TConfig, TDeps, TServices>) => TRoutes$1) => RouteFactory<TConfig, TDeps, TServices, TRoutes$1>;
24
24
  };
25
25
  //#endregion
26
26
  //#region src/client/client-error.d.ts
@@ -89,13 +89,13 @@ declare const STORE_SYMBOL: unique symbol;
89
89
  /**
90
90
  * Extract only GET routes from a library config's routes array
91
91
  */
92
- type ExtractGetRoutes<T$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]> = { [K in keyof T$1]: T$1[K] extends FragnoRouteConfig<infer Method, infer Path, infer Input, infer Output, infer ErrorCode, infer QueryParams> ? Method extends "GET" ? FragnoRouteConfig<Method, Path, Input, Output, ErrorCode, QueryParams> : never : never }[number][];
92
+ type ExtractGetRoutes<T extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]> = { [K in keyof T]: T[K] extends FragnoRouteConfig<infer Method, infer Path, infer Input, infer Output, infer ErrorCode, infer QueryParams> ? Method extends "GET" ? FragnoRouteConfig<Method, Path, Input, Output, ErrorCode, QueryParams> : never : never }[number][];
93
93
  /**
94
94
  * Extract the path from a route configuration for a given method
95
95
  */
96
- type ExtractRoutePath<T$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[], TExpectedMethod extends HTTPMethod = HTTPMethod> = { [K in keyof T$1]: T$1[K] extends FragnoRouteConfig<infer Method, infer Path, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string> ? Method extends TExpectedMethod ? Path : never : never }[number];
97
- type ExtractGetRoutePaths<T$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]> = ExtractRoutePath<T$1, "GET">;
98
- type ExtractNonGetRoutePaths<T$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]> = ExtractRoutePath<T$1, NonGetHTTPMethod>;
96
+ type ExtractRoutePath<T extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[], TExpectedMethod extends HTTPMethod = HTTPMethod> = { [K in keyof T]: T[K] extends FragnoRouteConfig<infer Method, infer Path, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string> ? Method extends TExpectedMethod ? Path : never : never }[number];
97
+ type ExtractGetRoutePaths<T extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]> = ExtractRoutePath<T, "GET">;
98
+ type ExtractNonGetRoutePaths<T extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]> = ExtractRoutePath<T, NonGetHTTPMethod>;
99
99
  /**
100
100
  * Extract the route configuration type(s) for a given path from a routes array.
101
101
  * Optionally narrow by HTTP method via the third type parameter.
@@ -103,52 +103,52 @@ type ExtractNonGetRoutePaths<T$1 extends readonly FragnoRouteConfig<HTTPMethod,
103
103
  * Defaults to extracting all methods for the matching path, producing a union
104
104
  * if multiple methods exist for the same path.
105
105
  */
106
- type ExtractRouteByPath<TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[], TPath$1 extends string, TMethod$1 extends HTTPMethod = HTTPMethod> = { [K in keyof TRoutes$1]: TRoutes$1[K] extends FragnoRouteConfig<infer M, TPath$1, infer Input, infer Output, infer ErrorCode, infer QueryParams> ? M extends TMethod$1 ? FragnoRouteConfig<M, TPath$1, Input, Output, ErrorCode, QueryParams> : never : never }[number];
106
+ type ExtractRouteByPath<TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[], TPath extends string, TMethod extends HTTPMethod = HTTPMethod> = { [K in keyof TRoutes$1]: TRoutes$1[K] extends FragnoRouteConfig<infer M, TPath, infer Input, infer Output, infer ErrorCode, infer QueryParams> ? M extends TMethod ? FragnoRouteConfig<M, TPath, Input, Output, ErrorCode, QueryParams> : never : never }[number];
107
107
  /**
108
108
  * Extract the output schema type for a specific route path from a routes array
109
109
  */
110
- type ExtractOutputSchemaForPath<TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined>[], TPath$1 extends string> = { [K in keyof TRoutes$1]: TRoutes$1[K] extends FragnoRouteConfig<infer Method, TPath$1, StandardSchemaV1 | undefined, infer Output> ? Method extends "GET" ? Output : never : never }[number];
110
+ type ExtractOutputSchemaForPath<TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined>[], TPath extends string> = { [K in keyof TRoutes$1]: TRoutes$1[K] extends FragnoRouteConfig<infer Method, TPath, StandardSchemaV1 | undefined, infer Output> ? Method extends "GET" ? Output : never : never }[number];
111
111
  /**
112
112
  * Check if a path exists as a GET route in the routes array
113
113
  */
114
- type IsValidGetRoutePath<TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[], TPath$1 extends string> = TPath$1 extends ExtractGetRoutePaths<TRoutes$1> ? true : false;
114
+ type IsValidGetRoutePath<TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[], TPath extends string> = TPath extends ExtractGetRoutePaths<TRoutes$1> ? true : false;
115
115
  /**
116
116
  * Utility type to ensure only valid GET route paths can be used
117
117
  */
118
- type ValidateGetRoutePath<TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[], TPath$1 extends string> = TPath$1 extends ExtractGetRoutePaths<TRoutes$1> ? TPath$1 : `Error: Path '${TPath$1}' is not a valid GET route. Available GET routes: ${ExtractGetRoutePaths<TRoutes$1>}`;
118
+ type ValidateGetRoutePath<TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[], TPath extends string> = TPath extends ExtractGetRoutePaths<TRoutes$1> ? TPath : `Error: Path '${TPath}' is not a valid GET route. Available GET routes: ${ExtractGetRoutePaths<TRoutes$1>}`;
119
119
  /**
120
120
  * Helper type to check if a routes array has any GET routes
121
121
  */
122
- type HasGetRoutes<T$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]> = ExtractGetRoutePaths<T$1> extends never ? false : true;
123
- type ObjectContainingStoreField<T$1 extends object> = T$1 extends Store ? T$1 : { [K in keyof T$1]: T$1[K] extends Store ? { [P in K]: T$1[P] } & Partial<Omit<T$1, K>> : never }[keyof T$1] extends never ? never : T$1;
124
- type FragnoStoreData<T$1 extends object> = {
125
- obj: T$1;
122
+ type HasGetRoutes<T extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string>[]> = ExtractGetRoutePaths<T> extends never ? false : true;
123
+ type ObjectContainingStoreField<T extends object> = T extends Store ? T : { [K in keyof T]: T[K] extends Store ? { [P in K]: T[P] } & Partial<Omit<T, K>> : never }[keyof T] extends never ? never : T;
124
+ type FragnoStoreData<T extends object> = {
125
+ obj: T;
126
126
  [STORE_SYMBOL]: true;
127
127
  };
128
- type FragnoClientHookData<TMethod$1 extends HTTPMethod, TPath$1 extends string, TOutputSchema extends StandardSchemaV1, TErrorCode extends string, TQueryParameters extends string> = {
129
- route: FragnoRouteConfig<TMethod$1, TPath$1, StandardSchemaV1 | undefined, TOutputSchema, TErrorCode, TQueryParameters>;
128
+ type FragnoClientHookData<TMethod extends HTTPMethod, TPath extends string, TOutputSchema extends StandardSchemaV1, TErrorCode extends string, TQueryParameters extends string> = {
129
+ route: FragnoRouteConfig<TMethod, TPath, StandardSchemaV1 | undefined, TOutputSchema, TErrorCode, TQueryParameters>;
130
130
  query(args?: {
131
- path?: MaybeExtractPathParamsOrWiden<TPath$1, string>;
131
+ path?: MaybeExtractPathParamsOrWiden<TPath, string>;
132
132
  query?: Record<TQueryParameters, string>;
133
133
  }): Promise<StandardSchemaV1.InferOutput<TOutputSchema>>;
134
134
  store(args?: {
135
- path?: MaybeExtractPathParamsOrWiden<TPath$1, string | ReadableAtom<string>>;
135
+ path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;
136
136
  query?: Record<TQueryParameters, string | ReadableAtom<string>>;
137
137
  }): FetcherStore<StandardSchemaV1.InferOutput<TOutputSchema>, FragnoClientError<TErrorCode>>;
138
138
  [GET_HOOK_SYMBOL]: true;
139
139
  } & {
140
140
  readonly _outputSchema?: TOutputSchema;
141
141
  };
142
- type FragnoClientMutatorData<TMethod$1 extends NonGetHTTPMethod, TPath$1 extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string, TQueryParameters extends string> = {
143
- route: FragnoRouteConfig<TMethod$1, TPath$1, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters>;
142
+ type FragnoClientMutatorData<TMethod extends NonGetHTTPMethod, TPath extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string, TQueryParameters extends string> = {
143
+ route: FragnoRouteConfig<TMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters>;
144
144
  mutateQuery(args?: {
145
145
  body?: InferOr<TInputSchema, undefined>;
146
- path?: MaybeExtractPathParamsOrWiden<TPath$1, string>;
146
+ path?: MaybeExtractPathParamsOrWiden<TPath, string>;
147
147
  query?: Record<TQueryParameters, string>;
148
148
  }): Promise<InferOr<TOutputSchema, undefined>>;
149
149
  mutatorStore: MutatorStore<{
150
150
  body?: InferOr<TInputSchema, undefined>;
151
- path?: MaybeExtractPathParamsOrWiden<TPath$1, string | ReadableAtom<string>>;
151
+ path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;
152
152
  query?: Record<TQueryParameters, string | ReadableAtom<string>>;
153
153
  }, InferOr<TOutputSchema, undefined>, FragnoClientError<TErrorCode>>;
154
154
  [MUTATOR_HOOK_SYMBOL]: true;
@@ -156,10 +156,10 @@ type FragnoClientMutatorData<TMethod$1 extends NonGetHTTPMethod, TPath$1 extends
156
156
  readonly _inputSchema?: TInputSchema;
157
157
  readonly _outputSchema?: TOutputSchema;
158
158
  };
159
- declare function buildUrl<TPath$1 extends string>(config: {
159
+ declare function buildUrl<TPath extends string>(config: {
160
160
  baseUrl?: string;
161
161
  mountRoute: string;
162
- path: TPath$1;
162
+ path: TPath;
163
163
  }, params: {
164
164
  pathParams?: Record<string, string | ReadableAtom<string>>;
165
165
  queryParams?: Record<string, string | ReadableAtom<string>>;
@@ -173,12 +173,12 @@ declare function buildUrl<TPath$1 extends string>(config: {
173
173
  * @param params
174
174
  * @returns
175
175
  */
176
- declare function getCacheKey<TMethod$1 extends HTTPMethod, TPath$1 extends string>(method: TMethod$1, path: TPath$1, params?: {
176
+ declare function getCacheKey<TMethod extends HTTPMethod, TPath extends string>(method: TMethod, path: TPath, params?: {
177
177
  pathParams?: Record<string, string | ReadableAtom<string>>;
178
178
  queryParams?: Record<string, string | ReadableAtom<string>>;
179
179
  }): (string | ReadableAtom<string>)[];
180
- declare function isGetHook<TPath$1 extends string, TOutputSchema extends StandardSchemaV1, TErrorCode extends string, TQueryParameters extends string>(hook: unknown): hook is FragnoClientHookData<"GET", TPath$1, TOutputSchema, TErrorCode, TQueryParameters>;
181
- declare function isMutatorHook<TMethod$1 extends NonGetHTTPMethod, TPath$1 extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string, TQueryParameters extends string>(hook: unknown): hook is FragnoClientMutatorData<TMethod$1, TPath$1, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters>;
180
+ declare function isGetHook<TPath extends string, TOutputSchema extends StandardSchemaV1, TErrorCode extends string, TQueryParameters extends string>(hook: unknown): hook is FragnoClientHookData<"GET", TPath, TOutputSchema, TErrorCode, TQueryParameters>;
181
+ declare function isMutatorHook<TMethod extends NonGetHTTPMethod, TPath extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string, TQueryParameters extends string>(hook: unknown): hook is FragnoClientMutatorData<TMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters>;
182
182
  declare function isStore<TStore extends Store>(obj: unknown): obj is FragnoStoreData<TStore>;
183
183
  type OnErrorRetryFn = (opts: {
184
184
  error: unknown;
@@ -193,11 +193,11 @@ type CreateHookOptions = {
193
193
  */
194
194
  onErrorRetry?: OnErrorRetryFn | null;
195
195
  };
196
- type OnInvalidateFn<TPath$1 extends string> = (invalidate: <TInnerPath extends string>(method: HTTPMethod, path: TInnerPath, params: {
196
+ type OnInvalidateFn<TPath extends string> = (invalidate: <TInnerPath extends string>(method: HTTPMethod, path: TInnerPath, params: {
197
197
  pathParams?: MaybeExtractPathParamsOrWiden<TInnerPath, string>;
198
198
  queryParams?: Record<string, string>;
199
199
  }) => void, params: {
200
- pathParams: MaybeExtractPathParamsOrWiden<TPath$1, string>;
200
+ pathParams: MaybeExtractPathParamsOrWiden<TPath, string>;
201
201
  queryParams?: Record<string, string>;
202
202
  }) => void;
203
203
  type CacheLine = {
@@ -226,10 +226,8 @@ type FragnoMiddlewareCallback<TRoutes$1 extends readonly AnyFragnoRouteConfig[],
226
226
  interface RequestMiddlewareOptions {
227
227
  path: string;
228
228
  method: HTTPMethod;
229
- pathParams?: Record<string, string>;
230
- searchParams: URLSearchParams;
231
- body: RequestBodyType;
232
229
  request: Request;
230
+ state: MutableRequestState;
233
231
  }
234
232
  declare class RequestMiddlewareOutputContext<const TDeps, const TServices extends Record<string, unknown>> extends OutputContext<unknown, string> {
235
233
  #private;
@@ -244,8 +242,23 @@ declare class RequestMiddlewareInputContext<const TRoutes$1 extends readonly Any
244
242
  get method(): HTTPMethod;
245
243
  get pathParams(): Record<string, string>;
246
244
  get queryParams(): URLSearchParams;
245
+ get headers(): Headers;
247
246
  get inputSchema(): StandardSchemaV1 | undefined;
248
247
  get outputSchema(): StandardSchemaV1 | undefined;
248
+ /**
249
+ * Access to the mutable request state.
250
+ * Use this to modify query parameters, path parameters, or request body.
251
+ *
252
+ * @example
253
+ * ```typescript
254
+ * // Modify body
255
+ * requestState.setBody({ modified: true });
256
+ *
257
+ * // Query params are already accessible via queryParams getter
258
+ * // Path params are already accessible via pathParams getter
259
+ * ```
260
+ */
261
+ get requestState(): MutableRequestState;
249
262
  ifMatchesRoute: <const TMethod extends HTTPMethod, const TPath extends ExtractRoutePath<TRoutes$1>, const TRoute extends ExtractRouteByPath<TRoutes$1, TPath, TMethod> = ExtractRouteByPath<TRoutes$1, TPath, TMethod>>(method: TMethod, path: TPath, handler: (...args: Parameters<TRoute["handler"]>) => Promise<Response | undefined | void> | Response | undefined | void) => Promise<Response | undefined>;
250
263
  }
251
264
  //#endregion
@@ -355,4 +368,4 @@ declare class FragmentBuilder<const TConfig, const TDeps = {}, const TServices e
355
368
  declare function defineFragment<TConfig = {}>(name: string): FragmentBuilder<TConfig, {}, {}, {}>;
356
369
  //#endregion
357
370
  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 };
358
- //# sourceMappingURL=fragment-builder-D6-oLYnH.d.ts.map
371
+ //# sourceMappingURL=fragment-builder-BZr2JkuW.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragment-builder-BZr2JkuW.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,UAAA,SAoByC,iBApBzC,EAAA,CAAA,GAoBgE,CApBhE,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,sBAmDoB,UAnDpB,EAAA,oBAAA,MAAA,EAAA,4BAqD0B,gBArD1B,GAAA,SAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,+BAAA,MAAA,GAAA,MAAA,CAAA,CAAA,MAAA,EAyDM,iBAzDN,CA0DA,OA1DA,EA2DA,KA3DA,EAAA,SAAA,EA6DA,aA7DA,EA8DA,UA9DA,EA+DA,gBA/DA,CAAA,GAAA;EAJuB,WAAA,CAAA,EAAA,SAAA;CAQO,CAAA,EA6D/B,iBA7D+B,CA6Db,OA7Da,EA6DJ,KA7DI,EAAA,SAAA,EA6Dc,aA7Dd,EA6D6B,UA7D7B,EA6DyC,gBA7DzC,CAAA;AAAS,iBAgE3B,WAhE2B,CAAA,sBAiEnB,UAjEmB,EAAA,oBAAA,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,OAzEuC,EA0EvC,KA1EuC,EA2EvC,YA3EuC,EA4EvC,aA5EuC,EA6EvC,UA7EuC,EA8EvC,gBA9EuC,CAAA,GAAA;EAAO,WAAA,EA+E7B,YA/E6B;CAApC,CAAA,EAgFX,iBAhFW,CAgFO,OAhFP,EAgFgB,KAhFhB,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,wBAAA,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,SAnHC,EAAA,GAoHjE,YApHiE,CAoHpD,OApHoD,EAoH3C,KApH2C,EAoHpC,SApHoC,EAoHzB,SApHyB,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,UAAA,SEqB7B,iBFrB6B,CEsB9C,UFtB8C,EAAA,MAAA,EEwB9C,gBFxB8C,GAAA,SAAA,EEyB9C,gBFzB8C,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GAAA,QAApC,ME8BA,CF9BA,GE8BI,CF9BJ,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,UAAA,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,CFrD8D,GEqD1D,CFrD0D,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,UAAA,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,CFvEjB,EAAA,KAAA,CAAA;AAAc,KEyEN,uBFzEM,CAAA,UAAA,SE0EG,iBF1EH,CE2Ed,UF3Ec,EAAA,MAAA,EE6Ed,gBF7Ec,GAAA,SAAA,EE8Ed,gBF9Ec,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GEkFd,gBFlFc,CEkFG,CFlFH,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,cAAA,MAAA,EAAA,gBEiET,UFjES,GEiEI,UFjEJ,CAAA,GAAA,QACH,MEkEV,SFlEU,GEkEA,SFlEA,CEkEQ,CFlER,CAAA,SEkEmB,iBFlEnB,CAAA,KAAA,EAAA,EEoEpB,KFpEoB,EAAA,KAAA,MAAA,EAAA,KAAA,OAAA,EAAA,KAAA,UAAA,EAAA,KAAA,YAAA,CAAA,GE0ElB,CF1EkB,SE0ER,OF1EQ,GE2EhB,iBF3EgB,CE2EE,CF3EF,EE2EK,KF3EL,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,cAAA,MAAA,CAAA,GAAA,QACA,MEgFU,SFhFV,GEgFoB,SFhFpB,CEgF4B,CFhF5B,CAAA,SEgFuC,iBFhFvC,CAAA,KAAA,OAAA,EEkFA,KFlFA,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,cAAA,MAAA,CAAA,GEuG3D,KFvG2D,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,cAAA,MAAA,CAAA,GEoHzB,KFpHyB,SEoHX,oBFpHW,CEoHU,SFpHV,CAAA,GEqHrB,KFrHqB,GAAA,gBEsHL,KFtHK,qDEsHqD,oBFtHrD,CEsH0E,SFtH1E,CAAA,EAAA;;;;AASvB,KEkHQ,YFlHR,CAAA,UAAA,SEmHiB,iBFnHjB,CEoHA,UFpHA,EAAA,MAAA,EEsHA,gBFtHA,GAAA,SAAA,EEuHA,gBFvHA,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,GE2HA,oBF3HA,CE2HqB,CF3HrB,CAAA,SAAA,KAAA,GAAA,KAAA,GAAA,IAAA;AACA,KE4HQ,0BF5HR,CAAA,UAAA,MAAA,CAAA,GE4HuD,CF5HvD,SE4HiE,KF5HjE,GE6HA,CF7HA,GAAA,QACA,ME8HgB,CF9HhB,GE8HoB,CF9HpB,CE8HsB,CF9HtB,CAAA,SE8HiC,KF9HjC,GAAA,QE8HiD,CF7HjD,GE6HqD,CF7HrD,CE6HuD,CF7HvD,CAAA,EACA,GE4H8D,OF5H9D,CE4HsE,IF5HtE,CE4H2E,CF5H3E,EE4H8E,CF5H9E,CAAA,CAAA,GAAA,KAAA,EACA,CAAA,ME4HU,CF5HV,CAAA,SAAA,KAAA,GAAA,KAAA,GE8HE,CF9HF;AANM,KEsIE,eFtIF,CAAA,UAAA,MAAA,CAAA,GAAA;EAOW,GAAA,EEgId,CFhIc;EACA,CEgIlB,YAAA,CFhIkB,EAAA,IAAA;CAAS;AAAO,KEmIzB,oBFnIyB,CAAA,gBEoInB,UFpImB,EAAA,cAAA,MAAA,EAAA,sBEsIb,gBFtIa,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,GAAA;EAAc,KAAA,EE0I1C,iBF1I0C,CE2I/C,OF3I+C,EE4I/C,KF5I+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,KFnJqC,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,KF5HjC,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,gBEiIF,gBFjIE,EAAA,cAAA,MAAA,EAAA,qBEmIG,gBFnIH,GAAA,SAAA,EAAA,sBEoII,gBFpIJ,GAAA,SAAA,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,GAAA;EAAmD,KAAA,EEwI9D,iBFxI8D,CEyInE,OFzImE,EE0InE,KF1ImE,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,KFlJL,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,gBAAgB;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,cAAA,MAAA,CAAA,CAAA,MAAA,EAAA;EAcvE,OAAA,CAAA,EAAA,MAAA;EAMA,UAAA,EAAA,MAAA;EAMmC,IAAA,ECkRtC,KDlRsC;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,gBCkP6B,UDlP7B,EAAA,cAAA,MAAA,CAAA,CAAA,MAAA,ECmPL,ODnPK,EAAA,IAAA,ECoPP,KDpPO,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,cAAA,MAAA,EAAA,sBCgSQ,gBDhSR,EAAA,mBAAA,MAAA,EAAA,yBAAA,MAAA,CAAA,CAAA,IAAA,EAAA,OAAA,CAAA,EAAA,IAAA,ICqSL,oBDrSK,CAAA,KAAA,ECqSuB,KDrSvB,ECqS8B,aDrS9B,ECqS6C,UDrS7C,ECqSyD,gBDrSzD,CAAA;AAUF,iBCqSE,aDrSF,CAAA,gBCsSI,gBDtSJ,EAAA,cAAA,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,OD/SY,ECgTZ,KDhTY,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,cAAA,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,KAzZhC,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,OAAA,EGYD,OHZC;EAAS,KAAA,EGaZ,mBHbY;AAGrB;AAKI,cGQS,8BHRT,CAAA,WAAA,EAAA,wBGUsB,MHVtB,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SGWM,aHXN,CAAA,OAAA,EAAA,MAAA,CAAA,CAAA;EAEA,CAAA,OAAA;EACA,WAAA,CAAA,IAAA,EGYgB,KHZhB,EAAA,QAAA,EGYiC,SHZjC;EAJuB,IAAA,IAAA,CAAA,CAAA,EGsBb,KHtBa;EAQO,IAAA,QAAA,CAAA,CAAA,EGkBhB,SHlBgB;;AAAgB,cGuBrC,6BHvBqC,CAAA,wBAAA,SGuBwB,oBHvBxB,EAAA,CAAA,CAAA;EAApC,CAAA,OAAA;EAAmD,WAAA,CAAA,MAAA,EG4B3C,SH5B2C,EAAA,OAAA,EG4BzB,wBH5ByB;EAAO,IAAA,IAAA,CAAA,CAAA,EAAA,MAAA;EAG5D,IAAA,MAAA,CAAA,CAAA,EG4CI,UH5Ca;EAEjB,IAAA,UAAA,CAAA,CAAA,EG8CQ,MH9Ca,CAAA,MAAA,EAAA,MAAA,CAAA;EAAoB,IAAA,WAAA,CAAA,CAAA,EGkDhC,eHlDgC;EAAuB,IAAA,OAAA,CAAA,CAAA,EGsD3D,OHtD2D;EAE3C,IAAA,WAAA,CAAA,CAAA,EGwDZ,gBHxDY,GAAA,SAAA;EAG7B,IAAA,YAAA,CAAA,CAAA,EGyDkB,gBHzDlB,GAAA,SAAA;EAAc;;;;;;;;AAoClB;;;;;EAWI,IAAA,YAAA,CAAA,CAAA,EG2BkB,mBH3BlB;EACA,cAAA,EAAA,CAAA,sBGgCsB,UHhCtB,EAAA,oBGiCoB,gBHjCpB,CGiCqC,SHjCrC,CAAA,EAAA,qBGkCqB,kBHlCrB,CGkCwC,SHlCxC,EGkCiD,KHlCjD,EGkCwD,OHlCxD,CAAA,GGkCmE,kBHlCnE,CGmCE,SHnCF,EGoCE,KHpCF,EGqCE,OHrCF,CAAA,CAAA,CAAA,MAAA,EGwCQ,OHxCR,EAAA,IAAA,EGyCM,KHzCN,EAAA,OAAA,EAAA,CAAA,GAAA,IAAA,EG2CW,UH3CX,CG2CsB,MH3CtB,CAAA,SAAA,CAAA,CAAA,EAAA,GG4CK,OH5CL,CG4Ca,QH5Cb,GAAA,SAAA,GAAA,IAAA,CAAA,GG4C4C,QH5C5C,GAAA,SAAA,GAAA,IAAA,EAAA,GG6CC,OH7CD,CG6CS,QH7CT,GAAA,SAAA,CAAA;;;;UI5Da,kBAAA;EJlBL,UAAA,CAAA,EAAA,MAAA;AAEZ;AACU,UImBO,wBAAA,CJnBP;EACF,UAAA,CAAA,EAAA,MAAA;EACI,OAAA,CAAA,EAAA,MAAA;;AAGZ,KImBK,aAAA,GJnBmB;EAKpB,GAAA,EAAA,CAAA,GAAA,EIeS,OJfT,EAAA,GIeqB,OJfrB,CIe6B,QJf7B,CAAA;CAEA;KIgBC,mBAAA,GJfD;EAJuB,MAAA,EAAA,CAAA,IAAA,EAAA;IAQO,OAAA,EIYN,OJZM;EAAS,CAAA,EAAA,GIYD,OJZC,CIYO,QJZP,CAAA;EAAO,MAAA,EAAA,CAAA,IAAA,EAAA;IAApC,OAAA,EIac,OJbd;EAAmD,CAAA,EAAA,GIavB,OJbuB,CIaf,QJbe,CAAA;CAAO;AAGxE,KIaK,kBAAA,GJbwB;EAEjB,GAAA,EAAA,CAAA,IAAA,EAAA;IAAyC,OAAA,EIY5B,OJZ4B;EAAuB,CAAA,EAAA,GIYrC,OJZqC,CIY7B,QJZ6B,CAAA;EAE3C,IAAA,EAAA,CAAA,IAAA,EAAA;IAG7B,OAAA,EIQsB,OJRtB;EAAc,CAAA,EAAA,GIQsB,OJRtB,CIQ8B,QJR9B,CAAA;EACR,GAAA,EAAA,CAAA,IAAA,EAAA;IAAkC,OAAA,EIQnB,OJRmB;EAAtB,CAAA,EAAA,GIQiB,OJRjB,CIQyB,QJRzB,CAAA;EACf,MAAA,EAAA,CAAA,IAAA,EAAA;IAAgC,OAAA,EIQX,OJRW;EAAtB,CAAA,EAAA,GIQyB,OJRzB,CIQiC,QJRjC,CAAA;EAAqB,KAAA,EAAA,CAAA,IAAA,EAAA;IAkCtB,OAAA,EIzBW,OJyBA;EACH,CAAA,EAAA,GI1BiB,OJ0BjB,CI1ByB,QJ0BzB,CAAA;EAEM,IAAA,EAAA,CAAA,IAAA,EAAA;IAK1B,OAAA,EIhCsB,OJgCtB;EACA,CAAA,EAAA,GIjCoC,OJiCpC,CIjC4C,QJiC5C,CAAA;EAEA,OAAA,EAAA,CAAA,IAAA,EAAA;IACA,OAAA,EInCyB,OJmCzB;EACA,CAAA,EAAA,GIpCuC,OJoCvC,CIpC+C,QJoC/C,CAAA;CANM;KI3BL,gBAAA,GJmCgB;EAAS,GAAA,EAAA,CAAA,GAAA,EIlCjB,OJkCiB,EAAA,GIlCL,OJkCK,CIlCG,QJkCH,CAAA;EAAkB,IAAA,EAAA,CAAA,GAAA,EIjClC,OJiCkC,EAAA,GIjCtB,OJiCsB,CIjCd,QJiCc,CAAA;EAAe,GAAA,EAAA,CAAA,GAAA,EIhClD,OJgCkD,EAAA,GIhCtC,OJgCsC,CIhC9B,QJgC8B,CAAA;EAAY,MAAA,EAAA,CAAA,GAAA,EI/B3D,OJ+B2D,EAAA,GI/B/C,OJ+B+C,CI/BvC,QJ+BuC,CAAA;EAAxE,KAAA,EAAA,CAAA,GAAA,EI9BY,OJ8BZ,EAAA,GI9BwB,OJ8BxB,CI9BgC,QJ8BhC,CAAA;EAAiB,IAAA,EAAA,CAAA,GAAA,EI7BN,OJ6BM,EAAA,GI7BM,OJ6BN,CI7Bc,QJ6Bd,CAAA;EAGJ,OAAA,EAAA,CAAA,GAAA,EI/BC,OJ+BU,EAAA,GI/BE,OJ+BF,CI/BU,QJ+BV,CAAA;CACH;KI7BnB,mBAAA,GJ+BwB;EACC,KAAA,EI/BrB,aJ+BqB;EAK1B,cAAA,EInCc,mBJmCd;EACA,SAAA,EInCS,gBJmCT;EACA,YAAA,EInCY,gBJmCZ;EACA,aAAA,EInCa,kBJmCb;CACA;AACA,cIjCS,8BJiCT,EAAA,+BAAA;KI/BC,mBAAA,GJyBK,MIzBuB,mBJyBvB;AAOW,UI9BJ,0BJ8BI,CAAA,kBAAA,SI7BM,oBJ6BN,EAAA,GAAA,EAAA,EAAA,QAAA,CAAA,CAAA,EAAA,kBI3BD,MJ2BC,CAAA,MAAA,EAAA,OAAA,CAAA,GI3ByB,MJ2BzB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,2BI1BQ,MJ0BR,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;EACA,CIzBlB,8BAAA,CJyBkB,EAAA,OIzBsB,8BJyBtB;EAAS,MAAA,EIvBpB,0BJuBoB,CIvBO,SJuBP,CAAA;EAAO,IAAA,EItB7B,KJsB6B;EAAc,QAAA,EIrBvC,SJqBuC;EAAe,iBAAA,CAAA,EIpB5C,kBJoB4C;EAAY,WAAA,EAAA,CAAA,UInBpD,mBJmBoD,CAAA,CAAA,SAAA,EInBpB,CJmBoB,EAAA,GInBd,mBJmBc,CInBM,CJmBN,CAAA;EAA3E,OAAA,EAAA,CAAA,GAAA,EIlBc,OJkBd,EAAA,GIlB0B,OJkB1B,CIlBkC,QJkBlC,CAAA;EAAiB,UAAA,EAAA,MAAA;EAuBJ,cAAA,EAAY,CAAA,OAAA,EItCf,wBJsCe,CItCU,SJsCV,EItCmB,KJsCnB,EItC0B,SJsC1B,CAAA,EAAA,GIrCrB,0BJqCqB,CIrCM,SJqCN,EIrCe,KJqCf,EIrCsB,SJqCtB,EIrCiC,kBJqCjC,CAAA;;AAMpB,UIxCS,0BJwCT,CAAA,kBAAA,SIvCmB,iBJuCnB,CItCJ,UJsCI,EAAA,MAAA,EIpCJ,gBJoCI,GAAA,SAAA,EInCJ,gBJmCI,GAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA;EACA,IAAA,EAAA,MAAA;EAJ6B,MAAA,EI1B3B,SJ0B2B;;AASY,KIhCrC,6BAAA,GAAgC,0BJgCK,CAAA,SI/BtC,oBJ+BsC,EAAA,CAAA;AAAO,iBI5BxC,cJ4BwC,CAAA,aAAA,EAAA,WAAA,EAAA,wBIzB9B,MJyB8B,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,iCAAA,SIxBZ,iBJwBY,EAAA,EAAA,iCIvBrB,MJuBqB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,uBItB/B,kBJsB+B,CAAA,CAAA,eAAA,EAAA;EAApC,UAAA,EInBJ,kBJmBI,CInBe,OJmBf,EInBwB,KJmBxB,EInB+B,SJmB/B,EInB0C,kBJmB1C,CAAA;EAAmD,gBAAA,EIlBjD,QJkBiD;CACnD,EAAA,MAAA,EIjBV,OJiBU,EAAA,iBAAA,EIhBC,kBJgBD,EAAA,OAAA,EIfT,QJeS,CAAA,EIdjB,0BJciB,CIblB,qBJakB,CIbI,kBJaJ,CAAA,EIZlB,KJYkB,EIXlB,SJWkB,EIVlB,kBJUkB,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,iBKmDxD,cLnDwD,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EKmDZ,eLnDY,CKmDI,OLnDJ,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"fragment-builder-DOnCVBqc.js","names":["#definition"],"sources":["../src/api/fragment-builder.ts"],"sourcesContent":["import type { FragnoPublicConfig } from \"./fragment-instantiation\";\n\nexport interface FragmentDefinition<\n TConfig,\n TDeps = {},\n TServices extends Record<string, unknown> = {},\n TAdditionalContext extends Record<string, unknown> = {},\n> {\n name: string;\n dependencies?: (config: TConfig, options: FragnoPublicConfig) => TDeps;\n services?: (config: TConfig, options: FragnoPublicConfig, deps: TDeps) => TServices;\n additionalContext?: TAdditionalContext;\n}\n\nexport class FragmentBuilder<\n const TConfig,\n const TDeps = {},\n const TServices extends Record<string, unknown> = {},\n const TAdditionalContext extends Record<string, unknown> = {},\n> {\n #definition: FragmentDefinition<TConfig, TDeps, TServices, TAdditionalContext>;\n\n constructor(definition: FragmentDefinition<TConfig, TDeps, TServices, TAdditionalContext>) {\n this.#definition = definition;\n }\n\n get definition() {\n return this.#definition;\n }\n\n get $requiredOptions(): FragnoPublicConfig {\n throw new Error(\"Type only method. Do not call.\");\n }\n\n withDependencies<TNewDeps>(\n fn: (\n context: { config: TConfig; fragnoConfig: FragnoPublicConfig } & TAdditionalContext,\n ) => TNewDeps,\n ): FragmentBuilder<TConfig, TNewDeps, {}, TAdditionalContext> {\n return new FragmentBuilder<TConfig, TNewDeps, {}, TAdditionalContext>({\n name: this.#definition.name,\n dependencies: (config: TConfig, options: FragnoPublicConfig) => {\n return fn({ config, fragnoConfig: options } as {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n } & TAdditionalContext);\n },\n services: undefined,\n additionalContext: this.#definition.additionalContext,\n });\n }\n\n withServices<TNewServices extends Record<string, unknown>>(\n fn: (\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps;\n } & TAdditionalContext,\n ) => TNewServices,\n ): FragmentBuilder<TConfig, TDeps, TNewServices, TAdditionalContext> {\n return new FragmentBuilder<TConfig, TDeps, TNewServices, TAdditionalContext>({\n name: this.#definition.name,\n dependencies: this.#definition.dependencies,\n services: (config: TConfig, options: FragnoPublicConfig, deps: TDeps) => {\n return fn({ config, fragnoConfig: options, deps } as {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps;\n } & TAdditionalContext);\n },\n additionalContext: this.#definition.additionalContext,\n });\n }\n}\n\nexport function defineFragment<TConfig = {}>(name: string): FragmentBuilder<TConfig, {}, {}, {}> {\n return new FragmentBuilder({\n name,\n });\n}\n"],"mappings":";AAcA,IAAa,kBAAb,MAAa,gBAKX;CACA;CAEA,YAAY,YAA+E;AACzF,QAAKA,aAAc;;CAGrB,IAAI,aAAa;AACf,SAAO,MAAKA;;CAGd,IAAI,mBAAuC;AACzC,QAAM,IAAI,MAAM,iCAAiC;;CAGnD,iBACE,IAG4D;AAC5D,SAAO,IAAI,gBAA2D;GACpE,MAAM,MAAKA,WAAY;GACvB,eAAe,QAAiB,YAAgC;AAC9D,WAAO,GAAG;KAAE;KAAQ,cAAc;KAAS,CAGpB;;GAEzB,UAAU;GACV,mBAAmB,MAAKA,WAAY;GACrC,CAAC;;CAGJ,aACE,IAOmE;AACnE,SAAO,IAAI,gBAAkE;GAC3E,MAAM,MAAKA,WAAY;GACvB,cAAc,MAAKA,WAAY;GAC/B,WAAW,QAAiB,SAA6B,SAAgB;AACvE,WAAO,GAAG;KAAE;KAAQ,cAAc;KAAS;KAAM,CAI1B;;GAEzB,mBAAmB,MAAKA,WAAY;GACrC,CAAC;;;AAIN,SAAgB,eAA6B,MAAoD;AAC/F,QAAO,IAAI,gBAAgB,EACzB,MACD,CAAC"}
1
+ {"version":3,"file":"fragment-builder-DOnCVBqc.js","names":["#definition"],"sources":["../src/api/fragment-builder.ts"],"sourcesContent":["import type { FragnoPublicConfig } from \"./fragment-instantiation\";\n\nexport interface FragmentDefinition<\n TConfig,\n TDeps = {},\n TServices extends Record<string, unknown> = {},\n TAdditionalContext extends Record<string, unknown> = {},\n> {\n name: string;\n dependencies?: (config: TConfig, options: FragnoPublicConfig) => TDeps;\n services?: (config: TConfig, options: FragnoPublicConfig, deps: TDeps) => TServices;\n additionalContext?: TAdditionalContext;\n}\n\nexport class FragmentBuilder<\n const TConfig,\n const TDeps = {},\n const TServices extends Record<string, unknown> = {},\n const TAdditionalContext extends Record<string, unknown> = {},\n> {\n #definition: FragmentDefinition<TConfig, TDeps, TServices, TAdditionalContext>;\n\n constructor(definition: FragmentDefinition<TConfig, TDeps, TServices, TAdditionalContext>) {\n this.#definition = definition;\n }\n\n get definition() {\n return this.#definition;\n }\n\n get $requiredOptions(): FragnoPublicConfig {\n throw new Error(\"Type only method. Do not call.\");\n }\n\n withDependencies<TNewDeps>(\n fn: (\n context: { config: TConfig; fragnoConfig: FragnoPublicConfig } & TAdditionalContext,\n ) => TNewDeps,\n ): FragmentBuilder<TConfig, TNewDeps, {}, TAdditionalContext> {\n return new FragmentBuilder<TConfig, TNewDeps, {}, TAdditionalContext>({\n name: this.#definition.name,\n dependencies: (config: TConfig, options: FragnoPublicConfig) => {\n return fn({ config, fragnoConfig: options } as {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n } & TAdditionalContext);\n },\n services: undefined,\n additionalContext: this.#definition.additionalContext,\n });\n }\n\n withServices<TNewServices extends Record<string, unknown>>(\n fn: (\n context: {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps;\n } & TAdditionalContext,\n ) => TNewServices,\n ): FragmentBuilder<TConfig, TDeps, TNewServices, TAdditionalContext> {\n return new FragmentBuilder<TConfig, TDeps, TNewServices, TAdditionalContext>({\n name: this.#definition.name,\n dependencies: this.#definition.dependencies,\n services: (config: TConfig, options: FragnoPublicConfig, deps: TDeps) => {\n return fn({ config, fragnoConfig: options, deps } as {\n config: TConfig;\n fragnoConfig: FragnoPublicConfig;\n deps: TDeps;\n } & TAdditionalContext);\n },\n additionalContext: this.#definition.additionalContext,\n });\n }\n}\nexport function defineFragment<TConfig = {}>(name: string): FragmentBuilder<TConfig, {}, {}, {}> {\n return new FragmentBuilder({\n name,\n });\n}\n"],"mappings":";AAcA,IAAa,kBAAb,MAAa,gBAKX;CACA;CAEA,YAAY,YAA+E;AACzF,QAAKA,aAAc;;CAGrB,IAAI,aAAa;AACf,SAAO,MAAKA;;CAGd,IAAI,mBAAuC;AACzC,QAAM,IAAI,MAAM,iCAAiC;;CAGnD,iBACE,IAG4D;AAC5D,SAAO,IAAI,gBAA2D;GACpE,MAAM,MAAKA,WAAY;GACvB,eAAe,QAAiB,YAAgC;AAC9D,WAAO,GAAG;KAAE;KAAQ,cAAc;KAAS,CAGpB;;GAEzB,UAAU;GACV,mBAAmB,MAAKA,WAAY;GACrC,CAAC;;CAGJ,aACE,IAOmE;AACnE,SAAO,IAAI,gBAAkE;GAC3E,MAAM,MAAKA,WAAY;GACvB,cAAc,MAAKA,WAAY;GAC/B,WAAW,QAAiB,SAA6B,SAAgB;AACvE,WAAO,GAAG;KAAE;KAAQ,cAAc;KAAS;KAAM,CAI1B;;GAEzB,mBAAmB,MAAKA,WAAY;GACrC,CAAC;;;AAGN,SAAgB,eAA6B,MAAoD;AAC/F,QAAO,IAAI,gBAAgB,EACzB,MACD,CAAC"}
@@ -1,7 +1,103 @@
1
1
  import { n as FragnoApiError } from "./api-DngJDcmO.js";
2
- import { a as RequestOutputContext, i as OutputContext, o as RequestInputContext, r as resolveRouteFactories, s as getMountRoute } from "./route-B4RbOWjd.js";
2
+ import { t as getMountRoute } from "./route-CTxjMtGZ.js";
3
+ import { a as RequestOutputContext, i as OutputContext, o as RequestInputContext, r as resolveRouteFactories } from "./route-D1MZR6JL.js";
3
4
  import { addRoute, createRouter, findRoute } from "rou3";
4
5
 
6
+ //#region src/api/mutable-request-state.ts
7
+ /**
8
+ * Holds mutable request state that can be modified by middleware and consumed by handlers.
9
+ *
10
+ * This class provides a structural way for middleware to modify request data:
11
+ * - Path parameters can be modified
12
+ * - Query/search parameters can be modified
13
+ * - Request body can be overridden
14
+ * - Request headers can be modified
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // In middleware
19
+ * const state = new MutableRequestState({
20
+ * pathParams: { id: "123" },
21
+ * searchParams: new URLSearchParams("?role=user"),
22
+ * body: { name: "John" },
23
+ * headers: new Headers()
24
+ * });
25
+ *
26
+ * // Modify query parameters
27
+ * state.searchParams.set("role", "admin");
28
+ *
29
+ * // Override body
30
+ * state.setBody({ name: "Jane" });
31
+ *
32
+ * // Modify headers
33
+ * state.headers.set("X-Custom", "value");
34
+ * ```
35
+ */
36
+ var MutableRequestState = class {
37
+ #pathParams;
38
+ #searchParams;
39
+ #headers;
40
+ #initialBody;
41
+ #bodyOverride;
42
+ constructor(config) {
43
+ this.#pathParams = config.pathParams;
44
+ this.#searchParams = config.searchParams;
45
+ this.#headers = config.headers;
46
+ this.#initialBody = config.body;
47
+ this.#bodyOverride = void 0;
48
+ }
49
+ /**
50
+ * Path parameters extracted from the route.
51
+ * Can be modified directly (e.g., `state.pathParams.id = "456"`).
52
+ */
53
+ get pathParams() {
54
+ return this.#pathParams;
55
+ }
56
+ /**
57
+ * URLSearchParams for query parameters.
58
+ * Can be modified using URLSearchParams API (e.g., `state.searchParams.set("key", "value")`).
59
+ */
60
+ get searchParams() {
61
+ return this.#searchParams;
62
+ }
63
+ /**
64
+ * Request headers.
65
+ * Can be modified using Headers API (e.g., `state.headers.set("X-Custom", "value")`).
66
+ */
67
+ get headers() {
68
+ return this.#headers;
69
+ }
70
+ /**
71
+ * Get the current body value.
72
+ * Returns the override if set, otherwise the initial body.
73
+ */
74
+ get body() {
75
+ return this.#bodyOverride !== void 0 ? this.#bodyOverride : this.#initialBody;
76
+ }
77
+ /**
78
+ * Override the request body.
79
+ * This allows middleware to replace the body that will be seen by the handler.
80
+ *
81
+ * @param body - The new body value
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * // In middleware
86
+ * state.setBody({ modifiedField: "new value" });
87
+ * ```
88
+ */
89
+ setBody(body) {
90
+ this.#bodyOverride = body;
91
+ }
92
+ /**
93
+ * Check if the body has been overridden by middleware.
94
+ */
95
+ get hasBodyOverride() {
96
+ return this.#bodyOverride !== void 0;
97
+ }
98
+ };
99
+
100
+ //#endregion
5
101
  //#region src/api/request-middleware.ts
6
102
  var RequestMiddlewareOutputContext = class extends OutputContext {
7
103
  #deps;
@@ -21,8 +117,10 @@ var RequestMiddlewareOutputContext = class extends OutputContext {
21
117
  var RequestMiddlewareInputContext = class {
22
118
  #options;
23
119
  #route;
120
+ #state;
24
121
  constructor(routes, options) {
25
122
  this.#options = options;
123
+ this.#state = options.state;
26
124
  const route = routes.find((route$1) => route$1.path === options.path && route$1.method === options.method);
27
125
  if (!route) throw new Error(`Route not found: ${options.path} ${options.method}`);
28
126
  this.#route = route;
@@ -34,10 +132,13 @@ var RequestMiddlewareInputContext = class {
34
132
  return this.#options.method;
35
133
  }
36
134
  get pathParams() {
37
- return this.#options.pathParams ?? {};
135
+ return this.#state.pathParams;
38
136
  }
39
137
  get queryParams() {
40
- return this.#options.searchParams;
138
+ return this.#state.searchParams;
139
+ }
140
+ get headers() {
141
+ return this.#state.headers;
41
142
  }
42
143
  get inputSchema() {
43
144
  return this.#route.inputSchema;
@@ -45,6 +146,22 @@ var RequestMiddlewareInputContext = class {
45
146
  get outputSchema() {
46
147
  return this.#route.outputSchema;
47
148
  }
149
+ /**
150
+ * Access to the mutable request state.
151
+ * Use this to modify query parameters, path parameters, or request body.
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * // Modify body
156
+ * requestState.setBody({ modified: true });
157
+ *
158
+ * // Query params are already accessible via queryParams getter
159
+ * // Path params are already accessible via pathParams getter
160
+ * ```
161
+ */
162
+ get requestState() {
163
+ return this.#state;
164
+ }
48
165
  ifMatchesRoute = async (method, path, handler) => {
49
166
  if (this.path !== path || this.method !== method) return;
50
167
  return handler(await RequestInputContext.fromRequest({
@@ -52,7 +169,8 @@ var RequestMiddlewareInputContext = class {
52
169
  method: this.#options.method,
53
170
  path,
54
171
  pathParams: this.pathParams,
55
- inputSchema: this.#route.inputSchema
172
+ inputSchema: this.#route.inputSchema,
173
+ state: this.#state
56
174
  }), new RequestOutputContext(this.#route.outputSchema));
57
175
  };
58
176
  };
@@ -135,7 +253,8 @@ function createFragment(fragmentBuilder, config, routesOrFactories, options) {
135
253
  }[framework];
136
254
  },
137
255
  handler: async (req) => {
138
- const pathname = new URL(req.url).pathname;
256
+ const url = new URL(req.url);
257
+ const pathname = url.pathname;
139
258
  const matchRoute = pathname.startsWith(mountRoute) ? pathname.slice(mountRoute.length) : null;
140
259
  if (matchRoute === null) return Response.json({
141
260
  error: `Fragno: Route for '${definition.name}' not found. Is the fragment mounted on the right route? Expecting: '${mountRoute}'.`,
@@ -148,14 +267,20 @@ function createFragment(fragmentBuilder, config, routesOrFactories, options) {
148
267
  }, { status: 404 });
149
268
  const { handler, inputSchema, outputSchema, path } = route.data;
150
269
  const outputContext = new RequestOutputContext(outputSchema);
270
+ const clonedReq = req.clone();
271
+ const requestBody = clonedReq.body instanceof ReadableStream ? await clonedReq.json() : void 0;
272
+ const requestState = new MutableRequestState({
273
+ pathParams: route.params ?? {},
274
+ searchParams: url.searchParams,
275
+ body: requestBody,
276
+ headers: new Headers(req.headers)
277
+ });
151
278
  if (middlewareHandler) {
152
279
  const middlewareInputContext = new RequestMiddlewareInputContext(routes, {
153
280
  method: req.method,
154
281
  path,
155
- pathParams: route.params,
156
- searchParams: new URL(req.url).searchParams,
157
- body: req.body,
158
- request: req
282
+ request: req,
283
+ state: requestState
159
284
  });
160
285
  const middlewareOutputContext = new RequestMiddlewareOutputContext(dependencies, services);
161
286
  try {
@@ -175,7 +300,8 @@ function createFragment(fragmentBuilder, config, routesOrFactories, options) {
175
300
  method: req.method,
176
301
  path,
177
302
  pathParams: route.params ?? {},
178
- inputSchema
303
+ inputSchema,
304
+ state: requestState
179
305
  });
180
306
  try {
181
307
  return await handler(inputContext, outputContext);
@@ -194,4 +320,4 @@ function createFragment(fragmentBuilder, config, routesOrFactories, options) {
194
320
 
195
321
  //#endregion
196
322
  export { instantiatedFragmentFakeSymbol as n, createFragment as t };
197
- //# sourceMappingURL=fragment-instantiation-f4AhwQss.js.map
323
+ //# sourceMappingURL=fragment-instantiation-DMw8OKMC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragment-instantiation-DMw8OKMC.js","names":["#pathParams","#searchParams","#headers","#initialBody","#bodyOverride","#deps","#services","#options","#route","#state","route","middlewareHandler:\n | FragnoMiddlewareCallback<FlattenRouteFactories<TRoutesOrFactories>, TDeps, TServices>\n | undefined","fragment: FragnoInstantiatedFragment<\n FlattenRouteFactories<TRoutesOrFactories>,\n TDeps,\n TServices,\n TAdditionalContext & TOptions\n >"],"sources":["../src/api/mutable-request-state.ts","../src/api/request-middleware.ts","../src/api/fragment-instantiation.ts"],"sourcesContent":["import type { RequestBodyType } from \"./request-input-context\";\n\n/**\n * Holds mutable request state that can be modified by middleware and consumed by handlers.\n *\n * This class provides a structural way for middleware to modify request data:\n * - Path parameters can be modified\n * - Query/search parameters can be modified\n * - Request body can be overridden\n * - Request headers can be modified\n *\n * @example\n * ```typescript\n * // In middleware\n * const state = new MutableRequestState({\n * pathParams: { id: \"123\" },\n * searchParams: new URLSearchParams(\"?role=user\"),\n * body: { name: \"John\" },\n * headers: new Headers()\n * });\n *\n * // Modify query parameters\n * state.searchParams.set(\"role\", \"admin\");\n *\n * // Override body\n * state.setBody({ name: \"Jane\" });\n *\n * // Modify headers\n * state.headers.set(\"X-Custom\", \"value\");\n * ```\n */\nexport class MutableRequestState {\n readonly #pathParams: Record<string, string>;\n readonly #searchParams: URLSearchParams;\n readonly #headers: Headers;\n // oxlint-disable-next-line no-unused-private-class-members False Positive?\n readonly #initialBody: RequestBodyType;\n #bodyOverride: RequestBodyType | undefined;\n\n constructor(config: {\n pathParams: Record<string, string>;\n searchParams: URLSearchParams;\n body: RequestBodyType;\n headers: Headers;\n }) {\n this.#pathParams = config.pathParams;\n this.#searchParams = config.searchParams;\n this.#headers = config.headers;\n this.#initialBody = config.body;\n this.#bodyOverride = undefined;\n }\n\n /**\n * Path parameters extracted from the route.\n * Can be modified directly (e.g., `state.pathParams.id = \"456\"`).\n */\n get pathParams(): Record<string, string> {\n return this.#pathParams;\n }\n\n /**\n * URLSearchParams for query parameters.\n * Can be modified using URLSearchParams API (e.g., `state.searchParams.set(\"key\", \"value\")`).\n */\n get searchParams(): URLSearchParams {\n return this.#searchParams;\n }\n\n /**\n * Request headers.\n * Can be modified using Headers API (e.g., `state.headers.set(\"X-Custom\", \"value\")`).\n */\n get headers(): Headers {\n return this.#headers;\n }\n\n /**\n * Get the current body value.\n * Returns the override if set, otherwise the initial body.\n */\n get body(): RequestBodyType {\n return this.#bodyOverride !== undefined ? this.#bodyOverride : this.#initialBody;\n }\n\n /**\n * Override the request body.\n * This allows middleware to replace the body that will be seen by the handler.\n *\n * @param body - The new body value\n *\n * @example\n * ```typescript\n * // In middleware\n * state.setBody({ modifiedField: \"new value\" });\n * ```\n */\n setBody(body: RequestBodyType): void {\n this.#bodyOverride = body;\n }\n\n /**\n * Check if the body has been overridden by middleware.\n */\n get hasBodyOverride(): boolean {\n return this.#bodyOverride !== undefined;\n }\n}\n","import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ExtractRouteByPath, ExtractRoutePath } from \"../client/client\";\nimport type { HTTPMethod } from \"./api\";\nimport type { ExtractPathParams } from \"./internal/path\";\nimport type { AnyFragnoRouteConfig } from \"./route\";\nimport { RequestInputContext } from \"./request-input-context\";\nimport { OutputContext, RequestOutputContext } from \"./request-output-context\";\nimport { MutableRequestState } from \"./mutable-request-state\";\n\nexport type FragnoMiddlewareCallback<\n TRoutes extends readonly AnyFragnoRouteConfig[],\n TDeps,\n TServices extends Record<string, unknown>,\n> = (\n inputContext: RequestMiddlewareInputContext<TRoutes>,\n outputContext: RequestMiddlewareOutputContext<TDeps, TServices>,\n) => Promise<Response | undefined> | Response | undefined;\n\nexport interface RequestMiddlewareOptions {\n path: string;\n method: HTTPMethod;\n request: Request;\n state: MutableRequestState;\n}\n\nexport class RequestMiddlewareOutputContext<\n const TDeps,\n const TServices extends Record<string, unknown>,\n> extends OutputContext<unknown, string> {\n readonly #deps: TDeps;\n readonly #services: TServices;\n\n constructor(deps: TDeps, services: TServices) {\n super();\n this.#deps = deps;\n this.#services = services;\n }\n\n get deps(): TDeps {\n return this.#deps;\n }\n\n get services(): TServices {\n return this.#services;\n }\n}\n\nexport class RequestMiddlewareInputContext<const TRoutes extends readonly AnyFragnoRouteConfig[]> {\n readonly #options: RequestMiddlewareOptions;\n readonly #route: TRoutes[number];\n readonly #state: MutableRequestState;\n\n constructor(routes: TRoutes, options: RequestMiddlewareOptions) {\n this.#options = options;\n this.#state = options.state;\n\n const route = routes.find(\n (route) => route.path === options.path && route.method === options.method,\n );\n\n if (!route) {\n throw new Error(`Route not found: ${options.path} ${options.method}`);\n }\n\n this.#route = route;\n }\n\n get path(): string {\n return this.#options.path;\n }\n\n get method(): HTTPMethod {\n return this.#options.method;\n }\n\n get pathParams(): Record<string, string> {\n return this.#state.pathParams;\n }\n\n get queryParams(): URLSearchParams {\n return this.#state.searchParams;\n }\n\n get headers(): Headers {\n return this.#state.headers;\n }\n\n get inputSchema(): StandardSchemaV1 | undefined {\n return this.#route.inputSchema;\n }\n\n get outputSchema(): StandardSchemaV1 | undefined {\n return this.#route.outputSchema;\n }\n\n /**\n * Access to the mutable request state.\n * Use this to modify query parameters, path parameters, or request body.\n *\n * @example\n * ```typescript\n * // Modify body\n * requestState.setBody({ modified: true });\n *\n * // Query params are already accessible via queryParams getter\n * // Path params are already accessible via pathParams getter\n * ```\n */\n get requestState(): MutableRequestState {\n return this.#state;\n }\n\n // Defined as a field so that `this` reference stays in tact when destructuring\n ifMatchesRoute = async <\n const TMethod extends HTTPMethod,\n const TPath extends ExtractRoutePath<TRoutes>,\n const TRoute extends ExtractRouteByPath<TRoutes, TPath, TMethod> = ExtractRouteByPath<\n TRoutes,\n TPath,\n TMethod\n >,\n >(\n method: TMethod,\n path: TPath,\n handler: (\n ...args: Parameters<TRoute[\"handler\"]>\n ) => Promise<Response | undefined | void> | Response | undefined | void,\n ): Promise<Response | undefined> => {\n if (this.path !== path || this.method !== method) {\n return undefined;\n }\n\n // TODO(Wilco): We should support reading/modifying headers here.\n const inputContext = await RequestInputContext.fromRequest({\n request: this.#options.request,\n method: this.#options.method,\n path: path,\n pathParams: this.pathParams as ExtractPathParams<TPath>,\n inputSchema: this.#route.inputSchema,\n state: this.#state,\n });\n\n const outputContext = new RequestOutputContext(this.#route.outputSchema);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (handler as any)(inputContext, outputContext);\n };\n}\n","import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { type FragnoRouteConfig, type HTTPMethod } from \"./api\";\nimport { FragnoApiError } from \"./error\";\nimport { getMountRoute } from \"./internal/route\";\nimport { addRoute, createRouter, findRoute } from \"rou3\";\nimport { RequestInputContext } from \"./request-input-context\";\nimport type { ExtractPathParams } from \"./internal/path\";\nimport { RequestOutputContext } from \"./request-output-context\";\nimport {\n type AnyFragnoRouteConfig,\n type AnyRouteOrFactory,\n type FlattenRouteFactories,\n resolveRouteFactories,\n} from \"./route\";\nimport {\n RequestMiddlewareInputContext,\n RequestMiddlewareOutputContext,\n type FragnoMiddlewareCallback,\n} from \"./request-middleware\";\nimport type { FragmentDefinition } from \"./fragment-builder\";\nimport { MutableRequestState } from \"./mutable-request-state\";\n\nexport interface FragnoPublicConfig {\n mountRoute?: string;\n}\n\nexport interface FragnoPublicClientConfig {\n mountRoute?: string;\n baseUrl?: string;\n}\n\ntype AstroHandlers = {\n ALL: (req: Request) => Promise<Response>;\n};\n\ntype ReactRouterHandlers = {\n loader: (args: { request: Request }) => Promise<Response>;\n action: (args: { request: Request }) => Promise<Response>;\n};\n\ntype SolidStartHandlers = {\n GET: (args: { request: Request }) => Promise<Response>;\n POST: (args: { request: Request }) => Promise<Response>;\n PUT: (args: { request: Request }) => Promise<Response>;\n DELETE: (args: { request: Request }) => Promise<Response>;\n PATCH: (args: { request: Request }) => Promise<Response>;\n HEAD: (args: { request: Request }) => Promise<Response>;\n OPTIONS: (args: { request: Request }) => Promise<Response>;\n};\n\ntype StandardHandlers = {\n GET: (req: Request) => Promise<Response>;\n POST: (req: Request) => Promise<Response>;\n PUT: (req: Request) => Promise<Response>;\n DELETE: (req: Request) => Promise<Response>;\n PATCH: (req: Request) => Promise<Response>;\n HEAD: (req: Request) => Promise<Response>;\n OPTIONS: (req: Request) => Promise<Response>;\n};\n\ntype HandlersByFramework = {\n astro: AstroHandlers;\n \"react-router\": ReactRouterHandlers;\n \"next-js\": StandardHandlers;\n \"svelte-kit\": StandardHandlers;\n \"solid-start\": SolidStartHandlers;\n};\n\n// Not actually a symbol, since we might be dealing with multiple instances of this code.\nexport const instantiatedFragmentFakeSymbol = \"$fragno-instantiated-fragment\" as const;\n\ntype FullstackFrameworks = keyof HandlersByFramework;\n\nexport interface FragnoInstantiatedFragment<\n TRoutes extends readonly AnyFragnoRouteConfig[] = [],\n TDeps = {},\n TServices extends Record<string, unknown> = Record<string, unknown>,\n TAdditionalContext extends Record<string, unknown> = {},\n> {\n [instantiatedFragmentFakeSymbol]: typeof instantiatedFragmentFakeSymbol;\n\n config: FragnoFragmentSharedConfig<TRoutes>;\n deps: TDeps;\n services: TServices;\n additionalContext?: TAdditionalContext;\n handlersFor: <T extends FullstackFrameworks>(framework: T) => HandlersByFramework[T];\n handler: (req: Request) => Promise<Response>;\n mountRoute: string;\n withMiddleware: (\n handler: FragnoMiddlewareCallback<TRoutes, TDeps, TServices>,\n ) => FragnoInstantiatedFragment<TRoutes, TDeps, TServices, TAdditionalContext>;\n}\n\nexport interface FragnoFragmentSharedConfig<\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >[],\n> {\n name: string;\n routes: TRoutes;\n}\n\nexport type AnyFragnoFragmentSharedConfig = FragnoFragmentSharedConfig<\n readonly AnyFragnoRouteConfig[]\n>;\n\nexport function createFragment<\n const TConfig,\n const TDeps,\n const TServices extends Record<string, unknown>,\n const TRoutesOrFactories extends readonly AnyRouteOrFactory[],\n const TAdditionalContext extends Record<string, unknown>,\n const TOptions extends FragnoPublicConfig,\n>(\n fragmentBuilder: {\n definition: FragmentDefinition<TConfig, TDeps, TServices, TAdditionalContext>;\n $requiredOptions: TOptions;\n },\n config: TConfig,\n routesOrFactories: TRoutesOrFactories,\n options: TOptions,\n): FragnoInstantiatedFragment<\n FlattenRouteFactories<TRoutesOrFactories>,\n TDeps,\n TServices,\n TAdditionalContext\n> {\n const definition = fragmentBuilder.definition;\n\n const dependencies = definition.dependencies?.(config, options) ?? ({} as TDeps);\n const services = definition.services?.(config, options, dependencies) ?? ({} as TServices);\n\n const context = { config, deps: dependencies, services };\n const routes = resolveRouteFactories(context, routesOrFactories);\n\n const mountRoute = getMountRoute({\n name: definition.name,\n mountRoute: options.mountRoute,\n });\n\n const router =\n createRouter<\n FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string\n >\n >();\n\n let middlewareHandler:\n | FragnoMiddlewareCallback<FlattenRouteFactories<TRoutesOrFactories>, TDeps, TServices>\n | undefined;\n\n for (const routeConfig of routes) {\n addRoute(router, routeConfig.method.toUpperCase(), routeConfig.path, routeConfig);\n }\n\n const fragment: FragnoInstantiatedFragment<\n FlattenRouteFactories<TRoutesOrFactories>,\n TDeps,\n TServices,\n TAdditionalContext & TOptions\n > = {\n [instantiatedFragmentFakeSymbol]: instantiatedFragmentFakeSymbol,\n mountRoute,\n config: {\n name: definition.name,\n routes,\n },\n services,\n deps: dependencies,\n additionalContext: {\n ...definition.additionalContext,\n ...options,\n } as TAdditionalContext & TOptions,\n withMiddleware: (handler) => {\n if (middlewareHandler) {\n throw new Error(\"Middleware already set\");\n }\n\n middlewareHandler = handler;\n\n return fragment;\n },\n handlersFor: <T extends FullstackFrameworks>(framework: T): HandlersByFramework[T] => {\n const handler = fragment.handler;\n\n // LLMs hallucinate these values sometimes, solution isn't obvious so we throw this error\n // @ts-expect-error TS2367\n if (framework === \"h3\" || framework === \"nuxt\") {\n throw new Error(`To get handlers for h3, use the 'fromWebHandler' utility function:\n import { fromWebHandler } from \"h3\";\n export default fromWebHandler(myFragment().handler);`);\n }\n const allHandlers = {\n astro: { ALL: handler },\n \"react-router\": {\n loader: ({ request }: { request: Request }) => handler(request),\n action: ({ request }: { request: Request }) => handler(request),\n },\n \"next-js\": {\n GET: handler,\n POST: handler,\n PUT: handler,\n DELETE: handler,\n PATCH: handler,\n HEAD: handler,\n OPTIONS: handler,\n },\n \"svelte-kit\": {\n GET: handler,\n POST: handler,\n PUT: handler,\n DELETE: handler,\n PATCH: handler,\n HEAD: handler,\n OPTIONS: handler,\n },\n \"solid-start\": {\n GET: ({ request }: { request: Request }) => handler(request),\n POST: ({ request }: { request: Request }) => handler(request),\n PUT: ({ request }: { request: Request }) => handler(request),\n DELETE: ({ request }: { request: Request }) => handler(request),\n PATCH: ({ request }: { request: Request }) => handler(request),\n HEAD: ({ request }: { request: Request }) => handler(request),\n OPTIONS: ({ request }: { request: Request }) => handler(request),\n },\n } satisfies HandlersByFramework;\n\n return allHandlers[framework];\n },\n handler: async (req: Request) => {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n const matchRoute = pathname.startsWith(mountRoute) ? pathname.slice(mountRoute.length) : null;\n\n if (matchRoute === null) {\n return Response.json(\n {\n error:\n `Fragno: Route for '${definition.name}' not found. Is the fragment mounted on the right route? ` +\n `Expecting: '${mountRoute}'.`,\n code: \"ROUTE_NOT_FOUND\",\n },\n { status: 404 },\n );\n }\n\n const route = findRoute(router, req.method, matchRoute);\n\n if (!route) {\n return Response.json(\n { error: `Fragno: Route for '${definition.name}' not found`, code: \"ROUTE_NOT_FOUND\" },\n { status: 404 },\n );\n }\n\n const { handler, inputSchema, outputSchema, path } = route.data;\n\n const outputContext = new RequestOutputContext(outputSchema);\n\n // Create mutable request state that can be modified by middleware\n // Clone the request to avoid consuming the body stream\n const clonedReq = req.clone();\n const requestBody =\n clonedReq.body instanceof ReadableStream ? await clonedReq.json() : undefined;\n\n const requestState = new MutableRequestState({\n pathParams: route.params ?? {},\n searchParams: url.searchParams,\n body: requestBody,\n headers: new Headers(req.headers),\n });\n\n if (middlewareHandler) {\n const middlewareInputContext = new RequestMiddlewareInputContext(routes, {\n method: req.method as HTTPMethod,\n path,\n request: req,\n state: requestState,\n });\n\n const middlewareOutputContext = new RequestMiddlewareOutputContext(dependencies, services);\n\n try {\n const middlewareResult = await middlewareHandler(\n middlewareInputContext,\n middlewareOutputContext,\n );\n if (middlewareResult !== undefined) {\n return middlewareResult;\n }\n } catch (error) {\n console.error(\"Error in middleware\", error);\n\n if (error instanceof FragnoApiError) {\n // TODO: If a validation error occurs in middleware (when calling `await input.valid()`)\n // the processing is short-circuited and a potential `catch` block around the call\n // to `input.valid()` in the actual handler will not be executed.\n return error.toResponse();\n }\n\n return Response.json(\n { error: \"Internal server error\", code: \"INTERNAL_SERVER_ERROR\" },\n { status: 500 },\n );\n }\n }\n\n const inputContext = await RequestInputContext.fromRequest({\n request: req,\n method: req.method,\n path,\n pathParams: (route.params ?? {}) as ExtractPathParams<typeof path>,\n inputSchema,\n state: requestState,\n });\n\n try {\n const result = await handler(inputContext, outputContext);\n return result;\n } catch (error) {\n console.error(\"Error in handler\", error);\n\n if (error instanceof FragnoApiError) {\n return error.toResponse();\n }\n\n return Response.json(\n { error: \"Internal server error\", code: \"INTERNAL_SERVER_ERROR\" },\n { status: 500 },\n );\n }\n },\n };\n\n return fragment;\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { i as getFinalStoreValues, r as cleanStores } from "../ssr-CamRrMc0.js";
1
+ import { i as getFinalStoreValues, r as cleanStores } from "../ssr-BByDVfFD.js";
2
2
 
3
3
  //#region src/integrations/react-ssr.ts
4
4
  /**
package/dist/mod.d.ts CHANGED
@@ -1,3 +1,3 @@
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-D6-oLYnH.js";
1
+ import { t as FragnoRouteConfig } from "./api-BX90b4-D.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-BZr2JkuW.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/dist/mod.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { n as defineFragment, t as FragmentBuilder } from "./fragment-builder-DOnCVBqc.js";
2
2
  import "./api-DngJDcmO.js";
3
- import { n as defineRoutes, t as defineRoute } from "./route-B4RbOWjd.js";
4
- import { t as createFragment } from "./fragment-instantiation-f4AhwQss.js";
3
+ import "./route-CTxjMtGZ.js";
4
+ import { n as defineRoutes, t as defineRoute } from "./route-D1MZR6JL.js";
5
+ import { t as createFragment } from "./fragment-instantiation-DMw8OKMC.js";
5
6
 
6
7
  export { FragmentBuilder, createFragment, defineFragment, defineRoute, defineRoutes };
@@ -0,0 +1,10 @@
1
+ //#region src/api/internal/route.ts
2
+ function getMountRoute(opts) {
3
+ const mountRoute = opts.mountRoute ?? `/api/${opts.name}`;
4
+ if (mountRoute.endsWith("/")) return mountRoute.slice(0, -1);
5
+ return mountRoute;
6
+ }
7
+
8
+ //#endregion
9
+ export { getMountRoute as t };
10
+ //# sourceMappingURL=route-CTxjMtGZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-CTxjMtGZ.js","names":[],"sources":["../src/api/internal/route.ts"],"sourcesContent":["export function getMountRoute(opts: { mountRoute?: string; name: string }) {\n const mountRoute = opts.mountRoute ?? `/api/${opts.name}`;\n\n if (mountRoute.endsWith(\"/\")) {\n return mountRoute.slice(0, -1);\n }\n\n return mountRoute;\n}\n"],"mappings":";AAAA,SAAgB,cAAc,MAA6C;CACzE,MAAM,aAAa,KAAK,cAAc,QAAQ,KAAK;AAEnD,KAAI,WAAW,SAAS,IAAI,CAC1B,QAAO,WAAW,MAAM,GAAG,GAAG;AAGhC,QAAO"}