@nest-boot/graphql-connection 6.10.0 → 6.10.1

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,42 @@
1
+ import { EntityManager } from "@mikro-orm/core";
2
+ import { ConnectionFindOptions } from "./connection.manager";
3
+ import { ConnectionArgsInterface, EdgeInterface } from "./interfaces";
4
+ import { ConnectionClass } from "./types";
5
+ export declare class ConnectionQueryBuilder<Entity extends object, Hint extends string = never, Fields extends string = "*", Excludes extends string = never> {
6
+ private readonly entityManager;
7
+ private readonly connectionClass;
8
+ private readonly args;
9
+ private readonly options?;
10
+ private readonly metadata;
11
+ private readonly limit;
12
+ private readonly cursor;
13
+ private readonly pagingType;
14
+ private readonly queryOrder;
15
+ private readonly queryOrderMap;
16
+ private readonly findOptions;
17
+ private readonly optionFilterQuery;
18
+ private readonly cursorFilterQuery;
19
+ private readonly queryStringFilterQuery;
20
+ private readonly totalCountFilterQuery;
21
+ private readonly allFilterQuery;
22
+ constructor(entityManager: EntityManager, connectionClass: ConnectionClass<Entity>, args: ConnectionArgsInterface<Entity>, options?: ConnectionFindOptions<Entity, Hint, Fields, Excludes> | undefined);
23
+ private getLimit;
24
+ private getCursor;
25
+ private getPagingType;
26
+ private getQueryOrder;
27
+ private getQueryOrderMap;
28
+ private getFindOptions;
29
+ private getCursorFilterQuery;
30
+ private getQueryStringToFilterQuery;
31
+ private mergeFilterQuery;
32
+ query(): Promise<{
33
+ totalCount: number;
34
+ edges: EdgeInterface<Entity>[];
35
+ pageInfo: {
36
+ startCursor: string;
37
+ endCursor: string;
38
+ hasNextPage: boolean;
39
+ hasPreviousPage: boolean;
40
+ };
41
+ }>;
42
+ }
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConnectionQueryBuilder = void 0;
7
+ const core_1 = require("@mikro-orm/core");
8
+ const compact_1 = __importDefault(require("lodash/compact"));
9
+ const get_1 = __importDefault(require("lodash/get"));
10
+ const set_1 = __importDefault(require("lodash/set"));
11
+ const cursor_1 = require("./cursor");
12
+ const enums_1 = require("./enums");
13
+ const graphql_connection_constants_1 = require("./graphql-connection.constants");
14
+ const search_syntax_lexer_1 = require("./search-syntax.lexer");
15
+ const search_syntax_parser_1 = require("./search-syntax.parser");
16
+ const search_syntax_visitor_1 = require("./search-syntax.visitor");
17
+ function entityPropertyToSimpleType(type) {
18
+ switch (type) {
19
+ case "boolean":
20
+ case "BooleanType":
21
+ return "boolean";
22
+ case "number":
23
+ case "IntegerType":
24
+ case "SmallIntType":
25
+ case "MediumIntType":
26
+ case "FloatType":
27
+ case "DoubleType":
28
+ return "number";
29
+ case "Date":
30
+ case "DateType":
31
+ case "DateTimeType":
32
+ return "date";
33
+ case "bigint":
34
+ case "BigIntType":
35
+ return "bigint";
36
+ default:
37
+ return "string";
38
+ }
39
+ }
40
+ class ConnectionQueryBuilder {
41
+ constructor(entityManager, connectionClass, args, options) {
42
+ this.entityManager = entityManager;
43
+ this.connectionClass = connectionClass;
44
+ this.args = args;
45
+ this.options = options;
46
+ this.limit = 0;
47
+ this.cursor = null;
48
+ this.queryOrderMap = [];
49
+ this.optionFilterQuery = null;
50
+ this.cursorFilterQuery = null;
51
+ this.queryStringFilterQuery = null;
52
+ this.totalCountFilterQuery = null;
53
+ this.allFilterQuery = null;
54
+ this.metadata = Reflect.getMetadata(graphql_connection_constants_1.GRAPHQL_CONNECTION_METADATA, connectionClass);
55
+ if (typeof this.metadata === "undefined") {
56
+ throw new Error("Connection metadata not found");
57
+ }
58
+ this.limit = this.getLimit();
59
+ this.cursor = this.getCursor();
60
+ this.pagingType = this.getPagingType();
61
+ this.queryOrder = this.getQueryOrder();
62
+ this.queryOrderMap = this.getQueryOrderMap();
63
+ this.findOptions = this.getFindOptions();
64
+ this.optionFilterQuery = this.options?.where ?? null;
65
+ this.cursorFilterQuery = this.getCursorFilterQuery();
66
+ this.queryStringFilterQuery = this.getQueryStringToFilterQuery();
67
+ this.totalCountFilterQuery = this.mergeFilterQuery((0, compact_1.default)([this.optionFilterQuery, this.queryStringFilterQuery]));
68
+ this.allFilterQuery = this.mergeFilterQuery((0, compact_1.default)([
69
+ this.cursorFilterQuery,
70
+ this.optionFilterQuery,
71
+ this.queryStringFilterQuery,
72
+ ]));
73
+ }
74
+ getLimit() {
75
+ return this.args.first ?? this.args.last ?? 0;
76
+ }
77
+ getCursor() {
78
+ return this.args.after != null
79
+ ? new cursor_1.Cursor(this.args.after)
80
+ : this.args.before != null
81
+ ? new cursor_1.Cursor(this.args.before)
82
+ : null;
83
+ }
84
+ getPagingType() {
85
+ const { first, last, after, before } = this.args;
86
+ const isForwardPaging = typeof first === "number" || typeof after === "string";
87
+ const isBackwardPaging = typeof last === "number" || typeof before === "string";
88
+ if (isForwardPaging && isBackwardPaging) {
89
+ if ((isForwardPaging && before != null) ||
90
+ (isBackwardPaging && after != null)) {
91
+ throw new Error("paging must use either first/after or last/before");
92
+ }
93
+ else {
94
+ throw new Error("cursor-based pagination cannot be forwards AND backwards");
95
+ }
96
+ }
97
+ return isBackwardPaging ? enums_1.PagingType.BACKWARD : enums_1.PagingType.FORWARD;
98
+ }
99
+ getQueryOrder() {
100
+ const direction = this.args.orderBy?.direction ?? enums_1.OrderDirection.ASC;
101
+ return (this.pagingType === enums_1.PagingType.FORWARD
102
+ ? direction === enums_1.OrderDirection.ASC
103
+ : direction === enums_1.OrderDirection.DESC)
104
+ ? core_1.QueryOrder.ASC
105
+ : core_1.QueryOrder.DESC;
106
+ }
107
+ getQueryOrderMap() {
108
+ if (typeof this.args.orderBy === "undefined") {
109
+ return [
110
+ {
111
+ id: this.queryOrder,
112
+ },
113
+ ];
114
+ }
115
+ const queryOrderMap = [
116
+ (0, set_1.default)({}, this.args.orderBy.field, this.queryOrder),
117
+ ];
118
+ if (this.args.orderBy.field !== "id") {
119
+ queryOrderMap.push({
120
+ id: this.queryOrder,
121
+ });
122
+ }
123
+ return queryOrderMap;
124
+ }
125
+ getFindOptions() {
126
+ return {
127
+ ...(this.options ?? {}),
128
+ limit: this.limit + 1,
129
+ orderBy: this.queryOrderMap,
130
+ };
131
+ }
132
+ getCursorFilterQuery() {
133
+ const idFilterQuery = typeof this.cursor?.id !== "undefined"
134
+ ? // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
135
+ {
136
+ id: {
137
+ [this.pagingType === enums_1.PagingType.FORWARD ? "$gt" : "$lt"]: this.cursor.id,
138
+ },
139
+ }
140
+ : null;
141
+ return typeof this.args.orderBy !== "undefined" &&
142
+ typeof this.cursor?.value !== "undefined"
143
+ ? {
144
+ $or: [
145
+ (0, set_1.default)({}, this.args.orderBy.field, (this.pagingType === enums_1.PagingType.FORWARD
146
+ ? this.args.orderBy.direction === enums_1.OrderDirection.ASC
147
+ : this.args.orderBy.direction === enums_1.OrderDirection.DESC)
148
+ ? { $gt: this.cursor.value }
149
+ : { $lt: this.cursor.value }),
150
+ idFilterQuery !== null
151
+ ? {
152
+ $and: [
153
+ (0, set_1.default)({}, this.args.orderBy.field, {
154
+ $eq: this.cursor.value,
155
+ }),
156
+ idFilterQuery,
157
+ ],
158
+ }
159
+ : (0, set_1.default)({}, this.args.orderBy.field, { $eq: this.cursor.value }),
160
+ ],
161
+ }
162
+ : idFilterQuery;
163
+ }
164
+ getQueryStringToFilterQuery() {
165
+ if (typeof this.args.query !== "undefined" &&
166
+ this.args.query.trim() !== "") {
167
+ const { entityClass, fieldOptionsMap } = this.metadata;
168
+ const entityMetadata = this.entityManager.getMetadata().get(entityClass);
169
+ if (typeof entityMetadata === "undefined") {
170
+ throw new Error("Entity metadata not found");
171
+ }
172
+ const visitor = new search_syntax_visitor_1.SearchSyntaxVisitor(this.entityManager, [...fieldOptionsMap.values()].reduce((result, fieldOptions) => {
173
+ const replacedField = typeof fieldOptions.replacement === "string"
174
+ ? fieldOptions.replacement
175
+ : fieldOptions.field;
176
+ const prop = (0, get_1.default)(entityMetadata.properties, replacedField.split(".").join(".targetMeta.properties."));
177
+ result.set(fieldOptions.field, {
178
+ field: fieldOptions.field,
179
+ type: fieldOptions.type ??
180
+ entityPropertyToSimpleType(prop?.type),
181
+ replacement: fieldOptions
182
+ .replacement,
183
+ array: fieldOptions.array ?? prop?.array,
184
+ fulltext: fieldOptions.fulltext ??
185
+ entityMetadata.indexes.some(({ type, properties }) => type === "fulltext" && properties === replacedField),
186
+ searchable: fieldOptions.searchable,
187
+ filterable: fieldOptions.filterable,
188
+ });
189
+ return result;
190
+ }, new Map()));
191
+ search_syntax_parser_1.searchSyntaxParser.input = search_syntax_lexer_1.searchSyntaxLexer.tokenize(this.args.query).tokens;
192
+ if (search_syntax_parser_1.searchSyntaxParser.errors.length > 0) {
193
+ throw Error(search_syntax_parser_1.searchSyntaxParser.errors[0].message);
194
+ }
195
+ return visitor.visit(search_syntax_parser_1.searchSyntaxParser.query()) ?? null;
196
+ }
197
+ return null;
198
+ }
199
+ mergeFilterQuery(filterQueryGroup) {
200
+ if (filterQueryGroup.length === 0) {
201
+ return null;
202
+ }
203
+ if (filterQueryGroup.length === 1) {
204
+ return filterQueryGroup[0];
205
+ }
206
+ return {
207
+ $and: filterQueryGroup,
208
+ };
209
+ }
210
+ async query() {
211
+ let [entities, totalCount] = await Promise.all([
212
+ this.allFilterQuery === null
213
+ ? this.entityManager.findAll(this.metadata.entityClass, this.findOptions)
214
+ : this.entityManager.find(this.metadata.entityClass, this.allFilterQuery, this.findOptions),
215
+ (this.totalCountFilterQuery === null
216
+ ? this.entityManager.findAll(this.metadata.entityClass, {
217
+ fields: ["id"],
218
+ limit: 10000,
219
+ })
220
+ : this.entityManager.find(this.metadata.entityClass, this.totalCountFilterQuery, { fields: ["id"], limit: 10000 })).then((result) => result.length),
221
+ ]);
222
+ // 重新排序结果
223
+ entities =
224
+ this.pagingType === enums_1.PagingType.FORWARD ? entities : entities.reverse();
225
+ // 根据结果生成 edges
226
+ const edges = (entities.length > this.limit
227
+ ? this.pagingType === enums_1.PagingType.FORWARD
228
+ ? entities.slice(0, -1)
229
+ : entities.slice(1)
230
+ : entities).map((node) => ({
231
+ node: node,
232
+ cursor: new cursor_1.Cursor({
233
+ id: node?.id,
234
+ ...(typeof this.args.orderBy !== "undefined"
235
+ ? { value: (0, get_1.default)(node, this.args.orderBy.field) }
236
+ : {}),
237
+ }).toString(),
238
+ }));
239
+ // 返回集合
240
+ return {
241
+ totalCount,
242
+ edges,
243
+ pageInfo: {
244
+ ...(this.pagingType === enums_1.PagingType.FORWARD
245
+ ? {
246
+ hasNextPage: entities.length > this.limit,
247
+ hasPreviousPage: this.cursor != null,
248
+ }
249
+ : {
250
+ hasNextPage: this.cursor != null,
251
+ hasPreviousPage: entities.length > this.limit,
252
+ }),
253
+ startCursor: edges[0]?.cursor,
254
+ endCursor: edges[edges.length - 1]?.cursor,
255
+ },
256
+ };
257
+ }
258
+ }
259
+ exports.ConnectionQueryBuilder = ConnectionQueryBuilder;
260
+ //# sourceMappingURL=connection-query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-query-builder.js","sourceRoot":"","sources":["../src/connection-query-builder.ts"],"names":[],"mappings":";;;;;;AAAA,0CAOyB;AACzB,6DAAqC;AACrC,qDAA6B;AAC7B,qDAA6B;AAG7B,qCAAkC;AAClC,mCAAqD;AACrD,iFAA6E;AAS7E,+DAA0D;AAC1D,iEAA4D;AAC5D,mEAA8D;AAG9D,SAAS,0BAA0B,CACjC,IAA4B;IAE5B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,aAAa;YAChB,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ,CAAC;QACd,KAAK,aAAa,CAAC;QACnB,KAAK,cAAc,CAAC;QACpB,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY;YACf,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAa,sBAAsB;IA8BjC,YACmB,aAA4B,EAC5B,eAAwC,EACxC,IAAqC,EACrC,OAKhB;QARgB,kBAAa,GAAb,aAAa,CAAe;QAC5B,oBAAe,GAAf,eAAe,CAAyB;QACxC,SAAI,GAAJ,IAAI,CAAiC;QACrC,YAAO,GAAP,OAAO,CAKvB;QA/Bc,UAAK,GAAW,CAAC,CAAC;QAElB,WAAM,GAAkB,IAAI,CAAC;QAM7B,kBAAa,GAA4B,EAAE,CAAC;QAI5C,sBAAiB,GAA+B,IAAI,CAAC;QAErD,sBAAiB,GAA+B,IAAI,CAAC;QAErD,2BAAsB,GAA+B,IAAI,CAAC;QAE1D,0BAAqB,GAA+B,IAAI,CAAC;QAEzD,mBAAc,GAA+B,IAAI,CAAC;QAajE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,WAAW,CACjC,0DAA2B,EAC3B,eAAe,CAChB,CAAC;QAEF,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEzC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC;QACrD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACrD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAEjE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAChD,IAAA,iBAAO,EAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAC/D,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CACzC,IAAA,iBAAO,EAAC;YACN,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,sBAAsB;SAC5B,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,QAAQ;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,SAAS;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI;YAC5B,CAAC,CAAC,IAAI,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI;gBACxB,CAAC,CAAC,IAAI,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC9B,CAAC,CAAC,IAAI,CAAC;IACb,CAAC;IAEO,aAAa;QACnB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAEjD,MAAM,eAAe,GACnB,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;QACzD,MAAM,gBAAgB,GACpB,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC;QAEzD,IAAI,eAAe,IAAI,gBAAgB,EAAE,CAAC;YACxC,IACE,CAAC,eAAe,IAAI,MAAM,IAAI,IAAI,CAAC;gBACnC,CAAC,gBAAgB,IAAI,KAAK,IAAI,IAAI,CAAC,EACnC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,gBAAgB,CAAC,CAAC,CAAC,kBAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAU,CAAC,OAAO,CAAC;IACrE,CAAC;IAEO,aAAa;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,sBAAc,CAAC,GAAG,CAAC;QAErE,OAAO,CACL,IAAI,CAAC,UAAU,KAAK,kBAAU,CAAC,OAAO;YACpC,CAAC,CAAC,SAAS,KAAK,sBAAc,CAAC,GAAG;YAClC,CAAC,CAAC,SAAS,KAAK,sBAAc,CAAC,IAAI,CACtC;YACC,CAAC,CAAC,iBAAU,CAAC,GAAG;YAChB,CAAC,CAAC,iBAAU,CAAC,IAAI,CAAC;IACtB,CAAC;IAEO,gBAAgB;QACtB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC7C,OAAO;gBACL;oBACE,EAAE,EAAE,IAAI,CAAC,UAAU;iBACK;aAC3B,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAA4B;YAC7C,IAAA,aAAG,EACD,EAAE,EACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EACvB,IAAI,CAAC,UAAU,CACS;SAC3B,CAAC;QAEF,IAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAgB,KAAK,IAAI,EAAE,CAAC;YACjD,aAAa,CAAC,IAAI,CAAC;gBACjB,EAAE,EAAE,IAAI,CAAC,UAAU;aACK,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,cAAc;QACpB,OAAO;YACL,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;YACrB,OAAO,EAAE,IAAI,CAAC,aAAa;SAC5B,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,MAAM,aAAa,GACjB,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,WAAW;YACpC,CAAC,CAAC,yEAAyE;gBACxE;oBACC,EAAE,EAAE;wBACF,CAAC,IAAI,CAAC,UAAU,KAAK,kBAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EACtD,IAAI,CAAC,MAAM,CAAC,EAAE;qBACjB;iBACiC;YACtC,CAAC,CAAC,IAAI,CAAC;QAEX,OAAO,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,WAAW;YAC7C,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,WAAW;YACzC,CAAC,CAAE;gBACC,GAAG,EAAE;oBACH,IAAA,aAAG,EACD,EAAE,EACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EACvB,CACE,IAAI,CAAC,UAAU,KAAK,kBAAU,CAAC,OAAO;wBACpC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,sBAAc,CAAC,GAAG;wBACpD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,sBAAc,CAAC,IAAI,CACxD;wBACC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;wBAC5B,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAC/B;oBACD,aAAa,KAAK,IAAI;wBACpB,CAAC,CAAC;4BACE,IAAI,EAAE;gCACJ,IAAA,aAAG,EAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oCAC/B,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;iCACvB,CAAC;gCACF,aAAa;6BACd;yBACF;wBACH,CAAC,CAAC,IAAA,aAAG,EAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;iBACjE;aACsB;YAC3B,CAAC,CAAC,aAAa,CAAC;IACpB,CAAC;IAEO,2BAA2B;QACjC,IACE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW;YACtC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAC7B,CAAC;YACD,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEvD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAEzE,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,2CAAmB,CACrC,IAAI,CAAC,aAAa,EAClB,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE;gBAC5D,MAAM,aAAa,GACjB,OAAQ,YAAoB,CAAC,WAAW,KAAK,QAAQ;oBACnD,CAAC,CAAE,YAAoB,CAAC,WAAW;oBACnC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;gBAEzB,MAAM,IAAI,GAAuC,IAAA,aAAG,EAClD,cAAc,CAAC,UAAU,EACzB,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CACzD,CAAC;gBAEF,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE;oBAC7B,KAAK,EAAE,YAAY,CAAC,KAAK;oBACzB,IAAI,EACD,YAAwD,CAAC,IAAI;wBAC9D,0BAA0B,CAAC,IAAI,EAAE,IAAI,CAAC;oBACxC,WAAW,EAAG,YAAgD;yBAC3D,WAAW;oBACd,KAAK,EAAE,YAAY,CAAC,KAAK,IAAI,IAAI,EAAE,KAAK;oBACxC,QAAQ,EACN,YAAY,CAAC,QAAQ;wBACrB,cAAc,CAAC,OAAO,CAAC,IAAI,CACzB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CACvB,IAAI,KAAK,UAAU,IAAI,UAAU,KAAK,aAAa,CACtD;oBACH,UAAU,EAAE,YAAY,CAAC,UAAU;oBACnC,UAAU,EAAE,YAAY,CAAC,UAAU;iBACpC,CAAC,CAAC;gBAEH,OAAO,MAAM,CAAC;YAChB,CAAC,EAAE,IAAI,GAAG,EAAsD,CAAC,CAClE,CAAC;YAEF,yCAAkB,CAAC,KAAK,GAAG,uCAAiB,CAAC,QAAQ,CACnD,IAAI,CAAC,IAAI,CAAC,KAAK,CAChB,CAAC,MAAM,CAAC;YAET,IAAI,yCAAkB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,KAAK,CAAC,yCAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,OAAO,CAAC,KAAK,CAAC,yCAAkB,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;QAC3D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,gBAAgB,CACtB,gBAAuC;QAEvC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO;YACL,IAAI,EAAE,gBAAgB;SACA,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7C,IAAI,CAAC,cAAc,KAAK,IAAI;gBAC1B,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CACxB,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,IAAI,CAAC,WAAW,CACjB;gBACH,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,WAAW,CACjB;YACL,CAAC,IAAI,CAAC,qBAAqB,KAAK,IAAI;gBAClC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;oBACpD,MAAM,EAAE,CAAC,IAAI,CAAQ;oBACrB,KAAK,EAAE,KAAK;iBACb,CAAC;gBACJ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,IAAI,CAAC,qBAAqB,EAC1B,EAAE,MAAM,EAAE,CAAC,IAAI,CAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CACxC,CACJ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;SAClC,CAAC,CAAC;QAEH,SAAS;QACT,QAAQ;YACN,IAAI,CAAC,UAAU,KAAK,kBAAU,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEzE,eAAe;QACf,MAAM,KAAK,GAAG,CACZ,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;YAC1B,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,kBAAU,CAAC,OAAO;gBACtC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACrB,CAAC,CAAC,QAAQ,CACb,CAAC,GAAG,CAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,IAAc;YACpB,MAAM,EAAE,IAAI,eAAM,CAAC;gBACjB,EAAE,EAAG,IAAY,EAAE,EAAE;gBACrB,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,WAAW;oBAC1C,CAAC,CAAC,EAAE,KAAK,EAAE,IAAA,aAAG,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBAC/C,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC,QAAQ,EAAE;SACd,CAAC,CAAC,CAAC;QAEJ,OAAO;QACP,OAAO;YACL,UAAU;YACV,KAAK;YACL,QAAQ,EAAE;gBACR,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,kBAAU,CAAC,OAAO;oBACxC,CAAC,CAAC;wBACE,WAAW,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;wBACzC,eAAe,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;qBACrC;oBACH,CAAC,CAAC;wBACE,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;wBAChC,eAAe,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;qBAC9C,CAAC;gBACN,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM;gBAC7B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM;aAC3C;SACF,CAAC;IACJ,CAAC;CACF;AArVD,wDAqVC"}
@@ -1,13 +1,12 @@
1
1
  import { EntityManager, type FilterQuery } from "@mikro-orm/core";
