nestjs-paginate 13.3.0 → 13.5.0

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/README.md CHANGED
@@ -445,6 +445,22 @@ const paginateConfig: PaginateConfig<CatEntity> {
445
445
  * ```
446
446
  */
447
447
  buildCountQuery: (qb: SelectQueryBuilder<T>) => SelectQueryBuilder<any>,
448
+
449
+ /**
450
+ * Required: false
451
+ * Type: boolean
452
+ * Default: false
453
+ * Description: Build the COUNT query from a pruned clone of the main query
454
+ * instead of counting over the fully-joined statement. LEFT JOINs that the
455
+ * WHERE clause does not reference are removed before counting (INNER JOINs
456
+ * and the parent chains of referenced joins are kept), so configs that join
457
+ * many relations purely for hydration no longer pay for them in the count.
458
+ *
459
+ * The page data query is unaffected. Ignored when buildCountQuery is set;
460
+ * the pruning helper is exported as `buildOptimizedCountQuery` so it can be
461
+ * composed inside a custom buildCountQuery as well.
462
+ */
463
+ optimizedCount: true,
448
464
  }
449
465
  ````
450
466
 
@@ -640,6 +656,44 @@ const config: PaginateConfig<CatEntity> = {
640
656
  const result = await paginate<CatEntity>(query, catRepo, config)
641
657
  ```
642
658
 
659
+ ## Polymorphic sorting
660
+
661
+ Sometimes the value you want to sort on can come from one of several columns — for
662
+ example a record that links to one of two relations and you want to order by
663
+ whichever one is set. Join columns into a single sort term with `~` and the rows
664
+ are ordered by the `COALESCE` of those columns (the first non-`null` value per row).
665
+
666
+ ### Endpoint
667
+
668
+ ```
669
+ http://localhost:3000/cats?sortBy=bestFriend.age~nemesis.age:DESC
670
+ ```
671
+
672
+ This orders by `COALESCE(bestFriend.age, nemesis.age)` — a cat's best friend's age,
673
+ or its nemesis's age when it has no best friend.
674
+
675
+ ### Code
676
+
677
+ ```typescript
678
+ const config: PaginateConfig<CatEntity> = {
679
+ // Every column used in a group must be listed in sortableColumns.
680
+ sortableColumns: ['id', 'bestFriend.age', 'nemesis.age'],
681
+ relations: ['bestFriend', 'nemesis'],
682
+ }
683
+ ```
684
+
685
+ Notes and limitations:
686
+
687
+ - The grouped columns must be **type-compatible** (e.g. all numbers, or all dates).
688
+ Mixing incompatible types lets the database raise its own error; types are not
689
+ coerced for you.
690
+ - A group is only applied when **every** column in it is listed in `sortableColumns`;
691
+ otherwise the term is ignored.
692
+ - Only **plain** and **relation** columns are supported in a group. Embedded, virtual,
693
+ and JSONB-path columns are rejected.
694
+ - Polymorphic groups are **not supported with cursor pagination** (the COALESCE value
695
+ cannot be encoded into a cursor) and will throw.
696
+
643
697
  ## Filters
644
698
 
645
699
  Filter operators must be whitelisted per column in `PaginateConfig`.
@@ -20,6 +20,8 @@ export declare class CatEntity {
20
20
  deletedAt?: string;
21
21
  friends: CatEntity[];
22
22
  friendOf: CatEntity[];
23
+ bestFriend: CatEntity | null;
24
+ nemesis: CatEntity | null;
23
25
  weightChange: number | null;
24
26
  private afterLoad;
25
27
  }
@@ -90,6 +90,14 @@ __decorate([
90
90
  (0, typeorm_1.ManyToMany)(() => CatEntity, (cat) => cat.friends),
91
91
  __metadata("design:type", Array)
92
92
  ], CatEntity.prototype, "friendOf", void 0);
93
+ __decorate([
94
+ (0, typeorm_1.ManyToOne)(() => CatEntity, { nullable: true }),
95
+ __metadata("design:type", CatEntity)
96
+ ], CatEntity.prototype, "bestFriend", void 0);
97
+ __decorate([
98
+ (0, typeorm_1.ManyToOne)(() => CatEntity, { nullable: true }),
99
+ __metadata("design:type", CatEntity)
100
+ ], CatEntity.prototype, "nemesis", void 0);
93
101
  __decorate([
94
102
  (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, nullable: true }),
95
103
  __metadata("design:type", Number)
@@ -1 +1 @@
1
- {"version":3,"file":"cat.entity.js","sourceRoot":"","sources":["../../src/__tests__/cat.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAYgB;AAChB,uDAAiD;AACjD,qDAA+C;AAC/C,mDAAuE;AACvE,6CAAwC;AAExC,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,4BAAW,CAAA;IACX,kCAAiB,CAAA;IACjB,8BAAa,CAAA;AACjB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAGM,IAAM,SAAS,GAAf,MAAM,SAAS;IAkDV,SAAS;;QACb,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,EAAE,CAAA,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QACpB,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA,CAAC,gDAAgD;QAClG,CAAC;IACL,CAAC;CACJ,CAAA;AA3DY,8BAAS;AAElB;IADC,IAAA,gCAAsB,GAAE;;qCACf;AAGV;IADC,IAAA,gBAAM,GAAE;;uCACG;AAGZ;IADC,IAAA,gBAAM,GAAE;;wCACI;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCACT;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,yFAAyF;;;gDACvF;AAG5B;IADC,IAAA,gBAAM,EAAC,kCAAkB,CAAC;8BACb,IAAI;+CAAO;AAGzB;IADC,IAAA,gBAAM,EAAC,GAAG,EAAE,CAAC,sBAAS,CAAC;8BAClB,sBAAS;uCAAA;AAKf;IAHC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,6BAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE;QACnD,KAAK,EAAE,IAAI;KACd,CAAC;;uCACkB;AAIpB;IAFC,IAAA,kBAAQ,EAAC,GAAG,EAAE,CAAC,+BAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3E,IAAA,oBAAU,GAAE;8BACP,+BAAa;uCAAA;AAGnB;IADC,IAAA,0BAAgB,EAAC,iCAAiB,CAAC;;4CACnB;AAGjB;IADC,IAAA,0BAAgB,EAAC,kCAAkB,CAAC;;4CACnB;AAIlB;IAFC,IAAA,oBAAU,EAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClD,IAAA,mBAAS,GAAE;;0CACQ;AAGpB;IADC,IAAA,oBAAU,EAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;;2CAC7B;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACzC;AAKnB;IAHP,IAAA,mBAAS,GAAE;IACZ,yDAAyD;IACzD,mGAAmG;;;;;0CASlG;oBA1DQ,SAAS;IADrB,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GACX,SAAS,CA2DrB"}
1
+ {"version":3,"file":"cat.entity.js","sourceRoot":"","sources":["../../src/__tests__/cat.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAagB;AAChB,uDAAiD;AACjD,qDAA+C;AAC/C,mDAAuE;AACvE,6CAAwC;AAExC,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,4BAAW,CAAA;IACX,kCAAiB,CAAA;IACjB,8BAAa,CAAA;AACjB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAGM,IAAM,SAAS,GAAf,MAAM,SAAS;IA0DV,SAAS;;QACb,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,EAAE,CAAA,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QACpB,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA,CAAC,gDAAgD;QAClG,CAAC;IACL,CAAC;CACJ,CAAA;AAnEY,8BAAS;AAElB;IADC,IAAA,gCAAsB,GAAE;;qCACf;AAGV;IADC,IAAA,gBAAM,GAAE;;uCACG;AAGZ;IADC,IAAA,gBAAM,GAAE;;wCACI;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCACT;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,yFAAyF;;;gDACvF;AAG5B;IADC,IAAA,gBAAM,EAAC,kCAAkB,CAAC;8BACb,IAAI;+CAAO;AAGzB;IADC,IAAA,gBAAM,EAAC,GAAG,EAAE,CAAC,sBAAS,CAAC;8BAClB,sBAAS;uCAAA;AAKf;IAHC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,6BAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE;QACnD,KAAK,EAAE,IAAI;KACd,CAAC;;uCACkB;AAIpB;IAFC,IAAA,kBAAQ,EAAC,GAAG,EAAE,CAAC,+BAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3E,IAAA,oBAAU,GAAE;8BACP,+BAAa;uCAAA;AAGnB;IADC,IAAA,0BAAgB,EAAC,iCAAiB,CAAC;;4CACnB;AAGjB;IADC,IAAA,0BAAgB,EAAC,kCAAkB,CAAC;;4CACnB;AAIlB;IAFC,IAAA,oBAAU,EAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClD,IAAA,mBAAS,GAAE;;0CACQ;AAGpB;IADC,IAAA,oBAAU,EAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;;2CAC7B;AAKrB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACnC,SAAS;6CAAO;AAG5B;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACtC,SAAS;0CAAO;AAGzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACzC;AAKnB;IAHP,IAAA,mBAAS,GAAE;IACZ,yDAAyD;IACzD,mGAAmG;;;;;0CASlG;oBAlEQ,SAAS;IADrB,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GACX,SAAS,CAmErB"}
@@ -1,7 +1,7 @@
1
1
  export interface PaginateQuery {
2
2
  page?: number;
3
3
  limit?: number;
4
- sortBy?: [string, string][];
4
+ sortBy?: [string | string[], string][];
5
5
  searchBy?: string[];
6
6
  search?: string;
7
7
  filter?: {
package/lib/decorator.js CHANGED
@@ -44,6 +44,7 @@ function parseIntParam(v) {
44
44
  return result;
45
45
  }
46
46
  exports.Paginate = (0, common_1.createParamDecorator)((_data, ctx) => {
47
+ var _a;
47
48
  let path;
48
49
  let query;
49
50
  switch (ctx.getType()) {
@@ -71,7 +72,7 @@ exports.Paginate = (0, common_1.createParamDecorator)((_data, ctx) => {
71
72
  break;
72
73
  }
73
74
  const searchBy = parseParam(query.searchBy, singleSplit);
74
- const sortBy = parseParam(query.sortBy, multipleSplit);
75
+ const sortBy = (_a = parseParam(query.sortBy, multipleSplit)) === null || _a === void 0 ? void 0 : _a.map(([column, order]) => [column.includes('~') ? column.split('~') : column, order]);
75
76
  const select = parseParam(query.select, multipleAndCommaSplit);
76
77
  const filter = (0, lodash_1.mapKeys)((0, lodash_1.pickBy)(query, (param, name) => name.includes('filter.') &&
77
78
  ((0, lodash_1.isString)(param) || (Array.isArray(param) && param.every((p) => (0, lodash_1.isString)(p))))), (_param, name) => name.replace('filter.', ''));
@@ -1 +1 @@
1
- {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":"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"}
@@ -161,6 +161,16 @@ describe('Decorator', () => {
161
161
  cursor: 'abc123',
162
162
  });
163
163
  });
164
+ it('should parse polymorphic (~) sort groups into column arrays', () => {
165
+ const context = expressContextFactory({
166
+ sortBy: ['bestFriend.age~nemesis.age:ASC', 'name:DESC'],
167
+ });
168
+ const result = decoratorfactory(null, context);
169
+ expect(result.sortBy).toStrictEqual([
170
+ [['bestFriend.age', 'nemesis.age'], 'ASC'],
171
+ ['name', 'DESC'],
172
+ ]);
173
+ });
164
174
  it('should handle fastify defined query fields', () => {
165
175
  const context = fastifyContextFactory({
166
176
  page: '1',
@@ -1 +1 @@
1
- {"version":3,"file":"decorator.spec.js","sourceRoot":"","sources":["../src/decorator.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorator.spec.js","sourceRoot":"","sources":["../src/decorator.spec.ts"],"names":[],"mappings":"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"}
package/lib/helper.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { FindOperator, FindOptionsRelationByString, FindOptionsRelations, Repository, SelectQueryBuilder } from 'typeorm';
1
+ import { FindOperator, FindOptionsRelationByString, FindOptionsRelations, ObjectLiteral, Repository, SelectQueryBuilder } from 'typeorm';
2
2
  import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';
3
3
  /**
4
4
  * Joins 2 keys as `K`, `K.P`, `K.(P` or `K.P)`
@@ -34,7 +34,7 @@ export type Column<T, D extends number = 2> = [D] extends [never] ? never : T ex
34
34
  export type RelationColumn<T> = Extract<Column<T>, {
35
35
  [K in Column<T>]: K extends `${infer R}.${string}` ? R : never;
36
36
  }[Column<T>]>;
37
- export type Order<T> = [Column<T>, 'ASC' | 'DESC'];
37
+ export type Order<T> = [Column<T> | Column<T>[], 'ASC' | 'DESC'];
38
38
  export type SortBy<T> = Order<T>[];
39
39
  export type MappedColumns<T, S> = {
40
40
  [key in Column<T> | (string & {})]: S;
@@ -126,4 +126,22 @@ export declare function andWhereNoneExist(qb: SelectQueryBuilder<any>, existsQb:
126
126
  * @return {SelectQueryBuilder<any>} The modified query builder with the combined EXISTS conditions.
127
127
  */
128
128
  export declare function andWhereAllExist(qb: SelectQueryBuilder<any>, existsQb: SelectQueryBuilder<any>): SelectQueryBuilder<any>;
129
+ /**
130
+ * Strips the parts of a fully-built paginate query that do not affect how many root
131
+ * entities match, so the count query stays cheap even when many relations are joined
132
+ * for hydration.
133
+ *
134
+ * Pruning rules:
135
+ * - INNER joins are always kept: they restrict the result set even when unreferenced.
136
+ * - LEFT joins are kept only when the WHERE clause references their alias.
137
+ * - Parent joins of any kept join are kept, so nested relation chains stay intact.
138
+ * - ORDER BY is cleared, since ordering does not change the count.
139
+ *
140
+ * Used by `paginate` when `PaginateConfig.optimizedCount` is enabled. It can also be
141
+ * composed inside a custom `PaginateConfig.buildCountQuery`.
142
+ *
143
+ * @param {SelectQueryBuilder<T>} qb A clone of the fully-built query builder.
144
+ * @return {SelectQueryBuilder<T>} The same builder with count-irrelevant joins removed.
145
+ */
146
+ export declare function buildOptimizedCountQuery<T extends ObjectLiteral>(qb: SelectQueryBuilder<T>): SelectQueryBuilder<T>;
129
147
  export {};
package/lib/helper.js CHANGED
@@ -29,6 +29,7 @@ exports.isNil = isNil;
29
29
  exports.isNotNil = isNotNil;
30
30
  exports.andWhereNoneExist = andWhereNoneExist;
31
31
  exports.andWhereAllExist = andWhereAllExist;
32
+ exports.buildOptimizedCountQuery = buildOptimizedCountQuery;
32
33
  const lodash_1 = require("lodash");
33
34
  const typeorm_1 = require("typeorm");
34
35
  const OrmUtils_1 = require("typeorm/util/OrmUtils");
@@ -379,4 +380,54 @@ function andWhereAllExist(qb, existsQb) {
379
380
  const existsWhereNot = query.replace('WHERE', 'WHERE NOT (') + ')';
380
381
  return qb.andWhere(`NOT ${existsWhereNot}`, params);
381
382
  }
383
+ /**
384
+ * Strips the parts of a fully-built paginate query that do not affect how many root
385
+ * entities match, so the count query stays cheap even when many relations are joined
386
+ * for hydration.
387
+ *
388
+ * Pruning rules:
389
+ * - INNER joins are always kept: they restrict the result set even when unreferenced.
390
+ * - LEFT joins are kept only when the WHERE clause references their alias.
391
+ * - Parent joins of any kept join are kept, so nested relation chains stay intact.
392
+ * - ORDER BY is cleared, since ordering does not change the count.
393
+ *
394
+ * Used by `paginate` when `PaginateConfig.optimizedCount` is enabled. It can also be
395
+ * composed inside a custom `PaginateConfig.buildCountQuery`.
396
+ *
397
+ * @param {SelectQueryBuilder<T>} qb A clone of the fully-built query builder.
398
+ * @return {SelectQueryBuilder<T>} The same builder with count-irrelevant joins removed.
399
+ */
400
+ function buildOptimizedCountQuery(qb) {
401
+ var _a;
402
+ qb.orderBy();
403
+ // Protected TypeORM API that renders only the WHERE clause. Slicing getQuery() at
404
+ // its first WHERE instead would false-match subqueries rendered into the SELECT
405
+ // clause, such as virtual columns.
406
+ const whereSql = qb['createWhereExpression']();
407
+ const joins = qb.expressionMap.joinAttributes;
408
+ const rootAlias = (_a = qb.expressionMap.mainAlias) === null || _a === void 0 ? void 0 : _a.name;
409
+ const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
410
+ const isReferenced = (alias) => whereSql.includes(`"${alias}".`) || new RegExp(`(?<![\\w"])${escapeRegExp(alias)}\\.`).test(whereSql);
411
+ const kept = new Set();
412
+ for (const join of joins) {
413
+ if (join.direction === 'INNER' || isReferenced(join.alias.name)) {
414
+ kept.add(join.alias.name);
415
+ }
416
+ }
417
+ let added = true;
418
+ while (added) {
419
+ added = false;
420
+ for (const join of joins) {
421
+ if (!kept.has(join.alias.name))
422
+ continue;
423
+ const parent = join.parentAlias;
424
+ if (parent && parent !== rootAlias && !kept.has(parent)) {
425
+ kept.add(parent);
426
+ added = true;
427
+ }
428
+ }
429
+ }
430
+ qb.expressionMap.joinAttributes = joins.filter((join) => kept.has(join.alias.name));
431
+ return qb;
432
+ }
382
433
  //# sourceMappingURL=helper.js.map
package/lib/helper.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"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"}
package/lib/paginate.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { FindOptionsWhere, ObjectLiteral, Repository, SelectQueryBuilder } from 'typeorm';
2
2
  import { PaginateQuery } from './decorator';
3
3
  import { AddFilterOptions, FilterComparator, FilterOperator, FilterQuantifier, FilterSuffix } from './filter';
4
- import { Column, JoinMethod, MappedColumns, RelationSchema, RelationSchemaInput, SortBy } from './helper';
4
+ import { buildOptimizedCountQuery, Column, JoinMethod, MappedColumns, RelationSchema, RelationSchemaInput, SortBy } from './helper';
5
5
  export { AddFilterOptions, FilterComparator, FilterOperator, FilterSuffix };
6
+ export { buildOptimizedCountQuery };
6
7
  export declare class Paginated<T> {
7
8
  data: T[];
8
9
  meta: {
@@ -56,6 +57,7 @@ export interface PaginateConfig<T> {
56
57
  defaultJoinMethod?: JoinMethod;
57
58
  joinMethods?: Partial<MappedColumns<T, JoinMethod>>;
58
59
  buildCountQuery?: (qb: SelectQueryBuilder<T>) => SelectQueryBuilder<any>;
60
+ optimizedCount?: boolean;
59
61
  throwOnInvalidFilter?: boolean;
60
62
  }
61
63
  export declare enum PaginationLimit {
package/lib/paginate.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PaginationLimit = exports.PaginationType = exports.Paginated = exports.FilterSuffix = exports.FilterOperator = exports.FilterComparator = void 0;
3
+ exports.PaginationLimit = exports.PaginationType = exports.Paginated = exports.buildOptimizedCountQuery = exports.FilterSuffix = exports.FilterOperator = exports.FilterComparator = void 0;
4
4
  exports.paginate = paginate;
5
5
  exports.addRelationsFromSchema = addRelationsFromSchema;
6
6
  const common_1 = require("@nestjs/common");
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "FilterComparator", { enumerable: true, get: func
12
12
  Object.defineProperty(exports, "FilterOperator", { enumerable: true, get: function () { return filter_1.FilterOperator; } });
13
13
  Object.defineProperty(exports, "FilterSuffix", { enumerable: true, get: function () { return filter_1.FilterSuffix; } });
14
14
  const helper_1 = require("./helper");
15
+ Object.defineProperty(exports, "buildOptimizedCountQuery", { enumerable: true, get: function () { return helper_1.buildOptimizedCountQuery; } });
15
16
  const global_config_1 = require("./global-config");
16
17
  const logger = new common_1.Logger('nestjs-paginate');
17
18
  class Paginated {
@@ -88,7 +89,7 @@ function fixCursorValue(value) {
88
89
  return value;
89
90
  }
90
91
  async function paginate(query, repo, config) {
91
- var _a, _b, _c;
92
+ var _a, _b, _c, _d;
92
93
  const dbType = ((0, helper_1.isRepository)(repo) ? repo.manager : repo).connection.options.type;
93
94
  const isMySqlOrMariaDb = ['mysql', 'mariadb'].includes(dbType);
94
95
  const metadata = (0, helper_1.isRepository)(repo) ? repo.metadata : repo.expressionMap.mainAlias.metadata;
@@ -302,7 +303,18 @@ async function paginate(query, repo, config) {
302
303
  const sortBy = [];
303
304
  if (query.sortBy) {
304
305
  for (const order of query.sortBy) {
305
- if ((0, helper_1.isEntityKey)(config.sortableColumns, order[0]) && ['ASC', 'DESC'].includes(order[1])) {
306
+ const [column, direction] = order;
307
+ if (!['ASC', 'DESC'].includes(direction)) {
308
+ continue;
309
+ }
310
+ // A polymorphic group (e.g. `colA~colB`) is valid only when every
311
+ // column in the group is sortable.
312
+ if (Array.isArray(column)) {
313
+ if (column.length > 0 && column.every((c) => (0, helper_1.isEntityKey)(config.sortableColumns, c))) {
314
+ sortBy.push(order);
315
+ }
316
+ }
317
+ else if ((0, helper_1.isEntityKey)(config.sortableColumns, column)) {
306
318
  sortBy.push(order);
307
319
  }
308
320
  }
@@ -310,6 +322,12 @@ async function paginate(query, repo, config) {
310
322
  if (!sortBy.length) {
311
323
  sortBy.push(...(config.defaultSortBy || [[config.sortableColumns[0], 'ASC']]));
312
324
  }
325
+ // Polymorphic sort groups rely on a COALESCE expression in the SELECT/ORDER BY,
326
+ // which cannot be encoded into a cursor token. Reject the combination explicitly
327
+ // rather than producing silently-wrong cursors.
328
+ if (config.paginationType === PaginationType.CURSOR && sortBy.some(([column]) => Array.isArray(column))) {
329
+ logAndThrowException('Polymorphic sort groups (using "~") are not supported with cursor pagination.');
330
+ }
313
331
  const searchBy = [];
314
332
  let [items, totalItems] = [[], 0];
315
333
  const queryBuilder = (0, helper_1.isRepository)(repo) ? repo.createQueryBuilder('__root') : repo;
@@ -429,6 +447,8 @@ async function paginate(query, repo, config) {
429
447
  }
430
448
  };
431
449
  const cursorExpressions = sortBy.map(([column, direction]) => {
450
+ // Polymorphic sort groups are rejected for cursor pagination above,
451
+ // so every column here is a plain string.
432
452
  const columnProperties = (0, helper_1.getPropertiesByColumnName)(column);
433
453
  const { isVirtualProperty, query: virtualQuery } = (0, helper_1.extractVirtualProperty)(queryBuilder, columnProperties);
434
454
  const isRelation = (0, helper_1.checkIsRelation)(queryBuilder, columnProperties.propertyPath);
@@ -504,7 +524,45 @@ async function paginate(query, repo, config) {
504
524
  }
505
525
  }
506
526
  for (const order of sortBy) {
507
- const columnProperties = (0, helper_1.getPropertiesByColumnName)(order[0]);
527
+ const [sortColumn, sortDirection] = order;
528
+ // Polymorphic sort: `colA~colB` sorts by COALESCE(colA, colB) — the first
529
+ // non-null value per row. The grouped columns must be type-compatible.
530
+ if (Array.isArray(sortColumn)) {
531
+ const escape = (identifier) => queryBuilder.connection.driver.escape(identifier);
532
+ const coalesceExpr = `COALESCE(${sortColumn
533
+ .map((column) => {
534
+ const props = (0, helper_1.getPropertiesByColumnName)(column);
535
+ const { isVirtualProperty } = (0, helper_1.extractVirtualProperty)(queryBuilder, props);
536
+ const isEmbedded = (0, helper_1.checkIsEmbedded)(queryBuilder, props.propertyPath);
537
+ if (isVirtualProperty || isEmbedded || (0, helper_1.resolveJsonbPath)(queryBuilder, props.column).isJsonb) {
538
+ logAndThrowException(`Polymorphic sort groups (using "~") support only plain and relation columns, not "${column}".`);
539
+ }
540
+ const isRelation = (0, helper_1.checkIsRelation)(queryBuilder, props.propertyPath);
541
+ // For plain and relation columns fixColumnAlias returns `<alias>.<column>`
542
+ // with a single dot. Escape each identifier so camel-cased columns work
543
+ // on case-folding drivers (e.g. Postgres), since this raw expression is
544
+ // added to the SELECT list and is not escaped by the query builder.
545
+ const ref = (0, helper_1.fixColumnAlias)(props, queryBuilder.alias, isRelation, false, false, undefined, queryBuilder);
546
+ const separator = ref.indexOf('.');
547
+ return `${escape(ref.slice(0, separator))}.${escape(ref.slice(separator + 1))}`;
548
+ })
549
+ .join(', ')})`;
550
+ const polymorphAlias = `_polymorph_${sortColumn.join('_').replace(/[^a-zA-Z0-9]/g, '_')}`.toLowerCase();
551
+ queryBuilder.addSelect(coalesceExpr, polymorphAlias);
552
+ if (isMySqlOrMariaDb) {
553
+ if (nullSort) {
554
+ const selectionAliasName = `${polymorphAlias}IsNull`;
555
+ queryBuilder.addSelect(`${coalesceExpr} ${nullSort}`, selectionAliasName);
556
+ queryBuilder.addOrderBy(selectionAliasName);
557
+ }
558
+ queryBuilder.addOrderBy(polymorphAlias, sortDirection);
559
+ }
560
+ else {
561
+ queryBuilder.addOrderBy(polymorphAlias, sortDirection, nullSort);
562
+ }
563
+ continue;
564
+ }
565
+ const columnProperties = (0, helper_1.getPropertiesByColumnName)(sortColumn);
508
566
  const { isVirtualProperty, query: virtualQuery } = (0, helper_1.extractVirtualProperty)(queryBuilder, columnProperties);
509
567
  const isRelation = (0, helper_1.checkIsRelation)(queryBuilder, columnProperties.propertyPath);
510
568
  const isEmbedded = (0, helper_1.checkIsEmbedded)(queryBuilder, columnProperties.propertyPath);
@@ -695,9 +753,10 @@ async function paginate(query, repo, config) {
695
753
  totalItems = await queryBuilder.getCount();
696
754
  }
697
755
  else if (isPaginated && config.paginationType !== PaginationType.CURSOR) {
698
- if (config.buildCountQuery) {
756
+ if (config.buildCountQuery || config.optimizedCount) {
757
+ const buildCountQuery = (_c = config.buildCountQuery) !== null && _c !== void 0 ? _c : helper_1.buildOptimizedCountQuery;
699
758
  items = await queryBuilder.getMany();
700
- totalItems = await config.buildCountQuery(queryBuilder.clone()).getCount();
759
+ totalItems = await buildCountQuery(queryBuilder.clone()).getCount();
701
760
  }
702
761
  else {
703
762
  ;
@@ -713,7 +772,7 @@ async function paginate(query, repo, config) {
713
772
  ? searchBy.map((column) => `&searchBy=${column}`).join('')
714
773
  : '';
715
774
  // Only expose select in meta data if query select differs from config select
716
- const isQuerySelected = (selectParams === null || selectParams === void 0 ? void 0 : selectParams.length) !== ((_c = config.select) === null || _c === void 0 ? void 0 : _c.length);
775
+ const isQuerySelected = (selectParams === null || selectParams === void 0 ? void 0 : selectParams.length) !== ((_d = config.select) === null || _d === void 0 ? void 0 : _d.length);
717
776
  const selectQuery = isQuerySelected ? `&select=${selectParams.join(',')}` : '';
718
777
  const filterQuery = query.filter
719
778
  ? '&' +