1
1
import { inspect } from '../jsutils/inspect' ;
2
2
import { devAssert } from '../jsutils/devAssert' ;
3
3
4
- import type { ASTNode , ASTKindToNode } from './ast' ;
4
+ import type { ASTNode } from './ast' ;
5
5
import { isNode , QueryDocumentKeys } from './ast' ;
6
6
import { Kind } from './kinds' ;
7
7
@@ -12,9 +12,9 @@ import { Kind } from './kinds';
12
12
export type ASTVisitor = EnterLeaveVisitor < ASTNode > | KindVisitor ;
13
13
14
14
type KindVisitor = {
15
- readonly [ K in keyof ASTKindToNode ] ?:
16
- | ASTVisitFn < ASTKindToNode [ K ] >
17
- | EnterLeaveVisitor < ASTKindToNode [ K ] > ;
15
+ readonly [ NodeT in ASTNode as NodeT [ 'kind' ] ] ?:
16
+ | ASTVisitFn < NodeT >
17
+ | EnterLeaveVisitor < NodeT > ;
18
18
} ;
19
19
20
20
interface EnterLeaveVisitor < TVisitedNode extends ASTNode > {
@@ -48,9 +48,9 @@ export type ASTVisitFn<TVisitedNode extends ASTNode> = (
48
48
* another form.
49
49
*/
50
50
export type ASTReducer < R > = {
51
- readonly [ K in keyof ASTKindToNode ] ?: {
52
- readonly enter ?: ASTVisitFn < ASTKindToNode [ K ] > ;
53
- readonly leave : ASTReducerFn < ASTKindToNode [ K ] , R > ;
51
+ readonly [ NodeT in ASTNode as NodeT [ 'kind' ] ] ?: {
52
+ readonly enter ?: ASTVisitFn < NodeT > ;
53
+ readonly leave : ASTReducerFn < NodeT , R > ;
54
54
} ;
55
55
} ;
56
56
@@ -79,9 +79,11 @@ type ReducedField<T, R> = T extends null | undefined
79
79
80
80
/**
81
81
* A KeyMap describes each the traversable properties of each kind of node.
82
+ *
83
+ * @deprecated Please inline it. Will be removed in v17
82
84
*/
83
85
export type ASTVisitorKeyMap = {
84
- [ P in keyof ASTKindToNode ] ?: ReadonlyArray < keyof ASTKindToNode [ P ] > ;
86
+ [ NodeT in ASTNode as NodeT [ 'kind' ] ] ?: ReadonlyArray < keyof NodeT > ;
85
87
} ;
86
88
87
89
export const BREAK : unknown = Object . freeze ( { } ) ;
@@ -179,11 +181,7 @@ export function visit(
179
181
visitor : ASTVisitor | ASTReducer < any > ,
180
182
visitorKeys : ASTVisitorKeyMap = QueryDocumentKeys ,
181
183
) : any {
182
- const enterLeaveMap = new Map <
183
- keyof ASTKindToNode ,
184
- EnterLeaveVisitor < ASTNode >
185
- > ( ) ;
186
-
184
+ const enterLeaveMap = new Map < Kind , EnterLeaveVisitor < ASTNode > > ( ) ;
187
185
for ( const kind of Object . values ( Kind ) ) {
188
186
enterLeaveMap . set ( kind , getEnterLeaveForKind ( visitor , kind ) ) ;
189
187
}
@@ -380,7 +378,7 @@ export function visitInParallel(
380
378
*/
381
379
export function getEnterLeaveForKind (
382
380
visitor : ASTVisitor ,
383
- kind : keyof ASTKindToNode ,
381
+ kind : Kind ,
384
382
) : EnterLeaveVisitor < ASTNode > {
385
383
const kindVisitor :
386
384
| ASTVisitFn < ASTNode >
@@ -408,7 +406,7 @@ export function getEnterLeaveForKind(
408
406
// istanbul ignore next (Deprecated code)
409
407
export function getVisitFn (
410
408
visitor : ASTVisitor ,
411
- kind : keyof ASTKindToNode ,
409
+ kind : Kind ,
412
410
isLeaving : boolean ,
413
411
) : ASTVisitFn < ASTNode > | undefined {
414
412
const { enter, leave } = getEnterLeaveForKind ( visitor , kind ) ;
0 commit comments