@ptc-org/nestjs-query-core 0.30.1 → 1.0.0-alpha.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.
Files changed (167) hide show
  1. package/CHANGELOG.md +104 -104
  2. package/README.md +4 -4
  3. package/package.json +5 -5
  4. package/src/assemblers/abstract.assembler.d.ts +33 -0
  5. package/src/assemblers/abstract.assembler.js +55 -0
  6. package/src/assemblers/abstract.assembler.js.map +1 -0
  7. package/src/assemblers/assembler.d.ts +86 -0
  8. package/src/assemblers/assembler.deserializer.d.ts +4 -0
  9. package/src/assemblers/assembler.deserializer.js +22 -0
  10. package/src/assemblers/assembler.deserializer.js.map +1 -0
  11. package/src/assemblers/assembler.factory.d.ts +8 -0
  12. package/src/assemblers/assembler.factory.js +29 -0
  13. package/src/assemblers/assembler.factory.js.map +1 -0
  14. package/src/assemblers/assembler.js +33 -0
  15. package/src/assemblers/assembler.js.map +1 -0
  16. package/src/assemblers/assembler.serializer.d.ts +4 -0
  17. package/src/assemblers/assembler.serializer.js +22 -0
  18. package/src/assemblers/assembler.serializer.js.map +1 -0
  19. package/src/assemblers/class-transformer.assembler.d.ts +17 -0
  20. package/src/assemblers/class-transformer.assembler.js +67 -0
  21. package/src/assemblers/class-transformer.assembler.js.map +1 -0
  22. package/src/assemblers/constants.d.ts +4 -0
  23. package/src/assemblers/constants.js +8 -0
  24. package/src/assemblers/constants.js.map +1 -0
  25. package/src/assemblers/default.assembler.d.ts +8 -0
  26. package/src/assemblers/default.assembler.js +14 -0
  27. package/src/assemblers/default.assembler.js.map +1 -0
  28. package/src/assemblers/index.d.ts +7 -0
  29. package/src/assemblers/index.js +19 -0
  30. package/src/assemblers/index.js.map +1 -0
  31. package/src/common/class.type.d.ts +8 -0
  32. package/src/common/class.type.js +3 -0
  33. package/src/common/class.type.js.map +1 -0
  34. package/src/common/class.utils.d.ts +2 -0
  35. package/src/common/class.utils.js +12 -0
  36. package/src/common/class.utils.js.map +1 -0
  37. package/src/common/deep-partial.type.d.ts +6 -0
  38. package/src/common/deep-partial.type.js +3 -0
  39. package/src/common/deep-partial.type.js.map +1 -0
  40. package/src/common/index.d.ts +5 -0
  41. package/src/common/index.js +9 -0
  42. package/src/common/index.js.map +1 -0
  43. package/src/common/misc.utils.d.ts +4 -0
  44. package/src/common/misc.utils.js +9 -0
  45. package/src/common/misc.utils.js.map +1 -0
  46. package/src/common/reflect.utils.d.ts +31 -0
  47. package/src/common/reflect.utils.js +98 -0
  48. package/src/common/reflect.utils.js.map +1 -0
  49. package/src/decorators/helpers.d.ts +6 -0
  50. package/src/decorators/helpers.js +12 -0
  51. package/src/decorators/helpers.js.map +1 -0
  52. package/src/decorators/index.d.ts +3 -0
  53. package/src/decorators/index.js +10 -0
  54. package/src/decorators/index.js.map +1 -0
  55. package/src/decorators/inject-assembler-query-service.decorator.d.ts +4 -0
  56. package/src/decorators/inject-assembler-query-service.decorator.js +8 -0
  57. package/src/decorators/inject-assembler-query-service.decorator.js.map +1 -0
  58. package/src/decorators/inject-query-service.decorator.d.ts +3 -0
  59. package/src/decorators/inject-query-service.decorator.js +8 -0
  60. package/src/decorators/inject-query-service.decorator.js.map +1 -0
  61. package/src/helpers/aggregate.helpers.d.ts +4 -0
  62. package/src/helpers/aggregate.helpers.js +56 -0
  63. package/src/helpers/aggregate.helpers.js.map +1 -0
  64. package/src/helpers/comparison.builder.d.ts +11 -0
  65. package/src/helpers/comparison.builder.js +92 -0
  66. package/src/helpers/comparison.builder.js.map +1 -0
  67. package/src/helpers/filter.builder.d.ts +10 -0
  68. package/src/helpers/filter.builder.js +49 -0
  69. package/src/helpers/filter.builder.js.map +1 -0
  70. package/src/helpers/filter.helpers.d.ts +24 -0
  71. package/src/helpers/filter.helpers.js +115 -0
  72. package/src/helpers/filter.helpers.js.map +1 -0
  73. package/src/helpers/index.d.ts +3 -0
  74. package/src/helpers/index.js +17 -0
  75. package/src/helpers/index.js.map +1 -0
  76. package/src/helpers/page.builder.d.ts +6 -0
  77. package/src/helpers/page.builder.js +13 -0
  78. package/src/helpers/page.builder.js.map +1 -0
  79. package/src/helpers/query.helpers.d.ts +11 -0
  80. package/src/helpers/query.helpers.js +60 -0
  81. package/src/helpers/query.helpers.js.map +1 -0
  82. package/src/helpers/sort.builder.d.ts +11 -0
  83. package/src/helpers/sort.builder.js +82 -0
  84. package/src/helpers/sort.builder.js.map +1 -0
  85. package/src/helpers/types.d.ts +3 -0
  86. package/src/helpers/types.js +3 -0
  87. package/src/helpers/types.js.map +1 -0
  88. package/src/index.d.ts +7 -0
  89. package/src/index.js.map +1 -0
  90. package/src/interfaces/aggregate-query.interface.d.ts +8 -0
  91. package/src/interfaces/aggregate-query.interface.js +3 -0
  92. package/src/interfaces/aggregate-query.interface.js.map +1 -0
  93. package/src/interfaces/aggregate-response.interface.d.ts +14 -0
  94. package/src/interfaces/aggregate-response.interface.js +3 -0
  95. package/src/interfaces/aggregate-response.interface.js.map +1 -0
  96. package/src/interfaces/delete-many-options.interface.d.ts +2 -0
  97. package/src/interfaces/delete-many-options.interface.js +3 -0
  98. package/src/interfaces/delete-many-options.interface.js.map +1 -0
  99. package/src/interfaces/delete-many-response.interface.d.ts +9 -0
  100. package/src/interfaces/delete-many-response.interface.js +3 -0
  101. package/src/interfaces/delete-many-response.interface.js.map +1 -0
  102. package/src/interfaces/delete-one-options.interface.d.ts +7 -0
  103. package/src/interfaces/delete-one-options.interface.js +3 -0
  104. package/src/interfaces/delete-one-options.interface.js.map +1 -0
  105. package/src/interfaces/filter-field-comparison.interface.d.ts +202 -0
  106. package/src/interfaces/filter-field-comparison.interface.js +3 -0
  107. package/src/interfaces/filter-field-comparison.interface.js.map +1 -0
  108. package/src/interfaces/filter.interface.d.ts +113 -0
  109. package/src/interfaces/filter.interface.js +3 -0
  110. package/src/interfaces/filter.interface.js.map +1 -0
  111. package/src/interfaces/filterable.interface.d.ts +13 -0
  112. package/src/interfaces/filterable.interface.js +3 -0
  113. package/src/interfaces/filterable.interface.js.map +1 -0
  114. package/src/interfaces/find-by-id-options.interface.d.ts +7 -0
  115. package/src/interfaces/find-by-id-options.interface.js +3 -0
  116. package/src/interfaces/find-by-id-options.interface.js.map +1 -0
  117. package/src/interfaces/find-relation-options.interface.d.ts +2 -0
  118. package/src/interfaces/find-relation-options.interface.js +3 -0
  119. package/src/interfaces/find-relation-options.interface.js.map +1 -0
  120. package/src/interfaces/get-by-id-options.interface.d.ts +2 -0
  121. package/src/interfaces/get-by-id-options.interface.js +3 -0
  122. package/src/interfaces/get-by-id-options.interface.js.map +1 -0
  123. package/src/interfaces/index.d.ts +17 -0
  124. package/src/interfaces/index.js +21 -0
  125. package/src/interfaces/index.js.map +1 -0
  126. package/src/interfaces/modify-relation-options.interface.d.ts +9 -0
  127. package/src/interfaces/modify-relation-options.interface.js +3 -0
  128. package/src/interfaces/modify-relation-options.interface.js.map +1 -0
  129. package/src/interfaces/paging.interface.d.ts +13 -0
  130. package/src/interfaces/paging.interface.js +3 -0
  131. package/src/interfaces/paging.interface.js.map +1 -0
  132. package/src/interfaces/query.inteface.d.ts +37 -0
  133. package/src/interfaces/query.inteface.js +3 -0
  134. package/src/interfaces/query.inteface.js.map +1 -0
  135. package/src/interfaces/sort-field.interface.d.ts +60 -0
  136. package/src/interfaces/sort-field.interface.js +26 -0
  137. package/src/interfaces/sort-field.interface.js.map +1 -0
  138. package/src/interfaces/update-many-response.interface.d.ts +9 -0
  139. package/src/interfaces/update-many-response.interface.js +3 -0
  140. package/src/interfaces/update-many-response.interface.js.map +1 -0
  141. package/src/interfaces/update-one-options.interface.d.ts +8 -0
  142. package/src/interfaces/update-one-options.interface.js +3 -0
  143. package/src/interfaces/update-one-options.interface.js.map +1 -0
  144. package/src/module.d.ts +10 -0
  145. package/src/module.js +18 -0
  146. package/src/module.js.map +1 -0
  147. package/src/providers.d.ts +4 -0
  148. package/src/providers.js +24 -0
  149. package/src/providers.js.map +1 -0
  150. package/src/services/assembler-query.service.d.ts +63 -0
  151. package/src/services/assembler-query.service.js +132 -0
  152. package/src/services/assembler-query.service.js.map +1 -0
  153. package/src/services/index.d.ts +5 -0
  154. package/src/services/index.js +14 -0
  155. package/src/services/index.js.map +1 -0
  156. package/src/services/noop-query.service.d.ts +32 -0
  157. package/src/services/noop-query.service.js +76 -0
  158. package/src/services/noop-query.service.js.map +1 -0
  159. package/src/services/proxy-query.service.d.ts +59 -0
  160. package/src/services/proxy-query.service.js +82 -0
  161. package/src/services/proxy-query.service.js.map +1 -0
  162. package/src/services/query.service.d.ts +176 -0
  163. package/src/services/query.service.js +14 -0
  164. package/src/services/query.service.js.map +1 -0
  165. package/src/services/relation-query.service.d.ts +50 -0
  166. package/src/services/relation-query.service.js +103 -0
  167. package/src/services/relation-query.service.js.map +1 -0
