diff --git a/lib/complex-types.d.ts b/lib/complex-types.d.ts index ef06b3a..a5d43be 100644 --- a/lib/complex-types.d.ts +++ b/lib/complex-types.d.ts @@ -4,18 +4,48 @@ import type {Node, Parent} from 'unist' import type {Test} from 'unist-util-is' import type {Visitor} from './index.js' +type LessThan< + A extends number, + B extends number, + S extends any[] = [] +> = S['length'] extends B + ? false + : S['length'] extends A + ? true + : LessThan + +type Subtract< + A extends number, + B extends number, + I extends any[] = [], + O extends any[] = [] +> = LessThan extends true + ? never + : LessThan extends true + ? Subtract< + A, + B, + [...I, any], + LessThan extends true ? O : [...O, any] + > + : O['length'] + /** * Internal utility to collect all descendants of in `Tree`. */ export type InclusiveDescendant< Tree extends Node = never, - Found = void -> = Tree extends Parent + Found = void, + Depth extends number = 5 +> = Depth extends 0 + ? Tree + : Tree extends Parent ? | Tree | InclusiveDescendant< Exclude, - Found | Tree + Found | Tree, + Subtract > : Tree diff --git a/package.json b/package.json index 3aa8dc3..78a7a6e 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "tsd": "^0.25.0", "type-coverage": "^2.0.0", "typescript": "^4.7.0", - "xo": "^0.53.0" + "xo": "^0.60.0" }, "scripts": { "prepack": "npm run build && npm run format",