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",