Skip to content

Commit 9ada140

Browse files
committed
refactor: replaceAliases should not be implemented in beforeQueryHelperLean, so explicitly call it in Lean resolvers
1 parent 8744532 commit 9ada140

File tree

5 files changed

+26
-30
lines changed

5 files changed

+26
-30
lines changed

src/resolvers/findByIdLean.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { Resolver, ObjectTypeComposer } from 'graphql-compose';
22
import type { Model, Document } from 'mongoose';
3-
import { projectionHelper, prepareAliases, prepareAliasesReverse } from './helpers';
3+
import { projectionHelper, prepareAliases, prepareAliasesReverse, replaceAliases } from './helpers';
44
import type { ExtendedResolveParams } from './index';
55
import { beforeQueryHelperLean } from './helpers/beforeQueryHelper';
66

@@ -29,14 +29,15 @@ export default function findByIdLean<TSource = Document, TContext = any>(
2929
args: {
3030
_id: 'MongoID!',
3131
},
32-
resolve: ((resolveParams: ExtendedResolveParams) => {
32+
resolve: (async (resolveParams: ExtendedResolveParams) => {
3333
const args = resolveParams.args || {};
3434

3535
if (args._id) {
3636
resolveParams.query = model.findById(args._id);
3737
resolveParams.model = model;
3838
projectionHelper(resolveParams, aliases);
39-
return beforeQueryHelperLean(resolveParams, aliasesReverse);
39+
const result = await beforeQueryHelperLean(resolveParams);
40+
return result && aliasesReverse ? replaceAliases(result, aliasesReverse) : result;
4041
}
4142
return Promise.resolve(null);
4243
}) as any,

src/resolvers/findByIdsLean.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
projectionHelper,
99
prepareAliases,
1010
prepareAliasesReverse,
11+
replaceAliases,
1112
} from './helpers';
1213
import type { ExtendedResolveParams, GenResolverOpts } from './index';
1314
import { beforeQueryHelperLean } from './helpers/beforeQueryHelper';
@@ -44,7 +45,7 @@ export default function findByIdsLean<TSource = Document, TContext = any>(
4445
...opts?.sort,
4546
}),
4647
},
47-
resolve: ((resolveParams: ExtendedResolveParams) => {
48+
resolve: (async (resolveParams: ExtendedResolveParams) => {
4849
const args = resolveParams.args || {};
4950

5051
if (!Array.isArray(args._ids) || args._ids.length === 0) {
@@ -60,7 +61,10 @@ export default function findByIdsLean<TSource = Document, TContext = any>(
6061
projectionHelper(resolveParams, aliases);
6162
limitHelper(resolveParams);
6263
sortHelper(resolveParams);
63-
return beforeQueryHelperLean(resolveParams, aliasesReverse) || [];
64+
const result = (await beforeQueryHelperLean(resolveParams)) || [];
65+
return Array.isArray(result) && aliasesReverse
66+
? result.map((r) => replaceAliases(r, aliasesReverse))
67+
: result;
6468
}) as any,
6569
}) as any;
6670
}

src/resolvers/findManyLean.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
projectionHelper,
1313
prepareAliases,
1414
prepareAliasesReverse,
15+
replaceAliases,
1516
} from './helpers';
1617
import type { ExtendedResolveParams, GenResolverOpts } from './index';
1718
import { beforeQueryHelperLean } from './helpers/beforeQueryHelper';
@@ -53,15 +54,18 @@ export default function findManyLean<TSource = Document, TContext = any>(
5354
...opts?.sort,
5455
}),
5556
},
56-
resolve: ((resolveParams: ExtendedResolveParams) => {
57+
resolve: (async (resolveParams: ExtendedResolveParams) => {
5758
resolveParams.query = model.find();
5859
resolveParams.model = model;
5960
filterHelper(resolveParams, aliases);
6061
skipHelper(resolveParams);
6162
limitHelper(resolveParams);
6263
sortHelper(resolveParams);
6364
projectionHelper(resolveParams, aliases);
64-
return beforeQueryHelperLean(resolveParams, aliasesReverse) || [];
65+
const result = (await beforeQueryHelperLean(resolveParams)) || [];
66+
return Array.isArray(result) && aliasesReverse
67+
? result.map((r) => replaceAliases(r, aliasesReverse))
68+
: result;
6569
}) as any,
6670
});
6771
}

src/resolvers/findOneLean.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
projectionHelper,
1111
prepareAliases,
1212
prepareAliasesReverse,
13+
replaceAliases,
1314
} from './helpers';
1415
import type { ExtendedResolveParams, GenResolverOpts } from './index';
1516
import { beforeQueryHelperLean } from './helpers/beforeQueryHelper';
@@ -48,14 +49,15 @@ export default function findOneLean<TSource = Document, TContext = any>(
4849
...opts?.sort,
4950
}),
5051
},
51-
resolve: ((resolveParams: ExtendedResolveParams) => {
52+
resolve: (async (resolveParams: ExtendedResolveParams) => {
5253
resolveParams.query = model.findOne({});
5354
resolveParams.model = model;
5455
filterHelper(resolveParams, aliases);
5556
skipHelper(resolveParams);
5657
sortHelper(resolveParams);
5758
projectionHelper(resolveParams, aliases);
58-
return beforeQueryHelperLean(resolveParams, aliasesReverse);
59+
const result = await beforeQueryHelperLean(resolveParams);
60+
return result && aliasesReverse ? replaceAliases(result, aliasesReverse) : result;
5961
}) as any,
6062
});
6163
}
Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { ExtendedResolveParams } from '../index';
2-
import { AliasesMap, replaceAliases } from './aliases';
32

43
export interface BeforeQueryHelperOpts {
54
useLean?: boolean;
@@ -20,32 +19,18 @@ export async function beforeQueryHelper(resolveParams: ExtendedResolveParams): P
2019
return result;
2120
}
2221

23-
export async function beforeQueryHelperLean(
24-
resolveParams: ExtendedResolveParams,
25-
reverseAliases: AliasesMap | false
26-
): Promise<any> {
22+
export async function beforeQueryHelperLean(resolveParams: ExtendedResolveParams): Promise<any> {
2723
if (!resolveParams.query || typeof resolveParams.query.lean !== 'function') {
2824
throw new Error('beforeQueryHelper: expected resolveParams.query to be instance of Query');
2925
}
3026

31-
let result;
3227
if (!resolveParams.beforeQuery) {
33-
result = await resolveParams.query.lean();
34-
} else {
35-
result = resolveParams.beforeQuery(resolveParams.query, resolveParams);
36-
if (result && typeof (result as any).lean === 'function') {
37-
result = await (result as any).lean();
38-
}
28+
return resolveParams.query.lean();
3929
}
4030

41-
if (reverseAliases && result) {
42-
// translate field aliases to match GraphQL field type
43-
if (Array.isArray(result)) {
44-
return result.map((d) => replaceAliases(d, reverseAliases));
45-
} else {
46-
return replaceAliases(result, reverseAliases);
47-
}
48-
} else {
49-
return result;
31+
const result = resolveParams.beforeQuery(resolveParams.query, resolveParams);
32+
if (result && typeof (result as any).lean === 'function') {
33+
return (result as any).lean();
5034
}
35+
return result;
5136
}

0 commit comments

Comments
 (0)