internal static object Intersection()

in src/PSRule.Rules.Azure/Data/Template/Functions.cs [417:454]


    internal static object Intersection(ITemplateContext context, object[] args)
    {
        if (CountArgs(args) < 2)
            throw ArgumentsOutOfRange(nameof(Intersection), args);

        // Array
        if (args[0] is JArray jArray)
        {
            IEnumerable<JToken> intersection = jArray;
            for (var i = 1; i < args.Length; i++)
            {
                if (!TryJArray(args[i], out var value))
                    throw ArgumentFormatInvalid(nameof(Intersection));

                intersection = intersection.Intersect(value);
            }
            return new JArray(intersection.ToArray());
        }

        // Object
        if (args[0] is JObject jObject)
        {
            var intersection = jObject.DeepClone() as JObject;
            for (var i = 1; i < args.Length; i++)
            {
                if (!TryJObject(args[i], out var value))
                    throw ArgumentFormatInvalid(nameof(Intersection));

                foreach (var prop in intersection.Properties().ToArray())
                {
                    if (!(value.ContainsKey(prop.Name) && JToken.DeepEquals(value[prop.Name], prop.Value)))
                        intersection.Remove(prop.Name);
                }
            }
            return intersection;
        }
        throw ArgumentFormatInvalid(nameof(Intersection));
    }