-
Notifications
You must be signed in to change notification settings - Fork 2.5k
/
Copy pathpackage-patterns.ts
91 lines (81 loc) · 2.28 KB
/
package-patterns.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import is from '@sindresorhus/is';
import type { PackageRule, PackageRuleInputConfig } from '../../config/types';
import { logger } from '../../logger';
import { regEx } from '../regex';
import { Matcher } from './base';
import { massagePattern } from './utils';
function matchPatternsAgainstName(
matchPackagePatterns: string[],
name: string,
): boolean {
let isMatch = false;
for (const packagePattern of matchPackagePatterns) {
if (isPackagePatternMatch(packagePattern, name)) {
isMatch = true;
}
}
return isMatch;
}
export class PackagePatternsMatcher extends Matcher {
override matches(
{ depName, packageName }: PackageRuleInputConfig,
packageRule: PackageRule,
): boolean | null {
const { matchPackagePatterns } = packageRule;
if (is.undefined(matchPackagePatterns)) {
return null;
}
if (is.undefined(depName)) {
return false;
}
if (
is.string(packageName) &&
matchPatternsAgainstName(matchPackagePatterns, packageName)
) {
return true;
}
if (matchPatternsAgainstName(matchPackagePatterns, depName)) {
logger.once.warn(
{ packageRule, packageName, depName },
'Use matchDepPatterns instead of matchPackagePatterns',
);
return true;
}
return false;
}
override excludes(
{ depName, packageName }: PackageRuleInputConfig,
packageRule: PackageRule,
): boolean | null {
const { excludePackagePatterns } = packageRule;
// ignore lockFileMaintenance for backwards compatibility
if (is.undefined(excludePackagePatterns)) {
return null;
}
if (is.undefined(depName)) {
return false;
}
if (
is.string(packageName) &&
matchPatternsAgainstName(excludePackagePatterns, packageName)
) {
return true;
}
if (matchPatternsAgainstName(excludePackagePatterns, depName)) {
logger.once.warn(
{ packageRule, packageName, depName },
'Use excludeDepPatterns instead of excludePackagePatterns',
);
return true;
}
return false;
}
}
function isPackagePatternMatch(pckPattern: string, pck: string): boolean {
const re = regEx(massagePattern(pckPattern));
if (re.test(pck)) {
logger.trace(`${pck} matches against ${String(re)}`);
return true;
}
return false;
}