fork of hey-api/openapi-ts because I need some additional things

Merge pull request #886 from hey-api/chore/tanstack-query-wip-3

chore: progress on TanStack Query plugin

authored by

Lubos and committed by
GitHub
8725bf54 73f67059

+2114 -1698
+17 -10
packages/openapi-ts/src/compiler/classes.ts
··· 11 11 toParameterDeclarations, 12 12 toTypeParameters, 13 13 } from './types'; 14 - import { addLeadingJSDocComment, Comments, isType } from './utils'; 14 + import { 15 + addLeadingComments, 16 + Comments, 17 + createIdentifier, 18 + isType, 19 + } from './utils'; 15 20 16 21 /** 17 22 * Create a class constructor declaration. ··· 41 46 ts.factory.createBlock(statements, multiLine), 42 47 ); 43 48 44 - if (comment) { 45 - addLeadingJSDocComment(node, comment); 46 - } 49 + addLeadingComments({ 50 + comments: comment, 51 + node, 52 + }); 47 53 48 54 return node; 49 55 }; ··· 93 99 const node = ts.factory.createMethodDeclaration( 94 100 modifiers, 95 101 undefined, 96 - ts.factory.createIdentifier(name), 102 + createIdentifier({ text: name }), 97 103 undefined, 98 104 types ? toTypeParameters(types) : undefined, 99 105 toParameterDeclarations(parameters), ··· 101 107 ts.factory.createBlock(statements, multiLine), 102 108 ); 103 109 104 - if (comment) { 105 - addLeadingJSDocComment(node, comment); 106 - } 110 + addLeadingComments({ 111 + comments: comment, 112 + node, 113 + }); 107 114 108 115 return node; 109 116 }; ··· 151 158 let m: ts.ClassElement[] = []; 152 159 members.forEach((member) => { 153 160 // @ts-ignore 154 - m = [...m, member, ts.factory.createIdentifier('\n')]; 161 + m = [...m, member, createIdentifier({ text: '\n' })]; 155 162 }); 156 163 157 164 return ts.factory.createClassDeclaration( 158 165 modifiers, 159 - ts.factory.createIdentifier(name), 166 + createIdentifier({ text: name }), 160 167 [], 161 168 [], 162 169 m,
+6
packages/openapi-ts/src/compiler/index.ts
··· 143 143 arrayLiteralExpression: types.createArrayLiteralExpression, 144 144 arrowFunction: types.createArrowFunction, 145 145 awaitExpression: types.createAwaitExpression, 146 + binaryExpression: transform.createBinaryExpression, 146 147 callExpression: module.createCallExpression, 147 148 classDeclaration: classes.createClassDeclaration, 148 149 constVariable: module.createConstVariable, 149 150 constructorDeclaration: classes.createConstructorDeclaration, 151 + elementAccessExpression: transform.createElementAccessExpression, 150 152 enumDeclaration: types.createEnumDeclaration, 151 153 exportAllDeclaration: module.createExportAllDeclaration, 152 154 exportNamedDeclaration: module.createNamedExportDeclarations, 153 155 expressionToStatement: convert.expressionToStatement, 156 + identifier: utils.createIdentifier, 154 157 ifStatement: transform.createIfStatement, 155 158 isTsNode: utils.isTsNode, 159 + keywordTypeNode: types.createKeywordTypeNode, 156 160 methodDeclaration: classes.createMethodDeclaration, 157 161 namedImportDeclarations: module.createNamedImportDeclarations, 158 162 namespaceDeclaration: types.createNamespaceDeclaration, 159 163 nodeToString: utils.tsNodeToString, 160 164 objectExpression: types.createObjectType, 161 165 ots: utils.ots, 166 + propertyAccessExpression: types.createPropertyAccessExpression, 167 + propertyAccessExpressions: transform.createPropertyAccessExpressions, 162 168 returnFunctionCall: _return.createReturnFunctionCall, 163 169 returnVariable: _return.createReturnVariable, 164 170 safeAccessExpression: transform.createSafeAccessExpression,
+11 -7
packages/openapi-ts/src/compiler/module.ts
··· 1 1 import ts from 'typescript'; 2 2 3 3 import { 4 - addLeadingJSDocComment, 4 + addLeadingComments, 5 5 type Comments, 6 + createIdentifier, 6 7 type ImportExportItemObject, 7 8 ots, 8 9 } from './utils'; ··· 39 40 }) => { 40 41 const expression = 41 42 typeof functionName === 'string' 42 - ? ts.factory.createIdentifier(functionName) 43 + ? createIdentifier({ text: functionName }) 43 44 : functionName; 44 45 const argumentsArray = parameters.map((parameter) => 45 46 typeof parameter === 'string' 46 - ? ts.factory.createIdentifier(parameter) 47 + ? createIdentifier({ text: parameter }) 47 48 : parameter, 48 49 ); 49 50 const callExpression = ts.factory.createCallExpression( ··· 123 124 ts.factory.createTypeReferenceNode('const'), 124 125 ) 125 126 : expression; 126 - const nameIdentifier = ts.factory.createIdentifier(name); 127 + const nameIdentifier = createIdentifier({ text: name }); 127 128 const declaration = ts.factory.createVariableDeclaration( 128 129 destructure 129 130 ? ts.factory.createObjectBindingPattern([ ··· 145 146 : undefined, 146 147 ts.factory.createVariableDeclarationList([declaration], ts.NodeFlags.Const), 147 148 ); 148 - if (comment) { 149 - addLeadingJSDocComment(statement, comment); 150 - } 149 + 150 + addLeadingComments({ 151 + comments: comment, 152 + node: statement, 153 + }); 154 + 151 155 return statement; 152 156 }; 153 157
+3 -3
packages/openapi-ts/src/compiler/return.ts
··· 1 1 import ts from 'typescript'; 2 2 3 3 import { createCallExpression } from './module'; 4 - import { isType } from './utils'; 4 + import { createIdentifier, isType } from './utils'; 5 5 6 6 const createReturnStatement = ({ 7 7 expression, ··· 31 31 ); 32 32 const argumentsArray = args 33 33 .map((arg) => 34 - ts.isExpression(arg) ? arg : ts.factory.createIdentifier(arg), 34 + ts.isExpression(arg) ? arg : createIdentifier({ text: arg }), 35 35 ) 36 36 .filter(isType<ts.Identifier | ts.Expression>); 37 37 const expression = createCallExpression({ ··· 45 45 46 46 export const createReturnVariable = ({ name }: { name: string }) => 47 47 createReturnStatement({ 48 - expression: ts.factory.createIdentifier(name), 48 + expression: createIdentifier({ text: name }), 49 49 });
+81 -33
packages/openapi-ts/src/compiler/transform.ts
··· 2 2 3 3 import { expressionToStatement } from './convert'; 4 4 import { createCallExpression } from './module'; 5 - import { createArrowFunction } from './types'; 5 + import { createArrowFunction, createPropertyAccessExpression } from './types'; 6 + import { createIdentifier, ots } from './utils'; 6 7 7 8 export const createSafeAccessExpression = (path: string[]) => 8 9 path ··· 12 13 ts.factory.createPropertyAccessChain( 13 14 expression, 14 15 ts.factory.createToken(ts.SyntaxKind.QuestionDotToken), 15 - ts.factory.createIdentifier(element), 16 + createIdentifier({ text: element }), 16 17 ), 17 - ts.factory.createIdentifier(path[0]), 18 + createIdentifier({ text: path[0] }), 18 19 ); 19 20 20 21 export const createAccessExpression = (path: string[]) => 21 - path 22 - .slice(1) 23 - .reduce<ts.Expression>( 24 - (expression, element) => 25 - ts.factory.createPropertyAccessExpression( 26 - expression, 27 - ts.factory.createIdentifier(element), 28 - ), 29 - ts.factory.createIdentifier(path[0]), 30 - ); 22 + path.slice(1).reduce<ts.Expression>( 23 + (expression, element) => 24 + createPropertyAccessExpression({ 25 + expression, 26 + name: element, 27 + }), 28 + createIdentifier({ text: path[0] }), 29 + ); 30 + 31 + /** 32 + * Handles an array of access expressions instead of nesting them (default TypeScript syntax) 33 + */ 34 + export const createPropertyAccessExpressions = ({ 35 + expressions, 36 + }: { 37 + expressions: Array<string | ts.Expression | ts.MemberName>; 38 + }): ts.PropertyAccessExpression => { 39 + const expression = expressions.reduce((expression, name) => { 40 + const node = createPropertyAccessExpression({ 41 + expression, 42 + // @ts-ignore 43 + name, 44 + }); 45 + return node; 46 + }); 47 + return expression as ts.PropertyAccessExpression; 48 + }; 49 + 50 + export const createElementAccessExpression = ({ 51 + index, 52 + name, 53 + }: { 54 + index: number; 55 + name: string; 56 + }) => { 57 + const expression = ts.factory.createElementAccessExpression( 58 + createIdentifier({ text: name }), 59 + ots.number(index), 60 + ); 61 + return expression; 62 + }; 63 + 64 + export const createBinaryExpression = ({ 65 + left, 66 + right, 67 + }: { 68 + left: ts.Expression; 69 + right: ts.Expression | string; 70 + }) => { 71 + const expression = ts.factory.createBinaryExpression( 72 + left, 73 + // TODO: add support for other tokens 74 + ts.SyntaxKind.EqualsToken, 75 + typeof right === 'string' ? createIdentifier({ text: right }) : right, 76 + ); 77 + return expression; 78 + }; 31 79 32 80 export const createIfStatement = ({ 33 81 expression, ··· 53 101 accessExpression, 54 102 ts.SyntaxKind.EqualsToken, 55 103 ts.factory.createNewExpression( 56 - ts.factory.createIdentifier('Date'), 104 + createIdentifier({ text: 'Date' }), 57 105 undefined, 58 106 [accessExpression], 59 107 ), ··· 113 161 114 162 const statement = createIfStatement({ 115 163 expression: createCallExpression({ 116 - functionName: ts.factory.createPropertyAccessExpression( 117 - ts.factory.createIdentifier('Array'), 118 - ts.factory.createIdentifier('isArray'), 119 - ), 164 + functionName: createPropertyAccessExpression({ 165 + expression: 'Array', 166 + name: 'isArray', 167 + }), 120 168 parameters: [safeAccessExpression], 121 169 }), 122 170 thenStatement: ts.factory.createBlock( 123 171 [ 124 172 expressionToStatement({ 125 173 expression: ts.factory.createCallChain( 126 - ts.factory.createPropertyAccessExpression( 127 - accessExpression, 128 - ts.factory.createIdentifier('forEach'), 129 - ), 174 + createPropertyAccessExpression({ 175 + expression: accessExpression, 176 + name: 'forEach', 177 + }), 130 178 undefined, 131 179 undefined, 132 - [ts.factory.createIdentifier(transformerName)], 180 + [createIdentifier({ text: transformerName })], 133 181 ), 134 182 }), 135 183 ], ··· 146 194 parameterName: string; 147 195 }) => 148 196 ts.factory.createNewExpression( 149 - ts.factory.createIdentifier('Date'), 197 + createIdentifier({ text: 'Date' }), 150 198 undefined, 151 - [ts.factory.createIdentifier(parameterName)], 199 + [createIdentifier({ text: parameterName })], 152 200 ); 153 201 154 202 export const createArrayMapTransform = ({ ··· 163 211 164 212 const statement = createIfStatement({ 165 213 expression: createCallExpression({ 166 - functionName: ts.factory.createPropertyAccessExpression( 167 - ts.factory.createIdentifier('Array'), 168 - ts.factory.createIdentifier('isArray'), 169 - ), 214 + functionName: createPropertyAccessExpression({ 215 + expression: 'Array', 216 + name: 'isArray', 217 + }), 170 218 parameters: [safeAccessExpression], 171 219 }), 172 220 thenStatement: ts.factory.createBlock( ··· 176 224 accessExpression, 177 225 ts.factory.createToken(ts.SyntaxKind.EqualsToken), 178 226 ts.factory.createCallChain( 179 - ts.factory.createPropertyAccessExpression( 180 - accessExpression, 181 - ts.factory.createIdentifier('map'), 182 - ), 227 + createPropertyAccessExpression({ 228 + expression: accessExpression, 229 + name: 'map', 230 + }), 183 231 undefined, 184 232 undefined, 185 233 [
+50 -28
packages/openapi-ts/src/compiler/typedef.ts
··· 1 1 import ts from 'typescript'; 2 2 3 3 import { 4 - addLeadingJSDocComment, 4 + addLeadingComments, 5 5 type Comments, 6 + createIdentifier, 6 7 ots, 7 8 tsNodeToString, 8 9 } from './utils'; ··· 36 37 */ 37 38 export const createTypeAliasDeclaration = ({ 38 39 comment, 40 + exportType, 39 41 name, 40 42 type, 41 43 }: { 42 44 comment?: Comments; 45 + exportType?: boolean; 43 46 name: string; 44 47 type: string | ts.TypeNode; 45 48 }): ts.TypeAliasDeclaration => { 46 49 const node = ts.factory.createTypeAliasDeclaration( 47 - [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)], 48 - ts.factory.createIdentifier(name), 50 + exportType 51 + ? [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)] 52 + : undefined, 53 + createIdentifier({ text: name }), 49 54 [], 50 55 createTypeNode(type), 51 56 ); 52 - if (comment) { 53 - addLeadingJSDocComment(node, comment); 54 - } 57 + 58 + addLeadingComments({ 59 + comments: comment, 60 + node, 61 + }); 62 + 55 63 return node; 56 64 }; 57 65 ··· 72 80 isNullable, 73 81 node, 74 82 }: { 75 - isNullable: boolean; 83 + isNullable?: boolean; 76 84 node: ts.TypeNode; 77 85 }) => { 78 86 if (!isNullable) { ··· 87 95 * @param isNullable - if the whole interface can be nullable 88 96 * @returns ts.TypeLiteralNode | ts.TypeUnionNode 89 97 */ 90 - export const createTypeInterfaceNode = ( 91 - properties: Property[], 92 - isNullable: boolean = false, 93 - ) => { 98 + export const createTypeInterfaceNode = ({ 99 + isNullable, 100 + properties, 101 + }: { 102 + isNullable?: boolean; 103 + properties: Property[]; 104 + }) => { 94 105 const node = ts.factory.createTypeLiteralNode( 95 106 properties.map((property) => { 107 + const modifiers: readonly ts.Modifier[] | undefined = property.isReadOnly 108 + ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)] 109 + : undefined; 110 + 111 + const questionToken: ts.QuestionToken | undefined = 112 + property.isRequired !== false 113 + ? undefined 114 + : ts.factory.createToken(ts.SyntaxKind.QuestionToken); 115 + 116 + const type: ts.TypeNode | undefined = createTypeNode(property.type); 117 + 96 118 const signature = ts.factory.createPropertySignature( 97 - property.isReadOnly 98 - ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)] 99 - : undefined, 119 + modifiers, 100 120 property.name, 101 - property.isRequired 102 - ? undefined 103 - : ts.factory.createToken(ts.SyntaxKind.QuestionToken), 104 - createTypeNode(property.type), 121 + questionToken, 122 + type, 105 123 ); 106 - if (property.comment) { 107 - addLeadingJSDocComment(signature, property.comment); 108 - } 124 + 125 + addLeadingComments({ 126 + comments: property.comment, 127 + node: signature, 128 + }); 129 + 109 130 return signature; 110 131 }), 111 132 ); ··· 179 200 // NOTE: We use the syntax `{ [key: string]: string }` because using a Record causes 180 201 // invalid types with circular dependencies. This is functionally the same. 181 202 // Ref: https://github.com/hey-api/openapi-ts/issues/370 182 - const node = createTypeInterfaceNode([ 183 - { 184 - isRequired: true, 185 - name: `[key: ${tsNodeToString({ node: keyNode, unescape: true })}]`, 186 - type: valueNode, 187 - }, 188 - ]); 203 + const node = createTypeInterfaceNode({ 204 + properties: [ 205 + { 206 + name: `[key: ${tsNodeToString({ node: keyNode, unescape: true })}]`, 207 + type: valueNode, 208 + }, 209 + ], 210 + }); 189 211 return maybeNullable({ isNullable, node }); 190 212 }; 191 213
+131 -61
packages/openapi-ts/src/compiler/types.ts
··· 2 2 3 3 import { createTypeNode } from './typedef'; 4 4 import { 5 - addLeadingJSDocComment, 5 + addLeadingComments, 6 6 type Comments, 7 + createIdentifier, 7 8 isTsNode, 8 9 isType, 9 10 ots, ··· 11 12 12 13 export type AccessLevel = 'public' | 'protected' | 'private'; 13 14 14 - export interface FunctionParameter { 15 - accessLevel?: AccessLevel; 16 - default?: any; 17 - destructure?: boolean; 18 - isReadOnly?: boolean; 19 - isRequired?: boolean; 20 - name: string; 21 - type?: any | ts.TypeNode; 22 - } 15 + export type FunctionParameter = 16 + | { 17 + accessLevel?: AccessLevel; 18 + default?: any; 19 + isReadOnly?: boolean; 20 + isRequired?: boolean; 21 + name: string; 22 + type?: any | ts.TypeNode; 23 + } 24 + | { 25 + destructure: FunctionParameter[]; 26 + }; 23 27 24 28 export interface FunctionTypeParameter { 25 29 default?: any; ··· 27 31 name: string; 28 32 } 29 33 34 + export const createPropertyAccessExpression = ({ 35 + expression, 36 + name, 37 + }: { 38 + expression: string | ts.Expression; 39 + name: string | ts.MemberName; 40 + }) => { 41 + const node = ts.factory.createPropertyAccessExpression( 42 + typeof expression === 'string' 43 + ? createIdentifier({ text: expression }) 44 + : expression, 45 + typeof name === 'string' ? createIdentifier({ text: name }) : name, 46 + ); 47 + return node; 48 + }; 49 + 30 50 /** 31 51 * Convert an unknown value to an expression. 32 52 * @param identifiers - list of keys that are treated as identifiers. ··· 57 77 } 58 78 59 79 if (typeof value === 'object') { 60 - return createObjectType({ identifiers, obj: value, shorthand }); 80 + return createObjectType({ 81 + identifiers, 82 + obj: value, 83 + shorthand, 84 + }); 61 85 } 62 86 63 87 if (typeof value === 'number') { ··· 72 96 if (isValueAccess) { 73 97 // TODO; handle more than single nested level, i.e. foo.bar.baz 74 98 const parts = value.split('.'); 75 - return ts.factory.createPropertyAccessExpression( 76 - ts.factory.createIdentifier(parts[0]), 77 - ts.factory.createIdentifier(parts[1]), 78 - ); 99 + return createPropertyAccessExpression({ 100 + expression: parts[0], 101 + name: parts[1], 102 + }); 79 103 } 80 104 return ots.string(value, unescape); 81 105 } ··· 111 135 */ 112 136 export const toParameterDeclarations = (parameters: FunctionParameter[]) => 113 137 parameters.map((parameter) => { 138 + if ('destructure' in parameter) { 139 + return ts.factory.createParameterDeclaration( 140 + undefined, 141 + undefined, 142 + ts.factory.createObjectBindingPattern( 143 + parameter.destructure 144 + .map((param) => { 145 + // TODO: add support for nested destructuring, not needed at the moment 146 + if ('destructure' in param) { 147 + return; 148 + } 149 + 150 + const result = ts.factory.createBindingElement( 151 + undefined, 152 + undefined, 153 + createIdentifier({ text: param.name }), 154 + undefined, 155 + ); 156 + return result; 157 + }) 158 + .filter(Boolean) as ts.BindingElement[], 159 + ), 160 + undefined, 161 + undefined, 162 + undefined, 163 + ); 164 + } 165 + 114 166 let modifiers = toAccessLevelModifiers(parameter.accessLevel); 115 167 116 168 if (parameter.isReadOnly) { ··· 119 171 ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword), 120 172 ]; 121 173 } 122 - 123 - const nameIdentifier = ts.factory.createIdentifier(parameter.name); 124 174 125 175 return ts.factory.createParameterDeclaration( 126 176 modifiers, 127 177 undefined, 128 - parameter.destructure 129 - ? ts.factory.createObjectBindingPattern([ 130 - ts.factory.createBindingElement( 131 - undefined, 132 - undefined, 133 - nameIdentifier, 134 - undefined, 135 - ), 136 - ]) 137 - : nameIdentifier, 178 + createIdentifier({ text: parameter.name }), 138 179 parameter.isRequired !== undefined && !parameter.isRequired 139 180 ? ts.factory.createToken(ts.SyntaxKind.QuestionToken) 140 181 : undefined, ··· 145 186 ); 146 187 }); 147 188 189 + export const createKeywordTypeNode = ({ 190 + keyword, 191 + }: { 192 + keyword: 'any' | 'boolean' | 'string'; 193 + }) => { 194 + let kind: ts.KeywordTypeSyntaxKind = ts.SyntaxKind.AnyKeyword; 195 + switch (keyword) { 196 + case 'boolean': 197 + kind = ts.SyntaxKind.BooleanKeyword; 198 + break; 199 + case 'string': 200 + kind = ts.SyntaxKind.StringKeyword; 201 + break; 202 + } 203 + return ts.factory.createKeywordTypeNode(kind); 204 + }; 205 + 148 206 export const toTypeParameters = (types: FunctionTypeParameter[]) => 149 207 types.map((type) => 150 208 ts.factory.createTypeParameterDeclaration( 151 209 undefined, 152 210 type.name, 153 211 // TODO: support other extends values 154 - type.extends 155 - ? ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword) 156 - : undefined, 212 + type.extends ? createKeywordTypeNode({ keyword: 'boolean' }) : undefined, 157 213 // TODO: support other default types 158 214 type.default !== undefined 159 215 ? ts.factory.createLiteralTypeNode( ··· 193 249 ? ts.factory.createBlock(statements, multiLine) 194 250 : statements, 195 251 ); 196 - if (comment) { 197 - addLeadingJSDocComment(expression, comment); 198 - } 252 + 253 + addLeadingComments({ 254 + comments: comment, 255 + node: expression, 256 + }); 257 + 199 258 return expression; 200 259 }; 201 260 ··· 230 289 }) => ts.factory.createAwaitExpression(expression); 231 290 232 291 export type ObjectValue = 233 - | { spread: string } 234 292 | { 293 + comments?: Comments; 294 + spread: string; 295 + } 296 + | { 297 + comments?: Comments; 235 298 isValueAccess?: boolean; 236 299 key: string; 237 300 value: any; ··· 257 320 >({ 258 321 comments, 259 322 identifiers = [], 260 - leadingComment, 261 323 multiLine = true, 262 324 obj, 263 325 shorthand = false, 264 326 unescape = false, 265 327 }: { 266 - comments?: Record<string | number, Comments>; 328 + comments?: Comments; 267 329 identifiers?: string[]; 268 - leadingComment?: Comments; 269 330 multiLine?: boolean; 270 331 obj: T; 271 332 shorthand?: boolean; ··· 298 359 let assignment: ObjectAssignment; 299 360 if ('spread' in value) { 300 361 assignment = ts.factory.createSpreadAssignment( 301 - ts.factory.createIdentifier(value.spread), 362 + createIdentifier({ text: value.spread }), 302 363 ); 303 364 } else if (shorthand && canShorthand) { 304 365 assignment = ts.factory.createShorthandPropertyAssignment( ··· 324 385 identifiers.includes(value.key) && 325 386 !ts.isObjectLiteralExpression(initializer) 326 387 ) { 327 - initializer = ts.factory.createIdentifier(value.value as string); 388 + initializer = createIdentifier({ text: value.value as string }); 328 389 } 329 390 assignment = ts.factory.createPropertyAssignment( 330 391 value.key, 331 392 initializer, 332 393 ); 333 394 } 334 - if ('key' in value) { 335 - const comment = comments?.[value.key]; 336 - if (comment) { 337 - addLeadingJSDocComment(assignment, comment); 338 - } 339 - } 395 + 396 + addLeadingComments({ 397 + comments: value.comments, 398 + node: assignment, 399 + }); 400 + 340 401 return assignment; 341 402 }) 342 403 .filter(isType<ObjectAssignment>) ··· 357 418 identifiers.includes(key) && 358 419 !ts.isObjectLiteralExpression(initializer) 359 420 ) { 360 - initializer = ts.factory.createIdentifier(value as string); 421 + initializer = createIdentifier({ text: value as string }); 361 422 } 362 423 // Check key value equality before possibly modifying it 363 424 const canShorthand = key === value; ··· 376 437 shorthand && canShorthand 377 438 ? ts.factory.createShorthandPropertyAssignment(value) 378 439 : ts.factory.createPropertyAssignment(key, initializer); 379 - const comment = comments?.[key]; 380 - if (comment) { 381 - addLeadingJSDocComment(assignment, comment); 382 - } 440 + 441 + // addLeadingComments({ 442 + // comments: comments?.[key], 443 + // node: assignment, 444 + // }); 445 + 383 446 return assignment; 384 447 }) 385 448 .filter(isType<ObjectAssignment>); ··· 389 452 multiLine, 390 453 ); 391 454 392 - if (leadingComment) { 393 - addLeadingJSDocComment(expression, leadingComment); 394 - } 455 + addLeadingComments({ 456 + comments, 457 + node: expression, 458 + }); 395 459 396 460 return expression; 397 461 }; ··· 417 481 }): ts.EnumDeclaration => { 418 482 const declaration = ts.factory.createEnumDeclaration( 419 483 [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)], 420 - ts.factory.createIdentifier(name), 484 + createIdentifier({ text: name }), 421 485 Object.entries(obj).map(([key, value]) => { 422 486 const initializer = toExpression({ unescape: true, value }); 423 487 const assignment = ts.factory.createEnumMember(key, initializer); 424 488 const comment = comments?.[key]; 425 - if (comment) { 426 - addLeadingJSDocComment(assignment, comment); 427 - } 489 + 490 + addLeadingComments({ 491 + comments: comment, 492 + node: assignment, 493 + }); 494 + 428 495 return assignment; 429 496 }), 430 497 ); 431 - if (leadingComment) { 432 - addLeadingJSDocComment(declaration, leadingComment); 433 - } 498 + 499 + addLeadingComments({ 500 + comments: leadingComment, 501 + node: declaration, 502 + }); 503 + 434 504 return declaration; 435 505 }; 436 506 ··· 451 521 }) => 452 522 ts.factory.createModuleDeclaration( 453 523 [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)], 454 - ts.factory.createIdentifier(name), 524 + createIdentifier({ text: name }), 455 525 ts.factory.createModuleBlock(statements), 456 526 ts.NodeFlags.Namespace, 457 527 );
+79 -12
packages/openapi-ts/src/compiler/utils.ts
··· 81 81 return file.statements[0]; 82 82 } 83 83 84 + export const createIdentifier = ({ text }: { text: string }) => { 85 + const identifier = ts.factory.createIdentifier(text); 86 + return identifier; 87 + }; 88 + 84 89 /** 85 90 * ots for @hey-api/openapi-ts are helpers to reduce repetition of basic TypeScript 86 91 * factory functions. ··· 92 97 boolean: (value: boolean) => 93 98 value ? ts.factory.createTrue() : ts.factory.createFalse(), 94 99 export: ({ alias, asType = false, name }: ImportExportItemObject) => { 95 - const nameNode = ts.factory.createIdentifier(name); 100 + const nameNode = createIdentifier({ text: name }); 96 101 if (alias) { 97 - const aliasNode = ts.factory.createIdentifier(alias); 102 + const aliasNode = createIdentifier({ text: alias }); 98 103 return ts.factory.createExportSpecifier(asType, nameNode, aliasNode); 99 104 } 100 105 return ts.factory.createExportSpecifier(asType, undefined, nameNode); 101 106 }, 102 107 import: ({ alias, asType = false, name }: ImportExportItemObject) => { 103 - const nameNode = ts.factory.createIdentifier(name); 108 + const nameNode = createIdentifier({ text: name }); 104 109 if (alias) { 105 - const aliasNode = ts.factory.createIdentifier(alias); 110 + const aliasNode = createIdentifier({ text: alias }); 106 111 return ts.factory.createImportSpecifier(asType, nameNode, aliasNode); 107 112 } 108 113 return ts.factory.createImportSpecifier(asType, undefined, nameNode); ··· 138 143 text = `\`${text.replace(/(?<!\\)`/g, '\\`').replace(/\${/g, '\\${')}\``; 139 144 } 140 145 if (text.startsWith('`')) { 141 - return ts.factory.createIdentifier(text); 146 + return createIdentifier({ text }); 142 147 } 143 148 return ts.factory.createStringLiteral( 144 149 text, ··· 158 163 export const isType = <T>(value: T | undefined): value is T => 159 164 value !== undefined; 160 165 161 - export type Comments = Array<string | null | false | undefined>; 166 + type CommentLines = Array<string | null | false | undefined>; 167 + type CommentObject = { 168 + jsdoc?: boolean; 169 + lines: CommentLines; 170 + }; 171 + export type Comments = CommentLines | Array<CommentObject>; 162 172 163 - export const addLeadingJSDocComment = (node: ts.Node, text: Comments) => { 164 - const comments = text.filter(Boolean); 165 - if (!comments.length) { 173 + const processCommentObject = ({ 174 + commentObject, 175 + node, 176 + }: { 177 + commentObject: CommentObject; 178 + node: ts.Node; 179 + }) => { 180 + const lines = commentObject.lines.filter( 181 + (line) => Boolean(line) || line === '', 182 + ) as string[]; 183 + if (!lines.length) { 184 + return; 185 + } 186 + 187 + if (!commentObject.jsdoc) { 188 + for (const line of lines) { 189 + ts.addSyntheticLeadingComment( 190 + node, 191 + ts.SyntaxKind.SingleLineCommentTrivia, 192 + ` ${line}`, 193 + true, 194 + ); 195 + } 166 196 return; 167 197 } 168 198 169 - const jsdocTexts = comments.map((c, l) => 170 - ts.factory.createJSDocText(`${c}${l !== comments.length ? '\n' : ''}`), 171 - ); 199 + const jsdocTexts = lines.map((line, index) => { 200 + let text = line; 201 + if (index !== lines.length) { 202 + text = `${text}\n`; 203 + } 204 + const jsdocText = ts.factory.createJSDocText(text); 205 + return jsdocText; 206 + }); 207 + 172 208 const jsdoc = ts.factory.createJSDocComment( 173 209 ts.factory.createNodeArray(jsdocTexts), 210 + undefined, 174 211 ); 212 + 175 213 const cleanedJsdoc = tsNodeToString({ node: jsdoc, unescape: true }) 176 214 .replace('/*', '') 177 215 .replace('* */', ''); ··· 183 221 true, 184 222 ); 185 223 }; 224 + 225 + export const addLeadingComments = ({ 226 + comments = [], 227 + node, 228 + }: { 229 + comments?: Comments; 230 + node: ts.Node; 231 + }) => { 232 + const isObjectStyle = Boolean( 233 + comments.find((comment) => typeof comment === 'object' && comment), 234 + ); 235 + 236 + let commentObjects = comments as Array<CommentObject>; 237 + if (!isObjectStyle) { 238 + commentObjects = [ 239 + { 240 + jsdoc: true, 241 + lines: comments as CommentLines, 242 + }, 243 + ]; 244 + } 245 + 246 + for (const commentObject of commentObjects) { 247 + processCommentObject({ 248 + commentObject, 249 + node, 250 + }); 251 + } 252 + };
+530 -146
packages/openapi-ts/src/generate/plugins.ts
··· 4 4 import type { ImportExportItem } from '../compiler/module'; 5 5 import type { ImportExportItemObject } from '../compiler/utils'; 6 6 import type { Operation } from '../openApi'; 7 - import { Method } from '../openApi/common/interfaces/client'; 7 + import type { 8 + Method, 9 + Model, 10 + OperationParameter, 11 + } from '../openApi/common/interfaces/client'; 8 12 import { isOperationParameterRequired } from '../openApi/common/parser/operation'; 9 13 import type { Client } from '../types/client'; 10 14 import type { Files } from '../types/utils'; ··· 19 23 operationResponseTypeName, 20 24 toOperationName, 21 25 } from './services'; 26 + 27 + const toInfiniteQueryOptionsName = (operation: Operation) => 28 + `${toOperationName(operation, false)}InfiniteOptions`; 22 29 23 30 const toMutationOptionsName = (operation: Operation) => 24 31 `${toOperationName(operation, false)}Mutation`; ··· 54 61 }); 55 62 56 63 if (plugin.name === '@tanstack/react-query') { 64 + const paginationWordsRegExp = /^(cursor|offset|page|start)/; 65 + 57 66 files[plugin.name].addImport({ 58 67 imports: [ 59 68 { ··· 65 74 }); 66 75 67 76 let imports: string[] = []; 77 + let importsServices: ImportExportItem[] = []; 68 78 69 - const queryOptionsId = 'queryOptions'; 70 - 71 - let importsServices: ImportExportItem[] = []; 79 + const infiniteQueryOptionsFn = 'infiniteQueryOptions'; 80 + const mutationsType = 'UseMutationOptions'; 81 + const queryOptionsFn = 'queryOptions'; 72 82 73 83 // TODO: `addTanStackQueryImport()` should be a method of file class to create 74 84 // unique imports. It could be made more performant too 75 85 let importsTanStackQuery: ImportExportItemObject[] = []; 76 - const addTanStackQueryImport = (imported: ImportExportItem) => { 86 + const addTanStackQueryImport = ( 87 + imported: ImportExportItem, 88 + ): ImportExportItemObject => { 77 89 const importedItem: ImportExportItemObject = 78 90 typeof imported === 'string' 79 91 ? { 80 92 name: imported, 81 93 } 82 94 : imported; 83 - if ( 84 - importsTanStackQuery.every((item) => item.name !== importedItem.name) 85 - ) { 86 - importsTanStackQuery = [...importsTanStackQuery, importedItem]; 95 + const match = importsTanStackQuery.find( 96 + (item) => item.name === importedItem.name, 97 + ); 98 + if (match) { 99 + return match; 100 + } 101 + 102 + importsTanStackQuery = [...importsTanStackQuery, importedItem]; 103 + return importedItem; 104 + }; 105 + 106 + const getPaginationIn = (parameter: OperationParameter) => { 107 + switch (parameter.in) { 108 + case 'formData': 109 + return 'body'; 110 + case 'header': 111 + return 'headers'; 112 + default: 113 + return parameter.in; 87 114 } 88 115 }; 89 116 117 + const createQueryKeyLiteral = ({ 118 + isInfinite, 119 + isRequired, 120 + operation, 121 + }: { 122 + isInfinite?: boolean; 123 + isRequired: boolean; 124 + operation: Operation; 125 + }) => { 126 + const queryKeyLiteral = compiler.arrayLiteralExpression({ 127 + elements: [ 128 + compiler.objectExpression({ 129 + obj: [ 130 + isInfinite && { 131 + key: 'infinite', 132 + value: true, 133 + }, 134 + { 135 + key: 'params', 136 + value: compiler.objectExpression({ 137 + obj: [ 138 + { 139 + isValueAccess: true, 140 + key: 'body', 141 + value: isRequired 142 + ? 'options.body ?? {}' 143 + : 'options?.body ?? {}', 144 + }, 145 + { 146 + isValueAccess: true, 147 + key: 'headers', 148 + value: isRequired 149 + ? 'options.headers ?? {}' 150 + : 'options?.headers ?? {}', 151 + }, 152 + { 153 + isValueAccess: true, 154 + key: 'path', 155 + value: isRequired 156 + ? 'options.path ?? {}' 157 + : 'options?.path ?? {}', 158 + }, 159 + { 160 + isValueAccess: true, 161 + key: 'query', 162 + value: isRequired 163 + ? 'options.query ?? {}' 164 + : 'options?.query ?? {}', 165 + }, 166 + ], 167 + }), 168 + }, 169 + { 170 + key: 'scope', 171 + value: operation.name, 172 + }, 173 + ].filter(Boolean), 174 + }), 175 + ], 176 + }); 177 + return queryKeyLiteral; 178 + }; 179 + 180 + let typeInfiniteData!: ImportExportItem; 181 + let hasInfiniteQueries = false; 182 + let hasMutations = false; 183 + let hasQueries = false; 184 + 90 185 for (const service of client.services) { 91 186 for (const operation of service.operations) { 92 - const { name: nameTypeData } = generateImport({ 93 - client, 94 - meta: operation.parameters.length 95 - ? { 96 - // TODO: this should be exact ref to operation for consistency, 97 - // but name should work too as operation ID is unique 98 - $ref: operation.name, 99 - name: operation.name, 100 - } 101 - : undefined, 102 - nameTransformer: operationDataTypeName, 103 - onImport: (imported) => { 104 - imports = [...imports, imported]; 105 - }, 106 - }); 107 - 108 187 const queryFn = toOperationName(operation, true); 188 + let hasUsedQueryFn = false; 109 189 110 - const isRequired = isOperationParameterRequired(operation.parameters); 111 - const typeOptions = operationOptionsType(nameTypeData); 190 + // queries 191 + if ( 192 + plugin.queryOptions && 193 + (['GET', 'POST'] as ReadonlyArray<Method>).includes( 194 + operation.method, 195 + ) 196 + ) { 197 + if (!hasQueries) { 198 + hasQueries = true; 112 199 113 - const expression = compiler.arrowFunction({ 114 - parameters: [ 115 - { 116 - isRequired, 117 - name: 'options', 118 - type: typeOptions, 200 + addTanStackQueryImport(queryOptionsFn); 201 + } 202 + 203 + hasUsedQueryFn = true; 204 + 205 + const { name: nameTypeData } = generateImport({ 206 + client, 207 + meta: operation.parameters.length 208 + ? { 209 + // TODO: this should be exact ref to operation for consistency, 210 + // but name should work too as operation ID is unique 211 + $ref: operation.name, 212 + name: operation.name, 213 + } 214 + : undefined, 215 + nameTransformer: operationDataTypeName, 216 + onImport: (imported) => { 217 + imports = [...imports, imported]; 119 218 }, 120 - ], 121 - statements: [ 122 - compiler.returnFunctionCall({ 123 - args: [ 124 - compiler.objectExpression({ 125 - obj: [ 126 - { 127 - key: 'queryFn', 128 - value: compiler.arrowFunction({ 129 - async: true, 130 - multiLine: true, 131 - parameters: [ 132 - { 133 - destructure: true, 134 - name: 'queryKey', 135 - }, 136 - ], 137 - statements: [ 138 - compiler.constVariable({ 139 - destructure: true, 140 - expression: compiler.awaitExpression({ 141 - expression: compiler.callExpression({ 142 - functionName: queryFn, 143 - parameters: [ 144 - compiler.objectExpression({ 145 - multiLine: true, 146 - obj: [ 147 - { 148 - spread: 'options', 149 - }, 150 - { 151 - spread: 'queryKey[0].params', 152 - }, 153 - { 154 - key: 'throwOnError', 155 - value: true, 156 - }, 157 - ], 158 - }), 159 - ], 219 + }); 220 + 221 + const isRequired = isOperationParameterRequired( 222 + operation.parameters, 223 + ); 224 + 225 + const expression = compiler.arrowFunction({ 226 + parameters: [ 227 + { 228 + isRequired, 229 + name: 'options', 230 + type: operationOptionsType(nameTypeData), 231 + }, 232 + ], 233 + statements: [ 234 + compiler.returnFunctionCall({ 235 + args: [ 236 + compiler.objectExpression({ 237 + obj: [ 238 + { 239 + key: 'queryFn', 240 + value: compiler.arrowFunction({ 241 + async: true, 242 + multiLine: true, 243 + parameters: [ 244 + { 245 + destructure: [ 246 + { 247 + name: 'queryKey', 248 + }, 249 + ], 250 + }, 251 + ], 252 + statements: [ 253 + compiler.constVariable({ 254 + destructure: true, 255 + expression: compiler.awaitExpression({ 256 + expression: compiler.callExpression({ 257 + functionName: queryFn, 258 + parameters: [ 259 + compiler.objectExpression({ 260 + multiLine: true, 261 + obj: [ 262 + { 263 + spread: 'options', 264 + }, 265 + { 266 + spread: 'queryKey[0].params', 267 + }, 268 + { 269 + key: 'throwOnError', 270 + value: true, 271 + }, 272 + ], 273 + }), 274 + ], 275 + }), 160 276 }), 277 + name: 'data', 161 278 }), 162 - name: 'data', 163 - }), 164 - compiler.returnVariable({ 165 - name: 'data', 279 + compiler.returnVariable({ 280 + name: 'data', 281 + }), 282 + ], 283 + }), 284 + }, 285 + { 286 + key: 'queryKey', 287 + value: createQueryKeyLiteral({ 288 + isRequired, 289 + operation, 290 + }), 291 + }, 292 + ], 293 + }), 294 + ], 295 + name: queryOptionsFn, 296 + }), 297 + ], 298 + }); 299 + const statement = compiler.constVariable({ 300 + // TODO: describe options, same as the actual function call 301 + comment: [], 302 + exportConst: true, 303 + expression, 304 + name: toQueryOptionsName(operation), 305 + }); 306 + files[plugin.name].add(statement); 307 + } 308 + 309 + // infinite queries 310 + if ( 311 + plugin.infiniteQueryOptions && 312 + (['GET', 'POST'] as ReadonlyArray<Method>).includes( 313 + operation.method, 314 + ) 315 + ) { 316 + // the actual pagination field might be nested inside parameter, e.g. body 317 + let paginationField!: Model | OperationParameter; 318 + 319 + const paginationParameter = operation.parameters.find( 320 + (parameter) => { 321 + if (paginationWordsRegExp.test(parameter.name)) { 322 + paginationField = parameter; 323 + return true; 324 + } 325 + 326 + if (parameter.in !== 'body') { 327 + return; 328 + } 329 + 330 + if (parameter.export === 'reference') { 331 + const ref = parameter.$refs[0]; 332 + const refModel = client.models.find( 333 + (model) => model.meta?.$ref === ref, 334 + ); 335 + return refModel?.properties.find((property) => { 336 + if (paginationWordsRegExp.test(property.name)) { 337 + paginationField = property; 338 + return true; 339 + } 340 + }); 341 + } 342 + 343 + return parameter.properties.find((property) => { 344 + if (paginationWordsRegExp.test(property.name)) { 345 + paginationField = property; 346 + return true; 347 + } 348 + }); 349 + }, 350 + ); 351 + 352 + if (paginationParameter && paginationField) { 353 + if (!hasInfiniteQueries) { 354 + hasInfiniteQueries = true; 355 + 356 + addTanStackQueryImport(infiniteQueryOptionsFn); 357 + 358 + typeInfiniteData = addTanStackQueryImport({ 359 + asType: true, 360 + name: 'InfiniteData', 361 + }); 362 + 363 + const queryKeyType = compiler.typeAliasDeclaration({ 364 + name: 'QueryKey', 365 + type: compiler.typeTupleNode({ 366 + types: [ 367 + compiler.typeInterfaceNode({ 368 + properties: [ 369 + { 370 + isRequired: false, 371 + name: 'infinite', 372 + type: compiler.keywordTypeNode({ 373 + keyword: 'boolean', 166 374 }), 167 - ], 168 - }), 169 - }, 170 - { 171 - key: 'queryKey', 172 - value: compiler.arrayLiteralExpression({ 173 - elements: [ 174 - compiler.objectExpression({ 175 - obj: [ 375 + }, 376 + { 377 + name: 'params', 378 + type: compiler.typeInterfaceNode({ 379 + properties: [ 380 + { 381 + name: 'body', 382 + type: compiler.keywordTypeNode({ 383 + keyword: 'any', 384 + }), 385 + }, 386 + { 387 + name: 'headers', 388 + type: compiler.keywordTypeNode({ 389 + keyword: 'any', 390 + }), 391 + }, 176 392 { 177 - key: 'scope', 178 - value: operation.name, 393 + name: 'path', 394 + type: compiler.keywordTypeNode({ 395 + keyword: 'any', 396 + }), 179 397 }, 180 398 { 181 - key: 'params', 182 - value: compiler.objectExpression({ 183 - obj: [ 184 - { 185 - isValueAccess: true, 186 - key: 'body', 187 - value: isRequired 188 - ? 'options.body' 189 - : 'options?.body', 190 - }, 191 - { 192 - isValueAccess: true, 193 - key: 'headers', 194 - value: isRequired 195 - ? 'options.headers' 196 - : 'options?.headers', 197 - }, 198 - { 199 - isValueAccess: true, 200 - key: 'path', 201 - value: isRequired 202 - ? 'options.path' 203 - : 'options?.path', 204 - }, 205 - { 206 - isValueAccess: true, 207 - key: 'query', 208 - value: isRequired 209 - ? 'options.query' 210 - : 'options?.query', 211 - }, 212 - ], 399 + name: 'query', 400 + type: compiler.keywordTypeNode({ 401 + keyword: 'any', 213 402 }), 214 403 }, 215 404 ], 216 405 }), 217 - ], 218 - }), 219 - }, 406 + }, 407 + { 408 + name: 'scope', 409 + type: compiler.keywordTypeNode({ 410 + keyword: 'string', 411 + }), 412 + }, 413 + ], 414 + }), 220 415 ], 221 416 }), 417 + }); 418 + files[plugin.name].add(queryKeyType); 419 + } 420 + 421 + hasUsedQueryFn = true; 422 + 423 + const { name: nameTypeError } = generateImport({ 424 + client, 425 + meta: { 426 + // TODO: this should be exact ref to operation for consistency, 427 + // but name should work too as operation ID is unique 428 + $ref: operation.name, 429 + name: operation.name, 430 + }, 431 + nameTransformer: operationErrorTypeName, 432 + onImport: (imported) => { 433 + imports = [...imports, imported]; 434 + }, 435 + }); 436 + 437 + let typeError: ImportExportItem = nameTypeError; 438 + if (!typeError) { 439 + typeError = addTanStackQueryImport({ 440 + asType: true, 441 + name: 'DefaultError', 442 + }); 443 + } 444 + 445 + const { name: nameTypeData } = generateImport({ 446 + client, 447 + meta: operation.parameters.length 448 + ? { 449 + // TODO: this should be exact ref to operation for consistency, 450 + // but name should work too as operation ID is unique 451 + $ref: operation.name, 452 + name: operation.name, 453 + } 454 + : undefined, 455 + nameTransformer: operationDataTypeName, 456 + onImport: (imported) => { 457 + imports = [...imports, imported]; 458 + }, 459 + }); 460 + 461 + const { name: nameTypeResponse } = generateImport({ 462 + client, 463 + meta: { 464 + // TODO: this should be exact ref to operation for consistency, 465 + // but name should work too as operation ID is unique 466 + $ref: operation.name, 467 + name: operation.name, 468 + }, 469 + nameTransformer: operationResponseTypeName, 470 + onImport: (imported) => { 471 + imports = [...imports, imported]; 472 + }, 473 + }); 474 + 475 + const typeResponse = nameTypeResponse || 'void'; 476 + 477 + const isRequired = isOperationParameterRequired( 478 + operation.parameters, 479 + ); 480 + 481 + const expression = compiler.arrowFunction({ 482 + parameters: [ 483 + { 484 + isRequired, 485 + name: 'options', 486 + type: operationOptionsType(nameTypeData), 487 + }, 222 488 ], 223 - name: queryOptionsId, 224 - }), 225 - ], 226 - }); 227 - const statement = compiler.constVariable({ 228 - // TODO: describe options, same as the actual function call 229 - comment: [], 230 - exportConst: true, 231 - expression, 232 - name: toQueryOptionsName(operation), 233 - }); 234 - files[plugin.name].add(statement); 489 + statements: [ 490 + compiler.returnFunctionCall({ 491 + args: [ 492 + compiler.objectExpression({ 493 + comments: [ 494 + { 495 + jsdoc: false, 496 + lines: ['@ts-ignore'], 497 + }, 498 + ], 499 + obj: [ 500 + { 501 + key: 'queryFn', 502 + value: compiler.arrowFunction({ 503 + async: true, 504 + multiLine: true, 505 + parameters: [ 506 + { 507 + destructure: [ 508 + { 509 + name: 'pageParam', 510 + }, 511 + { 512 + name: 'queryKey', 513 + }, 514 + ], 515 + }, 516 + ], 517 + statements: [ 518 + compiler.constVariable({ 519 + destructure: true, 520 + expression: compiler.awaitExpression({ 521 + expression: compiler.callExpression({ 522 + functionName: queryFn, 523 + parameters: [ 524 + compiler.objectExpression({ 525 + multiLine: true, 526 + obj: [ 527 + { 528 + spread: 'options', 529 + }, 530 + { 531 + spread: 'queryKey[0].params', 532 + }, 533 + { 534 + key: getPaginationIn( 535 + paginationParameter, 536 + ), 537 + value: compiler.objectExpression({ 538 + multiLine: true, 539 + obj: [ 540 + { 541 + spread: `queryKey[0].params.${getPaginationIn(paginationParameter)}`, 542 + }, 543 + { 544 + key: paginationField.name, 545 + value: compiler.identifier({ 546 + text: 'pageParam', 547 + }), 548 + }, 549 + ], 550 + }), 551 + }, 552 + { 553 + key: 'throwOnError', 554 + value: true, 555 + }, 556 + ], 557 + }), 558 + ], 559 + }), 560 + }), 561 + name: 'data', 562 + }), 563 + compiler.returnVariable({ 564 + name: 'data', 565 + }), 566 + ], 567 + }), 568 + }, 569 + { 570 + key: 'queryKey', 571 + value: createQueryKeyLiteral({ 572 + isInfinite: true, 573 + isRequired, 574 + operation, 575 + }), 576 + }, 577 + ], 578 + }), 579 + ], 580 + name: infiniteQueryOptionsFn, 581 + // TODO: better types syntax 582 + // TODO: detect pageParam type 583 + types: [ 584 + `${typeResponse}, ${typeof typeError === 'string' ? typeError : typeError.name}, ${typeof typeInfiniteData === 'string' ? typeInfiniteData : typeInfiniteData.name}<${typeResponse}>, QueryKey, unknown`, 585 + ], 586 + }), 587 + ], 588 + }); 589 + const statement = compiler.constVariable({ 590 + // TODO: describe options, same as the actual function call 591 + comment: [], 592 + exportConst: true, 593 + expression, 594 + name: toInfiniteQueryOptionsName(operation), 595 + }); 596 + files[plugin.name].add(statement); 597 + } 598 + } 235 599 600 + // mutations 236 601 if ( 237 602 plugin.mutationOptions && 238 603 ( 239 604 ['DELETE', 'PATCH', 'POST', 'PUT'] as ReadonlyArray<Method> 240 605 ).includes(operation.method) 241 606 ) { 242 - addTanStackQueryImport({ 243 - asType: true, 244 - name: 'UseMutationOptions', 245 - }); 607 + if (!hasMutations) { 608 + hasMutations = true; 609 + 610 + addTanStackQueryImport({ 611 + asType: true, 612 + name: mutationsType, 613 + }); 614 + } 615 + 616 + hasUsedQueryFn = true; 246 617 247 618 const { name: nameTypeError } = generateImport({ 248 619 client, ··· 260 631 261 632 let typeError: ImportExportItem = nameTypeError; 262 633 if (!typeError) { 263 - typeError = { 634 + typeError = addTanStackQueryImport({ 264 635 asType: true, 265 636 name: 'DefaultError', 266 - }; 267 - addTanStackQueryImport(typeError); 637 + }); 268 638 } 639 + 640 + const { name: nameTypeData } = generateImport({ 641 + client, 642 + meta: operation.parameters.length 643 + ? { 644 + // TODO: this should be exact ref to operation for consistency, 645 + // but name should work too as operation ID is unique 646 + $ref: operation.name, 647 + name: operation.name, 648 + } 649 + : undefined, 650 + nameTransformer: operationDataTypeName, 651 + onImport: (imported) => { 652 + imports = [...imports, imported]; 653 + }, 654 + }); 269 655 270 656 const { name: nameTypeResponse } = generateImport({ 271 657 client, ··· 333 719 }), 334 720 name: toMutationOptionsName(operation), 335 721 // TODO: better types syntax 336 - typeName: `UseMutationOptions<${typeResponse}, ${typeof typeError === 'string' ? typeError : typeError.name}, ${typeOptions}>`, 722 + typeName: `${mutationsType}<${typeResponse}, ${typeof typeError === 'string' ? typeError : typeError.name}, ${operationOptionsType(nameTypeData)}>`, 337 723 }); 338 724 files[plugin.name].add(statement); 339 725 } 340 726 341 - addTanStackQueryImport(queryOptionsId); 342 - 343 - if (!importsServices.includes(queryFn)) { 727 + if (hasUsedQueryFn && !importsServices.includes(queryFn)) { 344 728 importsServices = [...importsServices, queryFn]; 345 729 } 346 730 }
+11 -3
packages/openapi-ts/src/generate/types.ts
··· 115 115 }); 116 116 const { created, name } = result; 117 117 if (created) { 118 - const node = compiler.typeAliasDeclaration({ comment, name, type }); 118 + const node = compiler.typeAliasDeclaration({ 119 + comment, 120 + exportType: true, 121 + name, 122 + type, 123 + }); 119 124 onNode(node); 120 125 121 126 onCreated?.(name); ··· 196 201 // create a separate JavaScript object export 197 202 if (config.types.enums === 'javascript') { 198 203 const expression = compiler.objectExpression({ 199 - comments, 200 204 multiLine: true, 201 - obj: properties, 205 + obj: Object.entries(properties).map(([key, value]) => ({ 206 + comments: comments[key], 207 + key, 208 + value, 209 + })), 202 210 unescape: true, 203 211 }); 204 212 const node = compiler.constVariable({
+4 -1
packages/openapi-ts/src/utils/type.ts
··· 148 148 }; 149 149 }); 150 150 151 - return compiler.typeInterfaceNode(properties, model.isNullable); 151 + return compiler.typeInterfaceNode({ 152 + isNullable: model.isNullable, 153 + properties, 154 + }); 152 155 }; 153 156 154 157 export const toType = (model: Model): TypeNode => {
+1 -1
packages/openapi-ts/test/__snapshots__/test/generated/v2/types.gen.ts.snap
··· 87 87 ERROR: 'Error', 88 88 _SINGLE_QUOTE_: "'Single Quote'", 89 89 _DOUBLE_QUOTES_: '"Double Quotes"', 90 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 90 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 91 91 } as const; 92 92 93 93 /**
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-bundle/services.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import { createClient, createConfig, type Options, formDataBodySerializer, urlSearchParamsBodySerializer } from './client'; 4 - import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 4 + import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 5 5 6 6 export const client = createClient(createConfig()); 7 7 ··· 88 88 url: '/api/v{api-version}/parameters/' 89 89 }); }; 90 90 91 - export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, void>({ 91 + export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, PostCallWithOptionalParamResponse, PostCallWithOptionalParamError>({ 92 92 ...options, 93 93 url: '/api/v{api-version}/parameters/' 94 94 }); };
+24 -8
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-bundle/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1126 1126 parameterPath: string | null; 1127 1127 }; 1128 1128 query: { 1129 - foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1130 - foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1131 1129 /** 1132 1130 * This is the parameter that goes into the query params 1133 1131 */ 1134 - parameterQuery: string | null; 1132 + cursor: string | null; 1133 + foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1134 + foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1135 1135 }; 1136 1136 }; 1137 1137 ··· 1185 1185 /** 1186 1186 * This is an optional parameter 1187 1187 */ 1188 - parameter?: string; 1188 + page?: number; 1189 1189 }; 1190 1190 }; 1191 1191 ··· 1193 1193 /** 1194 1194 * This is an optional parameter 1195 1195 */ 1196 - body?: ModelWithString; 1196 + body?: { 1197 + offset?: number | null; 1198 + }; 1197 1199 query: { 1198 1200 /** 1199 1201 * This is a required parameter ··· 1201 1203 parameter: Pageable; 1202 1204 }; 1203 1205 }; 1206 + 1207 + export type PostCallWithOptionalParamResponse = number | void; 1208 + 1209 + export type PostCallWithOptionalParamError = unknown; 1204 1210 1205 1211 export type PostApiVbyApiVersionRequestBodyData = { 1206 1212 /** ··· 1607 1613 }; 1608 1614 post: { 1609 1615 req: PostCallWithOptionalParamData; 1616 + res: { 1617 + /** 1618 + * Response is a simple number 1619 + */ 1620 + '200': number; 1621 + /** 1622 + * Success 1623 + */ 1624 + '204': void; 1625 + }; 1610 1626 }; 1611 1627 }; 1612 1628 '/api/v{api-version}/requestBody/': {
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-class/services.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import { createClient, createConfig, type Options, formDataBodySerializer, urlSearchParamsBodySerializer } from '@hey-api/client-axios'; 4 - import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 4 + import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 5 5 6 6 export const client = createClient(createConfig()); 7 7 ··· 111 111 } 112 112 113 113 public static postCallWithOptionalParam<ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) { 114 - return (options?.client ?? client).post<ThrowOnError, void>({ 114 + return (options?.client ?? client).post<ThrowOnError, PostCallWithOptionalParamResponse, PostCallWithOptionalParamError>({ 115 115 ...options, 116 116 url: '/api/v{api-version}/parameters/' 117 117 });
+24 -8
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-class/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1084 1084 parameterPath: string | null; 1085 1085 }; 1086 1086 query: { 1087 - foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1088 - foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1089 1087 /** 1090 1088 * This is the parameter that goes into the query params 1091 1089 */ 1092 - parameterQuery: string | null; 1090 + cursor: string | null; 1091 + foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1092 + foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1093 1093 }; 1094 1094 }; 1095 1095 ··· 1143 1143 /** 1144 1144 * This is an optional parameter 1145 1145 */ 1146 - parameter?: string; 1146 + page?: number; 1147 1147 }; 1148 1148 }; 1149 1149 ··· 1151 1151 /** 1152 1152 * This is an optional parameter 1153 1153 */ 1154 - body?: ModelWithString; 1154 + body?: { 1155 + offset?: number | null; 1156 + }; 1155 1157 query: { 1156 1158 /** 1157 1159 * This is a required parameter ··· 1159 1161 parameter: Pageable; 1160 1162 }; 1161 1163 }; 1164 + 1165 + export type PostCallWithOptionalParamResponse = number | void; 1166 + 1167 + export type PostCallWithOptionalParamError = unknown; 1162 1168 1163 1169 export type CallWithDescriptionsData = { 1164 1170 query?: { ··· 1597 1603 }; 1598 1604 post: { 1599 1605 req: PostCallWithOptionalParamData; 1606 + res: { 1607 + /** 1608 + * Response is a simple number 1609 + */ 1610 + '200': number; 1611 + /** 1612 + * Success 1613 + */ 1614 + '204': void; 1615 + }; 1600 1616 }; 1601 1617 }; 1602 1618 '/api/v{api-version}/descriptions/': {
+298 -462
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-plugin-tanstack-react-query/@tanstack/query.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import type { Options } from '@hey-api/client-axios'; 4 - import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/react-query'; 5 - import { export_, import_, apiVVersionOdataControllerCount, getCallWithoutParametersAndResponse, putCallWithoutParametersAndResponse, postCallWithoutParametersAndResponse, deleteCallWithoutParametersAndResponse, optionsCallWithoutParametersAndResponse, headCallWithoutParametersAndResponse, patchCallWithoutParametersAndResponse, deleteFoo, callWithDescriptions, deprecatedCall, callWithParameters, callWithWeirdParameterNames, getCallWithOptionalParam, postCallWithOptionalParam, postApiVbyApiVersionRequestBody, postApiVbyApiVersionFormData, callWithDefaultParameters, callWithDefaultOptionalParameters, callToTestOrderOfParams, duplicateName, duplicateName1, duplicateName2, duplicateName3, callWithNoContentResponse, callWithResponseAndNoContentResponse, dummyA, dummyB, callWithResponse, callWithDuplicateResponses, callWithResponses, collectionFormat, types, uploadFile, fileResponse, complexTypes, multipartRequest, multipartResponse, complexParams, callWithResultFromHeader, testErrorCode, nonAsciiæøåÆøÅöôêÊ字符串, putWithFormUrlEncoded } from '../services.gen'; 6 - import type { ImportData, ImportError, ImportResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, ComplexTypesData, MultipartRequestData, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from '../types.gen'; 4 + import { queryOptions, type UseMutationOptions, type DefaultError, infiniteQueryOptions, type InfiniteData } from '@tanstack/react-query'; 5 + import { export_, import_, apiVVersionOdataControllerCount, getCallWithoutParametersAndResponse, putCallWithoutParametersAndResponse, postCallWithoutParametersAndResponse, deleteCallWithoutParametersAndResponse, patchCallWithoutParametersAndResponse, deleteFoo, callWithDescriptions, deprecatedCall, callWithParameters, callWithWeirdParameterNames, getCallWithOptionalParam, postCallWithOptionalParam, postApiVbyApiVersionRequestBody, postApiVbyApiVersionFormData, callWithDefaultParameters, callWithDefaultOptionalParameters, callToTestOrderOfParams, duplicateName, duplicateName1, duplicateName2, duplicateName3, callWithNoContentResponse, callWithResponseAndNoContentResponse, dummyA, dummyB, callWithResponse, callWithDuplicateResponses, callWithResponses, collectionFormat, types, uploadFile, fileResponse, complexTypes, multipartRequest, multipartResponse, complexParams, callWithResultFromHeader, testErrorCode, nonAsciiæøåÆøÅöôêÊ字符串, putWithFormUrlEncoded } from '../services.gen'; 6 + import type { ImportData, ImportError, ImportResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, ComplexTypesData, MultipartRequestData, ComplexParamsError, ComplexParamsData, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from '../types.gen'; 7 7 8 8 export const exportOptions = (options?: Options) => { return queryOptions({ 9 9 queryFn: async ({ queryKey }) => { ··· 16 16 }, 17 17 queryKey: [ 18 18 { 19 - scope: 'export', 20 19 params: { 21 - body: options?.body, 22 - headers: options?.headers, 23 - path: options?.path, 24 - query: options?.query 25 - } 20 + body: options?.body ?? {}, 21 + headers: options?.headers ?? {}, 22 + path: options?.path ?? {}, 23 + query: options?.query ?? {} 24 + }, 25 + scope: 'export' 26 26 } 27 27 ] 28 28 }); }; ··· 38 38 }, 39 39 queryKey: [ 40 40 { 41 - scope: 'import', 42 41 params: { 43 - body: options.body, 44 - headers: options.headers, 45 - path: options.path, 46 - query: options.query 47 - } 42 + body: options.body ?? {}, 43 + headers: options.headers ?? {}, 44 + path: options.path ?? {}, 45 + query: options.query ?? {} 46 + }, 47 + scope: 'import' 48 48 } 49 49 ] 50 50 }); }; ··· 70 70 }, 71 71 queryKey: [ 72 72 { 73 - scope: 'apiVVersionOdataControllerCount', 74 73 params: { 75 - body: options?.body, 76 - headers: options?.headers, 77 - path: options?.path, 78 - query: options?.query 79 - } 74 + body: options?.body ?? {}, 75 + headers: options?.headers ?? {}, 76 + path: options?.path ?? {}, 77 + query: options?.query ?? {} 78 + }, 79 + scope: 'apiVVersionOdataControllerCount' 80 80 } 81 81 ] 82 82 }); }; ··· 92 92 }, 93 93 queryKey: [ 94 94 { 95 - scope: 'getCallWithoutParametersAndResponse', 96 95 params: { 97 - body: options?.body, 98 - headers: options?.headers, 99 - path: options?.path, 100 - query: options?.query 101 - } 102 - } 103 - ] 104 - }); }; 105 - 106 - export const putCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 107 - queryFn: async ({ queryKey }) => { 108 - const { data } = await putCallWithoutParametersAndResponse({ 109 - ...options, 110 - ...queryKey[0].params, 111 - throwOnError: true 112 - }); 113 - return data; 114 - }, 115 - queryKey: [ 116 - { 117 - scope: 'putCallWithoutParametersAndResponse', 118 - params: { 119 - body: options?.body, 120 - headers: options?.headers, 121 - path: options?.path, 122 - query: options?.query 123 - } 96 + body: options?.body ?? {}, 97 + headers: options?.headers ?? {}, 98 + path: options?.path ?? {}, 99 + query: options?.query ?? {} 100 + }, 101 + scope: 'getCallWithoutParametersAndResponse' 124 102 } 125 103 ] 126 104 }); }; ··· 146 124 }, 147 125 queryKey: [ 148 126 { 149 - scope: 'postCallWithoutParametersAndResponse', 150 127 params: { 151 - body: options?.body, 152 - headers: options?.headers, 153 - path: options?.path, 154 - query: options?.query 155 - } 128 + body: options?.body ?? {}, 129 + headers: options?.headers ?? {}, 130 + path: options?.path ?? {}, 131 + query: options?.query ?? {} 132 + }, 133 + scope: 'postCallWithoutParametersAndResponse' 156 134 } 157 135 ] 158 136 }); }; ··· 167 145 } 168 146 }; 169 147 170 - export const deleteCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 171 - queryFn: async ({ queryKey }) => { 172 - const { data } = await deleteCallWithoutParametersAndResponse({ 173 - ...options, 174 - ...queryKey[0].params, 175 - throwOnError: true 176 - }); 177 - return data; 178 - }, 179 - queryKey: [ 180 - { 181 - scope: 'deleteCallWithoutParametersAndResponse', 182 - params: { 183 - body: options?.body, 184 - headers: options?.headers, 185 - path: options?.path, 186 - query: options?.query 187 - } 188 - } 189 - ] 190 - }); }; 191 - 192 148 export const deleteCallWithoutParametersAndResponseMutation: UseMutationOptions<void, DefaultError, Options> = { 193 149 mutationFn: async (options) => { 194 150 const { data } = await deleteCallWithoutParametersAndResponse({ ··· 199 155 } 200 156 }; 201 157 202 - export const optionsCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 203 - queryFn: async ({ queryKey }) => { 204 - const { data } = await optionsCallWithoutParametersAndResponse({ 158 + export const patchCallWithoutParametersAndResponseMutation: UseMutationOptions<void, DefaultError, Options> = { 159 + mutationFn: async (options) => { 160 + const { data } = await patchCallWithoutParametersAndResponse({ 205 161 ...options, 206 - ...queryKey[0].params, 207 162 throwOnError: true 208 163 }); 209 164 return data; 210 - }, 211 - queryKey: [ 212 - { 213 - scope: 'optionsCallWithoutParametersAndResponse', 214 - params: { 215 - body: options?.body, 216 - headers: options?.headers, 217 - path: options?.path, 218 - query: options?.query 219 - } 220 - } 221 - ] 222 - }); }; 165 + } 166 + }; 223 167 224 - export const headCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 225 - queryFn: async ({ queryKey }) => { 226 - const { data } = await headCallWithoutParametersAndResponse({ 168 + export const deleteFooMutation: UseMutationOptions<void, DefaultError, Options<DeleteFooData3>> = { 169 + mutationFn: async (options) => { 170 + const { data } = await deleteFoo({ 227 171 ...options, 228 - ...queryKey[0].params, 229 172 throwOnError: true 230 173 }); 231 174 return data; 232 - }, 233 - queryKey: [ 234 - { 235 - scope: 'headCallWithoutParametersAndResponse', 236 - params: { 237 - body: options?.body, 238 - headers: options?.headers, 239 - path: options?.path, 240 - query: options?.query 241 - } 242 - } 243 - ] 244 - }); }; 175 + } 176 + }; 245 177 246 - export const patchCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 178 + export const callWithDescriptionsOptions = (options?: Options<CallWithDescriptionsData>) => { return queryOptions({ 247 179 queryFn: async ({ queryKey }) => { 248 - const { data } = await patchCallWithoutParametersAndResponse({ 180 + const { data } = await callWithDescriptions({ 249 181 ...options, 250 182 ...queryKey[0].params, 251 183 throwOnError: true ··· 254 186 }, 255 187 queryKey: [ 256 188 { 257 - scope: 'patchCallWithoutParametersAndResponse', 258 189 params: { 259 - body: options?.body, 260 - headers: options?.headers, 261 - path: options?.path, 262 - query: options?.query 263 - } 190 + body: options?.body ?? {}, 191 + headers: options?.headers ?? {}, 192 + path: options?.path ?? {}, 193 + query: options?.query ?? {} 194 + }, 195 + scope: 'callWithDescriptions' 264 196 } 265 197 ] 266 198 }); }; 267 199 268 - export const patchCallWithoutParametersAndResponseMutation: UseMutationOptions<void, DefaultError, Options> = { 200 + export const callWithDescriptionsMutation: UseMutationOptions<void, DefaultError, Options<CallWithDescriptionsData>> = { 269 201 mutationFn: async (options) => { 270 - const { data } = await patchCallWithoutParametersAndResponse({ 202 + const { data } = await callWithDescriptions({ 271 203 ...options, 272 204 throwOnError: true 273 205 }); ··· 275 207 } 276 208 }; 277 209 278 - export const deleteFooOptions = (options: Options<DeleteFooData3>) => { return queryOptions({ 210 + export const deprecatedCallOptions = (options: Options<DeprecatedCallData>) => { return queryOptions({ 279 211 queryFn: async ({ queryKey }) => { 280 - const { data } = await deleteFoo({ 212 + const { data } = await deprecatedCall({ 281 213 ...options, 282 214 ...queryKey[0].params, 283 215 throwOnError: true ··· 286 218 }, 287 219 queryKey: [ 288 220 { 289 - scope: 'deleteFoo', 290 221 params: { 291 - body: options.body, 292 - headers: options.headers, 293 - path: options.path, 294 - query: options.query 295 - } 222 + body: options.body ?? {}, 223 + headers: options.headers ?? {}, 224 + path: options.path ?? {}, 225 + query: options.query ?? {} 226 + }, 227 + scope: 'deprecatedCall' 296 228 } 297 229 ] 298 230 }); }; 299 231 300 - export const deleteFooMutation: UseMutationOptions<void, DefaultError, Options<DeleteFooData3>> = { 232 + export const deprecatedCallMutation: UseMutationOptions<void, DefaultError, Options<DeprecatedCallData>> = { 301 233 mutationFn: async (options) => { 302 - const { data } = await deleteFoo({ 234 + const { data } = await deprecatedCall({ 303 235 ...options, 304 236 throwOnError: true 305 237 }); ··· 307 239 } 308 240 }; 309 241 310 - export const callWithDescriptionsOptions = (options?: Options<CallWithDescriptionsData>) => { return queryOptions({ 242 + export const callWithParametersOptions = (options: Options<CallWithParametersData>) => { return queryOptions({ 311 243 queryFn: async ({ queryKey }) => { 312 - const { data } = await callWithDescriptions({ 244 + const { data } = await callWithParameters({ 313 245 ...options, 314 246 ...queryKey[0].params, 315 247 throwOnError: true ··· 318 250 }, 319 251 queryKey: [ 320 252 { 321 - scope: 'callWithDescriptions', 322 253 params: { 323 - body: options?.body, 324 - headers: options?.headers, 325 - path: options?.path, 326 - query: options?.query 327 - } 254 + body: options.body ?? {}, 255 + headers: options.headers ?? {}, 256 + path: options.path ?? {}, 257 + query: options.query ?? {} 258 + }, 259 + scope: 'callWithParameters' 328 260 } 329 261 ] 330 262 }); }; 331 263 332 - export const callWithDescriptionsMutation: UseMutationOptions<void, DefaultError, Options<CallWithDescriptionsData>> = { 333 - mutationFn: async (options) => { 334 - const { data } = await callWithDescriptions({ 335 - ...options, 336 - throwOnError: true 337 - }); 338 - return data; 264 + type QueryKey = [ 265 + { 266 + infinite?: boolean; 267 + params: { 268 + body: any; 269 + headers: any; 270 + path: any; 271 + query: any; 272 + }; 273 + scope: string; 339 274 } 340 - }; 275 + ]; 341 276 342 - export const deprecatedCallOptions = (options: Options<DeprecatedCallData>) => { return queryOptions({ 343 - queryFn: async ({ queryKey }) => { 344 - const { data } = await deprecatedCall({ 277 + export const callWithParametersInfiniteOptions = (options: Options<CallWithParametersData>) => { return infiniteQueryOptions<void, DefaultError, InfiniteData<void>, QueryKey, unknown>( 278 + // @ts-ignore 279 + { 280 + queryFn: async ({ pageParam, queryKey }) => { 281 + const { data } = await callWithParameters({ 345 282 ...options, 346 283 ...queryKey[0].params, 284 + query: { 285 + ...queryKey[0].params.query, 286 + cursor: pageParam 287 + }, 347 288 throwOnError: true 348 289 }); 349 290 return data; 350 291 }, 351 292 queryKey: [ 352 293 { 353 - scope: 'deprecatedCall', 294 + infinite: true, 354 295 params: { 355 - body: options.body, 356 - headers: options.headers, 357 - path: options.path, 358 - query: options.query 359 - } 296 + body: options.body ?? {}, 297 + headers: options.headers ?? {}, 298 + path: options.path ?? {}, 299 + query: options.query ?? {} 300 + }, 301 + scope: 'callWithParameters' 360 302 } 361 303 ] 362 304 }); }; 363 305 364 - export const deprecatedCallMutation: UseMutationOptions<void, DefaultError, Options<DeprecatedCallData>> = { 306 + export const callWithParametersMutation: UseMutationOptions<void, DefaultError, Options<CallWithParametersData>> = { 365 307 mutationFn: async (options) => { 366 - const { data } = await deprecatedCall({ 308 + const { data } = await callWithParameters({ 367 309 ...options, 368 310 throwOnError: true 369 311 }); ··· 371 313 } 372 314 }; 373 315 374 - export const callWithParametersOptions = (options: Options<CallWithParametersData>) => { return queryOptions({ 316 + export const callWithWeirdParameterNamesOptions = (options: Options<CallWithWeirdParameterNamesData>) => { return queryOptions({ 375 317 queryFn: async ({ queryKey }) => { 376 - const { data } = await callWithParameters({ 318 + const { data } = await callWithWeirdParameterNames({ 377 319 ...options, 378 320 ...queryKey[0].params, 379 321 throwOnError: true ··· 382 324 }, 383 325 queryKey: [ 384 326 { 385 - scope: 'callWithParameters', 386 327 params: { 387 - body: options.body, 388 - headers: options.headers, 389 - path: options.path, 390 - query: options.query 391 - } 328 + body: options.body ?? {}, 329 + headers: options.headers ?? {}, 330 + path: options.path ?? {}, 331 + query: options.query ?? {} 332 + }, 333 + scope: 'callWithWeirdParameterNames' 392 334 } 393 335 ] 394 336 }); }; 395 337 396 - export const callWithParametersMutation: UseMutationOptions<void, DefaultError, Options<CallWithParametersData>> = { 338 + export const callWithWeirdParameterNamesMutation: UseMutationOptions<void, DefaultError, Options<CallWithWeirdParameterNamesData>> = { 397 339 mutationFn: async (options) => { 398 - const { data } = await callWithParameters({ 340 + const { data } = await callWithWeirdParameterNames({ 399 341 ...options, 400 342 throwOnError: true 401 343 }); ··· 403 345 } 404 346 }; 405 347 406 - export const callWithWeirdParameterNamesOptions = (options: Options<CallWithWeirdParameterNamesData>) => { return queryOptions({ 348 + export const getCallWithOptionalParamOptions = (options: Options<GetCallWithOptionalParamData>) => { return queryOptions({ 407 349 queryFn: async ({ queryKey }) => { 408 - const { data } = await callWithWeirdParameterNames({ 350 + const { data } = await getCallWithOptionalParam({ 409 351 ...options, 410 352 ...queryKey[0].params, 411 353 throwOnError: true ··· 414 356 }, 415 357 queryKey: [ 416 358 { 417 - scope: 'callWithWeirdParameterNames', 418 359 params: { 419 - body: options.body, 420 - headers: options.headers, 421 - path: options.path, 422 - query: options.query 423 - } 360 + body: options.body ?? {}, 361 + headers: options.headers ?? {}, 362 + path: options.path ?? {}, 363 + query: options.query ?? {} 364 + }, 365 + scope: 'getCallWithOptionalParam' 424 366 } 425 367 ] 426 368 }); }; 427 369 428 - export const callWithWeirdParameterNamesMutation: UseMutationOptions<void, DefaultError, Options<CallWithWeirdParameterNamesData>> = { 429 - mutationFn: async (options) => { 430 - const { data } = await callWithWeirdParameterNames({ 370 + export const getCallWithOptionalParamInfiniteOptions = (options: Options<GetCallWithOptionalParamData>) => { return infiniteQueryOptions<void, DefaultError, InfiniteData<void>, QueryKey, unknown>( 371 + // @ts-ignore 372 + { 373 + queryFn: async ({ pageParam, queryKey }) => { 374 + const { data } = await getCallWithOptionalParam({ 431 375 ...options, 376 + ...queryKey[0].params, 377 + query: { 378 + ...queryKey[0].params.query, 379 + page: pageParam 380 + }, 432 381 throwOnError: true 433 382 }); 434 383 return data; 435 - } 436 - }; 384 + }, 385 + queryKey: [ 386 + { 387 + infinite: true, 388 + params: { 389 + body: options.body ?? {}, 390 + headers: options.headers ?? {}, 391 + path: options.path ?? {}, 392 + query: options.query ?? {} 393 + }, 394 + scope: 'getCallWithOptionalParam' 395 + } 396 + ] 397 + }); }; 437 398 438 - export const getCallWithOptionalParamOptions = (options: Options<GetCallWithOptionalParamData>) => { return queryOptions({ 399 + export const postCallWithOptionalParamOptions = (options: Options<PostCallWithOptionalParamData>) => { return queryOptions({ 439 400 queryFn: async ({ queryKey }) => { 440 - const { data } = await getCallWithOptionalParam({ 401 + const { data } = await postCallWithOptionalParam({ 441 402 ...options, 442 403 ...queryKey[0].params, 443 404 throwOnError: true ··· 446 407 }, 447 408 queryKey: [ 448 409 { 449 - scope: 'getCallWithOptionalParam', 450 410 params: { 451 - body: options.body, 452 - headers: options.headers, 453 - path: options.path, 454 - query: options.query 455 - } 411 + body: options.body ?? {}, 412 + headers: options.headers ?? {}, 413 + path: options.path ?? {}, 414 + query: options.query ?? {} 415 + }, 416 + scope: 'postCallWithOptionalParam' 456 417 } 457 418 ] 458 419 }); }; 459 420 460 - export const postCallWithOptionalParamOptions = (options: Options<PostCallWithOptionalParamData>) => { return queryOptions({ 461 - queryFn: async ({ queryKey }) => { 421 + export const postCallWithOptionalParamInfiniteOptions = (options: Options<PostCallWithOptionalParamData>) => { return infiniteQueryOptions<PostCallWithOptionalParamResponse, PostCallWithOptionalParamError, InfiniteData<PostCallWithOptionalParamResponse>, QueryKey, unknown>( 422 + // @ts-ignore 423 + { 424 + queryFn: async ({ pageParam, queryKey }) => { 462 425 const { data } = await postCallWithOptionalParam({ 463 426 ...options, 464 427 ...queryKey[0].params, 428 + body: { 429 + ...queryKey[0].params.body, 430 + offset: pageParam 431 + }, 465 432 throwOnError: true 466 433 }); 467 434 return data; 468 435 }, 469 436 queryKey: [ 470 437 { 471 - scope: 'postCallWithOptionalParam', 438 + infinite: true, 472 439 params: { 473 - body: options.body, 474 - headers: options.headers, 475 - path: options.path, 476 - query: options.query 477 - } 440 + body: options.body ?? {}, 441 + headers: options.headers ?? {}, 442 + path: options.path ?? {}, 443 + query: options.query ?? {} 444 + }, 445 + scope: 'postCallWithOptionalParam' 478 446 } 479 447 ] 480 448 }); }; 481 449 482 - export const postCallWithOptionalParamMutation: UseMutationOptions<void, DefaultError, Options<PostCallWithOptionalParamData>> = { 450 + export const postCallWithOptionalParamMutation: UseMutationOptions<PostCallWithOptionalParamResponse, PostCallWithOptionalParamError, Options<PostCallWithOptionalParamData>> = { 483 451 mutationFn: async (options) => { 484 452 const { data } = await postCallWithOptionalParam({ 485 453 ...options, ··· 500 468 }, 501 469 queryKey: [ 502 470 { 503 - scope: 'postApiVbyApiVersionRequestBody', 504 471 params: { 505 - body: options?.body, 506 - headers: options?.headers, 507 - path: options?.path, 508 - query: options?.query 509 - } 472 + body: options?.body ?? {}, 473 + headers: options?.headers ?? {}, 474 + path: options?.path ?? {}, 475 + query: options?.query ?? {} 476 + }, 477 + scope: 'postApiVbyApiVersionRequestBody' 510 478 } 511 479 ] 512 480 }); }; ··· 532 500 }, 533 501 queryKey: [ 534 502 { 535 - scope: 'postApiVbyApiVersionFormData', 536 503 params: { 537 - body: options?.body, 538 - headers: options?.headers, 539 - path: options?.path, 540 - query: options?.query 541 - } 504 + body: options?.body ?? {}, 505 + headers: options?.headers ?? {}, 506 + path: options?.path ?? {}, 507 + query: options?.query ?? {} 508 + }, 509 + scope: 'postApiVbyApiVersionFormData' 542 510 } 543 511 ] 544 512 }); }; ··· 564 532 }, 565 533 queryKey: [ 566 534 { 567 - scope: 'callWithDefaultParameters', 568 535 params: { 569 - body: options?.body, 570 - headers: options?.headers, 571 - path: options?.path, 572 - query: options?.query 573 - } 536 + body: options?.body ?? {}, 537 + headers: options?.headers ?? {}, 538 + path: options?.path ?? {}, 539 + query: options?.query ?? {} 540 + }, 541 + scope: 'callWithDefaultParameters' 574 542 } 575 543 ] 576 544 }); }; ··· 586 554 }, 587 555 queryKey: [ 588 556 { 589 - scope: 'callWithDefaultOptionalParameters', 590 557 params: { 591 - body: options?.body, 592 - headers: options?.headers, 593 - path: options?.path, 594 - query: options?.query 595 - } 558 + body: options?.body ?? {}, 559 + headers: options?.headers ?? {}, 560 + path: options?.path ?? {}, 561 + query: options?.query ?? {} 562 + }, 563 + scope: 'callWithDefaultOptionalParameters' 596 564 } 597 565 ] 598 566 }); }; ··· 607 575 } 608 576 }; 609 577 610 - export const callToTestOrderOfParamsOptions = (options: Options<CallToTestOrderOfParamsData>) => { return queryOptions({ 611 - queryFn: async ({ queryKey }) => { 612 - const { data } = await callToTestOrderOfParams({ 613 - ...options, 614 - ...queryKey[0].params, 615 - throwOnError: true 616 - }); 617 - return data; 618 - }, 619 - queryKey: [ 620 - { 621 - scope: 'callToTestOrderOfParams', 622 - params: { 623 - body: options.body, 624 - headers: options.headers, 625 - path: options.path, 626 - query: options.query 627 - } 628 - } 629 - ] 630 - }); }; 631 - 632 578 export const callToTestOrderOfParamsMutation: UseMutationOptions<void, DefaultError, Options<CallToTestOrderOfParamsData>> = { 633 579 mutationFn: async (options) => { 634 580 const { data } = await callToTestOrderOfParams({ ··· 650 596 }, 651 597 queryKey: [ 652 598 { 653 - scope: 'duplicateName', 654 599 params: { 655 - body: options?.body, 656 - headers: options?.headers, 657 - path: options?.path, 658 - query: options?.query 659 - } 600 + body: options?.body ?? {}, 601 + headers: options?.headers ?? {}, 602 + path: options?.path ?? {}, 603 + query: options?.query ?? {} 604 + }, 605 + scope: 'duplicateName' 660 606 } 661 607 ] 662 608 }); }; ··· 672 618 }, 673 619 queryKey: [ 674 620 { 675 - scope: 'duplicateName1', 676 621 params: { 677 - body: options?.body, 678 - headers: options?.headers, 679 - path: options?.path, 680 - query: options?.query 681 - } 622 + body: options?.body ?? {}, 623 + headers: options?.headers ?? {}, 624 + path: options?.path ?? {}, 625 + query: options?.query ?? {} 626 + }, 627 + scope: 'duplicateName1' 682 628 } 683 629 ] 684 630 }); }; ··· 693 639 } 694 640 }; 695 641 696 - export const duplicateName2Options = (options?: Options) => { return queryOptions({ 697 - queryFn: async ({ queryKey }) => { 698 - const { data } = await duplicateName2({ 699 - ...options, 700 - ...queryKey[0].params, 701 - throwOnError: true 702 - }); 703 - return data; 704 - }, 705 - queryKey: [ 706 - { 707 - scope: 'duplicateName2', 708 - params: { 709 - body: options?.body, 710 - headers: options?.headers, 711 - path: options?.path, 712 - query: options?.query 713 - } 714 - } 715 - ] 716 - }); }; 717 - 718 642 export const duplicateName2Mutation: UseMutationOptions<void, DefaultError, Options> = { 719 643 mutationFn: async (options) => { 720 644 const { data } = await duplicateName2({ ··· 725 649 } 726 650 }; 727 651 728 - export const duplicateName3Options = (options?: Options) => { return queryOptions({ 729 - queryFn: async ({ queryKey }) => { 730 - const { data } = await duplicateName3({ 731 - ...options, 732 - ...queryKey[0].params, 733 - throwOnError: true 734 - }); 735 - return data; 736 - }, 737 - queryKey: [ 738 - { 739 - scope: 'duplicateName3', 740 - params: { 741 - body: options?.body, 742 - headers: options?.headers, 743 - path: options?.path, 744 - query: options?.query 745 - } 746 - } 747 - ] 748 - }); }; 749 - 750 652 export const duplicateName3Mutation: UseMutationOptions<void, DefaultError, Options> = { 751 653 mutationFn: async (options) => { 752 654 const { data } = await duplicateName3({ ··· 768 670 }, 769 671 queryKey: [ 770 672 { 771 - scope: 'callWithNoContentResponse', 772 673 params: { 773 - body: options?.body, 774 - headers: options?.headers, 775 - path: options?.path, 776 - query: options?.query 777 - } 674 + body: options?.body ?? {}, 675 + headers: options?.headers ?? {}, 676 + path: options?.path ?? {}, 677 + query: options?.query ?? {} 678 + }, 679 + scope: 'callWithNoContentResponse' 778 680 } 779 681 ] 780 682 }); }; ··· 790 692 }, 791 693 queryKey: [ 792 694 { 793 - scope: 'callWithResponseAndNoContentResponse', 794 695 params: { 795 - body: options?.body, 796 - headers: options?.headers, 797 - path: options?.path, 798 - query: options?.query 799 - } 696 + body: options?.body ?? {}, 697 + headers: options?.headers ?? {}, 698 + path: options?.path ?? {}, 699 + query: options?.query ?? {} 700 + }, 701 + scope: 'callWithResponseAndNoContentResponse' 800 702 } 801 703 ] 802 704 }); }; ··· 812 714 }, 813 715 queryKey: [ 814 716 { 815 - scope: 'dummyA', 816 717 params: { 817 - body: options?.body, 818 - headers: options?.headers, 819 - path: options?.path, 820 - query: options?.query 821 - } 718 + body: options?.body ?? {}, 719 + headers: options?.headers ?? {}, 720 + path: options?.path ?? {}, 721 + query: options?.query ?? {} 722 + }, 723 + scope: 'dummyA' 822 724 } 823 725 ] 824 726 }); }; ··· 834 736 }, 835 737 queryKey: [ 836 738 { 837 - scope: 'dummyB', 838 739 params: { 839 - body: options?.body, 840 - headers: options?.headers, 841 - path: options?.path, 842 - query: options?.query 843 - } 740 + body: options?.body ?? {}, 741 + headers: options?.headers ?? {}, 742 + path: options?.path ?? {}, 743 + query: options?.query ?? {} 744 + }, 745 + scope: 'dummyB' 844 746 } 845 747 ] 846 748 }); }; ··· 856 758 }, 857 759 queryKey: [ 858 760 { 859 - scope: 'callWithResponse', 860 761 params: { 861 - body: options?.body, 862 - headers: options?.headers, 863 - path: options?.path, 864 - query: options?.query 865 - } 762 + body: options?.body ?? {}, 763 + headers: options?.headers ?? {}, 764 + path: options?.path ?? {}, 765 + query: options?.query ?? {} 766 + }, 767 + scope: 'callWithResponse' 866 768 } 867 769 ] 868 770 }); }; ··· 878 780 }, 879 781 queryKey: [ 880 782 { 881 - scope: 'callWithDuplicateResponses', 882 783 params: { 883 - body: options?.body, 884 - headers: options?.headers, 885 - path: options?.path, 886 - query: options?.query 887 - } 784 + body: options?.body ?? {}, 785 + headers: options?.headers ?? {}, 786 + path: options?.path ?? {}, 787 + query: options?.query ?? {} 788 + }, 789 + scope: 'callWithDuplicateResponses' 888 790 } 889 791 ] 890 792 }); }; ··· 899 801 } 900 802 }; 901 803 902 - export const callWithResponsesOptions = (options?: Options) => { return queryOptions({ 903 - queryFn: async ({ queryKey }) => { 904 - const { data } = await callWithResponses({ 905 - ...options, 906 - ...queryKey[0].params, 907 - throwOnError: true 908 - }); 909 - return data; 910 - }, 911 - queryKey: [ 912 - { 913 - scope: 'callWithResponses', 914 - params: { 915 - body: options?.body, 916 - headers: options?.headers, 917 - path: options?.path, 918 - query: options?.query 919 - } 920 - } 921 - ] 922 - }); }; 923 - 924 804 export const callWithResponsesMutation: UseMutationOptions<CallWithResponsesResponse, CallWithResponsesError, Options> = { 925 805 mutationFn: async (options) => { 926 806 const { data } = await callWithResponses({ ··· 942 822 }, 943 823 queryKey: [ 944 824 { 945 - scope: 'collectionFormat', 946 825 params: { 947 - body: options.body, 948 - headers: options.headers, 949 - path: options.path, 950 - query: options.query 951 - } 826 + body: options.body ?? {}, 827 + headers: options.headers ?? {}, 828 + path: options.path ?? {}, 829 + query: options.query ?? {} 830 + }, 831 + scope: 'collectionFormat' 952 832 } 953 833 ] 954 834 }); }; ··· 964 844 }, 965 845 queryKey: [ 966 846 { 967 - scope: 'types', 968 847 params: { 969 - body: options.body, 970 - headers: options.headers, 971 - path: options.path, 972 - query: options.query 973 - } 848 + body: options.body ?? {}, 849 + headers: options.headers ?? {}, 850 + path: options.path ?? {}, 851 + query: options.query ?? {} 852 + }, 853 + scope: 'types' 974 854 } 975 855 ] 976 856 }); }; ··· 986 866 }, 987 867 queryKey: [ 988 868 { 989 - scope: 'uploadFile', 990 869 params: { 991 - body: options.body, 992 - headers: options.headers, 993 - path: options.path, 994 - query: options.query 995 - } 870 + body: options.body ?? {}, 871 + headers: options.headers ?? {}, 872 + path: options.path ?? {}, 873 + query: options.query ?? {} 874 + }, 875 + scope: 'uploadFile' 996 876 } 997 877 ] 998 878 }); }; ··· 1018 898 }, 1019 899 queryKey: [ 1020 900 { 1021 - scope: 'fileResponse', 1022 901 params: { 1023 - body: options.body, 1024 - headers: options.headers, 1025 - path: options.path, 1026 - query: options.query 1027 - } 902 + body: options.body ?? {}, 903 + headers: options.headers ?? {}, 904 + path: options.path ?? {}, 905 + query: options.query ?? {} 906 + }, 907 + scope: 'fileResponse' 1028 908 } 1029 909 ] 1030 910 }); }; ··· 1040 920 }, 1041 921 queryKey: [ 1042 922 { 1043 - scope: 'complexTypes', 1044 923 params: { 1045 - body: options.body, 1046 - headers: options.headers, 1047 - path: options.path, 1048 - query: options.query 1049 - } 924 + body: options.body ?? {}, 925 + headers: options.headers ?? {}, 926 + path: options.path ?? {}, 927 + query: options.query ?? {} 928 + }, 929 + scope: 'complexTypes' 1050 930 } 1051 931 ] 1052 932 }); }; ··· 1062 942 }, 1063 943 queryKey: [ 1064 944 { 1065 - scope: 'multipartRequest', 1066 945 params: { 1067 - body: options?.body, 1068 - headers: options?.headers, 1069 - path: options?.path, 1070 - query: options?.query 1071 - } 946 + body: options?.body ?? {}, 947 + headers: options?.headers ?? {}, 948 + path: options?.path ?? {}, 949 + query: options?.query ?? {} 950 + }, 951 + scope: 'multipartRequest' 1072 952 } 1073 953 ] 1074 954 }); }; ··· 1094 974 }, 1095 975 queryKey: [ 1096 976 { 1097 - scope: 'multipartResponse', 1098 977 params: { 1099 - body: options?.body, 1100 - headers: options?.headers, 1101 - path: options?.path, 1102 - query: options?.query 1103 - } 1104 - } 1105 - ] 1106 - }); }; 1107 - 1108 - export const complexParamsOptions = (options: Options<ComplexParamsData>) => { return queryOptions({ 1109 - queryFn: async ({ queryKey }) => { 1110 - const { data } = await complexParams({ 1111 - ...options, 1112 - ...queryKey[0].params, 1113 - throwOnError: true 1114 - }); 1115 - return data; 1116 - }, 1117 - queryKey: [ 1118 - { 1119 - scope: 'complexParams', 1120 - params: { 1121 - body: options.body, 1122 - headers: options.headers, 1123 - path: options.path, 1124 - query: options.query 1125 - } 978 + body: options?.body ?? {}, 979 + headers: options?.headers ?? {}, 980 + path: options?.path ?? {}, 981 + query: options?.query ?? {} 982 + }, 983 + scope: 'multipartResponse' 1126 984 } 1127 985 ] 1128 986 }); }; ··· 1148 1006 }, 1149 1007 queryKey: [ 1150 1008 { 1151 - scope: 'callWithResultFromHeader', 1152 1009 params: { 1153 - body: options?.body, 1154 - headers: options?.headers, 1155 - path: options?.path, 1156 - query: options?.query 1157 - } 1010 + body: options?.body ?? {}, 1011 + headers: options?.headers ?? {}, 1012 + path: options?.path ?? {}, 1013 + query: options?.query ?? {} 1014 + }, 1015 + scope: 'callWithResultFromHeader' 1158 1016 } 1159 1017 ] 1160 1018 }); }; ··· 1180 1038 }, 1181 1039 queryKey: [ 1182 1040 { 1183 - scope: 'testErrorCode', 1184 1041 params: { 1185 - body: options.body, 1186 - headers: options.headers, 1187 - path: options.path, 1188 - query: options.query 1189 - } 1042 + body: options.body ?? {}, 1043 + headers: options.headers ?? {}, 1044 + path: options.path ?? {}, 1045 + query: options.query ?? {} 1046 + }, 1047 + scope: 'testErrorCode' 1190 1048 } 1191 1049 ] 1192 1050 }); }; ··· 1212 1070 }, 1213 1071 queryKey: [ 1214 1072 { 1215 - scope: 'nonAsciiæøåÆøÅöôêÊ字符串', 1216 1073 params: { 1217 - body: options.body, 1218 - headers: options.headers, 1219 - path: options.path, 1220 - query: options.query 1221 - } 1074 + body: options.body ?? {}, 1075 + headers: options.headers ?? {}, 1076 + path: options.path ?? {}, 1077 + query: options.query ?? {} 1078 + }, 1079 + scope: 'nonAsciiæøåÆøÅöôêÊ字符串' 1222 1080 } 1223 1081 ] 1224 1082 }); }; ··· 1232 1090 return data; 1233 1091 } 1234 1092 }; 1235 - 1236 - export const putWithFormUrlEncodedOptions = (options: Options<PutWithFormUrlEncodedData>) => { return queryOptions({ 1237 - queryFn: async ({ queryKey }) => { 1238 - const { data } = await putWithFormUrlEncoded({ 1239 - ...options, 1240 - ...queryKey[0].params, 1241 - throwOnError: true 1242 - }); 1243 - return data; 1244 - }, 1245 - queryKey: [ 1246 - { 1247 - scope: 'putWithFormUrlEncoded', 1248 - params: { 1249 - body: options.body, 1250 - headers: options.headers, 1251 - path: options.path, 1252 - query: options.query 1253 - } 1254 - } 1255 - ] 1256 - }); }; 1257 1093 1258 1094 export const putWithFormUrlEncodedMutation: UseMutationOptions<void, DefaultError, Options<PutWithFormUrlEncodedData>> = { 1259 1095 mutationFn: async (options) => {
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-plugin-tanstack-react-query/services.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import { createClient, createConfig, type Options, formDataBodySerializer, urlSearchParamsBodySerializer } from '@hey-api/client-axios'; 4 - import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 4 + import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 5 5 6 6 export const client = createClient(createConfig()); 7 7 ··· 88 88 url: '/api/v{api-version}/parameters/' 89 89 }); }; 90 90 91 - export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, void>({ 91 + export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, PostCallWithOptionalParamResponse, PostCallWithOptionalParamError>({ 92 92 ...options, 93 93 url: '/api/v{api-version}/parameters/' 94 94 }); };
+24 -8
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-plugin-tanstack-react-query/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1126 1126 parameterPath: string | null; 1127 1127 }; 1128 1128 query: { 1129 - foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1130 - foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1131 1129 /** 1132 1130 * This is the parameter that goes into the query params 1133 1131 */ 1134 - parameterQuery: string | null; 1132 + cursor: string | null; 1133 + foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1134 + foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1135 1135 }; 1136 1136 }; 1137 1137 ··· 1185 1185 /** 1186 1186 * This is an optional parameter 1187 1187 */ 1188 - parameter?: string; 1188 + page?: number; 1189 1189 }; 1190 1190 }; 1191 1191 ··· 1193 1193 /** 1194 1194 * This is an optional parameter 1195 1195 */ 1196 - body?: ModelWithString; 1196 + body?: { 1197 + offset?: number | null; 1198 + }; 1197 1199 query: { 1198 1200 /** 1199 1201 * This is a required parameter ··· 1201 1203 parameter: Pageable; 1202 1204 }; 1203 1205 }; 1206 + 1207 + export type PostCallWithOptionalParamResponse = number | void; 1208 + 1209 + export type PostCallWithOptionalParamError = unknown; 1204 1210 1205 1211 export type PostApiVbyApiVersionRequestBodyData = { 1206 1212 /** ··· 1607 1613 }; 1608 1614 post: { 1609 1615 req: PostCallWithOptionalParamData; 1616 + res: { 1617 + /** 1618 + * Response is a simple number 1619 + */ 1620 + '200': number; 1621 + /** 1622 + * Success 1623 + */ 1624 + '204': void; 1625 + }; 1610 1626 }; 1611 1627 }; 1612 1628 '/api/v{api-version}/requestBody/': {
+7 -117
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-plugin-tanstack-react-query_transform/@tanstack/query.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import type { Options } from '@hey-api/client-axios'; 4 - import { type UseMutationOptions, queryOptions } from '@tanstack/react-query'; 4 + import { queryOptions, type UseMutationOptions } from '@tanstack/react-query'; 5 5 import { parentModelWithDates, modelWithDates, modelWithDatesArray, arrayOfDates, date, multipleResponses } from '../services.gen'; 6 6 import type { ParentModelWithDatesError, ParentModelWithDatesResponse, ModelWithDatesError, ModelWithDatesResponse, ModelWithDatesArrayError, ModelWithDatesArrayResponse, ArrayOfDatesError, ArrayOfDatesResponse, DateError, DateResponse, MultipleResponsesError, MultipleResponsesResponse } from '../types.gen'; 7 7 ··· 16 16 }, 17 17 queryKey: [ 18 18 { 19 - scope: 'parentModelWithDates', 20 19 params: { 21 - body: options?.body, 22 - headers: options?.headers, 23 - path: options?.path, 24 - query: options?.query 25 - } 20 + body: options?.body ?? {}, 21 + headers: options?.headers ?? {}, 22 + path: options?.path ?? {}, 23 + query: options?.query ?? {} 24 + }, 25 + scope: 'parentModelWithDates' 26 26 } 27 27 ] 28 28 }); }; ··· 37 37 } 38 38 }; 39 39 40 - export const modelWithDatesOptions = (options?: Options) => { return queryOptions({ 41 - queryFn: async ({ queryKey }) => { 42 - const { data } = await modelWithDates({ 43 - ...options, 44 - ...queryKey[0].params, 45 - throwOnError: true 46 - }); 47 - return data; 48 - }, 49 - queryKey: [ 50 - { 51 - scope: 'modelWithDates', 52 - params: { 53 - body: options?.body, 54 - headers: options?.headers, 55 - path: options?.path, 56 - query: options?.query 57 - } 58 - } 59 - ] 60 - }); }; 61 - 62 40 export const modelWithDatesMutation: UseMutationOptions<ModelWithDatesResponse, ModelWithDatesError, Options> = { 63 41 mutationFn: async (options) => { 64 42 const { data } = await modelWithDates({ ··· 69 47 } 70 48 }; 71 49 72 - export const modelWithDatesArrayOptions = (options?: Options) => { return queryOptions({ 73 - queryFn: async ({ queryKey }) => { 74 - const { data } = await modelWithDatesArray({ 75 - ...options, 76 - ...queryKey[0].params, 77 - throwOnError: true 78 - }); 79 - return data; 80 - }, 81 - queryKey: [ 82 - { 83 - scope: 'modelWithDatesArray', 84 - params: { 85 - body: options?.body, 86 - headers: options?.headers, 87 - path: options?.path, 88 - query: options?.query 89 - } 90 - } 91 - ] 92 - }); }; 93 - 94 50 export const modelWithDatesArrayMutation: UseMutationOptions<ModelWithDatesArrayResponse, ModelWithDatesArrayError, Options> = { 95 51 mutationFn: async (options) => { 96 52 const { data } = await modelWithDatesArray({ ··· 101 57 } 102 58 }; 103 59 104 - export const arrayOfDatesOptions = (options?: Options) => { return queryOptions({ 105 - queryFn: async ({ queryKey }) => { 106 - const { data } = await arrayOfDates({ 107 - ...options, 108 - ...queryKey[0].params, 109 - throwOnError: true 110 - }); 111 - return data; 112 - }, 113 - queryKey: [ 114 - { 115 - scope: 'arrayOfDates', 116 - params: { 117 - body: options?.body, 118 - headers: options?.headers, 119 - path: options?.path, 120 - query: options?.query 121 - } 122 - } 123 - ] 124 - }); }; 125 - 126 60 export const arrayOfDatesMutation: UseMutationOptions<ArrayOfDatesResponse, ArrayOfDatesError, Options> = { 127 61 mutationFn: async (options) => { 128 62 const { data } = await arrayOfDates({ ··· 133 67 } 134 68 }; 135 69 136 - export const dateOptions = (options?: Options) => { return queryOptions({ 137 - queryFn: async ({ queryKey }) => { 138 - const { data } = await date({ 139 - ...options, 140 - ...queryKey[0].params, 141 - throwOnError: true 142 - }); 143 - return data; 144 - }, 145 - queryKey: [ 146 - { 147 - scope: 'date', 148 - params: { 149 - body: options?.body, 150 - headers: options?.headers, 151 - path: options?.path, 152 - query: options?.query 153 - } 154 - } 155 - ] 156 - }); }; 157 - 158 70 export const dateMutation: UseMutationOptions<DateResponse, DateError, Options> = { 159 71 mutationFn: async (options) => { 160 72 const { data } = await date({ ··· 164 76 return data; 165 77 } 166 78 }; 167 - 168 - export const multipleResponsesOptions = (options?: Options) => { return queryOptions({ 169 - queryFn: async ({ queryKey }) => { 170 - const { data } = await multipleResponses({ 171 - ...options, 172 - ...queryKey[0].params, 173 - throwOnError: true 174 - }); 175 - return data; 176 - }, 177 - queryKey: [ 178 - { 179 - scope: 'multipleResponses', 180 - params: { 181 - body: options?.body, 182 - headers: options?.headers, 183 - path: options?.path, 184 - query: options?.query 185 - } 186 - } 187 - ] 188 - }); }; 189 79 190 80 export const multipleResponsesMutation: UseMutationOptions<MultipleResponsesResponse, MultipleResponsesError, Options> = { 191 81 mutationFn: async (options) => {
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios/services.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import { createClient, createConfig, type Options, formDataBodySerializer, urlSearchParamsBodySerializer } from '@hey-api/client-axios'; 4 - import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 4 + import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 5 5 6 6 export const client = createClient(createConfig()); 7 7 ··· 88 88 url: '/api/v{api-version}/parameters/' 89 89 }); }; 90 90 91 - export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, void>({ 91 + export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, PostCallWithOptionalParamResponse, PostCallWithOptionalParamError>({ 92 92 ...options, 93 93 url: '/api/v{api-version}/parameters/' 94 94 }); };
+24 -8
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1126 1126 parameterPath: string | null; 1127 1127 }; 1128 1128 query: { 1129 - foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1130 - foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1131 1129 /** 1132 1130 * This is the parameter that goes into the query params 1133 1131 */ 1134 - parameterQuery: string | null; 1132 + cursor: string | null; 1133 + foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1134 + foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1135 1135 }; 1136 1136 }; 1137 1137 ··· 1185 1185 /** 1186 1186 * This is an optional parameter 1187 1187 */ 1188 - parameter?: string; 1188 + page?: number; 1189 1189 }; 1190 1190 }; 1191 1191 ··· 1193 1193 /** 1194 1194 * This is an optional parameter 1195 1195 */ 1196 - body?: ModelWithString; 1196 + body?: { 1197 + offset?: number | null; 1198 + }; 1197 1199 query: { 1198 1200 /** 1199 1201 * This is a required parameter ··· 1201 1203 parameter: Pageable; 1202 1204 }; 1203 1205 }; 1206 + 1207 + export type PostCallWithOptionalParamResponse = number | void; 1208 + 1209 + export type PostCallWithOptionalParamError = unknown; 1204 1210 1205 1211 export type PostApiVbyApiVersionRequestBodyData = { 1206 1212 /** ··· 1607 1613 }; 1608 1614 post: { 1609 1615 req: PostCallWithOptionalParamData; 1616 + res: { 1617 + /** 1618 + * Response is a simple number 1619 + */ 1620 + '200': number; 1621 + /** 1622 + * Success 1623 + */ 1624 + '204': void; 1625 + }; 1610 1626 }; 1611 1627 }; 1612 1628 '/api/v{api-version}/requestBody/': {
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch-bundle/services.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import { createClient, createConfig, type Options, formDataBodySerializer, urlSearchParamsBodySerializer } from './client'; 4 - import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 4 + import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 5 5 6 6 export const client = createClient(createConfig()); 7 7 ··· 88 88 url: '/api/v{api-version}/parameters/' 89 89 }); }; 90 90 91 - export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, void>({ 91 + export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, PostCallWithOptionalParamResponse, PostCallWithOptionalParamError>({ 92 92 ...options, 93 93 url: '/api/v{api-version}/parameters/' 94 94 }); };
+24 -8
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch-bundle/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1126 1126 parameterPath: string | null; 1127 1127 }; 1128 1128 query: { 1129 - foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1130 - foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1131 1129 /** 1132 1130 * This is the parameter that goes into the query params 1133 1131 */ 1134 - parameterQuery: string | null; 1132 + cursor: string | null; 1133 + foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1134 + foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1135 1135 }; 1136 1136 }; 1137 1137 ··· 1185 1185 /** 1186 1186 * This is an optional parameter 1187 1187 */ 1188 - parameter?: string; 1188 + page?: number; 1189 1189 }; 1190 1190 }; 1191 1191 ··· 1193 1193 /** 1194 1194 * This is an optional parameter 1195 1195 */ 1196 - body?: ModelWithString; 1196 + body?: { 1197 + offset?: number | null; 1198 + }; 1197 1199 query: { 1198 1200 /** 1199 1201 * This is a required parameter ··· 1201 1203 parameter: Pageable; 1202 1204 }; 1203 1205 }; 1206 + 1207 + export type PostCallWithOptionalParamResponse = number | void; 1208 + 1209 + export type PostCallWithOptionalParamError = unknown; 1204 1210 1205 1211 export type PostApiVbyApiVersionRequestBodyData = { 1206 1212 /** ··· 1607 1613 }; 1608 1614 post: { 1609 1615 req: PostCallWithOptionalParamData; 1616 + res: { 1617 + /** 1618 + * Response is a simple number 1619 + */ 1620 + '200': number; 1621 + /** 1622 + * Success 1623 + */ 1624 + '204': void; 1625 + }; 1610 1626 }; 1611 1627 }; 1612 1628 '/api/v{api-version}/requestBody/': {
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch-class/services.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import { createClient, createConfig, type Options, formDataBodySerializer, urlSearchParamsBodySerializer } from '@hey-api/client-fetch'; 4 - import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 4 + import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 5 5 6 6 export const client = createClient(createConfig()); 7 7 ··· 111 111 } 112 112 113 113 public static postCallWithOptionalParam<ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) { 114 - return (options?.client ?? client).post<ThrowOnError, void>({ 114 + return (options?.client ?? client).post<ThrowOnError, PostCallWithOptionalParamResponse, PostCallWithOptionalParamError>({ 115 115 ...options, 116 116 url: '/api/v{api-version}/parameters/' 117 117 });
+24 -8
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch-class/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1084 1084 parameterPath: string | null; 1085 1085 }; 1086 1086 query: { 1087 - foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1088 - foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1089 1087 /** 1090 1088 * This is the parameter that goes into the query params 1091 1089 */ 1092 - parameterQuery: string | null; 1090 + cursor: string | null; 1091 + foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1092 + foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1093 1093 }; 1094 1094 }; 1095 1095 ··· 1143 1143 /** 1144 1144 * This is an optional parameter 1145 1145 */ 1146 - parameter?: string; 1146 + page?: number; 1147 1147 }; 1148 1148 }; 1149 1149 ··· 1151 1151 /** 1152 1152 * This is an optional parameter 1153 1153 */ 1154 - body?: ModelWithString; 1154 + body?: { 1155 + offset?: number | null; 1156 + }; 1155 1157 query: { 1156 1158 /** 1157 1159 * This is a required parameter ··· 1159 1161 parameter: Pageable; 1160 1162 }; 1161 1163 }; 1164 + 1165 + export type PostCallWithOptionalParamResponse = number | void; 1166 + 1167 + export type PostCallWithOptionalParamError = unknown; 1162 1168 1163 1169 export type CallWithDescriptionsData = { 1164 1170 query?: { ··· 1597 1603 }; 1598 1604 post: { 1599 1605 req: PostCallWithOptionalParamData; 1606 + res: { 1607 + /** 1608 + * Response is a simple number 1609 + */ 1610 + '200': number; 1611 + /** 1612 + * Success 1613 + */ 1614 + '204': void; 1615 + }; 1600 1616 }; 1601 1617 }; 1602 1618 '/api/v{api-version}/descriptions/': {
+298 -462
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch-plugin-tanstack-react-query/@tanstack/query.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import type { Options } from '@hey-api/client-fetch'; 4 - import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/react-query'; 5 - import { export_, import_, apiVVersionOdataControllerCount, getCallWithoutParametersAndResponse, putCallWithoutParametersAndResponse, postCallWithoutParametersAndResponse, deleteCallWithoutParametersAndResponse, optionsCallWithoutParametersAndResponse, headCallWithoutParametersAndResponse, patchCallWithoutParametersAndResponse, deleteFoo, callWithDescriptions, deprecatedCall, callWithParameters, callWithWeirdParameterNames, getCallWithOptionalParam, postCallWithOptionalParam, postApiVbyApiVersionRequestBody, postApiVbyApiVersionFormData, callWithDefaultParameters, callWithDefaultOptionalParameters, callToTestOrderOfParams, duplicateName, duplicateName1, duplicateName2, duplicateName3, callWithNoContentResponse, callWithResponseAndNoContentResponse, dummyA, dummyB, callWithResponse, callWithDuplicateResponses, callWithResponses, collectionFormat, types, uploadFile, fileResponse, complexTypes, multipartRequest, multipartResponse, complexParams, callWithResultFromHeader, testErrorCode, nonAsciiæøåÆøÅöôêÊ字符串, putWithFormUrlEncoded } from '../services.gen'; 6 - import type { ImportData, ImportError, ImportResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, ComplexTypesData, MultipartRequestData, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from '../types.gen'; 4 + import { queryOptions, type UseMutationOptions, type DefaultError, infiniteQueryOptions, type InfiniteData } from '@tanstack/react-query'; 5 + import { export_, import_, apiVVersionOdataControllerCount, getCallWithoutParametersAndResponse, putCallWithoutParametersAndResponse, postCallWithoutParametersAndResponse, deleteCallWithoutParametersAndResponse, patchCallWithoutParametersAndResponse, deleteFoo, callWithDescriptions, deprecatedCall, callWithParameters, callWithWeirdParameterNames, getCallWithOptionalParam, postCallWithOptionalParam, postApiVbyApiVersionRequestBody, postApiVbyApiVersionFormData, callWithDefaultParameters, callWithDefaultOptionalParameters, callToTestOrderOfParams, duplicateName, duplicateName1, duplicateName2, duplicateName3, callWithNoContentResponse, callWithResponseAndNoContentResponse, dummyA, dummyB, callWithResponse, callWithDuplicateResponses, callWithResponses, collectionFormat, types, uploadFile, fileResponse, complexTypes, multipartRequest, multipartResponse, complexParams, callWithResultFromHeader, testErrorCode, nonAsciiæøåÆøÅöôêÊ字符串, putWithFormUrlEncoded } from '../services.gen'; 6 + import type { ImportData, ImportError, ImportResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, ComplexTypesData, MultipartRequestData, ComplexParamsError, ComplexParamsData, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from '../types.gen'; 7 7 8 8 export const exportOptions = (options?: Options) => { return queryOptions({ 9 9 queryFn: async ({ queryKey }) => { ··· 16 16 }, 17 17 queryKey: [ 18 18 { 19 - scope: 'export', 20 19 params: { 21 - body: options?.body, 22 - headers: options?.headers, 23 - path: options?.path, 24 - query: options?.query 25 - } 20 + body: options?.body ?? {}, 21 + headers: options?.headers ?? {}, 22 + path: options?.path ?? {}, 23 + query: options?.query ?? {} 24 + }, 25 + scope: 'export' 26 26 } 27 27 ] 28 28 }); }; ··· 38 38 }, 39 39 queryKey: [ 40 40 { 41 - scope: 'import', 42 41 params: { 43 - body: options.body, 44 - headers: options.headers, 45 - path: options.path, 46 - query: options.query 47 - } 42 + body: options.body ?? {}, 43 + headers: options.headers ?? {}, 44 + path: options.path ?? {}, 45 + query: options.query ?? {} 46 + }, 47 + scope: 'import' 48 48 } 49 49 ] 50 50 }); }; ··· 70 70 }, 71 71 queryKey: [ 72 72 { 73 - scope: 'apiVVersionOdataControllerCount', 74 73 params: { 75 - body: options?.body, 76 - headers: options?.headers, 77 - path: options?.path, 78 - query: options?.query 79 - } 74 + body: options?.body ?? {}, 75 + headers: options?.headers ?? {}, 76 + path: options?.path ?? {}, 77 + query: options?.query ?? {} 78 + }, 79 + scope: 'apiVVersionOdataControllerCount' 80 80 } 81 81 ] 82 82 }); }; ··· 92 92 }, 93 93 queryKey: [ 94 94 { 95 - scope: 'getCallWithoutParametersAndResponse', 96 95 params: { 97 - body: options?.body, 98 - headers: options?.headers, 99 - path: options?.path, 100 - query: options?.query 101 - } 102 - } 103 - ] 104 - }); }; 105 - 106 - export const putCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 107 - queryFn: async ({ queryKey }) => { 108 - const { data } = await putCallWithoutParametersAndResponse({ 109 - ...options, 110 - ...queryKey[0].params, 111 - throwOnError: true 112 - }); 113 - return data; 114 - }, 115 - queryKey: [ 116 - { 117 - scope: 'putCallWithoutParametersAndResponse', 118 - params: { 119 - body: options?.body, 120 - headers: options?.headers, 121 - path: options?.path, 122 - query: options?.query 123 - } 96 + body: options?.body ?? {}, 97 + headers: options?.headers ?? {}, 98 + path: options?.path ?? {}, 99 + query: options?.query ?? {} 100 + }, 101 + scope: 'getCallWithoutParametersAndResponse' 124 102 } 125 103 ] 126 104 }); }; ··· 146 124 }, 147 125 queryKey: [ 148 126 { 149 - scope: 'postCallWithoutParametersAndResponse', 150 127 params: { 151 - body: options?.body, 152 - headers: options?.headers, 153 - path: options?.path, 154 - query: options?.query 155 - } 128 + body: options?.body ?? {}, 129 + headers: options?.headers ?? {}, 130 + path: options?.path ?? {}, 131 + query: options?.query ?? {} 132 + }, 133 + scope: 'postCallWithoutParametersAndResponse' 156 134 } 157 135 ] 158 136 }); }; ··· 167 145 } 168 146 }; 169 147 170 - export const deleteCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 171 - queryFn: async ({ queryKey }) => { 172 - const { data } = await deleteCallWithoutParametersAndResponse({ 173 - ...options, 174 - ...queryKey[0].params, 175 - throwOnError: true 176 - }); 177 - return data; 178 - }, 179 - queryKey: [ 180 - { 181 - scope: 'deleteCallWithoutParametersAndResponse', 182 - params: { 183 - body: options?.body, 184 - headers: options?.headers, 185 - path: options?.path, 186 - query: options?.query 187 - } 188 - } 189 - ] 190 - }); }; 191 - 192 148 export const deleteCallWithoutParametersAndResponseMutation: UseMutationOptions<void, DefaultError, Options> = { 193 149 mutationFn: async (options) => { 194 150 const { data } = await deleteCallWithoutParametersAndResponse({ ··· 199 155 } 200 156 }; 201 157 202 - export const optionsCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 203 - queryFn: async ({ queryKey }) => { 204 - const { data } = await optionsCallWithoutParametersAndResponse({ 158 + export const patchCallWithoutParametersAndResponseMutation: UseMutationOptions<void, DefaultError, Options> = { 159 + mutationFn: async (options) => { 160 + const { data } = await patchCallWithoutParametersAndResponse({ 205 161 ...options, 206 - ...queryKey[0].params, 207 162 throwOnError: true 208 163 }); 209 164 return data; 210 - }, 211 - queryKey: [ 212 - { 213 - scope: 'optionsCallWithoutParametersAndResponse', 214 - params: { 215 - body: options?.body, 216 - headers: options?.headers, 217 - path: options?.path, 218 - query: options?.query 219 - } 220 - } 221 - ] 222 - }); }; 165 + } 166 + }; 223 167 224 - export const headCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 225 - queryFn: async ({ queryKey }) => { 226 - const { data } = await headCallWithoutParametersAndResponse({ 168 + export const deleteFooMutation: UseMutationOptions<void, DefaultError, Options<DeleteFooData3>> = { 169 + mutationFn: async (options) => { 170 + const { data } = await deleteFoo({ 227 171 ...options, 228 - ...queryKey[0].params, 229 172 throwOnError: true 230 173 }); 231 174 return data; 232 - }, 233 - queryKey: [ 234 - { 235 - scope: 'headCallWithoutParametersAndResponse', 236 - params: { 237 - body: options?.body, 238 - headers: options?.headers, 239 - path: options?.path, 240 - query: options?.query 241 - } 242 - } 243 - ] 244 - }); }; 175 + } 176 + }; 245 177 246 - export const patchCallWithoutParametersAndResponseOptions = (options?: Options) => { return queryOptions({ 178 + export const callWithDescriptionsOptions = (options?: Options<CallWithDescriptionsData>) => { return queryOptions({ 247 179 queryFn: async ({ queryKey }) => { 248 - const { data } = await patchCallWithoutParametersAndResponse({ 180 + const { data } = await callWithDescriptions({ 249 181 ...options, 250 182 ...queryKey[0].params, 251 183 throwOnError: true ··· 254 186 }, 255 187 queryKey: [ 256 188 { 257 - scope: 'patchCallWithoutParametersAndResponse', 258 189 params: { 259 - body: options?.body, 260 - headers: options?.headers, 261 - path: options?.path, 262 - query: options?.query 263 - } 190 + body: options?.body ?? {}, 191 + headers: options?.headers ?? {}, 192 + path: options?.path ?? {}, 193 + query: options?.query ?? {} 194 + }, 195 + scope: 'callWithDescriptions' 264 196 } 265 197 ] 266 198 }); }; 267 199 268 - export const patchCallWithoutParametersAndResponseMutation: UseMutationOptions<void, DefaultError, Options> = { 200 + export const callWithDescriptionsMutation: UseMutationOptions<void, DefaultError, Options<CallWithDescriptionsData>> = { 269 201 mutationFn: async (options) => { 270 - const { data } = await patchCallWithoutParametersAndResponse({ 202 + const { data } = await callWithDescriptions({ 271 203 ...options, 272 204 throwOnError: true 273 205 }); ··· 275 207 } 276 208 }; 277 209 278 - export const deleteFooOptions = (options: Options<DeleteFooData3>) => { return queryOptions({ 210 + export const deprecatedCallOptions = (options: Options<DeprecatedCallData>) => { return queryOptions({ 279 211 queryFn: async ({ queryKey }) => { 280 - const { data } = await deleteFoo({ 212 + const { data } = await deprecatedCall({ 281 213 ...options, 282 214 ...queryKey[0].params, 283 215 throwOnError: true ··· 286 218 }, 287 219 queryKey: [ 288 220 { 289 - scope: 'deleteFoo', 290 221 params: { 291 - body: options.body, 292 - headers: options.headers, 293 - path: options.path, 294 - query: options.query 295 - } 222 + body: options.body ?? {}, 223 + headers: options.headers ?? {}, 224 + path: options.path ?? {}, 225 + query: options.query ?? {} 226 + }, 227 + scope: 'deprecatedCall' 296 228 } 297 229 ] 298 230 }); }; 299 231 300 - export const deleteFooMutation: UseMutationOptions<void, DefaultError, Options<DeleteFooData3>> = { 232 + export const deprecatedCallMutation: UseMutationOptions<void, DefaultError, Options<DeprecatedCallData>> = { 301 233 mutationFn: async (options) => { 302 - const { data } = await deleteFoo({ 234 + const { data } = await deprecatedCall({ 303 235 ...options, 304 236 throwOnError: true 305 237 }); ··· 307 239 } 308 240 }; 309 241 310 - export const callWithDescriptionsOptions = (options?: Options<CallWithDescriptionsData>) => { return queryOptions({ 242 + export const callWithParametersOptions = (options: Options<CallWithParametersData>) => { return queryOptions({ 311 243 queryFn: async ({ queryKey }) => { 312 - const { data } = await callWithDescriptions({ 244 + const { data } = await callWithParameters({ 313 245 ...options, 314 246 ...queryKey[0].params, 315 247 throwOnError: true ··· 318 250 }, 319 251 queryKey: [ 320 252 { 321 - scope: 'callWithDescriptions', 322 253 params: { 323 - body: options?.body, 324 - headers: options?.headers, 325 - path: options?.path, 326 - query: options?.query 327 - } 254 + body: options.body ?? {}, 255 + headers: options.headers ?? {}, 256 + path: options.path ?? {}, 257 + query: options.query ?? {} 258 + }, 259 + scope: 'callWithParameters' 328 260 } 329 261 ] 330 262 }); }; 331 263 332 - export const callWithDescriptionsMutation: UseMutationOptions<void, DefaultError, Options<CallWithDescriptionsData>> = { 333 - mutationFn: async (options) => { 334 - const { data } = await callWithDescriptions({ 335 - ...options, 336 - throwOnError: true 337 - }); 338 - return data; 264 + type QueryKey = [ 265 + { 266 + infinite?: boolean; 267 + params: { 268 + body: any; 269 + headers: any; 270 + path: any; 271 + query: any; 272 + }; 273 + scope: string; 339 274 } 340 - }; 275 + ]; 341 276 342 - export const deprecatedCallOptions = (options: Options<DeprecatedCallData>) => { return queryOptions({ 343 - queryFn: async ({ queryKey }) => { 344 - const { data } = await deprecatedCall({ 277 + export const callWithParametersInfiniteOptions = (options: Options<CallWithParametersData>) => { return infiniteQueryOptions<void, DefaultError, InfiniteData<void>, QueryKey, unknown>( 278 + // @ts-ignore 279 + { 280 + queryFn: async ({ pageParam, queryKey }) => { 281 + const { data } = await callWithParameters({ 345 282 ...options, 346 283 ...queryKey[0].params, 284 + query: { 285 + ...queryKey[0].params.query, 286 + cursor: pageParam 287 + }, 347 288 throwOnError: true 348 289 }); 349 290 return data; 350 291 }, 351 292 queryKey: [ 352 293 { 353 - scope: 'deprecatedCall', 294 + infinite: true, 354 295 params: { 355 - body: options.body, 356 - headers: options.headers, 357 - path: options.path, 358 - query: options.query 359 - } 296 + body: options.body ?? {}, 297 + headers: options.headers ?? {}, 298 + path: options.path ?? {}, 299 + query: options.query ?? {} 300 + }, 301 + scope: 'callWithParameters' 360 302 } 361 303 ] 362 304 }); }; 363 305 364 - export const deprecatedCallMutation: UseMutationOptions<void, DefaultError, Options<DeprecatedCallData>> = { 306 + export const callWithParametersMutation: UseMutationOptions<void, DefaultError, Options<CallWithParametersData>> = { 365 307 mutationFn: async (options) => { 366 - const { data } = await deprecatedCall({ 308 + const { data } = await callWithParameters({ 367 309 ...options, 368 310 throwOnError: true 369 311 }); ··· 371 313 } 372 314 }; 373 315 374 - export const callWithParametersOptions = (options: Options<CallWithParametersData>) => { return queryOptions({ 316 + export const callWithWeirdParameterNamesOptions = (options: Options<CallWithWeirdParameterNamesData>) => { return queryOptions({ 375 317 queryFn: async ({ queryKey }) => { 376 - const { data } = await callWithParameters({ 318 + const { data } = await callWithWeirdParameterNames({ 377 319 ...options, 378 320 ...queryKey[0].params, 379 321 throwOnError: true ··· 382 324 }, 383 325 queryKey: [ 384 326 { 385 - scope: 'callWithParameters', 386 327 params: { 387 - body: options.body, 388 - headers: options.headers, 389 - path: options.path, 390 - query: options.query 391 - } 328 + body: options.body ?? {}, 329 + headers: options.headers ?? {}, 330 + path: options.path ?? {}, 331 + query: options.query ?? {} 332 + }, 333 + scope: 'callWithWeirdParameterNames' 392 334 } 393 335 ] 394 336 }); }; 395 337 396 - export const callWithParametersMutation: UseMutationOptions<void, DefaultError, Options<CallWithParametersData>> = { 338 + export const callWithWeirdParameterNamesMutation: UseMutationOptions<void, DefaultError, Options<CallWithWeirdParameterNamesData>> = { 397 339 mutationFn: async (options) => { 398 - const { data } = await callWithParameters({ 340 + const { data } = await callWithWeirdParameterNames({ 399 341 ...options, 400 342 throwOnError: true 401 343 }); ··· 403 345 } 404 346 }; 405 347 406 - export const callWithWeirdParameterNamesOptions = (options: Options<CallWithWeirdParameterNamesData>) => { return queryOptions({ 348 + export const getCallWithOptionalParamOptions = (options: Options<GetCallWithOptionalParamData>) => { return queryOptions({ 407 349 queryFn: async ({ queryKey }) => { 408 - const { data } = await callWithWeirdParameterNames({ 350 + const { data } = await getCallWithOptionalParam({ 409 351 ...options, 410 352 ...queryKey[0].params, 411 353 throwOnError: true ··· 414 356 }, 415 357 queryKey: [ 416 358 { 417 - scope: 'callWithWeirdParameterNames', 418 359 params: { 419 - body: options.body, 420 - headers: options.headers, 421 - path: options.path, 422 - query: options.query 423 - } 360 + body: options.body ?? {}, 361 + headers: options.headers ?? {}, 362 + path: options.path ?? {}, 363 + query: options.query ?? {} 364 + }, 365 + scope: 'getCallWithOptionalParam' 424 366 } 425 367 ] 426 368 }); }; 427 369 428 - export const callWithWeirdParameterNamesMutation: UseMutationOptions<void, DefaultError, Options<CallWithWeirdParameterNamesData>> = { 429 - mutationFn: async (options) => { 430 - const { data } = await callWithWeirdParameterNames({ 370 + export const getCallWithOptionalParamInfiniteOptions = (options: Options<GetCallWithOptionalParamData>) => { return infiniteQueryOptions<void, DefaultError, InfiniteData<void>, QueryKey, unknown>( 371 + // @ts-ignore 372 + { 373 + queryFn: async ({ pageParam, queryKey }) => { 374 + const { data } = await getCallWithOptionalParam({ 431 375 ...options, 376 + ...queryKey[0].params, 377 + query: { 378 + ...queryKey[0].params.query, 379 + page: pageParam 380 + }, 432 381 throwOnError: true 433 382 }); 434 383 return data; 435 - } 436 - }; 384 + }, 385 + queryKey: [ 386 + { 387 + infinite: true, 388 + params: { 389 + body: options.body ?? {}, 390 + headers: options.headers ?? {}, 391 + path: options.path ?? {}, 392 + query: options.query ?? {} 393 + }, 394 + scope: 'getCallWithOptionalParam' 395 + } 396 + ] 397 + }); }; 437 398 438 - export const getCallWithOptionalParamOptions = (options: Options<GetCallWithOptionalParamData>) => { return queryOptions({ 399 + export const postCallWithOptionalParamOptions = (options: Options<PostCallWithOptionalParamData>) => { return queryOptions({ 439 400 queryFn: async ({ queryKey }) => { 440 - const { data } = await getCallWithOptionalParam({ 401 + const { data } = await postCallWithOptionalParam({ 441 402 ...options, 442 403 ...queryKey[0].params, 443 404 throwOnError: true ··· 446 407 }, 447 408 queryKey: [ 448 409 { 449 - scope: 'getCallWithOptionalParam', 450 410 params: { 451 - body: options.body, 452 - headers: options.headers, 453 - path: options.path, 454 - query: options.query 455 - } 411 + body: options.body ?? {}, 412 + headers: options.headers ?? {}, 413 + path: options.path ?? {}, 414 + query: options.query ?? {} 415 + }, 416 + scope: 'postCallWithOptionalParam' 456 417 } 457 418 ] 458 419 }); }; 459 420 460 - export const postCallWithOptionalParamOptions = (options: Options<PostCallWithOptionalParamData>) => { return queryOptions({ 461 - queryFn: async ({ queryKey }) => { 421 + export const postCallWithOptionalParamInfiniteOptions = (options: Options<PostCallWithOptionalParamData>) => { return infiniteQueryOptions<PostCallWithOptionalParamResponse, PostCallWithOptionalParamError, InfiniteData<PostCallWithOptionalParamResponse>, QueryKey, unknown>( 422 + // @ts-ignore 423 + { 424 + queryFn: async ({ pageParam, queryKey }) => { 462 425 const { data } = await postCallWithOptionalParam({ 463 426 ...options, 464 427 ...queryKey[0].params, 428 + body: { 429 + ...queryKey[0].params.body, 430 + offset: pageParam 431 + }, 465 432 throwOnError: true 466 433 }); 467 434 return data; 468 435 }, 469 436 queryKey: [ 470 437 { 471 - scope: 'postCallWithOptionalParam', 438 + infinite: true, 472 439 params: { 473 - body: options.body, 474 - headers: options.headers, 475 - path: options.path, 476 - query: options.query 477 - } 440 + body: options.body ?? {}, 441 + headers: options.headers ?? {}, 442 + path: options.path ?? {}, 443 + query: options.query ?? {} 444 + }, 445 + scope: 'postCallWithOptionalParam' 478 446 } 479 447 ] 480 448 }); }; 481 449 482 - export const postCallWithOptionalParamMutation: UseMutationOptions<void, DefaultError, Options<PostCallWithOptionalParamData>> = { 450 + export const postCallWithOptionalParamMutation: UseMutationOptions<PostCallWithOptionalParamResponse, PostCallWithOptionalParamError, Options<PostCallWithOptionalParamData>> = { 483 451 mutationFn: async (options) => { 484 452 const { data } = await postCallWithOptionalParam({ 485 453 ...options, ··· 500 468 }, 501 469 queryKey: [ 502 470 { 503 - scope: 'postApiVbyApiVersionRequestBody', 504 471 params: { 505 - body: options?.body, 506 - headers: options?.headers, 507 - path: options?.path, 508 - query: options?.query 509 - } 472 + body: options?.body ?? {}, 473 + headers: options?.headers ?? {}, 474 + path: options?.path ?? {}, 475 + query: options?.query ?? {} 476 + }, 477 + scope: 'postApiVbyApiVersionRequestBody' 510 478 } 511 479 ] 512 480 }); }; ··· 532 500 }, 533 501 queryKey: [ 534 502 { 535 - scope: 'postApiVbyApiVersionFormData', 536 503 params: { 537 - body: options?.body, 538 - headers: options?.headers, 539 - path: options?.path, 540 - query: options?.query 541 - } 504 + body: options?.body ?? {}, 505 + headers: options?.headers ?? {}, 506 + path: options?.path ?? {}, 507 + query: options?.query ?? {} 508 + }, 509 + scope: 'postApiVbyApiVersionFormData' 542 510 } 543 511 ] 544 512 }); }; ··· 564 532 }, 565 533 queryKey: [ 566 534 { 567 - scope: 'callWithDefaultParameters', 568 535 params: { 569 - body: options?.body, 570 - headers: options?.headers, 571 - path: options?.path, 572 - query: options?.query 573 - } 536 + body: options?.body ?? {}, 537 + headers: options?.headers ?? {}, 538 + path: options?.path ?? {}, 539 + query: options?.query ?? {} 540 + }, 541 + scope: 'callWithDefaultParameters' 574 542 } 575 543 ] 576 544 }); }; ··· 586 554 }, 587 555 queryKey: [ 588 556 { 589 - scope: 'callWithDefaultOptionalParameters', 590 557 params: { 591 - body: options?.body, 592 - headers: options?.headers, 593 - path: options?.path, 594 - query: options?.query 595 - } 558 + body: options?.body ?? {}, 559 + headers: options?.headers ?? {}, 560 + path: options?.path ?? {}, 561 + query: options?.query ?? {} 562 + }, 563 + scope: 'callWithDefaultOptionalParameters' 596 564 } 597 565 ] 598 566 }); }; ··· 607 575 } 608 576 }; 609 577 610 - export const callToTestOrderOfParamsOptions = (options: Options<CallToTestOrderOfParamsData>) => { return queryOptions({ 611 - queryFn: async ({ queryKey }) => { 612 - const { data } = await callToTestOrderOfParams({ 613 - ...options, 614 - ...queryKey[0].params, 615 - throwOnError: true 616 - }); 617 - return data; 618 - }, 619 - queryKey: [ 620 - { 621 - scope: 'callToTestOrderOfParams', 622 - params: { 623 - body: options.body, 624 - headers: options.headers, 625 - path: options.path, 626 - query: options.query 627 - } 628 - } 629 - ] 630 - }); }; 631 - 632 578 export const callToTestOrderOfParamsMutation: UseMutationOptions<void, DefaultError, Options<CallToTestOrderOfParamsData>> = { 633 579 mutationFn: async (options) => { 634 580 const { data } = await callToTestOrderOfParams({ ··· 650 596 }, 651 597 queryKey: [ 652 598 { 653 - scope: 'duplicateName', 654 599 params: { 655 - body: options?.body, 656 - headers: options?.headers, 657 - path: options?.path, 658 - query: options?.query 659 - } 600 + body: options?.body ?? {}, 601 + headers: options?.headers ?? {}, 602 + path: options?.path ?? {}, 603 + query: options?.query ?? {} 604 + }, 605 + scope: 'duplicateName' 660 606 } 661 607 ] 662 608 }); }; ··· 672 618 }, 673 619 queryKey: [ 674 620 { 675 - scope: 'duplicateName1', 676 621 params: { 677 - body: options?.body, 678 - headers: options?.headers, 679 - path: options?.path, 680 - query: options?.query 681 - } 622 + body: options?.body ?? {}, 623 + headers: options?.headers ?? {}, 624 + path: options?.path ?? {}, 625 + query: options?.query ?? {} 626 + }, 627 + scope: 'duplicateName1' 682 628 } 683 629 ] 684 630 }); }; ··· 693 639 } 694 640 }; 695 641 696 - export const duplicateName2Options = (options?: Options) => { return queryOptions({ 697 - queryFn: async ({ queryKey }) => { 698 - const { data } = await duplicateName2({ 699 - ...options, 700 - ...queryKey[0].params, 701 - throwOnError: true 702 - }); 703 - return data; 704 - }, 705 - queryKey: [ 706 - { 707 - scope: 'duplicateName2', 708 - params: { 709 - body: options?.body, 710 - headers: options?.headers, 711 - path: options?.path, 712 - query: options?.query 713 - } 714 - } 715 - ] 716 - }); }; 717 - 718 642 export const duplicateName2Mutation: UseMutationOptions<void, DefaultError, Options> = { 719 643 mutationFn: async (options) => { 720 644 const { data } = await duplicateName2({ ··· 725 649 } 726 650 }; 727 651 728 - export const duplicateName3Options = (options?: Options) => { return queryOptions({ 729 - queryFn: async ({ queryKey }) => { 730 - const { data } = await duplicateName3({ 731 - ...options, 732 - ...queryKey[0].params, 733 - throwOnError: true 734 - }); 735 - return data; 736 - }, 737 - queryKey: [ 738 - { 739 - scope: 'duplicateName3', 740 - params: { 741 - body: options?.body, 742 - headers: options?.headers, 743 - path: options?.path, 744 - query: options?.query 745 - } 746 - } 747 - ] 748 - }); }; 749 - 750 652 export const duplicateName3Mutation: UseMutationOptions<void, DefaultError, Options> = { 751 653 mutationFn: async (options) => { 752 654 const { data } = await duplicateName3({ ··· 768 670 }, 769 671 queryKey: [ 770 672 { 771 - scope: 'callWithNoContentResponse', 772 673 params: { 773 - body: options?.body, 774 - headers: options?.headers, 775 - path: options?.path, 776 - query: options?.query 777 - } 674 + body: options?.body ?? {}, 675 + headers: options?.headers ?? {}, 676 + path: options?.path ?? {}, 677 + query: options?.query ?? {} 678 + }, 679 + scope: 'callWithNoContentResponse' 778 680 } 779 681 ] 780 682 }); }; ··· 790 692 }, 791 693 queryKey: [ 792 694 { 793 - scope: 'callWithResponseAndNoContentResponse', 794 695 params: { 795 - body: options?.body, 796 - headers: options?.headers, 797 - path: options?.path, 798 - query: options?.query 799 - } 696 + body: options?.body ?? {}, 697 + headers: options?.headers ?? {}, 698 + path: options?.path ?? {}, 699 + query: options?.query ?? {} 700 + }, 701 + scope: 'callWithResponseAndNoContentResponse' 800 702 } 801 703 ] 802 704 }); }; ··· 812 714 }, 813 715 queryKey: [ 814 716 { 815 - scope: 'dummyA', 816 717 params: { 817 - body: options?.body, 818 - headers: options?.headers, 819 - path: options?.path, 820 - query: options?.query 821 - } 718 + body: options?.body ?? {}, 719 + headers: options?.headers ?? {}, 720 + path: options?.path ?? {}, 721 + query: options?.query ?? {} 722 + }, 723 + scope: 'dummyA' 822 724 } 823 725 ] 824 726 }); }; ··· 834 736 }, 835 737 queryKey: [ 836 738 { 837 - scope: 'dummyB', 838 739 params: { 839 - body: options?.body, 840 - headers: options?.headers, 841 - path: options?.path, 842 - query: options?.query 843 - } 740 + body: options?.body ?? {}, 741 + headers: options?.headers ?? {}, 742 + path: options?.path ?? {}, 743 + query: options?.query ?? {} 744 + }, 745 + scope: 'dummyB' 844 746 } 845 747 ] 846 748 }); }; ··· 856 758 }, 857 759 queryKey: [ 858 760 { 859 - scope: 'callWithResponse', 860 761 params: { 861 - body: options?.body, 862 - headers: options?.headers, 863 - path: options?.path, 864 - query: options?.query 865 - } 762 + body: options?.body ?? {}, 763 + headers: options?.headers ?? {}, 764 + path: options?.path ?? {}, 765 + query: options?.query ?? {} 766 + }, 767 + scope: 'callWithResponse' 866 768 } 867 769 ] 868 770 }); }; ··· 878 780 }, 879 781 queryKey: [ 880 782 { 881 - scope: 'callWithDuplicateResponses', 882 783 params: { 883 - body: options?.body, 884 - headers: options?.headers, 885 - path: options?.path, 886 - query: options?.query 887 - } 784 + body: options?.body ?? {}, 785 + headers: options?.headers ?? {}, 786 + path: options?.path ?? {}, 787 + query: options?.query ?? {} 788 + }, 789 + scope: 'callWithDuplicateResponses' 888 790 } 889 791 ] 890 792 }); }; ··· 899 801 } 900 802 }; 901 803 902 - export const callWithResponsesOptions = (options?: Options) => { return queryOptions({ 903 - queryFn: async ({ queryKey }) => { 904 - const { data } = await callWithResponses({ 905 - ...options, 906 - ...queryKey[0].params, 907 - throwOnError: true 908 - }); 909 - return data; 910 - }, 911 - queryKey: [ 912 - { 913 - scope: 'callWithResponses', 914 - params: { 915 - body: options?.body, 916 - headers: options?.headers, 917 - path: options?.path, 918 - query: options?.query 919 - } 920 - } 921 - ] 922 - }); }; 923 - 924 804 export const callWithResponsesMutation: UseMutationOptions<CallWithResponsesResponse, CallWithResponsesError, Options> = { 925 805 mutationFn: async (options) => { 926 806 const { data } = await callWithResponses({ ··· 942 822 }, 943 823 queryKey: [ 944 824 { 945 - scope: 'collectionFormat', 946 825 params: { 947 - body: options.body, 948 - headers: options.headers, 949 - path: options.path, 950 - query: options.query 951 - } 826 + body: options.body ?? {}, 827 + headers: options.headers ?? {}, 828 + path: options.path ?? {}, 829 + query: options.query ?? {} 830 + }, 831 + scope: 'collectionFormat' 952 832 } 953 833 ] 954 834 }); }; ··· 964 844 }, 965 845 queryKey: [ 966 846 { 967 - scope: 'types', 968 847 params: { 969 - body: options.body, 970 - headers: options.headers, 971 - path: options.path, 972 - query: options.query 973 - } 848 + body: options.body ?? {}, 849 + headers: options.headers ?? {}, 850 + path: options.path ?? {}, 851 + query: options.query ?? {} 852 + }, 853 + scope: 'types' 974 854 } 975 855 ] 976 856 }); }; ··· 986 866 }, 987 867 queryKey: [ 988 868 { 989 - scope: 'uploadFile', 990 869 params: { 991 - body: options.body, 992 - headers: options.headers, 993 - path: options.path, 994 - query: options.query 995 - } 870 + body: options.body ?? {}, 871 + headers: options.headers ?? {}, 872 + path: options.path ?? {}, 873 + query: options.query ?? {} 874 + }, 875 + scope: 'uploadFile' 996 876 } 997 877 ] 998 878 }); }; ··· 1018 898 }, 1019 899 queryKey: [ 1020 900 { 1021 - scope: 'fileResponse', 1022 901 params: { 1023 - body: options.body, 1024 - headers: options.headers, 1025 - path: options.path, 1026 - query: options.query 1027 - } 902 + body: options.body ?? {}, 903 + headers: options.headers ?? {}, 904 + path: options.path ?? {}, 905 + query: options.query ?? {} 906 + }, 907 + scope: 'fileResponse' 1028 908 } 1029 909 ] 1030 910 }); }; ··· 1040 920 }, 1041 921 queryKey: [ 1042 922 { 1043 - scope: 'complexTypes', 1044 923 params: { 1045 - body: options.body, 1046 - headers: options.headers, 1047 - path: options.path, 1048 - query: options.query 1049 - } 924 + body: options.body ?? {}, 925 + headers: options.headers ?? {}, 926 + path: options.path ?? {}, 927 + query: options.query ?? {} 928 + }, 929 + scope: 'complexTypes' 1050 930 } 1051 931 ] 1052 932 }); }; ··· 1062 942 }, 1063 943 queryKey: [ 1064 944 { 1065 - scope: 'multipartRequest', 1066 945 params: { 1067 - body: options?.body, 1068 - headers: options?.headers, 1069 - path: options?.path, 1070 - query: options?.query 1071 - } 946 + body: options?.body ?? {}, 947 + headers: options?.headers ?? {}, 948 + path: options?.path ?? {}, 949 + query: options?.query ?? {} 950 + }, 951 + scope: 'multipartRequest' 1072 952 } 1073 953 ] 1074 954 }); }; ··· 1094 974 }, 1095 975 queryKey: [ 1096 976 { 1097 - scope: 'multipartResponse', 1098 977 params: { 1099 - body: options?.body, 1100 - headers: options?.headers, 1101 - path: options?.path, 1102 - query: options?.query 1103 - } 1104 - } 1105 - ] 1106 - }); }; 1107 - 1108 - export const complexParamsOptions = (options: Options<ComplexParamsData>) => { return queryOptions({ 1109 - queryFn: async ({ queryKey }) => { 1110 - const { data } = await complexParams({ 1111 - ...options, 1112 - ...queryKey[0].params, 1113 - throwOnError: true 1114 - }); 1115 - return data; 1116 - }, 1117 - queryKey: [ 1118 - { 1119 - scope: 'complexParams', 1120 - params: { 1121 - body: options.body, 1122 - headers: options.headers, 1123 - path: options.path, 1124 - query: options.query 1125 - } 978 + body: options?.body ?? {}, 979 + headers: options?.headers ?? {}, 980 + path: options?.path ?? {}, 981 + query: options?.query ?? {} 982 + }, 983 + scope: 'multipartResponse' 1126 984 } 1127 985 ] 1128 986 }); }; ··· 1148 1006 }, 1149 1007 queryKey: [ 1150 1008 { 1151 - scope: 'callWithResultFromHeader', 1152 1009 params: { 1153 - body: options?.body, 1154 - headers: options?.headers, 1155 - path: options?.path, 1156 - query: options?.query 1157 - } 1010 + body: options?.body ?? {}, 1011 + headers: options?.headers ?? {}, 1012 + path: options?.path ?? {}, 1013 + query: options?.query ?? {} 1014 + }, 1015 + scope: 'callWithResultFromHeader' 1158 1016 } 1159 1017 ] 1160 1018 }); }; ··· 1180 1038 }, 1181 1039 queryKey: [ 1182 1040 { 1183 - scope: 'testErrorCode', 1184 1041 params: { 1185 - body: options.body, 1186 - headers: options.headers, 1187 - path: options.path, 1188 - query: options.query 1189 - } 1042 + body: options.body ?? {}, 1043 + headers: options.headers ?? {}, 1044 + path: options.path ?? {}, 1045 + query: options.query ?? {} 1046 + }, 1047 + scope: 'testErrorCode' 1190 1048 } 1191 1049 ] 1192 1050 }); }; ··· 1212 1070 }, 1213 1071 queryKey: [ 1214 1072 { 1215 - scope: 'nonAsciiæøåÆøÅöôêÊ字符串', 1216 1073 params: { 1217 - body: options.body, 1218 - headers: options.headers, 1219 - path: options.path, 1220 - query: options.query 1221 - } 1074 + body: options.body ?? {}, 1075 + headers: options.headers ?? {}, 1076 + path: options.path ?? {}, 1077 + query: options.query ?? {} 1078 + }, 1079 + scope: 'nonAsciiæøåÆøÅöôêÊ字符串' 1222 1080 } 1223 1081 ] 1224 1082 }); }; ··· 1232 1090 return data; 1233 1091 } 1234 1092 }; 1235 - 1236 - export const putWithFormUrlEncodedOptions = (options: Options<PutWithFormUrlEncodedData>) => { return queryOptions({ 1237 - queryFn: async ({ queryKey }) => { 1238 - const { data } = await putWithFormUrlEncoded({ 1239 - ...options, 1240 - ...queryKey[0].params, 1241 - throwOnError: true 1242 - }); 1243 - return data; 1244 - }, 1245 - queryKey: [ 1246 - { 1247 - scope: 'putWithFormUrlEncoded', 1248 - params: { 1249 - body: options.body, 1250 - headers: options.headers, 1251 - path: options.path, 1252 - query: options.query 1253 - } 1254 - } 1255 - ] 1256 - }); }; 1257 1093 1258 1094 export const putWithFormUrlEncodedMutation: UseMutationOptions<void, DefaultError, Options<PutWithFormUrlEncodedData>> = { 1259 1095 mutationFn: async (options) => {
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch-plugin-tanstack-react-query/services.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import { createClient, createConfig, type Options, formDataBodySerializer, urlSearchParamsBodySerializer } from '@hey-api/client-fetch'; 4 - import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 4 + import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 5 5 6 6 export const client = createClient(createConfig()); 7 7 ··· 88 88 url: '/api/v{api-version}/parameters/' 89 89 }); }; 90 90 91 - export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, void>({ 91 + export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, PostCallWithOptionalParamResponse, PostCallWithOptionalParamError>({ 92 92 ...options, 93 93 url: '/api/v{api-version}/parameters/' 94 94 }); };
+24 -8
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch-plugin-tanstack-react-query/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1126 1126 parameterPath: string | null; 1127 1127 }; 1128 1128 query: { 1129 - foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1130 - foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1131 1129 /** 1132 1130 * This is the parameter that goes into the query params 1133 1131 */ 1134 - parameterQuery: string | null; 1132 + cursor: string | null; 1133 + foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1134 + foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1135 1135 }; 1136 1136 }; 1137 1137 ··· 1185 1185 /** 1186 1186 * This is an optional parameter 1187 1187 */ 1188 - parameter?: string; 1188 + page?: number; 1189 1189 }; 1190 1190 }; 1191 1191 ··· 1193 1193 /** 1194 1194 * This is an optional parameter 1195 1195 */ 1196 - body?: ModelWithString; 1196 + body?: { 1197 + offset?: number | null; 1198 + }; 1197 1199 query: { 1198 1200 /** 1199 1201 * This is a required parameter ··· 1201 1203 parameter: Pageable; 1202 1204 }; 1203 1205 }; 1206 + 1207 + export type PostCallWithOptionalParamResponse = number | void; 1208 + 1209 + export type PostCallWithOptionalParamError = unknown; 1204 1210 1205 1211 export type PostApiVbyApiVersionRequestBodyData = { 1206 1212 /** ··· 1607 1613 }; 1608 1614 post: { 1609 1615 req: PostCallWithOptionalParamData; 1616 + res: { 1617 + /** 1618 + * Response is a simple number 1619 + */ 1620 + '200': number; 1621 + /** 1622 + * Success 1623 + */ 1624 + '204': void; 1625 + }; 1610 1626 }; 1611 1627 }; 1612 1628 '/api/v{api-version}/requestBody/': {
+7 -117
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch-plugin-tanstack-react-query_transform/@tanstack/query.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import type { Options } from '@hey-api/client-fetch'; 4 - import { type UseMutationOptions, queryOptions } from '@tanstack/react-query'; 4 + import { queryOptions, type UseMutationOptions } from '@tanstack/react-query'; 5 5 import { parentModelWithDates, modelWithDates, modelWithDatesArray, arrayOfDates, date, multipleResponses } from '../services.gen'; 6 6 import type { ParentModelWithDatesError, ParentModelWithDatesResponse, ModelWithDatesError, ModelWithDatesResponse, ModelWithDatesArrayError, ModelWithDatesArrayResponse, ArrayOfDatesError, ArrayOfDatesResponse, DateError, DateResponse, MultipleResponsesError, MultipleResponsesResponse } from '../types.gen'; 7 7 ··· 16 16 }, 17 17 queryKey: [ 18 18 { 19 - scope: 'parentModelWithDates', 20 19 params: { 21 - body: options?.body, 22 - headers: options?.headers, 23 - path: options?.path, 24 - query: options?.query 25 - } 20 + body: options?.body ?? {}, 21 + headers: options?.headers ?? {}, 22 + path: options?.path ?? {}, 23 + query: options?.query ?? {} 24 + }, 25 + scope: 'parentModelWithDates' 26 26 } 27 27 ] 28 28 }); }; ··· 37 37 } 38 38 }; 39 39 40 - export const modelWithDatesOptions = (options?: Options) => { return queryOptions({ 41 - queryFn: async ({ queryKey }) => { 42 - const { data } = await modelWithDates({ 43 - ...options, 44 - ...queryKey[0].params, 45 - throwOnError: true 46 - }); 47 - return data; 48 - }, 49 - queryKey: [ 50 - { 51 - scope: 'modelWithDates', 52 - params: { 53 - body: options?.body, 54 - headers: options?.headers, 55 - path: options?.path, 56 - query: options?.query 57 - } 58 - } 59 - ] 60 - }); }; 61 - 62 40 export const modelWithDatesMutation: UseMutationOptions<ModelWithDatesResponse, ModelWithDatesError, Options> = { 63 41 mutationFn: async (options) => { 64 42 const { data } = await modelWithDates({ ··· 69 47 } 70 48 }; 71 49 72 - export const modelWithDatesArrayOptions = (options?: Options) => { return queryOptions({ 73 - queryFn: async ({ queryKey }) => { 74 - const { data } = await modelWithDatesArray({ 75 - ...options, 76 - ...queryKey[0].params, 77 - throwOnError: true 78 - }); 79 - return data; 80 - }, 81 - queryKey: [ 82 - { 83 - scope: 'modelWithDatesArray', 84 - params: { 85 - body: options?.body, 86 - headers: options?.headers, 87 - path: options?.path, 88 - query: options?.query 89 - } 90 - } 91 - ] 92 - }); }; 93 - 94 50 export const modelWithDatesArrayMutation: UseMutationOptions<ModelWithDatesArrayResponse, ModelWithDatesArrayError, Options> = { 95 51 mutationFn: async (options) => { 96 52 const { data } = await modelWithDatesArray({ ··· 101 57 } 102 58 }; 103 59 104 - export const arrayOfDatesOptions = (options?: Options) => { return queryOptions({ 105 - queryFn: async ({ queryKey }) => { 106 - const { data } = await arrayOfDates({ 107 - ...options, 108 - ...queryKey[0].params, 109 - throwOnError: true 110 - }); 111 - return data; 112 - }, 113 - queryKey: [ 114 - { 115 - scope: 'arrayOfDates', 116 - params: { 117 - body: options?.body, 118 - headers: options?.headers, 119 - path: options?.path, 120 - query: options?.query 121 - } 122 - } 123 - ] 124 - }); }; 125 - 126 60 export const arrayOfDatesMutation: UseMutationOptions<ArrayOfDatesResponse, ArrayOfDatesError, Options> = { 127 61 mutationFn: async (options) => { 128 62 const { data } = await arrayOfDates({ ··· 133 67 } 134 68 }; 135 69 136 - export const dateOptions = (options?: Options) => { return queryOptions({ 137 - queryFn: async ({ queryKey }) => { 138 - const { data } = await date({ 139 - ...options, 140 - ...queryKey[0].params, 141 - throwOnError: true 142 - }); 143 - return data; 144 - }, 145 - queryKey: [ 146 - { 147 - scope: 'date', 148 - params: { 149 - body: options?.body, 150 - headers: options?.headers, 151 - path: options?.path, 152 - query: options?.query 153 - } 154 - } 155 - ] 156 - }); }; 157 - 158 70 export const dateMutation: UseMutationOptions<DateResponse, DateError, Options> = { 159 71 mutationFn: async (options) => { 160 72 const { data } = await date({ ··· 164 76 return data; 165 77 } 166 78 }; 167 - 168 - export const multipleResponsesOptions = (options?: Options) => { return queryOptions({ 169 - queryFn: async ({ queryKey }) => { 170 - const { data } = await multipleResponses({ 171 - ...options, 172 - ...queryKey[0].params, 173 - throwOnError: true 174 - }); 175 - return data; 176 - }, 177 - queryKey: [ 178 - { 179 - scope: 'multipleResponses', 180 - params: { 181 - body: options?.body, 182 - headers: options?.headers, 183 - path: options?.path, 184 - query: options?.query 185 - } 186 - } 187 - ] 188 - }); }; 189 79 190 80 export const multipleResponsesMutation: UseMutationOptions<MultipleResponsesResponse, MultipleResponsesError, Options> = { 191 81 mutationFn: async (options) => {
+2 -2
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch/services.gen.ts.snap
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import { createClient, createConfig, type Options, formDataBodySerializer, urlSearchParamsBodySerializer } from '@hey-api/client-fetch'; 4 - import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 4 + import type { ImportData, ImportError, ImportResponse, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamError, PostCallWithOptionalParamResponse, PostApiVbyApiVersionRequestBodyData, PostApiVbyApiVersionFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Error, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 5 5 6 6 export const client = createClient(createConfig()); 7 7 ··· 88 88 url: '/api/v{api-version}/parameters/' 89 89 }); }; 90 90 91 - export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, void>({ 91 + export const postCallWithOptionalParam = <ThrowOnError extends boolean = false>(options: Options<PostCallWithOptionalParamData, ThrowOnError>) => { return (options?.client ?? client).post<ThrowOnError, PostCallWithOptionalParamResponse, PostCallWithOptionalParamError>({ 92 92 ...options, 93 93 url: '/api/v{api-version}/parameters/' 94 94 }); };
+24 -8
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-fetch/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1126 1126 parameterPath: string | null; 1127 1127 }; 1128 1128 query: { 1129 - foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1130 - foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1131 1129 /** 1132 1130 * This is the parameter that goes into the query params 1133 1131 */ 1134 - parameterQuery: string | null; 1132 + cursor: string | null; 1133 + foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; 1134 + foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; 1135 1135 }; 1136 1136 }; 1137 1137 ··· 1185 1185 /** 1186 1186 * This is an optional parameter 1187 1187 */ 1188 - parameter?: string; 1188 + page?: number; 1189 1189 }; 1190 1190 }; 1191 1191 ··· 1193 1193 /** 1194 1194 * This is an optional parameter 1195 1195 */ 1196 - body?: ModelWithString; 1196 + body?: { 1197 + offset?: number | null; 1198 + }; 1197 1199 query: { 1198 1200 /** 1199 1201 * This is a required parameter ··· 1201 1203 parameter: Pageable; 1202 1204 }; 1203 1205 }; 1206 + 1207 + export type PostCallWithOptionalParamResponse = number | void; 1208 + 1209 + export type PostCallWithOptionalParamError = unknown; 1204 1210 1205 1211 export type PostApiVbyApiVersionRequestBodyData = { 1206 1212 /** ··· 1607 1613 }; 1608 1614 post: { 1609 1615 req: PostCallWithOptionalParamData; 1616 + res: { 1617 + /** 1618 + * Response is a simple number 1619 + */ 1620 + '200': number; 1621 + /** 1622 + * Success 1623 + */ 1624 + '204': void; 1625 + }; 1610 1626 }; 1611 1627 }; 1612 1628 '/api/v{api-version}/requestBody/': {
+8 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 6 + import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 7 7 8 8 export class DefaultService { 9 9 /** ··· 144 144 * @param data The data for the request. 145 145 * @param data.parameterHeader This is the parameter that goes into the header 146 146 * @param data.fooAllOfEnum 147 - * @param data.parameterQuery This is the parameter that goes into the query params 147 + * @param data.cursor This is the parameter that goes into the query params 148 148 * @param data.parameterCookie This is the parameter that goes into the cookie 149 149 * @param data.parameterPath This is the parameter that goes into the path 150 150 * @param data.requestBody This is the parameter that goes into the body ··· 167 167 query: { 168 168 foo_ref_enum: data.fooRefEnum, 169 169 foo_all_of_enum: data.fooAllOfEnum, 170 - parameterQuery: data.parameterQuery 170 + cursor: data.cursor 171 171 }, 172 172 body: data.requestBody, 173 173 mediaType: 'application/json' ··· 213 213 /** 214 214 * @param data The data for the request. 215 215 * @param data.requestBody This is a required parameter 216 - * @param data.parameter This is an optional parameter 216 + * @param data.page This is an optional parameter 217 217 * @throws ApiError 218 218 */ 219 219 public static getCallWithOptionalParam(data: GetCallWithOptionalParamData): CancelablePromise<void> { ··· 221 221 method: 'GET', 222 222 url: '/api/v{api-version}/parameters/', 223 223 query: { 224 - parameter: data.parameter 224 + page: data.page 225 225 }, 226 226 body: data.requestBody, 227 227 mediaType: 'application/json' ··· 232 232 * @param data The data for the request. 233 233 * @param data.parameter This is a required parameter 234 234 * @param data.requestBody This is an optional parameter 235 + * @returns number Response is a simple number 236 + * @returns void Success 235 237 * @throws ApiError 236 238 */ 237 - public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<void> { 239 + public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<PostCallWithOptionalParamResponse> { 238 240 return __request(OpenAPI, { 239 241 method: 'POST', 240 242 url: '/api/v{api-version}/parameters/',
+23 -9
packages/openapi-ts/test/__snapshots__/test/generated/v3/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1053 1053 }; 1054 1054 1055 1055 export type CallWithParametersData = { 1056 + /** 1057 + * This is the parameter that goes into the query params 1058 + */ 1059 + cursor: string | null; 1056 1060 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 1057 1061 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 1058 1062 /** ··· 1067 1071 * This is the parameter that goes into the path 1068 1072 */ 1069 1073 parameterPath: string | null; 1070 - /** 1071 - * This is the parameter that goes into the query params 1072 - */ 1073 - parameterQuery: string | null; 1074 1074 /** 1075 1075 * This is the parameter that goes into the body 1076 1076 */ ··· 1118 1118 /** 1119 1119 * This is an optional parameter 1120 1120 */ 1121 - parameter?: string; 1121 + page?: number; 1122 1122 /** 1123 1123 * This is a required parameter 1124 1124 */ ··· 1133 1133 /** 1134 1134 * This is an optional parameter 1135 1135 */ 1136 - requestBody?: ModelWithString; 1136 + requestBody?: { 1137 + offset?: number | null; 1138 + }; 1137 1139 }; 1140 + 1141 + export type PostCallWithOptionalParamResponse = number | void; 1138 1142 1139 1143 export type CallWithDescriptionsData = { 1140 1144 /** ··· 1497 1501 }; 1498 1502 post: { 1499 1503 req: PostCallWithOptionalParamData; 1504 + res: { 1505 + /** 1506 + * Response is a simple number 1507 + */ 1508 + 200: number; 1509 + /** 1510 + * Success 1511 + */ 1512 + 204: void; 1513 + }; 1500 1514 }; 1501 1515 }; 1502 1516 '/api/v{api-version}/descriptions/': {
+8 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/services.gen.ts.snap
··· 5 5 import type { Observable } from 'rxjs'; 6 6 import { OpenAPI } from './core/OpenAPI'; 7 7 import { request as __request } from './core/request'; 8 - import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 8 + import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 9 9 10 10 @Injectable({ 11 11 providedIn: 'root' ··· 161 161 * @param data The data for the request. 162 162 * @param data.parameterHeader This is the parameter that goes into the header 163 163 * @param data.fooAllOfEnum 164 - * @param data.parameterQuery This is the parameter that goes into the query params 164 + * @param data.cursor This is the parameter that goes into the query params 165 165 * @param data.parameterCookie This is the parameter that goes into the cookie 166 166 * @param data.parameterPath This is the parameter that goes into the path 167 167 * @param data.requestBody This is the parameter that goes into the body ··· 184 184 query: { 185 185 foo_ref_enum: data.fooRefEnum, 186 186 foo_all_of_enum: data.fooAllOfEnum, 187 - parameterQuery: data.parameterQuery 187 + cursor: data.cursor 188 188 }, 189 189 body: data.requestBody, 190 190 mediaType: 'application/json' ··· 230 230 /** 231 231 * @param data The data for the request. 232 232 * @param data.requestBody This is a required parameter 233 - * @param data.parameter This is an optional parameter 233 + * @param data.page This is an optional parameter 234 234 * @throws ApiError 235 235 */ 236 236 public getCallWithOptionalParam(data: GetCallWithOptionalParamData): Observable<void> { ··· 238 238 method: 'GET', 239 239 url: '/api/v{api-version}/parameters/', 240 240 query: { 241 - parameter: data.parameter 241 + page: data.page 242 242 }, 243 243 body: data.requestBody, 244 244 mediaType: 'application/json' ··· 249 249 * @param data The data for the request. 250 250 * @param data.parameter This is a required parameter 251 251 * @param data.requestBody This is an optional parameter 252 + * @returns number Response is a simple number 253 + * @returns void Success 252 254 * @throws ApiError 253 255 */ 254 - public postCallWithOptionalParam(data: PostCallWithOptionalParamData): Observable<void> { 256 + public postCallWithOptionalParam(data: PostCallWithOptionalParamData): Observable<PostCallWithOptionalParamResponse> { 255 257 return __request(OpenAPI, this.http, { 256 258 method: 'POST', 257 259 url: '/api/v{api-version}/parameters/',
+20 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/types.gen.ts.snap
··· 930 930 }; 931 931 932 932 export type CallWithParametersData = { 933 + /** 934 + * This is the parameter that goes into the query params 935 + */ 936 + cursor: string | null; 933 937 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 934 938 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 935 939 /** ··· 944 948 * This is the parameter that goes into the path 945 949 */ 946 950 parameterPath: string | null; 947 - /** 948 - * This is the parameter that goes into the query params 949 - */ 950 - parameterQuery: string | null; 951 951 /** 952 952 * This is the parameter that goes into the body 953 953 */ ··· 995 995 /** 996 996 * This is an optional parameter 997 997 */ 998 - parameter?: string; 998 + page?: number; 999 999 /** 1000 1000 * This is a required parameter 1001 1001 */ ··· 1010 1010 /** 1011 1011 * This is an optional parameter 1012 1012 */ 1013 - requestBody?: ModelWithString; 1013 + requestBody?: { 1014 + offset?: number | null; 1015 + }; 1014 1016 }; 1017 + 1018 + export type PostCallWithOptionalParamResponse = number | void; 1015 1019 1016 1020 export type CallWithDescriptionsData = { 1017 1021 /** ··· 1374 1378 }; 1375 1379 post: { 1376 1380 req: PostCallWithOptionalParamData; 1381 + res: { 1382 + /** 1383 + * Response is a simple number 1384 + */ 1385 + 200: number; 1386 + /** 1387 + * Success 1388 + */ 1389 + 204: void; 1390 + }; 1377 1391 }; 1378 1392 }; 1379 1393 '/api/v{api-version}/descriptions/': {
+8 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 6 + import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 7 7 8 8 export class DefaultService { 9 9 /** ··· 144 144 * @param data The data for the request. 145 145 * @param data.parameterHeader This is the parameter that goes into the header 146 146 * @param data.fooAllOfEnum 147 - * @param data.parameterQuery This is the parameter that goes into the query params 147 + * @param data.cursor This is the parameter that goes into the query params 148 148 * @param data.parameterCookie This is the parameter that goes into the cookie 149 149 * @param data.parameterPath This is the parameter that goes into the path 150 150 * @param data.requestBody This is the parameter that goes into the body ··· 167 167 query: { 168 168 foo_ref_enum: data.fooRefEnum, 169 169 foo_all_of_enum: data.fooAllOfEnum, 170 - parameterQuery: data.parameterQuery 170 + cursor: data.cursor 171 171 }, 172 172 body: data.requestBody, 173 173 mediaType: 'application/json' ··· 213 213 /** 214 214 * @param data The data for the request. 215 215 * @param data.requestBody This is a required parameter 216 - * @param data.parameter This is an optional parameter 216 + * @param data.page This is an optional parameter 217 217 * @throws ApiError 218 218 */ 219 219 public static getCallWithOptionalParam(data: GetCallWithOptionalParamData): CancelablePromise<void> { ··· 221 221 method: 'GET', 222 222 url: '/api/v{api-version}/parameters/', 223 223 query: { 224 - parameter: data.parameter 224 + page: data.page 225 225 }, 226 226 body: data.requestBody, 227 227 mediaType: 'application/json' ··· 232 232 * @param data The data for the request. 233 233 * @param data.parameter This is a required parameter 234 234 * @param data.requestBody This is an optional parameter 235 + * @returns number Response is a simple number 236 + * @returns void Success 235 237 * @throws ApiError 236 238 */ 237 - public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<void> { 239 + public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<PostCallWithOptionalParamResponse> { 238 240 return __request(OpenAPI, { 239 241 method: 'POST', 240 242 url: '/api/v{api-version}/parameters/',
+23 -9
packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1053 1053 }; 1054 1054 1055 1055 export type CallWithParametersData = { 1056 + /** 1057 + * This is the parameter that goes into the query params 1058 + */ 1059 + cursor: string | null; 1056 1060 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 1057 1061 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 1058 1062 /** ··· 1067 1071 * This is the parameter that goes into the path 1068 1072 */ 1069 1073 parameterPath: string | null; 1070 - /** 1071 - * This is the parameter that goes into the query params 1072 - */ 1073 - parameterQuery: string | null; 1074 1074 /** 1075 1075 * This is the parameter that goes into the body 1076 1076 */ ··· 1118 1118 /** 1119 1119 * This is an optional parameter 1120 1120 */ 1121 - parameter?: string; 1121 + page?: number; 1122 1122 /** 1123 1123 * This is a required parameter 1124 1124 */ ··· 1133 1133 /** 1134 1134 * This is an optional parameter 1135 1135 */ 1136 - requestBody?: ModelWithString; 1136 + requestBody?: { 1137 + offset?: number | null; 1138 + }; 1137 1139 }; 1140 + 1141 + export type PostCallWithOptionalParamResponse = number | void; 1138 1142 1139 1143 export type CallWithDescriptionsData = { 1140 1144 /** ··· 1497 1501 }; 1498 1502 post: { 1499 1503 req: PostCallWithOptionalParamData; 1504 + res: { 1505 + /** 1506 + * Response is a simple number 1507 + */ 1508 + 200: number; 1509 + /** 1510 + * Success 1511 + */ 1512 + 204: void; 1513 + }; 1500 1514 }; 1501 1515 }; 1502 1516 '/api/v{api-version}/descriptions/': {
+8 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_client/services.gen.ts.snap
··· 2 2 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import type { BaseHttpRequest } from './core/BaseHttpRequest'; 5 - import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 5 + import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 6 6 7 7 export class DefaultService { 8 8 constructor(public readonly httpRequest: BaseHttpRequest) { } ··· 149 149 * @param data The data for the request. 150 150 * @param data.parameterHeader This is the parameter that goes into the header 151 151 * @param data.fooAllOfEnum 152 - * @param data.parameterQuery This is the parameter that goes into the query params 152 + * @param data.cursor This is the parameter that goes into the query params 153 153 * @param data.parameterCookie This is the parameter that goes into the cookie 154 154 * @param data.parameterPath This is the parameter that goes into the path 155 155 * @param data.requestBody This is the parameter that goes into the body ··· 172 172 query: { 173 173 foo_ref_enum: data.fooRefEnum, 174 174 foo_all_of_enum: data.fooAllOfEnum, 175 - parameterQuery: data.parameterQuery 175 + cursor: data.cursor 176 176 }, 177 177 body: data.requestBody, 178 178 mediaType: 'application/json' ··· 218 218 /** 219 219 * @param data The data for the request. 220 220 * @param data.requestBody This is a required parameter 221 - * @param data.parameter This is an optional parameter 221 + * @param data.page This is an optional parameter 222 222 * @throws ApiError 223 223 */ 224 224 public getCallWithOptionalParam(data: GetCallWithOptionalParamData): CancelablePromise<void> { ··· 226 226 method: 'GET', 227 227 url: '/api/v{api-version}/parameters/', 228 228 query: { 229 - parameter: data.parameter 229 + page: data.page 230 230 }, 231 231 body: data.requestBody, 232 232 mediaType: 'application/json' ··· 237 237 * @param data The data for the request. 238 238 * @param data.parameter This is a required parameter 239 239 * @param data.requestBody This is an optional parameter 240 + * @returns number Response is a simple number 241 + * @returns void Success 240 242 * @throws ApiError 241 243 */ 242 - public postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<void> { 244 + public postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<PostCallWithOptionalParamResponse> { 243 245 return this.httpRequest.request({ 244 246 method: 'POST', 245 247 url: '/api/v{api-version}/parameters/',
+20 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_client/types.gen.ts.snap
··· 930 930 }; 931 931 932 932 export type CallWithParametersData = { 933 + /** 934 + * This is the parameter that goes into the query params 935 + */ 936 + cursor: string | null; 933 937 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 934 938 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 935 939 /** ··· 944 948 * This is the parameter that goes into the path 945 949 */ 946 950 parameterPath: string | null; 947 - /** 948 - * This is the parameter that goes into the query params 949 - */ 950 - parameterQuery: string | null; 951 951 /** 952 952 * This is the parameter that goes into the body 953 953 */ ··· 995 995 /** 996 996 * This is an optional parameter 997 997 */ 998 - parameter?: string; 998 + page?: number; 999 999 /** 1000 1000 * This is a required parameter 1001 1001 */ ··· 1010 1010 /** 1011 1011 * This is an optional parameter 1012 1012 */ 1013 - requestBody?: ModelWithString; 1013 + requestBody?: { 1014 + offset?: number | null; 1015 + }; 1014 1016 }; 1017 + 1018 + export type PostCallWithOptionalParamResponse = number | void; 1015 1019 1016 1020 export type CallWithDescriptionsData = { 1017 1021 /** ··· 1374 1378 }; 1375 1379 post: { 1376 1380 req: PostCallWithOptionalParamData; 1381 + res: { 1382 + /** 1383 + * Response is a simple number 1384 + */ 1385 + 200: number; 1386 + /** 1387 + * Success 1388 + */ 1389 + 204: void; 1390 + }; 1377 1391 }; 1378 1392 }; 1379 1393 '/api/v{api-version}/descriptions/': {
+20 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_date/types.gen.ts.snap
··· 77 77 }; 78 78 79 79 export type CallWithParametersData = { 80 + /** 81 + * This is the parameter that goes into the query params 82 + */ 83 + cursor: string | null; 80 84 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 81 85 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 82 86 /** ··· 91 95 * This is the parameter that goes into the path 92 96 */ 93 97 parameterPath: string | null; 94 - /** 95 - * This is the parameter that goes into the query params 96 - */ 97 - parameterQuery: string | null; 98 98 /** 99 99 * This is the parameter that goes into the body 100 100 */ ··· 142 142 /** 143 143 * This is an optional parameter 144 144 */ 145 - parameter?: string; 145 + page?: number; 146 146 /** 147 147 * This is a required parameter 148 148 */ ··· 157 157 /** 158 158 * This is an optional parameter 159 159 */ 160 - requestBody?: ModelWithString; 160 + requestBody?: { 161 + offset?: number | null; 162 + }; 161 163 }; 164 + 165 + export type PostCallWithOptionalParamResponse = number | void; 162 166 163 167 export type PostApiRequestBodyData = { 164 168 /** ··· 493 497 }; 494 498 post: { 495 499 req: PostCallWithOptionalParamData; 500 + res: { 501 + /** 502 + * Response is a simple number 503 + */ 504 + 200: number; 505 + /** 506 + * Success 507 + */ 508 + 204: void; 509 + }; 496 510 }; 497 511 }; 498 512 '/api/v{api-version}/requestBody/': {
+8 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 6 + import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 7 7 8 8 export class DefaultService { 9 9 /** ··· 144 144 * @param data The data for the request. 145 145 * @param data.parameterHeader This is the parameter that goes into the header 146 146 * @param data.fooAllOfEnum 147 - * @param data.parameterQuery This is the parameter that goes into the query params 147 + * @param data.cursor This is the parameter that goes into the query params 148 148 * @param data.parameterCookie This is the parameter that goes into the cookie 149 149 * @param data.parameterPath This is the parameter that goes into the path 150 150 * @param data.requestBody This is the parameter that goes into the body ··· 167 167 query: { 168 168 foo_ref_enum: data.fooRefEnum, 169 169 foo_all_of_enum: data.fooAllOfEnum, 170 - parameterQuery: data.parameterQuery 170 + cursor: data.cursor 171 171 }, 172 172 body: data.requestBody, 173 173 mediaType: 'application/json' ··· 213 213 /** 214 214 * @param data The data for the request. 215 215 * @param data.requestBody This is a required parameter 216 - * @param data.parameter This is an optional parameter 216 + * @param data.page This is an optional parameter 217 217 * @throws ApiError 218 218 */ 219 219 public static getCallWithOptionalParam(data: GetCallWithOptionalParamData): CancelablePromise<void> { ··· 221 221 method: 'GET', 222 222 url: '/api/v{api-version}/parameters/', 223 223 query: { 224 - parameter: data.parameter 224 + page: data.page 225 225 }, 226 226 body: data.requestBody, 227 227 mediaType: 'application/json' ··· 232 232 * @param data The data for the request. 233 233 * @param data.parameter This is a required parameter 234 234 * @param data.requestBody This is an optional parameter 235 + * @returns number Response is a simple number 236 + * @returns void Success 235 237 * @throws ApiError 236 238 */ 237 - public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<void> { 239 + public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<PostCallWithOptionalParamResponse> { 238 240 return __request(OpenAPI, { 239 241 method: 'POST', 240 242 url: '/api/v{api-version}/parameters/',
+20 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/types.gen.ts.snap
··· 1009 1009 }; 1010 1010 1011 1011 export type CallWithParametersData = { 1012 + /** 1013 + * This is the parameter that goes into the query params 1014 + */ 1015 + cursor: string | null; 1012 1016 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 1013 1017 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 1014 1018 /** ··· 1023 1027 * This is the parameter that goes into the path 1024 1028 */ 1025 1029 parameterPath: string | null; 1026 - /** 1027 - * This is the parameter that goes into the query params 1028 - */ 1029 - parameterQuery: string | null; 1030 1030 /** 1031 1031 * This is the parameter that goes into the body 1032 1032 */ ··· 1074 1074 /** 1075 1075 * This is an optional parameter 1076 1076 */ 1077 - parameter?: string; 1077 + page?: number; 1078 1078 /** 1079 1079 * This is a required parameter 1080 1080 */ ··· 1089 1089 /** 1090 1090 * This is an optional parameter 1091 1091 */ 1092 - requestBody?: ModelWithString; 1092 + requestBody?: { 1093 + offset?: number | null; 1094 + }; 1093 1095 }; 1096 + 1097 + export type PostCallWithOptionalParamResponse = number | void; 1094 1098 1095 1099 export type CallWithDescriptionsData = { 1096 1100 /** ··· 1453 1457 }; 1454 1458 post: { 1455 1459 req: PostCallWithOptionalParamData; 1460 + res: { 1461 + /** 1462 + * Response is a simple number 1463 + */ 1464 + 200: number; 1465 + /** 1466 + * Success 1467 + */ 1468 + 204: void; 1469 + }; 1456 1470 }; 1457 1471 }; 1458 1472 '/api/v{api-version}/descriptions/': {
+8 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript_namespace/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 6 + import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 7 7 8 8 export class DefaultService { 9 9 /** ··· 144 144 * @param data The data for the request. 145 145 * @param data.parameterHeader This is the parameter that goes into the header 146 146 * @param data.fooAllOfEnum 147 - * @param data.parameterQuery This is the parameter that goes into the query params 147 + * @param data.cursor This is the parameter that goes into the query params 148 148 * @param data.parameterCookie This is the parameter that goes into the cookie 149 149 * @param data.parameterPath This is the parameter that goes into the path 150 150 * @param data.requestBody This is the parameter that goes into the body ··· 167 167 query: { 168 168 foo_ref_enum: data.fooRefEnum, 169 169 foo_all_of_enum: data.fooAllOfEnum, 170 - parameterQuery: data.parameterQuery 170 + cursor: data.cursor 171 171 }, 172 172 body: data.requestBody, 173 173 mediaType: 'application/json' ··· 213 213 /** 214 214 * @param data The data for the request. 215 215 * @param data.requestBody This is a required parameter 216 - * @param data.parameter This is an optional parameter 216 + * @param data.page This is an optional parameter 217 217 * @throws ApiError 218 218 */ 219 219 public static getCallWithOptionalParam(data: GetCallWithOptionalParamData): CancelablePromise<void> { ··· 221 221 method: 'GET', 222 222 url: '/api/v{api-version}/parameters/', 223 223 query: { 224 - parameter: data.parameter 224 + page: data.page 225 225 }, 226 226 body: data.requestBody, 227 227 mediaType: 'application/json' ··· 232 232 * @param data The data for the request. 233 233 * @param data.parameter This is a required parameter 234 234 * @param data.requestBody This is an optional parameter 235 + * @returns number Response is a simple number 236 + * @returns void Success 235 237 * @throws ApiError 236 238 */ 237 - public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<void> { 239 + public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<PostCallWithOptionalParamResponse> { 238 240 return __request(OpenAPI, { 239 241 method: 'POST', 240 242 url: '/api/v{api-version}/parameters/',
+20 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript_namespace/types.gen.ts.snap
··· 1040 1040 }; 1041 1041 1042 1042 export type CallWithParametersData = { 1043 + /** 1044 + * This is the parameter that goes into the query params 1045 + */ 1046 + cursor: string | null; 1043 1047 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 1044 1048 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 1045 1049 /** ··· 1054 1058 * This is the parameter that goes into the path 1055 1059 */ 1056 1060 parameterPath: string | null; 1057 - /** 1058 - * This is the parameter that goes into the query params 1059 - */ 1060 - parameterQuery: string | null; 1061 1061 /** 1062 1062 * This is the parameter that goes into the body 1063 1063 */ ··· 1105 1105 /** 1106 1106 * This is an optional parameter 1107 1107 */ 1108 - parameter?: string; 1108 + page?: number; 1109 1109 /** 1110 1110 * This is a required parameter 1111 1111 */ ··· 1120 1120 /** 1121 1121 * This is an optional parameter 1122 1122 */ 1123 - requestBody?: ModelWithString; 1123 + requestBody?: { 1124 + offset?: number | null; 1125 + }; 1124 1126 }; 1127 + 1128 + export type PostCallWithOptionalParamResponse = number | void; 1125 1129 1126 1130 export type CallWithDescriptionsData = { 1127 1131 /** ··· 1484 1488 }; 1485 1489 post: { 1486 1490 req: PostCallWithOptionalParamData; 1491 + res: { 1492 + /** 1493 + * Response is a simple number 1494 + */ 1495 + 200: number; 1496 + /** 1497 + * Success 1498 + */ 1499 + 204: void; 1500 + }; 1487 1501 }; 1488 1502 }; 1489 1503 '/api/v{api-version}/descriptions/': {
+8 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_node/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 6 + import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 7 7 8 8 export class DefaultService { 9 9 /** ··· 144 144 * @param data The data for the request. 145 145 * @param data.parameterHeader This is the parameter that goes into the header 146 146 * @param data.fooAllOfEnum 147 - * @param data.parameterQuery This is the parameter that goes into the query params 147 + * @param data.cursor This is the parameter that goes into the query params 148 148 * @param data.parameterCookie This is the parameter that goes into the cookie 149 149 * @param data.parameterPath This is the parameter that goes into the path 150 150 * @param data.requestBody This is the parameter that goes into the body ··· 167 167 query: { 168 168 foo_ref_enum: data.fooRefEnum, 169 169 foo_all_of_enum: data.fooAllOfEnum, 170 - parameterQuery: data.parameterQuery 170 + cursor: data.cursor 171 171 }, 172 172 body: data.requestBody, 173 173 mediaType: 'application/json' ··· 213 213 /** 214 214 * @param data The data for the request. 215 215 * @param data.requestBody This is a required parameter 216 - * @param data.parameter This is an optional parameter 216 + * @param data.page This is an optional parameter 217 217 * @throws ApiError 218 218 */ 219 219 public static getCallWithOptionalParam(data: GetCallWithOptionalParamData): CancelablePromise<void> { ··· 221 221 method: 'GET', 222 222 url: '/api/v{api-version}/parameters/', 223 223 query: { 224 - parameter: data.parameter 224 + page: data.page 225 225 }, 226 226 body: data.requestBody, 227 227 mediaType: 'application/json' ··· 232 232 * @param data The data for the request. 233 233 * @param data.parameter This is a required parameter 234 234 * @param data.requestBody This is an optional parameter 235 + * @returns number Response is a simple number 236 + * @returns void Success 235 237 * @throws ApiError 236 238 */ 237 - public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<void> { 239 + public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<PostCallWithOptionalParamResponse> { 238 240 return __request(OpenAPI, { 239 241 method: 'POST', 240 242 url: '/api/v{api-version}/parameters/',
+23 -9
packages/openapi-ts/test/__snapshots__/test/generated/v3_node/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1053 1053 }; 1054 1054 1055 1055 export type CallWithParametersData = { 1056 + /** 1057 + * This is the parameter that goes into the query params 1058 + */ 1059 + cursor: string | null; 1056 1060 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 1057 1061 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 1058 1062 /** ··· 1067 1071 * This is the parameter that goes into the path 1068 1072 */ 1069 1073 parameterPath: string | null; 1070 - /** 1071 - * This is the parameter that goes into the query params 1072 - */ 1073 - parameterQuery: string | null; 1074 1074 /** 1075 1075 * This is the parameter that goes into the body 1076 1076 */ ··· 1118 1118 /** 1119 1119 * This is an optional parameter 1120 1120 */ 1121 - parameter?: string; 1121 + page?: number; 1122 1122 /** 1123 1123 * This is a required parameter 1124 1124 */ ··· 1133 1133 /** 1134 1134 * This is an optional parameter 1135 1135 */ 1136 - requestBody?: ModelWithString; 1136 + requestBody?: { 1137 + offset?: number | null; 1138 + }; 1137 1139 }; 1140 + 1141 + export type PostCallWithOptionalParamResponse = number | void; 1138 1142 1139 1143 export type CallWithDescriptionsData = { 1140 1144 /** ··· 1497 1501 }; 1498 1502 post: { 1499 1503 req: PostCallWithOptionalParamData; 1504 + res: { 1505 + /** 1506 + * Response is a simple number 1507 + */ 1508 + 200: number; 1509 + /** 1510 + * Success 1511 + */ 1512 + 204: void; 1513 + }; 1500 1514 }; 1501 1515 }; 1502 1516 '/api/v{api-version}/descriptions/': {
+20 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_pascalcase/types.gen.ts.snap
··· 78 78 }; 79 79 80 80 export type CallWithParametersData = { 81 + /** 82 + * This is the parameter that goes into the query params 83 + */ 84 + cursor: string | null; 81 85 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 82 86 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 83 87 /** ··· 92 96 * This is the parameter that goes into the path 93 97 */ 94 98 parameterPath: string | null; 95 - /** 96 - * This is the parameter that goes into the query params 97 - */ 98 - parameterQuery: string | null; 99 99 /** 100 100 * This is the parameter that goes into the body 101 101 */ ··· 143 143 /** 144 144 * This is an optional parameter 145 145 */ 146 - parameter?: string; 146 + page?: number; 147 147 /** 148 148 * This is a required parameter 149 149 */ ··· 158 158 /** 159 159 * This is an optional parameter 160 160 */ 161 - requestBody?: ModelWithString; 161 + requestBody?: { 162 + offset?: number | null; 163 + }; 162 164 }; 165 + 166 + export type PostCallWithOptionalParamResponse = number | void; 163 167 164 168 export type PostApiRequestBodyData = { 165 169 /** ··· 494 498 }; 495 499 post: { 496 500 req: PostCallWithOptionalParamData; 501 + res: { 502 + /** 503 + * Response is a simple number 504 + */ 505 + 200: number; 506 + /** 507 + * Success 508 + */ 509 + 204: void; 510 + }; 497 511 }; 498 512 }; 499 513 '/api/v{api-version}/requestBody/': {
+7 -5
packages/openapi-ts/test/__snapshots__/test/generated/v3_services_name/services.gen.ts.snap
··· 114 114 * @param data The data for the request. 115 115 * @param data.parameterHeader This is the parameter that goes into the header 116 116 * @param data.fooAllOfEnum 117 - * @param data.parameterQuery This is the parameter that goes into the query params 117 + * @param data.cursor This is the parameter that goes into the query params 118 118 * @param data.parameterCookie This is the parameter that goes into the cookie 119 119 * @param data.parameterPath This is the parameter that goes into the path 120 120 * @param data.requestBody This is the parameter that goes into the body ··· 137 137 query: { 138 138 foo_ref_enum: data.fooRefEnum, 139 139 foo_all_of_enum: data.fooAllOfEnum, 140 - parameterQuery: data.parameterQuery 140 + cursor: data.cursor 141 141 }, 142 142 body: data.requestBody, 143 143 mediaType: 'application/json' ··· 183 183 /** 184 184 * @param data The data for the request. 185 185 * @param data.requestBody This is a required parameter 186 - * @param data.parameter This is an optional parameter 186 + * @param data.page This is an optional parameter 187 187 * @throws ApiError 188 188 */ 189 189 public static getCallWithOptionalParam(data: GetCallWithOptionalParamData): CancelablePromise<void> { ··· 191 191 method: 'GET', 192 192 url: '/api/v{api-version}/parameters/', 193 193 query: { 194 - parameter: data.parameter 194 + page: data.page 195 195 }, 196 196 body: data.requestBody, 197 197 mediaType: 'application/json' ··· 202 202 * @param data The data for the request. 203 203 * @param data.parameter This is a required parameter 204 204 * @param data.requestBody This is an optional parameter 205 + * @returns number Response is a simple number 206 + * @returns void Success 205 207 * @throws ApiError 206 208 */ 207 - public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<void> { 209 + public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<PostCallWithOptionalParamResponse> { 208 210 return __request(OpenAPI, { 209 211 method: 'POST', 210 212 url: '/api/v{api-version}/parameters/',
+8 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_tree_shakeable/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, DummyAResponse, DummyBResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, MultipartRequestData, MultipartResponseResponse, ComplexParamsData, ComplexParamsResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 6 + import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamResponse, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, DummyAResponse, DummyBResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, MultipartRequestData, MultipartResponseResponse, ComplexParamsData, ComplexParamsResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 7 7 8 8 /** 9 9 * @throws ApiError ··· 155 155 * @param data The data for the request. 156 156 * @param data.parameterHeader This is the parameter that goes into the header 157 157 * @param data.fooAllOfEnum 158 - * @param data.parameterQuery This is the parameter that goes into the query params 158 + * @param data.cursor This is the parameter that goes into the query params 159 159 * @param data.parameterCookie This is the parameter that goes into the cookie 160 160 * @param data.parameterPath This is the parameter that goes into the path 161 161 * @param data.requestBody This is the parameter that goes into the body ··· 177 177 query: { 178 178 foo_ref_enum: data.fooRefEnum, 179 179 foo_all_of_enum: data.fooAllOfEnum, 180 - parameterQuery: data.parameterQuery 180 + cursor: data.cursor 181 181 }, 182 182 body: data.requestBody, 183 183 mediaType: 'application/json' ··· 220 220 /** 221 221 * @param data The data for the request. 222 222 * @param data.requestBody This is a required parameter 223 - * @param data.parameter This is an optional parameter 223 + * @param data.page This is an optional parameter 224 224 * @throws ApiError 225 225 */ 226 226 export const getCallWithOptionalParam = (data: GetCallWithOptionalParamData): CancelablePromise<void> => { return __request(OpenAPI, { 227 227 method: 'GET', 228 228 url: '/api/v{api-version}/parameters/', 229 229 query: { 230 - parameter: data.parameter 230 + page: data.page 231 231 }, 232 232 body: data.requestBody, 233 233 mediaType: 'application/json' ··· 237 237 * @param data The data for the request. 238 238 * @param data.parameter This is a required parameter 239 239 * @param data.requestBody This is an optional parameter 240 + * @returns number Response is a simple number 241 + * @returns void Success 240 242 * @throws ApiError 241 243 */ 242 - export const postCallWithOptionalParam = (data: PostCallWithOptionalParamData): CancelablePromise<void> => { return __request(OpenAPI, { 244 + export const postCallWithOptionalParam = (data: PostCallWithOptionalParamData): CancelablePromise<PostCallWithOptionalParamResponse> => { return __request(OpenAPI, { 243 245 method: 'POST', 244 246 url: '/api/v{api-version}/parameters/', 245 247 query: {
+23 -9
packages/openapi-ts/test/__snapshots__/test/generated/v3_tree_shakeable/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1091 1091 }; 1092 1092 1093 1093 export type CallWithParametersData = { 1094 + /** 1095 + * This is the parameter that goes into the query params 1096 + */ 1097 + cursor: string | null; 1094 1098 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 1095 1099 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 1096 1100 /** ··· 1105 1109 * This is the parameter that goes into the path 1106 1110 */ 1107 1111 parameterPath: string | null; 1108 - /** 1109 - * This is the parameter that goes into the query params 1110 - */ 1111 - parameterQuery: string | null; 1112 1112 /** 1113 1113 * This is the parameter that goes into the body 1114 1114 */ ··· 1156 1156 /** 1157 1157 * This is an optional parameter 1158 1158 */ 1159 - parameter?: string; 1159 + page?: number; 1160 1160 /** 1161 1161 * This is a required parameter 1162 1162 */ ··· 1171 1171 /** 1172 1172 * This is an optional parameter 1173 1173 */ 1174 - requestBody?: ModelWithString; 1174 + requestBody?: { 1175 + offset?: number | null; 1176 + }; 1175 1177 }; 1178 + 1179 + export type PostCallWithOptionalParamResponse = number | void; 1176 1180 1177 1181 export type PostApiRequestBodyData = { 1178 1182 /** ··· 1507 1511 }; 1508 1512 post: { 1509 1513 req: PostCallWithOptionalParamData; 1514 + res: { 1515 + /** 1516 + * Response is a simple number 1517 + */ 1518 + 200: number; 1519 + /** 1520 + * Success 1521 + */ 1522 + 204: void; 1523 + }; 1510 1524 }; 1511 1525 }; 1512 1526 '/api/v{api-version}/requestBody/': {
+20 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_types/types.gen.ts.snap
··· 968 968 }; 969 969 970 970 export type CallWithParametersData = { 971 + /** 972 + * This is the parameter that goes into the query params 973 + */ 974 + cursor: string | null; 971 975 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 972 976 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 973 977 /** ··· 982 986 * This is the parameter that goes into the path 983 987 */ 984 988 parameterPath: string | null; 985 - /** 986 - * This is the parameter that goes into the query params 987 - */ 988 - parameterQuery: string | null; 989 989 /** 990 990 * This is the parameter that goes into the body 991 991 */ ··· 1033 1033 /** 1034 1034 * This is an optional parameter 1035 1035 */ 1036 - parameter?: string; 1036 + page?: number; 1037 1037 /** 1038 1038 * This is a required parameter 1039 1039 */ ··· 1048 1048 /** 1049 1049 * This is an optional parameter 1050 1050 */ 1051 - requestBody?: ModelWithString; 1051 + requestBody?: { 1052 + offset?: number | null; 1053 + }; 1052 1054 }; 1055 + 1056 + export type PostCallWithOptionalParamResponse = number | void; 1053 1057 1054 1058 export type PostApiRequestBodyData = { 1055 1059 /** ··· 1384 1388 }; 1385 1389 post: { 1386 1390 req: PostCallWithOptionalParamData; 1391 + res: { 1392 + /** 1393 + * Response is a simple number 1394 + */ 1395 + 200: number; 1396 + /** 1397 + * Success 1398 + */ 1399 + 204: void; 1400 + }; 1387 1401 }; 1388 1402 }; 1389 1403 '/api/v{api-version}/requestBody/': {
+8 -6
packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/services.gen.ts.snap
··· 3 3 import type { CancelablePromise } from './core/CancelablePromise'; 4 4 import { OpenAPI } from './core/OpenAPI'; 5 5 import { request as __request } from './core/request'; 6 - import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 6 + import type { ImportData, ImportResponse, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostCallWithOptionalParamResponse, CallWithDescriptionsData, DeprecatedCallData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseResponse, CallWithResponseResponse, CallWithDuplicateResponsesResponse, CallWithResponsesResponse, DummyAResponse, DummyBResponse, CollectionFormatData, TypesData, TypesResponse, UploadFileData, UploadFileResponse, FileResponseData, FileResponseResponse, ComplexTypesData, ComplexTypesResponse, ComplexParamsData, ComplexParamsResponse, MultipartRequestData, MultipartResponseResponse, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeResponse, NonAsciiæøåÆøÅöôêÊ字符串Data, NonAsciiæøåÆøÅöôêÊ字符串Response, PutWithFormUrlEncodedData } from './types.gen'; 7 7 8 8 export class DefaultService { 9 9 /** ··· 144 144 * @param data The data for the request. 145 145 * @param data.parameterHeader This is the parameter that goes into the header 146 146 * @param data.fooAllOfEnum 147 - * @param data.parameterQuery This is the parameter that goes into the query params 147 + * @param data.cursor This is the parameter that goes into the query params 148 148 * @param data.parameterCookie This is the parameter that goes into the cookie 149 149 * @param data.parameterPath This is the parameter that goes into the path 150 150 * @param data.requestBody This is the parameter that goes into the body ··· 167 167 query: { 168 168 foo_ref_enum: data.fooRefEnum, 169 169 foo_all_of_enum: data.fooAllOfEnum, 170 - parameterQuery: data.parameterQuery 170 + cursor: data.cursor 171 171 }, 172 172 body: data.requestBody, 173 173 mediaType: 'application/json' ··· 213 213 /** 214 214 * @param data The data for the request. 215 215 * @param data.requestBody This is a required parameter 216 - * @param data.parameter This is an optional parameter 216 + * @param data.page This is an optional parameter 217 217 * @throws ApiError 218 218 */ 219 219 public static getCallWithOptionalParam(data: GetCallWithOptionalParamData): CancelablePromise<void> { ··· 221 221 method: 'GET', 222 222 url: '/api/v{api-version}/parameters/', 223 223 query: { 224 - parameter: data.parameter 224 + page: data.page 225 225 }, 226 226 body: data.requestBody, 227 227 mediaType: 'application/json' ··· 232 232 * @param data The data for the request. 233 233 * @param data.parameter This is a required parameter 234 234 * @param data.requestBody This is an optional parameter 235 + * @returns number Response is a simple number 236 + * @returns void Success 235 237 * @throws ApiError 236 238 */ 237 - public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<void> { 239 + public static postCallWithOptionalParam(data: PostCallWithOptionalParamData): CancelablePromise<PostCallWithOptionalParamResponse> { 238 240 return __request(OpenAPI, { 239 241 method: 'POST', 240 242 url: '/api/v{api-version}/parameters/',
+23 -9
packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/types.gen.ts.snap
··· 100 100 ERROR: 'Error', 101 101 _SINGLE_QUOTE_: "'Single Quote'", 102 102 _DOUBLE_QUOTES_: '"Double Quotes"', 103 - 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串': 'Non-ascii: øæåôöØÆÅÔÖ字符串' 103 + NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字符串: 'Non-ascii: øæåôöØÆÅÔÖ字符串' 104 104 } as const; 105 105 106 106 export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'øæåôöØÆÅÔÖ字符串' | 3.1 | ''; ··· 108 108 export const EnumWithReplacedCharacters = { 109 109 _SINGLE_QUOTE_: "'Single Quote'", 110 110 _DOUBLE_QUOTES_: '"Double Quotes"', 111 - 'ØÆÅÔÖ_ØÆÅÔÖ字符串': 'øæåôöØÆÅÔÖ字符串', 111 + ØÆÅÔÖ_ØÆÅÔÖ字符串: 'øæåôöØÆÅÔÖ字符串', 112 112 '_3.1': 3.1, 113 113 EMPTY_STRING: '' 114 114 } as const; ··· 361 361 SUCCESS: 'Success', 362 362 WARNING: 'Warning', 363 363 ERROR: 'Error', 364 - 'ØÆÅ字符串': 'ØÆÅ字符串' 364 + ØÆÅ字符串: 'ØÆÅ字符串' 365 365 } as const; 366 366 367 367 /** ··· 1053 1053 }; 1054 1054 1055 1055 export type CallWithParametersData = { 1056 + /** 1057 + * This is the parameter that goes into the query params 1058 + */ 1059 + cursor: string | null; 1056 1060 fooAllOfEnum: ModelWithNestedArrayEnumsDataFoo; 1057 1061 fooRefEnum?: ModelWithNestedArrayEnumsDataFoo; 1058 1062 /** ··· 1067 1071 * This is the parameter that goes into the path 1068 1072 */ 1069 1073 parameterPath: string | null; 1070 - /** 1071 - * This is the parameter that goes into the query params 1072 - */ 1073 - parameterQuery: string | null; 1074 1074 /** 1075 1075 * This is the parameter that goes into the body 1076 1076 */ ··· 1118 1118 /** 1119 1119 * This is an optional parameter 1120 1120 */ 1121 - parameter?: string; 1121 + page?: number; 1122 1122 /** 1123 1123 * This is a required parameter 1124 1124 */ ··· 1133 1133 /** 1134 1134 * This is an optional parameter 1135 1135 */ 1136 - requestBody?: ModelWithString; 1136 + requestBody?: { 1137 + offset?: number | null; 1138 + }; 1137 1139 }; 1140 + 1141 + export type PostCallWithOptionalParamResponse = number | void; 1138 1142 1139 1143 export type CallWithDescriptionsData = { 1140 1144 /** ··· 1497 1501 }; 1498 1502 post: { 1499 1503 req: PostCallWithOptionalParamData; 1504 + res: { 1505 + /** 1506 + * Response is a simple number 1507 + */ 1508 + 200: number; 1509 + /** 1510 + * Success 1511 + */ 1512 + 204: void; 1513 + }; 1500 1514 }; 1501 1515 }; 1502 1516 '/api/v{api-version}/descriptions/': {
+12 -5
packages/openapi-ts/test/sample.cjs
··· 5 5 const config = { 6 6 client: { 7 7 // bundle: true, 8 - name: '@hey-api/client-axios', 9 - // name: '@hey-api/client-fetch', 8 + // name: '@hey-api/client-axios', 9 + name: '@hey-api/client-fetch', 10 10 }, 11 11 debug: true, 12 12 // input: './test/spec/v3-transforms.json', ··· 17 17 output: { 18 18 path: './test/generated/sample/', 19 19 }, 20 - // plugins: ['@tanstack/react-query'], 20 + plugins: [ 21 + { 22 + // infiniteQueryOptions: false, 23 + mutationOptions: false, 24 + name: '@tanstack/react-query', 25 + queryOptions: false, 26 + }, 27 + ], 21 28 schemas: { 22 29 export: false, 23 30 }, 24 31 services: { 25 - asClass: true, 32 + // asClass: true, 26 33 // filter: '^POST /api/v{api-version}/upload$', 27 34 // export: false, 28 35 // name: '^Parameters', 29 36 }, 30 37 types: { 31 38 // dates: 'types+transform', 32 - // enums: 'typescript', 39 + // enums: 'javascript', 33 40 // export: false, 34 41 // include: 35 42 // '^(_400|CompositionWithOneOfAndProperties)',
+26 -4
packages/openapi-ts/test/spec/v3.json
··· 267 267 }, 268 268 { 269 269 "description": "This is the parameter that goes into the query params", 270 - "name": "parameterQuery", 270 + "name": "cursor", 271 271 "in": "query", 272 272 "required": true, 273 273 "nullable": true, ··· 428 428 "parameters": [ 429 429 { 430 430 "description": "This is an optional parameter", 431 - "name": "parameter", 431 + "name": "page", 432 432 "in": "query", 433 433 "required": false, 434 434 "schema": { 435 - "type": "string" 435 + "type": "number" 436 436 } 437 437 } 438 438 ], ··· 468 468 "content": { 469 469 "application/json": { 470 470 "schema": { 471 - "$ref": "#/components/schemas/ModelWithString" 471 + "properties": { 472 + "offset": { 473 + "nullable": true, 474 + "required": true, 475 + "type": "number" 476 + } 477 + }, 478 + "type": "object" 472 479 } 473 480 } 481 + } 482 + }, 483 + "responses": { 484 + "200": { 485 + "description": "Response is a simple number", 486 + "content": { 487 + "application/json": { 488 + "schema": { 489 + "type": "number" 490 + } 491 + } 492 + } 493 + }, 494 + "204": { 495 + "description": "Success" 474 496 } 475 497 } 476 498 }