joist-graphql-resolver-utils 2.2.0-next.4 → 2.2.0-next.40

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.
@@ -0,0 +1,33 @@
1
+ import { type Entity, type MaybeAbstractEntityConstructor } from "joist-core";
2
+ import { type ContextWithEm, type PaginationFilter } from "./paginationUtils";
3
+ type CursorArgs<T extends Entity, F extends object = PaginationFilter<T>> = {
4
+ filter?: F | null;
5
+ first?: number | null;
6
+ after?: string | null;
7
+ last?: number | null;
8
+ before?: string | null;
9
+ };
10
+ /** Returns a cursor connection shape for a generated query resolver. */
11
+ export declare function paginateCursor<T extends Entity, F extends object = PaginationFilter<T>>(ctx: ContextWithEm, type: MaybeAbstractEntityConstructor<T>, args: CursorArgs<T, F>): Promise<{
12
+ edges: {
13
+ node: T;
14
+ cursor: string;
15
+ }[];
16
+ nodes: T[];
17
+ pageInfo: CursorPageInfo<T>;
18
+ }>;
19
+ /** Lazily computes cursor page fields. */
20
+ export declare class CursorPageInfo<T extends Entity = Entity> {
21
+ #private;
22
+ constructor(ctx: ContextWithEm, type: MaybeAbstractEntityConstructor<T>, filter: PaginationFilter<T>, edges: {
23
+ node: T;
24
+ cursor: string;
25
+ }[]);
26
+ get startCursor(): string | undefined;
27
+ get endCursor(): string | undefined;
28
+ get hasNextPage(): Promise<boolean>;
29
+ get hasPreviousPage(): Promise<boolean>;
30
+ get totalCount(): Promise<number>;
31
+ }
32
+ export {};
33
+ //# sourceMappingURL=cursorPagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursorPagination.d.ts","sourceRoot":"","sources":["../src/cursorPagination.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAEX,KAAK,8BAA8B,EAEpC,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,aAAa,EAAgB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE5F,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI;IAC1E,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,wEAAwE;AACxE,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAC3F,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,EACvC,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAa5F;AAED,0CAA0C;AAC1C,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;;gBAUjD,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,EACvC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC3B,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE;IAQtC,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAElC;IAED,IAAI,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAEtC;IAED,IAAI,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAEhC;CAQF"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CursorPageInfo = void 0;
4
+ exports.paginateCursor = paginateCursor;
5
+ const paginationUtils_1 = require("./paginationUtils");
6
+ /** Returns a cursor connection shape for a generated query resolver. */
7
+ async function paginateCursor(ctx, type, args) {
8
+ const limit = args.first ?? args.last ?? paginationUtils_1.defaultLimit;
9
+ const baseFilter = (args.filter ?? {});
10
+ const filter = withCursorFilter(baseFilter, args);
11
+ const orderBy = { id: args.last ? "DESC" : "ASC" };
12
+ const nodes = await ctx.em.findGql(type, filter, { limit, orderBy });
13
+ const orderedNodes = args.last ? [...nodes].reverse() : nodes;
14
+ const edges = orderedNodes.map((node) => ({ node, cursor: encodeCursor(String(node.id)) }));
15
+ return {
16
+ edges,
17
+ nodes: orderedNodes,
18
+ pageInfo: new CursorPageInfo(ctx, type, baseFilter, edges),
19
+ };
20
+ }
21
+ /** Lazily computes cursor page fields. */
22
+ class CursorPageInfo {
23
+ #ctx;
24
+ #edges;
25
+ #filter;
26
+ #hasNextPagePromise;
27
+ #hasPreviousPagePromise;
28
+ #totalCountPromise;
29
+ #type;
30
+ constructor(ctx, type, filter, edges) {
31
+ this.#ctx = ctx;
32
+ this.#type = type;
33
+ this.#filter = filter;
34
+ this.#edges = edges;
35
+ }
36
+ get startCursor() {
37
+ return this.#edges[0]?.cursor;
38
+ }
39
+ get endCursor() {
40
+ return this.#edges[this.#edges.length - 1]?.cursor;
41
+ }
42
+ get hasNextPage() {
43
+ return (this.#hasNextPagePromise ??= this.#countPastCursor("after", this.endCursor));
44
+ }
45
+ get hasPreviousPage() {
46
+ return (this.#hasPreviousPagePromise ??= this.#countPastCursor("before", this.startCursor));
47
+ }
48
+ get totalCount() {
49
+ return (this.#totalCountPromise ??= this.#ctx.em.findCount(this.#type, this.#filter));
50
+ }
51
+ /** Counts rows past a cursor only when the field is requested. */
52
+ async #countPastCursor(direction, cursor) {
53
+ if (!cursor)
54
+ return false;
55
+ const filter = withCursorFilter(this.#filter, { [direction]: cursor });
56
+ return (await this.#ctx.em.findCount(this.#type, filter)) > 0;
57
+ }
58
+ }
59
+ exports.CursorPageInfo = CursorPageInfo;
60
+ /** Adds cursor bounds to a filter. */
61
+ function withCursorFilter(filter, args) {
62
+ const cursor = args.after ?? args.before;
63
+ if (!cursor)
64
+ return filter;
65
+ const op = args.after ? "gt" : "lt";
66
+ return { ...filter, id: { [op]: decodeCursor(cursor) } };
67
+ }
68
+ /** Encodes an entity id as an opaque cursor. */
69
+ function encodeCursor(id) {
70
+ return Buffer.from(id).toString("base64");
71
+ }
72
+ /** Decodes an opaque cursor back into an entity id. */
73
+ function decodeCursor(cursor) {
74
+ return Buffer.from(cursor, "base64").toString("utf8");
75
+ }
76
+ //# sourceMappingURL=cursorPagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursorPagination.js","sourceRoot":"","sources":["../src/cursorPagination.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Collection, Entity, EntityMetadata, IdOf, MaybeAbstractEntityConstructor, Property, ReactiveGetter, ReadOnlyCollection, Reference } from "joist-core";
2
2
  import { Resolver } from "./context";
3
- type GraphQLPrimitive = string | Date | boolean | number | null | undefined;
3
+ type GraphQLPrimitive = string | Date | boolean | number | bigint | null | undefined;
4
4
  /**
5
5
  * Maps properties like `Entity.firstName: string` to field resolver functions like `firstName(): Promise<string>`.
6
6
  *
@@ -13,7 +13,7 @@ type GraphQLPrimitive = string | Date | boolean | number | null | undefined;
13
13
  * are not technically mapped in your GraphQL schema.
14
14
  */
15
15
  export type EntityResolver<T extends Entity> = {
16
- [P in keyof T]: P extends "id" ? Resolver<T, Record<string, any>, IdOf<T>> : T[P] extends GraphQLPrimitive | GraphQLPrimitive[] ? Resolver<T, Record<string, any>, T[P]> : T[P] extends Collection<any, infer U> ? Resolver<T, Record<string, any>, U[]> : T[P] extends ReadOnlyCollection<any, infer U> ? Resolver<T, Record<string, any>, U[]> : T[P] extends Reference<any, infer U, infer N> ? Resolver<T, Record<string, any>, U> : T[P] extends Property<any, infer V> ? Resolver<T, Record<string, any>, V> : T[P] extends ReactiveGetter<any, infer V> ? Resolver<T, Record<string, any>, V> : T[P] extends Promise<infer V> ? Resolver<T, Record<string, any>, V> : T[P] extends () => Promise<infer V> ? Resolver<T, Record<string, any>, V> : T[P] extends () => infer V ? Resolver<T, Record<string, any>, V> : Resolver<T, Record<string, any>, T[P]>;
16
+ [P in keyof T]: P extends "id" ? Resolver<T, Record<string, any>, IdOf<T>> : T[P] extends GraphQLPrimitive | GraphQLPrimitive[] ? Resolver<T, Record<string, any>, T[P]> : T[P] extends Collection<any, infer U> ? Resolver<T, Record<string, any>, U[]> : T[P] extends ReadOnlyCollection<any, infer U> ? Resolver<T, Record<string, any>, U[]> : T[P] extends Reference<any, infer U, infer N> ? Resolver<T, Record<string, any>, U | N> : T[P] extends Property<any, infer V> ? Resolver<T, Record<string, any>, V> : T[P] extends ReactiveGetter<any, infer V> ? Resolver<T, Record<string, any>, V> : T[P] extends Promise<infer V> ? Resolver<T, Record<string, any>, V> : T[P] extends () => Promise<infer V> ? Resolver<T, Record<string, any>, V> : T[P] extends () => infer V ? Resolver<T, Record<string, any>, V> : Resolver<T, Record<string, any>, T[P]>;
17
17
  };
18
18
  /**
19
19
  * Creates field resolvers for each of the fields on our entity.
@@ -1 +1 @@
1
- {"version":3,"file":"entityResolver.d.ts","sourceRoot":"","sources":["../src/entityResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entityResolver.d.ts","sourceRoot":"","sources":["../src/entityResolver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hint.d.ts","sourceRoot":"","sources":["../src/hint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAGL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9D,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,EACpD,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,kBAAkB,GACvB,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAazB;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,iBAAiB,EAC1B,YAAY,EAAE,gBAAgB,GAC7B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAgCrB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,SAAS,CAO1F"}
1
+ {"version":3,"file":"hint.d.ts","sourceRoot":"","sources":["../src/hint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAGL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9D,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,EACpD,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,kBAAkB,GACvB,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAazB;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,iBAAiB,EAC1B,YAAY,EAAE,gBAAgB,GAC7B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkCrB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,SAAS,CAO1F"}
package/build/hint.js CHANGED
@@ -24,6 +24,9 @@ function selectionSetToObject(info, meta, gqlType, selectionSet) {
24
24
  const result = {};
25
25
  for (const selection of selectionSet.selections) {
26
26
  if (selection.kind === "Field") {
27
+ // If there are arguments, defer to the field resolver to apply them.
28
+ if (selection.arguments && selection.arguments.length > 0)
29
+ continue;
27
30
  const fieldName = selection.name.value;
28
31
  const field = gqlType.getFields()[fieldName];
29
32
  // This might be __typename, which is a meta field
package/build/hint.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hint.js","sourceRoot":"","sources":["../src/hint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hint.js","sourceRoot":"","sources":["../src/hint.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ export { CursorPageInfo, paginateCursor } from "./cursorPagination";
1
2
  export { entityResolver } from "./entityResolver";
2
3
  export { convertInfoToLoadHint } from "./hint";
4
+ export { LimitPageInfo, paginateLimit } from "./limitPagination";
3
5
  export { saveEntities, saveEntity } from "./saveEntity";
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
package/build/index.js CHANGED
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.saveEntity = exports.saveEntities = exports.convertInfoToLoadHint = exports.entityResolver = void 0;
3
+ exports.saveEntity = exports.saveEntities = exports.paginateLimit = exports.LimitPageInfo = exports.convertInfoToLoadHint = exports.entityResolver = exports.paginateCursor = exports.CursorPageInfo = void 0;
4
+ var cursorPagination_1 = require("./cursorPagination");
5
+ Object.defineProperty(exports, "CursorPageInfo", { enumerable: true, get: function () { return cursorPagination_1.CursorPageInfo; } });
6
+ Object.defineProperty(exports, "paginateCursor", { enumerable: true, get: function () { return cursorPagination_1.paginateCursor; } });
4
7
  var entityResolver_1 = require("./entityResolver");
5
8
  Object.defineProperty(exports, "entityResolver", { enumerable: true, get: function () { return entityResolver_1.entityResolver; } });
6
9
  var hint_1 = require("./hint");
7
10
  Object.defineProperty(exports, "convertInfoToLoadHint", { enumerable: true, get: function () { return hint_1.convertInfoToLoadHint; } });
11
+ var limitPagination_1 = require("./limitPagination");
12
+ Object.defineProperty(exports, "LimitPageInfo", { enumerable: true, get: function () { return limitPagination_1.LimitPageInfo; } });
13
+ Object.defineProperty(exports, "paginateLimit", { enumerable: true, get: function () { return limitPagination_1.paginateLimit; } });
8
14
  var saveEntity_1 = require("./saveEntity");
9
15
  Object.defineProperty(exports, "saveEntities", { enumerable: true, get: function () { return saveEntity_1.saveEntities; } });
10
16
  Object.defineProperty(exports, "saveEntity", { enumerable: true, get: function () { return saveEntity_1.saveEntity; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,+BAA+C;AAAtC,6GAAA,qBAAqB,OAAA;AAC9B,2CAAwD;AAA/C,0GAAA,YAAY,OAAA;AAAE,wGAAA,UAAU,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uDAAoE;AAA3D,kHAAA,cAAc,OAAA;AAAE,kHAAA,cAAc,OAAA;AACvC,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,+BAA+C;AAAtC,6GAAA,qBAAqB,OAAA;AAC9B,qDAAiE;AAAxD,gHAAA,aAAa,OAAA;AAAE,gHAAA,aAAa,OAAA;AACrC,2CAAwD;AAA/C,0GAAA,YAAY,OAAA;AAAE,wGAAA,UAAU,OAAA"}
@@ -0,0 +1,28 @@
1
+ import { type Entity, type MaybeAbstractEntityConstructor } from "joist-core";
2
+ import { type ContextWithEm, type PaginationFilter } from "./paginationUtils";
3
+ type LimitArgs<T extends Entity, F extends object = PaginationFilter<T>> = {
4
+ filter?: F | null;
5
+ limit?: number | null;
6
+ offset?: number | null;
7
+ };
8
+ type Page = {
9
+ offset: number;
10
+ limit: number;
11
+ };
12
+ /** Returns a limit/offset page shape for a generated query resolver. */
13
+ export declare function paginateLimit<T extends Entity, F extends object = PaginationFilter<T>>(ctx: ContextWithEm, type: MaybeAbstractEntityConstructor<T>, args: LimitArgs<T, F>): Promise<{
14
+ entities: T[];
15
+ pageInfo: LimitPageInfo<T>;
16
+ }>;
17
+ /** Lazily computes limit/offset page fields. */
18
+ export declare class LimitPageInfo<T extends Entity = Entity> {
19
+ #private;
20
+ constructor(ctx: ContextWithEm, type: MaybeAbstractEntityConstructor<T>, filter: PaginationFilter<T>, page: Page);
21
+ get hasNextPage(): Promise<boolean>;
22
+ get hasPreviousPage(): boolean;
23
+ get totalCount(): Promise<number>;
24
+ get nextPage(): Promise<number | undefined>;
25
+ get currentPage(): number;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=limitPagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitPagination.d.ts","sourceRoot":"","sources":["../src/limitPagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,KAAK,aAAa,EAAgB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE5F,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI;IACzE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AACF,KAAK,IAAI,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,wEAAwE;AACxE,wBAAsB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAC1F,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,EACvC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GACpB,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAMxD;AAED,gDAAgD;AAChD,qBAAa,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;;gBAOtC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI;IAOhH,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAElC;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,IAAI,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAEhC;IAED,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE1C;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;CAcF"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LimitPageInfo = void 0;
4
+ exports.paginateLimit = paginateLimit;
5
+ const paginationUtils_1 = require("./paginationUtils");
6
+ /** Returns a limit/offset page shape for a generated query resolver. */
7
+ async function paginateLimit(ctx, type, args) {
8
+ const limit = args.limit ?? paginationUtils_1.defaultLimit;
9
+ const offset = args.offset ?? 0;
10
+ const filter = (args.filter ?? {});
11
+ const entities = await ctx.em.findGql(type, filter, { limit, offset });
12
+ return { entities, pageInfo: new LimitPageInfo(ctx, type, filter, { limit, offset }) };
13
+ }
14
+ /** Lazily computes limit/offset page fields. */
15
+ class LimitPageInfo {
16
+ #ctx;
17
+ #filter;
18
+ #page;
19
+ #totalCountPromise;
20
+ #type;
21
+ constructor(ctx, type, filter, page) {
22
+ this.#ctx = ctx;
23
+ this.#type = type;
24
+ this.#filter = filter;
25
+ this.#page = page;
26
+ }
27
+ get hasNextPage() {
28
+ return this.#hasNextPage();
29
+ }
30
+ get hasPreviousPage() {
31
+ return this.#page.offset > 0;
32
+ }
33
+ get totalCount() {
34
+ return (this.#totalCountPromise ??= this.#ctx.em.findCount(this.#type, this.#filter));
35
+ }
36
+ get nextPage() {
37
+ return this.#nextPage();
38
+ }
39
+ get currentPage() {
40
+ return Math.floor(this.#page.offset / this.#page.limit) + 1;
41
+ }
42
+ /** Returns whether another page exists after this page. */
43
+ async #hasNextPage() {
44
+ const total = await this.totalCount;
45
+ const { offset, limit } = this.#page;
46
+ return offset + limit < total;
47
+ }
48
+ /** Returns the next limit/offset page if there is one. */
49
+ async #nextPage() {
50
+ if (!(await this.hasNextPage))
51
+ return undefined;
52
+ return this.currentPage + 1;
53
+ }
54
+ }
55
+ exports.LimitPageInfo = LimitPageInfo;
56
+ //# sourceMappingURL=limitPagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitPagination.js","sourceRoot":"","sources":["../src/limitPagination.ts"],"names":[],"mappings":";;;AAWA,sCAUC;AApBD,uDAA4F;AAS5F,wEAAwE;AACjE,KAAK,UAAU,aAAa,CACjC,GAAkB,EAClB,IAAuC,EACvC,IAAqB;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,8BAAY,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAwB,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,gDAAgD;AAChD,MAAa,aAAa;IACxB,IAAI,CAAgB;IACpB,OAAO,CAAsB;IAC7B,KAAK,CAAO;IACZ,kBAAkB,CAA8B;IAChD,KAAK,CAAoC;IAEzC,YAAY,GAAkB,EAAE,IAAuC,EAAE,MAA2B,EAAE,IAAU;QAC9G,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,CAAC,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,YAAY;QAChB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;QACpC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACrC,OAAO,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO,SAAS,CAAC;QAChD,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IAC9B,CAAC;CACF;AA9CD,sCA8CC"}
@@ -0,0 +1,7 @@
1
+ import { type Entity, type EntityManager, type GraphQLFilterWithAlias } from "joist-core";
2
+ export type ContextWithEm = {
3
+ em: EntityManager;
4
+ };
5
+ export type PaginationFilter<T extends Entity> = GraphQLFilterWithAlias<T>;
6
+ export declare const defaultLimit = 100;
7
+ //# sourceMappingURL=paginationUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginationUtils.d.ts","sourceRoot":"","sources":["../src/paginationUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE1F,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,aAAa,CAAA;CAAE,CAAC;AAClD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAE3E,eAAO,MAAM,YAAY,MAAM,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultLimit = void 0;
4
+ exports.defaultLimit = 100;
5
+ //# sourceMappingURL=paginationUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginationUtils.js","sourceRoot":"","sources":["../src/paginationUtils.ts"],"names":[],"mappings":";;;AAKa,QAAA,YAAY,GAAG,GAAG,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "joist-graphql-resolver-utils",
3
- "version": "2.2.0-next.4",
3
+ "version": "2.2.0-next.40",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,6 +10,10 @@
10
10
  "main": "build/index.js",
11
11
  "exports": {
12
12
  ".": "./build/index.js",
13
+ "./index.js": {
14
+ "types": "./build/index.d.ts",
15
+ "default": "./build/index.js"
16
+ },
13
17
  "./tests": "./build/tests.js"
14
18
  },
15
19
  "types": "build/index.d.ts",
@@ -20,8 +24,8 @@
20
24
  "build"
21
25
  ],
22
26
  "peerDependencies": {
23
- "joist-core": "2.2.0-next.4",
24
- "joist-test-utils": "2.2.0-next.4"
27
+ "joist-core": "2.2.0-next.40",
28
+ "joist-test-utils": "2.2.0-next.40"
25
29
  },
26
30
  "dependencies": {
27
31
  "graphql": "^16.14.0"