@ptc-org/nestjs-query-core 0.30.1 → 1.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +104 -104
- package/README.md +4 -4
- package/package.json +5 -5
- 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 +176 -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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Class } from './class.type';
|
|
3
|
+
export declare type MetaValue<MetaType> = MetaType | undefined;
|
|
4
|
+
declare type ClassDecoratorDataFunc<Data> = (data: Data) => ClassDecorator;
|
|
5
|
+
export declare const classMetadataDecorator: <Data>(key: string) => ClassDecoratorDataFunc<Data>;
|
|
6
|
+
export declare function getClassMetadata<DTO, Data>(DTOClass: Class<DTO>, key: string, includeParents: boolean): MetaValue<Data>;
|
|
7
|
+
declare abstract class Reflector {
|
|
8
|
+
readonly metaKey: string;
|
|
9
|
+
constructor(metaKey: string);
|
|
10
|
+
protected getMetadata<Data>(target: Function, includeParents: boolean): MetaValue<Data>;
|
|
11
|
+
protected defineMetadata<Data>(data: Data, target: Function): void;
|
|
12
|
+
}
|
|
13
|
+
export declare class ValueReflector extends Reflector {
|
|
14
|
+
set<DTO, Data>(DTOClass: Class<DTO>, data: Data): void;
|
|
15
|
+
get<DTO, Data>(DTOClass: Class<DTO>, includeParents?: boolean): MetaValue<Data>;
|
|
16
|
+
isDefined<DTO>(DTOClass: Class<DTO>): boolean;
|
|
17
|
+
memoize<DTO, Data>(DTOClass: Class<DTO>, fn: () => Data): Data;
|
|
18
|
+
}
|
|
19
|
+
export declare class ArrayReflector extends Reflector {
|
|
20
|
+
append<DTO, Data>(DTOClass: Class<DTO>, data: Data): void;
|
|
21
|
+
get<DTO, Data>(DTOClass: Class<DTO>, includeParents?: boolean): MetaValue<Data[]>;
|
|
22
|
+
}
|
|
23
|
+
export declare class MapReflector<K = string> extends Reflector {
|
|
24
|
+
set<DTO, Data>(DTOClass: Class<DTO>, key: K, value: Data): void;
|
|
25
|
+
get<DTO, Data>(DTOClass: Class<DTO>, includeParents?: boolean): MetaValue<Map<K, Data>>;
|
|
26
|
+
get<DTO, Data>(DTOClass: Class<DTO>, key: K, includeParents?: boolean): MetaValue<Data>;
|
|
27
|
+
getValues<DTO, Data>(DTOClass: Class<DTO>, includeParents?: boolean): MetaValue<Data[]>;
|
|
28
|
+
has<DTO>(DTOClass: Class<DTO>, key: K): boolean;
|
|
29
|
+
memoize<DTO, Data>(DTOClass: Class<DTO>, key: K, fn: () => Data): Data;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MapReflector = exports.ArrayReflector = exports.ValueReflector = exports.getClassMetadata = exports.classMetadataDecorator = void 0;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
const classMetadataDecorator = (key) =>
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
7
|
+
(data) =>
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
9
|
+
(target) => {
|
|
10
|
+
Reflect.defineMetadata(key, data, target);
|
|
11
|
+
};
|
|
12
|
+
exports.classMetadataDecorator = classMetadataDecorator;
|
|
13
|
+
function getClassMetadata(DTOClass, key, includeParents) {
|
|
14
|
+
if (includeParents) {
|
|
15
|
+
return Reflect.getMetadata(key, DTOClass);
|
|
16
|
+
}
|
|
17
|
+
return Reflect.getOwnMetadata(key, DTOClass);
|
|
18
|
+
}
|
|
19
|
+
exports.getClassMetadata = getClassMetadata;
|
|
20
|
+
class Reflector {
|
|
21
|
+
constructor(metaKey) {
|
|
22
|
+
this.metaKey = metaKey;
|
|
23
|
+
}
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
25
|
+
getMetadata(target, includeParents) {
|
|
26
|
+
if (includeParents) {
|
|
27
|
+
return Reflect.getMetadata(this.metaKey, target);
|
|
28
|
+
}
|
|
29
|
+
return Reflect.getOwnMetadata(this.metaKey, target);
|
|
30
|
+
}
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
32
|
+
defineMetadata(data, target) {
|
|
33
|
+
Reflect.defineMetadata(this.metaKey, data, target);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class ValueReflector extends Reflector {
|
|
37
|
+
set(DTOClass, data) {
|
|
38
|
+
this.defineMetadata(data, DTOClass);
|
|
39
|
+
}
|
|
40
|
+
get(DTOClass, includeParents = false) {
|
|
41
|
+
return this.getMetadata(DTOClass, includeParents);
|
|
42
|
+
}
|
|
43
|
+
isDefined(DTOClass) {
|
|
44
|
+
return this.get(DTOClass) !== undefined;
|
|
45
|
+
}
|
|
46
|
+
memoize(DTOClass, fn) {
|
|
47
|
+
const existing = this.get(DTOClass);
|
|
48
|
+
if (existing) {
|
|
49
|
+
return existing;
|
|
50
|
+
}
|
|
51
|
+
const result = fn();
|
|
52
|
+
this.set(DTOClass, result);
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.ValueReflector = ValueReflector;
|
|
57
|
+
class ArrayReflector extends Reflector {
|
|
58
|
+
append(DTOClass, data) {
|
|
59
|
+
const metadata = getClassMetadata(DTOClass, this.metaKey, false) ?? [];
|
|
60
|
+
metadata.push(data);
|
|
61
|
+
this.defineMetadata(metadata, DTOClass);
|
|
62
|
+
}
|
|
63
|
+
get(DTOClass, includeParents = false) {
|
|
64
|
+
return this.getMetadata(DTOClass, includeParents);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.ArrayReflector = ArrayReflector;
|
|
68
|
+
class MapReflector extends Reflector {
|
|
69
|
+
set(DTOClass, key, value) {
|
|
70
|
+
const metadata = getClassMetadata(DTOClass, this.metaKey, false) ?? new Map();
|
|
71
|
+
metadata.set(key, value);
|
|
72
|
+
this.defineMetadata(metadata, DTOClass);
|
|
73
|
+
}
|
|
74
|
+
get(DTOClass, key, includeParents) {
|
|
75
|
+
if (typeof key === 'boolean' || typeof key === 'undefined') {
|
|
76
|
+
return this.getMetadata(DTOClass, includeParents ?? false);
|
|
77
|
+
}
|
|
78
|
+
return this.getMetadata(DTOClass, includeParents ?? false)?.get(key);
|
|
79
|
+
}
|
|
80
|
+
getValues(DTOClass, includeParents = false) {
|
|
81
|
+
const values = this.getMetadata(DTOClass, includeParents)?.values();
|
|
82
|
+
return values ? [...values] : undefined;
|
|
83
|
+
}
|
|
84
|
+
has(DTOClass, key) {
|
|
85
|
+
return this.getMetadata(DTOClass, false)?.has(key) ?? false;
|
|
86
|
+
}
|
|
87
|
+
memoize(DTOClass, key, fn) {
|
|
88
|
+
const existing = this.get(DTOClass, key);
|
|
89
|
+
if (existing) {
|
|
90
|
+
return existing;
|
|
91
|
+
}
|
|
92
|
+
const result = fn();
|
|
93
|
+
this.set(DTOClass, key, result);
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.MapReflector = MapReflector;
|
|
98
|
+
//# sourceMappingURL=reflect.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflect.utils.js","sourceRoot":"","sources":["../../../../../packages/core/src/common/reflect.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Assembler } from '../assemblers';
|
|
2
|
+
import { Class } from '../common';
|
|
3
|
+
export declare function getQueryServiceToken(DTOClass: {
|
|
4
|
+
name: string;
|
|
5
|
+
}): string;
|
|
6
|
+
export declare function getAssemblerQueryServiceToken<DTO, Entity = unknown>(AssemblerClass: Class<Assembler<DTO, Entity, unknown, unknown, unknown, unknown>>): string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAssemblerQueryServiceToken = exports.getQueryServiceToken = void 0;
|
|
4
|
+
function getQueryServiceToken(DTOClass) {
|
|
5
|
+
return `${DTOClass.name}QueryService`;
|
|
6
|
+
}
|
|
7
|
+
exports.getQueryServiceToken = getQueryServiceToken;
|
|
8
|
+
function getAssemblerQueryServiceToken(AssemblerClass) {
|
|
9
|
+
return `${AssemblerClass.name}QueryService`;
|
|
10
|
+
}
|
|
11
|
+
exports.getAssemblerQueryServiceToken = getAssemblerQueryServiceToken;
|
|
12
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../packages/core/src/decorators/helpers.ts"],"names":[],"mappings":";;;AAGA,SAAgB,oBAAoB,CAAC,QAA0B;IAC7D,OAAO,GAAG,QAAQ,CAAC,IAAI,cAAc,CAAC;AACxC,CAAC;AAFD,oDAEC;AAED,SAAgB,6BAA6B,CAC3C,cAAiF;IAEjF,OAAO,GAAG,cAAc,CAAC,IAAI,cAAc,CAAC;AAC9C,CAAC;AAJD,sEAIC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectAssemblerQueryService = exports.InjectQueryService = exports.getQueryServiceToken = void 0;
|
|
4
|
+
var helpers_1 = require("./helpers");
|
|
5
|
+
Object.defineProperty(exports, "getQueryServiceToken", { enumerable: true, get: function () { return helpers_1.getQueryServiceToken; } });
|
|
6
|
+
var inject_query_service_decorator_1 = require("./inject-query-service.decorator");
|
|
7
|
+
Object.defineProperty(exports, "InjectQueryService", { enumerable: true, get: function () { return inject_query_service_decorator_1.InjectQueryService; } });
|
|
8
|
+
var inject_assembler_query_service_decorator_1 = require("./inject-assembler-query-service.decorator");
|
|
9
|
+
Object.defineProperty(exports, "InjectAssemblerQueryService", { enumerable: true, get: function () { return inject_assembler_query_service_decorator_1.InjectAssemblerQueryService; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/core/src/decorators/index.ts"],"names":[],"mappings":";;;AAAA,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA;AAC7B,mFAAsE;AAA7D,oIAAA,kBAAkB,OAAA;AAC3B,uGAAyF;AAAhF,uJAAA,2BAA2B,OAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Inject } from '@nestjs/common';
|
|
2
|
+
import { Assembler } from '../assemblers';
|
|
3
|
+
import { Class, DeepPartial } from '../common';
|
|
4
|
+
export declare const InjectAssemblerQueryService: <DTO, Entity, C = DeepPartial<DTO>, CE = DeepPartial<Entity>, U = C, UE = CE>(AssemblerClass: Class<Assembler<DTO, Entity, C, CE, U, UE>>) => ReturnType<typeof Inject>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectAssemblerQueryService = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
|
+
const InjectAssemblerQueryService = (AssemblerClass) => (0, common_1.Inject)((0, helpers_1.getAssemblerQueryServiceToken)(AssemblerClass));
|
|
7
|
+
exports.InjectAssemblerQueryService = InjectAssemblerQueryService;
|
|
8
|
+
//# sourceMappingURL=inject-assembler-query-service.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-assembler-query-service.decorator.js","sourceRoot":"","sources":["../../../../../packages/core/src/decorators/inject-assembler-query-service.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAGxC,uCAA0D;AAEnD,MAAM,2BAA2B,GAAG,CAQzC,cAA2D,EAChC,EAAE,CAAC,IAAA,eAAM,EAAC,IAAA,uCAA6B,EAAC,cAAc,CAAC,CAAC,CAAC;AATzE,QAAA,2BAA2B,+BAS8C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectQueryService = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
|
+
const InjectQueryService = (DTOClass) => (0, common_1.Inject)((0, helpers_1.getQueryServiceToken)(DTOClass));
|
|
7
|
+
exports.InjectQueryService = InjectQueryService;
|
|
8
|
+
//# sourceMappingURL=inject-query-service.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-query-service.decorator.js","sourceRoot":"","sources":["../../../../../packages/core/src/decorators/inject-query-service.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,uCAAiD;AAE1C,MAAM,kBAAkB,GAAG,CAAM,QAAoB,EAA6B,EAAE,CACzF,IAAA,eAAM,EAAC,IAAA,8BAAoB,EAAC,QAAQ,CAAC,CAAC,CAAC;AAD5B,QAAA,kBAAkB,sBACU"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AggregateQuery, AggregateResponse } from '../interfaces';
|
|
2
|
+
import { QueryFieldMap } from './query.helpers';
|
|
3
|
+
export declare const transformAggregateQuery: <From, To>(query: AggregateQuery<From>, fieldMap: QueryFieldMap<From, To, keyof To>) => AggregateQuery<To>;
|
|
4
|
+
export declare const transformAggregateResponse: <From, To>(response: AggregateResponse<From>, fieldMap: QueryFieldMap<From, To, keyof To>) => AggregateResponse<To>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transformAggregateResponse = exports.transformAggregateQuery = void 0;
|
|
4
|
+
const convertAggregateQueryFields = (fieldMap, fields) => {
|
|
5
|
+
if (!fields) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
return fields.map((fromField) => {
|
|
9
|
+
const otherKey = fieldMap[fromField];
|
|
10
|
+
if (!otherKey) {
|
|
11
|
+
throw new Error(`No corresponding field found for '${fromField}' when transforming aggregateQuery`);
|
|
12
|
+
}
|
|
13
|
+
return otherKey;
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
const convertAggregateNumberFields = (fieldMap, response) => {
|
|
17
|
+
if (!response) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return Object.keys(response).reduce((toResponse, fromField) => {
|
|
21
|
+
const otherKey = fieldMap[fromField];
|
|
22
|
+
if (!otherKey) {
|
|
23
|
+
throw new Error(`No corresponding field found for '${fromField}' when transforming aggregateQuery`);
|
|
24
|
+
}
|
|
25
|
+
return { ...toResponse, [otherKey]: response[fromField] };
|
|
26
|
+
}, {});
|
|
27
|
+
};
|
|
28
|
+
const convertAggregateFields = (fieldMap, response) => {
|
|
29
|
+
if (!response) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return Object.keys(response).reduce((toResponse, fromField) => {
|
|
33
|
+
const otherKey = fieldMap[fromField];
|
|
34
|
+
if (!otherKey) {
|
|
35
|
+
throw new Error(`No corresponding field found for '${fromField}' when transforming aggregateQuery`);
|
|
36
|
+
}
|
|
37
|
+
return { ...toResponse, [otherKey]: response[fromField] };
|
|
38
|
+
}, {});
|
|
39
|
+
};
|
|
40
|
+
const transformAggregateQuery = (query, fieldMap) => ({
|
|
41
|
+
count: convertAggregateQueryFields(fieldMap, query.count),
|
|
42
|
+
sum: convertAggregateQueryFields(fieldMap, query.sum),
|
|
43
|
+
avg: convertAggregateQueryFields(fieldMap, query.avg),
|
|
44
|
+
max: convertAggregateQueryFields(fieldMap, query.max),
|
|
45
|
+
min: convertAggregateQueryFields(fieldMap, query.min)
|
|
46
|
+
});
|
|
47
|
+
exports.transformAggregateQuery = transformAggregateQuery;
|
|
48
|
+
const transformAggregateResponse = (response, fieldMap) => ({
|
|
49
|
+
count: convertAggregateNumberFields(fieldMap, response.count),
|
|
50
|
+
sum: convertAggregateNumberFields(fieldMap, response.sum),
|
|
51
|
+
avg: convertAggregateNumberFields(fieldMap, response.avg),
|
|
52
|
+
max: convertAggregateFields(fieldMap, response.max),
|
|
53
|
+
min: convertAggregateFields(fieldMap, response.min)
|
|
54
|
+
});
|
|
55
|
+
exports.transformAggregateResponse = transformAggregateResponse;
|
|
56
|
+
//# sourceMappingURL=aggregate.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.helpers.js","sourceRoot":"","sources":["../../../../../packages/core/src/helpers/aggregate.helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FilterComparisonOperators } from '../interfaces';
|
|
2
|
+
import { ComparisonField, FilterFn } from './types';
|
|
3
|
+
export declare class ComparisonBuilder {
|
|
4
|
+
static build<DTO, F extends keyof DTO>(field: F, cmp: FilterComparisonOperators<DTO[F]>, val: ComparisonField<DTO, F>): FilterFn<DTO>;
|
|
5
|
+
private static booleanComparison;
|
|
6
|
+
private static rangeComparison;
|
|
7
|
+
private static likeComparison;
|
|
8
|
+
private static inComparison;
|
|
9
|
+
private static betweenComparison;
|
|
10
|
+
private static likeSearchToRegexp;
|
|
11
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ComparisonBuilder = void 0;
|
|
4
|
+
const filter_helpers_1 = require("./filter.helpers");
|
|
5
|
+
const compare = (filter, fallback) => (dto) => dto ? filter(dto) : fallback;
|
|
6
|
+
class ComparisonBuilder {
|
|
7
|
+
static build(field, cmp, val) {
|
|
8
|
+
if ((0, filter_helpers_1.isBooleanComparisonOperators)(cmp)) {
|
|
9
|
+
return this.booleanComparison(cmp, field, val);
|
|
10
|
+
}
|
|
11
|
+
if ((0, filter_helpers_1.isRangeComparisonOperators)(cmp)) {
|
|
12
|
+
return this.rangeComparison(cmp, field, val);
|
|
13
|
+
}
|
|
14
|
+
if ((0, filter_helpers_1.isInComparisonOperators)(cmp)) {
|
|
15
|
+
return this.inComparison(cmp, field, val);
|
|
16
|
+
}
|
|
17
|
+
if ((0, filter_helpers_1.isLikeComparisonOperator)(cmp)) {
|
|
18
|
+
return this.likeComparison(cmp, field, val);
|
|
19
|
+
}
|
|
20
|
+
if ((0, filter_helpers_1.isBetweenComparisonOperators)(cmp)) {
|
|
21
|
+
return this.betweenComparison(cmp, field, val);
|
|
22
|
+
}
|
|
23
|
+
throw new Error(`unknown operator ${JSON.stringify(cmp)}`);
|
|
24
|
+
}
|
|
25
|
+
static booleanComparison(cmp, field, val) {
|
|
26
|
+
if (cmp === 'neq') {
|
|
27
|
+
return (dto) => (dto ? dto[field] : null) !== val;
|
|
28
|
+
}
|
|
29
|
+
if (cmp === 'isNot') {
|
|
30
|
+
// eslint-disable-next-line eqeqeq
|
|
31
|
+
return (dto) => (dto ? dto[field] : null) != val;
|
|
32
|
+
}
|
|
33
|
+
if (cmp === 'eq') {
|
|
34
|
+
return (dto) => (dto ? dto[field] : null) === val;
|
|
35
|
+
}
|
|
36
|
+
// eslint-disable-next-line eqeqeq
|
|
37
|
+
return (dto) => (dto ? dto[field] : null) == val;
|
|
38
|
+
}
|
|
39
|
+
static rangeComparison(cmp, field, val) {
|
|
40
|
+
if (cmp === 'gt') {
|
|
41
|
+
return compare((dto) => dto[field] > val, false);
|
|
42
|
+
}
|
|
43
|
+
if (cmp === 'gte') {
|
|
44
|
+
return compare((dto) => dto[field] >= val, false);
|
|
45
|
+
}
|
|
46
|
+
if (cmp === 'lt') {
|
|
47
|
+
return compare((dto) => dto[field] < val, false);
|
|
48
|
+
}
|
|
49
|
+
return compare((dto) => dto[field] <= val, false);
|
|
50
|
+
}
|
|
51
|
+
static likeComparison(cmp, field, val) {
|
|
52
|
+
if (cmp === 'like') {
|
|
53
|
+
const likeRegexp = this.likeSearchToRegexp(val);
|
|
54
|
+
return compare((dto) => likeRegexp.test(dto[field]), false);
|
|
55
|
+
}
|
|
56
|
+
if (cmp === 'notLike') {
|
|
57
|
+
const likeRegexp = this.likeSearchToRegexp(val);
|
|
58
|
+
return compare((dto) => !likeRegexp.test(dto[field]), true);
|
|
59
|
+
}
|
|
60
|
+
if (cmp === 'iLike') {
|
|
61
|
+
const likeRegexp = this.likeSearchToRegexp(val, true);
|
|
62
|
+
return compare((dto) => likeRegexp.test(dto[field]), false);
|
|
63
|
+
}
|
|
64
|
+
const likeRegexp = this.likeSearchToRegexp(val, true);
|
|
65
|
+
return compare((dto) => !likeRegexp.test(dto[field]), true);
|
|
66
|
+
}
|
|
67
|
+
static inComparison(cmp, field, val) {
|
|
68
|
+
if (cmp === 'notIn') {
|
|
69
|
+
return compare((dto) => !val.includes(dto[field]), true);
|
|
70
|
+
}
|
|
71
|
+
return compare((dto) => val.includes(dto[field]), false);
|
|
72
|
+
}
|
|
73
|
+
static betweenComparison(cmp, field, val) {
|
|
74
|
+
const { lower, upper } = val;
|
|
75
|
+
if (cmp === 'notBetween') {
|
|
76
|
+
return compare((dto) => {
|
|
77
|
+
const dtoVal = dto[field];
|
|
78
|
+
return dtoVal < lower || dtoVal > upper;
|
|
79
|
+
}, true);
|
|
80
|
+
}
|
|
81
|
+
return compare((dto) => {
|
|
82
|
+
const dtoVal = dto[field];
|
|
83
|
+
return dtoVal >= lower && dtoVal <= upper;
|
|
84
|
+
}, false);
|
|
85
|
+
}
|
|
86
|
+
static likeSearchToRegexp(likeStr, caseInsensitive = false) {
|
|
87
|
+
const replaced = likeStr.replace(/%/g, '.*');
|
|
88
|
+
return new RegExp(`^${replaced}$`, caseInsensitive ? 'ig' : 'g');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.ComparisonBuilder = ComparisonBuilder;
|
|
92
|
+
//# sourceMappingURL=comparison.builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison.builder.js","sourceRoot":"","sources":["../../../../../packages/core/src/helpers/comparison.builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Filter } from '../interfaces';
|
|
2
|
+
import { FilterFn } from './types';
|
|
3
|
+
export declare class FilterBuilder {
|
|
4
|
+
static build<DTO>(filter: Filter<DTO>): FilterFn<DTO>;
|
|
5
|
+
private static andFilterFn;
|
|
6
|
+
private static orFilterFn;
|
|
7
|
+
private static filterFieldsOrNested;
|
|
8
|
+
private static withFilterComparison;
|
|
9
|
+
private static withComparison;
|
|
10
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilterBuilder = void 0;
|
|
4
|
+
const comparison_builder_1 = require("./comparison.builder");
|
|
5
|
+
const filter_helpers_1 = require("./filter.helpers");
|
|
6
|
+
class FilterBuilder {
|
|
7
|
+
static build(filter) {
|
|
8
|
+
const { and, or } = filter;
|
|
9
|
+
const filters = [];
|
|
10
|
+
if (and && and.length) {
|
|
11
|
+
filters.push(this.andFilterFn(...and.map((f) => this.build(f))));
|
|
12
|
+
}
|
|
13
|
+
if (or && or.length) {
|
|
14
|
+
filters.push(this.orFilterFn(...or.map((f) => this.build(f))));
|
|
15
|
+
}
|
|
16
|
+
if (Object.keys(filter).length) {
|
|
17
|
+
filters.push(this.filterFieldsOrNested(filter));
|
|
18
|
+
}
|
|
19
|
+
return this.andFilterFn(...filters);
|
|
20
|
+
}
|
|
21
|
+
static andFilterFn(...filterFns) {
|
|
22
|
+
return (dto) => filterFns.every((filter) => filter(dto));
|
|
23
|
+
}
|
|
24
|
+
static orFilterFn(...filterFns) {
|
|
25
|
+
return (dto) => filterFns.some((filter) => filter(dto));
|
|
26
|
+
}
|
|
27
|
+
static filterFieldsOrNested(filter) {
|
|
28
|
+
return this.andFilterFn(...Object.keys(filter)
|
|
29
|
+
.filter((k) => k !== 'and' && k !== 'or')
|
|
30
|
+
.map((fieldOrNested) => this.withComparison(filter, fieldOrNested)));
|
|
31
|
+
}
|
|
32
|
+
static withFilterComparison(field, cmp) {
|
|
33
|
+
const operators = Object.keys(cmp);
|
|
34
|
+
return this.orFilterFn(...operators.map((operator) => comparison_builder_1.ComparisonBuilder.build(field, operator, cmp[operator])));
|
|
35
|
+
}
|
|
36
|
+
static withComparison(filter, fieldOrNested) {
|
|
37
|
+
const value = (0, filter_helpers_1.getFilterFieldComparison)(filter, fieldOrNested);
|
|
38
|
+
if ((0, filter_helpers_1.isComparison)(value)) {
|
|
39
|
+
return this.withFilterComparison(fieldOrNested, value);
|
|
40
|
+
}
|
|
41
|
+
if (typeof value !== 'object') {
|
|
42
|
+
throw new Error(`unknown comparison ${JSON.stringify(fieldOrNested)}`);
|
|
43
|
+
}
|
|
44
|
+
const nestedFilterFn = this.build(value);
|
|
45
|
+
return (dto) => nestedFilterFn(dto ? dto[fieldOrNested] : null);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.FilterBuilder = FilterBuilder;
|
|
49
|
+
//# sourceMappingURL=filter.builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.builder.js","sourceRoot":"","sources":["../../../../../packages/core/src/helpers/filter.builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Filter, FilterFieldComparison, FilterComparisons } from '../interfaces';
|
|
2
|
+
import { QueryFieldMap } from './query.helpers';
|
|
3
|
+
export declare type LikeComparisonOperators = 'like' | 'notLike' | 'iLike' | 'notILike';
|
|
4
|
+
export declare type InComparisonOperators = 'in' | 'notIn';
|
|
5
|
+
export declare type BetweenComparisonOperators = 'between' | 'notBetween';
|
|
6
|
+
export declare type RangeComparisonOperators = 'gt' | 'gte' | 'lt' | 'lte';
|
|
7
|
+
export declare type BooleanComparisonOperators = 'eq' | 'neq' | 'is' | 'isNot';
|
|
8
|
+
export declare const isLikeComparisonOperator: (op: unknown) => op is LikeComparisonOperators;
|
|
9
|
+
export declare const isInComparisonOperators: (op: unknown) => op is InComparisonOperators;
|
|
10
|
+
export declare const isBetweenComparisonOperators: (op: unknown) => op is BetweenComparisonOperators;
|
|
11
|
+
export declare const isRangeComparisonOperators: (op: unknown) => op is RangeComparisonOperators;
|
|
12
|
+
export declare const isBooleanComparisonOperators: (op: unknown) => op is BooleanComparisonOperators;
|
|
13
|
+
export declare const isComparison: <DTO, K extends keyof DTO>(maybeComparison?: (DTO[K] extends string | String ? import("../interfaces").StringFieldComparisons : DTO[K] extends boolean | Boolean ? import("../interfaces").BooleanFieldComparisons : DTO[K] extends number | bigint | symbol | RegExp | Date | (string | number | bigint | boolean | symbol | RegExp | Date)[] ? import("../interfaces").CommonFieldComparisonType<DTO[K]> : DTO[K] extends (infer U)[] ? import("../interfaces").CommonFieldComparisonType<U> | Filter<U> : Filter<DTO[K]> | import("../interfaces").CommonFieldComparisonType<DTO[K]>) | Filter<DTO[K]>) => maybeComparison is DTO[K] extends string | String ? import("../interfaces").StringFieldComparisons : DTO[K] extends boolean | Boolean ? import("../interfaces").BooleanFieldComparisons : DTO[K] extends number | bigint | symbol | RegExp | Date | (string | number | bigint | boolean | symbol | RegExp | Date)[] ? import("../interfaces").CommonFieldComparisonType<DTO[K]> : DTO[K] extends (infer U)[] ? import("../interfaces").CommonFieldComparisonType<U> | Filter<U> : Filter<DTO[K]> | import("../interfaces").CommonFieldComparisonType<DTO[K]>;
|
|
14
|
+
export declare const getFilterFieldComparison: <DTO, K extends keyof DTO>(obj: FilterComparisons<DTO>, field: K) => (DTO[K] extends string | String ? import("../interfaces").StringFieldComparisons : DTO[K] extends boolean | Boolean ? import("../interfaces").BooleanFieldComparisons : DTO[K] extends number | bigint | symbol | RegExp | Date | (string | number | bigint | boolean | symbol | RegExp | Date)[] ? import("../interfaces").CommonFieldComparisonType<DTO[K]> : DTO[K] extends (infer U)[] ? import("../interfaces").CommonFieldComparisonType<U> | Filter<U> : Filter<DTO[K]> | import("../interfaces").CommonFieldComparisonType<DTO[K]>) & {
|
|
15
|
+
and?: Filter<DTO[K]>[];
|
|
16
|
+
or?: Filter<DTO[K]>[];
|
|
17
|
+
} & FilterComparisons<DTO[K]>;
|
|
18
|
+
export declare const transformFilter: <From, To>(filter: Filter<From>, fieldMap: QueryFieldMap<From, To, keyof To>) => Filter<To>;
|
|
19
|
+
export declare const mergeFilter: <T>(base: Filter<T>, source: Filter<T>) => Filter<T>;
|
|
20
|
+
export declare const getFilterFields: <DTO>(filter: Filter<DTO>) => string[];
|
|
21
|
+
export declare const getFilterComparisons: <DTO, K extends keyof DTO>(filter: Filter<DTO>, key: K) => (DTO[K] extends string | String ? import("../interfaces").StringFieldComparisons : DTO[K] extends boolean | Boolean ? import("../interfaces").BooleanFieldComparisons : DTO[K] extends number | bigint | symbol | RegExp | Date | (string | number | bigint | boolean | symbol | RegExp | Date)[] ? import("../interfaces").CommonFieldComparisonType<DTO[K]> : DTO[K] extends (infer U)[] ? import("../interfaces").CommonFieldComparisonType<U> | Filter<U> : Filter<DTO[K]> | import("../interfaces").CommonFieldComparisonType<DTO[K]>)[];
|
|
22
|
+
export declare const getFilterOmitting: <DTO>(filter: Filter<DTO>, key: keyof DTO) => Filter<DTO>;
|
|
23
|
+
export declare function applyFilter<DTO>(dto: DTO[], filter: Filter<DTO>): DTO[];
|
|
24
|
+
export declare function applyFilter<DTO>(dto: DTO, filter: Filter<DTO>): boolean;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyFilter = exports.getFilterOmitting = exports.getFilterComparisons = exports.getFilterFields = exports.mergeFilter = exports.transformFilter = exports.getFilterFieldComparison = exports.isComparison = exports.isBooleanComparisonOperators = exports.isRangeComparisonOperators = exports.isBetweenComparisonOperators = exports.isInComparisonOperators = exports.isLikeComparisonOperator = void 0;
|
|
4
|
+
const filter_builder_1 = require("./filter.builder");
|
|
5
|
+
const isLikeComparisonOperator = (op) => op === 'like' || op === 'notLike' || op === 'iLike' || op === 'notILike';
|
|
6
|
+
exports.isLikeComparisonOperator = isLikeComparisonOperator;
|
|
7
|
+
const isInComparisonOperators = (op) => op === 'in' || op === 'notIn';
|
|
8
|
+
exports.isInComparisonOperators = isInComparisonOperators;
|
|
9
|
+
const isBetweenComparisonOperators = (op) => op === 'between' || op === 'notBetween';
|
|
10
|
+
exports.isBetweenComparisonOperators = isBetweenComparisonOperators;
|
|
11
|
+
const isRangeComparisonOperators = (op) => op === 'gt' || op === 'gte' || op === 'lt' || op === 'lte';
|
|
12
|
+
exports.isRangeComparisonOperators = isRangeComparisonOperators;
|
|
13
|
+
const isBooleanComparisonOperators = (op) => op === 'eq' || op === 'neq' || op === 'is' || op === 'isNot';
|
|
14
|
+
exports.isBooleanComparisonOperators = isBooleanComparisonOperators;
|
|
15
|
+
const isComparison = (maybeComparison) => {
|
|
16
|
+
if (!maybeComparison) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
+
return Object.keys(maybeComparison).every((op) => (0, exports.isLikeComparisonOperator)(op) ||
|
|
21
|
+
(0, exports.isInComparisonOperators)(op) ||
|
|
22
|
+
(0, exports.isBetweenComparisonOperators)(op) ||
|
|
23
|
+
(0, exports.isRangeComparisonOperators)(op) ||
|
|
24
|
+
(0, exports.isBooleanComparisonOperators)(op));
|
|
25
|
+
};
|
|
26
|
+
exports.isComparison = isComparison;
|
|
27
|
+
// TODO: test
|
|
28
|
+
const getFilterFieldComparison = (obj, field) => obj[field];
|
|
29
|
+
exports.getFilterFieldComparison = getFilterFieldComparison;
|
|
30
|
+
const transformFilter = (filter, fieldMap) => {
|
|
31
|
+
if (!filter) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return Object.keys(filter).reduce((newFilter, filterField) => {
|
|
35
|
+
if (filterField === 'and' || filterField === 'or') {
|
|
36
|
+
return { ...newFilter, [filterField]: filter[filterField]?.map((f) => (0, exports.transformFilter)(f, fieldMap)) };
|
|
37
|
+
}
|
|
38
|
+
const fromField = filterField;
|
|
39
|
+
const otherKey = fieldMap[fromField];
|
|
40
|
+
if (!otherKey) {
|
|
41
|
+
throw new Error(`No corresponding field found for '${filterField}' when transforming Filter`);
|
|
42
|
+
}
|
|
43
|
+
return { ...newFilter, [otherKey]: filter[fromField] };
|
|
44
|
+
}, {});
|
|
45
|
+
};
|
|
46
|
+
exports.transformFilter = transformFilter;
|
|
47
|
+
const mergeFilter = (base, source) => {
|
|
48
|
+
if (!Object.keys(base).length) {
|
|
49
|
+
return source;
|
|
50
|
+
}
|
|
51
|
+
if (!Object.keys(source).length) {
|
|
52
|
+
return base;
|
|
53
|
+
}
|
|
54
|
+
return { and: [source, base] };
|
|
55
|
+
};
|
|
56
|
+
exports.mergeFilter = mergeFilter;
|
|
57
|
+
const getFilterFields = (filter) => {
|
|
58
|
+
const fieldSet = Object.keys(filter).reduce((fields, filterField) => {
|
|
59
|
+
if (filterField === 'and' || filterField === 'or') {
|
|
60
|
+
const andOrFilters = filter[filterField];
|
|
61
|
+
if (andOrFilters !== undefined) {
|
|
62
|
+
return andOrFilters.reduce((andOrFields, andOrFilter) => new Set([...andOrFields, ...(0, exports.getFilterFields)(andOrFilter)]), fields);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
fields.add(filterField);
|
|
67
|
+
}
|
|
68
|
+
return fields;
|
|
69
|
+
}, new Set());
|
|
70
|
+
return [...fieldSet];
|
|
71
|
+
};
|
|
72
|
+
exports.getFilterFields = getFilterFields;
|
|
73
|
+
const getFilterComparisons = (filter, key) => {
|
|
74
|
+
const results = [];
|
|
75
|
+
if (filter.and || filter.or) {
|
|
76
|
+
const filters = [...(filter.and ?? []), ...(filter.or ?? [])];
|
|
77
|
+
filters.forEach((f) => (0, exports.getFilterComparisons)(f, key).forEach((comparison) => results.push(comparison)));
|
|
78
|
+
}
|
|
79
|
+
const comparison = (0, exports.getFilterFieldComparison)(filter, key);
|
|
80
|
+
if ((0, exports.isComparison)(comparison)) {
|
|
81
|
+
results.push(comparison);
|
|
82
|
+
}
|
|
83
|
+
return [...results];
|
|
84
|
+
};
|
|
85
|
+
exports.getFilterComparisons = getFilterComparisons;
|
|
86
|
+
const getFilterOmitting = (filter, key) => Object.keys(filter).reduce((f, next) => {
|
|
87
|
+
const omitted = { ...f };
|
|
88
|
+
const k = next;
|
|
89
|
+
if (k === 'and' && filter.and) {
|
|
90
|
+
omitted.and = filter.and.map((part) => (0, exports.getFilterOmitting)(part, key));
|
|
91
|
+
if (omitted.and.every((part) => Object.keys(part).length === 0)) {
|
|
92
|
+
delete omitted.and;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else if (k === 'or' && filter.or) {
|
|
96
|
+
omitted.or = filter.or.map((part) => (0, exports.getFilterOmitting)(part, key));
|
|
97
|
+
if (omitted.or.every((part) => Object.keys(part).length === 0)) {
|
|
98
|
+
delete omitted.or;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if (k !== key) {
|
|
102
|
+
omitted[k] = filter[k];
|
|
103
|
+
}
|
|
104
|
+
return omitted;
|
|
105
|
+
}, {});
|
|
106
|
+
exports.getFilterOmitting = getFilterOmitting;
|
|
107
|
+
function applyFilter(dtoOrArray, filter) {
|
|
108
|
+
const filterFunc = filter_builder_1.FilterBuilder.build(filter);
|
|
109
|
+
if (Array.isArray(dtoOrArray)) {
|
|
110
|
+
return dtoOrArray.filter((dto) => filterFunc(dto));
|
|
111
|
+
}
|
|
112
|
+
return filterFunc(dtoOrArray);
|
|
113
|
+
}
|
|
114
|
+
exports.applyFilter = applyFilter;
|
|
115
|
+
//# sourceMappingURL=filter.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.helpers.js","sourceRoot":"","sources":["../../../../../packages/core/src/helpers/filter.helpers.ts"],"names":[],"mappings":"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"}
|