@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.
- package/lib/browser/index.js +1 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/production.analysis.txt +29 -29
- package/lib/main/__testUtils__/generateCursorCache.js +2 -1
- package/lib/main/__testUtils__/generateCursorCache.js.map +1 -1
- package/lib/main/helpers/isCursorSupplied.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 +3 -2
- 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/isCursorSupplied.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 +6 -3
- 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 +25 -22
- package/lib/types/defs/index.d.ts.map +1 -1
- package/lib/types/helpers/extractNodes.d.ts +1 -1
- package/lib/types/helpers/isCursorSupplied.d.ts +2 -2
- package/lib/types/helpers/isCursorSupplied.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-lock.json +18 -0
- package/package.json +1 -1
- package/src/__testUtils__/generateCursorCache.ts +1 -0
- package/src/defs/index.ts +43 -31
- package/src/helpers/getPageNumbersToRequest.test.ts +2 -2
- package/src/helpers/getStartAndEndIndexes.test.ts +10 -10
- package/src/helpers/isCursorSupplied.ts +2 -2
- package/src/helpers/requestAndCachePages.ts +8 -6
- package/src/helpers/resolveConnection.ts +17 -8
- package/src/helpers/retrieveCachedConnection.test.ts +32 -32
- package/src/helpers/validateCursor.test.ts +1 -0
- package/src/main/index.test.ts +37 -59
- package/src/main/index.ts +16 -8
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/main/index.ts"],"names":["cursorCache","createMakeCursors","createResourceResolver","getters","resolver","resultsPerPage","source","args","context","info","makeGroupCursor","makeIDCursor","resourceResolver","groupCursor","cursorError","edges","errors","nodes","pageInfo","hasNextPage","hasPreviousPage","totalCount","has","e"],"mappings":";;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;
|
1
|
+
{"version":3,"sources":["../../../src/main/index.ts"],"names":["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;;AACA;;AACA;;AACA;;AAEA,MAAMA,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,QAAI,+BAAiBH,IAAjB,CAAJ,EAA4B;AAC1B,YAAMO,WAAW,GAAG,MAAM,6BAAeP,IAAf,EAAqBE,IAArB,EAA2B;AACnDV,QAAAA,WADmD;AAEnDc,QAAAA,WAFmD;AAGnDR,QAAAA;AAHmD,OAA3B,CAA1B;;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,MAAM,gCAAkBI,IAAlB,EAAwB;AAC5BR,QAAAA,WAD4B;AAE5BG,QAAAA,OAF4B;AAG5BW,QAAAA,WAH4B;AAI5BF,QAAAA,YAJ4B;AAK5BC,QAAAA,gBAL4B;AAM5BP,QAAAA;AAN4B,OAAxB,CADO,CAAf;AAUD;;AAED,QAAI,MAAMN,WAAW,CAACuB,GAAZ,CAAiB,GAAET,WAAY,WAA/B,CAAV,EAAsD;AACpD,aAAOV,QAAQ,CACb,MAAM,gCAAkBI,IAAlB,EAAwB;AAC5BR,QAAAA,WAD4B;AAE5BG,QAAAA,OAF4B;AAG5BW,QAAAA,WAH4B;AAI5BF,QAAAA,YAJ4B;AAK5BC,QAAAA,gBAL4B;AAM5BP,QAAAA;AAN4B,OAAxB,CADO,CAAf;AAUD;;AAED,UAAM,mCAA6C,CAAC,CAAD,CAA7C,EAAkD;AACtDN,MAAAA,WADsD;AAEtDG,MAAAA,OAFsD;AAGtDW,MAAAA,WAHsD;AAItDF,MAAAA,YAJsD;AAKtDC,MAAAA;AALsD,KAAlD,CAAN;AAQA,WAAOT,QAAQ,CACb,MAAM,gCAAkBI,IAAlB,EAAwB;AAC5BR,MAAAA,WAD4B;AAE5BG,MAAAA,OAF4B;AAG5BW,MAAAA,WAH4B;AAI5BF,MAAAA,YAJ4B;AAK5BC,MAAAA,gBAL4B;AAM5BP,MAAAA;AAN4B,KAAxB,CADO,CAAf;AAUD,GApED,CAoEE,OAAOkB,CAAP,EAAU;AACV,UAAMA,CAAN;AACD;AACF,CA1FD;;eA4FezB,I","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,\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,"sources":["../../../src/__testUtils__/generateCursorCache.ts"],"names":["Cachemap","map","encode","cacheCursors","generatePages","group","pageRanges","resultsPerPage","totalPages","totalResults","cursorCache","name","store","headers","Headers","length","pages","Promise","all","page","isLastPage","resultsOnCurrentPage","remainder","edges","Array","from","_v","i","index","id","cursor","node","set","cacheHeaders","cacheControl","get","undefined"],"mappings":";AAAA,OAAOA,QAAP,MAAqB,gBAArB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,SAASC,MAAT,QAAuB,WAAvB;AACA,OAAOC,YAAP,MAAyB,yBAAzB;AACA,OAAOC,aAAP,MAA0B,iBAA1B;AAUA,gBAAe,OAAO;AAAEC,EAAAA,KAAF;AAASC,EAAAA,UAAU,GAAG,EAAtB;AAA0BC,EAAAA,cAA1B;AAA0CC,EAAAA,UAA1C;AAAsDC,EAAAA;AAAtD,CAAP,KAAwF;AACrG,QAAMC,WAAW,GAAG,IAAIV,QAAJ,CAAa;AAC/BW,IAAAA,IAAI,EAAE,aADyB;AAE/BC,IAAAA,KAAK,EAAEX,GAAG;
|
1
|
+
{"version":3,"sources":["../../../src/__testUtils__/generateCursorCache.ts"],"names":["Cachemap","map","encode","cacheCursors","generatePages","group","pageRanges","resultsPerPage","totalPages","totalResults","cursorCache","name","store","type","headers","Headers","length","pages","Promise","all","page","isLastPage","resultsOnCurrentPage","remainder","edges","Array","from","_v","i","index","id","cursor","node","set","cacheHeaders","cacheControl","get","undefined"],"mappings":";AAAA,OAAOA,QAAP,MAAqB,gBAArB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,SAASC,MAAT,QAAuB,WAAvB;AACA,OAAOC,YAAP,MAAyB,yBAAzB;AACA,OAAOC,aAAP,MAA0B,iBAA1B;AAUA,gBAAe,OAAO;AAAEC,EAAAA,KAAF;AAASC,EAAAA,UAAU,GAAG,EAAtB;AAA0BC,EAAAA,cAA1B;AAA0CC,EAAAA,UAA1C;AAAsDC,EAAAA;AAAtD,CAAP,KAAwF;AACrG,QAAMC,WAAW,GAAG,IAAIV,QAAJ,CAAa;AAC/BW,IAAAA,IAAI,EAAE,aADyB;AAE/BC,IAAAA,KAAK,EAAEX,GAAG,EAFqB;AAG/BY,IAAAA,IAAI,EAAE;AAHyB,GAAb,CAApB;AAMA,QAAMC,OAAO,GAAG,IAAIC,OAAJ,CAAY;AAAE,qBAAiB;AAAnB,GAAZ,CAAhB;;AAEA,MAAIT,UAAU,CAACU,MAAX,IAAqBT,cAAzB,EAAyC;AACvC,UAAMU,KAAK,GAAGb,aAAa,CAACE,UAAD,CAA3B;AAEA,UAAMY,OAAO,CAACC,GAAR,CACJF,KAAK,CAAChB,GAAN,CAAU,MAAMmB,IAAN,IAAc;AACtB,YAAMC,UAAU,GAAGD,IAAI,KAAKH,KAAK,CAACA,KAAK,CAACD,MAAN,GAAe,CAAhB,CAAjC;AACA,UAAIM,oBAAJ;;AAEA,UAAID,UAAJ,EAAgB;AACd,cAAME,SAAS,GAAGd,YAAY,GAAGF,cAAjC;AACAe,QAAAA,oBAAoB,GAAGC,SAAS,KAAK,CAAd,GAAkBhB,cAAlB,GAAmCgB,SAA1D;AACD,OAHD,MAGO;AACLD,QAAAA,oBAAoB,GAAGf,cAAvB;AACD;;AAED,YAAMiB,KAAK,GAAGC,KAAK,CAACC,IAAN,CAAW;AAAEV,QAAAA,MAAM,EAAEM;AAAV,OAAX,EAA6C,CAACK,EAAD,EAAKC,CAAL,KAAWA,CAAxD,EAA2D3B,GAA3D,CAA+D4B,KAAK,IAAI;AACpF,cAAMC,EAAE,GAAG5B,MAAM,CAAE,GAAE2B,KAAM,KAAIT,IAAK,EAAnB,CAAjB;AACA,eAAO;AAAEW,UAAAA,MAAM,EAAG,GAAED,EAAG,KAAIzB,KAAM,EAA1B;AAA6B2B,UAAAA,IAAI,EAAE;AAAEF,YAAAA;AAAF;AAAnC,SAAP;AACD,OAHa,CAAd;AAKA,YAAM3B,YAAY,CAACO,WAAD,EAAc;AAAEc,QAAAA,KAAF;AAASnB,QAAAA,KAAT;AAAgBS,QAAAA,OAAhB;AAAyBM,QAAAA,IAAzB;AAA+BZ,QAAAA,UAA/B;AAA2CC,QAAAA;AAA3C,OAAd,CAAlB;AACD,KAjBD,CADI,CAAN;AAoBD,GAvBD,MAuBO;AAAA;;AACL,UAAMC,WAAW,CAACuB,GAAZ,CACH,GAAE5B,KAAM,WADL,EAEJ;AAAEG,MAAAA,UAAF;AAAcC,MAAAA;AAAd,KAFI,EAGJ;AAAEyB,MAAAA,YAAY,EAAE;AAAEC,QAAAA,YAAY,kBAAErB,OAAO,CAACsB,GAAR,CAAY,eAAZ,CAAF,uDAAkCC;AAAhD;AAAhB,KAHI,CAAN;AAKD;;AAED,SAAO3B,WAAP;AACD,CAzCD","sourcesContent":["import Cachemap from \"@cachemap/core\";\nimport map from \"@cachemap/map\";\nimport { encode } from \"js-base64\";\nimport cacheCursors from \"../helpers/cacheCursors\";\nimport generatePages from \"./generatePages\";\n\nexport type Params = {\n group: string;\n pageRanges?: string[];\n resultsPerPage?: number;\n totalPages: number;\n totalResults: number;\n};\n\nexport default async ({ group, pageRanges = [], resultsPerPage, totalPages, totalResults }: Params) => {\n const cursorCache = new Cachemap({\n name: \"cursorCache\",\n store: map(),\n type: \"someType\",\n });\n\n const headers = new Headers({ \"Cache-Control\": \"max-age=60\" });\n\n if (pageRanges.length && resultsPerPage) {\n const pages = generatePages(pageRanges);\n\n await Promise.all(\n pages.map(async page => {\n const isLastPage = page === pages[pages.length - 1];\n let resultsOnCurrentPage: number;\n\n if (isLastPage) {\n const remainder = totalResults % resultsPerPage;\n resultsOnCurrentPage = remainder === 0 ? resultsPerPage : remainder;\n } else {\n resultsOnCurrentPage = resultsPerPage;\n }\n\n const edges = Array.from({ length: resultsOnCurrentPage }, (_v, i) => i).map(index => {\n const id = encode(`${index}::${page}`);\n return { cursor: `${id}::${group}`, node: { id } };\n });\n\n await cacheCursors(cursorCache, { edges, group, headers, page, totalPages, totalResults });\n }),\n );\n } else {\n await cursorCache.set(\n `${group}-metadata`,\n { totalPages, totalResults },\n { cacheHeaders: { cacheControl: headers.get(\"cache-control\") ?? undefined } },\n );\n }\n\n return cursorCache;\n};\n"],"file":"generateCursorCache.js"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/helpers/isCursorSupplied.ts"],"names":["after","before"],"mappings":"AAEA,gBAAe,CAAC;AAAEA,EAAAA,KAAF;AAASC,EAAAA;AAAT,CAAD,
|
1
|
+
{"version":3,"sources":["../../../src/helpers/isCursorSupplied.ts"],"names":["after","before"],"mappings":"AAEA,gBAAe,CAAC;AAAEA,EAAAA,KAAF;AAASC,EAAAA;AAAT,CAAD,KAA6D,CAAC,EAAED,KAAK,IAAIC,MAAX,CAA7E","sourcesContent":["import { ConnectionInputOptions, PlainObject } from \"../defs\";\n\nexport default ({ after, before }: PlainObject & ConnectionInputOptions) => !!(after || before);\n"],"file":"isCursorSupplied.js"}
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import "core-js/modules/es.promise.js";
|
2
2
|
import cacheCursors from "./cacheCursors";
|
3
3
|
import makeEdges from "./makeEdges";
|
4
|
-
|
4
|
+
|
5
|
+
const requestAndCachePages = async (pages, {
|
5
6
|
cursorCache,
|
6
7
|
getters,
|
7
8
|
groupCursor,
|
@@ -47,5 +48,7 @@ export default (async (pages, {
|
|
47
48
|
cachedEdges,
|
48
49
|
errors
|
49
50
|
};
|
50
|
-
}
|
51
|
+
};
|
52
|
+
|
53
|
+
export default requestAndCachePages;
|
51
54
|
//# sourceMappingURL=requestAndCachePages.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/helpers/requestAndCachePages.ts"],"names":["cacheCursors","makeEdges","pages","cursorCache","getters","groupCursor","makeIDCursor","resourceResolver","errors","cachedEdges","Promise","all","map","page","data","pageResultData","pageResultErrors","headers","pageResultHeaders","length","edges","nodes","node","id","group","totalPages","totalResults","pageNumber","push"],"mappings":";AAEA,OAAOA,YAAP,MAAyB,gBAAzB;AACA,OAAOC,SAAP,MAAsB,aAAtB
|
1
|
+
{"version":3,"sources":["../../../src/helpers/requestAndCachePages.ts"],"names":["cacheCursors","makeEdges","requestAndCachePages","pages","cursorCache","getters","groupCursor","makeIDCursor","resourceResolver","errors","cachedEdges","Promise","all","map","page","data","pageResultData","pageResultErrors","headers","pageResultHeaders","length","edges","nodes","node","id","group","totalPages","totalResults","pageNumber","push"],"mappings":";AAEA,OAAOA,YAAP,MAAyB,gBAAzB;AACA,OAAOC,SAAP,MAAsB,aAAtB;;AAUA,MAAMC,oBAAoB,GAAG,OAC3BC,KAD2B,EAE3B;AAAEC,EAAAA,WAAF;AAAeC,EAAAA,OAAf;AAAwBC,EAAAA,WAAxB;AAAqCC,EAAAA,YAArC;AAAmDC,EAAAA;AAAnD,CAF2B,KAGxB;AACH,QAAMC,MAAe,GAAG,EAAxB;AAEA,QAAMC,WAAW,GAAG,MAAMC,OAAO,CAACC,GAAR,CACxBT,KAAK,CAACU,GAAN,CAAU,MAAMC,IAAN,IAAc;AACtB,UAAM;AAAEC,MAAAA,IAAI,EAAEC,cAAR;AAAwBP,MAAAA,MAAM,EAAEQ,gBAAhC;AAAkDC,MAAAA,OAAO,EAAEC;AAA3D,QAAiF,MAAMX,gBAAgB,CAAC;AAC5GM,MAAAA;AAD4G,KAAD,CAA7G;;AAIA,QAAIE,cAAc,IAAI,EAACC,gBAAD,aAACA,gBAAD,eAACA,gBAAgB,CAAEG,MAAnB,CAAtB,EAAiD;AAC/C,YAAMC,KAAK,GAAGpB,SAAS,CAACI,OAAO,CAACiB,KAAR,CAAcN,cAAd,CAAD,EAAgCO,IAAI,IAAIhB,YAAY,CAACgB,IAAI,CAACC,EAAN,CAApD,CAAvB;AAEA,YAAMxB,YAAY,CAACI,WAAD,EAAc;AAC9BiB,QAAAA,KAD8B;AAE9BI,QAAAA,KAAK,EAAEnB,WAFuB;AAG9BY,QAAAA,OAAO,EAAEC,iBAHqB;AAI9BL,QAAAA,IAJ8B;AAK9BY,QAAAA,UAAU,EAAErB,OAAO,CAACqB,UAAR,CAAmBV,cAAnB,CALkB;AAM9BW,QAAAA,YAAY,EAAEtB,OAAO,CAACsB,YAAR,CAAqBX,cAArB;AANgB,OAAd,CAAlB;AASA,aAAO;AAAEK,QAAAA,KAAF;AAASO,QAAAA,UAAU,EAAEd;AAArB,OAAP;AACD;;AAED,QAAIG,gBAAJ,aAAIA,gBAAJ,eAAIA,gBAAgB,CAAEG,MAAtB,EAA8B;AAC5BX,MAAAA,MAAM,CAACoB,IAAP,CAAY,GAAGZ,gBAAf;AACD;;AAED,WAAO;AAAEI,MAAAA,KAAK,EAAE,EAAT;AAAaO,MAAAA,UAAU,EAAEd;AAAzB,KAAP;AACD,GAzBD,CADwB,CAA1B;AA6BA,SAAO;AAAEJ,IAAAA,WAAF;AAAeD,IAAAA;AAAf,GAAP;AACD,CApCD;;AAsCA,eAAeP,oBAAf","sourcesContent":["import Cachemap from \"@cachemap/core\";\nimport { Getters, Node, PlainObject, ResourceResolver } from \"../defs\";\nimport cacheCursors from \"./cacheCursors\";\nimport makeEdges from \"./makeEdges\";\n\nexport type Context<Resource extends PlainObject, ResourceNode extends Node> = {\n cursorCache: Cachemap;\n getters: Getters<Resource, ResourceNode>;\n groupCursor: string;\n makeIDCursor: (id: string | number) => string;\n resourceResolver: ResourceResolver<Resource>;\n};\n\nconst requestAndCachePages = async <Resource extends PlainObject, ResourceNode extends Node>(\n pages: number[],\n { cursorCache, getters, groupCursor, makeIDCursor, resourceResolver }: Context<Resource, ResourceNode>,\n) => {\n const errors: Error[] = [];\n\n const cachedEdges = await Promise.all(\n pages.map(async page => {\n const { data: pageResultData, errors: pageResultErrors, headers: pageResultHeaders } = await resourceResolver({\n page,\n });\n\n if (pageResultData && !pageResultErrors?.length) {\n const edges = makeEdges(getters.nodes(pageResultData), node => makeIDCursor(node.id));\n\n await cacheCursors(cursorCache, {\n edges,\n group: groupCursor,\n headers: pageResultHeaders,\n page,\n totalPages: getters.totalPages(pageResultData),\n totalResults: getters.totalResults(pageResultData),\n });\n\n return { edges, pageNumber: page };\n }\n\n if (pageResultErrors?.length) {\n errors.push(...pageResultErrors);\n }\n\n return { edges: [], pageNumber: page };\n }),\n );\n\n return { cachedEdges, errors };\n};\n\nexport default requestAndCachePages;\n"],"file":"requestAndCachePages.js"}
|
@@ -6,7 +6,8 @@ import { getEndCursor, getStartCursor } from "./getStartAndEndCursors";
|
|
6
6
|
import mergeCachedEdges from "./mergeCachedEdges";
|
7
7
|
import requestAndCachePages from "./requestAndCachePages";
|
8
8
|
import retrieveCachedConnection from "./retrieveCachedConnection";
|
9
|
-
|
9
|
+
|
10
|
+
const resolveConnection = async (args, {
|
10
11
|
cursorCache,
|
11
12
|
getters,
|
12
13
|
groupCursor,
|
@@ -71,5 +72,7 @@ export default (async (args, {
|
|
71
72
|
},
|
72
73
|
totalCount: totalResults
|
73
74
|
};
|
74
|
-
}
|
75
|
+
};
|
76
|
+
|
77
|
+
export default resolveConnection;
|
75
78
|
//# sourceMappingURL=resolveConnection.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/helpers/resolveConnection.ts"],"names":["extractEdges","extractNodes","getInRangeCachedEdges","getEndCursor","getStartCursor","mergeCachedEdges","requestAndCachePages","retrieveCachedConnection","args","cursorCache","getters","groupCursor","makeIDCursor","resourceResolver","resultsPerPage","cachedEdges","hasNextPage","hasPreviousPage","indexes","missingPages","totalResults","length","edges","errors","nodes","pageInfo","endCursor","startCursor","totalCount","missingCachedEdges","mergedCachedEdges","endIndex","end","startIndex","start"],"mappings":";AAEA,OAAOA,YAAP,MAAyB,gBAAzB;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AACA,SAASC,YAAT,EAAuBC,cAAvB,QAA6C,yBAA7C;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;AACA,OAAOC,oBAAP,MAAiC,wBAAjC;AACA,OAAOC,wBAAP,MAAqC,4BAArC
|
1
|
+
{"version":3,"sources":["../../../src/helpers/resolveConnection.ts"],"names":["extractEdges","extractNodes","getInRangeCachedEdges","getEndCursor","getStartCursor","mergeCachedEdges","requestAndCachePages","retrieveCachedConnection","resolveConnection","args","cursorCache","getters","groupCursor","makeIDCursor","resourceResolver","resultsPerPage","cachedEdges","hasNextPage","hasPreviousPage","indexes","missingPages","totalResults","length","edges","errors","nodes","pageInfo","endCursor","startCursor","totalCount","missingCachedEdges","mergedCachedEdges","endIndex","end","startIndex","start"],"mappings":";AAEA,OAAOA,YAAP,MAAyB,gBAAzB;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AACA,SAASC,YAAT,EAAuBC,cAAvB,QAA6C,yBAA7C;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;AACA,OAAOC,oBAAP,MAAiC,wBAAjC;AACA,OAAOC,wBAAP,MAAqC,4BAArC;;AAWA,MAAMC,iBAAiB,GAAG,OACxBC,IADwB,EAExB;AACEC,EAAAA,WADF;AAEEC,EAAAA,OAFF;AAGEC,EAAAA,WAHF;AAIEC,EAAAA,YAJF;AAKEC,EAAAA,gBALF;AAMEC,EAAAA;AANF,CAFwB,KAUrB;AACH,QAAM;AACJC,IAAAA,WADI;AAEJC,IAAAA,WAFI;AAGJC,IAAAA,eAHI;AAIJC,IAAAA,OAJI;AAKJC,IAAAA,YALI;AAMJC,IAAAA;AANI,MAOF,MAAMd,wBAAwB,CAACE,IAAD,EAAO;AACvCC,IAAAA,WADuC;AAEvCE,IAAAA,WAFuC;AAGvCG,IAAAA;AAHuC,GAAP,CAPlC;;AAaA,MAAI,CAACK,YAAY,CAACE,MAAlB,EAA0B;AACxB,UAAMC,KAAK,GAAGvB,YAAY,CAACgB,WAAD,CAA1B;AAEA,WAAO;AACLO,MAAAA,KADK;AAELC,MAAAA,MAAM,EAAE,EAFH;AAGLC,MAAAA,KAAK,EAAExB,YAAY,CAACsB,KAAD,CAHd;AAILG,MAAAA,QAAQ,EAAE;AACRC,QAAAA,SAAS,EAAExB,YAAY,CAACa,WAAD,CADf;AAERC,QAAAA,WAFQ;AAGRC,QAAAA,eAHQ;AAIRU,QAAAA,WAAW,EAAExB,cAAc,CAACY,WAAD;AAJnB,OAJL;AAULa,MAAAA,UAAU,EAAER;AAVP,KAAP;AAYD;;AAED,QAAM;AAAEL,IAAAA,WAAW,EAAEc,kBAAf;AAAmCN,IAAAA;AAAnC,MAA8C,MAAMlB,oBAAoB,CAAyBc,YAAzB,EAAuC;AACnHV,IAAAA,WADmH;AAEnHC,IAAAA,OAFmH;AAGnHC,IAAAA,WAHmH;AAInHC,IAAAA,YAJmH;AAKnHC,IAAAA;AALmH,GAAvC,CAA9E;AAQA,QAAMiB,iBAAiB,GAAG7B,qBAAqB,CAACG,gBAAgB,CAACW,WAAD,EAAcc,kBAAd,CAAjB,EAAoD;AACjGE,IAAAA,QAAQ,EAAEb,OAAO,CAACc,GAD+E;AAEjGlB,IAAAA,cAFiG;AAGjGmB,IAAAA,UAAU,EAAEf,OAAO,CAACgB;AAH6E,GAApD,CAA/C;AAMA,QAAMZ,KAAK,GAAGvB,YAAY,CAAC+B,iBAAD,CAA1B;AAEA,SAAO;AACLR,IAAAA,KADK;AAELC,IAAAA,MAFK;AAGLC,IAAAA,KAAK,EAAExB,YAAY,CAACsB,KAAD,CAHd;AAILG,IAAAA,QAAQ,EAAE;AACRC,MAAAA,SAAS,EAAExB,YAAY,CAAC4B,iBAAD,CADf;AAERd,MAAAA,WAFQ;AAGRC,MAAAA,eAHQ;AAIRU,MAAAA,WAAW,EAAExB,cAAc,CAAC2B,iBAAD;AAJnB,KAJL;AAULF,IAAAA,UAAU,EAAER;AAVP,GAAP;AAYD,CArED;;AAuEA,eAAeb,iBAAf","sourcesContent":["import Cachemap from \"@cachemap/core\";\nimport { ConnectionInputOptions, Getters, Node, PlainObject, ResourceResolver } from \"../defs\";\nimport extractEdges from \"./extractEdges\";\nimport extractNodes from \"./extractNodes\";\nimport getInRangeCachedEdges from \"./getInRangeCachedEdges\";\nimport { getEndCursor, getStartCursor } from \"./getStartAndEndCursors\";\nimport mergeCachedEdges from \"./mergeCachedEdges\";\nimport requestAndCachePages from \"./requestAndCachePages\";\nimport retrieveCachedConnection from \"./retrieveCachedConnection\";\n\nexport type Context<Resource extends PlainObject, ResourceNode extends Node> = {\n cursorCache: Cachemap;\n getters: Getters<Resource, ResourceNode>;\n groupCursor: string;\n makeIDCursor: (id: string | number) => string;\n resourceResolver: ResourceResolver<Resource>;\n resultsPerPage: number;\n};\n\nconst resolveConnection = async <Resource extends PlainObject, ResourceNode extends Node>(\n args: PlainObject & ConnectionInputOptions,\n {\n cursorCache,\n getters,\n groupCursor,\n makeIDCursor,\n resourceResolver,\n resultsPerPage,\n }: Context<Resource, ResourceNode>,\n) => {\n const {\n cachedEdges,\n hasNextPage,\n hasPreviousPage,\n indexes,\n missingPages,\n totalResults,\n } = await retrieveCachedConnection(args, {\n cursorCache,\n groupCursor,\n resultsPerPage,\n });\n\n if (!missingPages.length) {\n const edges = extractEdges(cachedEdges);\n\n return {\n edges,\n errors: [],\n nodes: extractNodes(edges),\n pageInfo: {\n endCursor: getEndCursor(cachedEdges),\n hasNextPage,\n hasPreviousPage,\n startCursor: getStartCursor(cachedEdges),\n },\n totalCount: totalResults,\n };\n }\n\n const { cachedEdges: missingCachedEdges, errors } = await requestAndCachePages<Resource, ResourceNode>(missingPages, {\n cursorCache,\n getters,\n groupCursor,\n makeIDCursor,\n resourceResolver,\n });\n\n const mergedCachedEdges = getInRangeCachedEdges(mergeCachedEdges(cachedEdges, missingCachedEdges), {\n endIndex: indexes.end,\n resultsPerPage,\n startIndex: indexes.start,\n });\n\n const edges = extractEdges(mergedCachedEdges);\n\n return {\n edges,\n errors,\n nodes: extractNodes(edges),\n pageInfo: {\n endCursor: getEndCursor(mergedCachedEdges),\n hasNextPage,\n hasPreviousPage,\n startCursor: getStartCursor(mergedCachedEdges),\n },\n totalCount: totalResults,\n };\n};\n\nexport default resolveConnection;\n"],"file":"resolveConnection.js"}
|
package/lib/module/main/index.js
CHANGED
@@ -3,12 +3,13 @@ import isCursorSupplied from "../helpers/isCursorSupplied";
|
|
3
3
|
import requestAndCachePages from "../helpers/requestAndCachePages";
|
4
4
|
import resolveConnection from "../helpers/resolveConnection";
|
5
5
|
import validateCursor from "../helpers/validateCursor";
|
6
|
-
|
6
|
+
|
7
|
+
const main = ({
|
7
8
|
cursorCache,
|
8
9
|
createMakeCursors,
|
9
10
|
createResourceResolver,
|
10
11
|
getters,
|
11
|
-
resolver,
|
12
|
+
resolver = result => result,
|
12
13
|
resultsPerPage
|
13
14
|
}) => async (source, args, context, info) => {
|
14
15
|
try {
|
@@ -78,5 +79,7 @@ export default (({
|
|
78
79
|
} catch (e) {
|
79
80
|
throw e;
|
80
81
|
}
|
81
|
-
}
|
82
|
+
};
|
83
|
+
|
84
|
+
export default main;
|
82
85
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/main/index.ts"],"names":["isCursorSupplied","requestAndCachePages","resolveConnection","validateCursor","cursorCache","createMakeCursors","createResourceResolver","getters","resolver","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,\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"}
|
@@ -1,10 +1,16 @@
|
|
1
1
|
import Cachemap from "@cachemap/core";
|
2
2
|
import { GraphQLResolveInfo } from "graphql";
|
3
|
+
export declare type PlainObject = {
|
4
|
+
[key: string]: any;
|
5
|
+
};
|
6
|
+
export declare type Node = PlainObject & {
|
7
|
+
id: string | number;
|
8
|
+
};
|
3
9
|
export declare type Direction = "backward" | "forward";
|
4
10
|
export declare type CursorCacheEntry = {
|
5
11
|
group: string;
|
6
12
|
index: number;
|
7
|
-
node:
|
13
|
+
node: Node;
|
8
14
|
page: number;
|
9
15
|
};
|
10
16
|
export declare type CursorGroupMetadata = {
|
@@ -17,7 +23,7 @@ export declare type CachedEdges = {
|
|
17
23
|
};
|
18
24
|
export declare type Edge = {
|
19
25
|
cursor: string;
|
20
|
-
node:
|
26
|
+
node: Node;
|
21
27
|
};
|
22
28
|
export declare type Indexes = {
|
23
29
|
absolute: number;
|
@@ -32,39 +38,36 @@ export declare type PageInfo = {
|
|
32
38
|
export declare type Connection = {
|
33
39
|
edges: Edge[];
|
34
40
|
errors: Error[];
|
35
|
-
nodes:
|
41
|
+
nodes: Node[];
|
36
42
|
pageInfo: PageInfo;
|
37
43
|
totalCount: number;
|
38
44
|
};
|
39
|
-
export interface ResourceResponse extends Response {
|
40
|
-
data?:
|
45
|
+
export interface ResourceResponse<Resource extends PlainObject> extends Response {
|
46
|
+
data?: Resource;
|
41
47
|
errors?: Error[];
|
42
48
|
}
|
43
|
-
export declare type ResourceResolver = (args: {
|
49
|
+
export declare type ResourceResolver<Resource extends PlainObject> = (args: {
|
44
50
|
page: number;
|
45
|
-
}) => Promise<ResourceResponse
|
46
|
-
export declare type CreateResourceResolver<
|
47
|
-
export
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
page: (obj: Record<string, any>) => number;
|
53
|
-
totalPages: (obj: Record<string, any>) => number;
|
54
|
-
totalResults: (obj: Record<string, any>) => number;
|
51
|
+
}) => Promise<ResourceResponse<Resource>>;
|
52
|
+
export declare type CreateResourceResolver<Source extends PlainObject, 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;
|
55
58
|
}
|
56
|
-
export interface ConnectionResolverUserOptions {
|
57
|
-
createMakeCursors: (source:
|
59
|
+
export interface ConnectionResolverUserOptions<Source extends PlainObject, Args extends PlainObject, Ctx extends PlainObject, Resource extends PlainObject, ResourceNode extends Node> {
|
60
|
+
createMakeCursors: (source: Source, args: Args, context: Ctx, info: GraphQLResolveInfo) => {
|
58
61
|
makeGroupCursor: () => string;
|
59
62
|
makeIDCursor: (id: string | number) => string;
|
60
63
|
};
|
61
|
-
createResourceResolver: CreateResourceResolver
|
64
|
+
createResourceResolver: CreateResourceResolver<Source, Args, Ctx, Resource>;
|
62
65
|
cursorCache: Cachemap;
|
63
|
-
getters: Getters
|
64
|
-
resolver
|
66
|
+
getters: Getters<Resource, ResourceNode>;
|
67
|
+
resolver?: (args: Connection) => Connection;
|
65
68
|
resultsPerPage: number;
|
66
69
|
}
|
67
|
-
export declare type ConnectionResolver = (source:
|
70
|
+
export declare type ConnectionResolver = (source: PlainObject, args: PlainObject & ConnectionInputOptions, context: PlainObject, info: GraphQLResolveInfo) => Promise<Connection>;
|
68
71
|
export declare type ConnectionInputOptions = {
|
69
72
|
after?: string;
|
70
73
|
before?: string;
|
@@ -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,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/C,oBAAY,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defs/index.ts"],"names":[],"mappings":"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"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { ConnectionInputOptions } from "../defs";
|
2
|
-
declare const _default: ({ after, before }:
|
1
|
+
import { ConnectionInputOptions, PlainObject } from "../defs";
|
2
|
+
declare const _default: ({ after, before }: PlainObject & ConnectionInputOptions) => boolean;
|
3
3
|
export default _default;
|
4
4
|
//# sourceMappingURL=isCursorSupplied.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"isCursorSupplied.d.ts","sourceRoot":"","sources":["../../../src/helpers/isCursorSupplied.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;
|
1
|
+
{"version":3,"file":"isCursorSupplied.d.ts","sourceRoot":"","sources":["../../../src/helpers/isCursorSupplied.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;4CAE3B,WAAW,GAAG,sBAAsB;AAAvE,wBAAgG"}
|
@@ -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, 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: Record<string, any> & ConnectionInputOptions, { c
|
|
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,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 } from "../defs";
|
3
|
-
declare const
|
4
|
-
export default
|
2
|
+
import { Connection, ConnectionInputOptions, ConnectionResolverUserOptions, Node, PlainObject } from "../defs";
|
3
|
+
declare const main: <Source extends PlainObject, 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,
|
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,kYAiBF,kBAAkB,KACvB,OAAO,CAAC,UAAU,CAwEpB,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"name": "@graphql-box/connection-resolver",
|
3
|
+
"version": "0.1.3",
|
4
|
+
"lockfileVersion": 1,
|
5
|
+
"requires": true,
|
6
|
+
"dependencies": {
|
7
|
+
"js-base64": {
|
8
|
+
"version": "3.6.0",
|
9
|
+
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.0.tgz",
|
10
|
+
"integrity": "sha512-wVdUBYQeY2gY73RIlPrysvpYx+2vheGo8Y1SNQv/BzHToWpAZzJU7Z6uheKMAe+GLSBig5/Ps2nxg/8tRB73xg=="
|
11
|
+
},
|
12
|
+
"type-fest": {
|
13
|
+
"version": "1.1.1",
|
14
|
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.1.1.tgz",
|
15
|
+
"integrity": "sha512-RPDKc5KrIyKTP7Fk75LruUagqG6b+OTgXlCR2Z0aQDJFeIvL4/mhahSEtHmmVzXu4gmA0srkF/8FCH3WOWxTWA=="
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
package/package.json
CHANGED
package/src/defs/index.ts
CHANGED
@@ -1,12 +1,18 @@
|
|
1
1
|
import Cachemap from "@cachemap/core";
|
2
2
|
import { GraphQLResolveInfo } from "graphql";
|
3
3
|
|
4
|
+
export type PlainObject = {
|
5
|
+
[key: string]: any;
|
6
|
+
};
|
7
|
+
|
8
|
+
export type Node = PlainObject & { id: string | number };
|
9
|
+
|
4
10
|
export type Direction = "backward" | "forward";
|
5
11
|
|
6
12
|
export type CursorCacheEntry = {
|
7
13
|
group: string;
|
8
14
|
index: number;
|
9
|
-
node:
|
15
|
+
node: Node;
|
10
16
|
page: number;
|
11
17
|
};
|
12
18
|
|
@@ -22,7 +28,7 @@ export type CachedEdges = {
|
|
22
28
|
|
23
29
|
export type Edge = {
|
24
30
|
cursor: string;
|
25
|
-
node:
|
31
|
+
node: Node;
|
26
32
|
};
|
27
33
|
|
28
34
|
export type Indexes = {
|
@@ -40,55 +46,61 @@ export type PageInfo = {
|
|
40
46
|
export type Connection = {
|
41
47
|
edges: Edge[];
|
42
48
|
errors: Error[];
|
43
|
-
nodes:
|
49
|
+
nodes: Node[];
|
44
50
|
pageInfo: PageInfo;
|
45
51
|
totalCount: number;
|
46
52
|
};
|
47
53
|
|
48
|
-
export interface ResourceResponse extends Response {
|
49
|
-
data?:
|
54
|
+
export interface ResourceResponse<Resource extends PlainObject> extends Response {
|
55
|
+
data?: Resource;
|
50
56
|
errors?: Error[];
|
51
57
|
}
|
52
58
|
|
53
|
-
export type ResourceResolver = (args: {
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
export interface Getters {
|
65
|
-
nodes: (obj:
|
66
|
-
page: (obj:
|
67
|
-
totalPages: (obj:
|
68
|
-
totalResults: (obj:
|
59
|
+
export type ResourceResolver<Resource extends PlainObject> = (args: {
|
60
|
+
page: number;
|
61
|
+
}) => Promise<ResourceResponse<Resource>>;
|
62
|
+
|
63
|
+
export type CreateResourceResolver<
|
64
|
+
Source extends PlainObject,
|
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;
|
69
75
|
}
|
70
76
|
|
71
|
-
export interface ConnectionResolverUserOptions
|
77
|
+
export interface ConnectionResolverUserOptions<
|
78
|
+
Source extends PlainObject,
|
79
|
+
Args extends PlainObject,
|
80
|
+
Ctx extends PlainObject,
|
81
|
+
Resource extends PlainObject,
|
82
|
+
ResourceNode extends Node
|
83
|
+
> {
|
72
84
|
createMakeCursors: (
|
73
|
-
source:
|
74
|
-
args:
|
75
|
-
context:
|
85
|
+
source: Source,
|
86
|
+
args: Args,
|
87
|
+
context: Ctx,
|
76
88
|
info: GraphQLResolveInfo,
|
77
89
|
) => {
|
78
90
|
makeGroupCursor: () => string;
|
79
91
|
makeIDCursor: (id: string | number) => string;
|
80
92
|
};
|
81
|
-
createResourceResolver: CreateResourceResolver
|
93
|
+
createResourceResolver: CreateResourceResolver<Source, Args, Ctx, Resource>;
|
82
94
|
cursorCache: Cachemap;
|
83
|
-
getters: Getters
|
84
|
-
resolver
|
95
|
+
getters: Getters<Resource, ResourceNode>;
|
96
|
+
resolver?: (args: Connection) => Connection;
|
85
97
|
resultsPerPage: number;
|
86
98
|
}
|
87
99
|
|
88
100
|
export type ConnectionResolver = (
|
89
|
-
source:
|
90
|
-
args:
|
91
|
-
context:
|
101
|
+
source: PlainObject,
|
102
|
+
args: PlainObject & ConnectionInputOptions,
|
103
|
+
context: PlainObject,
|
92
104
|
info: GraphQLResolveInfo,
|
93
105
|
) => Promise<Connection>;
|
94
106
|
|