Skip to content

Commit 640a304

Browse files
authored
chore: import all css-tree typedefs on top of file (#130)
1 parent 8d38ce6 commit 640a304

File tree

1 file changed

+52
-26
lines changed

1 file changed

+52
-26
lines changed

index.js

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,25 @@
11
// @ts-expect-error Typing of css-tree is incomplete
22
import parse from 'css-tree/parser'
33

4+
/**
5+
* @typedef {import('css-tree').CssNode} CssNode
6+
* @typedef {import('css-tree').List<CssNode>} List
7+
* @typedef {import('css-tree').CssLocation} CssLocation
8+
* @typedef {import('css-tree').Raw} Raw
9+
* @typedef {import('css-tree').StyleSheet} StyleSheet
10+
* @typedef {import('css-tree').Atrule} Atrule
11+
* @typedef {import('css-tree').AtrulePrelude} AtrulePrelude
12+
* @typedef {import('css-tree').Rule} Rule
13+
* @typedef {import('css-tree').SelectorList} SelectorList
14+
* @typedef {import('css-tree').Selector} Selector
15+
* @typedef {import('css-tree').PseudoClassSelector} PseudoClassSelector
16+
* @typedef {import('css-tree').PseudoElementSelector} PseudoElementSelector
17+
* @typedef {import('css-tree').Block} Block
18+
* @typedef {import('css-tree').Declaration} Declaration
19+
* @typedef {import('css-tree').Value} Value
20+
* @typedef {import('css-tree').Operator} Operator
21+
*/
22+
423
const SPACE = ' '
524
const EMPTY_STRING = ''
625
const COLON = ':'
@@ -19,6 +38,7 @@ const TYPE_RULE = 'Rule'
1938
const TYPE_BLOCK = 'Block'
2039
const TYPE_SELECTORLIST = 'SelectorList'
2140
const TYPE_SELECTOR = 'Selector'
41+
const TYPE_PSEUDO_ELEMENT_SELECTOR = 'PseudoElementSelector'
2242
const TYPE_DECLARATION = 'Declaration'
2343
const TYPE_OPERATOR = 'Operator'
2444

@@ -53,15 +73,21 @@ export function format(css, {
5373
/** @type {number[]} [start0, end0, start1, end1, etc.]*/
5474
let comments = []
5575

56-
/** @type {import('css-tree').StyleSheet} */
76+
/**
77+
* @param {string} _ The comment text
78+
* @param {CssLocation} position
79+
*/
80+
function on_comment(_, position) {
81+
comments.push(position.start.offset, position.end.offset)
82+
}
83+
84+
/** @type {StyleSheet} */
5785
let ast = parse(css, {
5886
positions: true,
5987
parseAtrulePrelude: false,
6088
parseCustomProperty: true,
6189
parseValue: true,
62-
onComment: (/** @type {string} */ _, /** @type {import('css-tree').CssLocation} */ position) => {
63-
comments.push(position.start.offset, position.end.offset)
64-
}
90+
onComment: on_comment,
6591
})
6692

6793
const NEWLINE = minify ? EMPTY_STRING : '\n'
@@ -85,7 +111,7 @@ export function format(css, {
85111
return '\t'.repeat(size)
86112
}
87113

88-
/** @param {import('css-tree').CssNode} node */
114+
/** @param {CssNode} node */
89115
function substr(node) {
90116
let loc = node.loc
91117
// If the node has no location, return an empty string
@@ -94,15 +120,15 @@ export function format(css, {
94120
return css.slice(loc.start.offset, loc.end.offset)
95121
}
96122

97-
/** @param {import('css-tree').CssNode} node */
123+
/** @param {CssNode} node */
98124
function start_offset(node) {
99-
let loc = /** @type {import('css-tree').CssLocation} */(node.loc)
125+
let loc = /** @type {CssLocation} */(node.loc)
100126
return loc.start.offset
101127
}
102128

103-
/** @param {import('css-tree').CssNode} node */
129+
/** @param {CssNode} node */
104130
function end_offset(node) {
105-
let loc = /** @type {import('css-tree').CssLocation} */(node.loc)
131+
let loc = /** @type {CssLocation} */(node.loc)
106132
return loc.end.offset
107133
}
108134

@@ -117,7 +143,7 @@ export function format(css, {
117143
return EMPTY_STRING
118144
}
119145

120-
let buffer = ''
146+
let buffer = EMPTY_STRING
121147
for (let i = 0; i < comments.length; i += 2) {
122148
// Check that the comment is within the range
123149
let start = comments[i]
@@ -134,7 +160,7 @@ export function format(css, {
134160
return buffer
135161
}
136162

137-
/** @param {import('css-tree').Rule} node */
163+
/** @param {Rule} node */
138164
function print_rule(node) {
139165
let buffer
140166
let prelude = node.prelude
@@ -156,7 +182,7 @@ export function format(css, {
156182
return buffer
157183
}
158184

159-
/** @param {import('css-tree').SelectorList} node */
185+
/** @param {SelectorList} node */
160186
function print_selectorlist(node) {
161187
let buffer = EMPTY_STRING
162188

@@ -179,7 +205,7 @@ export function format(css, {
179205
return buffer
180206
}
181207

182-
/** @param {import('css-tree').Selector|import('css-tree').PseudoClassSelector|import('css-tree').PseudoElementSelector} node */
208+
/** @param {Selector | PseudoClassSelector | PseudoElementSelector} node */
183209
function print_simple_selector(node) {
184210
let buffer = EMPTY_STRING
185211
let children = node.children || []
@@ -200,14 +226,14 @@ export function format(css, {
200226
break
201227
}
202228
case 'PseudoClassSelector':
203-
case 'PseudoElementSelector': {
229+
case TYPE_PSEUDO_ELEMENT_SELECTOR: {
204230
buffer += COLON
205231

206232
// Special case for `:before` and `:after` which were used in CSS2 and are usually minified
207233
// as `:before` and `:after`, but we want to print them as `::before` and `::after`
208234
let pseudo = lowercase(child.name)
209235

210-
if (pseudo === 'before' || pseudo === 'after' || child.type === 'PseudoElementSelector') {
236+
if (pseudo === 'before' || pseudo === 'after' || child.type === TYPE_PSEUDO_ELEMENT_SELECTOR) {
211237
buffer += COLON
212238
}
213239

@@ -301,7 +327,7 @@ export function format(css, {
301327
return buffer
302328
}
303329

304-
/** @param {import('css-tree').Block} node */
330+
/** @param {Block} node */
305331
function print_block(node) {
306332
let children = node.children
307333
let buffer = OPTIONAL_SPACE
@@ -322,7 +348,7 @@ export function format(css, {
322348

323349
indent_level++
324350

325-
let opening_comment = print_comment(start_offset(node), start_offset(/** @type {import('css-tree').CssNode} */(children.first)))
351+
let opening_comment = print_comment(start_offset(node), start_offset(/** @type {CssNode} */(children.first)))
326352
if (opening_comment) {
327353
buffer += indent(indent_level) + opening_comment + NEWLINE
328354
}
@@ -366,7 +392,7 @@ export function format(css, {
366392
}
367393
})
368394

369-
let closing_comment = print_comment(end_offset(/** @type {import('css-tree').CssNode} */(children.last)), end_offset(node))
395+
let closing_comment = print_comment(end_offset(/** @type {CssNode} */(children.last)), end_offset(node))
370396
if (closing_comment) {
371397
buffer += NEWLINE + indent(indent_level) + closing_comment
372398
}
@@ -377,7 +403,7 @@ export function format(css, {
377403
return buffer
378404
}
379405

380-
/** @param {import('css-tree').Atrule} node */
406+
/** @param {Atrule} node */
381407
function print_atrule(node) {
382408
let buffer = indent(indent_level) + '@'
383409
let prelude = node.prelude
@@ -405,7 +431,7 @@ export function format(css, {
405431
* here to force some nice formatting.
406432
* Should be OK perf-wise, since the amount of atrules in most
407433
* stylesheets are limited, so this won't be called too often.
408-
* @param {import('css-tree').AtrulePrelude | import('css-tree').Raw} node
434+
* @param {AtrulePrelude | Raw} node
409435
*/
410436
function print_prelude(node) {
411437
let buffer = substr(node)
@@ -424,7 +450,7 @@ export function format(css, {
424450
.replace(/selector|url|supports|layer\(/ig, (match) => lowercase(match)) // lowercase function names
425451
}
426452

427-
/** @param {import('css-tree').Declaration} node */
453+
/** @param {Declaration} node */
428454
function print_declaration(node) {
429455
let property = node.property
430456

@@ -455,7 +481,7 @@ export function format(css, {
455481
return indent(indent_level) + property + COLON + OPTIONAL_SPACE + value
456482
}
457483

458-
/** @param {import('css-tree').List<import('css-tree').CssNode>} children */
484+
/** @param {List} children */
459485
function print_list(children) {
460486
let buffer = EMPTY_STRING
461487

@@ -493,7 +519,7 @@ export function format(css, {
493519
return buffer
494520
}
495521

496-
/** @param {import('css-tree').Operator} node */
522+
/** @param {Operator} node */
497523
function print_operator(node) {
498524
let buffer = EMPTY_STRING
499525
// https://developer.mozilla.org/en-US/docs/Web/CSS/calc#notes
@@ -529,7 +555,7 @@ export function format(css, {
529555
return buffer
530556
}
531557

532-
/** @param {import('css-tree').Value | import('css-tree').Raw} node */
558+
/** @param {Value | Raw} node */
533559
function print_value(node) {
534560
if (node.type === 'Raw') {
535561
return print_unknown(node, 0)
@@ -539,7 +565,7 @@ export function format(css, {
539565
}
540566

541567
/**
542-
* @param {import('css-tree').CssNode} node
568+
* @param {CssNode} node
543569
* @param {number} indent_level
544570
* @returns {string} A formatted unknown CSS string
545571
*/
@@ -577,7 +603,7 @@ export function format(css, {
577603
}
578604
})
579605

580-
let closing_comment = print_comment(end_offset(/** @type {import('css-tree').CssNode} */(children.last)), end_offset(ast))
606+
let closing_comment = print_comment(end_offset(/** @type {CssNode} */(children.last)), end_offset(ast))
581607
if (closing_comment) {
582608
buffer += NEWLINE + closing_comment
583609
}

0 commit comments

Comments
 (0)