Skip to content

Commit f67a39f

Browse files
committed
fix: refactor pagination & connection resolvers. Now they are using count & findMany resolver instances instead of getting them by string-name. Move them from peerDependencies to dependencies.
1 parent a8e4af2 commit f67a39f

File tree

5 files changed

+69
-123
lines changed

5 files changed

+69
-123
lines changed

package.json

+5-9
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424
},
2525
"homepage": "https://github.com/graphql-compose/graphql-compose-mongoose",
2626
"dependencies": {
27-
"dataloader": "^2.0.0"
28-
},
29-
"optionalDependencies": {
30-
"graphql-compose-connection": "^7.0.0",
31-
"graphql-compose-pagination": "^7.0.0"
27+
"dataloader": "^2.0.0",
28+
"graphql-compose-connection": "8.0.1",
29+
"graphql-compose-pagination": "8.0.1"
3230
},
3331
"peerDependencies": {
3432
"graphql-compose": "^7.21.1",
@@ -40,17 +38,15 @@
4038
"@types/mongoose": "5.7.36",
4139
"@typescript-eslint/eslint-plugin": "4.1.0",
4240
"@typescript-eslint/parser": "4.1.0",
43-
"eslint": "7.8.1",
41+
"eslint": "7.9.0",
4442
"eslint-config-airbnb-base": "14.2.0",
4543
"eslint-config-prettier": "6.11.0",
4644
"eslint-plugin-import": "2.22.0",
4745
"eslint-plugin-prettier": "3.1.4",
4846
"graphql": "15.3.0",
4947
"graphql-compose": "7.21.1",
50-
"graphql-compose-connection": "^7.0.0",
51-
"graphql-compose-pagination": "^7.0.0",
5248
"jest": "26.4.2",
53-
"mongodb-memory-server": "6.7.4",
49+
"mongodb-memory-server": "6.7.5",
5450
"mongoose": "5.10.5",
5551
"prettier": "2.1.1",
5652
"request": "2.88.2",

src/resolvers/__tests__/connection-test.ts

-9
Original file line numberDiff line numberDiff line change
@@ -148,15 +148,6 @@ describe('connection() resolver', () => {
148148
expect(resolver.getNestedName()).toEqual('connection');
149149
});
150150

151-
it('should return Resolver object with custom name', () => {
152-
const resolver = connection(UserModel, UserTC, {
153-
connectionResolverName: 'customConnection',
154-
} as any);
155-
if (!resolver) throw new Error('Connection resolver is undefined');
156-
expect(resolver).toBeInstanceOf(Resolver);
157-
expect(resolver.getNestedName()).toEqual('customConnection');
158-
});
159-
160151
it('Resolver object should have `filter` arg', () => {
161152
const resolver = connection(UserModel, UserTC);
162153
if (!resolver) throw new Error('Connection resolver is undefined');

src/resolvers/connection.ts

+23-54
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,27 @@
11
import type { Document, Model } from 'mongoose';
2-
import type { ConnectionSortMapOpts as _ConnectionSortMapOpts } from 'graphql-compose-connection';
3-
import type {
4-
Resolver,
5-
ObjectTypeComposer,
6-
ObjectTypeComposerFieldConfigMap,
7-
} from 'graphql-compose';
2+
import {
3+
prepareConnectionResolver,
4+
ConnectionResolverOpts as _ConnectionResolverOpts,
5+
ConnectionTArgs,
6+
} from 'graphql-compose-connection';
7+
import type { Resolver, ObjectTypeComposer } from 'graphql-compose';
8+
import { CountResolverOpts, count } from './count';
9+
import { FindManyResolverOpts, findMany } from './findMany';
810
import { getUniqueIndexes, extendByReversedIndexes, IndexT } from '../utils/getIndexesFromModel';
911

10-
export type ConnectionResolverOpts<TContext = any> = _ConnectionSortMapOpts & {
11-
edgeFields?: ObjectTypeComposerFieldConfigMap<any, TContext>;
12-
connectionResolverName?: string;
13-
findResolverName?: string;
14-
countResolverName?: string;
15-
edgeTypeName?: string;
16-
};
17-
18-
type TArgs = {
19-
first?: number;
20-
after?: string;
21-
last?: number;
22-
before?: string;
23-
filter?: any;
24-
sort?: Record<string, any>;
12+
export type ConnectionResolverOpts<TContext = any> = Omit<
13+
_ConnectionResolverOpts<TContext>,
14+
'countResolver' | 'findManyResolver'
15+
> & {
16+
countOpts?: CountResolverOpts;
17+
findManyOpts?: FindManyResolverOpts;
2518
};
2619

2720
export function connection<TSource = any, TContext = any, TDoc extends Document = any>(
2821
model: Model<TDoc>,
2922
tc: ObjectTypeComposer<TDoc, TContext>,
3023
opts?: ConnectionResolverOpts<TContext>
31-
): Resolver<TSource, TContext, TArgs, TDoc> | undefined {
32-
try {
33-
require.resolve('graphql-compose-connection');
34-
} catch (e) {
35-
return undefined;
36-
}
37-
// eslint-disable-next-line @typescript-eslint/no-var-requires
38-
const prepareConnectionResolver = require('graphql-compose-connection').prepareConnectionResolver;
39-
40-
if (!prepareConnectionResolver) {
41-
throw new Error(
42-
'You should update `graphql-compose-connection` package till 3.2.0 version or above'
43-
);
44-
}
45-
24+
): Resolver<TSource, TContext, ConnectionTArgs, TDoc> | undefined {
4625
const uniqueIndexes = extendByReversedIndexes(getUniqueIndexes(model), {
4726
reversedFirst: true,
4827
});
@@ -69,24 +48,14 @@ export function connection<TSource = any, TContext = any, TDoc extends Document
6948
},
7049
};
7150
});
72-
const {
73-
connectionResolverName = 'connection',
74-
findResolverName = 'findMany',
75-
countResolverName = 'count',
76-
edgeFields,
77-
edgeTypeName,
78-
...sortOptions
79-
} = opts || {};
80-
return prepareConnectionResolver(tc, {
81-
connectionResolverName,
82-
findResolverName,
83-
countResolverName,
84-
sort: {
85-
...sortConfigs,
86-
...sortOptions,
87-
},
88-
edgeFields,
89-
edgeTypeName,
51+
52+
const { findManyOpts, countOpts, ...restOpts } = opts || {};
53+
54+
return prepareConnectionResolver<any, any>(tc, {
55+
findManyResolver: findMany(model, tc, findManyOpts),
56+
countResolver: count(model, tc, countOpts),
57+
sort: sortConfigs,
58+
...restOpts,
9059
});
9160
}
9261

src/resolvers/pagination.ts

+20-30
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,31 @@
11
import type { Resolver, ObjectTypeComposer } from 'graphql-compose';
22
import type { Model, Document } from 'mongoose';
3+
import {
4+
preparePaginationResolver,
5+
PaginationTArgs,
6+
PaginationResolverOpts as _PaginationResolverOpts,
7+
} from 'graphql-compose-pagination';
8+
import { CountResolverOpts, count } from './count';
9+
import { FindManyResolverOpts, findMany } from './findMany';
310

4-
export type PaginationResolverOpts = {
5-
perPage?: number;
6-
};
7-
8-
type TArgs = {
9-
page?: number;
10-
perPage?: number;
11-
filter?: any;
12-
sort?: Record<string, any>;
11+
export type PaginationResolverOpts = Omit<
12+
_PaginationResolverOpts,
13+
'countResolver' | 'findManyResolver'
14+
> & {
15+
countOpts?: CountResolverOpts;
16+
findManyOpts?: FindManyResolverOpts;
1317
};
1418

1519
export function pagination<TSource = any, TContext = any, TDoc extends Document = any>(
16-
_model: Model<TDoc>,
20+
model: Model<TDoc>,
1721
tc: ObjectTypeComposer<TDoc, TContext>,
1822
opts?: PaginationResolverOpts
19-
): Resolver<TSource, TContext, TArgs, TDoc> | undefined {
20-
try {
21-
require.resolve('graphql-compose-pagination');
22-
} catch (e) {
23-
return undefined;
24-
}
25-
// eslint-disable-next-line @typescript-eslint/no-var-requires
26-
const preparePaginationResolver = require('graphql-compose-pagination').preparePaginationResolver;
27-
28-
if (!preparePaginationResolver) {
29-
throw new Error(
30-
'You should update `graphql-compose-pagination` package till 3.3.0 version or above'
31-
);
32-
}
33-
34-
const resolver = preparePaginationResolver(tc, {
35-
findResolverName: 'findMany',
36-
countResolverName: 'count',
37-
...opts,
23+
): Resolver<TSource, TContext, PaginationTArgs, TDoc> {
24+
const { countOpts, findManyOpts, ...restOpts } = opts || {};
25+
const resolver = preparePaginationResolver<any, any>(tc, {
26+
findManyResolver: findMany(model, tc, findManyOpts),
27+
countResolver: count(model, tc, countOpts),
28+
...restOpts,
3829
});
39-
4030
return resolver;
4131
}

yarn.lock

+21-21
Original file line numberDiff line numberDiff line change
@@ -2513,10 +2513,10 @@ eslint-visitor-keys@^2.0.0:
25132513
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
25142514
integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
25152515

2516-
eslint@7.8.1:
2517-
version "7.8.1"
2518-
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.8.1.tgz#e59de3573fb6a5be8ff526c791571646d124a8fa"
2519-
integrity sha512-/2rX2pfhyUG0y+A123d0ccXtMm7DV7sH1m3lk9nk2DZ2LReq39FXHueR9xZwshE5MdfSf0xunSaMWRqyIA6M1w==
2516+
eslint@7.9.0:
2517+
version "7.9.0"
2518+
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.9.0.tgz#522aeccc5c3a19017cf0cb46ebfd660a79acf337"
2519+
integrity sha512-V6QyhX21+uXp4T+3nrNfI3hQNBDa/P8ga7LoQOenwrlEFXrEnUEE+ok1dMtaS3b6rmLXhT1TkTIsG75HMLbknA==
25202520
dependencies:
25212521
"@babel/code-frame" "^7.0.0"
25222522
"@eslint/eslintrc" "^0.1.3"
@@ -3169,15 +3169,15 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6
31693169
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
31703170
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
31713171

3172-
graphql-compose-connection@^7.0.0:
3173-
version "7.0.1"
3174-
resolved "https://registry.yarnpkg.com/graphql-compose-connection/-/graphql-compose-connection-7.0.1.tgz#fd7be1e4dfa0b42e8aa22335bef4d9679d87a6fb"
3175-
integrity sha512-RYk1MkH5KisSWJCjk7AClI1y8qvkTYvEC5QnZdgduku0uqiEkwDSXz4lgGVfua6v/y/h/SHtxnna/nu/ZocyTg==
3172+
graphql-compose-connection@8.0.1:
3173+
version "8.0.1"
3174+
resolved "https://registry.yarnpkg.com/graphql-compose-connection/-/graphql-compose-connection-8.0.1.tgz#6416ead781108a6628c542908f43cf89d3200222"
3175+
integrity sha512-VBEdtzEp862TlV/uf7GDVYI0wwfTQAQlDXIZVl9IlYO5BcDD94kaPcrTuzQ/j991G09vx2ebqLu2zRI3uLZ7kg==
31763176

3177-
graphql-compose-pagination@^7.0.0:
3178-
version "7.0.0"
3179-
resolved "https://registry.yarnpkg.com/graphql-compose-pagination/-/graphql-compose-pagination-7.0.0.tgz#81edf2327416d10f237a3f1ff67990899a37b017"
3180-
integrity sha512-Rak7Dmkb5U4Kio+FgWSucVFho2xxRyCI+kNcZWhxJRVfZusw+VuhjkvxPUiKTiFEb+DtTrXUeetWT24plcC0fg==
3177+
graphql-compose-pagination@8.0.1:
3178+
version "8.0.1"
3179+
resolved "https://registry.yarnpkg.com/graphql-compose-pagination/-/graphql-compose-pagination-8.0.1.tgz#785c4c83dec5c81dee7ce5baee71cdf5b7a55240"
3180+
integrity sha512-DxFVSFS9fuDdVOCUz6sr8r1wwwFytUUQ6a2ihQAEdXx7a7p3ZC797RWHdprnnKtLPrioHIIWPCbIoyn4c4kVgQ==
31813181

31823182
31833183
version "7.21.1"
@@ -5038,10 +5038,10 @@ modify-values@^1.0.0:
50385038
resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
50395039
integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
50405040

5041-
5042-
version "6.7.4"
5043-
resolved "https://registry.yarnpkg.com/mongodb-memory-server-core/-/mongodb-memory-server-core-6.7.4.tgz#5870e92451433d5d47ed4510e97dca8b7507786b"
5044-
integrity sha512-jvlx5+OUpJOagSyQXHHH/HhT63cJtdN5yruvSrjQ5Ivfq1lITI7fq6vTxZe4USlGoygqQiJN+MX8b1JYX2sLnw==
5041+
5042+
version "6.7.5"
5043+
resolved "https://registry.yarnpkg.com/mongodb-memory-server-core/-/mongodb-memory-server-core-6.7.5.tgz#f3fd1e517e8f798af8a93bb1d37a6cd0b04e7427"
5044+
integrity sha512-G4Wv1MAQg5B/aXpRwD5jy6Ubspcd7w4LsFl+rYJHhUgj8VMZGa4hX1pcEW26ghaw7gm24YsyXwDezHZPtxijKA==
50455045
dependencies:
50465046
"@types/tmp" "^0.2.0"
50475047
camelcase "^6.0.0"
@@ -5062,12 +5062,12 @@ [email protected]:
50625062
optionalDependencies:
50635063
mongodb "3.6.2"
50645064

5065-
5066-
version "6.7.4"
5067-
resolved "https://registry.yarnpkg.com/mongodb-memory-server/-/mongodb-memory-server-6.7.4.tgz#d34edbbd0fc8c9728260d4ae9d5178feab5f30df"
5068-
integrity sha512-VucLjrv6PBzmz36KlReBv62uPg4JkAywHvDHUXO/LXtAroWcH7HjECbCSTlwJIhGwpWcoeuZstlsrgu2btsn7A==
5065+
5066+
version "6.7.5"
5067+
resolved "https://registry.yarnpkg.com/mongodb-memory-server/-/mongodb-memory-server-6.7.5.tgz#3eb4033bba56bd1822b73f581e0badc12af05401"
5068+
integrity sha512-Ws4IRrFqCEoD27jzFHfST9lXyrgDddpLXcoQ7B0S4Sc5v3N5tpchmvueuZ0BMj4bwwBJlWl64nXNgCoooYvupw==
50695069
dependencies:
5070-
mongodb-memory-server-core "6.7.4"
5070+
mongodb-memory-server-core "6.7.5"
50715071

50725072
50735073
version "3.6.2"

0 commit comments

Comments
 (0)