|
48 | 48 | * @returns {node is Y} |
49 | 49 | */ |
50 | 50 |
|
| 51 | +/** |
| 52 | + * Check if a node passes a test. |
| 53 | + * When a `parent` node is known the `index` of node should also be given. |
| 54 | + * |
| 55 | + * @param node |
| 56 | + * Node to check, can be anything. |
| 57 | + * @param test |
| 58 | + * * When nullish, checks if `node` is a `Node`. |
| 59 | + * * When `string`, works like passing `(node) => node.type === test`. |
| 60 | + * * When `function` checks if function passed the node is true. |
| 61 | + * * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. |
| 62 | + * * When `array`, checks any one of the subtests pass. |
| 63 | + * @param index |
| 64 | + * Position of `node` in `parent`, must be a number if `parent` is also given. |
| 65 | + * @param parent |
| 66 | + * Parent of `node`, must be given if `index` is also given. |
| 67 | + * @param context |
| 68 | + * Context object to invoke `test` with, optional |
| 69 | + * @returns |
| 70 | + * Whether test passed and `node` is a `Node` (object with `type` set to |
| 71 | + * non-empty `string`). |
| 72 | + */ |
51 | 73 | export const is = |
52 | 74 | /** |
53 | | - * Check if a node passes a test. |
54 | | - * When a `parent` node is known the `index` of node should also be given. |
55 | | - * |
56 | 75 | * @type {( |
57 | | - * (<T extends Node>(node: unknown, test: T['type']|Partial<T>|TestFunctionPredicate<T>|Array.<T['type']|Partial<T>|TestFunctionPredicate<T>>, index?: number|null|undefined, parent?: Parent|null|undefined, context?: unknown) => node is T) & |
58 | | - * ((node?: unknown, test?: Test, index?: number|null|undefined, parent?: Parent|null|undefined, context?: unknown) => boolean) |
| 76 | + * (<ExplicitNode extends Node>(node: unknown, test: ExplicitNode['type']|Partial<ExplicitNode>|TestFunctionPredicate<ExplicitNode>|Array.<ExplicitNode['type']|Partial<ExplicitNode>|TestFunctionPredicate<ExplicitNode>>, index: number, parent: Parent, context?: unknown) => node is ExplicitNode) & |
| 77 | + * (<ExplicitNode extends Node>(node: unknown, test: ExplicitNode['type']|Partial<ExplicitNode>|TestFunctionPredicate<ExplicitNode>|Array.<ExplicitNode['type']|Partial<ExplicitNode>|TestFunctionPredicate<ExplicitNode>>, index?: null|undefined, parent?: null|undefined, context?: unknown) => node is ExplicitNode) & |
| 78 | + * ((node: unknown, test: Test, index: number, parent: Parent, context?: unknown) => boolean) & |
| 79 | + * ((node?: unknown, test?: Test, index?: null|undefined, parent?: null|undefined, context?: unknown) => boolean) |
59 | 80 | * )} |
60 | 81 | */ |
61 | 82 | ( |
62 | 83 | /** |
63 | | - * Check if a node passes a test. |
64 | | - * When a `parent` node is known the `index` of node should also be given. |
65 | | - * |
66 | | - * @param {unknown} [node] Node to check |
| 84 | + * @param {unknown} [node] |
67 | 85 | * @param {Test} [test] |
68 | | - * When nullish, checks if `node` is a `Node`. |
69 | | - * When `string`, works like passing `function (node) {return node.type === test}`. |
70 | | - * When `function` checks if function passed the node is true. |
71 | | - * When `object`, checks that all keys in test are in node, and that they have (strictly) equal values. |
72 | | - * When `array`, checks any one of the subtests pass. |
73 | | - * @param {number|null|undefined} [index] Position of `node` in `parent` |
74 | | - * @param {Parent|null|undefined} [parent] Parent of `node` |
75 | | - * @param {unknown} [context] Context object to invoke `test` with |
76 | | - * @returns {boolean} Whether test passed and `node` is a `Node` (object with `type` set to non-empty `string`). |
| 86 | + * @param {number|null|undefined} [index] |
| 87 | + * @param {Parent|null|undefined} [parent] |
| 88 | + * @param {unknown} [context] |
| 89 | + * @returns {boolean} |
77 | 90 | */ |
78 | 91 | // eslint-disable-next-line max-params |
79 | 92 | function is(node, test, index, parent, context) { |
@@ -114,7 +127,7 @@ export const is = |
114 | 127 | export const convert = |
115 | 128 | /** |
116 | 129 | * @type {( |
117 | | - * (<T extends Node>(test: T['type']|Partial<T>|TestFunctionPredicate<T>) => AssertPredicate<T>) & |
| 130 | + * (<ExplicitNode extends Node>(test: ExplicitNode['type']|Partial<ExplicitNode>|TestFunctionPredicate<ExplicitNode>) => AssertPredicate<ExplicitNode>) & |
118 | 131 | * ((test?: Test) => AssertAnything) |
119 | 132 | * )} |
120 | 133 | */ |
|
0 commit comments