@apollo/federation-internals 2.0.0-preview.8 → 2.0.1

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 (101) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/buildSchema.js +1 -1
  3. package/dist/buildSchema.js.map +1 -1
  4. package/dist/coreSpec.d.ts +13 -6
  5. package/dist/coreSpec.d.ts.map +1 -1
  6. package/dist/coreSpec.js +105 -38
  7. package/dist/coreSpec.js.map +1 -1
  8. package/dist/definitions.d.ts +25 -11
  9. package/dist/definitions.d.ts.map +1 -1
  10. package/dist/definitions.js +115 -63
  11. package/dist/definitions.js.map +1 -1
  12. package/dist/directiveAndTypeSpecification.d.ts +11 -1
  13. package/dist/directiveAndTypeSpecification.d.ts.map +1 -1
  14. package/dist/directiveAndTypeSpecification.js +77 -20
  15. package/dist/directiveAndTypeSpecification.js.map +1 -1
  16. package/dist/error.d.ts +13 -0
  17. package/dist/error.d.ts.map +1 -1
  18. package/dist/error.js +28 -2
  19. package/dist/error.js.map +1 -1
  20. package/dist/extractSubgraphsFromSupergraph.d.ts.map +1 -1
  21. package/dist/extractSubgraphsFromSupergraph.js +7 -1
  22. package/dist/extractSubgraphsFromSupergraph.js.map +1 -1
  23. package/dist/federation.d.ts +19 -6
  24. package/dist/federation.d.ts.map +1 -1
  25. package/dist/federation.js +107 -80
  26. package/dist/federation.js.map +1 -1
  27. package/dist/federationSpec.d.ts +3 -3
  28. package/dist/federationSpec.d.ts.map +1 -1
  29. package/dist/federationSpec.js +34 -26
  30. package/dist/federationSpec.js.map +1 -1
  31. package/dist/inaccessibleSpec.d.ts +11 -5
  32. package/dist/inaccessibleSpec.d.ts.map +1 -1
  33. package/dist/inaccessibleSpec.js +631 -29
  34. package/dist/inaccessibleSpec.js.map +1 -1
  35. package/dist/index.d.ts +1 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/introspection.d.ts.map +1 -1
  40. package/dist/introspection.js +8 -3
  41. package/dist/introspection.js.map +1 -1
  42. package/dist/joinSpec.d.ts +6 -2
  43. package/dist/joinSpec.d.ts.map +1 -1
  44. package/dist/joinSpec.js +6 -0
  45. package/dist/joinSpec.js.map +1 -1
  46. package/dist/operations.d.ts +1 -0
  47. package/dist/operations.d.ts.map +1 -1
  48. package/dist/operations.js +16 -1
  49. package/dist/operations.js.map +1 -1
  50. package/dist/{sharing.d.ts → precompute.d.ts} +1 -1
  51. package/dist/precompute.d.ts.map +1 -0
  52. package/dist/{sharing.js → precompute.js} +3 -3
  53. package/dist/precompute.js.map +1 -0
  54. package/dist/schemaUpgrader.d.ts.map +1 -1
  55. package/dist/schemaUpgrader.js +17 -7
  56. package/dist/schemaUpgrader.js.map +1 -1
  57. package/dist/suggestions.d.ts +1 -1
  58. package/dist/suggestions.d.ts.map +1 -1
  59. package/dist/suggestions.js.map +1 -1
  60. package/dist/supergraphs.d.ts.map +1 -1
  61. package/dist/supergraphs.js +2 -0
  62. package/dist/supergraphs.js.map +1 -1
  63. package/dist/tagSpec.d.ts +6 -2
  64. package/dist/tagSpec.d.ts.map +1 -1
  65. package/dist/tagSpec.js +30 -14
  66. package/dist/tagSpec.js.map +1 -1
  67. package/dist/validate.js +13 -7
  68. package/dist/validate.js.map +1 -1
  69. package/dist/values.d.ts +2 -2
  70. package/dist/values.d.ts.map +1 -1
  71. package/dist/values.js +13 -11
  72. package/dist/values.js.map +1 -1
  73. package/package.json +4 -4
  74. package/src/__tests__/coreSpec.test.ts +112 -0
  75. package/src/__tests__/removeInaccessibleElements.test.ts +2229 -137
  76. package/src/__tests__/subgraphValidation.test.ts +357 -1
  77. package/src/__tests__/values.test.ts +315 -3
  78. package/src/buildSchema.ts +1 -1
  79. package/src/coreSpec.ts +161 -48
  80. package/src/definitions.ts +223 -90
  81. package/src/directiveAndTypeSpecification.ts +98 -21
  82. package/src/error.ts +80 -2
  83. package/src/extractSubgraphsFromSupergraph.ts +7 -1
  84. package/src/federation.ts +124 -97
  85. package/src/federationSpec.ts +37 -30
  86. package/src/inaccessibleSpec.ts +983 -49
  87. package/src/index.ts +1 -0
  88. package/src/introspection.ts +8 -3
  89. package/src/joinSpec.ts +19 -4
  90. package/src/operations.ts +15 -0
  91. package/src/{sharing.ts → precompute.ts} +3 -6
  92. package/src/schemaUpgrader.ts +29 -13
  93. package/src/suggestions.ts +1 -1
  94. package/src/supergraphs.ts +2 -0
  95. package/src/tagSpec.ts +42 -16
  96. package/src/validate.ts +20 -9
  97. package/src/values.ts +39 -12
  98. package/tsconfig.test.tsbuildinfo +1 -1
  99. package/tsconfig.tsbuildinfo +1 -1
  100. package/dist/sharing.d.ts.map +0 -1
  101. package/dist/sharing.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/federation-internals",
