Skip to content

Commit c200ef5

Browse files
authored
Merge pull request #9 from dev-five-git/impl-middleware
Impl middleware
2 parents 50f9013 + 9bc1f6b commit c200ef5

File tree

11 files changed

+478
-30
lines changed

11 files changed

+478
-30
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"changes":{"packages/utils/package.json":"Patch","packages/core/package.json":"Patch","packages/vite-plugin/package.json":"Patch","packages/generator/package.json":"Patch","packages/fetch/package.json":"Patch","packages/next-plugin/package.json":"Patch","packages/rsbuild-plugin/package.json":"Patch","packages/webpack-plugin/package.json":"Patch"},"note":"Implement middleware","date":"2025-12-01T11:37:14.879632Z"}

examples/next/app/page.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ export default function Home() {
1919
api
2020
.get('getUserById', {
2121
params: { id: 1 },
22+
query: {
23+
name: 'John Doe',
24+
},
2225
})
2326
.then((res) => {
2427
console.log(res)

examples/next/openapi.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@
6565
"schema": {
6666
"type": "integer"
6767
}
68+
},
69+
{
70+
"name": "name",
71+
"in": "query",
72+
"required": true,
73+
"schema": {
74+
"type": "string"
75+
}
6876
}
6977
],
7078
"responses": {

packages/core/src/additional.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { Middleware } from './middleware'
2+
13
export type Additional<
24
T extends string,
35
Target extends object,
@@ -9,6 +11,8 @@ export type RequiredOptions<T extends object> = keyof T extends undefined
911
export type DevupApiRequestInit = Omit<RequestInit, 'body'> & {
1012
body?: object | RequestInit['body']
1113
params?: Record<string, string | number | boolean | null | undefined>
14+
query?: Record<string, string | number | boolean | null | undefined>
15+
middleware?: Middleware[]
1216
}
1317

1418
// biome-ignore lint/suspicious/noExplicitAny: any is used to allow for flexibility in the type

packages/core/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export * from './additional'
22
export * from './api-struct'
3+
export * from './middleware'
34
export * from './options'
45
export * from './url-map'
56
export * from './utils'

packages/core/src/middleware.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import type { DevupApiRequestInit } from './additional'
2+
import type { PromiseOr } from './utils'
3+
4+
export interface MiddlewareCallbackParams {
5+
request: Request
6+
schemaPath: string
7+
params?: Record<string, unknown>
8+
query?: Record<string, unknown>
9+
headers?: DevupApiRequestInit['headers']
10+
body?: DevupApiRequestInit['body']
11+
}
12+
13+
type MiddlewareOnRequest = (
14+
params: MiddlewareCallbackParams,
15+
) => PromiseOr<undefined | Request | Response>
16+
type MiddlewareOnResponse = (
17+
params: MiddlewareCallbackParams & { response: Response },
18+
) => PromiseOr<undefined | Error | Response>
19+
type MiddlewareOnError = (
20+
params: MiddlewareCallbackParams & { error: unknown },
21+
) => PromiseOr<undefined | Error | Response>
22+
23+
export type Middleware =
24+
| {
25+
onRequest: MiddlewareOnRequest
26+
onResponse?: MiddlewareOnResponse
27+
onError?: MiddlewareOnError
28+
}
29+
| {
30+
onRequest?: MiddlewareOnRequest
31+
onResponse: MiddlewareOnResponse
32+
onError?: MiddlewareOnError
33+
}
34+
| {
35+
onRequest?: MiddlewareOnRequest
36+
onResponse?: MiddlewareOnResponse
37+
onError: MiddlewareOnError
38+
}

packages/core/src/utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,5 @@ export type ConditionalKeys<T, F = string> = keyof T extends undefined
44
export type ConditionalScope<T, K extends string> = K extends keyof T
55
? T[K]
66
: object
7+
8+
export type PromiseOr<T> = Promise<T> | T

0 commit comments

Comments
 (0)