0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-23 13:43:31 -05:00
denoland-deno/cli/js/internal.d.ts
2024-12-15 22:56:50 +01:00

126 lines
2.1 KiB
TypeScript

export interface AstContext {
buf: Uint8Array;
strTable: Map<number, string>;
idTable: number[];
rootId: number;
stack: number[];
}
export interface LintState {
plugins: Deno.LintPlugin[];
installedPlugins: Set<string>;
}
export enum AttrOp {
/** [attr="value"] or [attr=value] */
Equal,
/** [attr!="value"] or [attr!=value] */
NotEqual,
/** [attr>1] */
Greater,
/** [attr>=1] */
GreaterThan,
/** [attr<1] */
Less,
/** [attr<=1] */
LessThan,
}
export interface AttrExists {
type: 3;
prop: number;
debug?: string;
}
export interface AttrBin {
type: 4;
prop: number;
op: AttrOp;
value: string;
}
export interface AttrRegex {
type: 5;
prop: number;
value: RegExp;
}
export type AttrSelector = AttrExists | AttrBin | AttrRegex;
export interface Elem {
type: 1;
wildcard: boolean;
elem: number;
debug?: string;
}
export interface PseudoNthChild {
type: 6;
backward: boolean;
step: number;
stepOffset: number;
of: Selector | null;
}
export interface PseudoHas {
type: 7;
selector: Selector[];
}
export interface PseudoNot {
type: 8;
selector: Selector[];
}
export interface PseudoFirstChild {
type: 9;
}
export interface PseudoLastChild {
type: 10;
}
export interface Relation {
type: 2;
op: number;
debug?: string;
}
export type Selector = Array<
| Elem
| Relation
| AttrExists
| AttrBin
| AttrRegex
| PseudoNthChild
| PseudoNot
| PseudoHas
| PseudoFirstChild
| PseudoLastChild
>;
export interface SelectorParseCtx {
root: Selector;
current: Selector;
}
export enum SelToken {
Value = 0,
Char = 1,
EOF = 2,
}
export interface ILexer {
token: SelToken;
}
export interface MatchCtx {
getFirstChild(id: number): number;
getLastChild(id: number): number;
getSiblingBefore(parentId: number, sib: number): number;
getSiblings(id: number): number[];
getParent(id: number): number;
getType(id: number): number;
hasAttr(id: number, propId: number): boolean;
getAttrValue(id: number, propId: number): unknown;
}
export type NextFn = (ctx: MatchCtx, id: number) => boolean;
export type MatcherFn = (ctx: MatchCtx, id: number) => boolean;