MCPcopy
hub / github.com/lowlighter/metrics / github

Function github

source/app/metrics/utils.mjs:325–369  ·  view source on GitHub ↗

GitHub query filter

(text, object)

Source from the content-addressed store, hash-verified

323export 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

Callers

nothing calls this directly

Calls 2

debugMethod · 0.80
filterMethod · 0.80

Tested by

no test coverage detected