@wundergraph/composition 0.47.1 → 0.47.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/index.d.ts +7 -2
  2. package/dist/index.js +7 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/normalization/types.d.ts +3 -3
  5. package/dist/schema-building/ast.d.ts +1 -1
  6. package/dist/schema-building/utils.d.ts +7 -6
  7. package/dist/schema-building/utils.js +6 -37
  8. package/dist/schema-building/utils.js.map +1 -1
  9. package/dist/subgraph/types.d.ts +3 -3
  10. package/dist/tsconfig.tsbuildinfo +1 -1
  11. package/dist/utils/composition-version.js +1 -1
  12. package/dist/utils/params.d.ts +12 -0
  13. package/dist/utils/params.js +3 -0
  14. package/dist/utils/params.js.map +1 -0
  15. package/dist/utils/utils.d.ts +4 -2
  16. package/dist/utils/utils.js +12 -3
  17. package/dist/utils/utils.js.map +1 -1
  18. package/dist/v1/constants/constants.d.ts +7 -0
  19. package/dist/v1/constants/constants.js +60 -0
  20. package/dist/v1/constants/constants.js.map +1 -0
  21. package/dist/v1/constants/directive-definitions.d.ts +30 -0
  22. package/dist/v1/{utils/constants.js → constants/directive-definitions.js} +186 -454
  23. package/dist/v1/constants/directive-definitions.js.map +1 -0
  24. package/dist/v1/{utils/integer-constants.js → constants/integers.js} +1 -1
  25. package/dist/v1/constants/integers.js.map +1 -0
  26. package/dist/v1/constants/non-directive-definitions.d.ts +9 -0
  27. package/dist/v1/constants/non-directive-definitions.js +166 -0
  28. package/dist/v1/constants/non-directive-definitions.js.map +1 -0
  29. package/dist/v1/constants/strings.d.ts +11 -0
  30. package/dist/v1/constants/strings.js +82 -0
  31. package/dist/v1/constants/strings.js.map +1 -0
  32. package/dist/v1/constants/type-nodes.d.ts +3 -0
  33. package/dist/v1/constants/type-nodes.js +15 -0
  34. package/dist/v1/constants/type-nodes.js.map +1 -0
  35. package/dist/v1/federation/federation-factory.d.ts +11 -11
  36. package/dist/v1/federation/federation-factory.js +257 -147
  37. package/dist/v1/federation/federation-factory.js.map +1 -1
  38. package/dist/v1/federation/params.d.ts +7 -2
  39. package/dist/v1/federation/utils.js +1 -1
  40. package/dist/v1/federation/utils.js.map +1 -1
  41. package/dist/v1/normalization/directive-definition-data.js +55 -53
  42. package/dist/v1/normalization/directive-definition-data.js.map +1 -1
  43. package/dist/v1/normalization/normalization-factory.d.ts +9 -8
  44. package/dist/v1/normalization/normalization-factory.js +251 -239
  45. package/dist/v1/normalization/normalization-factory.js.map +1 -1
  46. package/dist/v1/normalization/types.d.ts +9 -1
  47. package/dist/v1/normalization/utils.js +1 -1
  48. package/dist/v1/normalization/utils.js.map +1 -1
  49. package/dist/v1/normalization/walkers.js +21 -38
  50. package/dist/v1/normalization/walkers.js.map +1 -1
  51. package/dist/v1/utils/utils.js +15 -6
  52. package/dist/v1/utils/utils.js.map +1 -1
  53. package/package.json +2 -2
  54. package/dist/v1/utils/constants.d.ts +0 -50
  55. package/dist/v1/utils/constants.js.map +0 -1
  56. package/dist/v1/utils/integer-constants.js.map +0 -1
  57. package/dist/v1/utils/string-constants.d.ts +0 -7
  58. package/dist/v1/utils/string-constants.js +0 -41
  59. package/dist/v1/utils/string-constants.js.map +0 -1
  60. /package/dist/v1/{utils/integer-constants.d.ts → constants/integers.d.ts} +0 -0
@@ -9,10 +9,10 @@ const ast_1 = require("../../schema-building/ast");
9
9
  const utils_1 = require("../../ast/utils");
10
10
  const errors_1 = require("../../errors/errors");
11
11
  const utils_2 = require("./utils");
12
- const string_constants_1 = require("../utils/string-constants");
12
+ const strings_1 = require("../constants/strings");
13
13
  const utils_3 = require("../utils/utils");
14
14
  const merge_1 = require("@graphql-tools/merge");
15
- const constants_1 = require("../utils/constants");
15
+ const constants_1 = require("../constants/constants");
16
16
  const normalization_factory_1 = require("../normalization/normalization-factory");
17
17
  const utils_4 = require("../normalization/utils");
18
18
  const types_1 = require("../../schema-building/types");
@@ -20,15 +20,16 @@ const utils_5 = require("../../schema-building/utils");
20
20
  const walkers_1 = require("./walkers");
21
21
  const lodash_1 = require("lodash");
22
22
  const type_merging_1 = require("../schema-building/type-merging");
23
- const string_constants_2 = require("../../utils/string-constants");
23
+ const string_constants_1 = require("../../utils/string-constants");
24
24
  const integer_constants_1 = require("../../utils/integer-constants");
25
25
  const utils_6 = require("../../utils/utils");
26
26
  const warnings_1 = require("../warnings/warnings");
