@ptc-org/nestjs-query-graphql 2.0.1 → 2.1.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.
- package/package.json +3 -3
- package/src/decorators/aggregate-query-param.decorator.js +17 -9
- package/src/decorators/aggregate-query-param.decorator.js.map +1 -1
- package/src/decorators/graphql-resolve-info.utils.d.ts +13 -0
- package/src/decorators/graphql-resolve-info.utils.js +63 -0
- package/src/decorators/graphql-resolve-info.utils.js.map +1 -0
- package/src/resolvers/aggregate/group-by-aggregate.resolver.d.ts +3 -0
- package/src/resolvers/aggregate/group-by-aggregate.resolver.js +49 -0
- package/src/resolvers/aggregate/group-by-aggregate.resolver.js.map +1 -0
- package/src/resolvers/aggregate.resolver.js +3 -2
- package/src/resolvers/aggregate.resolver.js.map +1 -1
- package/src/resolvers/helpers.js +1 -1
- package/src/resolvers/helpers.js.map +1 -1
- package/src/types/aggregate/aggregate-response.type.d.ts +2 -2
- package/src/types/aggregate/aggregate-response.type.js +1 -1
- package/src/types/aggregate/aggregate-response.type.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ptc-org/nestjs-query-graphql",
|
|
3
|
-
"version": "2.0.1",
|
|
3
|
+
"version": "2.1.0-alpha.1",
|
|
4
4
|
"description": "Nestjs graphql query adapter",
|
|
5
5
|
"author": "doug-martin <doug@dougamartin.com>",
|
|
6
6
|
"homepage": "https://github.com/tripss/nestjs-query#readme",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"pluralize": "^8.0.0",
|
|
40
40
|
"tslib": "^2.4.0",
|
|
41
41
|
"upper-case-first": "^2.0.2",
|
|
42
|
-
"@ptc-org/nestjs-query-core": "2.0.1",
|
|
42
|
+
"@ptc-org/nestjs-query-core": "2.1.0-alpha.1",
|
|
43
43
|
"lodash.merge": "4.6.2",
|
|
44
44
|
"reflect-metadata": "0.1.13"
|
|
45
45
|
},
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@nestjs/core": "^8.0.0 || ^9.0.0",
|
|
50
50
|
"@nestjs/graphql": "^9.0.0 || ^10.0.0",
|
|
51
51
|
"class-transformer": "^0.2.3 || 0.3.1 || ^0.5",
|
|
52
|
-
"class-validator": "^0.
|
|
52
|
+
"class-validator": "^0.14.0",
|
|
53
53
|
"graphql": "^16.0.0",
|
|
54
54
|
"graphql-subscriptions": "^2.0.0",
|
|
55
55
|
"ts-morph": "^13.0.2 || ^14.0.0 || ^15.0.0"
|
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AggregateQueryParam = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
4
|
const common_1 = require("@nestjs/common");
|
|
6
5
|
const graphql_1 = require("@nestjs/graphql");
|
|
7
|
-
const
|
|
8
|
-
const EXCLUDED_FIELDS = ['__typename'];
|
|
6
|
+
const graphql_resolve_info_utils_1 = require("./graphql-resolve-info.utils");
|
|
9
7
|
const QUERY_OPERATORS = ['groupBy', 'count', 'avg', 'sum', 'min', 'max'];
|
|
10
8
|
exports.AggregateQueryParam = (0, common_1.createParamDecorator)((data, ctx) => {
|
|
11
9
|
const info = graphql_1.GqlExecutionContext.create(ctx).getInfo();
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
const simpleResolverInfo = (0, graphql_resolve_info_utils_1.simplifyResolveInfo)(info);
|
|
11
|
+
return QUERY_OPERATORS.reduce((query, operator) => {
|
|
12
|
+
if (simpleResolverInfo.fields[operator]) {
|
|
13
|
+
const simpleOperator = simpleResolverInfo.fields[operator];
|
|
14
|
+
const operatorFields = Object.keys(simpleOperator.fields || {});
|
|
15
|
+
if (operatorFields && operatorFields.length > 0) {
|
|
16
|
+
return {
|
|
17
|
+
...query,
|
|
18
|
+
[operator]: operatorFields.map((operatorField) => ({
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
20
|
+
field: simpleOperator.fields[operatorField].name,
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
22
|
+
args: simpleOperator.fields[operatorField].args
|
|
23
|
+
}))
|
|
24
|
+
};
|
|
25
|
+
}
|
|
18
26
|
}
|
|
19
27
|
return query;
|
|
20
28
|
}, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-query-param.decorator.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/decorators/aggregate-query-param.decorator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aggregate-query-param.decorator.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/decorators/aggregate-query-param.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAuE;AACvE,6CAAqD;AAIrD,6EAAoF;AAEpF,MAAM,eAAe,GAAsC,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAE9F,QAAA,mBAAmB,GAAG,IAAA,6BAAoB,EAAC,CAAM,IAAa,EAAE,GAAqB,EAAE,EAAE;IACpG,MAAM,IAAI,GAAG,6BAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAsB,CAAA;IAC1E,MAAM,kBAAkB,GAAG,IAAA,gDAAmB,EAAM,IAAI,CAAC,CAAA;IAEzD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAChD,IAAI,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YACvC,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAsC,CAAA;YAC/F,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;YAE/D,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,OAAO;oBACL,GAAG,KAAK;oBACR,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;wBACjD,sEAAsE;wBACtE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI;wBAChD,sEAAsE;wBACtE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI;qBAChD,CAAC,CAAC;iBACJ,CAAA;aACF;SACF;QAED,OAAO,KAAK,CAAA;IACd,CAAC,EAAE,EAAyB,CAAC,CAAA;AAC/B,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Query } from '@ptc-org/nestjs-query-core';
|
|
2
|
+
import type { GraphQLResolveInfo as ResolveInfo } from 'graphql';
|
|
3
|
+
type QueryResolveFields<DTO> = {
|
|
4
|
+
[key in keyof DTO]: QueryResolveTree<DTO[key] extends ArrayLike<unknown> ? DTO[key][number] : DTO[key]>;
|
|
5
|
+
};
|
|
6
|
+
export interface QueryResolveTree<DTO> {
|
|
7
|
+
name: string;
|
|
8
|
+
alias: string;
|
|
9
|
+
args?: Query<DTO>;
|
|
10
|
+
fields: QueryResolveFields<DTO>;
|
|
11
|
+
}
|
|
12
|
+
export declare function simplifyResolveInfo<DTO>(resolveInfo: ResolveInfo): QueryResolveTree<DTO>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.simplifyResolveInfo = void 0;
|
|
4
|
+
const graphql_1 = require("graphql");
|
|
5
|
+
function getFieldFromAST(fieldNode, parentType) {
|
|
6
|
+
if (fieldNode.kind === 'Field') {
|
|
7
|
+
if (!(parentType instanceof graphql_1.GraphQLUnionType)) {
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
9
|
+
return parentType.getFields()[fieldNode.name.value];
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
// XXX: TODO: Handle GraphQLUnionType
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
function parseFieldNodes(inASTs, resolveInfo, initTree, parentType) {
|
|
18
|
+
const asts = Array.isArray(inASTs) ? inASTs : [inASTs];
|
|
19
|
+
return asts.reduce((tree, fieldNode) => {
|
|
20
|
+
const alias = fieldNode?.alias?.value ?? fieldNode.name.value;
|
|
21
|
+
const field = getFieldFromAST(fieldNode, parentType);
|
|
22
|
+
if (field == null) {
|
|
23
|
+
return tree;
|
|
24
|
+
}
|
|
25
|
+
const fieldGqlTypeOrUndefined = (0, graphql_1.getNamedType)(field.type);
|
|
26
|
+
if (!fieldGqlTypeOrUndefined) {
|
|
27
|
+
return tree;
|
|
28
|
+
}
|
|
29
|
+
const parsedField = {
|
|
30
|
+
name: fieldNode.name.value,
|
|
31
|
+
alias,
|
|
32
|
+
args: (0, graphql_1.getArgumentValues)(field, fieldNode, resolveInfo.variableValues),
|
|
33
|
+
fields: fieldNode.selectionSet && (0, graphql_1.isCompositeType)(fieldGqlTypeOrUndefined)
|
|
34
|
+
? parseFieldNodes(fieldNode.selectionSet.selections, resolveInfo, {}, fieldGqlTypeOrUndefined)
|
|
35
|
+
: {}
|
|
36
|
+
};
|
|
37
|
+
if (tree === null) {
|
|
38
|
+
return parsedField;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
tree[alias] = parsedField;
|
|
42
|
+
}
|
|
43
|
+
return tree;
|
|
44
|
+
}, initTree);
|
|
45
|
+
}
|
|
46
|
+
function isOffsetPaging(info) {
|
|
47
|
+
return typeof info.fields.nodes !== 'undefined';
|
|
48
|
+
}
|
|
49
|
+
function isCursorPaging(info) {
|
|
50
|
+
return typeof info.fields.edges !== 'undefined';
|
|
51
|
+
}
|
|
52
|
+
function simplifyResolveInfo(resolveInfo) {
|
|
53
|
+
const simpleInfo = parseFieldNodes(resolveInfo.fieldNodes, resolveInfo, null, resolveInfo.parentType);
|
|
54
|
+
if (isOffsetPaging(simpleInfo)) {
|
|
55
|
+
return simpleInfo.fields.nodes;
|
|
56
|
+
}
|
|
57
|
+
else if (isCursorPaging(simpleInfo)) {
|
|
58
|
+
return simpleInfo.fields.edges.fields.node;
|
|
59
|
+
}
|
|
60
|
+
return simpleInfo;
|
|
61
|
+
}
|
|
62
|
+
exports.simplifyResolveInfo = simplifyResolveInfo;
|
|
63
|
+
//# sourceMappingURL=graphql-resolve-info.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-resolve-info.utils.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/decorators/graphql-resolve-info.utils.ts"],"names":[],"mappings":";;;AAAA,qCAA8H;AAoB9H,SAAS,eAAe,CACtB,SAAkB,EAClB,UAAgC;IAEhC,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE;QAC9B,IAAI,CAAC,CAAC,UAAU,YAAY,0BAAgB,CAAC,EAAE;YAC7C,+DAA+D;YAC/D,OAAO,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SACpD;aAAM;YACL,qCAAqC;SACtC;KACF;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,eAAe,CACtB,MAAoD,EACpD,WAAwB,EACxB,QAAwC,EACxC,UAAgC;IAEhC,MAAM,IAAI,GAA6B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAEhF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QACrC,MAAM,KAAK,GAAW,SAAS,EAAE,KAAK,EAAE,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAA;QAErE,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QACpD,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,IAAI,CAAA;SACZ;QACD,MAAM,uBAAuB,GAAG,IAAA,sBAAY,EAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxD,IAAI,CAAC,uBAAuB,EAAE;YAC5B,OAAO,IAAI,CAAA;SACZ;QAED,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK;YAC1B,KAAK;YACL,IAAI,EAAE,IAAA,2BAAiB,EAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC;YAErE,MAAM,EACJ,SAAS,CAAC,YAAY,IAAI,IAAA,yBAAe,EAAC,uBAAuB,CAAC;gBAChE,CAAC,CAAC,eAAe,CACb,SAAS,CAAC,YAAY,CAAC,UAAU,EACjC,WAAW,EACX,EAA6B,EAC7B,uBAAuB,CACxB;gBACH,CAAC,CAAC,EAAE;SACgB,CAAA;QAE1B,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,WAAW,CAAA;SACnB;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,WAAW,CAAA;SAC1B;QAED,OAAO,IAAI,CAAA;IACb,CAAC,EAAE,QAAQ,CAAC,CAAA;AACd,CAAC;AAED,SAAS,cAAc,CAAM,IAAa;IACxC,OAAO,OAAQ,IAAoD,CAAC,MAAM,CAAC,KAAK,KAAK,WAAW,CAAA;AAClG,CAAC;AAED,SAAS,cAAc,CAAM,IAAa;IACxC,OAAO,OAAQ,IAAoD,CAAC,MAAM,CAAC,KAAK,KAAK,WAAW,CAAA;AAClG,CAAC;AAED,SAAgB,mBAAmB,CAAM,WAAwB;IAC/D,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,UAAU,CAGrD,CAAA;IAE/C,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE;QAC9B,OAAO,UAAU,CAAC,MAAM,CAAC,KAA8B,CAAA;KACxD;SAAM,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE;QACrC,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAA6B,CAAA;KACpE;IAED,OAAO,UAAmC,CAAA;AAC5C,CAAC;AAbD,kDAaC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AggregateResponse, Class, QueryService } from '@ptc-org/nestjs-query-core';
|
|
2
|
+
import { ServiceResolver } from '../resolver.interface';
|
|
3
|
+
export declare const GroupByAggregateMixin: <DTO>(DTOClass: Class<DTO>, AR: Class<AggregateResponse<DTO>>) => <B extends Class<ServiceResolver<DTO, QueryService<DTO, unknown, unknown>>>>(Base: B) => B;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GroupByAggregateMixin = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
6
|
+
const nestjs_query_core_1 = require("@ptc-org/nestjs-query-core");
|
|
7
|
+
const common_1 = require("../../common");
|
|
8
|
+
const decorators_1 = require("../../decorators");
|
|
9
|
+
const reflector = new nestjs_query_core_1.MapReflector('nestjs-query:aggregate-response-type');
|
|
10
|
+
(0, graphql_1.registerEnumType)(nestjs_query_core_1.GroupBy, {
|
|
11
|
+
name: 'GroupBy',
|
|
12
|
+
description: 'Group by' // this one is optional
|
|
13
|
+
});
|
|
14
|
+
const GroupByAggregateMixin = (DTOClass, AR) => (Base) => {
|
|
15
|
+
const objName = (0, common_1.getGraphqlObjectName)(DTOClass, 'Unable to make AggregationResponseType.');
|
|
16
|
+
const aggName = `${objName}AggregateGroupBy`;
|
|
17
|
+
return reflector.memoize(DTOClass, aggName, () => {
|
|
18
|
+
const fields = (0, decorators_1.getFilterableFields)(DTOClass).filter((field) => field.target === Date);
|
|
19
|
+
// If there are no date fields return base
|
|
20
|
+
if (!fields.length) {
|
|
21
|
+
return Base;
|
|
22
|
+
}
|
|
23
|
+
return fields.reduce((RB, field) => {
|
|
24
|
+
var _a;
|
|
25
|
+
let ReadOneMixin = class ReadOneMixin extends RB {
|
|
26
|
+
[_a = field.propertyName](dto, by) {
|
|
27
|
+
return dto[field.propertyName];
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
tslib_1.__decorate([
|
|
31
|
+
(0, decorators_1.ResolverField)(field.propertyName, () => field.target, { nullable: true }),
|
|
32
|
+
tslib_1.__param(0, (0, graphql_1.Parent)()),
|
|
33
|
+
tslib_1.__param(1, (0, graphql_1.Args)('by', {
|
|
34
|
+
type: () => nestjs_query_core_1.GroupBy,
|
|
35
|
+
defaultValue: nestjs_query_core_1.GroupBy.DAY
|
|
36
|
+
})),
|
|
37
|
+
tslib_1.__metadata("design:type", Function),
|
|
38
|
+
tslib_1.__metadata("design:paramtypes", [Object, String]),
|
|
39
|
+
tslib_1.__metadata("design:returntype", Object)
|
|
40
|
+
], ReadOneMixin.prototype, _a, null);
|
|
41
|
+
ReadOneMixin = tslib_1.__decorate([
|
|
42
|
+
(0, graphql_1.Resolver)(() => AR, { isAbstract: true })
|
|
43
|
+
], ReadOneMixin);
|
|
44
|
+
return ReadOneMixin;
|
|
45
|
+
}, Base);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
exports.GroupByAggregateMixin = GroupByAggregateMixin;
|
|
49
|
+
//# sourceMappingURL=group-by-aggregate.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-by-aggregate.resolver.js","sourceRoot":"","sources":["../../../../../../packages/query-graphql/src/resolvers/aggregate/group-by-aggregate.resolver.ts"],"names":[],"mappings":";;;;AAAA,6CAA0E;AAC1E,kEAA0G;AAE1G,yCAAmD;AACnD,iDAAqE;AAGrE,MAAM,SAAS,GAAG,IAAI,gCAAY,CAAC,sCAAsC,CAAC,CAAA;AAE1E,IAAA,0BAAgB,EAAC,2BAAO,EAAE;IACxB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,UAAU,CAAC,uBAAuB;CAChD,CAAC,CAAA;AAEK,MAAM,qBAAqB,GAChC,CAAM,QAAoB,EAAE,EAAiC,EAAE,EAAE,CACjE,CAA6E,IAAO,EAAK,EAAE;IACzF,MAAM,OAAO,GAAG,IAAA,6BAAoB,EAAC,QAAQ,EAAE,yCAAyC,CAAC,CAAA;IAEzF,MAAM,OAAO,GAAG,GAAG,OAAO,kBAAkB,CAAA;IAC5C,OAAO,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,IAAA,gCAAmB,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAA;QAErF,0CAA0C;QAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,OAAO,IAAI,CAAA;SACZ;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;;YAEjC,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,EAAE;gBAE3B,MAAC,KAAK,CAAC,YAAY,CAAC,CACR,GAAQ,EAKlB,EAAU;oBAEV,OAAO,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;gBAChC,CAAC;aACF,CAAA;YAXC;gBAAC,IAAA,0BAAa,EAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAEvE,mBAAA,IAAA,gBAAM,GAAE,CAAA;gBACR,mBAAA,IAAA,cAAI,EAAC,IAAI,EAAE;oBACV,IAAI,EAAE,GAAG,EAAE,CAAC,2BAAO;oBACnB,YAAY,EAAE,2BAAO,CAAC,GAAG;iBAC1B,CAAC,CAAA;;;;gDAIH;YAXG,YAAY;gBADjB,IAAA,kBAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;eACnC,YAAY,CAYjB;YAED,OAAO,YAAY,CAAA;QACrB,CAAC,EAAE,IAAI,CAAC,CAAA;IACV,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAjCU,QAAA,qBAAqB,yBAiC/B"}
|
|
@@ -10,6 +10,7 @@ const common_1 = require("../common");
|
|
|
10
10
|
const decorators_1 = require("../decorators");
|
|
11
11
|
const interceptors_1 = require("../interceptors");
|
|
12
12
|
const types_1 = require("../types");
|
|
13
|
+
const group_by_aggregate_resolver_1 = require("./aggregate/group-by-aggregate.resolver");
|
|
13
14
|
const helpers_1 = require("./helpers");
|
|
14
15
|
const resolver_interface_1 = require("./resolver.interface");
|
|
15
16
|
/**
|
|
@@ -23,7 +24,7 @@ const Aggregateable = (DTOClass, opts) => (BaseClass) => {
|
|
|
23
24
|
const { baseNameLower } = (0, common_1.getDTONames)(DTOClass);
|
|
24
25
|
const commonResolverOpts = (0, lodash_omit_1.default)(opts, 'dtoName', 'one', 'many', 'QueryArgs', 'Connection');
|
|
25
26
|
const queryName = `${baseNameLower}Aggregate`;
|
|
26
|
-
const AR = (0, types_1.AggregateResponseType)(DTOClass);
|
|
27
|
+
const [AR, GroupbyType] = (0, types_1.AggregateResponseType)(DTOClass);
|
|
27
28
|
let AA = class AA extends (0, types_1.AggregateArgsType)(DTOClass) {
|
|
28
29
|
};
|
|
29
30
|
AA = tslib_1.__decorate([
|
|
@@ -50,7 +51,7 @@ const Aggregateable = (DTOClass, opts) => (BaseClass) => {
|
|
|
50
51
|
AggregateResolverBase = tslib_1.__decorate([
|
|
51
52
|
(0, graphql_1.Resolver)(() => AR, { isAbstract: true })
|
|
52
53
|
], AggregateResolverBase);
|
|
53
|
-
return AggregateResolverBase;
|
|
54
|
+
return (0, group_by_aggregate_resolver_1.GroupByAggregateMixin)(DTOClass, GroupbyType)(AggregateResolverBase);
|
|
54
55
|
};
|
|
55
56
|
exports.Aggregateable = Aggregateable;
|
|
56
57
|
// eslint-disable-next-line @typescript-eslint/no-redeclare -- intentional
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate.resolver.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/resolvers/aggregate.resolver.ts"],"names":[],"mappings":";;;;AAAA,6CAA0D;AAC1D,kEAAwH;AACxH,sEAA8B;AAE9B,kCAAwC;AACxC,sCAAuC;AACvC,8CAAwG;AACxG,kDAAuD;AACvD,oCAAmE;AACnE,uCAAgD;AAChD,6DAA0F;AAc1F;;;GAGG;AACI,MAAM,aAAa,GACxB,CAAsD,QAAoB,EAAE,IAA4B,EAAE,EAAE,CAC5G,CAA4C,SAAY,EAAyC,EAAE;IACjG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QAC1B,OAAO,SAAkB,CAAA;KAC1B;IAED,MAAM,EAAE,aAAa,EAAE,GAAG,IAAA,oBAAW,EAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,kBAAkB,GAAG,IAAA,qBAAI,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IAC1F,MAAM,SAAS,GAAG,GAAG,aAAa,WAAW,CAAA;IAC7C,MAAM,EAAE,GAAG,IAAA,6BAAqB,EAAC,QAAQ,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"aggregate.resolver.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/resolvers/aggregate.resolver.ts"],"names":[],"mappings":";;;;AAAA,6CAA0D;AAC1D,kEAAwH;AACxH,sEAA8B;AAE9B,kCAAwC;AACxC,sCAAuC;AACvC,8CAAwG;AACxG,kDAAuD;AACvD,oCAAmE;AACnE,yFAA+E;AAC/E,uCAAgD;AAChD,6DAA0F;AAc1F;;;GAGG;AACI,MAAM,aAAa,GACxB,CAAsD,QAAoB,EAAE,IAA4B,EAAE,EAAE,CAC5G,CAA4C,SAAY,EAAyC,EAAE;IACjG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QAC1B,OAAO,SAAkB,CAAA;KAC1B;IAED,MAAM,EAAE,aAAa,EAAE,GAAG,IAAA,oBAAW,EAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,kBAAkB,GAAG,IAAA,qBAAI,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IAC1F,MAAM,SAAS,GAAG,GAAG,aAAa,WAAW,CAAA;IAC7C,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,GAAG,IAAA,6BAAqB,EAAC,QAAQ,CAAC,CAAA;IAGzD,IAAM,EAAE,GAAR,MAAM,EAAG,SAAQ,IAAA,yBAAiB,EAAC,QAAQ,CAAC;KAAG,CAAA;IAAzC,EAAE;QADP,IAAA,kBAAQ,GAAE;OACL,EAAE,CAAuC;IAG/C,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,SAAS;QAQrC,AAAN,KAAK,CAAC,SAAS,CACL,IAAQ,EACO,KAA0B,EAKjD,UAAwB;YAExB,MAAM,EAAE,GAAG,MAAM,IAAA,8BAAoB,EAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAA,+BAAW,EAAC,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;QACtF,CAAC;KACF,CAAA;IAZO;QAPL,IAAA,0BAAa,EACZ,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EACV,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,kBAAkB,EAClB,EAAE,YAAY,EAAE,CAAC,IAAA,oCAAqB,EAAC,QAAQ,CAAC,CAAC,EAAE,EACnD,IAAI,IAAI,EAAE,CACX;QAEE,mBAAA,IAAA,cAAI,GAAE,CAAA;QACN,mBAAA,IAAA,gCAAmB,GAAE,CAAA;QACrB,mBAAA,IAAA,6BAAgB,EAAC;YAChB,cAAc,EAAE,qBAAc,CAAC,SAAS;YACxC,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;;iDALY,EAAE;;0DAUjB;IAnBG,qBAAqB;QAD1B,IAAA,kBAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;OACnC,qBAAqB,CAoB1B;IAED,OAAO,IAAA,mDAAqB,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAA;AAC5E,CAAC,CAAA;AAvCU,QAAA,aAAa,iBAuCvB;AACH,0EAA0E;AACnE,MAAM,iBAAiB,GAAG,CAC/B,QAAoB,EACpB,IAA4B,EACwB,EAAE,CAAC,IAAA,qBAAa,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,wCAAmB,CAAC,CAAA;AAH9F,QAAA,iBAAiB,qBAG6E"}
|
package/src/resolvers/helpers.js
CHANGED
|
@@ -10,7 +10,7 @@ const transformAndValidate = async (TClass, partial) => {
|
|
|
10
10
|
if (partial instanceof TClass) {
|
|
11
11
|
return partial;
|
|
12
12
|
}
|
|
13
|
-
const transformed = (0, class_transformer_1.
|
|
13
|
+
const transformed = (0, class_transformer_1.plainToInstance)(TClass, partial);
|
|
14
14
|
const validationErrors = await (0, class_validator_1.validate)(transformed);
|
|
15
15
|
if (validationErrors.length) {
|
|
16
16
|
throw new common_1.BadRequestException(validationErrors);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/resolvers/helpers.ts"],"names":[],"mappings":";;;AAAA,2CAAoD;AACpD,kEAAuE;AACvE,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/resolvers/helpers.ts"],"names":[],"mappings":";;;AAAA,2CAAoD;AACpD,kEAAuE;AACvE,yDAAmD;AACnD,qDAA0C;AAI1C,gBAAgB;AACT,MAAM,oBAAoB,GAAG,KAAK,EAAK,MAAgB,EAAE,OAAU,EAAc,EAAE;IACxF,IAAI,OAAO,YAAY,MAAM,EAAE;QAC7B,OAAO,OAAO,CAAA;KACf;IACD,MAAM,WAAW,GAAG,IAAA,mCAAe,EAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,gBAAgB,GAAG,MAAM,IAAA,0BAAQ,EAAC,WAAsD,CAAC,CAAA;IAC/F,IAAI,gBAAgB,CAAC,MAAM,EAAE;QAC3B,MAAM,IAAI,4BAAmB,CAAC,gBAAgB,CAAC,CAAA;KAChD;IACD,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AAVY,QAAA,oBAAoB,wBAUhC;AAEM,MAAM,wBAAwB,GACnC,CACE,UAAwB,EACxB,UAAkB;AAClB,8DAA8D;EACwC,EAAE;AAC1G,8DAA8D;AAC9D,KAAK,EAAE,OAAY,EAAE,SAAsC,EAAoB,EAAE;IAC/E,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;IAC3B,IAAI,KAAK,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAoB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QAC1D,sEAAsE;QACtE,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAQ,CAAA;QACtC,OAAO,IAAA,+BAAW,EAAC,GAAG,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;KAC3C;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAhBU,QAAA,wBAAwB,4BAgBlC;AAEH,SAAgB,wBAAwB,CAAI,SAAiB,EAAE,eAA2B;IACxF,OAAO,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACxF,CAAC;AAFD,4DAEC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AggregateResponse, Class } from '@ptc-org/nestjs-query-core';
|
|
1
|
+
import { AggregateResponse, Class, TypeAggregate } from '@ptc-org/nestjs-query-core';
|
|
2
2
|
export type AggregateResponseOpts = {
|
|
3
3
|
prefix: string;
|
|
4
4
|
};
|
|
5
|
-
export declare function AggregateResponseType<DTO>(DTOClass: Class<DTO>, opts?: AggregateResponseOpts): Class<AggregateResponse<DTO
|
|
5
|
+
export declare function AggregateResponseType<DTO>(DTOClass: Class<DTO>, opts?: AggregateResponseOpts): [Class<AggregateResponse<DTO>>, Class<TypeAggregate<DTO>>];
|
|
@@ -89,7 +89,7 @@ function AggregateResponseType(DTOClass, opts) {
|
|
|
89
89
|
AggResponse = tslib_1.__decorate([
|
|
90
90
|
(0, graphql_1.ObjectType)(aggName)
|
|
91
91
|
], AggResponse);
|
|
92
|
-
return AggResponse;
|
|
92
|
+
return [AggResponse, GroupType];
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
exports.AggregateResponseType = AggregateResponseType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-response.type.js","sourceRoot":"","sources":["../../../../../../packages/query-graphql/src/types/aggregate/aggregate-response.type.ts"],"names":[],"mappings":";;;;AAAA,6CAA+D;AAC/D,kEAAmH;AAGnH,yCAAmD;AACnD,iDAAyF;AAEzF,MAAM,SAAS,GAAG,IAAI,gCAAY,CAAC,sCAAsC,CAAC,CAAA;AAE1E,SAAS,oBAAoB,CAC3B,IAAY,EACZ,MAAmC,EACnC,UAA6B;IAE7B,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAGpD,IAAM,UAAU,GAAhB,MAAM,UAAU;KAAG,CAAA;IAAb,UAAU;QADf,IAAA,oBAAU,EAAC,IAAI,CAAC;OACX,UAAU,CAAG;IAEnB,UAAU,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QAClC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAM,IAAY,EAAE,MAAmC;IAElF,IAAM,UAAU,GAAhB,MAAM,UAAU;KAAG,CAAA;IAAb,UAAU;QADf,IAAA,oBAAU,EAAC,IAAI,CAAC;OACX,UAAU,CAAG;IAEnB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;QAC1D,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACrD,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,cAAc,CAAM,IAAY,EAAE,MAAmC;IAE5E,IAAM,UAAU,GAAhB,MAAM,UAAU;KAAG,CAAA;IAAb,UAAU;QADf,IAAA,oBAAU,EAAC,IAAI,CAAC;OACX,UAAU,CAAG;IAEnB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;QAC1D,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACrD,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AAID,SAAgB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"aggregate-response.type.js","sourceRoot":"","sources":["../../../../../../packages/query-graphql/src/types/aggregate/aggregate-response.type.ts"],"names":[],"mappings":"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"}
|