From 0bb5fcb6f781728701b6b71177b0c2293568e429 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov <zharinov@users.noreply.github.com> Date: Sun, 28 Nov 2021 11:04:44 +0300 Subject: [PATCH] refactor(util/regex): Enable strict null checks (#12866) * refactor(util/regex): Enable strict null checks * Fix coverage * Refactor guard checks --- lib/util/package-rules.ts | 10 ++++--- lib/util/regex.ts | 27 +++++++++++-------- .../repository/process/lookup/filter.ts | 8 +++--- tsconfig.strict.json | 2 ++ 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/lib/util/package-rules.ts b/lib/util/package-rules.ts index aa0af30dec..c112ee21ba 100644 --- a/lib/util/package-rules.ts +++ b/lib/util/package-rules.ts @@ -5,7 +5,7 @@ import { mergeChildConfig } from '../config'; import type { PackageRule, PackageRuleInputConfig } from '../config/types'; import { logger } from '../logger'; import * as allVersioning from '../versioning'; -import { configRegexPredicate, isConfigRegex, regEx } from './regex'; +import { configRegexPredicate, regEx } from './regex'; function matchesRule( inputConfig: PackageRuleInputConfig, @@ -205,9 +205,11 @@ function matchesRule( if (matchCurrentVersion) { const version = allVersioning.get(versioning); const matchCurrentVersionStr = matchCurrentVersion.toString(); - if (isConfigRegex(matchCurrentVersionStr)) { - const matches = configRegexPredicate(matchCurrentVersionStr); - if (!unconstrainedValue && !matches(currentValue)) { + const matchCurrentVersionPred = configRegexPredicate( + matchCurrentVersionStr + ); + if (matchCurrentVersionPred) { + if (!unconstrainedValue && !matchCurrentVersionPred(currentValue)) { return false; } positiveMatch = true; diff --git a/lib/util/regex.ts b/lib/util/regex.ts index fe3479c444..a59bf7b0cc 100644 --- a/lib/util/regex.ts +++ b/lib/util/regex.ts @@ -22,8 +22,9 @@ try { export function regEx(pattern: string | RegExp, flags?: string): RegExp { const key = `${pattern.toString()}:${flags}`; - if (cache.has(key)) { - return cache.get(key); + const cachedResult = cache.get(key); + if (cachedResult) { + return cachedResult; } try { @@ -63,16 +64,20 @@ function parseConfigRegex(input: string): RegExp | null { return null; } -type ConfigRegexPredicate = (string) => boolean; +type ConfigRegexPredicate = (s: string) => boolean; -export function configRegexPredicate(input: string): ConfigRegexPredicate { - const configRegex = parseConfigRegex(input); - if (configRegex) { - const isPositive = !input.startsWith('!'); - return (x: string): boolean => { - const res = configRegex.test(x); - return isPositive ? res : !res; - }; +export function configRegexPredicate( + input: string +): ConfigRegexPredicate | null { + if (isConfigRegex(input)) { + const configRegex = parseConfigRegex(input); + if (configRegex) { + const isPositive = !input.startsWith('!'); + return (x: string): boolean => { + const res = configRegex.test(x); + return isPositive ? res : !res; + }; + } } return null; } diff --git a/lib/workers/repository/process/lookup/filter.ts b/lib/workers/repository/process/lookup/filter.ts index 60c290a637..74730e8fff 100644 --- a/lib/workers/repository/process/lookup/filter.ts +++ b/lib/workers/repository/process/lookup/filter.ts @@ -2,7 +2,7 @@ import * as semver from 'semver'; import { CONFIG_VALIDATION } from '../../../../constants/error-messages'; import type { Release } from '../../../../datasource/types'; import { logger } from '../../../../logger'; -import { configRegexPredicate, isConfigRegex } from '../../../../util/regex'; +import { configRegexPredicate } from '../../../../util/regex'; import type { VersioningApi } from '../../../../versioning'; import * as npmVersioning from '../../../../versioning/npm'; import * as pep440 from '../../../../versioning/pep440'; @@ -60,10 +60,10 @@ export function filterVersions( } if (allowedVersions) { - if (isConfigRegex(allowedVersions)) { - const isAllowed = configRegexPredicate(allowedVersions); + const isAllowedPred = configRegexPredicate(allowedVersions); + if (isAllowedPred) { filteredVersions = filteredVersions.filter(({ version }) => - isAllowed(version) + isAllowedPred(version) ); } else if (versioning.isValid(allowedVersions)) { filteredVersions = filteredVersions.filter((v) => diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 250c37b205..546c9d9a86 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -127,6 +127,8 @@ "./lib/util/mask.spec.ts", "./lib/util/mask.ts", "./lib/util/object.ts", + "./lib/util/regex.spec.ts", + "./lib/util/regex.ts", "./lib/util/sanitize.ts", "./lib/util/split.ts", "./lib/workers/pr/changelog/hbs-template.ts", -- GitLab