@kaapi/validator-valibot 0.0.17

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 demingongo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,241 @@
1
+ # πŸ§ͺ @kaapi/validator-valibot
2
+
3
+ ![npm](https://img.shields.io/npm/v/@kaapi/validator-valibot?style=flat-square)
4
+ ![license](https://img.shields.io/npm/l/@kaapi/validator-valibot?style=flat-square)
5
+
6
+ **Valibot-powered validation plugin for [Kaapi](https://www.npmjs.com/package/@kaapi/kaapi)**. Validate request `params`, `payload`, `query`, `headers`, and `state` using [Valibot](https://www.npmjs.com/package/valibot) schemas. Includes built-in documentation helpers for seamless API docs generation.
7
+
8
+ ---
9
+
10
+ ## πŸš€ Installation
11
+
12
+ ```bash
13
+ npm install @kaapi/validator-valibot
14
+ ```
15
+
16
+ ### πŸ“¦ Peer Dependency
17
+
18
+ Requires Valibot:
19
+
20
+ ```bash
21
+ npm install valibot@^1.1.0
22
+ ```
23
+
24
+ ---
25
+
26
+ ## πŸ› οΈ Usage
27
+
28
+ ### πŸ”Œ Register the Plugin
29
+
30
+ ```ts
31
+ import { Kaapi } from '@kaapi/kaapi'
32
+ import { validatorValibot } from '@kaapi/validator-valibot'
33
+
34
+ const app = new Kaapi({
35
+ port: 3000,
36
+ host: 'localhost',
37
+ docs: {
38
+ disabled: false // explicitly enables documentation generation
39
+ }
40
+ });
41
+
42
+ await app.extend(validatorValibot); // register the plugin
43
+ ```
44
+
45
+ ---
46
+
47
+ ### πŸ“ Define a Schema
48
+
49
+ ```ts
50
+ import { object, string } from 'valibot'
51
+ import { ValidatorValibotSchema } from '@kaapi/validator-valibot'
52
+
53
+ const routeSchema: ValidatorValibotSchema = {
54
+ payload: object({
55
+ name: string()
56
+ })
57
+ }
58
+ ```
59
+
60
+ ---
61
+
62
+ ### 🧭 Create a Route
63
+
64
+ ```ts
65
+ app.base().valibot(routeSchema).route(
66
+ {
67
+ method: 'POST',
68
+ path: '/items'
69
+ },
70
+ req => ({ id: Date.now(), name: req.payload.name })
71
+ )
72
+
73
+ // or using inline handler
74
+ /*
75
+ app.base().valibot(routeSchema).route({
76
+ method: 'POST',
77
+ path: '/items',
78
+ handler: req => ({ id: Date.now(), name: req.payload.name })
79
+ })
80
+ */
81
+ ```
82
+
83
+ ---
84
+
85
+ ## βš™οΈ Advanced Configuration
86
+
87
+ ### πŸ”§ `options`
88
+
89
+ Customize Valibot parsing behavior:
90
+
91
+ | Property | Type | Default | Description |
92
+ |---------------|---------------------------|-------------|-----------------------------------------------------------------------------|
93
+ | `abortEarly` | `boolean` | `undefined` | Whether it should be aborted early |
94
+ | `abortPipeEarly` | `boolean` | `undefined` | Whether a pipe should be aborted early |
95
+ | `lang` | `string` | `undefined` | The selected language |
96
+ | `message` | `ErrorMessage<TIssue>` | `undefined` | The error message |
97
+
98
+ ---
99
+
100
+ ### 🚨 `failAction`
101
+
102
+ Control how validation failures are handled:
103
+
104
+ | Value | Behavior | Safe? | Description |
105
+ |---------------|------------------------------|-------|--------------------------------------------------|
106
+ | `'error'` | Reject with validation error | βœ… | Default safe behavior |
107
+ | `'log'` | Log and reject | βœ… | Useful for observability |
108
+ | `function` | Custom handler | βœ… (developer-controlled) | Must return or throw explicitly |
109
+ | `'ignore'` | ❌ Not supported | ❌ | Unsafe and not implemented |
110
+
111
+ ---
112
+
113
+ ### πŸ§ͺ Example with Overrides
114
+
115
+ You can override Valibot validation behavior **globally** for all routes, or **per route** as needed.
116
+
117
+ #### πŸ” Global Override (All Routes)
118
+
119
+ ```ts
120
+ const app = new Kaapi({
121
+ // ...
122
+ routes: {
123
+ plugins: {
124
+ valibot: {
125
+ options: {
126
+ abortEarly: true
127
+ },
128
+ failAction: 'log'
129
+ }
130
+ }
131
+ }
132
+ });
133
+
134
+ await app.extend(validatorValibot);
135
+ ```
136
+
137
+ This sets `abortEarly` to `true` for all Valibot-validated routes, and logs validation errors before throwing them.
138
+
139
+ #### πŸ”‚ Per-Route Override
140
+
141
+ ```ts
142
+ app.base().valibot({
143
+ query: object({
144
+ name: optional(pipe(string(), trim(), nonEmpty(), maxLength(10), description('Optional name to personalize the greeting response')), 'World'),
145
+ age: optional(
146
+ pipe(
147
+ string(),
148
+ transform((input) => typeof input === 'string' ? Number(input) : input),
149
+ number(),
150
+ integer(),
151
+ minValue(1)
152
+ )
153
+ )
154
+ }),
155
+ options: {
156
+ abortEarly: false
157
+ },
158
+ failAction: async (request, h, err) => {
159
+ if (Boom.isBoom(err)) {
160
+ return h.response({
161
+ ...err.output.payload,
162
+ details: err.data.validationError.issues
163
+ }).code(err.output.statusCode).takeover()
164
+ }
165
+ return err
166
+ }
167
+ }).route({
168
+ path: '/greetings',
169
+ method: 'GET',
170
+ handler: ({ query: { name } }) => `Hello ${name}!`
171
+ });
172
+ ```
173
+
174
+ ---
175
+
176
+ ## πŸ“€ File Upload Example
177
+
178
+ Multipart file uploads with Valibot validation is supported. Here's how to validate an uploaded image file and stream it back in the response:
179
+
180
+ ```ts
181
+ app.base().valibot({
182
+ payload: object({
183
+ file: pipe(
184
+ looseObject({
185
+ _data: instance(Buffer),
186
+ hapi: looseObject({
187
+ filename: string(),
188
+ headers: looseObject({
189
+ 'content-type': picklist(['image/jpeg', 'image/jpg', 'image/png'] as const)
190
+ })
191
+ })
192
+ }),
193
+ description('The image to upload')
194
+ )
195
+ })
196
+ }).route({
197
+ method: 'POST',
198
+ path: '/upload-image',
199
+ options: {
200
+ description: 'Upload an image',
201
+ payload: {
202
+ output: 'stream',
203
+ parse: true,
204
+ allow: 'multipart/form-data',
205
+ multipart: { output: 'stream' },
206
+ maxBytes: 1024 * 3_000
207
+ }
208
+ }
209
+ }, (req, h) =>
210
+ h.response(req.payload.file._data)
211
+ .type(req.payload.file.hapi.headers['content-type'])
212
+ );
213
+ ```
214
+
215
+ ### 🧾 Notes
216
+
217
+ - `looseObject` is used to accommodate the structure of multipart file metadata.
218
+ - The `_data: instanceof(Buffer)` field is automatically interpreted as a binary field by the documentation generator.
219
+ - This ensures correct OpenAPI and Postman documentation is generated, with the file field shown as a binary upload.
220
+ - The route streams the uploaded image back with its original content type.
221
+
222
+ ---
223
+
224
+ ## πŸ”„ Flexible API Design
225
+
226
+ Prefer `Joi` or migrating gradually? No problem.
227
+
228
+ You can still use `app.route(...)` with Joi-based validation while adopting Valibot via `app.base().valibot(...).route(...)`. This dual-mode support ensures **graceful evolution**, allowing traditional and modern routes to coexist without breaking changes.
229
+
230
+ ---
231
+
232
+ ## πŸ“š License
233
+
234
+ MIT
235
+
236
+ > This package is tested as part of the Kaapi monorepo. See the [main Kaapi README](../../README.md) for coverage details.
237
+
238
+ ## 🀝 Contributing
239
+
240
+ Contributions, issues, and feature requests are welcome! Feel free to open a discussion or submit a pull request.
241
+
@@ -0,0 +1,13 @@
1
+ import { ValidatorValibotSchema, ValidatorValibot } from './types'
2
+
3
+ declare module '@kaapi/kaapi' {
4
+ interface PluginSpecificConfiguration {
5
+ valibot?: ValidatorValibotSchema;
6
+ }
7
+
8
+ interface Server {
9
+ valibot: ValidatorValibot
10
+ }
11
+ }
12
+
13
+ export { }
@@ -0,0 +1,79 @@
1
+ import type { BaseHelperInterface } from '@novice1/api-doc-generator/lib/helpers/baseHelper';
2
+ import { type JSONSchema7 } from '@valibot/to-json-schema';
3
+ import type { NonEmptyValibotSchema } from './types';
4
+ import type { OpenAPIHelperInterface, PostmanHelperInterface } from '@novice1/api-doc-generator';
5
+ import type { AdditionalProperties, DiscriminatorObject, EncodingObject, ExampleObject, ReferenceObject, XMLObject } from '@novice1/api-doc-generator/lib/generators/openapi/definitions';
6
+ import type { KaapiOpenAPIHelperInterface } from '@kaapi/kaapi';
7
+ /**
8
+ * Valibot helper for \@novice1/api-doc-generator
9
+ */
10
+ export declare abstract class BaseValibotHelper implements BaseHelperInterface {
11
+ #private;
12
+ protected _schema: JSONSchema7;
13
+ protected _valibotSchema?: NonEmptyValibotSchema;
14
+ protected _isRequired: boolean;
15
+ constructor({ value: schema }: {
16
+ value?: object | unknown;
17
+ isRoot?: boolean;
18
+ }, isRequired?: boolean);
19
+ protected hasMeta(v: string): boolean;
20
+ protected getMeta(v: string): unknown;
21
+ protected hasOptionalWrapper(): boolean;
22
+ isValid(): boolean;
23
+ getType(): string;
24
+ getDescription(): string;
25
+ isRequired(): boolean;
26
+ isUnique(): boolean;
27
+ hasDefaultValue(): boolean;
28
+ getDefaultValue(): unknown;
29
+ hasExampleValue(): boolean;
30
+ getExampleValue(): unknown;
31
+ isDeprecated(): boolean;
32
+ allowsEmptyValue(): boolean;
33
+ getEnum(): unknown[];
34
+ hasMin(): boolean;
35
+ hasMax(): boolean;
36
+ getMin(): number | undefined;
37
+ getMax(): number | undefined;
38
+ getUnit(): string;
39
+ }
40
+ /**
41
+ * Valibot helper for \@novice1/api-doc-generator
42
+ */
43
+ export declare class OpenAPIValibotHelper extends BaseValibotHelper implements OpenAPIHelperInterface, KaapiOpenAPIHelperInterface {
44
+ isFile(): boolean | undefined;
45
+ getRawSchema(): import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>> | import("valibot").BaseSchemaAsync<unknown, unknown, import("valibot").BaseIssue<unknown>> | import("valibot").SchemaWithFallback<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown> | import("valibot").SchemaWithFallbackAsync<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>> | import("valibot").BaseSchemaAsync<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown> | (import("valibot").ExactOptionalSchema<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown> | import("valibot").NullishSchema<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown> | import("valibot").OptionalSchema<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown>) | (import("valibot").ExactOptionalSchemaAsync<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>> | import("valibot").BaseSchemaAsync<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown> | import("valibot").NullishSchemaAsync<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>> | import("valibot").BaseSchemaAsync<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown> | import("valibot").OptionalSchemaAsync<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>> | import("valibot").BaseSchemaAsync<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown>) | undefined;
46
+ getMostInnerRawSchema(): import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>> | import("valibot").BaseSchemaAsync<unknown, unknown, import("valibot").BaseIssue<unknown>> | import("valibot").SchemaWithFallback<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown> | import("valibot").SchemaWithFallbackAsync<import("valibot").BaseSchema<unknown, unknown, import("valibot").BaseIssue<unknown>> | import("valibot").BaseSchemaAsync<unknown, unknown, import("valibot").BaseIssue<unknown>>, unknown> | undefined;
47
+ getFilesChildren(): Record<string, unknown>;
48
+ getFirstItem(): OpenAPIValibotHelper | undefined;
49
+ getChildren(): Record<string, OpenAPIValibotHelper>;
50
+ getAlternatives(): OpenAPIValibotHelper[];
51
+ hasStyle(): boolean;
52
+ getStyle(): string;
53
+ hasAdditionalProperties(): boolean;
54
+ getAdditionalProperties(): AdditionalProperties;
55
+ hasRef(): boolean;
56
+ getRef(): string | undefined;
57
+ hasDiscriminator(): boolean;
58
+ getDiscriminator(): DiscriminatorObject | undefined;
59
+ hasXml(): boolean;
60
+ getXml(): XMLObject | undefined;
61
+ hasExamples(): boolean;
62
+ getExamples(): Record<string, ExampleObject | ReferenceObject> | undefined;
63
+ hasEncoding(): boolean;
64
+ getEncoding(): Record<string, EncodingObject> | undefined;
65
+ }
66
+ /**
67
+ * Valibot helper for \@novice1/api-doc-generator
68
+ */
69
+ export declare class PostmanValibotHelper extends BaseValibotHelper implements PostmanHelperInterface {
70
+ getFirstItem(): PostmanValibotHelper | undefined;
71
+ getChildren(): Record<string, PostmanValibotHelper>;
72
+ getAlternatives(): PostmanValibotHelper[];
73
+ hasContentType(): boolean;
74
+ getContentType(): string | undefined;
75
+ hasDescriptionType(): boolean;
76
+ getDescriptionType(): string | undefined;
77
+ hasXml(): boolean;
78
+ getXml(): XMLObject | undefined;
79
+ }
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ var _BaseValibotHelper_instances, _BaseValibotHelper_getAllMeta;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PostmanValibotHelper = exports.OpenAPIValibotHelper = exports.BaseValibotHelper = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const to_json_schema_1 = require("@valibot/to-json-schema");
7
+ const valibot_1 = require("valibot");
8
+ /**
9
+ * Valibot helper for \@novice1/api-doc-generator
10
+ */
11
+ class BaseValibotHelper {
12
+ constructor({ value: schema = {} }, isRequired) {
13
+ _BaseValibotHelper_instances.add(this);
14
+ this._isRequired = false;
15
+ this._schema = {};
16
+ if (schema && typeof schema === 'object') {
17
+ if ('type' in schema && schema.type === 'instance' &&
18
+ 'kind' in schema && schema.kind === 'schema') {
19
+ // special schemas that cannot be converted to JSON
20
+ this._valibotSchema = schema;
21
+ }
22
+ try {
23
+ const s = (0, to_json_schema_1.toJsonSchema)(schema, { errorMode: 'ignore' });
24
+ this._schema = s;
25
+ this._valibotSchema = schema;
26
+ }
27
+ catch (_e) {
28
+ //
29
+ }
30
+ }
31
+ if (isRequired) {
32
+ this._isRequired = isRequired;
33
+ }
34
+ }
35
+ hasMeta(v) {
36
+ return typeof tslib_1.__classPrivateFieldGet(this, _BaseValibotHelper_instances, "m", _BaseValibotHelper_getAllMeta).call(this)[v] !== 'undefined';
37
+ }
38
+ getMeta(v) {
39
+ return tslib_1.__classPrivateFieldGet(this, _BaseValibotHelper_instances, "m", _BaseValibotHelper_getAllMeta).call(this)[v];
40
+ }
41
+ hasOptionalWrapper() {
42
+ let r = this._valibotSchema;
43
+ let result = false;
44
+ while (!result && r && 'wrapped' in r) {
45
+ result = r.kind === 'schema' && r.type === 'optional';
46
+ r = r.wrapped;
47
+ }
48
+ return result;
49
+ }
50
+ isValid() {
51
+ return !!(this._valibotSchema && this._schema.$schema);
52
+ }
53
+ getType() {
54
+ let r = '';
55
+ if ('type' in this._schema && typeof this._schema.type === 'string') {
56
+ r = this._schema.type;
57
+ }
58
+ if ('format' in this._schema && typeof this._schema.format === 'string') {
59
+ r = this._schema.format;
60
+ }
61
+ return r;
62
+ }
63
+ getDescription() {
64
+ let r = '';
65
+ if ('description' in this._schema && typeof this._schema.description === 'string') {
66
+ r = this._schema.description;
67
+ }
68
+ return r;
69
+ }
70
+ isRequired() {
71
+ return this._isRequired || (this.getType() === 'object' && !this.hasOptionalWrapper());
72
+ }
73
+ isUnique() {
74
+ return !!('uniqueItems' in this._schema && this._schema.uniqueItems);
75
+ }
76
+ hasDefaultValue() {
77
+ return !!('default' in this._schema && typeof this._schema.default != 'undefined');
78
+ }
79
+ getDefaultValue() {
80
+ return 'default' in this._schema ? this._schema.default : undefined;
81
+ }
82
+ hasExampleValue() {
83
+ const schema = this._schema;
84
+ return !!('examples' in schema && Array.isArray(schema.examples) && schema.examples.length);
85
+ }
86
+ getExampleValue() {
87
+ const schema = this._schema;
88
+ if ('examples' in schema && Array.isArray(schema.examples) && schema.examples.length) {
89
+ return schema.examples[0];
90
+ }
91
+ return;
92
+ }
93
+ isDeprecated() {
94
+ return !!this.getMeta('deprecated');
95
+ }
96
+ allowsEmptyValue() {
97
+ let r = false;
98
+ if ('enum' in this._schema && Array.isArray(this._schema.enum)) {
99
+ const enume = this._schema.enum;
100
+ r = ['', null].some(v => enume.includes(v));
101
+ }
102
+ return r;
103
+ }
104
+ getEnum() {
105
+ let r = [];
106
+ if ('enum' in this._schema && Array.isArray(this._schema.enum)) {
107
+ r = this._schema.enum;
108
+ }
109
+ else if ('anyOf' in this._schema && Array.isArray(this._schema.anyOf)) {
110
+ for (const p of this._schema.anyOf) {
111
+ if (p && typeof p === 'object' && 'const' in p) {
112
+ r.push(p.const);
113
+ }
114
+ }
115
+ }
116
+ return r;
117
+ }
118
+ hasMin() {
119
+ return 'minProperties' in this._schema || 'minItems' in this._schema || 'minimum' in this._schema || 'minLength' in this._schema;
120
+ }
121
+ hasMax() {
122
+ return 'maxProperties' in this._schema || 'maxItems' in this._schema || 'maximum' in this._schema || 'maxLength' in this._schema;
123
+ }
124
+ getMin() {
125
+ if ('minProperties' in this._schema && typeof this._schema.minProperties === 'number') {
126
+ return this._schema.minProperties;
127
+ }
128
+ if ('minItems' in this._schema && typeof this._schema.minItems === 'number') {
129
+ return this._schema.minItems;
130
+ }
131
+ if ('minimum' in this._schema && typeof this._schema.minimum === 'number') {
132
+ return this._schema.minimum;
133
+ }
134
+ if ('minLength' in this._schema && typeof this._schema.minLength === 'number') {
135
+ return this._schema.minLength;
136
+ }
137
+ return;
138
+ }
139
+ getMax() {
140
+ if ('maxProperties' in this._schema && typeof this._schema.maxProperties === 'number') {
141
+ return this._schema.maxProperties;
142
+ }
143
+ if ('maxItems' in this._schema && typeof this._schema.maxItems === 'number') {
144
+ return this._schema.maxItems;
145
+ }
146
+ if ('maximum' in this._schema && typeof this._schema.maximum === 'number') {
147
+ return this._schema.maximum;
148
+ }
149
+ if ('maxLength' in this._schema && typeof this._schema.maxLength === 'number') {
150
+ return this._schema.maxLength;
151
+ }
152
+ return;
153
+ }
154
+ getUnit() {
155
+ const unit = this.getMeta('unit');
156
+ if (typeof unit === 'string') {
157
+ return unit;
158
+ }
159
+ return '';
160
+ }
161
+ }
162
+ exports.BaseValibotHelper = BaseValibotHelper;
163
+ _BaseValibotHelper_instances = new WeakSet(), _BaseValibotHelper_getAllMeta = function _BaseValibotHelper_getAllMeta() {
164
+ if (this.isValid() && this._valibotSchema && 'pipe' in this._valibotSchema &&
165
+ Array.isArray(this._valibotSchema.pipe)) {
166
+ const r = this._valibotSchema.pipe.find(v => v.type === 'metadata' && v.kind === 'metadata');
167
+ return r || {};
168
+ }
169
+ return {};
170
+ };
171
+ /**
172
+ * Valibot helper for \@novice1/api-doc-generator
173
+ */
174
+ class OpenAPIValibotHelper extends BaseValibotHelper {
175
+ isFile() {
176
+ var _a;
177
+ const children = this.getChildren();
178
+ const schema = (_a = children._data) === null || _a === void 0 ? void 0 : _a.getRawSchema();
179
+ return (schema === null || schema === void 0 ? void 0 : schema.kind) === 'schema' && schema.type === 'instance' && schema.expects === 'Buffer';
180
+ }
181
+ getRawSchema() {
182
+ return this._valibotSchema;
183
+ }
184
+ getMostInnerRawSchema() {
185
+ let r = this._valibotSchema;
186
+ while (r && 'wrapped' in r) {
187
+ r = r.wrapped;
188
+ }
189
+ return r;
190
+ }
191
+ getFilesChildren() {
192
+ const r = {};
193
+ const schema = this._schema;
194
+ const vSchema = this.getMostInnerRawSchema();
195
+ if (vSchema && 'entries' in vSchema && typeof vSchema.entries === 'object' && vSchema.entries) {
196
+ const properties = vSchema.entries;
197
+ for (const p in properties) {
198
+ const isRequired = 'required' in schema && Array.isArray(schema.required) && schema.required.includes(p);
199
+ const ch = new OpenAPIValibotHelper({ value: properties[p] }, isRequired);
200
+ if (ch.isValid() && ch.isFile())
201
+ r[p] = ch.getRawSchema();
202
+ }
203
+ }
204
+ const files = (0, valibot_1.object)(r);
205
+ return files;
206
+ }
207
+ getFirstItem() {
208
+ const schema = this._schema;
209
+ if ('items' in schema && typeof schema.items === 'object') {
210
+ return new OpenAPIValibotHelper({ value: schema.items });
211
+ }
212
+ return;
213
+ }
214
+ getChildren() {
215
+ const r = {};
216
+ const schema = this._schema;
217
+ const vSchema = this.getMostInnerRawSchema();
218
+ if (vSchema && 'entries' in vSchema && typeof vSchema.entries === 'object' && vSchema.entries) {
219
+ const properties = vSchema.entries;
220
+ for (const p in properties) {
221
+ const isRequired = 'required' in schema && Array.isArray(schema.required) && schema.required.includes(p);
222
+ r[p] = new OpenAPIValibotHelper({ value: properties[p] }, isRequired);
223
+ }
224
+ }
225
+ return r;
226
+ }
227
+ getAlternatives() {
228
+ const r = [];
229
+ const schema = this._schema;
230
+ if ('oneOf' in schema && Array.isArray(schema.oneOf)) {
231
+ for (const p of schema.oneOf) {
232
+ r.push(new OpenAPIValibotHelper({ value: p }));
233
+ }
234
+ }
235
+ return r;
236
+ }
237
+ hasStyle() {
238
+ return typeof this.getMeta('style') === 'string';
239
+ }
240
+ getStyle() {
241
+ const style = this.getMeta('style');
242
+ if (typeof style === 'string') {
243
+ return style;
244
+ }
245
+ return '';
246
+ }
247
+ hasAdditionalProperties() {
248
+ const schema = this._schema;
249
+ return !!('additionalProperties' in schema && schema.additionalProperties);
250
+ }
251
+ getAdditionalProperties() {
252
+ const schema = this._schema;
253
+ return 'additionalProperties' in schema && schema.additionalProperties;
254
+ }
255
+ hasRef() {
256
+ const schema = this._schema;
257
+ return !!('$ref' in schema && typeof schema.$ref === 'string') || !!('$id' in schema && typeof schema.$id === 'string');
258
+ }
259
+ getRef() {
260
+ const schema = this._schema;
261
+ return '$ref' in schema && typeof schema.$ref === 'string' ? schema.$ref :
262
+ '$id' in schema && typeof schema.$id === 'string' ? schema.$id : undefined;
263
+ }
264
+ hasDiscriminator() {
265
+ const discriminator = this.getMeta('discriminator');
266
+ return !!(discriminator &&
267
+ typeof discriminator === 'object' &&
268
+ 'propertyName' in discriminator &&
269
+ discriminator.propertyName &&
270
+ typeof discriminator.propertyName === 'string');
271
+ }
272
+ getDiscriminator() {
273
+ const discriminator = this.getMeta('discriminator');
274
+ return discriminator &&
275
+ typeof discriminator === 'object' &&
276
+ 'propertyName' in discriminator &&
277
+ discriminator.propertyName &&
278
+ discriminator.propertyName === 'string' ?
279
+ discriminator :
280
+ undefined;
281
+ }
282
+ hasXml() {
283
+ const xmlMeta = this.getMeta('xml');
284
+ return !!(xmlMeta && typeof xmlMeta === 'object');
285
+ }
286
+ getXml() {
287
+ return this.getMeta('xml');
288
+ }
289
+ hasExamples() {
290
+ const schema = this._schema;
291
+ return !!('examples' in schema && Array.isArray(schema.examples));
292
+ }
293
+ getExamples() {
294
+ const schema = this._schema;
295
+ if ('examples' in schema && Array.isArray(schema.examples)) {
296
+ const r = {};
297
+ let i = 1;
298
+ for (const value of schema.examples) {
299
+ r[`${i}`] = {
300
+ value
301
+ };
302
+ i++;
303
+ }
304
+ return r;
305
+ }
306
+ return;
307
+ }
308
+ hasEncoding() {
309
+ const encodingMeta = this.getMeta('encoding');
310
+ return !!(encodingMeta && typeof encodingMeta === 'object');
311
+ }
312
+ getEncoding() {
313
+ return this.getMeta('encoding');
314
+ }
315
+ }
316
+ exports.OpenAPIValibotHelper = OpenAPIValibotHelper;
317
+ /**
318
+ * Valibot helper for \@novice1/api-doc-generator
319
+ */
320
+ class PostmanValibotHelper extends BaseValibotHelper {
321
+ getFirstItem() {
322
+ const schema = this._schema;
323
+ if ('items' in schema && typeof schema.items === 'object') {
324
+ return new PostmanValibotHelper({ value: schema.items });
325
+ }
326
+ return;
327
+ }
328
+ getChildren() {
329
+ const r = {};
330
+ const schema = this._schema;
331
+ if ('properties' in schema && typeof schema.properties === 'object' && schema.properties) {
332
+ const properties = schema.properties;
333
+ for (const p in properties) {
334
+ const isRequired = 'required' in schema && Array.isArray(schema.required) && schema.required.includes(p);
335
+ r[p] = new PostmanValibotHelper({ value: properties[p] }, isRequired);
336
+ }
337
+ }
338
+ return r;
339
+ }
340
+ getAlternatives() {
341
+ const r = [];
342
+ const schema = this._schema;
343
+ if ('oneOf' in schema && Array.isArray(schema.oneOf)) {
344
+ for (const p of schema.oneOf) {
345
+ r.push(new PostmanValibotHelper({ value: p }));
346
+ }
347
+ }
348
+ return r;
349
+ }
350
+ hasContentType() {
351
+ return typeof this.getMeta('contentType') === 'string';
352
+ }
353
+ getContentType() {
354
+ const contentType = this.getMeta('contentType');
355
+ if (typeof contentType === 'string') {
356
+ return contentType;
357
+ }
358
+ return;
359
+ }
360
+ hasDescriptionType() {
361
+ return typeof this.getMeta('descriptionType') === 'string';
362
+ }
363
+ getDescriptionType() {
364
+ const descriptionType = this.getMeta('descriptionType');
365
+ if (typeof descriptionType === 'string') {
366
+ return descriptionType;
367
+ }
368
+ return;
369
+ }
370
+ hasXml() {
371
+ const xmlMeta = this.getMeta('xml');
372
+ return !!(xmlMeta && typeof xmlMeta === 'object');
373
+ }
374
+ getXml() {
375
+ return this.getMeta('xml');
376
+ }
377
+ }
378
+ exports.PostmanValibotHelper = PostmanValibotHelper;
379
+ //# sourceMappingURL=doc-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-helpers.js","sourceRoot":"","sources":["../src/doc-helpers.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import './declarations.d.ts'
2
+ export * from './types';
3
+ export * from './doc-helpers';
4
+ export * from './validator';
package/lib/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./types"), exports);
5
+ tslib_1.__exportStar(require("./doc-helpers"), exports);
6
+ tslib_1.__exportStar(require("./validator"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,kDAAuB;AACvB,wDAA6B;AAC7B,sDAA2B"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ import type { ReqRefDefaults, ReqRef, KaapiServerRoute, HandlerDecorations, Lifecycle, Server } from '@kaapi/kaapi';
2
+ import type { Config, InferIssue, InferOutput, ObjectEntriesAsync } from 'valibot';
3
+ export type NonEmptyValibotSchema = ObjectEntriesAsync[string];
4
+ export type ValibotSchema = NonEmptyValibotSchema | undefined | null;
5
+ export type ValidatorValibotOptions<TSchema extends NonEmptyValibotSchema> = Config<InferIssue<TSchema>>;
6
+ export type ValidatorValibotSchema = {
7
+ payload?: ValibotSchema;
8
+ query?: ValibotSchema;
9
+ params?: ValibotSchema;
10
+ headers?: ValibotSchema;
11
+ state?: ValibotSchema;
12
+ options?: ValidatorValibotOptions<NonEmptyValibotSchema>;
13
+ failAction?: 'error' | 'log' | Lifecycle.Method | undefined;
14
+ };
15
+ export type ValibotlessReqRefDefaults = Omit<ReqRefDefaults, 'Query' | 'Headers' | 'Params' | 'Payload'>;
16
+ export type ValibotlessReqRef = Omit<ReqRef, 'Query' | 'Headers' | 'Params' | 'Payload'>;
17
+ export type output<T> = T extends NonEmptyValibotSchema ? InferOutput<T> : unknown;
18
+ export interface ValidatorValibotReqRef<RS extends ValidatorValibotSchema = ValidatorValibotSchema> {
19
+ Query: output<RS['query']>;
20
+ Headers: output<RS['headers']>;
21
+ Params: output<RS['params']>;
22
+ Payload: output<RS['payload']>;
23
+ }
24
+ export type ValidatorValibot = <V extends ValidatorValibotSchema>(schema: V) => {
25
+ route<R extends ValibotlessReqRef = ValibotlessReqRefDefaults>(serverRoute: KaapiServerRoute<ValidatorValibotReqRef<V> & R>, handler?: HandlerDecorations | Lifecycle.Method<ValidatorValibotReqRef<V> & R, Lifecycle.ReturnValue<ValidatorValibotReqRef<V> & R>>): Server;
26
+ };
package/lib/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { KaapiPlugin } from '@kaapi/kaapi';
2
+ export declare const supportedProps: readonly ["payload", "query", "params", "headers", "state"];
3
+ export declare const validatorValibot: KaapiPlugin;
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validatorValibot = exports.supportedProps = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const boom_1 = tslib_1.__importDefault(require("@hapi/boom"));
6
+ const valibot_1 = require("valibot");
7
+ const doc_helpers_1 = require("./doc-helpers");
8
+ const package_json_1 = tslib_1.__importDefault(require("../package.json"));
9
+ const { parse = { payload: true, query: true, params: true, headers: true, state: true } } = {};
10
+ exports.supportedProps = ['payload', 'query', 'params', 'headers', 'state'];
11
+ const normalizeBooleans = (obj) => {
12
+ for (const key in obj) {
13
+ const val = obj[key];
14
+ if (typeof val === 'string') {
15
+ if (val === 'true')
16
+ obj[key] = true;
17
+ else if (val === 'false')
18
+ obj[key] = false;
19
+ }
20
+ else if (Array.isArray(val)) {
21
+ obj[key] = val.map((v) => (v === 'true' ? true : v === 'false' ? false : v));
22
+ }
23
+ }
24
+ return obj;
25
+ };
26
+ exports.validatorValibot = {
27
+ integrate(t) {
28
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
29
+ const validator = (schema) => {
30
+ return {
31
+ route(serverRoute, handler) {
32
+ var _a, _b, _c, _d, _e, _f, _g;
33
+ if (!serverRoute.options) {
34
+ serverRoute.options = {};
35
+ }
36
+ if (typeof serverRoute.options === 'object') {
37
+ // validate
38
+ if (!serverRoute.options.plugins) {
39
+ serverRoute.options.plugins = {};
40
+ }
41
+ serverRoute.options.plugins.valibot = schema;
42
+ // docs
43
+ serverRoute.options.plugins.kaapi = serverRoute.options.plugins.kaapi || {};
44
+ if (serverRoute.options.plugins.kaapi.docs != false && // docs not disabled
45
+ !((_a = serverRoute.options.plugins.kaapi.docs) === null || _a === void 0 ? void 0 : _a.disabled) // docs not disabled
46
+ ) {
47
+ if (!((_d = (_c = (_b = serverRoute.options.plugins) === null || _b === void 0 ? void 0 : _b.kaapi) === null || _c === void 0 ? void 0 : _c.docs) === null || _d === void 0 ? void 0 : _d.helperSchemaProperty)) // docs have not helperSchemaProperty
48
+ serverRoute.options.plugins.kaapi.docs = Object.assign(Object.assign({}, serverRoute.options.plugins.kaapi.docs), { helperSchemaProperty: 'valibot' });
49
+ if (!((_g = (_f = (_e = serverRoute.options.plugins) === null || _e === void 0 ? void 0 : _e.kaapi) === null || _f === void 0 ? void 0 : _f.docs) === null || _g === void 0 ? void 0 : _g.openAPIHelperClass)) // docs have not openAPIHelperClass
50
+ serverRoute.options.plugins.kaapi.docs = Object.assign(Object.assign({}, serverRoute.options.plugins.kaapi.docs), { openAPIHelperClass: doc_helpers_1.OpenAPIValibotHelper });
51
+ }
52
+ }
53
+ t.route(serverRoute, handler);
54
+ return t.server;
55
+ }
56
+ };
57
+ };
58
+ yield t.server.register({
59
+ name: 'kaapi-validator-valibot',
60
+ version: package_json_1.default.version,
61
+ register: function (server) {
62
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
63
+ server.ext('onPreHandler', (request, h) => tslib_1.__awaiter(this, void 0, void 0, function* () {
64
+ var _a, _b, _c;
65
+ const routeValidation = (_c = (_b = (_a = request === null || request === void 0 ? void 0 : request.route) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.plugins) === null || _c === void 0 ? void 0 : _c.valibot;
66
+ try {
67
+ // Initialize empty objects to hold the parsed data and corresponding Valibot schemas
68
+ const data = {};
69
+ const dataSchema = {};
70
+ // Loop through all supported properties for this route
71
+ for (const prop of exports.supportedProps) {
72
+ // Check if validation exists for this property and there is a parser defined
73
+ if ((routeValidation === null || routeValidation === void 0 ? void 0 : routeValidation[prop]) && parse[prop]) {
74
+ // Add the Valibot schema for this property to the dataSchema
75
+ dataSchema[prop] = routeValidation[prop];
76
+ // Prepare the value for parsing:
77
+ // - For query params, normalize boolean strings to actual booleans
78
+ // - Otherwise, take the raw value from the request object
79
+ data[prop] = prop === 'query' ? normalizeBooleans(request[prop]) : request[prop];
80
+ }
81
+ }
82
+ // Determine if there are any properties to validate
83
+ let hasProps = false;
84
+ for (const key in dataSchema) {
85
+ // Safely check own properties to avoid inherited keys
86
+ if (Object.prototype.hasOwnProperty.call(dataSchema, key)) {
87
+ hasProps = true;
88
+ break;
89
+ }
90
+ }
91
+ // If we have any props to validate, parse them using Valibot
92
+ if (hasProps) {
93
+ // Create a Valibot object from the collected schema and parse asynchronously
94
+ // Options (like error maps or jitless) can come from routeValidation.options
95
+ const parsedProps = yield (0, valibot_1.parseAsync)((0, valibot_1.objectAsync)(dataSchema), data, routeValidation === null || routeValidation === void 0 ? void 0 : routeValidation.options);
96
+ // Merge the parsed and validated properties back into the request object
97
+ Object.assign(request, parsedProps);
98
+ }
99
+ // Continue the Hapi request lifecycle
100
+ return h.continue;
101
+ }
102
+ catch (err) {
103
+ // Initialize a set to track which paths (properties) failed validation
104
+ const issuePaths = new Set();
105
+ let message;
106
+ // Check if the error is instance of ValiError
107
+ if (err instanceof valibot_1.ValiError && err.issues.length) {
108
+ const firstIssue = err.issues[0];
109
+ message = firstIssue.message;
110
+ // Track which property caused the issue
111
+ if (Array.isArray(firstIssue.path) && firstIssue.path.length) {
112
+ let errorPath = '';
113
+ for (const p of firstIssue.path) {
114
+ if (p && typeof p.key === 'string') {
115
+ errorPath += `.${p.key}`;
116
+ }
117
+ }
118
+ if (errorPath.length) {
119
+ message += ` at "${errorPath.substring(1)}"`;
120
+ }
121
+ }
122
+ }
123
+ else if (err instanceof Error) {
124
+ // If it’s a regular Error, use its message
125
+ message = err.message;
126
+ }
127
+ else {
128
+ // Unknown error type
129
+ message = 'Unknown error';
130
+ }
131
+ // Create a Boom badRequest response with the error message
132
+ const response = boom_1.default.badRequest(message);
133
+ // Attach the raw validation error object for debugging/logging
134
+ response.data = {
135
+ validationError: err
136
+ };
137
+ // Handle custom failAction if it’s a function
138
+ if (typeof (routeValidation === null || routeValidation === void 0 ? void 0 : routeValidation.failAction) === 'function') {
139
+ return routeValidation.failAction(request, h, response);
140
+ }
141
+ // If failAction is 'log', log the validation error with the request
142
+ if ((routeValidation === null || routeValidation === void 0 ? void 0 : routeValidation.failAction) === 'log') {
143
+ request.log(['validation', 'error', 'valibot', ...issuePaths], response);
144
+ // Note: unlike Hapi's failAction 'log', 'log' here still returns a Boom response
145
+ }
146
+ // Return the error response to halt request processing
147
+ return response;
148
+ }
149
+ }));
150
+ server.decorate('server', 'valibot', validator);
151
+ });
152
+ },
153
+ });
154
+ if (t.openapi) {
155
+ t.openapi.addHelperClass(doc_helpers_1.OpenAPIValibotHelper);
156
+ }
157
+ if (t.postman) {
158
+ t.postman.addHelperClass(doc_helpers_1.PostmanValibotHelper);
159
+ }
160
+ });
161
+ },
162
+ };
163
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@kaapi/validator-valibot",
3
+ "version": "0.0.17",
4
+ "private": false,
5
+ "description": "Valibot-powered request validation and documentation plugin for Kaapi.",
6
+ "main": "lib/index.js",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./lib/index.d.ts",
10
+ "default": "./lib/index.js"
11
+ }
12
+ },
13
+ "scripts": {
14
+ "lint": "eslint .",
15
+ "build": "tsc && node ./scripts/buildDT.mjs",
16
+ "test": "kaukau --require ts-node/register --config kaukau.config.mjs",
17
+ "coverage": "c8 npm test"
18
+ },
19
+ "author": "demingongo",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/demingongo/kaapi.git",
23
+ "directory": "packages/validator-valibot"
24
+ },
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "@hapi/boom": "^10.0.1",
28
+ "@kaapi/kaapi": "workspace:^",
29
+ "@novice1/api-doc-generator": "^1.0.2",
30
+ "@valibot/to-json-schema": "^1.3.0",
31
+ "tslib": "^2.8.1"
32
+ },
33
+ "peerDependencies": {
34
+ "valibot": "^1.1.0"
35
+ },
36
+ "devDependencies": {
37
+ "@types/mocha": "^10.0.10"
38
+ }
39
+ }