Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

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;