in src/PSRule.Rules.Azure/Data/Template/Functions.cs [749:784]
internal static object Union(ITemplateContext context, object[] args)
{
if (CountArgs(args) < 2)
throw ArgumentsOutOfRange(nameof(Union), args);
var hasMocks = false;
var mockArrays = 0;
// Find first non-null case.
for (var i = 0; i < args.Length; i++)
{
if (args[i] is IMock mock)
{
if (mock.BaseType == TypePrimitive.Array)
mockArrays++;
hasMocks = true;
continue;
}
// Array
if (ExpressionHelpers.IsArray(args[i]))
return ExpressionHelpers.UnionArray(args);
// Object
if (ExpressionHelpers.IsObject(args[i]))
return ExpressionHelpers.UnionObject(args, deepMerge: true);
}
// Handle mocks as arrays.
if (hasMocks && mockArrays == args.Length)
return ExpressionHelpers.UnionArray(args);
// Handle mocks as objects if no other object or array is found.
return hasMocks ? ExpressionHelpers.UnionObject(args, deepMerge: true) : null;
}