diff --git a/src/openApi/v2/parser/getModel.ts b/src/openApi/v2/parser/getModel.ts index 48798383..5c3c5ac8 100644 --- a/src/openApi/v2/parser/getModel.ts +++ b/src/openApi/v2/parser/getModel.ts @@ -22,7 +22,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti isDefinition, isReadOnly: definition.readOnly === true, isNullable: definition['x-nullable'] === true, - isRequired: definition.default !== undefined, + isRequired: false, format: definition.format, maximum: definition.maximum, exclusiveMaximum: definition.exclusiveMaximum, diff --git a/src/openApi/v2/parser/getModelProperties.ts b/src/openApi/v2/parser/getModelProperties.ts index 8d17386d..e1dcf27e 100644 --- a/src/openApi/v2/parser/getModelProperties.ts +++ b/src/openApi/v2/parser/getModelProperties.ts @@ -15,7 +15,7 @@ export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema, for (const propertyName in definition.properties) { if (definition.properties.hasOwnProperty(propertyName)) { const property = definition.properties[propertyName]; - const propertyRequired = definition.required?.includes(propertyName) || property.default !== undefined; + const propertyRequired = !!definition.required?.includes(propertyName); if (property.$ref) { const model = getType(property.$ref); models.push({ diff --git a/src/openApi/v2/parser/sortByRequired.ts b/src/openApi/v2/parser/sortByRequired.ts index 05eceb4a..62d380db 100644 --- a/src/openApi/v2/parser/sortByRequired.ts +++ b/src/openApi/v2/parser/sortByRequired.ts @@ -1,9 +1,23 @@ import type { OperationParameter } from '../../../client/interfaces/OperationParameter'; export function sortByRequired(a: OperationParameter, b: OperationParameter): number { - const aNeedsValue = a.isRequired && a.default === undefined; - const bNeedsValue = b.isRequired && b.default === undefined; - if (aNeedsValue && !bNeedsValue) return -1; - if (!aNeedsValue && bNeedsValue) return 1; + const aIsRequiredWithoutDefaultValue = a.isRequired && a.default === undefined; + const bIsRequiredWithoutDefaultValue = b.isRequired && b.default === undefined; + const aIsRequiredWithDefaultValue = a.isRequired && a.default !== undefined; + const bIsRequiredWithDefaultValue = b.isRequired && b.default !== undefined; + const aIsOptionalWithDefaultValue = !a.isRequired && a.default !== undefined; + const bIsOptionalWithDefaultValue = !b.isRequired && b.default !== undefined; + const aIsOptionalWithoutDefaultValue = !a.isRequired && a.default === undefined; + const bIsOptionalWithoutDefaultValue = !b.isRequired && b.default === undefined; + + if (aIsRequiredWithoutDefaultValue && !bIsRequiredWithoutDefaultValue) return -1; + if (bIsRequiredWithoutDefaultValue && !aIsRequiredWithoutDefaultValue) return 1; + if (aIsRequiredWithDefaultValue && !bIsRequiredWithDefaultValue) return -1; + if (bIsRequiredWithDefaultValue && !aIsRequiredWithDefaultValue) return 1; + if (aIsOptionalWithDefaultValue && !bIsOptionalWithDefaultValue) return -1; + if (bIsOptionalWithDefaultValue && !aIsOptionalWithDefaultValue) return 1; + if (aIsOptionalWithoutDefaultValue && !bIsOptionalWithoutDefaultValue) return -1; + if (bIsOptionalWithoutDefaultValue && !aIsOptionalWithoutDefaultValue) return 1; + return 0; } diff --git a/src/openApi/v3/parser/getModel.ts b/src/openApi/v3/parser/getModel.ts index 29007ae8..cac718ce 100644 --- a/src/openApi/v3/parser/getModel.ts +++ b/src/openApi/v3/parser/getModel.ts @@ -23,7 +23,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti isDefinition, isReadOnly: definition.readOnly === true, isNullable: definition.nullable === true, - isRequired: definition.default !== undefined, + isRequired: false, format: definition.format, maximum: definition.maximum, exclusiveMaximum: definition.exclusiveMaximum, diff --git a/src/openApi/v3/parser/getModelProperties.ts b/src/openApi/v3/parser/getModelProperties.ts index ff22fe5a..1f1d80ce 100644 --- a/src/openApi/v3/parser/getModelProperties.ts +++ b/src/openApi/v3/parser/getModelProperties.ts @@ -15,7 +15,7 @@ export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema, for (const propertyName in definition.properties) { if (definition.properties.hasOwnProperty(propertyName)) { const property = definition.properties[propertyName]; - const propertyRequired = definition.required?.includes(propertyName) || property.default !== undefined; + const propertyRequired = !!definition.required?.includes(propertyName); if (property.$ref) { const model = getType(property.$ref); models.push({ diff --git a/src/openApi/v3/parser/sortByRequired.ts b/src/openApi/v3/parser/sortByRequired.ts index 05eceb4a..62d380db 100644 --- a/src/openApi/v3/parser/sortByRequired.ts +++ b/src/openApi/v3/parser/sortByRequired.ts @@ -1,9 +1,23 @@ import type { OperationParameter } from '../../../client/interfaces/OperationParameter'; export function sortByRequired(a: OperationParameter, b: OperationParameter): number { - const aNeedsValue = a.isRequired && a.default === undefined; - const bNeedsValue = b.isRequired && b.default === undefined; - if (aNeedsValue && !bNeedsValue) return -1; - if (!aNeedsValue && bNeedsValue) return 1; + const aIsRequiredWithoutDefaultValue = a.isRequired && a.default === undefined; + const bIsRequiredWithoutDefaultValue = b.isRequired && b.default === undefined; + const aIsRequiredWithDefaultValue = a.isRequired && a.default !== undefined; + const bIsRequiredWithDefaultValue = b.isRequired && b.default !== undefined; + const aIsOptionalWithDefaultValue = !a.isRequired && a.default !== undefined; + const bIsOptionalWithDefaultValue = !b.isRequired && b.default !== undefined; + const aIsOptionalWithoutDefaultValue = !a.isRequired && a.default === undefined; + const bIsOptionalWithoutDefaultValue = !b.isRequired && b.default === undefined; + + if (aIsRequiredWithoutDefaultValue && !bIsRequiredWithoutDefaultValue) return -1; + if (bIsRequiredWithoutDefaultValue && !aIsRequiredWithoutDefaultValue) return 1; + if (aIsRequiredWithDefaultValue && !bIsRequiredWithDefaultValue) return -1; + if (bIsRequiredWithDefaultValue && !aIsRequiredWithDefaultValue) return 1; + if (aIsOptionalWithDefaultValue && !bIsOptionalWithDefaultValue) return -1; + if (bIsOptionalWithDefaultValue && !aIsOptionalWithDefaultValue) return 1; + if (aIsOptionalWithoutDefaultValue && !bIsOptionalWithoutDefaultValue) return -1; + if (bIsOptionalWithoutDefaultValue && !aIsOptionalWithoutDefaultValue) return 1; + return 0; } diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index 74637bbd..2bcaf7ba 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -1927,31 +1927,31 @@ export class DefaultsService { /** * @param parameterStringWithNoDefault This is a string with no default + * @param parameterStringWithDefault This is a string with default + * @param parameterStringWithEmptyDefault This is a string with empty default * @param parameterOptionalStringWithDefault This is a optional string with default * @param parameterOptionalStringWithEmptyDefault This is a optional string with empty default * @param parameterOptionalStringWithNoDefault This is a optional string with no default - * @param parameterStringWithDefault This is a string with default - * @param parameterStringWithEmptyDefault This is a string with empty default * @throws ApiError */ public static async callToTestOrderOfParams( parameterStringWithNoDefault: string, + parameterStringWithDefault: string = 'Hello World!', + parameterStringWithEmptyDefault: string = '', parameterOptionalStringWithDefault: string = 'Hello World!', parameterOptionalStringWithEmptyDefault: string = '', parameterOptionalStringWithNoDefault?: string, - parameterStringWithDefault: string = 'Hello World!', - parameterStringWithEmptyDefault: string = '', ): Promise { const result = await __request({ method: 'PUT', path: \`/api/v\${OpenAPI.VERSION}/defaults\`, query: { 'parameterStringWithNoDefault': parameterStringWithNoDefault, + 'parameterStringWithDefault': parameterStringWithDefault, + 'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault, 'parameterOptionalStringWithDefault': parameterOptionalStringWithDefault, 'parameterOptionalStringWithEmptyDefault': parameterOptionalStringWithEmptyDefault, 'parameterOptionalStringWithNoDefault': parameterOptionalStringWithNoDefault, - 'parameterStringWithDefault': parameterStringWithDefault, - 'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault, }, }); return result.body; @@ -4493,7 +4493,7 @@ export class ComplexService { requestBody?: { readonly key: string | null, name: string | null, - enabled: boolean, + enabled?: boolean, readonly type: 'Monkey' | 'Horse' | 'Bird', listOfModels?: Array | null, listOfStrings?: Array | null, @@ -4590,31 +4590,31 @@ export class DefaultsService { /** * @param parameterStringWithNoDefault This is a string with no default + * @param parameterStringWithDefault This is a string with default + * @param parameterStringWithEmptyDefault This is a string with empty default * @param parameterOptionalStringWithDefault This is a optional string with default * @param parameterOptionalStringWithEmptyDefault This is a optional string with empty default * @param parameterOptionalStringWithNoDefault This is a optional string with no default - * @param parameterStringWithDefault This is a string with default - * @param parameterStringWithEmptyDefault This is a string with empty default * @throws ApiError */ public static async callToTestOrderOfParams( parameterStringWithNoDefault: string, + parameterStringWithDefault: string = 'Hello World!', + parameterStringWithEmptyDefault: string = '', parameterOptionalStringWithDefault: string = 'Hello World!', parameterOptionalStringWithEmptyDefault: string = '', parameterOptionalStringWithNoDefault?: string, - parameterStringWithDefault: string = 'Hello World!', - parameterStringWithEmptyDefault: string = '', ): Promise { const result = await __request({ method: 'PUT', path: \`/api/v\${OpenAPI.VERSION}/defaults\`, query: { 'parameterStringWithNoDefault': parameterStringWithNoDefault, + 'parameterStringWithDefault': parameterStringWithDefault, + 'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault, 'parameterOptionalStringWithDefault': parameterOptionalStringWithDefault, 'parameterOptionalStringWithEmptyDefault': parameterOptionalStringWithEmptyDefault, 'parameterOptionalStringWithNoDefault': parameterOptionalStringWithNoDefault, - 'parameterStringWithDefault': parameterStringWithDefault, - 'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault, }, }); return result.body;