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.
Files changed (207) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +8 -96
  3. package/bin/index.mjs +8 -0
  4. package/cjs/JSONLinesResponse.d.ts +19 -0
  5. package/cjs/JSONLinesResponse.js +95 -0
  6. package/{VovkApp.d.ts → cjs/VovkApp.d.ts} +14 -8
  7. package/cjs/VovkApp.js +304 -0
  8. package/cjs/client/createRPC.d.ts +5 -0
  9. package/cjs/client/createRPC.js +116 -0
  10. package/cjs/client/defaultHandler.d.ts +6 -0
  11. package/{client → cjs/client}/defaultHandler.js +9 -2
  12. package/cjs/client/defaultStreamHandler.d.ts +9 -0
  13. package/{client → cjs/client}/defaultStreamHandler.js +49 -26
  14. package/cjs/client/fetcher.d.ts +18 -0
  15. package/cjs/client/fetcher.js +97 -0
  16. package/cjs/client/index.d.ts +4 -0
  17. package/cjs/client/index.js +10 -0
  18. package/cjs/client/progressive.d.ts +9 -0
  19. package/cjs/client/progressive.js +54 -0
  20. package/cjs/client/types.d.ts +120 -0
  21. package/{createVovkApp.d.ts → cjs/createVovkApp.d.ts} +19 -16
  22. package/cjs/createVovkApp.js +146 -0
  23. package/cjs/index.d.ts +69 -0
  24. package/cjs/index.js +42 -0
  25. package/cjs/openapi/error.d.ts +2 -0
  26. package/cjs/openapi/error.js +100 -0
  27. package/cjs/openapi/index.d.ts +8 -0
  28. package/cjs/openapi/index.js +21 -0
  29. package/cjs/openapi/openAPIToVovkSchema/applyComponentsSchemas.d.ts +3 -0
  30. package/cjs/openapi/openAPIToVovkSchema/applyComponentsSchemas.js +67 -0
  31. package/cjs/openapi/openAPIToVovkSchema/index.d.ts +4 -0
  32. package/cjs/openapi/openAPIToVovkSchema/index.js +141 -0
  33. package/cjs/openapi/openAPIToVovkSchema/inlineRefs.d.ts +10 -0
  34. package/cjs/openapi/openAPIToVovkSchema/inlineRefs.js +102 -0
  35. package/cjs/openapi/vovkSchemaToOpenAPI.d.ts +8 -0
  36. package/cjs/openapi/vovkSchemaToOpenAPI.js +238 -0
  37. package/cjs/types.d.ts +466 -0
  38. package/{types.js → cjs/types.js} +14 -2
  39. package/cjs/utils/camelCase.d.ts +6 -0
  40. package/cjs/utils/camelCase.js +37 -0
  41. package/cjs/utils/createCodeSamples.d.ts +20 -0
  42. package/cjs/utils/createCodeSamples.js +279 -0
  43. package/cjs/utils/createDecorator.d.ts +6 -0
  44. package/{createDecorator.js → cjs/utils/createDecorator.js} +24 -14
  45. package/cjs/utils/createLLMTools.d.ts +50 -0
  46. package/cjs/utils/createLLMTools.js +168 -0
  47. package/cjs/utils/createStandardValidation.d.ts +83 -0
  48. package/cjs/utils/createStandardValidation.js +35 -0
  49. package/cjs/utils/createValidateOnClient.d.ts +7 -0
  50. package/cjs/utils/createValidateOnClient.js +19 -0
  51. package/cjs/utils/deepExtend.d.ts +54 -0
  52. package/cjs/utils/deepExtend.js +134 -0
  53. package/{utils → cjs/utils}/generateStaticAPI.d.ts +2 -2
  54. package/cjs/utils/generateStaticAPI.js +30 -0
  55. package/cjs/utils/getJSONSchemaExample.d.ts +11 -0
  56. package/cjs/utils/getJSONSchemaExample.js +264 -0
  57. package/cjs/utils/getJSONSchemaSample.d.ts +2 -0
  58. package/cjs/utils/getJSONSchemaSample.js +167 -0
  59. package/cjs/utils/getSampleFromObject.d.ts +9 -0
  60. package/cjs/utils/getSampleFromObject.js +41 -0
  61. package/cjs/utils/getSchema.d.ts +21 -0
  62. package/cjs/utils/getSchema.js +38 -0
  63. package/cjs/utils/multitenant.d.ts +24 -0
  64. package/cjs/utils/multitenant.js +131 -0
  65. package/cjs/utils/parseQuery.d.ts +25 -0
  66. package/cjs/utils/parseQuery.js +156 -0
  67. package/cjs/utils/reqForm.d.ts +2 -0
  68. package/cjs/utils/reqForm.js +33 -0
  69. package/cjs/utils/reqMeta.d.ts +2 -0
  70. package/cjs/utils/reqQuery.d.ts +2 -0
  71. package/cjs/utils/reqQuery.js +10 -0
  72. package/cjs/utils/resolveGeneratorConfigValues.d.ts +18 -0
  73. package/cjs/utils/resolveGeneratorConfigValues.js +82 -0
  74. package/cjs/utils/serializeQuery.d.ts +13 -0
  75. package/cjs/utils/serializeQuery.js +65 -0
  76. package/cjs/utils/setHandlerSchema.d.ts +4 -0
  77. package/cjs/utils/setHandlerSchema.js +15 -0
  78. package/cjs/utils/upperFirst.d.ts +1 -0
  79. package/cjs/utils/upperFirst.js +6 -0
  80. package/cjs/utils/withValidationLibrary.d.ts +78 -0
  81. package/cjs/utils/withValidationLibrary.js +133 -0
  82. package/mjs/HttpException.d.ts +7 -0
  83. package/mjs/HttpException.js +15 -0
  84. package/mjs/JSONLinesResponse.d.ts +19 -0
  85. package/mjs/JSONLinesResponse.js +95 -0
  86. package/mjs/VovkApp.d.ts +34 -0
  87. package/mjs/VovkApp.js +304 -0
  88. package/mjs/client/createRPC.d.ts +5 -0
  89. package/mjs/client/createRPC.js +116 -0
  90. package/mjs/client/defaultHandler.d.ts +6 -0
  91. package/mjs/client/defaultHandler.js +29 -0
  92. package/mjs/client/defaultStreamHandler.d.ts +9 -0
  93. package/mjs/client/defaultStreamHandler.js +105 -0
  94. package/mjs/client/fetcher.d.ts +18 -0
  95. package/mjs/client/fetcher.js +97 -0
  96. package/mjs/client/index.d.ts +4 -0
  97. package/mjs/client/index.js +10 -0
  98. package/mjs/client/progressive.d.ts +9 -0
  99. package/mjs/client/progressive.js +54 -0
  100. package/mjs/client/types.d.ts +120 -0
  101. package/mjs/createVovkApp.d.ts +65 -0
  102. package/mjs/createVovkApp.js +146 -0
  103. package/mjs/index.d.ts +69 -0
  104. package/mjs/index.js +42 -0
  105. package/mjs/openapi/error.d.ts +2 -0
  106. package/mjs/openapi/error.js +100 -0
  107. package/mjs/openapi/index.d.ts +8 -0
  108. package/mjs/openapi/index.js +21 -0
  109. package/mjs/openapi/openAPIToVovkSchema/applyComponentsSchemas.d.ts +3 -0
  110. package/mjs/openapi/openAPIToVovkSchema/applyComponentsSchemas.js +67 -0
  111. package/mjs/openapi/openAPIToVovkSchema/index.d.ts +4 -0
  112. package/mjs/openapi/openAPIToVovkSchema/index.js +141 -0
  113. package/mjs/openapi/openAPIToVovkSchema/inlineRefs.d.ts +10 -0
  114. package/mjs/openapi/openAPIToVovkSchema/inlineRefs.js +102 -0
  115. package/mjs/openapi/vovkSchemaToOpenAPI.d.ts +8 -0
  116. package/mjs/openapi/vovkSchemaToOpenAPI.js +238 -0
  117. package/mjs/types.d.ts +466 -0
  118. package/mjs/types.js +77 -0
  119. package/mjs/utils/camelCase.d.ts +6 -0
  120. package/mjs/utils/camelCase.js +37 -0
  121. package/mjs/utils/createCodeSamples.d.ts +20 -0
  122. package/mjs/utils/createCodeSamples.js +279 -0
  123. package/mjs/utils/createDecorator.d.ts +6 -0
  124. package/mjs/utils/createDecorator.js +48 -0
  125. package/mjs/utils/createLLMTools.d.ts +50 -0
  126. package/mjs/utils/createLLMTools.js +168 -0
  127. package/mjs/utils/createStandardValidation.d.ts +83 -0
  128. package/mjs/utils/createStandardValidation.js +35 -0
  129. package/mjs/utils/createValidateOnClient.d.ts +7 -0
  130. package/mjs/utils/createValidateOnClient.js +19 -0
  131. package/mjs/utils/deepExtend.d.ts +54 -0
  132. package/mjs/utils/deepExtend.js +134 -0
  133. package/mjs/utils/generateStaticAPI.d.ts +4 -0
  134. package/mjs/utils/generateStaticAPI.js +30 -0
  135. package/mjs/utils/getJSONSchemaExample.d.ts +11 -0
  136. package/mjs/utils/getJSONSchemaExample.js +264 -0
  137. package/mjs/utils/getJSONSchemaSample.d.ts +2 -0
  138. package/mjs/utils/getJSONSchemaSample.js +167 -0
  139. package/mjs/utils/getSampleFromObject.d.ts +9 -0
  140. package/mjs/utils/getSampleFromObject.js +41 -0
  141. package/mjs/utils/getSchema.d.ts +21 -0
  142. package/mjs/utils/getSchema.js +38 -0
  143. package/mjs/utils/multitenant.d.ts +24 -0
  144. package/mjs/utils/multitenant.js +131 -0
  145. package/mjs/utils/parseQuery.d.ts +25 -0
  146. package/mjs/utils/parseQuery.js +156 -0
  147. package/mjs/utils/reqForm.d.ts +2 -0
  148. package/mjs/utils/reqForm.js +33 -0
  149. package/mjs/utils/reqMeta.d.ts +2 -0
  150. package/mjs/utils/reqMeta.js +13 -0
  151. package/mjs/utils/reqQuery.d.ts +2 -0
  152. package/mjs/utils/reqQuery.js +10 -0
  153. package/mjs/utils/resolveGeneratorConfigValues.d.ts +18 -0
  154. package/mjs/utils/resolveGeneratorConfigValues.js +82 -0
  155. package/mjs/utils/serializeQuery.d.ts +13 -0
  156. package/mjs/utils/serializeQuery.js +65 -0
  157. package/mjs/utils/setHandlerSchema.d.ts +4 -0
  158. package/mjs/utils/setHandlerSchema.js +15 -0
  159. package/mjs/utils/shim.d.ts +1 -0
  160. package/mjs/utils/shim.js +18 -0
  161. package/mjs/utils/upperFirst.d.ts +1 -0
  162. package/mjs/utils/upperFirst.js +6 -0
  163. package/mjs/utils/withValidationLibrary.d.ts +78 -0
  164. package/mjs/utils/withValidationLibrary.js +133 -0
  165. package/package.json +28 -6
  166. package/.npmignore +0 -2
  167. package/StreamJSONResponse.d.ts +0 -17
  168. package/StreamJSONResponse.js +0 -54
  169. package/VovkApp.js +0 -185
  170. package/client/clientizeController.d.ts +0 -4
  171. package/client/clientizeController.js +0 -93
  172. package/client/defaultFetcher.d.ts +0 -4
  173. package/client/defaultFetcher.js +0 -49
  174. package/client/defaultHandler.d.ts +0 -2
  175. package/client/defaultStreamHandler.d.ts +0 -4
  176. package/client/index.d.ts +0 -4
  177. package/client/index.js +0 -5
  178. package/client/types.d.ts +0 -100
  179. package/createDecorator.d.ts +0 -4
  180. package/createVovkApp.js +0 -118
  181. package/index.d.ts +0 -60
  182. package/index.js +0 -20
  183. package/types.d.ts +0 -157
  184. package/utils/generateStaticAPI.js +0 -18
  185. package/utils/getSchema.d.ts +0 -8
  186. package/utils/getSchema.js +0 -38
  187. package/utils/reqForm.d.ts +0 -3
  188. package/utils/reqForm.js +0 -13
  189. package/utils/reqMeta.d.ts +0 -3
  190. package/utils/reqQuery.d.ts +0 -3
  191. package/utils/reqQuery.js +0 -25
  192. package/utils/setClientValidatorsForHandler.d.ts +0 -5
  193. package/utils/setClientValidatorsForHandler.js +0 -25
  194. package/worker/index.d.ts +0 -3
  195. package/worker/index.js +0 -7
  196. package/worker/promisifyWorker.d.ts +0 -2
  197. package/worker/promisifyWorker.js +0 -141
  198. package/worker/types.d.ts +0 -31
  199. package/worker/worker.d.ts +0 -1
  200. package/worker/worker.js +0 -43
  201. /package/{HttpException.d.ts → cjs/HttpException.d.ts} +0 -0
  202. /package/{HttpException.js → cjs/HttpException.js} +0 -0
  203. /package/{client → cjs/client}/types.js +0 -0
  204. /package/{utils → cjs/utils}/reqMeta.js +0 -0
  205. /package/{utils → cjs/utils}/shim.d.ts +0 -0
  206. /package/{utils → cjs/utils}/shim.js +0 -0
  207. /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] = method;
35
- method._sourceMethod = sourceMethod;
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
+ };