@graphql-mesh/fusion-composition
Version:
Basic composition utility for Fusion spec
32 lines (31 loc) • 1.38 kB
JavaScript
import { getRootTypeNames, MapperKind } from '@graphql-tools/utils';
import { createRenameFieldTransform, createRenameTypeTransform } from './rename.js';
export function createPrefixTransform({ value, ignore = [], includeRootOperations = false, includeTypes = true, } = {}) {
return function prefixTransform(schema, subgraphConfig) {
value = value || `${subgraphConfig.name}_`;
const transforms = [];
const rootTypes = getRootTypeNames(schema);
if (includeRootOperations) {
transforms.push(createRenameFieldTransform(({ typeName, fieldName }) => {
if (ignore.includes(typeName) ||
ignore.includes(`${typeName}.${fieldName}`) ||
fieldName.startsWith('_encapsulated')) {
return fieldName;
}
return `${value}${fieldName}`;
}, MapperKind.ROOT_FIELD));
}
if (includeTypes) {
transforms.push(createRenameTypeTransform(({ typeName }) => {
if (rootTypes.has(typeName) || ignore.includes(typeName)) {
return typeName;
}
return `${value}${typeName}`;
}));
}
for (const transform of transforms) {
schema = transform(schema, subgraphConfig);
}
return schema;
};
}