@graphql-box/connection-resolver 0.1.3 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/lib/browser/index.js +1 -1
  2. package/lib/browser/index.js.map +1 -1
  3. package/lib/browser/production.analysis.txt +29 -29
  4. package/lib/main/__testUtils__/generateCursorCache.js +2 -1
  5. package/lib/main/__testUtils__/generateCursorCache.js.map +1 -1
  6. package/lib/main/helpers/isCursorSupplied.js.map +1 -1
  7. package/lib/main/helpers/requestAndCachePages.js +2 -1
  8. package/lib/main/helpers/requestAndCachePages.js.map +1 -1
  9. package/lib/main/helpers/resolveConnection.js +2 -1
  10. package/lib/main/helpers/resolveConnection.js.map +1 -1
  11. package/lib/main/main/index.js +3 -2
  12. package/lib/main/main/index.js.map +1 -1
  13. package/lib/module/__testUtils__/generateCursorCache.js +2 -1
  14. package/lib/module/__testUtils__/generateCursorCache.js.map +1 -1
  15. package/lib/module/helpers/isCursorSupplied.js.map +1 -1
  16. package/lib/module/helpers/requestAndCachePages.js +5 -2
  17. package/lib/module/helpers/requestAndCachePages.js.map +1 -1
  18. package/lib/module/helpers/resolveConnection.js +5 -2
  19. package/lib/module/helpers/resolveConnection.js.map +1 -1
  20. package/lib/module/main/index.js +6 -3
  21. package/lib/module/main/index.js.map +1 -1
  22. package/lib/types/__testUtils__/generateCursorCache.d.ts.map +1 -1
  23. package/lib/types/defs/index.d.ts +25 -22
  24. package/lib/types/defs/index.d.ts.map +1 -1
  25. package/lib/types/helpers/extractNodes.d.ts +1 -1
  26. package/lib/types/helpers/isCursorSupplied.d.ts +2 -2
  27. package/lib/types/helpers/isCursorSupplied.d.ts.map +1 -1
  28. package/lib/types/helpers/requestAndCachePages.d.ts +7 -7
  29. package/lib/types/helpers/requestAndCachePages.d.ts.map +1 -1
  30. package/lib/types/helpers/resolveConnection.d.ts +7 -7
  31. package/lib/types/helpers/resolveConnection.d.ts.map +1 -1
  32. package/lib/types/main/index.d.ts +3 -3
  33. package/lib/types/main/index.d.ts.map +1 -1
  34. package/package-lock.json +18 -0
  35. package/package.json +1 -1
  36. package/src/__testUtils__/generateCursorCache.ts +1 -0
  37. package/src/defs/index.ts +43 -31
  38. package/src/helpers/getPageNumbersToRequest.test.ts +2 -2
  39. package/src/helpers/getStartAndEndIndexes.test.ts +10 -10
  40. package/src/helpers/isCursorSupplied.ts +2 -2
  41. package/src/helpers/requestAndCachePages.ts +8 -6
  42. package/src/helpers/resolveConnection.ts +17 -8
  43. package/src/helpers/retrieveCachedConnection.test.ts +32 -32
  44. package/src/helpers/validateCursor.test.ts +1 -0
  45. package/src/main/index.test.ts +37 -59
  46. package/src/main/index.ts +16 -8
