@@ -104,15 +104,29 @@ export class DiscriminatorTypeComposer extends TypeComposer {
104104
105105 DKeyETC : EnumTypeComposer ;
106106
107- schemaComposer : SchemaComposer < any > ;
108-
109107 opts : Options ;
110108
111109 DInterface : GraphQLInterfaceType ;
112110
113111 childTCs : TypeComposer [ ] ;
112+ static _getClassConnectedWithSchemaComposer (
113+ sc ?: SchemaComposer < TContext >
114+ ) : Class < DiscriminatorTypeComposer < TContext >> {
115+ class _DiscriminatorTypeComposer extends DiscriminatorTypeComposer< TContext > {
116+ static schemaComposer = sc || schemaComposer ;
117+ }
118+
119+ return _DiscriminatorTypeComposer ;
120+ }
114121
115- constructor ( baseModel : Model , opts ?: any ) {
122+ /* ::
123+ constructor(gqType: any): DiscriminatorTypeComposer<TContext> {
124+ super(gqType);
125+ return this;
126+ }
127+ */
128+
129+ static createFromModel ( baseModel : Model , opts ? : any ) : DiscriminatorTypeComposer < TContext > {
116130 if ( ! baseModel || ! ( baseModel : any ) . discriminators ) {
117131 throw Error ( 'Discriminator Key not Set, Use composeWithMongoose for Normal Collections' ) ;
118132 }
@@ -125,29 +139,31 @@ export class DiscriminatorTypeComposer extends TypeComposer {
125139 ...opts ,
126140 } ;
127141
128- super ( composeWithMongoose ( baseModel , opts . customizationOptions ) . gqType ) ;
129-
130- this . opts = opts ;
131- this . childTCs = [ ] ;
132- this . discriminatorKey = ( baseModel : any ) . schema . get ( 'discriminatorKey' ) || '__t' ;
142+ const baseTC = composeWithMongoose ( baseModel , opts . customizationOptions ) ;
133143
134- this . schemaComposer =
144+ const _DiscriminatorTypeComposer = this . _getClassConnectedWithSchemaComposer (
135145 opts . customizationOptions && opts . customizationOptions . schemaComposer
136- ? opts . customizationOptions . schemaComposer
137- : schemaComposer ;
146+ ) ;
147+ const baseDTC = new _DiscriminatorTypeComposer ( baseTC . getType ( ) ) ;
148+
149+ baseDTC . opts = opts ;
150+ baseDTC . childTCs = [ ] ;
151+ baseDTC . discriminatorKey = ( baseModel : any ) . schema . get ( 'discriminatorKey' ) || '__t' ;
138152
139153 // discriminators an object containing all discriminators with key being DNames
140- this . DKeyETC = createAndSetDKeyETC ( this , ( baseModel : any ) . discriminators ) ;
154+ baseDTC . DKeyETC = createAndSetDKeyETC ( baseDTC , ( baseModel : any ) . discriminators ) ;
141155
142- reorderFields ( this , ( this . opts : any ) . reorderFields , this . discriminatorKey ) ;
156+ reorderFields ( baseDTC , ( baseDTC . opts : any ) . reorderFields , baseDTC . discriminatorKey ) ;
143157
144- this . DInterface = createDInterface ( this ) ;
145- this . setInterfaces ( [ this . DInterface ] ) ;
158+ baseDTC . DInterface = createDInterface ( baseDTC ) ;
159+ baseDTC . setInterfaces ( [ baseDTC . DInterface ] ) ;
146160
147- this . schemaComposer . addSchemaMustHaveType ( this ) ;
161+ baseDTC . schemaComposer . addSchemaMustHaveType ( baseDTC ) ;
148162
149163 // prepare Base Resolvers
150- prepareBaseResolvers ( this ) ;
164+ prepareBaseResolvers ( baseDTC ) ;
165+
166+ return baseDTC ;
151167 }
152168
153169 getDKey ( ) : string {
0 commit comments