| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | class OldSelector {  constructor(selector, prefix) {    this.prefix = prefix    this.prefixed = selector.prefixed(this.prefix)    this.regexp = selector.regexp(this.prefix)    this.prefixeds = selector      .possible()      .map(x => [selector.prefixed(x), selector.regexp(x)])    this.unprefixed = selector.name    this.nameRegexp = selector.regexp()  }  /**   * Does rule contain an unnecessary prefixed selector   */  check(rule) {    if (!rule.selector.includes(this.prefixed)) {      return false    }    if (!rule.selector.match(this.regexp)) {      return false    }    if (this.isHack(rule)) {      return false    }    return true  }  /**   * Is rule a hack without unprefixed version bottom   */  isHack(rule) {    let index = rule.parent.index(rule) + 1    let rules = rule.parent.nodes    while (index < rules.length) {      let before = rules[index].selector      if (!before) {        return true      }      if (before.includes(this.unprefixed) && before.match(this.nameRegexp)) {        return false      }      let some = false      for (let [string, regexp] of this.prefixeds) {        if (before.includes(string) && before.match(regexp)) {          some = true          break        }      }      if (!some) {        return true      }      index += 1    }    return true  }}module.exports = OldSelector
 |