Select Git revision
package-rules.ts
package-rules.ts 8.49 KiB
import is from '@sindresorhus/is';
import minimatch from 'minimatch';
import slugify from 'slugify';
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';
function matchesRule(
inputConfig: PackageRuleInputConfig,
packageRule: PackageRule
): boolean {
const {
versioning,
packageFile,
lockFiles,
depType,
depTypes,
depName,
currentValue,
currentVersion,
lockedVersion,
updateType,
isBump,
sourceUrl,
language,
baseBranch,
manager,
datasource,
} = inputConfig;
// Setting empty arrays simplifies our logic later
const matchFiles = packageRule.matchFiles || [];
const matchPaths = packageRule.matchPaths || [];
const matchLanguages = packageRule.matchLanguages || [];
const matchBaseBranches = packageRule.matchBaseBranches || [];
const matchManagers = packageRule.matchManagers || [];
const matchDatasources = packageRule.matchDatasources || [];
const matchDepTypes = packageRule.matchDepTypes || [];
const matchPackageNames = packageRule.matchPackageNames || [];
let matchPackagePatterns = packageRule.matchPackagePatterns || [];
const matchPackagePrefixes = packageRule.matchPackagePrefixes || [];
const excludePackageNames = packageRule.excludePackageNames || [];
const excludePackagePatterns = packageRule.excludePackagePatterns || [];
const excludePackagePrefixes = packageRule.excludePackagePrefixes || [];
const matchSourceUrlPrefixes = packageRule.matchSourceUrlPrefixes || [];
const matchCurrentVersion = packageRule.matchCurrentVersion || null;
const matchUpdateTypes = packageRule.matchUpdateTypes || [];
let positiveMatch = false;
// Massage a positive patterns patch if an exclude one is present
if (
(excludePackageNames.length ||
excludePackagePatterns.length ||
excludePackagePrefixes.length) &&
!(
matchPackageNames.length ||
matchPackagePatterns.length ||
matchPackagePrefixes.length
)
) {
matchPackagePatterns = ['.*'];
}
if (matchFiles.length) {
const isMatch = matchFiles.some(
(fileName) =>
packageFile === fileName ||
(is.array(lockFiles) && lockFiles?.includes(fileName))
);
if (!isMatch) {
return false;