@apollo/federation-internals 2.4.9 → 2.5.0

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 (84) hide show
  1. package/dist/argumentCompositionStrategies.d.ts +12 -7
  2. package/dist/argumentCompositionStrategies.d.ts.map +1 -1
  3. package/dist/argumentCompositionStrategies.js +26 -7
  4. package/dist/argumentCompositionStrategies.js.map +1 -1
  5. package/dist/authenticatedSpec.d.ts +13 -0
  6. package/dist/authenticatedSpec.d.ts.map +1 -0
  7. package/dist/authenticatedSpec.js +36 -0
  8. package/dist/authenticatedSpec.js.map +1 -0
  9. package/dist/coreSpec.d.ts +6 -5
  10. package/dist/coreSpec.d.ts.map +1 -1
  11. package/dist/coreSpec.js +42 -32
  12. package/dist/coreSpec.js.map +1 -1
  13. package/dist/definitions.d.ts +2 -3
  14. package/dist/definitions.d.ts.map +1 -1
  15. package/dist/definitions.js +12 -7
  16. package/dist/definitions.js.map +1 -1
  17. package/dist/directiveAndTypeSpecification.d.ts +8 -8
  18. package/dist/directiveAndTypeSpecification.d.ts.map +1 -1
  19. package/dist/directiveAndTypeSpecification.js +21 -16
  20. package/dist/directiveAndTypeSpecification.js.map +1 -1
  21. package/dist/error.d.ts +1 -1
  22. package/dist/extractSubgraphsFromSupergraph.d.ts +1 -1
  23. package/dist/extractSubgraphsFromSupergraph.d.ts.map +1 -1
  24. package/dist/extractSubgraphsFromSupergraph.js +450 -295
  25. package/dist/extractSubgraphsFromSupergraph.js.map +1 -1
  26. package/dist/federation.d.ts +10 -5
  27. package/dist/federation.d.ts.map +1 -1
  28. package/dist/federation.js +58 -16
  29. package/dist/federation.js.map +1 -1
  30. package/dist/federationSpec.d.ts +3 -1
  31. package/dist/federationSpec.d.ts.map +1 -1
  32. package/dist/federationSpec.js +12 -3
  33. package/dist/federationSpec.js.map +1 -1
  34. package/dist/inaccessibleSpec.d.ts +1 -1
  35. package/dist/inaccessibleSpec.d.ts.map +1 -1
  36. package/dist/inaccessibleSpec.js +4 -4
  37. package/dist/inaccessibleSpec.js.map +1 -1
  38. package/dist/index.d.ts +2 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +2 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/joinSpec.d.ts +19 -17
  43. package/dist/joinSpec.d.ts.map +1 -1
  44. package/dist/joinSpec.js +3 -3
  45. package/dist/joinSpec.js.map +1 -1
  46. package/dist/operations.d.ts +9 -43
  47. package/dist/operations.d.ts.map +1 -1
  48. package/dist/operations.js +44 -97
  49. package/dist/operations.js.map +1 -1
  50. package/dist/requiresScopesSpec.d.ts +16 -0
  51. package/dist/requiresScopesSpec.d.ts.map +1 -0
  52. package/dist/requiresScopesSpec.js +55 -0
  53. package/dist/requiresScopesSpec.js.map +1 -0
  54. package/dist/supergraphs.d.ts +19 -4
  55. package/dist/supergraphs.d.ts.map +1 -1
  56. package/dist/supergraphs.js +40 -14
  57. package/dist/supergraphs.js.map +1 -1
  58. package/dist/tagSpec.d.ts +1 -1
  59. package/dist/tagSpec.d.ts.map +1 -1
  60. package/dist/tagSpec.js +4 -4
  61. package/dist/tagSpec.js.map +1 -1
  62. package/dist/utils.d.ts +1 -0
  63. package/dist/utils.d.ts.map +1 -1
  64. package/dist/utils.js +11 -1
  65. package/dist/utils.js.map +1 -1
  66. package/package.json +1 -1
  67. package/src/argumentCompositionStrategies.ts +32 -9
  68. package/src/authenticatedSpec.ts +62 -0
  69. package/src/coreSpec.ts +57 -35
  70. package/src/definitions.ts +22 -9
  71. package/src/directiveAndTypeSpecification.ts +25 -24
  72. package/src/error.ts +2 -2
  73. package/src/extractSubgraphsFromSupergraph.ts +647 -393
  74. package/src/federation.ts +95 -16
  75. package/src/federationSpec.ts +13 -5
  76. package/src/inaccessibleSpec.ts +4 -4
  77. package/src/index.ts +2 -1
  78. package/src/joinSpec.ts +23 -13
  79. package/src/operations.ts +62 -182
  80. package/src/precompute.ts +1 -1
  81. package/src/requiresScopesSpec.ts +76 -0
  82. package/src/supergraphs.ts +64 -16
  83. package/src/tagSpec.ts +4 -4
  84. package/src/utils.ts +10 -0
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isFed1Supergraph = exports.validateSupergraph = exports.buildSupergraphSchema = void 0;
3
+ exports.Supergraph = exports.isFed1Supergraph = exports.validateSupergraph = exports.DEFAULT_SUPPORTED_SUPERGRAPH_FEATURES = void 0;
4
4
  const coreSpec_1 = require("./coreSpec");
