-
-
Notifications
You must be signed in to change notification settings - Fork 797
/
subschemaConfig.ts
36 lines (30 loc) · 1.16 KB
/
subschemaConfig.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
import { SubschemaConfig } from './types.js';
export function isSubschemaConfig(value: any): value is SubschemaConfig<any, any, any, any> {
return Boolean(value?.schema);
}
export function cloneSubschemaConfig(subschemaConfig: SubschemaConfig): SubschemaConfig {
const newSubschemaConfig = {
...subschemaConfig,
transforms: subschemaConfig.transforms != null ? [...subschemaConfig.transforms] : undefined,
};
if (newSubschemaConfig.merge != null) {
newSubschemaConfig.merge = { ...subschemaConfig.merge };
for (const typeName in newSubschemaConfig.merge) {
const mergedTypeConfig = (newSubschemaConfig.merge[typeName] = {
...(subschemaConfig.merge?.[typeName] ?? {}),
});
if (mergedTypeConfig.entryPoints != null) {
mergedTypeConfig.entryPoints = mergedTypeConfig.entryPoints.map(entryPoint => ({
...entryPoint,
}));
}
if (mergedTypeConfig.fields != null) {
const fields = (mergedTypeConfig.fields = { ...mergedTypeConfig.fields });
for (const fieldName in fields) {
fields[fieldName] = { ...fields[fieldName] };
}
}
}
}
return newSubschemaConfig;
}