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