5
5
  const definitions_1 = require("./definitions");
6
6
  const joinSpec_1 = require("./joinSpec");
7
7
  const buildSchema_1 = require("./buildSchema");
8
8
  const extractSubgraphsFromSupergraph_1 = require("./extractSubgraphsFromSupergraph");
9
9
  const error_1 = require("./error");
10
- const SUPPORTED_FEATURES = new Set([
10
+ exports.DEFAULT_SUPPORTED_SUPERGRAPH_FEATURES = new Set([
11
11
  'https://specs.apollo.dev/core/v0.1',
12
12
  'https://specs.apollo.dev/core/v0.2',
13
13
  'https://specs.apollo.dev/join/v0.1',
@@ -20,17 +20,7 @@ const SUPPORTED_FEATURES = new Set([
20
20
  'https://specs.apollo.dev/inaccessible/v0.2',
21
21
  ]);
22
22
  const coreVersionZeroDotOneUrl = coreSpec_1.FeatureUrl.parse('https://specs.apollo.dev/core/v0.1');
23
- function buildSupergraphSchema(supergraphSdl) {
24
- const schema = typeof supergraphSdl === 'string'
25
- ? (0, buildSchema_1.buildSchema)(supergraphSdl, { validate: false })
26
- : (0, buildSchema_1.buildSchemaFromAST)(supergraphSdl, { validate: false });
27
- const [coreFeatures] = validateSupergraph(schema);
28
- checkFeatureSupport(coreFeatures);
29
- schema.validate();
30
- return [schema, (0, extractSubgraphsFromSupergraph_1.extractSubgraphsNamesAndUrlsFromSupergraph)(schema)];
31
- }
32
- exports.buildSupergraphSchema = buildSupergraphSchema;
33
- function checkFeatureSupport(coreFeatures) {
23
+ function checkFeatureSupport(coreFeatures, supportedFeatures) {
34
24
  const errors = [];
35
25
  const coreItself = coreFeatures.coreItself;
36
26
  if (coreItself.url.equals(coreVersionZeroDotOneUrl)) {
@@ -44,7 +34,7 @@ function checkFeatureSupport(coreFeatures) {
44
34
  }
45
35
  for (const feature of coreFeatures.allFeatures()) {
46
36
  if (feature.url.equals(coreVersionZeroDotOneUrl) || feature.purpose === 'EXECUTION' || feature.purpose === 'SECURITY') {
47
- if (!SUPPORTED_FEATURES.has(feature.url.base.toString())) {
37
+ if (!supportedFeatures.has(feature.url.base.toString())) {
48
38
  errors.push(error_1.ERRORS.UNSUPPORTED_LINKED_FEATURE.err(`feature ${feature.url} is for: ${feature.purpose} but is unsupported`, { nodes: feature.directive.sourceAST }));
49
39
  }
50
40
  }
@@ -73,4 +63,40 @@ function isFed1Supergraph(supergraph) {
73
63
  return validateSupergraph(supergraph)[1].version.equals(new coreSpec_1.FeatureVersion(0, 1));
74
64
  }
75
65
  exports.isFed1Supergraph = isFed1Supergraph;
66
+ class Supergraph {
67
+ constructor(schema, supportedFeatures = exports.DEFAULT_SUPPORTED_SUPERGRAPH_FEATURES, shouldValidate = true) {
68
+ this.schema = schema;
69
+ this.shouldValidate = shouldValidate;
70
+ const [coreFeatures] = validateSupergraph(schema);
71
+ if (supportedFeatures !== null) {
72
+ checkFeatureSupport(coreFeatures, supportedFeatures);
73
+ }
74
+ if (shouldValidate) {
75
+ schema.validate();
76
+ }
77
+ else {
78
+ schema.assumeValid();
79
+ }
80
+ this.containedSubgraphs = (0, extractSubgraphsFromSupergraph_1.extractSubgraphsNamesAndUrlsFromSupergraph)(schema);
81
+ }
82
+ static build(supergraphSdl, options) {
83
+ const schema = typeof supergraphSdl === 'string'
84
+ ? (0, buildSchema_1.buildSchema)(supergraphSdl, { validate: false })
85
+ : (0, buildSchema_1.buildSchemaFromAST)(supergraphSdl, { validate: false });
86
+ return new Supergraph(schema, options === null || options === void 0 ? void 0 : options.supportedFeatures, options === null || options === void 0 ? void 0 : options.validateSupergraph);
87
+ }
88
+ subgraphsMetadata() {
89
+ return this.containedSubgraphs;
90
+ }
91
+ subgraphs() {
92
+ if (!this._subgraphs) {
93
+ this._subgraphs = (0, extractSubgraphsFromSupergraph_1.extractSubgraphsFromSupergraph)(this.schema, this.shouldValidate);
94
+ }
95
+ return this._subgraphs;
96
+ }
97
+ apiSchema() {
98
+ return this.schema.toAPISchema();
99
+ }
100
+ }
101
+ exports.Supergraph = Supergraph;
76
102
  //# sourceMappingURL=supergraphs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"supergraphs.js","sourceRoot":"","sources":["../src/supergraphs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"supergraphs.js","sourceRoot":"","sources":["../src/supergraphs.ts"],"names":[],"mappings":";;;AACA,yCAA4E;AAC5E,+CAAiE;AACjE,yCAA6E;AAC7E,+CAAgE;AAChE,qFAA8H;AAC9H,mCAAiC;AAGpB,QAAA,qCAAqC,GAAG,IAAI,GAAG,CAAC;IAC3D,oCAAoC;IACpC,oCAAoC;IACpC,oCAAoC;IACpC,oCAAoC;IACpC,oCAAoC;IACpC,mCAAmC;IACnC,mCAAmC;IACnC,mCAAmC;IACnC,4CAA4C;IAC5C,4CAA4C;CAC7C,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,qBAAU,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AAOxF,SAAS,mBAAmB,CAAC,YAA0B,EAAE,iBAA8B;IACrF,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAC3C,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,EAAE;QACnD,MAAM,kBAAkB,GAAG,CAAC,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACjF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC,0BAA0B,CAAC,GAAG,CAC/C,mDAAmD,UAAU,CAAC,GAAG,CAAC,OAAO,GAAG;gBAC5E,+FAA+F,EAC/F;gBACE,KAAK,EAAE,IAAA,wBAAU,EAAC,UAAU,CAAC,SAAS,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;aACrF,CACF,CAAC,CAAC;SACJ;KACF;IAED,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,WAAW,EAAE,EAAE;QAChD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE;YACrH,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACvD,MAAM,CAAC,IAAI,CAAC,cAAM,CAAC,0BAA0B,CAAC,GAAG,CAC/C,WAAW,OAAO,CAAC,GAAG,YAAY,OAAO,CAAC,OAAO,qBAAqB,EACtE,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,CACvC,CAAC,CAAC;aACJ;SACF;KACF;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,MAAM,IAAA,6BAAkB,EAAC,MAAM,CAAC,CAAC;KAClC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,UAAkB;IACnD,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;IAC7C,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,cAAM,CAAC,6BAA6B,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;KAC7F;IACD,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC,uBAAY,CAAC,CAAC;IAC7D,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,cAAM,CAAC,6BAA6B,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;KAC9F;IACD,MAAM,QAAQ,GAAG,wBAAa,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,cAAM,CAAC,6BAA6B,CAAC,GAAG,CAC5C,0DAA0D,WAAW,CAAC,GAAG,CAAC,OAAO,yBAAyB,wBAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACrJ;IACD,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAfD,gDAeC;AAED,SAAgB,gBAAgB,CAAC,UAAkB;IACjD,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,yBAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC;AAFD,4CAEC;AAED,MAAa,UAAU;IAKrB,YACW,MAAc,EACvB,oBAAwC,6CAAqC,EAC5D,iBAA0B,IAAI;QAFtC,WAAM,GAAN,MAAM,CAAQ;QAEN,mBAAc,GAAd,cAAc,CAAgB;QAE/C,MAAM,CAAC,YAAY,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,iBAAiB,KAAK,IAAI,EAAE;YAC9B,mBAAmB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;SACtD;QAED,IAAI,cAAc,EAAE;YAClB,MAAM,CAAC,QAAQ,EAAE,CAAC;SACnB;aAAM;YACL,MAAM,CAAC,WAAW,EAAE,CAAC;SACtB;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAA,2EAA0C,EAAC,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAoC,EAAE,OAA2E;QAE5H,MAAM,MAAM,GAAG,OAAO,aAAa,KAAK,QAAQ;YAC9C,CAAC,CAAC,IAAA,yBAAW,EAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACjD,CAAC,CAAC,IAAA,gCAAkB,EAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3D,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,kBAAkB,CAAC,CAAC;IACzF,CAAC;IAQD,iBAAiB;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAIpB,IAAI,CAAC,UAAU,GAAG,IAAA,+DAA8B,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;SACpF;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;CACF;AAzDD,gCAyDC"}
package/dist/tagSpec.d.ts CHANGED
@@ -7,7 +7,7 @@ export declare class TagSpecDefinition extends FeatureDefinition {
7
7
  readonly tagLocations: DirectiveLocation[];
8
8
  readonly tagDirectiveSpec: DirectiveSpecification;
9
9
  private readonly printedTagDefinition;
10
- constructor(version: FeatureVersion);
10
+ constructor(version: FeatureVersion, minimumFederationVersion?: FeatureVersion);
11
11
  private isV01;
12
12
  private isV02;
13
13
  tagDirective(schema: Schema): DirectiveDefinition<{
@@ -1 +1 @@
1
- {"version":3,"file":"tagSpec.d.ts","sourceRoot":"","sources":["../src/tagSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAc,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAe,MAAM,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAgC,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAKvG,eAAO,MAAM,WAAW,iCAAiC,CAAC;AAE1D,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,SAAgB,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClD,SAAgB,gBAAgB,EAAE,sBAAsB,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBAElC,OAAO,EAAE,cAAc;IAmCnC,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,KAAK;IAIb,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC;IAIjE,wBAAwB,CAAC,UAAU,EAAE,mBAAmB,GAAG,YAAY,GAAG,SAAS;CAYpF;AAED,eAAO,MAAM,YAAY,uCAG8B,CAAC"}
1
+ {"version":3,"file":"tagSpec.d.ts","sourceRoot":"","sources":["../src/tagSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAc,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAe,MAAM,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAgC,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAKvG,eAAO,MAAM,WAAW,iCAAiC,CAAC;AAE1D,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,SAAgB,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClD,SAAgB,gBAAgB,EAAE,sBAAsB,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBAElC,OAAO,EAAE,cAAc,EAAE,wBAAwB,CAAC,EAAE,cAAc;IAmC9E,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,KAAK;IAIb,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC;IAIjE,wBAAwB,CAAC,UAAU,EAAE,mBAAmB,GAAG,YAAY,GAAG,SAAS;CAYpF;AAED,eAAO,MAAM,YAAY,uCAGwD,CAAC"}
package/dist/tagSpec.js CHANGED
@@ -10,8 +10,8 @@ const knownCoreFeatures_1 = require("./knownCoreFeatures");
10
10
  const types_1 = require("./types");
11
11
  exports.tagIdentity = 'https://specs.apollo.dev/tag';
12
12
  class TagSpecDefinition extends coreSpec_1.FeatureDefinition {
13
- constructor(version) {
14
- super(new coreSpec_1.FeatureUrl(exports.tagIdentity, 'tag', version));
13
+ constructor(version, minimumFederationVersion) {
14
+ super(new coreSpec_1.FeatureUrl(exports.tagIdentity, 'tag', version), minimumFederationVersion);
15
15
  this.tagLocations = [
16
16
  graphql_1.DirectiveLocation.FIELD_DEFINITION,
17
17
  graphql_1.DirectiveLocation.OBJECT,
@@ -33,7 +33,7 @@ class TagSpecDefinition extends coreSpec_1.FeatureDefinition {
33
33
  repeatable: true,
34
34
  args: [{ name: 'name', type: (schema) => new definitions_1.NonNullType(schema.stringType()) }],
35
35
  composes: true,
36
- supergraphSpecification: () => exports.TAG_VERSIONS.latest(),
36
+ supergraphSpecification: (fedVersion) => exports.TAG_VERSIONS.getMinimumRequiredVersion(fedVersion),
37
37
  });
38
38
  this.registerDirective(this.tagDirectiveSpec);
39
39
  }
@@ -61,6 +61,6 @@ exports.TagSpecDefinition = TagSpecDefinition;
61
61
  exports.TAG_VERSIONS = new coreSpec_1.FeatureDefinitions(exports.tagIdentity)
62
62
  .add(new TagSpecDefinition(new coreSpec_1.FeatureVersion(0, 1)))
63
63
  .add(new TagSpecDefinition(new coreSpec_1.FeatureVersion(0, 2)))
64
- .add(new TagSpecDefinition(new coreSpec_1.FeatureVersion(0, 3)));
64
+ .add(new TagSpecDefinition(new coreSpec_1.FeatureVersion(0, 3), new coreSpec_1.FeatureVersion(2, 0)));
65
65
  (0, knownCoreFeatures_1.registerKnownFeature)(exports.TAG_VERSIONS);
66
66
  //# sourceMappingURL=tagSpec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tagSpec.js","sourceRoot":"","sources":["../src/tagSpec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tagSpec.js","sourceRoot":"","sources":["../src/tagSpec.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -61,4 +61,5 @@ export declare const isDefined: <T>(t: T | undefined) => t is T;
61
61
  export declare function removeArrayElement<T>(element: T, array: T[]): boolean;
62
62
  export type NonEmptyArray<T> = [T, ...T[]];
63
63
  export declare function isNonEmptyArray<T>(array: T[]): array is NonEmptyArray<T>;
64
+ export declare function findLast<T>(array: T[], predicate: (t: T) => boolean): T | undefined;
64
65
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/dist/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isNonEmptyArray = exports.removeArrayElement = exports.isDefined = exports.printHumanReadableList = exports.joinStrings = exports.validateStringContainsBoolean = exports.copyWitNewLength = exports.MapWithCachedArrays = exports.setValues = exports.mapEntries = exports.mapKeys = exports.mapValues = exports.firstOf = exports.isSubset = exports.arrayEquals = exports.OrderedMap = exports.SetMultiMap = exports.MultiMap = exports.assertUnreachable = exports.assert = void 0;
3
+ exports.findLast = exports.isNonEmptyArray = exports.removeArrayElement = exports.isDefined = exports.printHumanReadableList = exports.joinStrings = exports.validateStringContainsBoolean = exports.copyWitNewLength = exports.MapWithCachedArrays = exports.setValues = exports.mapEntries = exports.mapKeys = exports.mapValues = exports.firstOf = exports.isSubset = exports.arrayEquals = exports.OrderedMap = exports.SetMultiMap = exports.MultiMap = exports.assertUnreachable = exports.assert = void 0;
4
4
  function assert(condition, message) {
5
5
  if (!condition) {
6
6
  throw new Error(typeof message === 'string' ? message : message());
@@ -323,4 +323,14 @@ function isNonEmptyArray(array) {
323
323
  return array.length > 0;
324
324
  }
325
325
  exports.isNonEmptyArray = isNonEmptyArray;
326
+ function findLast(array, predicate) {
327
+ for (let i = array.length - 1; i >= 0; i--) {
328
+ const t = array[i];
329
+ if (predicate(t)) {
330
+ return t;
331
+ }
332
+ }
333
+ return undefined;
334
+ }
335
+ exports.findLast = findLast;
326
336
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/federation-internals",
3
- "version": "2.4.9",
3
+ "version": "2.5.0",
4
4
  "description": "Apollo Federation internal utilities",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,38 +1,61 @@
1
- import { InputType, ListType, NonNullType, Schema } from "./definitions"
1
+ import { InputType, NonNullType, Schema, isListType, isNonNullType } from "./definitions"
2
+ import { sameType } from "./types";
3
+ import { valueEquals } from "./values";
4
+
5
+ type TypeSupportValidator = (schema: Schema, type: InputType) => { valid: boolean, supportedMsg?: string };
2
6
 
3
7
  export type ArgumentCompositionStrategy = {
4
8
  name: string,
5
- supportedTypes: (schema: Schema) => InputType[],
9
+ isTypeSupported: TypeSupportValidator,
6
10
  mergeValues: (values: any[]) => any,
7
11
  }
8
12
 
13
+ function supportFixedTypes(types: (schema: Schema) => InputType[]): TypeSupportValidator {
14
+ return (schema, type) => {
15
+ const supported = types(schema);
16
+ if (!supported.some((t) => sameType(t, type))) {
17
+ return { valid: false, supportedMsg: `type(s) ${supported.join(', ')}` };
18
+ }
19
+ return { valid: true };
20
+ };
21
+ }
22
+
23
+ function supportAnyNonNullArray(): TypeSupportValidator {
24
+ return (_, type) => {
25
+ if (!isNonNullType(type) || !isListType(type.ofType)) {
26
+ return { valid: false, supportedMsg: 'non nullable list types of any type'};
27
+ }
28
+ return { valid: true };
29
+ };
30
+ }
31
+
9
32
  export const ARGUMENT_COMPOSITION_STRATEGIES = {
10
33
  MAX: {
11
34
  name: 'MAX',
12
- supportedTypes: (schema: Schema) => [new NonNullType(schema.intType())],
35
+ isTypeSupported: supportFixedTypes((schema: Schema) => [new NonNullType(schema.intType())]),
13
36
  mergeValues: (values: any[]) => Math.max(...values),
14
37
  },
15
38
  MIN: {
16
39
  name: 'MIN',
17
- supportedTypes: (schema: Schema) => [new NonNullType(schema.intType())],
40
+ isTypeSupported: supportFixedTypes((schema: Schema) => [new NonNullType(schema.intType())]),
18
41
  mergeValues: (values: any[]) => Math.min(...values),
19
42
  },
20
43
  SUM: {
21
44
  name: 'SUM',
22
- supportedTypes: (schema: Schema) => [new NonNullType(schema.intType())],
45
+ isTypeSupported: supportFixedTypes((schema: Schema) => [new NonNullType(schema.intType())]),
23
46
  mergeValues: (values: any[]) => values.reduce((acc, val) => acc + val, 0),
24
47
  },
25
48
  INTERSECTION: {
26
49
  name: 'INTERSECTION',
27
- supportedTypes: (schema: Schema) => schema.builtInScalarTypes().map((t) => new NonNullType(new ListType(new NonNullType(t)))),
28
- mergeValues: (values: any[]) => values.reduce((acc, val) => acc.filter((v: any) => val.includes(v)), values[0]),
50
+ isTypeSupported: supportAnyNonNullArray(),
51
+ mergeValues: (values: any[]) => values.reduce((acc, val) => acc.filter((v1: any) => val.some((v2: any) => valueEquals(v1, v2))), values[0]),
29
52
  },
30
53
  UNION: {
31
54
  name: 'UNION',
32
- supportedTypes: (schema: Schema) => schema.builtInScalarTypes().map((t) => new NonNullType(new ListType(new NonNullType(t)))),
55
+ isTypeSupported: supportAnyNonNullArray(),
33
56
  mergeValues: (values: any[]) =>
34
57
  values.reduce((acc, val) => {
35
- const newValues = val.filter((v: any) => !acc.includes(v));
58
+ const newValues = val.filter((v1: any) => !acc.some((v2: any) => valueEquals(v1, v2)));
36
59
  return acc.concat(newValues);
37
60
  }, []),
38
61
  },
@@ -0,0 +1,62 @@
1
+ import { DirectiveLocation } from "graphql";
2
+ import {
3
+ CorePurpose,
4
+ FeatureDefinition,
5
+ FeatureDefinitions,
6
+ FeatureUrl,
7
+ FeatureVersion,
8
+ } from "./coreSpec";
9
+ import { DirectiveDefinition, Schema } from "./definitions";
10
+ import { createDirectiveSpecification } from "./directiveAndTypeSpecification";
11
+ import { registerKnownFeature } from "./knownCoreFeatures";
12
+
13
+ export class AuthenticatedSpecDefinition extends FeatureDefinition {
14
+ public static readonly directiveName = "authenticated";
15
+ public static readonly identity = `https://specs.apollo.dev/${AuthenticatedSpecDefinition.directiveName}`;
16
+
17
+ constructor(version: FeatureVersion, minimumFederationVersion: FeatureVersion) {
18
+ super(
19
+ new FeatureUrl(
20
+ AuthenticatedSpecDefinition.identity,
21
+ AuthenticatedSpecDefinition.directiveName,
22
+ version
23
+ ),
24
+ minimumFederationVersion,
25
+ );
26
+
27
+ this.registerDirective(createDirectiveSpecification({
28
+ name: AuthenticatedSpecDefinition.directiveName,
29
+ locations: [
30
+ DirectiveLocation.FIELD_DEFINITION,
31
+ DirectiveLocation.OBJECT,
32
+ DirectiveLocation.INTERFACE,
33
+ DirectiveLocation.SCALAR,
34
+ DirectiveLocation.ENUM,
35
+ ],
36
+ composes: true,
37
+ supergraphSpecification: () => AUTHENTICATED_VERSIONS.latest(),
38
+ }));
39
+ }
40
+
41
+ authenticatedDirective(
42
+ schema: Schema
43
+ ): DirectiveDefinition<{ name: string }> {
44
+ return this.directive(schema, AuthenticatedSpecDefinition.directiveName)!;
45
+ }
46
+
47
+ get defaultCorePurpose(): CorePurpose {
48
+ return 'SECURITY';
49
+ }
50
+ }
51
+
52
+ export const AUTHENTICATED_VERSIONS =
53
+ new FeatureDefinitions<AuthenticatedSpecDefinition>(
54
+ AuthenticatedSpecDefinition.identity
55
+ ).add(
56
+ new AuthenticatedSpecDefinition(
57
+ new FeatureVersion(0, 1),
58
+ new FeatureVersion(2, 5),
59
+ ),
60
+ );
61
+
62
+ registerKnownFeature(AUTHENTICATED_VERSIONS);
package/src/coreSpec.ts CHANGED
@@ -2,7 +2,7 @@ import { ASTNode, DirectiveLocation, GraphQLError, StringValueNode } from "graph
2
2
  import { URL } from "url";
3
3
  import { CoreFeature, Directive, DirectiveDefinition, EnumType, ErrGraphQLAPISchemaValidationFailed, ErrGraphQLValidationFailed, InputType, ListType, NamedType, NonNullType, ScalarType, Schema, SchemaDefinition, SchemaElement, sourceASTs } from "./definitions";
4
4
  import { sameType } from "./types";
5
- import { assert, firstOf, MapWithCachedArrays } from './utils';
5
+ import { assert, findLast, firstOf, MapWithCachedArrays } from './utils';
6
6
  import { aggregateError, ERRORS } from "./error";
7
7
  import { valueToString } from "./values";
8
8
  import { coreFeatureDefinitionIfKnown, registerKnownFeature } from "./knownCoreFeatures";
@@ -41,7 +41,8 @@ export abstract class FeatureDefinition {
41
41
  private readonly _directiveSpecs = new MapWithCachedArrays<string, DirectiveSpecification>();
42
42
  private readonly _typeSpecs = new MapWithCachedArrays<string, TypeSpecification>();
43
43
 
44
- constructor(url: FeatureUrl | string) {
44
+ // A minimumFederationVersion that's undefined would mean that we won't produce that version in the supergraph SDL.
45
+ constructor(url: FeatureUrl | string, readonly minimumFederationVersion?: FeatureVersion) {
45
46
  this.url = typeof url === 'string' ? FeatureUrl.parse(url) : url;
46
47
  }
47
48
 
@@ -53,6 +54,15 @@ export abstract class FeatureDefinition {
53
54
  this._typeSpecs.set(spec.name, spec);
54
55
  }
55
56
 
57
+ protected registerSubFeature(subFeature: FeatureDefinition) {
58
+ for (const typeSpec of subFeature.typeSpecs()) {
59
+ this.registerType(typeSpec);
60
+ }
61
+ for (const directiveSpec of subFeature.directiveSpecs()) {
62
+ this.registerDirective(directiveSpec);
63
+ }
64
+ }
65
+
56
66
  directiveSpecs(): readonly DirectiveSpecification[] {
57
67
  return this._directiveSpecs.values();
58
68
  }
@@ -89,15 +99,15 @@ export abstract class FeatureDefinition {
89
99
 
90
100
  addElementsToSchema(schema: Schema): GraphQLError[] {
91
101
  const feature = this.featureInSchema(schema);
92
- assert(feature, 'The federation specification should have been added to the schema before this is called');
102
+ assert(feature, () => `The ${this.url} specification should have been added to the schema before this is called`);
93
103
 
94
104
  let errors: GraphQLError[] = [];
95
105
  for (const type of this.typeSpecs()) {
96
- errors = errors.concat(this.addTypeSpec(schema, type));
106
+ errors = errors.concat(type.checkOrAdd(schema, feature));
97
107
  }
98
108
 
99
109
  for (const directive of this.directiveSpecs()) {
100
- errors = errors.concat(this.addDirectiveSpec(schema, directive));
110
+ errors = errors.concat(directive.checkOrAdd(schema, feature));
101
111
  }
102
112
  return errors;
103
113
  }
@@ -145,14 +155,6 @@ export abstract class FeatureDefinition {
145
155
  return schema.addDirectiveDefinition(this.directiveNameInSchema(schema, name)!);
146
156
  }
147
157
 
148
- protected addDirectiveSpec(schema: Schema, spec: DirectiveSpecification): GraphQLError[] {
149
- return spec.checkOrAdd(schema, this.directiveNameInSchema(schema, spec.name));
150
- }
151
-
152
- protected addTypeSpec(schema: Schema, spec: TypeSpecification): GraphQLError[] {
153
- return spec.checkOrAdd(schema, this.typeNameInSchema(schema, spec.name));
154
- }
155
-
156
158
  protected addScalarType(schema: Schema, name: string): ScalarType {
157
159
  return schema.addType(new ScalarType(this.typeNameInSchema(schema, name)!));
158
160
  }
@@ -164,7 +166,7 @@ export abstract class FeatureDefinition {
164
166
  protected featureInSchema(schema: Schema): CoreFeature | undefined {
165
167
  const features = schema.coreFeatures;
166
168
  if (!features) {
167
- throw buildError(`Schema is not a core schema (add @core first)`);
169
+ throw buildError(`Schema is not a core schema (add @link first)`);
168
170
  }
169
171
  return features.getByIdentity(this.identity);
170
172
  }
@@ -364,8 +366,8 @@ const linkImportTypeSpec = createScalarTypeSpecification({ name: 'Import' });
364
366
  export class CoreSpecDefinition extends FeatureDefinition {
365
367
  private readonly directiveDefinitionSpec: DirectiveSpecification;
366
368
 
367
- constructor(version: FeatureVersion, identity: string = linkIdentity, name: string = linkDirectiveDefaultName) {
368
- super(new FeatureUrl(identity, name, version));
369
+ constructor(version: FeatureVersion, minimumFederationVersion?: FeatureVersion, identity: string = linkIdentity, name: string = linkDirectiveDefaultName) {
370
+ super(new FeatureUrl(identity, name, version), minimumFederationVersion);
369
371
  this.directiveDefinitionSpec = createDirectiveSpecification({
370
372
  name,
371
373
  locations: [DirectiveLocation.SCHEMA],
@@ -383,26 +385,18 @@ export class CoreSpecDefinition extends FeatureDefinition {
383
385
  if (this.supportPurposes()) {
384
386
  args.push({
385
387
  name: 'for',
386
- type: (schema, nameInSchema) => {
387
- const purposeName = `${nameInSchema ?? this.url.name}__${linkPurposeTypeSpec.name}`;
388
- const errors = linkPurposeTypeSpec.checkOrAdd(schema, purposeName);
389
- if (errors.length > 0) {
390
- return errors;
391
- }
392
- return schema.type(purposeName) as InputType;
388
+ type: (schema, feature) => {
389
+ assert(feature, "Shouldn't be added without being attached to a @link spec");
390
+ return schema.type(feature.typeNameInSchema(linkPurposeTypeSpec.name)) as InputType;
393
391
  },
394
392
  });
395
393
  }
396
394
  if (this.supportImport()) {
397
395
  args.push({
398
396
  name: 'import',
399
- type: (schema, nameInSchema) => {
400
- const importName = `${nameInSchema ?? this.url.name}__${linkImportTypeSpec.name}`;
401
- const errors = linkImportTypeSpec.checkOrAdd(schema, importName);
402
- if (errors.length > 0) {
403
- return errors;
404
- }
405
- return new ListType(schema.type(importName)!);
397
+ type: (schema, feature) => {
398
+ assert(feature, "Shouldn't be added without being attached to a @link spec");
399
+ return new ListType(schema.type(feature.typeNameInSchema(linkImportTypeSpec.name))!);
406
400
  }
407
401
  });
408
402
  }
@@ -467,7 +461,7 @@ export class CoreSpecDefinition extends FeatureDefinition {
467
461
  return [];
468
462
  }
469
463
 
470
- addDefinitionsToSchema(schema: Schema, as?: string): GraphQLError[] {
464
+ addDefinitionsToSchema(schema: Schema, as?: string, imports: CoreImport[] = []): GraphQLError[] {
471
465
  const existingCore = schema.coreFeatures;
472
466
  if (existingCore) {
473
467
  if (existingCore.coreItself.url.identity === this.identity) {
@@ -481,7 +475,18 @@ export class CoreSpecDefinition extends FeatureDefinition {
481
475
  }
482
476
 
483
477
  const nameInSchema = as ?? this.url.name;
484
- return this.directiveDefinitionSpec.checkOrAdd(schema, nameInSchema);
478
+ // The @link spec is special in that it is the one that bootstrap everything, and by the time this method
479
+ // is called, the `schema` may not yet have any `schema.coreFeatures` setup yet. To have `checkAndAdd`
480
+ // calls below still work, we pass a temp feature object with the proper information (not that the
481
+ // `Directive` we pass is not complete and not even attached to the schema, but that is not used
482
+ // in practice so unused).
483
+ const feature = new CoreFeature(this.url, nameInSchema, new Directive(nameInSchema), imports);
484
+
485
+ let errors: GraphQLError[] = [];
486
+ errors = errors.concat(linkPurposeTypeSpec.checkOrAdd(schema, feature));
487
+ errors = errors.concat(linkImportTypeSpec.checkOrAdd(schema, feature));
488
+ errors = errors.concat(this.directiveDefinitionSpec.checkOrAdd(schema, feature));
489
+ return errors;
485
490
  }
486
491
 
487
492
  /**
@@ -587,6 +592,23 @@ export class FeatureDefinitions<T extends FeatureDefinition = FeatureDefinition>
587
592
  assert(this._definitions.length > 0, 'Trying to get latest when no definitions exist');
588
593
  return this._definitions[0];
589
594
  }
595
+
596
+ getMinimumRequiredVersion(fedVersion: FeatureVersion): T {
597
+ // this._definitions is already sorted with the most recent first
598
+ // get the first definition that is compatible with the federation version
599
+ // if the minimum version is not present, assume that we won't look for an older version
600
+ const def = this._definitions.find(def => def.minimumFederationVersion ? fedVersion >= def.minimumFederationVersion : true);
601
+ assert(def, `No compatible definition exists for federation version ${fedVersion}`);
602
+
603
+ // note that it's necessary that we can only get versions that have the same major version as the latest,
604
+ // because otherwise we can not guarantee compatibility. In this case, we want to return the oldest version with
605
+ // the same major version as the latest.
606
+ const latestMajor = this.latest().version.major;
607
+ if (def.version.major !== latestMajor) {
608
+ return findLast(this._definitions, def => def.version.major === latestMajor) ?? this.latest();
609
+ }
610
+ return def;
611
+ }
590
612
  }
591
613
 
592
614
  /**
@@ -789,11 +811,11 @@ export function findCoreSpecVersion(featureUrl: FeatureUrl): CoreSpecDefinition
789
811
  }
790
812
 
791
813
  export const CORE_VERSIONS = new FeatureDefinitions<CoreSpecDefinition>(coreIdentity)
792
- .add(new CoreSpecDefinition(new FeatureVersion(0, 1), coreIdentity, 'core'))
793
- .add(new CoreSpecDefinition(new FeatureVersion(0, 2), coreIdentity, 'core'));
814
+ .add(new CoreSpecDefinition(new FeatureVersion(0, 1), undefined, coreIdentity, 'core'))
815
+ .add(new CoreSpecDefinition(new FeatureVersion(0, 2), new FeatureVersion(2, 0), coreIdentity, 'core'));
794
816
 
795
817
  export const LINK_VERSIONS = new FeatureDefinitions<CoreSpecDefinition>(linkIdentity)
796
- .add(new CoreSpecDefinition(new FeatureVersion(1, 0)));
818
+ .add(new CoreSpecDefinition(new FeatureVersion(1, 0), new FeatureVersion(2, 0)));
797
819
 
798
820
  registerKnownFeature(CORE_VERSIONS);
799
821
  registerKnownFeature(LINK_VERSIONS);