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

FullHuman / purgecss / 11981163739

22 Nov 2024 10:31PM CUT coverage: 91.081%. Remained the same
11981163739

push

github

Ffloriel
docs: add breaking changes for v7 about named export for postcss plugin

351 of 420 branches covered (83.57%)

Branch coverage included in aggregate %.

517 of 533 relevant lines covered (97.0%)

5427.67 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,176✔
5
    from.forEach(into.add, into);
1,176✔
6
  }
7
}
8

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

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

24
  merge(that: ExtractorResult | ExtractorResultSets): this {
25
    if (Array.isArray(that)) {
371✔
26
      mergeSets(this.undetermined, that);
210✔
27
    } else if (that instanceof ExtractorResultSets) {
161✔
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);
2✔
37
      if (that.attributes) {
2✔
38
        mergeSets(this.attrNames, that.attributes.names);
2✔
39
        mergeSets(this.attrValues, that.attributes.values);
2✔
40
      }
41
      mergeSets(this.classes, that.classes);
2✔
42
      mergeSets(this.ids, that.ids);
2✔
43
      mergeSets(this.tags, that.tags);
2✔
44
    }
45
    return this;
371✔
46
  }
47

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

52
  private someAttrValue(predicate: (value: string) => boolean): boolean {
53
    for (const val of this.attrValues) {
31✔
54
      if (predicate(val)) return true;
152✔
55
    }
56
    for (const val of this.undetermined) {
22✔
57
      if (predicate(val)) return true;
387✔
58
    }
59
    return false;
14✔
60
  }
61

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

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

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

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

81
  hasClass(name: string): boolean {
82
    return this.classes.has(name) || this.undetermined.has(name);
41,106✔
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);
266✔
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