Skip to content

Commit 2409b43

Browse files
committed
Revert "Simplify (#8)"
This reverts commit 73d9f0a.
1 parent dd7ad45 commit 2409b43

19 files changed

+501
-401
lines changed

package-lock.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
},
5353
"dependencies": {
5454
"@projectwallace/format-css": "^2.1.1",
55+
"css-tree": "^3.1.0",
5556
"valibot": "^1.1.0"
5657
}
5758
}

src/chunkify.test.ts

Lines changed: 0 additions & 101 deletions
This file was deleted.

src/chunkify.ts

Lines changed: 0 additions & 48 deletions
This file was deleted.

src/css-tree.d.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
declare module 'css-tree/tokenizer' {
2+
export function tokenize(css: string, callback: (type: number, start: number, end: number) => void): void
3+
4+
// css-tree tokens: https://github.com/csstree/csstree/blob/be5ea1257009960c04cccdb58bb327263e27e3b3/lib/tokenizer/types.js
5+
// https://www.w3.org/TR/css-syntax-3/
6+
export const EOF = 0 // <EOF-token>
7+
export const Ident = 1 // <ident-token>
8+
export const Function = 2 // <function-token>
9+
export const AtKeyword = 3 // <at-keyword-token>
10+
export const Hash = 4 // <hash-token>
11+
export const String = 5 // <string-token>
12+
export const BadString = 6 // <bad-string-token>
13+
export const Url = 7 // <url-token>
14+
export const BadUrl = 8 // <bad-url-token>
15+
export const Delim = 9 // <delim-token>
16+
export const Number = 10 // <number-token>
17+
export const Percentage = 11 // <percentage-token>
18+
export const Dimension = 12 // <dimension-token>
19+
export const WhiteSpace = 13 // <whitespace-token>
20+
export const CDO = 14 // <CDO-token>
21+
export const CDC = 15 // <CDC-token>
22+
export const Colon = 16 // <colon-token> :
23+
export const Semicolon = 17 // <semicolon-token> ;
24+
export const Comma = 18 // <comma-token> ,
25+
export const LeftSquareBracket = 19 // <[-token>
26+
export const RightSquareBracket = 20 // <]-token>
27+
export const LeftParenthesis = 21 // <(-token>
28+
export const RightParenthesis = 22 // <)-token>
29+
export const LeftCurlyBracket = 23 // <{-token>
30+
export const RightCurlyBracket = 24 // <}-token>
31+
export const Comment = 25
32+
33+
export const tokenTypes = {
34+
EOF,
35+
Ident,
36+
Function,
37+
AtKeyword,
38+
Hash,
39+
String,
40+
BadString,
41+
Url,
42+
BadUrl,
43+
Delim,
44+
Number,
45+
Percentage,
46+
Dimension,
47+
WhiteSpace,
48+
CDO,
49+
CDC,
50+
Colon,
51+
Semicolon,
52+
Comma,
53+
LeftSquareBracket,
54+
RightSquareBracket,
55+
LeftParenthesis,
56+
RightParenthesis,
57+
LeftCurlyBracket,
58+
RightCurlyBracket,
59+
Comment,
60+
}
61+
}

