@ptc-org/nestjs-query-core 0.30.1 → 0.30.2
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/package.json +2 -2
- package/src/assemblers/abstract.assembler.d.ts +33 -0
- package/src/assemblers/abstract.assembler.js +55 -0
- package/src/assemblers/abstract.assembler.js.map +1 -0
- package/src/assemblers/assembler.d.ts +86 -0
- package/src/assemblers/assembler.deserializer.d.ts +4 -0
- package/src/assemblers/assembler.deserializer.js +22 -0
- package/src/assemblers/assembler.deserializer.js.map +1 -0
- package/src/assemblers/assembler.factory.d.ts +8 -0
- package/src/assemblers/assembler.factory.js +29 -0
- package/src/assemblers/assembler.factory.js.map +1 -0
- package/src/assemblers/assembler.js +33 -0
- package/src/assemblers/assembler.js.map +1 -0
- package/src/assemblers/assembler.serializer.d.ts +4 -0
- package/src/assemblers/assembler.serializer.js +22 -0
- package/src/assemblers/assembler.serializer.js.map +1 -0
- package/src/assemblers/class-transformer.assembler.d.ts +17 -0
- package/src/assemblers/class-transformer.assembler.js +67 -0
- package/src/assemblers/class-transformer.assembler.js.map +1 -0
- package/src/assemblers/constants.d.ts +4 -0
- package/src/assemblers/constants.js +8 -0
- package/src/assemblers/constants.js.map +1 -0
- package/src/assemblers/default.assembler.d.ts +8 -0
- package/src/assemblers/default.assembler.js +14 -0
- package/src/assemblers/default.assembler.js.map +1 -0
- package/src/assemblers/index.d.ts +7 -0
- package/src/assemblers/index.js +19 -0
- package/src/assemblers/index.js.map +1 -0
- package/src/common/class.type.d.ts +8 -0
- package/src/common/class.type.js +3 -0
- package/src/common/class.type.js.map +1 -0
- package/src/common/class.utils.d.ts +2 -0
- package/src/common/class.utils.js +12 -0
- package/src/common/class.utils.js.map +1 -0
- package/src/common/deep-partial.type.d.ts +6 -0
- package/src/common/deep-partial.type.js +3 -0
- package/src/common/deep-partial.type.js.map +1 -0
- package/src/common/index.d.ts +5 -0
- package/src/common/index.js +9 -0
- package/src/common/index.js.map +1 -0
- package/src/common/misc.utils.d.ts +4 -0
- package/src/common/misc.utils.js +9 -0
- package/src/common/misc.utils.js.map +1 -0
- package/src/common/reflect.utils.d.ts +31 -0
- package/src/common/reflect.utils.js +98 -0
- package/src/common/reflect.utils.js.map +1 -0
- package/src/decorators/helpers.d.ts +6 -0
- package/src/decorators/helpers.js +12 -0
- package/src/decorators/helpers.js.map +1 -0
- package/src/decorators/index.d.ts +3 -0
- package/src/decorators/index.js +10 -0
- package/src/decorators/index.js.map +1 -0
- package/src/decorators/inject-assembler-query-service.decorator.d.ts +4 -0
- package/src/decorators/inject-assembler-query-service.decorator.js +8 -0
- package/src/decorators/inject-assembler-query-service.decorator.js.map +1 -0
- package/src/decorators/inject-query-service.decorator.d.ts +3 -0
- package/src/decorators/inject-query-service.decorator.js +8 -0
- package/src/decorators/inject-query-service.decorator.js.map +1 -0
- package/src/helpers/aggregate.helpers.d.ts +4 -0
- package/src/helpers/aggregate.helpers.js +56 -0
- package/src/helpers/aggregate.helpers.js.map +1 -0
- package/src/helpers/comparison.builder.d.ts +11 -0
- package/src/helpers/comparison.builder.js +92 -0
- package/src/helpers/comparison.builder.js.map +1 -0
- package/src/helpers/filter.builder.d.ts +10 -0
- package/src/helpers/filter.builder.js +49 -0
- package/src/helpers/filter.builder.js.map +1 -0
- package/src/helpers/filter.helpers.d.ts +24 -0
- package/src/helpers/filter.helpers.js +115 -0
- package/src/helpers/filter.helpers.js.map +1 -0
- package/src/helpers/index.d.ts +3 -0
- package/src/helpers/index.js +17 -0
- package/src/helpers/index.js.map +1 -0
- package/src/helpers/page.builder.d.ts +6 -0
- package/src/helpers/page.builder.js +13 -0
- package/src/helpers/page.builder.js.map +1 -0
- package/src/helpers/query.helpers.d.ts +11 -0
- package/src/helpers/query.helpers.js +60 -0
- package/src/helpers/query.helpers.js.map +1 -0
- package/src/helpers/sort.builder.d.ts +11 -0
- package/src/helpers/sort.builder.js +82 -0
- package/src/helpers/sort.builder.js.map +1 -0
- package/src/helpers/types.d.ts +3 -0
- package/src/helpers/types.js +3 -0
- package/src/helpers/types.js.map +1 -0
- package/src/index.d.ts +7 -0
- package/src/index.js.map +1 -0
- package/src/interfaces/aggregate-query.interface.d.ts +8 -0
- package/src/interfaces/aggregate-query.interface.js +3 -0
- package/src/interfaces/aggregate-query.interface.js.map +1 -0
- package/src/interfaces/aggregate-response.interface.d.ts +14 -0
- package/src/interfaces/aggregate-response.interface.js +3 -0
- package/src/interfaces/aggregate-response.interface.js.map +1 -0
- package/src/interfaces/delete-many-options.interface.d.ts +2 -0
- package/src/interfaces/delete-many-options.interface.js +3 -0
- package/src/interfaces/delete-many-options.interface.js.map +1 -0
- package/src/interfaces/delete-many-response.interface.d.ts +9 -0
- package/src/interfaces/delete-many-response.interface.js +3 -0
- package/src/interfaces/delete-many-response.interface.js.map +1 -0
- package/src/interfaces/delete-one-options.interface.d.ts +7 -0
- package/src/interfaces/delete-one-options.interface.js +3 -0
- package/src/interfaces/delete-one-options.interface.js.map +1 -0
- package/src/interfaces/filter-field-comparison.interface.d.ts +202 -0
- package/src/interfaces/filter-field-comparison.interface.js +3 -0
- package/src/interfaces/filter-field-comparison.interface.js.map +1 -0
- package/src/interfaces/filter.interface.d.ts +113 -0
- package/src/interfaces/filter.interface.js +3 -0
- package/src/interfaces/filter.interface.js.map +1 -0
- package/src/interfaces/filterable.interface.d.ts +13 -0
- package/src/interfaces/filterable.interface.js +3 -0
- package/src/interfaces/filterable.interface.js.map +1 -0
- package/src/interfaces/find-by-id-options.interface.d.ts +7 -0
- package/src/interfaces/find-by-id-options.interface.js +3 -0
- package/src/interfaces/find-by-id-options.interface.js.map +1 -0
- package/src/interfaces/find-relation-options.interface.d.ts +2 -0
- package/src/interfaces/find-relation-options.interface.js +3 -0
- package/src/interfaces/find-relation-options.interface.js.map +1 -0
- package/src/interfaces/get-by-id-options.interface.d.ts +2 -0
- package/src/interfaces/get-by-id-options.interface.js +3 -0
- package/src/interfaces/get-by-id-options.interface.js.map +1 -0
- package/src/interfaces/index.d.ts +17 -0
- package/src/interfaces/index.js +21 -0
- package/src/interfaces/index.js.map +1 -0
- package/src/interfaces/modify-relation-options.interface.d.ts +9 -0
- package/src/interfaces/modify-relation-options.interface.js +3 -0
- package/src/interfaces/modify-relation-options.interface.js.map +1 -0
- package/src/interfaces/paging.interface.d.ts +13 -0
- package/src/interfaces/paging.interface.js +3 -0
- package/src/interfaces/paging.interface.js.map +1 -0
- package/src/interfaces/query.inteface.d.ts +37 -0
- package/src/interfaces/query.inteface.js +3 -0
- package/src/interfaces/query.inteface.js.map +1 -0
- package/src/interfaces/sort-field.interface.d.ts +60 -0
- package/src/interfaces/sort-field.interface.js +26 -0
- package/src/interfaces/sort-field.interface.js.map +1 -0
- package/src/interfaces/update-many-response.interface.d.ts +9 -0
- package/src/interfaces/update-many-response.interface.js +3 -0
- package/src/interfaces/update-many-response.interface.js.map +1 -0
- package/src/interfaces/update-one-options.interface.d.ts +8 -0
- package/src/interfaces/update-one-options.interface.js +3 -0
- package/src/interfaces/update-one-options.interface.js.map +1 -0
- package/src/module.d.ts +10 -0
- package/src/module.js +18 -0
- package/src/module.js.map +1 -0
- package/src/providers.d.ts +4 -0
- package/src/providers.js +24 -0
- package/src/providers.js.map +1 -0
- package/src/services/assembler-query.service.d.ts +63 -0
- package/src/services/assembler-query.service.js +132 -0
- package/src/services/assembler-query.service.js.map +1 -0
- package/src/services/index.d.ts +5 -0
- package/src/services/index.js +14 -0
- package/src/services/index.js.map +1 -0
- package/src/services/noop-query.service.d.ts +32 -0
- package/src/services/noop-query.service.js +76 -0
- package/src/services/noop-query.service.js.map +1 -0
- package/src/services/proxy-query.service.d.ts +59 -0
- package/src/services/proxy-query.service.js +82 -0
- package/src/services/proxy-query.service.js.map +1 -0
- package/src/services/query.service.d.ts +175 -0
- package/src/services/query.service.js +14 -0
- package/src/services/query.service.js.map +1 -0
- package/src/services/relation-query.service.d.ts +50 -0
- package/src/services/relation-query.service.js +103 -0
- package/src/services/relation-query.service.js.map +1 -0
- package/CHANGELOG.md +0 -471
|
@@ -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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"filterable.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/filterable.interface.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"update-one-options.interface.js","sourceRoot":"","sources":["../../../../../packages/core/src/interfaces/update-one-options.interface.ts"],"names":[],"mappings":""}
|
package/src/module.d.ts
ADDED
|
@@ -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"}
|
package/src/providers.js
ADDED
|
@@ -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
|
+
}
|