Skip to content

Commit 156c21f

Browse files
committed
refactor(DiscriminatorTC): change constructor on static method createFromModel.
This changes allows to create several schemas with several mongoose schemas in one node process with the same type names (multi-schema mode).
1 parent 0aa9b99 commit 156c21f

File tree

5 files changed

+55
-19
lines changed

5 files changed

+55
-19
lines changed

.babelrc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"env": {
77
"cjs": {
88
"plugins": [
9+
"transform-class-properties",
910
["transform-runtime", { "polyfill": false }]
1011
],
1112
"presets": [
@@ -17,6 +18,7 @@
1718
]
1819
},
1920
"mjs": {
21+
"plugins": ["transform-class-properties"],
2022
"presets": [
2123
[
2224
"env",
@@ -34,6 +36,7 @@
3436
},
3537
"node8": {
3638
"plugins": [
39+
"transform-class-properties",
3740
["transform-runtime", { "polyfill": false }]
3841
],
3942
"presets": [
@@ -47,6 +50,9 @@
4750
]
4851
},
4952
"test": {
53+
"plugins": [
54+
"transform-class-properties",
55+
],
5056
"presets": [
5157
["env", {
5258
"targets": {

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"babel-core": "^6.26.3",
4444
"babel-eslint": "^8.2.6",
4545
"babel-jest": "^23.4.0",
46+
"babel-plugin-transform-class-properties": "^6.24.1",
4647
"babel-plugin-transform-flow-strip-types": "^6.22.0",
4748
"babel-plugin-transform-object-rest-spread": "^6.13.0",
4849
"babel-plugin-transform-runtime": "^6.23.0",

src/composeWithMongooseDiscriminators.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ import { type Options, DiscriminatorTypeComposer } from './discriminators';
66
export function composeWithMongooseDiscriminators(
77
baseModel: Model,
88
opts?: Options
9-
): DiscriminatorTypeComposer {
10-
return new DiscriminatorTypeComposer(baseModel, opts);
9+
): DiscriminatorTypeComposer<any> {
10+
return DiscriminatorTypeComposer.createFromModel(baseModel, opts);
1111
}

src/discriminators/DiscriminatorTypeComposer.js

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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 {

yarn.lock

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,10 @@ babel-plugin-syntax-async-functions@^6.8.0:
718718
version "6.13.0"
719719
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
720720

721+
babel-plugin-syntax-class-properties@^6.8.0:
722+
version "6.13.0"
723+
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
724+
721725
babel-plugin-syntax-exponentiation-operator@^6.8.0:
722726
version "6.13.0"
723727
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
@@ -742,6 +746,15 @@ babel-plugin-transform-async-to-generator@^6.22.0:
742746
babel-plugin-syntax-async-functions "^6.8.0"
743747
babel-runtime "^6.22.0"
744748

749+
babel-plugin-transform-class-properties@^6.24.1:
750+
version "6.24.1"
751+
resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
752+
dependencies:
753+
babel-helper-function-name "^6.24.1"
754+
babel-plugin-syntax-class-properties "^6.8.0"
755+
babel-runtime "^6.22.0"
756+
babel-template "^6.24.1"
757+
745758
babel-plugin-transform-es2015-arrow-functions@^6.22.0:
746759
version "6.22.0"
747760
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"

0 commit comments

Comments
 (0)