@recursyve/nestjs-data-filter 9.3.2 → 9.4.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/data-filter.repository.d.ts +3 -1
- package/lib/data-filter.repository.js +12 -9
- package/lib/data-filter.service.d.ts +4 -4
- package/lib/data-filter.service.js +8 -7
- package/lib/filter/base-filter.d.ts +3 -0
- package/lib/filter/base-filter.js +19 -1
- package/lib/filter/filter.factory.d.ts +2 -1
- package/lib/filter/filter.factory.js +3 -3
- package/lib/filter/filter.provider.js +3 -2
- package/lib/filter/filter.service.d.ts +3 -1
- package/lib/filter/filter.service.js +14 -10
- package/lib/filter/filters/filter.d.ts +3 -0
- package/lib/filter/filters/filter.js +7 -4
- package/lib/filter/filters/geo-bounds.filter.js +2 -3
- package/lib/filter/filters/geo-localization.filter.js +2 -2
- package/lib/filter/filters/group.filter.d.ts +3 -0
- package/lib/filter/filters/group.filter.js +9 -2
- package/lib/filter/order-rules/enum.order-rule.js +2 -3
- package/lib/filter/order-rules/if.order-rule.js +2 -3
- package/lib/filter/order-rules/is-null.order-rule.js +2 -3
- package/lib/filter/order-rules/order-rule.d.ts +3 -0
- package/lib/filter/order-rules/order-rule.js +5 -2
- package/lib/index.js +4 -3
- package/lib/models/attributes.model.d.ts +8 -1
- package/lib/models/attributes.model.js +21 -11
- package/lib/models/count.model.d.ts +11 -4
- package/lib/models/count.model.js +25 -14
- package/lib/models/custom-attributes.model.d.ts +6 -2
- package/lib/models/custom-attributes.model.js +5 -1
- package/lib/models/data-filter.model.d.ts +9 -2
- package/lib/models/data-filter.model.js +40 -30
- package/lib/models/distance.model.d.ts +10 -3
- package/lib/models/distance.model.js +29 -18
- package/lib/models/sum.model.d.ts +10 -3
- package/lib/models/sum.model.js +19 -8
- package/lib/scanners/sequelize-model.scanner.d.ts +4 -2
- package/lib/scanners/sequelize-model.scanner.js +16 -8
- package/lib/sequelize.utils.d.ts +0 -3
- package/lib/sequelize.utils.js +1 -18
- package/lib/services/dialect-formatter.service.d.ts +10 -0
- package/lib/services/dialect-formatter.service.js +58 -0
- package/package.json +1 -1
|
@@ -1,30 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CountAttributesConfig = void 0;
|
|
3
|
+
exports.CountAttributesContext = exports.CountAttributesConfig = void 0;
|
|
4
4
|
const sequelize_1 = require("sequelize");
|
|
5
|
-
const
|
|
5
|
+
const custom_attributes_model_1 = require("./custom-attributes.model");
|
|
6
6
|
class CountAttributesConfig {
|
|
7
7
|
constructor(key, config) {
|
|
8
8
|
this.key = key;
|
|
9
9
|
this.config = config;
|
|
10
10
|
this.type = "count";
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const attribute = this.config.path
|
|
15
|
-
? sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.config.attribute, this.config.path)
|
|
16
|
-
: this.config.attribute;
|
|
17
|
-
return [(0, sequelize_1.literal)(`COUNT(DISTINCT ${attribute})`), this.key];
|
|
18
|
-
}
|
|
19
|
-
const attribute = this.config.path
|
|
20
|
-
? (0, sequelize_1.literal)(sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.config.attribute, this.config.path))
|
|
21
|
-
: this.config.attribute;
|
|
22
|
-
return [(0, sequelize_1.fn)("COUNT", attribute), this.key];
|
|
12
|
+
withContext(dialectFormatterService) {
|
|
13
|
+
return new CountAttributesContext(this, dialectFormatterService);
|
|
23
14
|
}
|
|
24
15
|
shouldGroupBy() {
|
|
25
16
|
return true;
|
|
26
17
|
}
|
|
27
18
|
}
|
|
28
19
|
exports.CountAttributesConfig = CountAttributesConfig;
|
|
20
|
+
class CountAttributesContext extends custom_attributes_model_1.CustomAttributesContext {
|
|
21
|
+
constructor(config, dialectFormatterService) {
|
|
22
|
+
super();
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.dialectFormatterService = dialectFormatterService;
|
|
25
|
+
}
|
|
26
|
+
transform(options, path) {
|
|
27
|
+
if (this.config.config.distinct) {
|
|
28
|
+
const attribute = this.config.config.path
|
|
29
|
+
? this.dialectFormatterService.getLiteralFullName(this.config.config.attribute, this.config.config.path)
|
|
30
|
+
: this.config.config.attribute;
|
|
31
|
+
return [(0, sequelize_1.literal)(`COUNT(DISTINCT ${attribute})`), this.config.key];
|
|
32
|
+
}
|
|
33
|
+
const attribute = this.config.config.path
|
|
34
|
+
? (0, sequelize_1.literal)(this.dialectFormatterService.getLiteralFullName(this.config.config.attribute, this.config.config.path))
|
|
35
|
+
: this.config.config.attribute;
|
|
36
|
+
return [(0, sequelize_1.fn)("COUNT", attribute), this.config.key];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.CountAttributesContext = CountAttributesContext;
|
|
29
40
|
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbHMvY291bnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBR3hDLHVFQUltQztBQU9uQyxNQUFhLHFCQUFxQjtJQUc5QixZQUFtQixHQUFXLEVBQVMsTUFBbUI7UUFBdkMsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUFTLFdBQU0sR0FBTixNQUFNLENBQWE7UUFGbkQsU0FBSSxHQUFHLE9BQU8sQ0FBQztJQUV1QyxDQUFDO0lBRXZELFdBQVcsQ0FBQyx1QkFBZ0Q7UUFDL0QsT0FBTyxJQUFJLHNCQUFzQixDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxhQUFhO1FBQ2hCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSjtBQVpELHNEQVlDO0FBRUQsTUFBYSxzQkFBdUIsU0FBUSxpREFBdUI7SUFDL0QsWUFBb0IsTUFBNkIsRUFBVSx1QkFBZ0Q7UUFDdkcsS0FBSyxFQUFFLENBQUM7UUFEUSxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUFVLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7SUFFM0csQ0FBQztJQUVNLFNBQVMsQ0FBQyxPQUFlLEVBQUUsSUFBYTtRQUMzQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ3hHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDbkMsT0FBTyxDQUFDLElBQUEsbUJBQU8sRUFBQyxrQkFBa0IsU0FBUyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JFO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUNyQyxDQUFDLENBQUMsSUFBQSxtQkFBTyxFQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakgsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxPQUFPLENBQUMsSUFBQSxjQUFFLEVBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNKO0FBbEJELHdEQWtCQyIsImZpbGUiOiJsaWIvbW9kZWxzL2NvdW50Lm1vZGVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm4sIGxpdGVyYWwgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBQcm9qZWN0aW9uQWxpYXMgfSBmcm9tIFwic2VxdWVsaXplL3R5cGVzL21vZGVsXCI7XG5pbXBvcnQgeyBEaWFsZWN0Rm9ybWF0dGVyU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9kaWFsZWN0LWZvcm1hdHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICAgIEN1c3RvbUF0dHJpYnV0ZXNDb25maWcsXG4gICAgQ3VzdG9tQXR0cmlidXRlc0NvbnRleHQsXG4gICAgQ3VzdG9tQXR0cmlidXRlc09wdGlvbkNvbmZpZ1xufSBmcm9tIFwiLi9jdXN0b20tYXR0cmlidXRlcy5tb2RlbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvdW50Q29uZmlnIGV4dGVuZHMgQ3VzdG9tQXR0cmlidXRlc09wdGlvbkNvbmZpZyB7XG4gICAgYXR0cmlidXRlOiBzdHJpbmc7XG4gICAgZGlzdGluY3Q/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQ291bnRBdHRyaWJ1dGVzQ29uZmlnIGltcGxlbWVudHMgQ3VzdG9tQXR0cmlidXRlc0NvbmZpZzxDb3VudENvbmZpZywgQ291bnRBdHRyaWJ1dGVzQ29udGV4dD4ge1xuICAgIHB1YmxpYyB0eXBlID0gXCJjb3VudFwiO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGtleTogc3RyaW5nLCBwdWJsaWMgY29uZmlnOiBDb3VudENvbmZpZykge31cblxuICAgIHB1YmxpYyB3aXRoQ29udGV4dChkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpOiBDb3VudEF0dHJpYnV0ZXNDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb3VudEF0dHJpYnV0ZXNDb250ZXh0KHRoaXMsIGRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkR3JvdXBCeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ291bnRBdHRyaWJ1dGVzQ29udGV4dCBleHRlbmRzIEN1c3RvbUF0dHJpYnV0ZXNDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogQ291bnRBdHRyaWJ1dGVzQ29uZmlnLCBwcml2YXRlIGRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlOiBEaWFsZWN0Rm9ybWF0dGVyU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0ob3B0aW9uczogb2JqZWN0LCBwYXRoPzogc3RyaW5nKTogc3RyaW5nIHwgUHJvamVjdGlvbkFsaWFzIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmNvbmZpZy5kaXN0aW5jdCkge1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5jb25maWcuY29uZmlnLnBhdGhcbiAgICAgICAgICAgICAgICA/IHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UuZ2V0TGl0ZXJhbEZ1bGxOYW1lKHRoaXMuY29uZmlnLmNvbmZpZy5hdHRyaWJ1dGUsIHRoaXMuY29uZmlnLmNvbmZpZy5wYXRoKVxuICAgICAgICAgICAgICAgIDogdGhpcy5jb25maWcuY29uZmlnLmF0dHJpYnV0ZTtcbiAgICAgICAgICAgIHJldHVybiBbbGl0ZXJhbChgQ09VTlQoRElTVElOQ1QgJHthdHRyaWJ1dGV9KWApLCB0aGlzLmNvbmZpZy5rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5jb25maWcuY29uZmlnLnBhdGhcbiAgICAgICAgICAgID8gbGl0ZXJhbCh0aGlzLmRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlLmdldExpdGVyYWxGdWxsTmFtZSh0aGlzLmNvbmZpZy5jb25maWcuYXR0cmlidXRlLCB0aGlzLmNvbmZpZy5jb25maWcucGF0aCkpXG4gICAgICAgICAgICA6IHRoaXMuY29uZmlnLmNvbmZpZy5hdHRyaWJ1dGU7XG4gICAgICAgIHJldHVybiBbZm4oXCJDT1VOVFwiLCBhdHRyaWJ1dGUpLCB0aGlzLmNvbmZpZy5rZXldO1xuICAgIH1cbn0iXX0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ProjectionAlias } from "sequelize";
|
|
2
|
+
import { DialectFormatterService } from "../services/dialect-formatter.service";
|
|
2
3
|
import { IncludeWhereModel } from "./include.model";
|
|
3
4
|
import { PathModel } from "./path.model";
|
|
4
5
|
export interface CustomAttributesOptionConfig {
|
|
@@ -6,13 +7,16 @@ export interface CustomAttributesOptionConfig {
|
|
|
6
7
|
path?: string;
|
|
7
8
|
where?: IncludeWhereModel;
|
|
8
9
|
}
|
|
9
|
-
export interface CustomAttributesConfig<T extends CustomAttributesOptionConfig = CustomAttributesOptionConfig> {
|
|
10
|
+
export interface CustomAttributesConfig<T extends CustomAttributesOptionConfig = CustomAttributesOptionConfig, context = CustomAttributesContext> {
|
|
10
11
|
key: string;
|
|
11
12
|
type: string;
|
|
12
13
|
config?: T;
|
|
13
|
-
|
|
14
|
+
withContext(dialectFormatterService: DialectFormatterService): context;
|
|
14
15
|
shouldGroupBy(): boolean;
|
|
15
16
|
}
|
|
17
|
+
export declare abstract class CustomAttributesContext {
|
|
18
|
+
abstract transform(options?: object, path?: string): string | ProjectionAlias;
|
|
19
|
+
}
|
|
16
20
|
export interface CustomAttributesModel {
|
|
17
21
|
key: string;
|
|
18
22
|
attribute: string | ProjectionAlias;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomAttributesContext = void 0;
|
|
4
|
+
class CustomAttributesContext {
|
|
5
|
+
}
|
|
6
|
+
exports.CustomAttributesContext = CustomAttributesContext;
|
|
3
7
|
|
|
4
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbHMvY3VzdG9tLWF0dHJpYnV0ZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcUJBLE1BQXNCLHVCQUF1QjtDQUU1QztBQUZELDBEQUVDIiwiZmlsZSI6ImxpYi9tb2RlbHMvY3VzdG9tLWF0dHJpYnV0ZXMubW9kZWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0aW9uQWxpYXMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvbiB9IGZyb20gXCJzZXF1ZWxpemUvdHlwZXMvbW9kZWxcIjtcbmltcG9ydCB7IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2RpYWxlY3QtZm9ybWF0dGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEluY2x1ZGVXaGVyZU1vZGVsIH0gZnJvbSBcIi4vaW5jbHVkZS5tb2RlbFwiO1xuaW1wb3J0IHsgUGF0aE1vZGVsIH0gZnJvbSBcIi4vcGF0aC5tb2RlbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUF0dHJpYnV0ZXNPcHRpb25Db25maWcge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHdoZXJlPzogSW5jbHVkZVdoZXJlTW9kZWw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tQXR0cmlidXRlc0NvbmZpZzxUIGV4dGVuZHMgQ3VzdG9tQXR0cmlidXRlc09wdGlvbkNvbmZpZyA9IEN1c3RvbUF0dHJpYnV0ZXNPcHRpb25Db25maWcsIGNvbnRleHQgPSBDdXN0b21BdHRyaWJ1dGVzQ29udGV4dD4ge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBjb25maWc/OiBUO1xuXG4gICAgd2l0aENvbnRleHQoZGlhbGVjdEZvcm1hdHRlclNlcnZpY2U6IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlKTogY29udGV4dDtcbiAgICBzaG91bGRHcm91cEJ5KCk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDdXN0b21BdHRyaWJ1dGVzQ29udGV4dCB7XG4gICAgcHVibGljIGFic3RyYWN0IHRyYW5zZm9ybShvcHRpb25zPzogb2JqZWN0LCBwYXRoPzogc3RyaW5nKTogc3RyaW5nIHwgUHJvamVjdGlvbkFsaWFzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUF0dHJpYnV0ZXNNb2RlbCB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgYXR0cmlidXRlOiBzdHJpbmcgfCBQcm9qZWN0aW9uQWxpYXM7XG4gICAgcGF0aD86IFBhdGhNb2RlbDtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FindAttributeOptions } from "sequelize";
|
|
2
2
|
import { Model } from "sequelize-typescript";
|
|
3
|
+
import { DialectFormatterService } from "../services/dialect-formatter.service";
|
|
3
4
|
import { CustomAttributesConfig, CustomAttributesModel } from "./custom-attributes.model";
|
|
4
5
|
import { IncludeConfig } from "./include.model";
|
|
5
6
|
export interface DataFilterConfigModel {
|
|
@@ -15,14 +16,20 @@ export declare class DataFilterConfig implements DataFilterConfigModel {
|
|
|
15
16
|
exportColumns?: string[];
|
|
16
17
|
customAttributes: CustomAttributesConfig[];
|
|
17
18
|
ignoreInSearch: boolean;
|
|
19
|
+
withContext(dialectFormatterService: DialectFormatterService): DataFilterContext;
|
|
18
20
|
setModel(model: typeof Model): void;
|
|
19
21
|
setIgnoreInPath(ignore: boolean): void;
|
|
20
22
|
setAttributes(attributes?: FindAttributeOptions): void;
|
|
21
23
|
setSearchableAttributes(attributes: string[]): void;
|
|
22
24
|
setExportColumns(exportColumns: string[]): void;
|
|
23
25
|
addCustomAttribute(attribute: CustomAttributesConfig): void;
|
|
24
|
-
transformAttributesConfig(options?: object): FindAttributeOptions;
|
|
25
|
-
getCustomAttributes(options?: object): CustomAttributesModel[];
|
|
26
26
|
getCustomAttributesIncludes(): IncludeConfig[];
|
|
27
27
|
getSearchableAttributes(): string[];
|
|
28
28
|
}
|
|
29
|
+
export declare class DataFilterContext {
|
|
30
|
+
private config;
|
|
31
|
+
private dialectFormatterService;
|
|
32
|
+
constructor(config: DataFilterConfig, dialectFormatterService: DialectFormatterService);
|
|
33
|
+
transformAttributesConfig(options?: object): FindAttributeOptions;
|
|
34
|
+
getCustomAttributes(options?: object): CustomAttributesModel[];
|
|
35
|
+
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DataFilterConfig = void 0;
|
|
3
|
+
exports.DataFilterContext = exports.DataFilterConfig = void 0;
|
|
4
4
|
const sequelize_utils_1 = require("../sequelize.utils");
|
|
5
5
|
class DataFilterConfig {
|
|
6
6
|
constructor() {
|
|
7
7
|
this.customAttributes = [];
|
|
8
8
|
this.ignoreInSearch = false;
|
|
9
9
|
}
|
|
10
|
+
withContext(dialectFormatterService) {
|
|
11
|
+
return new DataFilterContext(this, dialectFormatterService);
|
|
12
|
+
}
|
|
10
13
|
setModel(model) {
|
|
11
14
|
this.model = model;
|
|
12
15
|
}
|
|
@@ -25,34 +28,6 @@ class DataFilterConfig {
|
|
|
25
28
|
addCustomAttribute(attribute) {
|
|
26
29
|
this.customAttributes.push(attribute);
|
|
27
30
|
}
|
|
28
|
-
transformAttributesConfig(options) {
|
|
29
|
-
const customAttributes = this.getCustomAttributes(options);
|
|
30
|
-
if (this.attributes) {
|
|
31
|
-
if (this.customAttributes.length) {
|
|
32
|
-
return sequelize_utils_1.SequelizeUtils.ensureAttributesValidity(sequelize_utils_1.SequelizeUtils.mergeAttributes(this.attributes, {
|
|
33
|
-
include: customAttributes.map(x => x.attribute)
|
|
34
|
-
}));
|
|
35
|
-
}
|
|
36
|
-
return sequelize_utils_1.SequelizeUtils.ensureAttributesValidity(this.attributes);
|
|
37
|
-
}
|
|
38
|
-
if (!this.attributes && customAttributes.length) {
|
|
39
|
-
return {
|
|
40
|
-
include: customAttributes.map(x => x.attribute)
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
getCustomAttributes(options) {
|
|
45
|
-
return this.customAttributes
|
|
46
|
-
.map(x => ({
|
|
47
|
-
key: x.key,
|
|
48
|
-
attribute: x.transform(options),
|
|
49
|
-
path: x.config.path ? {
|
|
50
|
-
path: x.config.path,
|
|
51
|
-
paranoid: true
|
|
52
|
-
} : null
|
|
53
|
-
}))
|
|
54
|
-
.filter(x => x.attribute);
|
|
55
|
-
}
|
|
56
31
|
getCustomAttributesIncludes() {
|
|
57
32
|
return this.customAttributes
|
|
58
33
|
.filter(x => x.config.path)
|
|
@@ -79,5 +54,40 @@ class DataFilterConfig {
|
|
|
79
54
|
}
|
|
80
55
|
}
|
|
81
56
|
exports.DataFilterConfig = DataFilterConfig;
|
|
57
|
+
class DataFilterContext {
|
|
58
|
+
constructor(config, dialectFormatterService) {
|
|
59
|
+
this.config = config;
|
|
60
|
+
this.dialectFormatterService = dialectFormatterService;
|
|
61
|
+
}
|
|
62
|
+
transformAttributesConfig(options) {
|
|
63
|
+
const customAttributes = this.getCustomAttributes(options);
|
|
64
|
+
if (this.config.attributes) {
|
|
65
|
+
if (this.config.customAttributes.length) {
|
|
66
|
+
return sequelize_utils_1.SequelizeUtils.ensureAttributesValidity(sequelize_utils_1.SequelizeUtils.mergeAttributes(this.config.attributes, {
|
|
67
|
+
include: customAttributes.map(x => x.attribute)
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
return sequelize_utils_1.SequelizeUtils.ensureAttributesValidity(this.config.attributes);
|
|
71
|
+
}
|
|
72
|
+
if (!this.config.attributes && customAttributes.length) {
|
|
73
|
+
return {
|
|
74
|
+
include: customAttributes.map(x => x.attribute)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
getCustomAttributes(options) {
|
|
79
|
+
return this.config.customAttributes
|
|
80
|
+
.map(x => ({
|
|
81
|
+
key: x.key,
|
|
82
|
+
attribute: x.withContext(this.dialectFormatterService).transform(options),
|
|
83
|
+
path: x.config.path ? {
|
|
84
|
+
path: x.config.path,
|
|
85
|
+
paranoid: true
|
|
86
|
+
} : null
|
|
87
|
+
}))
|
|
88
|
+
.filter(x => x.attribute);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.DataFilterContext = DataFilterContext;
|
|
82
92
|
|
|
83
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbHMvZGF0YS1maWx0ZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0Esd0RBQXVEO0FBU3ZELE1BQWEsZ0JBQWdCO0lBQTdCO1FBS1cscUJBQWdCLEdBQTZCLEVBQUUsQ0FBQztRQUNoRCxtQkFBYyxHQUFHLEtBQUssQ0FBQztJQXdEbEMsQ0FBQztJQXREVSxXQUFXLENBQUMsdUJBQWdEO1FBQy9ELE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQW1CO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxlQUFlLENBQUMsTUFBZTtRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRU0sYUFBYSxDQUFDLFVBQWlDO1FBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxVQUFvQjtRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0lBQzNDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxhQUF1QjtRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUN2QyxDQUFDO0lBRU0sa0JBQWtCLENBQUMsU0FBaUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sMkJBQTJCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjthQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzthQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1AsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtZQUMzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO1lBQ25CLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDckIsUUFBUSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRU0sdUJBQXVCOztRQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzNCLE9BQU8sZ0NBQWMsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsS0FBaUIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUM5RztRQUVELE1BQU0sb0JBQW9CLEdBQUcsZ0NBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsS0FBaUIsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sVUFBVSxHQUFHLGdDQUFjLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLEtBQWlCLEVBQUUsTUFBQSxJQUFJLENBQUMsVUFBc0IsbUNBQUksRUFBRSxDQUFDLENBQUM7UUFDL0gsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckIsVUFBdUIsYUFBdkIsVUFBVSx1QkFBVixVQUFVLENBQWUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RixvQkFBb0IsQ0FBQztJQUM3QixDQUFDO0NBQ0o7QUE5REQsNENBOERDO0FBRUQsTUFBYSxpQkFBaUI7SUFDMUIsWUFBb0IsTUFBd0IsRUFBVSx1QkFBZ0Q7UUFBbEYsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFBVSw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO0lBQUcsQ0FBQztJQUVuRyx5QkFBeUIsQ0FBQyxPQUFnQjtRQUM3QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JDLE9BQU8sZ0NBQWMsQ0FBQyx3QkFBd0IsQ0FDMUMsZ0NBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7b0JBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2lCQUNsRCxDQUFDLENBQ0wsQ0FBQzthQUNMO1lBRUQsT0FBTyxnQ0FBYyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDMUU7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ3BELE9BQU87Z0JBQ0gsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7YUFDbEQsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQixDQUFDLE9BQWdCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7YUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRztZQUNWLFNBQVMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDekUsSUFBSSxFQUFHLENBQUMsQ0FBQyxNQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxFQUFHLENBQUMsQ0FBQyxNQUFjLENBQUMsSUFBSTtnQkFDNUIsUUFBUSxFQUFFLElBQUk7YUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNlLENBQUEsQ0FBQzthQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNKO0FBbkNELDhDQW1DQyIsImZpbGUiOiJsaWIvbW9kZWxzL2RhdGEtZmlsdGVyLm1vZGVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmluZEF0dHJpYnV0ZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJzZXF1ZWxpemUtdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZGlhbGVjdC1mb3JtYXR0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgQ3VzdG9tQXR0cmlidXRlc0NvbmZpZywgQ3VzdG9tQXR0cmlidXRlc01vZGVsIH0gZnJvbSBcIi4vY3VzdG9tLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IEluY2x1ZGVDb25maWcgfSBmcm9tIFwiLi9pbmNsdWRlLm1vZGVsXCI7XG5pbXBvcnQgeyBNLCBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhRmlsdGVyQ29uZmlnTW9kZWwge1xuICAgIG1vZGVsOiB0eXBlb2YgTW9kZWw7XG4gICAgYXR0cmlidXRlcz86IEZpbmRBdHRyaWJ1dGVPcHRpb25zO1xuICAgIGV4cG9ydENvbHVtbnM/OiBzdHJpbmdbXTtcbiAgICBjdXN0b21BdHRyaWJ1dGVzOiBDdXN0b21BdHRyaWJ1dGVzQ29uZmlnW107XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRmlsdGVyQ29uZmlnIGltcGxlbWVudHMgRGF0YUZpbHRlckNvbmZpZ01vZGVsIHtcbiAgICBwdWJsaWMgbW9kZWw6IHR5cGVvZiBNb2RlbDtcbiAgICBwdWJsaWMgYXR0cmlidXRlcz86IEZpbmRBdHRyaWJ1dGVPcHRpb25zO1xuICAgIHB1YmxpYyBzZWFyY2hhYmxlQXR0cmlidXRlcz86IHN0cmluZ1tdO1xuICAgIHB1YmxpYyBleHBvcnRDb2x1bW5zPzogc3RyaW5nW107XG4gICAgcHVibGljIGN1c3RvbUF0dHJpYnV0ZXM6IEN1c3RvbUF0dHJpYnV0ZXNDb25maWdbXSA9IFtdO1xuICAgIHB1YmxpYyBpZ25vcmVJblNlYXJjaCA9IGZhbHNlO1xuXG4gICAgcHVibGljIHdpdGhDb250ZXh0KGRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlOiBEaWFsZWN0Rm9ybWF0dGVyU2VydmljZSk6IERhdGFGaWx0ZXJDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhRmlsdGVyQ29udGV4dCh0aGlzLCBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1vZGVsKG1vZGVsOiB0eXBlb2YgTW9kZWwpIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJZ25vcmVJblBhdGgoaWdub3JlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaWdub3JlSW5TZWFyY2ggPSBpZ25vcmU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcz86IEZpbmRBdHRyaWJ1dGVPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNlYXJjaGFibGVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRFeHBvcnRDb2x1bW5zKGV4cG9ydENvbHVtbnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuZXhwb3J0Q29sdW1ucyA9IGV4cG9ydENvbHVtbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEN1c3RvbUF0dHJpYnV0ZShhdHRyaWJ1dGU6IEN1c3RvbUF0dHJpYnV0ZXNDb25maWcpIHtcbiAgICAgICAgdGhpcy5jdXN0b21BdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tQXR0cmlidXRlc0luY2x1ZGVzKCk6IEluY2x1ZGVDb25maWdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4LmNvbmZpZy5wYXRoKVxuICAgICAgICAgICAgLm1hcCh4ID0+ICh7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyBpbmNsdWRlOiBbXSB9LFxuICAgICAgICAgICAgICAgIHBhdGg6IHguY29uZmlnLnBhdGgsXG4gICAgICAgICAgICAgICAgd2hlcmU6IHguY29uZmlnLndoZXJlLFxuICAgICAgICAgICAgICAgIHBhcmFub2lkOiB0cnVlXG4gICAgICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlYXJjaGFibGVBdHRyaWJ1dGVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKHRoaXMuaWdub3JlSW5TZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaGFibGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMuZ2V0TW9kZWxTZWFyY2hhYmxlRmllbGRBdHRyaWJ1dGVzKHRoaXMubW9kZWwgYXMgdHlwZW9mIE0sIHRoaXMuc2VhcmNoYWJsZUF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPSBTZXF1ZWxpemVVdGlscy5nZXRNb2RlbFNlYXJjaGFibGVBdHRyaWJ1dGVzKHRoaXMubW9kZWwgYXMgdHlwZW9mIE0pO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gU2VxdWVsaXplVXRpbHMuZ2V0TW9kZWxTZWFyY2hhYmxlRmllbGRBdHRyaWJ1dGVzKHRoaXMubW9kZWwgYXMgdHlwZW9mIE0sIHRoaXMuYXR0cmlidXRlcyBhcyBzdHJpbmdbXSA/PyBbXSk7XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLmxlbmd0aCA/XG4gICAgICAgICAgICAoYXR0cmlidXRlcyBhcyBzdHJpbmdbXSk/LmZpbHRlcih4ID0+IHNlYXJjaGFibGVBdHRyaWJ1dGVzLnNvbWUoYXR0ciA9PiBhdHRyID09PSB4KSkgOlxuICAgICAgICAgICAgc2VhcmNoYWJsZUF0dHJpYnV0ZXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlckNvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBEYXRhRmlsdGVyQ29uZmlnLCBwcml2YXRlIGRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlOiBEaWFsZWN0Rm9ybWF0dGVyU2VydmljZSkge31cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm1BdHRyaWJ1dGVzQ29uZmlnKG9wdGlvbnM/OiBvYmplY3QpOiBGaW5kQXR0cmlidXRlT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUF0dHJpYnV0ZXMgPSB0aGlzLmdldEN1c3RvbUF0dHJpYnV0ZXMob3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcuY3VzdG9tQXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMuZW5zdXJlQXR0cmlidXRlc1ZhbGlkaXR5KFxuICAgICAgICAgICAgICAgICAgICBTZXF1ZWxpemVVdGlscy5tZXJnZUF0dHJpYnV0ZXModGhpcy5jb25maWcuYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogY3VzdG9tQXR0cmlidXRlcy5tYXAoeCA9PiB4LmF0dHJpYnV0ZSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMuZW5zdXJlQXR0cmlidXRlc1ZhbGlkaXR5KHRoaXMuY29uZmlnLmF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb25maWcuYXR0cmlidXRlcyAmJiBjdXN0b21BdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlOiBjdXN0b21BdHRyaWJ1dGVzLm1hcCh4ID0+IHguYXR0cmlidXRlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXN0b21BdHRyaWJ1dGVzKG9wdGlvbnM/OiBvYmplY3QpOiBDdXN0b21BdHRyaWJ1dGVzTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jdXN0b21BdHRyaWJ1dGVzXG4gICAgICAgICAgICAubWFwKHggPT4gKHtcbiAgICAgICAgICAgICAgICBrZXk6IHgua2V5LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogeC53aXRoQ29udGV4dCh0aGlzLmRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlKS50cmFuc2Zvcm0ob3B0aW9ucyksXG4gICAgICAgICAgICAgICAgcGF0aDogKHguY29uZmlnIGFzIGFueSkucGF0aCA/IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogKHguY29uZmlnIGFzIGFueSkucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW5vaWQ6IHRydWVcbiAgICAgICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgICAgfSBhcyBDdXN0b21BdHRyaWJ1dGVzTW9kZWwpKVxuICAgICAgICAgICAgLmZpbHRlcih4ID0+IHguYXR0cmlidXRlKTtcbiAgICB9XG59Il19
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProjectionAlias } from "sequelize";
|
|
2
|
-
import {
|
|
2
|
+
import { DialectFormatterService } from "../services/dialect-formatter.service";
|
|
3
|
+
import { CustomAttributesConfig, CustomAttributesContext, CustomAttributesOptionConfig } from "./custom-attributes.model";
|
|
3
4
|
export interface BaseDistanceConfig extends CustomAttributesOptionConfig {
|
|
4
5
|
coordinates: (option?: any) => [number, number];
|
|
5
6
|
srid?: number;
|
|
@@ -12,12 +13,18 @@ export interface DistanceConfigWithLatLng {
|
|
|
12
13
|
lngAttribute: string;
|
|
13
14
|
}
|
|
14
15
|
export type DistanceConfig = BaseDistanceConfig & (DistanceConfigWithPoint | DistanceConfigWithLatLng);
|
|
15
|
-
export declare class DistanceAttributesConfig implements CustomAttributesConfig<DistanceConfig> {
|
|
16
|
+
export declare class DistanceAttributesConfig implements CustomAttributesConfig<DistanceConfig, DistanceAttributesContext> {
|
|
16
17
|
key: string;
|
|
17
18
|
config: DistanceConfig;
|
|
18
19
|
type: string;
|
|
19
20
|
constructor(key: string, config: DistanceConfig);
|
|
20
|
-
|
|
21
|
+
withContext(dialectFormatterService: DialectFormatterService): DistanceAttributesContext;
|
|
21
22
|
shouldGroupBy(): boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare class DistanceAttributesContext extends CustomAttributesContext {
|
|
25
|
+
private config;
|
|
26
|
+
private dialectFormatterService;
|
|
27
|
+
constructor(config: DistanceAttributesConfig, dialectFormatterService: DialectFormatterService);
|
|
28
|
+
transform(options: object, path?: string): string | ProjectionAlias;
|
|
22
29
|
private getPointAttribute;
|
|
23
30
|
}
|
|
@@ -1,20 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DistanceAttributesConfig = void 0;
|
|
3
|
+
exports.DistanceAttributesContext = exports.DistanceAttributesConfig = void 0;
|
|
4
4
|
const sequelize_1 = require("sequelize");
|
|
5
|
-
const
|
|
5
|
+
const custom_attributes_model_1 = require("./custom-attributes.model");
|
|
6
6
|
class DistanceAttributesConfig {
|
|
7
7
|
constructor(key, config) {
|
|
8
8
|
this.key = key;
|
|
9
9
|
this.config = config;
|
|
10
10
|
this.type = "distance";
|
|
11
11
|
}
|
|
12
|
+
withContext(dialectFormatterService) {
|
|
13
|
+
return new DistanceAttributesContext(this, dialectFormatterService);
|
|
14
|
+
}
|
|
15
|
+
shouldGroupBy() {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.DistanceAttributesConfig = DistanceAttributesConfig;
|
|
20
|
+
class DistanceAttributesContext extends custom_attributes_model_1.CustomAttributesContext {
|
|
21
|
+
constructor(config, dialectFormatterService) {
|
|
22
|
+
super();
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.dialectFormatterService = dialectFormatterService;
|
|
25
|
+
}
|
|
12
26
|
transform(options, path) {
|
|
13
27
|
var _a, _b;
|
|
14
28
|
if (!options) {
|
|
15
29
|
return null;
|
|
16
30
|
}
|
|
17
|
-
const coordinates = this.config.coordinates(options);
|
|
31
|
+
const coordinates = this.config.config.coordinates(options);
|
|
18
32
|
if (!coordinates || coordinates.length < 2) {
|
|
19
33
|
return null;
|
|
20
34
|
}
|
|
@@ -22,26 +36,23 @@ class DistanceAttributesConfig {
|
|
|
22
36
|
if (typeof latitude !== "number" || typeof longitude !== "number") {
|
|
23
37
|
return null;
|
|
24
38
|
}
|
|
25
|
-
if (path || this.config.path) {
|
|
26
|
-
path = [path, this.config.path].filter(x => x).join(".");
|
|
39
|
+
if (path || this.config.config.path) {
|
|
40
|
+
path = [path, this.config.config.path].filter(x => x).join(".");
|
|
27
41
|
}
|
|
28
|
-
const location = (0, sequelize_1.fn)("ST_GeometryFromText", (0, sequelize_1.literal)(`'POINT(${latitude} ${longitude})'`), (_a = this.config.srid) !== null && _a !== void 0 ? _a : 0);
|
|
29
|
-
return [(0, sequelize_1.fn)("ST_Distance_Sphere", this.getPointAttribute(path), location), (_b = this.config.name) !== null && _b !== void 0 ? _b : this.key];
|
|
30
|
-
}
|
|
31
|
-
shouldGroupBy() {
|
|
32
|
-
return false;
|
|
42
|
+
const location = (0, sequelize_1.fn)("ST_GeometryFromText", (0, sequelize_1.literal)(`'POINT(${latitude} ${longitude})'`), (_a = this.config.config.srid) !== null && _a !== void 0 ? _a : 0);
|
|
43
|
+
return [(0, sequelize_1.fn)("ST_Distance_Sphere", this.getPointAttribute(path), location), (_b = this.config.config.name) !== null && _b !== void 0 ? _b : this.config.key];
|
|
33
44
|
}
|
|
34
45
|
getPointAttribute(path) {
|
|
35
|
-
if (this.config.attribute) {
|
|
36
|
-
const att = this.config.attribute;
|
|
37
|
-
return (0, sequelize_1.literal)(path ?
|
|
46
|
+
if (this.config.config.attribute) {
|
|
47
|
+
const att = this.config.config.attribute;
|
|
48
|
+
return (0, sequelize_1.literal)(path ? this.dialectFormatterService.getLiteralFullName(att, path) : att);
|
|
38
49
|
}
|
|
39
|
-
const lat = path ? (0, sequelize_1.literal)(
|
|
40
|
-
const lng = path ? (0, sequelize_1.literal)(
|
|
50
|
+
const lat = path ? (0, sequelize_1.literal)(this.dialectFormatterService.getLiteralFullName(this.config.config.latAttribute, path)) : this.config.config.latAttribute;
|
|
51
|
+
const lng = path ? (0, sequelize_1.literal)(this.dialectFormatterService.getLiteralFullName(this.config.config.lngAttribute, path)) : this.config.config.lngAttribute;
|
|
41
52
|
const point = (0, sequelize_1.fn)("Point", lng, lat);
|
|
42
|
-
return this.config.srid ? (0, sequelize_1.fn)("ST_SRID", point, this.config.srid) : point;
|
|
53
|
+
return this.config.config.srid ? (0, sequelize_1.fn)("ST_SRID", point, this.config.config.srid) : point;
|
|
43
54
|
}
|
|
44
55
|
}
|
|
45
|
-
exports.
|
|
56
|
+
exports.DistanceAttributesContext = DistanceAttributesContext;
|
|
46
57
|
|
|
47
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbHMvZGlzdGFuY2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXlEO0FBRXpELHVFQUltQztBQWtCbkMsTUFBYSx3QkFBd0I7SUFHakMsWUFBbUIsR0FBVyxFQUFTLE1BQXNCO1FBQTFDLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUZ0RCxTQUFJLEdBQUcsVUFBVSxDQUFDO0lBRXVDLENBQUM7SUFFMUQsV0FBVyxDQUFDLHVCQUFnRDtRQUMvRCxPQUFPLElBQUkseUJBQXlCLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLGFBQWE7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKO0FBWkQsNERBWUM7QUFFRCxNQUFhLHlCQUEwQixTQUFRLGlEQUF1QjtJQUNsRSxZQUFvQixNQUFnQyxFQUFVLHVCQUFnRDtRQUMxRyxLQUFLLEVBQUUsQ0FBQztRQURRLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQVUsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtJQUU5RyxDQUFDO0lBRU0sU0FBUyxDQUFDLE9BQWUsRUFBRSxJQUFhOztRQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUMxQyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDL0QsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNqQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25FO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBQSxjQUFFLEVBQUMscUJBQXFCLEVBQUUsSUFBQSxtQkFBTyxFQUFDLFVBQVUsUUFBUSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLG1DQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZILE9BQU8sQ0FBQyxJQUFBLGNBQUUsRUFBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLG1DQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUgsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVk7UUFDbEMsSUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQWtDLENBQUMsU0FBUyxFQUFFO1lBQzNELE1BQU0sR0FBRyxHQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBa0MsQ0FBQyxTQUFTLENBQUM7WUFDdEUsT0FBTyxJQUFBLG1CQUFPLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzRjtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBQSxtQkFBTyxFQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQW1DLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBbUMsQ0FBQyxZQUFZLENBQUM7UUFDak4sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBbUMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFtQyxDQUFDLFlBQVksQ0FBQztRQUNqTixNQUFNLEtBQUssR0FBRyxJQUFBLGNBQUUsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLGNBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0YsQ0FBQztDQUNKO0FBdENELDhEQXNDQyIsImZpbGUiOiJsaWIvbW9kZWxzL2Rpc3RhbmNlLm1vZGVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm4sIGxpdGVyYWwsIFByb2plY3Rpb25BbGlhcyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2RpYWxlY3QtZm9ybWF0dGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gICAgQ3VzdG9tQXR0cmlidXRlc0NvbmZpZyxcbiAgICBDdXN0b21BdHRyaWJ1dGVzQ29udGV4dCxcbiAgICBDdXN0b21BdHRyaWJ1dGVzT3B0aW9uQ29uZmlnXG59IGZyb20gXCIuL2N1c3RvbS1hdHRyaWJ1dGVzLm1vZGVsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURpc3RhbmNlQ29uZmlnIGV4dGVuZHMgQ3VzdG9tQXR0cmlidXRlc09wdGlvbkNvbmZpZyB7XG4gICAgY29vcmRpbmF0ZXM6IChvcHRpb24/KSA9PiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHNyaWQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdGFuY2VDb25maWdXaXRoUG9pbnQge1xuICAgIGF0dHJpYnV0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpc3RhbmNlQ29uZmlnV2l0aExhdExuZyB7XG4gICAgbGF0QXR0cmlidXRlOiBzdHJpbmc7XG4gICAgbG5nQXR0cmlidXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIERpc3RhbmNlQ29uZmlnID0gQmFzZURpc3RhbmNlQ29uZmlnICYgKERpc3RhbmNlQ29uZmlnV2l0aFBvaW50IHwgRGlzdGFuY2VDb25maWdXaXRoTGF0TG5nKTtcblxuZXhwb3J0IGNsYXNzIERpc3RhbmNlQXR0cmlidXRlc0NvbmZpZyBpbXBsZW1lbnRzIEN1c3RvbUF0dHJpYnV0ZXNDb25maWc8RGlzdGFuY2VDb25maWcsIERpc3RhbmNlQXR0cmlidXRlc0NvbnRleHQ+IHtcbiAgICBwdWJsaWMgdHlwZSA9IFwiZGlzdGFuY2VcIjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBrZXk6IHN0cmluZywgcHVibGljIGNvbmZpZzogRGlzdGFuY2VDb25maWcpIHt9XG5cbiAgICBwdWJsaWMgd2l0aENvbnRleHQoZGlhbGVjdEZvcm1hdHRlclNlcnZpY2U6IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlKTogRGlzdGFuY2VBdHRyaWJ1dGVzQ29udGV4dCB7XG4gICAgICAgIHJldHVybiBuZXcgRGlzdGFuY2VBdHRyaWJ1dGVzQ29udGV4dCh0aGlzLCBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3VsZEdyb3VwQnkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEaXN0YW5jZUF0dHJpYnV0ZXNDb250ZXh0IGV4dGVuZHMgQ3VzdG9tQXR0cmlidXRlc0NvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBEaXN0YW5jZUF0dHJpYnV0ZXNDb25maWcsIHByaXZhdGUgZGlhbGVjdEZvcm1hdHRlclNlcnZpY2U6IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShvcHRpb25zOiBvYmplY3QsIHBhdGg/OiBzdHJpbmcpOiBzdHJpbmcgfCBQcm9qZWN0aW9uQWxpYXMge1xuICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSB0aGlzLmNvbmZpZy5jb25maWcuY29vcmRpbmF0ZXMob3B0aW9ucyk7XG4gICAgICAgIGlmICghY29vcmRpbmF0ZXMgfHwgY29vcmRpbmF0ZXMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbbGF0aXR1ZGUsIGxvbmdpdHVkZV0gPSBjb29yZGluYXRlcztcbiAgICAgICAgaWYgKHR5cGVvZiBsYXRpdHVkZSAhPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgbG9uZ2l0dWRlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aCB8fCB0aGlzLmNvbmZpZy5jb25maWcucGF0aCkge1xuICAgICAgICAgICAgcGF0aCA9IFtwYXRoLCB0aGlzLmNvbmZpZy5jb25maWcucGF0aF0uZmlsdGVyKHggPT4geCkuam9pbihcIi5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGZuKFwiU1RfR2VvbWV0cnlGcm9tVGV4dFwiLCBsaXRlcmFsKGAnUE9JTlQoJHtsYXRpdHVkZX0gJHtsb25naXR1ZGV9KSdgKSwgdGhpcy5jb25maWcuY29uZmlnLnNyaWQgPz8gMCk7XG4gICAgICAgIHJldHVybiBbZm4oXCJTVF9EaXN0YW5jZV9TcGhlcmVcIiwgdGhpcy5nZXRQb2ludEF0dHJpYnV0ZShwYXRoKSwgbG9jYXRpb24pLCB0aGlzLmNvbmZpZy5jb25maWcubmFtZSA/PyB0aGlzLmNvbmZpZy5rZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9pbnRBdHRyaWJ1dGUocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICgodGhpcy5jb25maWcuY29uZmlnIGFzIERpc3RhbmNlQ29uZmlnV2l0aFBvaW50KS5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dCA9ICh0aGlzLmNvbmZpZy5jb25maWcgYXMgRGlzdGFuY2VDb25maWdXaXRoUG9pbnQpLmF0dHJpYnV0ZTtcbiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsKHBhdGggPyB0aGlzLmRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlLmdldExpdGVyYWxGdWxsTmFtZShhdHQsIHBhdGgpIDogYXR0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhdCA9IHBhdGggPyBsaXRlcmFsKHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UuZ2V0TGl0ZXJhbEZ1bGxOYW1lKCh0aGlzLmNvbmZpZy5jb25maWcgYXMgRGlzdGFuY2VDb25maWdXaXRoTGF0TG5nKS5sYXRBdHRyaWJ1dGUsIHBhdGgpKSA6ICh0aGlzLmNvbmZpZy5jb25maWcgYXMgRGlzdGFuY2VDb25maWdXaXRoTGF0TG5nKS5sYXRBdHRyaWJ1dGU7XG4gICAgICAgIGNvbnN0IGxuZyA9IHBhdGggPyBsaXRlcmFsKHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UuZ2V0TGl0ZXJhbEZ1bGxOYW1lKCh0aGlzLmNvbmZpZy5jb25maWcgYXMgRGlzdGFuY2VDb25maWdXaXRoTGF0TG5nKS5sbmdBdHRyaWJ1dGUsIHBhdGgpKSA6ICh0aGlzLmNvbmZpZy5jb25maWcgYXMgRGlzdGFuY2VDb25maWdXaXRoTGF0TG5nKS5sbmdBdHRyaWJ1dGU7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gZm4oXCJQb2ludFwiLCBsbmcsIGxhdCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb25maWcuc3JpZCA/IGZuKFwiU1RfU1JJRFwiLCBwb2ludCwgdGhpcy5jb25maWcuY29uZmlnLnNyaWQpIDogcG9pbnQ7XG4gICAgfVxufSJdfQ==
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { ProjectionAlias } from "sequelize";
|
|
2
|
-
import {
|
|
2
|
+
import { DialectFormatterService } from "../services/dialect-formatter.service";
|
|
3
|
+
import { CustomAttributesConfig, CustomAttributesContext, CustomAttributesOptionConfig } from "./custom-attributes.model";
|
|
3
4
|
export interface SumConfig extends CustomAttributesOptionConfig {
|
|
4
5
|
attribute: string;
|
|
5
6
|
}
|
|
6
|
-
export declare class SumAttributesConfig implements CustomAttributesConfig<SumConfig> {
|
|
7
|
+
export declare class SumAttributesConfig implements CustomAttributesConfig<SumConfig, SumAttributesContext> {
|
|
7
8
|
key: string;
|
|
8
9
|
config: SumConfig;
|
|
9
10
|
type: string;
|
|
10
11
|
constructor(key: string, config: SumConfig);
|
|
11
|
-
|
|
12
|
+
withContext(dialectFormatterService: DialectFormatterService): SumAttributesContext;
|
|
12
13
|
shouldGroupBy(): boolean;
|
|
13
14
|
}
|
|
15
|
+
export declare class SumAttributesContext extends CustomAttributesContext {
|
|
16
|
+
private config;
|
|
17
|
+
private dialectFormatterService;
|
|
18
|
+
constructor(config: SumAttributesConfig, dialectFormatterService: DialectFormatterService);
|
|
19
|
+
transform(options: object, path?: string): string | ProjectionAlias;
|
|
20
|
+
}
|
package/lib/models/sum.model.js
CHANGED
|
@@ -1,24 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SumAttributesConfig = void 0;
|
|
3
|
+
exports.SumAttributesContext = exports.SumAttributesConfig = void 0;
|
|
4
4
|
const sequelize_1 = require("sequelize");
|
|
5
|
-
const
|
|
5
|
+
const custom_attributes_model_1 = require("./custom-attributes.model");
|
|
6
6
|
class SumAttributesConfig {
|
|
7
7
|
constructor(key, config) {
|
|
8
8
|
this.key = key;
|
|
9
9
|
this.config = config;
|
|
10
10
|
this.type = "sum";
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
? (0, sequelize_1.literal)(sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.config.attribute, this.config.path))
|
|
15
|
-
: this.config.attribute;
|
|
16
|
-
return [(0, sequelize_1.fn)("SUM", attribute), this.key];
|
|
12
|
+
withContext(dialectFormatterService) {
|
|
13
|
+
return new SumAttributesContext(this, dialectFormatterService);
|
|
17
14
|
}
|
|
18
15
|
shouldGroupBy() {
|
|
19
16
|
return true;
|
|
20
17
|
}
|
|
21
18
|
}
|
|
22
19
|
exports.SumAttributesConfig = SumAttributesConfig;
|
|
20
|
+
class SumAttributesContext extends custom_attributes_model_1.CustomAttributesContext {
|
|
21
|
+
constructor(config, dialectFormatterService) {
|
|
22
|
+
super();
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.dialectFormatterService = dialectFormatterService;
|
|
25
|
+
}
|
|
26
|
+
transform(options, path) {
|
|
27
|
+
const attribute = this.config.config.path
|
|
28
|
+
? (0, sequelize_1.literal)(this.dialectFormatterService.getLiteralFullName(this.config.config.attribute, this.config.config.path))
|
|
29
|
+
: this.config.config.attribute;
|
|
30
|
+
return [(0, sequelize_1.fn)("SUM", attribute), this.config.key];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.SumAttributesContext = SumAttributesContext;
|
|
23
34
|
|
|
24
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbHMvc3VtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF5RDtBQUV6RCx1RUFJbUM7QUFNbkMsTUFBYSxtQkFBbUI7SUFHNUIsWUFBbUIsR0FBVyxFQUFTLE1BQWlCO1FBQXJDLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBRmpELFNBQUksR0FBRyxLQUFLLENBQUM7SUFFdUMsQ0FBQztJQUVyRCxXQUFXLENBQUMsdUJBQWdEO1FBQy9ELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sYUFBYTtRQUNoQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFaRCxrREFZQztBQUVELE1BQWEsb0JBQXFCLFNBQVEsaURBQXVCO0lBQzdELFlBQW9CLE1BQTJCLEVBQVUsdUJBQWdEO1FBQ3JHLEtBQUssRUFBRSxDQUFDO1FBRFEsV0FBTSxHQUFOLE1BQU0sQ0FBcUI7UUFBVSw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO0lBRXpHLENBQUM7SUFFTSxTQUFTLENBQUMsT0FBZSxFQUFFLElBQWE7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUNyQyxDQUFDLENBQUMsSUFBQSxtQkFBTyxFQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakgsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxPQUFPLENBQUMsSUFBQSxjQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQztDQUNKO0FBWEQsb0RBV0MiLCJmaWxlIjoibGliL21vZGVscy9zdW0ubW9kZWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbiwgbGl0ZXJhbCwgUHJvamVjdGlvbkFsaWFzIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZGlhbGVjdC1mb3JtYXR0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBDdXN0b21BdHRyaWJ1dGVzQ29uZmlnLFxuICAgIEN1c3RvbUF0dHJpYnV0ZXNDb250ZXh0LFxuICAgIEN1c3RvbUF0dHJpYnV0ZXNPcHRpb25Db25maWdcbn0gZnJvbSBcIi4vY3VzdG9tLWF0dHJpYnV0ZXMubW9kZWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdW1Db25maWcgZXh0ZW5kcyBDdXN0b21BdHRyaWJ1dGVzT3B0aW9uQ29uZmlnIHtcbiAgICBhdHRyaWJ1dGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1bUF0dHJpYnV0ZXNDb25maWcgaW1wbGVtZW50cyBDdXN0b21BdHRyaWJ1dGVzQ29uZmlnPFN1bUNvbmZpZywgU3VtQXR0cmlidXRlc0NvbnRleHQ+IHtcbiAgICBwdWJsaWMgdHlwZSA9IFwic3VtXCI7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMga2V5OiBzdHJpbmcsIHB1YmxpYyBjb25maWc6IFN1bUNvbmZpZykge31cblxuICAgIHB1YmxpYyB3aXRoQ29udGV4dChkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpOiBTdW1BdHRyaWJ1dGVzQ29udGV4dCB7XG4gICAgICAgIHJldHVybiBuZXcgU3VtQXR0cmlidXRlc0NvbnRleHQodGhpcywgZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRHcm91cEJ5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdW1BdHRyaWJ1dGVzQ29udGV4dCBleHRlbmRzIEN1c3RvbUF0dHJpYnV0ZXNDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogU3VtQXR0cmlidXRlc0NvbmZpZywgcHJpdmF0ZSBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKG9wdGlvbnM6IG9iamVjdCwgcGF0aD86IHN0cmluZyk6IHN0cmluZyB8IFByb2plY3Rpb25BbGlhcyB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuY29uZmlnLmNvbmZpZy5wYXRoXG4gICAgICAgICAgICA/IGxpdGVyYWwodGhpcy5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZS5nZXRMaXRlcmFsRnVsbE5hbWUodGhpcy5jb25maWcuY29uZmlnLmF0dHJpYnV0ZSwgdGhpcy5jb25maWcuY29uZmlnLnBhdGgpKVxuICAgICAgICAgICAgOiB0aGlzLmNvbmZpZy5jb25maWcuYXR0cmlidXRlO1xuICAgICAgICByZXR1cm4gW2ZuKFwiU1VNXCIsIGF0dHJpYnV0ZSksIHRoaXMuY29uZmlnLmtleV07XG4gICAgfVxufSJdfQ==
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { FindAttributeOptions, IncludeOptions, Order } from "sequelize";
|
|
2
2
|
import { Model } from "sequelize-typescript";
|
|
3
|
-
import { OrderModel } from "..";
|
|
4
|
-
import { IncludeModel } from "..";
|
|
3
|
+
import { IncludeModel, OrderModel } from "..";
|
|
5
4
|
import { PathModel } from "../models/path.model";
|
|
6
5
|
import { SearchAttributesModel } from "../models/search-attributes.model";
|
|
6
|
+
import { DialectFormatterService } from "../services/dialect-formatter.service";
|
|
7
7
|
export declare class SequelizeModelScanner {
|
|
8
|
+
private dialectFormatterService;
|
|
9
|
+
constructor(dialectFormatterService: DialectFormatterService);
|
|
8
10
|
getIncludes(model: typeof Model, path: PathModel, additionalIncludes: IncludeModel[], attributes?: FindAttributeOptions, ignoreAttributes?: boolean): IncludeOptions[];
|
|
9
11
|
getAttributes(model: typeof Model, path: PathModel, additionalIncludes: IncludeModel[], attributes?: FindAttributeOptions): SearchAttributesModel[];
|
|
10
12
|
getOrder(model: typeof Model, orderObj: OrderModel): Order;
|