zhangnaisong
2023-08-05 24d66c8d82b628a06e93dbb1abfea2049b3d45ab
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
class Rule {
  constructor({ test, value }) {
    if (!(test instanceof RegExp)) {
      throw new TypeError('`test` should be a regexp');
    }
 
    this.test = test;
    this.value = value;
  }
 
  /**
   * @param {string} value
   * @return {boolean}
   */
  match(value) {
    return this.test.test(value);
  }
}
 
class RuleSet {
  /**
   * @param {Array<{test: RegExp, uri: string}>} rules
   */
  constructor(rules) {
    if (!Array.isArray(rules)) {
      throw new TypeError('`data` should be an array');
    }
 
    this.rules = rules.map(params => new Rule(params));
  }
 
  /**
   * @param {string} value
   * @return {Rule|null}
   */
  getMatchedRule(value) {
    return this.rules.find(rule => rule.match(value)) || null;
  }
}
 
module.exports = RuleSet;
module.exports.Rule = Rule;