UNPKG

unist-util-find-all-before

Version:
75 lines (74 loc) 1.98 kB
/** * Find the nodes in `parent` before another `node` or before an index, that * pass `test`. * * @param parent * Parent node. * @param index * Child node or index. * @param [test=undefined] * Test for child to look for (optional). * @returns * Children (matching `test`, if given). */ export const findAllBefore: (< Kind extends import('unist').Parent, Check extends Test >( parent: Kind, index: number | Child<Kind>, test: Check ) => Matches<Child<Kind>, Check>[]) & (<Kind_1 extends import('unist').Parent>( parent: Kind_1, index: number | Child<Kind_1>, test?: null | undefined ) => Child<Kind_1>[]) export type UnistNode = import('unist').Node export type UnistParent = import('unist').Parent /** * Test from `unist-util-is`. * * Note: we have remove and add `undefined`, because otherwise when generating * automatic `.d.ts` files, TS tries to flatten paths from a local perspective, * which doesn’t work when publishing on npm. */ export type Test = Exclude<import('unist-util-is').Test, undefined> | undefined /** * Get the value of a type guard `Fn`. */ export type Predicate<Fn, Fallback> = Fn extends ( value: any ) => value is infer Thing ? Thing : Fallback /** * Check whether a node matches a primitive check in the type system. */ export type MatchesOne<Value, Check> = Check extends null | undefined ? Value : Value extends { type: Check } ? Value : Value extends Check ? Value : Check extends Function ? Predicate<Check, Value> extends Value ? Predicate<Check, Value> : never : never /** * Check whether a node matches a check in the type system. */ export type Matches<Value, Check> = Check extends Array<any> ? MatchesOne<Value, Check[keyof Check]> : MatchesOne<Value, Check> /** * Collect nodes that can be parents of `Child`. */ export type Child<Kind extends import('unist').Node> = Kind extends { children: (infer Child_1)[] } ? Child_1 : never