@kamaalio/hono-standard-openapi 0.0.5 → 0.0.7
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 +7 -2
- package/dist/app.d.ts +10 -4
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +19 -42
- package/dist/app.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/route.d.ts +2 -2
- package/dist/route.d.ts.map +1 -1
- package/dist/route.js +0 -2
- package/dist/route.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
- package/dist/validator.d.ts +0 -30
- package/dist/validator.d.ts.map +0 -1
- package/dist/validator.js +0 -31
- package/dist/validator.js.map +0 -1
package/README.md
CHANGED
|
@@ -111,8 +111,10 @@ The generated document puts it at
|
|
|
111
111
|
|
|
112
112
|
## Handle validation errors
|
|
113
113
|
|
|
114
|
-
Requests
|
|
115
|
-
|
|
114
|
+
Requests use [`@hono/standard-validator`](https://www.npmjs.com/package/@hono/standard-validator).
|
|
115
|
+
Failures return its standard `400` JSON body with `success: false`, the raw `data`, and an `error`
|
|
116
|
+
array. Header schema property names must be lowercase because Hono normalizes request headers. Set
|
|
117
|
+
`defaultHook` on the app to return your own error shape consistently across routes:
|
|
116
118
|
|
|
117
119
|
```ts
|
|
118
120
|
const app = new StandardOpenAPIHono({
|
|
@@ -123,6 +125,9 @@ const app = new StandardOpenAPIHono({
|
|
|
123
125
|
|
|
124
126
|
Document that `400` response in each route when it is part of your API contract.
|
|
125
127
|
|
|
128
|
+
The package re-exports `sValidator`, `Hook`, and `flattenErrors` from
|
|
129
|
+
`@hono/standard-validator` when you need the same validation behavior outside a documented route.
|
|
130
|
+
|
|
126
131
|
## Read the OpenAPI document
|
|
127
132
|
|
|
128
133
|
Add `app.doc()` after registering routes. It serves the generated OpenAPI 3.1 JSON at the path you
|
package/dist/app.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Hook } from '@hono/standard-validator';
|
|
1
2
|
import { type Env, Hono, type Schema } from 'hono';
|
|
2
3
|
import type { OpenAPIObject } from 'openapi3-ts/oas31';
|
|
3
4
|
import { type DocumentConfig, type GeneratorOptions } from './generator.ts';
|
|
@@ -5,12 +6,15 @@ import { OpenAPIRegistry } from './registry.ts';
|
|
|
5
6
|
import type { RouteConfig } from './route.ts';
|
|
6
7
|
import type { RouteHandler } from './type-inference.ts';
|
|
7
8
|
import { PARAMETER_SOURCES } from './types.ts';
|
|
8
|
-
import { type Hook } from './validator.ts';
|
|
9
9
|
export interface StandardOpenAPIHonoOptions<E extends Env> {
|
|
10
10
|
/** Runs for every validation on this app, and on apps mounted under it that define none. */
|
|
11
|
-
readonly defaultHook?: Hook<unknown, E, string
|
|
11
|
+
readonly defaultHook?: Hook<unknown, E, string>;
|
|
12
12
|
}
|
|
13
13
|
type HonoInit<E extends Env> = ConstructorParameters<typeof Hono>[0] & StandardOpenAPIHonoOptions<E>;
|
|
14
|
+
/** Any app, whatever it was parameterized with — used where apps are handled as peers. */
|
|
15
|
+
type StandardOpenAPIHonoParent<E extends Env> = {
|
|
16
|
+
getDefaultHook(visited?: Set<StandardOpenAPIHonoParent<E>>): Hook<unknown, E, string> | undefined;
|
|
17
|
+
};
|
|
14
18
|
/**
|
|
15
19
|
* A Hono app that documents itself.
|
|
16
20
|
*
|
|
@@ -23,13 +27,15 @@ export declare class StandardOpenAPIHono<E extends Env = Env, S extends Schema =
|
|
|
23
27
|
readonly defaultHook: StandardOpenAPIHonoOptions<E>['defaultHook'];
|
|
24
28
|
constructor(init?: HonoInit<E>);
|
|
25
29
|
/** Registers a route: mounts it, validates its request, and records it in the document. */
|
|
26
|
-
openapi<R extends RouteConfig
|
|
30
|
+
openapi<R extends RouteConfig<E>>(route: R, handler: RouteHandler<R, E>, hook?: Hook<unknown, E, string>): this;
|
|
27
31
|
/** Mounts another app, taking its documented routes along with its handlers. */
|
|
28
32
|
route<SubPath extends string, SubEnv extends Env, SubSchema extends Schema, SubBasePath extends string>(path: SubPath, app: Hono<SubEnv, SubSchema, SubBasePath>): this;
|
|
29
33
|
/** Builds the document for everything registered so far. */
|
|
30
34
|
getOpenAPIDocument(config: DocumentConfig, generatorConfig?: GeneratorOptions): OpenAPIObject;
|
|
31
35
|
/** Serves the document as JSON at `path`. */
|
|
32
36
|
doc(path: string, config: DocumentConfig, generatorConfig?: GeneratorOptions): this;
|
|
37
|
+
/** The nearest hook, preferring this app's own and falling back to the app it is mounted under. */
|
|
38
|
+
getDefaultHook(visited?: Set<StandardOpenAPIHonoParent<E>>): Hook<unknown, E, string> | undefined;
|
|
33
39
|
}
|
|
34
40
|
/**
|
|
35
41
|
* The documenting app type behind a plain Hono type.
|
|
@@ -39,6 +45,6 @@ export declare class StandardOpenAPIHono<E extends Env = Env, S extends Schema =
|
|
|
39
45
|
*/
|
|
40
46
|
export type HonoToStandardOpenAPIHono<T> = T extends Hono<infer E, infer S, infer BasePath> ? StandardOpenAPIHono<E, S, BasePath> : T;
|
|
41
47
|
/** Restores an app's type after Hono's own chaining methods widen it. */
|
|
42
|
-
export declare function $<
|
|
48
|
+
export declare function $<E extends Env, S extends Schema, BasePath extends string>(app: Hono<E, S, BasePath>): StandardOpenAPIHono<E, S, BasePath>;
|
|
43
49
|
export { PARAMETER_SOURCES };
|
|
44
50
|
//# sourceMappingURL=app.d.ts.map
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,IAAI,EAA0B,KAAK,MAAM,EAA0B,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/app.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
import { sValidator } from '@hono/standard-validator';
|
|
1
2
|
import { Hono } from 'hono';
|
|
2
3
|
import { mergePath } from 'hono/utils/url';
|
|
3
4
|
import { OpenAPIGenerator } from './generator.js';
|
|
4
|
-
import { ComponentCollector, convertSchema } from './json-schema.js';
|
|
5
5
|
import { OpenAPIRegistry } from './registry.js';
|
|
6
6
|
import { isStandardJSONSchema } from './standard-schema.js';
|
|
7
7
|
import { PARAMETER_SOURCES } from './types.js';
|
|
8
|
-
import { standardValidator } from './validator.js';
|
|
9
8
|
const JSON_CONTENT_TYPE = /^application\/([a-z\-.]+\+)?json/;
|
|
10
9
|
const FORM_CONTENT_TYPES = ['multipart/form-data', 'application/x-www-form-urlencoded'];
|
|
11
10
|
/**
|
|
@@ -29,16 +28,16 @@ export class StandardOpenAPIHono extends Hono {
|
|
|
29
28
|
if (hide !== true)
|
|
30
29
|
this.openAPIRegistry.registerPath(documented);
|
|
31
30
|
const effectiveHook = (result, c) => {
|
|
32
|
-
const resolved = hook ?? this
|
|
31
|
+
const resolved = hook ?? this.getDefaultHook();
|
|
33
32
|
return resolved?.(result, c);
|
|
34
33
|
};
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.on(
|
|
34
|
+
const methods = [route.method];
|
|
35
|
+
const paths = [toRoutingPath(route.path)];
|
|
36
|
+
for (const middlewareHandler of normalizeMiddleware(middleware))
|
|
37
|
+
this.on(methods, paths, middlewareHandler);
|
|
38
|
+
for (const validator of this.#buildValidators(route.request, effectiveHook))
|
|
39
|
+
this.on(methods, paths, validator);
|
|
40
|
+
this.on(methods, paths, handler);
|
|
42
41
|
return this;
|
|
43
42
|
}
|
|
44
43
|
/** Mounts another app, taking its documented routes along with its handlers. */
|
|
@@ -61,18 +60,13 @@ export class StandardOpenAPIHono extends Hono {
|
|
|
61
60
|
return this;
|
|
62
61
|
}
|
|
63
62
|
/** The nearest hook, preferring this app's own and falling back to the app it is mounted under. */
|
|
64
|
-
|
|
63
|
+
getDefaultHook(visited = new Set()) {
|
|
65
64
|
if (this.defaultHook != null)
|
|
66
65
|
return this.defaultHook;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return ancestor.defaultHook;
|
|
72
|
-
visited.add(ancestor);
|
|
73
|
-
ancestor = ancestor.#parentApp;
|
|
74
|
-
}
|
|
75
|
-
return undefined;
|
|
66
|
+
if (visited.has(this))
|
|
67
|
+
return undefined;
|
|
68
|
+
visited.add(this);
|
|
69
|
+
return this.#parentApp?.getDefaultHook(visited);
|
|
76
70
|
}
|
|
77
71
|
#buildValidators(request, hook) {
|
|
78
72
|
if (request == null)
|
|
@@ -82,7 +76,7 @@ export class StandardOpenAPIHono extends Hono {
|
|
|
82
76
|
const schema = request[key];
|
|
83
77
|
if (schema == null)
|
|
84
78
|
continue;
|
|
85
|
-
validators.push(
|
|
79
|
+
validators.push(sValidator(target, schema, hook));
|
|
86
80
|
}
|
|
87
81
|
const body = request.body;
|
|
88
82
|
if (body != null)
|
|
@@ -109,7 +103,7 @@ function buildBodyValidators(content, required, hook) {
|
|
|
109
103
|
: undefined;
|
|
110
104
|
if (target == null)
|
|
111
105
|
continue;
|
|
112
|
-
const validator =
|
|
106
|
+
const validator = sValidator(target, schema, hook);
|
|
113
107
|
validators.push(required ? validator : skipWhenBodyAbsent(validator, mediaType, target));
|
|
114
108
|
}
|
|
115
109
|
return validators;
|
|
@@ -131,24 +125,6 @@ function skipWhenBodyAbsent(validator, mediaType, target) {
|
|
|
131
125
|
return undefined;
|
|
132
126
|
};
|
|
133
127
|
}
|
|
134
|
-
/** The property names a schema describes, used to match header names case-insensitively. */
|
|
135
|
-
function propertyNamesOf(schema) {
|
|
136
|
-
try {
|
|
137
|
-
const converted = convertSchema(schema, {
|
|
138
|
-
components: new ComponentCollector(),
|
|
139
|
-
hoistRoot: false,
|
|
140
|
-
io: 'input',
|
|
141
|
-
target: 'draft-2020-12',
|
|
142
|
-
});
|
|
143
|
-
const properties = converted.properties;
|
|
144
|
-
if (typeof properties !== 'object' || properties == null)
|
|
145
|
-
return [];
|
|
146
|
-
return Object.keys(properties);
|
|
147
|
-
}
|
|
148
|
-
catch {
|
|
149
|
-
return [];
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
128
|
function normalizeMiddleware(middleware) {
|
|
153
129
|
if (middleware == null)
|
|
154
130
|
return [];
|
|
@@ -160,9 +136,10 @@ function toRoutingPath(path) {
|
|
|
160
136
|
return path.replaceAll(/\/{(.+?)}/g, '/:$1');
|
|
161
137
|
}
|
|
162
138
|
/** Restores an app's type after Hono's own chaining methods widen it. */
|
|
163
|
-
// oxlint-disable-next-line typescript/no-explicit-any
|
|
164
139
|
export function $(app) {
|
|
165
|
-
|
|
140
|
+
if (!(app instanceof StandardOpenAPIHono)) {
|
|
141
|
+
throw new TypeError('The chaining helper only accepts a StandardOpenAPIHono instance.');
|
|
142
|
+
}
|
|
166
143
|
return app;
|
|
167
144
|
}
|
|
168
145
|
export { PARAMETER_SOURCES };
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,IAAI,EAA+D,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,5 +7,5 @@ export { type RouteConfig, createRoute, toRoutingPath } from './route.ts';
|
|
|
7
7
|
export { type JSONSchema, type SchemaIO, type StandardSchema, isStandardJSONSchema, isStandardSchema, } from './standard-schema.ts';
|
|
8
8
|
export { type ComputeInput, type ConvertPathType, type RouteConfigToTypedResponse, type RouteHandler, type RouteHandlerResponse, } from './type-inference.ts';
|
|
9
9
|
export type { ContentObject, MediaTypeObject, ParameterLocation, ReferenceObject, RequestBody, ResponseConfig, RouteConfigBase, RouteMethod, RouteRequest, SchemaObject, SchemaOrReference, } from './types.ts';
|
|
10
|
-
export {
|
|
10
|
+
export { flattenErrors, type Hook, sValidator } from '@hono/standard-validator';
|
|
11
11
|
//# 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,OAAO,EAAE,CAAC,EAAE,KAAK,yBAAyB,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACnH,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACnH,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,KAAK,yBAAyB,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACnH,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACnH,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,KAAK,IAAI,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,5 +6,5 @@ export { OpenAPIRegistry } from './registry.js';
|
|
|
6
6
|
export { createRoute, toRoutingPath } from './route.js';
|
|
7
7
|
export { isStandardJSONSchema, isStandardSchema, } from './standard-schema.js';
|
|
8
8
|
export {} from './type-inference.js';
|
|
9
|
-
export {
|
|
9
|
+
export { flattenErrors, sValidator } from '@hono/standard-validator';
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAkC,mBAAmB,EAAmC,MAAM,UAAU,CAAC;AACnH,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAA8C,gBAAgB,EAAuB,MAAM,gBAAgB,CAAC;AACnH,OAAO,EACL,kBAAkB,EAIlB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA8C,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAIL,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAMN,MAAM,qBAAqB,CAAC;AAc7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAkC,mBAAmB,EAAmC,MAAM,UAAU,CAAC;AACnH,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAA8C,gBAAgB,EAAuB,MAAM,gBAAgB,CAAC;AACnH,OAAO,EACL,kBAAkB,EAIlB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA8C,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAIL,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAMN,MAAM,qBAAqB,CAAC;AAc7B,OAAO,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/route.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Env, MiddlewareHandler } from 'hono';
|
|
2
2
|
import type { ConvertPathType } from './type-inference.ts';
|
|
3
3
|
import type { RouteConfigBase } from './types.ts';
|
|
4
|
-
export interface RouteConfig extends RouteConfigBase {
|
|
4
|
+
export interface RouteConfig<E extends Env = Env> extends RouteConfigBase {
|
|
5
5
|
/** Middleware to run before this route's validators and handler. */
|
|
6
|
-
readonly middleware?: MiddlewareHandler<
|
|
6
|
+
readonly middleware?: MiddlewareHandler<E> | readonly MiddlewareHandler<E>[] | undefined;
|
|
7
7
|
/** Keeps the route out of the generated document while still serving it. */
|
|
8
8
|
readonly hide?: boolean | undefined;
|
|
9
9
|
}
|
package/dist/route.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAE,SAAQ,eAAe;IACvE,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,SAAS,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC;IACzF,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,EAC7F,WAAW,EAAE,CAAC,GACb,CAAC,GAAG;IAAE,cAAc,IAAI,eAAe,CAAC,CAAC,CAAC,CAAA;CAAE,CAO9C;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/route.js
CHANGED
|
@@ -11,9 +11,7 @@ export function createRoute(routeConfig) {
|
|
|
11
11
|
Object.defineProperty(route, 'getRoutingPath', { enumerable: false });
|
|
12
12
|
return route;
|
|
13
13
|
}
|
|
14
|
-
/** Rewrites `/cards/{cardId}` as `/cards/:cardId`, the same rewrite `ConvertPathType` describes. */
|
|
15
14
|
export function toRoutingPath(path) {
|
|
16
|
-
// @ts-expect-error: the runtime rewrite is the one `ConvertPathType` performs in the type system.
|
|
17
15
|
return path.replaceAll(/\/{(.+?)}/g, '/:$1');
|
|
18
16
|
}
|
|
19
17
|
//# sourceMappingURL=route.js.map
|
package/dist/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,WAAc;IAEd,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,EAAE,GAAG,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IAEpE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,OAAO,KAAK,CAAC;AACf,CAAC;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,WAAc;IAEd,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,EAAE,GAAG,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IAEpE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,OAAO,KAAK,CAAC;AACf,CAAC;AAID,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
1
2
|
import type { HeadersObject, LinksObject, OperationObject, ParameterObject, ReferenceObject, RequestBodyObject, ResponsesObject, SchemaObject } from 'openapi3-ts/oas31';
|
|
2
3
|
import type { StandardSchema } from './standard-schema.ts';
|
|
3
4
|
export type { ReferenceObject, SchemaObject };
|
|
4
5
|
/** Either a schema to convert, or an already-written OpenAPI schema to pass through untouched. */
|
|
5
|
-
export type SchemaOrReference =
|
|
6
|
+
export type SchemaOrReference = StandardSchemaV1 | SchemaObject | ReferenceObject;
|
|
6
7
|
export interface MediaTypeObject {
|
|
7
8
|
readonly schema?: SchemaOrReference | undefined;
|
|
8
9
|
readonly example?: unknown;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC;AAE9C,kGAAkG;AAClG,MAAM,MAAM,iBAAiB,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC;AAE9C,kGAAkG;AAClG,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,YAAY,GAAG,eAAe,CAAC;AAElF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CACzD;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAE5D,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC;IACrE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAErG,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,YAAY,CAAC;IACxF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC,EAAE,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAAC,CAAC;CACtE;AAED,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,8CAA8C;AAC9C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvE,qFAAqF;AACrF,eAAO,MAAM,iBAAiB;kBACrB,QAAQ;uBAAY,MAAM;;kBAC1B,OAAO;uBAAY,OAAO;;kBAC1B,SAAS;uBAAY,QAAQ;;kBAC7B,SAAS;uBAAY,QAAQ;EACkD,CAAC"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA8DA,qFAAqF;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE;IACnC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;IACnC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACtC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;CACgD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kamaalio/hono-standard-openapi",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "Generate OpenAPI documents from any Standard Schema library, for Hono.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hono",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"type-check": "tsc --noEmit"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
+
"@hono/standard-validator": "^0.4.0",
|
|
46
47
|
"openapi3-ts": "^4.5.0"
|
|
47
48
|
},
|
|
48
49
|
"devDependencies": {
|
package/dist/validator.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
-
import type { Context, Env, MiddlewareHandler, ValidationTargets } from 'hono';
|
|
3
|
-
/** What a validation attempt produced, handed to a hook before the handler runs. */
|
|
4
|
-
export type ValidationResult<T> = {
|
|
5
|
-
readonly target: keyof ValidationTargets;
|
|
6
|
-
readonly success: true;
|
|
7
|
-
readonly data: T;
|
|
8
|
-
} | {
|
|
9
|
-
readonly target: keyof ValidationTargets;
|
|
10
|
-
readonly success: false;
|
|
11
|
-
readonly data: unknown;
|
|
12
|
-
readonly error: {
|
|
13
|
-
readonly issues: readonly StandardSchemaV1.Issue[];
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Runs before the handler, once per validated part of the request.
|
|
18
|
-
*
|
|
19
|
-
* Returning a `Response` (or throwing) takes over the request; returning nothing lets it continue,
|
|
20
|
-
* which is how a hook can log a failure without changing the outcome.
|
|
21
|
-
*/
|
|
22
|
-
export type Hook<T, E extends Env, P extends string, R> = (result: ValidationResult<T>, c: Context<E, P>) => R | undefined;
|
|
23
|
-
/**
|
|
24
|
-
* Validates one part of a request against a Standard Schema.
|
|
25
|
-
*
|
|
26
|
-
* Header names are matched case-insensitively against the schema's own property names, because HTTP
|
|
27
|
-
* header casing is not something a caller should have to get right.
|
|
28
|
-
*/
|
|
29
|
-
export declare function standardValidator<E extends Env, P extends string>(target: keyof ValidationTargets, schema: StandardSchemaV1, propertyNames: readonly string[], hook?: Hook<unknown, E, P, unknown>): MiddlewareHandler<E, P>;
|
|
30
|
-
//# sourceMappingURL=validator.d.ts.map
|
package/dist/validator.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAG/E,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC1B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,iBAAiB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GACtF;IACE,QAAQ,CAAC,MAAM,EAAE,MAAM,iBAAiB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,CAAC,KAAK,EAAE,CAAA;KAAE,CAAC;CACxE,CAAC;AAEN;;;;;GAKG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CACxD,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC3B,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KACb,CAAC,GAAG,SAAS,CAAC;AAEnB;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,MAAM,EAC/D,MAAM,EAAE,MAAM,iBAAiB,EAC/B,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,GAClC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAkBzB"}
|
package/dist/validator.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { validator } from 'hono/validator';
|
|
2
|
-
/**
|
|
3
|
-
* Validates one part of a request against a Standard Schema.
|
|
4
|
-
*
|
|
5
|
-
* Header names are matched case-insensitively against the schema's own property names, because HTTP
|
|
6
|
-
* header casing is not something a caller should have to get right.
|
|
7
|
-
*/
|
|
8
|
-
export function standardValidator(target, schema, propertyNames, hook) {
|
|
9
|
-
return validator(target, async (value, c) => {
|
|
10
|
-
const candidate = target === 'header' ? withSchemaCasing(value, propertyNames) : value;
|
|
11
|
-
const result = await schema['~standard'].validate(candidate);
|
|
12
|
-
if (result.issues == null) {
|
|
13
|
-
const hooked = hook?.({ data: result.value, success: true, target }, c);
|
|
14
|
-
if (hooked instanceof Response)
|
|
15
|
-
return hooked;
|
|
16
|
-
return result.value;
|
|
17
|
-
}
|
|
18
|
-
const failure = { data: candidate, error: { issues: result.issues }, success: false, target };
|
|
19
|
-
const hooked = hook?.(failure, c);
|
|
20
|
-
if (hooked instanceof Response)
|
|
21
|
-
return hooked;
|
|
22
|
-
return c.json({ error: { issues: result.issues }, success: false }, 400);
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
function withSchemaCasing(value, propertyNames) {
|
|
26
|
-
if (typeof value !== 'object' || value == null || propertyNames.length === 0)
|
|
27
|
-
return value;
|
|
28
|
-
const casingByLowercased = new Map(propertyNames.map(name => [name.toLowerCase(), name]));
|
|
29
|
-
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [casingByLowercased.get(key.toLowerCase()) ?? key, entry]));
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=validator.js.map
|
package/dist/validator.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAuB3C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA+B,EAC/B,MAAwB,EACxB,aAAgC,EAChC,IAAmC;IAEnC,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE7D,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YACxE,IAAI,MAAM,YAAY,QAAQ;gBAAE,OAAO,MAAM,CAAC;YAE9C,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAW,CAAC;QACvG,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClC,IAAI,MAAM,YAAY,QAAQ;YAAE,OAAO,MAAM,CAAC;QAE9C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,aAAgC;IACxE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3F,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1F,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,CACvG,CAAC;AACJ,CAAC"}
|