@@ -11,7 +11,7 @@ describe("getPageNumbersToRequest", () => {
11
11
  entry: {
12
12
  group: "group",
13
13
  index: 2,
14
- node: {},
14
+ node: { id: "123" },
15
15
  page: 2,
16
16
  },
17
17
  metadata: {
@@ -35,7 +35,7 @@ describe("getPageNumbersToRequest", () => {
35
35
  entry: {
36
36
  group: "group",
37
37
  index: 3,
38
- node: {},
38
+ node: { id: "123" },
39
39
  page: 4,
40
40
  },
41
41
  metadata: {
@@ -11,7 +11,7 @@ describe("getStartIndex", () => {
11
11
  entry: {
12
12
  group: "qwerty",
13
13
  index: 5,
14
- node: {},
14
+ node: { id: "123" },
15
15
  page: 3,
16
16
  },
17
17
  metadata: {
@@ -35,7 +35,7 @@ describe("getStartIndex", () => {
35
35
  entry: {
36
36
  group: "qwerty",
37
37
  index: 3,
38
- node: {},
38
+ node: { id: "123" },
39
39
  page: 1,
40
40
  },
41
41
  metadata: {
@@ -58,7 +58,7 @@ describe("getStartIndex", () => {
58
58
  entry: {
59
59
  group: "qwerty",
60
60
  index: 4,
61
- node: {},
61
+ node: { id: "123" },
62
62
  page: 1,
63
63
  },
64
64
  metadata: {
@@ -82,7 +82,7 @@ describe("getStartIndex", () => {
82
82
  entry: {
83
83
  group: "qwerty",
84
84
  index: 7,
85
- node: {},
85
+ node: { id: "123" },
86
86
  page: 3,
87
87
  },
88
88
  metadata: {
@@ -105,7 +105,7 @@ describe("getStartIndex", () => {
105
105
  entry: {
106
106
  group: "qwerty",
107
107
  index: 4,
108
- node: {},
108
+ node: { id: "123" },
109
109
  page: 3,
110
110
  },
111
111
  metadata: {
@@ -132,7 +132,7 @@ describe("getEndIndex", () => {
132
132
  entry: {
133
133
  group: "qwerty",
134
134
  index: 5,
135
- node: {},
135
+ node: { id: "123" },
136
136
  page: 3,
137
137
  },
138
138
  metadata: {
@@ -156,7 +156,7 @@ describe("getEndIndex", () => {
156
156
  entry: {
157
157
  group: "qwerty",
158
158
  index: 2,
159
- node: {},
159
+ node: { id: "123" },
160
160
  page: 6,
161
161
  },
162
162
  metadata: {
@@ -179,7 +179,7 @@ describe("getEndIndex", () => {
179
179
  entry: {
180
180
  group: "qwerty",
181
181
  index: 2,
182
- node: {},
182
+ node: { id: "123" },
183
183
  page: 6,
184
184
  },
185
185
  metadata: {
@@ -203,7 +203,7 @@ describe("getEndIndex", () => {
203
203
  entry: {
204
204
  group: "qwerty",
205
205
  index: 2,
206
- node: {},
206
+ node: { id: "123" },
207
207
  page: 4,
208
208
  },
209
209
  metadata: {
@@ -226,7 +226,7 @@ describe("getEndIndex", () => {
226
226
  entry: {
227
227
  group: "qwerty",
228
228
  index: 2,
229
- node: {},
229
+ node: { id: "123" },
230
230
  page: 4,
231
231
  },
232
232
  metadata: {
@@ -1,3 +1,3 @@
1
- import { ConnectionInputOptions } from "../defs";
1
+ import { ConnectionInputOptions, PlainObject } from "../defs";
2
2
 
3
- export default ({ after, before }: Record<string, any> & ConnectionInputOptions) => !!(after || before);
3
+ export default ({ after, before }: PlainObject & ConnectionInputOptions) => !!(after || before);
@@ -1,19 +1,19 @@
1
1
  import Cachemap from "@cachemap/core";
2
- import { Getters, ResourceResolver } from "../defs";
2
+ import { Getters, Node, PlainObject, ResourceResolver } from "../defs";
3
3
  import cacheCursors from "./cacheCursors";
4
4
  import makeEdges from "./makeEdges";
5
5
 
6
- export type Context = {
6
+ export type Context<Resource extends PlainObject, ResourceNode extends Node> = {
7
7
  cursorCache: Cachemap;
8
- getters: Getters;
8
+ getters: Getters<Resource, ResourceNode>;
9
9
  groupCursor: string;
10
10
  makeIDCursor: (id: string | number) => string;
11
- resourceResolver: ResourceResolver;
11
+ resourceResolver: ResourceResolver<Resource>;
12
12
  };
13
13
 
14
- export default async (
14
+ const requestAndCachePages = async <Resource extends PlainObject, ResourceNode extends Node>(
15
15
  pages: number[],
16
- { cursorCache, getters, groupCursor, makeIDCursor, resourceResolver }: Context,
16
+ { cursorCache, getters, groupCursor, makeIDCursor, resourceResolver }: Context<Resource, ResourceNode>,
17
17
  ) => {
18
18
  const errors: Error[] = [];
19
19
 
@@ -48,3 +48,5 @@ export default async (
48
48
 
49
49
  return { cachedEdges, errors };
50
50
  };
51
+
52
+ export default requestAndCachePages;
@@ -1,5 +1,5 @@
1
1
  import Cachemap from "@cachemap/core";
2
- import { ConnectionInputOptions, Getters, ResourceResolver } from "../defs";
2
+ import { ConnectionInputOptions, Getters, Node, PlainObject, ResourceResolver } from "../defs";
3
3
  import extractEdges from "./extractEdges";
4
4
  import extractNodes from "./extractNodes";
5
5
  import getInRangeCachedEdges from "./getInRangeCachedEdges";
@@ -8,18 +8,25 @@ import mergeCachedEdges from "./mergeCachedEdges";
8
8
  import requestAndCachePages from "./requestAndCachePages";
9
9
  import retrieveCachedConnection from "./retrieveCachedConnection";
10
10
 
11
- export type Context = {
11
+ export type Context<Resource extends PlainObject, ResourceNode extends Node> = {
12
12
  cursorCache: Cachemap;
13
- getters: Getters;
13
+ getters: Getters<Resource, ResourceNode>;
14
14
  groupCursor: string;
15
15
  makeIDCursor: (id: string | number) => string;
16
- resourceResolver: ResourceResolver;
16
+ resourceResolver: ResourceResolver<Resource>;
17
17
  resultsPerPage: number;
18
18
  };
19
19
 
20
- export default async (
21
- args: Record<string, any> & ConnectionInputOptions,
22
- { cursorCache, getters, groupCursor, makeIDCursor, resourceResolver, resultsPerPage }: Context,
20
+ const resolveConnection = async <Resource extends PlainObject, ResourceNode extends Node>(
21
+ args: PlainObject & ConnectionInputOptions,
22
+ {
23
+ cursorCache,
24
+ getters,
25
+ groupCursor,
26
+ makeIDCursor,
27
+ resourceResolver,
28
+ resultsPerPage,
29
+ }: Context<Resource, ResourceNode>,
23
30
  ) => {
24
31
  const {
25
32
  cachedEdges,
@@ -51,7 +58,7 @@ export default async (
51
58
  };
52
59
  }
53
60
 
54
- const { cachedEdges: missingCachedEdges, errors } = await requestAndCachePages(missingPages, {
61
+ const { cachedEdges: missingCachedEdges, errors } = await requestAndCachePages<Resource, ResourceNode>(missingPages, {
55
62
  cursorCache,
56
63
  getters,
57
64
  groupCursor,
@@ -80,3 +87,5 @@ export default async (
80
87
  totalCount: totalResults,
81
88
  };
82
89
  };
90
+
91
+ export default resolveConnection;
@@ -30,8 +30,8 @@ describe("retrieveCachedConnection", () => {
30
30
 
31
31
  const edges = extractEdges(cachedEdges);
32
32
  expect(edges.length).toBe(5);
33
- expect(decode(edges[0].node.id.split("::")[0])).toBe("1::1");
34
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("5::1");
33
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("1::1");
34
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("5::1");
35
35
  expect(hasPreviousPage).toBe(true);
36
36
  expect(hasNextPage).toBe(true);
37
37
  expect(missingPages.length).toBe(0);
@@ -59,8 +59,8 @@ describe("retrieveCachedConnection", () => {
59
59
 
60
60
  const edges = extractEdges(cachedEdges);
61
61
  expect(edges.length).toBe(15);
62
- expect(decode(edges[0].node.id.split("::")[0])).toBe("6::1");
63
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("0::3");
62
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("6::1");
63
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("0::3");
64
64
  expect(hasPreviousPage).toBe(true);
65
65
  expect(hasNextPage).toBe(true);
66
66
  expect(missingPages.length).toBe(0);
@@ -88,8 +88,8 @@ describe("retrieveCachedConnection", () => {
88
88
 
89
89
  const edges = extractEdges(cachedEdges);
90
90
  expect(edges.length).toBe(9);
91
- expect(decode(edges[0].node.id.split("::")[0])).toBe("1::10");
92
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("9::10");
91
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("1::10");
92
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("9::10");
93
93
  expect(hasPreviousPage).toBe(true);
94
94
  expect(hasNextPage).toBe(false);
95
95
  expect(missingPages.length).toBe(0);
@@ -118,8 +118,8 @@ describe("retrieveCachedConnection", () => {
118
118
 
119
119
  const edges = extractEdges(cachedEdges);
120
120
  expect(edges.length).toBe(29);
121
- expect(decode(edges[0].node.id.split("::")[0])).toBe("1::8");
122
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("9::10");
121
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("1::8");
122
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("9::10");
123
123
  expect(hasPreviousPage).toBe(true);
124
124
  expect(hasNextPage).toBe(false);
125
125
  expect(missingPages.length).toBe(0);
@@ -147,8 +147,8 @@ describe("retrieveCachedConnection", () => {
147
147
 
148
148
  const edges = extractEdges(cachedEdges);
149
149
  expect(edges.length).toBe(25);
150
- expect(decode(edges[0].node.id.split("::")[0])).toBe("1::8");
151
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("5::10");
150
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("1::8");
151
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("5::10");
152
152
  expect(hasPreviousPage).toBe(true);
153
153
  expect(hasNextPage).toBe(false);
154
154
  expect(missingPages.length).toBe(0);
@@ -178,8 +178,8 @@ describe("retrieveCachedConnection", () => {
178
178
 
179
179
  const edges = extractEdges(cachedEdges);
180
180
  expect(edges.length).toBe(25);
181
- expect(decode(edges[0].node.id.split("::")[0])).toBe("1::8");
182
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("5::10");
181
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("1::8");
182
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("5::10");
183
183
  expect(hasPreviousPage).toBe(true);
184
184
  expect(hasNextPage).toBe(true);
185
185
  expect(missingPages.length).toBe(0);
@@ -207,8 +207,8 @@ describe("retrieveCachedConnection", () => {
207
207
 
208
208
  const edges = extractEdges(cachedEdges);
209
209
  expect(edges.length).toBe(25);
210
- expect(decode(edges[0].node.id.split("::")[0])).toBe("1::8");
211
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("5::10");
210
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("1::8");
211
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("5::10");
212
212
  expect(hasPreviousPage).toBe(true);
213
213
  expect(hasNextPage).toBe(false);
214
214
  expect(missingPages.length).toBe(0);
@@ -238,8 +238,8 @@ describe("retrieveCachedConnection", () => {
238
238
 
239
239
  const edges = extractEdges(cachedEdges);
240
240
  expect(edges.length).toBe(20);
241
- expect(decode(edges[0].node.id.split("::")[0])).toBe("0::8");
242
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("9::10");
241
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("0::8");
242
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("9::10");
243
243
  expect(hasPreviousPage).toBe(true);
244
244
  expect(hasNextPage).toBe(false);
245
245
  expect(missingPages.length).toBe(1);
@@ -268,8 +268,8 @@ describe("retrieveCachedConnection", () => {
268
268
 
269
269
  const edges = extractEdges(cachedEdges);
270
270
  expect(edges.length).toBe(20);
271
- expect(decode(edges[0].node.id.split("::")[0])).toBe("0::8");
272
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("9::10");
271
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("0::8");
272
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("9::10");
273
273
  expect(hasPreviousPage).toBe(true);
274
274
  expect(hasNextPage).toBe(true);
275
275
  expect(missingPages.length).toBe(1);
@@ -301,8 +301,8 @@ describe("retrieveCachedConnection", () => {
301
301
 
302
302
  const edges = extractEdges(cachedEdges);
303
303
  expect(edges.length).toBe(5);
304
- expect(decode(edges[0].node.id.split("::")[0])).toBe("4::10");
305
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("8::10");
304
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("4::10");
305
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("8::10");
306
306
  expect(hasPreviousPage).toBe(true);
307
307
  expect(hasNextPage).toBe(true);
308
308
  expect(missingPages.length).toBe(0);
@@ -330,8 +330,8 @@ describe("retrieveCachedConnection", () => {
330
330
 
331
331
  const edges = extractEdges(cachedEdges);
332
332
  expect(edges.length).toBe(15);
333
- expect(decode(edges[0].node.id.split("::")[0])).toBe("4::9");
334
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("8::10");
333
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("4::9");
334
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("8::10");
335
335
  expect(hasPreviousPage).toBe(true);
336
336
  expect(hasNextPage).toBe(true);
337
337
  expect(missingPages.length).toBe(0);
@@ -359,8 +359,8 @@ describe("retrieveCachedConnection", () => {
359
359
 
360
360
  const edges = extractEdges(cachedEdges);
361
361
  expect(edges.length).toBe(9);
362
- expect(decode(edges[0].node.id.split("::")[0])).toBe("0::1");
363
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("8::1");
362
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("0::1");
363
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("8::1");
364
364
  expect(hasPreviousPage).toBe(false);
365
365
  expect(hasNextPage).toBe(true);
366
366
  expect(missingPages.length).toBe(0);
@@ -388,8 +388,8 @@ describe("retrieveCachedConnection", () => {
388
388
 
389
389
  const edges = extractEdges(cachedEdges);
390
390
  expect(edges.length).toBe(27);
391
- expect(decode(edges[0].node.id.split("::")[0])).toBe("0::1");
392
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("6::3");
391
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("0::1");
392
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("6::3");
393
393
  expect(hasPreviousPage).toBe(false);
394
394
  expect(hasNextPage).toBe(true);
395
395
  expect(missingPages.length).toBe(0);
@@ -417,8 +417,8 @@ describe("retrieveCachedConnection", () => {
417
417
 
418
418
  const edges = extractEdges(cachedEdges);
419
419
  expect(edges.length).toBe(25);
420
- expect(decode(edges[0].node.id.split("::")[0])).toBe("2::1");
421
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("6::3");
420
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("2::1");
421
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("6::3");
422
422
  expect(hasPreviousPage).toBe(true);
423
423
  expect(hasNextPage).toBe(true);
424
424
  expect(missingPages.length).toBe(0);
@@ -447,8 +447,8 @@ describe("retrieveCachedConnection", () => {
447
447
 
448
448
  const edges = extractEdges(cachedEdges);
449
449
  expect(edges.length).toBe(20);
450
- expect(decode(edges[0].node.id.split("::")[0])).toBe("0::1");
451
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("9::3");
450
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("0::1");
451
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("9::3");
452
452
  expect(hasPreviousPage).toBe(false);
453
453
  expect(hasNextPage).toBe(true);
454
454
  expect(missingPages.length).toBe(1);
@@ -477,8 +477,8 @@ describe("retrieveCachedConnection", () => {
477
477
 
478
478
  const edges = extractEdges(cachedEdges);
479
479
  expect(edges.length).toBe(20);
480
- expect(decode(edges[0].node.id.split("::")[0])).toBe("0::1");
481
- expect(decode(edges[edges.length - 1].node.id.split("::")[0])).toBe("9::3");
480
+ expect(decode((edges[0].node.id as string).split("::")[0])).toBe("0::1");
481
+ expect(decode((edges[edges.length - 1].node.id as string).split("::")[0])).toBe("9::3");
482
482
  expect(hasPreviousPage).toBe(true);
483
483
  expect(hasNextPage).toBe(true);
484
484
  expect(missingPages.length).toBe(1);
@@ -8,6 +8,7 @@ describe("validateCursor", () => {
8
8
  cursorCache: new Cachemap({
9
9
  name: "GRAPHQL_BOX_CONNECTION_RESOLVER",
10
10
  store: map(),
11
+ type: "CONNECTION_RESOLVER",
11
12
  }),
12
13
  groupCursor: "abcdefg",
13
14
  resultsPerPage: 10,
@@ -5,31 +5,27 @@ import { encode } from "js-base64";
5
5
  import makeConnectionResolver from ".";
6
6
  import generateCursorCache from "../__testUtils__/generateCursorCache";
7
7
  import generatePageResponse from "../__testUtils__/generatePageResponse";
8
- import { Getters } from "../defs";
8
+ import { PlainObject } from "../defs";
9
9
  import removeConnectionInputOptions from "../helpers/removeConnectionInputOptions";
10
10
 
11
11
  describe("connectionResolver", () => {
12
- const createMakeCursors = (_source: Record<string, any>, args: Record<string, any>) => ({
12
+ const createMakeCursors = (_source: PlainObject, args: PlainObject) => ({
13
13
  makeGroupCursor: () => encode(JSON.stringify(removeConnectionInputOptions(args))),
14
14
  makeIDCursor: (id: string | number) => encode(`${id}::${JSON.stringify(removeConnectionInputOptions(args))}`),
15
15
  });
16
16
 
17
- const getters: Getters = {
18
- nodes: ({ results }) => results,
19
- page: ({ page }) => page,
20
- totalPages: ({ totalPages }) => totalPages,
21
- totalResults: ({ totalResults }) => totalResults,
17
+ const getters = {
18
+ nodes: ({ results }: PlainObject) => results,
19
+ page: ({ page }: PlainObject) => page,
20
+ totalPages: ({ totalPages }: PlainObject) => totalPages,
21
+ totalResults: ({ totalResults }: PlainObject) => totalResults,
22
22
  };
23
23
 
24
24
  const resultsPerPage = 10;
25
25
 
26
26
  describe("when a cursor is supplied", () => {
27
27
  test("when the cursor is invalid", async () => {
28
- const createResourceResolver = (
29
- _obj: Record<string, any>,
30
- args: Record<string, any>,
31
- { restClient }: Record<string, any>,
32
- ) => {
28
+ const createResourceResolver = (_obj: PlainObject, args: PlainObject, { restClient }: PlainObject) => {
33
29
  return async ({ page }: { page: number }) => restClient({ ...removeConnectionInputOptions(args), page });
34
30
  };
35
31
 
@@ -39,9 +35,9 @@ describe("connectionResolver", () => {
39
35
  cursorCache: new Cachemap({
40
36
  name: "GRAPHQL_BOX_CONNECTION_RESOLVER",
41
37
  store: map(),
38
+ type: "CONNECTION_RESOLVER",
42
39
  }),
43
40
  getters,
44
- resolver: result => result,
45
41
  resultsPerPage,
46
42
  });
47
43
 
@@ -57,11 +53,7 @@ describe("connectionResolver", () => {
57
53
  });
58
54
 
59
55
  test("when there are NO missing pages in the cache", async () => {
60
- const createResourceResolver = (
61
- _obj: Record<string, any>,
62
- args: Record<string, any>,
63
- { restClient }: Record<string, any>,
64
- ) => {
56
+ const createResourceResolver = (_obj: PlainObject, args: PlainObject, { restClient }: PlainObject) => {
65
57
  return async ({ page }: { page: number }) => restClient({ ...removeConnectionInputOptions(args), page });
66
58
  };
67
59
 
@@ -79,8 +71,7 @@ describe("connectionResolver", () => {
79
71
  createMakeCursors,
80
72
  createResourceResolver,
81
73
  cursorCache,
82
- getters: (getters as unknown) as Getters,
83
- resolver: result => result,
74
+ getters,
84
75
  resultsPerPage,
85
76
  });
86
77
 
@@ -99,9 +90,9 @@ describe("connectionResolver", () => {
99
90
  const mock = jest.fn().mockImplementation(page => pageResponse(page));
100
91
 
101
92
  const createResourceResolver = (
102
- _obj: Record<string, any>,
103
- _args: Record<string, any>,
104
- _context: Record<string, any>,
93
+ _obj: PlainObject,
94
+ _args: PlainObject,
95
+ _context: PlainObject,
105
96
  _info: GraphQLResolveInfo,
106
97
  ) => async ({ page }: { page: number }) => mock(page);
107
98
 
@@ -119,8 +110,7 @@ describe("connectionResolver", () => {
119
110
  createMakeCursors,
120
111
  createResourceResolver,
121
112
  cursorCache,
122
- getters: (getters as unknown) as Getters,
123
- resolver: result => result,
113
+ getters,
124
114
  resultsPerPage,
125
115
  });
126
116
 
@@ -139,11 +129,7 @@ describe("connectionResolver", () => {
139
129
 
140
130
  describe("when the first [X] number are requested", () => {
141
131
  test("when there is a fresh cache and there are NO missing pages in the cache", async () => {
142
- const createResourceResolver = (
143
- _obj: Record<string, any>,
144
- args: Record<string, any>,
145
- { restClient }: Record<string, any>,
146
- ) => {
132
+ const createResourceResolver = (_obj: PlainObject, args: PlainObject, { restClient }: PlainObject) => {
147
133
  return async ({ page }: { page: number }) => restClient({ ...removeConnectionInputOptions(args), page });
148
134
  };
149
135
 
@@ -161,8 +147,7 @@ describe("connectionResolver", () => {
161
147
  createMakeCursors,
162
148
  createResourceResolver,
163
149
  cursorCache,
164
- getters: (getters as unknown) as Getters,
165
- resolver: result => result,
150
+ getters,
166
151
  resultsPerPage,
167
152
  });
168
153
 
@@ -180,9 +165,9 @@ describe("connectionResolver", () => {
180
165
  const mock = jest.fn().mockImplementation(page => pageResponse(page));
181
166
 
182
167
  const createResourceResolver = (
183
- _obj: Record<string, any>,
184
- _args: Record<string, any>,
185
- _context: Record<string, any>,
168
+ _obj: PlainObject,
169
+ _args: PlainObject,
170
+ _context: PlainObject,
186
171
  _info: GraphQLResolveInfo,
187
172
  ) => async ({ page }: { page: number }) => mock(page);
188
173
 
@@ -200,8 +185,7 @@ describe("connectionResolver", () => {
200
185
  createMakeCursors,
201
186
  createResourceResolver,
202
187
  cursorCache,
203
- getters: (getters as unknown) as Getters,
204
- resolver: result => result,
188
+ getters,
205
189
  resultsPerPage,
206
190
  });
207
191
 
@@ -221,23 +205,23 @@ describe("connectionResolver", () => {
221
205
  const mock = jest.fn().mockImplementation(page => pageResponse(page));
222
206
 
223
207
  const createResourceResolver = (
224
- _obj: Record<string, any>,
225
- _args: Record<string, any>,
226
- _context: Record<string, any>,
208
+ _obj: PlainObject,
209
+ _args: PlainObject,
210
+ _context: PlainObject,
227
211
  _info: GraphQLResolveInfo,
228
212
  ) => async ({ page }: { page: number }) => mock(page);
229
213
 
230
214
  const cursorCache = new Cachemap({
231
215
  name: "cursorCache",
232
216
  store: map(),
217
+ type: "someType",
233
218
  });
234
219
 
235
220
  const connectionResolver = makeConnectionResolver({
236
221
  createMakeCursors,
237
222
  createResourceResolver,
238
223
  cursorCache,
239
- getters: (getters as unknown) as Getters,
240
- resolver: result => result,
224
+ getters,
241
225
  resultsPerPage,
242
226
  });
243
227
 
@@ -255,11 +239,7 @@ describe("connectionResolver", () => {
255
239
 
256
240
  describe("when the last [X] number are requested", () => {
257
241
  test("when there is a fresh cache and there are NO missing pages in the cache", async () => {
258
- const createResourceResolver = (
259
- _obj: Record<string, any>,
260
- args: Record<string, any>,
261
- { restClient }: Record<string, any>,
262
- ) => {
242
+ const createResourceResolver = (_obj: PlainObject, args: PlainObject, { restClient }: PlainObject) => {
263
243
  return async ({ page }: { page: number }) => restClient({ ...removeConnectionInputOptions(args), page });
264
244
  };
265
245
 
@@ -277,8 +257,7 @@ describe("connectionResolver", () => {
277
257
  createMakeCursors,
278
258
  createResourceResolver,
279
259
  cursorCache,
280
- getters: (getters as unknown) as Getters,
281
- resolver: result => result,
260
+ getters,
282
261
  resultsPerPage,
283
262
  });
284
263
 
@@ -296,9 +275,9 @@ describe("connectionResolver", () => {
296
275
  const mock = jest.fn().mockImplementation(page => pageResponse(page));
297
276
 
298
277
  const createResourceResolver = (
299
- _obj: Record<string, any>,
300
- _args: Record<string, any>,
301
- _context: Record<string, any>,
278
+ _obj: PlainObject,
279
+ _args: PlainObject,
280
+ _context: PlainObject,
302
281
  _info: GraphQLResolveInfo,
303
282
  ) => async ({ page }: { page: number }) => mock(page);
304
283
 
@@ -316,8 +295,7 @@ describe("connectionResolver", () => {
316
295
  createMakeCursors,
317
296
  createResourceResolver,
318
297
  cursorCache,
319
- getters: (getters as unknown) as Getters,
320
- resolver: result => result,
298
+ getters,
321
299
  resultsPerPage,
322
300
  });
323
301
 
@@ -337,23 +315,23 @@ describe("connectionResolver", () => {
337
315
  const mock = jest.fn().mockImplementation(page => pageResponse(page));
338
316
 
339
317
  const createResourceResolver = (
340
- _obj: Record<string, any>,
341
- _args: Record<string, any>,
342
- _context: Record<string, any>,
318
+ _obj: PlainObject,
319
+ _args: PlainObject,
320
+ _context: PlainObject,
343
321
  _info: GraphQLResolveInfo,
344
322
  ) => async ({ page }: { page: number }) => mock(page);
345
323
 
346
324
  const cursorCache = new Cachemap({
347
325
  name: "cursorCache",
348
326
  store: map(),
327
+ type: "someType",
349
328
  });
350
329
 
351
330
  const connectionResolver = makeConnectionResolver({
352
331
  createMakeCursors,
353
332
  createResourceResolver,
354
333
  cursorCache,
355
- getters: (getters as unknown) as Getters,
356
- resolver: result => result,
334
+ getters,
357
335
  resultsPerPage,
358
336
  });
359
337
 
package/src/main/index.ts CHANGED
@@ -1,21 +1,27 @@
1
1
  import { GraphQLResolveInfo } from "graphql";
2
- import { Connection, ConnectionInputOptions, ConnectionResolverUserOptions } from "../defs";
2
+ import { Connection, ConnectionInputOptions, ConnectionResolverUserOptions, Node, PlainObject } from "../defs";
3
3
  import isCursorSupplied from "../helpers/isCursorSupplied";
4
4
  import requestAndCachePages from "../helpers/requestAndCachePages";
5
5
  import resolveConnection from "../helpers/resolveConnection";
6
6
  import validateCursor from "../helpers/validateCursor";
7
7
 
8
- export default ({
8
+ const main = <
9
+ Source extends PlainObject,
10
+ Args extends PlainObject,
11
+ Ctx extends PlainObject,
12
+ Resource extends PlainObject,
13
+ ResourceNode extends Node
14
+ >({
9
15
  cursorCache,
10
16
  createMakeCursors,
11
17
  createResourceResolver,
12
18
  getters,
13
- resolver,
19
+ resolver = result => result,
14
20
  resultsPerPage,
15
- }: ConnectionResolverUserOptions) => async (
16
- source: Record<string, any>,
17
- args: Record<string, any> & ConnectionInputOptions,
18
- context: Record<string, any>,
21
+ }: ConnectionResolverUserOptions<Source, Args, Ctx, Resource, ResourceNode>) => async (
22
+ source: Source,
23
+ args: Args & ConnectionInputOptions,
24
+ context: Ctx,
19
25
  info: GraphQLResolveInfo,
20
26
  ): Promise<Connection> => {
21
27
  try {
@@ -68,7 +74,7 @@ export default ({
68
74
  );
69
75
  }
70
76
 
71
- await requestAndCachePages([1], {
77
+ await requestAndCachePages<Resource, ResourceNode>([1], {
72
78
  cursorCache,
73
79
  getters,
74
80
  groupCursor,
@@ -90,3 +96,5 @@ export default ({
90
96
  throw e;
91
97
  }
92
98
  };
99
+
100
+ export default main;