Private/Routing/_KrMerge-MRO.ps1
<# .SYNOPSIS Merges two MapRouteOptions objects. .DESCRIPTION This function takes two MapRouteOptions objects and merges them into a single object. The properties from the parent object will be preserved, and the properties from the child object will override any matching properties in the parent object. .PARAMETER Parent The parent MapRouteOptions object. .PARAMETER Child The child MapRouteOptions object. .OUTPUTS Kestrun.Hosting.Options.MapRouteOptions #> function _KrMerge-MRO { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseApprovedVerbs', '')] param( [Parameter(Mandatory)][Kestrun.Hosting.Options.MapRouteOptions]$Parent, [Parameter(Mandatory)][Kestrun.Hosting.Options.MapRouteOptions]$Child ) $pattern = if ($Child.Pattern) { if ($Parent.Pattern) { "$($Parent.Pattern)/$($Child.Pattern)" } else { $Child.Pattern } } else { $Parent.Pattern } $extraRefs = if ($null -ne $Child.ScriptCode.ExtraRefs) { if ($Parent.ScriptCode.ExtraRefs) { $Parent.ScriptCode.ExtraRefs + $Child.ScriptCode.ExtraRefs } else { $Child.ScriptCode.ExtraRefs } } else { $Parent.ScriptCode.ExtraRefs } $merged = @{ Pattern = $pattern.Replace('//', '/') HttpVerbs = if ($null -ne $Child.HttpVerbs -and ($Child.HttpVerbs.Count -gt 0)) { $Child.HttpVerbs } else { $Parent.HttpVerbs } RequireSchemes = _KrMerge-Unique $Parent.RequireSchemes $Child.RequireSchemes RequirePolicies = _KrMerge-Unique $Parent.RequirePolicies $Child.RequirePolicies CorsPolicyName = if ($Child.CorsPolicyName) { $Child.CorsPolicyName } else { $Parent.CorsPolicyName } OpenAPI = if ($Child.OpenAPI) { $Child.OpenAPI } else { $Parent.OpenAPI } ThrowOnDuplicate = $Child.ThrowOnDuplicate -or $Parent.ThrowOnDuplicate ScriptCode = @{ Code = if ($Child.ScriptCode.Code) { $Child.ScriptCode.Code } else { $Parent.ScriptCode.Code } Language = if ($null -ne $Child.ScriptCode.Language) { $Child.ScriptCode.Language } else { $Parent.ScriptCode.Language } ExtraImports = _KrMerge-Unique $Parent.ScriptCode.ExtraImports $Child.ScriptCode.ExtraImports ExtraRefs = $extraRefs Arguments = _KrMerge-Args $Parent.ScriptCode.Arguments $Child.ScriptCode.Arguments } } return New-KrMapRouteOption -Property $merged } |