@@ -0,0 +1,3 @@
1
+ export { mergeQuery, QueryFieldMap, transformQuery, transformSort, applySort, applyPaging, applyQuery, invertSort, } from './query.helpers';
2
+ export { transformAggregateQuery, transformAggregateResponse } from './aggregate.helpers';
3
+ export * from './filter.helpers';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformAggregateResponse = exports.transformAggregateQuery = exports.invertSort = exports.applyQuery = exports.applyPaging = exports.applySort = exports.transformSort = exports.transformQuery = exports.mergeQuery = void 0;
4
+ const tslib_1 = require("tslib");
5
+ var query_helpers_1 = require("./query.helpers");
6
+ Object.defineProperty(exports, "mergeQuery", { enumerable: true, get: function () { return query_helpers_1.mergeQuery; } });
7
+ Object.defineProperty(exports, "transformQuery", { enumerable: true, get: function () { return query_helpers_1.transformQuery; } });
8
+ Object.defineProperty(exports, "transformSort", { enumerable: true, get: function () { return query_helpers_1.transformSort; } });
9
+ Object.defineProperty(exports, "applySort", { enumerable: true, get: function () { return query_helpers_1.applySort; } });
10
+ Object.defineProperty(exports, "applyPaging", { enumerable: true, get: function () { return query_helpers_1.applyPaging; } });
11
+ Object.defineProperty(exports, "applyQuery", { enumerable: true, get: function () { return query_helpers_1.applyQuery; } });
12
+ Object.defineProperty(exports, "invertSort", { enumerable: true, get: function () { return query_helpers_1.invertSort; } });
13
+ var aggregate_helpers_1 = require("./aggregate.helpers");
14
+ Object.defineProperty(exports, "transformAggregateQuery", { enumerable: true, get: function () { return aggregate_helpers_1.transformAggregateQuery; } });
15
+ Object.defineProperty(exports, "transformAggregateResponse", { enumerable: true, get: function () { return aggregate_helpers_1.transformAggregateResponse; } });
16
+ (0, tslib_1.__exportStar)(require("./filter.helpers"), exports);
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/core/src/helpers/index.ts"],"names":[],"mappings":";;;;AAAA,iDASyB;AARvB,2GAAA,UAAU,OAAA;AAEV,+GAAA,cAAc,OAAA;AACd,8GAAA,aAAa,OAAA;AACb,0GAAA,SAAS,OAAA;AACT,4GAAA,WAAW,OAAA;AACX,2GAAA,UAAU,OAAA;AACV,2GAAA,UAAU,OAAA;AAEZ,yDAA0F;AAAjF,4HAAA,uBAAuB,OAAA;AAAE,+HAAA,0BAA0B,OAAA;AAC5D,gEAAiC"}
@@ -0,0 +1,6 @@
1
+ import { Paging } from '../interfaces';
2
+ declare type Pager<DTO> = (dtos: DTO[]) => DTO[];
3
+ export declare class PageBuilder {
4
+ static build<DTO>(paging: Paging): Pager<DTO>;
5
+ }
6
+ export {};
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PageBuilder = void 0;
4
+ class PageBuilder {
5
+ static build(paging) {
6
+ return (dtos) => {
7
+ const { limit = dtos.length, offset = 0 } = paging;
8
+ return dtos.slice(offset, limit + offset);
9
+ };
10
+ }
11
+ }
12
+ exports.PageBuilder = PageBuilder;
13
+ //# sourceMappingURL=page.builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.builder.js","sourceRoot":"","sources":["../../../../../packages/core/src/helpers/page.builder.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IACtB,MAAM,CAAC,KAAK,CAAM,MAAc;QAC9B,OAAO,CAAC,IAAW,EAAS,EAAE;YAC5B,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC;CACF;AAPD,kCAOC"}
@@ -0,0 +1,11 @@
1
+ import { Paging, Query, SortField } from '../interfaces';
2
+ export declare type QueryFieldMap<From, To, T extends keyof To = keyof To> = {
3
+ [F in keyof From]?: T;
4
+ };
5
+ export declare const transformSort: <From, To>(sorting: SortField<From>[], fieldMap: QueryFieldMap<From, To, keyof To>) => SortField<To>[];
6
+ export declare const transformQuery: <From, To>(query: Query<From>, fieldMap: QueryFieldMap<From, To, keyof To>) => Query<To>;
7
+ export declare const mergeQuery: <T>(base: Query<T>, source: Query<T>) => Query<T>;
8
+ export declare const applySort: <DTO>(dtos: DTO[], sortFields: SortField<DTO>[]) => DTO[];
9
+ export declare const applyPaging: <DTO>(dtos: DTO[], paging: Paging) => DTO[];
10
+ export declare const applyQuery: <DTO>(dtos: DTO[], query: Query<DTO>) => DTO[];
11
+ export declare function invertSort<DTO>(sortFields: SortField<DTO>[]): SortField<DTO>[];
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.invertSort = exports.applyQuery = exports.applyPaging = exports.applySort = exports.mergeQuery = exports.transformQuery = exports.transformSort = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const lodash_merge_1 = (0, tslib_1.__importDefault)(require("lodash.merge"));
6
+ const interfaces_1 = require("../interfaces");
7
+ const sort_builder_1 = require("./sort.builder");
8
+ const page_builder_1 = require("./page.builder");
9
+ const filter_helpers_1 = require("./filter.helpers");
10
+ const transformSort = (sorting, fieldMap) => {
11
+ if (!sorting) {
12
+ return undefined;
13
+ }
14
+ return sorting.map((sf) => {
15
+ const field = fieldMap[sf.field];
16
+ if (!field) {
17
+ throw new Error(`No corresponding field found for '${sf.field}' when transforming SortField`);
18
+ }
19
+ return { ...sf, field };
20
+ });
21
+ };
22
+ exports.transformSort = transformSort;
23
+ const transformQuery = (query, fieldMap) => ({
24
+ filter: (0, filter_helpers_1.transformFilter)(query.filter, fieldMap),
25
+ paging: query.paging,
26
+ sorting: (0, exports.transformSort)(query.sorting, fieldMap),
27
+ });
28
+ exports.transformQuery = transformQuery;
29
+ const mergeQuery = (base, source) => {
30
+ const { filter: baseFilter = {}, ...restBase } = base;
31
+ const { filter: sourceFilter = {}, ...restSource } = source;
32
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
33
+ return (0, lodash_merge_1.default)(restBase, restSource, { filter: (0, filter_helpers_1.mergeFilter)(baseFilter, sourceFilter) });
34
+ };
35
+ exports.mergeQuery = mergeQuery;
36
+ const applySort = (dtos, sortFields) => sort_builder_1.SortBuilder.build(sortFields)(dtos);
37
+ exports.applySort = applySort;
38
+ const applyPaging = (dtos, paging) => page_builder_1.PageBuilder.build(paging)(dtos);
39
+ exports.applyPaging = applyPaging;
40
+ const applyQuery = (dtos, query) => {
41
+ const filtered = (0, filter_helpers_1.applyFilter)(dtos, query.filter ?? {});
42
+ const sorted = (0, exports.applySort)(filtered, query.sorting ?? []);
43
+ return (0, exports.applyPaging)(sorted, query.paging ?? {});
44
+ };
45
+ exports.applyQuery = applyQuery;
46
+ function invertSort(sortFields) {
47
+ return sortFields.map((sf) => {
48
+ const direction = sf.direction === interfaces_1.SortDirection.ASC ? interfaces_1.SortDirection.DESC : interfaces_1.SortDirection.ASC;
49
+ let nulls;
50
+ if (sf.nulls === interfaces_1.SortNulls.NULLS_LAST) {
51
+ nulls = interfaces_1.SortNulls.NULLS_FIRST;
52
+ }
53
+ else if (sf.nulls === interfaces_1.SortNulls.NULLS_FIRST) {
54
+ nulls = interfaces_1.SortNulls.NULLS_LAST;
55
+ }
56
+ return { ...sf, direction, nulls };
57
+ });
58
+ }
59
+ exports.invertSort = invertSort;
60
+ //# sourceMappingURL=query.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.helpers.js","sourceRoot":"","sources":["../../../../../packages/core/src/helpers/query.helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { SortDirection, SortField, SortNulls } from '../interfaces';
2
+ declare type SortResult = -1 | 0 | 1;
3
+ declare type SortComparator<Field> = (a: Field, b: Field) => SortResult;
4
+ declare type Sorter<DTO> = (dtos: DTO[]) => DTO[];
5
+ export declare class SortBuilder {
6
+ static build<DTO>(sorts: SortField<DTO>[]): Sorter<DTO>;
7
+ static buildComparator<DTO>(field: keyof DTO, direction: SortDirection, nulls?: SortNulls): SortComparator<DTO>;
8
+ static fieldValueComparator<DTO, Field extends keyof DTO>(field: keyof DTO, direction: SortDirection): SortComparator<DTO[Field]>;
9
+ static nullsComparator<Field>(direction: SortDirection, nulls?: SortNulls): SortComparator<Field>;
10
+ }
11
+ export {};
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SortBuilder = void 0;
4
+ const interfaces_1 = require("../interfaces");
5
+ function isNullish(a) {
6
+ return a === null || a === undefined;
7
+ }
8
+ function nullComparator(a, b) {
9
+ if (a === b) {
10
+ return 0;
11
+ }
12
+ return a === null ? 1 : -1;
13
+ }
14
+ function nullsFirstSort(a, b) {
15
+ if (!(isNullish(a) || isNullish(b))) {
16
+ return 0;
17
+ }
18
+ if (isNullish(a) && isNullish(b)) {
19
+ return nullComparator(a, b);
20
+ }
21
+ return isNullish(a) ? -1 : 1;
22
+ }
23
+ function nullsLastSort(a, b) {
24
+ return (nullsFirstSort(a, b) * -1);
25
+ }
26
+ function ascSort(a, b) {
27
+ if (a === b) {
28
+ return 0;
29
+ }
30
+ return a < b ? -1 : 1;
31
+ }
32
+ function descSort(a, b) {
33
+ return (ascSort(a, b) * -1);
34
+ }
35
+ class SortBuilder {
36
+ static build(sorts) {
37
+ const comparators = sorts.map(({ field, direction, nulls }) => this.buildComparator(field, direction, nulls));
38
+ const comparator = (a, b) => comparators.reduce((result, cmp) => {
39
+ if (result === 0) {
40
+ return cmp(a, b);
41
+ }
42
+ return result;
43
+ }, 0);
44
+ return (dtos) => [...dtos].sort(comparator);
45
+ }
46
+ static buildComparator(field, direction, nulls) {
47
+ const nullSort = this.nullsComparator(direction, nulls);
48
+ const fieldValueComparator = this.fieldValueComparator(field, direction);
49
+ return (a, b) => {
50
+ const aField = a[field];
51
+ const bField = b[field];
52
+ const nullResult = nullSort(aField, bField);
53
+ if (nullResult !== 0) {
54
+ return nullResult;
55
+ }
56
+ return fieldValueComparator(aField, bField);
57
+ };
58
+ }
59
+ static fieldValueComparator(field, direction) {
60
+ if (direction === interfaces_1.SortDirection.ASC) {
61
+ return (a, b) => ascSort(a, b);
62
+ }
63
+ return (a, b) => descSort(a, b);
64
+ }
65
+ static nullsComparator(direction, nulls) {
66
+ switch (nulls) {
67
+ case interfaces_1.SortNulls.NULLS_FIRST:
68
+ return nullsFirstSort;
69
+ case interfaces_1.SortNulls.NULLS_LAST:
70
+ return nullsLastSort;
71
+ default:
72
+ switch (direction) {
73
+ case interfaces_1.SortDirection.DESC:
74
+ return nullsFirstSort;
75
+ default:
76
+ return nullsLastSort;
77
+ }
78
+ }
79
+ }
80
+ }
81
+ exports.SortBuilder = SortBuilder;
82
+ //# sourceMappingURL=sort.builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.builder.js","sourceRoot":"","sources":["../../../../../packages/core/src/helpers/sort.builder.ts"],"names":[],"mappings":";;;AAAA,8CAAoE;AAMpE,SAAS,SAAS,CAAC,CAAU;IAC3B,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC;AACvC,CAAC;AAED,SAAS,cAAc,CAAC,CAAmB,EAAE,CAAmB;IAC9D,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,OAAO,CAAC,CAAC;KACV;IACD,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,CAAU,EAAE,CAAU;IAC5C,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACnC,OAAO,CAAC,CAAC;KACV;IACD,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;QAChC,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC7B;IACD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AACD,SAAS,aAAa,CAAC,CAAU,EAAE,CAAU;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAe,CAAC;AACnD,CAAC;AAED,SAAS,OAAO,CAAQ,CAAQ,EAAE,CAAQ;IACxC,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,OAAO,CAAC,CAAC;KACV;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,QAAQ,CAAQ,CAAQ,EAAE,CAAQ;IACzC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAe,CAAC;AAC5C,CAAC;AAED,MAAa,WAAW;IACtB,MAAM,CAAC,KAAK,CAAM,KAAuB;QACvC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9G,MAAM,UAAU,GAAwB,CAAC,CAAC,EAAE,CAAC,EAAc,EAAE,CAC3D,WAAW,CAAC,MAAM,CAAC,CAAC,MAAkB,EAAE,GAAG,EAAE,EAAE;YAC7C,IAAI,MAAM,KAAK,CAAC,EAAE;gBAChB,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAClB;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,OAAO,CAAC,IAAW,EAAS,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,eAAe,CAAM,KAAgB,EAAE,SAAwB,EAAE,KAAiB;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAc,EAAE;YAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,UAAU,KAAK,CAAC,EAAE;gBACpB,OAAO,UAAU,CAAC;aACnB;YACD,OAAO,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,oBAAoB,CACzB,KAAgB,EAChB,SAAwB;QAExB,IAAI,SAAS,KAAK,0BAAa,CAAC,GAAG,EAAE;YACnC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAChC;QACD,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,eAAe,CAAQ,SAAwB,EAAE,KAAiB;QACvE,QAAQ,KAAK,EAAE;YACb,KAAK,sBAAS,CAAC,WAAW;gBACxB,OAAO,cAAc,CAAC;YACxB,KAAK,sBAAS,CAAC,UAAU;gBACvB,OAAO,aAAa,CAAC;YACvB;gBACE,QAAQ,SAAS,EAAE;oBACjB,KAAK,0BAAa,CAAC,IAAI;wBACrB,OAAO,cAAc,CAAC;oBACxB;wBACE,OAAO,aAAa,CAAC;iBACxB;SACJ;IACH,CAAC;CACF;AApDD,kCAoDC"}
@@ -0,0 +1,3 @@
1
+ import { CommonFieldComparisonBetweenType } from '../interfaces';
2
+ export declare type FilterFn<DTO> = (dto?: DTO) => boolean;
3
+ export declare type ComparisonField<DTO, F extends keyof DTO> = DTO[F] | DTO[F][] | CommonFieldComparisonBetweenType<DTO[F]> | true | false | null;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../packages/core/src/helpers/types.ts"],"names":[],"mappings":""}
package/src/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export * from './interfaces';
2
+ export * from './common';
3
+ export { InjectAssemblerQueryService, InjectQueryService, getQueryServiceToken } from './decorators';
4
+ export { QueryService, AssemblerQueryService, RelationQueryService, NoOpQueryService, QueryServiceRelation, ProxyQueryService, } from './services';
5
+ export { transformFilter, transformQuery, transformSort, applyFilter, getFilterFields, QueryFieldMap, transformAggregateQuery, transformAggregateResponse, applySort, applyPaging, applyQuery, mergeQuery, mergeFilter, invertSort, getFilterComparisons, getFilterOmitting, } from './helpers';
6
+ export { ClassTransformerAssembler, DefaultAssembler, AbstractAssembler, Assembler, AssemblerSerializer, AssemblerDeserializer, AssemblerFactory, } from './assemblers';
7
+ export { NestjsQueryCoreModule, NestjsQueryCoreModuleOpts } from './module';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/core/src/index.ts"],"names":[],"mappings":";;;;AAAA,kCAAkC;AAClC,4DAA6B;AAC7B,wDAAyB;AACzB,2CAAqG;AAA5F,yHAAA,2BAA2B,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAC9E,uCAOoB;AANlB,wGAAA,YAAY,OAAA;AACZ,iHAAA,qBAAqB,OAAA;AACrB,gHAAA,oBAAoB,OAAA;AACpB,4GAAA,gBAAgB,OAAA;AAEhB,6GAAA,iBAAiB,OAAA;AAEnB,qCAiBmB;AAhBjB,0GAAA,eAAe,OAAA;AACf,yGAAA,cAAc,OAAA;AACd,wGAAA,aAAa,OAAA;AACb,sGAAA,WAAW,OAAA;AACX,0GAAA,eAAe,OAAA;AAEf,kHAAA,uBAAuB,OAAA;AACvB,qHAAA,0BAA0B,OAAA;AAC1B,oGAAA,SAAS,OAAA;AACT,sGAAA,WAAW,OAAA;AACX,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,sGAAA,WAAW,OAAA;AACX,qGAAA,UAAU,OAAA;AACV,+GAAA,oBAAoB,OAAA;AACpB,4GAAA,iBAAiB,OAAA;AAEnB,2CAQsB;AAPpB,uHAAA,yBAAyB,OAAA;AACzB,8GAAA,gBAAgB,OAAA;AAChB,+GAAA,iBAAiB,OAAA;AACjB,uGAAA,SAAS,OAAA;AACT,iHAAA,mBAAmB,OAAA;AACnB,mHAAA,qBAAqB,OAAA;AACrB,8GAAA,gBAAgB,OAAA;AAElB,mCAA4E;AAAnE,+GAAA,qBAAqB,OAAA"}
@@ -0,0 +1,8 @@
1
+ export declare type AggregateQuery<DTO> = {
2
+ count?: (keyof DTO)[];
3
+ sum?: (keyof DTO)[];
4
+ avg?: (keyof DTO)[];
5
+ max?: (keyof DTO)[];
6
+ min?: (keyof DTO)[];
7
+ groupBy?: (keyof DTO)[];
8
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=aggregate-query.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-query.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/aggregate-query.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ export declare type NumberAggregate<DTO> = {
2
+ [K in keyof DTO]?: number;
3
+ };
4
+ export declare type TypeAggregate<DTO> = {
5
+ [K in keyof DTO]?: DTO[K];
6
+ };
7
+ export declare type AggregateResponse<DTO> = {
8
+ count?: NumberAggregate<DTO>;
9
+ sum?: NumberAggregate<DTO>;
10
+ avg?: NumberAggregate<DTO>;
11
+ max?: TypeAggregate<DTO>;
12
+ min?: TypeAggregate<DTO>;
13
+ groupBy?: Partial<DTO>;
14
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=aggregate-response.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-response.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/aggregate-response.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { DeleteOneOptions } from './delete-one-options.interface';
2
+ export declare type DeleteManyOptions<DTO> = DeleteOneOptions<DTO>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=delete-many-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-many-options.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/delete-many-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The response from a delete many operation.
3
+ */
4
+ export interface DeleteManyResponse {
5
+ /**
6
+ * The number of records deleted.
7
+ */
8
+ deletedCount: number;
9
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=delete-many-response.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-many-response.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/delete-many-response.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { Filterable } from './filterable.interface';
2
+ export interface DeleteOneOptions<DTO> extends Filterable<DTO> {
3
+ /**
4
+ * Use soft delete when doing delete mutation
5
+ */
6
+ useSoftDelete?: boolean;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=delete-one-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-one-options.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/delete-one-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Field comparisons with a type of `boolean`.
3
+ */
4
+ import { Filter } from './filter.interface';
5
+ export interface BooleanFieldComparisons {
6
+ /**
7
+ * Is operator.
8
+ *
9
+ * ```ts
10
+ * // field IS TRUE
11
+ * { field: { is: true } }
12
+ *
13
+ * // field IS FALSE
14
+ * { field: { is: false } }
15
+ *
16
+ * // field IS NULL
17
+ * { field: { is: null } }
18
+ * ```
19
+ */
20
+ is?: boolean | null;
21
+ /**
22
+ * Is not operator.
23
+ *
24
+ * ```ts
25
+ * // field IS NOT TRUE
26
+ * { field: { isNot: true } }
27
+ *
28
+ * // field IS NOT FALSE
29
+ * { field: { isNot: false } }
30
+ *
31
+ * // field IS NOT NULL
32
+ * { field: { isNot: null } }
33
+ * ```
34
+ */
35
+ isNot?: boolean | null;
36
+ }
37
+ export interface CommonFieldComparisonBetweenType<FieldType> {
38
+ lower: FieldType;
39
+ upper: FieldType;
40
+ }
41
+ /**
42
+ * Field comparisons for all types that are NOT `null` or `boolean`.
43
+ *
44
+ * @typeparam FieldType - The TS type of the field.
45
+ */
46
+ export interface CommonFieldComparisonType<FieldType> extends BooleanFieldComparisons {
47
+ /**
48
+ * Field equality.
49
+ *
50
+ * ```ts
51
+ * // field = "bar"
52
+ * { field: { eq: 'bar' } }
53
+ * ```
54
+ */
55
+ eq?: FieldType;
56
+ /**
57
+ * Field in-equality.
58
+ *
59
+ * ```ts
60
+ * // field != "bar"
61
+ * { field: { neq: 'bar' } }
62
+ * ```
63
+ */
64
+ neq?: FieldType;
65
+ /**
66
+ * Greater than comparison.
67
+ *
68
+ * ```ts
69
+ * // field > 1
70
+ * { field: { gt: 1 } }
71
+ * ```
72
+ */
73
+ gt?: FieldType;
74
+ /**
75
+ * Greater than or equal to comparison.
76
+ *
77
+ * ```ts
78
+ * // field >= 1
79
+ * { field: { gte: 1 } }
80
+ * ```
81
+ */
82
+ gte?: FieldType;
83
+ /**
84
+ * Less than comparison.
85
+ *
86
+ * ```ts
87
+ * // field < 1
88
+ * { field: { lt: 1 } }
89
+ * ```
90
+ */
91
+ lt?: FieldType;
92
+ /**
93
+ * Less than or equal to comparison.
94
+ *
95
+ * ```ts
96
+ * // field <= 1
97
+ * { field: { lte: 1 } }
98
+ * ```
99
+ */
100
+ lte?: FieldType;
101
+ /**
102
+ * Check that a field is included in an array of values.
103
+ *
104
+ * ```ts
105
+ * // field IN ("a", "b", "c")
106
+ * { field: { in: ['a', 'b', 'c'] } }
107
+ * ```
108
+ */
109
+ in?: FieldType[];
110
+ /**
111
+ * Check that a field is not included in an array of values.
112
+ *
113
+ * ```ts
114
+ * // field NOT IN ("a", "b", "c")
115
+ * { field: { notIn: ['a', 'b', 'c'] } }
116
+ * ```
117
+ */
118
+ notIn?: FieldType[];
119
+ /**
120
+ * Checks that a field is between a lower and upper bound. The bounds are included!
121
+ *
122
+ * ```ts
123
+ * // field BETWEEN lower AND upper
124
+ * { field: { between: { lower: 1, upper: 10 } } }
125
+ * ```
126
+ */
127
+ between?: CommonFieldComparisonBetweenType<FieldType>;
128
+ /**
129
+ * Checks that a field is not between a lower and upper bound. The bounds are excluded!
130
+ *
131
+ * ```ts
132
+ * // field NOT BETWEEN lower AND upper
133
+ * { field: { notBetween: { lower: 1, upper: 10 } } }
134
+ * ```
135
+ */
136
+ notBetween?: CommonFieldComparisonBetweenType<FieldType>;
137
+ }
138
+ /**
139
+ * Field comparisons for `string` types.
140
+ */
141
+ export interface StringFieldComparisons extends CommonFieldComparisonType<string> {
142
+ /**
143
+ * Like comparison.
144
+ *
145
+ * ```ts
146
+ * // field LIKE "Foo%"
147
+ * { field: { like: 'Foo%' } }
148
+ * ```
149
+ */
150
+ like?: string;
151
+ /**
152
+ * Not like comparison.
153
+ *
154
+ * ```ts
155
+ * // field NOT LIKE "Foo%"
156
+ * { field: { notLike: 'Foo%' } }
157
+ * ```
158
+ */
159
+ notLike?: string;
160
+ /**
161
+ * Case insensitive like comparison.
162
+ *
163
+ * ```ts
164
+ * // field ILIKE "Foo%"
165
+ * { field: { iLike: 'Foo%' } }
166
+ * ```
167
+ */
168
+ iLike?: string;
169
+ /**
170
+ * Case insensitive not like comparison.
171
+ *
172
+ * ```ts
173
+ * // field NOT ILIKE "Foo%"
174
+ * { field: { notILike: 'Foo%' } }
175
+ * ```
176
+ */
177
+ notILike?: string;
178
+ }
179
+ declare type BuiltInTypes = boolean | boolean | string | string | number | Date | RegExp | bigint | symbol | null | undefined | never;
180
+ /**
181
+ * Type for field comparisons.
182
+ *
183
+ * * `string` - [[StringFieldComparisons]]
184
+ * * `boolean|null|undefined|never` - [[BooleanFieldComparisons]]
185
+ * * all other types use [[CommonFieldComparisonType]]
186
+ */
187
+ declare type FilterFieldComparisonType<FieldType, IsKeys extends true | false> = FieldType extends string | String ? StringFieldComparisons : FieldType extends boolean | Boolean ? BooleanFieldComparisons : FieldType extends number | Date | RegExp | bigint | BuiltInTypes[] | symbol ? CommonFieldComparisonType<FieldType> : FieldType extends Array<infer U> ? CommonFieldComparisonType<U> | Filter<U> : IsKeys extends true ? CommonFieldComparisonType<FieldType> & StringFieldComparisons & Filter<FieldType> : CommonFieldComparisonType<FieldType> | Filter<FieldType>;
188
+ /**
189
+ * Type for field comparisons.
190
+ *
191
+ * * `string` - [[StringFieldComparisons]]
192
+ * * `boolean|null|undefined|never` - [[BooleanFieldComparisons]]
193
+ * * all other types use [[CommonFieldComparisonType]]
194
+ */
195
+ export declare type FilterFieldComparison<FieldType> = FilterFieldComparisonType<FieldType, false>;
196
+ /**
197
+ * Type for all comparison operators for a field type.
198
+ *
199
+ * @typeparam FieldType - The TS type of the field.
200
+ */
201
+ export declare type FilterComparisonOperators<FieldType> = keyof FilterFieldComparisonType<FieldType, true>;
202
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=filter-field-comparison.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-field-comparison.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/filter-field-comparison.interface.ts"],"names":[],"mappings":""}