-
Notifications
You must be signed in to change notification settings - Fork 2k
/
composeAndValidate.ts
43 lines (36 loc) · 1.31 KB
/
composeAndValidate.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { composeServices } from './compose';
import {
validateComposedSchema,
validateServicesBeforeComposition,
validateServicesBeforeNormalization,
} from './validate';
import { ServiceDefinition } from './types';
import { normalizeTypeDefs } from './normalize';
import { printComposedSdl } from '../service/printComposedSdl';
export function composeAndValidate(serviceList: ServiceDefinition[]) {
const errors = validateServicesBeforeNormalization(serviceList);
const normalizedServiceList = serviceList.map(({ name, typeDefs }) => ({
name,
typeDefs: normalizeTypeDefs(typeDefs),
}));
// generate errors or warnings of the individual services
errors.push(...validateServicesBeforeComposition(normalizedServiceList));
// generate a schema and any errors or warnings
const compositionResult = composeServices(normalizedServiceList);
errors.push(...compositionResult.errors);
// validate the composed schema based on service information
errors.push(
...validateComposedSchema({
schema: compositionResult.schema,
serviceList,
}),
);
const composedSdl = printComposedSdl(compositionResult.schema, serviceList);
// TODO remove the warnings array once no longer used by clients
return {
schema: compositionResult.schema,
warnings: [],
errors,
composedSdl,
};
}