@graphql-tools/merge 8.4.1 → 8.4.2-alpha-20230508170453-7db2a594

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 (47) hide show
  1. package/cjs/typedefs-mergers/directives.js +9 -5
  2. package/cjs/typedefs-mergers/enum-values.js +2 -2
  3. package/cjs/typedefs-mergers/enum.js +2 -2
  4. package/cjs/typedefs-mergers/fields.js +2 -2
  5. package/cjs/typedefs-mergers/input-type.js +2 -2
  6. package/cjs/typedefs-mergers/interface.js +2 -2
  7. package/cjs/typedefs-mergers/merge-nodes.js +8 -8
  8. package/cjs/typedefs-mergers/merge-typedefs.js +16 -10
  9. package/cjs/typedefs-mergers/scalar.js +2 -2
  10. package/cjs/typedefs-mergers/schema-def.js +2 -2
  11. package/cjs/typedefs-mergers/type.js +2 -2
  12. package/cjs/typedefs-mergers/union.js +2 -2
  13. package/esm/typedefs-mergers/directives.js +9 -5
  14. package/esm/typedefs-mergers/enum-values.js +2 -2
  15. package/esm/typedefs-mergers/enum.js +2 -2
  16. package/esm/typedefs-mergers/fields.js +2 -2
  17. package/esm/typedefs-mergers/input-type.js +3 -3
  18. package/esm/typedefs-mergers/interface.js +2 -2
  19. package/esm/typedefs-mergers/merge-nodes.js +8 -8
  20. package/esm/typedefs-mergers/merge-typedefs.js +16 -10
  21. package/esm/typedefs-mergers/scalar.js +2 -2
  22. package/esm/typedefs-mergers/schema-def.js +3 -3
  23. package/esm/typedefs-mergers/type.js +2 -2
  24. package/esm/typedefs-mergers/union.js +2 -2
  25. package/package.json +1 -1
  26. package/typings/typedefs-mergers/directives.d.cts +1 -1
  27. package/typings/typedefs-mergers/directives.d.ts +1 -1
  28. package/typings/typedefs-mergers/enum-values.d.cts +2 -2
  29. package/typings/typedefs-mergers/enum-values.d.ts +2 -2
  30. package/typings/typedefs-mergers/enum.d.cts +2 -2
  31. package/typings/typedefs-mergers/enum.d.ts +2 -2
  32. package/typings/typedefs-mergers/fields.d.cts +2 -2
  33. package/typings/typedefs-mergers/fields.d.ts +2 -2
  34. package/typings/typedefs-mergers/input-type.d.cts +2 -2
  35. package/typings/typedefs-mergers/input-type.d.ts +2 -2
  36. package/typings/typedefs-mergers/interface.d.cts +2 -2
  37. package/typings/typedefs-mergers/interface.d.ts +2 -2
  38. package/typings/typedefs-mergers/merge-nodes.d.cts +2 -2
  39. package/typings/typedefs-mergers/merge-nodes.d.ts +2 -2
  40. package/typings/typedefs-mergers/scalar.d.cts +2 -2
  41. package/typings/typedefs-mergers/scalar.d.ts +2 -2
  42. package/typings/typedefs-mergers/schema-def.d.cts +2 -2
  43. package/typings/typedefs-mergers/schema-def.d.ts +2 -2
  44. package/typings/typedefs-mergers/type.d.cts +2 -2
  45. package/typings/typedefs-mergers/type.d.ts +2 -2
  46. package/typings/typedefs-mergers/union.d.cts +2 -2
  47. package/typings/typedefs-mergers/union.d.ts +2 -2
@@ -6,6 +6,10 @@ const utils_1 = require("@graphql-tools/utils");
6
6
  function directiveAlreadyExists(directivesArr, otherDirective) {
7
7
  return !!directivesArr.find(directive => directive.name.value === otherDirective.name.value);
8
8
  }
9
+ function isRepeatableDirective(directive, directives) {
10
+ var _a;
11
+ return !!((_a = directives === null || directives === void 0 ? void 0 : directives[directive.name.value]) === null || _a === void 0 ? void 0 : _a.repeatable);
12
+ }
9
13
  function nameAlreadyExists(name, namesArr) {
10
14
  return namesArr.some(({ value }) => value === name.value);
11
15
  }
@@ -34,11 +38,11 @@ function mergeArguments(a1, a2) {
34
38
  }
35
39
  return result;
36
40
  }
