@apollo/federation-internals 2.0.0-alpha.2 → 2.0.0-alpha.3
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.
- package/CHANGELOG.md +6 -1
- package/dist/debug.d.ts.map +1 -1
- package/dist/debug.js +2 -18
- package/dist/debug.js.map +1 -1
- package/dist/definitions.d.ts +11 -0
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js +54 -0
- package/dist/definitions.js.map +1 -1
- package/dist/error.d.ts +87 -3
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +143 -5
- package/dist/error.js.map +1 -1
- package/dist/extractSubgraphsFromSupergraph.d.ts.map +1 -1
- package/dist/extractSubgraphsFromSupergraph.js +40 -3
- package/dist/extractSubgraphsFromSupergraph.js.map +1 -1
- package/dist/federation.d.ts +4 -1
- package/dist/federation.d.ts.map +1 -1
- package/dist/federation.js +192 -53
- package/dist/federation.js.map +1 -1
- package/dist/genErrorCodeDoc.d.ts +2 -0
- package/dist/genErrorCodeDoc.d.ts.map +1 -0
- package/dist/genErrorCodeDoc.js +55 -0
- package/dist/genErrorCodeDoc.js.map +1 -0
- package/dist/tagSpec.js +3 -1
- package/dist/tagSpec.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +19 -1
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/extractSubgraphsFromSupergraph.test.ts +432 -0
- package/src/__tests__/subgraphValidation.test.ts +452 -0
- package/src/debug.ts +2 -19
- package/src/definitions.ts +98 -0
- package/src/error.ts +334 -7
- package/src/extractSubgraphsFromSupergraph.ts +49 -4
- package/src/federation.ts +229 -85
- package/src/genErrorCodeDoc.ts +69 -0
- package/src/tagSpec.ts +4 -4
- package/src/utils.ts +27 -0
- package/tsconfig.test.tsbuildinfo +1 -1
- package/tsconfig.tsbuildinfo +1 -1
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.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.3",
|
|
4
4
|
"description": "Apollo Federation internal utilities",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"graphql": "^15.7.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@types/js-levenshtein": "1.1.
|
|
37
|
+
"@types/js-levenshtein": "1.1.1"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "a8e0485664fafc7d9e3537f77c8907832f48d25b"
|
|
40
40
|
}
|
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { buildSupergraphSchema, extractSubgraphsFromSupergraph } from "..";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
test('handles types having no fields referenced by other objects in a subgraph correctly', () => {
|
|
5
|
+
/*
|
|
6
|
+
* The following supergraph has been generated on version-0.x from:
|
|
7
|
+
* - ServiceA:
|
|
8
|
+
* type Query {
|
|
9
|
+
* q: A
|
|
10
|
+
* }
|
|
11
|
+
*
|
|
12
|
+
* type A {
|
|
13
|
+
* a: B
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* type B {
|
|
17
|
+
* b: C @provides(fields: "c")
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* type C {
|
|
21
|
+
* c: String
|
|
22
|
+
* }
|
|
23
|
+
* - ServiceB:
|
|
24
|
+
* type C {
|
|
25
|
+
* c: String
|
|
26
|
+
* }
|
|
27
|
+
* - ServiceC:
|
|
28
|
+
* type D {
|
|
29
|
+
* d: String
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* The general idea being that all types are "value types" so ends with no 'join__type' in the supergraph (so
|
|
33
|
+
* `extractSubgraphsFromSupergraph` will have to initially assume that all types are in all subgraphs), but
|
|
34
|
+
* due to the `@provides`, `B.b` has a `join__field`, which makes it be only in "ServiceA". As as result,
|
|
35
|
+
* type `B` will end up empty in both "ServiceB" and "ServiceC" and will need to be removed, which has to
|
|
36
|
+
* trickle to removing type `A` too (since it's only field mentions `B`). This later part wasn't always done
|
|
37
|
+
* correctly, resulting in errors being throws and it is what this test checks.
|
|
38
|
+
*/
|
|
39
|
+
const supergraph = `
|
|
40
|
+
schema
|
|
41
|
+
@core(feature: "https://specs.apollo.dev/core/v0.2"),
|
|
42
|
+
@core(feature: "https://specs.apollo.dev/join/v0.1", for: EXECUTION)
|
|
43
|
+
{
|
|
44
|
+
query: Query
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
directive @core(as: String, feature: String!, for: core__Purpose) repeatable on SCHEMA
|
|
48
|
+
|
|
49
|
+
directive @join__field(graph: join__Graph, provides: join__FieldSet, requires: join__FieldSet) on FIELD_DEFINITION
|
|
50
|
+
|
|
51
|
+
directive @join__graph(name: String!, url: String!) on ENUM_VALUE
|
|
52
|
+
|
|
53
|
+
directive @join__owner(graph: join__Graph!) on INTERFACE | OBJECT
|
|
54
|
+
|
|
55
|
+
directive @join__type(graph: join__Graph!, key: join__FieldSet) repeatable on INTERFACE | OBJECT
|
|
56
|
+
|
|
57
|
+
type A {
|
|
58
|
+
a: B
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
type B {
|
|
62
|
+
b: C @join__field(graph: SERVICEA, provides: \"c\")
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
type C {
|
|
66
|
+
c: String
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
type D {
|
|
70
|
+
d: String
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
type Query {
|
|
74
|
+
q: A
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
enum core__Purpose {
|
|
78
|
+
"""
|
|
79
|
+
\`EXECUTION\` features provide metadata necessary to for operation execution.
|
|
80
|
+
"""
|
|
81
|
+
EXECUTION
|
|
82
|
+
|
|
83
|
+
"""
|
|
84
|
+
\`SECURITY\` features provide metadata necessary to securely resolve fields.
|
|
85
|
+
"""
|
|
86
|
+
SECURITY
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
scalar join__FieldSet
|
|
90
|
+
|
|
91
|
+
enum join__Graph {
|
|
92
|
+
SERVICEA @join__graph(name: "serviceA" url: "")
|
|
93
|
+
SERVICEB @join__graph(name: "serviceB" url: "")
|
|
94
|
+
SERVICEC @join__graph(name: "serviceC" url: "")
|
|
95
|
+
}
|
|
96
|
+
`;
|
|
97
|
+
|
|
98
|
+
const schema = buildSupergraphSchema(supergraph)[0];
|
|
99
|
+
const subgraphs = extractSubgraphsFromSupergraph(schema);
|
|
100
|
+
expect(subgraphs.size()).toBe(3);
|
|
101
|
+
|
|
102
|
+
const [a, b, c] = subgraphs.values().map((s) => s.schema);
|
|
103
|
+
expect(a.type('A')).toBeDefined();
|
|
104
|
+
expect(a.type('B')).toBeDefined();
|
|
105
|
+
|
|
106
|
+
expect(b.type('A')).toBeUndefined();
|
|
107
|
+
expect(b.type('B')).toBeUndefined();
|
|
108
|
+
|
|
109
|
+
expect(c.type('A')).toBeUndefined();
|
|
110
|
+
expect(c.type('B')).toBeUndefined();
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
test('handles types having no fields referenced by other interfaces in a subgraph correctly', () => {
|
|
114
|
+
/*
|
|
115
|
+
*
|
|
116
|
+
* The following supergraph has been generated on version-0.x from:
|
|
117
|
+
* - ServiceA:
|
|
118
|
+
* type Query {
|
|
119
|
+
* q: A
|
|
120
|
+
* }
|
|
121
|
+
*
|
|
122
|
+
* interface A {
|
|
123
|
+
* a: B
|
|
124
|
+
* }
|
|
125
|
+
*
|
|
126
|
+
* type B {
|
|
127
|
+
* b: C @provides(fields: "c")
|
|
128
|
+
* }
|
|
129
|
+
*
|
|
130
|
+
* type C {
|
|
131
|
+
* c: String
|
|
132
|
+
* }
|
|
133
|
+
* - ServiceB:
|
|
134
|
+
* type C {
|
|
135
|
+
* c: String
|
|
136
|
+
* }
|
|
137
|
+
* - ServiceC:
|
|
138
|
+
* type D {
|
|
139
|
+
* d: String
|
|
140
|
+
* }
|
|
141
|
+
*
|
|
142
|
+
* This tests is almost identical to the 'handles types having no fields referenced by other objects in a subgraph correctly'
|
|
143
|
+
* one, except that the reference to the type being removed is in an interface, to make double-sure this case is
|
|
144
|
+
* handled as well.
|
|
145
|
+
*/
|
|
146
|
+
const supergraph = `
|
|
147
|
+
schema
|
|
148
|
+
@core(feature: "https://specs.apollo.dev/core/v0.2"),
|
|
149
|
+
@core(feature: "https://specs.apollo.dev/join/v0.1", for: EXECUTION)
|
|
150
|
+
{
|
|
151
|
+
query: Query
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
directive @core(as: String, feature: String!, for: core__Purpose) repeatable on SCHEMA
|
|
155
|
+
|
|
156
|
+
directive @join__field(graph: join__Graph, provides: join__FieldSet, requires: join__FieldSet) on FIELD_DEFINITION
|
|
157
|
+
|
|
158
|
+
directive @join__graph(name: String!, url: String!) on ENUM_VALUE
|
|
159
|
+
|
|
160
|
+
directive @join__owner(graph: join__Graph!) on INTERFACE | OBJECT
|
|
161
|
+
|
|
162
|
+
directive @join__type(graph: join__Graph!, key: join__FieldSet) repeatable on INTERFACE | OBJECT
|
|
163
|
+
|
|
164
|
+
interface A {
|
|
165
|
+
a: B
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
type B {
|
|
169
|
+
b: C @join__field(graph: SERVICEA, provides: "c")
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
type C {
|
|
173
|
+
c: String
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
type D {
|
|
177
|
+
d: String
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
type Query {
|
|
181
|
+
q: A
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
enum core__Purpose {
|
|
185
|
+
"""
|
|
186
|
+
\`EXECUTION\` features provide metadata necessary to for operation execution.
|
|
187
|
+
"""
|
|
188
|
+
EXECUTION
|
|
189
|
+
|
|
190
|
+
"""
|
|
191
|
+
\`SECURITY\` features provide metadata necessary to securely resolve fields.
|
|
192
|
+
"""
|
|
193
|
+
SECURITY
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
scalar join__FieldSet
|
|
197
|
+
|
|
198
|
+
enum join__Graph {
|
|
199
|
+
SERVICEA @join__graph(name: "serviceA" url: "")
|
|
200
|
+
SERVICEB @join__graph(name: "serviceB" url: "")
|
|
201
|
+
SERVICEC @join__graph(name: "serviceC" url: "")
|
|
202
|
+
}
|
|
203
|
+
`;
|
|
204
|
+
|
|
205
|
+
const schema = buildSupergraphSchema(supergraph)[0];
|
|
206
|
+
const subgraphs = extractSubgraphsFromSupergraph(schema);
|
|
207
|
+
expect(subgraphs.size()).toBe(3);
|
|
208
|
+
|
|
209
|
+
const [a, b, c] = subgraphs.values().map((s) => s.schema);
|
|
210
|
+
expect(a.type('A')).toBeDefined();
|
|
211
|
+
expect(a.type('B')).toBeDefined();
|
|
212
|
+
|
|
213
|
+
expect(b.type('A')).toBeUndefined();
|
|
214
|
+
expect(b.type('B')).toBeUndefined();
|
|
215
|
+
|
|
216
|
+
expect(c.type('A')).toBeUndefined();
|
|
217
|
+
expect(c.type('B')).toBeUndefined();
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
test('handles types having no fields referenced by other unions in a subgraph correctly', () => {
|
|
221
|
+
/*
|
|
222
|
+
*
|
|
223
|
+
* The following supergraph has been generated on version-0.x from:
|
|
224
|
+
* - ServiceA:
|
|
225
|
+
* type Query {
|
|
226
|
+
* q: A
|
|
227
|
+
* }
|
|
228
|
+
*
|
|
229
|
+
* union A = B | C
|
|
230
|
+
*
|
|
231
|
+
* type B {
|
|
232
|
+
* b: D @provides(fields: "d")
|
|
233
|
+
* }
|
|
234
|
+
*
|
|
235
|
+
* type C {
|
|
236
|
+
* c: D @provides(fields: "d")
|
|
237
|
+
* }
|
|
238
|
+
*
|
|
239
|
+
* type D {
|
|
240
|
+
* d: String
|
|
241
|
+
* }
|
|
242
|
+
* - ServiceB:
|
|
243
|
+
* type D {
|
|
244
|
+
* d: String
|
|
245
|
+
* }
|
|
246
|
+
*
|
|
247
|
+
* This tests is similar identical to 'handles types having no fields referenced by other objects in a subgraph correctly'
|
|
248
|
+
* but the reference to the type being removed is a union, one that should be fully removed.
|
|
249
|
+
*/
|
|
250
|
+
const supergraph = `
|
|
251
|
+
schema
|
|
252
|
+
@core(feature: "https://specs.apollo.dev/core/v0.2"),
|
|
253
|
+
@core(feature: "https://specs.apollo.dev/join/v0.1", for: EXECUTION)
|
|
254
|
+
{
|
|
255
|
+
query: Query
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
directive @core(as: String, feature: String!, for: core__Purpose) repeatable on SCHEMA
|
|
259
|
+
|
|
260
|
+
directive @join__field(graph: join__Graph, provides: join__FieldSet, requires: join__FieldSet) on FIELD_DEFINITION
|
|
261
|
+
|
|
262
|
+
directive @join__graph(name: String!, url: String!) on ENUM_VALUE
|
|
263
|
+
|
|
264
|
+
directive @join__owner(graph: join__Graph!) on INTERFACE | OBJECT
|
|
265
|
+
|
|
266
|
+
directive @join__type(graph: join__Graph!, key: join__FieldSet) repeatable on INTERFACE | OBJECT
|
|
267
|
+
|
|
268
|
+
union A = B | C
|
|
269
|
+
|
|
270
|
+
type B {
|
|
271
|
+
b: D @join__field(graph: SERVICEA, provides: "d")
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
type C {
|
|
275
|
+
c: D @join__field(graph: SERVICEA, provides: "d")
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
type D {
|
|
279
|
+
d: String
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
type Query {
|
|
283
|
+
q: A
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
enum core__Purpose {
|
|
287
|
+
"""
|
|
288
|
+
\`EXECUTION\` features provide metadata necessary to for operation execution.
|
|
289
|
+
"""
|
|
290
|
+
EXECUTION
|
|
291
|
+
|
|
292
|
+
"""
|
|
293
|
+
\`SECURITY\` features provide metadata necessary to securely resolve fields.
|
|
294
|
+
"""
|
|
295
|
+
SECURITY
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
scalar join__FieldSet
|
|
299
|
+
|
|
300
|
+
enum join__Graph {
|
|
301
|
+
SERVICEA @join__graph(name: "serviceA" url: "")
|
|
302
|
+
SERVICEB @join__graph(name: "serviceB" url: "")
|
|
303
|
+
}
|
|
304
|
+
`;
|
|
305
|
+
|
|
306
|
+
const schema = buildSupergraphSchema(supergraph)[0];
|
|
307
|
+
const subgraphs = extractSubgraphsFromSupergraph(schema);
|
|
308
|
+
expect(subgraphs.size()).toBe(2);
|
|
309
|
+
|
|
310
|
+
const [a, b] = subgraphs.values().map((s) => s.schema);
|
|
311
|
+
expect(a.type('A')).toBeDefined();
|
|
312
|
+
expect(a.type('B')).toBeDefined();
|
|
313
|
+
expect(a.type('C')).toBeDefined();
|
|
314
|
+
expect(a.type('D')).toBeDefined();
|
|
315
|
+
|
|
316
|
+
expect(b.type('A')).toBeUndefined();
|
|
317
|
+
expect(b.type('B')).toBeUndefined();
|
|
318
|
+
expect(b.type('C')).toBeUndefined();
|
|
319
|
+
expect(a.type('D')).toBeDefined();
|
|
320
|
+
})
|
|
321
|
+
|
|
322
|
+
test('handles types having only some of their fields removed in a subgraph correctly', () => {
|
|
323
|
+
/*
|
|
324
|
+
* The following supergraph has been generated on version-0.x from:
|
|
325
|
+
* - ServiceA:
|
|
326
|
+
* type Query {
|
|
327
|
+
* q: A
|
|
328
|
+
* }
|
|
329
|
+
*
|
|
330
|
+
* type A {
|
|
331
|
+
* a: B
|
|
332
|
+
* }
|
|
333
|
+
*
|
|
334
|
+
* type B {
|
|
335
|
+
* b: C @provides(fields: "c")
|
|
336
|
+
* c: Int
|
|
337
|
+
* }
|
|
338
|
+
*
|
|
339
|
+
* type C {
|
|
340
|
+
* c: String
|
|
341
|
+
* }
|
|
342
|
+
* - ServiceB:
|
|
343
|
+
* type C {
|
|
344
|
+
* c: String
|
|
345
|
+
* }
|
|
346
|
+
* - ServiceC:
|
|
347
|
+
* type D {
|
|
348
|
+
* d: String
|
|
349
|
+
* }
|
|
350
|
+
*
|
|
351
|
+
* This tests is similar identical to 'handles types having no fields referenced by other objects in a subgraph correctly'
|
|
352
|
+
* but where no all of B type fields are "removed" and so the type should be preserved. So it's a "negative" version of
|
|
353
|
+
* that prior test of sorts.
|
|
354
|
+
*/
|
|
355
|
+
const supergraph = `
|
|
356
|
+
schema
|
|
357
|
+
@core(feature: "https://specs.apollo.dev/core/v0.2"),
|
|
358
|
+
@core(feature: "https://specs.apollo.dev/join/v0.1", for: EXECUTION)
|
|
359
|
+
{
|
|
360
|
+
query: Query
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
directive @core(as: String, feature: String!, for: core__Purpose) repeatable on SCHEMA
|
|
364
|
+
|
|
365
|
+
directive @join__field(graph: join__Graph, provides: join__FieldSet, requires: join__FieldSet) on FIELD_DEFINITION
|
|
366
|
+
|
|
367
|
+
directive @join__graph(name: String!, url: String!) on ENUM_VALUE
|
|
368
|
+
|
|
369
|
+
directive @join__owner(graph: join__Graph!) on INTERFACE | OBJECT
|
|
370
|
+
|
|
371
|
+
directive @join__type(graph: join__Graph!, key: join__FieldSet) repeatable on INTERFACE | OBJECT
|
|
372
|
+
|
|
373
|
+
type A {
|
|
374
|
+
a: B
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
type B {
|
|
378
|
+
b: C @join__field(graph: SERVICEA, provides: "c")
|
|
379
|
+
c: Int
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
type C {
|
|
383
|
+
c: String
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
type D {
|
|
387
|
+
d: String
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
type Query {
|
|
391
|
+
q: A
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
enum core__Purpose {
|
|
395
|
+
"""
|
|
396
|
+
\`EXECUTION\` features provide metadata necessary to for operation execution.
|
|
397
|
+
"""
|
|
398
|
+
EXECUTION
|
|
399
|
+
|
|
400
|
+
"""
|
|
401
|
+
\`SECURITY\` features provide metadata necessary to securely resolve fields.
|
|
402
|
+
"""
|
|
403
|
+
SECURITY
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
scalar join__FieldSet
|
|
407
|
+
|
|
408
|
+
enum join__Graph {
|
|
409
|
+
SERVICEA @join__graph(name: "serviceA" url: "")
|
|
410
|
+
SERVICEB @join__graph(name: "serviceB" url: "")
|
|
411
|
+
SERVICEC @join__graph(name: "serviceC" url: "")
|
|
412
|
+
}
|
|
413
|
+
`;
|
|
414
|
+
|
|
415
|
+
const schema = buildSupergraphSchema(supergraph)[0];
|
|
416
|
+
const subgraphs = extractSubgraphsFromSupergraph(schema);
|
|
417
|
+
expect(subgraphs.size()).toBe(3);
|
|
418
|
+
|
|
419
|
+
const [a, b, c] = subgraphs.values().map((s) => s.schema);
|
|
420
|
+
expect(a.type('A')).toBeDefined();
|
|
421
|
+
expect(a.type('B')).toBeDefined();
|
|
422
|
+
|
|
423
|
+
// Do note that the fact that A and B are extracted in subgraph 'c' and 'd' is, in a way, "wrong" since
|
|
424
|
+
// those subgraphs didn't had those type originally, but nothing in the supergraph allows to make that
|
|
425
|
+
// decision so this simply assert the actuall code behaviour.
|
|
426
|
+
|
|
427
|
+
expect(b.type('A')).toBeDefined();
|
|
428
|
+
expect(b.type('B')).toBeDefined();
|
|
429
|
+
|
|
430
|
+
expect(c.type('A')).toBeDefined();
|
|
431
|
+
expect(c.type('B')).toBeDefined();
|
|
432
|
+
})
|