@nxgt/openapi-hono 0.1.2 → 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/README.md +45 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/types.d.ts +48 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -420,7 +420,11 @@ get<P extends /* a GET path of the scope, starting with the prefix */>(
|
|
|
420
420
|
```
|
|
421
421
|
|
|
422
422
|
Registers the operation at `path`, written as the spec writes it
|
|
423
|
-
(`/employees/{id}`), with middlewares then its handler.
|
|
423
|
+
(`/employees/{id}`), with middlewares then its handler. Its type,
|
|
424
|
+
[`Register`](#register), has one overload per chain length, up to five
|
|
425
|
+
middlewares, then one for longer chains, as Hono's own `app.get` has. With
|
|
426
|
+
a fixed length, the handler's `c` stays typed while its reply is being
|
|
427
|
+
written, so the editor can offer the body's fields. The handler's
|
|
424
428
|
`c.req.valid()` and replies are those of the operation. Throws at
|
|
425
429
|
registration in the cases listed under [Modules](#modules); `head()` always
|
|
426
430
|
throws, since Hono answers `HEAD` with the `GET` route.
|
|
@@ -432,7 +436,7 @@ operation<Id extends Sc['ids']>(id: Id, ...chain: Chain<S, Id>): Routes<S, Sc, P
|
|
|
432
436
|
```
|
|
433
437
|
|
|
434
438
|
Registers an operation by its `operationId` instead of its path. Throws as
|
|
435
|
-
the methods above.
|
|
439
|
+
the methods above. Its type, `RegisterOperation`, has the same overloads.
|
|
436
440
|
|
|
437
441
|
##### `routes.validate`
|
|
438
442
|
|
|
@@ -560,12 +564,43 @@ The `stream` that `streamLines()` hands to `write`.
|
|
|
560
564
|
|
|
561
565
|
```ts
|
|
562
566
|
type RouteHandler<S extends ApiSpec, Id extends string> = (
|
|
563
|
-
c: Context</* … */>, // c.req.valid() holds the operation's validated input
|
|
567
|
+
c: DeclaredJson<Reply> & Context</* … */>, // c.req.valid() holds the operation's validated input
|
|
564
568
|
next: Next,
|
|
565
569
|
) => Reply | Promise<Reply>; // S['replies'][Id]
|
|
566
570
|
```
|
|
567
571
|
|
|
568
|
-
The handler of operation `Id`: the last argument of a registration.
|
|
572
|
+
The handler of operation `Id`: the last argument of a registration. Its `c`
|
|
573
|
+
is still a `Context`, for any helper that takes one.
|
|
574
|
+
|
|
575
|
+
#### `DeclaredJson`
|
|
576
|
+
|
|
577
|
+
```ts
|
|
578
|
+
interface DeclaredJson<R> {
|
|
579
|
+
json<Status extends /* a JSON status R declares */, Body extends Partial</* its body */>>(
|
|
580
|
+
body: Body,
|
|
581
|
+
status: Status,
|
|
582
|
+
headers?: Record<string, string | string[]>,
|
|
583
|
+
): Response & TypedResponse<JSONParsed<Body>, Status, 'json'>;
|
|
584
|
+
}
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
The `c.json()` a handler gets on top of Hono's own. It types the body by the
|
|
588
|
+
status passed after it, so the editor offers the fields of the body declared
|
|
589
|
+
for that status, and then only those not written yet. Hono's `c.json()` has
|
|
590
|
+
nothing to offer, since it takes any `T`. The reply is typed as Hono types
|
|
591
|
+
it, so what the handler returns is checked against the spec as before. A
|
|
592
|
+
body that is not even part of the declared one falls through to Hono's
|
|
593
|
+
`c.json()`, and the handler's return is refused there.
|
|
594
|
+
|
|
595
|
+
#### `Register`
|
|
596
|
+
|
|
597
|
+
```ts
|
|
598
|
+
interface Register<S extends ApiSpec, Sc extends Scope, Prefix extends string, M extends Method>;
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
The type of `routes.get()` and the other methods: see
|
|
602
|
+
[`routes.get()`](#routesget-routesput-routespost-routesdelete-routesoptions-routeshead-routespatch-routestrace-routesquery).
|
|
603
|
+
`RegisterOperation<S, Sc, Prefix>` is `routes.operation()`'s.
|
|
569
604
|
|
|
570
605
|
#### `Chain`
|
|
571
606
|
|
|
@@ -675,7 +710,12 @@ the table is one.
|
|
|
675
710
|
## Traps
|
|
676
711
|
|
|
677
712
|
- **Give `c.json()` a status.** Without one, Hono types the reply with any
|
|
678
|
-
contentful status, and it matches no declared reply.
|
|
713
|
+
contentful status, and it matches no declared reply. Without one, the
|
|
714
|
+
editor also has no declared body to offer.
|
|
715
|
+
- **With `dates: 'date'`, completion stops at the first `Date`.** The
|
|
716
|
+
declared body is the one JSON carries, with dates as strings. A body that
|
|
717
|
+
holds a `Date` falls through to Hono's `c.json()`, which still checks it,
|
|
718
|
+
but has no fields to offer.
|
|
679
719
|
- **Reply with plain objects.** A Mongoose document does not type as its
|
|
680
720
|
schema; return `.lean()` results.
|
|
681
721
|
- **Read the body through `c.req`, never `c.req.raw`.** A middleware that
|
package/dist/index.d.ts
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
export { createApi, type OperationTable, type RuntimeMedia, type RuntimeOperation, type Validator, } from './engine';
|
|
6
6
|
export { type SchemaIssue, type ValidationErrorHook, type ValidationFailure, type ValidationIssue, type ValidationTarget, validationErrorHandler, } from './errors';
|
|
7
7
|
export { type EventWriter, type LineWriter, streamEvents, streamLines, } from './streams';
|
|
8
|
-
export type { Api, ApiOptions, ApiSpec, Chain, Method, RouteHandler, Routes, RoutesOptions, Scope, ScopeOf, Tagged, Whole, } from './types';
|
|
8
|
+
export type { Api, ApiOptions, ApiSpec, Chain, DeclaredJson, Method, Register, RegisterOperation, RouteHandler, Routes, RoutesOptions, Scope, ScopeOf, Tagged, Whole, } from './types';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACN,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,SAAS,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,sBAAsB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,YAAY,EACZ,WAAW,GACX,MAAM,WAAW,CAAC;AACnB,YAAY,EACX,GAAG,EACH,UAAU,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,aAAa,EACb,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,GACL,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACN,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,SAAS,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,sBAAsB,GACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,YAAY,EACZ,WAAW,GACX,MAAM,WAAW,CAAC;AACnB,YAAY,EACX,GAAG,EACH,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,MAAM,EACN,aAAa,EACb,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,GACL,MAAM,SAAS,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* generator wrote, never a conditional type, so a route costs TypeScript the
|
|
4
4
|
* same whether the spec has five operations or five hundred.
|
|
5
5
|
*/
|
|
6
|
-
import type { Context, Hono, MiddlewareHandler, Next } from 'hono';
|
|
6
|
+
import type { Context, Hono, MiddlewareHandler, Next, TypedResponse } from 'hono';
|
|
7
|
+
import type { JSONParsed } from 'hono/utils/types';
|
|
7
8
|
import type { ValidationErrorHook } from './errors';
|
|
8
9
|
export type Method = 'get' | 'put' | 'post' | 'delete' | 'options' | 'head' | 'patch' | 'trace' | 'query';
|
|
9
10
|
type ByMethod = {
|
|
@@ -43,11 +44,25 @@ export type ScopeOf<S extends ApiSpec, Tag extends string> = [Tag] extends [
|
|
|
43
44
|
] ? Whole<S> : Tagged<S, Tag>;
|
|
44
45
|
type Entry<S extends ApiSpec, Id extends string> = S['operations'][Id & keyof S['operations']];
|
|
45
46
|
type Reply<S extends ApiSpec, Id extends string> = S['replies'][Id & keyof S['replies']];
|
|
47
|
+
/** A JSON reply of the generated `Replies`. */
|
|
48
|
+
type JsonReply = TypedResponse<any, any, 'json'>;
|
|
49
|
+
/**
|
|
50
|
+
* `c.json(body, status)` over the JSON replies `R` declares: the body is typed
|
|
51
|
+
* by its status as it is written, so an editor offers its fields. Hono's own
|
|
52
|
+
* `c.json` stays behind it, and the reply is typed as Hono types it, so what
|
|
53
|
+
* the handler returns is checked against the spec as before. A body that is
|
|
54
|
+
* not even part of the declared one falls to Hono's, and is refused there.
|
|
55
|
+
*/
|
|
56
|
+
export interface DeclaredJson<R> {
|
|
57
|
+
json<Status extends Extract<R, JsonReply>['_status'], Body extends Partial<Extract<R, JsonReply & {
|
|
58
|
+
_status: Status;
|
|
59
|
+
}>['_data']>>(body: Body, status: Status, headers?: Record<string, string | string[]>): Response & TypedResponse<JSONParsed<Body>, Status, 'json'>;
|
|
60
|
+
}
|
|
46
61
|
/**
|
|
47
62
|
* The handler of operation `Id`: `c.req.valid()` holds its validated
|
|
48
63
|
* parameters and body, and it returns one of the replies the spec declares.
|
|
49
64
|
*/
|
|
50
|
-
export type RouteHandler<S extends ApiSpec, Id extends string> = (c: Context<any, (Entry<S, Id> & {
|
|
65
|
+
export type RouteHandler<S extends ApiSpec, Id extends string> = (c: DeclaredJson<Reply<S, Id>> & Context<any, (Entry<S, Id> & {
|
|
51
66
|
honoPath: string;
|
|
52
67
|
})['honoPath'], {
|
|
53
68
|
out: Entry<S, Id> & {};
|
|
@@ -77,11 +92,40 @@ export interface RoutesOptions<Prefix extends string = '', Tag extends string =
|
|
|
77
92
|
/** Offers only the operations with this tag. */
|
|
78
93
|
tag?: Tag;
|
|
79
94
|
}
|
|
95
|
+
/** The `operationId` at `M P`. */
|
|
96
|
+
type RouteId<S extends ApiSpec, M extends Method, P extends string> = S['routes'][`${M} ${P}` & keyof S['routes']] & string;
|
|
97
|
+
type Mw = MiddlewareHandler;
|
|
98
|
+
/**
|
|
99
|
+
* Registers the route of `M` at a path: the handler, after up to five
|
|
100
|
+
* middlewares, then any number. One overload per length, as Hono's own
|
|
101
|
+
* `app.get` has: with a rest of middlewares before it, a handler whose reply
|
|
102
|
+
* is not finished yet could be one of them, and its `c` would go untyped, so
|
|
103
|
+
* an editor would offer nothing in `c.json({ … })` while it is written.
|
|
104
|
+
*/
|
|
105
|
+
export interface Register<S extends ApiSpec, Sc extends Scope, Prefix extends string, M extends Method> {
|
|
106
|
+
<P extends Sc['paths'][M] & `${Prefix}${string}`>(path: P, handler: RouteHandler<S, RouteId<S, M, P>>): Routes<S, Sc, Prefix>;
|
|
107
|
+
<P extends Sc['paths'][M] & `${Prefix}${string}`>(path: P, m1: Mw, handler: RouteHandler<S, RouteId<S, M, P>>): Routes<S, Sc, Prefix>;
|
|
108
|
+
<P extends Sc['paths'][M] & `${Prefix}${string}`>(path: P, m1: Mw, m2: Mw, handler: RouteHandler<S, RouteId<S, M, P>>): Routes<S, Sc, Prefix>;
|
|
109
|
+
<P extends Sc['paths'][M] & `${Prefix}${string}`>(path: P, m1: Mw, m2: Mw, m3: Mw, handler: RouteHandler<S, RouteId<S, M, P>>): Routes<S, Sc, Prefix>;
|
|
110
|
+
<P extends Sc['paths'][M] & `${Prefix}${string}`>(path: P, m1: Mw, m2: Mw, m3: Mw, m4: Mw, handler: RouteHandler<S, RouteId<S, M, P>>): Routes<S, Sc, Prefix>;
|
|
111
|
+
<P extends Sc['paths'][M] & `${Prefix}${string}`>(path: P, m1: Mw, m2: Mw, m3: Mw, m4: Mw, m5: Mw, handler: RouteHandler<S, RouteId<S, M, P>>): Routes<S, Sc, Prefix>;
|
|
112
|
+
<P extends Sc['paths'][M] & `${Prefix}${string}`>(path: P, ...chain: Chain<S, RouteId<S, M, P>>): Routes<S, Sc, Prefix>;
|
|
113
|
+
}
|
|
114
|
+
/** `routes.operation()`, with the same overloads as a method's. */
|
|
115
|
+
export interface RegisterOperation<S extends ApiSpec, Sc extends Scope, Prefix extends string> {
|
|
116
|
+
<Id extends Sc['ids']>(id: Id, handler: RouteHandler<S, Id>): Routes<S, Sc, Prefix>;
|
|
117
|
+
<Id extends Sc['ids']>(id: Id, m1: Mw, handler: RouteHandler<S, Id>): Routes<S, Sc, Prefix>;
|
|
118
|
+
<Id extends Sc['ids']>(id: Id, m1: Mw, m2: Mw, handler: RouteHandler<S, Id>): Routes<S, Sc, Prefix>;
|
|
119
|
+
<Id extends Sc['ids']>(id: Id, m1: Mw, m2: Mw, m3: Mw, handler: RouteHandler<S, Id>): Routes<S, Sc, Prefix>;
|
|
120
|
+
<Id extends Sc['ids']>(id: Id, m1: Mw, m2: Mw, m3: Mw, m4: Mw, handler: RouteHandler<S, Id>): Routes<S, Sc, Prefix>;
|
|
121
|
+
<Id extends Sc['ids']>(id: Id, m1: Mw, m2: Mw, m3: Mw, m4: Mw, m5: Mw, handler: RouteHandler<S, Id>): Routes<S, Sc, Prefix>;
|
|
122
|
+
<Id extends Sc['ids']>(id: Id, ...chain: Chain<S, Id>): Routes<S, Sc, Prefix>;
|
|
123
|
+
}
|
|
80
124
|
export type Routes<S extends ApiSpec, Sc extends Scope = Whole<S>, Prefix extends string = ''> = {
|
|
81
|
-
readonly [M in Method]: <
|
|
125
|
+
readonly [M in Method]: Register<S, Sc, Prefix, M>;
|
|
82
126
|
} & {
|
|
83
127
|
/** Registers an operation by its `operationId`. */
|
|
84
|
-
operation
|
|
128
|
+
readonly operation: RegisterOperation<S, Sc, Prefix>;
|
|
85
129
|
/**
|
|
86
130
|
* Marks where in a chain the request is validated, when a middleware
|
|
87
131
|
* needs validated input: `routes.put(path, auth, routes.validate, check, handler)`.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|