Pode icon indicating copy to clipboard operation
Pode copied to clipboard

Add configuration parameter `Web.OpenApi.UsePodeYamlInternal`

Open mdaneri opened this issue 8 months ago • 0 comments

Description

This pull request adds a new configuration parameter Web.OpenApi.UsePodeYamlInternal to the Pode module. This parameter forces the use of the internal YAML converter even if PSYaml or powershell-yaml modules are available. Additionally, it optimizes the YAML conversion process by caching the module import status.

Changes

  • Added the Web.OpenApi.UsePodeYamlInternal configuration parameter.
  • Updated the ConvertTo-PodeYaml function to utilize this new parameter.

New Code

<#
.SYNOPSIS
    creates a YAML description of the data in the object - based on https://github.com/Phil-Factor/PSYaml

.DESCRIPTION
    This produces YAML from any object you pass to it.

.PARAMETER Object
    The object that you want scripted out. This parameter accepts input via the pipeline.

.PARAMETER Depth
    The depth that you want your object scripted to

.EXAMPLE
    Get-PodeOpenApiDefinition|ConvertTo-PodeYaml
#>
function ConvertTo-PodeYaml {
    [CmdletBinding()]
    [OutputType([string])]
    param (
        [parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
        [AllowNull()]
        $InputObject,

        [parameter()]
        [int]
        $Depth = 16
    )

    begin {
        $pipelineObject = @()
    }

    process {
        $pipelineObject += $_
    }

    end {
        if ($pipelineObject.Count -gt 1) {
            $InputObject = $pipelineObject
        }

        if ($PodeContext.Server.Web.OpenApi.UsePodeYamlInternal) {
            return ConvertTo-PodeYamlInternal -InputObject $InputObject -Depth $Depth -NoNewLine
        }

        if ($null -eq $PodeContext.Server.InternalCache.YamlModuleImported) {
            $PodeContext.Server.InternalCache.YamlModuleImported = ((Test-PodeModuleInstalled -Name 'PSYaml') -or (Test-PodeModuleInstalled -Name 'powershell-yaml'))
        }

        if ($PodeContext.Server.InternalCache.YamlModuleImported) {
            return ($InputObject | ConvertTo-Yaml)
        }
        else {
            return ConvertTo-PodeYamlInternal -InputObject $InputObject -Depth $Depth -NoNewLine
        }
    }
}

Reason for Change

The addition of this configuration parameter allows users to force the use of the internal YAML converter, which can be necessary for portability or compatibility reasons.

mdaneri avatar Jun 24 '24 20:06 mdaneri