@hosterai/types 0.0.17 → 0.0.19

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 (194) hide show
  1. package/README.md +12 -9
  2. package/dist/decorators/all-or-none-validator.spec.d.ts +1 -0
  3. package/dist/decorators/all-or-none-validator.spec.js +91 -0
  4. package/dist/decorators/all-or-none.validator.d.ts +2 -0
  5. package/dist/decorators/all-or-none.validator.js +71 -0
  6. package/dist/decorators/at-least-one-non-empty-validator.spec.d.ts +1 -0
  7. package/dist/decorators/at-least-one-non-empty-validator.spec.js +79 -0
  8. package/dist/decorators/at-least-one-non-empty.validator.d.ts +2 -0
  9. package/dist/decorators/at-least-one-non-empty.validator.js +43 -0
  10. package/dist/decorators/is-of-allowed-types-validator.spec.d.ts +1 -0
  11. package/dist/decorators/is-of-allowed-types-validator.spec.js +188 -0
  12. package/dist/decorators/is-of-allowed-types.validator.d.ts +16 -0
  13. package/dist/decorators/is-of-allowed-types.validator.js +105 -0
  14. package/dist/decorators/is-one-of-validator.spec.d.ts +1 -0
  15. package/dist/decorators/is-one-of-validator.spec.js +51 -0
  16. package/dist/decorators/is-one-of.validator.d.ts +2 -0
  17. package/dist/decorators/is-one-of.validator.js +19 -0
  18. package/dist/decorators/is-plain-object-validator.spec.d.ts +1 -0
  19. package/dist/decorators/is-plain-object-validator.spec.js +46 -0
  20. package/dist/decorators/is-plain-object.validator.d.ts +2 -0
  21. package/dist/decorators/is-plain-object.validator.js +30 -0
  22. package/dist/decorators/is-property-forbidden-validator.spec.d.ts +1 -0
  23. package/dist/decorators/is-property-forbidden-validator.spec.js +62 -0
  24. package/dist/decorators/is-property-forbidden.validator.d.ts +2 -0
  25. package/dist/decorators/is-property-forbidden.validator.js +22 -0
  26. package/dist/decorators/is-regex-validator.spec.d.ts +1 -0
  27. package/dist/decorators/is-regex-validator.spec.js +46 -0
  28. package/dist/decorators/is-regex.validator.d.ts +2 -0
  29. package/dist/decorators/is-regex.validator.js +32 -0
  30. package/dist/decorators/min-less-or-equal-validator.spec.d.ts +1 -0
  31. package/dist/decorators/min-less-or-equal-validator.spec.js +60 -0
  32. package/dist/decorators/min-less-or-equal.validator.d.ts +2 -0
  33. package/dist/decorators/min-less-or-equal.validator.js +58 -0
  34. package/dist/decorators/unique-field-in-array-validator.spec.d.ts +1 -0
  35. package/dist/decorators/unique-field-in-array-validator.spec.js +39 -0
  36. package/dist/decorators/unique-field-in-array.validator.d.ts +6 -0
  37. package/dist/decorators/unique-field-in-array.validator.js +47 -0
  38. package/dist/dtos/action.dto.js +25 -1
  39. package/dist/dtos/admin-panel.dto.d.ts +38 -0
  40. package/dist/dtos/admin-panel.dto.js +241 -0
  41. package/dist/dtos/client-panel.dto.d.ts +24 -0
  42. package/dist/dtos/client-panel.dto.js +105 -0
  43. package/dist/dtos/company-data.dto.js +1 -1
  44. package/dist/dtos/field-option.dto.js +16 -0
  45. package/dist/dtos/field.dto.d.ts +2 -0
  46. package/dist/dtos/field.dto.js +112 -2
  47. package/dist/dtos/info.dto.d.ts +4 -79
  48. package/dist/dtos/info.dto.js +141 -0
  49. package/dist/dtos/menu.dto.d.ts +5 -6
  50. package/dist/dtos/menu.dto.js +108 -0
  51. package/dist/dtos/multilang-text.dto.js +1 -1
  52. package/dist/dtos/notification/notification-info.dto.js +42 -0
  53. package/dist/dtos/product/product-info.dto.js +73 -0
  54. package/dist/dtos/product/requests/product-downgradeable-request.dto.d.ts +18 -0
  55. package/dist/dtos/product/requests/product-downgradeable-request.dto.js +37 -0
  56. package/dist/dtos/product/requests/product-upgradeable-request.dto.d.ts +18 -0
  57. package/dist/dtos/product/requests/product-upgradeable-request.dto.js +37 -0
  58. package/dist/dtos/product/responses/product-downgradeable-response.dto.d.ts +22 -0
  59. package/dist/dtos/product/responses/product-downgradeable-response.dto.js +11 -0
  60. package/dist/dtos/product/responses/product-upgradeable-response.dto.d.ts +22 -0
  61. package/dist/dtos/product/responses/product-upgradeable-response.dto.js +11 -0
  62. package/dist/dtos/settings.dto.d.ts +14 -0
  63. package/dist/dtos/settings.dto.js +81 -0
  64. package/dist/dtos/tab.dto.js +32 -0
  65. package/dist/dtos/unit.dto.js +47 -0
  66. package/dist/index.d.ts +23 -7
  67. package/dist/index.js +26 -7
  68. package/dist/openapi/schemas/components.schemas.d.ts +991 -0
  69. package/dist/openapi/schemas/components.schemas.js +2552 -0
  70. package/dist/transformers/menu.transformer.d.ts +2 -0
  71. package/dist/transformers/menu.transformer.js +16 -0
  72. package/dist/transformers/settings.transformer.d.ts +1 -0
  73. package/dist/transformers/settings.transformer.js +15 -0
  74. package/dist/validators/action-validator.spec.d.ts +1 -0
  75. package/dist/validators/action-validator.spec.js +67 -0
  76. package/dist/validators/admin-panel-more-actions-validator.spec.d.ts +1 -0
  77. package/dist/validators/admin-panel-more-actions-validator.spec.js +129 -0
  78. package/dist/validators/admin-panel-more-actions.validator.d.ts +2 -0
  79. package/dist/validators/admin-panel-more-actions.validator.js +11 -0
  80. package/dist/validators/admin-panel-tabs-validator.spec.d.ts +1 -0
  81. package/dist/validators/admin-panel-tabs-validator.spec.js +39 -0
  82. package/dist/validators/admin-panel-tabs.validator.d.ts +2 -0
  83. package/dist/validators/admin-panel-tabs.validator.js +11 -0
  84. package/dist/validators/admin-panel-validator.spec.d.ts +1 -0
  85. package/dist/validators/admin-panel-validator.spec.js +112 -0
  86. package/dist/validators/admin-panel.validator.d.ts +2 -0
  87. package/dist/validators/admin-panel.validator.js +14 -0
  88. package/dist/validators/client-data-validator.spec.d.ts +1 -0
  89. package/dist/validators/client-data-validator.spec.js +35 -0
  90. package/dist/validators/client-panel-validator.spec.d.ts +1 -0
  91. package/dist/validators/client-panel-validator.spec.js +51 -0
  92. package/dist/validators/client-panel.validator.d.ts +2 -0
  93. package/dist/validators/client-panel.validator.js +14 -0
  94. package/dist/validators/company-data-validator.spec.d.ts +1 -0
  95. package/dist/validators/company-data-validator.spec.js +73 -0
  96. package/dist/validators/field-option-validator.spec.d.ts +1 -0
  97. package/dist/validators/field-option-validator.spec.js +28 -0
  98. package/dist/validators/field-option.validator.d.ts +2 -0
  99. package/dist/validators/field-option.validator.js +11 -0
  100. package/dist/validators/field-validator.spec.d.ts +1 -0
  101. package/dist/validators/field-validator.spec.js +102 -0
  102. package/dist/validators/jwt-validator.spec.d.ts +2 -0
  103. package/dist/validators/jwt-validator.spec.js +43 -0
  104. package/dist/validators/menu-with-submenu-validator.spec.d.ts +1 -0
  105. package/dist/validators/menu-with-submenu-validator.spec.js +52 -0
  106. package/dist/validators/menu-with-submenu.validator.d.ts +2 -0
  107. package/dist/validators/menu-with-submenu.validator.js +11 -0
  108. package/dist/validators/menu-with-url-validator.spec.d.ts +1 -0
  109. package/dist/validators/menu-with-url-validator.spec.js +70 -0
  110. package/dist/validators/menu-with-url.validator.d.ts +2 -0
  111. package/dist/validators/menu-with-url.validator.js +11 -0
  112. package/dist/validators/multilang-text-validator.spec.d.ts +1 -0
  113. package/dist/validators/multilang-text-validator.spec.js +33 -0
  114. package/dist/validators/notification-info-validator.spec.d.ts +1 -0
  115. package/dist/validators/notification-info-validator.spec.js +82 -0
  116. package/dist/validators/notification-info.validator.d.ts +7 -0
  117. package/dist/validators/notification-info.validator.js +16 -0
  118. package/dist/validators/notification-request-validator.spec.d.ts +1 -0
  119. package/dist/validators/notification-request-validator.spec.js +115 -0
  120. package/dist/validators/product-create-request-validator.spec.d.ts +2 -0
  121. package/dist/validators/product-create-request-validator.spec.js +44 -0
  122. package/dist/validators/product-delete-request-validator.spec.d.ts +1 -0
  123. package/dist/validators/product-delete-request-validator.spec.js +40 -0
  124. package/dist/validators/product-downgradable-request-validator.spec.d.ts +1 -0
  125. package/dist/validators/product-downgradable-request-validator.spec.js +40 -0
  126. package/dist/validators/product-downgrade-request-validator.spec.d.ts +1 -0
  127. package/dist/validators/product-downgrade-request-validator.spec.js +46 -0
  128. package/dist/validators/product-downgradeable-request-validator.d.ts +8 -0
  129. package/dist/validators/product-downgradeable-request-validator.js +17 -0
  130. package/dist/validators/product-info-validator.spec.d.ts +1 -0
  131. package/dist/validators/product-info-validator.spec.js +259 -0
  132. package/dist/validators/product-info.validator.d.ts +2 -0
  133. package/dist/validators/product-info.validator.js +11 -0
  134. package/dist/validators/product-renew-request-validator.spec.d.ts +1 -0
  135. package/dist/validators/product-renew-request-validator.spec.js +40 -0
  136. package/dist/validators/product-suspend-request-validator.spec.d.ts +1 -0
  137. package/dist/validators/product-suspend-request-validator.spec.js +40 -0
  138. package/dist/validators/product-unsuspend-request-validator.spec.d.ts +1 -0
  139. package/dist/validators/product-unsuspend-request-validator.spec.js +40 -0
  140. package/dist/validators/product-upgradable-request-validator.spec.d.ts +1 -0
  141. package/dist/validators/product-upgradable-request-validator.spec.js +40 -0
  142. package/dist/validators/product-upgrade-request-validator.spec.d.ts +1 -0
  143. package/dist/validators/product-upgrade-request-validator.spec.js +46 -0
  144. package/dist/validators/product-upgradeable-request-validator.d.ts +8 -0
  145. package/dist/validators/product-upgradeable-request-validator.js +17 -0
  146. package/dist/validators/product-validate-attributes-request-validator.spec.d.ts +1 -0
  147. package/dist/validators/product-validate-attributes-request-validator.spec.js +27 -0
  148. package/dist/validators/receiver-email-validator.spec.d.ts +1 -0
  149. package/dist/validators/receiver-email-validator.spec.js +32 -0
  150. package/dist/validators/receiver-push-validator.spec.d.ts +1 -0
  151. package/dist/validators/receiver-push-validator.spec.js +31 -0
  152. package/dist/validators/receiver-sms-validator.spec.d.ts +1 -0
  153. package/dist/validators/receiver-sms-validator.spec.js +29 -0
  154. package/dist/validators/sender-email-validator.spec.d.ts +2 -0
  155. package/dist/validators/sender-email-validator.spec.js +62 -0
  156. package/dist/validators/sender-push-validator.spec.d.ts +1 -0
  157. package/dist/validators/sender-push-validator.spec.js +38 -0
  158. package/dist/validators/sender-sms-validator.spec.d.ts +1 -0
  159. package/dist/validators/sender-sms-validator.spec.js +22 -0
  160. package/dist/validators/settings-with-tabs-validator.spec.d.ts +1 -0
  161. package/dist/validators/settings-with-tabs-validator.spec.js +29 -0
  162. package/dist/validators/settings-with-tabs.validator.d.ts +2 -0
  163. package/dist/validators/settings-with-tabs.validator.js +11 -0
  164. package/dist/validators/settings-with-url-validator.spec.d.ts +1 -0
  165. package/dist/validators/settings-with-url-validator.spec.js +29 -0
  166. package/dist/validators/settings-with-url.validator.d.ts +2 -0
  167. package/dist/validators/settings-with-url.validator.js +11 -0
  168. package/dist/validators/unit-validator.spec.d.ts +1 -0
  169. package/dist/validators/unit-validator.spec.js +27 -0
  170. package/dist/validators/unit.validator.d.ts +2 -0
  171. package/dist/validators/unit.validator.js +11 -0
  172. package/package.json +4 -1
  173. package/dist/dtos/info/info-notification.dto.d.ts +0 -5
  174. package/dist/dtos/info/info-notification.dto.js +0 -7
  175. package/dist/dtos/info/info.dto.d.ts +0 -196
  176. package/dist/dtos/info/info.dto.js +0 -278
  177. package/dist/dtos/notification/notification-request.dto.d.ts +0 -20
  178. package/dist/dtos/notification/notification-request.dto.js +0 -31
  179. package/dist/dtos/receiver/receiver-email.dto.d.ts +0 -20
  180. package/dist/dtos/receiver/receiver-email.dto.js +0 -39
  181. package/dist/dtos/receiver/receiver-push.dto.d.ts +0 -15
  182. package/dist/dtos/receiver/receiver-push.dto.js +0 -31
  183. package/dist/dtos/receiver/receiver-sms.dto.d.ts +0 -11
  184. package/dist/dtos/receiver/receiver-sms.dto.js +0 -26
  185. package/dist/dtos/request.dto.d.ts +0 -20
  186. package/dist/dtos/request.dto.js +0 -31
  187. package/dist/dtos/sender/sender-email.dto.d.ts +0 -25
  188. package/dist/dtos/sender/sender-email.dto.js +0 -46
  189. package/dist/dtos/sender/sender-push.dto.d.ts +0 -31
  190. package/dist/dtos/sender/sender-push.dto.js +0 -50
  191. package/dist/dtos/sender/sender-sms.dto.d.ts +0 -15
  192. package/dist/dtos/sender/sender-sms.dto.js +0 -30
  193. package/dist/enums/message-type.enum.d.ts +0 -5
  194. package/dist/enums/message-type.enum.js +0 -9
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const class_validator_1 = require("class-validator");
13
+ const class_transformer_1 = require("class-transformer");
14
+ const is_one_of_validator_1 = require("../decorators/is-one-of.validator");
15
+ class A {
16
+ }
17
+ class B {
18
+ }
19
+ class C {
20
+ }
21
+ class TestDto {
22
+ }
23
+ __decorate([
24
+ (0, is_one_of_validator_1.IsOneOf)([A, B], { message: 'value must be instance of A or B' }),
25
+ __metadata("design:type", Object)
26
+ ], TestDto.prototype, "prop", void 0);
27
+ describe('IsOneOf decorator', () => {
28
+ const cases = [
29
+ [new A(), true],
30
+ [new B(), true],
31
+ [new C(), false],
32
+ ['string', false],
33
+ [123, false],
34
+ ];
35
+ it.each(cases)('validates %p as %p', async (value, valid) => {
36
+ const dto = (0, class_transformer_1.plainToInstance)(TestDto, { prop: value });
37
+ const errors = await (0, class_validator_1.validate)(dto);
38
+ if (valid)
39
+ expect(errors.length).toBe(0);
40
+ else {
41
+ expect(errors.length).toBeGreaterThan(0);
42
+ expect(errors[0].constraints).toHaveProperty('isOneOf');
43
+ }
44
+ });
45
+ it('returns custom message', async () => {
46
+ var _a;
47
+ const dto = (0, class_transformer_1.plainToInstance)(TestDto, { prop: 123 });
48
+ const errors = await (0, class_validator_1.validate)(dto);
49
+ expect((_a = errors[0].constraints) === null || _a === void 0 ? void 0 : _a.isOneOf).toBe('value must be instance of A or B');
50
+ });
51
+ });
@@ -0,0 +1,2 @@
1
+ import { ValidationOptions } from "class-validator";
2
+ export declare function IsOneOf(validClasses: Function[], validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsOneOf = IsOneOf;
4
+ const class_validator_1 = require("class-validator");
5
+ function IsOneOf(validClasses, validationOptions) {
6
+ return function (object, propertyName) {
7
+ (0, class_validator_1.registerDecorator)({
8
+ name: 'isOneOf',
9
+ target: object.constructor,
10
+ propertyName,
11
+ options: validationOptions,
12
+ validator: {
13
+ validate(value, _args) {
14
+ return validClasses.some(cls => value instanceof cls);
15
+ },
16
+ },
17
+ });
18
+ };
19
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const class_validator_1 = require("class-validator");
13
+ const is_plain_object_validator_1 = require("./is-plain-object.validator");
14
+ class TestDto {
15
+ }
16
+ __decorate([
17
+ (0, is_plain_object_validator_1.IsPlainObject)(),
18
+ __metadata("design:type", Object)
19
+ ], TestDto.prototype, "plainObjectField", void 0);
20
+ describe('IsPlainObject', () => {
21
+ it('should validate plain objects', () => {
22
+ const dto = new TestDto();
23
+ dto.plainObjectField = { key: 'value' };
24
+ const errors = (0, class_validator_1.validateSync)(dto);
25
+ expect(errors.length).toBe(0);
26
+ });
27
+ it('should invalidate objects with functions', () => {
28
+ const dto = new TestDto();
29
+ dto.plainObjectField = { key: () => { } };
30
+ const errors = (0, class_validator_1.validateSync)(dto);
31
+ expect(errors.length).toBeGreaterThan(0);
32
+ });
33
+ it('should invalidate non-object values', () => {
34
+ const dto = new TestDto();
35
+ // @ts-ignore
36
+ dto.plainObjectField = 'not an object';
37
+ const errors = (0, class_validator_1.validateSync)(dto);
38
+ expect(errors.length).toBeGreaterThan(0);
39
+ });
40
+ it('should invalidate null values', () => {
41
+ const dto = new TestDto();
42
+ dto.plainObjectField = null;
43
+ const errors = (0, class_validator_1.validateSync)(dto);
44
+ expect(errors.length).toBeGreaterThan(0);
45
+ });
46
+ });
@@ -0,0 +1,2 @@
1
+ import { ValidationOptions } from 'class-validator';
2
+ export declare function IsPlainObject(validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsPlainObject = IsPlainObject;
4
+ const class_validator_1 = require("class-validator");
5
+ function IsPlainObject(validationOptions) {
6
+ return function (object, propertyName) {
7
+ (0, class_validator_1.registerDecorator)({
8
+ name: 'isPlainObject',
9
+ target: object.constructor,
10
+ propertyName: propertyName,
11
+ options: validationOptions,
12
+ validator: {
13
+ validate(value, _args) {
14
+ if (value === null || typeof value !== 'object' || value.constructor !== Object) {
15
+ return false;
16
+ }
17
+ for (const key in value) {
18
+ if (typeof key !== 'string' || typeof value[key] === 'function') {
19
+ return false;
20
+ }
21
+ }
22
+ return true;
23
+ },
24
+ defaultMessage(_args) {
25
+ return '$property must be a plain object with key-value pairs';
26
+ },
27
+ },
28
+ });
29
+ };
30
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const class_validator_1 = require("class-validator");
13
+ const class_transformer_1 = require("class-transformer");
14
+ const is_property_forbidden_validator_1 = require("../decorators/is-property-forbidden.validator");
15
+ class TestDto {
16
+ }
17
+ __decorate([
18
+ (0, is_property_forbidden_validator_1.IsPropertyForbidden)('forbiddenProp', { message: 'forbiddenProp must not be present' }),
19
+ __metadata("design:type", Object)
20
+ ], TestDto.prototype, "someProp", void 0);
21
+ class TestDto2 {
22
+ }
23
+ __decorate([
24
+ (0, is_property_forbidden_validator_1.IsPropertyForbidden)('forbiddenProp'),
25
+ __metadata("design:type", Object)
26
+ ], TestDto2.prototype, "someProp", void 0);
27
+ describe('IsPropertyForbidden decorator', () => {
28
+ it('passes validation when forbidden property is absent', async () => {
29
+ const dto = (0, class_transformer_1.plainToInstance)(TestDto, { someProp: 'allowed' });
30
+ const errors = await (0, class_validator_1.validate)(dto);
31
+ expect(errors.length).toBe(0);
32
+ });
33
+ it('fails validation when forbidden property is present', async () => {
34
+ const dto = (0, class_transformer_1.plainToInstance)(TestDto, { someProp: 'allowed', forbiddenProp: 'not allowed' });
35
+ const errors = await (0, class_validator_1.validate)(dto);
36
+ expect(errors.length).toBeGreaterThan(0);
37
+ // Validate error message
38
+ expect(errors[0].constraints).toBeDefined();
39
+ expect(errors[0].constraints).toHaveProperty('isPropertyForbidden');
40
+ expect(errors[0].constraints.isPropertyForbidden).toBe('forbiddenProp must not be present');
41
+ });
42
+ it('uses custom error message if provided', async () => {
43
+ class CustomMessageDto {
44
+ }
45
+ __decorate([
46
+ (0, is_property_forbidden_validator_1.IsPropertyForbidden)('badProp', { message: 'Custom forbidden message' }),
47
+ __metadata("design:type", Object)
48
+ ], CustomMessageDto.prototype, "prop", void 0);
49
+ const dto = (0, class_transformer_1.plainToInstance)(CustomMessageDto, { prop: 'ok', badProp: 123 });
50
+ const errors = await (0, class_validator_1.validate)(dto);
51
+ expect(errors.length).toBeGreaterThan(0);
52
+ expect(errors[0].constraints).toBeDefined();
53
+ expect(errors[0].constraints.isPropertyForbidden).toBe('Custom forbidden message');
54
+ });
55
+ it('uses default error message if no message is provided', async () => {
56
+ const dto = (0, class_transformer_1.plainToInstance)(TestDto2, { someProp: 'allowed', forbiddenProp: 'not allowed' });
57
+ const errors = await (0, class_validator_1.validate)(dto);
58
+ expect(errors.length).toBeGreaterThan(0);
59
+ expect(errors[0].constraints).toBeDefined();
60
+ expect(errors[0].constraints.isPropertyForbidden).toBe('Property \'forbiddenProp\' is not allowed');
61
+ });
62
+ });
@@ -0,0 +1,2 @@
1
+ import { ValidationOptions } from 'class-validator';
2
+ export declare function IsPropertyForbidden(property: string, validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsPropertyForbidden = IsPropertyForbidden;
4
+ const class_validator_1 = require("class-validator");
5
+ function IsPropertyForbidden(property, validationOptions) {
6
+ return function (object, propertyName) {
7
+ (0, class_validator_1.registerDecorator)({
8
+ name: 'isPropertyForbidden',
9
+ target: object.constructor,
10
+ propertyName,
11
+ options: validationOptions,
12
+ validator: {
13
+ validate(_value, args) {
14
+ return !(property in args.object);
15
+ },
16
+ defaultMessage(_args) {
17
+ return `Property '${property}' is not allowed`;
18
+ },
19
+ },
20
+ });
21
+ };
22
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const class_validator_1 = require("class-validator");
13
+ const is_regex_validator_1 = require("./is-regex.validator");
14
+ class TestDto {
15
+ }
16
+ __decorate([
17
+ (0, is_regex_validator_1.IsRegex)(),
18
+ __metadata("design:type", String)
19
+ ], TestDto.prototype, "regexField", void 0);
20
+ describe('IsRegex', () => {
21
+ it('should validate valid regex strings', () => {
22
+ const dto = new TestDto();
23
+ dto.regexField = '^abc$';
24
+ const errors = (0, class_validator_1.validateSync)(dto);
25
+ expect(errors.length).toBe(0);
26
+ });
27
+ it('should invalidate invalid regex strings', () => {
28
+ const dto = new TestDto();
29
+ dto.regexField = '[';
30
+ const errors = (0, class_validator_1.validateSync)(dto);
31
+ expect(errors.length).toBeGreaterThan(0);
32
+ });
33
+ it('should invalidate non-string values', () => {
34
+ const dto = new TestDto();
35
+ // @ts-ignore
36
+ dto.regexField = 123;
37
+ const errors = (0, class_validator_1.validateSync)(dto);
38
+ expect(errors.length).toBeGreaterThan(0);
39
+ });
40
+ it('should invalidate empty strings', () => {
41
+ const dto = new TestDto();
42
+ dto.regexField = '';
43
+ const errors = (0, class_validator_1.validateSync)(dto);
44
+ expect(errors.length).toBeGreaterThan(0);
45
+ });
46
+ });
@@ -0,0 +1,2 @@
1
+ import { ValidationOptions } from 'class-validator';
2
+ export declare function IsRegex(validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsRegex = IsRegex;
4
+ const class_validator_1 = require("class-validator");
5
+ function IsRegex(validationOptions) {
6
+ return function (object, propertyName) {
7
+ (0, class_validator_1.registerDecorator)({
8
+ name: 'isRegex',
9
+ target: object.constructor,
10
+ propertyName: propertyName,
11
+ options: validationOptions,
12
+ validator: {
13
+ validate(value) {
14
+ if (typeof value !== 'string')
15
+ return false;
16
+ if (value.trim().length === 0)
17
+ return false;
18
+ try {
19
+ new RegExp(value);
20
+ return true;
21
+ }
22
+ catch (_a) {
23
+ return false;
24
+ }
25
+ },
26
+ defaultMessage() {
27
+ return '$property must be a valid regular expression';
28
+ },
29
+ },
30
+ });
31
+ };
32
+ }
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ require("reflect-metadata");
13
+ const class_validator_1 = require("class-validator");
14
+ const min_less_or_equal_validator_1 = require("./min-less-or-equal.validator");
15
+ let MinMaxDto = class MinMaxDto {
16
+ constructor(data) { Object.assign(this, data); }
17
+ };
18
+ MinMaxDto = __decorate([
19
+ (0, min_less_or_equal_validator_1.MinLessOrEqualMaxProperty)(['min', 'max']),
20
+ __metadata("design:paramtypes", [Object])
21
+ ], MinMaxDto);
22
+ let MultiMinMaxDto = class MultiMinMaxDto {
23
+ constructor(data) { Object.assign(this, data); }
24
+ };
25
+ MultiMinMaxDto = __decorate([
26
+ (0, min_less_or_equal_validator_1.MinLessOrEqualMaxProperty)([
27
+ ['min1', 'max1'],
28
+ ['min2', 'max2'],
29
+ ]),
30
+ __metadata("design:paramtypes", [Object])
31
+ ], MultiMinMaxDto);
32
+ describe('MinLessOrEqualMaxProperty', () => {
33
+ it('passes when one or both are absent', async () => {
34
+ const dto1 = new MinMaxDto({});
35
+ const dto2 = new MinMaxDto({ min: 1 });
36
+ const dto3 = new MinMaxDto({ max: 2 });
37
+ expect((await (0, class_validator_1.validate)(dto1)).length).toBe(0);
38
+ expect((await (0, class_validator_1.validate)(dto2)).length).toBe(0);
39
+ expect((await (0, class_validator_1.validate)(dto3)).length).toBe(0);
40
+ });
41
+ it('passes when min <= max', async () => {
42
+ const dto = new MinMaxDto({ min: 1, max: 1 });
43
+ const dto2 = new MinMaxDto({ min: 1, max: 2 });
44
+ expect((await (0, class_validator_1.validate)(dto)).length).toBe(0);
45
+ expect((await (0, class_validator_1.validate)(dto2)).length).toBe(0);
46
+ });
47
+ it('fails when min > max', async () => {
48
+ const dto = new MinMaxDto({ min: 3, max: 2 });
49
+ const errors = await (0, class_validator_1.validate)(dto);
50
+ expect(errors.length).toBeGreaterThan(0);
51
+ });
52
+ it('handles multiple pairs correctly', async () => {
53
+ const ok = new MultiMinMaxDto({ min1: 1, max1: 2, min2: 3, max2: 3 });
54
+ const errorsOk = await (0, class_validator_1.validate)(ok);
55
+ expect(errorsOk.length).toBe(0);
56
+ const bad = new MultiMinMaxDto({ min1: 1, max1: 0, min2: 3, max2: 3 });
57
+ const errorsBad = await (0, class_validator_1.validate)(bad);
58
+ expect(errorsBad.length).toBeGreaterThan(0);
59
+ });
60
+ });
@@ -0,0 +1,2 @@
1
+ import { ValidationOptions } from 'class-validator';
2
+ export declare function MinLessOrEqualMaxProperty(keysOrPairs: [string, string] | [string, string][], validationOptions?: ValidationOptions): (constructor: Function) => void;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MinLessOrEqualMaxProperty = MinLessOrEqualMaxProperty;
10
+ const class_validator_1 = require("class-validator");
11
+ let MinLessOrEqualMaxConstraint = class MinLessOrEqualMaxConstraint {
12
+ validate(_, args) {
13
+ const object = args.object;
14
+ const input = args.constraints[0];
15
+ const pairs = Array.isArray(input) && typeof input[0] === 'string'
16
+ ? [input]
17
+ : input;
18
+ return pairs.every(([minKey, maxKey]) => {
19
+ const minVal = object[minKey];
20
+ const maxVal = object[maxKey];
21
+ // If one or both are missing, do not fail here; let AllOrNone or other validators handle presence
22
+ if (minVal === undefined || minVal === null)
23
+ return true;
24
+ if (maxVal === undefined || maxVal === null)
25
+ return true;
26
+ if (typeof minVal !== 'number' || typeof maxVal !== 'number')
27
+ return true; // Type guards handled elsewhere
28
+ return minVal <= maxVal;
29
+ });
30
+ }
31
+ defaultMessage(args) {
32
+ const input = args.constraints[0];
33
+ const pairs = Array.isArray(input) && typeof input[0] === 'string'
34
+ ? [input]
35
+ : input;
36
+ if (pairs.length === 1) {
37
+ const [minKey, maxKey] = pairs[0];
38
+ return `${minKey} must be less than or equal to ${maxKey}`;
39
+ }
40
+ const list = pairs.map(([a, b]) => `${a}<=${b}`).join(', ');
41
+ return `The following constraints must hold: ${list}`;
42
+ }
43
+ };
44
+ MinLessOrEqualMaxConstraint = __decorate([
45
+ (0, class_validator_1.ValidatorConstraint)({ name: 'MinLessOrEqualMax', async: false })
46
+ ], MinLessOrEqualMaxConstraint);
47
+ function MinLessOrEqualMaxProperty(keysOrPairs, validationOptions) {
48
+ return function (constructor) {
49
+ (0, class_validator_1.registerDecorator)({
50
+ name: 'MinLessOrEqualMax',
51
+ target: constructor,
52
+ propertyName: '',
53
+ options: validationOptions,
54
+ constraints: [keysOrPairs],
55
+ validator: MinLessOrEqualMaxConstraint,
56
+ });
57
+ };
58
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const class_validator_1 = require("class-validator");
13
+ const unique_field_in_array_validator_1 = require("./unique-field-in-array.validator");
14
+ class TestDto {
15
+ }
16
+ __decorate([
17
+ (0, unique_field_in_array_validator_1.UniqueFieldInArray)('id'),
18
+ __metadata("design:type", Array)
19
+ ], TestDto.prototype, "items", void 0);
20
+ describe('UniqueFieldInArray', () => {
21
+ it('should validate array with unique field values', () => {
22
+ const dto = new TestDto();
23
+ dto.items = [{ id: 1 }, { id: 2 }];
24
+ const errors = (0, class_validator_1.validateSync)(dto);
25
+ expect(errors.length).toBe(0);
26
+ });
27
+ it('should invalidate array with duplicate field values', () => {
28
+ const dto = new TestDto();
29
+ dto.items = [{ id: 1 }, { id: 1 }];
30
+ const errors = (0, class_validator_1.validateSync)(dto);
31
+ expect(errors.length).toBeGreaterThan(0);
32
+ });
33
+ it('should validate empty array', () => {
34
+ const dto = new TestDto();
35
+ dto.items = [];
36
+ const errors = (0, class_validator_1.validateSync)(dto);
37
+ expect(errors.length).toBe(0);
38
+ });
39
+ });
@@ -0,0 +1,6 @@
1
+ import { ValidationArguments, ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
2
+ export declare class UniqueFieldInArrayConstraint implements ValidatorConstraintInterface {
3
+ validate(value: any[], args: ValidationArguments): boolean;
4
+ defaultMessage(args: ValidationArguments): string;
5
+ }
6
+ export declare function UniqueFieldInArray(field: string, validationOptions?: ValidationOptions): (object: any, propertyName: string) => void;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.UniqueFieldInArrayConstraint = void 0;
10
+ exports.UniqueFieldInArray = UniqueFieldInArray;
11
+ const class_validator_1 = require("class-validator");
12
+ let UniqueFieldInArrayConstraint = class UniqueFieldInArrayConstraint {
13
+ validate(value, args) {
14
+ if (!Array.isArray(value))
15
+ return true; // Let @IsArray handle wrong type
16
+ const field = args.constraints[0];
17
+ const seen = new Set();
18
+ for (const obj of value) {
19
+ if (obj && typeof obj === 'object' && obj[field] !== undefined) {
20
+ if (seen.has(obj[field])) {
21
+ return false;
22
+ }
23
+ seen.add(obj[field]);
24
+ }
25
+ }
26
+ return true;
27
+ }
28
+ defaultMessage(args) {
29
+ const field = args.constraints[0];
30
+ return `All objects in ${args.property} must have a unique "${field}" value`;
31
+ }
32
+ };
33
+ exports.UniqueFieldInArrayConstraint = UniqueFieldInArrayConstraint;
34
+ exports.UniqueFieldInArrayConstraint = UniqueFieldInArrayConstraint = __decorate([
35
+ (0, class_validator_1.ValidatorConstraint)({ async: false })
36
+ ], UniqueFieldInArrayConstraint);
37
+ function UniqueFieldInArray(field, validationOptions) {
38
+ return function (object, propertyName) {
39
+ (0, class_validator_1.registerDecorator)({
40
+ target: object.constructor,
41
+ propertyName,
42
+ options: validationOptions,
43
+ constraints: [field],
44
+ validator: UniqueFieldInArrayConstraint,
45
+ });
46
+ };
47
+ }
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ActionDto = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
14
  const open_method_enum_1 = require("../enums/open-method.enum");
15
+ const class_validator_jsonschema_1 = require("class-validator-jsonschema");
15
16
  /**
16
17
  * Defines the structure for a UI action.
17
18
  * @example
@@ -27,18 +28,41 @@ class ActionDto {
27
28
  exports.ActionDto = ActionDto;
28
29
  __decorate([
29
30
  (0, class_validator_1.IsString)(),
31
+ (0, class_validator_1.IsNotEmpty)(),
32
+ (0, class_validator_jsonschema_1.JSONSchema)({
33
+ title: 'Icon',
34
+ description: 'Name of the icon to display for the action.',
35
+ type: 'string'
36
+ }),
30
37
  __metadata("design:type", String)
31
38
  ], ActionDto.prototype, "icon", void 0);
32
39
  __decorate([
33
40
  (0, class_validator_1.IsString)(),
34
41
  (0, class_validator_1.IsOptional)(),
42
+ (0, class_validator_jsonschema_1.JSONSchema)({
43
+ title: 'Label',
44
+ description: 'Text label for the action.',
45
+ type: 'string'
46
+ }),
35
47
  __metadata("design:type", String)
36
48
  ], ActionDto.prototype, "label", void 0);
37
49
  __decorate([
38
50
  (0, class_validator_1.IsEnum)(open_method_enum_1.OpenMethodEnum),
51
+ (0, class_validator_1.IsNotEmpty)(),
52
+ (0, class_validator_jsonschema_1.JSONSchema)({
53
+ title: 'Open Method',
54
+ description: 'Method by which the action\'s URL should be opened.',
55
+ enum: Object.values(open_method_enum_1.OpenMethodEnum)
56
+ }),
39
57
  __metadata("design:type", String)
40
58
  ], ActionDto.prototype, "openMethod", void 0);
41
59
  __decorate([
42
- (0, class_validator_1.IsUrl)(),
60
+ (0, class_validator_1.IsUrl)({ protocols: ['https'], require_protocol: true }),
61
+ (0, class_validator_1.IsNotEmpty)(),
62
+ (0, class_validator_jsonschema_1.JSONSchema)({
63
+ title: 'URL',
64
+ description: 'URL to navigate to when the action is triggered.',
65
+ type: 'string'
66
+ }),
43
67
  __metadata("design:type", String)
44
68
  ], ActionDto.prototype, "url", void 0);