diff --git a/dist/composition/compose.js b/dist/composition/compose.js
index dbf319952c630aa8c0f534e06bd0258e06bcaf8a..101e1afc8803a6899b11e31b2b20faba28c20345 100644
--- a/dist/composition/compose.js
+++ b/dist/composition/compose.js
@@ -148,7 +148,17 @@ function buildMapsFromServiceList(serviceList) {
     };
 }
 exports.buildMapsFromServiceList = buildMapsFromServiceList;
+function resolveNamedType(node) {
+    if (node.kind === graphql_1.Kind.LIST_TYPE) {
+        return resolveNamedType(node.type);
+    }
+    if (node.kind === graphql_1.Kind.NON_NULL_TYPE) {
+        return resolveNamedType(node.type);
+    }
+    return node.name.value;
+}
 function buildSchemaFromDefinitionsAndExtensions({ typeDefinitionsMap, typeExtensionsMap, directiveDefinitionsMap, directiveMetadata, serviceList, }) {
+    var _a, _b;
     let errors = undefined;
     const autoIncludedDirectiveDefinitions = directives_1.directivesWithAutoIncludedDefinitions.filter((directive) => directiveMetadata.hasUsages(directive.name));
     const { FieldSetScalar, JoinFieldDirective, JoinTypeDirective, JoinOwnerDirective, JoinGraphEnum, JoinGraphDirective, } = (0, joinSpec_1.getJoinDefinitions)(serviceList);
@@ -169,6 +179,34 @@ function buildSchemaFromDefinitionsAndExtensions({ typeDefinitionsMap, typeExten
     function nodeHasInterfaces(node) {
         return 'interfaces' in node;
     }
+    for (const typeName in typeDefinitionsMap) {
+        const typeDefinitions = typeDefinitionsMap[typeName];
+        for (const typeDefinition of typeDefinitions) {
+            if (typeDefinition.kind === graphql_1.Kind.OBJECT_TYPE_DEFINITION) {
+                const fieldNamesToDelete = [];
+                for (const field of (_a = typeDefinition.fields) !== null && _a !== void 0 ? _a : []) {
+                    const fieldTypeName = resolveNamedType(field.type);
+                    if (!typeDefinitionsMap[fieldTypeName] && false === ['ID', 'String', 'Boolean', 'Float', 'Int'].includes(fieldTypeName)) {
+                        if (!typeExtensionsMap[typeName]) {
+                            typeExtensionsMap[typeName] = [];
+                        }
+                        typeExtensionsMap[typeName].push({
+                            kind: graphql_1.Kind.OBJECT_TYPE_EXTENSION,
+                            name: {
+                                kind: graphql_1.Kind.NAME,
+                                value: typeName,
+                            },
+                            fields: [field]
+                        });
+                        fieldNamesToDelete.push(field.name.value);
+                    }
+                }
+                if (fieldNamesToDelete.length > 0) {
+                    typeDefinition.fields = (_b = typeDefinition.fields) === null || _b === void 0 ? void 0 : _b.filter(field => !fieldNamesToDelete.includes(field.name.value));
+                }
+            }
+        }
+    }
     const definitionsDocument = {
         kind: graphql_1.Kind.DOCUMENT,
         definitions: [
@@ -200,12 +238,13 @@ function buildSchemaFromDefinitionsAndExtensions({ typeDefinitionsMap, typeExten
             assumeValidSDL: true,
         });
     }
-    catch (e) { }
+    catch { }
     const extensionsDocument = {
         kind: graphql_1.Kind.DOCUMENT,
         definitions: Object.values(typeExtensionsMap).flat(),
     };
     errors.push(...(0, validate_1.validateSDL)(extensionsDocument, schema, rules_1.compositionRules));
+    errors = errors.filter((error, index, all) => all.findIndex(e => e.message === error.message) === index);
     try {
         schema = (0, graphql_1.extendSchema)(schema, extensionsDocument, {
             assumeValidSDL: true,