src/decuplicate.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import type { Coverage, Range } from './parse-coverage.ts'
66
* - if a duplicate stylesheet enters the room, we add it's ranges to the existing stylesheet's ranges
77
* - only bytes of deduplicated stylesheets are counted
88
*/
9-
export function deduplicate_entries(entries: Coverage[]): Coverage[] {
9+
export function deduplicate_entries(entries: Coverage[]): Map<NonNullable<Coverage['text']>, Pick<Coverage, 'ranges' | 'url'>> {
1010
let checked_stylesheets = new Map<string, { url: string; ranges: Range[] }>()
1111

1212
for (let entry of entries) {
13-
let text = entry.text
13+
let text = entry.text || ''
1414
if (checked_stylesheets.has(text)) {
1515
let sheet = checked_stylesheets.get(text)!
1616
let ranges = sheet.ranges
@@ -36,5 +36,5 @@ export function deduplicate_entries(entries: Coverage[]): Coverage[] {
3636
}
3737
}
3838

39-
return Array.from(checked_stylesheets, ([text, { url, ranges }]) => ({ text, url, ranges }))
39+
return checked_stylesheets
4040
}

src/deduplicate.test.ts

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ test('handles a single entry', () => {
77
ranges: [{ start: 0, end: 4 }],
88
url: 'example.com',
99
}
10-
expect(deduplicate_entries([entry])).toEqual([entry])
10+
expect(deduplicate_entries([entry])).toEqual(new Map([[entry.text, { url: entry.url, ranges: entry.ranges }]]))
1111
})
1212

13-
test('deduplicates a simple duplicate entry', () => {
13+
test('deduplicats a simple duplicate entry', () => {
1414
let entry = {
1515
text: 'a {}',
1616
ranges: [{ start: 0, end: 4 }],
1717
url: 'example.com',
1818
}
19-
expect(deduplicate_entries([entry, entry])).toEqual([entry])
19+
expect(deduplicate_entries([entry, entry])).toEqual(new Map([[entry.text, { url: entry.url, ranges: entry.ranges }]]))
2020
})
2121

2222
test('merges two identical texts with different URLs and identical ranges', () => {
@@ -33,7 +33,7 @@ test('merges two identical texts with different URLs and identical ranges', () =
3333
},
3434
]
3535
let first = entries.at(0)!
36-
expect(deduplicate_entries(entries)).toEqual([{ text: first.text, url: first.url, ranges: first.ranges }])
36+
expect(deduplicate_entries(entries)).toEqual(new Map([[first.text, { url: first.url, ranges: first.ranges }]]))
3737
})
3838

3939
test('merges different ranges on identical CSS, different URLs', () => {
@@ -50,7 +50,9 @@ test('merges different ranges on identical CSS, different URLs', () => {
5050
},
5151
]
5252
let first = entries.at(0)!
53-
expect(deduplicate_entries(entries)).toEqual([{ text: first.text, url: first.url, ranges: [first.ranges[0], entries[1]!.ranges[0]] }])
53+
expect(deduplicate_entries(entries)).toEqual(
54+
new Map([[first.text, { url: first.url, ranges: [first.ranges[0], entries[1]!.ranges[0]] }]]),
55+
)
5456
})
5557

5658
test('merges different ranges on identical CSS, identical URLs', () => {
@@ -66,9 +68,9 @@ test('merges different ranges on identical CSS, identical URLs', () => {
6668
url: 'example.com',
6769
},
6870
]
69-
expect(deduplicate_entries(entries)).toEqual([
70-
{ text: entries[0]!.text, url: entries[0]!.url, ranges: [entries[0]!.ranges[0], entries[1]!.ranges[0]] },
71-
])
71+
expect(deduplicate_entries(entries)).toEqual(
72+
new Map([[entries[0]!.text, { url: entries[0]!.url, ranges: [entries[0]!.ranges[0], entries[1]!.ranges[0]] }]]),
73+
)
7274
})
7375

7476
test('does not merge different CSS with different URLs and identical ranges', () => {
@@ -84,10 +86,12 @@ test('does not merge different CSS with different URLs and identical ranges', ()
8486
url: 'example.com/b',
8587
},
8688
]
87-
expect(deduplicate_entries(entries)).toEqual([
88-
{ text: entries[0]!.text, url: entries[0]!.url, ranges: entries[0]!.ranges },
89-
{ text: entries[1]!.text, url: entries[1]!.url, ranges: entries[1]!.ranges },
90-
])
89+
expect(deduplicate_entries(entries)).toEqual(
90+
new Map([
91+
[entries[0]!.text, { url: entries[0]!.url, ranges: entries[0]!.ranges }],
92+
[entries[1]!.text, { url: entries[1]!.url, ranges: entries[1]!.ranges }],
93+
]),
94+
)
9195
})
9296

9397
test('does not merge different CSS with same URLs and identical ranges', () => {
@@ -103,8 +107,10 @@ test('does not merge different CSS with same URLs and identical ranges', () => {
103107
url: 'example.com',
104108
},
105109
]
106-
expect(deduplicate_entries(entries)).toEqual([
107-
{ text: entries[0]!.text, url: entries[0]!.url, ranges: entries[0]!.ranges },
108-
{ text: entries[1]!.text, url: entries[1]!.url, ranges: entries[1]!.ranges },
109-
])
110+
expect(deduplicate_entries(entries)).toEqual(
111+
new Map([
112+
[entries[0]!.text, { url: entries[0]!.url, ranges: entries[0]!.ranges }],
113+
[entries[1]!.text, { url: entries[1]!.url, ranges: entries[1]!.ranges }],
114+
]),
115+
)
110116
})

src/extend-ranges.test.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/extend-ranges.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/filter-entries.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export function filter_coverage(coverage: Coverage[], parse_html?: Parser): Cove
1111
let result = []
1212

1313
for (let entry of coverage) {
14+
if (!entry.text) continue
1415
let extension = ext(entry.url).toLowerCase()
1516
if (extension === 'js') continue
1617

0 commit comments

Comments
 (0)