Add simplifyFeed

This commit is contained in:
Jon Staab
2025-04-30 16:43:23 -07:00
parent f20eab929e
commit 19f8e2ecb4
3 changed files with 117 additions and 58 deletions
+58
View File
@@ -206,3 +206,61 @@ export const walkFeed = (feed: Feed, visit: (feed: Feed) => void) => {
}
}
}
export const simplifyFeed = (feed: Feed): Feed => {
if (isUnionFeed(feed)) {
const args = getFeedArgs(feed)
if (args.length === 1) return simplifyFeed(args[0])
const modified: Feed[] = []
for (let sub of args.map(simplifyFeed)) {
if (isUnionFeed(sub)) {
modified.push(...getFeedArgs(sub))
} else {
modified.push(sub)
}
}
return makeUnionFeed(...modified)
}
if (isIntersectionFeed(feed)) {
const args = getFeedArgs(feed)
if (args.length === 1) return simplifyFeed(args[0])
const modified: Feed[] = []
for (let sub of args.map(simplifyFeed)) {
if (isIntersectionFeed(sub)) {
modified.push(...getFeedArgs(sub))
} else {
modified.push(sub)
}
}
return makeIntersectionFeed(...modified)
}
if (isDifferenceFeed(feed)) {
const args = getFeedArgs(feed)
if (args.length === 1) return simplifyFeed(args[0])
const modified: Feed[] = []
for (let sub of args.map(simplifyFeed)) {
if (isDifferenceFeed(sub)) {
modified.push(...getFeedArgs(sub))
} else {
modified.push(sub)
}
}
return makeDifferenceFeed(...modified)
}
return feed
}