Skip to content

Commit c9758cc

Browse files
committed
Deprecate 'ASTKindToNode'
1 parent 73025aa commit c9758cc

File tree

3 files changed

+16
-63
lines changed

3 files changed

+16
-63
lines changed

integrationTests/ts/package.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
},
77
"dependencies": {
88
"graphql": "file:../graphql.tgz",
9-
"typescript-3.8": "npm:[email protected]",
10-
"typescript-3.9": "npm:[email protected]",
11-
"typescript-4.0": "npm:[email protected]",
129
"typescript-4.1": "npm:[email protected]",
1310
"typescript-4.2": "npm:[email protected]",
1411
"typescript-4.3": "npm:[email protected]",

src/language/ast.ts

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -184,57 +184,15 @@ export type ASTNode =
184184
/**
185185
* Utility type listing all nodes indexed by their kind.
186186
*/
187-
export interface ASTKindToNode {
188-
Name: NameNode;
189-
Document: DocumentNode;
190-
OperationDefinition: OperationDefinitionNode;
191-
VariableDefinition: VariableDefinitionNode;
192-
Variable: VariableNode;
193-
SelectionSet: SelectionSetNode;
194-
Field: FieldNode;
195-
Argument: ArgumentNode;
196-
FragmentSpread: FragmentSpreadNode;
197-
InlineFragment: InlineFragmentNode;
198-
FragmentDefinition: FragmentDefinitionNode;
199-
IntValue: IntValueNode;
200-
FloatValue: FloatValueNode;
201-
StringValue: StringValueNode;
202-
BooleanValue: BooleanValueNode;
203-
NullValue: NullValueNode;
204-
EnumValue: EnumValueNode;
205-
ListValue: ListValueNode;
206-
ObjectValue: ObjectValueNode;
207-
ObjectField: ObjectFieldNode;
208-
Directive: DirectiveNode;
209-
NamedType: NamedTypeNode;
210-
ListType: ListTypeNode;
211-
NonNullType: NonNullTypeNode;
212-
SchemaDefinition: SchemaDefinitionNode;
213-
OperationTypeDefinition: OperationTypeDefinitionNode;
214-
ScalarTypeDefinition: ScalarTypeDefinitionNode;
215-
ObjectTypeDefinition: ObjectTypeDefinitionNode;
216-
FieldDefinition: FieldDefinitionNode;
217-
InputValueDefinition: InputValueDefinitionNode;
218-
InterfaceTypeDefinition: InterfaceTypeDefinitionNode;
219-
UnionTypeDefinition: UnionTypeDefinitionNode;
220-
EnumTypeDefinition: EnumTypeDefinitionNode;
221-
EnumValueDefinition: EnumValueDefinitionNode;
222-
InputObjectTypeDefinition: InputObjectTypeDefinitionNode;
223-
DirectiveDefinition: DirectiveDefinitionNode;
224-
SchemaExtension: SchemaExtensionNode;
225-
ScalarTypeExtension: ScalarTypeExtensionNode;
226-
ObjectTypeExtension: ObjectTypeExtensionNode;
227-
InterfaceTypeExtension: InterfaceTypeExtensionNode;
228-
UnionTypeExtension: UnionTypeExtensionNode;
229-
EnumTypeExtension: EnumTypeExtensionNode;
230-
InputObjectTypeExtension: InputObjectTypeExtensionNode;
187+
export type ASTKindToNode = {
188+
[NodeT in ASTNode as NodeT['kind']]: NodeT;
231189
}
232190

233191
/**
234192
* @internal
235193
*/
236194
export const QueryDocumentKeys: {
237-
[P in keyof ASTKindToNode]: ReadonlyArray<keyof ASTKindToNode[P]>;
195+
[NodeT in ASTNode as NodeT['kind']]: ReadonlyArray<keyof NodeT>;
238196
} = {
239197
Name: [],
240198

src/language/visitor.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { inspect } from '../jsutils/inspect';
22
import { devAssert } from '../jsutils/devAssert';
33

4-
import type { ASTNode, ASTKindToNode } from './ast';
4+
import type { ASTNode } from './ast';
55
import { isNode, QueryDocumentKeys } from './ast';
66
import { Kind } from './kinds';
77

@@ -12,9 +12,9 @@ import { Kind } from './kinds';
1212
export type ASTVisitor = EnterLeaveVisitor<ASTNode> | KindVisitor;
1313

1414
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>;
1818
};
1919

2020
interface EnterLeaveVisitor<TVisitedNode extends ASTNode> {
@@ -48,9 +48,9 @@ export type ASTVisitFn<TVisitedNode extends ASTNode> = (
4848
* another form.
4949
*/
5050
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>;
5454
};
5555
};
5656

@@ -79,9 +79,11 @@ type ReducedField<T, R> = T extends null | undefined
7979

8080
/**
8181
* A KeyMap describes each the traversable properties of each kind of node.
82+
*
83+
* @deprecated Please inline it. Will be removed in v17
8284
*/
8385
export type ASTVisitorKeyMap = {
84-
[P in keyof ASTKindToNode]?: ReadonlyArray<keyof ASTKindToNode[P]>;
86+
[NodeT in ASTNode as NodeT['kind']]?: ReadonlyArray<keyof NodeT>;
8587
};
8688

8789
export const BREAK: unknown = Object.freeze({});
@@ -179,11 +181,7 @@ export function visit(
179181
visitor: ASTVisitor | ASTReducer<any>,
180182
visitorKeys: ASTVisitorKeyMap = QueryDocumentKeys,
181183
): any {
182-
const enterLeaveMap = new Map<
183-
keyof ASTKindToNode,
184-
EnterLeaveVisitor<ASTNode>
185-
>();
186-
184+
const enterLeaveMap = new Map<Kind, EnterLeaveVisitor<ASTNode>>();
187185
for (const kind of Object.values(Kind)) {
188186
enterLeaveMap.set(kind, getEnterLeaveForKind(visitor, kind));
189187
}
@@ -380,7 +378,7 @@ export function visitInParallel(
380378
*/
381379
export function getEnterLeaveForKind(
382380
visitor: ASTVisitor,
383-
kind: keyof ASTKindToNode,
381+
kind: Kind,
384382
): EnterLeaveVisitor<ASTNode> {
385383
const kindVisitor:
386384
| ASTVisitFn<ASTNode>
@@ -408,7 +406,7 @@ export function getEnterLeaveForKind(
408406
// istanbul ignore next (Deprecated code)
409407
export function getVisitFn(
410408
visitor: ASTVisitor,
411-
kind: keyof ASTKindToNode,
409+
kind: Kind,
412410
isLeaving: boolean,
413411
): ASTVisitFn<ASTNode> | undefined {
414412
const { enter, leave } = getEnterLeaveForKind(visitor, kind);

0 commit comments

Comments
 (0)