@graphql-tools/stitch
Version:
A set of utils for faster development of GraphQL tools
49 lines (48 loc) • 2.37 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.splitMergedTypeEntryPointsTransformer = void 0;
const delegate_1 = require("@graphql-tools/delegate");
function splitMergedTypeEntryPointsTransformer(subschemaConfig) {
if (!subschemaConfig.merge)
return [subschemaConfig];
const maxEntryPoints = Object.values(subschemaConfig.merge).reduce((max, mergedTypeConfig) => {
return Math.max(max, mergedTypeConfig?.entryPoints?.length ?? 0);
}, 0);
if (maxEntryPoints === 0)
return [subschemaConfig];
const subschemaPermutations = [];
for (let i = 0; i < maxEntryPoints; i += 1) {
const subschemaPermutation = (0, delegate_1.cloneSubschemaConfig)(subschemaConfig);
const mergedTypesCopy = subschemaPermutation.merge ?? Object.create(null);
let currentMerge = mergedTypesCopy;
if (i > 0) {
subschemaPermutation.merge = currentMerge = Object.create(null);
}
for (const typeName in mergedTypesCopy) {
const mergedTypeConfig = mergedTypesCopy[typeName];
const mergedTypeEntryPoint = mergedTypeConfig?.entryPoints?.[i];
if (mergedTypeEntryPoint) {
if (mergedTypeConfig.selectionSet ??
mergedTypeConfig.fieldName ??
mergedTypeConfig.resolve) {
throw new Error(`Merged type ${typeName} may not define entryPoints in addition to selectionSet, fieldName, or resolve`);
}
Object.assign(mergedTypeConfig, mergedTypeEntryPoint);
delete mergedTypeConfig.entryPoints;
if (i > 0) {
delete mergedTypeConfig.canonical;
if (mergedTypeConfig.fields != null) {
for (const mergedFieldName in mergedTypeConfig.fields) {
const mergedFieldConfig = mergedTypeConfig.fields[mergedFieldName];
delete mergedFieldConfig.canonical;
}
}
}
currentMerge[typeName] = mergedTypeConfig;
}
}
subschemaPermutations.push(subschemaPermutation);
}
return subschemaPermutations;
}
exports.splitMergedTypeEntryPointsTransformer = splitMergedTypeEntryPointsTransformer;
;