From 3fd5e4111f44f4e8dbb9582b877f539d66d7237a Mon Sep 17 00:00:00 2001 From: Kuzma <57258237+ksvirkou-hubspot@users.noreply.github.com> Date: Fri, 20 Aug 2021 17:07:43 +0300 Subject: [PATCH] [Typescript] Add application/x-www-form-urlencoded content support (#9960) * Add application/x-www-form-urlencoded content support * cs fix * cs fix * add samples * fix double content type * fix samples * fix util.canConsumeForm * revert unrelated ghanges * regenerate samples * change includes to indexof * regenerate samples * regenerate samples --- .../resources/typescript/api/api.mustache | 35 ++++++-- .../resources/typescript/http/http.mustache | 3 +- .../model/ObjectSerializer.mustache | 3 +- .../main/resources/typescript/util.mustache | 9 ++ .../composed-schemas/apis/DefaultApi.ts | 24 +---- .../builds/composed-schemas/http/http.ts | 2 +- .../models/ObjectSerializer.ts | 3 +- .../builds/composed-schemas/util.ts | 9 ++ .../typescript/builds/default/apis/PetApi.ts | 88 ++++++++----------- .../builds/default/apis/StoreApi.ts | 37 +------- .../typescript/builds/default/apis/UserApi.ts | 62 ++----------- .../typescript/builds/default/http/http.ts | 3 +- .../builds/default/models/ObjectSerializer.ts | 3 +- .../typescript/builds/default/util.ts | 9 ++ .../typescript/builds/deno/apis/PetApi.ts | 87 ++++++++---------- .../typescript/builds/deno/apis/StoreApi.ts | 36 +------- .../typescript/builds/deno/apis/UserApi.ts | 61 +------------ .../typescript/builds/deno/http/http.ts | 2 +- .../builds/deno/models/ObjectSerializer.ts | 3 +- .../petstore/typescript/builds/deno/util.ts | 9 ++ .../builds/inversify/apis/PetApi.ts | 88 ++++++++----------- .../builds/inversify/apis/StoreApi.ts | 37 +------- .../builds/inversify/apis/UserApi.ts | 62 ++----------- .../typescript/builds/inversify/http/http.ts | 3 +- .../inversify/models/ObjectSerializer.ts | 3 +- .../typescript/builds/inversify/util.ts | 9 ++ .../typescript/builds/jquery/apis/PetApi.ts | 87 ++++++++---------- .../typescript/builds/jquery/apis/StoreApi.ts | 36 +------- .../typescript/builds/jquery/apis/UserApi.ts | 61 +------------ .../typescript/builds/jquery/http/http.ts | 2 +- .../builds/jquery/models/ObjectSerializer.ts | 3 +- .../petstore/typescript/builds/jquery/util.ts | 9 ++ .../builds/object_params/apis/PetApi.ts | 88 ++++++++----------- .../builds/object_params/apis/StoreApi.ts | 37 +------- .../builds/object_params/apis/UserApi.ts | 62 ++----------- .../builds/object_params/http/http.ts | 3 +- .../object_params/models/ObjectSerializer.ts | 3 +- .../typescript/builds/object_params/util.ts | 9 ++ 38 files changed, 337 insertions(+), 753 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript/api/api.mustache b/modules/openapi-generator/src/main/resources/typescript/api/api.mustache index 1ae6103da09..3b4f4db0c4e 100644 --- a/modules/openapi-generator/src/main/resources/typescript/api/api.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/api/api.mustache @@ -5,11 +5,13 @@ import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/ht {{#platforms}} {{#node}} import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; {{/node}} {{/platforms}} import {ObjectSerializer} from '../models/ObjectSerializer{{extensionForDeno}}'; import {ApiException} from './exception{{extensionForDeno}}'; -import {isCodeInRange} from '../util{{extensionForDeno}}'; +import {canConsumeForm, isCodeInRange} from '../util{{extensionForDeno}}'; + {{#useInversify}} import { injectable } from "inversify"; {{/useInversify}} @@ -59,22 +61,33 @@ export class {{classname}}RequestFactory extends BaseAPIRequestFactory { // Make Request Context const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.{{httpMethod}}); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") + {{#queryParams}} // Query Params - {{#queryParams}} if ({{paramName}} !== undefined) { requestContext.setQueryParam("{{baseName}}", ObjectSerializer.serialize({{paramName}}, "{{{dataType}}}", "{{dataFormat}}")); } {{/queryParams}} + {{#headerParams}} // Header Params - {{#headerParams}} requestContext.setHeaderParam("{{baseName}}", ObjectSerializer.serialize({{paramName}}, "{{{dataType}}}", "{{dataFormat}}")); {{/headerParams}} + {{#hasFormParams}} // Form Params - {{#hasFormParams}} - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + {{#consumes}} + '{{{mediaType}}}', + {{/consumes}} + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } {{/hasFormParams}} {{#formParams}} @@ -111,11 +124,19 @@ export class {{classname}}RequestFactory extends BaseAPIRequestFactory { {{/isArray}} {{/formParams}} {{#hasFormParams}} + requestContext.setBody(localVarFormParams); + + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([{{#consumes}} + "{{{mediaType}}}"{{^-last}},{{/-last}} + {{/consumes}}]); + requestContext.setHeaderParam("Content-Type", contentType); + } {{/hasFormParams}} + {{#bodyParam}} // Body Params - {{#bodyParam}} const contentType = ObjectSerializer.getPreferredMediaType([{{#consumes}} "{{{mediaType}}}"{{^-last}},{{/-last}} {{/consumes}}]); @@ -130,8 +151,8 @@ export class {{classname}}RequestFactory extends BaseAPIRequestFactory { {{#hasAuthMethods}} let authMethod = null; {{/hasAuthMethods}} - // Apply auth methods {{#authMethods}} + // Apply auth methods authMethod = _config.authMethods["{{name}}"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); diff --git a/modules/openapi-generator/src/main/resources/typescript/http/http.mustache b/modules/openapi-generator/src/main/resources/typescript/http/http.mustache index 71c7dae692b..fc485a7fec8 100644 --- a/modules/openapi-generator/src/main/resources/typescript/http/http.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/http/http.mustache @@ -2,6 +2,7 @@ {{#node}} // TODO: evaluate if we can easily get rid of this library import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; {{/node}} {{/platforms}} {{#platforms}} @@ -103,7 +104,7 @@ export class HttpException extends Error { /** * Represents the body of an outgoing HTTP request. */ -export type RequestBody = undefined | string | FormData; +export type RequestBody = undefined | string | FormData | URLSearchParams; /** * Represents an HTTP request context diff --git a/modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache b/modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache index 870b46342b0..b5c84fc43ca 100644 --- a/modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache @@ -24,7 +24,8 @@ let primitives = [ const supportedMediaTypes: { [mediaType: string]: number } = { "application/json": Infinity, - "application/octet-stream": 0 + "application/octet-stream": 0, + "application/x-www-form-urlencoded": 0 } diff --git a/modules/openapi-generator/src/main/resources/typescript/util.mustache b/modules/openapi-generator/src/main/resources/typescript/util.mustache index 484e07cdffa..96ea3dfdc77 100644 --- a/modules/openapi-generator/src/main/resources/typescript/util.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/util.mustache @@ -26,3 +26,12 @@ export function isCodeInRange(codeRange: string, code: number): boolean { return true; } } + +/** +* Returns if it can consume form +* +* @param consumes array +*/ +export function canConsumeForm(contentTypes: string[]): boolean { + return contentTypes.indexOf('multipart/form-data') !== -1 +} diff --git a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/apis/DefaultApi.ts b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/apis/DefaultApi.ts index b2fe591913c..0e394cc4791 100644 --- a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/apis/DefaultApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/apis/DefaultApi.ts @@ -4,7 +4,8 @@ import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { Cat } from '../models/Cat'; import { Dog } from '../models/Dog'; @@ -31,12 +32,6 @@ export class DefaultApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -49,7 +44,6 @@ export class DefaultApiRequestFactory extends BaseAPIRequestFactory { ); requestContext.setBody(serializedBody); - // Apply auth methods return requestContext; } @@ -68,12 +62,6 @@ export class DefaultApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PATCH); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -86,7 +74,6 @@ export class DefaultApiRequestFactory extends BaseAPIRequestFactory { ); requestContext.setBody(serializedBody); - // Apply auth methods return requestContext; } @@ -105,12 +92,6 @@ export class DefaultApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PATCH); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -123,7 +104,6 @@ export class DefaultApiRequestFactory extends BaseAPIRequestFactory { ); requestContext.setBody(serializedBody); - // Apply auth methods return requestContext; } diff --git a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/http/http.ts b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/http/http.ts index c4976d7b152..79a4889b958 100644 --- a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/http/http.ts +++ b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/http/http.ts @@ -35,7 +35,7 @@ export class HttpException extends Error { /** * Represents the body of an outgoing HTTP request. */ -export type RequestBody = undefined | string | FormData; +export type RequestBody = undefined | string | FormData | URLSearchParams; /** * Represents an HTTP request context diff --git a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/models/ObjectSerializer.ts b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/models/ObjectSerializer.ts index d456c2379e1..8c4dc674984 100644 --- a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/models/ObjectSerializer.ts +++ b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/models/ObjectSerializer.ts @@ -28,7 +28,8 @@ let primitives = [ const supportedMediaTypes: { [mediaType: string]: number } = { "application/json": Infinity, - "application/octet-stream": 0 + "application/octet-stream": 0, + "application/x-www-form-urlencoded": 0 } diff --git a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/util.ts b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/util.ts index 484e07cdffa..96ea3dfdc77 100644 --- a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/util.ts +++ b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/util.ts @@ -26,3 +26,12 @@ export function isCodeInRange(codeRange: string, code: number): boolean { return true; } } + +/** +* Returns if it can consume form +* +* @param consumes array +*/ +export function canConsumeForm(contentTypes: string[]): boolean { + return contentTypes.indexOf('multipart/form-data') !== -1 +} diff --git a/samples/openapi3/client/petstore/typescript/builds/default/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/default/apis/PetApi.ts index 547125db459..4dc0a87314f 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/apis/PetApi.ts @@ -3,9 +3,11 @@ import { BaseAPIRequestFactory, RequiredError } from './baseapi'; import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { ApiResponse } from '../models/ApiResponse'; import { Pet } from '../models/Pet'; @@ -35,12 +37,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -88,15 +84,9 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params requestContext.setHeaderParam("api_key", ObjectSerializer.serialize(apiKey, "string", "")); - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -134,12 +124,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("status", ObjectSerializer.serialize(status, "Array<'available' | 'pending' | 'sold'>", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -177,12 +161,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("tags", ObjectSerializer.serialize(tags, "Array", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -216,14 +194,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -255,12 +225,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -310,12 +274,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'application/x-www-form-urlencoded', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (name !== undefined) { // TODO: replace .append with .set @@ -325,9 +294,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('status', status as any); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "application/x-www-form-urlencoded" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods @@ -364,12 +339,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'multipart/form-data', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (additionalMetadata !== undefined) { // TODO: replace .append with .set @@ -379,9 +359,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('file', file.data, file.name); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "multipart/form-data" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods diff --git a/samples/openapi3/client/petstore/typescript/builds/default/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/default/apis/StoreApi.ts index 7780dd52f48..5709bad523e 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/apis/StoreApi.ts @@ -3,9 +3,11 @@ import { BaseAPIRequestFactory, RequiredError } from './baseapi'; import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { Order } from '../models/Order'; @@ -36,16 +38,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -64,14 +57,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -105,16 +90,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -139,12 +115,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -157,7 +127,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { ); requestContext.setBody(serializedBody); - // Apply auth methods return requestContext; } diff --git a/samples/openapi3/client/petstore/typescript/builds/default/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/default/apis/UserApi.ts index e12b26fd31d..424c02a45a4 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/apis/UserApi.ts @@ -3,9 +3,11 @@ import { BaseAPIRequestFactory, RequiredError } from './baseapi'; import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { User } from '../models/User'; @@ -35,12 +37,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -83,12 +79,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -131,12 +121,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -181,14 +165,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -221,16 +197,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -266,18 +233,13 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { if (username !== undefined) { requestContext.setQueryParam("username", ObjectSerializer.serialize(username, "string", "")); } + + // Query Params if (password !== undefined) { requestContext.setQueryParam("password", ObjectSerializer.serialize(password, "string", "")); } - // Header Params - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -295,14 +257,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -343,12 +297,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ diff --git a/samples/openapi3/client/petstore/typescript/builds/default/http/http.ts b/samples/openapi3/client/petstore/typescript/builds/default/http/http.ts index 4befd50bc1d..21195a4dc51 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/http/http.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/http/http.ts @@ -1,5 +1,6 @@ // TODO: evaluate if we can easily get rid of this library import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; // typings of url-parse are incorrect... // @ts-ignore import * as URLParse from "url-parse"; @@ -40,7 +41,7 @@ export class HttpException extends Error { /** * Represents the body of an outgoing HTTP request. */ -export type RequestBody = undefined | string | FormData; +export type RequestBody = undefined | string | FormData | URLSearchParams; /** * Represents an HTTP request context diff --git a/samples/openapi3/client/petstore/typescript/builds/default/models/ObjectSerializer.ts b/samples/openapi3/client/petstore/typescript/builds/default/models/ObjectSerializer.ts index a1bdc64ae8e..97cf165c7f3 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/models/ObjectSerializer.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/models/ObjectSerializer.ts @@ -26,7 +26,8 @@ let primitives = [ const supportedMediaTypes: { [mediaType: string]: number } = { "application/json": Infinity, - "application/octet-stream": 0 + "application/octet-stream": 0, + "application/x-www-form-urlencoded": 0 } diff --git a/samples/openapi3/client/petstore/typescript/builds/default/util.ts b/samples/openapi3/client/petstore/typescript/builds/default/util.ts index 484e07cdffa..96ea3dfdc77 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/util.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/util.ts @@ -26,3 +26,12 @@ export function isCodeInRange(codeRange: string, code: number): boolean { return true; } } + +/** +* Returns if it can consume form +* +* @param consumes array +*/ +export function canConsumeForm(contentTypes: string[]): boolean { + return contentTypes.indexOf('multipart/form-data') !== -1 +} diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/deno/apis/PetApi.ts index cb9a2dfd3e6..85e84b881dd 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/apis/PetApi.ts @@ -4,7 +4,8 @@ import {Configuration} from '../configuration.ts'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http.ts'; import {ObjectSerializer} from '../models/ObjectSerializer.ts'; import {ApiException} from './exception.ts'; -import {isCodeInRange} from '../util.ts'; +import {canConsumeForm, isCodeInRange} from '../util.ts'; + import { ApiResponse } from '../models/ApiResponse.ts'; import { Pet } from '../models/Pet.ts'; @@ -34,12 +35,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -87,15 +82,9 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params requestContext.setHeaderParam("api_key", ObjectSerializer.serialize(apiKey, "string", "")); - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -133,12 +122,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("status", ObjectSerializer.serialize(status, "Array<'available' | 'pending' | 'sold'>", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -176,12 +159,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("tags", ObjectSerializer.serialize(tags, "Array", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -215,14 +192,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -254,12 +223,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -309,12 +272,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'application/x-www-form-urlencoded', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (name !== undefined) { // TODO: replace .append with .set @@ -324,9 +292,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('status', status as any); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "application/x-www-form-urlencoded" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods @@ -363,12 +337,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'multipart/form-data', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (additionalMetadata !== undefined) { // TODO: replace .append with .set @@ -378,9 +357,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('file', file, file.name); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "multipart/form-data" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/deno/apis/StoreApi.ts index 2cedbd705a6..b7b9eb284c3 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/apis/StoreApi.ts @@ -4,7 +4,8 @@ import {Configuration} from '../configuration.ts'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http.ts'; import {ObjectSerializer} from '../models/ObjectSerializer.ts'; import {ApiException} from './exception.ts'; -import {isCodeInRange} from '../util.ts'; +import {canConsumeForm, isCodeInRange} from '../util.ts'; + import { Order } from '../models/Order.ts'; @@ -35,16 +36,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -63,14 +55,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -104,16 +88,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -138,12 +113,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -156,7 +125,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { ); requestContext.setBody(serializedBody); - // Apply auth methods return requestContext; } diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/deno/apis/UserApi.ts index 7972e160583..0eb20195ccb 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/apis/UserApi.ts @@ -4,7 +4,8 @@ import {Configuration} from '../configuration.ts'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http.ts'; import {ObjectSerializer} from '../models/ObjectSerializer.ts'; import {ApiException} from './exception.ts'; -import {isCodeInRange} from '../util.ts'; +import {canConsumeForm, isCodeInRange} from '../util.ts'; + import { User } from '../models/User.ts'; @@ -34,12 +35,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -82,12 +77,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -130,12 +119,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -180,14 +163,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -220,16 +195,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -265,18 +231,13 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { if (username !== undefined) { requestContext.setQueryParam("username", ObjectSerializer.serialize(username, "string", "")); } + + // Query Params if (password !== undefined) { requestContext.setQueryParam("password", ObjectSerializer.serialize(password, "string", "")); } - // Header Params - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -294,14 +255,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -342,12 +295,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/http/http.ts b/samples/openapi3/client/petstore/typescript/builds/deno/http/http.ts index 41395d10489..a45d304d694 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/http/http.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/http/http.ts @@ -64,7 +64,7 @@ export class HttpException extends Error { /** * Represents the body of an outgoing HTTP request. */ -export type RequestBody = undefined | string | FormData; +export type RequestBody = undefined | string | FormData | URLSearchParams; /** * Represents an HTTP request context diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/models/ObjectSerializer.ts b/samples/openapi3/client/petstore/typescript/builds/deno/models/ObjectSerializer.ts index 1cf20279e2b..a9ef124f1b2 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/models/ObjectSerializer.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/models/ObjectSerializer.ts @@ -26,7 +26,8 @@ let primitives = [ const supportedMediaTypes: { [mediaType: string]: number } = { "application/json": Infinity, - "application/octet-stream": 0 + "application/octet-stream": 0, + "application/x-www-form-urlencoded": 0 } diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/util.ts b/samples/openapi3/client/petstore/typescript/builds/deno/util.ts index 484e07cdffa..96ea3dfdc77 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/util.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/util.ts @@ -26,3 +26,12 @@ export function isCodeInRange(codeRange: string, code: number): boolean { return true; } } + +/** +* Returns if it can consume form +* +* @param consumes array +*/ +export function canConsumeForm(contentTypes: string[]): boolean { + return contentTypes.indexOf('multipart/form-data') !== -1 +} diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/PetApi.ts index a127fccfbc2..e217b040830 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/PetApi.ts @@ -3,9 +3,11 @@ import { BaseAPIRequestFactory, RequiredError } from './baseapi'; import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { injectable } from "inversify"; import { ApiResponse } from '../models/ApiResponse'; @@ -37,12 +39,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -90,15 +86,9 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params requestContext.setHeaderParam("api_key", ObjectSerializer.serialize(apiKey, "string", "")); - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -136,12 +126,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("status", ObjectSerializer.serialize(status, "Array<'available' | 'pending' | 'sold'>", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -179,12 +163,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("tags", ObjectSerializer.serialize(tags, "Array", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -218,14 +196,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -257,12 +227,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -312,12 +276,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'application/x-www-form-urlencoded', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (name !== undefined) { // TODO: replace .append with .set @@ -327,9 +296,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('status', status as any); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "application/x-www-form-urlencoded" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods @@ -366,12 +341,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'multipart/form-data', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (additionalMetadata !== undefined) { // TODO: replace .append with .set @@ -381,9 +361,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('file', file.data, file.name); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "multipart/form-data" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/StoreApi.ts index 3607b8dee6e..a90223b0a9e 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/StoreApi.ts @@ -3,9 +3,11 @@ import { BaseAPIRequestFactory, RequiredError } from './baseapi'; import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { injectable } from "inversify"; import { Order } from '../models/Order'; @@ -38,16 +40,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -66,14 +59,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -107,16 +92,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -141,12 +117,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -159,7 +129,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { ); requestContext.setBody(serializedBody); - // Apply auth methods return requestContext; } diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/UserApi.ts index cc4580ef34c..f8594e27cf6 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/UserApi.ts @@ -3,9 +3,11 @@ import { BaseAPIRequestFactory, RequiredError } from './baseapi'; import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { injectable } from "inversify"; import { User } from '../models/User'; @@ -37,12 +39,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -85,12 +81,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -133,12 +123,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -183,14 +167,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -223,16 +199,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -268,18 +235,13 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { if (username !== undefined) { requestContext.setQueryParam("username", ObjectSerializer.serialize(username, "string", "")); } + + // Query Params if (password !== undefined) { requestContext.setQueryParam("password", ObjectSerializer.serialize(password, "string", "")); } - // Header Params - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -297,14 +259,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -345,12 +299,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/http/http.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/http/http.ts index 4befd50bc1d..21195a4dc51 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/http/http.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/http/http.ts @@ -1,5 +1,6 @@ // TODO: evaluate if we can easily get rid of this library import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; // typings of url-parse are incorrect... // @ts-ignore import * as URLParse from "url-parse"; @@ -40,7 +41,7 @@ export class HttpException extends Error { /** * Represents the body of an outgoing HTTP request. */ -export type RequestBody = undefined | string | FormData; +export type RequestBody = undefined | string | FormData | URLSearchParams; /** * Represents an HTTP request context diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/models/ObjectSerializer.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/models/ObjectSerializer.ts index a1bdc64ae8e..97cf165c7f3 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/models/ObjectSerializer.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/models/ObjectSerializer.ts @@ -26,7 +26,8 @@ let primitives = [ const supportedMediaTypes: { [mediaType: string]: number } = { "application/json": Infinity, - "application/octet-stream": 0 + "application/octet-stream": 0, + "application/x-www-form-urlencoded": 0 } diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/util.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/util.ts index 484e07cdffa..96ea3dfdc77 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/util.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/util.ts @@ -26,3 +26,12 @@ export function isCodeInRange(codeRange: string, code: number): boolean { return true; } } + +/** +* Returns if it can consume form +* +* @param consumes array +*/ +export function canConsumeForm(contentTypes: string[]): boolean { + return contentTypes.indexOf('multipart/form-data') !== -1 +} diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/PetApi.ts index 8cf33634c31..63dea0abd14 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/PetApi.ts @@ -4,7 +4,8 @@ import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { ApiResponse } from '../models/ApiResponse'; import { Pet } from '../models/Pet'; @@ -34,12 +35,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -87,15 +82,9 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params requestContext.setHeaderParam("api_key", ObjectSerializer.serialize(apiKey, "string", "")); - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -133,12 +122,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("status", ObjectSerializer.serialize(status, "Array<'available' | 'pending' | 'sold'>", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -176,12 +159,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("tags", ObjectSerializer.serialize(tags, "Array", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -215,14 +192,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -254,12 +223,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -309,12 +272,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'application/x-www-form-urlencoded', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (name !== undefined) { // TODO: replace .append with .set @@ -324,9 +292,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('status', status as any); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "application/x-www-form-urlencoded" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods @@ -363,12 +337,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'multipart/form-data', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (additionalMetadata !== undefined) { // TODO: replace .append with .set @@ -378,9 +357,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('file', file, file.name); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "multipart/form-data" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/StoreApi.ts index 5ca1dd79b3d..0c887d5b8f4 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/StoreApi.ts @@ -4,7 +4,8 @@ import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { Order } from '../models/Order'; @@ -35,16 +36,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -63,14 +55,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -104,16 +88,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -138,12 +113,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -156,7 +125,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { ); requestContext.setBody(serializedBody); - // Apply auth methods return requestContext; } diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/UserApi.ts index 79bed0455ca..1e6fb2ce5d0 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/UserApi.ts @@ -4,7 +4,8 @@ import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { User } from '../models/User'; @@ -34,12 +35,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -82,12 +77,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -130,12 +119,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -180,14 +163,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -220,16 +195,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -265,18 +231,13 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { if (username !== undefined) { requestContext.setQueryParam("username", ObjectSerializer.serialize(username, "string", "")); } + + // Query Params if (password !== undefined) { requestContext.setQueryParam("password", ObjectSerializer.serialize(password, "string", "")); } - // Header Params - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -294,14 +255,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -342,12 +295,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/http/http.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/http/http.ts index beedd8c92e3..242e1a72a5a 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/http/http.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/http/http.ts @@ -35,7 +35,7 @@ export class HttpException extends Error { /** * Represents the body of an outgoing HTTP request. */ -export type RequestBody = undefined | string | FormData; +export type RequestBody = undefined | string | FormData | URLSearchParams; /** * Represents an HTTP request context diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/models/ObjectSerializer.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/models/ObjectSerializer.ts index a1bdc64ae8e..97cf165c7f3 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/models/ObjectSerializer.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/models/ObjectSerializer.ts @@ -26,7 +26,8 @@ let primitives = [ const supportedMediaTypes: { [mediaType: string]: number } = { "application/json": Infinity, - "application/octet-stream": 0 + "application/octet-stream": 0, + "application/x-www-form-urlencoded": 0 } diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/util.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/util.ts index 484e07cdffa..96ea3dfdc77 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/util.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/util.ts @@ -26,3 +26,12 @@ export function isCodeInRange(codeRange: string, code: number): boolean { return true; } } + +/** +* Returns if it can consume form +* +* @param consumes array +*/ +export function canConsumeForm(contentTypes: string[]): boolean { + return contentTypes.indexOf('multipart/form-data') !== -1 +} diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/PetApi.ts index 547125db459..4dc0a87314f 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/PetApi.ts @@ -3,9 +3,11 @@ import { BaseAPIRequestFactory, RequiredError } from './baseapi'; import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { ApiResponse } from '../models/ApiResponse'; import { Pet } from '../models/Pet'; @@ -35,12 +37,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -88,15 +84,9 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params requestContext.setHeaderParam("api_key", ObjectSerializer.serialize(apiKey, "string", "")); - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -134,12 +124,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("status", ObjectSerializer.serialize(status, "Array<'available' | 'pending' | 'sold'>", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -177,12 +161,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { requestContext.setQueryParam("tags", ObjectSerializer.serialize(tags, "Array", "")); } - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -216,14 +194,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -255,12 +225,6 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -310,12 +274,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'application/x-www-form-urlencoded', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (name !== undefined) { // TODO: replace .append with .set @@ -325,9 +294,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('status', status as any); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "application/x-www-form-urlencoded" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods @@ -364,12 +339,17 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - // Form Params - let localVarFormParams = new FormData(); + const useForm = canConsumeForm([ + 'multipart/form-data', + ]); + + let localVarFormParams + if (useForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new URLSearchParams(); + } if (additionalMetadata !== undefined) { // TODO: replace .append with .set @@ -379,9 +359,15 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { // TODO: replace .append with .set localVarFormParams.append('file', file.data, file.name); } + requestContext.setBody(localVarFormParams); - // Body Params + if(!useForm) { + const contentType = ObjectSerializer.getPreferredMediaType([ + "multipart/form-data" + ]); + requestContext.setHeaderParam("Content-Type", contentType); + } let authMethod = null; // Apply auth methods diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/StoreApi.ts index 7780dd52f48..5709bad523e 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/StoreApi.ts @@ -3,9 +3,11 @@ import { BaseAPIRequestFactory, RequiredError } from './baseapi'; import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { Order } from '../models/Order'; @@ -36,16 +38,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -64,14 +57,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -105,16 +90,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -139,12 +115,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -157,7 +127,6 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { ); requestContext.setBody(serializedBody); - // Apply auth methods return requestContext; } diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/UserApi.ts index e12b26fd31d..424c02a45a4 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/UserApi.ts @@ -3,9 +3,11 @@ import { BaseAPIRequestFactory, RequiredError } from './baseapi'; import {Configuration} from '../configuration'; import { RequestContext, HttpMethod, ResponseContext, HttpFile} from '../http/http'; import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; import {ObjectSerializer} from '../models/ObjectSerializer'; import {ApiException} from './exception'; -import {isCodeInRange} from '../util'; +import {canConsumeForm, isCodeInRange} from '../util'; + import { User } from '../models/User'; @@ -35,12 +37,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -83,12 +79,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -131,12 +121,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ @@ -181,14 +165,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -221,16 +197,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - // Header Params - - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -266,18 +233,13 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { if (username !== undefined) { requestContext.setQueryParam("username", ObjectSerializer.serialize(username, "string", "")); } + + // Query Params if (password !== undefined) { requestContext.setQueryParam("password", ObjectSerializer.serialize(password, "string", "")); } - // Header Params - // Form Params - - - // Body Params - - // Apply auth methods return requestContext; } @@ -295,14 +257,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - - - // Body Params let authMethod = null; // Apply auth methods @@ -343,12 +297,6 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") - // Query Params - - // Header Params - - // Form Params - // Body Params const contentType = ObjectSerializer.getPreferredMediaType([ diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/http/http.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/http/http.ts index 4befd50bc1d..21195a4dc51 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/http/http.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/http/http.ts @@ -1,5 +1,6 @@ // TODO: evaluate if we can easily get rid of this library import * as FormData from "form-data"; +import { URLSearchParams } from 'url'; // typings of url-parse are incorrect... // @ts-ignore import * as URLParse from "url-parse"; @@ -40,7 +41,7 @@ export class HttpException extends Error { /** * Represents the body of an outgoing HTTP request. */ -export type RequestBody = undefined | string | FormData; +export type RequestBody = undefined | string | FormData | URLSearchParams; /** * Represents an HTTP request context diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/models/ObjectSerializer.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/models/ObjectSerializer.ts index a1bdc64ae8e..97cf165c7f3 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/models/ObjectSerializer.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/models/ObjectSerializer.ts @@ -26,7 +26,8 @@ let primitives = [ const supportedMediaTypes: { [mediaType: string]: number } = { "application/json": Infinity, - "application/octet-stream": 0 + "application/octet-stream": 0, + "application/x-www-form-urlencoded": 0 } diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/util.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/util.ts index 484e07cdffa..96ea3dfdc77 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/util.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/util.ts @@ -26,3 +26,12 @@ export function isCodeInRange(codeRange: string, code: number): boolean { return true; } } + +/** +* Returns if it can consume form +* +* @param consumes array +*/ +export function canConsumeForm(contentTypes: string[]): boolean { + return contentTypes.indexOf('multipart/form-data') !== -1 +}