Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 48 additions & 48 deletions composition-go/index.global.js

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion composition/src/normalization/types.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Warning } from '../warnings/types';
import { DocumentNode, GraphQLSchema, OperationTypeNode } from 'graphql';
import { DirectiveDefinitionNode, DocumentNode, GraphQLSchema, OperationTypeNode } from 'graphql';
import { ConfigurationData } from '../router-configuration/types';
import {
AuthorizationData,
Expand All @@ -11,6 +11,7 @@ import {
} from '../schema-building/types';
import { Graph } from '../resolvability-graph/graph';
import { InternalSubgraph } from '../subgraph/types';
import { DirectiveName } from '../types/types';

export type NormalizationFailure = {
errors: Array<Error>;
Expand All @@ -23,6 +24,7 @@ export type NormalizationSuccess = {
concreteTypeNamesByAbstractTypeName: Map<string, Set<string>>;
conditionalFieldDataByCoordinates: Map<string, ConditionalFieldData>;
configurationDataByTypeName: Map<string, ConfigurationData>;
directiveDefinitionByDirectiveName: Map<DirectiveName, DirectiveDefinitionNode>;
entityInterfaces: Map<string, EntityInterfaceSubgraphData>;
entityDataByTypeName: Map<string, EntityData>;
fieldCoordsByNamedTypeName: Map<string, Set<string>>;
Expand Down
8 changes: 5 additions & 3 deletions composition/src/subgraph/types.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { DocumentNode, GraphQLSchema, OperationTypeNode } from 'graphql';
import { DirectiveDefinitionNode, DocumentNode, GraphQLSchema, OperationTypeNode } from 'graphql';
import { ConfigurationData } from '../router-configuration/types';
import {
ConditionalFieldData,
EntityInterfaceSubgraphData,
ParentDefinitionData,
PersistedDirectiveDefinitionData,
} from '../schema-building/types';
import { TypeName } from '../types/types';
import { DirectiveName, TypeName } from '../types/types';

export type Subgraph = {
definitions: DocumentNode;
Expand All @@ -16,6 +16,7 @@ export type Subgraph = {

export type SubgraphConfig = {
configurationDataByTypeName: Map<TypeName, ConfigurationData>;
directiveDefinitionByDirectiveName: Map<DirectiveName, DirectiveDefinitionNode>;
isVersionTwo: boolean;
parentDefinitionDataByTypeName: Map<TypeName, ParentDefinitionData>;
schema: GraphQLSchema;
Expand All @@ -25,14 +26,15 @@ export type InternalSubgraph = {
conditionalFieldDataByCoordinates: Map<string, ConditionalFieldData>;
configurationDataByTypeName: Map<string, ConfigurationData>;
definitions: DocumentNode;
directiveDefinitionByDirectiveName: Map<DirectiveName, DirectiveDefinitionNode>;
entityInterfaces: Map<string, EntityInterfaceSubgraphData>;
isVersionTwo: boolean;
keyFieldNamesByParentTypeName: Map<string, Set<string>>;
name: string;
operationTypes: Map<string, OperationTypeNode>;
overriddenFieldNamesByParentTypeName: Map<string, Set<string>>;
parentDefinitionDataByTypeName: Map<string, ParentDefinitionData>;
persistedDirectiveDefinitionDataByDirectiveName: Map<string, PersistedDirectiveDefinitionData>;
persistedDirectiveDefinitionDataByDirectiveName: Map<DirectiveName, PersistedDirectiveDefinitionData>;
schema: GraphQLSchema;
url: string;
};
2 changes: 2 additions & 0 deletions composition/src/v1/federation/federation-factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2821,6 +2821,7 @@ export class FederationFactory {
for (const subgraph of this.internalSubgraphBySubgraphName.values()) {
subgraphConfigBySubgraphName.set(subgraph.name, {
configurationDataByTypeName: subgraph.configurationDataByTypeName,
directiveDefinitionByDirectiveName: subgraph.directiveDefinitionByDirectiveName,
isVersionTwo: subgraph.isVersionTwo,
parentDefinitionDataByTypeName: subgraph.parentDefinitionDataByTypeName,
schema: subgraph.schema,
Expand Down Expand Up @@ -3112,6 +3113,7 @@ export class FederationFactory {
for (const subgraph of this.internalSubgraphBySubgraphName.values()) {
subgraphConfigBySubgraphName.set(subgraph.name, {
configurationDataByTypeName: subgraph.configurationDataByTypeName,
directiveDefinitionByDirectiveName: subgraph.directiveDefinitionByDirectiveName,
isVersionTwo: subgraph.isVersionTwo,
parentDefinitionDataByTypeName: subgraph.parentDefinitionDataByTypeName,
schema: subgraph.schema,
Expand Down
8 changes: 4 additions & 4 deletions composition/src/v1/normalization/normalization-factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ import {
} from './types';
import { newConfigurationData, newFieldSetConditionData } from '../../router-configuration/utils';
import { ImplementationErrors, InvalidFieldImplementation } from '../../utils/types';
import { FieldName, SubgraphName } from '../../types/types';
import { DirectiveName, FieldName, SubgraphName } from '../../types/types';
import { HandleFieldInheritableDirectivesParams, ValidateOneOfDirectiveParams } from './params';

export function normalizeSubgraphFromString(subgraphSDL: string, noLocation = true): NormalizationResult {
Expand Down Expand Up @@ -405,7 +405,7 @@ export class NormalizationFactory {
configurationDataByTypeName = new Map<string, ConfigurationData>();
customDirectiveDefinitions = new Map<string, DirectiveDefinitionNode>();
definedDirectiveNames = new Set<string>();
directiveDefinitionByDirectiveName = new Map<string, DirectiveDefinitionNode>();
directiveDefinitionByDirectiveName = new Map<DirectiveName, DirectiveDefinitionNode>();
directiveDefinitionDataByDirectiveName = initializeDirectiveDefinitionDatas();
doesParentRequireFetchReasons = false;
edfsDirectiveReferences = new Set<string>();
Expand All @@ -418,7 +418,6 @@ export class NormalizationFactory {
invalidConfigureDescriptionNodeDatas: Array<NodeData> = [];
invalidORScopesCoords = new Set<string>();
invalidRepeatedDirectiveNameByCoords = new Map<string, Set<string>>();
isCurrentParentExtension = false;
isParentObjectExternal = false;
isParentObjectShareable = false;
isSubgraphEventDrivenGraph = false;
Expand All @@ -427,7 +426,6 @@ export class NormalizationFactory {
lastParentNodeKind: Kind = Kind.NULL;
lastChildNodeKind: Kind = Kind.NULL;
parentTypeNamesWithAuthDirectives = new Set<string>();
keyFieldSetDataByTypeName = new Map<string, KeyFieldSetData>();
keyFieldSetsByEntityTypeNameByFieldCoords = new Map<string, Map<string, Set<string>>>();
keyFieldNamesByParentTypeName = new Map<string, Set<string>>();
fieldCoordsByNamedTypeName = new Map<string, Set<string>>();
Expand Down Expand Up @@ -3756,6 +3754,7 @@ export class NormalizationFactory {
concreteTypeNamesByAbstractTypeName: this.concreteTypeNamesByAbstractTypeName,
conditionalFieldDataByCoordinates: this.conditionalFieldDataByCoords,
configurationDataByTypeName: this.configurationDataByTypeName,
directiveDefinitionByDirectiveName: this.directiveDefinitionByDirectiveName,
entityDataByTypeName: this.entityDataByTypeName,
entityInterfaces: this.entityInterfaceDataByTypeName,
fieldCoordsByNamedTypeName: this.fieldCoordsByNamedTypeName,
Expand Down Expand Up @@ -3858,6 +3857,7 @@ export function batchNormalize(subgraphs: Subgraph[]): BatchNormalizationResult
conditionalFieldDataByCoordinates: normalizationResult.conditionalFieldDataByCoordinates,
configurationDataByTypeName: normalizationResult.configurationDataByTypeName,
definitions: normalizationResult.subgraphAST,
directiveDefinitionByDirectiveName: normalizationResult.directiveDefinitionByDirectiveName,
entityInterfaces: normalizationResult.entityInterfaces,
isVersionTwo: normalizationResult.isVersionTwo,
keyFieldNamesByParentTypeName: normalizationResult.keyFieldNamesByParentTypeName,
Expand Down
7 changes: 4 additions & 3 deletions composition/src/v1/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ import {
URL_LOWER,
VALUES,
} from '../../utils/string-constants';
import { DirectiveName } from '../../types/types';

export const REQUIRED_STRING_TYPE_NODE: TypeNode = {
kind: Kind.NON_NULL_TYPE,
Expand Down Expand Up @@ -477,7 +478,7 @@ export const EDFS_REDIS_SUBSCRIBE_DEFINITION: DirectiveDefinitionNode = {
repeatable: false,
};

export const BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME = new Map<string, DirectiveDefinitionNode>([
export const BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME = new Map<DirectiveName, DirectiveDefinitionNode>([
[DEPRECATED, DEPRECATED_DEFINITION],
[EXTENDS, EXTENDS_DEFINITION],
[EXTERNAL, EXTERNAL_DEFINITION],
Expand All @@ -495,7 +496,7 @@ export const BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME = new Map<string, Direc
[TAG, TAG_DEFINITION],
]);

export const ALL_IN_BUILT_DIRECTIVE_NAMES = new Set<string>([
export const ALL_IN_BUILT_DIRECTIVE_NAMES = new Set<DirectiveName>([
AUTHENTICATED,
COMPOSE_DIRECTIVE,
CONFIGURE_DESCRIPTION,
Expand Down Expand Up @@ -860,7 +861,7 @@ export const SUBSCRIPTION_FIELD_CONDITION_DEFINITION: InputObjectTypeDefinitionN
name: stringToNameNode(SUBSCRIPTION_FIELD_CONDITION),
};

export const V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME = new Map<string, DirectiveDefinitionNode>([
export const V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME = new Map<DirectiveName, DirectiveDefinitionNode>([
[AUTHENTICATED, AUTHENTICATED_DEFINITION],
[COMPOSE_DIRECTIVE, COMPOSE_DIRECTIVE_DEFINITION],
[INACCESSIBLE, INACCESSIBLE_DEFINITION],
Expand Down
32 changes: 30 additions & 2 deletions composition/tests/v1/federation-factory.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME,
incompatibleParentTypeMergeError,
INPUT_OBJECT,
InputObjectDefinitionData,
Expand All @@ -13,6 +14,7 @@ import {
ScalarDefinitionData,
Subgraph,
SubgraphName,
V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME,
} from '../../src';
import { describe, expect, test } from 'vitest';
import {
Expand Down Expand Up @@ -522,8 +524,11 @@ describe('FederationFactory tests', () => {
});

test('that subgraphs are federated #2', () => {
const result = federateSubgraphsSuccess([subgraphA, subgraphB], ROUTER_COMPATIBILITY_VERSION_ONE);
expect(schemaToSortedNormalizedString(result.federatedGraphSchema)).toBe(
const { federatedGraphSchema, subgraphConfigBySubgraphName } = federateSubgraphsSuccess(
[subgraphA, subgraphB],
ROUTER_COMPATIBILITY_VERSION_ONE,
);
expect(schemaToSortedNormalizedString(federatedGraphSchema)).toBe(
normalizeString(
versionTwoRouterDefinitions +
`
Expand Down Expand Up @@ -554,6 +559,27 @@ describe('FederationFactory tests', () => {
`,
),
);

const subgraphAConfig = subgraphConfigBySubgraphName.get(subgraphA.name);
expect(subgraphAConfig).toBeDefined();

const subgraphBConfig = subgraphConfigBySubgraphName.get(subgraphB.name);
expect(subgraphBConfig).toBeDefined();

expect(subgraphAConfig!.directiveDefinitionByDirectiveName).toHaveLength(22);
expect(subgraphBConfig!.directiveDefinitionByDirectiveName).toHaveLength(23);

for (const directiveName of BASE_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.keys()) {
expect(subgraphAConfig!.directiveDefinitionByDirectiveName.has(directiveName));
expect(subgraphBConfig!.directiveDefinitionByDirectiveName.has(directiveName));
}

for (const directiveName of V2_DIRECTIVE_DEFINITION_BY_DIRECTIVE_NAME.keys()) {
expect(subgraphAConfig!.directiveDefinitionByDirectiveName.has(directiveName));
expect(subgraphBConfig!.directiveDefinitionByDirectiveName.has(directiveName));
}

expect(subgraphBConfig!.directiveDefinitionByDirectiveName.has('a'));
});
Comment thread
Aenimus marked this conversation as resolved.

test('that extension orphans return an error', () => {
Expand Down Expand Up @@ -1120,6 +1146,8 @@ const subgraphB: Subgraph = {
name: 'subgraph-b',
url: '',
definitions: parse(`
directive @a on FIELD_DEFINITION | OBJECT

type Query {
trainer: [Trainer!]!
pokemon: [Pokemon!]! @shareable
Expand Down
Loading