27
+ const directive_definitions_1 = require("../constants/directive-definitions");
27
28
  class FederationFactory {
28
29
  authorizationDataByParentTypeName;
29
30
  coordsByNamedTypeName = new Map();
30
31
  disableResolvabilityValidation = false;
31
- clientDefinitions = [constants_1.DEPRECATED_DEFINITION];
32
+ clientDefinitions = [];
32
33
  currentSubgraphName = '';
33
34
  concreteTypeNamesByAbstractTypeName;
34
35
  subgraphNamesByNamedTypeNameByFieldCoords = new Map();
@@ -49,18 +50,17 @@ class FederationFactory {
49
50
  parentDefinitionDataByTypeName = new Map();
50
51
  parentTagDataByTypeName = new Map();
51
52
  persistedDirectiveDefinitionByDirectiveName = new Map([
52
- [string_constants_2.AUTHENTICATED, constants_1.AUTHENTICATED_DEFINITION],
53
- [string_constants_2.DEPRECATED, constants_1.DEPRECATED_DEFINITION],
54
- [string_constants_2.INACCESSIBLE, constants_1.INACCESSIBLE_DEFINITION],
55
- [string_constants_2.ONE_OF, constants_1.ONE_OF_DEFINITION],
56
- [string_constants_2.REQUIRES_SCOPES, constants_1.REQUIRES_SCOPES_DEFINITION],
57
- [string_constants_2.SEMANTIC_NON_NULL, constants_1.SEMANTIC_NON_NULL_DEFINITION],
58
- [string_constants_2.TAG, constants_1.TAG_DEFINITION],
53
+ [string_constants_1.AUTHENTICATED, directive_definitions_1.AUTHENTICATED_DEFINITION],
54
+ [string_constants_1.DEPRECATED, directive_definitions_1.DEPRECATED_DEFINITION],
55
+ [string_constants_1.INACCESSIBLE, directive_definitions_1.INACCESSIBLE_DEFINITION],
56
+ [string_constants_1.ONE_OF, directive_definitions_1.ONE_OF_DEFINITION],
57
+ [string_constants_1.REQUIRES_SCOPES, directive_definitions_1.REQUIRES_SCOPES_DEFINITION],
58
+ [string_constants_1.SEMANTIC_NON_NULL, directive_definitions_1.SEMANTIC_NON_NULL_DEFINITION],
59
+ [string_constants_1.TAG, directive_definitions_1.TAG_DEFINITION],
59
60
  ]);
60
- persistedDirectiveDefinitions = new Set([string_constants_2.AUTHENTICATED, string_constants_2.DEPRECATED, string_constants_2.INACCESSIBLE, string_constants_2.TAG, string_constants_2.REQUIRES_SCOPES]);
61
61
  potentialPersistedDirectiveDefinitionDataByDirectiveName = new Map();
62
62
  referencedPersistedDirectiveNames = new Set();
63
- routerDefinitions = [constants_1.DEPRECATED_DEFINITION, constants_1.TAG_DEFINITION];
63
+ routerDefinitions = [];
64
64
  subscriptionFilterDataByFieldPath = new Map();
65
65
  tagNamesByCoords = new Map();
66
66
  warnings;
@@ -75,6 +75,43 @@ class FederationFactory {
75
75
  this.internalSubgraphBySubgraphName = internalSubgraphBySubgraphName;
76
76
  this.warnings = warnings;
77
77
  }
78
+ extractPersistedDirectives({ data, directivesByName }) {
79
+ for (const [directiveName, directiveNodes] of directivesByName) {
80
+ const definition = this.persistedDirectiveDefinitionByDirectiveName.get(directiveName);
81
+ // @authenticated and @requiresScopes are handled differently
82
+ if (!definition) {
83
+ continue;
84
+ }
85
+ this.referencedPersistedDirectiveNames.add(directiveName);
86
+ if (string_constants_1.AUTHORIZATION_DIRECTIVES.has(directiveName) || directiveNodes.length < 1) {
87
+ continue;
88
+ }
89
+ switch (directiveName) {
90
+ case string_constants_1.DEPRECATED: {
91
+ data.isDeprecated = true;
92
+ (0, utils_5.upsertDeprecatedDirective)(data, directiveNodes[0]);
93
+ break;
94
+ }
95
+ case string_constants_1.TAG: {
96
+ (0, utils_5.upsertTagDirectives)(data, directiveNodes);
97
+ break;
98
+ }
99
+ default: {
100
+ const existingDirectives = data.directivesByDirectiveName.get(directiveName);
101
+ if (!existingDirectives) {
102
+ data.directivesByDirectiveName.set(directiveName, [...directiveNodes]);
103
+ break;
104
+ }
105
+ // Only add one instance of certain directives.
106
+ if (string_constants_1.NON_REPEATABLE_PERSISTED_DIRECTIVES.has(directiveName)) {
107
+ break;
108
+ }
109
+ existingDirectives.push(...directiveNodes);
110
+ }
111
+ }
112
+ }
113
+ return data;
114
+ }
78
115
  getValidImplementedInterfaces(data) {
79
116
  const interfaces = [];
80
117
  if (data.implementedInterfaceTypeNames.size < 1) {
@@ -85,7 +122,7 @@ class FederationFactory {
85
122
  const invalidImplementationTypeStringByTypeName = new Map();
86
123
  for (const interfaceName of data.implementedInterfaceTypeNames) {
87
124
  interfaces.push((0, utils_1.stringToNamedTypeNode)(interfaceName));
88
- const implementationData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, interfaceName, string_constants_2.PARENT_DEFINITION_DATA);
125
+ const implementationData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, interfaceName, string_constants_1.PARENT_DEFINITION_DATA);
89
126
  if (implementationData.kind !== graphql_1.Kind.INTERFACE_TYPE_DEFINITION) {
90
127
  invalidImplementationTypeStringByTypeName.set(implementationData.name, (0, utils_6.kindToNodeType)(implementationData.kind));
91
128
  continue;
@@ -280,7 +317,7 @@ class FederationFactory {
280
317
  }
281
318
  generateTagData() {
282
319
  for (const [path, tagNames] of this.tagNamesByCoords) {
283
- const paths = path.split(string_constants_2.PERIOD);
320
+ const paths = path.split(string_constants_1.PERIOD);
284
321
  if (paths.length < 1) {
285
322
  continue;
286
323
  }
@@ -315,7 +352,10 @@ class FederationFactory {
315
352
  upsertEnumValueData(enumValueDataByName, incomingData, isParentInaccessible) {
316
353
  const existingData = enumValueDataByName.get(incomingData.name);
317
354
  const targetData = existingData || this.copyEnumValueData(incomingData);
318
- (0, utils_5.extractPersistedDirectives)(targetData.persistedDirectivesData, incomingData.directivesByDirectiveName, this.persistedDirectiveDefinitionByDirectiveName);
355
+ this.extractPersistedDirectives({
356
+ data: targetData.persistedDirectivesData,
357
+ directivesByName: incomingData.directivesByDirectiveName,
358
+ });
319
359
  const isValueInaccessible = (0, utils_5.isNodeDataInaccessible)(incomingData);
320
360
  if (isParentInaccessible || isValueInaccessible) {
321
361
  this.inaccessibleCoords.add(targetData.federatedCoords);
@@ -328,13 +368,19 @@ class FederationFactory {
328
368
  targetData.appearances += 1;
329
369
  (0, utils_6.addNewObjectValueMapEntries)(incomingData.configureDescriptionDataBySubgraphName, targetData.configureDescriptionDataBySubgraphName);
330
370
  (0, utils_5.setLongestDescription)(targetData, incomingData);
331
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, targetData.subgraphNames);
371
+ (0, utils_6.addIterableToSet)({
372
+ source: incomingData.subgraphNames,
373
+ target: targetData.subgraphNames,
374
+ });
332
375
  }
333
376
  // To facilitate the splitting of tag paths, field arguments do not use the renamedPath property for tagNamesByPath
334
377
  upsertInputValueData(inputValueDataByValueName, incomingData, parentCoords, isParentInaccessible) {
335
378
  const existingData = inputValueDataByValueName.get(incomingData.name);
336
379
  const targetData = existingData || this.copyInputValueData(incomingData);
337
- (0, utils_5.extractPersistedDirectives)(targetData.persistedDirectivesData, incomingData.directivesByDirectiveName, this.persistedDirectiveDefinitionByDirectiveName);
380
+ this.extractPersistedDirectives({
381
+ data: targetData.persistedDirectivesData,
382
+ directivesByName: incomingData.directivesByDirectiveName,
383
+ });
338
384
  this.recordTagNamesByCoords(targetData, `${parentCoords}.${targetData.name}`);
339
385
  this.namedInputValueTypeNames.add(targetData.namedTypeName);
340
386
  (0, utils_6.getValueOrDefault)(this.coordsByNamedTypeName, targetData.namedTypeName, () => new Set()).add(targetData.federatedCoords);
@@ -344,8 +390,14 @@ class FederationFactory {
344
390
  }
345
391
  (0, utils_6.addNewObjectValueMapEntries)(incomingData.configureDescriptionDataBySubgraphName, targetData.configureDescriptionDataBySubgraphName);
346
392
  (0, utils_5.setLongestDescription)(targetData, incomingData);
347
- (0, utils_6.addIterableValuesToSet)(incomingData.requiredSubgraphNames, targetData.requiredSubgraphNames);
348
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, targetData.subgraphNames);
393
+ (0, utils_6.addIterableToSet)({
394
+ source: incomingData.requiredSubgraphNames,
395
+ target: targetData.requiredSubgraphNames,
396
+ });
397
+ (0, utils_6.addIterableToSet)({
398
+ source: incomingData.subgraphNames,
399
+ target: targetData.subgraphNames,
400
+ });
349
401
  this.handleInputValueInaccessibility(isParentInaccessible, targetData, parentCoords);
350
402
  // TODO refactor type merging
351
403
  const mergeResult = (0, type_merging_1.getMostRestrictiveMergedTypeNode)(targetData.type, incomingData.type, targetData.originalCoords, this.errors);
@@ -382,7 +434,7 @@ class FederationFactory {
382
434
  this.inaccessibleCoords.add(inputValueData.federatedCoords);
383
435
  }
384
436
  handleSubscriptionFilterDirective(incomingData, targetData) {
385
- const subscriptionFilters = incomingData.directivesByDirectiveName.get(string_constants_2.SUBSCRIPTION_FILTER);
437
+ const subscriptionFilters = incomingData.directivesByDirectiveName.get(string_constants_1.SUBSCRIPTION_FILTER);
386
438
  if (!subscriptionFilters) {
387
439
  return;
388
440
  }
@@ -474,18 +526,21 @@ class FederationFactory {
474
526
  if (!subgraphNamesByNamedTypeName) {
475
527
  return;
476
528
  }
477
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, (0, utils_6.getValueOrDefault)(subgraphNamesByNamedTypeName, incomingData.namedTypeName, () => new Set()));
529
+ (0, utils_6.addIterableToSet)({
530
+ source: incomingData.subgraphNames,
531
+ target: (0, utils_6.getValueOrDefault)(subgraphNamesByNamedTypeName, incomingData.namedTypeName, () => new Set()),
532
+ });
478
533
  }
479
534
  upsertFieldData(fieldDataByFieldName, incomingData, isParentInaccessible) {
480
- if (incomingData.directivesByDirectiveName.has(string_constants_2.SEMANTIC_NON_NULL)) {
481
- this.referencedPersistedDirectiveNames.add(string_constants_2.SEMANTIC_NON_NULL);
482
- }
483
535
  const existingData = fieldDataByFieldName.get(incomingData.name);
484
536
  const targetData = existingData || this.copyFieldData(incomingData, isParentInaccessible || (0, utils_5.isNodeDataInaccessible)(incomingData));
485
537
  (0, utils_6.getValueOrDefault)(this.coordsByNamedTypeName, incomingData.namedTypeName, () => new Set()).add(targetData.federatedCoords);
486
538
  this.namedOutputTypeNames.add(incomingData.namedTypeName);
487
539
  this.handleSubscriptionFilterDirective(incomingData, targetData);
488
- (0, utils_5.extractPersistedDirectives)(targetData.persistedDirectivesData, incomingData.directivesByDirectiveName, this.persistedDirectiveDefinitionByDirectiveName);
540
+ this.extractPersistedDirectives({
541
+ data: targetData.persistedDirectivesData,
542
+ directivesByName: incomingData.directivesByDirectiveName,
543
+ });
489
544
  const isFieldInaccessible = isParentInaccessible || (0, utils_5.isNodeDataInaccessible)(targetData);
490
545
  if (isFieldInaccessible) {
491
546
  this.inaccessibleCoords.add(targetData.federatedCoords);
@@ -517,7 +572,10 @@ class FederationFactory {
517
572
  }
518
573
  }
519
574
  }
520
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, (0, utils_6.getValueOrDefault)(subgraphNamesByNamedTypeName, incomingData.namedTypeName, () => new Set()));
575
+ (0, utils_6.addIterableToSet)({
576
+ source: incomingData.subgraphNames,
577
+ target: (0, utils_6.getValueOrDefault)(subgraphNamesByNamedTypeName, incomingData.namedTypeName, () => new Set()),
578
+ });
521
579
  }
522
580
  else {
523
581
  /* If the named types match but there has already been a disparity in the named type names returned by the
@@ -533,9 +591,18 @@ class FederationFactory {
533
591
  (0, utils_5.setLongestDescription)(targetData, incomingData);
534
592
  targetData.isInaccessible ||= incomingData.isInaccessible;
535
593
  (0, utils_6.addNewObjectValueMapEntries)(incomingData.externalFieldDataBySubgraphName, targetData.externalFieldDataBySubgraphName);
536
- (0, utils_6.addMapEntries)(incomingData.isShareableBySubgraphName, targetData.isShareableBySubgraphName);
537
- (0, utils_6.addMapEntries)(incomingData.nullLevelsBySubgraphName, targetData.nullLevelsBySubgraphName);
538
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, targetData.subgraphNames);
594
+ (0, utils_6.addMapEntries)({
595
+ source: incomingData.isShareableBySubgraphName,
596
+ target: targetData.isShareableBySubgraphName,
597
+ });
598
+ (0, utils_6.addMapEntries)({
599
+ source: incomingData.nullLevelsBySubgraphName,
600
+ target: targetData.nullLevelsBySubgraphName,
601
+ });
602
+ (0, utils_6.addIterableToSet)({
603
+ source: incomingData.subgraphNames,
604
+ target: targetData.subgraphNames,
605
+ });
539
606
  }
540
607
  getClientSchemaUnionMembers(unionData) {
541
608
  const members = [];
@@ -562,7 +629,10 @@ class FederationFactory {
562
629
  directivesByDirectiveName: (0, utils_6.copyArrayValueMap)(sourceData.directivesByDirectiveName),
563
630
  extensionType: sourceData.extensionType,
564
631
  name: sourceData.name,
565
- persistedDirectivesData: (0, utils_5.extractPersistedDirectives)((0, utils_5.newPersistedDirectivesData)(), sourceData.directivesByDirectiveName, this.persistedDirectiveDefinitionByDirectiveName),
632
+ persistedDirectivesData: this.extractPersistedDirectives({
633
+ data: (0, utils_5.newPersistedDirectivesData)(),
634
+ directivesByName: sourceData.directivesByDirectiveName,
635
+ }),
566
636
  description: (0, utils_5.getInitialFederatedDescription)(sourceData),
567
637
  };
568
638
  }
@@ -580,7 +650,10 @@ class FederationFactory {
580
650
  name: (0, utils_1.stringToNameNode)(sourceData.name),
581
651
  },
582
652
  parentTypeName: sourceData.parentTypeName,
583
- persistedDirectivesData: (0, utils_5.extractPersistedDirectives)((0, utils_5.newPersistedDirectivesData)(), sourceData.directivesByDirectiveName, this.persistedDirectiveDefinitionByDirectiveName),
653
+ persistedDirectivesData: this.extractPersistedDirectives({
654
+ data: (0, utils_5.newPersistedDirectivesData)(),
655
+ directivesByName: sourceData.directivesByDirectiveName,
656
+ }),
584
657
  subgraphNames: new Set(sourceData.subgraphNames),
585
658
  description: (0, utils_5.getInitialFederatedDescription)(sourceData),
586
659
  };
@@ -605,7 +678,10 @@ class FederationFactory {
605
678
  },
606
679
  originalCoords: sourceData.originalCoords,
607
680
  originalParentTypeName: sourceData.originalParentTypeName,
608
- persistedDirectivesData: (0, utils_5.extractPersistedDirectives)((0, utils_5.newPersistedDirectivesData)(), sourceData.directivesByDirectiveName, this.persistedDirectiveDefinitionByDirectiveName),
681
+ persistedDirectivesData: this.extractPersistedDirectives({
682
+ data: (0, utils_5.newPersistedDirectivesData)(),
683
+ directivesByName: sourceData.directivesByDirectiveName,
684
+ }),
609
685
  renamedParentTypeName: sourceData.renamedParentTypeName,
610
686
  requiredSubgraphNames: new Set(sourceData.requiredSubgraphNames),
611
687
  subgraphNames: new Set(sourceData.subgraphNames),
@@ -627,9 +703,6 @@ class FederationFactory {
627
703
  return inputValueDataByInputValueName;
628
704
  }
629
705
  copyFieldData(sourceData, isInaccessible) {
630
- if (sourceData.directivesByDirectiveName.has(string_constants_2.SEMANTIC_NON_NULL)) {
631
- this.referencedPersistedDirectiveNames.add(string_constants_2.SEMANTIC_NON_NULL);
632
- }
633
706
  return {
634
707
  argumentDataByName: this.copyInputValueDataByValueName(sourceData.argumentDataByName, isInaccessible, sourceData.federatedCoords),
635
708
  configureDescriptionDataBySubgraphName: (0, utils_6.copyObjectValueMap)(sourceData.configureDescriptionDataBySubgraphName),
@@ -653,7 +726,10 @@ class FederationFactory {
653
726
  },
654
727
  nullLevelsBySubgraphName: sourceData.nullLevelsBySubgraphName,
655
728
  originalParentTypeName: sourceData.originalParentTypeName,
656
- persistedDirectivesData: (0, utils_5.extractPersistedDirectives)((0, utils_5.newPersistedDirectivesData)(), sourceData.directivesByDirectiveName, this.persistedDirectiveDefinitionByDirectiveName),
729
+ persistedDirectivesData: this.extractPersistedDirectives({
730
+ data: (0, utils_5.newPersistedDirectivesData)(),
731
+ directivesByName: sourceData.directivesByDirectiveName,
732
+ }),
657
733
  renamedParentTypeName: sourceData.renamedParentTypeName,
658
734
  subgraphNames: new Set(sourceData.subgraphNames),
659
735
  type: sourceData.type,
@@ -787,7 +863,10 @@ class FederationFactory {
787
863
  }
788
864
  return targetData;
789
865
  }
790
- (0, utils_5.extractPersistedDirectives)(existingData.persistedDirectivesData, incomingData.directivesByDirectiveName, this.persistedDirectiveDefinitionByDirectiveName);
866
+ this.extractPersistedDirectives({
867
+ data: existingData.persistedDirectivesData,
868
+ directivesByName: incomingData.directivesByDirectiveName,
869
+ });
791
870
  return existingData;
792
871
  }
793
872
  upsertParentDefinitionData(incomingData, subgraphName) {
@@ -837,7 +916,10 @@ class FederationFactory {
837
916
  }
838
917
  targetData.appearances += 1;
839
918
  targetData.isInaccessible ||= isParentInaccessible;
840
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, targetData.subgraphNames);
919
+ (0, utils_6.addIterableToSet)({
920
+ source: incomingData.subgraphNames,
921
+ target: targetData.subgraphNames,
922
+ });
841
923
  for (const data of incomingData.enumValueDataByName.values()) {
842
924
  this.upsertEnumValueData(targetData.enumValueDataByName, data, isParentInaccessible);
843
925
  }
@@ -851,7 +933,10 @@ class FederationFactory {
851
933
  this.propagateInaccessibilityToExistingChildren(targetData);
852
934
  }
853
935
  targetData.isInaccessible ||= isParentInaccessible;
854
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, targetData.subgraphNames);
936
+ (0, utils_6.addIterableToSet)({
937
+ source: incomingData.subgraphNames,
938
+ target: targetData.subgraphNames,
939
+ });
855
940
  for (const inputValueData of incomingData.inputValueDataByName.values()) {
856
941
  this.upsertInputValueData(targetData.inputValueDataByName, inputValueData, targetData.name, targetData.isInaccessible);
857
942
  }
@@ -866,8 +951,14 @@ class FederationFactory {
866
951
  this.propagateInaccessibilityToExistingChildren(targetData);
867
952
  }
868
953
  targetData.isInaccessible ||= isParentInaccessible;
869
- (0, utils_6.addIterableValuesToSet)(compositeOutputData.implementedInterfaceTypeNames, targetData.implementedInterfaceTypeNames);
870
- (0, utils_6.addIterableValuesToSet)(compositeOutputData.subgraphNames, targetData.subgraphNames);
954
+ (0, utils_6.addIterableToSet)({
955
+ source: compositeOutputData.implementedInterfaceTypeNames,
956
+ target: targetData.implementedInterfaceTypeNames,
957
+ });
958
+ (0, utils_6.addIterableToSet)({
959
+ source: compositeOutputData.subgraphNames,
960
+ target: targetData.subgraphNames,
961
+ });
871
962
  for (const fieldData of compositeOutputData.fieldDataByName.values()) {
872
963
  this.upsertFieldData(targetData.fieldDataByName, fieldData, targetData.isInaccessible);
873
964
  }
@@ -876,12 +967,21 @@ class FederationFactory {
876
967
  if (!(0, utils_5.areKindsEqual)(targetData, incomingData)) {
877
968
  return;
878
969
  }
879
- (0, utils_6.addMapEntries)(incomingData.memberByMemberTypeName, targetData.memberByMemberTypeName);
880
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, targetData.subgraphNames);
970
+ (0, utils_6.addMapEntries)({
971
+ source: incomingData.memberByMemberTypeName,
972
+ target: targetData.memberByMemberTypeName,
973
+ });
974
+ (0, utils_6.addIterableToSet)({
975
+ source: incomingData.subgraphNames,
976
+ target: targetData.subgraphNames,
977
+ });
881
978
  return;
882
979
  default:
883
980
  // Scalar
884
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, targetData.subgraphNames);
981
+ (0, utils_6.addIterableToSet)({
982
+ source: incomingData.subgraphNames,
983
+ target: targetData.subgraphNames,
984
+ });
885
985
  return;
886
986
  }
887
987
  }
@@ -941,7 +1041,10 @@ class FederationFactory {
941
1041
  }
942
1042
  (0, utils_5.setLongestDescription)(existingData, incomingData);
943
1043
  existingData.repeatable &&= incomingData.repeatable;
944
- (0, utils_6.addIterableValuesToSet)(incomingData.subgraphNames, existingData.subgraphNames);
1044
+ (0, utils_6.addIterableToSet)({
1045
+ source: incomingData.subgraphNames,
1046
+ target: existingData.subgraphNames,
1047
+ });
945
1048
  }
946
1049
  shouldUpdateFederatedFieldAbstractNamedType(abstractTypeName, objectTypeNames) {
947
1050
  if (!abstractTypeName) {
@@ -970,7 +1073,7 @@ class FederationFactory {
970
1073
  }
971
1074
  handleDisparateFieldNamedTypes() {
972
1075
  for (const [fieldCoordinates, subgraphNamesByNamedTypeName] of this.subgraphNamesByNamedTypeNameByFieldCoords) {
973
- const coordinates = fieldCoordinates.split(string_constants_2.PERIOD);
1076
+ const coordinates = fieldCoordinates.split(string_constants_1.PERIOD);
974
1077
  if (coordinates.length !== 2) {
975
1078
  continue;
976
1079
  }
@@ -1136,7 +1239,7 @@ class FederationFactory {
1136
1239
  }
1137
1240
  handleEntityInterfaces() {
1138
1241
  for (const [entityInterfaceTypeName, entityInterfaceData] of this.entityInterfaceFederationDataByTypeName) {
1139
- const entityInterfaceFederationData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, entityInterfaceTypeName, string_constants_2.PARENT_DEFINITION_DATA);
1242
+ const entityInterfaceFederationData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, entityInterfaceTypeName, string_constants_1.PARENT_DEFINITION_DATA);
1140
1243
  if (entityInterfaceFederationData.kind !== graphql_1.Kind.INTERFACE_TYPE_DEFINITION) {
1141
1244
  // TODO error
1142
1245
  continue;
@@ -1158,7 +1261,7 @@ class FederationFactory {
1158
1261
  this.internalGraph.setSubgraphName(subgraphName);
1159
1262
  const interfaceObjectNode = this.internalGraph.addOrUpdateNode(entityInterfaceTypeName, { isAbstract: true });
1160
1263
  for (const concreteTypeName of concreteTypeNames) {
1161
- const concreteTypeData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, concreteTypeName, string_constants_2.PARENT_DEFINITION_DATA);
1264
+ const concreteTypeData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, concreteTypeName, string_constants_1.PARENT_DEFINITION_DATA);
1162
1265
  if (!(0, utils_3.isObjectDefinitionData)(concreteTypeData)) {
1163
1266
  continue;
1164
1267
  }
@@ -1167,7 +1270,10 @@ class FederationFactory {
1167
1270
  entityData.subgraphNames.add(subgraphName);
1168
1271
  const configurationData = configurationDataByTypeName.get(concreteTypeName);
1169
1272
  if (configurationData) {
1170
- (0, utils_6.addIterableValuesToSet)(interfaceObjectConfiguration.fieldNames, configurationData.fieldNames);
1273
+ (0, utils_6.addIterableToSet)({
1274
+ source: interfaceObjectConfiguration.fieldNames,
1275
+ target: configurationData.fieldNames,
1276
+ });
1171
1277
  if (!configurationData.keys) {
1172
1278
  configurationData.keys = [...keys];
1173
1279
  }
@@ -1251,7 +1357,7 @@ class FederationFactory {
1251
1357
  const coords = (0, utils_3.getNodeCoords)(data);
1252
1358
  const persistedDirectiveNodes = [];
1253
1359
  for (const [directiveName, directiveNodes] of data.persistedDirectivesData.directivesByDirectiveName) {
1254
- if (directiveName === string_constants_2.SEMANTIC_NON_NULL && (0, utils_5.isFieldData)(data)) {
1360
+ if (directiveName === string_constants_1.SEMANTIC_NON_NULL && (0, utils_5.isFieldData)(data)) {
1255
1361
  persistedDirectiveNodes.push((0, utils_6.generateSemanticNonNullDirective)((0, utils_6.getFirstEntry)(data.nullLevelsBySubgraphName) ?? new Set([0])));
1256
1362
  continue;
1257
1363
  }
@@ -1336,7 +1442,7 @@ class FederationFactory {
1336
1442
  }
1337
1443
  }
1338
1444
  if (invalidRequiredArguments.length > 0) {
1339
- this.errors.push((0, errors_1.invalidRequiredInputValueError)(string_constants_2.FIELD, fieldPath, invalidRequiredArguments));
1445
+ this.errors.push((0, errors_1.invalidRequiredInputValueError)(string_constants_1.FIELD, fieldPath, invalidRequiredArguments));
1340
1446
  }
1341
1447
  else if (argumentNames.length > 0) {
1342
1448
  // fieldConfiguration might already exist through subscriptionFilter
@@ -1377,7 +1483,7 @@ class FederationFactory {
1377
1483
  }
1378
1484
  }
1379
1485
  validateOneOfDirective({ data, inputValueNodes, requiredFieldNames }) {
1380
- if (!data.directivesByDirectiveName.has(string_constants_2.ONE_OF)) {
1486
+ if (!data.directivesByDirectiveName.has(string_constants_1.ONE_OF)) {
1381
1487
  return true;
1382
1488
  }
1383
1489
  if (requiredFieldNames.size > 0) {
@@ -1402,12 +1508,15 @@ class FederationFactory {
1402
1508
  }
1403
1509
  switch (parentDefinitionData.kind) {
1404
1510
  case graphql_1.Kind.ENUM_TYPE_DEFINITION: {
1511
+ if (strings_1.IGNORED_FEDERATED_TYPE_NAMES.has(parentTypeName)) {
1512
+ break;
1513
+ }
1405
1514
  const enumValueNodes = [];
1406
1515
  const clientEnumValueNodes = [];
1407
1516
  const mergeMethod = this.getEnumValueMergeMethod(parentTypeName);
1408
1517
  (0, utils_5.propagateAuthDirectives)(parentDefinitionData, this.authorizationDataByParentTypeName.get(parentTypeName));
1409
1518
  for (const enumValueData of parentDefinitionData.enumValueDataByName.values()) {
1410
- const enumValueNode = (0, utils_5.getNodeForRouterSchemaByData)(enumValueData, this.persistedDirectiveDefinitionByDirectiveName, this.errors);
1519
+ const enumValueNode = this.getNodeForRouterSchemaByData(enumValueData);
1411
1520
  const isValueInaccessible = (0, utils_5.isNodeDataInaccessible)(enumValueData);
1412
1521
  const clientEnumValueNode = {
1413
1522
  ...enumValueData.node,
@@ -1447,7 +1556,7 @@ class FederationFactory {
1447
1556
  break;
1448
1557
  }
1449
1558
  if (clientEnumValueNodes.length < 1) {
1450
- this.errors.push((0, errors_1.allChildDefinitionsAreInaccessibleError)((0, utils_6.kindToNodeType)(parentDefinitionData.kind), parentTypeName, string_constants_2.ENUM_VALUE));
1559
+ this.errors.push((0, errors_1.allChildDefinitionsAreInaccessibleError)((0, utils_6.kindToNodeType)(parentDefinitionData.kind), parentTypeName, string_constants_1.ENUM_VALUE));
1451
1560
  break;
1452
1561
  }
1453
1562
  this.clientDefinitions.push({
@@ -1458,6 +1567,9 @@ class FederationFactory {
1458
1567
  break;
1459
1568
  }
1460
1569
  case graphql_1.Kind.INPUT_OBJECT_TYPE_DEFINITION: {
1570
+ if (strings_1.IGNORED_FEDERATED_TYPE_NAMES.has(parentTypeName)) {
1571
+ break;
1572
+ }
1461
1573
  const invalidRequiredInputs = new Array();
1462
1574
  const inputValueNodes = new Array();
1463
1575
  const clientInputValueNodes = new Array();
@@ -1485,7 +1597,7 @@ class FederationFactory {
1485
1597
  }
1486
1598
  }
1487
1599
  if (invalidRequiredInputs.length > 0) {
1488
- this.errors.push((0, errors_1.invalidRequiredInputValueError)(string_constants_2.INPUT_OBJECT, parentTypeName, invalidRequiredInputs, false));
1600
+ this.errors.push((0, errors_1.invalidRequiredInputValueError)(string_constants_1.INPUT_OBJECT, parentTypeName, invalidRequiredInputs, false));
1489
1601
  break;
1490
1602
  }
1491
1603
  if (!this.validateOneOfDirective({
@@ -1565,7 +1677,7 @@ class FederationFactory {
1565
1677
  if (clientSchemaFieldNodes.length < 1) {
1566
1678
  const error = isQuery
1567
1679
  ? (0, errors_1.noQueryRootTypeError)(false)
1568
- : (0, errors_1.allChildDefinitionsAreInaccessibleError)((0, utils_6.kindToNodeType)(parentDefinitionData.kind), parentTypeName, string_constants_2.FIELD);
1680
+ : (0, errors_1.allChildDefinitionsAreInaccessibleError)((0, utils_6.kindToNodeType)(parentDefinitionData.kind), parentTypeName, string_constants_1.FIELD);
1569
1681
  this.errors.push(error);
1570
1682
  break;
1571
1683
  }
@@ -1577,7 +1689,7 @@ class FederationFactory {
1577
1689
  break;
1578
1690
  }
1579
1691
  case graphql_1.Kind.SCALAR_TYPE_DEFINITION: {
1580
- if (constants_1.BASE_SCALARS.has(parentTypeName)) {
1692
+ if (strings_1.IGNORED_FEDERATED_TYPE_NAMES.has(parentTypeName)) {
1581
1693
  break;
1582
1694
  }
1583
1695
  (0, utils_5.propagateAuthDirectives)(parentDefinitionData, this.authorizationDataByParentTypeName.get(parentTypeName));
@@ -1603,7 +1715,7 @@ class FederationFactory {
1603
1715
  }
1604
1716
  const clientMembers = this.getClientSchemaUnionMembers(parentDefinitionData);
1605
1717
  if (clientMembers.length < 1) {
1606
- this.errors.push((0, errors_1.allChildDefinitionsAreInaccessibleError)(string_constants_2.UNION, parentTypeName, 'union member type'));
1718
+ this.errors.push((0, errors_1.allChildDefinitionsAreInaccessibleError)(string_constants_1.UNION, parentTypeName, 'union member type'));
1607
1719
  break;
1608
1720
  }
1609
1721
  this.clientDefinitions.push({
@@ -1627,7 +1739,7 @@ class FederationFactory {
1627
1739
  }
1628
1740
  for (const coords of fieldCoords) {
1629
1741
  // The coords should all be exactly <parentTypeName>.<fieldName>
1630
- const segments = coords.split(string_constants_2.PERIOD);
1742
+ const segments = coords.split(string_constants_1.PERIOD);
1631
1743
  switch (segments.length) {
1632
1744
  case 2: {
1633
1745
  const parentAuthData = (0, utils_6.getValueOrDefault)(this.authorizationDataByParentTypeName, segments[0], () => (0, utils_3.newAuthorizationData)(segments[0]));
@@ -1655,14 +1767,14 @@ class FederationFactory {
1655
1767
  this.handleEntityInterfaces();
1656
1768
  // generate the map of tag data that is used by contracts
1657
1769
  this.generateTagData();
1658
- this.pushVersionTwoDirectiveDefinitionsToDocumentDefinitions();
1770
+ this.#addDirectiveDefinitionsAndDepsToRouterAndClientSchemas();
1659
1771
  // The named type auth data can only be pushed to the field once it has all been consolidated
1660
1772
  this.pushNamedTypeAuthDataToFields();
1661
1773
  }
1662
1774
  validateInterfaceImplementationsAndPushToDocumentDefinitions(interfaceImplementations) {
1663
1775
  for (const { data, clientSchemaFieldNodes } of interfaceImplementations) {
1664
1776
  data.node.interfaces = this.getValidImplementedInterfaces(data);
1665
- this.routerDefinitions.push((0, utils_5.getNodeForRouterSchemaByData)(data, this.persistedDirectiveDefinitionByDirectiveName, this.errors));
1777
+ this.routerDefinitions.push(this.getNodeForRouterSchemaByData(data));
1666
1778
  if ((0, utils_5.isNodeDataInaccessible)(data)) {
1667
1779
  this.validateReferencesOfInaccessibleType(data);
1668
1780
  this.internalGraph.setNodeInaccessible(data.name);
@@ -1685,45 +1797,37 @@ class FederationFactory {
1685
1797
  });
1686
1798
  }
1687
1799
  }
1688
- pushVersionTwoDirectiveDefinitionsToDocumentDefinitions() {
1689
- if (!this.isVersionTwo) {
1690
- if (this.referencedPersistedDirectiveNames.has(string_constants_2.SEMANTIC_NON_NULL)) {
1691
- this.clientDefinitions.push(constants_1.SEMANTIC_NON_NULL_DEFINITION);
1692
- // Recreate the array until all directive imports are usage-based.
1693
- this.routerDefinitions = [constants_1.DEPRECATED_DEFINITION, constants_1.SEMANTIC_NON_NULL_DEFINITION, constants_1.TAG_DEFINITION];
1800
+ #addDirectiveDefinitionsAndDepsToRouterAndClientSchemas() {
1801
+ const clientDependencies = new Set();
1802
+ const routerDependencies = new Set();
1803
+ for (const directiveName of this.referencedPersistedDirectiveNames) {
1804
+ const definition = constants_1.DIRECTIVE_DEFINITION_BY_NAME.get(directiveName);
1805
+ if (!definition) {
1806
+ continue;
1694
1807
  }
1695
- return;
1696
- }
1697
- if (this.referencedPersistedDirectiveNames.has(string_constants_2.SEMANTIC_NON_NULL)) {
1698
- this.clientDefinitions.push(constants_1.SEMANTIC_NON_NULL_DEFINITION);
1699
- // Recreate the array until all directive imports are usage-based.
1700
- this.routerDefinitions = [
1701
- constants_1.AUTHENTICATED_DEFINITION,
1702
- constants_1.DEPRECATED_DEFINITION,
1703
- constants_1.INACCESSIBLE_DEFINITION,
1704
- constants_1.REQUIRES_SCOPES_DEFINITION,
1705
- constants_1.SEMANTIC_NON_NULL_DEFINITION,
1706
- constants_1.TAG_DEFINITION,
1707
- constants_1.SCOPE_SCALAR_DEFINITION,
1708
- ];
1709
- return;
1808
+ const dependencies = strings_1.DEPENDENCIES_BY_DIRECTIVE_NAME.get(directiveName) ?? [];
1809
+ if (strings_1.CLIENT_PERSISTED_DIRECTIVE_NAMES.has(directiveName)) {
1810
+ this.clientDefinitions.push(definition);
1811
+ (0, utils_6.addIterableToSet)({
1812
+ source: dependencies,
1813
+ target: clientDependencies,
1814
+ });
1815
+ }
1816
+ this.routerDefinitions.push(definition);
1817
+ (0, utils_6.addIterableToSet)({
1818
+ source: dependencies,
1819
+ target: routerDependencies,
1820
+ });
1710
1821
  }
1711
- // Recreate the array until all directive imports are usage-based.
1712
- this.routerDefinitions = [
1713
- constants_1.AUTHENTICATED_DEFINITION,
1714
- constants_1.DEPRECATED_DEFINITION,
1715
- constants_1.INACCESSIBLE_DEFINITION,
1716
- constants_1.REQUIRES_SCOPES_DEFINITION,
1717
- constants_1.TAG_DEFINITION,
1718
- constants_1.SCOPE_SCALAR_DEFINITION,
1719
- ];
1822
+ this.clientDefinitions.push(...clientDependencies);
1823
+ this.routerDefinitions.push(...routerDependencies);
1720
1824
  }
1721
1825
  validatePathSegmentInaccessibility(path) {
1722
1826
  if (!path) {
1723
1827
  return false;
1724
1828
  }
1725
- const coordinates = path.split(string_constants_2.LEFT_PARENTHESIS)[0];
1726
- const segments = coordinates.split(string_constants_2.PERIOD);
1829
+ const coordinates = path.split(string_constants_1.LEFT_PARENTHESIS)[0];
1830
+ const segments = coordinates.split(string_constants_1.PERIOD);
1727
1831
  let segment = segments[0];
1728
1832
  for (let i = 0; i < segments.length; i++) {
1729
1833
  if (this.inaccessibleCoords.has(segment)) {
@@ -1752,7 +1856,7 @@ class FederationFactory {
1752
1856
  }
1753
1857
  }
1754
1858
  validateQueryRootType() {
1755
- const query = this.parentDefinitionDataByTypeName.get(string_constants_2.QUERY);
1859
+ const query = this.parentDefinitionDataByTypeName.get(string_constants_1.QUERY);
1756
1860
  if (!query || query.kind !== graphql_1.Kind.OBJECT_TYPE_DEFINITION || query.fieldDataByName.size < 1) {
1757
1861
  this.errors.push((0, errors_1.noQueryRootTypeError)());
1758
1862
  return;
@@ -1765,7 +1869,7 @@ class FederationFactory {
1765
1869
  this.errors.push((0, errors_1.noQueryRootTypeError)());
1766
1870
  }
1767
1871
  validateSubscriptionFieldConditionFieldPath(conditionFieldPath, objectData, inputFieldPath, directiveSubgraphName, fieldErrorMessages) {
1768
- const paths = conditionFieldPath.split(string_constants_2.PERIOD);
1872
+ const paths = conditionFieldPath.split(string_constants_1.PERIOD);
1769
1873
  if (paths.length < 1) {
1770
1874
  fieldErrorMessages.push((0, errors_1.invalidSubscriptionFieldConditionFieldPathErrorMessage)(inputFieldPath, conditionFieldPath));
1771
1875
  return [];
@@ -1801,7 +1905,7 @@ class FederationFactory {
1801
1905
  lastData = { kind: graphql_1.Kind.SCALAR_TYPE_DEFINITION, name: fieldData.namedTypeName };
1802
1906
  continue;
1803
1907
  }
1804
- lastData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, fieldData.namedTypeName, string_constants_2.PARENT_DEFINITION_DATA);
1908
+ lastData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, fieldData.namedTypeName, string_constants_1.PARENT_DEFINITION_DATA);
1805
1909
  }
1806
1910
  if (!(0, utils_5.isLeafKind)(lastData.kind)) {
1807
1911
  fieldErrorMessages.push((0, errors_1.nonLeafSubscriptionFieldConditionFieldPathFinalFieldErrorMessage)(inputFieldPath, conditionFieldPath, paths[paths.length - 1], (0, utils_6.kindToNodeType)(lastData.kind), lastData.name));
@@ -1816,7 +1920,7 @@ class FederationFactory {
1816
1920
  return false;
1817
1921
  }
1818
1922
  let hasErrors = false;
1819
- const validFieldNames = new Set([string_constants_2.FIELD_PATH, string_constants_2.VALUES]);
1923
+ const validFieldNames = new Set([string_constants_1.FIELD_PATH, string_constants_1.VALUES]);
1820
1924
  const duplicatedFieldNames = new Set();
1821
1925
  const invalidFieldNames = new Set();
1822
1926
  const fieldErrorMessages = [];
@@ -1824,17 +1928,17 @@ class FederationFactory {
1824
1928
  const inputFieldName = objectFieldNode.name.value;
1825
1929
  const inputFieldPath = inputPath + `.${inputFieldName}`;
1826
1930
  switch (inputFieldName) {
1827
- case string_constants_2.FIELD_PATH: {
1828
- if (validFieldNames.has(string_constants_2.FIELD_PATH)) {
1829
- validFieldNames.delete(string_constants_2.FIELD_PATH);
1931
+ case string_constants_1.FIELD_PATH: {
1932
+ if (validFieldNames.has(string_constants_1.FIELD_PATH)) {
1933
+ validFieldNames.delete(string_constants_1.FIELD_PATH);
1830
1934
  }
1831
1935
  else {
1832
1936
  hasErrors = true;
1833
- duplicatedFieldNames.add(string_constants_2.FIELD_PATH);
1937
+ duplicatedFieldNames.add(string_constants_1.FIELD_PATH);
1834
1938
  break;
1835
1939
  }
1836
1940
  if (objectFieldNode.value.kind !== graphql_1.Kind.STRING) {
1837
- fieldErrorMessages.push((0, errors_1.invalidInputFieldTypeErrorMessage)(inputFieldPath, string_constants_2.STRING, (0, utils_6.kindToNodeType)(objectFieldNode.value.kind)));
1941
+ fieldErrorMessages.push((0, errors_1.invalidInputFieldTypeErrorMessage)(inputFieldPath, string_constants_1.STRING, (0, utils_6.kindToNodeType)(objectFieldNode.value.kind)));
1838
1942
  hasErrors = true;
1839
1943
  break;
1840
1944
  }
@@ -1846,18 +1950,18 @@ class FederationFactory {
1846
1950
  condition.fieldPath = fieldPath;
1847
1951
  break;
1848
1952
  }
1849
- case string_constants_2.VALUES: {
1850
- if (validFieldNames.has(string_constants_2.VALUES)) {
1851
- validFieldNames.delete(string_constants_2.VALUES);
1953
+ case string_constants_1.VALUES: {
1954
+ if (validFieldNames.has(string_constants_1.VALUES)) {
1955
+ validFieldNames.delete(string_constants_1.VALUES);
1852
1956
  }
1853
1957
  else {
1854
1958
  hasErrors = true;
1855
- duplicatedFieldNames.add(string_constants_2.VALUES);
1959
+ duplicatedFieldNames.add(string_constants_1.VALUES);
1856
1960
  break;
1857
1961
  }
1858
1962
  const objectFieldValueKind = objectFieldNode.value.kind;
1859
1963
  if (objectFieldValueKind == graphql_1.Kind.NULL || objectFieldValueKind == graphql_1.Kind.OBJECT) {
1860
- fieldErrorMessages.push((0, errors_1.invalidInputFieldTypeErrorMessage)(inputFieldPath, string_constants_2.LIST, (0, utils_6.kindToNodeType)(objectFieldNode.value.kind)));
1964
+ fieldErrorMessages.push((0, errors_1.invalidInputFieldTypeErrorMessage)(inputFieldPath, string_constants_1.LIST, (0, utils_6.kindToNodeType)(objectFieldNode.value.kind)));
1861
1965
  hasErrors = true;
1862
1966
  break;
1863
1967
  }
@@ -1915,7 +2019,7 @@ class FederationFactory {
1915
2019
  }
1916
2020
  const objectFieldNode = objectValueNode.fields[0];
1917
2021
  const fieldName = objectFieldNode.name.value;
1918
- if (!string_constants_1.SUBSCRIPTION_FILTER_INPUT_NAMES.has(fieldName)) {
2022
+ if (!strings_1.SUBSCRIPTION_FILTER_INPUT_NAMES.has(fieldName)) {
1919
2023
  errorMessages.push((0, errors_1.subscriptionFilterConditionInvalidInputFieldErrorMessage)(inputPath, fieldName));
1920
2024
  return false;
1921
2025
  }
@@ -1923,34 +2027,34 @@ class FederationFactory {
1923
2027
  switch (objectFieldNode.value.kind) {
1924
2028
  case graphql_1.Kind.OBJECT: {
1925
2029
  switch (fieldName) {
1926
- case string_constants_2.IN_UPPER: {
2030
+ case string_constants_1.IN_UPPER: {
1927
2031
  configuration.in = { fieldPath: [], values: [] };
1928
2032
  return this.validateSubscriptionFieldCondition(objectFieldNode.value, configuration.in, objectData, depth, inputPath + `.IN`, directiveSubgraphName, errorMessages);
1929
2033
  }
1930
- case string_constants_2.NOT_UPPER: {
2034
+ case string_constants_1.NOT_UPPER: {
1931
2035
  configuration.not = {};
1932
2036
  return this.validateSubscriptionFilterCondition(objectFieldNode.value, configuration.not, objectData, depth, inputPath + `.NOT`, directiveSubgraphName, errorMessages);
1933
2037
  }
1934
2038
  default:
1935
2039
  // The field is guaranteed to be an AND or an OR
1936
- errorMessages.push((0, errors_1.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(inputFieldPath, string_constants_2.LIST, string_constants_2.OBJECT));
2040
+ errorMessages.push((0, errors_1.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(inputFieldPath, string_constants_1.LIST, string_constants_1.OBJECT));
1937
2041
  return false;
1938
2042
  }
1939
2043
  }
1940
2044
  case graphql_1.Kind.LIST: {
1941
2045
  const listConfigurations = [];
1942
2046
  switch (fieldName) {
1943
- case string_constants_2.AND_UPPER: {
2047
+ case string_constants_1.AND_UPPER: {
1944
2048
  configuration.and = listConfigurations;
1945
2049
  break;
1946
2050
  }
1947
- case string_constants_2.OR_UPPER: {
2051
+ case string_constants_1.OR_UPPER: {
1948
2052
  configuration.or = listConfigurations;
1949
2053
  break;
1950
2054
  }
1951
2055
  default:
1952
2056
  // The field is guaranteed to be an IN or a NOT
1953
- errorMessages.push((0, errors_1.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(inputFieldPath, string_constants_2.OBJECT, string_constants_2.LIST));
2057
+ errorMessages.push((0, errors_1.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(inputFieldPath, string_constants_1.OBJECT, string_constants_1.LIST));
1954
2058
  return false;
1955
2059
  }
1956
2060
  const listLength = objectFieldNode.value.values.length;
@@ -1980,7 +2084,7 @@ class FederationFactory {
1980
2084
  return isValid;
1981
2085
  }
1982
2086
  default: {
1983
- const expectedTypeString = string_constants_1.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES.has(fieldName) ? string_constants_2.LIST : string_constants_2.OBJECT;
2087
+ const expectedTypeString = strings_1.SUBSCRIPTION_FILTER_LIST_INPUT_NAMES.has(fieldName) ? string_constants_1.LIST : string_constants_1.OBJECT;
1984
2088
  errorMessages.push((0, errors_1.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(inputFieldPath, expectedTypeString, (0, utils_6.kindToNodeType)(objectFieldNode.value.kind)));
1985
2089
  return false;
1986
2090
  }
@@ -1994,13 +2098,13 @@ class FederationFactory {
1994
2098
  const argumentNode = directiveNode.arguments[0];
1995
2099
  if (argumentNode.value.kind !== graphql_1.Kind.OBJECT) {
1996
2100
  this.errors.push((0, errors_1.invalidSubscriptionFilterDirectiveError)(fieldPath, [
1997
- (0, errors_1.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(string_constants_2.CONDITION, string_constants_2.OBJECT, (0, utils_6.kindToNodeType)(argumentNode.value.kind)),
2101
+ (0, errors_1.subscriptionFilterConditionInvalidInputFieldTypeErrorMessage)(string_constants_1.CONDITION, string_constants_1.OBJECT, (0, utils_6.kindToNodeType)(argumentNode.value.kind)),
1998
2102
  ]));
1999
2103
  return;
2000
2104
  }
2001
2105
  const condition = {};
2002
2106
  const errorMessages = [];
2003
- if (!this.validateSubscriptionFilterCondition(argumentNode.value, condition, objectData, 0, string_constants_2.CONDITION, directiveSubgraphName, errorMessages)) {
2107
+ if (!this.validateSubscriptionFilterCondition(argumentNode.value, condition, objectData, 0, string_constants_1.CONDITION, directiveSubgraphName, errorMessages)) {
2004
2108
  this.errors.push((0, errors_1.invalidSubscriptionFilterDirectiveError)(fieldPath, errorMessages));
2005
2109
  this.isMaxDepth = false;
2006
2110
  return;
@@ -2087,7 +2191,7 @@ class FederationFactory {
2087
2191
  for (const subgraph of this.internalSubgraphBySubgraphName.values()) {
2088
2192
  subgraphConfigBySubgraphName.set(subgraph.name, {
2089
2193
  configurationDataByTypeName: subgraph.configurationDataByTypeName,
2090
- directiveDefinitionByDirectiveName: subgraph.directiveDefinitionByDirectiveName,
2194
+ directiveDefinitionByName: subgraph.directiveDefinitionByName,
2091
2195
  isVersionTwo: subgraph.isVersionTwo,
2092
2196
  parentDefinitionDataByTypeName: subgraph.parentDefinitionDataByTypeName,
2093
2197
  schema: subgraph.schema,
@@ -2125,16 +2229,16 @@ class FederationFactory {
2125
2229
  continue;
2126
2230
  }
2127
2231
  if (!tagNames.isDisjointFrom(childTagData.tagNames)) {
2128
- (0, utils_6.getValueOrDefault)(childData.persistedDirectivesData.directivesByDirectiveName, string_constants_2.INACCESSIBLE, () => [
2129
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2232
+ (0, utils_6.getValueOrDefault)(childData.persistedDirectivesData.directivesByDirectiveName, string_constants_1.INACCESSIBLE, () => [
2233
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2130
2234
  ]);
2131
2235
  this.inaccessibleCoords.add(`${parentDefinitionData.name}.${childName}`);
2132
2236
  accessibleChildren -= 1;
2133
2237
  }
2134
2238
  }
2135
2239
  if (accessibleChildren < 1) {
2136
- parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_2.INACCESSIBLE, [
2137
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2240
+ parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_1.INACCESSIBLE, [
2241
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2138
2242
  ]);
2139
2243
  this.inaccessibleCoords.add(parentDefinitionData.name);
2140
2244
  }
@@ -2148,16 +2252,16 @@ class FederationFactory {
2148
2252
  }
2149
2253
  const childTagData = childTagDataByChildName.get(childName);
2150
2254
  if (!childTagData || tagNames.isDisjointFrom(childTagData.tagNames)) {
2151
- (0, utils_6.getValueOrDefault)(childData.persistedDirectivesData.directivesByDirectiveName, string_constants_2.INACCESSIBLE, () => [
2152
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2255
+ (0, utils_6.getValueOrDefault)(childData.persistedDirectivesData.directivesByDirectiveName, string_constants_1.INACCESSIBLE, () => [
2256
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2153
2257
  ]);
2154
2258
  this.inaccessibleCoords.add(`${parentDefinitionData.name}.${childName}`);
2155
2259
  accessibleChildren -= 1;
2156
2260
  }
2157
2261
  }
2158
2262
  if (accessibleChildren < 1) {
2159
- parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_2.INACCESSIBLE, [
2160
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2263
+ parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_1.INACCESSIBLE, [
2264
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2161
2265
  ]);
2162
2266
  this.inaccessibleCoords.add(parentDefinitionData.name);
2163
2267
  }
@@ -2166,17 +2270,17 @@ class FederationFactory {
2166
2270
  if (!this.isVersionTwo) {
2167
2271
  /* If all the subgraphs are version one, the @inaccessible directive won't be present.
2168
2272
  ** However, contracts require @inaccessible to exclude applicable tagged types. */
2169
- this.routerDefinitions.push(constants_1.INACCESSIBLE_DEFINITION);
2273
+ this.routerDefinitions.push(directive_definitions_1.INACCESSIBLE_DEFINITION);
2170
2274
  }
2171
2275
  if (contractTagOptions.tagNamesToExclude.size > 0) {
2172
2276
  for (const [parentTypeName, parentTagData] of this.parentTagDataByTypeName) {
2173
- const parentDefinitionData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, parentTypeName, string_constants_2.PARENT_DEFINITION_DATA);
2277
+ const parentDefinitionData = (0, utils_6.getOrThrowError)(this.parentDefinitionDataByTypeName, parentTypeName, string_constants_1.PARENT_DEFINITION_DATA);
2174
2278
  if ((0, utils_5.isNodeDataInaccessible)(parentDefinitionData)) {
2175
2279
  continue;
2176
2280
  }
2177
2281
  if (!contractTagOptions.tagNamesToExclude.isDisjointFrom(parentTagData.tagNames)) {
2178
- parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_2.INACCESSIBLE, [
2179
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2282
+ parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_1.INACCESSIBLE, [
2283
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2180
2284
  ]);
2181
2285
  this.inaccessibleCoords.add(parentTypeName);
2182
2286
  // If the parent is inaccessible, there is no need to assess further
@@ -2208,8 +2312,8 @@ class FederationFactory {
2208
2312
  continue;
2209
2313
  }
2210
2314
  if (!contractTagOptions.tagNamesToExclude.isDisjointFrom(childTagData.tagNames)) {
2211
- (0, utils_6.getValueOrDefault)(fieldData.persistedDirectivesData.directivesByDirectiveName, string_constants_2.INACCESSIBLE, () => [
2212
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2315
+ (0, utils_6.getValueOrDefault)(fieldData.persistedDirectivesData.directivesByDirectiveName, string_constants_1.INACCESSIBLE, () => [
2316
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2213
2317
  ]);
2214
2318
  this.inaccessibleCoords.add(fieldData.federatedCoords);
2215
2319
  accessibleFields -= 1;
@@ -2221,14 +2325,14 @@ class FederationFactory {
2221
2325
  continue;
2222
2326
  }
2223
2327
  if (!contractTagOptions.tagNamesToExclude.isDisjointFrom(argTagNames)) {
2224
- (0, utils_6.getValueOrDefault)(inputValueData.persistedDirectivesData.directivesByDirectiveName, string_constants_2.INACCESSIBLE, () => [(0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE)]);
2328
+ (0, utils_6.getValueOrDefault)(inputValueData.persistedDirectivesData.directivesByDirectiveName, string_constants_1.INACCESSIBLE, () => [(0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE)]);
2225
2329
  this.inaccessibleCoords.add(inputValueData.federatedCoords);
2226
2330
  }
2227
2331
  }
2228
2332
  }
2229
2333
  if (accessibleFields < 1) {
2230
- parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_2.INACCESSIBLE, [
2231
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2334
+ parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_1.INACCESSIBLE, [
2335
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2232
2336
  ]);
2233
2337
  this.inaccessibleCoords.add(parentTypeName);
2234
2338
  }
@@ -2243,8 +2347,8 @@ class FederationFactory {
2243
2347
  }
2244
2348
  const parentTagData = this.parentTagDataByTypeName.get(parentTypeName);
2245
2349
  if (!parentTagData) {
2246
- parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_2.INACCESSIBLE, [
2247
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2350
+ parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_1.INACCESSIBLE, [
2351
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2248
2352
  ]);
2249
2353
  this.inaccessibleCoords.add(parentTypeName);
2250
2354
  // If the parent is inaccessible, there is no need to assess further
@@ -2254,8 +2358,8 @@ class FederationFactory {
2254
2358
  continue;
2255
2359
  }
2256
2360
  if (parentTagData.childTagDataByChildName.size < 1) {
2257
- parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_2.INACCESSIBLE, [
2258
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2361
+ parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_1.INACCESSIBLE, [
2362
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2259
2363
  ]);
2260
2364
  this.inaccessibleCoords.add(parentTypeName);
2261
2365
  // If the parent is inaccessible, there is no need to assess further
@@ -2281,16 +2385,16 @@ class FederationFactory {
2281
2385
  }
2282
2386
  const childTagData = parentTagData.childTagDataByChildName.get(fieldName);
2283
2387
  if (!childTagData || contractTagOptions.tagNamesToInclude.isDisjointFrom(childTagData.tagNames)) {
2284
- (0, utils_6.getValueOrDefault)(fieldData.persistedDirectivesData.directivesByDirectiveName, string_constants_2.INACCESSIBLE, () => [
2285
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2388
+ (0, utils_6.getValueOrDefault)(fieldData.persistedDirectivesData.directivesByDirectiveName, string_constants_1.INACCESSIBLE, () => [
2389
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2286
2390
  ]);
2287
2391
  this.inaccessibleCoords.add(fieldData.federatedCoords);
2288
2392
  accessibleFields -= 1;
2289
2393
  }
2290
2394
  }
2291
2395
  if (accessibleFields < 1) {
2292
- parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_2.INACCESSIBLE, [
2293
- (0, utils_6.generateSimpleDirective)(string_constants_2.INACCESSIBLE),
2396
+ parentDefinitionData.persistedDirectivesData.directivesByDirectiveName.set(string_constants_1.INACCESSIBLE, [
2397
+ (0, utils_6.generateSimpleDirective)(string_constants_1.INACCESSIBLE),
2294
2398
  ]);
2295
2399
  this.inaccessibleCoords.add(parentTypeName);
2296
2400
  }
@@ -2322,7 +2426,7 @@ class FederationFactory {
2322
2426
  for (const subgraph of this.internalSubgraphBySubgraphName.values()) {
2323
2427
  subgraphConfigBySubgraphName.set(subgraph.name, {
2324
2428
  configurationDataByTypeName: subgraph.configurationDataByTypeName,
2325
- directiveDefinitionByDirectiveName: subgraph.directiveDefinitionByDirectiveName,
2429
+ directiveDefinitionByName: subgraph.directiveDefinitionByName,
2326
2430
  isVersionTwo: subgraph.isVersionTwo,
2327
2431
  parentDefinitionDataByTypeName: subgraph.parentDefinitionDataByTypeName,
2328
2432
  schema: subgraph.schema,
@@ -2375,7 +2479,10 @@ function initializeFederationFactory({ disableResolvabilityValidation, subgraphs
2375
2479
  const implementations = entityInterfaceData.concreteTypeNames.size;
2376
2480
  for (const [subgraphName, subgraphData] of entityInterfaceData.subgraphDataByTypeName) {
2377
2481
  const definedConcreteTypeNames = (0, utils_6.getValueOrDefault)(definedConcreteTypeNamesBySubgraphName, subgraphName, () => new Set());
2378
- (0, utils_6.addIterableValuesToSet)(subgraphData.concreteTypeNames, definedConcreteTypeNames);
2482
+ (0, utils_6.addIterableToSet)({
2483
+ source: subgraphData.concreteTypeNames,
2484
+ target: definedConcreteTypeNames,
2485
+ });
2379
2486
  if (!subgraphData.isInterfaceObject) {
2380
2487
  if (subgraphData.resolvable && subgraphData.concreteTypeNames.size !== implementations) {
2381
2488
  (0, utils_6.getValueOrDefault)(invalidEntityInterfacesByTypeName, typeName, () => new Array()).push({
@@ -2386,7 +2493,10 @@ function initializeFederationFactory({ disableResolvabilityValidation, subgraphs
2386
2493
  }
2387
2494
  continue;
2388
2495
  }
2389
- (0, utils_6.addIterableValuesToSet)(entityInterfaceData.concreteTypeNames, definedConcreteTypeNames);
2496
+ (0, utils_6.addIterableToSet)({
2497
+ source: entityInterfaceData.concreteTypeNames,
2498
+ target: definedConcreteTypeNames,
2499
+ });
2390
2500
  const { parentDefinitionDataByTypeName } = (0, utils_6.getOrThrowError)(result.internalSubgraphBySubgraphName, subgraphName, 'internalSubgraphBySubgraphName');
2391
2501
  const invalidTypeNames = [];
2392
2502
  for (const concreteTypeName of entityInterfaceData.concreteTypeNames) {