@graphql-box/connection-resolver 0.1.4 → 0.1.8
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.
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/production.analysis.txt +18 -18
- package/lib/main/__testUtils__/generateCursorCache.js +2 -1
- package/lib/main/__testUtils__/generateCursorCache.js.map +1 -1
- package/lib/main/helpers/requestAndCachePages.js +2 -1
- package/lib/main/helpers/requestAndCachePages.js.map +1 -1
- package/lib/main/helpers/resolveConnection.js +2 -1
- package/lib/main/helpers/resolveConnection.js.map +1 -1
- package/lib/main/main/index.js +2 -1
- package/lib/main/main/index.js.map +1 -1
- package/lib/module/__testUtils__/generateCursorCache.js +2 -1
- package/lib/module/__testUtils__/generateCursorCache.js.map +1 -1
- package/lib/module/helpers/requestAndCachePages.js +5 -2
- package/lib/module/helpers/requestAndCachePages.js.map +1 -1
- package/lib/module/helpers/resolveConnection.js +5 -2
- package/lib/module/helpers/resolveConnection.js.map +1 -1
- package/lib/module/main/index.js +5 -2
- package/lib/module/main/index.js.map +1 -1
- package/lib/types/__testUtils__/generateCursorCache.d.ts.map +1 -1
- package/lib/types/defs/index.d.ts +15 -15
- package/lib/types/defs/index.d.ts.map +1 -1
- package/lib/types/helpers/requestAndCachePages.d.ts +7 -7
- package/lib/types/helpers/requestAndCachePages.d.ts.map +1 -1
- package/lib/types/helpers/resolveConnection.d.ts +7 -7
- package/lib/types/helpers/resolveConnection.d.ts.map +1 -1
- package/lib/types/main/index.d.ts +3 -3
- package/lib/types/main/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__testUtils__/generateCursorCache.ts +1 -0
- package/src/defs/index.ts +31 -23
- package/src/helpers/requestAndCachePages.ts +8 -6
- package/src/helpers/resolveConnection.ts +16 -7
- package/src/helpers/retrieveCachedConnection.test.ts +32 -32
- package/src/helpers/validateCursor.test.ts +1 -0
- package/src/main/index.test.ts +9 -6
- package/src/main/index.ts +15 -7
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/main/index.ts"],"names":["isCursorSupplied","requestAndCachePages","resolveConnection","validateCursor","cursorCache","createMakeCursors","createResourceResolver","getters","resolver","result","resultsPerPage","source","args","context","info","makeGroupCursor","makeIDCursor","resourceResolver","groupCursor","cursorError","edges","errors","nodes","pageInfo","hasNextPage","hasPreviousPage","totalCount","has","e"],"mappings":";AAEA,OAAOA,gBAAP,MAA6B,6BAA7B;AACA,OAAOC,oBAAP,MAAiC,iCAAjC;AACA,OAAOC,iBAAP,MAA8B,8BAA9B;AACA,OAAOC,cAAP,MAA2B,2BAA3B
|
1
|
+
{"version":3,"sources":["../../../src/main/index.ts"],"names":["isCursorSupplied","requestAndCachePages","resolveConnection","validateCursor","main","cursorCache","createMakeCursors","createResourceResolver","getters","resolver","result","resultsPerPage","source","args","context","info","makeGroupCursor","makeIDCursor","resourceResolver","groupCursor","cursorError","edges","errors","nodes","pageInfo","hasNextPage","hasPreviousPage","totalCount","has","e"],"mappings":";AAEA,OAAOA,gBAAP,MAA6B,6BAA7B;AACA,OAAOC,oBAAP,MAAiC,iCAAjC;AACA,OAAOC,iBAAP,MAA8B,8BAA9B;AACA,OAAOC,cAAP,MAA2B,2BAA3B;;AAEA,MAAMC,IAAI,GAAG,CAMX;AACAC,EAAAA,WADA;AAEAC,EAAAA,iBAFA;AAGAC,EAAAA,sBAHA;AAIAC,EAAAA,OAJA;AAKAC,EAAAA,QAAQ,GAAGC,MAAM,IAAIA,MALrB;AAMAC,EAAAA;AANA,CANW,KAamE,OAC9EC,MAD8E,EAE9EC,IAF8E,EAG9EC,OAH8E,EAI9EC,IAJ8E,KAKtD;AACxB,MAAI;AACF,UAAM;AAAEC,MAAAA,eAAF;AAAmBC,MAAAA;AAAnB,QAAoCX,iBAAiB,CAACM,MAAD,EAASC,IAAT,EAAeC,OAAf,EAAwBC,IAAxB,CAA3D;AACA,UAAMG,gBAAgB,GAAGX,sBAAsB,CAACK,MAAD,EAASC,IAAT,EAAeC,OAAf,EAAwBC,IAAxB,CAA/C;AACA,UAAMI,WAAW,GAAGH,eAAe,EAAnC;;AAEA,QAAIhB,gBAAgB,CAACa,IAAD,CAApB,EAA4B;AAC1B,YAAMO,WAAW,GAAG,MAAMjB,cAAc,CAACU,IAAD,EAAOE,IAAP,EAAa;AACnDV,QAAAA,WADmD;AAEnDc,QAAAA,WAFmD;AAGnDR,QAAAA;AAHmD,OAAb,CAAxC;;AAMA,UAAIS,WAAJ,EAAiB;AACf,eAAOX,QAAQ,CAAC;AACdY,UAAAA,KAAK,EAAE,EADO;AAEdC,UAAAA,MAAM,EAAE,CAACF,WAAD,CAFM;AAGdG,UAAAA,KAAK,EAAE,EAHO;AAIdC,UAAAA,QAAQ,EAAE;AACRC,YAAAA,WAAW,EAAE,KADL;AAERC,YAAAA,eAAe,EAAE;AAFT,WAJI;AAQdC,UAAAA,UAAU,EAAE;AARE,SAAD,CAAf;AAUD;;AAED,aAAOlB,QAAQ,CACb,MAAMP,iBAAiB,CAACW,IAAD,EAAO;AAC5BR,QAAAA,WAD4B;AAE5BG,QAAAA,OAF4B;AAG5BW,QAAAA,WAH4B;AAI5BF,QAAAA,YAJ4B;AAK5BC,QAAAA,gBAL4B;AAM5BP,QAAAA;AAN4B,OAAP,CADV,CAAf;AAUD;;AAED,QAAI,MAAMN,WAAW,CAACuB,GAAZ,CAAiB,GAAET,WAAY,WAA/B,CAAV,EAAsD;AACpD,aAAOV,QAAQ,CACb,MAAMP,iBAAiB,CAACW,IAAD,EAAO;AAC5BR,QAAAA,WAD4B;AAE5BG,QAAAA,OAF4B;AAG5BW,QAAAA,WAH4B;AAI5BF,QAAAA,YAJ4B;AAK5BC,QAAAA,gBAL4B;AAM5BP,QAAAA;AAN4B,OAAP,CADV,CAAf;AAUD;;AAED,UAAMV,oBAAoB,CAAyB,CAAC,CAAD,CAAzB,EAA8B;AACtDI,MAAAA,WADsD;AAEtDG,MAAAA,OAFsD;AAGtDW,MAAAA,WAHsD;AAItDF,MAAAA,YAJsD;AAKtDC,MAAAA;AALsD,KAA9B,CAA1B;AAQA,WAAOT,QAAQ,CACb,MAAMP,iBAAiB,CAACW,IAAD,EAAO;AAC5BR,MAAAA,WAD4B;AAE5BG,MAAAA,OAF4B;AAG5BW,MAAAA,WAH4B;AAI5BF,MAAAA,YAJ4B;AAK5BC,MAAAA,gBAL4B;AAM5BP,MAAAA;AAN4B,KAAP,CADV,CAAf;AAUD,GApED,CAoEE,OAAOkB,CAAP,EAAU;AACV,UAAMA,CAAN;AACD;AACF,CA1FD;;AA4FA,eAAezB,IAAf","sourcesContent":["import { GraphQLResolveInfo } from \"graphql\";\nimport { Connection, ConnectionInputOptions, ConnectionResolverUserOptions, Node, PlainObject } from \"../defs\";\nimport isCursorSupplied from \"../helpers/isCursorSupplied\";\nimport requestAndCachePages from \"../helpers/requestAndCachePages\";\nimport resolveConnection from \"../helpers/resolveConnection\";\nimport validateCursor from \"../helpers/validateCursor\";\n\nconst main = <\n Source extends PlainObject | undefined,\n Args extends PlainObject,\n Ctx extends PlainObject,\n Resource extends PlainObject,\n ResourceNode extends Node\n>({\n cursorCache,\n createMakeCursors,\n createResourceResolver,\n getters,\n resolver = result => result,\n resultsPerPage,\n}: ConnectionResolverUserOptions<Source, Args, Ctx, Resource, ResourceNode>) => async (\n source: Source,\n args: Args & ConnectionInputOptions,\n context: Ctx,\n info: GraphQLResolveInfo,\n): Promise<Connection> => {\n try {\n const { makeGroupCursor, makeIDCursor } = createMakeCursors(source, args, context, info);\n const resourceResolver = createResourceResolver(source, args, context, info);\n const groupCursor = makeGroupCursor();\n\n if (isCursorSupplied(args)) {\n const cursorError = await validateCursor(args, info, {\n cursorCache,\n groupCursor,\n resultsPerPage,\n });\n\n if (cursorError) {\n return resolver({\n edges: [],\n errors: [cursorError],\n nodes: [],\n pageInfo: {\n hasNextPage: false,\n hasPreviousPage: false,\n },\n totalCount: 0,\n });\n }\n\n return resolver(\n await resolveConnection(args, {\n cursorCache,\n getters,\n groupCursor,\n makeIDCursor,\n resourceResolver,\n resultsPerPage,\n }),\n );\n }\n\n if (await cursorCache.has(`${groupCursor}-metadata`)) {\n return resolver(\n await resolveConnection(args, {\n cursorCache,\n getters,\n groupCursor,\n makeIDCursor,\n resourceResolver,\n resultsPerPage,\n }),\n );\n }\n\n await requestAndCachePages<Resource, ResourceNode>([1], {\n cursorCache,\n getters,\n groupCursor,\n makeIDCursor,\n resourceResolver,\n });\n\n return resolver(\n await resolveConnection(args, {\n cursorCache,\n getters,\n groupCursor,\n makeIDCursor,\n resourceResolver,\n resultsPerPage,\n }),\n );\n } catch (e) {\n throw e;\n }\n};\n\nexport default main;\n"],"file":"index.js"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"generateCursorCache.d.ts","sourceRoot":"","sources":["../../../src/__testUtils__/generateCursorCache.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAMtC,oBAAY,MAAM,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;0FAE0F,MAAM;AAAlG,
|
1
|
+
{"version":3,"file":"generateCursorCache.d.ts","sourceRoot":"","sources":["../../../src/__testUtils__/generateCursorCache.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAMtC,oBAAY,MAAM,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;0FAE0F,MAAM;AAAlG,wBAyCE"}
|
@@ -4,7 +4,7 @@ export declare type PlainObject = {
|
|
4
4
|
[key: string]: any;
|
5
5
|
};
|
6
6
|
export declare type Node = PlainObject & {
|
7
|
-
id: string;
|
7
|
+
id: string | number;
|
8
8
|
};
|
9
9
|
export declare type Direction = "backward" | "forward";
|
10
10
|
export declare type CursorCacheEntry = {
|
@@ -42,28 +42,28 @@ export declare type Connection = {
|
|
42
42
|
pageInfo: PageInfo;
|
43
43
|
totalCount: number;
|
44
44
|
};
|
45
|
-
export interface ResourceResponse extends Response {
|
46
|
-
data?:
|
45
|
+
export interface ResourceResponse<Resource extends PlainObject> extends Response {
|
46
|
+
data?: Resource;
|
47
47
|
errors?: Error[];
|
48
48
|
}
|
49
|
-
export declare type ResourceResolver = (args: {
|
49
|
+
export declare type ResourceResolver<Resource extends PlainObject> = (args: {
|
50
50
|
page: number;
|
51
|
-
}) => Promise<ResourceResponse
|
52
|
-
export declare type CreateResourceResolver<
|
53
|
-
export interface Getters {
|
54
|
-
nodes: (obj:
|
55
|
-
page: (obj:
|
56
|
-
totalPages: (obj:
|
57
|
-
totalResults: (obj:
|
51
|
+
}) => Promise<ResourceResponse<Resource>>;
|
52
|
+
export declare type CreateResourceResolver<Source extends PlainObject | undefined, Args extends PlainObject, Ctx extends PlainObject, Resource extends PlainObject> = (source: Source, args: Args, context: Ctx, info: GraphQLResolveInfo) => ResourceResolver<Resource>;
|
53
|
+
export interface Getters<Resource extends PlainObject, ResourceNode extends Node> {
|
54
|
+
nodes: (obj: Resource) => ResourceNode[];
|
55
|
+
page: (obj: Resource) => number;
|
56
|
+
totalPages: (obj: Resource) => number;
|
57
|
+
totalResults: (obj: Resource) => number;
|
58
58
|
}
|
59
|
-
export interface ConnectionResolverUserOptions {
|
60
|
-
createMakeCursors: (source:
|
59
|
+
export interface ConnectionResolverUserOptions<Source extends PlainObject | undefined, Args extends PlainObject, Ctx extends PlainObject, Resource extends PlainObject, ResourceNode extends Node> {
|
60
|
+
createMakeCursors: (source: Source, args: Args, context: Ctx, info: GraphQLResolveInfo) => {
|
61
61
|
makeGroupCursor: () => string;
|
62
62
|
makeIDCursor: (id: string | number) => string;
|
63
63
|
};
|
64
|
-
createResourceResolver: CreateResourceResolver
|
64
|
+
createResourceResolver: CreateResourceResolver<Source, Args, Ctx, Resource>;
|
65
65
|
cursorCache: Cachemap;
|
66
|
-
getters: Getters
|
66
|
+
getters: Getters<Resource, ResourceNode>;
|
67
67
|
resolver?: (args: Connection) => Connection;
|
68
68
|
resultsPerPage: number;
|
69
69
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defs/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,oBAAY,WAAW,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,oBAAY,IAAI,GAAG,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defs/index.ts"],"names":[],"mappings":"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"}
|
@@ -1,21 +1,21 @@
|
|
1
1
|
import Cachemap from "@cachemap/core";
|
2
|
-
import { Getters, ResourceResolver } from "../defs";
|
3
|
-
export declare type Context = {
|
2
|
+
import { Getters, Node, PlainObject, ResourceResolver } from "../defs";
|
3
|
+
export declare type Context<Resource extends PlainObject, ResourceNode extends Node> = {
|
4
4
|
cursorCache: Cachemap;
|
5
|
-
getters: Getters
|
5
|
+
getters: Getters<Resource, ResourceNode>;
|
6
6
|
groupCursor: string;
|
7
7
|
makeIDCursor: (id: string | number) => string;
|
8
|
-
resourceResolver: ResourceResolver
|
8
|
+
resourceResolver: ResourceResolver<Resource>;
|
9
9
|
};
|
10
|
-
declare const
|
10
|
+
declare const requestAndCachePages: <Resource extends PlainObject, ResourceNode extends Node>(pages: number[], { cursorCache, getters, groupCursor, makeIDCursor, resourceResolver }: Context<Resource, ResourceNode>) => Promise<{
|
11
11
|
cachedEdges: {
|
12
12
|
edges: {
|
13
|
-
node:
|
13
|
+
node: Node;
|
14
14
|
cursor: string;
|
15
15
|
}[];
|
16
16
|
pageNumber: number;
|
17
17
|
}[];
|
18
18
|
errors: Error[];
|
19
19
|
}>;
|
20
|
-
export default
|
20
|
+
export default requestAndCachePages;
|
21
21
|
//# sourceMappingURL=requestAndCachePages.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"requestAndCachePages.d.ts","sourceRoot":"","sources":["../../../src/helpers/requestAndCachePages.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
1
|
+
{"version":3,"file":"requestAndCachePages.d.ts","sourceRoot":"","sources":["../../../src/helpers/requestAndCachePages.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIvE,oBAAY,OAAO,CAAC,QAAQ,SAAS,WAAW,EAAE,YAAY,SAAS,IAAI,IAAI;IAC7E,WAAW,EAAE,QAAQ,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;IAC9C,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;CAC9C,CAAC;AAEF,QAAA,MAAM,oBAAoB,mEACjB,MAAM,EAAE;;;;;;;;;EAmChB,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
@@ -1,17 +1,17 @@
|
|
1
1
|
import Cachemap from "@cachemap/core";
|
2
|
-
import { ConnectionInputOptions, Getters, PlainObject, ResourceResolver } from "../defs";
|
3
|
-
export declare type Context = {
|
2
|
+
import { ConnectionInputOptions, Getters, Node, PlainObject, ResourceResolver } from "../defs";
|
3
|
+
export declare type Context<Resource extends PlainObject, ResourceNode extends Node> = {
|
4
4
|
cursorCache: Cachemap;
|
5
|
-
getters: Getters
|
5
|
+
getters: Getters<Resource, ResourceNode>;
|
6
6
|
groupCursor: string;
|
7
7
|
makeIDCursor: (id: string | number) => string;
|
8
|
-
resourceResolver: ResourceResolver
|
8
|
+
resourceResolver: ResourceResolver<Resource>;
|
9
9
|
resultsPerPage: number;
|
10
10
|
};
|
11
|
-
declare const
|
11
|
+
declare const resolveConnection: <Resource extends PlainObject, ResourceNode extends Node>(args: PlainObject & ConnectionInputOptions, { cursorCache, getters, groupCursor, makeIDCursor, resourceResolver, resultsPerPage, }: Context<Resource, ResourceNode>) => Promise<{
|
12
12
|
edges: import("../defs").Edge[];
|
13
13
|
errors: Error[];
|
14
|
-
nodes:
|
14
|
+
nodes: Node[];
|
15
15
|
pageInfo: {
|
16
16
|
endCursor: string;
|
17
17
|
hasNextPage: boolean;
|
@@ -20,5 +20,5 @@ declare const _default: (args: PlainObject & ConnectionInputOptions, { cursorCac
|
|
20
20
|
};
|
21
21
|
totalCount: number;
|
22
22
|
}>;
|
23
|
-
export default
|
23
|
+
export default resolveConnection;
|
24
24
|
//# sourceMappingURL=resolveConnection.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"resolveConnection.d.ts","sourceRoot":"","sources":["../../../src/helpers/resolveConnection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
1
|
+
{"version":3,"file":"resolveConnection.d.ts","sourceRoot":"","sources":["../../../src/helpers/resolveConnection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAS/F,oBAAY,OAAO,CAAC,QAAQ,SAAS,WAAW,EAAE,YAAY,SAAS,IAAI,IAAI;IAC7E,WAAW,EAAE,QAAQ,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;IAC9C,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,iBAAiB,kEACf,WAAW,GAAG,sBAAsB;;;;;;;;;;;EAoE3C,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { GraphQLResolveInfo } from "graphql";
|
2
|
-
import { Connection, ConnectionInputOptions, ConnectionResolverUserOptions, PlainObject } from "../defs";
|
3
|
-
declare const
|
4
|
-
export default
|
2
|
+
import { Connection, ConnectionInputOptions, ConnectionResolverUserOptions, Node, PlainObject } from "../defs";
|
3
|
+
declare const main: <Source extends PlainObject | undefined, Args extends PlainObject, Ctx extends PlainObject, Resource extends PlainObject, ResourceNode extends Node>({ cursorCache, createMakeCursors, createResourceResolver, getters, resolver, resultsPerPage, }: ConnectionResolverUserOptions<Source, Args, Ctx, Resource, ResourceNode>) => (source: Source, args: Args & ConnectionInputOptions, context: Ctx, info: GraphQLResolveInfo) => Promise<Connection>;
|
4
|
+
export default main;
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/main/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/main/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM/G,QAAA,MAAM,IAAI,8YAiBF,kBAAkB,KACvB,OAAO,CAAC,UAAU,CAwEpB,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/package.json
CHANGED
package/src/defs/index.ts
CHANGED
@@ -5,7 +5,7 @@ export type PlainObject = {
|
|
5
5
|
[key: string]: any;
|
6
6
|
};
|
7
7
|
|
8
|
-
export type Node = PlainObject & { id: string };
|
8
|
+
export type Node = PlainObject & { id: string | number };
|
9
9
|
|
10
10
|
export type Direction = "backward" | "forward";
|
11
11
|
|
@@ -51,40 +51,48 @@ export type Connection = {
|
|
51
51
|
totalCount: number;
|
52
52
|
};
|
53
53
|
|
54
|
-
export interface ResourceResponse extends Response {
|
55
|
-
data?:
|
54
|
+
export interface ResourceResponse<Resource extends PlainObject> extends Response {
|
55
|
+
data?: Resource;
|
56
56
|
errors?: Error[];
|
57
57
|
}
|
58
58
|
|
59
|
-
export type ResourceResolver = (args: {
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
59
|
+
export type ResourceResolver<Resource extends PlainObject> = (args: {
|
60
|
+
page: number;
|
61
|
+
}) => Promise<ResourceResponse<Resource>>;
|
62
|
+
|
63
|
+
export type CreateResourceResolver<
|
64
|
+
Source extends PlainObject | undefined,
|
65
|
+
Args extends PlainObject,
|
66
|
+
Ctx extends PlainObject,
|
67
|
+
Resource extends PlainObject
|
68
|
+
> = (source: Source, args: Args, context: Ctx, info: GraphQLResolveInfo) => ResourceResolver<Resource>;
|
69
|
+
|
70
|
+
export interface Getters<Resource extends PlainObject, ResourceNode extends Node> {
|
71
|
+
nodes: (obj: Resource) => ResourceNode[];
|
72
|
+
page: (obj: Resource) => number;
|
73
|
+
totalPages: (obj: Resource) => number;
|
74
|
+
totalResults: (obj: Resource) => number;
|
73
75
|
}
|
74
76
|
|
75
|
-
export interface ConnectionResolverUserOptions
|
77
|
+
export interface ConnectionResolverUserOptions<
|
78
|
+
Source extends PlainObject | undefined,
|
79
|
+
Args extends PlainObject,
|
80
|
+
Ctx extends PlainObject,
|
81
|
+
Resource extends PlainObject,
|
82
|
+
ResourceNode extends Node
|
83
|
+
> {
|
76
84
|
createMakeCursors: (
|
77
|
-
source:
|
78
|
-
args:
|
79
|
-
context:
|
85
|
+
source: Source,
|
86
|
+
args: Args,
|
87
|
+
context: Ctx,
|
80
88
|
info: GraphQLResolveInfo,
|
81
89
|
) => {
|
82
90
|
makeGroupCursor: () => string;
|
83
91
|
makeIDCursor: (id: string | number) => string;
|
84
92
|
};
|
85
|
-
createResourceResolver: CreateResourceResolver
|
93
|
+
createResourceResolver: CreateResourceResolver<Source, Args, Ctx, Resource>;
|
86
94
|
cursorCache: Cachemap;
|
87
|
-
getters: Getters
|
95
|
+
getters: Getters<Resource, ResourceNode>;
|
88
96
|
resolver?: (args: Connection) => Connection;
|
89
97
|
resultsPerPage: number;
|
90
98
|
}
|
@@ -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
|
-
|
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, PlainObject, 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
|
-
|
20
|
+
const resolveConnection = async <Resource extends PlainObject, ResourceNode extends Node>(
|
21
21
|
args: PlainObject & ConnectionInputOptions,
|
22
|
-
{
|
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);
|
package/src/main/index.test.ts
CHANGED
@@ -5,7 +5,7 @@ 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 {
|
8
|
+
import { PlainObject } from "../defs";
|
9
9
|
import removeConnectionInputOptions from "../helpers/removeConnectionInputOptions";
|
10
10
|
|
11
11
|
describe("connectionResolver", () => {
|
@@ -14,11 +14,11 @@ describe("connectionResolver", () => {
|
|
14
14
|
makeIDCursor: (id: string | number) => encode(`${id}::${JSON.stringify(removeConnectionInputOptions(args))}`),
|
15
15
|
});
|
16
16
|
|
17
|
-
const 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;
|
@@ -35,6 +35,7 @@ describe("connectionResolver", () => {
|
|
35
35
|
cursorCache: new Cachemap({
|
36
36
|
name: "GRAPHQL_BOX_CONNECTION_RESOLVER",
|
37
37
|
store: map(),
|
38
|
+
type: "CONNECTION_RESOLVER",
|
38
39
|
}),
|
39
40
|
getters,
|
40
41
|
resultsPerPage,
|
@@ -213,6 +214,7 @@ describe("connectionResolver", () => {
|
|
213
214
|
const cursorCache = new Cachemap({
|
214
215
|
name: "cursorCache",
|
215
216
|
store: map(),
|
217
|
+
type: "someType",
|
216
218
|
});
|
217
219
|
|
218
220
|
const connectionResolver = makeConnectionResolver({
|
@@ -322,6 +324,7 @@ describe("connectionResolver", () => {
|
|
322
324
|
const cursorCache = new Cachemap({
|
323
325
|
name: "cursorCache",
|
324
326
|
store: map(),
|
327
|
+
type: "someType",
|
325
328
|
});
|
326
329
|
|
327
330
|
const connectionResolver = makeConnectionResolver({
|