@nxgt/openapi-hono 0.1.1 → 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 +49 -6
- 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
|
@@ -83,7 +83,10 @@ routes.operation('deleteEmployee', auth, async (c) => {
|
|
|
83
83
|
|
|
84
84
|
By default, a request the spec refuses gets a 400 response. Its body is
|
|
85
85
|
`{ status, message: 'errors.validation-failed', timestamp, issues }`, and
|
|
86
|
-
each issue is `{ target, path, code, message }`.
|
|
86
|
+
each issue is `{ target, path, code, message }`. `@nxgt/openapi-codegen`
|
|
87
|
+
declares it, as `ValidationErrorBody`, on every operation that takes an
|
|
88
|
+
input, so a client that checks its replies reads it. To answer differently,
|
|
89
|
+
generate with `validationErrors: false` and declare your own body:
|
|
87
90
|
|
|
88
91
|
```ts
|
|
89
92
|
const routes = createRoutes(app, {
|
|
@@ -417,7 +420,11 @@ get<P extends /* a GET path of the scope, starting with the prefix */>(
|
|
|
417
420
|
```
|
|
418
421
|
|
|
419
422
|
Registers the operation at `path`, written as the spec writes it
|
|
420
|
-
(`/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
|
|
421
428
|
`c.req.valid()` and replies are those of the operation. Throws at
|
|
422
429
|
registration in the cases listed under [Modules](#modules); `head()` always
|
|
423
430
|
throws, since Hono answers `HEAD` with the `GET` route.
|
|
@@ -429,7 +436,7 @@ operation<Id extends Sc['ids']>(id: Id, ...chain: Chain<S, Id>): Routes<S, Sc, P
|
|
|
429
436
|
```
|
|
430
437
|
|
|
431
438
|
Registers an operation by its `operationId` instead of its path. Throws as
|
|
432
|
-
the methods above.
|
|
439
|
+
the methods above. Its type, `RegisterOperation`, has the same overloads.
|
|
433
440
|
|
|
434
441
|
##### `routes.validate`
|
|
435
442
|
|
|
@@ -557,12 +564,43 @@ The `stream` that `streamLines()` hands to `write`.
|
|
|
557
564
|
|
|
558
565
|
```ts
|
|
559
566
|
type RouteHandler<S extends ApiSpec, Id extends string> = (
|
|
560
|
-
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
|
|
561
568
|
next: Next,
|
|
562
569
|
) => Reply | Promise<Reply>; // S['replies'][Id]
|
|
563
570
|
```
|
|
564
571
|
|
|
565
|
-
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.
|
|
566
604
|
|
|
567
605
|
#### `Chain`
|
|
568
606
|
|
|
@@ -672,7 +710,12 @@ the table is one.
|
|
|
672
710
|
## Traps
|
|
673
711
|
|
|
674
712
|
- **Give `c.json()` a status.** Without one, Hono types the reply with any
|
|
675
|
-
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.
|
|
676
719
|
- **Reply with plain objects.** A Mongoose document does not type as its
|
|
677
720
|
schema; return `.lean()` results.
|
|
678
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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"}
|