3
- "version": "2.0.0-preview.8",
3
+ "version": "2.0.1",
4
4
  "description": "Apollo Federation internal utilities",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,10 +20,10 @@
20
20
  "author": "Apollo <packages@apollographql.com>",
21
21
  "license": "SEE LICENSE IN ./LICENSE",
22
22
  "engines": {
23
- "node": ">=12.13.0 <17.0"
23
+ "node": ">=12.13.0 <18.0"
24
24
  },
25
25
  "dependencies": {
26
- "@apollo/core-schema": "^0.2.2",
26
+ "@apollo/core-schema": "~0.3.0",
27
27
  "chalk": "^4.1.0",
28
28
  "js-levenshtein": "^1.1.6"
29
29
  },
@@ -33,5 +33,5 @@
33
33
  "peerDependencies": {
34
34
  "graphql": "^16.0.0"
35
35
  },
36
- "gitHead": "516a30d879b4bde5945adb55b80d0f64118c322f"
36
+ "gitHead": "e38b22c5796b052d1c373291fac93e0d72ee5ec1"
37
37
  }
@@ -3,6 +3,8 @@ import gql from "graphql-tag";
3
3
  import { buildSubgraph } from "../federation";
4
4
  import { errorCauses } from "../definitions";
5
5
  import { assert } from "../utils";
6
+ import { buildSchemaFromAST } from "../buildSchema";
7
+ import { removeAllCoreFeatures } from "../coreSpec";
6
8
 
7
9
  function expectErrors(
8
10
  subgraphDefs: DocumentNode,
@@ -98,3 +100,113 @@ describe('@link(import:) argument', () => {
98
100
  ]);
99
101
  });
100
102
  });
