diff --git a/modules/openapi-generator/src/main/resources/typescript-axios/api.mustache b/modules/openapi-generator/src/main/resources/typescript-axios/api.mustache index 545e01b9a53c..337e79a292e2 100644 --- a/modules/openapi-generator/src/main/resources/typescript-axios/api.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-axios/api.mustache @@ -17,7 +17,7 @@ import FormData from 'form-data' {{/withNodeImports}} // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction{{#withAWSV4Signature}}, setAWS4SignatureInterceptor{{/withAWSV4Signature}} } from './common{{importFileExtension}}'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded{{#withAWSV4Signature}}, setAWS4SignatureInterceptor{{/withAWSV4Signature}} } from './common{{importFileExtension}}'; import type { RequestArgs } from './base{{importFileExtension}}'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base{{importFileExtension}}'; diff --git a/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache b/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache index f35e7ab99eb6..4cefa916c64b 100644 --- a/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache @@ -166,7 +166,7 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur if ({{paramName}}) { {{#isCollectionFormatMulti}} {{#contentType}} - localVarFormParams.append('{{baseName}}', new Blob([JSON.stringify({{paramName}})], { type: "{{contentType}}", })); + localVarFormParams.append('{{baseName}}', new Blob([JSON.stringify({{paramName}}, replaceWithSerializableTypeIfNeeded)], { type: "{{contentType}}", })); {{/contentType}} {{^contentType}} {{paramName}}.forEach((element) => { @@ -184,7 +184,7 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur localVarFormParams.append('{{baseName}}', {{paramName}} as any);{{/isBoolean}}{{/isPrimitiveType}}{{#isPrimitiveType}}{{#isBoolean}} localVarFormParams.append('{{baseName}}', String({{paramName}}) as any);{{/isBoolean}}{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isEnumRef}} localVarFormParams.append('{{baseName}}', {{paramName}} as any);{{/isEnumRef}}{{^isEnumRef}} - localVarFormParams.append('{{baseName}}', new Blob([JSON.stringify({{paramName}})], { type: "application/json", }));{{/isEnumRef}}{{/isPrimitiveType}}{{/multipartFormData}} + localVarFormParams.append('{{baseName}}', new Blob([JSON.stringify({{paramName}}, replaceWithSerializableTypeIfNeeded)], { type: "application/json", }));{{/isEnumRef}}{{/isPrimitiveType}}{{/multipartFormData}} }{{/isArray}} {{/formParams}} {{/vendorExtensions}} @@ -214,10 +214,10 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur {{#isArray}} if ({{paramName}}) { {{#uniqueItems}} - let mapped = Array.from({{paramName}}).map(value => ("{{{dataType}}}" !== "Set") ? JSON.stringify(value) : (value || "")); + let mapped = Array.from({{paramName}}).map(value => ("{{{dataType}}}" !== "Set") ? JSON.stringify(value, replaceWithSerializableTypeIfNeeded) : (value || "")); {{/uniqueItems}} {{^uniqueItems}} - let mapped = {{paramName}}.map(value => ("{{{dataType}}}" !== "Array") ? JSON.stringify(value) : (value || "")); + let mapped = {{paramName}}.map(value => ("{{{dataType}}}" !== "Array") ? JSON.stringify(value, replaceWithSerializableTypeIfNeeded) : (value || "")); {{/uniqueItems}} localVarHeaderParameter['{{baseName}}'] = mapped.join(COLLECTION_FORMATS["{{collectionFormat}}"]); } @@ -232,7 +232,7 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur {{! isString is falsy also for $ref that defines a string or enum type}} localVarHeaderParameter['{{baseName}}'] = typeof {{paramName}} === 'string' ? {{paramName}} - : JSON.stringify({{paramName}}); + : JSON.stringify({{paramName}}, replaceWithSerializableTypeIfNeeded); {{/isString}} } {{/isArray}} diff --git a/modules/openapi-generator/src/main/resources/typescript-axios/common.mustache b/modules/openapi-generator/src/main/resources/typescript-axios/common.mustache index 3b28a8220214..be84fd288005 100755 --- a/modules/openapi-generator/src/main/resources/typescript-axios/common.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-axios/common.mustache @@ -80,7 +80,7 @@ export const setAWS4SignatureInterceptor = async function (globalAxios: AxiosIns function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -105,13 +105,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/echo_api/typescript-axios/build/api.ts b/samples/client/echo_api/typescript-axios/build/api.ts index 6e5ea79072be..89ad20f49d80 100644 --- a/samples/client/echo_api/typescript-axios/build/api.ts +++ b/samples/client/echo_api/typescript-axios/build/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; @@ -1089,7 +1089,7 @@ export const FormApiAxiosParamCreator = function (configuration?: Configuration) if (marker !== undefined) { - localVarFormParams.append('marker', new Blob([JSON.stringify(marker)], { type: "application/json", })); + localVarFormParams.append('marker', new Blob([JSON.stringify(marker, replaceWithSerializableTypeIfNeeded)], { type: "application/json", })); } localVarHeaderParameter['Content-Type'] = 'multipart/form-data'; localVarHeaderParameter['Accept'] = 'text/plain'; @@ -1352,12 +1352,12 @@ export const HeaderApiAxiosParamCreator = function (configuration?: Configuratio if (integerHeader != null) { localVarHeaderParameter['integer_header'] = typeof integerHeader === 'string' ? integerHeader - : JSON.stringify(integerHeader); + : JSON.stringify(integerHeader, replaceWithSerializableTypeIfNeeded); } if (booleanHeader != null) { localVarHeaderParameter['boolean_header'] = typeof booleanHeader === 'string' ? booleanHeader - : JSON.stringify(booleanHeader); + : JSON.stringify(booleanHeader, replaceWithSerializableTypeIfNeeded); } if (stringHeader != null) { localVarHeaderParameter['string_header'] = String(stringHeader); @@ -1368,7 +1368,7 @@ export const HeaderApiAxiosParamCreator = function (configuration?: Configuratio if (enumRefStringHeader != null) { localVarHeaderParameter['enum_ref_string_header'] = typeof enumRefStringHeader === 'string' ? enumRefStringHeader - : JSON.stringify(enumRefStringHeader); + : JSON.stringify(enumRefStringHeader, replaceWithSerializableTypeIfNeeded); } setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; diff --git a/samples/client/echo_api/typescript-axios/build/common.ts b/samples/client/echo_api/typescript-axios/build/common.ts index 9410167703b9..695daf91e698 100644 --- a/samples/client/echo_api/typescript-axios/build/common.ts +++ b/samples/client/echo_api/typescript-axios/build/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/others/typescript-axios/with-separate-models-and-api-inheritance/common.ts b/samples/client/others/typescript-axios/with-separate-models-and-api-inheritance/common.ts index 5a8d182be66c..3d084388cdd8 100644 --- a/samples/client/others/typescript-axios/with-separate-models-and-api-inheritance/common.ts +++ b/samples/client/others/typescript-axios/with-separate-models-and-api-inheritance/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/composed-schemas/api.ts b/samples/client/petstore/typescript-axios/builds/composed-schemas/api.ts index 70e648775ed1..53c2afbbc9be 100644 --- a/samples/client/petstore/typescript-axios/builds/composed-schemas/api.ts +++ b/samples/client/petstore/typescript-axios/builds/composed-schemas/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; diff --git a/samples/client/petstore/typescript-axios/builds/composed-schemas/common.ts b/samples/client/petstore/typescript-axios/builds/composed-schemas/common.ts index 769b805940e7..a05324d91215 100644 --- a/samples/client/petstore/typescript-axios/builds/composed-schemas/common.ts +++ b/samples/client/petstore/typescript-axios/builds/composed-schemas/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/default/api.ts b/samples/client/petstore/typescript-axios/builds/default/api.ts index 25c51b3d9ec2..99e14d8a5de0 100644 --- a/samples/client/petstore/typescript-axios/builds/default/api.ts +++ b/samples/client/petstore/typescript-axios/builds/default/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; diff --git a/samples/client/petstore/typescript-axios/builds/default/common.ts b/samples/client/petstore/typescript-axios/builds/default/common.ts index 99397a86c102..47f5ad63c5b4 100644 --- a/samples/client/petstore/typescript-axios/builds/default/common.ts +++ b/samples/client/petstore/typescript-axios/builds/default/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/es6-target/api.ts b/samples/client/petstore/typescript-axios/builds/es6-target/api.ts index 25c51b3d9ec2..99e14d8a5de0 100644 --- a/samples/client/petstore/typescript-axios/builds/es6-target/api.ts +++ b/samples/client/petstore/typescript-axios/builds/es6-target/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; diff --git a/samples/client/petstore/typescript-axios/builds/es6-target/common.ts b/samples/client/petstore/typescript-axios/builds/es6-target/common.ts index 99397a86c102..47f5ad63c5b4 100644 --- a/samples/client/petstore/typescript-axios/builds/es6-target/common.ts +++ b/samples/client/petstore/typescript-axios/builds/es6-target/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/test-petstore/api.ts b/samples/client/petstore/typescript-axios/builds/test-petstore/api.ts index 86de5e91358e..aefaae4e861c 100644 --- a/samples/client/petstore/typescript-axios/builds/test-petstore/api.ts +++ b/samples/client/petstore/typescript-axios/builds/test-petstore/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; @@ -1342,7 +1342,7 @@ export const FakeApiAxiosParamCreator = function (configuration?: Configuration) localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded'; if (enumHeaderStringArray) { - let mapped = enumHeaderStringArray.map(value => ("Array<'>' | '$'>" !== "Array") ? JSON.stringify(value) : (value || "")); + let mapped = enumHeaderStringArray.map(value => ("Array<'>' | '$'>" !== "Array") ? JSON.stringify(value, replaceWithSerializableTypeIfNeeded) : (value || "")); localVarHeaderParameter['enum_header_string_array'] = mapped.join(COLLECTION_FORMATS["csv"]); } if (enumHeaderString != null) { @@ -1413,12 +1413,12 @@ export const FakeApiAxiosParamCreator = function (configuration?: Configuration) if (requiredBooleanGroup != null) { localVarHeaderParameter['required_boolean_group'] = typeof requiredBooleanGroup === 'string' ? requiredBooleanGroup - : JSON.stringify(requiredBooleanGroup); + : JSON.stringify(requiredBooleanGroup, replaceWithSerializableTypeIfNeeded); } if (booleanGroup != null) { localVarHeaderParameter['boolean_group'] = typeof booleanGroup === 'string' ? booleanGroup - : JSON.stringify(booleanGroup); + : JSON.stringify(booleanGroup, replaceWithSerializableTypeIfNeeded); } setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; diff --git a/samples/client/petstore/typescript-axios/builds/test-petstore/common.ts b/samples/client/petstore/typescript-axios/builds/test-petstore/common.ts index 9c52b9dbdba0..2ca92d4061f8 100644 --- a/samples/client/petstore/typescript-axios/builds/test-petstore/common.ts +++ b/samples/client/petstore/typescript-axios/builds/test-petstore/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/with-complex-headers/api.ts b/samples/client/petstore/typescript-axios/builds/with-complex-headers/api.ts index 915bde0c28a1..834fcd2d23d7 100644 --- a/samples/client/petstore/typescript-axios/builds/with-complex-headers/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-complex-headers/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; @@ -156,16 +156,16 @@ export const PetApiAxiosParamCreator = function (configuration?: Configuration) if (header1 != null) { localVarHeaderParameter['header1'] = typeof header1 === 'string' ? header1 - : JSON.stringify(header1); + : JSON.stringify(header1, replaceWithSerializableTypeIfNeeded); } if (header2) { - let mapped = header2.map(value => ("Array" !== "Array") ? JSON.stringify(value) : (value || "")); + let mapped = header2.map(value => ("Array" !== "Array") ? JSON.stringify(value, replaceWithSerializableTypeIfNeeded) : (value || "")); localVarHeaderParameter['header2'] = mapped.join(COLLECTION_FORMATS["csv"]); } if (accept != null) { localVarHeaderParameter['Accept'] = typeof accept === 'string' ? accept - : JSON.stringify(accept); + : JSON.stringify(accept, replaceWithSerializableTypeIfNeeded); } setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; diff --git a/samples/client/petstore/typescript-axios/builds/with-complex-headers/common.ts b/samples/client/petstore/typescript-axios/builds/with-complex-headers/common.ts index 99397a86c102..47f5ad63c5b4 100644 --- a/samples/client/petstore/typescript-axios/builds/with-complex-headers/common.ts +++ b/samples/client/petstore/typescript-axios/builds/with-complex-headers/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts index 6b0430e50cd6..5e5e3763acec 100644 --- a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; @@ -1119,7 +1119,7 @@ export const FakeApiAxiosParamCreator = function (configuration?: Configuration) localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded'; if (enumHeaderStringArray) { - let mapped = enumHeaderStringArray.map(value => ("Array<'>' | '$'>" !== "Array") ? JSON.stringify(value) : (value || "")); + let mapped = enumHeaderStringArray.map(value => ("Array<'>' | '$'>" !== "Array") ? JSON.stringify(value, replaceWithSerializableTypeIfNeeded) : (value || "")); localVarHeaderParameter['enum_header_string_array'] = mapped.join(COLLECTION_FORMATS["csv"]); } if (enumHeaderString != null) { @@ -1190,12 +1190,12 @@ export const FakeApiAxiosParamCreator = function (configuration?: Configuration) if (requiredBooleanGroup != null) { localVarHeaderParameter['required_boolean_group'] = typeof requiredBooleanGroup === 'string' ? requiredBooleanGroup - : JSON.stringify(requiredBooleanGroup); + : JSON.stringify(requiredBooleanGroup, replaceWithSerializableTypeIfNeeded); } if (booleanGroup != null) { localVarHeaderParameter['boolean_group'] = typeof booleanGroup === 'string' ? booleanGroup - : JSON.stringify(booleanGroup); + : JSON.stringify(booleanGroup, replaceWithSerializableTypeIfNeeded); } setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; @@ -1448,7 +1448,7 @@ export const FakeApiAxiosParamCreator = function (configuration?: Configuration) localVarHeaderParameter['Accept'] = 'application/json'; if (headerUnique) { - let mapped = Array.from(headerUnique).map(value => ("Set" !== "Set") ? JSON.stringify(value) : (value || "")); + let mapped = Array.from(headerUnique).map(value => ("Set" !== "Set") ? JSON.stringify(value, replaceWithSerializableTypeIfNeeded) : (value || "")); localVarHeaderParameter['headerUnique'] = mapped.join(COLLECTION_FORMATS["csv"]); } setSearchParams(localVarUrlObj, localVarQueryParameter); diff --git a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/common.ts b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/common.ts index 9c52b9dbdba0..2ca92d4061f8 100644 --- a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/common.ts +++ b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/with-interfaces-and-with-single-request-param/api.ts b/samples/client/petstore/typescript-axios/builds/with-interfaces-and-with-single-request-param/api.ts index 5018ab2c830e..b79f703d415c 100644 --- a/samples/client/petstore/typescript-axios/builds/with-interfaces-and-with-single-request-param/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-interfaces-and-with-single-request-param/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; diff --git a/samples/client/petstore/typescript-axios/builds/with-interfaces-and-with-single-request-param/common.ts b/samples/client/petstore/typescript-axios/builds/with-interfaces-and-with-single-request-param/common.ts index 99397a86c102..47f5ad63c5b4 100644 --- a/samples/client/petstore/typescript-axios/builds/with-interfaces-and-with-single-request-param/common.ts +++ b/samples/client/petstore/typescript-axios/builds/with-interfaces-and-with-single-request-param/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/with-interfaces/api.ts b/samples/client/petstore/typescript-axios/builds/with-interfaces/api.ts index fac98cb24f49..59a6c9b3970a 100644 --- a/samples/client/petstore/typescript-axios/builds/with-interfaces/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-interfaces/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; diff --git a/samples/client/petstore/typescript-axios/builds/with-interfaces/common.ts b/samples/client/petstore/typescript-axios/builds/with-interfaces/common.ts index 99397a86c102..47f5ad63c5b4 100644 --- a/samples/client/petstore/typescript-axios/builds/with-interfaces/common.ts +++ b/samples/client/petstore/typescript-axios/builds/with-interfaces/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/with-node-imports/api.ts b/samples/client/petstore/typescript-axios/builds/with-node-imports/api.ts index 0a6819c15fa9..cb194ad518fb 100644 --- a/samples/client/petstore/typescript-axios/builds/with-node-imports/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-node-imports/api.ts @@ -22,7 +22,7 @@ import { URL, URLSearchParams } from 'url'; import FormData from 'form-data' // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; diff --git a/samples/client/petstore/typescript-axios/builds/with-node-imports/common.ts b/samples/client/petstore/typescript-axios/builds/with-node-imports/common.ts index 3be098b3f3f5..c090de6bd2c4 100644 --- a/samples/client/petstore/typescript-axios/builds/with-node-imports/common.ts +++ b/samples/client/petstore/typescript-axios/builds/with-node-imports/common.ts @@ -67,7 +67,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -92,13 +92,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/common.ts b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/common.ts index 99397a86c102..47f5ad63c5b4 100644 --- a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/common.ts +++ b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version/api.ts b/samples/client/petstore/typescript-axios/builds/with-npm-version/api.ts index 25c51b3d9ec2..99e14d8a5de0 100644 --- a/samples/client/petstore/typescript-axios/builds/with-npm-version/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-npm-version/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version/common.ts b/samples/client/petstore/typescript-axios/builds/with-npm-version/common.ts index 99397a86c102..47f5ad63c5b4 100644 --- a/samples/client/petstore/typescript-axios/builds/with-npm-version/common.ts +++ b/samples/client/petstore/typescript-axios/builds/with-npm-version/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/api.ts b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/api.ts index d1d084378b37..9161b99729bf 100644 --- a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; diff --git a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/common.ts b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/common.ts index 99397a86c102..47f5ad63c5b4 100644 --- a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/common.ts +++ b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); } diff --git a/samples/client/petstore/typescript-axios/builds/with-string-enums/api.ts b/samples/client/petstore/typescript-axios/builds/with-string-enums/api.ts index 1579fe519606..99cad5aab3d0 100644 --- a/samples/client/petstore/typescript-axios/builds/with-string-enums/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-string-enums/api.ts @@ -18,7 +18,7 @@ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; import globalAxios from 'axios'; // Some imports not used depending on template conditions // @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from './common'; import type { RequestArgs } from './base'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; diff --git a/samples/client/petstore/typescript-axios/builds/with-string-enums/common.ts b/samples/client/petstore/typescript-axios/builds/with-string-enums/common.ts index 99397a86c102..47f5ad63c5b4 100644 --- a/samples/client/petstore/typescript-axios/builds/with-string-enums/common.ts +++ b/samples/client/petstore/typescript-axios/builds/with-string-enums/common.ts @@ -66,7 +66,7 @@ export const setOAuthToObject = async function (object: any, name: string, scope function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { if (parameter == null) return; if (typeof parameter === "object") { - if (Array.isArray(parameter)) { + if (Array.isArray(parameter) || parameter instanceof Set) { (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); } else { @@ -91,13 +91,21 @@ export const setSearchParams = function (url: URL, ...objects: any[]) { url.search = searchParams.toString(); } +export const replaceWithSerializableTypeIfNeeded = function(key: any, value: any) { + if (value instanceof Set) { + return Array.from(value); + } else { + return value; + } +} + export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { const nonString = typeof value !== 'string'; const needsSerialization = nonString && configuration && configuration.isJsonMime ? configuration.isJsonMime(requestOptions.headers['Content-Type']) : nonString; return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) + ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : (value || ""); }