diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellClientCodegen.java index bcdf58f57fcd..9c46377c097e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PowerShellClientCodegen.java @@ -922,6 +922,10 @@ public Map postProcessModels(Map objs) { model.anyOf.remove("ModelNull"); } + // add vendor extension for additonalProperties: true + if ("null".equals(model.parent)) { + model.vendorExtensions.put("x-additional-properties", true); + } } return objs; diff --git a/modules/openapi-generator/src/main/resources/powershell/model_simple.mustache b/modules/openapi-generator/src/main/resources/powershell/model_simple.mustache index 6e7eadef78d7..ab7098fe9f9e 100644 --- a/modules/openapi-generator/src/main/resources/powershell/model_simple.mustache +++ b/modules/openapi-generator/src/main/resources/powershell/model_simple.mustache @@ -129,13 +129,24 @@ function ConvertFrom-{{{apiNamePrefix}}}JsonTo{{{classname}}} { $PSBoundParameters | Out-DebugParameter | Write-Debug $JsonParameters = ConvertFrom-Json -InputObject $Json + {{#vendorExtensions.x-additional-properties}} + ${{{apiNamePrefix}}}{{{classname}}}AdditionalProperties = @{} + {{/vendorExtensions.x-additional-properties}} # check if Json contains properties not defined in {{{apiNamePrefix}}}{{{classname}}} $AllProperties = ({{#allVars}}"{{{baseName}}}"{{^-last}}, {{/-last}}{{/allVars}}) foreach ($name in $JsonParameters.PsObject.Properties.Name) { + {{^vendorExtensions.x-additional-properties}} if (!($AllProperties.Contains($name))) { throw "Error! JSON key '$name' not found in the properties: $($AllProperties)" } + {{/vendorExtensions.x-additional-properties}} + {{#vendorExtensions.x-additional-properties}} + # store undefined properties in additionalProperties + if (!($AllProperties.Contains($name))) { + ${{{apiNamePrefix}}}{{{classname}}}AdditionalProperties[$name] = $JsonParameters.PSobject.Properties[$name].value + } + {{/vendorExtensions.x-additional-properties}} } {{#requiredVars}} @@ -166,6 +177,9 @@ function ConvertFrom-{{{apiNamePrefix}}}JsonTo{{{classname}}} { "<>" = ${<>} <> <<={{ }}=>> + {{#vendorExtensions.x-additional-properties}} + "AdditionalProperties" = ${{{apiNamePrefix}}}{{{classname}}}AdditionalProperties + {{/vendorExtensions.x-additional-properties}} } return $PSO diff --git a/modules/openapi-generator/src/test/resources/3_0/powershell/petstore.yaml b/modules/openapi-generator/src/test/resources/3_0/powershell/petstore.yaml index 11ed2854ba5a..b3a0dfd3c11d 100644 --- a/modules/openapi-generator/src/test/resources/3_0/powershell/petstore.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/powershell/petstore.yaml @@ -699,6 +699,7 @@ components: xml: name: User Tag: + additionalProperties: true title: Pet Tag description: A tag for a pet type: object diff --git a/samples/client/petstore/powershell/src/PSPetstore/Model/Tag.ps1 b/samples/client/petstore/powershell/src/PSPetstore/Model/Tag.ps1 index 0f0044ef35c9..8a7caf8d562a 100644 --- a/samples/client/petstore/powershell/src/PSPetstore/Model/Tag.ps1 +++ b/samples/client/petstore/powershell/src/PSPetstore/Model/Tag.ps1 @@ -77,12 +77,14 @@ function ConvertFrom-PSJsonToTag { $PSBoundParameters | Out-DebugParameter | Write-Debug $JsonParameters = ConvertFrom-Json -InputObject $Json + $PSTagAdditionalProperties = @{} # check if Json contains properties not defined in PSTag $AllProperties = ("id", "name") foreach ($name in $JsonParameters.PsObject.Properties.Name) { + # store undefined properties in additionalProperties if (!($AllProperties.Contains($name))) { - throw "Error! JSON key '$name' not found in the properties: $($AllProperties)" + $PSTagAdditionalProperties[$name] = $JsonParameters.PSobject.Properties[$name].value } } @@ -101,6 +103,7 @@ function ConvertFrom-PSJsonToTag { $PSO = [PSCustomObject]@{ "id" = ${Id} "name" = ${Name} + "AdditionalProperties" = $PSTagAdditionalProperties } return $PSO diff --git a/samples/client/petstore/powershell/src/PSPetstore/PSPetstore.psd1 b/samples/client/petstore/powershell/src/PSPetstore/PSPetstore.psd1 index 9b7ca03faf56..7b9c725fae2d 100644 --- a/samples/client/petstore/powershell/src/PSPetstore/PSPetstore.psd1 +++ b/samples/client/petstore/powershell/src/PSPetstore/PSPetstore.psd1 @@ -3,7 +3,7 @@ # # Generated by: OpenAPI Generator Team # -# Generated on: 5/19/20 +# Generated on: 6/3/20 # @{ @@ -87,7 +87,8 @@ FunctionsToExport = 'Add-PSPet', 'Remove-Pet', 'Find-PSPetsByStatus', 'Find-PSPe 'Set-PSConfiguration', 'Set-PSConfigurationApiKey', 'Set-PSConfigurationApiKeyPrefix', 'Set-PSConfigurationDefaultHeader', 'Get-PSHostSetting', - 'Get-PSUrlFromHostSetting' + 'Get-PSUrlFromHostSetting', 'Set-PSConfigurationHttpSigning', + 'Get-PSConfigurationHttpSigning' # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. CmdletsToExport = @()