37
- function deduplicateDirectives(directives) {
41
+ function deduplicateDirectives(directives, definitions) {
38
42
  return directives
39
43
  .map((directive, i, all) => {
40
44
  const firstAt = all.findIndex(d => d.name.value === directive.name.value);
41
- if (firstAt !== i) {
45
+ if (firstAt !== i && !isRepeatableDirective(directive, definitions)) {
42
46
  const dup = all[firstAt];
43
47
  directive.arguments = mergeArguments(directive.arguments, dup.arguments);
44
48
  return null;
@@ -47,13 +51,13 @@ function deduplicateDirectives(directives) {
47
51
  })
48
52
  .filter(utils_1.isSome);
49
53
  }
50
- function mergeDirectives(d1 = [], d2 = [], config) {
54
+ function mergeDirectives(d1 = [], d2 = [], config, directives) {
51
55
  const reverseOrder = config && config.reverseDirectives;
52
56
  const asNext = reverseOrder ? d1 : d2;
53
57
  const asFirst = reverseOrder ? d2 : d1;
54
- const result = deduplicateDirectives([...asNext]);
58
+ const result = deduplicateDirectives([...asNext], directives);
55
59
  for (const directive of asFirst) {
56
- if (directiveAlreadyExists(result, directive)) {
60
+ if (directiveAlreadyExists(result, directive) && !isRepeatableDirective(directive, directives)) {
57
61
  const existingDirectiveIndex = result.findIndex(d => d.name.value === directive.name.value);
58
62
  const existingDirective = result[existingDirectiveIndex];
59
63
  result[existingDirectiveIndex].arguments = mergeArguments(directive.arguments || [], existingDirective.arguments || []);
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mergeEnumValues = void 0;
4
4
  const directives_js_1 = require("./directives.js");
5
5
  const utils_1 = require("@graphql-tools/utils");
6
- function mergeEnumValues(first, second, config) {
6
+ function mergeEnumValues(first, second, config, directives) {
7
7
  if (config === null || config === void 0 ? void 0 : config.consistentEnumMerge) {
8
8
  const reversed = [];
9
9
  if (first) {
@@ -24,7 +24,7 @@ function mergeEnumValues(first, second, config) {
24
24
  if (enumValueMap.has(enumValue)) {
25
25
  const firstValue = enumValueMap.get(enumValue);
26
26
  firstValue.description = secondValue.description || firstValue.description;
27
- firstValue.directives = (0, directives_js_1.mergeDirectives)(secondValue.directives, firstValue.directives);
27
+ firstValue.directives = (0, directives_js_1.mergeDirectives)(secondValue.directives, firstValue.directives, directives);
28
28
  }
29
29
  else {
30
30
  enumValueMap.set(enumValue, secondValue);
@@ -4,7 +4,7 @@ exports.mergeEnum = void 0;
4
4
  const graphql_1 = require("graphql");
5
5
  const directives_js_1 = require("./directives.js");
6
6
  const enum_values_js_1 = require("./enum-values.js");
7
- function mergeEnum(e1, e2, config) {
7
+ function mergeEnum(e1, e2, config, directives) {
8
8
  if (e2) {
9
9
  return {
10
10
  name: e1.name,
@@ -13,7 +13,7 @@ function mergeEnum(e1, e2, config) {
13
13
  ? 'EnumTypeDefinition'
14
14
  : 'EnumTypeExtension',
15
15
  loc: e1.loc,
16
- directives: (0, directives_js_1.mergeDirectives)(e1.directives, e2.directives, config),
16
+ directives: (0, directives_js_1.mergeDirectives)(e1.directives, e2.directives, config, directives),
17
17
  values: (0, enum_values_js_1.mergeEnumValues)(e1.values, e2.values, config),
18
18
  };
19
19
  }
@@ -9,7 +9,7 @@ function fieldAlreadyExists(fieldsArr, otherField) {
9
9
  const resultIndex = fieldsArr.findIndex(field => field.name.value === otherField.name.value);
10
10
  return [resultIndex > -1 ? fieldsArr[resultIndex] : null, resultIndex];
11
11
  }
12
- function mergeFields(type, f1, f2, config) {
12
+ function mergeFields(type, f1, f2, config, directives) {
13
13
  const result = [];
14
14
  if (f2 != null) {
15
15
  result.push(...f2);
@@ -21,7 +21,7 @@ function mergeFields(type, f1, f2, config) {
21
21
  const newField = ((config === null || config === void 0 ? void 0 : config.onFieldTypeConflict) && config.onFieldTypeConflict(existing, field, type, config === null || config === void 0 ? void 0 : config.throwOnConflict)) ||
22
22
  preventConflicts(type, existing, field, config === null || config === void 0 ? void 0 : config.throwOnConflict);
23
23
  newField.arguments = (0, arguments_js_1.mergeArguments)(field['arguments'] || [], existing['arguments'] || [], config);
24
- newField.directives = (0, directives_js_1.mergeDirectives)(field.directives, existing.directives, config);
24
+ newField.directives = (0, directives_js_1.mergeDirectives)(field.directives, existing.directives, config, directives);
25
25
  newField.description = field.description || existing.description;
26
26
  result[existingIndex] = newField;
27
27
  }
@@ -4,7 +4,7 @@ exports.mergeInputType = void 0;
4
4
  const graphql_1 = require("graphql");
5
5
  const fields_js_1 = require("./fields.js");
6
6
  const directives_js_1 = require("./directives.js");
7
- function mergeInputType(node, existingNode, config) {
7
+ function mergeInputType(node, existingNode, config, directives) {
8
8
  if (existingNode) {
9
9
  try {
10
10
  return {
@@ -17,7 +17,7 @@ function mergeInputType(node, existingNode, config) {
17
17
  : 'InputObjectTypeExtension',
18
18
  loc: node.loc,
19
19
  fields: (0, fields_js_1.mergeFields)(node, node.fields, existingNode.fields, config),
20
- directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config),
20
+ directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config, directives),
21
21
  };
22
22
  }
23
23
  catch (e) {
@@ -5,7 +5,7 @@ const graphql_1 = require("graphql");
5
5
  const fields_js_1 = require("./fields.js");
6
6
  const directives_js_1 = require("./directives.js");
7
7
  const merge_named_type_array_js_1 = require("./merge-named-type-array.js");
8
- function mergeInterface(node, existingNode, config) {
8
+ function mergeInterface(node, existingNode, config, directives) {
9
9
  if (existingNode) {
10
10
  try {
11
11
  return {
@@ -18,7 +18,7 @@ function mergeInterface(node, existingNode, config) {
18
18
  : 'InterfaceTypeExtension',
19
19
  loc: node.loc,
20
20
  fields: (0, fields_js_1.mergeFields)(node, node.fields, existingNode.fields, config),
21
- directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config),
21
+ directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config, directives),
22
22
  interfaces: node['interfaces']
23
23
  ? (0, merge_named_type_array_js_1.mergeNamedTypeArray)(node['interfaces'], existingNode['interfaces'], config)
24
24
  : undefined,
@@ -16,9 +16,9 @@ function isNamedDefinitionNode(definitionNode) {
16
16
  return 'name' in definitionNode;
17
17
  }
18
18
  exports.isNamedDefinitionNode = isNamedDefinitionNode;
19
- function mergeGraphQLNodes(nodes, config) {
19
+ function mergeGraphQLNodes(nodes, config, directives = {}) {
20
20
  var _a, _b, _c;
21
- const mergedResultMap = {};
21
+ const mergedResultMap = directives;
22
22
  for (const nodeDefinition of nodes) {
23
23
  if (isNamedDefinitionNode(nodeDefinition)) {
24
24
  const name = (_a = nodeDefinition.name) === null || _a === void 0 ? void 0 : _a.value;
@@ -35,27 +35,27 @@ function mergeGraphQLNodes(nodes, config) {
35
35
  switch (nodeDefinition.kind) {
36
36
  case graphql_1.Kind.OBJECT_TYPE_DEFINITION:
37
37
  case graphql_1.Kind.OBJECT_TYPE_EXTENSION:
38
- mergedResultMap[name] = (0, type_js_1.mergeType)(nodeDefinition, mergedResultMap[name], config);
38
+ mergedResultMap[name] = (0, type_js_1.mergeType)(nodeDefinition, mergedResultMap[name], config, directives);
39
39
  break;
40
40
  case graphql_1.Kind.ENUM_TYPE_DEFINITION:
41
41
  case graphql_1.Kind.ENUM_TYPE_EXTENSION:
42
- mergedResultMap[name] = (0, enum_js_1.mergeEnum)(nodeDefinition, mergedResultMap[name], config);
42
+ mergedResultMap[name] = (0, enum_js_1.mergeEnum)(nodeDefinition, mergedResultMap[name], config, directives);
43
43
  break;
44
44
  case graphql_1.Kind.UNION_TYPE_DEFINITION:
45
45
  case graphql_1.Kind.UNION_TYPE_EXTENSION:
46
- mergedResultMap[name] = (0, union_js_1.mergeUnion)(nodeDefinition, mergedResultMap[name], config);
46
+ mergedResultMap[name] = (0, union_js_1.mergeUnion)(nodeDefinition, mergedResultMap[name], config, directives);
47
47
  break;
48
48
  case graphql_1.Kind.SCALAR_TYPE_DEFINITION:
49
49
  case graphql_1.Kind.SCALAR_TYPE_EXTENSION:
50
- mergedResultMap[name] = (0, scalar_js_1.mergeScalar)(nodeDefinition, mergedResultMap[name], config);
50
+ mergedResultMap[name] = (0, scalar_js_1.mergeScalar)(nodeDefinition, mergedResultMap[name], config, directives);
51
51
  break;
52
52
  case graphql_1.Kind.INPUT_OBJECT_TYPE_DEFINITION:
53
53
  case graphql_1.Kind.INPUT_OBJECT_TYPE_EXTENSION:
54
- mergedResultMap[name] = (0, input_type_js_1.mergeInputType)(nodeDefinition, mergedResultMap[name], config);
54
+ mergedResultMap[name] = (0, input_type_js_1.mergeInputType)(nodeDefinition, mergedResultMap[name], config, directives);
55
55
  break;
56
56
  case graphql_1.Kind.INTERFACE_TYPE_DEFINITION:
57
57
  case graphql_1.Kind.INTERFACE_TYPE_EXTENSION:
58
- mergedResultMap[name] = (0, interface_js_1.mergeInterface)(nodeDefinition, mergedResultMap[name], config);
58
+ mergedResultMap[name] = (0, interface_js_1.mergeInterface)(nodeDefinition, mergedResultMap[name], config, directives);
59
59
  break;
60
60
  case graphql_1.Kind.DIRECTIVE_DEFINITION:
61
61
  mergedResultMap[name] = (0, directives_js_1.mergeDirective)(nodeDefinition, mergedResultMap[name]);
@@ -29,42 +29,48 @@ function mergeTypeDefs(typeSource, config) {
29
29
  return result;
30
30
  }
31
31
  exports.mergeTypeDefs = mergeTypeDefs;
32
- function visitTypeSources(typeSource, options, allNodes = [], visitedTypeSources = new Set()) {
32
+ function visitTypeSources(typeSource, options, allDirectives = [], allNodes = [], visitedTypeSources = new Set()) {
33
33
  if (typeSource && !visitedTypeSources.has(typeSource)) {
34
34
  visitedTypeSources.add(typeSource);
35
35
  if (typeof typeSource === 'function') {
36
- visitTypeSources(typeSource(), options, allNodes, visitedTypeSources);
36
+ visitTypeSources(typeSource(), options, allDirectives, allNodes, visitedTypeSources);
37
37
  }
38
38
  else if (Array.isArray(typeSource)) {
39
39
  for (const type of typeSource) {
40
- visitTypeSources(type, options, allNodes, visitedTypeSources);
40
+ visitTypeSources(type, options, allDirectives, allNodes, visitedTypeSources);
41
41
  }
42
42
  }
43
43
  else if ((0, graphql_1.isSchema)(typeSource)) {
44
44
  const documentNode = (0, utils_1.getDocumentNodeFromSchema)(typeSource, options);
45
- visitTypeSources(documentNode.definitions, options, allNodes, visitedTypeSources);
45
+ visitTypeSources(documentNode.definitions, options, allDirectives, allNodes, visitedTypeSources);
46
46
  }
47
47
  else if ((0, utils_js_1.isStringTypes)(typeSource) || (0, utils_js_1.isSourceTypes)(typeSource)) {
48
48
  const documentNode = (0, graphql_1.parse)(typeSource, options);
49
- visitTypeSources(documentNode.definitions, options, allNodes, visitedTypeSources);
49
+ visitTypeSources(documentNode.definitions, options, allDirectives, allNodes, visitedTypeSources);
50
50
  }
51
51
  else if (typeof typeSource === 'object' && (0, graphql_1.isDefinitionNode)(typeSource)) {
52
- allNodes.push(typeSource);
52
+ if (typeSource.kind === graphql_1.Kind.DIRECTIVE_DEFINITION) {
53
+ allDirectives.push(typeSource);
54
+ }
55
+ else {
56
+ allNodes.push(typeSource);
57
+ }
53
58
  }
54
59
  else if ((0, utils_1.isDocumentNode)(typeSource)) {
55
- visitTypeSources(typeSource.definitions, options, allNodes, visitedTypeSources);
60
+ visitTypeSources(typeSource.definitions, options, allDirectives, allNodes, visitedTypeSources);
56
61
  }
57
62
  else {
58
63
  throw new Error(`typeDefs must contain only strings, documents, schemas, or functions, got ${typeof typeSource}`);
59
64
  }
60
65
  }
61
- return allNodes;
66
+ return { allDirectives, allNodes };
62
67
  }
63
68
  function mergeGraphQLTypes(typeSource, config) {
64
69
  var _a, _b, _c;
65
70
  (0, utils_1.resetComments)();
66
- const allNodes = visitTypeSources(typeSource, config);
67
- const mergedNodes = (0, merge_nodes_js_1.mergeGraphQLNodes)(allNodes, config);
71
+ const { allDirectives, allNodes } = visitTypeSources(typeSource, config);
72
+ const mergedDirectives = (0, merge_nodes_js_1.mergeGraphQLNodes)(allDirectives, config);
73
+ const mergedNodes = (0, merge_nodes_js_1.mergeGraphQLNodes)(allNodes, config, mergedDirectives);
68
74
  if (config === null || config === void 0 ? void 0 : config.useSchemaDefinition) {
69
75
  // XXX: right now we don't handle multiple schema definitions
70
76
  const schemaDef = mergedNodes[merge_nodes_js_1.schemaDefSymbol] || {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mergeScalar = void 0;
4
4
  const graphql_1 = require("graphql");
5
5
  const directives_js_1 = require("./directives.js");
6
- function mergeScalar(node, existingNode, config) {
6
+ function mergeScalar(node, existingNode, config, directives) {
7
7
  if (existingNode) {
8
8
  return {
9
9
  name: node.name,
@@ -14,7 +14,7 @@ function mergeScalar(node, existingNode, config) {
14
14
  ? 'ScalarTypeDefinition'
15
15
  : 'ScalarTypeExtension',
16
16
  loc: node.loc,
17
- directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config),
17
+ directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config, directives),
18
18
  };
19
19
  }
20
20
  return (config === null || config === void 0 ? void 0 : config.convertExtensions)
@@ -18,14 +18,14 @@ function mergeOperationTypes(opNodeList = [], existingOpNodeList = []) {
18
18
  }
19
19
  return finalOpNodeList;
20
20
  }
21
- function mergeSchemaDefs(node, existingNode, config) {
21
+ function mergeSchemaDefs(node, existingNode, config, directives) {
22
22
  if (existingNode) {
23
23
  return {
24
24
  kind: node.kind === graphql_1.Kind.SCHEMA_DEFINITION || existingNode.kind === graphql_1.Kind.SCHEMA_DEFINITION
25
25
  ? graphql_1.Kind.SCHEMA_DEFINITION
26
26
  : graphql_1.Kind.SCHEMA_EXTENSION,
27
27
  description: node['description'] || existingNode['description'],
28
- directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config),
28
+ directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config, directives),
29
29
  operationTypes: mergeOperationTypes(node.operationTypes, existingNode.operationTypes),
30
30
  };
31
31
  }
@@ -5,7 +5,7 @@ const graphql_1 = require("graphql");
5
5
  const fields_js_1 = require("./fields.js");
6
6
  const directives_js_1 = require("./directives.js");
7
7
  const merge_named_type_array_js_1 = require("./merge-named-type-array.js");
8
- function mergeType(node, existingNode, config) {
8
+ function mergeType(node, existingNode, config, directives) {
9
9
  if (existingNode) {
10
10
  try {
11
11
  return {
@@ -18,7 +18,7 @@ function mergeType(node, existingNode, config) {
18
18
  : 'ObjectTypeExtension',
19
19
  loc: node.loc,
20
20
  fields: (0, fields_js_1.mergeFields)(node, node.fields, existingNode.fields, config),
21
- directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config),
21
+ directives: (0, directives_js_1.mergeDirectives)(node.directives, existingNode.directives, config, directives),
22
22
  interfaces: (0, merge_named_type_array_js_1.mergeNamedTypeArray)(node.interfaces, existingNode.interfaces, config),
23
23
  };
24
24
  }
@@ -4,13 +4,13 @@ exports.mergeUnion = void 0;
4
4
  const graphql_1 = require("graphql");
5
5
  const directives_js_1 = require("./directives.js");
6
6
  const merge_named_type_array_js_1 = require("./merge-named-type-array.js");
7
- function mergeUnion(first, second, config) {
7
+ function mergeUnion(first, second, config, directives) {
8
8
  if (second) {
9
9
  return {
10
10
  name: first.name,
11
11
  description: first['description'] || second['description'],
12
12
  // ConstXNode has been introduced in v16 but it is not compatible with XNode so we do `as any` for backwards compatibility
13
- directives: (0, directives_js_1.mergeDirectives)(first.directives, second.directives, config),
13
+ directives: (0, directives_js_1.mergeDirectives)(first.directives, second.directives, config, directives),
14
14
  kind: (config === null || config === void 0 ? void 0 : config.convertExtensions) || first.kind === 'UnionTypeDefinition' || second.kind === 'UnionTypeDefinition'
15
15
  ? graphql_1.Kind.UNION_TYPE_DEFINITION
16
16
  : graphql_1.Kind.UNION_TYPE_EXTENSION,
@@ -3,6 +3,10 @@ import { isSome } from '@graphql-tools/utils';
3
3
  function directiveAlreadyExists(directivesArr, otherDirective) {
4
4
  return !!directivesArr.find(directive => directive.name.value === otherDirective.name.value);
5
5
  }
6
+ function isRepeatableDirective(directive, directives) {
7
+ var _a;
8
+ return !!((_a = directives === null || directives === void 0 ? void 0 : directives[directive.name.value]) === null || _a === void 0 ? void 0 : _a.repeatable);
9
+ }
6
10
  function nameAlreadyExists(name, namesArr) {
7
11
  return namesArr.some(({ value }) => value === name.value);
8
12
  }
@@ -31,11 +35,11 @@ function mergeArguments(a1, a2) {
31
35
  }
32
36
  return result;
33
37
  }
34
- function deduplicateDirectives(directives) {
38
+ function deduplicateDirectives(directives, definitions) {
35
39
  return directives
36
40
  .map((directive, i, all) => {
37
41
  const firstAt = all.findIndex(d => d.name.value === directive.name.value);
38
- if (firstAt !== i) {
42
+ if (firstAt !== i && !isRepeatableDirective(directive, definitions)) {
39
43
  const dup = all[firstAt];
40
44
  directive.arguments = mergeArguments(directive.arguments, dup.arguments);
41
45
  return null;
@@ -44,13 +48,13 @@ function deduplicateDirectives(directives) {
44
48
  })
45
49
  .filter(isSome);
46
50
  }
47
- export function mergeDirectives(d1 = [], d2 = [], config) {
51
+ export function mergeDirectives(d1 = [], d2 = [], config, directives) {
48
52
  const reverseOrder = config && config.reverseDirectives;
49
53
  const asNext = reverseOrder ? d1 : d2;
50
54
  const asFirst = reverseOrder ? d2 : d1;
51
- const result = deduplicateDirectives([...asNext]);
55
+ const result = deduplicateDirectives([...asNext], directives);
52
56
  for (const directive of asFirst) {
53
- if (directiveAlreadyExists(result, directive)) {
57
+ if (directiveAlreadyExists(result, directive) && !isRepeatableDirective(directive, directives)) {
54
58
  const existingDirectiveIndex = result.findIndex(d => d.name.value === directive.name.value);
55
59
  const existingDirective = result[existingDirectiveIndex];
56
60
  result[existingDirectiveIndex].arguments = mergeArguments(directive.arguments || [], existingDirective.arguments || []);
@@ -1,6 +1,6 @@
1
1
  import { mergeDirectives } from './directives.js';
2
2
  import { compareNodes } from '@graphql-tools/utils';
3
- export function mergeEnumValues(first, second, config) {
3
+ export function mergeEnumValues(first, second, config, directives) {
4
4
  if (config === null || config === void 0 ? void 0 : config.consistentEnumMerge) {
5
5
  const reversed = [];
6
6
  if (first) {
@@ -21,7 +21,7 @@ export function mergeEnumValues(first, second, config) {
21
21
  if (enumValueMap.has(enumValue)) {
22
22
  const firstValue = enumValueMap.get(enumValue);
23
23
  firstValue.description = secondValue.description || firstValue.description;
24
- firstValue.directives = mergeDirectives(secondValue.directives, firstValue.directives);
24
+ firstValue.directives = mergeDirectives(secondValue.directives, firstValue.directives, directives);
25
25
  }
26
26
  else {
27
27
  enumValueMap.set(enumValue, secondValue);
@@ -1,7 +1,7 @@
1
1
  import { Kind } from 'graphql';
2
2
  import { mergeDirectives } from './directives.js';
3
3
  import { mergeEnumValues } from './enum-values.js';
4
- export function mergeEnum(e1, e2, config) {
4
+ export function mergeEnum(e1, e2, config, directives) {
5
5
  if (e2) {
6
6
  return {
7
7
  name: e1.name,
@@ -10,7 +10,7 @@ export function mergeEnum(e1, e2, config) {
10
10
  ? 'EnumTypeDefinition'
11
11
  : 'EnumTypeExtension',
12
12
  loc: e1.loc,
13
- directives: mergeDirectives(e1.directives, e2.directives, config),
13
+ directives: mergeDirectives(e1.directives, e2.directives, config, directives),
14
14
  values: mergeEnumValues(e1.values, e2.values, config),
15
15
  };
16
16
  }
@@ -6,7 +6,7 @@ function fieldAlreadyExists(fieldsArr, otherField) {
6
6
  const resultIndex = fieldsArr.findIndex(field => field.name.value === otherField.name.value);
7
7
  return [resultIndex > -1 ? fieldsArr[resultIndex] : null, resultIndex];
8
8
  }
9
- export function mergeFields(type, f1, f2, config) {
9
+ export function mergeFields(type, f1, f2, config, directives) {
10
10
  const result = [];
11
11
  if (f2 != null) {
12
12
  result.push(...f2);
@@ -18,7 +18,7 @@ export function mergeFields(type, f1, f2, config) {
18
18
  const newField = ((config === null || config === void 0 ? void 0 : config.onFieldTypeConflict) && config.onFieldTypeConflict(existing, field, type, config === null || config === void 0 ? void 0 : config.throwOnConflict)) ||
19
19
  preventConflicts(type, existing, field, config === null || config === void 0 ? void 0 : config.throwOnConflict);
20
20
  newField.arguments = mergeArguments(field['arguments'] || [], existing['arguments'] || [], config);
21
- newField.directives = mergeDirectives(field.directives, existing.directives, config);
21
+ newField.directives = mergeDirectives(field.directives, existing.directives, config, directives);
22
22
  newField.description = field.description || existing.description;
23
23
  result[existingIndex] = newField;
24
24
  }
@@ -1,7 +1,7 @@
1
- import { Kind } from 'graphql';
1
+ import { Kind, } from 'graphql';
2
2
  import { mergeFields } from './fields.js';
3
3
  import { mergeDirectives } from './directives.js';
4
- export function mergeInputType(node, existingNode, config) {
4
+ export function mergeInputType(node, existingNode, config, directives) {
5
5
  if (existingNode) {
6
6
  try {
7
7
  return {
@@ -14,7 +14,7 @@ export function mergeInputType(node, existingNode, config) {
14
14
  : 'InputObjectTypeExtension',
15
15
  loc: node.loc,
16
16
  fields: mergeFields(node, node.fields, existingNode.fields, config),
17
- directives: mergeDirectives(node.directives, existingNode.directives, config),
17
+ directives: mergeDirectives(node.directives, existingNode.directives, config, directives),
18
18
  };
19
19
  }
20
20
  catch (e) {
@@ -2,7 +2,7 @@ import { Kind } from 'graphql';
2
2
  import { mergeFields } from './fields.js';
3
3
  import { mergeDirectives } from './directives.js';
4
4
  import { mergeNamedTypeArray } from './merge-named-type-array.js';
5
- export function mergeInterface(node, existingNode, config) {
5
+ export function mergeInterface(node, existingNode, config, directives) {
6
6
  if (existingNode) {
7
7
  try {
8
8
  return {
@@ -15,7 +15,7 @@ export function mergeInterface(node, existingNode, config) {
15
15
  : 'InterfaceTypeExtension',
16
16
  loc: node.loc,
17
17
  fields: mergeFields(node, node.fields, existingNode.fields, config),
18
- directives: mergeDirectives(node.directives, existingNode.directives, config),
18
+ directives: mergeDirectives(node.directives, existingNode.directives, config, directives),
19
19
  interfaces: node['interfaces']
20
20
  ? mergeNamedTypeArray(node['interfaces'], existingNode['interfaces'], config)
21
21
  : undefined,
@@ -12,9 +12,9 @@ export const schemaDefSymbol = 'SCHEMA_DEF_SYMBOL';
12
12
  export function isNamedDefinitionNode(definitionNode) {
13
13
  return 'name' in definitionNode;
14
14
  }
15
- export function mergeGraphQLNodes(nodes, config) {
15
+ export function mergeGraphQLNodes(nodes, config, directives = {}) {
16
16
  var _a, _b, _c;
17
- const mergedResultMap = {};
17
+ const mergedResultMap = directives;
18
18
  for (const nodeDefinition of nodes) {
19
19
  if (isNamedDefinitionNode(nodeDefinition)) {
20
20
  const name = (_a = nodeDefinition.name) === null || _a === void 0 ? void 0 : _a.value;
@@ -31,27 +31,27 @@ export function mergeGraphQLNodes(nodes, config) {
31
31
  switch (nodeDefinition.kind) {
32
32
  case Kind.OBJECT_TYPE_DEFINITION:
33
33
  case Kind.OBJECT_TYPE_EXTENSION:
34
- mergedResultMap[name] = mergeType(nodeDefinition, mergedResultMap[name], config);
34
+ mergedResultMap[name] = mergeType(nodeDefinition, mergedResultMap[name], config, directives);
35
35
  break;
36
36
  case Kind.ENUM_TYPE_DEFINITION:
37
37
  case Kind.ENUM_TYPE_EXTENSION:
38
- mergedResultMap[name] = mergeEnum(nodeDefinition, mergedResultMap[name], config);
38
+ mergedResultMap[name] = mergeEnum(nodeDefinition, mergedResultMap[name], config, directives);
39
39
  break;
40
40
  case Kind.UNION_TYPE_DEFINITION:
41
41
  case Kind.UNION_TYPE_EXTENSION:
42
- mergedResultMap[name] = mergeUnion(nodeDefinition, mergedResultMap[name], config);
42
+ mergedResultMap[name] = mergeUnion(nodeDefinition, mergedResultMap[name], config, directives);
43
43
  break;
44
44
  case Kind.SCALAR_TYPE_DEFINITION:
45
45
  case Kind.SCALAR_TYPE_EXTENSION:
46
- mergedResultMap[name] = mergeScalar(nodeDefinition, mergedResultMap[name], config);
46
+ mergedResultMap[name] = mergeScalar(nodeDefinition, mergedResultMap[name], config, directives);
47
47
  break;
48
48
  case Kind.INPUT_OBJECT_TYPE_DEFINITION:
49
49
  case Kind.INPUT_OBJECT_TYPE_EXTENSION:
50
- mergedResultMap[name] = mergeInputType(nodeDefinition, mergedResultMap[name], config);
50
+ mergedResultMap[name] = mergeInputType(nodeDefinition, mergedResultMap[name], config, directives);
51
51
  break;
52
52
  case Kind.INTERFACE_TYPE_DEFINITION:
53
53
  case Kind.INTERFACE_TYPE_EXTENSION:
54
- mergedResultMap[name] = mergeInterface(nodeDefinition, mergedResultMap[name], config);
54
+ mergedResultMap[name] = mergeInterface(nodeDefinition, mergedResultMap[name], config, directives);
55
55
  break;
56
56
  case Kind.DIRECTIVE_DEFINITION:
57
57
  mergedResultMap[name] = mergeDirective(nodeDefinition, mergedResultMap[name]);
@@ -25,42 +25,48 @@ export function mergeTypeDefs(typeSource, config) {
25
25
  resetComments();
26
26
  return result;
27
27
  }
28
- function visitTypeSources(typeSource, options, allNodes = [], visitedTypeSources = new Set()) {
28
+ function visitTypeSources(typeSource, options, allDirectives = [], allNodes = [], visitedTypeSources = new Set()) {
29
29
  if (typeSource && !visitedTypeSources.has(typeSource)) {
30
30
  visitedTypeSources.add(typeSource);
31
31
  if (typeof typeSource === 'function') {
32
- visitTypeSources(typeSource(), options, allNodes, visitedTypeSources);
32
+ visitTypeSources(typeSource(), options, allDirectives, allNodes, visitedTypeSources);
33
33
  }
34
34
  else if (Array.isArray(typeSource)) {
35
35
  for (const type of typeSource) {
36
- visitTypeSources(type, options, allNodes, visitedTypeSources);
36
+ visitTypeSources(type, options, allDirectives, allNodes, visitedTypeSources);
37
37
  }
38
38
  }
39
39
  else if (isSchema(typeSource)) {
40
40
  const documentNode = getDocumentNodeFromSchema(typeSource, options);
41
- visitTypeSources(documentNode.definitions, options, allNodes, visitedTypeSources);
41
+ visitTypeSources(documentNode.definitions, options, allDirectives, allNodes, visitedTypeSources);
42
42
  }
43
43
  else if (isStringTypes(typeSource) || isSourceTypes(typeSource)) {
44
44
  const documentNode = parse(typeSource, options);
45
- visitTypeSources(documentNode.definitions, options, allNodes, visitedTypeSources);
45
+ visitTypeSources(documentNode.definitions, options, allDirectives, allNodes, visitedTypeSources);
46
46
  }
47
47
  else if (typeof typeSource === 'object' && isDefinitionNode(typeSource)) {
48
- allNodes.push(typeSource);
48
+ if (typeSource.kind === Kind.DIRECTIVE_DEFINITION) {
49
+ allDirectives.push(typeSource);
50
+ }
51
+ else {
52
+ allNodes.push(typeSource);
53
+ }
49
54
  }
50
55
  else if (isDocumentNode(typeSource)) {
51
- visitTypeSources(typeSource.definitions, options, allNodes, visitedTypeSources);
56
+ visitTypeSources(typeSource.definitions, options, allDirectives, allNodes, visitedTypeSources);
52
57
  }
53
58
  else {
54
59
  throw new Error(`typeDefs must contain only strings, documents, schemas, or functions, got ${typeof typeSource}`);
55
60
  }
56
61
  }
57
- return allNodes;
62
+ return { allDirectives, allNodes };
58
63
  }
59
64
  export function mergeGraphQLTypes(typeSource, config) {
60
65
  var _a, _b, _c;
61
66
  resetComments();
62
- const allNodes = visitTypeSources(typeSource, config);
63
- const mergedNodes = mergeGraphQLNodes(allNodes, config);
67
+ const { allDirectives, allNodes } = visitTypeSources(typeSource, config);
68
+ const mergedDirectives = mergeGraphQLNodes(allDirectives, config);
69
+ const mergedNodes = mergeGraphQLNodes(allNodes, config, mergedDirectives);
64
70
  if (config === null || config === void 0 ? void 0 : config.useSchemaDefinition) {
65
71
  // XXX: right now we don't handle multiple schema definitions
66
72
  const schemaDef = mergedNodes[schemaDefSymbol] || {
@@ -1,6 +1,6 @@
1
1
  import { Kind } from 'graphql';
2
2
  import { mergeDirectives } from './directives.js';
3
- export function mergeScalar(node, existingNode, config) {
3
+ export function mergeScalar(node, existingNode, config, directives) {
4
4
  if (existingNode) {
5
5
  return {
6
6
  name: node.name,
@@ -11,7 +11,7 @@ export function mergeScalar(node, existingNode, config) {
11
11
  ? 'ScalarTypeDefinition'
12
12
  : 'ScalarTypeExtension',
13
13
  loc: node.loc,
14
- directives: mergeDirectives(node.directives, existingNode.directives, config),
14
+ directives: mergeDirectives(node.directives, existingNode.directives, config, directives),
15
15
  };
16
16
  }
17
17
  return (config === null || config === void 0 ? void 0 : config.convertExtensions)
@@ -1,4 +1,4 @@
1
- import { Kind } from 'graphql';
1
+ import { Kind, } from 'graphql';
2
2
  import { mergeDirectives } from './directives.js';
3
3
  export const DEFAULT_OPERATION_TYPE_NAME_MAP = {
4
4
  query: 'Query',
@@ -15,14 +15,14 @@ function mergeOperationTypes(opNodeList = [], existingOpNodeList = []) {
15
15
  }
16
16
  return finalOpNodeList;
17
17
  }
18
- export function mergeSchemaDefs(node, existingNode, config) {
18
+ export function mergeSchemaDefs(node, existingNode, config, directives) {
19
19
  if (existingNode) {
20
20
  return {
21
21
  kind: node.kind === Kind.SCHEMA_DEFINITION || existingNode.kind === Kind.SCHEMA_DEFINITION
22
22
  ? Kind.SCHEMA_DEFINITION
23
23
  : Kind.SCHEMA_EXTENSION,
24
24
  description: node['description'] || existingNode['description'],
25
- directives: mergeDirectives(node.directives, existingNode.directives, config),
25
+ directives: mergeDirectives(node.directives, existingNode.directives, config, directives),
26
26
  operationTypes: mergeOperationTypes(node.operationTypes, existingNode.operationTypes),
27
27
  };
28
28
  }
@@ -2,7 +2,7 @@ import { Kind } from 'graphql';
2
2
  import { mergeFields } from './fields.js';
3
3
  import { mergeDirectives } from './directives.js';
4
4
  import { mergeNamedTypeArray } from './merge-named-type-array.js';
5
- export function mergeType(node, existingNode, config) {
5
+ export function mergeType(node, existingNode, config, directives) {
6
6
  if (existingNode) {
7
7
  try {
8
8
  return {
@@ -15,7 +15,7 @@ export function mergeType(node, existingNode, config) {
15
15
  : 'ObjectTypeExtension',
16
16
  loc: node.loc,
17
17
  fields: mergeFields(node, node.fields, existingNode.fields, config),
18
- directives: mergeDirectives(node.directives, existingNode.directives, config),
18
+ directives: mergeDirectives(node.directives, existingNode.directives, config, directives),
19
19
  interfaces: mergeNamedTypeArray(node.interfaces, existingNode.interfaces, config),
20
20
  };
21
21
  }
@@ -1,13 +1,13 @@
1
1
  import { Kind } from 'graphql';
2
2
  import { mergeDirectives } from './directives.js';
3
3
  import { mergeNamedTypeArray } from './merge-named-type-array.js';
4
- export function mergeUnion(first, second, config) {
4
+ export function mergeUnion(first, second, config, directives) {
5
5
  if (second) {
6
6
  return {
7
7
  name: first.name,
8
8
  description: first['description'] || second['description'],
9
9
  // ConstXNode has been introduced in v16 but it is not compatible with XNode so we do `as any` for backwards compatibility
10
- directives: mergeDirectives(first.directives, second.directives, config),
10
+ directives: mergeDirectives(first.directives, second.directives, config, directives),
11
11
  kind: (config === null || config === void 0 ? void 0 : config.convertExtensions) || first.kind === 'UnionTypeDefinition' || second.kind === 'UnionTypeDefinition'
12
12
  ? Kind.UNION_TYPE_DEFINITION
13
13
  : Kind.UNION_TYPE_EXTENSION,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphql-tools/merge",
3
- "version": "8.4.1",
3
+ "version": "8.4.2-alpha-20230508170453-7db2a594",
4
4
  "description": "A set of utils for faster development of GraphQL tools",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
@@ -1,4 +1,4 @@
1
1
  import { DirectiveNode, DirectiveDefinitionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.cjs';
3
- export declare function mergeDirectives(d1?: ReadonlyArray<DirectiveNode>, d2?: ReadonlyArray<DirectiveNode>, config?: Config): DirectiveNode[];
3
+ export declare function mergeDirectives(d1?: ReadonlyArray<DirectiveNode>, d2?: ReadonlyArray<DirectiveNode>, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): DirectiveNode[];
4
4
  export declare function mergeDirective(node: DirectiveDefinitionNode, existingNode?: DirectiveDefinitionNode): DirectiveDefinitionNode;
@@ -1,4 +1,4 @@
1
1
  import { DirectiveNode, DirectiveDefinitionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.js';
3
- export declare function mergeDirectives(d1?: ReadonlyArray<DirectiveNode>, d2?: ReadonlyArray<DirectiveNode>, config?: Config): DirectiveNode[];
3
+ export declare function mergeDirectives(d1?: ReadonlyArray<DirectiveNode>, d2?: ReadonlyArray<DirectiveNode>, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): DirectiveNode[];
4
4
  export declare function mergeDirective(node: DirectiveDefinitionNode, existingNode?: DirectiveDefinitionNode): DirectiveDefinitionNode;
@@ -1,3 +1,3 @@
1
- import { EnumValueDefinitionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, EnumValueDefinitionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.cjs';
3
- export declare function mergeEnumValues(first: ReadonlyArray<EnumValueDefinitionNode> | undefined, second: ReadonlyArray<EnumValueDefinitionNode> | undefined, config?: Config): EnumValueDefinitionNode[];
3
+ export declare function mergeEnumValues(first: ReadonlyArray<EnumValueDefinitionNode> | undefined, second: ReadonlyArray<EnumValueDefinitionNode> | undefined, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): EnumValueDefinitionNode[];
@@ -1,3 +1,3 @@
1
- import { EnumValueDefinitionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, EnumValueDefinitionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.js';
3
- export declare function mergeEnumValues(first: ReadonlyArray<EnumValueDefinitionNode> | undefined, second: ReadonlyArray<EnumValueDefinitionNode> | undefined, config?: Config): EnumValueDefinitionNode[];
3
+ export declare function mergeEnumValues(first: ReadonlyArray<EnumValueDefinitionNode> | undefined, second: ReadonlyArray<EnumValueDefinitionNode> | undefined, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): EnumValueDefinitionNode[];
@@ -1,3 +1,3 @@
1
- import { EnumTypeDefinitionNode, EnumTypeExtensionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, EnumTypeDefinitionNode, EnumTypeExtensionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.cjs';
3
- export declare function mergeEnum(e1: EnumTypeDefinitionNode | EnumTypeExtensionNode, e2: EnumTypeDefinitionNode | EnumTypeExtensionNode, config?: Config): EnumTypeDefinitionNode | EnumTypeExtensionNode;
3
+ export declare function mergeEnum(e1: EnumTypeDefinitionNode | EnumTypeExtensionNode, e2: EnumTypeDefinitionNode | EnumTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): EnumTypeDefinitionNode | EnumTypeExtensionNode;
@@ -1,3 +1,3 @@
1
- import { EnumTypeDefinitionNode, EnumTypeExtensionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, EnumTypeDefinitionNode, EnumTypeExtensionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.js';
3
- export declare function mergeEnum(e1: EnumTypeDefinitionNode | EnumTypeExtensionNode, e2: EnumTypeDefinitionNode | EnumTypeExtensionNode, config?: Config): EnumTypeDefinitionNode | EnumTypeExtensionNode;
3
+ export declare function mergeEnum(e1: EnumTypeDefinitionNode | EnumTypeExtensionNode, e2: EnumTypeDefinitionNode | EnumTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): EnumTypeDefinitionNode | EnumTypeExtensionNode;
@@ -1,5 +1,5 @@
1
1
  import { Config } from './merge-typedefs.cjs';
2
- import { FieldDefinitionNode, InputValueDefinitionNode, NameNode } from 'graphql';
2
+ import { FieldDefinitionNode, InputValueDefinitionNode, NameNode, DirectiveDefinitionNode } from 'graphql';
3
3
  type FieldDefNode = FieldDefinitionNode | InputValueDefinitionNode;
4
4
  type NamedDefNode = {
5
5
  name: NameNode;
@@ -7,5 +7,5 @@ type NamedDefNode = {
7
7
  export type OnFieldTypeConflict = (existingField: FieldDefNode, otherField: FieldDefNode, type: NamedDefNode, ignoreNullability: boolean | undefined) => FieldDefNode;
8
8
  export declare function mergeFields<T extends FieldDefNode>(type: {
9
9
  name: NameNode;
10
- }, f1: ReadonlyArray<T> | undefined, f2: ReadonlyArray<T> | undefined, config?: Config): T[];
10
+ }, f1: ReadonlyArray<T> | undefined, f2: ReadonlyArray<T> | undefined, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): T[];
11
11
  export {};
@@ -1,5 +1,5 @@
1
1
  import { Config } from './merge-typedefs.js';
2
- import { FieldDefinitionNode, InputValueDefinitionNode, NameNode } from 'graphql';
2
+ import { FieldDefinitionNode, InputValueDefinitionNode, NameNode, DirectiveDefinitionNode } from 'graphql';
3
3
  type FieldDefNode = FieldDefinitionNode | InputValueDefinitionNode;
4
4
  type NamedDefNode = {
5
5
  name: NameNode;
@@ -7,5 +7,5 @@ type NamedDefNode = {
7
7
  export type OnFieldTypeConflict = (existingField: FieldDefNode, otherField: FieldDefNode, type: NamedDefNode, ignoreNullability: boolean | undefined) => FieldDefNode;
8
8
  export declare function mergeFields<T extends FieldDefNode>(type: {
9
9
  name: NameNode;
10
- }, f1: ReadonlyArray<T> | undefined, f2: ReadonlyArray<T> | undefined, config?: Config): T[];
10
+ }, f1: ReadonlyArray<T> | undefined, f2: ReadonlyArray<T> | undefined, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): T[];
11
11
  export {};
@@ -1,3 +1,3 @@
1
1
  import { Config } from './merge-typedefs.cjs';
2
- import { InputObjectTypeDefinitionNode, InputObjectTypeExtensionNode } from 'graphql';
3
- export declare function mergeInputType(node: InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode, existingNode: InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode, config?: Config): InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode;
2
+ import { InputObjectTypeDefinitionNode, InputObjectTypeExtensionNode, DirectiveDefinitionNode } from 'graphql';
3
+ export declare function mergeInputType(node: InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode, existingNode: InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode;
@@ -1,3 +1,3 @@
1
1
  import { Config } from './merge-typedefs.js';
2
- import { InputObjectTypeDefinitionNode, InputObjectTypeExtensionNode } from 'graphql';
3
- export declare function mergeInputType(node: InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode, existingNode: InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode, config?: Config): InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode;
2
+ import { InputObjectTypeDefinitionNode, InputObjectTypeExtensionNode, DirectiveDefinitionNode } from 'graphql';
3
+ export declare function mergeInputType(node: InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode, existingNode: InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): InputObjectTypeDefinitionNode | InputObjectTypeExtensionNode;
@@ -1,3 +1,3 @@
1
1
  import { Config } from './merge-typedefs.cjs';
2
- import { InterfaceTypeDefinitionNode, InterfaceTypeExtensionNode } from 'graphql';
3
- export declare function mergeInterface(node: InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode, existingNode: InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode, config?: Config): InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode;
2
+ import { DirectiveDefinitionNode, InterfaceTypeDefinitionNode, InterfaceTypeExtensionNode } from 'graphql';
3
+ export declare function mergeInterface(node: InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode, existingNode: InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode;
@@ -1,3 +1,3 @@
1
1
  import { Config } from './merge-typedefs.js';
2
- import { InterfaceTypeDefinitionNode, InterfaceTypeExtensionNode } from 'graphql';
3
- export declare function mergeInterface(node: InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode, existingNode: InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode, config?: Config): InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode;
2
+ import { DirectiveDefinitionNode, InterfaceTypeDefinitionNode, InterfaceTypeExtensionNode } from 'graphql';
3
+ export declare function mergeInterface(node: InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode, existingNode: InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): InterfaceTypeDefinitionNode | InterfaceTypeExtensionNode;
@@ -1,9 +1,9 @@
1
1
  import { Config } from './merge-typedefs.cjs';
2
- import { DefinitionNode, SchemaDefinitionNode, SchemaExtensionNode } from 'graphql';
2
+ import { DefinitionNode, DirectiveDefinitionNode, SchemaDefinitionNode, SchemaExtensionNode } from 'graphql';
3
3
  import { NamedDefinitionNode } from '@graphql-tools/utils';
4
4
  export declare const schemaDefSymbol = "SCHEMA_DEF_SYMBOL";
5
5
  export type MergedResultMap = Record<string, NamedDefinitionNode> & {
6
6
  [schemaDefSymbol]: SchemaDefinitionNode | SchemaExtensionNode;
7
7
  };
8
8
  export declare function isNamedDefinitionNode(definitionNode: DefinitionNode): definitionNode is NamedDefinitionNode;
9
- export declare function mergeGraphQLNodes(nodes: ReadonlyArray<DefinitionNode>, config?: Config): MergedResultMap;
9
+ export declare function mergeGraphQLNodes(nodes: ReadonlyArray<DefinitionNode>, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): MergedResultMap;
@@ -1,9 +1,9 @@
1
1
  import { Config } from './merge-typedefs.js';
2
- import { DefinitionNode, SchemaDefinitionNode, SchemaExtensionNode } from 'graphql';
2
+ import { DefinitionNode, DirectiveDefinitionNode, SchemaDefinitionNode, SchemaExtensionNode } from 'graphql';
3
3
  import { NamedDefinitionNode } from '@graphql-tools/utils';
4
4
  export declare const schemaDefSymbol = "SCHEMA_DEF_SYMBOL";
5
5
  export type MergedResultMap = Record<string, NamedDefinitionNode> & {
6
6
  [schemaDefSymbol]: SchemaDefinitionNode | SchemaExtensionNode;
7
7
  };
8
8
  export declare function isNamedDefinitionNode(definitionNode: DefinitionNode): definitionNode is NamedDefinitionNode;
9
- export declare function mergeGraphQLNodes(nodes: ReadonlyArray<DefinitionNode>, config?: Config): MergedResultMap;
9
+ export declare function mergeGraphQLNodes(nodes: ReadonlyArray<DefinitionNode>, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): MergedResultMap;
@@ -1,3 +1,3 @@
1
- import { ScalarTypeDefinitionNode, ScalarTypeExtensionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, ScalarTypeDefinitionNode, ScalarTypeExtensionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.cjs';
3
- export declare function mergeScalar(node: ScalarTypeDefinitionNode | ScalarTypeExtensionNode, existingNode: ScalarTypeDefinitionNode | ScalarTypeExtensionNode, config?: Config): ScalarTypeDefinitionNode | ScalarTypeExtensionNode;
3
+ export declare function mergeScalar(node: ScalarTypeDefinitionNode | ScalarTypeExtensionNode, existingNode: ScalarTypeDefinitionNode | ScalarTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): ScalarTypeDefinitionNode | ScalarTypeExtensionNode;
@@ -1,3 +1,3 @@
1
- import { ScalarTypeDefinitionNode, ScalarTypeExtensionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, ScalarTypeDefinitionNode, ScalarTypeExtensionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.js';
3
- export declare function mergeScalar(node: ScalarTypeDefinitionNode | ScalarTypeExtensionNode, existingNode: ScalarTypeDefinitionNode | ScalarTypeExtensionNode, config?: Config): ScalarTypeDefinitionNode | ScalarTypeExtensionNode;
3
+ export declare function mergeScalar(node: ScalarTypeDefinitionNode | ScalarTypeExtensionNode, existingNode: ScalarTypeDefinitionNode | ScalarTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): ScalarTypeDefinitionNode | ScalarTypeExtensionNode;
@@ -1,8 +1,8 @@
1
- import { SchemaDefinitionNode, SchemaExtensionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, SchemaDefinitionNode, SchemaExtensionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.cjs';
3
3
  export declare const DEFAULT_OPERATION_TYPE_NAME_MAP: {
4
4
  readonly query: "Query";
5
5
  readonly mutation: "Mutation";
6
6
  readonly subscription: "Subscription";
7
7
  };
8
- export declare function mergeSchemaDefs(node: SchemaDefinitionNode | SchemaExtensionNode, existingNode: SchemaDefinitionNode | SchemaExtensionNode, config?: Config): SchemaDefinitionNode | SchemaExtensionNode;
8
+ export declare function mergeSchemaDefs(node: SchemaDefinitionNode | SchemaExtensionNode, existingNode: SchemaDefinitionNode | SchemaExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): SchemaDefinitionNode | SchemaExtensionNode;
@@ -1,8 +1,8 @@
1
- import { SchemaDefinitionNode, SchemaExtensionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, SchemaDefinitionNode, SchemaExtensionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.js';
3
3
  export declare const DEFAULT_OPERATION_TYPE_NAME_MAP: {
4
4
  readonly query: "Query";
5
5
  readonly mutation: "Mutation";
6
6
  readonly subscription: "Subscription";
7
7
  };
8
- export declare function mergeSchemaDefs(node: SchemaDefinitionNode | SchemaExtensionNode, existingNode: SchemaDefinitionNode | SchemaExtensionNode, config?: Config): SchemaDefinitionNode | SchemaExtensionNode;
8
+ export declare function mergeSchemaDefs(node: SchemaDefinitionNode | SchemaExtensionNode, existingNode: SchemaDefinitionNode | SchemaExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): SchemaDefinitionNode | SchemaExtensionNode;
@@ -1,3 +1,3 @@
1
1
  import { Config } from './merge-typedefs.cjs';
2
- import { ObjectTypeDefinitionNode, ObjectTypeExtensionNode } from 'graphql';
3
- export declare function mergeType(node: ObjectTypeDefinitionNode | ObjectTypeExtensionNode, existingNode: ObjectTypeDefinitionNode | ObjectTypeExtensionNode, config?: Config): ObjectTypeDefinitionNode | ObjectTypeExtensionNode;
2
+ import { DirectiveDefinitionNode, ObjectTypeDefinitionNode, ObjectTypeExtensionNode } from 'graphql';
3
+ export declare function mergeType(node: ObjectTypeDefinitionNode | ObjectTypeExtensionNode, existingNode: ObjectTypeDefinitionNode | ObjectTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): ObjectTypeDefinitionNode | ObjectTypeExtensionNode;
@@ -1,3 +1,3 @@
1
1
  import { Config } from './merge-typedefs.js';
2
- import { ObjectTypeDefinitionNode, ObjectTypeExtensionNode } from 'graphql';
3
- export declare function mergeType(node: ObjectTypeDefinitionNode | ObjectTypeExtensionNode, existingNode: ObjectTypeDefinitionNode | ObjectTypeExtensionNode, config?: Config): ObjectTypeDefinitionNode | ObjectTypeExtensionNode;
2
+ import { DirectiveDefinitionNode, ObjectTypeDefinitionNode, ObjectTypeExtensionNode } from 'graphql';
3
+ export declare function mergeType(node: ObjectTypeDefinitionNode | ObjectTypeExtensionNode, existingNode: ObjectTypeDefinitionNode | ObjectTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): ObjectTypeDefinitionNode | ObjectTypeExtensionNode;
@@ -1,3 +1,3 @@
1
- import { UnionTypeDefinitionNode, UnionTypeExtensionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, UnionTypeDefinitionNode, UnionTypeExtensionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.cjs';
3
- export declare function mergeUnion(first: UnionTypeDefinitionNode | UnionTypeExtensionNode, second: UnionTypeDefinitionNode | UnionTypeExtensionNode, config?: Config): UnionTypeDefinitionNode | UnionTypeExtensionNode;
3
+ export declare function mergeUnion(first: UnionTypeDefinitionNode | UnionTypeExtensionNode, second: UnionTypeDefinitionNode | UnionTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): UnionTypeDefinitionNode | UnionTypeExtensionNode;
@@ -1,3 +1,3 @@
1
- import { UnionTypeDefinitionNode, UnionTypeExtensionNode } from 'graphql';
1
+ import { DirectiveDefinitionNode, UnionTypeDefinitionNode, UnionTypeExtensionNode } from 'graphql';
2
2
  import { Config } from './merge-typedefs.js';
3
- export declare function mergeUnion(first: UnionTypeDefinitionNode | UnionTypeExtensionNode, second: UnionTypeDefinitionNode | UnionTypeExtensionNode, config?: Config): UnionTypeDefinitionNode | UnionTypeExtensionNode;
3
+ export declare function mergeUnion(first: UnionTypeDefinitionNode | UnionTypeExtensionNode, second: UnionTypeDefinitionNode | UnionTypeExtensionNode, config?: Config, directives?: Record<string, DirectiveDefinitionNode>): UnionTypeDefinitionNode | UnionTypeExtensionNode;