| 123456789101112131415161718192021222324252627282930313233343536373839404142 | 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;
 |