vovk 3.0.0-draft.46 → 3.0.0-draft.461
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 +1 -1
- package/README.md +8 -96
- package/bin/index.mjs +8 -0
- package/cjs/JSONLinesResponse.d.ts +19 -0
- package/cjs/JSONLinesResponse.js +95 -0
- package/{VovkApp.d.ts → cjs/VovkApp.d.ts} +14 -8
- package/cjs/VovkApp.js +304 -0
- package/cjs/client/createRPC.d.ts +5 -0
- package/cjs/client/createRPC.js +116 -0
- package/cjs/client/defaultHandler.d.ts +6 -0
- package/{client → cjs/client}/defaultHandler.js +9 -2
- package/cjs/client/defaultStreamHandler.d.ts +9 -0
- package/{client → cjs/client}/defaultStreamHandler.js +49 -26
- package/cjs/client/fetcher.d.ts +18 -0
- package/cjs/client/fetcher.js +97 -0
- package/cjs/client/index.d.ts +4 -0
- package/cjs/client/index.js +10 -0
- package/cjs/client/progressive.d.ts +9 -0
- package/cjs/client/progressive.js +54 -0
- package/cjs/client/types.d.ts +120 -0
- package/{createVovkApp.d.ts → cjs/createVovkApp.d.ts} +19 -16
- package/cjs/createVovkApp.js +146 -0
- package/cjs/index.d.ts +69 -0
- package/cjs/index.js +42 -0
- package/cjs/openapi/error.d.ts +2 -0
- package/cjs/openapi/error.js +100 -0
- package/cjs/openapi/index.d.ts +8 -0
- package/cjs/openapi/index.js +21 -0
- package/cjs/openapi/openAPIToVovkSchema/applyComponentsSchemas.d.ts +3 -0
- package/cjs/openapi/openAPIToVovkSchema/applyComponentsSchemas.js +67 -0
- package/cjs/openapi/openAPIToVovkSchema/index.d.ts +4 -0
- package/cjs/openapi/openAPIToVovkSchema/index.js +141 -0
- package/cjs/openapi/openAPIToVovkSchema/inlineRefs.d.ts +10 -0
- package/cjs/openapi/openAPIToVovkSchema/inlineRefs.js +102 -0
- package/cjs/openapi/vovkSchemaToOpenAPI.d.ts +8 -0
- package/cjs/openapi/vovkSchemaToOpenAPI.js +238 -0
- package/cjs/types.d.ts +466 -0
- package/{types.js → cjs/types.js} +14 -2
- package/cjs/utils/camelCase.d.ts +6 -0
- package/cjs/utils/camelCase.js +37 -0
- package/cjs/utils/createCodeSamples.d.ts +20 -0
- package/cjs/utils/createCodeSamples.js +279 -0
- package/cjs/utils/createDecorator.d.ts +6 -0
- package/{createDecorator.js → cjs/utils/createDecorator.js} +24 -14
- package/cjs/utils/createLLMTools.d.ts +50 -0
- package/cjs/utils/createLLMTools.js +168 -0
- package/cjs/utils/createStandardValidation.d.ts +83 -0
- package/cjs/utils/createStandardValidation.js +35 -0
- package/cjs/utils/createValidateOnClient.d.ts +7 -0
- package/cjs/utils/createValidateOnClient.js +19 -0
- package/cjs/utils/deepExtend.d.ts +54 -0
- package/cjs/utils/deepExtend.js +134 -0
- package/{utils → cjs/utils}/generateStaticAPI.d.ts +2 -2
- package/cjs/utils/generateStaticAPI.js +30 -0
- package/cjs/utils/getJSONSchemaExample.d.ts +11 -0
- package/cjs/utils/getJSONSchemaExample.js +264 -0
- package/cjs/utils/getJSONSchemaSample.d.ts +2 -0
- package/cjs/utils/getJSONSchemaSample.js +167 -0
- package/cjs/utils/getSampleFromObject.d.ts +9 -0
- package/cjs/utils/getSampleFromObject.js +41 -0
- package/cjs/utils/getSchema.d.ts +21 -0
- package/cjs/utils/getSchema.js +38 -0
- package/cjs/utils/multitenant.d.ts +24 -0
- package/cjs/utils/multitenant.js +131 -0
- package/cjs/utils/parseQuery.d.ts +25 -0
- package/cjs/utils/parseQuery.js +156 -0
- package/cjs/utils/reqForm.d.ts +2 -0
- package/cjs/utils/reqForm.js +33 -0
- package/cjs/utils/reqMeta.d.ts +2 -0
- package/cjs/utils/reqQuery.d.ts +2 -0
- package/cjs/utils/reqQuery.js +10 -0
- package/cjs/utils/resolveGeneratorConfigValues.d.ts +18 -0
- package/cjs/utils/resolveGeneratorConfigValues.js +82 -0
- package/cjs/utils/serializeQuery.d.ts +13 -0
- package/cjs/utils/serializeQuery.js +65 -0
- package/cjs/utils/setHandlerSchema.d.ts +4 -0
- package/cjs/utils/setHandlerSchema.js +15 -0
- package/cjs/utils/upperFirst.d.ts +1 -0
- package/cjs/utils/upperFirst.js +6 -0
- package/cjs/utils/withValidationLibrary.d.ts +78 -0
- package/cjs/utils/withValidationLibrary.js +133 -0
- package/mjs/HttpException.d.ts +7 -0
- package/mjs/HttpException.js +15 -0
- package/mjs/JSONLinesResponse.d.ts +19 -0
- package/mjs/JSONLinesResponse.js +95 -0
- package/mjs/VovkApp.d.ts +34 -0
- package/mjs/VovkApp.js +304 -0
- package/mjs/client/createRPC.d.ts +5 -0
- package/mjs/client/createRPC.js +116 -0
- package/mjs/client/defaultHandler.d.ts +6 -0
- package/mjs/client/defaultHandler.js +29 -0
- package/mjs/client/defaultStreamHandler.d.ts +9 -0
- package/mjs/client/defaultStreamHandler.js +105 -0
- package/mjs/client/fetcher.d.ts +18 -0
- package/mjs/client/fetcher.js +97 -0
- package/mjs/client/index.d.ts +4 -0
- package/mjs/client/index.js +10 -0
- package/mjs/client/progressive.d.ts +9 -0
- package/mjs/client/progressive.js +54 -0
- package/mjs/client/types.d.ts +120 -0
- package/mjs/createVovkApp.d.ts +65 -0
- package/mjs/createVovkApp.js +146 -0
- package/mjs/index.d.ts +69 -0
- package/mjs/index.js +42 -0
- package/mjs/openapi/error.d.ts +2 -0
- package/mjs/openapi/error.js +100 -0
- package/mjs/openapi/index.d.ts +8 -0
- package/mjs/openapi/index.js +21 -0
- package/mjs/openapi/openAPIToVovkSchema/applyComponentsSchemas.d.ts +3 -0
- package/mjs/openapi/openAPIToVovkSchema/applyComponentsSchemas.js +67 -0
- package/mjs/openapi/openAPIToVovkSchema/index.d.ts +4 -0
- package/mjs/openapi/openAPIToVovkSchema/index.js +141 -0
- package/mjs/openapi/openAPIToVovkSchema/inlineRefs.d.ts +10 -0
- package/mjs/openapi/openAPIToVovkSchema/inlineRefs.js +102 -0
- package/mjs/openapi/vovkSchemaToOpenAPI.d.ts +8 -0
- package/mjs/openapi/vovkSchemaToOpenAPI.js +238 -0
- package/mjs/types.d.ts +466 -0
- package/mjs/types.js +77 -0
- package/mjs/utils/camelCase.d.ts +6 -0
- package/mjs/utils/camelCase.js +37 -0
- package/mjs/utils/createCodeSamples.d.ts +20 -0
- package/mjs/utils/createCodeSamples.js +279 -0
- package/mjs/utils/createDecorator.d.ts +6 -0
- package/mjs/utils/createDecorator.js +48 -0
- package/mjs/utils/createLLMTools.d.ts +50 -0
- package/mjs/utils/createLLMTools.js +168 -0
- package/mjs/utils/createStandardValidation.d.ts +83 -0
- package/mjs/utils/createStandardValidation.js +35 -0
- package/mjs/utils/createValidateOnClient.d.ts +7 -0
- package/mjs/utils/createValidateOnClient.js +19 -0
- package/mjs/utils/deepExtend.d.ts +54 -0
- package/mjs/utils/deepExtend.js +134 -0
- package/mjs/utils/generateStaticAPI.d.ts +4 -0
- package/mjs/utils/generateStaticAPI.js +30 -0
- package/mjs/utils/getJSONSchemaExample.d.ts +11 -0
- package/mjs/utils/getJSONSchemaExample.js +264 -0
- package/mjs/utils/getJSONSchemaSample.d.ts +2 -0
- package/mjs/utils/getJSONSchemaSample.js +167 -0
- package/mjs/utils/getSampleFromObject.d.ts +9 -0
- package/mjs/utils/getSampleFromObject.js +41 -0
- package/mjs/utils/getSchema.d.ts +21 -0
- package/mjs/utils/getSchema.js +38 -0
- package/mjs/utils/multitenant.d.ts +24 -0
- package/mjs/utils/multitenant.js +131 -0
- package/mjs/utils/parseQuery.d.ts +25 -0
- package/mjs/utils/parseQuery.js +156 -0
- package/mjs/utils/reqForm.d.ts +2 -0
- package/mjs/utils/reqForm.js +33 -0
- package/mjs/utils/reqMeta.d.ts +2 -0
- package/mjs/utils/reqMeta.js +13 -0
- package/mjs/utils/reqQuery.d.ts +2 -0
- package/mjs/utils/reqQuery.js +10 -0
- package/mjs/utils/resolveGeneratorConfigValues.d.ts +18 -0
- package/mjs/utils/resolveGeneratorConfigValues.js +82 -0
- package/mjs/utils/serializeQuery.d.ts +13 -0
- package/mjs/utils/serializeQuery.js +65 -0
- package/mjs/utils/setHandlerSchema.d.ts +4 -0
- package/mjs/utils/setHandlerSchema.js +15 -0
- package/mjs/utils/shim.d.ts +1 -0
- package/mjs/utils/shim.js +18 -0
- package/mjs/utils/upperFirst.d.ts +1 -0
- package/mjs/utils/upperFirst.js +6 -0
- package/mjs/utils/withValidationLibrary.d.ts +78 -0
- package/mjs/utils/withValidationLibrary.js +133 -0
- package/package.json +28 -6
- package/.npmignore +0 -2
- package/StreamJSONResponse.d.ts +0 -17
- package/StreamJSONResponse.js +0 -54
- package/VovkApp.js +0 -185
- package/client/clientizeController.d.ts +0 -4
- package/client/clientizeController.js +0 -93
- package/client/defaultFetcher.d.ts +0 -4
- package/client/defaultFetcher.js +0 -49
- package/client/defaultHandler.d.ts +0 -2
- package/client/defaultStreamHandler.d.ts +0 -4
- package/client/index.d.ts +0 -4
- package/client/index.js +0 -5
- package/client/types.d.ts +0 -100
- package/createDecorator.d.ts +0 -4
- package/createVovkApp.js +0 -118
- package/index.d.ts +0 -60
- package/index.js +0 -20
- package/types.d.ts +0 -157
- package/utils/generateStaticAPI.js +0 -18
- package/utils/getSchema.d.ts +0 -8
- package/utils/getSchema.js +0 -38
- package/utils/reqForm.d.ts +0 -3
- package/utils/reqForm.js +0 -13
- package/utils/reqMeta.d.ts +0 -3
- package/utils/reqQuery.d.ts +0 -3
- package/utils/reqQuery.js +0 -25
- package/utils/setClientValidatorsForHandler.d.ts +0 -5
- package/utils/setClientValidatorsForHandler.js +0 -25
- package/worker/index.d.ts +0 -3
- package/worker/index.js +0 -7
- package/worker/promisifyWorker.d.ts +0 -2
- package/worker/promisifyWorker.js +0 -141
- package/worker/types.d.ts +0 -31
- package/worker/worker.d.ts +0 -1
- package/worker/worker.js +0 -43
- /package/{HttpException.d.ts → cjs/HttpException.d.ts} +0 -0
- /package/{HttpException.js → cjs/HttpException.js} +0 -0
- /package/{client → cjs/client}/types.js +0 -0
- /package/{utils → cjs/utils}/reqMeta.js +0 -0
- /package/{utils → cjs/utils}/shim.d.ts +0 -0
- /package/{utils → cjs/utils}/shim.js +0 -0
- /package/{worker → mjs/client}/types.js +0 -0
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCodeSamples = createCodeSamples;
|
|
4
|
+
const getJSONSchemaExample_1 = require("./getJSONSchemaExample");
|
|
5
|
+
const getSampleFromObject_1 = require("./getSampleFromObject");
|
|
6
|
+
const toSnakeCase = (str) => str
|
|
7
|
+
.replace(/-/g, '_') // Replace hyphens with underscores
|
|
8
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1_$2') // Add underscore between lowercase/digit and uppercase
|
|
9
|
+
.replace(/([A-Z])([A-Z])(?=[a-z])/g, '$1_$2') // Add underscore between uppercase letters if the second one is followed by a lowercase
|
|
10
|
+
.toLowerCase()
|
|
11
|
+
.replace(/^_/, ''); // Remove leading underscore
|
|
12
|
+
const getIndentSpaces = (level) => ' '.repeat(level);
|
|
13
|
+
function isTextFormat(mimeType) {
|
|
14
|
+
if (!mimeType)
|
|
15
|
+
return false;
|
|
16
|
+
return (mimeType.startsWith('text/') ||
|
|
17
|
+
[
|
|
18
|
+
'application/json',
|
|
19
|
+
'application/ld+json',
|
|
20
|
+
'application/xml',
|
|
21
|
+
'application/xhtml+xml',
|
|
22
|
+
'application/javascript',
|
|
23
|
+
'application/typescript',
|
|
24
|
+
'application/yaml',
|
|
25
|
+
'application/x-yaml',
|
|
26
|
+
'application/toml',
|
|
27
|
+
'application/sql',
|
|
28
|
+
'application/graphql',
|
|
29
|
+
'application/x-www-form-urlencoded',
|
|
30
|
+
].includes(mimeType) ||
|
|
31
|
+
mimeType.endsWith('+json') ||
|
|
32
|
+
mimeType.endsWith('+xml'));
|
|
33
|
+
}
|
|
34
|
+
function generateTypeScriptCode({ handlerName, rpcName, packageName, queryValidation, bodyValidation, paramsValidation, outputValidation, iterationValidation, hasArg, config, }) {
|
|
35
|
+
const getTsSample = (schema, indent) => (0, getJSONSchemaExample_1.getJSONSchemaExample)(schema, { stripQuotes: true, indent: indent ?? 4 });
|
|
36
|
+
const getTsFormSample = (schema) => {
|
|
37
|
+
let formSample = '\nconst formData = new FormData();';
|
|
38
|
+
for (const [key, prop] of Object.entries(schema.properties || {})) {
|
|
39
|
+
const target = prop.oneOf?.[0] || prop.anyOf?.[0] || prop.allOf?.[0] || prop;
|
|
40
|
+
const desc = target.description ?? prop.description ?? undefined;
|
|
41
|
+
if (target.type === 'array' && target.items) {
|
|
42
|
+
formSample += getTsFormAppend(target.items, key, desc);
|
|
43
|
+
formSample += getTsFormAppend(target.items, key, desc);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
formSample += getTsFormAppend(target, key, desc);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return formSample;
|
|
50
|
+
};
|
|
51
|
+
const getTsFormAppend = (schema, key, description) => {
|
|
52
|
+
let sampleValue;
|
|
53
|
+
if (schema.type === 'string' && schema.format === 'binary') {
|
|
54
|
+
sampleValue = `new Blob(${isTextFormat(schema.contentMediaType) ? '["text_content"]' : '[binary_data]'}${schema.contentMediaType ? `, { type: "${schema.contentMediaType}" }` : ''})`;
|
|
55
|
+
}
|
|
56
|
+
else if (schema.type === 'object') {
|
|
57
|
+
sampleValue = '"object_unknown"';
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
sampleValue = `"${(0, getJSONSchemaExample_1.getSampleValue)(schema)}"`;
|
|
61
|
+
}
|
|
62
|
+
const desc = schema.description ?? description;
|
|
63
|
+
return `\n${desc ? `// ${desc}\n` : ''}formData.append("${key}", ${sampleValue});`;
|
|
64
|
+
};
|
|
65
|
+
const tsArgs = hasArg
|
|
66
|
+
? `{
|
|
67
|
+
${[
|
|
68
|
+
bodyValidation ? ` body: ${bodyValidation['x-isForm'] ? 'formData' : getTsSample(bodyValidation)},` : null,
|
|
69
|
+
queryValidation ? ` query: ${getTsSample(queryValidation)},` : null,
|
|
70
|
+
paramsValidation ? ` params: ${getTsSample(paramsValidation)},` : null,
|
|
71
|
+
config?.apiRoot ? ` apiRoot: '${config.apiRoot}',` : null,
|
|
72
|
+
config?.headers
|
|
73
|
+
? ` init: {
|
|
74
|
+
headers: ${(0, getSampleFromObject_1.getSampleFromObject)(config.headers, { stripQuotes: true, indent: 6, nestingIndent: 4 })}
|
|
75
|
+
},`
|
|
76
|
+
: null,
|
|
77
|
+
]
|
|
78
|
+
.filter(Boolean)
|
|
79
|
+
.join('\n')}
|
|
80
|
+
}`
|
|
81
|
+
: '';
|
|
82
|
+
const TS_CODE = `import { ${rpcName} } from '${packageName}';
|
|
83
|
+
${bodyValidation?.['x-isForm'] ? getTsFormSample(bodyValidation) + '\n' : ''}
|
|
84
|
+
${iterationValidation ? 'using' : 'const'} response = await ${rpcName}.${handlerName}(${tsArgs});
|
|
85
|
+
${outputValidation
|
|
86
|
+
? `
|
|
87
|
+
console.log(response);
|
|
88
|
+
/*
|
|
89
|
+
${getTsSample(outputValidation, 0)}
|
|
90
|
+
*/`
|
|
91
|
+
: ''}${iterationValidation
|
|
92
|
+
? `
|
|
93
|
+
for await (const item of response) {
|
|
94
|
+
console.log(item);
|
|
95
|
+
/*
|
|
96
|
+
${getTsSample(iterationValidation)}
|
|
97
|
+
*/
|
|
98
|
+
}`
|
|
99
|
+
: ''}`;
|
|
100
|
+
return TS_CODE.trim();
|
|
101
|
+
}
|
|
102
|
+
function generatePythonCode({ handlerName, rpcName, packageName, queryValidation, bodyValidation, paramsValidation, outputValidation, iterationValidation, hasArg, config, }) {
|
|
103
|
+
const getPySample = (schema, indent) => (0, getJSONSchemaExample_1.getJSONSchemaExample)(schema, {
|
|
104
|
+
stripQuotes: false,
|
|
105
|
+
indent: indent ?? 4,
|
|
106
|
+
comment: '#',
|
|
107
|
+
ignoreBinary: true,
|
|
108
|
+
nestingIndent: 4,
|
|
109
|
+
});
|
|
110
|
+
const handlerNameSnake = toSnakeCase(handlerName);
|
|
111
|
+
const getFileTouple = (schema) => {
|
|
112
|
+
return `('name.ext', BytesIO(${isTextFormat(schema.contentMediaType) ? '"text_content".encode("utf-8")' : 'binary_data'})${schema.contentMediaType ? `, "${schema.contentMediaType}"` : ''})`;
|
|
113
|
+
};
|
|
114
|
+
const getPyFiles = (schema) => {
|
|
115
|
+
return Object.entries(schema.properties ?? {}).reduce((acc, [key, prop]) => {
|
|
116
|
+
const target = prop.oneOf?.[0] || prop.anyOf?.[0] || prop.allOf?.[0] || prop;
|
|
117
|
+
const desc = target.description ?? prop.description ?? undefined;
|
|
118
|
+
if (target.type === 'string' && target.format === 'binary') {
|
|
119
|
+
acc.push(`${desc ? `${getIndentSpaces(8)}# ${desc}\n` : ''}${getIndentSpaces(8)}('${key}', ${getFileTouple(target)})`);
|
|
120
|
+
}
|
|
121
|
+
else if (target.type === 'array' && target.items?.format === 'binary') {
|
|
122
|
+
const val = `${desc ? `${getIndentSpaces(8)}# ${desc}\n` : ''}${getIndentSpaces(8)}('${key}', ${getFileTouple(target.items)})`;
|
|
123
|
+
acc.push(val, val);
|
|
124
|
+
}
|
|
125
|
+
return acc;
|
|
126
|
+
}, []);
|
|
127
|
+
};
|
|
128
|
+
const pyFiles = bodyValidation ? getPyFiles(bodyValidation) : null;
|
|
129
|
+
const pyFilesArg = pyFiles?.length
|
|
130
|
+
? `${getIndentSpaces(4)}files=[\n${pyFiles.join(',\n')}\n${getIndentSpaces(4)}],`
|
|
131
|
+
: null;
|
|
132
|
+
const PY_CODE = `from ${packageName} import ${rpcName}
|
|
133
|
+
${bodyValidation?.['x-isForm'] ? 'from io import BytesIO\n' : ''}
|
|
134
|
+
response = ${rpcName}.${handlerNameSnake}(${hasArg
|
|
135
|
+
? '\n' +
|
|
136
|
+
[
|
|
137
|
+
bodyValidation ? ` body=${getPySample(bodyValidation)},` : null,
|
|
138
|
+
pyFilesArg,
|
|
139
|
+
queryValidation ? ` query=${getPySample(queryValidation)},` : null,
|
|
140
|
+
paramsValidation ? ` params=${getPySample(paramsValidation)},` : null,
|
|
141
|
+
config?.apiRoot ? ` api_root="${config.apiRoot}",` : null,
|
|
142
|
+
config?.headers
|
|
143
|
+
? ` headers=${(0, getSampleFromObject_1.getSampleFromObject)(config.headers, { stripQuotes: false, indent: 4, nestingIndent: 4 })},`
|
|
144
|
+
: null,
|
|
145
|
+
]
|
|
146
|
+
.filter(Boolean)
|
|
147
|
+
.join('\n') +
|
|
148
|
+
'\n'
|
|
149
|
+
: ''})
|
|
150
|
+
|
|
151
|
+
${outputValidation ? `print(response)\n${getPySample(outputValidation, 0)}` : ''}${iterationValidation
|
|
152
|
+
? `for i, item in enumerate(response):
|
|
153
|
+
print(f"iteration #{i}:\\n {item}")
|
|
154
|
+
# iteration #0:
|
|
155
|
+
${getPySample(iterationValidation)}`
|
|
156
|
+
: ''}`;
|
|
157
|
+
return PY_CODE.trim();
|
|
158
|
+
}
|
|
159
|
+
function generateRustCode({ handlerName, rpcName, packageName, queryValidation, bodyValidation, paramsValidation, outputValidation, iterationValidation, config, }) {
|
|
160
|
+
const getRsJSONSample = (schema, indent) => (0, getJSONSchemaExample_1.getJSONSchemaExample)(schema, { stripQuotes: false, indent: indent ?? 4 });
|
|
161
|
+
const getRsOutputSample = (schema, indent) => (0, getJSONSchemaExample_1.getJSONSchemaExample)(schema, { stripQuotes: true, indent: indent ?? 4 });
|
|
162
|
+
const getRsFormSample = (schema) => {
|
|
163
|
+
let formSample = 'let form = multipart::Form::new()';
|
|
164
|
+
for (const [key, prop] of Object.entries(schema.properties || {})) {
|
|
165
|
+
const target = prop.oneOf?.[0] || prop.anyOf?.[0] || prop.allOf?.[0] || prop;
|
|
166
|
+
const desc = target.description ?? prop.description ?? undefined;
|
|
167
|
+
if (target.type === 'array' && target.items) {
|
|
168
|
+
formSample += getRsFormPart(target.items, key, desc);
|
|
169
|
+
formSample += getRsFormPart(target.items, key, desc);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
formSample += getRsFormPart(target, key, desc);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return formSample;
|
|
176
|
+
};
|
|
177
|
+
const getRsFormPart = (schema, key, description) => {
|
|
178
|
+
let sampleValue;
|
|
179
|
+
if (schema.type === 'string' && schema.format === 'binary') {
|
|
180
|
+
sampleValue = isTextFormat(schema.contentMediaType)
|
|
181
|
+
? 'multipart::Part::text("text_content")'
|
|
182
|
+
: 'multipart::Part::bytes(binary_data)';
|
|
183
|
+
if (schema.contentMediaType) {
|
|
184
|
+
sampleValue += `.mime_str("${schema.contentMediaType}").unwrap()`;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else if (schema.type === 'object') {
|
|
188
|
+
sampleValue = '"object_unknown"';
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
sampleValue = `"${(0, getJSONSchemaExample_1.getSampleValue)(schema)}"`;
|
|
192
|
+
}
|
|
193
|
+
const desc = schema.description ?? description;
|
|
194
|
+
return `\n${getIndentSpaces(4)}${desc ? `// ${desc}\n` : ''}${getIndentSpaces(4)}.part("${key}", ${sampleValue});`;
|
|
195
|
+
};
|
|
196
|
+
const getHashMapSample = (map, indent = 4) => {
|
|
197
|
+
const entries = Object.entries(map)
|
|
198
|
+
.map(([key, value]) => {
|
|
199
|
+
return `${getIndentSpaces(indent + 2)}("${key}".to_string(), "${value}".to_string())`;
|
|
200
|
+
})
|
|
201
|
+
.join(',\n');
|
|
202
|
+
return `Some(&HashMap::from([\n${entries}\n${getIndentSpaces(4)}]))`;
|
|
203
|
+
};
|
|
204
|
+
const getBody = (schema) => {
|
|
205
|
+
if (schema['x-isForm']) {
|
|
206
|
+
return 'form';
|
|
207
|
+
}
|
|
208
|
+
return serdeUnwrap(getRsJSONSample(schema));
|
|
209
|
+
};
|
|
210
|
+
const handlerNameSnake = toSnakeCase(handlerName);
|
|
211
|
+
const rpcNameSnake = toSnakeCase(rpcName);
|
|
212
|
+
const serdeUnwrap = (fake) => `from_value(json!(${fake})).unwrap()`;
|
|
213
|
+
const RS_CODE = `use ${packageName}::${rpcNameSnake};
|
|
214
|
+
use serde_json::{
|
|
215
|
+
from_value,
|
|
216
|
+
json
|
|
217
|
+
};
|
|
218
|
+
${bodyValidation?.['x-isForm'] ? `use multipart;\n` : ''}
|
|
219
|
+
pub fn main() {${bodyValidation?.['x-isForm'] ? '\n ' + getRsFormSample(bodyValidation) + '\n' : ''}
|
|
220
|
+
let response = ${rpcNameSnake}::${handlerNameSnake}(
|
|
221
|
+
${bodyValidation ? getBody(bodyValidation) : '()'}, /* body */
|
|
222
|
+
${queryValidation ? serdeUnwrap(getRsJSONSample(queryValidation)) : '()'}, /* query */
|
|
223
|
+
${paramsValidation ? serdeUnwrap(getRsJSONSample(paramsValidation)) : '()'}, /* params */
|
|
224
|
+
${config?.headers ? `${getHashMapSample(config.headers)}, /* headers */` : 'None, /* headers (HashMap) */ '}
|
|
225
|
+
${config?.apiRoot ? `"${config.apiRoot}".to_string(), /* api_root */` : 'None, /* api_root */'}
|
|
226
|
+
false, /* disable_client_validation */
|
|
227
|
+
);${outputValidation
|
|
228
|
+
? `\n\nmatch response {
|
|
229
|
+
Ok(output) => println!("{:?}", output),
|
|
230
|
+
/*
|
|
231
|
+
output ${getRsOutputSample(outputValidation)}
|
|
232
|
+
*/
|
|
233
|
+
Err(e) => println!("error: {:?}", e),
|
|
234
|
+
}`
|
|
235
|
+
: ''}${iterationValidation
|
|
236
|
+
? `\n\nmatch response {
|
|
237
|
+
Ok(stream) => {
|
|
238
|
+
for (i, item) in stream.enumerate() {
|
|
239
|
+
println!("#{}: {:?}", i, item);
|
|
240
|
+
/*
|
|
241
|
+
#0: iteration ${getRsOutputSample(iterationValidation, 8)}
|
|
242
|
+
*/
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
Err(e) => println!("Error initiating stream: {:?}", e),
|
|
246
|
+
}`
|
|
247
|
+
: ''}
|
|
248
|
+
}`;
|
|
249
|
+
return RS_CODE.trim();
|
|
250
|
+
}
|
|
251
|
+
function createCodeSamples({ handlerName, handlerSchema, controllerSchema, package: packageJson, config, }) {
|
|
252
|
+
const queryValidation = handlerSchema?.validation?.query;
|
|
253
|
+
const bodyValidation = handlerSchema?.validation?.body;
|
|
254
|
+
const paramsValidation = handlerSchema?.validation?.params;
|
|
255
|
+
const outputValidation = handlerSchema?.validation?.output;
|
|
256
|
+
const iterationValidation = handlerSchema?.validation?.iteration;
|
|
257
|
+
const hasArg = !!queryValidation || !!bodyValidation || !!paramsValidation || !!config?.apiRoot || !!config?.headers;
|
|
258
|
+
const rpcName = controllerSchema.rpcModuleName;
|
|
259
|
+
const packageName = packageJson?.name || 'vovk-client';
|
|
260
|
+
const packageNameSnake = toSnakeCase(packageName);
|
|
261
|
+
const pyPackageName = packageJson?.py_name ?? packageNameSnake;
|
|
262
|
+
const rsPackageName = packageJson?.rs_name ?? packageNameSnake;
|
|
263
|
+
const commonParams = {
|
|
264
|
+
handlerName,
|
|
265
|
+
rpcName,
|
|
266
|
+
packageName,
|
|
267
|
+
queryValidation,
|
|
268
|
+
bodyValidation,
|
|
269
|
+
paramsValidation,
|
|
270
|
+
outputValidation,
|
|
271
|
+
iterationValidation,
|
|
272
|
+
hasArg,
|
|
273
|
+
config,
|
|
274
|
+
};
|
|
275
|
+
const ts = generateTypeScriptCode(commonParams);
|
|
276
|
+
const py = generatePythonCode({ ...commonParams, packageName: pyPackageName });
|
|
277
|
+
const rs = generateRustCode({ ...commonParams, packageName: rsPackageName });
|
|
278
|
+
return { ts, py, rs };
|
|
279
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { VovkHandlerSchema, KnownAny, VovkController, VovkRequest } from '../types';
|
|
2
|
+
type Next = () => Promise<unknown>;
|
|
3
|
+
export declare function createDecorator<TArgs extends unknown[], TRequest = VovkRequest>(handler: null | ((this: VovkController, req: TRequest, next: Next, ...args: TArgs) => unknown), initHandler?: (this: VovkController, ...args: TArgs) => Omit<VovkHandlerSchema, 'path' | 'httpMethod'> | ((handlerSchema: VovkHandlerSchema | null, options: {
|
|
4
|
+
handlerName: string;
|
|
5
|
+
}) => Omit<Partial<VovkHandlerSchema>, 'path' | 'httpMethod'>) | null | undefined): (...args: TArgs) => (target: KnownAny, propertyKey: string) => void;
|
|
6
|
+
export {};
|
|
@@ -10,29 +10,39 @@ function createDecorator(handler, initHandler) {
|
|
|
10
10
|
throw new Error(`Unable to decorate: ${propertyKey} is not a function`);
|
|
11
11
|
}
|
|
12
12
|
const sourceMethod = originalMethod._sourceMethod ?? originalMethod;
|
|
13
|
-
const handlerSchema = controller._handlers?.[propertyKey] ?? null;
|
|
14
|
-
const initResultReturn = initHandler?.call(controller, ...args);
|
|
15
|
-
const initResult = typeof initResultReturn === 'function' ? initResultReturn(handlerSchema) : initResultReturn;
|
|
16
|
-
controller._handlers = {
|
|
17
|
-
...controller._handlers,
|
|
18
|
-
[propertyKey]: {
|
|
19
|
-
...handlerSchema,
|
|
20
|
-
// avoid override of path and httpMethod
|
|
21
|
-
...(initResult?.validation ? { validation: initResult.validation } : {}),
|
|
22
|
-
...(initResult?.custom ? { custom: initResult.custom } : {}),
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
13
|
const method = function method(req, params) {
|
|
26
14
|
const next = async () => {
|
|
27
15
|
return (await originalMethod.call(controller, req, params));
|
|
28
16
|
};
|
|
29
17
|
return handler ? handler.call(controller, req, next, ...args) : next();
|
|
30
18
|
};
|
|
19
|
+
controller[propertyKey] = method;
|
|
31
20
|
method._controller = controller;
|
|
21
|
+
method._sourceMethod = sourceMethod;
|
|
22
|
+
method.fn = originalMethod.fn;
|
|
23
|
+
method.models = originalMethod.models;
|
|
24
|
+
sourceMethod.wrapper = method;
|
|
32
25
|
// TODO define internal method type
|
|
33
26
|
originalMethod._controller = controller;
|
|
34
|
-
controller[propertyKey]
|
|
35
|
-
|
|
27
|
+
const handlerSchema = controller._handlers?.[propertyKey] ?? null;
|
|
28
|
+
const initResultReturn = initHandler?.call(controller, ...args);
|
|
29
|
+
const initResult = typeof initResultReturn === 'function'
|
|
30
|
+
? initResultReturn(handlerSchema, {
|
|
31
|
+
handlerName: propertyKey,
|
|
32
|
+
})
|
|
33
|
+
: initResultReturn;
|
|
34
|
+
const methodSchema = {
|
|
35
|
+
...handlerSchema,
|
|
36
|
+
// avoid override of path and httpMethod
|
|
37
|
+
...(initResult?.validation ? { validation: initResult.validation } : {}),
|
|
38
|
+
...(initResult?.operationObject ? { operationObject: initResult.operationObject } : {}),
|
|
39
|
+
...(initResult?.misc ? { misc: initResult.misc } : {}),
|
|
40
|
+
};
|
|
41
|
+
method.schema = methodSchema;
|
|
42
|
+
controller._handlers = {
|
|
43
|
+
...controller._handlers,
|
|
44
|
+
[propertyKey]: methodSchema,
|
|
45
|
+
};
|
|
36
46
|
};
|
|
37
47
|
};
|
|
38
48
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { KnownAny, VovkHandlerSchema, VovkLLMTool, VovkBasicJSONSchema } from '../types';
|
|
2
|
+
type Handler = ((...args: KnownAny[]) => KnownAny) & {
|
|
3
|
+
fn?: (input: KnownAny) => KnownAny;
|
|
4
|
+
isRPC?: boolean;
|
|
5
|
+
schema?: VovkHandlerSchema;
|
|
6
|
+
models?: {
|
|
7
|
+
body?: VovkBasicJSONSchema;
|
|
8
|
+
query?: VovkBasicJSONSchema;
|
|
9
|
+
params?: VovkBasicJSONSchema;
|
|
10
|
+
output?: VovkBasicJSONSchema;
|
|
11
|
+
iteration?: VovkBasicJSONSchema;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
type CallerInput = {
|
|
15
|
+
handler: Handler;
|
|
16
|
+
body: KnownAny;
|
|
17
|
+
query: KnownAny;
|
|
18
|
+
params: KnownAny;
|
|
19
|
+
schema: VovkHandlerSchema;
|
|
20
|
+
models: {
|
|
21
|
+
body?: KnownAny;
|
|
22
|
+
query?: KnownAny;
|
|
23
|
+
params?: KnownAny;
|
|
24
|
+
output?: KnownAny;
|
|
25
|
+
iteration?: KnownAny;
|
|
26
|
+
} | undefined;
|
|
27
|
+
init: RequestInit | undefined;
|
|
28
|
+
apiRoot: string | undefined;
|
|
29
|
+
meta: Record<string, KnownAny> | undefined;
|
|
30
|
+
handlerName: string;
|
|
31
|
+
moduleName: string;
|
|
32
|
+
resultFormatter: typeof defaultResultFormatter;
|
|
33
|
+
};
|
|
34
|
+
declare function defaultCaller({ handler, body, query, params, init, meta, resultFormatter, schema }: CallerInput, _options: KnownAny): Promise<[any, null] | [any, Error]>;
|
|
35
|
+
declare function defaultResultFormatter(result: KnownAny, _schema: VovkHandlerSchema): Promise<any>;
|
|
36
|
+
export declare function createLLMTools({ modules, caller, meta, resultFormatter, onExecute, onError, }: {
|
|
37
|
+
modules: Record<string, object | [object, {
|
|
38
|
+
init?: RequestInit;
|
|
39
|
+
apiRoot?: string;
|
|
40
|
+
}]>;
|
|
41
|
+
caller?: typeof defaultCaller;
|
|
42
|
+
meta?: Record<string, KnownAny>;
|
|
43
|
+
resultFormatter?: typeof defaultResultFormatter | null | 'mcp';
|
|
44
|
+
onExecute?: (result: KnownAny, callerInput: CallerInput, options: KnownAny) => void;
|
|
45
|
+
onError?: (error: Error, callerInput: CallerInput, options: KnownAny) => void;
|
|
46
|
+
}): {
|
|
47
|
+
tools: VovkLLMTool[];
|
|
48
|
+
toolsByName: Record<string, VovkLLMTool>;
|
|
49
|
+
};
|
|
50
|
+
export {};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLLMTools = createLLMTools;
|
|
4
|
+
const createLLMTool = ({ moduleName, handlerName, caller, module, init, apiRoot, meta, resultFormatter, onExecute, onError, }) => {
|
|
5
|
+
if (!module) {
|
|
6
|
+
throw new Error(`Module "${moduleName}" not found.`);
|
|
7
|
+
}
|
|
8
|
+
const handler = module[handlerName];
|
|
9
|
+
if (!handler) {
|
|
10
|
+
throw new Error(`Handler "${handlerName}" not found in module "${moduleName}".`);
|
|
11
|
+
}
|
|
12
|
+
const { schema, models } = handler;
|
|
13
|
+
if (!schema || !schema.operationObject) {
|
|
14
|
+
throw new Error(`Handler "${handlerName}" in module "${moduleName}" does not have a valid schema.`);
|
|
15
|
+
}
|
|
16
|
+
const execute = async (input, options) => {
|
|
17
|
+
const { body, query, params } = input;
|
|
18
|
+
const callerInput = {
|
|
19
|
+
schema,
|
|
20
|
+
models,
|
|
21
|
+
handler,
|
|
22
|
+
body,
|
|
23
|
+
query,
|
|
24
|
+
params,
|
|
25
|
+
init,
|
|
26
|
+
apiRoot,
|
|
27
|
+
meta,
|
|
28
|
+
handlerName,
|
|
29
|
+
moduleName,
|
|
30
|
+
resultFormatter,
|
|
31
|
+
};
|
|
32
|
+
const [result, error] = await caller(callerInput, options);
|
|
33
|
+
if (error) {
|
|
34
|
+
onError?.(error, callerInput, options);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
onExecute(result, callerInput, options);
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
const parametersProperties = {
|
|
42
|
+
...(schema?.validation?.body
|
|
43
|
+
? {
|
|
44
|
+
body: schema.validation.body,
|
|
45
|
+
}
|
|
46
|
+
: {}),
|
|
47
|
+
...(schema?.validation?.query
|
|
48
|
+
? {
|
|
49
|
+
query: schema.validation.query,
|
|
50
|
+
}
|
|
51
|
+
: {}),
|
|
52
|
+
...(schema?.validation?.params
|
|
53
|
+
? {
|
|
54
|
+
params: schema.validation.params,
|
|
55
|
+
}
|
|
56
|
+
: {}),
|
|
57
|
+
};
|
|
58
|
+
return {
|
|
59
|
+
type: 'function',
|
|
60
|
+
execute,
|
|
61
|
+
name: `${moduleName}_${handlerName}`,
|
|
62
|
+
description: schema.operationObject?.['x-tool-description'] ??
|
|
63
|
+
([schema.operationObject?.summary ?? '', schema.operationObject?.description ?? ''].filter(Boolean).join('\n') ||
|
|
64
|
+
handlerName),
|
|
65
|
+
parameters: {
|
|
66
|
+
type: 'object',
|
|
67
|
+
properties: parametersProperties,
|
|
68
|
+
required: Object.keys(parametersProperties),
|
|
69
|
+
additionalProperties: false,
|
|
70
|
+
},
|
|
71
|
+
models,
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
async function defaultCaller({ handler, body, query, params, init, meta, resultFormatter, schema },
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
76
|
+
_options) {
|
|
77
|
+
if (!handler.isRPC && !handler.fn) {
|
|
78
|
+
throw new Error('Handler is not a valid RPC or controller method');
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
let result;
|
|
82
|
+
if (handler.isRPC) {
|
|
83
|
+
result = await handler({
|
|
84
|
+
handler,
|
|
85
|
+
body,
|
|
86
|
+
query,
|
|
87
|
+
params,
|
|
88
|
+
init,
|
|
89
|
+
meta,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (handler.fn) {
|
|
93
|
+
result = await handler.fn({
|
|
94
|
+
body,
|
|
95
|
+
query,
|
|
96
|
+
params,
|
|
97
|
+
meta,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return [resultFormatter(result, schema), null];
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
return [resultFormatter(e, schema), e];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async function mcpResultFormatter(result, schema) {
|
|
107
|
+
const successMessage = schema?.operationObject?.['x-tool-successMessage'] ?? 'Tool executed successfully.';
|
|
108
|
+
const errorMessage = schema?.operationObject?.['x-tool-errorMessage'] ?? 'An error occurred while executing the tool.';
|
|
109
|
+
const includeResponse = schema?.operationObject?.['x-tool-includeResponse'] ?? true;
|
|
110
|
+
return {
|
|
111
|
+
content: [
|
|
112
|
+
{
|
|
113
|
+
type: 'text',
|
|
114
|
+
text: [
|
|
115
|
+
result instanceof Error ? errorMessage : successMessage,
|
|
116
|
+
includeResponse
|
|
117
|
+
? `${result instanceof Error ? 'Error' : 'Result'}:\n${JSON.stringify(result, null, 2)}`
|
|
118
|
+
: null,
|
|
119
|
+
]
|
|
120
|
+
.filter(Boolean)
|
|
121
|
+
.join('\n\n'),
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
127
|
+
async function defaultResultFormatter(result, _schema) {
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
function createLLMTools({ modules, caller = defaultCaller, meta, resultFormatter, onExecute = (result) => result, onError = () => { }, }) {
|
|
131
|
+
const moduleWithConfig = modules;
|
|
132
|
+
const tools = Object.entries(moduleWithConfig ?? {})
|
|
133
|
+
.map(([moduleName, moduleWithconfig]) => {
|
|
134
|
+
let init;
|
|
135
|
+
let apiRoot;
|
|
136
|
+
let module;
|
|
137
|
+
if (Array.isArray(moduleWithconfig)) {
|
|
138
|
+
[module, { init, apiRoot }] = moduleWithconfig;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
module = moduleWithconfig;
|
|
142
|
+
}
|
|
143
|
+
return Object.entries(module ?? {})
|
|
144
|
+
.filter(([, handler]) => handler?.schema?.operationObject && !handler?.schema?.operationObject?.['x-tool-disable'])
|
|
145
|
+
.map(([handlerName]) => createLLMTool({
|
|
146
|
+
moduleName,
|
|
147
|
+
handlerName,
|
|
148
|
+
caller,
|
|
149
|
+
module,
|
|
150
|
+
init,
|
|
151
|
+
apiRoot,
|
|
152
|
+
meta,
|
|
153
|
+
resultFormatter: resultFormatter
|
|
154
|
+
? resultFormatter === 'mcp'
|
|
155
|
+
? mcpResultFormatter
|
|
156
|
+
: resultFormatter
|
|
157
|
+
: defaultResultFormatter,
|
|
158
|
+
onExecute,
|
|
159
|
+
onError,
|
|
160
|
+
}));
|
|
161
|
+
})
|
|
162
|
+
.flat();
|
|
163
|
+
const toolsByName = Object.fromEntries(tools.map((tool) => [tool.name, tool]));
|
|
164
|
+
return {
|
|
165
|
+
tools,
|
|
166
|
+
toolsByName,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
+
import { type KnownAny, type VovkRequest, type VovkTypedMethod, type VovkValidationType, type VovkOperationObject } from '../types';
|
|
3
|
+
export declare function createStandardValidation({ toJSONSchema, }: {
|
|
4
|
+
toJSONSchema: (model: KnownAny, meta: {
|
|
5
|
+
type: VovkValidationType;
|
|
6
|
+
}) => KnownAny;
|
|
7
|
+
}): <T extends (req: REQ, params: TParams extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<TParams> : Record<string, string>) => KnownAny, TBody extends StandardSchemaV1, TQuery extends StandardSchemaV1, TParams extends StandardSchemaV1, OUTPUT extends StandardSchemaV1, ITERATION extends StandardSchemaV1, REQ extends VovkRequest<KnownAny, KnownAny, KnownAny> = VovkRequest<TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : undefined, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : undefined, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : undefined>, IS_FORM extends boolean = false>({ isForm, body, query, params, output, iteration, handle, disableServerSideValidation, skipSchemaEmission, validateEachIteration, preferTransformed, operationObject, }: {
|
|
8
|
+
isForm?: IS_FORM;
|
|
9
|
+
body?: TBody;
|
|
10
|
+
query?: TQuery;
|
|
11
|
+
params?: TParams;
|
|
12
|
+
output?: OUTPUT;
|
|
13
|
+
iteration?: ITERATION;
|
|
14
|
+
handle: T;
|
|
15
|
+
disableServerSideValidation?: boolean | VovkValidationType[];
|
|
16
|
+
skipSchemaEmission?: boolean | VovkValidationType[];
|
|
17
|
+
validateEachIteration?: boolean;
|
|
18
|
+
preferTransformed?: boolean;
|
|
19
|
+
operationObject?: VovkOperationObject;
|
|
20
|
+
}) => T & {
|
|
21
|
+
__types: {
|
|
22
|
+
body: TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any;
|
|
23
|
+
query: TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any;
|
|
24
|
+
params: TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any;
|
|
25
|
+
output: OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any;
|
|
26
|
+
iteration: ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any;
|
|
27
|
+
isForm: IS_FORM;
|
|
28
|
+
};
|
|
29
|
+
isRPC?: boolean;
|
|
30
|
+
} & {
|
|
31
|
+
schema: Omit<import("../types").VovkHandlerSchema, "httpMethod" | "path"> & Partial<import("../types").VovkHandlerSchema>;
|
|
32
|
+
wrapper?: ((req: VovkRequest<any, any, any>, params: Parameters<VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>>[1]) => ReturnType<VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>>) | undefined;
|
|
33
|
+
} & {
|
|
34
|
+
fn: {
|
|
35
|
+
<RETURN_TYPE = ReturnType<VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>>>(input?: ((undefined extends TBody | undefined ? undefined extends TQuery | undefined ? undefined extends TParams | undefined ? true : false : false : false) extends true ? {
|
|
36
|
+
disableClientValidation?: boolean;
|
|
37
|
+
} & (undefined extends TBody | undefined ? {
|
|
38
|
+
body?: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["body"] | undefined;
|
|
39
|
+
} : {
|
|
40
|
+
body: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["body"];
|
|
41
|
+
}) & (undefined extends TQuery | undefined ? {
|
|
42
|
+
query?: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["query"] | undefined;
|
|
43
|
+
} : {
|
|
44
|
+
query: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["query"];
|
|
45
|
+
}) & (undefined extends TParams | undefined ? {
|
|
46
|
+
params?: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["params"] | undefined;
|
|
47
|
+
} : {
|
|
48
|
+
params: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["params"];
|
|
49
|
+
}) & {
|
|
50
|
+
meta?: {
|
|
51
|
+
[key: string]: any;
|
|
52
|
+
__disableClientValidation?: boolean;
|
|
53
|
+
};
|
|
54
|
+
} : never) | undefined): (undefined extends TBody | undefined ? undefined extends TQuery | undefined ? undefined extends TParams | undefined ? true : false : false : false) extends true ? RETURN_TYPE : never;
|
|
55
|
+
<RETURN_TYPE = ReturnType<VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>>>(input: {
|
|
56
|
+
disableClientValidation?: boolean;
|
|
57
|
+
} & (undefined extends TBody | undefined ? {
|
|
58
|
+
body?: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["body"] | undefined;
|
|
59
|
+
} : {
|
|
60
|
+
body: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["body"];
|
|
61
|
+
}) & (undefined extends TQuery | undefined ? {
|
|
62
|
+
query?: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["query"] | undefined;
|
|
63
|
+
} : {
|
|
64
|
+
query: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["query"];
|
|
65
|
+
}) & (undefined extends TParams | undefined ? {
|
|
66
|
+
params?: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["params"] | undefined;
|
|
67
|
+
} : {
|
|
68
|
+
params: VovkTypedMethod<T, TBody extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TBody> : any, TQuery extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TQuery> : any, TParams extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<TParams> : any, OUTPUT extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<OUTPUT> : any, ITERATION extends StandardSchemaV1<unknown, unknown> ? StandardSchemaV1.InferOutput<ITERATION> : any, IS_FORM>["__types"]["params"];
|
|
69
|
+
}) & {
|
|
70
|
+
meta?: {
|
|
71
|
+
[key: string]: any;
|
|
72
|
+
__disableClientValidation?: boolean;
|
|
73
|
+
};
|
|
74
|
+
}): RETURN_TYPE;
|
|
75
|
+
};
|
|
76
|
+
models: {
|
|
77
|
+
iteration?: (ITERATION & ({} | null)) | undefined;
|
|
78
|
+
output?: (OUTPUT & ({} | null)) | undefined;
|
|
79
|
+
params?: (TParams & ({} | null)) | undefined;
|
|
80
|
+
query?: (TQuery & ({} | null)) | undefined;
|
|
81
|
+
body?: (TBody & ({} | null)) | undefined;
|
|
82
|
+
};
|
|
83
|
+
};
|