Skip to content

Commit 80da660

Browse files
committed
chore: change how schema node is propagated
1 parent ac085ab commit 80da660

File tree

12 files changed

+587
-360
lines changed

12 files changed

+587
-360
lines changed

composition-go/index.global.js

Lines changed: 147 additions & 147 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

composition/src/federation/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export type ContractTagOptions = {
6161

6262
export type MutualParentDefinitionData = {
6363
configureDescriptionDataBySubgraphName: Map<string, ConfigureDescriptionData>;
64-
directivesByDirectiveName: Map<string, ConstDirectiveNode[]>;
64+
directivesByName: Map<string, ConstDirectiveNode[]>;
6565
extensionType: ExtensionType;
6666
name: string;
6767
persistedDirectivesData: PersistedDirectivesData;

composition/src/schema-building/types.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export enum ExtensionType {
5858
export type EnumDefinitionData = {
5959
appearances: number;
6060
configureDescriptionDataBySubgraphName: Map<SubgraphName, ConfigureDescriptionData>;
61-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
61+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
6262
enumValueDataByName: Map<string, EnumValueData>;
6363
extensionType: ExtensionType;
6464
isInaccessible: boolean;
@@ -73,7 +73,7 @@ export type EnumDefinitionData = {
7373
export type EnumValueData = {
7474
appearances: number;
7575
configureDescriptionDataBySubgraphName: Map<SubgraphName, ConfigureDescriptionData>;
76-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
76+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
7777
federatedCoords: string;
7878
kind: Kind.ENUM_VALUE_DEFINITION;
7979
name: string;
@@ -97,7 +97,7 @@ export type ExternalFieldData = {
9797
export type FieldData = {
9898
argumentDataByName: Map<string, InputValueData>;
9999
configureDescriptionDataBySubgraphName: Map<SubgraphName, ConfigureDescriptionData>;
100-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
100+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
101101
externalFieldDataBySubgraphName: Map<SubgraphName, ExternalFieldData>;
102102
federatedCoords: string;
103103
inheritedDirectiveNames: Set<DirectiveName>;
@@ -119,7 +119,7 @@ export type FieldData = {
119119

120120
export type InputObjectDefinitionData = {
121121
configureDescriptionDataBySubgraphName: Map<SubgraphName, ConfigureDescriptionData>;
122-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
122+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
123123
extensionType: ExtensionType;
124124
inputValueDataByName: Map<FieldName, InputValueData>;
125125
isInaccessible: boolean;
@@ -133,7 +133,7 @@ export type InputObjectDefinitionData = {
133133

134134
export type InputValueData = {
135135
configureDescriptionDataBySubgraphName: Map<SubgraphName, ConfigureDescriptionData>;
136-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
136+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
137137
federatedCoords: string;
138138
includeDefaultValue: boolean;
139139
isArgument: boolean;
@@ -156,7 +156,7 @@ export type InputValueData = {
156156

157157
export type InterfaceDefinitionData = {
158158
configureDescriptionDataBySubgraphName: Map<SubgraphName, ConfigureDescriptionData>;
159-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
159+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
160160
extensionType: ExtensionType;
161161
fieldDataByName: Map<FieldName, FieldData>;
162162
implementedInterfaceTypeNames: Set<TypeName>;
@@ -173,7 +173,7 @@ export type InterfaceDefinitionData = {
173173

174174
export type ObjectDefinitionData = {
175175
configureDescriptionDataBySubgraphName: Map<SubgraphName, ConfigureDescriptionData>;
176-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
176+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
177177
extensionType: ExtensionType;
178178
fieldDataByName: Map<FieldName, FieldData>;
179179
implementedInterfaceTypeNames: Set<TypeName>;
@@ -201,14 +201,14 @@ export type PersistedDirectiveDefinitionData = {
201201

202202
export type PersistedDirectivesData = {
203203
deprecatedReason: string;
204-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
204+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
205205
isDeprecated: boolean;
206206
tagDirectiveByName: Map<string, ConstDirectiveNode>;
207207
};
208208

209209
export type ScalarDefinitionData = {
210210
configureDescriptionDataBySubgraphName: Map<SubgraphName, ConfigureDescriptionData>;
211-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
211+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
212212
extensionType: ExtensionType;
213213
kind: Kind.SCALAR_TYPE_DEFINITION;
214214
name: TypeName;
@@ -219,7 +219,7 @@ export type ScalarDefinitionData = {
219219
};
220220

221221
export type SchemaData = {
222-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
222+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
223223
kind: Kind.SCHEMA_DEFINITION;
224224
name: string;
225225
operationTypes: Map<OperationTypeNode, OperationTypeDefinitionNode>;
@@ -228,7 +228,7 @@ export type SchemaData = {
228228

229229
export type UnionDefinitionData = {
230230
configureDescriptionDataBySubgraphName: Map<SubgraphName, ConfigureDescriptionData>;
231-
directivesByDirectiveName: Map<DirectiveName, Array<ConstDirectiveNode>>;
231+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>;
232232
extensionType: ExtensionType;
233233
kind: Kind.UNION_TYPE_DEFINITION;
234234
name: TypeName;

composition/src/schema-building/utils.ts

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ import { DEFAULT_DEPRECATION_REASON } from 'graphql';
8686
export function newPersistedDirectivesData(): PersistedDirectivesData {
8787
return {
8888
deprecatedReason: '',
89-
directivesByDirectiveName: new Map<DirectiveName, ConstDirectiveNode[]>(),
89+
directivesByName: new Map<DirectiveName, ConstDirectiveNode[]>(),
9090
isDeprecated: false,
9191
tagDirectiveByName: new Map<string, ConstDirectiveNode>(),
9292
};
@@ -100,11 +100,11 @@ type IsNodeExternalOrShareableResult = {
100100
export function isNodeExternalOrShareable(
101101
node: ObjectTypeNode | FieldDefinitionNode,
102102
areAllFieldsShareable: boolean,
103-
directivesByDirectiveName: Map<DirectiveName, ConstDirectiveNode[]>,
103+
directivesByName: Map<DirectiveName, ConstDirectiveNode[]>,
104104
): IsNodeExternalOrShareableResult {
105105
const result: IsNodeExternalOrShareableResult = {
106-
isExternal: directivesByDirectiveName.has(EXTERNAL),
107-
isShareable: areAllFieldsShareable || directivesByDirectiveName.has(SHAREABLE),
106+
isExternal: directivesByName.has(EXTERNAL),
107+
isShareable: areAllFieldsShareable || directivesByName.has(SHAREABLE),
108108
};
109109
if (!node.directives?.length) {
110110
return result;
@@ -224,7 +224,7 @@ type ChildDefinitionNode = EnumValueDefinitionNode | FieldDefinitionNode | Input
224224
function propagateFieldDataArguments(fieldData: FieldData) {
225225
for (const argumentData of fieldData.argumentDataByName.values()) {
226226
// First propagate the argument's directives
227-
for (const directiveNodes of argumentData.directivesByDirectiveName.values()) {
227+
for (const directiveNodes of argumentData.directivesByName.values()) {
228228
argumentData.node.directives.push(...directiveNodes);
229229
}
230230
fieldData.node.arguments.push(argumentData.node);
@@ -239,7 +239,7 @@ export function childMapToValueArray<T extends ChildData, U extends ChildDefinit
239239
if (isFieldData(childData)) {
240240
propagateFieldDataArguments(childData);
241241
}
242-
for (const [directiveName, directiveNodes] of childData.directivesByDirectiveName) {
242+
for (const [directiveName, directiveNodes] of childData.directivesByName) {
243243
if (directiveName === DEPRECATED) {
244244
// @deprecated is non-repeatable
245245
const directiveNode = directiveNodes[0];
@@ -341,12 +341,10 @@ export function propagateAuthDirectives(parentData: ParentDefinitionData, authDa
341341
return;
342342
}
343343
if (authData.requiresAuthentication) {
344-
parentData.persistedDirectivesData.directivesByDirectiveName.set(AUTHENTICATED, [
345-
generateSimpleDirective(AUTHENTICATED),
346-
]);
344+
parentData.persistedDirectivesData.directivesByName.set(AUTHENTICATED, [generateSimpleDirective(AUTHENTICATED)]);
347345
}
348346
if (authData.requiredScopes.length > 0) {
349-
parentData.persistedDirectivesData.directivesByDirectiveName.set(REQUIRES_SCOPES, [
347+
parentData.persistedDirectivesData.directivesByName.set(REQUIRES_SCOPES, [
350348
generateRequiresScopesDirective(authData.requiredScopes),
351349
]);
352350
}
@@ -361,12 +359,10 @@ export function propagateFieldAuthDirectives(fieldData: FieldData, authData?: Au
361359
return;
362360
}
363361
if (fieldAuthData.originalData.requiresAuthentication) {
364-
fieldData.persistedDirectivesData.directivesByDirectiveName.set(AUTHENTICATED, [
365-
generateSimpleDirective(AUTHENTICATED),
366-
]);
362+
fieldData.persistedDirectivesData.directivesByName.set(AUTHENTICATED, [generateSimpleDirective(AUTHENTICATED)]);
367363
}
368364
if (fieldAuthData.originalData.requiredScopes.length > 0) {
369-
fieldData.persistedDirectivesData.directivesByDirectiveName.set(REQUIRES_SCOPES, [
365+
fieldData.persistedDirectivesData.directivesByName.set(REQUIRES_SCOPES, [
370366
generateRequiresScopesDirective(fieldAuthData.originalData.requiredScopes),
371367
]);
372368
}
@@ -390,14 +386,14 @@ export function generateDeprecatedDirective(reason: string): ConstDirectiveNode
390386
}
391387

392388
function getValidFlattenedPersistedDirectiveNodeArray(
393-
directivesByDirectiveName: Map<DirectiveName, ConstDirectiveNode[]>,
394-
persistedDirectiveDefinitionByDirectiveName: Map<DirectiveName, DirectiveDefinitionNode>,
389+
directivesByName: Map<DirectiveName, Array<ConstDirectiveNode>>,
390+
persistedDirectiveDefinitionByName: Map<DirectiveName, DirectiveDefinitionNode>,
395391
directiveCoords: string,
396392
errors: Error[],
397393
): ConstDirectiveNode[] {
398-
const persistedDirectiveNodes: ConstDirectiveNode[] = [];
399-
for (const [directiveName, directiveNodes] of directivesByDirectiveName) {
400-
const persistedDirectiveDefinition = persistedDirectiveDefinitionByDirectiveName.get(directiveName);
394+
const persistedDirectiveNodes: Array<ConstDirectiveNode> = [];
395+
for (const [directiveName, directiveNodes] of directivesByName) {
396+
const persistedDirectiveDefinition = persistedDirectiveDefinitionByName.get(directiveName);
401397
if (!persistedDirectiveDefinition) {
402398
continue;
403399
}
@@ -416,7 +412,7 @@ function getValidFlattenedPersistedDirectiveNodeArray(
416412

417413
function getRouterPersistedDirectiveNodes<T extends NodeData>(
418414
nodeData: T,
419-
persistedDirectiveDefinitionByDirectiveName: Map<string, DirectiveDefinitionNode>,
415+
persistedDirectiveDefinitionByName: Map<DirectiveName, DirectiveDefinitionNode>,
420416
errors: Error[],
421417
): ConstDirectiveNode[] {
422418
const persistedDirectiveNodes = [...nodeData.persistedDirectivesData.tagDirectiveByName.values()];
@@ -425,8 +421,8 @@ function getRouterPersistedDirectiveNodes<T extends NodeData>(
425421
}
426422
persistedDirectiveNodes.push(
427423
...getValidFlattenedPersistedDirectiveNodeArray(
428-
nodeData.persistedDirectivesData.directivesByDirectiveName,
429-
persistedDirectiveDefinitionByDirectiveName,
424+
nodeData.persistedDirectivesData.directivesByName,
425+
persistedDirectiveDefinitionByName,
430426
nodeData.name,
431427
errors,
432428
),
@@ -435,11 +431,11 @@ function getRouterPersistedDirectiveNodes<T extends NodeData>(
435431
}
436432

437433
export function getClientPersistedDirectiveNodes<T extends NodeData>(nodeData: T): ConstDirectiveNode[] {
438-
const persistedDirectiveNodes: ConstDirectiveNode[] = [];
434+
const persistedDirectiveNodes: Array<ConstDirectiveNode> = [];
439435
if (nodeData.persistedDirectivesData.isDeprecated) {
440436
persistedDirectiveNodes.push(generateDeprecatedDirective(nodeData.persistedDirectivesData.deprecatedReason));
441437
}
442-
for (const [directiveName, directiveNodes] of nodeData.persistedDirectivesData.directivesByDirectiveName) {
438+
for (const [directiveName, directiveNodes] of nodeData.persistedDirectivesData.directivesByName) {
443439
if (directiveName === SEMANTIC_NON_NULL && isFieldData(nodeData)) {
444440
persistedDirectiveNodes.push(
445441
generateSemanticNonNullDirective(getFirstEntry(nodeData.nullLevelsBySubgraphName) ?? new Set<number>([0])),
@@ -657,10 +653,7 @@ export function isTypeValidImplementation(
657653
}
658654

659655
export function isNodeDataInaccessible(data: NodeData): boolean {
660-
return (
661-
data.persistedDirectivesData.directivesByDirectiveName.has(INACCESSIBLE) ||
662-
data.directivesByDirectiveName.has(INACCESSIBLE)
663-
);
656+
return data.persistedDirectivesData.directivesByName.has(INACCESSIBLE) || data.directivesByName.has(INACCESSIBLE);
664657
}
665658

666659
export function isLeafKind(kind: Kind): boolean {

composition/src/subgraph/types.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { DirectiveDefinitionNode, DocumentNode, GraphQLSchema, OperationTypeNode } from 'graphql';
1+
import {
2+
DirectiveDefinitionNode,
3+
DocumentNode,
4+
GraphQLSchema,
5+
OperationTypeNode,
6+
SchemaDefinitionNode,
7+
SchemaExtensionNode,
8+
} from 'graphql';
29
import { ConfigurationData } from '../router-configuration/types';
310
import {
411
ConditionalFieldData,
@@ -7,7 +14,6 @@ import {
714
PersistedDirectiveDefinitionData,
815
} from '../schema-building/types';
916
import { DirectiveName, FieldName, SubgraphName, TypeName } from '../types/types';
10-
import { SchemaDefinitionNode, SchemaExtensionNode } from 'graphql/index';
1117

1218
export type Subgraph = {
1319
definitions: DocumentNode;

0 commit comments

Comments
 (0)