@steroidsjs/nest 1.3.4 → 1.3.7
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 +1 -1
- package/src/infrastructure/decorators/fields/DateTimeField.js +0 -5
- package/src/infrastructure/decorators/fields/DateTimeField.js.map +1 -1
- package/src/infrastructure/decorators/fields/DecimalField.d.ts +1 -0
- package/src/infrastructure/decorators/fields/DecimalField.js +1 -1
- package/src/infrastructure/decorators/fields/DecimalField.js.map +1 -1
- package/src/infrastructure/decorators/fields/EnumField.d.ts +1 -0
- package/src/infrastructure/decorators/fields/EnumField.js +3 -1
- package/src/infrastructure/decorators/fields/EnumField.js.map +1 -1
- package/src/infrastructure/decorators/fields/FileField.d.ts +2 -0
- package/src/infrastructure/decorators/fields/FileField.js +15 -5
- package/src/infrastructure/decorators/fields/FileField.js.map +1 -1
- package/src/infrastructure/decorators/fields/ImageField.d.ts +6 -0
- package/src/infrastructure/decorators/fields/ImageField.js +10 -0
- package/src/infrastructure/decorators/fields/ImageField.js.map +1 -0
- package/src/infrastructure/decorators/fields/IntegerField.d.ts +1 -0
- package/src/infrastructure/decorators/fields/IntegerField.js +2 -2
- package/src/infrastructure/decorators/fields/IntegerField.js.map +1 -1
- package/src/infrastructure/decorators/fields/UpdateTimeField.js +3 -2
- package/src/infrastructure/decorators/fields/UpdateTimeField.js.map +1 -1
- package/src/infrastructure/decorators/fields/index.d.ts +1 -0
- package/src/infrastructure/decorators/fields/index.js +3 -1
- package/src/infrastructure/decorators/fields/index.js.map +1 -1
- package/src/usecases/helpers/ConditionHelper.d.ts +2 -2
- package/src/usecases/helpers/ConditionHelper.js +48 -25
- package/src/usecases/helpers/ConditionHelper.js.map +1 -1
- package/tsconfig.tsbuildinfo +1 -1
package/package.json
CHANGED
|
@@ -4,7 +4,6 @@ exports.DateTimeField = exports.normalizeDateTime = void 0;
|
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const lodash_1 = require("lodash");
|
|
6
6
|
const typeorm_1 = require("typeorm");
|
|
7
|
-
const class_validator_1 = require("class-validator");
|
|
8
7
|
const class_transformer_1 = require("class-transformer");
|
|
9
8
|
const BaseField_1 = require("./BaseField");
|
|
10
9
|
const date_fns_1 = require("date-fns");
|
|
@@ -30,10 +29,6 @@ function DateTimeField(options = {}) {
|
|
|
30
29
|
default: options.defaultValue,
|
|
31
30
|
nullable: options.nullable,
|
|
32
31
|
}),
|
|
33
|
-
options.nullable && (0, class_validator_1.ValidateIf)((object, value) => value !== null && typeof value !== 'undefined'),
|
|
34
|
-
(0, class_validator_1.IsDateString)({
|
|
35
|
-
message: 'Некорректный формат даты',
|
|
36
|
-
}),
|
|
37
32
|
(0, class_transformer_1.Type)(() => Date),
|
|
38
33
|
(0, Transform_1.Transform)(({ value }) => (0, exports.normalizeDateTime)(value, options.skipSeconds), Transform_1.TRANSFORM_TYPE_FROM_DB),
|
|
39
34
|
(0, Transform_1.Transform)(({ value }) => (0, exports.normalizeDateTime)(value, options.skipSeconds), Transform_1.TRANSFORM_TYPE_TO_DB),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/DateTimeField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,mCAAmC;AACnC,qCAA+B;
|
|
1
|
+
{"version":3,"file":"DateTimeField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/DateTimeField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,mCAAmC;AACnC,qCAA+B;AAE/B,yDAAuC;AACvC,2CAAyD;AACzD,uCAA0C;AAC1C,4CAAqF;AAE9E,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,EAAE;IAC3D,OAAO,KAAK;QACR,CAAC,CAAC,IAAA,iBAAM,EACJ,OAAO,KAAK,KAAK,QAAQ;YACrB,CAAC,CAAC,IAAA,mBAAQ,EAAC,KAAK,CAAC;YACjB,CAAC,CAAC,KAAK,EACX,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CACnD;QACD,CAAC,CAAC,KAAK,CAAC;AAChB,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B;AAQF,SAAgB,aAAa,CAAC,UAAuC,EAAE;IACnE,OAAO,IAAA,wBAAe,EAClB,GAAG;QACC,IAAA,qBAAS,EAAC,OAAO,EAAE;YACf,aAAa,EAAE,eAAe;YAC9B,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,QAAQ;SACnB,CAAC;QACF,IAAA,gBAAM,EAAC;YACH,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAA,YAAI,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,CAAC,YAAY;YAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC7B,CAAC;QAKF,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QAChB,IAAA,qBAAS,EACL,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAAC,IAAA,yBAAiB,EAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,EAC1D,kCAAsB,CACzB;QACD,IAAA,qBAAS,EACL,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAAC,IAAA,yBAAiB,EAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,EAC1D,gCAAoB,CACvB;KACJ,CAAC,MAAM,CAAC,OAAO,CAAC,CACpB,CAAC;AACN,CAAC;AA7BD,sCA6BC"}
|
|
@@ -2,5 +2,6 @@ import { IBaseFieldOptions } from './BaseField';
|
|
|
2
2
|
export interface IDecimalFieldOptions extends IBaseFieldOptions {
|
|
3
3
|
precision?: number;
|
|
4
4
|
scale?: number;
|
|
5
|
+
isDecimalConstraintMessage?: string;
|
|
5
6
|
}
|
|
6
7
|
export declare function DecimalField(options?: IDecimalFieldOptions): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
@@ -21,7 +21,7 @@ function DecimalField(options = {}) {
|
|
|
21
21
|
}),
|
|
22
22
|
options.nullable && (0, class_validator_1.ValidateIf)((object, value) => value !== null),
|
|
23
23
|
(0, class_validator_1.IsString)({
|
|
24
|
-
message: 'Должно быть строкой',
|
|
24
|
+
message: options.isDecimalConstraintMessage || 'Должно быть строкой',
|
|
25
25
|
}),
|
|
26
26
|
].filter(Boolean));
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DecimalField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/DecimalField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,qCAA+B;AAC/B,qDAAqD;AACrD,2CAAyD;
|
|
1
|
+
{"version":3,"file":"DecimalField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/DecimalField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,qCAA+B;AAC/B,qDAAqD;AACrD,2CAAyD;AAQzD,SAAgB,YAAY,CAAC,UAAgC,EAAE;IAC3D,OAAO,IAAA,wBAAe,EAAC,GAAG;QAClB,IAAA,qBAAS,EAAC,OAAO,EAAE;YACf,aAAa,EAAE,cAAc;YAC7B,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,QAAQ;SACnB,CAAC;QACF,IAAA,gBAAM,EAAC;YACH,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO,CAAC,YAAY;YAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;SAC5B,CAAC;QACF,OAAO,CAAC,QAAQ,IAAI,IAAA,4BAAU,EAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;QACjE,IAAA,0BAAQ,EAAC;YACL,OAAO,EAAE,OAAO,CAAC,0BAA0B,IAAI,qBAAqB;SACvE,CAAC;KACL,CAAC,MAAM,CAAC,OAAO,CAAC,CACpB,CAAC;AACN,CAAC;AApBD,oCAoBC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IBaseFieldOptions } from './BaseField';
|
|
2
2
|
export interface IEnumFieldOptions extends IBaseFieldOptions {
|
|
3
3
|
enum?: object | string[] | any;
|
|
4
|
+
isEnumConstraintMessage?: string;
|
|
4
5
|
}
|
|
5
6
|
export declare function EnumField(options?: IEnumFieldOptions): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
@@ -33,7 +33,9 @@ function EnumField(options = {}) {
|
|
|
33
33
|
nullable: options.nullable,
|
|
34
34
|
}),
|
|
35
35
|
options.nullable && (0, class_validator_1.ValidateIf)((object, value) => value !== null),
|
|
36
|
-
(0, class_validator_1.IsEnum)(options.enum
|
|
36
|
+
(0, class_validator_1.IsEnum)(options.enum, {
|
|
37
|
+
message: options.isEnumConstraintMessage || 'Выберите одно из значений'
|
|
38
|
+
}),
|
|
37
39
|
].filter(Boolean));
|
|
38
40
|
}
|
|
39
41
|
exports.EnumField = EnumField;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnumField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/EnumField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,qCAA+B;AAC/B,qDAAmD;AACnD,2CAAyD;AACzD,4DAAqD;
|
|
1
|
+
{"version":3,"file":"EnumField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/EnumField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,qCAA+B;AAC/B,qDAAmD;AACnD,2CAAyD;AACzD,4DAAqD;AAOrD,SAAgB,SAAS,CAAC,UAA6B,EAAE;IACrD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC7B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAC9C,IAAI,KAAK,CAAC,SAAS,YAAY,kBAAQ,EAAE;gBACrC,GAAG,mCACI,GAAG,GACH,KAAK,CAAC,MAAM,EAAE,CACpB,CAAC;aACL;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAClC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;aACtB;YACD,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EAAE,CAAC,CAAC;KACV;SAAM,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,YAAY,kBAAQ,EAAE;QACzF,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KACxC;IAED,OAAO,IAAA,wBAAe,EAAC,GAAG;QAClB,IAAA,qBAAS,EAAC,OAAO,EAAC;YACd,aAAa,EAAE,WAAW;YAC1B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,QAAQ;SACnB,CAAC;QACF,IAAA,gBAAM,EAAC;YACH,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO,CAAC,YAAY;YAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC7B,CAAC;QACF,OAAO,CAAC,QAAQ,IAAI,IAAA,4BAAU,EAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;QACjE,IAAA,wBAAM,EAAC,OAAO,CAAC,IAAI,EAAE;YACjB,OAAO,EAAE,OAAO,CAAC,uBAAuB,IAAI,2BAA2B;SAC1E,CAAC;KACL,CAAC,MAAM,CAAC,OAAO,CAAC,CACpB,CAAC;AACN,CAAC;AAlCD,8BAkCC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { IBaseFieldOptions } from './BaseField';
|
|
2
2
|
export interface IFileField extends IBaseFieldOptions {
|
|
3
3
|
multiple?: boolean;
|
|
4
|
+
isImage?: boolean;
|
|
4
5
|
}
|
|
6
|
+
export declare function getFileFieldDecorators(options: IFileField): (<TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void)[];
|
|
5
7
|
export declare function FileField(options?: IFileField): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FileField = void 0;
|
|
3
|
+
exports.FileField = exports.getFileFieldDecorators = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const typeorm_1 = require("typeorm");
|
|
6
6
|
const class_validator_1 = require("class-validator");
|
|
7
7
|
const BaseField_1 = require("./BaseField");
|
|
8
|
-
function
|
|
9
|
-
return
|
|
8
|
+
function getFileFieldDecorators(options) {
|
|
9
|
+
return [
|
|
10
10
|
(0, BaseField_1.BaseField)(options, {
|
|
11
11
|
decoratorName: 'FileField',
|
|
12
12
|
appType: 'file',
|
|
@@ -18,8 +18,18 @@ function FileField(options = {}) {
|
|
|
18
18
|
nullable: options.nullable,
|
|
19
19
|
}),
|
|
20
20
|
options.nullable && (0, class_validator_1.ValidateIf)((object, value) => value),
|
|
21
|
-
options.multiple
|
|
22
|
-
|
|
21
|
+
options.multiple
|
|
22
|
+
? (0, class_validator_1.IsArray)({
|
|
23
|
+
message: options.isImage ? 'Необходимо загрузить изображения' : 'Необходимо загрузить файлы',
|
|
24
|
+
})
|
|
25
|
+
: (0, class_validator_1.IsInt)({
|
|
26
|
+
message: options.isImage ? 'Необходимо загрузить изображение' : 'Необходимо загрузить файл',
|
|
27
|
+
}),
|
|
28
|
+
].filter(Boolean);
|
|
29
|
+
}
|
|
30
|
+
exports.getFileFieldDecorators = getFileFieldDecorators;
|
|
31
|
+
function FileField(options = {}) {
|
|
32
|
+
return (0, common_1.applyDecorators)(...getFileFieldDecorators(options));
|
|
23
33
|
}
|
|
24
34
|
exports.FileField = FileField;
|
|
25
35
|
//# sourceMappingURL=FileField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/FileField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,qCAA+B;AAC/B,qDAA2D;AAC3D,2CAAyD;
|
|
1
|
+
{"version":3,"file":"FileField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/FileField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,qCAA+B;AAC/B,qDAA2D;AAC3D,2CAAyD;AAOzD,SAAgB,sBAAsB,CAAC,OAAmB;IACtD,OAAO;QACH,IAAA,qBAAS,EAAC,OAAO,EAAE;YACf,aAAa,EAAE,WAAW;YAC1B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,QAAQ;SACnB,CAAC;QACF,IAAA,gBAAM,EAAC;YACH,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;YACnD,OAAO,EAAE,OAAO,CAAC,YAAY;YAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC7B,CAAC;QACF,OAAO,CAAC,QAAQ,IAAI,IAAA,4BAAU,EAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;QACxD,OAAO,CAAC,QAAQ;YACZ,CAAC,CAAC,IAAA,yBAAO,EAAC;gBACN,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,4BAA4B;aAC/F,CAAC;YACF,CAAC,CAAC,IAAA,uBAAK,EAAC;gBACJ,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,2BAA2B;aAC9F,CAAC;KACT,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AArBD,wDAqBC;AAED,SAAgB,SAAS,CAAC,UAAsB,EAAE;IAC9C,OAAO,IAAA,wBAAe,EAClB,GAAG,sBAAsB,CAAC,OAAO,CAAC,CACrC,CAAC;AACN,CAAC;AAJD,8BAIC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IBaseFieldOptions } from './BaseField';
|
|
2
|
+
export interface IFileField extends IBaseFieldOptions {
|
|
3
|
+
multiple?: boolean;
|
|
4
|
+
isImage?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function ImageField(options?: IFileField): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ImageField = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const FileField_1 = require("./FileField");
|
|
6
|
+
function ImageField(options = {}) {
|
|
7
|
+
return (0, common_1.applyDecorators)(...(0, FileField_1.getFileFieldDecorators)(Object.assign(Object.assign({}, options), { isImage: true })));
|
|
8
|
+
}
|
|
9
|
+
exports.ImageField = ImageField;
|
|
10
|
+
//# sourceMappingURL=ImageField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/ImageField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAE/C,2CAAmD;AAOnD,SAAgB,UAAU,CAAC,UAAsB,EAAE;IAC/C,OAAO,IAAA,wBAAe,EAClB,GAAG,IAAA,kCAAsB,kCAAK,OAAO,KAAE,OAAO,EAAE,IAAI,IAAE,CACzD,CAAC;AACN,CAAC;AAJD,gCAIC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IBaseFieldOptions } from './BaseField';
|
|
2
2
|
export interface IIntegerFieldOptions extends IBaseFieldOptions {
|
|
3
3
|
unique?: boolean;
|
|
4
|
+
isIntConstraintMessage?: string;
|
|
4
5
|
}
|
|
5
6
|
export declare function IntegerField(options?: IIntegerFieldOptions): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
@@ -25,10 +25,10 @@ function IntegerField(options = {}) {
|
|
|
25
25
|
if (Array.isArray(value)) {
|
|
26
26
|
return value.map(valueItem => (0, lodash_1.toInteger)(valueItem));
|
|
27
27
|
}
|
|
28
|
-
return value === null
|
|
28
|
+
return value === null ? value : (0, lodash_1.toInteger)(value);
|
|
29
29
|
}),
|
|
30
30
|
(0, class_validator_1.IsInt)({
|
|
31
|
-
message: 'Должно быть числом',
|
|
31
|
+
message: options.isIntConstraintMessage || 'Должно быть числом',
|
|
32
32
|
each: options.isArray,
|
|
33
33
|
}),
|
|
34
34
|
typeof options.min === 'number' && (0, class_validator_1.Min)(options.min),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntegerField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/IntegerField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,mCAA+C;AAC/C,qCAA+B;AAC/B,qDAA4D;AAC5D,2CAAyD;AACzD,yDAA4C;
|
|
1
|
+
{"version":3,"file":"IntegerField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/IntegerField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,mCAA+C;AAC/C,qCAA+B;AAC/B,qDAA4D;AAC5D,2CAAyD;AACzD,yDAA4C;AAO5C,SAAgB,YAAY,CAAC,UAAgC,EAAE;IAC3D,OAAO,IAAA,wBAAe,EAAC,GAAG;QACtB,IAAA,qBAAS,EAAC,OAAO,EAAE;YACf,aAAa,EAAE,cAAc;YAC7B,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,QAAQ;SACnB,CAAC;QACF,IAAA,gBAAM,EAAC;YACH,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO,CAAC,YAAY;YAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC7B,CAAC;QACF,OAAO,CAAC,QAAQ,IAAI,IAAA,4BAAU,EAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,WAAW,CAAC;QACjG,IAAA,6BAAS,EAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;YAClB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACtB,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAA,kBAAU,EAAC,SAAS,CAAC,CAAC,CAAC;aACxD;YACD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,kBAAU,EAAC,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC;QACF,IAAA,uBAAK,EAAC;YACF,OAAO,EAAE,OAAO,CAAC,sBAAsB,IAAI,oBAAoB;YAC/D,IAAI,EAAE,OAAO,CAAC,OAAO;SACxB,CAAC;QACF,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAA,qBAAG,EAAC,OAAO,CAAC,GAAG,CAAC;QACnD,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAA,qBAAG,EAAC,OAAO,CAAC,GAAG,CAAC;KACtD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACvB,CAAC;AA3BD,oCA2BC"}
|
|
@@ -7,6 +7,7 @@ const typeorm_1 = require("typeorm");
|
|
|
7
7
|
const EventListenerTypes_1 = require("typeorm/metadata/types/EventListenerTypes");
|
|
8
8
|
const BaseField_1 = require("./BaseField");
|
|
9
9
|
const DateTimeField_1 = require("./DateTimeField");
|
|
10
|
+
const class_validator_1 = require("class-validator");
|
|
10
11
|
const UpdateTimeBehaviour = (object, propertyName) => {
|
|
11
12
|
const methodName = propertyName + '__updateTimeBehaviour';
|
|
12
13
|
if (!object[methodName]) {
|
|
@@ -37,9 +38,9 @@ function UpdateTimeField(options = {}) {
|
|
|
37
38
|
nullable: (0, lodash_1.has)(options, 'nullable') ? options.nullable : false,
|
|
38
39
|
transformer: {
|
|
39
40
|
from: DateTimeField_1.normalizeDateTime,
|
|
40
|
-
to: DateTimeField_1.normalizeDateTime,
|
|
41
|
+
to: () => (0, DateTimeField_1.normalizeDateTime)(new Date()),
|
|
41
42
|
},
|
|
42
|
-
}), UpdateTimeBehaviour);
|
|
43
|
+
}), UpdateTimeBehaviour, (0, class_validator_1.IsString)());
|
|
43
44
|
}
|
|
44
45
|
exports.UpdateTimeField = UpdateTimeField;
|
|
45
46
|
//# sourceMappingURL=UpdateTimeField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateTimeField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/UpdateTimeField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,mCAAmC;AACnC,qCAAuD;AACvD,kFAA6E;AAC7E,2CAAyD;AACzD,mDAAkD;
|
|
1
|
+
{"version":3,"file":"UpdateTimeField.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/UpdateTimeField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,mCAAmC;AACnC,qCAAuD;AACvD,kFAA6E;AAC7E,2CAAyD;AACzD,mDAAkD;AAClD,qDAAyC;AAMzC,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE;IACjD,MAAM,UAAU,GAAG,YAAY,GAAG,uBAAuB,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;QAErB,MAAM,CAAC,UAAU,CAAC,GAAG;YACjB,IAAI,CAAC,YAAY,CAAC,GAAG,IAAA,iCAAiB,EAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC;KACL;IAED,CAAC,uCAAkB,CAAC,aAAa,EAAE,uCAAkB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAChF,IAAA,gCAAsB,GAAE,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1C,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,UAAU;YACxB,IAAI;SACP,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,SAAgB,eAAe,CAAC,UAAmC,EAAE;IACjE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QAChB,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC;KAC9B;IAED,OAAO,IAAA,wBAAe,EAClB,IAAA,qBAAS,EAAC,OAAO,EAAE;QACf,aAAa,EAAE,iBAAiB;QAChC,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,QAAQ;KACnB,CAAC,EACF,IAAA,gBAAM,EAAC;QACH,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAA,YAAI,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,EAAE,IAAA,YAAI,EAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QACzE,QAAQ,EAAE,IAAA,YAAI,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;QAC9D,WAAW,EAAE;YACT,IAAI,EAAE,iCAAiB;YACvB,EAAE,EAAE,GAAG,EAAE,CAAC,IAAA,iCAAiB,EAAC,IAAI,IAAI,EAAE,CAAC;SAC1C;KACJ,CAAC,EACF,mBAAmB,EACnB,IAAA,0BAAQ,GAAE,CACb,CAAC;AACN,CAAC;AAxBD,0CAwBC"}
|
|
@@ -32,4 +32,5 @@ export { UidField } from './UidField';
|
|
|
32
32
|
export { UpdateTimeField } from './UpdateTimeField';
|
|
33
33
|
export { RelationField } from './RelationField';
|
|
34
34
|
export { RelationIdField } from './RelationIdField';
|
|
35
|
+
export { ImageField } from './ImageField';
|
|
35
36
|
export declare type IAllFieldOptions = ICreateTimeFieldOptions & IDateTimeFieldColumnOptions & IDecimalFieldOptions & IEnumFieldOptions & IExtendFieldOptions & IFileField & IRelationFieldOptions & IRelationIdFieldOptions & IUpdateTimeFieldOptions & IEmailFieldOptions & IPhoneFieldOptions & IStringFieldOptions & IIntegerFieldOptions;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RelationIdField = exports.RelationField = exports.UpdateTimeField = exports.UidField = exports.TimeField = exports.TextField = exports.StringField = exports.PrimaryKeyField = exports.PhoneField = exports.PasswordField = exports.IntegerField = exports.HtmlField = exports.FileField = exports.EnumField = exports.EmailField = exports.DecimalField = exports.DateTimeField = exports.DateField = exports.CreateTimeField = exports.CoordinateField = exports.BooleanField = void 0;
|
|
3
|
+
exports.ImageField = exports.RelationIdField = exports.RelationField = exports.UpdateTimeField = exports.UidField = exports.TimeField = exports.TextField = exports.StringField = exports.PrimaryKeyField = exports.PhoneField = exports.PasswordField = exports.IntegerField = exports.HtmlField = exports.FileField = exports.EnumField = exports.EmailField = exports.DecimalField = exports.DateTimeField = exports.DateField = exports.CreateTimeField = exports.CoordinateField = exports.BooleanField = void 0;
|
|
4
4
|
var BooleanField_1 = require("./BooleanField");
|
|
5
5
|
Object.defineProperty(exports, "BooleanField", { enumerable: true, get: function () { return BooleanField_1.BooleanField; } });
|
|
6
6
|
var CoordinateField_1 = require("./CoordinateField");
|
|
@@ -43,4 +43,6 @@ var RelationField_1 = require("./RelationField");
|
|
|
43
43
|
Object.defineProperty(exports, "RelationField", { enumerable: true, get: function () { return RelationField_1.RelationField; } });
|
|
44
44
|
var RelationIdField_1 = require("./RelationIdField");
|
|
45
45
|
Object.defineProperty(exports, "RelationIdField", { enumerable: true, get: function () { return RelationIdField_1.RelationIdField; } });
|
|
46
|
+
var ImageField_1 = require("./ImageField");
|
|
47
|
+
Object.defineProperty(exports, "ImageField", { enumerable: true, get: function () { return ImageField_1.ImageField; } });
|
|
46
48
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/index.ts"],"names":[],"mappings":";;;AAcA,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AACnB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/infrastructure/decorators/fields/index.ts"],"names":[],"mappings":";;;AAcA,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AACnB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Brackets } from 'typeorm';
|
|
2
1
|
import { WhereExpressionBuilder } from 'typeorm/query-builder/WhereExpressionBuilder';
|
|
3
2
|
export declare type IConditionOperatorSingle = '=' | '>' | '>=' | '=>' | '<' | '<=' | '=<' | 'like' | 'ilike' | 'between' | 'in' | 'and' | '&&' | 'or' | '||';
|
|
4
3
|
export declare type IConditionOperatorAndOr = 'and' | '&&' | 'or' | '||';
|
|
5
4
|
export declare type ICondition = Record<string, unknown> | [IConditionOperatorAndOr, ...any[]] | [IConditionOperatorSingle, string, ...any[]] | ICondition[] | ((qb: WhereExpressionBuilder) => any);
|
|
6
5
|
export declare class ConditionHelper {
|
|
7
|
-
static
|
|
6
|
+
static toTypeOrmFilter(condition: ICondition): any;
|
|
7
|
+
static toTypeOrm(condition: ICondition, filterEmpty?: boolean): any;
|
|
8
8
|
}
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ConditionHelper = void 0;
|
|
4
|
+
const lodash_1 = require("lodash");
|
|
4
5
|
const typeorm_1 = require("typeorm");
|
|
5
|
-
const
|
|
6
|
+
const emptyCondition = {};
|
|
7
|
+
const isEmpty = value => value === null || typeof value === 'undefined' || value === emptyCondition;
|
|
6
8
|
class ConditionHelper {
|
|
7
|
-
static
|
|
9
|
+
static toTypeOrmFilter(condition) {
|
|
10
|
+
return ConditionHelper.toTypeOrm(condition, true);
|
|
11
|
+
}
|
|
12
|
+
static toTypeOrm(condition, filterEmpty = false) {
|
|
8
13
|
if (typeof condition === 'function') {
|
|
9
14
|
return new typeorm_1.Brackets(condition);
|
|
10
15
|
}
|
|
11
16
|
if (typeof condition === 'object' && !Array.isArray(condition)) {
|
|
12
|
-
|
|
17
|
+
const result = Object.keys(condition).reduce((obj, key) => {
|
|
18
|
+
const value = condition[key];
|
|
19
|
+
if (!filterEmpty || !isEmpty(value)) {
|
|
20
|
+
(0, lodash_1.set)(obj, key, value);
|
|
21
|
+
}
|
|
22
|
+
return obj;
|
|
23
|
+
}, {});
|
|
24
|
+
return Object.keys(result).length === 0 ? emptyCondition : result;
|
|
13
25
|
}
|
|
14
26
|
if (Array.isArray(condition) && condition.length > 1 && typeof condition[0] === 'string') {
|
|
15
27
|
let operator = condition[0].toLowerCase();
|
|
@@ -17,50 +29,61 @@ class ConditionHelper {
|
|
|
17
29
|
if (isNot) {
|
|
18
30
|
operator = operator.replace(/^not\s+/, '');
|
|
19
31
|
}
|
|
32
|
+
const objectWhere = (isNot, isEmpty, key, value) => {
|
|
33
|
+
return !filterEmpty || !isEmpty
|
|
34
|
+
? (0, lodash_1.set)({}, key, isNot ? (0, typeorm_1.Not)(value) : value)
|
|
35
|
+
: emptyCondition;
|
|
36
|
+
};
|
|
20
37
|
const key = condition[1];
|
|
21
38
|
const value = condition[2];
|
|
22
39
|
switch (operator) {
|
|
23
40
|
case '=':
|
|
24
|
-
return
|
|
41
|
+
return objectWhere(isNot, isEmpty(value), key, value);
|
|
25
42
|
case '>':
|
|
26
|
-
return
|
|
43
|
+
return objectWhere(isNot, isEmpty(value), key, (0, typeorm_1.MoreThan)(value));
|
|
27
44
|
case '>=':
|
|
28
45
|
case '=>':
|
|
29
|
-
return
|
|
46
|
+
return objectWhere(isNot, isEmpty(value), key, (0, typeorm_1.MoreThanOrEqual)(value));
|
|
30
47
|
case '<':
|
|
31
|
-
return
|
|
48
|
+
return objectWhere(isNot, isEmpty(value), key, (0, typeorm_1.LessThan)(value));
|
|
32
49
|
case '<=':
|
|
33
50
|
case '=<':
|
|
34
|
-
return
|
|
51
|
+
return objectWhere(isNot, isEmpty(value), key, (0, typeorm_1.LessThanOrEqual)(value));
|
|
35
52
|
case 'like':
|
|
36
|
-
return { [key]: notCondition(isNot, (0, typeorm_1.Like)(value)) };
|
|
37
53
|
case 'ilike':
|
|
38
|
-
|
|
54
|
+
const likeMethod = operator === 'ilike' ? typeorm_1.ILike : typeorm_1.Like;
|
|
55
|
+
return objectWhere(isNot, isEmpty(value), key, likeMethod(value.indexOf('%') !== -1 ? value : '%' + value + '%'));
|
|
39
56
|
case 'between':
|
|
40
|
-
return
|
|
57
|
+
return objectWhere(isNot, isEmpty(condition[2] || condition[3]), key, (0, typeorm_1.Between)(condition[2], condition[3]));
|
|
41
58
|
case 'in':
|
|
42
|
-
if (!Array.isArray(value)) {
|
|
59
|
+
if (value && !Array.isArray(value)) {
|
|
43
60
|
throw Error('Wrong value for IN operator: ' + JSON.stringify(value));
|
|
44
61
|
}
|
|
45
|
-
return
|
|
62
|
+
return objectWhere(isNot, isEmpty(value) || value.length === 0, key, (0, typeorm_1.In)(value));
|
|
46
63
|
case 'and':
|
|
47
64
|
case '&&':
|
|
48
|
-
if (isNot) {
|
|
49
|
-
throw Error('Unsupport NOT for AND operator. Operator: ' + operator);
|
|
50
|
-
}
|
|
51
|
-
return new typeorm_1.Brackets(query2 => {
|
|
52
|
-
condition.slice(1).forEach(item => {
|
|
53
|
-
query2.andWhere(ConditionHelper.toTypeOrm(item));
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
65
|
case 'or':
|
|
57
66
|
case '||':
|
|
58
67
|
if (isNot) {
|
|
59
|
-
throw Error('Unsupport NOT for OR operator. Operator: ' + operator);
|
|
68
|
+
throw Error('Unsupport NOT for AND/OR operator. Operator: ' + operator);
|
|
69
|
+
}
|
|
70
|
+
const isOr = ['or', '||'].includes(operator);
|
|
71
|
+
const values = condition.slice(1)
|
|
72
|
+
.map(item => ConditionHelper.toTypeOrm(item, filterEmpty))
|
|
73
|
+
.filter(value => !isEmpty(value));
|
|
74
|
+
if (values.length === 0) {
|
|
75
|
+
return emptyCondition;
|
|
60
76
|
}
|
|
61
|
-
return new typeorm_1.Brackets(query2 => {
|
|
62
|
-
|
|
63
|
-
|
|
77
|
+
return new typeorm_1.Brackets((query2) => {
|
|
78
|
+
const parentQuery = query2.parentQueryBuilder;
|
|
79
|
+
query2.expressionMap.joinAttributes = parentQuery.expressionMap.joinAttributes;
|
|
80
|
+
values.forEach(value => {
|
|
81
|
+
if (isOr) {
|
|
82
|
+
query2.orWhere(value);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
query2.andWhere(value);
|
|
86
|
+
}
|
|
64
87
|
});
|
|
65
88
|
});
|
|
66
89
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionHelper.js","sourceRoot":"","sources":["../../../../src/usecases/helpers/ConditionHelper.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"ConditionHelper.js","sourceRoot":"","sources":["../../../../src/usecases/helpers/ConditionHelper.ts"],"names":[],"mappings":"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"}
|