@hono/zod-openapi 0.16.3 → 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 CHANGED
@@ -51,7 +51,8 @@ const UserSchema = z
51
51
  .openapi('User')
52
52
  ```
53
53
 
54
- > [!TIP] > `UserSchema` schema will be registered as `"#/components/schemas/User"` refs in the OpenAPI document.
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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hono/zod-openapi",
3
- "version": "0.16.3",
3
+ "version": "0.17.0",
4
4
  "description": "A wrapper class of Hono which supports OpenAPI.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",