103
+
104
+ describe('removeAllCoreFeatures', () => {
105
+ it('removes core (and only core) feature definitions, accounting for aliasing', () => {
106
+ const schema = buildSchemaFromAST(gql`
107
+ directive @lonk(url: String, as: String, for: Porpoise, import: [lonk__Import]) repeatable on SCHEMA
108
+
109
+ scalar lonk__Import
110
+
111
+ enum Porpoise {
112
+ """
113
+ \`SECURITY\` features provide metadata necessary to securely resolve fields.
114
+ """
115
+ SECURITY
116
+
117
+ """
118
+ \`EXECUTION\` features provide metadata necessary for operation execution.
119
+ """
120
+ EXECUTION
121
+ }
122
+
123
+ extend schema
124
+ @lonk(
125
+ url: "https://specs.apollo.dev/link/v1.0",
126
+ as: "lonk",
127
+ import: [
128
+ { name: "Purpose", as: "Porpoise" }
129
+ ]
130
+ )
131
+ @lonk(
132
+ url: "https://localhost/foobar/v1.0",
133
+ as: "foo"
134
+ import: [
135
+ "bar",
136
+ "@baz",
137
+ { name: "qux", as: "qax" },
138
+ { name: "@quz", as: "@qaz" },
139
+ ]
140
+ )
141
+
142
+ type Query {
143
+ q: Int
144
+ }
145
+
146
+ # Shouldn't remove original spec name
147
+ scalar foobar
148
+ scalar foobar__Scalar
149
+ directive @foobar on FIELD
150
+ directive @foobar__directive on FIELD
151
+
152
+ # Should remove aliased spec name (other than type "foo")
153
+ scalar foo
154
+ scalar foo__Scalar
155
+ directive @foo on FIELD
156
+ directive @foo__directive on FIELD
157
+
158
+ # Should remove imports (prefixed or not)
159
+ type bar implements foo__bar {
160
+ someField: foo!
161
+ }
162
+ interface foo__bar {
163
+ someField: foo!
164
+ }
165
+ directive @baz on FIELD
166
+ directive @foo__baz on FIELD
167
+
168
+ # Shouldn't remove original import names
169
+ input qux {
170
+ someField: ID!
171
+ }
172
+ directive @quz on FIELD
173
+
174
+ # Should remove aliased import names (and prefixed original)
175
+ union qax = bar
176
+ enum foo__qax {
177
+ SOME_VALUE
178
+ }
179
+ scalar foo__qux
180
+ directive @qaz on FIELD
181
+ directive @foo__qaz on FIELD
182
+ directive @foo__quz on FIELD
183
+ `);
184
+
185
+ removeAllCoreFeatures(schema);
186
+ schema.validate();
187
+
188
+ expect(schema.elementByCoordinate("@lonk")).toBeUndefined();
189
+ expect(schema.elementByCoordinate("lonk__Import")).toBeUndefined();
190
+ expect(schema.elementByCoordinate("Porpoise")).toBeUndefined();
191
+ expect(schema.elementByCoordinate("foobar")).toBeDefined();
192
+ expect(schema.elementByCoordinate("foobar__Scalar")).toBeDefined();
193
+ expect(schema.elementByCoordinate("@foobar")).toBeDefined();
194
+ expect(schema.elementByCoordinate("@foobar__directive")).toBeDefined();
195
+ expect(schema.elementByCoordinate("foo")).toBeDefined();
196
+ expect(schema.elementByCoordinate("foo__Scalar")).toBeUndefined();
197
+ expect(schema.elementByCoordinate("@foo")).toBeUndefined();
198
+ expect(schema.elementByCoordinate("@foo__directive")).toBeUndefined();
199
+ expect(schema.elementByCoordinate("bar")).toBeUndefined();
200
+ expect(schema.elementByCoordinate("foo__bar")).toBeUndefined();
201
+ expect(schema.elementByCoordinate("@baz")).toBeUndefined();
202
+ expect(schema.elementByCoordinate("@foo__baz")).toBeUndefined();
203
+ expect(schema.elementByCoordinate("qux")).toBeDefined();
204
+ expect(schema.elementByCoordinate("@quz")).toBeDefined();
205
+ expect(schema.elementByCoordinate("qax")).toBeUndefined();
206
+ expect(schema.elementByCoordinate("foo__qax")).toBeUndefined();
207
+ expect(schema.elementByCoordinate("foo__qux")).toBeUndefined();
208
+ expect(schema.elementByCoordinate("@qaz")).toBeUndefined();
209
+ expect(schema.elementByCoordinate("@foo__qaz")).toBeUndefined();
210
+ expect(schema.elementByCoordinate("@foo__quz")).toBeUndefined();
211
+ });
212
+ });