vovk 3.5.0 → 3.7.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/dist/client/create-rpc.d.ts +13 -0
- package/dist/client/create-rpc.js +147 -0
- package/dist/client/default-handler.d.ts +6 -0
- package/dist/client/default-handler.js +25 -0
- package/dist/client/default-stream-handler.d.ts +16 -0
- package/dist/client/default-stream-handler.js +282 -0
- package/dist/client/fetcher.d.ts +1 -1
- package/dist/client/fetcher.js +2 -2
- package/dist/client/serialize-query.d.ts +13 -0
- package/dist/client/serialize-query.js +62 -0
- package/dist/core/apply-decorator-adapter.d.ts +7 -0
- package/dist/core/apply-decorator-adapter.js +50 -0
- package/dist/core/controllers-to-static-params.d.ts +13 -0
- package/dist/core/controllers-to-static-params.js +32 -0
- package/dist/core/create-decorator.d.ts +12 -0
- package/dist/core/create-decorator.js +52 -0
- package/dist/core/decorators.js +4 -4
- package/dist/core/get-schema.d.ts +21 -0
- package/dist/core/get-schema.js +31 -0
- package/dist/core/http-exception.d.ts +16 -0
- package/dist/core/http-exception.js +26 -0
- package/dist/core/init-segment.d.ts +33 -0
- package/dist/core/init-segment.js +62 -0
- package/dist/core/json-lines-responder.d.ts +42 -0
- package/dist/core/json-lines-responder.js +94 -0
- package/dist/core/resolve-generator-config-values.d.ts +19 -0
- package/dist/core/resolve-generator-config-values.js +59 -0
- package/dist/core/set-handler-schema.d.ts +4 -0
- package/dist/core/set-handler-schema.js +12 -0
- package/dist/core/to-download-response.d.ts +11 -0
- package/dist/core/to-download-response.js +25 -0
- package/dist/core/vovk-app.d.ts +36 -0
- package/dist/core/vovk-app.js +318 -0
- package/dist/index.d.ts +10 -10
- package/dist/index.js +10 -10
- package/dist/internal.d.ts +10 -10
- package/dist/internal.js +9 -9
- package/dist/openapi/error.js +1 -1
- package/dist/openapi/openapi-to-vovk-schema/apply-components-schemas.d.ts +23 -0
- package/dist/openapi/openapi-to-vovk-schema/apply-components-schemas.js +90 -0
- package/dist/openapi/openapi-to-vovk-schema/index.d.ts +5 -0
- package/dist/openapi/openapi-to-vovk-schema/index.js +179 -0
- package/dist/openapi/openapi-to-vovk-schema/inline-refs.d.ts +9 -0
- package/dist/openapi/openapi-to-vovk-schema/inline-refs.js +99 -0
- package/dist/openapi/openapi-to-vovk-schema/prune-components-schemas.d.ts +7 -0
- package/dist/openapi/openapi-to-vovk-schema/prune-components-schemas.js +51 -0
- package/dist/openapi/operation.js +1 -1
- package/dist/openapi/tool.js +1 -1
- package/dist/openapi/vovk-schema-to-openapi.d.ts +21 -0
- package/dist/openapi/vovk-schema-to-openapi.js +250 -0
- package/dist/req/buffer-body.d.ts +1 -0
- package/dist/req/buffer-body.js +30 -0
- package/dist/req/parse-body.d.ts +4 -0
- package/dist/req/parse-body.js +49 -0
- package/dist/req/parse-form.d.ts +1 -0
- package/dist/req/parse-form.js +24 -0
- package/dist/req/parse-query.d.ts +24 -0
- package/dist/req/parse-query.js +156 -0
- package/dist/req/req-meta.d.ts +2 -0
- package/dist/req/req-meta.js +10 -0
- package/dist/req/req-query.d.ts +2 -0
- package/dist/req/req-query.js +4 -0
- package/dist/req/validate-content-type.d.ts +1 -0
- package/dist/req/validate-content-type.js +32 -0
- package/dist/samples/create-code-samples.d.ts +20 -0
- package/dist/samples/create-code-samples.js +293 -0
- package/dist/samples/object-to-code.d.ts +8 -0
- package/dist/samples/object-to-code.js +38 -0
- package/dist/samples/schema-to-code.d.ts +11 -0
- package/dist/samples/schema-to-code.js +264 -0
- package/dist/samples/schema-to-object.d.ts +2 -0
- package/dist/samples/schema-to-object.js +164 -0
- package/dist/samples/schema-to-ts-type.d.ts +2 -0
- package/dist/samples/schema-to-ts-type.js +114 -0
- package/dist/tools/create-tool-factory.d.ts +135 -0
- package/dist/tools/create-tool-factory.js +62 -0
- package/dist/tools/create-tool.d.ts +126 -0
- package/dist/tools/create-tool.js +6 -0
- package/dist/tools/derive-tools.d.ts +46 -0
- package/dist/tools/derive-tools.js +131 -0
- package/dist/tools/to-model-output-default.d.ts +7 -0
- package/dist/tools/to-model-output-default.js +7 -0
- package/dist/tools/to-model-output-mcp.d.ts +30 -0
- package/dist/tools/to-model-output-mcp.js +54 -0
- package/dist/tools/to-model-output.d.ts +8 -0
- package/dist/tools/to-model-output.js +10 -0
- package/dist/types/client.d.ts +3 -3
- package/dist/types/core.d.ts +1 -1
- package/dist/types/inference.d.ts +1 -1
- package/dist/types/validation.d.ts +1 -1
- package/dist/utils/camel-case.d.ts +6 -0
- package/dist/utils/camel-case.js +34 -0
- package/dist/utils/deep-extend.d.ts +54 -0
- package/dist/utils/deep-extend.js +127 -0
- package/dist/utils/file-name-to-disposition.d.ts +1 -0
- package/dist/utils/file-name-to-disposition.js +3 -0
- package/dist/utils/to-kebab-case.d.ts +1 -0
- package/dist/utils/to-kebab-case.js +5 -0
- package/dist/utils/trim-path.d.ts +1 -0
- package/dist/utils/trim-path.js +1 -0
- package/dist/utils/upper-first.d.ts +1 -0
- package/dist/utils/upper-first.js +3 -0
- package/dist/validation/create-standard-validation.d.ts +268 -0
- package/dist/validation/create-standard-validation.js +45 -0
- package/dist/validation/create-validate-on-client.d.ts +14 -0
- package/dist/validation/create-validate-on-client.js +23 -0
- package/dist/validation/procedure.d.ts +24 -24
- package/dist/validation/procedure.js +1 -1
- package/dist/validation/validation-schemas-object-to-single-validation-schema.d.ts +17 -0
- package/dist/validation/validation-schemas-object-to-single-validation-schema.js +92 -0
- package/dist/validation/with-validation-library.d.ts +119 -0
- package/dist/validation/with-validation-library.js +184 -0
- package/package.json +13 -5
package/dist/types/core.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type { VovkJSONSchemaBase } from './json-schema.js';
|
|
|
5
5
|
import type { VovkOperationObject } from './operation.js';
|
|
6
6
|
import type { VovkRequest } from './request.js';
|
|
7
7
|
import type { KnownAny, RequireFields, StaticClass } from './utils.js';
|
|
8
|
-
import type { Responder } from '../core/
|
|
8
|
+
import type { Responder } from '../core/json-lines-responder.js';
|
|
9
9
|
/**
|
|
10
10
|
* Schema for an individual handler, available as MyRPC.myHandler.schema and MyController.myHandler.schema
|
|
11
11
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { JSONLinesResponder } from '../core/
|
|
1
|
+
import type { JSONLinesResponder } from '../core/json-lines-responder.js';
|
|
2
2
|
import type { VovkStreamAsyncIterable } from './client.js';
|
|
3
3
|
import type { VovkRequest } from './request.js';
|
|
4
4
|
import type { KnownAny } from './utils.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { StandardSchemaV1, StandardJSONSchemaV1 } from './standard-schema.js';
|
|
2
2
|
import type { KnownAny } from './utils.js';
|
|
3
3
|
import type { VovkHandlerSchema, VovkSchema } from './core.js';
|
|
4
|
-
import type { textTypes } from '../req/
|
|
4
|
+
import type { textTypes } from '../req/parse-body.js';
|
|
5
5
|
export interface CombinedProps<Input = unknown, Output = Input> extends StandardSchemaV1.Props<Input, Output>, StandardJSONSchemaV1.Props<Input, Output> {
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Convert any value to string
|
|
2
|
+
function valToString(value) {
|
|
3
|
+
return value == null ? '' : String(value);
|
|
4
|
+
}
|
|
5
|
+
// Regex to match words (including Unicode letters & digits)
|
|
6
|
+
const reUnicodeWord = /[\p{Lu}]{2,}(?=[\p{Lu}][\p{Ll}]+[0-9]*|\b)|[\p{Lu}]?[\p{Ll}]+[0-9]*|[\p{Lu}]|[0-9]+/gu;
|
|
7
|
+
/**
|
|
8
|
+
* Splits string into an array of words based on Unicode word boundaries
|
|
9
|
+
* @param {string} str
|
|
10
|
+
* @returns {string[]}
|
|
11
|
+
*/
|
|
12
|
+
function unicodeWords(str) {
|
|
13
|
+
return str.match(reUnicodeWord) || [];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Converts string to camel case.
|
|
17
|
+
* @param {*} input - The value to convert to camel case.
|
|
18
|
+
* @returns {string}
|
|
19
|
+
*/
|
|
20
|
+
export function camelCase(input) {
|
|
21
|
+
const str = valToString(input);
|
|
22
|
+
// replace separators with space
|
|
23
|
+
const sanitized = str.replace(/[\s_-]+/g, ' ').trim();
|
|
24
|
+
const words = unicodeWords(sanitized);
|
|
25
|
+
return words
|
|
26
|
+
.map((word, index) => {
|
|
27
|
+
const lower = word.toLowerCase();
|
|
28
|
+
if (index === 0) {
|
|
29
|
+
return lower;
|
|
30
|
+
}
|
|
31
|
+
return lower.charAt(0).toUpperCase() + lower.slice(1);
|
|
32
|
+
})
|
|
33
|
+
.join('');
|
|
34
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @description Recursive object extending
|
|
3
|
+
* @author Viacheslav Lotsmanov <lotsmanov89@gmail.com>
|
|
4
|
+
* @license MIT
|
|
5
|
+
*
|
|
6
|
+
* The MIT License (MIT)
|
|
7
|
+
*
|
|
8
|
+
* Copyright (c) 2013-2018 Viacheslav Lotsmanov
|
|
9
|
+
*
|
|
10
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
11
|
+
* this software and associated documentation files (the "Software"), to deal in
|
|
12
|
+
* the Software without restriction, including without limitation the rights to
|
|
13
|
+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
14
|
+
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
15
|
+
* subject to the following conditions:
|
|
16
|
+
*
|
|
17
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
* copies or substantial portions of the Software.
|
|
19
|
+
*
|
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
22
|
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
23
|
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
24
|
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
25
|
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
|
+
*/
|
|
27
|
+
import type { KnownAny } from '../types/utils.js';
|
|
28
|
+
type DeepPartial<T> = {
|
|
29
|
+
[P in keyof T]?: T[P] extends (infer U)[] ? DeepPartial<U>[] : T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
30
|
+
};
|
|
31
|
+
type SpecificValue = Buffer | Date | RegExp;
|
|
32
|
+
declare function isSpecificValue(val: KnownAny): val is SpecificValue;
|
|
33
|
+
declare function cloneSpecificValue(val: SpecificValue): SpecificValue;
|
|
34
|
+
/**
|
|
35
|
+
* Recursive cloning array.
|
|
36
|
+
*/
|
|
37
|
+
declare function deepCloneArray<T = KnownAny>(arr: T[]): T[];
|
|
38
|
+
declare function safeGetProperty<T extends object>(object: T, property: PropertyKey): KnownAny;
|
|
39
|
+
/**
|
|
40
|
+
* Extending object that entered in first argument.
|
|
41
|
+
*
|
|
42
|
+
* Returns extended object or false if have no target object or incorrect type.
|
|
43
|
+
*
|
|
44
|
+
* If you wish to clone source object (without modify it), just use empty new
|
|
45
|
+
* object as first argument, like this:
|
|
46
|
+
* deepExtend({}, yourObj_1, [yourObj_N]);
|
|
47
|
+
*/
|
|
48
|
+
declare function deepExtend<T extends object>(...args: [T, ...Partial<T>[]]): T;
|
|
49
|
+
declare function deepExtend<T extends object, U extends object>(target: T, source: U): T & U;
|
|
50
|
+
declare function deepExtend<T extends object, U extends object, V extends object>(target: T, source1: U, source2: V): T & U & V;
|
|
51
|
+
declare function deepExtend<T extends object, U extends object, V extends object, W extends object>(target: T, source1: U, source2: V, source3: W): T & U & V & W;
|
|
52
|
+
declare function deepExtend<T extends object>(target: T, ...sources: KnownAny[]): T;
|
|
53
|
+
export { deepExtend, deepCloneArray, isSpecificValue, cloneSpecificValue, safeGetProperty };
|
|
54
|
+
export type { DeepPartial, SpecificValue };
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
/*!
|
|
3
|
+
* @description Recursive object extending
|
|
4
|
+
* @author Viacheslav Lotsmanov <lotsmanov89@gmail.com>
|
|
5
|
+
* @license MIT
|
|
6
|
+
*
|
|
7
|
+
* The MIT License (MIT)
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2013-2018 Viacheslav Lotsmanov
|
|
10
|
+
*
|
|
11
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
12
|
+
* this software and associated documentation files (the "Software"), to deal in
|
|
13
|
+
* the Software without restriction, including without limitation the rights to
|
|
14
|
+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
15
|
+
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
16
|
+
* subject to the following conditions:
|
|
17
|
+
*
|
|
18
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
19
|
+
* copies or substantial portions of the Software.
|
|
20
|
+
*
|
|
21
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
23
|
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
24
|
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
25
|
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
26
|
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
27
|
+
*/
|
|
28
|
+
function isSpecificValue(val) {
|
|
29
|
+
return val instanceof Buffer || val instanceof Date || val instanceof RegExp;
|
|
30
|
+
}
|
|
31
|
+
function cloneSpecificValue(val) {
|
|
32
|
+
if (val instanceof Buffer) {
|
|
33
|
+
const x = Buffer.alloc ? Buffer.alloc(val.length) : Buffer.from(val);
|
|
34
|
+
val.copy(x);
|
|
35
|
+
return x;
|
|
36
|
+
}
|
|
37
|
+
else if (val instanceof Date) {
|
|
38
|
+
return new Date(val.getTime());
|
|
39
|
+
}
|
|
40
|
+
else if (val instanceof RegExp) {
|
|
41
|
+
return new RegExp(val);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new Error('Unexpected situation');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Recursive cloning array.
|
|
49
|
+
*/
|
|
50
|
+
function deepCloneArray(arr) {
|
|
51
|
+
const clone = [];
|
|
52
|
+
arr.forEach((item, index) => {
|
|
53
|
+
if (typeof item === 'object' && item !== null) {
|
|
54
|
+
if (Array.isArray(item)) {
|
|
55
|
+
clone[index] = deepCloneArray(item);
|
|
56
|
+
}
|
|
57
|
+
else if (isSpecificValue(item)) {
|
|
58
|
+
clone[index] = cloneSpecificValue(item);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
clone[index] = deepExtend({}, item);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
clone[index] = item;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return clone;
|
|
69
|
+
}
|
|
70
|
+
function safeGetProperty(object, property) {
|
|
71
|
+
return property === '__proto__' ? undefined : object[property];
|
|
72
|
+
}
|
|
73
|
+
function deepExtend(...args) {
|
|
74
|
+
if (args.length < 1 || typeof args[0] !== 'object') {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
if (args.length < 2) {
|
|
78
|
+
return args[0];
|
|
79
|
+
}
|
|
80
|
+
const target = args[0];
|
|
81
|
+
// convert arguments to array and cut off target object
|
|
82
|
+
const sources = args.slice(1);
|
|
83
|
+
sources.forEach((obj) => {
|
|
84
|
+
// skip argument if isn't an object, is null, or is an array
|
|
85
|
+
if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
Object.keys(obj).forEach((key) => {
|
|
89
|
+
const src = safeGetProperty(target, key); // source value
|
|
90
|
+
const val = safeGetProperty(obj, key); // new value
|
|
91
|
+
// recursion prevention
|
|
92
|
+
if (val === target) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
else if (typeof val !== 'object' || val === null) {
|
|
96
|
+
/**
|
|
97
|
+
* if new value isn't object then just overwrite by new value
|
|
98
|
+
* instead of extending.
|
|
99
|
+
*/
|
|
100
|
+
target[key] = val;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// just clone arrays (and recursive clone objects inside)
|
|
104
|
+
else if (Array.isArray(val)) {
|
|
105
|
+
target[key] = deepCloneArray(val);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// custom cloning and overwrite for specific objects
|
|
109
|
+
else if (isSpecificValue(val)) {
|
|
110
|
+
target[key] = cloneSpecificValue(val);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// overwrite by new value if source isn't object or array
|
|
114
|
+
else if (typeof src !== 'object' || src === null || Array.isArray(src)) {
|
|
115
|
+
target[key] = deepExtend({}, val);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// source value and new value is objects both, extending...
|
|
119
|
+
else {
|
|
120
|
+
target[key] = deepExtend(src, val);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
return target;
|
|
126
|
+
}
|
|
127
|
+
export { deepExtend, deepCloneArray, isSpecificValue, cloneSpecificValue, safeGetProperty };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fileNameToDisposition(filename: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const toKebabCase: (str: string) => string;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const toKebabCase = (str) => str
|
|
2
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1-$2') // Add hyphen between lowercase/digit and uppercase
|
|
3
|
+
.replace(/([A-Z])([A-Z])(?=[a-z])/g, '$1-$2') // Add hyphen between uppercase letters if the second one is followed by a lowercase
|
|
4
|
+
.toLowerCase()
|
|
5
|
+
.replace(/^-/, ''); // Remove leading hyphen
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const trimPath: (path: string) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const trimPath = (path) => path.trim().replace(/^\/|\/$/g, '');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function upperFirst(str: string): string;
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import type { VovkRequest } from '../types/request.js';
|
|
2
|
+
import type { BodyTypeFromContentType, CombinedSpec, ContentType, NormalizeContentType } from '../types/validation.js';
|
|
3
|
+
import type { VovkValidationType } from '../types/core.js';
|
|
4
|
+
import type { VovkOperationObject } from '../types/operation.js';
|
|
5
|
+
import type { KnownAny } from '../types/utils.js';
|
|
6
|
+
type ProcedureOptions<TBody extends CombinedSpec, TQuery extends CombinedSpec, TParams extends CombinedSpec, TOutput extends CombinedSpec, TIteration extends CombinedSpec, TContentType extends ContentType | ContentType[]> = {
|
|
7
|
+
contentType?: TContentType;
|
|
8
|
+
body?: TBody;
|
|
9
|
+
query?: TQuery;
|
|
10
|
+
params?: TParams;
|
|
11
|
+
output?: TOutput;
|
|
12
|
+
iteration?: TIteration;
|
|
13
|
+
disableServerSideValidation?: boolean | VovkValidationType[];
|
|
14
|
+
skipSchemaEmission?: boolean | VovkValidationType[];
|
|
15
|
+
validateEachIteration?: boolean;
|
|
16
|
+
preferTransformed?: boolean;
|
|
17
|
+
operationObject?: VovkOperationObject;
|
|
18
|
+
target?: CombinedSpec.Target;
|
|
19
|
+
};
|
|
20
|
+
export declare function createStandardValidation({ toJSONSchema, }: {
|
|
21
|
+
toJSONSchema: (model: KnownAny, meta: {
|
|
22
|
+
validationType: VovkValidationType;
|
|
23
|
+
target: CombinedSpec.Target | undefined;
|
|
24
|
+
}) => KnownAny;
|
|
25
|
+
}): (<TBody extends CombinedSpec, TQuery extends CombinedSpec, TParams extends CombinedSpec, TOutput extends CombinedSpec, TIteration extends CombinedSpec, TReq extends VovkRequest<KnownAny, KnownAny, KnownAny> = VovkRequest<TBody extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TBody> : undefined, TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined, TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined>, TContentType extends ContentType | ContentType[] = ["application/json"]>(options?: ProcedureOptions<TBody, TQuery, TParams, TOutput, TIteration, TContentType>) => {
|
|
26
|
+
(req: TReq, params: TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : Record<string, string>): KnownAny;
|
|
27
|
+
__types: {
|
|
28
|
+
body: TBody extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TBody> : any;
|
|
29
|
+
query: TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : any;
|
|
30
|
+
params: TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : any;
|
|
31
|
+
output: unknown extends CombinedSpec.InferOutput<TOutput> ? any : CombinedSpec.InferOutput<TOutput>;
|
|
32
|
+
iteration: TIteration extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TIteration> : any;
|
|
33
|
+
contentType: NormalizeContentType<TContentType>;
|
|
34
|
+
};
|
|
35
|
+
__handleFn: (...args: KnownAny[]) => KnownAny;
|
|
36
|
+
isRPC?: boolean;
|
|
37
|
+
fn: {
|
|
38
|
+
<TTransformed>(input: {
|
|
39
|
+
body?: (TBody extends CombinedSpec<unknown, unknown> ? BodyTypeFromContentType<NormalizeContentType<TContentType>, CombinedSpec.InferOutput<TBody>> : undefined) | undefined;
|
|
40
|
+
query?: (TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined) | undefined;
|
|
41
|
+
params?: (TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined) | undefined;
|
|
42
|
+
meta?: Record<string, KnownAny>;
|
|
43
|
+
disableClientValidation?: boolean;
|
|
44
|
+
transform: (data: any, fakeReq: Pick<TReq, "vovk">) => TTransformed;
|
|
45
|
+
}): Promise<TTransformed>;
|
|
46
|
+
<TReturnType = any>(input?: {
|
|
47
|
+
body?: (TBody extends CombinedSpec<unknown, unknown> ? BodyTypeFromContentType<NormalizeContentType<TContentType>, CombinedSpec.InferOutput<TBody>> : undefined) | undefined;
|
|
48
|
+
query?: (TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined) | undefined;
|
|
49
|
+
params?: (TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined) | undefined;
|
|
50
|
+
meta?: Record<string, KnownAny>;
|
|
51
|
+
disableClientValidation?: boolean;
|
|
52
|
+
} | undefined): TReturnType;
|
|
53
|
+
(input?: {
|
|
54
|
+
body?: (TBody extends CombinedSpec<unknown, unknown> ? BodyTypeFromContentType<NormalizeContentType<TContentType>, CombinedSpec.InferOutput<TBody>> : undefined) | undefined;
|
|
55
|
+
query?: (TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined) | undefined;
|
|
56
|
+
params?: (TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined) | undefined;
|
|
57
|
+
meta?: Record<string, KnownAny>;
|
|
58
|
+
disableClientValidation?: boolean;
|
|
59
|
+
} | undefined): any;
|
|
60
|
+
};
|
|
61
|
+
definition: KnownAny;
|
|
62
|
+
schema: KnownAny;
|
|
63
|
+
wrapper?: KnownAny;
|
|
64
|
+
} & {
|
|
65
|
+
handle: unknown extends CombinedSpec.InferOutput<TOutput> ? <THandleFn extends (req: TReq, params: TParams extends CombinedSpec ? CombinedSpec.InferOutput<TParams> : Record<string, string>) => KnownAny>(fn: THandleFn) => {
|
|
66
|
+
(req: TReq, params: TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : Record<string, string>): KnownAny;
|
|
67
|
+
__types: {
|
|
68
|
+
body: TBody extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TBody> : any;
|
|
69
|
+
query: TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : any;
|
|
70
|
+
params: TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : any;
|
|
71
|
+
output: unknown extends CombinedSpec.InferOutput<TOutput> ? any : CombinedSpec.InferOutput<TOutput>;
|
|
72
|
+
iteration: TIteration extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TIteration> : any;
|
|
73
|
+
contentType: NormalizeContentType<TContentType>;
|
|
74
|
+
};
|
|
75
|
+
__handleFn: THandleFn;
|
|
76
|
+
isRPC?: boolean;
|
|
77
|
+
fn: {
|
|
78
|
+
<TTransformed>(input: {
|
|
79
|
+
body?: (TBody extends CombinedSpec<unknown, unknown> ? BodyTypeFromContentType<NormalizeContentType<TContentType>, CombinedSpec.InferOutput<TBody>> : undefined) | undefined;
|
|
80
|
+
query?: (TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined) | undefined;
|
|
81
|
+
params?: (TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined) | undefined;
|
|
82
|
+
meta?: Record<string, KnownAny>;
|
|
83
|
+
disableClientValidation?: boolean;
|
|
84
|
+
transform: (data: Awaited<ReturnType<THandleFn>>, fakeReq: Pick<TReq, "vovk">) => TTransformed;
|
|
85
|
+
}): Promise<TTransformed>;
|
|
86
|
+
<TReturnType = ReturnType<THandleFn>>(input?: {
|
|
87
|
+
body?: (TBody extends CombinedSpec<unknown, unknown> ? BodyTypeFromContentType<NormalizeContentType<TContentType>, CombinedSpec.InferOutput<TBody>> : undefined) | undefined;
|
|
88
|
+
query?: (TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined) | undefined;
|
|
89
|
+
params?: (TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined) | undefined;
|
|
90
|
+
meta?: Record<string, KnownAny>;
|
|
91
|
+
disableClientValidation?: boolean;
|
|
92
|
+
} | undefined): TReturnType;
|
|
93
|
+
(input?: {
|
|
94
|
+
body?: (TBody extends CombinedSpec<unknown, unknown> ? BodyTypeFromContentType<NormalizeContentType<TContentType>, CombinedSpec.InferOutput<TBody>> : undefined) | undefined;
|
|
95
|
+
query?: (TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined) | undefined;
|
|
96
|
+
params?: (TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined) | undefined;
|
|
97
|
+
meta?: Record<string, KnownAny>;
|
|
98
|
+
disableClientValidation?: boolean;
|
|
99
|
+
} | undefined): ReturnType<THandleFn>;
|
|
100
|
+
};
|
|
101
|
+
definition: KnownAny;
|
|
102
|
+
schema: KnownAny;
|
|
103
|
+
wrapper?: KnownAny;
|
|
104
|
+
} : (fn: (req: TReq, params: TParams extends CombinedSpec ? CombinedSpec.InferOutput<TParams> : Record<string, string>) => unknown extends CombinedSpec.InferOutput<TOutput> ? any : CombinedSpec.InferOutput<TOutput> | Promise<CombinedSpec.InferOutput<TOutput>> | (unknown extends CombinedSpec.InferOutput<TIteration> ? never : AsyncGenerator<CombinedSpec.InferOutput<TIteration>, any, any>)) => {
|
|
105
|
+
(req: TReq, params: TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : Record<string, string>): KnownAny;
|
|
106
|
+
__types: {
|
|
107
|
+
body: TBody extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TBody> : any;
|
|
108
|
+
query: TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : any;
|
|
109
|
+
params: TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : any;
|
|
110
|
+
output: unknown extends CombinedSpec.InferOutput<TOutput> ? any : CombinedSpec.InferOutput<TOutput>;
|
|
111
|
+
iteration: TIteration extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TIteration> : any;
|
|
112
|
+
contentType: NormalizeContentType<TContentType>;
|
|
113
|
+
};
|
|
114
|
+
__handleFn: (req: TReq, params: TParams extends CombinedSpec ? CombinedSpec.InferOutput<TParams> : Record<string, string>) => unknown extends CombinedSpec.InferOutput<TOutput> ? any : CombinedSpec.InferOutput<TOutput> | Promise<CombinedSpec.InferOutput<TOutput>> | (unknown extends CombinedSpec.InferOutput<TIteration> ? never : AsyncGenerator<CombinedSpec.InferOutput<TIteration>, any, any>);
|
|
115
|
+
isRPC?: boolean;
|
|
116
|
+
fn: {
|
|
117
|
+
<TTransformed>(input: {
|
|
118
|
+
body?: (TBody extends CombinedSpec<unknown, unknown> ? BodyTypeFromContentType<NormalizeContentType<TContentType>, CombinedSpec.InferOutput<TBody>> : undefined) | undefined;
|
|
119
|
+
query?: (TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined) | undefined;
|
|
120
|
+
params?: (TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined) | undefined;
|
|
121
|
+
meta?: Record<string, KnownAny>;
|
|
122
|
+
disableClientValidation?: boolean;
|
|
123
|
+
transform: (data: Awaited<unknown extends CombinedSpec.InferOutput<TOutput> ? any : CombinedSpec.InferOutput<TOutput> | Promise<CombinedSpec.InferOutput<TOutput>> | (unknown extends CombinedSpec.InferOutput<TIteration> ? never : AsyncGenerator<CombinedSpec.InferOutput<TIteration>, any, any>)>, fakeReq: Pick<TReq, "vovk">) => TTransformed;
|
|
124
|
+
}): Promise<TTransformed>;
|
|
125
|
+
<TReturnType = unknown extends CombinedSpec.InferOutput<TOutput> ? any : CombinedSpec.InferOutput<TOutput> | Promise<CombinedSpec.InferOutput<TOutput>> | (unknown extends CombinedSpec.InferOutput<TIteration> ? never : AsyncGenerator<CombinedSpec.InferOutput<TIteration>, any, any>)>(input?: {
|
|
126
|
+
body?: (TBody extends CombinedSpec<unknown, unknown> ? BodyTypeFromContentType<NormalizeContentType<TContentType>, CombinedSpec.InferOutput<TBody>> : undefined) | undefined;
|
|
127
|
+
query?: (TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined) | undefined;
|
|
128
|
+
params?: (TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined) | undefined;
|
|
129
|
+
meta?: Record<string, KnownAny>;
|
|
130
|
+
disableClientValidation?: boolean;
|
|
131
|
+
} | undefined): TReturnType;
|
|
132
|
+
(input?: {
|
|
133
|
+
body?: (TBody extends CombinedSpec<unknown, unknown> ? BodyTypeFromContentType<NormalizeContentType<TContentType>, CombinedSpec.InferOutput<TBody>> : undefined) | undefined;
|
|
134
|
+
query?: (TQuery extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TQuery> : undefined) | undefined;
|
|
135
|
+
params?: (TParams extends CombinedSpec<unknown, unknown> ? CombinedSpec.InferOutput<TParams> : undefined) | undefined;
|
|
136
|
+
meta?: Record<string, KnownAny>;
|
|
137
|
+
disableClientValidation?: boolean;
|
|
138
|
+
} | undefined): unknown extends CombinedSpec.InferOutput<TOutput> ? any : CombinedSpec.InferOutput<TOutput> | Promise<CombinedSpec.InferOutput<TOutput>> | (unknown extends CombinedSpec.InferOutput<TIteration> ? never : AsyncGenerator<CombinedSpec.InferOutput<TIteration>, any, any>);
|
|
139
|
+
};
|
|
140
|
+
definition: KnownAny;
|
|
141
|
+
schema: KnownAny;
|
|
142
|
+
wrapper?: KnownAny;
|
|
143
|
+
};
|
|
144
|
+
}) & {
|
|
145
|
+
createTool: {
|
|
146
|
+
<TInput, TOutput, TToModelOutput extends (...args: KnownAny[]) => KnownAny>(options: {
|
|
147
|
+
name: string;
|
|
148
|
+
title?: string;
|
|
149
|
+
description: string;
|
|
150
|
+
onExecute?: ((result: unknown, tool: import("../index.js").VovkTool<TInput, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>) => void) | undefined;
|
|
151
|
+
onError?: ((error: Error, tool: import("../index.js").VovkTool<TInput, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>) => void) | undefined;
|
|
152
|
+
target?: CombinedSpec.Target;
|
|
153
|
+
} & {
|
|
154
|
+
inputSchema: CombinedSpec<TInput, TInput>;
|
|
155
|
+
} & {
|
|
156
|
+
outputSchema: CombinedSpec<TOutput, TOutput>;
|
|
157
|
+
} & {
|
|
158
|
+
execute: (input: TInput, processingMeta?: KnownAny) => TOutput | Promise<TOutput>;
|
|
159
|
+
toModelOutput: TToModelOutput;
|
|
160
|
+
}): import("../index.js").VovkTool<TInput, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>;
|
|
161
|
+
<TInput, TOutput>(options: {
|
|
162
|
+
name: string;
|
|
163
|
+
title?: string;
|
|
164
|
+
description: string;
|
|
165
|
+
onExecute?: ((result: unknown, tool: import("../index.js").VovkTool<TInput, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>) => void) | undefined;
|
|
166
|
+
onError?: ((error: Error, tool: import("../index.js").VovkTool<TInput, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>) => void) | undefined;
|
|
167
|
+
target?: CombinedSpec.Target;
|
|
168
|
+
} & {
|
|
169
|
+
inputSchema: CombinedSpec<TInput, TInput>;
|
|
170
|
+
} & {
|
|
171
|
+
outputSchema: CombinedSpec<TOutput, TOutput>;
|
|
172
|
+
} & {
|
|
173
|
+
execute: (input: TInput, processingMeta?: KnownAny) => TOutput | Promise<TOutput>;
|
|
174
|
+
toModelOutput?: undefined;
|
|
175
|
+
}): import("../index.js").VovkTool<TInput, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>;
|
|
176
|
+
<TInput, TOutput, TToModelOutput extends (...args: KnownAny[]) => KnownAny>(options: {
|
|
177
|
+
name: string;
|
|
178
|
+
title?: string;
|
|
179
|
+
description: string;
|
|
180
|
+
onExecute?: ((result: unknown, tool: import("../index.js").VovkTool<TInput, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>) => void) | undefined;
|
|
181
|
+
onError?: ((error: Error, tool: import("../index.js").VovkTool<TInput, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>) => void) | undefined;
|
|
182
|
+
target?: CombinedSpec.Target;
|
|
183
|
+
} & {
|
|
184
|
+
inputSchema: CombinedSpec<TInput, TInput>;
|
|
185
|
+
} & {
|
|
186
|
+
outputSchema?: undefined;
|
|
187
|
+
} & {
|
|
188
|
+
execute: (input: TInput, processingMeta?: KnownAny) => TOutput | Promise<TOutput>;
|
|
189
|
+
toModelOutput: TToModelOutput;
|
|
190
|
+
}): import("../index.js").VovkTool<TInput, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>;
|
|
191
|
+
<TInput, TOutput>(options: {
|
|
192
|
+
name: string;
|
|
193
|
+
title?: string;
|
|
194
|
+
description: string;
|
|
195
|
+
onExecute?: ((result: unknown, tool: import("../index.js").VovkTool<TInput, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>) => void) | undefined;
|
|
196
|
+
onError?: ((error: Error, tool: import("../index.js").VovkTool<TInput, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>) => void) | undefined;
|
|
197
|
+
target?: CombinedSpec.Target;
|
|
198
|
+
} & {
|
|
199
|
+
inputSchema: CombinedSpec<TInput, TInput>;
|
|
200
|
+
} & {
|
|
201
|
+
outputSchema?: undefined;
|
|
202
|
+
} & {
|
|
203
|
+
execute: (input: TInput, processingMeta?: KnownAny) => TOutput | Promise<TOutput>;
|
|
204
|
+
toModelOutput?: undefined;
|
|
205
|
+
}): import("../index.js").VovkTool<TInput, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>;
|
|
206
|
+
<TOutput, TToModelOutput extends (...args: KnownAny[]) => KnownAny>(options: {
|
|
207
|
+
name: string;
|
|
208
|
+
title?: string;
|
|
209
|
+
description: string;
|
|
210
|
+
onExecute?: ((result: unknown, tool: import("../index.js").VovkTool<null, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>) => void) | undefined;
|
|
211
|
+
onError?: ((error: Error, tool: import("../index.js").VovkTool<null, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>) => void) | undefined;
|
|
212
|
+
target?: CombinedSpec.Target;
|
|
213
|
+
} & {
|
|
214
|
+
inputSchema?: undefined;
|
|
215
|
+
} & {
|
|
216
|
+
outputSchema: CombinedSpec<TOutput, TOutput>;
|
|
217
|
+
} & {
|
|
218
|
+
execute: (input: null, processingMeta?: KnownAny) => TOutput | Promise<TOutput>;
|
|
219
|
+
toModelOutput: TToModelOutput;
|
|
220
|
+
}): import("../index.js").VovkTool<null, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>;
|
|
221
|
+
<TOutput>(options: {
|
|
222
|
+
name: string;
|
|
223
|
+
title?: string;
|
|
224
|
+
description: string;
|
|
225
|
+
onExecute?: ((result: unknown, tool: import("../index.js").VovkTool<null, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>) => void) | undefined;
|
|
226
|
+
onError?: ((error: Error, tool: import("../index.js").VovkTool<null, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>) => void) | undefined;
|
|
227
|
+
target?: CombinedSpec.Target;
|
|
228
|
+
} & {
|
|
229
|
+
inputSchema?: undefined;
|
|
230
|
+
} & {
|
|
231
|
+
outputSchema: CombinedSpec<TOutput, TOutput>;
|
|
232
|
+
} & {
|
|
233
|
+
execute: (input: null, processingMeta?: KnownAny) => TOutput | Promise<TOutput>;
|
|
234
|
+
toModelOutput?: undefined;
|
|
235
|
+
}): import("../index.js").VovkTool<null, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>;
|
|
236
|
+
<TOutput, TToModelOutput extends (...args: KnownAny[]) => KnownAny>(options: {
|
|
237
|
+
name: string;
|
|
238
|
+
title?: string;
|
|
239
|
+
description: string;
|
|
240
|
+
onExecute?: ((result: unknown, tool: import("../index.js").VovkTool<null, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>) => void) | undefined;
|
|
241
|
+
onError?: ((error: Error, tool: import("../index.js").VovkTool<null, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>) => void) | undefined;
|
|
242
|
+
target?: CombinedSpec.Target;
|
|
243
|
+
} & {
|
|
244
|
+
inputSchema?: undefined;
|
|
245
|
+
} & {
|
|
246
|
+
outputSchema?: undefined;
|
|
247
|
+
} & {
|
|
248
|
+
execute: (input: null, processingMeta?: KnownAny) => TOutput | Promise<TOutput>;
|
|
249
|
+
toModelOutput: TToModelOutput;
|
|
250
|
+
}): import("../index.js").VovkTool<null, TOutput, TToModelOutput extends import("../tools/to-model-output-default.js").ToModelOutputDefaultFn ? import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput> : TToModelOutput extends (...args: KnownAny[]) => infer R ? R extends Promise<infer U> ? U : R : unknown>;
|
|
251
|
+
<TOutput>(options: {
|
|
252
|
+
name: string;
|
|
253
|
+
title?: string;
|
|
254
|
+
description: string;
|
|
255
|
+
onExecute?: ((result: unknown, tool: import("../index.js").VovkTool<null, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>) => void) | undefined;
|
|
256
|
+
onError?: ((error: Error, tool: import("../index.js").VovkTool<null, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>) => void) | undefined;
|
|
257
|
+
target?: CombinedSpec.Target;
|
|
258
|
+
} & {
|
|
259
|
+
inputSchema?: undefined;
|
|
260
|
+
} & {
|
|
261
|
+
outputSchema?: undefined;
|
|
262
|
+
} & {
|
|
263
|
+
execute: (input: null, processingMeta?: KnownAny) => TOutput | Promise<TOutput>;
|
|
264
|
+
toModelOutput?: undefined;
|
|
265
|
+
}): import("../index.js").VovkTool<null, TOutput, import("../tools/to-model-output-default.js").DefaultModelOutput<TOutput>>;
|
|
266
|
+
};
|
|
267
|
+
};
|
|
268
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { withValidationLibrary } from './with-validation-library.js';
|
|
2
|
+
import { HttpException } from '../core/http-exception.js';
|
|
3
|
+
import { createToolFactory } from '../tools/create-tool-factory.js';
|
|
4
|
+
import { HttpStatus } from './create-validate-on-client.js';
|
|
5
|
+
export function createStandardValidation({ toJSONSchema, }) {
|
|
6
|
+
function callWithValidationLibrary(options, handle) {
|
|
7
|
+
const normalizedContentType = (typeof options.contentType === 'string' ? [options.contentType] : options.contentType);
|
|
8
|
+
return withValidationLibrary({
|
|
9
|
+
contentType: normalizedContentType,
|
|
10
|
+
body: options.body,
|
|
11
|
+
query: options.query,
|
|
12
|
+
params: options.params,
|
|
13
|
+
output: options.output,
|
|
14
|
+
iteration: options.iteration,
|
|
15
|
+
disableServerSideValidation: options.disableServerSideValidation,
|
|
16
|
+
skipSchemaEmission: options.skipSchemaEmission,
|
|
17
|
+
validateEachIteration: options.validateEachIteration,
|
|
18
|
+
handle: handle,
|
|
19
|
+
toJSONSchema: (model, opts) => toJSONSchema(model, { validationType: opts.validationType, target: options.target }),
|
|
20
|
+
validate: async (data, model, { validationType, i }) => {
|
|
21
|
+
const result = await model['~standard'].validate(data);
|
|
22
|
+
if (result.issues?.length) {
|
|
23
|
+
throw new HttpException(HttpStatus.BAD_REQUEST, `Validation failed. Invalid ${validationType === 'iteration' ? `${validationType} #${i}` : validationType}: ${result.issues
|
|
24
|
+
.map(({ message, path }) => `${message}${path ? ` at ${path.join('.')}` : ''}`)
|
|
25
|
+
.join(', ')}`, { issues: result.issues });
|
|
26
|
+
}
|
|
27
|
+
return result.value;
|
|
28
|
+
},
|
|
29
|
+
preferTransformed: options.preferTransformed,
|
|
30
|
+
operationObject: options.operationObject,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Implementation
|
|
34
|
+
function procedure(options) {
|
|
35
|
+
const notImplementedHandler = callWithValidationLibrary(options ?? {}, () => {
|
|
36
|
+
throw new HttpException(HttpStatus.NOT_IMPLEMENTED, 'Not implemented');
|
|
37
|
+
});
|
|
38
|
+
return Object.assign(notImplementedHandler, {
|
|
39
|
+
handle(fn) {
|
|
40
|
+
return callWithValidationLibrary(options ?? {}, fn);
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return Object.assign(procedure, { createTool: createToolFactory({ toJSONSchema }) });
|
|
45
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { HttpException } from '../core/http-exception.js';
|
|
2
|
+
import { HttpStatus } from '../types/enums.js';
|
|
3
|
+
import type { VovkValidateOnClient } from '../types/validation.js';
|
|
4
|
+
import type { VovkJSONSchemaBase } from '../types/json-schema.js';
|
|
5
|
+
import type { VovkSchema } from '../types/core.js';
|
|
6
|
+
export { createValidateOnClient, HttpException, HttpStatus, type VovkJSONSchemaBase, type VovkValidateOnClient, type VovkSchema, };
|
|
7
|
+
/**
|
|
8
|
+
* Creates a validation function for client-side input validation.
|
|
9
|
+
*/
|
|
10
|
+
declare function createValidateOnClient<TFetcherOptions>({ validate, }: {
|
|
11
|
+
validate: (input: unknown, schema: VovkJSONSchemaBase, meta: Parameters<VovkValidateOnClient<TFetcherOptions>>[2] & {
|
|
12
|
+
type: 'body' | 'query' | 'params';
|
|
13
|
+
}) => unknown | Promise<unknown>;
|
|
14
|
+
}): VovkValidateOnClient<TFetcherOptions>;
|