internal static object Union()

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;
    }