@projectwallace/css-code-coverage 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -24,16 +24,6 @@ declare function parse_coverage(input: string): {
24
24
  }[];
25
25
  }[];
26
26
  //#endregion
27
- //#region src/lib/types.d.ts
28
- type NodeList = Iterable<{
29
- textContent: string;
30
- }> | NodeListOf<HTMLStyleElement>;
31
- interface Parser {
32
- (html: string): {
33
- querySelectorAll: (selector: string) => NodeList;
34
- };
35
- }
36
- //#endregion
37
27
  //#region src/lib/index.d.ts
38
28
  type CoverageData = {
39
29
  unused_bytes: number;
@@ -73,6 +63,6 @@ type CoverageResult = CoverageData & {
73
63
  * 4. Calculate used/unused CSS bytes (fastest path, no inspection of the actual CSS needed)
74
64
  * 5. Calculate line-coverage, byte-coverage per stylesheet
75
65
  */
76
- declare function calculate_coverage(coverage: Coverage[], parse_html?: Parser): CoverageResult;
66
+ declare function calculate_coverage(coverage: Coverage[]): Promise<CoverageResult>;
77
67
  //#endregion
78
- export { type Coverage, CoverageData, CoverageResult, type Parser, type Range, StylesheetCoverage, calculate_coverage, parse_coverage };
68
+ export { type Coverage, CoverageData, CoverageResult, type Range, StylesheetCoverage, calculate_coverage, parse_coverage };
package/dist/index.js CHANGED
@@ -135,8 +135,15 @@ function ext(url) {
135
135
 
136
136
  //#endregion
137
137
  //#region src/lib/remap-html.ts
138
- function remap_html(parse_html, html, old_ranges) {
139
- let doc = parse_html(html);
138
+ async function get_dom_parser() {
139
+ if (typeof window !== "undefined" && "DOMParser" in window)
140
+ /* v8 ignore */
141
+ return new window.DOMParser();
142
+ let { DOMParser } = await import("./esm-CWr4VY0v.js");
143
+ return new DOMParser();
144
+ }
145
+ async function remap_html(html, old_ranges) {
146
+ let doc = (await get_dom_parser()).parseFromString(html, "text/html");
140
147
  let combined_css = "";
141
148
  let new_ranges = [];
142
149
  let current_offset = 0;
@@ -164,7 +171,7 @@ function remap_html(parse_html, html, old_ranges) {
164
171
  function is_html(text) {
165
172
  return /<\/?(html|body|head|div|span|script|style)/i.test(text);
166
173
  }
167
- function filter_coverage(coverage, parse_html) {
174
+ async function filter_coverage(coverage) {
168
175
  let result = [];
169
176
  for (let entry of coverage) {
170
177
  let extension = ext(entry.url).toLowerCase();
@@ -174,8 +181,7 @@ function filter_coverage(coverage, parse_html) {
174
181
  continue;
175
182
  }
176
183
  if (is_html(entry.text)) {
177
- if (!parse_html) continue;
178
- let { css, ranges } = remap_html(parse_html, entry.text, entry.ranges);
184
+ let { css, ranges } = await remap_html(entry.text, entry.ranges);
179
185
  result.push({
180
186
  url: entry.url,
181
187
  text: css,
@@ -209,10 +215,9 @@ function ratio(fraction, total) {
209
215
  * 4. Calculate used/unused CSS bytes (fastest path, no inspection of the actual CSS needed)
210
216
  * 5. Calculate line-coverage, byte-coverage per stylesheet
211
217
  */
212
- function calculate_coverage(coverage, parse_html) {
218
+ async function calculate_coverage(coverage) {
213
219
  let total_files_found = coverage.length;
214
- if (!is_valid_coverage(coverage)) throw new TypeError("No valid coverage data found");
215
- let coverage_per_stylesheet = deduplicate_entries(prettify(filter_coverage(coverage, parse_html))).map(({ text, url, ranges }) => {
220
+ let coverage_per_stylesheet = deduplicate_entries(prettify(await filter_coverage(coverage))).map(({ text, url, ranges }) => {
216
221
  function is_line_covered(line, start_offset) {
217
222
  let end = start_offset + line.length;
218
223
  let next_offset = end + 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectwallace/css-code-coverage",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "",
5
5
  "author": "Bart Veneman <bart@projectwallace.com>",
6
6
  "repository": {
@@ -21,7 +21,7 @@
21
21
  ],
22
22
  "license": "EUPL-1.2",
23
23
  "engines": {
24
- "node": ">=22.18.0"
24
+ "node": ">=20"
25
25
  },
26
26
  "type": "module",
27
27
  "files": [