@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,113 @@
1
+ import { FilterFieldComparison } from './filter-field-comparison.interface';
2
+ /**
3
+ * A comparison for fields in T.
4
+ * @example
5
+ * ```ts
6
+ * // name LIKE "Foo%"
7
+ * const filter: Filter<Item> = {
8
+ * { name: { like: 'Foo%' } },
9
+ * }
10
+ * ```
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * // completed IS TRUE
15
+ * const filter: Filter<Item> = {
16
+ * { completed: { is: true } },
17
+ * }
18
+ * ```
19
+ * @typeparam T - the type of object to filter on.
20
+ */
21
+ export declare type FilterComparisons<T> = {
22
+ [K in keyof T]?: FilterFieldComparison<T[K]>;
23
+ };
24
+ /**
25
+ * A grouping of filters that should be ANDed or ORed together.
26
+ *
27
+ * * @example
28
+ * ```ts
29
+ * // completed IS TRUE OR name = "Foo"
30
+ * const filter: Filter<Item> = {
31
+ * or: [
32
+ * { completed: { is: true } },
33
+ * { name: { eq: "Foo" } },
34
+ * ]
35
+ * }
36
+ * ```
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * // completed IS TRUE OR (age > 10 AND age < 20)
41
+ * const filter: Filter<Item> = {
42
+ * or: [
43
+ * { completed: { is: true } },
44
+ * {
45
+ * and: [
46
+ * { age: { gt : 10 } },
47
+ * { age: { lt : 20 } },
48
+ * ]
49
+ * },
50
+ * ]
51
+ * }
52
+ * ```
53
+ */
54
+ declare type FilterGrouping<T> = {
55
+ /**
56
+ * Group an array of filters with an AND operation.
57
+ */
58
+ and?: Filter<T>[];
59
+ /**
60
+ * Group an array of filters with an OR operation.
61
+ */
62
+ or?: Filter<T>[];
63
+ };
64
+ /**
65
+ * Filter for type T.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * // name LIKE "Foo%"
70
+ * const filter: Filter<Item> = {
71
+ * { name: { like: 'Foo%' } },
72
+ * }
73
+ * ```
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * // completed IS TRUE
78
+ * const filter: Filter<Item> = {
79
+ * { completed: { is: true } },
80
+ * }
81
+ * ```
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * // completed IS TRUE OR name = "Foo"
86
+ * const filter: Filter<Item> = {
87
+ * or: [
88
+ * { completed: { is: true } },
89
+ * { name: { eq: "Foo" } },
90
+ * ]
91
+ * }
92
+ * ```
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * // completed IS TRUE OR (age > 10 AND age < 20)
97
+ * const filter: Filter<Item> = {
98
+ * or: [
99
+ * { completed: { is: true } },
100
+ * {
101
+ * and: [
102
+ * { age: { gt : 10 } },
103
+ * { age: { lt : 20 } },
104
+ * ]
105
+ * },
106
+ * ]
107
+ * }
108
+ * ```
109
+ *
110
+ * @typeparam T - the type of object to filter on.
111
+ */
112
+ export declare type Filter<T> = FilterGrouping<T> & FilterComparisons<T>;
113
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=filter.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/filter.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { Filter } from './filter.interface';
2
+ /**
3
+ * Base interface for all types that allow filtering
4
+ */
5
+ export interface Filterable<DTO> {
6
+ /**
7
+ * Filter to use when operating on a entities.
8
+ *
9
+ * When using with a single entity operation (e.g. findById) the filter can be used to apply an additional filter to
10
+ * ensure that the entity belongs to a particular user.
11
+ */
12
+ filter?: Filter<DTO>;
13
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=filterable.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterable.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/filterable.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { Filterable } from './filterable.interface';
2
+ export interface FindByIdOptions<DTO> extends Filterable<DTO> {
3
+ /**
4
+ * Allow also deleted records to be get
5
+ */
6
+ withDeleted?: boolean;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=find-by-id-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-by-id-options.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/find-by-id-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { Filterable } from './filterable.interface';
2
+ export declare type FindRelationOptions<Relation> = Filterable<Relation>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=find-relation-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-relation-options.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/find-relation-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { FindByIdOptions } from './find-by-id-options.interface';
2
+ export declare type GetByIdOptions<DTO> = FindByIdOptions<DTO>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=get-by-id-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-by-id-options.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/get-by-id-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ export * from './filter.interface';
2
+ export * from './filter-field-comparison.interface';
3
+ export * from './paging.interface';
4
+ export * from './query.inteface';
5
+ export * from './sort-field.interface';
6
+ export * from './update-many-response.interface';
7
+ export * from './delete-many-response.interface';
8
+ export * from './aggregate-response.interface';
9
+ export * from './aggregate-query.interface';
10
+ export * from './modify-relation-options.interface';
11
+ export * from './find-relation-options.interface';
12
+ export * from './find-by-id-options.interface';
13
+ export * from './get-by-id-options.interface';
14
+ export * from './update-one-options.interface';
15
+ export * from './delete-one-options.interface';
16
+ export * from './delete-many-options.interface';
17
+ export * from './filterable.interface';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ (0, tslib_1.__exportStar)(require("./filter.interface"), exports);
5
+ (0, tslib_1.__exportStar)(require("./filter-field-comparison.interface"), exports);
6
+ (0, tslib_1.__exportStar)(require("./paging.interface"), exports);
7
+ (0, tslib_1.__exportStar)(require("./query.inteface"), exports);
8
+ (0, tslib_1.__exportStar)(require("./sort-field.interface"), exports);
9
+ (0, tslib_1.__exportStar)(require("./update-many-response.interface"), exports);
10
+ (0, tslib_1.__exportStar)(require("./delete-many-response.interface"), exports);
11
+ (0, tslib_1.__exportStar)(require("./aggregate-response.interface"), exports);
12
+ (0, tslib_1.__exportStar)(require("./aggregate-query.interface"), exports);
13
+ (0, tslib_1.__exportStar)(require("./modify-relation-options.interface"), exports);
14
+ (0, tslib_1.__exportStar)(require("./find-relation-options.interface"), exports);
15
+ (0, tslib_1.__exportStar)(require("./find-by-id-options.interface"), exports);
16
+ (0, tslib_1.__exportStar)(require("./get-by-id-options.interface"), exports);
17
+ (0, tslib_1.__exportStar)(require("./update-one-options.interface"), exports);
18
+ (0, tslib_1.__exportStar)(require("./delete-one-options.interface"), exports);
19
+ (0, tslib_1.__exportStar)(require("./delete-many-options.interface"), exports);
20
+ (0, tslib_1.__exportStar)(require("./filterable.interface"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/index.ts"],"names":[],"mappings":";;;AAAA,kEAAmC;AACnC,mFAAoD;AACpD,kEAAmC;AACnC,gEAAiC;AACjC,sEAAuC;AACvC,gFAAiD;AACjD,gFAAiD;AACjD,8EAA+C;AAC/C,2EAA4C;AAC5C,mFAAoD;AACpD,iFAAkD;AAClD,8EAA+C;AAC/C,6EAA8C;AAC9C,8EAA+C;AAC/C,8EAA+C;AAC/C,+EAAgD;AAChD,sEAAuC"}
@@ -0,0 +1,9 @@
1
+ import { Filter } from './filter.interface';
2
+ import { Filterable } from './filterable.interface';
3
+ export interface ModifyRelationOptions<DTO, Relation> extends Filterable<DTO> {
4
+ /**
5
+ * A filter to use in addition to the primary key(s) when finding the relations to add to the DTO.
6
+ * For example this could be used to ensure that the a user has access to the records that are being related.
7
+ */
8
+ relationFilter?: Filter<Relation>;
9
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=modify-relation-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modify-relation-options.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/modify-relation-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Interface for paging a collection.
3
+ */
4
+ export interface Paging {
5
+ /**
6
+ * The maximum number of items that should be in the collection.
7
+ */
8
+ limit?: number;
9
+ /**
10
+ * When paging through a collection, the offset represents the index to start at.
11
+ */
12
+ offset?: number;
13
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=paging.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paging.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/paging.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import { Paging } from './paging.interface';
2
+ import { SortField } from './sort-field.interface';
3
+ import { Filterable } from './filterable.interface';
4
+ /**
5
+ * Interface for all queries to a collection of items.
6
+ *
7
+ * For example assume the following record type.
8
+ *
9
+ * ```ts
10
+ * class Item {
11
+ * id: string;
12
+ * name: string;
13
+ * completed: boolean;
14
+ * }
15
+ * ```
16
+ * Now lets create a query.
17
+ *
18
+ * ```ts
19
+ * const query: Query<Item> = {
20
+ * filter: { name: { like: 'Foo%' } }, // filter name LIKE "Foo%"
21
+ * paging: { limit: 10, offset: 20}, // LIMIT 10 OFFSET 20
22
+ * sorting: [{ field: 'name', direction: SortDirection.DESC }], // ORDER BY name DESC
23
+ * };
24
+ * ```
25
+ *
26
+ * @typeparam T - the type of the object to query for.
27
+ */
28
+ export interface Query<T> extends Filterable<T> {
29
+ /**
30
+ * Option to page through the collection.
31
+ */
32
+ paging?: Paging;
33
+ /**
34
+ * Option to sort the collection.
35
+ */
36
+ sorting?: SortField<T>[];
37
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=query.inteface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.inteface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/query.inteface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Enum for sorting either ASC or DESC.
3
+ */
4
+ export declare enum SortDirection {
5
+ ASC = "ASC",
6
+ DESC = "DESC"
7
+ }
8
+ /**
9
+ * Null sort option.
10
+ */
11
+ export declare enum SortNulls {
12
+ /**
13
+ * All nulls will be first.
14
+ */
15
+ NULLS_FIRST = "NULLS FIRST",
16
+ /**
17
+ * All nulls will be last.
18
+ */
19
+ NULLS_LAST = "NULLS LAST"
20
+ }
21
+ /**
22
+ * Interface to sort a field.
23
+ *
24
+ * Example use in a [[Query]]
25
+ *
26
+ * ```ts
27
+ * // ORDER BY name DESC
28
+ * const query: Query<Item> = {
29
+ * sorting: [{ field: 'name', direction: SortDirection.DESC }],
30
+ * }
31
+ * ```
32
+ *
33
+ * To sort on multiple fields
34
+ *
35
+ * ```ts
36
+ * // ORDER BY name DESC, age ASC
37
+ * const query: Query<Item> = {
38
+ * sorting: [
39
+ * { field: 'name', direction: SortDirection.DESC },
40
+ * { field: 'age', direction: SortDirection.ASC },
41
+ * ],
42
+ * }
43
+ * ```
44
+ *
45
+ * @typeparam T - the type of object to sort.
46
+ */
47
+ export interface SortField<T> {
48
+ /**
49
+ * A field in type T to sort on.
50
+ */
51
+ field: keyof T;
52
+ /**
53
+ * The direction of the sort (ASC or DESC)
54
+ */
55
+ direction: SortDirection;
56
+ /**
57
+ * The order that nulls values should be sorted.
58
+ */
59
+ nulls?: SortNulls;
60
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SortNulls = exports.SortDirection = void 0;
4
+ /**
5
+ * Enum for sorting either ASC or DESC.
6
+ */
7
+ var SortDirection;
8
+ (function (SortDirection) {
9
+ SortDirection["ASC"] = "ASC";
10
+ SortDirection["DESC"] = "DESC";
11
+ })(SortDirection = exports.SortDirection || (exports.SortDirection = {}));
12
+ /**
13
+ * Null sort option.
14
+ */
15
+ var SortNulls;
16
+ (function (SortNulls) {
17
+ /**
18
+ * All nulls will be first.
19
+ */
20
+ SortNulls["NULLS_FIRST"] = "NULLS FIRST";
21
+ /**
22
+ * All nulls will be last.
23
+ */
24
+ SortNulls["NULLS_LAST"] = "NULLS LAST";
25
+ })(SortNulls = exports.SortNulls || (exports.SortNulls = {}));
26
+ //# sourceMappingURL=sort-field.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-field.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/sort-field.interface.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,4BAAW,CAAA;IACX,8BAAa,CAAA;AACf,CAAC,EAHW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAGxB;AAED;;GAEG;AACH,IAAY,SASX;AATD,WAAY,SAAS;IACnB;;OAEG;IACH,wCAA2B,CAAA;IAC3B;;OAEG;IACH,sCAAyB,CAAA;AAC3B,CAAC,EATW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QASpB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The response from an update many operation.
3
+ */
4
+ export interface UpdateManyResponse {
5
+ /**
6
+ * The number of records deleted.
7
+ */
8
+ updatedCount: number;
9
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=update-many-response.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-many-response.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/update-many-response.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { Filter } from './filter.interface';
2
+ export interface UpdateOneOptions<DTO> {
3
+ /**
4
+ * Additional filter to use when updating an entity by id. This could be used to apply an additional filter to ensure
5
+ * that the entity belongs to a particular user.
6
+ */
7
+ filter?: Filter<DTO>;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=update-one-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-one-options.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/update-one-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { DynamicModule, ForwardReference } from '@nestjs/common';
2
+ import { Assembler } from './assemblers';
3
+ import { Class } from './common';
4
+ export interface NestjsQueryCoreModuleOpts {
5
+ imports?: Array<Class<any> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
6
+ assemblers?: Class<Assembler<any, any, any, any, any, any>>[];
7
+ }
8
+ export declare class NestjsQueryCoreModule {
9
+ static forFeature(opts: NestjsQueryCoreModuleOpts): DynamicModule;
10
+ }
package/src/module.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NestjsQueryCoreModule = void 0;
4
+ const providers_1 = require("./providers");
5
+ class NestjsQueryCoreModule {
6
+ static forFeature(opts) {
7
+ const { imports = [], assemblers = [] } = opts;
8
+ const assemblerServiceProviders = (0, providers_1.createServices)(assemblers);
9
+ return {
10
+ module: NestjsQueryCoreModule,
11
+ imports: [...imports],
12
+ providers: [...assemblers, ...assemblerServiceProviders],
13
+ exports: [...imports, ...assemblers, ...assemblerServiceProviders],
14
+ };
15
+ }
16
+ }
17
+ exports.NestjsQueryCoreModule = NestjsQueryCoreModule;
18
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../packages/core/src/module.ts"],"names":[],"mappings":";;;AAGA,2CAA6C;AAS7C,MAAa,qBAAqB;IAChC,MAAM,CAAC,UAAU,CAAC,IAA+B;QAC/C,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QAC/C,MAAM,yBAAyB,GAAG,IAAA,0BAAc,EAAC,UAAU,CAAC,CAAC;QAC7D,OAAO;YACL,MAAM,EAAE,qBAAqB;YAC7B,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;YACrB,SAAS,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,yBAAyB,CAAC;YACxD,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,yBAAyB,CAAC;SACnE,CAAC;IACJ,CAAC;CACF;AAXD,sDAWC"}
@@ -0,0 +1,4 @@
1
+ import { Provider } from '@nestjs/common';
2
+ import { Assembler } from './assemblers';
3
+ import { Class } from './common';
4
+ export declare const createServices: (opts: Class<Assembler<unknown, unknown, unknown, unknown, unknown, unknown>>[]) => Provider[];
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createServices = void 0;
4
+ const assemblers_1 = require("./assemblers");
5
+ const decorators_1 = require("./decorators");
6
+ const helpers_1 = require("./decorators/helpers");
7
+ const services_1 = require("./services");
8
+ function createServiceProvider(AssemblerClass) {
9
+ const classes = (0, assemblers_1.getAssemblerClasses)(AssemblerClass);
10
+ if (!classes) {
11
+ throw new Error(`unable to determine DTO and Entity classes for ${AssemblerClass.name}. Did you decorate your class with @Assembler`);
12
+ }
13
+ const { EntityClass } = classes;
14
+ return {
15
+ provide: (0, helpers_1.getAssemblerQueryServiceToken)(AssemblerClass),
16
+ useFactory(assembler, entityService) {
17
+ return new services_1.AssemblerQueryService(assembler, entityService);
18
+ },
19
+ inject: [AssemblerClass, (0, decorators_1.getQueryServiceToken)(EntityClass)],
20
+ };
21
+ }
22
+ const createServices = (opts) => opts.map((opt) => createServiceProvider(opt));
23
+ exports.createServices = createServices;
24
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../../packages/core/src/providers.ts"],"names":[],"mappings":";;;AACA,6CAA8D;AAE9D,6CAAoD;AACpD,kDAAqE;AACrE,yCAAiE;AAEjE,SAAS,qBAAqB,CAC5B,cAA2D;IAE3D,MAAM,OAAO,GAAG,IAAA,gCAAmB,EAAC,cAAc,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CACb,kDAAkD,cAAc,CAAC,IAAI,+CAA+C,CACrH,CAAC;KACH;IACD,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,OAAO;QACL,OAAO,EAAE,IAAA,uCAA6B,EAAC,cAAc,CAAC;QACtD,UAAU,CAAC,SAA+C,EAAE,aAA2C;YACrG,OAAO,IAAI,gCAAqB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,EAAE,CAAC,cAAc,EAAE,IAAA,iCAAoB,EAAC,WAAW,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC;AAEM,MAAM,cAAc,GAAG,CAC5B,IAA8E,EAClE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;AAFlD,QAAA,cAAc,kBAEoC"}
@@ -0,0 +1,63 @@
1
+ import { Assembler } from '../assemblers';
2
+ import { Class, DeepPartial } from '../common';
3
+ import { AggregateQuery, AggregateResponse, DeleteManyResponse, DeleteOneOptions, Filter, FindByIdOptions, FindRelationOptions, GetByIdOptions, ModifyRelationOptions, Query, UpdateManyResponse, UpdateOneOptions } from '../interfaces';
4
+ import { QueryService } from './query.service';
5
+ export declare class AssemblerQueryService<DTO, Entity, C = DeepPartial<DTO>, CE = DeepPartial<Entity>, U = C, UE = CE> implements QueryService<DTO, C, U> {
6
+ readonly assembler: Assembler<DTO, Entity, C, CE, U, UE>;
7
+ readonly queryService: QueryService<Entity, CE, UE>;
8
+ constructor(assembler: Assembler<DTO, Entity, C, CE, U, UE>, queryService: QueryService<Entity, CE, UE>);
9
+ addRelations<Relation>(relationName: string, id: string | number, relationIds: (string | number)[], opts?: ModifyRelationOptions<DTO, Relation>): Promise<DTO>;
10
+ createMany(items: C[]): Promise<DTO[]>;
11
+ createOne(item: C): Promise<DTO>;
12
+ deleteMany(filter: Filter<DTO>): Promise<DeleteManyResponse>;
13
+ deleteOne(id: number | string, opts?: DeleteOneOptions<DTO>): Promise<DTO>;
14
+ findById(id: string | number, opts?: FindByIdOptions<DTO>): Promise<DTO | undefined>;
15
+ getById(id: string | number, opts?: GetByIdOptions<DTO>): Promise<DTO>;
16
+ query(query: Query<DTO>): Promise<DTO[]>;
17
+ aggregate(filter: Filter<DTO>, aggregate: AggregateQuery<DTO>): Promise<AggregateResponse<DTO>[]>;
18
+ count(filter: Filter<DTO>): Promise<number>;
19
+ /**
20
+ * Query for relations for an array of DTOs. This method will return a map with the DTO as the key and the relations as the value.
21
+ * @param RelationClass - The class of the relation.
22
+ * @param relationName - The name of the relation to load.
23
+ * @param dtos - the dtos to find relations for.
24
+ * @param query - A query to use to filter, page, and sort relations.
25
+ */
26
+ queryRelations<Relation>(RelationClass: Class<Relation>, relationName: string, dtos: DTO[], query: Query<Relation>): Promise<Map<DTO, Relation[]>>;
27
+ /**
28
+ * Query for an array of relations.
29
+ * @param RelationClass - The class to serialize the relations into.
30
+ * @param dto - The dto to query relations for.
31
+ * @param relationName - The name of relation to query for.
32
+ * @param query - A query to filter, page and sort relations.
33
+ */
34
+ queryRelations<Relation>(RelationClass: Class<Relation>, relationName: string, dto: DTO, query: Query<Relation>): Promise<Relation[]>;
35
+ countRelations<Relation>(RelationClass: Class<Relation>, relationName: string, dto: DTO, filter: Filter<Relation>): Promise<number>;
36
+ countRelations<Relation>(RelationClass: Class<Relation>, relationName: string, dto: DTO[], filter: Filter<Relation>): Promise<Map<DTO, number>>;
37
+ /**
38
+ * Find a relation for an array of DTOs. This will return a Map where the key is the DTO and the value is to relation or undefined if not found.
39
+ * @param RelationClass - the class of the relation
40
+ * @param relationName - the name of the relation to load.
41
+ * @param dtos - the dtos to find the relation for.
42
+ * @param filter - Additional filter to apply when finding relations
43
+ */
44
+ findRelation<Relation>(RelationClass: Class<Relation>, relationName: string, dtos: DTO[], opts?: FindRelationOptions<Relation>): Promise<Map<DTO, Relation | undefined>>;
45
+ /**
46
+ * Finds a single relation.
47
+ * @param RelationClass - The class to serialize the relation into.
48
+ * @param dto - The dto to find the relation for.
49
+ * @param relationName - The name of the relation to query for.
50
+ * @param filter - Additional filter to apply when finding relations
51
+ */
52
+ findRelation<Relation>(RelationClass: Class<Relation>, relationName: string, dto: DTO, opts?: FindRelationOptions<Relation>): Promise<Relation | undefined>;
53
+ removeRelation<Relation>(relationName: string, id: string | number, relationId: string | number, opts?: ModifyRelationOptions<DTO, Relation>): Promise<DTO>;
54
+ removeRelations<Relation>(relationName: string, id: string | number, relationIds: (string | number)[], opts?: ModifyRelationOptions<DTO, Relation>): Promise<DTO>;
55
+ setRelations<Relation>(relationName: string, id: string | number, relationIds: (string | number)[], opts?: ModifyRelationOptions<DTO, Relation>): Promise<DTO>;
56
+ setRelation<Relation>(relationName: string, id: string | number, relationId: string | number, opts?: ModifyRelationOptions<DTO, Relation>): Promise<DTO>;
57
+ updateMany(update: U, filter: Filter<DTO>): Promise<UpdateManyResponse>;
58
+ updateOne(id: string | number, update: U, opts?: UpdateOneOptions<DTO>): Promise<DTO>;
59
+ aggregateRelations<Relation>(RelationClass: Class<Relation>, relationName: string, dto: DTO, filter: Filter<Relation>, aggregate: AggregateQuery<Relation>): Promise<AggregateResponse<Relation>[]>;
60
+ aggregateRelations<Relation>(RelationClass: Class<Relation>, relationName: string, dtos: DTO[], filter: Filter<Relation>, aggregate: AggregateQuery<Relation>): Promise<Map<DTO, AggregateResponse<Relation>[]>>;
61
+ private convertFilterable;
62
+ private convertModifyRelationsOptions;
63
+ }