feat(plugins/notables): advanced filters (#789)

This commit is contained in:
Simon Lecoq
2022-01-19 14:24:33 +01:00
committed by GitHub
parent a7079285f3
commit 3df178d997
3 changed files with 30 additions and 5 deletions

View File

@@ -309,15 +309,25 @@ export function ghfilter(text, object) {
console.debug(`metrics/svg/ghquery > checking ${text} against ${JSON.stringify(object)}`)
const result = text.split(/(?<!NOT) /).map(x => x.trim()).filter(x => x).map(criteria => {
const [key, filters] = criteria.split(":")
const value = object[/^NOT /.test(key) ? key.substring(3).trim() : key.trim()]
const value = object[/^NOT /.test(key) ? key.substring(3).trim() : /^-/.test(key) ? key.substring(1).trim() : key.trim()]
console.debug(`metrics/svg/ghquery > checking ${criteria} against ${value}`)
if (value === undefined) {
console.debug(`metrics/svg/ghquery > value for ${criteria} is undefined, considering it truthy`)
return true
}
return filters?.split(",").map(x => x.trim()).filter(x => x).map(filter => {
if (!Number.isFinite(Number(value))) {
if (/^NOT /.test(filter))
return value !== filter.substring(3).trim()
if (/^-/.test(key))
return value !== filter
return value === filter.trim()
}
switch (true) {
case /^true$/.test(filter):
return value === true
case /^false$/.test(filter):
return value === false
case /^>\d+$/.test(filter):
return value > Number(filter.substring(1))
case /^>=\d+$/.test(filter):