@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.
Files changed (27) hide show
  1. package/package.json +1 -1
  2. package/src/infrastructure/decorators/fields/DateTimeField.js +0 -5
  3. package/src/infrastructure/decorators/fields/DateTimeField.js.map +1 -1
  4. package/src/infrastructure/decorators/fields/DecimalField.d.ts +1 -0
  5. package/src/infrastructure/decorators/fields/DecimalField.js +1 -1
  6. package/src/infrastructure/decorators/fields/DecimalField.js.map +1 -1
  7. package/src/infrastructure/decorators/fields/EnumField.d.ts +1 -0
  8. package/src/infrastructure/decorators/fields/EnumField.js +3 -1
  9. package/src/infrastructure/decorators/fields/EnumField.js.map +1 -1
  10. package/src/infrastructure/decorators/fields/FileField.d.ts +2 -0
  11. package/src/infrastructure/decorators/fields/FileField.js +15 -5
  12. package/src/infrastructure/decorators/fields/FileField.js.map +1 -1
  13. package/src/infrastructure/decorators/fields/ImageField.d.ts +6 -0
  14. package/src/infrastructure/decorators/fields/ImageField.js +10 -0
  15. package/src/infrastructure/decorators/fields/ImageField.js.map +1 -0
  16. package/src/infrastructure/decorators/fields/IntegerField.d.ts +1 -0
  17. package/src/infrastructure/decorators/fields/IntegerField.js +2 -2
  18. package/src/infrastructure/decorators/fields/IntegerField.js.map +1 -1
  19. package/src/infrastructure/decorators/fields/UpdateTimeField.js +3 -2
  20. package/src/infrastructure/decorators/fields/UpdateTimeField.js.map +1 -1
  21. package/src/infrastructure/decorators/fields/index.d.ts +1 -0
  22. package/src/infrastructure/decorators/fields/index.js +3 -1
  23. package/src/infrastructure/decorators/fields/index.js.map +1 -1
  24. package/src/usecases/helpers/ConditionHelper.d.ts +2 -2
  25. package/src/usecases/helpers/ConditionHelper.js +48 -25
  26. package/src/usecases/helpers/ConditionHelper.js.map +1 -1
  27. package/tsconfig.tsbuildinfo +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/nest",
3
- "version": "1.3.4",
3
+ "version": "1.3.7",
4
4
  "scripts": {
5
5
  "build": "tsc && copyfiles ./{package.json,LICENSE,README.md} dist/",
6
6
  "watch": "tsc -p tsconfig-debug.json",
@@ -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;AAC/B,qDAAyD;AACzD,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;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,8BAAY,EAAC;YACT,OAAO,EAAE,0BAA0B;SACtC,CAAC;QACF,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"}
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;AAOzD,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,qBAAqB;SACjC,CAAC;KACL,CAAC,MAAM,CAAC,OAAO,CAAC,CACpB,CAAC;AACN,CAAC;AApBD,oCAoBC"}
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;AAMrD,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,CAAC;KACvB,CAAC,MAAM,CAAC,OAAO,CAAC,CACpB,CAAC;AACN,CAAC;AAhCD,8BAgCC"}
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 FileField(options = {}) {
9
- return (0, common_1.applyDecorators)(...[
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 ? (0, class_validator_1.IsArray)() : (0, class_validator_1.IsInt)(),
22
- ].filter(Boolean));
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;AAMzD,SAAgB,SAAS,CAAC,UAAsB,EAAE;IAC9C,OAAO,IAAA,wBAAe,EAClB,GAAG;QACC,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,CAAC,CAAC,CAAC,IAAA,yBAAO,GAAE,CAAC,CAAC,CAAC,IAAA,uBAAK,GAAE;KACzC,CAAC,MAAM,CAAC,OAAO,CAAC,CACpB,CAAC;AACN,CAAC;AAjBD,8BAiBC"}
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 || value === undefined ? value : (0, lodash_1.toInteger)(value);
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;AAM5C,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,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,kBAAU,EAAC,KAAK,CAAC,CAAC;QAC7E,CAAC,CAAE;QACH,IAAA,uBAAK,EAAC;YACF,OAAO,EAAE,oBAAoB;YAC7B,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"}
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;AAMlD,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,iCAAiB;SACxB;KACJ,CAAC,EACF,mBAAmB,CACtB,CAAC;AACN,CAAC;AAvBD,0CAuBC"}
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 toTypeOrm(condition: ICondition): Record<string, unknown> | Brackets;
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 notCondition = (isNot, condition) => isNot ? (0, typeorm_1.Not)(condition) : condition;
6
+ const emptyCondition = {};
7
+ const isEmpty = value => value === null || typeof value === 'undefined' || value === emptyCondition;
6
8
  class ConditionHelper {
7
- static toTypeOrm(condition) {
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
- return condition;
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 { [key]: notCondition(isNot, value) };
41
+ return objectWhere(isNot, isEmpty(value), key, value);
25
42
  case '>':
26
- return { [key]: notCondition(isNot, (0, typeorm_1.MoreThan)(value)) };
43
+ return objectWhere(isNot, isEmpty(value), key, (0, typeorm_1.MoreThan)(value));
27
44
  case '>=':
28
45
  case '=>':
29
- return { [key]: notCondition(isNot, (0, typeorm_1.MoreThanOrEqual)(value)) };
46
+ return objectWhere(isNot, isEmpty(value), key, (0, typeorm_1.MoreThanOrEqual)(value));
30
47
  case '<':
31
- return { [key]: notCondition(isNot, (0, typeorm_1.LessThan)(value)) };
48
+ return objectWhere(isNot, isEmpty(value), key, (0, typeorm_1.LessThan)(value));
32
49
  case '<=':
33
50
  case '=<':
34
- return { [key]: notCondition(isNot, (0, typeorm_1.LessThanOrEqual)(value)) };
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
- return { [key]: notCondition(isNot, (0, typeorm_1.ILike)(value)) };
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 { [key]: notCondition(isNot, (0, typeorm_1.Between)(condition[2], condition[3])) };
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 { [key]: notCondition(isNot, (0, typeorm_1.In)(value)) };
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
- condition.slice(1).forEach(item => {
63
- query2.orWhere(ConditionHelper.toTypeOrm(item));
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":"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"}
1
+ {"version":3,"file":"ConditionHelper.js","sourceRoot":"","sources":["../../../../src/usecases/helpers/ConditionHelper.ts"],"names":[],"mappings":"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"}