Private/Document/ConvertFrom-OpenApiSwagger2SimpleSchema.ps1
|
function ConvertFrom-OpenApiSwagger2SimpleSchema { <# .SYNOPSIS Builds an OpenAPI 3 schema from the inline type keywords of a Swagger 2.0 parameter, items or header object. .DESCRIPTION Copies type, format, items (recursively), enum, default and the validation keywords; 'type: file' becomes { type: string, format: binary }. x- extensions are kept. #> [CmdletBinding()] [OutputType([System.Collections.Specialized.OrderedDictionary])] param( [Parameter(Mandatory)] [System.Collections.IDictionary]$Node ) $schema = [System.Collections.Specialized.OrderedDictionary]::new([System.StringComparer]::Ordinal) if ([string]$Node['type'] -ceq 'file') { $schema['type'] = 'string' $schema['format'] = 'binary' } elseif ($Node.Contains('type')) { $schema['type'] = $Node['type'] } $keywords = @('format', 'enum', 'default', 'maximum', 'exclusiveMaximum', 'minimum', 'exclusiveMinimum', 'maxLength', 'minLength', 'pattern', 'maxItems', 'minItems', 'uniqueItems', 'multipleOf', 'example') foreach ($keyword in $keywords) { if ($Node.Contains($keyword) -and -not $schema.Contains($keyword)) { $schema[$keyword] = $Node[$keyword] } } if ($Node['items'] -is [System.Collections.IDictionary]) { if ($Node['items'].Contains('$ref')) { $schema['items'] = $Node['items'] } else { $schema['items'] = ConvertFrom-OpenApiSwagger2SimpleSchema -Node $Node['items'] } } foreach ($key in @($Node.Keys)) { if ($key.StartsWith('x-')) { $schema[$key] = $Node[$key] } } return $schema } |