Skip to content

Commit aaa59a7

Browse files
authored
fix(aliases): Consider aliases from discriminators during preparation (#253)
1 parent e22c490 commit aaa59a7

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

src/resolvers/helpers/__tests__/aliases-test.ts

+38
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,43 @@ describe('Resolver helper `alises` ->', () => {
2525
const aliases = prepareAliases(User);
2626
expect(aliases).toEqual(false);
2727
});
28+
29+
it('should extract field aliases from discriminator Models', () => {
30+
const UserSchema = new mongoose.Schema({
31+
e: {
32+
type: String,
33+
alias: 'emailAddress',
34+
},
35+
});
36+
const User = mongoose.model('User111', UserSchema);
37+
const VIPUserSchema = new mongoose.Schema({
38+
f: {
39+
type: Number,
40+
alias: 'freeDrinks',
41+
},
42+
});
43+
User.discriminator('VIPUser111', VIPUserSchema);
44+
const aliases = prepareAliases(User);
45+
expect(aliases).toEqual({ emailAddress: 'e', freeDrinks: 'f' });
46+
});
47+
48+
it('should extract field aliases in discriminator Models inherited from base Model', () => {
49+
const UserSchema = new mongoose.Schema({
50+
e: {
51+
type: String,
52+
alias: 'emailAddress',
53+
},
54+
});
55+
const User = mongoose.model('User789', UserSchema);
56+
const VIPUserSchema = new mongoose.Schema({
57+
f: {
58+
type: Number,
59+
alias: 'freeDrinks',
60+
},
61+
});
62+
const VIPUser = User.discriminator('VIPUser789', VIPUserSchema);
63+
const aliases = prepareAliases(VIPUser);
64+
expect(aliases).toEqual({ emailAddress: 'e', freeDrinks: 'f' });
65+
});
2866
});
2967
});

src/resolvers/helpers/aliases.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,14 @@ export type AliasesMap = {
55
};
66

77
export function prepareAliases(model: Model<any>): AliasesMap | false {
8-
const aliases = (model?.schema as any)?.aliases;
8+
const aliases = (model?.schema as any)?.aliases || {};
9+
10+
if (model.discriminators) {
11+
Object.keys(model.discriminators).forEach((subModelName: string) => {
12+
const submodel: Model<any> = (model.discriminators as any)[subModelName];
13+
Object.assign(aliases, (submodel?.schema as any)?.aliases);
14+
});
15+
}
916
if (Object.keys(aliases).length > 0) {
1017
return aliases;
1118
}

0 commit comments

Comments
 (0)