• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

FullHuman / purgecss / 4851732933

01 May 2023 02:00PM UTC coverage: 86.679%. Remained the same
4851732933

Pull #1107

github

GitHub
Merge d4daf2632 into 152ccba46
Pull Request #1107: build(deps-dev): bump grunt from 1.5.3 to 1.6.1

317 of 372 branches covered (85.22%)

Branch coverage included in aggregate %.

145 of 161 relevant lines covered (90.06%)

333.12 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/packages/purgecss/src/ExtractorResultSets.ts
1
import { ExtractorResult } from "./types";
2

3
function mergeSets(into: Set<string>, from?: string[] | Set<string>): void {
4
  if (from) {
1,169✔
5
    from.forEach(into.add, into);
1,169✔
6
  }
7
}
8

9
/**
10
 * @public
11
 */
12
class ExtractorResultSets {
13
  private undetermined = new Set<string>();
210✔
14
  private attrNames = new Set<string>();
210✔
15
  private attrValues = new Set<string>();
210✔
16
  private classes = new Set<string>();
210✔
17
  private ids = new Set<string>();
210✔
18
  private tags = new Set<string>();
210✔
19

20
  constructor(er: ExtractorResult) {
21
    this.merge(er);
210✔
22
  }
23

24
  merge(that: ExtractorResult | ExtractorResultSets): this {
25
    if (Array.isArray(that)) {
369✔
26
      mergeSets(this.undetermined, that);
209✔
27
    } else if (that instanceof ExtractorResultSets) {
160✔
28
      mergeSets(this.undetermined, that.undetermined);
159✔
29
      mergeSets(this.attrNames, that.attrNames);
159✔
30
      mergeSets(this.attrValues, that.attrValues);
159✔
31
      mergeSets(this.classes, that.classes);
159✔
32
      mergeSets(this.ids, that.ids);
159✔
33
      mergeSets(this.tags, that.tags);
159✔
34
    } else {
35
      // ExtractorResultDetailed:
36
      mergeSets(this.undetermined, that.undetermined);
1✔
37
      if (that.attributes) {
1✔
38
        mergeSets(this.attrNames, that.attributes.names);
1✔
39
        mergeSets(this.attrValues, that.attributes.values);
1✔
40
      }
41
      mergeSets(this.classes, that.classes);
1✔
42
      mergeSets(this.ids, that.ids);
1✔
43
      mergeSets(this.tags, that.tags);
1✔
44
    }
45
    return this;
369✔
46
  }
47

48
  hasAttrName(name: string): boolean {
49
    return this.attrNames.has(name) || this.undetermined.has(name);
55✔
50
  }
51

52
  private someAttrValue(predicate: (value: string) => boolean): boolean {
53
    for (const val of this.attrValues) {
19✔
54
      if (predicate(val)) return true;
7✔
55
    }
56
    for (const val of this.undetermined) {
18✔
57
      if (predicate(val)) return true;
2,435✔
58
    }
59
    return false;
10✔
60
  }
61

62
  hasAttrPrefix(prefix: string): boolean {
63
    return this.someAttrValue((value) => value.startsWith(prefix));
151✔
64
  }
65

66
  hasAttrSuffix(suffix: string): boolean {
67
    return this.someAttrValue((value) => value.endsWith(suffix));
72✔
68
  }
69

70
  hasAttrSubstr(substr: string): boolean {
71
    const wordSubstr = substr.trim().split(" ");
8✔
72
    return wordSubstr.every((word) =>
8✔
73
      this.someAttrValue((value) => value.includes(word))
2,219✔
74
    );
75
  }
76

77
  hasAttrValue(value: string): boolean {
78
    return this.attrValues.has(value) || this.undetermined.has(value);
15✔
79
  }
80

81
  hasClass(name: string): boolean {
82
    return this.classes.has(name) || this.undetermined.has(name);
41,108✔
83
  }
84

85
  hasId(id: string): boolean {
86
    return this.ids.has(id) || this.undetermined.has(id);
5✔
87
  }
88

89
  hasTag(tag: string): boolean {
90
    return this.tags.has(tag) || this.undetermined.has(tag);
252✔
91
  }
92
}
93

94
export default ExtractorResultSets;
22✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc