UNPKG

1.29 kBTypeScriptView Raw
1import { FSWatcher } from 'chokidar';
2import { Node } from './node';
3export type SimplePredicate<T = Node> = {
4 (value: T, index: number): boolean;
5 and?: (criteria: SimplePredicate<T>) => SimplePredicate<T>;
6};
7export type ComplexPredicate<T = Node, R extends T = T> = SimplePredicate<T> | {
8 (value: T, index: number): value is R;
9 and?: (criteria: ComplexPredicate<T, R>) => ComplexPredicate<T, R>;
10};
11export interface Traversable<T> {
12 filter<R extends T = T>(by: ComplexPredicate<T, R>): R[];
13 find<R extends T = T>(by: ComplexPredicate<T, R>): R | undefined;
14 some(by: SimplePredicate<T>): boolean;
15}
16/**
17 * A tree of source files. Eventually, it's a graph. Ideally, it's an acyclic directed graph.
18 * Technically, it's implemented as a map-like collection with references between map entries.
19 */
20export declare class BuildGraph implements Traversable<Node> {
21 private store;
22 watcher?: FSWatcher;
23 put(value: Node | Node[]): this;
24 private insert;
25 get(url: string): Node;
26 has(url: string): boolean;
27 entries(): Node[];
28 some(by: SimplePredicate): boolean;
29 filter<T extends Node = Node>(by: ComplexPredicate<Node, T>): T[];
30 find<T extends Node = Node>(by: ComplexPredicate<Node, T>): T | undefined;
31 get size(): number;
32}