mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-04 03:43:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
const { unionType } = require('nexus');
 | 
						|
const { prop } = require('lodash/fp');
 | 
						|
 | 
						|
module.exports = ({ strapi, registry }) => {
 | 
						|
  const { naming } = strapi.plugin('graphql').service('utils');
 | 
						|
  const { KINDS, GENERIC_MORPH_TYPENAME } = strapi.plugin('graphql').service('constants');
 | 
						|
 | 
						|
  return {
 | 
						|
    buildGenericMorphDefinition() {
 | 
						|
      return unionType({
 | 
						|
        name: GENERIC_MORPH_TYPENAME,
 | 
						|
 | 
						|
        resolveType(obj) {
 | 
						|
          const contentType = strapi.getModel(obj.__type);
 | 
						|
 | 
						|
          if (!contentType) {
 | 
						|
            return null;
 | 
						|
          }
 | 
						|
 | 
						|
          if (contentType.modelType === 'component') {
 | 
						|
            return naming.getComponentName(contentType);
 | 
						|
          }
 | 
						|
 | 
						|
          return naming.getTypeName(contentType);
 | 
						|
        },
 | 
						|
 | 
						|
        definition(t) {
 | 
						|
          const members = registry
 | 
						|
            // Resolve every content-type or component
 | 
						|
            .where(({ config }) => [KINDS.type, KINDS.component].includes(config.kind))
 | 
						|
            // Only keep their name (the type's id)
 | 
						|
            .map(prop('name'));
 | 
						|
 | 
						|
          t.members(...members);
 | 
						|
        },
 | 
						|
      });
 | 
						|
    },
 | 
						|
  };
 | 
						|
};
 |