@fragno-dev/core 0.1.11 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +50 -42
- package/CHANGELOG.md +51 -0
- package/dist/api/api.d.ts +19 -1
- package/dist/api/api.d.ts.map +1 -1
- package/dist/api/api.js.map +1 -1
- package/dist/api/fragment-definition-builder.d.ts +17 -7
- package/dist/api/fragment-definition-builder.d.ts.map +1 -1
- package/dist/api/fragment-definition-builder.js +3 -2
- package/dist/api/fragment-definition-builder.js.map +1 -1
- package/dist/api/fragment-instantiator.d.ts +23 -16
- package/dist/api/fragment-instantiator.d.ts.map +1 -1
- package/dist/api/fragment-instantiator.js +163 -19
- package/dist/api/fragment-instantiator.js.map +1 -1
- package/dist/api/request-input-context.d.ts +57 -1
- package/dist/api/request-input-context.d.ts.map +1 -1
- package/dist/api/request-input-context.js +67 -0
- package/dist/api/request-input-context.js.map +1 -1
- package/dist/api/request-middleware.d.ts +1 -1
- package/dist/api/request-middleware.d.ts.map +1 -1
- package/dist/api/request-middleware.js.map +1 -1
- package/dist/api/route.d.ts +7 -7
- package/dist/api/route.d.ts.map +1 -1
- package/dist/api/route.js.map +1 -1
- package/dist/client/client.d.ts +4 -3
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +103 -7
- package/dist/client/client.js.map +1 -1
- package/dist/client/vue.d.ts +7 -3
- package/dist/client/vue.d.ts.map +1 -1
- package/dist/client/vue.js +16 -1
- package/dist/client/vue.js.map +1 -1
- package/dist/internal/trace-context.d.ts +23 -0
- package/dist/internal/trace-context.d.ts.map +1 -0
- package/dist/internal/trace-context.js +14 -0
- package/dist/internal/trace-context.js.map +1 -0
- package/dist/mod-client.d.ts +3 -17
- package/dist/mod-client.d.ts.map +1 -1
- package/dist/mod-client.js +20 -10
- package/dist/mod-client.js.map +1 -1
- package/dist/mod.d.ts +3 -2
- package/dist/mod.js +2 -1
- package/dist/runtime.d.ts +15 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +33 -0
- package/dist/runtime.js.map +1 -0
- package/dist/test/test.d.ts +2 -2
- package/dist/test/test.d.ts.map +1 -1
- package/dist/test/test.js.map +1 -1
- package/package.json +23 -17
- package/src/api/api.ts +22 -0
- package/src/api/fragment-definition-builder.ts +36 -17
- package/src/api/fragment-instantiator.test.ts +286 -0
- package/src/api/fragment-instantiator.ts +338 -31
- package/src/api/internal/path-runtime.test.ts +7 -0
- package/src/api/request-input-context.test.ts +152 -0
- package/src/api/request-input-context.ts +85 -0
- package/src/api/request-middleware.test.ts +47 -1
- package/src/api/request-middleware.ts +1 -1
- package/src/api/route.ts +7 -2
- package/src/client/client.test.ts +195 -0
- package/src/client/client.ts +185 -10
- package/src/client/vue.test.ts +253 -3
- package/src/client/vue.ts +44 -1
- package/src/internal/trace-context.ts +35 -0
- package/src/mod-client.ts +51 -7
- package/src/mod.ts +6 -1
- package/src/runtime.ts +48 -0
- package/src/test/test.ts +13 -4
- package/tsdown.config.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-input-context.d.ts","names":[],"sources":["../../src/api/request-input-context.ts"],"sourcesContent":[],"mappings":";;;;;;KAKY,eAAA,aAER,WACA;
|
|
1
|
+
{"version":3,"file":"request-input-context.d.ts","names":[],"sources":["../../src/api/request-input-context.ts"],"sourcesContent":[],"mappings":";;;;;;KAKY,eAAA,aAER,WACA,OACA,eAAe;cAIN,wEAEU;EAVX,CAAA,OAAA;EAER,WAAA,CAAA,MAAA,EAAA;IACA,IAAA,EAoBM,KApBN;IACe,MAAA,EAAA,MAAA;IAAf,UAAA,EAqBY,iBArBZ,CAqB8B,KArB9B,CAAA;IAAc,YAAA,EAsBA,eAtBA;IAIL,UAAA,EAmBG,eAnBgB;IAET,OAAA,CAAA,EAAA,MAAA;IAab,OAAA,EAMG,OANH;IAEwB,OAAA,CAAA,EAKpB,OALoB;IAAlB,WAAA,CAAA,EAME,YANF;IACE,mBAAA,CAAA,EAAA,OAAA;EACF,CAAA;EAEH;;;EAqBY,OAAA,WAAA,CAAA,cAAA,MAAA,EAAA,qBAAA,gBAAA,GAAA,SAAA,GAAA,SAAA,CAAA,CAAA,MAAA,EAAA;IAEZ,OAAA,EAAA,OAAA;IAEH,MAAA,EAAA,MAAA;IACwB,IAAA,EADxB,KACwB;IAAlB,UAAA,EAAA,iBAAA,CAAkB,KAAlB,CAAA;IACE,WAAA,CAAA,EAAA,YAAA;IAEP,mBAAA,CAAA,EAAA,OAAA;IAEuB,KAAA,EAFvB,mBAEuB;IAAO,OAAA,CAAA,EAAA,MAAA;EAA3B,CAAA,CAAA,EAAR,OAAQ,CAAA,mBAAA,CAAoB,KAApB,EAA2B,YAA3B,CAAA,CAAA;EAAR;;;EA0BkC,OAAA,cAAA,CAAA,cAAA,MAAA,EAAA,qBANf,gBAMe,GAAA,SAAA,GAAA,SAAA,CAAA,CAAA,MAAA,EAAA;IAAlB,MAAA,EAAA,KAAA;IACG,IAAA,EAFT,KAES;IACL,UAAA,EAFE,iBAEF,CAFoB,KAEpB,CAAA;IAGM,YAAA,CAAA,EAJD,eAIC;IAAR,OAAA,CAAA,EAHE,OAGF;EACF,CAAA,GAAA;IACwB,MAAA,EAFtB,OAEsB,CAFd,UAEc,EAAA,KAAA,CAAA;IAAlB,IAAA,EADN,KACM;IACG,UAAA,EADH,iBACG,CADe,KACf,CAAA;IACL,YAAA,CAAA,EADK,eACL;IACJ,OAAA,CAAA,EADI,OACJ;IACQ,IAAA,EADR,eACQ;IAEC,WAAA,CAAA,EAFD,YAEC;EAAO,CAAA,CAAA,EAA3B,mBAA2B,CAAP,KAAO,EAAA,YAAA,CAAA;EAA3B;;;EA8Be,IAAA,MAAA,CAAA,CAAA,EAAA,MAAA;EAOL;;;;EA6EC,IAAA,IAAA,CAAA,CAAA,EA3FF,KA2FE;EAoBD;;;;EAM4B,IAAA,UAAA,CAAA,CAAA,EA9GvB,iBA8GuB,CA9GL,KA8GK,CAAA;EAA7B;;;;eAvGC;;;;;iBAOE;;;;;;;;;;;;;;;;;;;;;;;;cA8BH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAwCE,eAAe;;;;;;;;;eAoBhB;YAGC;iBACK,QACX,qBAAqB,mBACjB,gBAAA,CAAiB,YAAY"}
|
|
@@ -91,6 +91,72 @@ var RequestInputContext = class RequestInputContext {
|
|
|
91
91
|
return this.#body;
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
|
+
* Access the request body as FormData.
|
|
95
|
+
*
|
|
96
|
+
* Use this method when handling file uploads or multipart form submissions.
|
|
97
|
+
* The request must have been sent with Content-Type: multipart/form-data.
|
|
98
|
+
*
|
|
99
|
+
* @throws Error if the request body is not FormData
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* defineRoute({
|
|
104
|
+
* method: "POST",
|
|
105
|
+
* path: "/upload",
|
|
106
|
+
* async handler(ctx, res) {
|
|
107
|
+
* const formData = ctx.formData();
|
|
108
|
+
* const file = formData.get("file") as File;
|
|
109
|
+
* const description = formData.get("description") as string;
|
|
110
|
+
* // ... process file
|
|
111
|
+
* }
|
|
112
|
+
* });
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
formData() {
|
|
116
|
+
if (!(this.#parsedBody instanceof FormData)) throw new Error("Request body is not FormData. Ensure the request was sent with Content-Type: multipart/form-data.");
|
|
117
|
+
return this.#parsedBody;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if the request body is FormData.
|
|
121
|
+
*
|
|
122
|
+
* Useful for routes that accept both JSON and FormData payloads.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* defineRoute({
|
|
127
|
+
* method: "POST",
|
|
128
|
+
* path: "/upload",
|
|
129
|
+
* async handler(ctx, res) {
|
|
130
|
+
* if (ctx.isFormData()) {
|
|
131
|
+
* const formData = ctx.formData();
|
|
132
|
+
* // handle file upload
|
|
133
|
+
* } else {
|
|
134
|
+
* const json = await ctx.input.valid();
|
|
135
|
+
* // handle JSON payload
|
|
136
|
+
* }
|
|
137
|
+
* }
|
|
138
|
+
* });
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
isFormData() {
|
|
142
|
+
return this.#parsedBody instanceof FormData;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Access the request body as a ReadableStream (application/octet-stream).
|
|
146
|
+
*
|
|
147
|
+
* @throws Error if the request body is not a ReadableStream
|
|
148
|
+
*/
|
|
149
|
+
bodyStream() {
|
|
150
|
+
if (!(this.#parsedBody instanceof ReadableStream)) throw new Error("Request body is not a ReadableStream. Ensure the request was sent with Content-Type: application/octet-stream.");
|
|
151
|
+
return this.#parsedBody;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if the request body is a ReadableStream.
|
|
155
|
+
*/
|
|
156
|
+
isBodyStream() {
|
|
157
|
+
return this.#parsedBody instanceof ReadableStream;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
94
160
|
* Input validation context (only if inputSchema is defined)
|
|
95
161
|
* @remarks `InputContext`
|
|
96
162
|
*/
|
|
@@ -107,6 +173,7 @@ var RequestInputContext = class RequestInputContext {
|
|
|
107
173
|
async #validateInput() {
|
|
108
174
|
if (!this.#inputSchema) throw new Error("No input schema defined for this route");
|
|
109
175
|
if (this.#parsedBody instanceof FormData || this.#parsedBody instanceof Blob) throw new Error("Schema validation is only supported for JSON data, not FormData or Blob");
|
|
176
|
+
if (this.#parsedBody instanceof ReadableStream) throw new Error("Schema validation is only supported for JSON data, not FormData, Blob, or ReadableStream");
|
|
110
177
|
const result = await this.#inputSchema["~standard"].validate(this.#parsedBody);
|
|
111
178
|
if (result.issues) throw new FragnoApiValidationError("Validation failed", result.issues);
|
|
112
179
|
return result.value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-input-context.js","names":["#path","#method","#pathParams","#searchParams","#headers","#body","#parsedBody","#inputSchema","#shouldValidateInput","#validateInput"],"sources":["../../src/api/request-input-context.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ExtractPathParams } from \"./internal/path\";\nimport { FragnoApiValidationError, type HTTPMethod } from \"./api\";\nimport type { MutableRequestState } from \"./mutable-request-state\";\n\nexport type RequestBodyType =\n | unknown // JSON\n | FormData\n | Blob\n | null\n | undefined;\n\nexport class RequestInputContext<\n TPath extends string = string,\n TInputSchema extends StandardSchemaV1 | undefined = undefined,\n> {\n readonly #path: TPath;\n readonly #method: string;\n readonly #pathParams: ExtractPathParams<TPath>;\n readonly #searchParams: URLSearchParams;\n readonly #headers: Headers;\n readonly #body: string | undefined;\n readonly #parsedBody: RequestBodyType;\n readonly #inputSchema: TInputSchema | undefined;\n readonly #shouldValidateInput: boolean;\n\n constructor(config: {\n path: TPath;\n method: string;\n pathParams: ExtractPathParams<TPath>;\n searchParams: URLSearchParams;\n parsedBody: RequestBodyType;\n rawBody?: string;\n headers: Headers;\n request?: Request;\n inputSchema?: TInputSchema;\n shouldValidateInput?: boolean;\n }) {\n this.#path = config.path;\n this.#method = config.method;\n this.#pathParams = config.pathParams;\n this.#searchParams = config.searchParams;\n this.#headers = config.headers;\n this.#body = config.rawBody;\n this.#parsedBody = config.parsedBody;\n this.#inputSchema = config.inputSchema;\n this.#shouldValidateInput = config.shouldValidateInput ?? true;\n }\n\n /**\n * Create a RequestContext from a Request object for server-side handling\n */\n static async fromRequest<\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined = undefined,\n >(config: {\n request: Request;\n method: string;\n path: TPath;\n pathParams: ExtractPathParams<TPath>;\n inputSchema?: TInputSchema;\n shouldValidateInput?: boolean;\n state: MutableRequestState;\n rawBody?: string;\n }): Promise<RequestInputContext<TPath, TInputSchema>> {\n // Use the mutable state (potentially modified by middleware)\n return new RequestInputContext({\n method: config.method,\n path: config.path,\n pathParams: config.state.pathParams as ExtractPathParams<TPath>,\n searchParams: config.state.searchParams,\n headers: config.state.headers,\n parsedBody: config.state.body,\n rawBody: config.rawBody,\n inputSchema: config.inputSchema,\n shouldValidateInput: config.shouldValidateInput,\n });\n }\n\n /**\n * Create a RequestContext for server-side rendering contexts (no Request object)\n */\n static fromSSRContext<\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined = undefined,\n >(\n config:\n | {\n method: \"GET\";\n path: TPath;\n pathParams: ExtractPathParams<TPath>;\n searchParams?: URLSearchParams;\n headers?: Headers;\n }\n | {\n method: Exclude<HTTPMethod, \"GET\">;\n path: TPath;\n pathParams: ExtractPathParams<TPath>;\n searchParams?: URLSearchParams;\n headers?: Headers;\n body: RequestBodyType;\n inputSchema?: TInputSchema;\n },\n ): RequestInputContext<TPath, TInputSchema> {\n return new RequestInputContext({\n method: config.method,\n path: config.path,\n pathParams: config.pathParams,\n searchParams: config.searchParams ?? new URLSearchParams(),\n headers: config.headers ?? new Headers(),\n parsedBody: \"body\" in config ? config.body : undefined,\n inputSchema: \"inputSchema\" in config ? config.inputSchema : undefined,\n shouldValidateInput: false, // No input validation in SSR context\n });\n }\n\n /**\n * The HTTP method as string (e.g., `GET`, `POST`)\n */\n get method(): string {\n return this.#method;\n }\n /**\n * The matched route path (e.g., `/users/:id`)\n * @remarks `string`\n */\n get path(): TPath {\n return this.#path;\n }\n /**\n * Extracted path parameters as object (e.g., `{ id: '123' }`)\n * @remarks `Record<string, string>`\n */\n get pathParams(): ExtractPathParams<TPath> {\n return this.#pathParams;\n }\n /**\n * [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object for query parameters\n * @remarks `URLSearchParams`\n */\n get query(): URLSearchParams {\n return this.#searchParams;\n }\n /**\n * [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object for request headers\n * @remarks `Headers`\n */\n get headers(): Headers {\n return this.#headers;\n }\n\n get rawBody(): string | undefined {\n return this.#body;\n }\n\n /**\n * Input validation context (only if inputSchema is defined)\n * @remarks `InputContext`\n */\n get input(): TInputSchema extends undefined\n ? undefined\n : {\n schema: TInputSchema;\n valid: () => Promise<\n TInputSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TInputSchema>\n : unknown\n >;\n } {\n if (!this.#inputSchema) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return undefined as any;\n }\n\n return {\n schema: this.#inputSchema,\n valid: async () => {\n if (!this.#shouldValidateInput) {\n // In SSR context, return the body directly without validation\n return this.#parsedBody;\n }\n\n return this.#validateInput();\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n }\n\n async #validateInput(): Promise<\n TInputSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<TInputSchema> : never\n > {\n if (!this.#inputSchema) {\n throw new Error(\"No input schema defined for this route\");\n }\n\n if (this.#parsedBody instanceof FormData || this.#parsedBody instanceof Blob) {\n throw new Error(\"Schema validation is only supported for JSON data, not FormData or Blob\");\n }\n\n const result = await this.#inputSchema[\"~standard\"].validate(this.#parsedBody);\n\n if (result.issues) {\n throw new FragnoApiValidationError(\"Validation failed\", result.issues);\n }\n\n return result.value as TInputSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TInputSchema>\n : never;\n }\n}\n"],"mappings":";;;AAYA,IAAa,sBAAb,MAAa,oBAGX;CACA,CAASA;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CAET,YAAY,QAWT;AACD,QAAKR,OAAQ,OAAO;AACpB,QAAKC,SAAU,OAAO;AACtB,QAAKC,aAAc,OAAO;AAC1B,QAAKC,eAAgB,OAAO;AAC5B,QAAKC,UAAW,OAAO;AACvB,QAAKC,OAAQ,OAAO;AACpB,QAAKC,aAAc,OAAO;AAC1B,QAAKC,cAAe,OAAO;AAC3B,QAAKC,sBAAuB,OAAO,uBAAuB;;;;;CAM5D,aAAa,YAGX,QASoD;AAEpD,SAAO,IAAI,oBAAoB;GAC7B,QAAQ,OAAO;GACf,MAAM,OAAO;GACb,YAAY,OAAO,MAAM;GACzB,cAAc,OAAO,MAAM;GAC3B,SAAS,OAAO,MAAM;GACtB,YAAY,OAAO,MAAM;GACzB,SAAS,OAAO;GAChB,aAAa,OAAO;GACpB,qBAAqB,OAAO;GAC7B,CAAC;;;;;CAMJ,OAAO,eAIL,QAiB0C;AAC1C,SAAO,IAAI,oBAAoB;GAC7B,QAAQ,OAAO;GACf,MAAM,OAAO;GACb,YAAY,OAAO;GACnB,cAAc,OAAO,gBAAgB,IAAI,iBAAiB;GAC1D,SAAS,OAAO,WAAW,IAAI,SAAS;GACxC,YAAY,UAAU,SAAS,OAAO,OAAO;GAC7C,aAAa,iBAAiB,SAAS,OAAO,cAAc;GAC5D,qBAAqB;GACtB,CAAC;;;;;CAMJ,IAAI,SAAiB;AACnB,SAAO,MAAKP;;;;;;CAMd,IAAI,OAAc;AAChB,SAAO,MAAKD;;;;;;CAMd,IAAI,aAAuC;AACzC,SAAO,MAAKE;;;;;;CAMd,IAAI,QAAyB;AAC3B,SAAO,MAAKC;;;;;;CAMd,IAAI,UAAmB;AACrB,SAAO,MAAKC;;CAGd,IAAI,UAA8B;AAChC,SAAO,MAAKC;;;;;;CAOd,IAAI,QASE;AACJ,MAAI,CAAC,MAAKE,YAER;AAGF,SAAO;GACL,QAAQ,MAAKA;GACb,OAAO,YAAY;AACjB,QAAI,CAAC,MAAKC,oBAER,QAAO,MAAKF;AAGd,WAAO,MAAKG,eAAgB;;GAG/B;;CAGH,OAAMA,gBAEJ;AACA,MAAI,CAAC,MAAKF,YACR,OAAM,IAAI,MAAM,yCAAyC;AAG3D,MAAI,MAAKD,sBAAuB,YAAY,MAAKA,sBAAuB,KACtE,OAAM,IAAI,MAAM,0EAA0E;EAG5F,MAAM,SAAS,MAAM,MAAKC,YAAa,aAAa,SAAS,MAAKD,WAAY;AAE9E,MAAI,OAAO,OACT,OAAM,IAAI,yBAAyB,qBAAqB,OAAO,OAAO;AAGxE,SAAO,OAAO"}
|
|
1
|
+
{"version":3,"file":"request-input-context.js","names":["#path","#method","#pathParams","#searchParams","#headers","#body","#parsedBody","#inputSchema","#shouldValidateInput","#validateInput"],"sources":["../../src/api/request-input-context.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ExtractPathParams } from \"./internal/path\";\nimport { FragnoApiValidationError, type HTTPMethod } from \"./api\";\nimport type { MutableRequestState } from \"./mutable-request-state\";\n\nexport type RequestBodyType =\n | unknown // JSON\n | FormData\n | Blob\n | ReadableStream<Uint8Array>\n | null\n | undefined;\n\nexport class RequestInputContext<\n TPath extends string = string,\n TInputSchema extends StandardSchemaV1 | undefined = undefined,\n> {\n readonly #path: TPath;\n readonly #method: string;\n readonly #pathParams: ExtractPathParams<TPath>;\n readonly #searchParams: URLSearchParams;\n readonly #headers: Headers;\n readonly #body: string | undefined;\n readonly #parsedBody: RequestBodyType;\n readonly #inputSchema: TInputSchema | undefined;\n readonly #shouldValidateInput: boolean;\n\n constructor(config: {\n path: TPath;\n method: string;\n pathParams: ExtractPathParams<TPath>;\n searchParams: URLSearchParams;\n parsedBody: RequestBodyType;\n rawBody?: string;\n headers: Headers;\n request?: Request;\n inputSchema?: TInputSchema;\n shouldValidateInput?: boolean;\n }) {\n this.#path = config.path;\n this.#method = config.method;\n this.#pathParams = config.pathParams;\n this.#searchParams = config.searchParams;\n this.#headers = config.headers;\n this.#body = config.rawBody;\n this.#parsedBody = config.parsedBody;\n this.#inputSchema = config.inputSchema;\n this.#shouldValidateInput = config.shouldValidateInput ?? true;\n }\n\n /**\n * Create a RequestContext from a Request object for server-side handling\n */\n static async fromRequest<\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined = undefined,\n >(config: {\n request: Request;\n method: string;\n path: TPath;\n pathParams: ExtractPathParams<TPath>;\n inputSchema?: TInputSchema;\n shouldValidateInput?: boolean;\n state: MutableRequestState;\n rawBody?: string;\n }): Promise<RequestInputContext<TPath, TInputSchema>> {\n // Use the mutable state (potentially modified by middleware)\n return new RequestInputContext({\n method: config.method,\n path: config.path,\n pathParams: config.state.pathParams as ExtractPathParams<TPath>,\n searchParams: config.state.searchParams,\n headers: config.state.headers,\n parsedBody: config.state.body,\n rawBody: config.rawBody,\n inputSchema: config.inputSchema,\n shouldValidateInput: config.shouldValidateInput,\n });\n }\n\n /**\n * Create a RequestContext for server-side rendering contexts (no Request object)\n */\n static fromSSRContext<\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined = undefined,\n >(\n config:\n | {\n method: \"GET\";\n path: TPath;\n pathParams: ExtractPathParams<TPath>;\n searchParams?: URLSearchParams;\n headers?: Headers;\n }\n | {\n method: Exclude<HTTPMethod, \"GET\">;\n path: TPath;\n pathParams: ExtractPathParams<TPath>;\n searchParams?: URLSearchParams;\n headers?: Headers;\n body: RequestBodyType;\n inputSchema?: TInputSchema;\n },\n ): RequestInputContext<TPath, TInputSchema> {\n return new RequestInputContext({\n method: config.method,\n path: config.path,\n pathParams: config.pathParams,\n searchParams: config.searchParams ?? new URLSearchParams(),\n headers: config.headers ?? new Headers(),\n parsedBody: \"body\" in config ? config.body : undefined,\n inputSchema: \"inputSchema\" in config ? config.inputSchema : undefined,\n shouldValidateInput: false, // No input validation in SSR context\n });\n }\n\n /**\n * The HTTP method as string (e.g., `GET`, `POST`)\n */\n get method(): string {\n return this.#method;\n }\n /**\n * The matched route path (e.g., `/users/:id`)\n * @remarks `string`\n */\n get path(): TPath {\n return this.#path;\n }\n /**\n * Extracted path parameters as object (e.g., `{ id: '123' }`)\n * @remarks `Record<string, string>`\n */\n get pathParams(): ExtractPathParams<TPath> {\n return this.#pathParams;\n }\n /**\n * [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object for query parameters\n * @remarks `URLSearchParams`\n */\n get query(): URLSearchParams {\n return this.#searchParams;\n }\n /**\n * [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object for request headers\n * @remarks `Headers`\n */\n get headers(): Headers {\n return this.#headers;\n }\n\n get rawBody(): string | undefined {\n return this.#body;\n }\n\n /**\n * Access the request body as FormData.\n *\n * Use this method when handling file uploads or multipart form submissions.\n * The request must have been sent with Content-Type: multipart/form-data.\n *\n * @throws Error if the request body is not FormData\n *\n * @example\n * ```typescript\n * defineRoute({\n * method: \"POST\",\n * path: \"/upload\",\n * async handler(ctx, res) {\n * const formData = ctx.formData();\n * const file = formData.get(\"file\") as File;\n * const description = formData.get(\"description\") as string;\n * // ... process file\n * }\n * });\n * ```\n */\n formData(): FormData {\n if (!(this.#parsedBody instanceof FormData)) {\n throw new Error(\n \"Request body is not FormData. Ensure the request was sent with Content-Type: multipart/form-data.\",\n );\n }\n return this.#parsedBody;\n }\n\n /**\n * Check if the request body is FormData.\n *\n * Useful for routes that accept both JSON and FormData payloads.\n *\n * @example\n * ```typescript\n * defineRoute({\n * method: \"POST\",\n * path: \"/upload\",\n * async handler(ctx, res) {\n * if (ctx.isFormData()) {\n * const formData = ctx.formData();\n * // handle file upload\n * } else {\n * const json = await ctx.input.valid();\n * // handle JSON payload\n * }\n * }\n * });\n * ```\n */\n isFormData(): boolean {\n return this.#parsedBody instanceof FormData;\n }\n\n /**\n * Access the request body as a ReadableStream (application/octet-stream).\n *\n * @throws Error if the request body is not a ReadableStream\n */\n bodyStream(): ReadableStream<Uint8Array> {\n if (!(this.#parsedBody instanceof ReadableStream)) {\n throw new Error(\n \"Request body is not a ReadableStream. Ensure the request was sent with Content-Type: application/octet-stream.\",\n );\n }\n return this.#parsedBody;\n }\n\n /**\n * Check if the request body is a ReadableStream.\n */\n isBodyStream(): boolean {\n return this.#parsedBody instanceof ReadableStream;\n }\n\n /**\n * Input validation context (only if inputSchema is defined)\n * @remarks `InputContext`\n */\n get input(): TInputSchema extends undefined\n ? undefined\n : {\n schema: TInputSchema;\n valid: () => Promise<\n TInputSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TInputSchema>\n : unknown\n >;\n } {\n if (!this.#inputSchema) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return undefined as any;\n }\n\n return {\n schema: this.#inputSchema,\n valid: async () => {\n if (!this.#shouldValidateInput) {\n // In SSR context, return the body directly without validation\n return this.#parsedBody;\n }\n\n return this.#validateInput();\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n }\n\n async #validateInput(): Promise<\n TInputSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<TInputSchema> : never\n > {\n if (!this.#inputSchema) {\n throw new Error(\"No input schema defined for this route\");\n }\n\n if (this.#parsedBody instanceof FormData || this.#parsedBody instanceof Blob) {\n throw new Error(\"Schema validation is only supported for JSON data, not FormData or Blob\");\n }\n\n if (this.#parsedBody instanceof ReadableStream) {\n throw new Error(\n \"Schema validation is only supported for JSON data, not FormData, Blob, or ReadableStream\",\n );\n }\n\n const result = await this.#inputSchema[\"~standard\"].validate(this.#parsedBody);\n\n if (result.issues) {\n throw new FragnoApiValidationError(\"Validation failed\", result.issues);\n }\n\n return result.value as TInputSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TInputSchema>\n : never;\n }\n}\n"],"mappings":";;;AAaA,IAAa,sBAAb,MAAa,oBAGX;CACA,CAASA;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,CAASC;CAET,YAAY,QAWT;AACD,QAAKR,OAAQ,OAAO;AACpB,QAAKC,SAAU,OAAO;AACtB,QAAKC,aAAc,OAAO;AAC1B,QAAKC,eAAgB,OAAO;AAC5B,QAAKC,UAAW,OAAO;AACvB,QAAKC,OAAQ,OAAO;AACpB,QAAKC,aAAc,OAAO;AAC1B,QAAKC,cAAe,OAAO;AAC3B,QAAKC,sBAAuB,OAAO,uBAAuB;;;;;CAM5D,aAAa,YAGX,QASoD;AAEpD,SAAO,IAAI,oBAAoB;GAC7B,QAAQ,OAAO;GACf,MAAM,OAAO;GACb,YAAY,OAAO,MAAM;GACzB,cAAc,OAAO,MAAM;GAC3B,SAAS,OAAO,MAAM;GACtB,YAAY,OAAO,MAAM;GACzB,SAAS,OAAO;GAChB,aAAa,OAAO;GACpB,qBAAqB,OAAO;GAC7B,CAAC;;;;;CAMJ,OAAO,eAIL,QAiB0C;AAC1C,SAAO,IAAI,oBAAoB;GAC7B,QAAQ,OAAO;GACf,MAAM,OAAO;GACb,YAAY,OAAO;GACnB,cAAc,OAAO,gBAAgB,IAAI,iBAAiB;GAC1D,SAAS,OAAO,WAAW,IAAI,SAAS;GACxC,YAAY,UAAU,SAAS,OAAO,OAAO;GAC7C,aAAa,iBAAiB,SAAS,OAAO,cAAc;GAC5D,qBAAqB;GACtB,CAAC;;;;;CAMJ,IAAI,SAAiB;AACnB,SAAO,MAAKP;;;;;;CAMd,IAAI,OAAc;AAChB,SAAO,MAAKD;;;;;;CAMd,IAAI,aAAuC;AACzC,SAAO,MAAKE;;;;;;CAMd,IAAI,QAAyB;AAC3B,SAAO,MAAKC;;;;;;CAMd,IAAI,UAAmB;AACrB,SAAO,MAAKC;;CAGd,IAAI,UAA8B;AAChC,SAAO,MAAKC;;;;;;;;;;;;;;;;;;;;;;;;CAyBd,WAAqB;AACnB,MAAI,EAAE,MAAKC,sBAAuB,UAChC,OAAM,IAAI,MACR,oGACD;AAEH,SAAO,MAAKA;;;;;;;;;;;;;;;;;;;;;;;;CAyBd,aAAsB;AACpB,SAAO,MAAKA,sBAAuB;;;;;;;CAQrC,aAAyC;AACvC,MAAI,EAAE,MAAKA,sBAAuB,gBAChC,OAAM,IAAI,MACR,iHACD;AAEH,SAAO,MAAKA;;;;;CAMd,eAAwB;AACtB,SAAO,MAAKA,sBAAuB;;;;;;CAOrC,IAAI,QASE;AACJ,MAAI,CAAC,MAAKC,YAER;AAGF,SAAO;GACL,QAAQ,MAAKA;GACb,OAAO,YAAY;AACjB,QAAI,CAAC,MAAKC,oBAER,QAAO,MAAKF;AAGd,WAAO,MAAKG,eAAgB;;GAG/B;;CAGH,OAAMA,gBAEJ;AACA,MAAI,CAAC,MAAKF,YACR,OAAM,IAAI,MAAM,yCAAyC;AAG3D,MAAI,MAAKD,sBAAuB,YAAY,MAAKA,sBAAuB,KACtE,OAAM,IAAI,MAAM,0EAA0E;AAG5F,MAAI,MAAKA,sBAAuB,eAC9B,OAAM,IAAI,MACR,2FACD;EAGH,MAAM,SAAS,MAAM,MAAKC,YAAa,aAAa,SAAS,MAAKD,WAAY;AAE9E,MAAI,OAAO,OACT,OAAM,IAAI,yBAAyB,qBAAqB,OAAO,OAAO;AAGxE,SAAO,OAAO"}
|
|
@@ -43,7 +43,7 @@ declare class RequestMiddlewareInputContext<const TRoutes extends readonly AnyFr
|
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
45
45
|
get requestState(): MutableRequestState;
|
|
46
|
-
ifMatchesRoute: <const TMethod extends HTTPMethod, const TPath extends ExtractRoutePath<TRoutes>, const TRoute extends ExtractRouteByPath<TRoutes, TPath, TMethod> = ExtractRouteByPath<TRoutes, TPath, TMethod>>(method: TMethod, path: TPath, handler: (...args: Parameters<TRoute["handler"]>) => Promise<Response | undefined | void> | Response | undefined | void) => Promise<Response | undefined>;
|
|
46
|
+
ifMatchesRoute: <const TMethod extends HTTPMethod, const TPath extends ExtractRoutePath<TRoutes, TMethod>, const TRoute extends ExtractRouteByPath<TRoutes, TPath, TMethod> = ExtractRouteByPath<TRoutes, TPath, TMethod>>(method: TMethod, path: TPath, handler: (...args: Parameters<TRoute["handler"]>) => Promise<Response | undefined | void> | Response | undefined | void) => Promise<Response | undefined>;
|
|
47
47
|
}
|
|
48
48
|
//#endregion
|
|
49
49
|
export { FragnoMiddlewareCallback, RequestMiddlewareInputContext, RequestMiddlewareOptions, RequestMiddlewareOutputContext };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-middleware.d.ts","names":[],"sources":["../../src/api/request-middleware.ts"],"sourcesContent":[],"mappings":";;;;;;;;KASY,kDACe,iDAEP,0CAEJ,8BAA8B,yBAC7B,+BAA+B,OAAO,eAClD,QAAQ,wBAAwB;UAEpB,wBAAA;EATL,IAAA,EAAA,MAAA;EACe,MAAA,EAUjB,UAViB;EAEP,OAAA,EAST,OATS;EAE0B,KAAA,EAQrC,mBARqC;;AACE,cAUnC,8BAVmC,CAAA,WAAA,EAAA,wBAYtB,MAZsB,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SAatC,aAbsC,CAAA,OAAA,EAAA,MAAA,CAAA,CAAA;EAAO,CAAA,OAAA;EAAtC,WAAA,CAAA,IAAA,EAiBG,KAjBH,EAAA,QAAA,EAiBoB,SAjBpB;EACJ,IAAA,IAAA,CAAA,CAAA,EAsBC,KAtBD;EAAR,IAAA,QAAA,CAAA,CAAA,EA0Ba,SA1Bb;;AAAwC,cA+BhC,6BA/BgC,CAAA,sBAAA,SA+B6B,oBA/B7B,EAAA,CAAA,CAAA;EAE5B,CAAA,OAAA;EAEP,WAAA,CAAA,MAAA,EAgCY,OAhCZ,EAAA,OAAA,EAgC8B,wBAhC9B;EACC,IAAA,IAAA,CAAA,CAAA,EAAA,MAAA;EACF,IAAA,MAAA,CAAA,CAAA,EAiDO,UAjDP;EAAmB,IAAA,UAAA,CAAA,CAAA,EAqDR,MArDQ,CAAA,MAAA,EAAA,MAAA,CAAA;EAGf,IAAA,WAAA,CAAA,CAAA,EAsDQ,eAtDsB;EAEjB,IAAA,OAAA,CAAA,CAAA,EAwDT,OAxDS;EAKN,IAAA,WAAA,CAAA,CAAA,EAuDC,gBAvDD,GAAA,SAAA;EAAiB,IAAA,YAAA,CAAA,CAAA,EA2Df,gBA3De,GAAA,SAAA;EAMvB;;;;AASd;;;;;;;;;EA4CsB,IAAA,YAAA,CAAA,CAAA,EAiBA,mBAjBA;EAiBA,cAAA,EAAA,CAAA,sBAMI,UANJ,EAAA,oBAOE,gBAPF,CAOmB,OAPnB,CAAA,EAAA,qBAQG,kBARH,CAQsB,OARtB,EAQ+B,KAR/B,EAQsC,OARtC,CAAA,GAQiD,kBARjD,CAShB,OATgB,EAUhB,KAVgB,EAWhB,OAXgB,CAAA,CAAA,CAAA,MAAA,EAcV,OAdU,EAAA,IAAA,EAeZ,KAfY,EAAA,OAAA,EAAA,CAAA,GAAA,IAAA,EAiBP,UAjBO,CAiBI,MAjBJ,CAAA,SAAA,CAAA,CAAA,EAAA,GAkBb,OAlBa,CAkBL,QAlBK,GAAA,SAAA,GAAA,IAAA,CAAA,GAkB0B,QAlB1B,GAAA,SAAA,GAAA,IAAA,EAAA,GAmBjB,OAnBiB,CAmBT,QAnBS,GAAA,SAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"request-middleware.d.ts","names":[],"sources":["../../src/api/request-middleware.ts"],"sourcesContent":[],"mappings":";;;;;;;;KASY,kDACe,iDAEP,0CAEJ,8BAA8B,yBAC7B,+BAA+B,OAAO,eAClD,QAAQ,wBAAwB;UAEpB,wBAAA;EATL,IAAA,EAAA,MAAA;EACe,MAAA,EAUjB,UAViB;EAEP,OAAA,EAST,OATS;EAE0B,KAAA,EAQrC,mBARqC;;AACE,cAUnC,8BAVmC,CAAA,WAAA,EAAA,wBAYtB,MAZsB,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SAatC,aAbsC,CAAA,OAAA,EAAA,MAAA,CAAA,CAAA;EAAO,CAAA,OAAA;EAAtC,WAAA,CAAA,IAAA,EAiBG,KAjBH,EAAA,QAAA,EAiBoB,SAjBpB;EACJ,IAAA,IAAA,CAAA,CAAA,EAsBC,KAtBD;EAAR,IAAA,QAAA,CAAA,CAAA,EA0Ba,SA1Bb;;AAAwC,cA+BhC,6BA/BgC,CAAA,sBAAA,SA+B6B,oBA/B7B,EAAA,CAAA,CAAA;EAE5B,CAAA,OAAA;EAEP,WAAA,CAAA,MAAA,EAgCY,OAhCZ,EAAA,OAAA,EAgC8B,wBAhC9B;EACC,IAAA,IAAA,CAAA,CAAA,EAAA,MAAA;EACF,IAAA,MAAA,CAAA,CAAA,EAiDO,UAjDP;EAAmB,IAAA,UAAA,CAAA,CAAA,EAqDR,MArDQ,CAAA,MAAA,EAAA,MAAA,CAAA;EAGf,IAAA,WAAA,CAAA,CAAA,EAsDQ,eAtDsB;EAEjB,IAAA,OAAA,CAAA,CAAA,EAwDT,OAxDS;EAKN,IAAA,WAAA,CAAA,CAAA,EAuDC,gBAvDD,GAAA,SAAA;EAAiB,IAAA,YAAA,CAAA,CAAA,EA2Df,gBA3De,GAAA,SAAA;EAMvB;;;;AASd;;;;;;;;;EA4CsB,IAAA,YAAA,CAAA,CAAA,EAiBA,mBAjBA;EAiBA,cAAA,EAAA,CAAA,sBAMI,UANJ,EAAA,oBAOE,gBAPF,CAOmB,OAPnB,EAO4B,OAP5B,CAAA,EAAA,qBAQG,kBARH,CAQsB,OARtB,EAQ+B,KAR/B,EAQsC,OARtC,CAAA,GAQiD,kBARjD,CAShB,OATgB,EAUhB,KAVgB,EAWhB,OAXgB,CAAA,CAAA,CAAA,MAAA,EAcV,OAdU,EAAA,IAAA,EAeZ,KAfY,EAAA,OAAA,EAAA,CAAA,GAAA,IAAA,EAiBP,UAjBO,CAiBI,MAjBJ,CAAA,SAAA,CAAA,CAAA,EAAA,GAkBb,OAlBa,CAkBL,QAlBK,GAAA,SAAA,GAAA,IAAA,CAAA,GAkB0B,QAlB1B,GAAA,SAAA,GAAA,IAAA,EAAA,GAmBjB,OAnBiB,CAmBT,QAnBS,GAAA,SAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-middleware.js","names":["#deps","#services","#options","#route","#state","route"],"sources":["../../src/api/request-middleware.ts"],"sourcesContent":["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 await (handler as any)(inputContext, outputContext);\n };\n}\n"],"mappings":";;;;AAyBA,IAAa,iCAAb,cAGU,cAA+B;CACvC,CAASA;CACT,CAASC;CAET,YAAY,MAAa,UAAqB;AAC5C,SAAO;AACP,QAAKD,OAAQ;AACb,QAAKC,WAAY;;CAGnB,IAAI,OAAc;AAChB,SAAO,MAAKD;;CAGd,IAAI,WAAsB;AACxB,SAAO,MAAKC;;;AAIhB,IAAa,gCAAb,MAAkG;CAChG,CAASC;CACT,CAASC;CACT,CAASC;CAET,YAAY,QAAiB,SAAmC;AAC9D,QAAKF,UAAW;AAChB,QAAKE,QAAS,QAAQ;EAEtB,MAAM,QAAQ,OAAO,MAClB,YAAUC,QAAM,SAAS,QAAQ,QAAQA,QAAM,WAAW,QAAQ,OACpE;AAED,MAAI,CAAC,MACH,OAAM,IAAI,MAAM,oBAAoB,QAAQ,KAAK,GAAG,QAAQ,SAAS;AAGvE,QAAKF,QAAS;;CAGhB,IAAI,OAAe;AACjB,SAAO,MAAKD,QAAS;;CAGvB,IAAI,SAAqB;AACvB,SAAO,MAAKA,QAAS;;CAGvB,IAAI,aAAqC;AACvC,SAAO,MAAKE,MAAO;;CAGrB,IAAI,cAA+B;AACjC,SAAO,MAAKA,MAAO;;CAGrB,IAAI,UAAmB;AACrB,SAAO,MAAKA,MAAO;;CAGrB,IAAI,cAA4C;AAC9C,SAAO,MAAKD,MAAO;;CAGrB,IAAI,eAA6C;AAC/C,SAAO,MAAKA,MAAO;;;;;;;;;;;;;;;CAgBrB,IAAI,eAAoC;AACtC,SAAO,MAAKC;;CAId,iBAAiB,OASf,QACA,MACA,YAGkC;AAClC,MAAI,KAAK,SAAS,QAAQ,KAAK,WAAW,OACxC;AAgBF,SAAO,MAAO,QAZO,MAAM,oBAAoB,YAAY;GACzD,SAAS,MAAKF,QAAS;GACvB,QAAQ,MAAKA,QAAS;GAChB;GACN,YAAY,KAAK;GACjB,aAAa,MAAKC,MAAO;GACzB,OAAO,MAAKC;GACb,CAAC,EAEoB,IAAI,qBAAqB,MAAKD,MAAO,aAAa,CAGd"}
|
|
1
|
+
{"version":3,"file":"request-middleware.js","names":["#deps","#services","#options","#route","#state","route"],"sources":["../../src/api/request-middleware.ts"],"sourcesContent":["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, TMethod>,\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 await (handler as any)(inputContext, outputContext);\n };\n}\n"],"mappings":";;;;AAyBA,IAAa,iCAAb,cAGU,cAA+B;CACvC,CAASA;CACT,CAASC;CAET,YAAY,MAAa,UAAqB;AAC5C,SAAO;AACP,QAAKD,OAAQ;AACb,QAAKC,WAAY;;CAGnB,IAAI,OAAc;AAChB,SAAO,MAAKD;;CAGd,IAAI,WAAsB;AACxB,SAAO,MAAKC;;;AAIhB,IAAa,gCAAb,MAAkG;CAChG,CAASC;CACT,CAASC;CACT,CAASC;CAET,YAAY,QAAiB,SAAmC;AAC9D,QAAKF,UAAW;AAChB,QAAKE,QAAS,QAAQ;EAEtB,MAAM,QAAQ,OAAO,MAClB,YAAUC,QAAM,SAAS,QAAQ,QAAQA,QAAM,WAAW,QAAQ,OACpE;AAED,MAAI,CAAC,MACH,OAAM,IAAI,MAAM,oBAAoB,QAAQ,KAAK,GAAG,QAAQ,SAAS;AAGvE,QAAKF,QAAS;;CAGhB,IAAI,OAAe;AACjB,SAAO,MAAKD,QAAS;;CAGvB,IAAI,SAAqB;AACvB,SAAO,MAAKA,QAAS;;CAGvB,IAAI,aAAqC;AACvC,SAAO,MAAKE,MAAO;;CAGrB,IAAI,cAA+B;AACjC,SAAO,MAAKA,MAAO;;CAGrB,IAAI,UAAmB;AACrB,SAAO,MAAKA,MAAO;;CAGrB,IAAI,cAA4C;AAC9C,SAAO,MAAKD,MAAO;;CAGrB,IAAI,eAA6C;AAC/C,SAAO,MAAKA,MAAO;;;;;;;;;;;;;;;CAgBrB,IAAI,eAAoC;AACtC,SAAO,MAAKC;;CAId,iBAAiB,OASf,QACA,MACA,YAGkC;AAClC,MAAI,KAAK,SAAS,QAAQ,KAAK,WAAW,OACxC;AAgBF,SAAO,MAAO,QAZO,MAAM,oBAAoB,YAAY;GACzD,SAAS,MAAKF,QAAS;GACvB,QAAQ,MAAKA,QAAS;GAChB;GACN,YAAY,KAAK;GACjB,aAAa,MAAKC,MAAO;GACzB,OAAO,MAAKC;GACb,CAAC,EAEoB,IAAI,qBAAqB,MAAKD,MAAO,aAAa,CAGd"}
|
package/dist/api/route.d.ts
CHANGED
|
@@ -31,13 +31,13 @@ declare function defineRoute<const TMethod extends HTTPMethod, const TPath exten
|
|
|
31
31
|
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, const TThisContext extends RequestThisContext = RequestThisContext>(config: FragnoRouteConfig<TMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters, TThisContext> & {
|
|
32
32
|
inputSchema: TInputSchema;
|
|
33
33
|
}): FragnoRouteConfig<TMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters, TThisContext>;
|
|
34
|
-
type AnyFragmentDefinition = FragmentDefinition<any, any, any, any, any, any, any, any, any, any>;
|
|
35
|
-
type ExtractFragmentConfig<T> = T extends FragmentDefinition<infer TConfig, any, any, any, any, any, any, any, any, any> ? TConfig : never;
|
|
36
|
-
type ExtractFragmentDeps<T> = T extends FragmentDefinition<any, any, infer TDeps, any, any, any, any, any, any, any> ? TDeps : never;
|
|
37
|
-
type ExtractFragmentServices<T> = T extends FragmentDefinition<any, any, any, infer TBaseServices, infer TServices, any, any, any, any, any> ? BoundServices<TBaseServices & TServices> : never;
|
|
38
|
-
type ExtractFragmentServiceDeps<T> = T extends FragmentDefinition<any, any, any, any, any, infer TServiceDependencies, any, any, any, any> ? TServiceDependencies : never;
|
|
39
|
-
type ExtractFragmentServiceThisContext<T> = T extends FragmentDefinition<any, any, any, any, any, any, any, infer TServiceThisContext, any, any> ? TServiceThisContext : RequestThisContext;
|
|
40
|
-
type ExtractFragmentHandlerThisContext<T> = T extends FragmentDefinition<any, any, any, any, any, any, any, any, infer THandlerThisContext, any> ? THandlerThisContext : RequestThisContext;
|
|
34
|
+
type AnyFragmentDefinition = FragmentDefinition<any, any, any, any, any, any, any, any, any, any, any>;
|
|
35
|
+
type ExtractFragmentConfig<T> = T extends FragmentDefinition<infer TConfig, any, any, any, any, any, any, any, any, any, any> ? TConfig : never;
|
|
36
|
+
type ExtractFragmentDeps<T> = T extends FragmentDefinition<any, any, infer TDeps, any, any, any, any, any, any, any, any> ? TDeps : never;
|
|
37
|
+
type ExtractFragmentServices<T> = T extends FragmentDefinition<any, any, any, infer TBaseServices, infer TServices, any, any, any, any, any, any> ? BoundServices<TBaseServices & TServices> : never;
|
|
38
|
+
type ExtractFragmentServiceDeps<T> = T extends FragmentDefinition<any, any, any, any, any, infer TServiceDependencies, any, any, any, any, any> ? TServiceDependencies : never;
|
|
39
|
+
type ExtractFragmentServiceThisContext<T> = T extends FragmentDefinition<any, any, any, any, any, any, any, infer TServiceThisContext, any, any, any> ? TServiceThisContext : RequestThisContext;
|
|
40
|
+
type ExtractFragmentHandlerThisContext<T> = T extends FragmentDefinition<any, any, any, any, any, any, any, any, infer THandlerThisContext, any, any> ? THandlerThisContext : RequestThisContext;
|
|
41
41
|
type ExtractFragmentThisContext<T> = ExtractFragmentServiceThisContext<T>;
|
|
42
42
|
declare function defineRoutes<const TDefinition extends AnyFragmentDefinition>(definition: TDefinition): {
|
|
43
43
|
create: <const TRoutes$1 extends readonly FragnoRouteConfig<HTTPMethod, string, StandardSchemaV1 | undefined, StandardSchemaV1 | undefined, string, string, ExtractFragmentHandlerThisContext<TDefinition>>[]>(fn: (context: RouteFactoryContext<ExtractFragmentConfig<TDefinition>, ExtractFragmentDeps<TDefinition>, ExtractFragmentServices<TDefinition>, ExtractFragmentServiceDeps<TDefinition>> & {
|
package/dist/api/route.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","names":[],"sources":["../../src/api/route.ts"],"sourcesContent":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"route.d.ts","names":[],"sources":["../../src/api/route.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/api/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","names":["routes: any[]"],"sources":["../../src/api/route.ts"],"sourcesContent":["// oxlint-disable no-explicit-any\n\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { FragnoRouteConfig, HTTPMethod, RequestThisContext } from \"./api\";\nimport type { FragmentDefinition } from \"./fragment-definition-builder\";\nimport type { BoundServices } from \"./bind-services\";\n\nexport type AnyFragnoRouteConfig = FragnoRouteConfig<HTTPMethod, string, any, any, any, any, any>;\n\nexport interface RouteFactoryContext<TConfig, TDeps, TServices, TServiceDeps = {}> {\n config: TConfig;\n deps: TDeps;\n services: TServices;\n serviceDeps: TServiceDeps;\n}\n\nexport type RouteFactory<\n TConfig,\n TDeps,\n TServices,\n TServiceDeps,\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string,\n RequestThisContext\n >[],\n> = (context: RouteFactoryContext<TConfig, TDeps, TServices, TServiceDeps>) => TRoutes;\n\n/**\n * @internal\n */\nexport type AnyRouteOrFactory = AnyFragnoRouteConfig | RouteFactory<any, any, any, any, any>;\n\n/**\n * @internal\n */\nexport type FlattenRouteFactories<T extends readonly AnyRouteOrFactory[]> = T extends readonly [\n infer First,\n ...infer Rest extends readonly AnyRouteOrFactory[],\n]\n ? First extends RouteFactory<any, any, any, any, infer TRoutes>\n ? [...TRoutes, ...FlattenRouteFactories<Rest>]\n : [First, ...FlattenRouteFactories<Rest>]\n : [];\n\n/**\n * Helper to resolve route factories into routes\n * @internal\n */\nexport function resolveRouteFactories<\n TConfig,\n TDeps,\n TServices,\n TServiceDeps,\n const TRoutesOrFactories extends readonly AnyRouteOrFactory[],\n>(\n context: RouteFactoryContext<TConfig, TDeps, TServices, TServiceDeps>,\n routesOrFactories: TRoutesOrFactories,\n): FlattenRouteFactories<TRoutesOrFactories> {\n const routes: any[] = [];\n\n for (const item of routesOrFactories) {\n if (typeof item === \"function\") {\n // It's a route factory\n const factoryRoutes = item(context);\n routes.push(...factoryRoutes);\n } else {\n // It's a direct route\n routes.push(item);\n }\n }\n\n return routes as FlattenRouteFactories<TRoutesOrFactories>;\n}\n\n// TODO(Wilco): Do these overloads actually do anything?\n// TODO(Wilco): ValidPath<T> should be added back in here.\n\n// Overload for routes without inputSchema\nexport function defineRoute<\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n const TThisContext extends RequestThisContext = RequestThisContext,\n>(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n > & { inputSchema?: undefined },\n): FragnoRouteConfig<\n TMethod,\n TPath,\n undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n>;\n\n// Overload for routes with inputSchema\nexport function defineRoute<\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n const TThisContext extends RequestThisContext = RequestThisContext,\n>(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n > & { inputSchema: TInputSchema },\n): FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n>;\n\n// implementation\nexport function defineRoute<\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1 | undefined,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n const TThisContext extends RequestThisContext = RequestThisContext,\n>(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n >,\n): FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n> {\n return config;\n}\n\n// ============================================================================\n// Type extractors for FragmentDefinition\n// ============================================================================\n\nexport type AnyFragmentDefinition = FragmentDefinition<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\n// Extract config from FragmentDefinition\nexport type ExtractFragmentConfig<T> =\n T extends FragmentDefinition<infer TConfig, any, any, any, any, any, any, any, any, any>\n ? TConfig\n : never;\n\n// Extract deps from FragmentDefinition\nexport type ExtractFragmentDeps<T> =\n T extends FragmentDefinition<any, any, infer TDeps, any, any, any, any, any, any, any>\n ? TDeps\n : never;\n\n// Extract services from FragmentDefinition\n// This extracts both base services (flat) and named services (nested)\n// The result matches the structure of fragment.services at runtime\nexport type ExtractFragmentServices<T> =\n T extends FragmentDefinition<\n any,\n any,\n any,\n infer TBaseServices,\n infer TServices,\n any,\n any,\n any,\n any,\n any\n >\n ? BoundServices<TBaseServices & TServices>\n : never;\n\n// Extract service dependencies from FragmentDefinition\nexport type ExtractFragmentServiceDeps<T> =\n T extends FragmentDefinition<\n any,\n any,\n any,\n any,\n any,\n infer TServiceDependencies,\n any,\n any,\n any,\n any\n >\n ? TServiceDependencies\n : never;\n\n// Extract service this context from FragmentDefinition (used by services)\nexport type ExtractFragmentServiceThisContext<T> =\n T extends FragmentDefinition<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer TServiceThisContext,\n any,\n any\n >\n ? TServiceThisContext\n : RequestThisContext;\n\n// Extract handler this context from FragmentDefinition (used by route handlers)\nexport type ExtractFragmentHandlerThisContext<T> =\n T extends FragmentDefinition<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer THandlerThisContext,\n any\n >\n ? THandlerThisContext\n : RequestThisContext;\n\n// Legacy: Extract this context from FragmentDefinition (defaults to service context for backwards compatibility)\nexport type ExtractFragmentThisContext<T> = ExtractFragmentServiceThisContext<T>;\n\n// Overload that infers types from FragmentDefinition (runtime value)\nexport function defineRoutes<const TDefinition extends AnyFragmentDefinition>(\n definition: TDefinition,\n): {\n create: <\n const TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string,\n ExtractFragmentHandlerThisContext<TDefinition>\n >[],\n >(\n fn: (\n context: RouteFactoryContext<\n ExtractFragmentConfig<TDefinition>,\n ExtractFragmentDeps<TDefinition>,\n ExtractFragmentServices<TDefinition>,\n ExtractFragmentServiceDeps<TDefinition>\n > & {\n defineRoute: <\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1 | undefined,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n >(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n ExtractFragmentHandlerThisContext<TDefinition>\n >,\n ) => FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n ExtractFragmentHandlerThisContext<TDefinition>\n >;\n },\n ) => TRoutes,\n ) => RouteFactory<\n ExtractFragmentConfig<TDefinition>,\n ExtractFragmentDeps<TDefinition>,\n ExtractFragmentServices<TDefinition>,\n ExtractFragmentServiceDeps<TDefinition>,\n TRoutes\n >;\n};\n\n// Overload that infers types from FragmentDefinition (type parameter only)\nexport function defineRoutes<const TDefinition extends AnyFragmentDefinition>(): {\n create: <\n const TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string,\n ExtractFragmentHandlerThisContext<TDefinition>\n >[],\n >(\n fn: (\n context: RouteFactoryContext<\n ExtractFragmentConfig<TDefinition>,\n ExtractFragmentDeps<TDefinition>,\n ExtractFragmentServices<TDefinition>,\n ExtractFragmentServiceDeps<TDefinition>\n > & {\n defineRoute: <\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1 | undefined,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n >(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n ExtractFragmentHandlerThisContext<TDefinition>\n >,\n ) => FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n ExtractFragmentHandlerThisContext<TDefinition>\n >;\n },\n ) => TRoutes,\n ) => RouteFactory<\n ExtractFragmentConfig<TDefinition>,\n ExtractFragmentDeps<TDefinition>,\n ExtractFragmentServices<TDefinition>,\n ExtractFragmentServiceDeps<TDefinition>,\n TRoutes\n >;\n};\n\n// Implementation\nexport function defineRoutes<\n const TDefinition extends AnyFragmentDefinition | undefined = undefined,\n>(\n // Parameter is only used for type inference, not runtime\n _definition?: TDefinition,\n) {\n return {\n create: <\n const TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string,\n TDefinition extends AnyFragmentDefinition\n ? ExtractFragmentThisContext<TDefinition>\n : RequestThisContext\n >[],\n >(\n fn: (\n context: RouteFactoryContext<\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentConfig<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentDeps<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentServices<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentServiceDeps<TDefinition> : {}\n > & {\n defineRoute: <\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1 | undefined,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n >(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TDefinition extends AnyFragmentDefinition\n ? ExtractFragmentThisContext<TDefinition>\n : RequestThisContext\n >,\n ) => FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TDefinition extends AnyFragmentDefinition\n ? ExtractFragmentThisContext<TDefinition>\n : RequestThisContext\n >;\n },\n ) => TRoutes,\n ): RouteFactory<\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentConfig<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentDeps<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentServices<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentServiceDeps<TDefinition> : {},\n TRoutes\n > => {\n // Create a wrapper around the callback that adds the defineRoute function\n return (ctx: RouteFactoryContext<unknown, unknown, unknown, unknown>) => {\n const extendedCtx = {\n ...ctx,\n defineRoute,\n };\n return fn(extendedCtx as any);\n };\n },\n };\n}\n"],"mappings":";;;;;AAqDA,SAAgB,sBAOd,SACA,mBAC2C;CAC3C,MAAMA,SAAgB,EAAE;AAExB,MAAK,MAAM,QAAQ,kBACjB,KAAI,OAAO,SAAS,YAAY;EAE9B,MAAM,gBAAgB,KAAK,QAAQ;AACnC,SAAO,KAAK,GAAG,cAAc;OAG7B,QAAO,KAAK,KAAK;AAIrB,QAAO;;AAgET,SAAgB,YASd,QAiBA;AACA,QAAO;;AA8NT,SAAgB,aAId,aACA;AACA,QAAO,EACL,SAaE,OA6CG;AAEH,UAAQ,QAAiE;AAKvE,UAAO,GAJa;IAClB,GAAG;IACH;IACD,CAC4B;;IAGlC"}
|
|
1
|
+
{"version":3,"file":"route.js","names":["routes: any[]"],"sources":["../../src/api/route.ts"],"sourcesContent":["// oxlint-disable no-explicit-any\n\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { FragnoRouteConfig, HTTPMethod, RequestThisContext } from \"./api\";\nimport type { FragmentDefinition } from \"./fragment-definition-builder\";\nimport type { BoundServices } from \"./bind-services\";\n\nexport type AnyFragnoRouteConfig = FragnoRouteConfig<HTTPMethod, string, any, any, any, any, any>;\n\nexport interface RouteFactoryContext<TConfig, TDeps, TServices, TServiceDeps = {}> {\n config: TConfig;\n deps: TDeps;\n services: TServices;\n serviceDeps: TServiceDeps;\n}\n\nexport type RouteFactory<\n TConfig,\n TDeps,\n TServices,\n TServiceDeps,\n TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string,\n RequestThisContext\n >[],\n> = (context: RouteFactoryContext<TConfig, TDeps, TServices, TServiceDeps>) => TRoutes;\n\n/**\n * @internal\n */\nexport type AnyRouteOrFactory = AnyFragnoRouteConfig | RouteFactory<any, any, any, any, any>;\n\n/**\n * @internal\n */\nexport type FlattenRouteFactories<T extends readonly AnyRouteOrFactory[]> = T extends readonly [\n infer First,\n ...infer Rest extends readonly AnyRouteOrFactory[],\n]\n ? First extends RouteFactory<any, any, any, any, infer TRoutes>\n ? [...TRoutes, ...FlattenRouteFactories<Rest>]\n : [First, ...FlattenRouteFactories<Rest>]\n : [];\n\n/**\n * Helper to resolve route factories into routes\n * @internal\n */\nexport function resolveRouteFactories<\n TConfig,\n TDeps,\n TServices,\n TServiceDeps,\n const TRoutesOrFactories extends readonly AnyRouteOrFactory[],\n>(\n context: RouteFactoryContext<TConfig, TDeps, TServices, TServiceDeps>,\n routesOrFactories: TRoutesOrFactories,\n): FlattenRouteFactories<TRoutesOrFactories> {\n const routes: any[] = [];\n\n for (const item of routesOrFactories) {\n if (typeof item === \"function\") {\n // It's a route factory\n const factoryRoutes = item(context);\n routes.push(...factoryRoutes);\n } else {\n // It's a direct route\n routes.push(item);\n }\n }\n\n return routes as FlattenRouteFactories<TRoutesOrFactories>;\n}\n\n// TODO(Wilco): Do these overloads actually do anything?\n// TODO(Wilco): ValidPath<T> should be added back in here.\n\n// Overload for routes without inputSchema\nexport function defineRoute<\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n const TThisContext extends RequestThisContext = RequestThisContext,\n>(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n > & { inputSchema?: undefined },\n): FragnoRouteConfig<\n TMethod,\n TPath,\n undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n>;\n\n// Overload for routes with inputSchema\nexport function defineRoute<\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n const TThisContext extends RequestThisContext = RequestThisContext,\n>(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n > & { inputSchema: TInputSchema },\n): FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n>;\n\n// implementation\nexport function defineRoute<\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1 | undefined,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n const TThisContext extends RequestThisContext = RequestThisContext,\n>(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n >,\n): FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n> {\n return config;\n}\n\n// ============================================================================\n// Type extractors for FragmentDefinition\n// ============================================================================\n\nexport type AnyFragmentDefinition = FragmentDefinition<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\n// Extract config from FragmentDefinition\nexport type ExtractFragmentConfig<T> =\n T extends FragmentDefinition<infer TConfig, any, any, any, any, any, any, any, any, any, any>\n ? TConfig\n : never;\n\n// Extract deps from FragmentDefinition\nexport type ExtractFragmentDeps<T> =\n T extends FragmentDefinition<any, any, infer TDeps, any, any, any, any, any, any, any, any>\n ? TDeps\n : never;\n\n// Extract services from FragmentDefinition\n// This extracts both base services (flat) and named services (nested)\n// The result matches the structure of fragment.services at runtime\nexport type ExtractFragmentServices<T> =\n T extends FragmentDefinition<\n any,\n any,\n any,\n infer TBaseServices,\n infer TServices,\n any,\n any,\n any,\n any,\n any,\n any\n >\n ? BoundServices<TBaseServices & TServices>\n : never;\n\n// Extract service dependencies from FragmentDefinition\nexport type ExtractFragmentServiceDeps<T> =\n T extends FragmentDefinition<\n any,\n any,\n any,\n any,\n any,\n infer TServiceDependencies,\n any,\n any,\n any,\n any,\n any\n >\n ? TServiceDependencies\n : never;\n\n// Extract service this context from FragmentDefinition (used by services)\nexport type ExtractFragmentServiceThisContext<T> =\n T extends FragmentDefinition<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer TServiceThisContext,\n any,\n any,\n any\n >\n ? TServiceThisContext\n : RequestThisContext;\n\n// Extract handler this context from FragmentDefinition (used by route handlers)\nexport type ExtractFragmentHandlerThisContext<T> =\n T extends FragmentDefinition<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer THandlerThisContext,\n any,\n any\n >\n ? THandlerThisContext\n : RequestThisContext;\n\n// Legacy: Extract this context from FragmentDefinition (defaults to service context for backwards compatibility)\nexport type ExtractFragmentThisContext<T> = ExtractFragmentServiceThisContext<T>;\n\n// Overload that infers types from FragmentDefinition (runtime value)\nexport function defineRoutes<const TDefinition extends AnyFragmentDefinition>(\n definition: TDefinition,\n): {\n create: <\n const TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string,\n ExtractFragmentHandlerThisContext<TDefinition>\n >[],\n >(\n fn: (\n context: RouteFactoryContext<\n ExtractFragmentConfig<TDefinition>,\n ExtractFragmentDeps<TDefinition>,\n ExtractFragmentServices<TDefinition>,\n ExtractFragmentServiceDeps<TDefinition>\n > & {\n defineRoute: <\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1 | undefined,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n >(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n ExtractFragmentHandlerThisContext<TDefinition>\n >,\n ) => FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n ExtractFragmentHandlerThisContext<TDefinition>\n >;\n },\n ) => TRoutes,\n ) => RouteFactory<\n ExtractFragmentConfig<TDefinition>,\n ExtractFragmentDeps<TDefinition>,\n ExtractFragmentServices<TDefinition>,\n ExtractFragmentServiceDeps<TDefinition>,\n TRoutes\n >;\n};\n\n// Overload that infers types from FragmentDefinition (type parameter only)\nexport function defineRoutes<const TDefinition extends AnyFragmentDefinition>(): {\n create: <\n const TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string,\n ExtractFragmentHandlerThisContext<TDefinition>\n >[],\n >(\n fn: (\n context: RouteFactoryContext<\n ExtractFragmentConfig<TDefinition>,\n ExtractFragmentDeps<TDefinition>,\n ExtractFragmentServices<TDefinition>,\n ExtractFragmentServiceDeps<TDefinition>\n > & {\n defineRoute: <\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1 | undefined,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n >(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n ExtractFragmentHandlerThisContext<TDefinition>\n >,\n ) => FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n ExtractFragmentHandlerThisContext<TDefinition>\n >;\n },\n ) => TRoutes,\n ) => RouteFactory<\n ExtractFragmentConfig<TDefinition>,\n ExtractFragmentDeps<TDefinition>,\n ExtractFragmentServices<TDefinition>,\n ExtractFragmentServiceDeps<TDefinition>,\n TRoutes\n >;\n};\n\n// Implementation\nexport function defineRoutes<\n const TDefinition extends AnyFragmentDefinition | undefined = undefined,\n>(\n // Parameter is only used for type inference, not runtime\n _definition?: TDefinition,\n) {\n return {\n create: <\n const TRoutes extends readonly FragnoRouteConfig<\n HTTPMethod,\n string,\n StandardSchemaV1 | undefined,\n StandardSchemaV1 | undefined,\n string,\n string,\n TDefinition extends AnyFragmentDefinition\n ? ExtractFragmentThisContext<TDefinition>\n : RequestThisContext\n >[],\n >(\n fn: (\n context: RouteFactoryContext<\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentConfig<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentDeps<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentServices<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentServiceDeps<TDefinition> : {}\n > & {\n defineRoute: <\n const TMethod extends HTTPMethod,\n const TPath extends string,\n const TInputSchema extends StandardSchemaV1 | undefined,\n const TOutputSchema extends StandardSchemaV1 | undefined,\n const TErrorCode extends string = string,\n const TQueryParameters extends string = string,\n >(\n config: FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TDefinition extends AnyFragmentDefinition\n ? ExtractFragmentThisContext<TDefinition>\n : RequestThisContext\n >,\n ) => FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TDefinition extends AnyFragmentDefinition\n ? ExtractFragmentThisContext<TDefinition>\n : RequestThisContext\n >;\n },\n ) => TRoutes,\n ): RouteFactory<\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentConfig<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentDeps<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentServices<TDefinition> : {},\n TDefinition extends AnyFragmentDefinition ? ExtractFragmentServiceDeps<TDefinition> : {},\n TRoutes\n > => {\n // Create a wrapper around the callback that adds the defineRoute function\n return (ctx: RouteFactoryContext<unknown, unknown, unknown, unknown>) => {\n const extendedCtx = {\n ...ctx,\n defineRoute,\n };\n return fn(extendedCtx as any);\n };\n },\n };\n}\n"],"mappings":";;;;;AAqDA,SAAgB,sBAOd,SACA,mBAC2C;CAC3C,MAAMA,SAAgB,EAAE;AAExB,MAAK,MAAM,QAAQ,kBACjB,KAAI,OAAO,SAAS,YAAY;EAE9B,MAAM,gBAAgB,KAAK,QAAQ;AACnC,SAAO,KAAK,GAAG,cAAc;OAG7B,QAAO,KAAK,KAAK;AAIrB,QAAO;;AAgET,SAAgB,YASd,QAiBA;AACA,QAAO;;AAmOT,SAAgB,aAId,aACA;AACA,QAAO,EACL,SAaE,OA6CG;AAEH,UAAQ,QAAiE;AAKvE,UAAO,GAJa;IAClB,GAAG;IACH;IACD,CAC4B;;IAGlC"}
|
package/dist/client/client.d.ts
CHANGED
|
@@ -4,13 +4,14 @@ import { FetcherConfig, FragnoFragmentSharedConfig as FragnoFragmentSharedConfig
|
|
|
4
4
|
import { FragnoRouteConfig, HTTPMethod, NonGetHTTPMethod, RequestThisContext } from "../api/api.js";
|
|
5
5
|
import { AnyRouteOrFactory, FlattenRouteFactories } from "../api/route.js";
|
|
6
6
|
import { FragnoClientApiError, FragnoClientError, FragnoClientFetchAbortError, FragnoClientFetchError, FragnoClientFetchNetworkError, FragnoClientUnknownApiError, FragnoErrorOptions } from "./client-error.js";
|
|
7
|
-
import { FragnoFragmentSharedConfig } from "../api/fragment-instantiator.js";
|
|
7
|
+
import { AnyFragnoInstantiatedFragment, FragnoFragmentSharedConfig } from "../api/fragment-instantiator.js";
|
|
8
8
|
import { FragmentDefinition } from "../api/fragment-definition-builder.js";
|
|
9
9
|
import { ReadableAtom, Store } from "nanostores";
|
|
10
10
|
import { FetcherStore, MutatorStore } from "@nanostores/query";
|
|
11
11
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
12
12
|
|
|
13
13
|
//#region src/client/client.d.ts
|
|
14
|
+
|
|
14
15
|
/**
|
|
15
16
|
* Symbols used to identify hook types
|
|
16
17
|
*/
|
|
@@ -195,7 +196,7 @@ declare class ClientBuilder<TRoutes extends readonly FragnoRouteConfig<HTTPMetho
|
|
|
195
196
|
fetcher: typeof fetch;
|
|
196
197
|
defaultOptions: RequestInit | undefined;
|
|
197
198
|
};
|
|
198
|
-
createHook<TPath extends ExtractGetRoutePaths<TFragmentConfig["routes"]>>(path: ValidateGetRoutePath<TFragmentConfig["routes"], TPath>, options?: CreateHookOptions): FragnoClientHookData<"GET", TPath, NonNullable<ExtractRouteByPath<TFragmentConfig["routes"], TPath>["outputSchema"]>, NonNullable<ExtractRouteByPath<TFragmentConfig["routes"], TPath>["errorCodes"]>[number], NonNullable<ExtractRouteByPath<TFragmentConfig["routes"], TPath>["queryParameters"]>[number]>;
|
|
199
|
+
createHook<TPath extends ExtractGetRoutePaths<TFragmentConfig["routes"]>>(path: ValidateGetRoutePath<TFragmentConfig["routes"], TPath>, options?: CreateHookOptions): FragnoClientHookData<"GET", TPath, NonNullable<ExtractRouteByPath<TFragmentConfig["routes"], TPath, "GET">["outputSchema"]>, NonNullable<ExtractRouteByPath<TFragmentConfig["routes"], TPath, "GET">["errorCodes"]>[number], NonNullable<ExtractRouteByPath<TFragmentConfig["routes"], TPath, "GET">["queryParameters"]>[number]>;
|
|
199
200
|
createMutator<TPath extends ExtractNonGetRoutePaths<TFragmentConfig["routes"]>>(method: NonGetHTTPMethod, path: TPath, onInvalidate?: OnInvalidateFn<TPath>): FragnoClientMutatorData<NonGetHTTPMethod,
|
|
200
201
|
// TODO: This can be any Method, but should be related to TPath
|
|
201
202
|
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]>;
|
|
@@ -204,7 +205,7 @@ declare class ClientBuilder<TRoutes extends readonly FragnoRouteConfig<HTTPMetho
|
|
|
204
205
|
* Create a client builder for fragments using the new fragment definition API.
|
|
205
206
|
* This is the same as createClientBuilder but works with FragmentDefinition.
|
|
206
207
|
*/
|
|
207
|
-
declare function createClientBuilder<TConfig, TOptions extends FragnoPublicConfig, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage, const TRoutesOrFactories extends readonly AnyRouteOrFactory[]>(definition: FragmentDefinition<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage>, publicConfig: FragnoPublicClientConfig, routesOrFactories: TRoutesOrFactories, authorFetcherConfig?: FetcherConfig): ClientBuilder<FlattenRouteFactories<TRoutesOrFactories>, FragnoFragmentSharedConfig$1<FlattenRouteFactories<TRoutesOrFactories>>>;
|
|
208
|
+
declare function createClientBuilder<TConfig, TOptions extends FragnoPublicConfig, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage, const TRoutesOrFactories extends readonly AnyRouteOrFactory[], TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment> = {}>(definition: FragmentDefinition<TConfig, TOptions, TDeps, TBaseServices, TServices, TServiceDependencies, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>, publicConfig: FragnoPublicClientConfig, routesOrFactories: TRoutesOrFactories, authorFetcherConfig?: FetcherConfig): ClientBuilder<FlattenRouteFactories<TRoutesOrFactories>, FragnoFragmentSharedConfig$1<FlattenRouteFactories<TRoutesOrFactories>>>;
|
|
208
209
|
//#endregion
|
|
209
210
|
export { CacheLine, ClientBuilder, CreateHookOptions, ExtractGetRoutePaths, ExtractGetRoutes, ExtractNonGetRoutePaths, ExtractOutputSchemaForPath, ExtractRouteByPath, ExtractRoutePath, type FetcherConfig, FragnoClientApiError, FragnoClientError, FragnoClientFetchAbortError, FragnoClientFetchError, FragnoClientFetchNetworkError, FragnoClientHookData, FragnoClientMutatorData, FragnoClientUnknownApiError, FragnoErrorOptions, type FragnoFragmentSharedConfig, type FragnoPublicClientConfig, FragnoStoreData, HasGetRoutes, IsValidGetRoutePath, ObjectContainingStoreField, ValidateGetRoutePath, buildUrl, createClientBuilder, getCacheKey, isGetHook, isMutatorHook, isStore };
|
|
210
211
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","names":[],"sources":["../../src/client/client.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","names":[],"sources":["../../src/client/client.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/client/client.js
CHANGED
|
@@ -20,6 +20,85 @@ const GET_HOOK_SYMBOL = Symbol("fragno-get-hook");
|
|
|
20
20
|
const MUTATOR_HOOK_SYMBOL = Symbol("fragno-mutator-hook");
|
|
21
21
|
const STORE_SYMBOL = Symbol("fragno-store");
|
|
22
22
|
/**
|
|
23
|
+
* Check if a value contains files that should be sent as FormData.
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
function containsFiles(value) {
|
|
27
|
+
if (value instanceof File || value instanceof Blob) return true;
|
|
28
|
+
if (value instanceof FormData) return true;
|
|
29
|
+
if (typeof value === "object" && value !== null) return Object.values(value).some((v) => v instanceof File || v instanceof Blob || v instanceof FormData);
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Convert an object containing files to FormData.
|
|
34
|
+
* Handles nested File/Blob values by appending them directly.
|
|
35
|
+
* Other values are JSON-stringified.
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
function toFormData(value) {
|
|
39
|
+
const formData = new FormData();
|
|
40
|
+
for (const [key, val] of Object.entries(value)) if (val instanceof File) formData.append(key, val, val.name);
|
|
41
|
+
else if (val instanceof Blob) formData.append(key, val);
|
|
42
|
+
else if (val !== void 0 && val !== null) formData.append(key, typeof val === "string" ? val : JSON.stringify(val));
|
|
43
|
+
return formData;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Prepare request body and headers for sending.
|
|
47
|
+
* Handles FormData (file uploads) vs JSON data.
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
function prepareRequestBody(body, contentType) {
|
|
51
|
+
if (body === void 0) return { body: void 0 };
|
|
52
|
+
if (contentType === "application/octet-stream") {
|
|
53
|
+
if (body instanceof ReadableStream || body instanceof Blob || body instanceof File || body instanceof ArrayBuffer || body instanceof Uint8Array) return {
|
|
54
|
+
body,
|
|
55
|
+
headers: { "Content-Type": "application/octet-stream" }
|
|
56
|
+
};
|
|
57
|
+
throw new Error("Octet-stream routes only accept Blob, File, ArrayBuffer, Uint8Array, or ReadableStream bodies.");
|
|
58
|
+
}
|
|
59
|
+
if (body instanceof FormData) return { body };
|
|
60
|
+
if (body instanceof File) {
|
|
61
|
+
const formData = new FormData();
|
|
62
|
+
formData.append("file", body, body.name);
|
|
63
|
+
return { body: formData };
|
|
64
|
+
}
|
|
65
|
+
if (body instanceof Blob) {
|
|
66
|
+
const formData = new FormData();
|
|
67
|
+
formData.append("file", body);
|
|
68
|
+
return { body: formData };
|
|
69
|
+
}
|
|
70
|
+
if (typeof body === "object" && body !== null && containsFiles(body)) return { body: toFormData(body) };
|
|
71
|
+
return {
|
|
72
|
+
body: JSON.stringify(body),
|
|
73
|
+
headers: { "Content-Type": "application/json" }
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Merge request headers from multiple sources.
|
|
78
|
+
* Returns undefined if there are no headers to merge.
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
function mergeRequestHeaders(...headerSources) {
|
|
82
|
+
const result = {};
|
|
83
|
+
let hasHeaders = false;
|
|
84
|
+
for (const source of headerSources) {
|
|
85
|
+
if (!source) continue;
|
|
86
|
+
if (source instanceof Headers) for (const [key, value] of source.entries()) {
|
|
87
|
+
result[key] = value;
|
|
88
|
+
hasHeaders = true;
|
|
89
|
+
}
|
|
90
|
+
else if (Array.isArray(source)) for (const [key, value] of source) {
|
|
91
|
+
result[key] = value;
|
|
92
|
+
hasHeaders = true;
|
|
93
|
+
}
|
|
94
|
+
else for (const [key, value] of Object.entries(source)) {
|
|
95
|
+
result[key] = value;
|
|
96
|
+
hasHeaders = true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return hasHeaders ? result : void 0;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
23
102
|
* @internal
|
|
24
103
|
*/
|
|
25
104
|
function buildUrl(config, params) {
|
|
@@ -117,7 +196,10 @@ var ClientBuilder = class {
|
|
|
117
196
|
buildUrl(path, params) {
|
|
118
197
|
return buildUrl({
|
|
119
198
|
baseUrl: this.#publicConfig.baseUrl ?? "",
|
|
120
|
-
mountRoute: getMountRoute(
|
|
199
|
+
mountRoute: getMountRoute({
|
|
200
|
+
name: this.#fragmentConfig.name,
|
|
201
|
+
mountRoute: this.#publicConfig.mountRoute
|
|
202
|
+
}),
|
|
121
203
|
path
|
|
122
204
|
}, {
|
|
123
205
|
pathParams: params?.path,
|
|
@@ -155,7 +237,10 @@ var ClientBuilder = class {
|
|
|
155
237
|
if (route.method !== "GET") throw new Error(`Only GET routes are supported for hooks. Route '${route.path}' is a ${route.method} route.`);
|
|
156
238
|
if (!route.outputSchema) throw new Error(`Output schema is required for GET routes. Route '${route.path}' has no output schema.`);
|
|
157
239
|
const baseUrl = this.#publicConfig.baseUrl ?? "";
|
|
158
|
-
const mountRoute = getMountRoute(
|
|
240
|
+
const mountRoute = getMountRoute({
|
|
241
|
+
name: this.#fragmentConfig.name,
|
|
242
|
+
mountRoute: this.#publicConfig.mountRoute
|
|
243
|
+
});
|
|
159
244
|
const fetcher = this.#getFetcher();
|
|
160
245
|
const fetcherOptions = this.#getFetcherOptions();
|
|
161
246
|
async function callServerSideHandler(params) {
|
|
@@ -263,7 +348,10 @@ var ClientBuilder = class {
|
|
|
263
348
|
#createRouteQueryMutator(route, onInvalidate = (invalidate, params) => invalidate("GET", route.path, params)) {
|
|
264
349
|
const method = route.method;
|
|
265
350
|
const baseUrl = this.#publicConfig.baseUrl ?? "";
|
|
266
|
-
const mountRoute = getMountRoute(
|
|
351
|
+
const mountRoute = getMountRoute({
|
|
352
|
+
name: this.#fragmentConfig.name,
|
|
353
|
+
mountRoute: this.#publicConfig.mountRoute
|
|
354
|
+
});
|
|
267
355
|
const fetcher = this.#getFetcher();
|
|
268
356
|
const fetcherOptions = this.#getFetcherOptions();
|
|
269
357
|
async function executeMutateQuery({ body, path, query }) {
|
|
@@ -285,11 +373,16 @@ var ClientBuilder = class {
|
|
|
285
373
|
});
|
|
286
374
|
let response;
|
|
287
375
|
try {
|
|
288
|
-
|
|
376
|
+
const { body: preparedBody, headers: bodyHeaders } = prepareRequestBody(body, route.contentType);
|
|
377
|
+
const mergedHeaders = mergeRequestHeaders(fetcherOptions?.headers, bodyHeaders);
|
|
378
|
+
const requestOptions = {
|
|
289
379
|
...fetcherOptions,
|
|
290
380
|
method,
|
|
291
|
-
body:
|
|
292
|
-
|
|
381
|
+
body: preparedBody,
|
|
382
|
+
...mergedHeaders ? { headers: mergedHeaders } : {}
|
|
383
|
+
};
|
|
384
|
+
if (preparedBody instanceof ReadableStream) requestOptions.duplex = "half";
|
|
385
|
+
response = await fetcher(url, requestOptions);
|
|
293
386
|
} catch (error) {
|
|
294
387
|
throw FragnoClientFetchError.fromUnknownFetchError(error);
|
|
295
388
|
}
|
|
@@ -384,7 +477,10 @@ function createClientBuilder(definition, publicConfig, routesOrFactories, author
|
|
|
384
477
|
name: definition.name,
|
|
385
478
|
routes
|
|
386
479
|
};
|
|
387
|
-
const mountRoute =
|
|
480
|
+
const mountRoute = getMountRoute({
|
|
481
|
+
name: definition.name,
|
|
482
|
+
mountRoute: publicConfig.mountRoute
|
|
483
|
+
});
|
|
388
484
|
const mergedFetcherConfig = mergeFetcherConfigs(authorFetcherConfig, publicConfig.fetcherConfig);
|
|
389
485
|
return new ClientBuilder({
|
|
390
486
|
...publicConfig,
|