GitHub query filter
(text, object)
| 323 | export const filters = { |
| 324 | /**GitHub query filter */ |
| 325 | github(text, object) { |
| 326 | console.debug(`metrics/svg/ghquery > checking ${text} against ${JSON.stringify(object)}`) |
| 327 | const result = text.split(/(?<!NOT) /).map(x => x.trim()).filter(x => x).map(criteria => { |
| 328 | const [key, filters] = criteria.split(":") |
| 329 | const value = object[/^NOT /.test(key) ? key.substring(3).trim() : /^-/.test(key) ? key.substring(1).trim() : key.trim()] |
| 330 | console.debug(`metrics/svg/ghquery > checking ${criteria} against ${value}`) |
| 331 | if (value === undefined) { |
| 332 | console.debug(`metrics/svg/ghquery > value for ${criteria} is undefined, considering it truthy`) |
| 333 | return true |
| 334 | } |
| 335 | return filters?.split(",").map(x => x.trim()).filter(x => x).map(filter => { |
| 336 | if (!Number.isFinite(Number(value))) { |
| 337 | if (/^NOT /.test(filter)) |
| 338 | return value !== filter.substring(3).trim() |
| 339 | if (/^-/.test(key)) |
| 340 | return value !== filter |
| 341 | return value === filter.trim() |
| 342 | } |
| 343 | switch (true) { |
| 344 | case /^true$/.test(filter): |
| 345 | return value === true |
| 346 | case /^false$/.test(filter): |
| 347 | return value === false |
| 348 | case /^>\d+$/.test(filter): |
| 349 | return value > Number(filter.substring(1)) |
| 350 | case /^>=\d+$/.test(filter): |
| 351 | return value >= Number(filter.substring(2)) |
| 352 | case /^<\d+$/.test(filter): |
| 353 | return value < Number(filter.substring(1)) |
| 354 | case /^<=\d+$/.test(filter): |
| 355 | return value <= Number(filter.substring(2)) |
| 356 | case /^\d+$/.test(filter): |
| 357 | return value === Number(filter) |
| 358 | case /^\d+..\d+$/.test(filter): { |
| 359 | const [a, b] = filter.split("..").map(Number) |
| 360 | return (value >= a) && (value <= b) |
| 361 | } |
| 362 | default: |
| 363 | return false |
| 364 | } |
| 365 | }).reduce((a, b) => a || b, false) ?? false |
| 366 | }).reduce((a, b) => a && b, true) |
| 367 | console.debug(`metrics/svg/ghquery > ${result ? "matching" : "not matching"}`) |
| 368 | return result |
| 369 | }, |
| 370 | /**Repository filter*/ |
| 371 | repo(repository, patterns, {debug = true} = {}) { |
| 372 | //Disable filtering when no pattern is provided |