2
- import type { FindByCursorOptions } from "@mikro-orm/core/drivers";
2
+ import type { FindOptions } from "@mikro-orm/core/drivers";
3
3
  import { ConnectionArgsInterface, ConnectionInterface } from "./interfaces";
4
4
  import { ConnectionClass } from "./types";
5
- export interface ConnectionFindOptions<Entity extends object, Hint extends string = never, Fields extends string = "*", Excludes extends string = never> extends Exclude<FindByCursorOptions<Entity, Hint, Fields, Excludes>, "before" | "after" | "first" | "last" | "orderBy"> {
5
+ export interface ConnectionFindOptions<Entity extends object, Hint extends string = never, Fields extends string = "*", Excludes extends string = never> extends Exclude<FindOptions<Entity, Hint, Fields, Excludes>, "limit" | "offset" | "orderBy"> {
6
6
  where?: FilterQuery<Entity>;
7
7
  }
8
8
  export declare class ConnectionManager {
9
- private readonly entityManager;
10
- constructor(entityManager: EntityManager);
11
- private convertQueryStringToFilterQuery;
12
- find<Entity extends object, Hint extends string = never, Fields extends string = "*", Excludes extends string = never>(connectionClass: ConnectionClass<Entity>, args: ConnectionArgsInterface<Entity, Hint, Fields, Excludes>, options?: ConnectionFindOptions<Entity, Hint, Fields, Excludes>): Promise<ConnectionInterface<Entity>>;
9
+ private readonly em;
10
+ constructor(em: EntityManager);
11
+ find<Entity extends object, Hint extends string = never, Fields extends string = "*", Excludes extends string = never>(connectionClass: ConnectionClass<Entity>, args: ConnectionArgsInterface<Entity>, options?: ConnectionFindOptions<Entity, Hint, Fields, Excludes>): Promise<ConnectionInterface<Entity>>;
13
12
  }
@@ -12,117 +12,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ConnectionManager = void 0;
13
13
  const core_1 = require("@mikro-orm/core");
14
14
  const common_1 = require("@nestjs/common");
15
- const lodash_1 = require("lodash");
16
- const graphql_connection_constants_1 = require("./graphql-connection.constants");
17
- const search_syntax_lexer_1 = require("./search-syntax.lexer");
18
- const search_syntax_parser_1 = require("./search-syntax.parser");
19
- const search_syntax_visitor_1 = require("./search-syntax.visitor");
20
- function entityPropertyToSimpleType(type) {
21
- switch (type) {
22
- case "boolean":
23
- case "BooleanType":
24
- return "boolean";
25
- case "number":
26
- case "IntegerType":
27
- case "SmallIntType":
28
- case "MediumIntType":
29
- case "FloatType":
30
- case "DoubleType":
31
- return "number";
32
- case "Date":
33
- case "DateType":
34
- case "DateTimeType":
35
- return "date";
36
- case "bigint":
37
- case "BigIntType":
38
- return "bigint";
39
- default:
40
- return "string";
41
- }
42
- }
15
+ const connection_query_builder_1 = require("./connection-query-builder");
43
16
  let ConnectionManager = class ConnectionManager {
44
- constructor(entityManager) {
45
- this.entityManager = entityManager;
46
- }
47
- convertQueryStringToFilterQuery(connectionMetadata, query) {
48
- const { entityClass, fieldOptionsMap } = connectionMetadata;
49
- const entityMetadata = this.entityManager.getMetadata().get(entityClass);
50
- if (typeof entityMetadata === "undefined") {
51
- throw new Error("Entity metadata not found");
52
- }
53
- const visitor = new search_syntax_visitor_1.SearchSyntaxVisitor(this.entityManager, [...fieldOptionsMap.values()].reduce((result, fieldOptions) => {
54
- const replacedField = typeof fieldOptions.replacement === "string"
55
- ? fieldOptions.replacement
56
- : fieldOptions.field;
57
- const prop = (0, lodash_1.get)(entityMetadata.properties, replacedField.split(".").join(".targetMeta.properties."));
58
- result.set(fieldOptions.field, {
59
- field: fieldOptions.field,
60
- type: fieldOptions.type ??
61
- entityPropertyToSimpleType(prop?.type),
62
- replacement: fieldOptions
63
- .replacement,
64
- array: fieldOptions.array ?? prop?.array,
65
- fulltext: fieldOptions.fulltext ??
66
- entityMetadata.indexes.some(({ type, properties }) => type === "fulltext" && properties === replacedField),
67
- searchable: fieldOptions.searchable,
68
- filterable: fieldOptions.filterable,
69
- });
70
- return result;
71
- }, new Map()));
72
- search_syntax_parser_1.searchSyntaxParser.input = search_syntax_lexer_1.searchSyntaxLexer.tokenize(query).tokens;
73
- if (search_syntax_parser_1.searchSyntaxParser.errors.length > 0) {
74
- throw Error(search_syntax_parser_1.searchSyntaxParser.errors[0].message);
75
- }
76
- return visitor.visit(search_syntax_parser_1.searchSyntaxParser.query()) ?? {};
17
+ constructor(em) {
18
+ this.em = em;
77
19
  }
78
20
  async find(connectionClass, args, options) {
79
- const connectionMetadata = Reflect.getMetadata(graphql_connection_constants_1.GRAPHQL_CONNECTION_METADATA, connectionClass);
80
- if (typeof connectionMetadata === "undefined") {
81
- throw new Error("Connection metadata not found");
82
- }
83
- const orderBy = [];
84
- if (typeof args.orderBy === "undefined") {
85
- orderBy.push({ id: core_1.QueryOrder.ASC });
86
- }
87
- else {
88
- orderBy.push({
89
- [args.orderBy.field]: args.orderBy.direction,
90
- });
91
- if (args.orderBy.field !== "id") {
92
- orderBy.push({ id: core_1.QueryOrder.ASC });
93
- }
94
- }
95
- let filterQuery = options?.where ?? {};
96
- if (typeof args.query !== "undefined" && args.query.trim() !== "") {
97
- const queryFilterQuery = this.convertQueryStringToFilterQuery(connectionMetadata, args.query);
98
- filterQuery =
99
- Object.keys(filterQuery).length === 0
100
- ? queryFilterQuery
101
- : {
102
- $and: [filterQuery, queryFilterQuery],
103
- };
104
- }
105
- const cursor = await this.entityManager.findByCursor(connectionMetadata.entityClass, filterQuery, {
106
- ...options,
107
- before: args.before,
108
- after: args.after,
109
- first: args.first,
110
- last: args.last,
111
- orderBy,
112
- });
113
- return {
114
- totalCount: cursor.totalCount,
115
- edges: cursor.items.map((node) => ({
116
- node: node,
117
- cursor: cursor.from(node),
118
- })),
119
- pageInfo: {
120
- hasNextPage: cursor.hasNextPage,
121
- hasPreviousPage: cursor.hasPrevPage,
122
- startCursor: cursor.startCursor,
123
- endCursor: cursor.endCursor,
124
- },
125
- };
21
+ return await new connection_query_builder_1.ConnectionQueryBuilder(this.em, connectionClass, args, options).query();
126
22
  }
127
23
  };
128
24
  exports.ConnectionManager = ConnectionManager;
@@ -1 +1 @@
1
- {"version":3,"file":"connection.manager.js","sourceRoot":"","sources":["../src/connection.manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.manager.js","sourceRoot":"","sources":["../src/connection.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAAkE;AAElE,2CAA4C;AAE5C,yEAAoE;AAiB7D,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YAA6B,EAAiB;QAAjB,OAAE,GAAF,EAAE,CAAe;IAAG,CAAC;IAElD,KAAK,CAAC,IAAI,CAMR,eAAwC,EACxC,IAAqC,EACrC,OAA+D;QAE/D,OAAO,MAAM,IAAI,iDAAsB,CACrC,IAAI,CAAC,EAAE,EACP,eAAe,EACf,IAAI,EACJ,OAAO,CACR,CAAC,KAAK,EAAE,CAAC;IACZ,CAAC;CACF,CAAA;AApBY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAEsB,oBAAa;GADnC,iBAAiB,CAoB7B"}
@@ -0,0 +1,6 @@
1
+ export declare class Cursor implements Record<string, any> {
2
+ id?: string;
3
+ [key: string]: any;
4
+ constructor(cursor: string | Record<string, any>);
5
+ toString(): string;
6
+ }
package/dist/cursor.js ADDED
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Cursor = void 0;
4
+ class Cursor {
5
+ constructor(cursor) {
6
+ if (typeof cursor === "string") {
7
+ try {
8
+ const payload = JSON.parse(Buffer.from(cursor, "base64").toString());
9
+ Object.entries(payload).forEach(([key, value]) => {
10
+ this[key] = value;
11
+ });
12
+ }
13
+ catch (err) {
14
+ //
15
+ }
16
+ }
17
+ else {
18
+ Object.entries(cursor).forEach(([key, value]) => {
19
+ this[key] = value;
20
+ });
21
+ }
22
+ }
23
+ toString() {
24
+ return Buffer.from(JSON.stringify(this)).toString("base64");
25
+ }
26
+ }
27
+ exports.Cursor = Cursor;
28
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../src/cursor.ts"],"names":[],"mappings":";;;AAAA,MAAa,MAAM;IAKjB,YAAY,MAAoC;QAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAErE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACpB,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,EAAE;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;CACF;AA1BD,wBA0BC"}
@@ -1,2 +1,3 @@
1
1
  export * from "./comparator-operator.enum";
2
2
  export * from "./order-direction.enum";
3
+ export * from "./paging-type.enum";
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./comparator-operator.enum"), exports);
18
18
  __exportStar(require("./order-direction.enum"), exports);
19
+ __exportStar(require("./paging-type.enum"), exports);
19
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enums/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,yDAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enums/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,yDAAuC;AACvC,qDAAmC"}
@@ -0,0 +1,4 @@
1
+ export declare enum PagingType {
2
+ FORWARD = "FORWARD",
3
+ BACKWARD = "BACKWARD"
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PagingType = void 0;
4
+ var PagingType;
5
+ (function (PagingType) {
6
+ PagingType["FORWARD"] = "FORWARD";
7
+ PagingType["BACKWARD"] = "BACKWARD";
8
+ })(PagingType || (exports.PagingType = PagingType = {}));
9
+ //# sourceMappingURL=paging-type.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paging-type.enum.js","sourceRoot":"","sources":["../../src/enums/paging-type.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,mCAAqB,CAAA;AACvB,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB"}
@@ -1,6 +1,9 @@
1
- import type { FindByCursorOptions } from "@mikro-orm/core/drivers";
2
1
  import { OrderInterface } from "./order.interface";
3
- export interface ConnectionArgsInterface<Entity extends object, Hint extends string = never, Fields extends string = "*", Excludes extends string = never> extends Pick<FindByCursorOptions<Entity, Hint, Fields, Excludes>, "before" | "after" | "first" | "last"> {
2
+ export interface ConnectionArgsInterface<Entity extends object> {
3
+ after?: string;
4
+ before?: string;
5
+ first?: number;
6
+ last?: number;
4
7
  query?: string;
5
8
  orderBy?: OrderInterface<Entity>;
6
9
  }