diff --git a/lib/util/string-match.ts b/lib/util/string-match.ts index 42c7b234faaaf785aea1c377e0942f4e5d66494b..5576ba3d179ac211cdc34616ef429f923a7946ed 100644 --- a/lib/util/string-match.ts +++ b/lib/util/string-match.ts @@ -2,21 +2,31 @@ import is from '@sindresorhus/is'; import { minimatch } from './minimatch'; import { regEx } from './regex'; +export type StringMatchPredicate = (s: string) => boolean; + export function isDockerDigest(input: string): boolean { return /^sha256:[a-f0-9]{64}$/i.test(input); } -export function matchRegexOrMinimatch(input: string, pattern: string): boolean { +export function makeRegexOrMinimatchPredicate( + pattern: string, +): StringMatchPredicate | null { if (pattern.length > 2 && pattern.startsWith('/') && pattern.endsWith('/')) { try { const regex = regEx(pattern.slice(1, -1)); - return regex.test(input); + return (x: string): boolean => regex.test(x); } catch (err) { - return false; + return null; } } - return minimatch(pattern, { dot: true }).match(input); + const mm = minimatch(pattern, { dot: true }); + return (x: string): boolean => mm.match(x); +} + +export function matchRegexOrMinimatch(input: string, pattern: string): boolean { + const predicate = makeRegexOrMinimatchPredicate(pattern); + return predicate ? predicate(input) : false; } export function anyMatchRegexOrMinimatch( @@ -51,11 +61,9 @@ function parseConfigRegex(input: string): RegExp | null { return null; } -type ConfigRegexPredicate = (s: string) => boolean; - export function configRegexPredicate( input: string, -): ConfigRegexPredicate | null { +): StringMatchPredicate | null { if (isConfigRegex(input)) { const configRegex = parseConfigRegex(input); if (configRegex) {