Update css-tree types: some returns boolean, add find, findLast, findAll (#40770)

* Update css-tree types: `some` returns boolean, add find, findLast and findAll

* use better types when visit parameter is set
This commit is contained in:
Filip Stanis
2019-12-04 15:49:18 -08:00
committed by Ron Buckton
parent 16564a69de
commit fc68244f36
2 changed files with 83 additions and 7 deletions
+23 -2
View File
@@ -18,7 +18,7 @@ csstree.walk(ast, {
enter(node, item, list) {
this.root; // $ExpectType CssNode
this.stylesheet; // $ExpectType StyleSheet | null
node; // $ExpectType CssNode
node; // $ExpectType ClassSelector
item; // $ExpectType ListItem<CssNode>
list; // $ExpectType List<CssNode>
this.atrule; // $ExpectType Atrule | null
@@ -26,7 +26,7 @@ csstree.walk(ast, {
leave(node, item, list) {
this.root; // $ExpectType CssNode
this.stylesheet; // $ExpectType StyleSheet | null
node; // $ExpectType CssNode
node; // $ExpectType ClassSelector
item; // $ExpectType ListItem<CssNode>
list; // $ExpectType List<CssNode>
this.atrule; // $ExpectType Atrule | null
@@ -35,6 +35,27 @@ csstree.walk(ast, {
reverse: false,
});
csstree.find(ast, (node, item, list) => {
node; // $ExpectType CssNode
item; // $ExpectType ListItem<CssNode>
list; // $ExpectType List<CssNode>
return true;
});
csstree.findLast(ast, (node, item, list) => {
node; // $ExpectType CssNode
item; // $ExpectType ListItem<CssNode>
list; // $ExpectType List<CssNode>
return true;
});
csstree.findAll(ast, (node, item, list) => {
node; // $ExpectType CssNode
item; // $ExpectType ListItem<CssNode>
list; // $ExpectType List<CssNode>
return true;
});
csstree.generate(ast); // $ExpectType string
csstree.generate(ast, {}); // $ExpectType string
+60 -5
View File
@@ -49,8 +49,8 @@ export class List<TData> {
nextUntil(start: ListItem<TData>, fn: IteratorFn<TData, boolean>): void;
prevUntil<TContext>(start: ListItem<TData>, fn: IteratorFn<TData, boolean, TContext>, context: TContext): void;
prevUntil(start: ListItem<TData>, fn: IteratorFn<TData, boolean>): void;
some<TContext>(fn: IteratorFn<TData, boolean, TContext>, context: TContext): void;
some(fn: IteratorFn<TData, boolean>): void;
some<TContext>(fn: IteratorFn<TData, boolean, TContext>, context: TContext): boolean;
some(fn: IteratorFn<TData, boolean>): boolean;
map<TContext, TResult>(fn: IteratorFn<TData, TResult, TContext>, context: TContext): List<TResult>;
map<TResult>(fn: IteratorFn<TData, TResult>): List<TResult>;
filter<TContext, TResult extends TData>(fn: FilterFn<TData, TResult, TContext>, context: TContext): List<TResult>;
@@ -527,17 +527,72 @@ export interface WalkContext {
function: FunctionNode | PseudoClassSelector | PseudoElementSelector | null;
}
export type EnterOrLeaveFn = (this: WalkContext, node: CssNode, item: ListItem<CssNode>, list: List<CssNode>) => void;
export type EnterOrLeaveFn<NodeType = CssNode> = (this: WalkContext, node: NodeType, item: ListItem<CssNode>, list: List<CssNode>) => void;
export interface WalkOptions {
export interface WalkOptionsNoVisit {
enter?: EnterOrLeaveFn;
leave?: EnterOrLeaveFn;
visit?: string;
reverse?: boolean;
}
export interface WalkOptionsVisit<NodeType = CssNode, NodeTypeName = string> {
visit: NodeTypeName;
enter?: EnterOrLeaveFn<NodeType>;
leave?: EnterOrLeaveFn<NodeType>;
reverse?: boolean;
}
export type WalkOptions =
WalkOptionsVisit<AnPlusB, 'AnPlusB'>
| WalkOptionsVisit<Atrule, 'Atrule'>
| WalkOptionsVisit<AtrulePrelude, 'AtrulePrelude'>
| WalkOptionsVisit<AttributeSelector, 'AttributeSelector'>
| WalkOptionsVisit<Block, 'Block'>
| WalkOptionsVisit<Brackets, 'Brackets'>
| WalkOptionsVisit<CDC, 'CDC'>
| WalkOptionsVisit<CDO, 'CDO'>
| WalkOptionsVisit<ClassSelector, 'ClassSelector'>
| WalkOptionsVisit<Combinator, 'Combinator'>
| WalkOptionsVisit<Comment, 'Comment'>
| WalkOptionsVisit<Declaration, 'Declaration'>
| WalkOptionsVisit<DeclarationList, 'DeclarationList'>
| WalkOptionsVisit<Dimension, 'Dimension'>
| WalkOptionsVisit<FunctionNode, 'FunctionNode'>
| WalkOptionsVisit<HexColor, 'HexColor'>
| WalkOptionsVisit<IdSelector, 'IdSelector'>
| WalkOptionsVisit<Identifier, 'Identifier'>
| WalkOptionsVisit<MediaFeature, 'MediaFeature'>
| WalkOptionsVisit<MediaQuery, 'MediaQuery'>
| WalkOptionsVisit<MediaQueryList, 'MediaQueryList'>
| WalkOptionsVisit<Nth, 'Nth'>
| WalkOptionsVisit<NumberNode, 'NumberNode'>
| WalkOptionsVisit<Operator, 'Operator'>
| WalkOptionsVisit<Parentheses, 'Parentheses'>
| WalkOptionsVisit<Percentage, 'Percentage'>
| WalkOptionsVisit<PseudoClassSelector, 'PseudoClassSelector'>
| WalkOptionsVisit<PseudoElementSelector, 'PseudoElementSelector'>
| WalkOptionsVisit<Ratio, 'Ratio'>
| WalkOptionsVisit<Raw, 'Raw'>
| WalkOptionsVisit<Rule, 'Rule'>
| WalkOptionsVisit<Selector, 'Selector'>
| WalkOptionsVisit<SelectorList, 'SelectorList'>
| WalkOptionsVisit<StringNode, 'StringNode'>
| WalkOptionsVisit<StyleSheet, 'StyleSheet'>
| WalkOptionsVisit<TypeSelector, 'TypeSelector'>
| WalkOptionsVisit<UnicodeRange, 'UnicodeRange'>
| WalkOptionsVisit<Url, 'Url'>
| WalkOptionsVisit<Value, 'Value'>
| WalkOptionsVisit<WhiteSpace, 'WhiteSpace'>
| WalkOptionsNoVisit;
export function walk(ast: CssNode, options: EnterOrLeaveFn | WalkOptions): void;
export type FindFn = (this: WalkContext, node: CssNode, item: ListItem<CssNode>, list: List<CssNode>) => boolean;
export function find(ast: CssNode, fn: FindFn): CssNode;
export function findLast(ast: CssNode, fn: FindFn): CssNode;
export function findAll(ast: CssNode, fn: FindFn): CssNode[];
export interface Property {
readonly basename: string;
readonly name: string;