-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
oldVisit.ts
27 lines (25 loc) · 896 Bytes
/
oldVisit.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { ASTNode, visit } from 'graphql';
type VisitFn = typeof visit;
type NewVisitor = Partial<Parameters<VisitFn>[1]>;
type OldVisitor = {
enter?: Partial<Record<keyof NewVisitor, NonNullable<NewVisitor[keyof NewVisitor]>['enter']>>;
leave?: Partial<Record<keyof NewVisitor, NonNullable<NewVisitor[keyof NewVisitor]>['leave']>>;
} & NewVisitor;
export function oldVisit(
root: ASTNode,
{ enter: enterVisitors, leave: leaveVisitors, ...newVisitor }: OldVisitor
): any {
if (typeof enterVisitors === 'object') {
for (const key in enterVisitors) {
newVisitor[key] = newVisitor[key] || {};
newVisitor[key].enter = enterVisitors[key];
}
}
if (typeof leaveVisitors === 'object') {
for (const key in leaveVisitors) {
newVisitor[key] = newVisitor[key] || {};
newVisitor[key].leave = leaveVisitors[key];
}
}
return visit(root, newVisitor);
}