@hono/zod-openapi 0.16.4 → 0.17.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/README.md +2 -1
- package/dist/index.d.mts +35 -2
- package/dist/index.d.ts +35 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -51,7 +51,8 @@ const UserSchema = z
|
|
|
51
51
|
.openapi('User')
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
> [!TIP]
|
|
54
|
+
> [!TIP]
|
|
55
|
+
> `UserSchema` schema will be registered as `"#/components/schemas/User"` refs in the OpenAPI document.
|
|
55
56
|
> If you want to register the schema as referenced components, use `.openapi()` method.
|
|
56
57
|
|
|
57
58
|
Next, create a route:
|
package/dist/index.d.mts
CHANGED
|
@@ -85,6 +85,39 @@ type OpenAPIHonoOptions<E extends Env> = {
|
|
|
85
85
|
defaultHook?: Hook<any, E, any, any>;
|
|
86
86
|
};
|
|
87
87
|
type HonoInit<E extends Env> = ConstructorParameters<typeof Hono>[0] & OpenAPIHonoOptions<E>;
|
|
88
|
+
/**
|
|
89
|
+
* Turns `T | T[] | undefined` into `T[]`
|
|
90
|
+
*/
|
|
91
|
+
type AsArray<T> = T extends undefined ? [] : T extends any[] ? T : [T];
|
|
92
|
+
/**
|
|
93
|
+
* Like simplify but recursive
|
|
94
|
+
*/
|
|
95
|
+
type DeepSimplify<T> = {
|
|
96
|
+
[KeyType in keyof T]: T[KeyType] extends object ? DeepSimplify<T[KeyType]> : T[KeyType];
|
|
97
|
+
} & {};
|
|
98
|
+
/**
|
|
99
|
+
* Helper to infer generics from {@link MiddlewareHandler}
|
|
100
|
+
*/
|
|
101
|
+
type OfHandlerType<T extends MiddlewareHandler> = T extends MiddlewareHandler<infer E, infer P, infer I> ? {
|
|
102
|
+
env: E;
|
|
103
|
+
path: P;
|
|
104
|
+
input: I;
|
|
105
|
+
} : never;
|
|
106
|
+
/**
|
|
107
|
+
* Reduce a tuple of middleware handlers into a single
|
|
108
|
+
* handler representing the composition of all
|
|
109
|
+
* handlers.
|
|
110
|
+
*/
|
|
111
|
+
type MiddlewareToHandlerType<M extends MiddlewareHandler<any, any, any>[]> = M extends [
|
|
112
|
+
infer First,
|
|
113
|
+
infer Second,
|
|
114
|
+
...infer Rest
|
|
115
|
+
] ? First extends MiddlewareHandler<any, any, any> ? Second extends MiddlewareHandler<any, any, any> ? Rest extends MiddlewareHandler<any, any, any>[] ? MiddlewareToHandlerType<[
|
|
116
|
+
MiddlewareHandler<DeepSimplify<OfHandlerType<First>['env'] & OfHandlerType<Second>['env']>, // Combine envs
|
|
117
|
+
OfHandlerType<First>['path'], // Keep path from First
|
|
118
|
+
OfHandlerType<First>['input']>,
|
|
119
|
+
...Rest
|
|
120
|
+
]> : never : never : never : M extends [infer Last] ? Last : never;
|
|
88
121
|
type RouteHandler<R extends RouteConfig, E extends Env = Env, I extends Input = InputTypeParam<R> & InputTypeQuery<R> & InputTypeHeader<R> & InputTypeCookie<R> & InputTypeForm<R> & InputTypeJson<R>, P extends string = ConvertPathType<R['path']>> = Handler<E, P, I, R extends {
|
|
89
122
|
responses: {
|
|
90
123
|
[statusCode: number]: {
|
|
@@ -132,7 +165,7 @@ declare class OpenAPIHono<E extends Env = Env, S extends Schema = {}, BasePath e
|
|
|
132
165
|
* }
|
|
133
166
|
*)
|
|
134
167
|
*/
|
|
135
|
-
openapi: <R extends RouteConfig, I extends Input = InputTypeBase<R, "params", "param"> & InputTypeBase<R, "query", "query"> & InputTypeBase<R, "headers", "header"> & InputTypeBase<R, "cookies", "cookie"> & InputTypeForm<R> & InputTypeJson<R>, P extends string = ConvertPathType<R["path"]>>({ middleware: routeMiddleware, ...route }: R, handler: Handler<E, P, I, R extends {
|
|
168
|
+
openapi: <R extends RouteConfig, I extends Input = InputTypeBase<R, "params", "param"> & InputTypeBase<R, "query", "query"> & InputTypeBase<R, "headers", "header"> & InputTypeBase<R, "cookies", "cookie"> & InputTypeForm<R> & InputTypeJson<R>, P extends string = ConvertPathType<R["path"]>>({ middleware: routeMiddleware, ...route }: R, handler: Handler<R['middleware'] extends MiddlewareHandler[] | MiddlewareHandler ? OfHandlerType<MiddlewareToHandlerType<AsArray<R['middleware']>>>['env'] & E : E, P, I, R extends {
|
|
136
169
|
responses: {
|
|
137
170
|
[statusCode: number]: {
|
|
138
171
|
content: {
|
|
@@ -164,4 +197,4 @@ declare const createRoute: <P extends string, R extends Omit<RouteConfig, "path"
|
|
|
164
197
|
getRoutingPath(): RoutingPath<R['path']>;
|
|
165
198
|
};
|
|
166
199
|
|
|
167
|
-
export { type Hook, OpenAPIHono, type OpenAPIHonoOptions, type OpenAPIObjectConfigure, type RouteConfig, type RouteConfigToTypedResponse, type RouteHandler, type RouteHook, createRoute };
|
|
200
|
+
export { type DeepSimplify, type Hook, type MiddlewareToHandlerType, type OfHandlerType, OpenAPIHono, type OpenAPIHonoOptions, type OpenAPIObjectConfigure, type RouteConfig, type RouteConfigToTypedResponse, type RouteHandler, type RouteHook, createRoute };
|
package/dist/index.d.ts
CHANGED
|
@@ -85,6 +85,39 @@ type OpenAPIHonoOptions<E extends Env> = {
|
|
|
85
85
|
defaultHook?: Hook<any, E, any, any>;
|
|
86
86
|
};
|
|
87
87
|
type HonoInit<E extends Env> = ConstructorParameters<typeof Hono>[0] & OpenAPIHonoOptions<E>;
|
|
88
|
+
/**
|
|
89
|
+
* Turns `T | T[] | undefined` into `T[]`
|
|
90
|
+
*/
|
|
91
|
+
type AsArray<T> = T extends undefined ? [] : T extends any[] ? T : [T];
|
|
92
|
+
/**
|
|
93
|
+
* Like simplify but recursive
|
|
94
|
+
*/
|
|
95
|
+
type DeepSimplify<T> = {
|
|
96
|
+
[KeyType in keyof T]: T[KeyType] extends object ? DeepSimplify<T[KeyType]> : T[KeyType];
|
|
97
|
+
} & {};
|
|
98
|
+
/**
|
|
99
|
+
* Helper to infer generics from {@link MiddlewareHandler}
|
|
100
|
+
*/
|
|
101
|
+
type OfHandlerType<T extends MiddlewareHandler> = T extends MiddlewareHandler<infer E, infer P, infer I> ? {
|
|
102
|
+
env: E;
|
|
103
|
+
path: P;
|
|
104
|
+
input: I;
|
|
105
|
+
} : never;
|
|
106
|
+
/**
|
|
107
|
+
* Reduce a tuple of middleware handlers into a single
|
|
108
|
+
* handler representing the composition of all
|
|
109
|
+
* handlers.
|
|
110
|
+
*/
|
|
111
|
+
type MiddlewareToHandlerType<M extends MiddlewareHandler<any, any, any>[]> = M extends [
|
|
112
|
+
infer First,
|
|
113
|
+
infer Second,
|
|
114
|
+
...infer Rest
|
|
115
|
+
] ? First extends MiddlewareHandler<any, any, any> ? Second extends MiddlewareHandler<any, any, any> ? Rest extends MiddlewareHandler<any, any, any>[] ? MiddlewareToHandlerType<[
|
|
116
|
+
MiddlewareHandler<DeepSimplify<OfHandlerType<First>['env'] & OfHandlerType<Second>['env']>, // Combine envs
|
|
117
|
+
OfHandlerType<First>['path'], // Keep path from First
|
|
118
|
+
OfHandlerType<First>['input']>,
|
|
119
|
+
...Rest
|
|
120
|
+
]> : never : never : never : M extends [infer Last] ? Last : never;
|
|
88
121
|
type RouteHandler<R extends RouteConfig, E extends Env = Env, I extends Input = InputTypeParam<R> & InputTypeQuery<R> & InputTypeHeader<R> & InputTypeCookie<R> & InputTypeForm<R> & InputTypeJson<R>, P extends string = ConvertPathType<R['path']>> = Handler<E, P, I, R extends {
|
|
89
122
|
responses: {
|
|
90
123
|
[statusCode: number]: {
|
|
@@ -132,7 +165,7 @@ declare class OpenAPIHono<E extends Env = Env, S extends Schema = {}, BasePath e
|
|
|
132
165
|
* }
|
|
133
166
|
*)
|
|
134
167
|
*/
|
|
135
|
-
openapi: <R extends RouteConfig, I extends Input = InputTypeBase<R, "params", "param"> & InputTypeBase<R, "query", "query"> & InputTypeBase<R, "headers", "header"> & InputTypeBase<R, "cookies", "cookie"> & InputTypeForm<R> & InputTypeJson<R>, P extends string = ConvertPathType<R["path"]>>({ middleware: routeMiddleware, ...route }: R, handler: Handler<E, P, I, R extends {
|
|
168
|
+
openapi: <R extends RouteConfig, I extends Input = InputTypeBase<R, "params", "param"> & InputTypeBase<R, "query", "query"> & InputTypeBase<R, "headers", "header"> & InputTypeBase<R, "cookies", "cookie"> & InputTypeForm<R> & InputTypeJson<R>, P extends string = ConvertPathType<R["path"]>>({ middleware: routeMiddleware, ...route }: R, handler: Handler<R['middleware'] extends MiddlewareHandler[] | MiddlewareHandler ? OfHandlerType<MiddlewareToHandlerType<AsArray<R['middleware']>>>['env'] & E : E, P, I, R extends {
|
|
136
169
|
responses: {
|
|
137
170
|
[statusCode: number]: {
|
|
138
171
|
content: {
|
|
@@ -164,4 +197,4 @@ declare const createRoute: <P extends string, R extends Omit<RouteConfig, "path"
|
|
|
164
197
|
getRoutingPath(): RoutingPath<R['path']>;
|
|
165
198
|
};
|
|
166
199
|
|
|
167
|
-
export { type Hook, OpenAPIHono, type OpenAPIHonoOptions, type OpenAPIObjectConfigure, type RouteConfig, type RouteConfigToTypedResponse, type RouteHandler, type RouteHook, createRoute };
|
|
200
|
+
export { type DeepSimplify, type Hook, type MiddlewareToHandlerType, type OfHandlerType, OpenAPIHono, type OpenAPIHonoOptions, type OpenAPIObjectConfigure, type RouteConfig, type RouteConfigToTypedResponse, type RouteHandler, type RouteHook, createRoute };
|