@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,2 @@
1
+ import { MenuDtoWithUrl, MenuDtoWithSubmenu, BaseMenuDto } from '../dtos/menu.dto';
2
+ export declare function transformMenu(value: any): MenuDtoWithUrl | MenuDtoWithSubmenu | BaseMenuDto | undefined;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformMenu = transformMenu;
4
+ const class_transformer_1 = require("class-transformer");
5
+ const menu_dto_1 = require("../dtos/menu.dto");
6
+ function transformMenu(value) {
7
+ if (!value)
8
+ return undefined;
9
+ if (value.type === 'only-url') {
10
+ return (0, class_transformer_1.plainToInstance)(menu_dto_1.MenuDtoWithUrl, value);
11
+ }
12
+ else if (value.type === 'with-submenu') {
13
+ return (0, class_transformer_1.plainToInstance)(menu_dto_1.MenuDtoWithSubmenu, value);
14
+ }
15
+ return (0, class_transformer_1.plainToInstance)(menu_dto_1.BaseMenuDto, value);
16
+ }
@@ -0,0 +1 @@
1
+ export declare function transformSettings(value: any): any;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformSettings = transformSettings;
4
+ const class_transformer_1 = require("class-transformer");
5
+ const settings_dto_1 = require("../dtos/settings.dto");
6
+ const settings_dto_2 = require("../dtos/settings.dto");
7
+ function transformSettings(value) {
8
+ if (value === null || value === void 0 ? void 0 : value.tabs) {
9
+ return (0, class_transformer_1.plainToInstance)(settings_dto_2.SettingsWithTabsDto, value);
10
+ }
11
+ else if (value === null || value === void 0 ? void 0 : value.url) {
12
+ return (0, class_transformer_1.plainToInstance)(settings_dto_1.SettingsWithUrlDto, value);
13
+ }
14
+ return value;
15
+ }
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const action_validator_1 = require("./action-validator");
5
+ const open_method_enum_1 = require("../enums/open-method.enum");
6
+ describe('ActionDto Validator', () => {
7
+ it('should return no errors for valid DTO', () => {
8
+ const validDto = {
9
+ icon: 'test-icon',
10
+ openMethod: open_method_enum_1.OpenMethodEnum.AJAX_CALL,
11
+ url: 'https://example.com',
12
+ };
13
+ const errors = (0, action_validator_1.validateActionDto)(validDto);
14
+ expect(errors).toHaveLength(0);
15
+ });
16
+ it('should return error for invalid URL', () => {
17
+ const invalidDto = {
18
+ icon: 'test-icon',
19
+ openMethod: open_method_enum_1.OpenMethodEnum.AJAX_CALL,
20
+ url: 'not-a-url',
21
+ };
22
+ const errors = (0, action_validator_1.validateActionDto)(invalidDto);
23
+ expect(errors.length).toBeGreaterThan(0);
24
+ expect(errors.some((e) => e.property === 'url')).toBe(true);
25
+ });
26
+ it('should return error for invalid openMethod', () => {
27
+ const invalidDto = {
28
+ icon: 'test-icon',
29
+ openMethod: 'not-an-enum',
30
+ url: 'http://example.com',
31
+ };
32
+ const errors = (0, action_validator_1.validateActionDto)(invalidDto);
33
+ expect(errors.length).toBeGreaterThan(0);
34
+ expect(errors.some((e) => e.property === 'openMethod')).toBe(true);
35
+ });
36
+ it('should return error for missing required fields', () => {
37
+ const invalidDto = {
38
+ // missing 'icon' and 'url'
39
+ openMethod: open_method_enum_1.OpenMethodEnum.AJAX_CALL
40
+ };
41
+ const errors = (0, action_validator_1.validateActionDto)(invalidDto);
42
+ expect(errors.length).toBeGreaterThan(0);
43
+ expect(errors.some((e) => e.property === 'icon')).toBe(true);
44
+ expect(errors.some((e) => e.property === 'url')).toBe(true);
45
+ });
46
+ it('should return error for invalid data types', () => {
47
+ const invalidDto = {
48
+ icon: 123, // should be a string
49
+ openMethod: open_method_enum_1.OpenMethodEnum.AJAX_CALL,
50
+ url: 456 // should be a string
51
+ };
52
+ const errors = (0, action_validator_1.validateActionDto)(invalidDto);
53
+ expect(errors.length).toBeGreaterThan(0);
54
+ expect(errors.some((e) => e.property === 'icon')).toBe(true);
55
+ expect(errors.some((e) => e.property === 'url')).toBe(true);
56
+ });
57
+ it('should handle unexpected fields gracefully', () => {
58
+ const validDto = {
59
+ icon: 'test-icon',
60
+ openMethod: open_method_enum_1.OpenMethodEnum.AJAX_CALL,
61
+ url: 'https://example.com',
62
+ unexpectedField: 'unexpected' // additional field
63
+ };
64
+ const errors = (0, action_validator_1.validateActionDto)(validDto);
65
+ expect(errors).toHaveLength(0);
66
+ });
67
+ });
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const class_validator_1 = require("class-validator");
5
+ const action_dto_1 = require("../dtos/action.dto");
6
+ const open_method_enum_1 = require("../enums/open-method.enum");
7
+ const admin_panel_dto_1 = require("../dtos/admin-panel.dto");
8
+ const admin_panel_more_actions_validator_1 = require("./admin-panel-more-actions.validator");
9
+ const minimalValidActionDto = () => {
10
+ const action = new action_dto_1.ActionDto();
11
+ action.icon = 'add';
12
+ action.openMethod = open_method_enum_1.OpenMethodEnum.AJAX_CALL;
13
+ action.url = 'https://example.com/api';
14
+ return action;
15
+ };
16
+ describe('AdminPanelMoreActionsDto', () => {
17
+ it('fails when all keys are undefined', async () => {
18
+ const dto = new admin_panel_dto_1.AdminPanelMoreActionsDto();
19
+ const errors = await (0, class_validator_1.validate)(dto);
20
+ expect(errors.length).toBeGreaterThan(0);
21
+ });
22
+ it('fails when all keys are empty arrays', async () => {
23
+ const dto = new admin_panel_dto_1.AdminPanelMoreActionsDto();
24
+ dto.client = [];
25
+ dto.item = [];
26
+ dto.invoice = [];
27
+ dto.user = [];
28
+ dto.order = [];
29
+ const errors = await (0, class_validator_1.validate)(dto);
30
+ expect(errors.length).toBeGreaterThan(0);
31
+ });
32
+ it('passes when one key has a non-empty array', async () => {
33
+ const dto = new admin_panel_dto_1.AdminPanelMoreActionsDto();
34
+ dto.client = [minimalValidActionDto()];
35
+ const errors = await (0, class_validator_1.validate)(dto);
36
+ expect(errors.length).toBe(0);
37
+ });
38
+ it('passes when multiple keys have non-empty arrays', async () => {
39
+ const dto = new admin_panel_dto_1.AdminPanelMoreActionsDto();
40
+ dto.client = [minimalValidActionDto()];
41
+ dto.order = [minimalValidActionDto()];
42
+ const errors = await (0, class_validator_1.validate)(dto);
43
+ expect(errors.length).toBe(0);
44
+ });
45
+ it('fails when a key has a non-array non-object value', async () => {
46
+ const dto = new admin_panel_dto_1.AdminPanelMoreActionsDto();
47
+ // @ts-expect-error testing invalid value
48
+ dto.client = 'invalid';
49
+ const errors = await (0, class_validator_1.validate)(dto);
50
+ expect(errors.length).toBeGreaterThan(0);
51
+ });
52
+ it('passes when nested ActionDto is valid', async () => {
53
+ const dto = new admin_panel_dto_1.AdminPanelMoreActionsDto();
54
+ dto.client = [minimalValidActionDto()];
55
+ const errors = await (0, class_validator_1.validate)(dto);
56
+ expect(errors.length).toBe(0);
57
+ });
58
+ it('fails when nested ActionDto is invalid', async () => {
59
+ const dto = new admin_panel_dto_1.AdminPanelMoreActionsDto();
60
+ const invalidAction = minimalValidActionDto();
61
+ // @ts-expect-error testing invalid value
62
+ invalidAction.url = 123; // should be a string
63
+ dto.client = [invalidAction];
64
+ const errors = await (0, class_validator_1.validate)(dto);
65
+ expect(errors.length).toBeGreaterThan(0);
66
+ });
67
+ it('handles unexpected keys gracefully', async () => {
68
+ const dto = new admin_panel_dto_1.AdminPanelMoreActionsDto();
69
+ dto.client = [minimalValidActionDto()];
70
+ // @ts-expect-error testing unexpected key
71
+ dto.unexpectedKey = 'unexpected';
72
+ const errors = await (0, class_validator_1.validate)(dto);
73
+ expect(errors.length).toBe(0);
74
+ });
75
+ it('fails when input object cannot be converted', async () => {
76
+ const invalidData = {
77
+ client: 'not-an-object',
78
+ };
79
+ const errors = (0, admin_panel_more_actions_validator_1.validateAdminPanelMoreActionsDto)(invalidData);
80
+ expect(errors.length).toBeGreaterThan(0);
81
+ });
82
+ it('validates complex nested structures', async () => {
83
+ const complexData = {
84
+ client: [{
85
+ icon: 'add',
86
+ openMethod: open_method_enum_1.OpenMethodEnum.AJAX_CALL,
87
+ url: 'https://example.com/api',
88
+ nested: [{
89
+ icon: 'nested-icon',
90
+ openMethod: open_method_enum_1.OpenMethodEnum.AJAX_CALL,
91
+ url: 'https://example.com/nested'
92
+ }]
93
+ }]
94
+ };
95
+ const errors = (0, admin_panel_more_actions_validator_1.validateAdminPanelMoreActionsDto)(complexData);
96
+ expect(errors.length).toBe(0);
97
+ });
98
+ it('handles edge cases with empty objects', async () => {
99
+ const emptyData = {};
100
+ const errors = (0, admin_panel_more_actions_validator_1.validateAdminPanelMoreActionsDto)(emptyData);
101
+ expect(errors.length).toBeGreaterThan(0);
102
+ });
103
+ it('fails when all properties are empty arrays', async () => {
104
+ const data = {
105
+ client: [],
106
+ item: [],
107
+ invoice: [],
108
+ user: [],
109
+ order: []
110
+ };
111
+ const errors = (0, admin_panel_more_actions_validator_1.validateAdminPanelMoreActionsDto)(data);
112
+ expect(errors.length).toBeGreaterThan(0);
113
+ });
114
+ it('passes with one non-empty property', async () => {
115
+ const data = {
116
+ client: [minimalValidActionDto()]
117
+ };
118
+ const errors = (0, admin_panel_more_actions_validator_1.validateAdminPanelMoreActionsDto)(data);
119
+ expect(errors.length).toBe(0);
120
+ });
121
+ it('passes with multiple non-empty properties', async () => {
122
+ const data = {
123
+ client: [minimalValidActionDto()],
124
+ item: [minimalValidActionDto()]
125
+ };
126
+ const errors = (0, admin_panel_more_actions_validator_1.validateAdminPanelMoreActionsDto)(data);
127
+ expect(errors.length).toBe(0);
128
+ });
129
+ });
@@ -0,0 +1,2 @@
1
+ import { ValidationError } from "class-validator";
2
+ export declare function validateAdminPanelMoreActionsDto(data: object): ValidationError[];
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAdminPanelMoreActionsDto = validateAdminPanelMoreActionsDto;
4
+ const class_transformer_1 = require("class-transformer");
5
+ const class_validator_1 = require("class-validator");
6
+ const admin_panel_dto_1 = require("../dtos/admin-panel.dto");
7
+ function validateAdminPanelMoreActionsDto(data) {
8
+ const dto = (0, class_transformer_1.plainToInstance)(admin_panel_dto_1.AdminPanelMoreActionsDto, data);
9
+ const errors = (0, class_validator_1.validateSync)(dto);
10
+ return errors;
11
+ }
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const class_validator_1 = require("class-validator");
5
+ const class_transformer_1 = require("class-transformer");
6
+ const admin_panel_dto_1 = require("../dtos/admin-panel.dto");
7
+ describe('validateAdminPanelTabsDto', () => {
8
+ const validTab = { label: 'Tab', url: 'https://example.com' };
9
+ const boundaryTab = { label: 'T', url: 'https://e.com' }; // Shortest valid values
10
+ const longTab = { label: 'L'.repeat(256), url: 'https://example.com/long-url' }; // Longest valid values
11
+ const cases = [
12
+ [{ product: [], item: [], client: [], user: [], order: [] }, false], // all empty => invalid
13
+ [{ product: [validTab], item: [validTab], client: [validTab], user: [validTab], order: [validTab] }, true],
14
+ [{ product: [], item: [], client: [], user: [] }, false], // missing order
15
+ [{ product: [], item: 'not-an-array', client: [], user: [], order: [] }, false],
16
+ [{ product: [{ label: 123, url: 'invalid-url' }], item: [], client: [], user: [], order: [] }, false],
17
+ [{ product: [{ label: 123, url: 'invalid-url' }], item: [], client: [], user: [], order: [] }, false],
18
+ ];
19
+ const additionalCases = [
20
+ [{ product: [boundaryTab], item: [boundaryTab], client: [boundaryTab], user: [boundaryTab], order: [boundaryTab] }, true], // boundary values
21
+ [{ product: [longTab], item: [longTab], client: [longTab], user: [longTab], order: [longTab] }, true], // long values
22
+ [{ product: [validTab], item: [validTab], client: [validTab], user: [validTab], order: [validTab], unexpected: 'extra' }, false], // unexpected property
23
+ ];
24
+ test.each([...cases, ...additionalCases])('validates %# as %s', (input, valid) => {
25
+ const dto = (0, class_transformer_1.plainToInstance)(admin_panel_dto_1.AdminPanelTabsDto, input);
26
+ const errors = (0, class_validator_1.validateSync)(dto, { whitelist: true, forbidNonWhitelisted: true });
27
+ const classLevelError = errors.find(e => e.property === '');
28
+ const hasClassLevelError = classLevelError !== undefined;
29
+ if (valid) {
30
+ expect(errors.length).toBe(0);
31
+ }
32
+ else {
33
+ expect(errors.length).toBeGreaterThan(0);
34
+ if (hasClassLevelError) {
35
+ expect(classLevelError.constraints).toHaveProperty('AtLeastOneNonEmpty');
36
+ }
37
+ }
38
+ });
39
+ });
@@ -0,0 +1,2 @@
1
+ import { ValidationError } from "class-validator";
2
+ export declare function validateAdminPanelTabsDto(data: object): ValidationError[];
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAdminPanelTabsDto = validateAdminPanelTabsDto;
4
+ const class_transformer_1 = require("class-transformer");
5
+ const admin_panel_dto_1 = require("../dtos/admin-panel.dto");
6
+ const class_validator_1 = require("class-validator");
7
+ function validateAdminPanelTabsDto(data) {
8
+ const dto = (0, class_transformer_1.plainToInstance)(admin_panel_dto_1.AdminPanelTabsDto, data);
9
+ const errors = (0, class_validator_1.validateSync)(dto);
10
+ return errors;
11
+ }
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const admin_panel_validator_1 = require("./admin-panel.validator");
5
+ const validAction = { icon: 'add', openMethod: 'ajax_call', url: 'https://example.com/action' };
6
+ const minimalValidMenuDtoWithUrl = {
7
+ type: 'only-url',
8
+ icon: 'https://example.com/icon.png',
9
+ label: 'Main Menu',
10
+ url: 'https://example.com/menu',
11
+ };
12
+ const minimalValidMenuDtoWithSubmenu = {
13
+ type: 'with-submenu',
14
+ icon: 'https://example.com/icon.png',
15
+ label: 'Main Menu',
16
+ submenu: [
17
+ { url: 'https://example.com/sub1', label: 'Submenu 1' },
18
+ { url: 'https://example.com/sub2', label: 'Submenu 2' },
19
+ ],
20
+ };
21
+ const minimalValidSettingsWithUrlDto = {
22
+ url: 'https://settings.com',
23
+ label: 'Settings',
24
+ icon: 'https://example.com/icon.png',
25
+ description: 'Settings description',
26
+ };
27
+ const minimalValidSettingsWithTabsDto = {
28
+ tabs: [
29
+ {
30
+ label: 'Tab 1',
31
+ url: 'https://example.com/tab1',
32
+ },
33
+ ],
34
+ label: 'Settings',
35
+ icon: 'https://example.com/icon.png',
36
+ description: 'Settings description',
37
+ };
38
+ describe('AdminPanelDto full validation', () => {
39
+ test.each([
40
+ // Empty object is invalid
41
+ ['valid minimal empty object', {}, false],
42
+ // Tabs tests
43
+ ['invalid all empty tabs and empty moreActions', {
44
+ tabs: { product: [], item: [], client: [], user: [], order: [] },
45
+ moreActions: {},
46
+ }, false],
47
+ ['valid with one non-empty tab', {
48
+ tabs: { product: [{ label: 'Product', url: 'https://example.com/product' }] },
49
+ }, true],
50
+ ['invalid with one non-empty tab', {
51
+ tabs: { product: [{ label: 'Product', url: 'https://example.com/product' }], item: [], client: [], user: [], order: [] },
52
+ }, false],
53
+ ['invalid with multiple non-empty tabs', {
54
+ tabs: {
55
+ product: [{ label: 'Product', url: 'https://example.com/product' }],
56
+ item: [{ label: 'Item', url: 'https://example.com/item' }],
57
+ client: [],
58
+ user: [],
59
+ order: [],
60
+ },
61
+ }, false],
62
+ ['valid with multiple non-empty tabs', {
63
+ tabs: {
64
+ product: [{ label: 'Product', url: 'https://example.com/product' }],
65
+ item: [{ label: 'Item', url: 'https://example.com/item' }],
66
+ },
67
+ }, true],
68
+ // MoreActions tests
69
+ ['valid with moreActions.client', { moreActions: { client: [validAction] } }, true],
70
+ ['valid with moreActions.item', { moreActions: { item: [validAction] } }, true],
71
+ ['valid with moreActions.invoice', { moreActions: { invoice: [validAction] } }, true],
72
+ ['valid with moreActions.order', { moreActions: { order: [validAction] } }, true],
73
+ ['valid with moreActions.user', { moreActions: { user: [validAction] } }, true],
74
+ ['invalid moreActions.client with bad openMethod', { moreActions: { client: [{ icon: 'add', openMethod: 'bad_method', url: 'https://example.com/action' }] } }, false],
75
+ // Menu and Settings valid combos
76
+ ['valid menu with URL type', { menu: minimalValidMenuDtoWithUrl }, true],
77
+ ['valid menu with submenu type', { menu: minimalValidMenuDtoWithSubmenu }, true],
78
+ ['valid menu and settings URL', { menu: minimalValidMenuDtoWithUrl, settings: minimalValidSettingsWithUrlDto }, true],
79
+ ['valid menu and settings tabs', { menu: minimalValidMenuDtoWithSubmenu, settings: minimalValidSettingsWithTabsDto }, true],
80
+ // Invalid menu cases
81
+ ['invalid menu missing required fields', { menu: { type: 'only-url' } }, false],
82
+ ['invalid menu unknown type', { menu: { type: 'unknown', icon: 'https://icon.png', label: 'Label', url: 'https://example.com' } }, false],
83
+ ['invalid menu with extra property', { menu: { ...minimalValidMenuDtoWithUrl, extra: 'not allowed' } }, false],
84
+ ['invalid menu with submenu on URL menu', { menu: { ...minimalValidMenuDtoWithUrl, submenu: [{ url: 'https://example.com', label: 'Sub' }] } }, false],
85
+ // Invalid tabs type
86
+ ['invalid tabs not an object', { tabs: 'not-an-object' }, false],
87
+ // Invalid extra property on root DTO
88
+ ['invalid extra property on root', { extra: 'not allowed' }, false],
89
+ // Settings validation edge cases
90
+ ['valid settings with SettingsWithUrlDto', { settings: minimalValidSettingsWithUrlDto }, true],
91
+ ['valid settings with SettingsWithTabsDto', { settings: minimalValidSettingsWithTabsDto }, true],
92
+ ['invalid settings missing required fields', { settings: { label: 'Missing url and tabs' } }, false],
93
+ ['invalid settings with extra property', { settings: { ...minimalValidSettingsWithUrlDto, extra: 'not allowed' } }, false],
94
+ ['invalid settings with both url and tabs', {
95
+ settings: {
96
+ url: 'https://example.com',
97
+ tabs: [{ label: 'Tab 1', url: 'https://example.com/tab1' }],
98
+ label: 'Invalid Union',
99
+ icon: 'https://example.com/icon.png',
100
+ description: 'Should fail because both url and tabs are present',
101
+ },
102
+ }, false],
103
+ ])('%s', async (_desc, input, expectedValid) => {
104
+ const errors = await (0, admin_panel_validator_1.validateAdminPanelDto)(input);
105
+ if (expectedValid) {
106
+ expect(errors.length).toBe(0);
107
+ }
108
+ else {
109
+ expect(errors.length).toBeGreaterThan(0);
110
+ }
111
+ });
112
+ });
@@ -0,0 +1,2 @@
1
+ import { ValidationError } from 'class-validator';
2
+ export declare function validateAdminPanelDto(data: object): Promise<ValidationError[]>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAdminPanelDto = validateAdminPanelDto;
4
+ const class_validator_1 = require("class-validator");
5
+ const class_transformer_1 = require("class-transformer");
6
+ const admin_panel_dto_1 = require("../dtos/admin-panel.dto");
7
+ async function validateAdminPanelDto(data) {
8
+ const dto = (0, class_transformer_1.plainToInstance)(admin_panel_dto_1.AdminPanelDto, data);
9
+ const errors = await (0, class_validator_1.validate)(dto, {
10
+ whitelist: true, // strips unknown props
11
+ forbidNonWhitelisted: true, // throws error if unknown props present
12
+ });
13
+ return errors;
14
+ }
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const client_data_validator_1 = require("./client-data-validator");
5
+ const country_enum_1 = require("../enums/country.enum");
6
+ describe('validateClientDataDto', () => {
7
+ it('should return no errors for a valid client data object', async () => {
8
+ const validClientData = {
9
+ email: 'test@example.com',
10
+ firstName: 'John',
11
+ lastName: 'Doe',
12
+ telephone: '+14155552671',
13
+ address1: '123 Main St',
14
+ postcode: '12345',
15
+ city: 'Anytown',
16
+ country: country_enum_1.CountryEnum.UNITED_STATES,
17
+ };
18
+ const errors = await (0, client_data_validator_1.validateClientDataDto)(validClientData);
19
+ expect(errors.length).toBe(0);
20
+ });
21
+ it('should return errors for an invalid client data object', async () => {
22
+ const invalidClientData = {
23
+ email: 'not-an-email',
24
+ firstName: '', // empty
25
+ lastName: 'Doe',
26
+ telephone: '123', // invalid
27
+ address1: '123 Main St',
28
+ postcode: '12345',
29
+ city: 'Anytown',
30
+ country: 'invalid-country',
31
+ };
32
+ const errors = await (0, client_data_validator_1.validateClientDataDto)(invalidClientData);
33
+ expect(errors.length).toBeGreaterThan(0);
34
+ });
35
+ });
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const client_panel_validator_1 = require("./client-panel.validator"); // your validation function
5
+ const validAction = { icon: 'add', openMethod: 'ajax_call', url: 'https://example.com/action' };
6
+ const minimalValidMenuDtoWithUrl = {
7
+ type: 'only-url',
8
+ icon: 'https://example.com/icon.png',
9
+ label: 'Client Menu',
10
+ url: 'https://example.com/menu',
11
+ };
12
+ const minimalValidMenuDtoWithSubmenu = {
13
+ type: 'with-submenu',
14
+ icon: 'https://example.com/icon.png',
15
+ label: 'Client Menu',
16
+ submenu: [
17
+ { url: 'https://example.com/sub1', label: 'Submenu 1' },
18
+ { url: 'https://example.com/sub2', label: 'Submenu 2' },
19
+ ],
20
+ };
21
+ describe('ClientPanelDto full validation', () => {
22
+ test.each([
23
+ // Empty object is invalid (all optional)
24
+ ['invalid minimal empty object', {}, false],
25
+ // Tabs tests
26
+ ['invalid empty tabs object', { tabs: {} }, false],
27
+ ['invalid tabs with empty item array', { tabs: { item: [] } }, false],
28
+ ['valid tabs with one item', { tabs: { item: [{ label: 'Tab 1', url: 'https://example.com/tab1' }] } }, true],
29
+ // MoreActions tests
30
+ ['invalid empty moreActions object', { moreActions: {} }, false],
31
+ ['invalid moreActions with empty item array', { moreActions: { item: [] } }, false],
32
+ ['valid moreActions with one item', { moreActions: { item: [validAction] } }, true],
33
+ // Menu tests
34
+ ['valid menu with URL type', { menu: minimalValidMenuDtoWithUrl }, true],
35
+ ['valid menu with submenu type', { menu: minimalValidMenuDtoWithSubmenu }, true],
36
+ ['invalid menu missing required fields', { menu: { type: 'only-url' } }, false],
37
+ ['invalid menu unknown type', { menu: { type: 'unknown', icon: 'https://icon.png', label: 'Label', url: 'https://example.com' } }, false],
38
+ ['invalid menu with extra property', { menu: { ...minimalValidMenuDtoWithUrl, extra: 'not allowed' } }, false],
39
+ ['invalid menu with submenu on URL menu', { menu: { ...minimalValidMenuDtoWithUrl, submenu: [{ url: 'https://example.com', label: 'Sub' }] } }, false],
40
+ // Invalid extra property on root DTO
41
+ ['invalid extra property on root', { extra: 'not allowed' }, false],
42
+ ])('%s', async (_desc, input, expectedValid) => {
43
+ const errors = await (0, client_panel_validator_1.validateClientPanelDto)(input);
44
+ if (expectedValid) {
45
+ expect(errors.length).toBe(0);
46
+ }
47
+ else {
48
+ expect(errors.length).toBeGreaterThan(0);
49
+ }
50
+ });
51
+ });
@@ -0,0 +1,2 @@
1
+ import { ValidationError } from 'class-validator';
2
+ export declare function validateClientPanelDto(data: object): Promise<ValidationError[]>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateClientPanelDto = validateClientPanelDto;
4
+ const class_validator_1 = require("class-validator");
5
+ const class_transformer_1 = require("class-transformer");
6
+ const client_panel_dto_1 = require("../dtos/client-panel.dto");
7
+ async function validateClientPanelDto(data) {
8
+ const dto = (0, class_transformer_1.plainToInstance)(client_panel_dto_1.ClientPanelDto, data);
9
+ const errors = await (0, class_validator_1.validate)(dto, {
10
+ whitelist: true,
11
+ forbidNonWhitelisted: true,
12
+ });
13
+ return errors;
14
+ }
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("reflect-metadata");
4
+ const company_data_validator_1 = require("./company-data-validator");
5
+ const country_enum_1 = require("../enums/country.enum");
6
+ const language_enum_1 = require("../enums/language.enum");
7
+ describe('CompanyDataDto Validator', () => {
8
+ it('should return no errors for valid DTO', () => {
9
+ const validDto = {
10
+ id: '123',
11
+ name: 'Test Company',
12
+ emails: ['test@example.com'],
13
+ invoiceEmail: 'invoice@example.com',
14
+ privacyPolicyUrl: 'https://example.com/privacy',
15
+ defaultLanguage: language_enum_1.LanguageEnum.EN,
16
+ languages: [language_enum_1.LanguageEnum.EN, language_enum_1.LanguageEnum.FR],
17
+ telephone: '+12133734253',
18
+ address1: '123 Main St',
19
+ postcode: '12345',
20
+ city: 'Test City',
21
+ country: country_enum_1.CountryEnum.UNITED_STATES,
22
+ };
23
+ const errors = (0, company_data_validator_1.validateCompanyDataDto)(validDto);
24
+ expect(errors).toHaveLength(0);
25
+ });
26
+ it('should return error when required fields are missing', () => {
27
+ const invalidDto = {
28
+ // Missing required fields
29
+ };
30
+ const errors = (0, company_data_validator_1.validateCompanyDataDto)(invalidDto);
31
+ expect(errors.length).toBeGreaterThan(0);
32
+ expect(errors.some((e) => e.property === 'id')).toBe(true);
33
+ expect(errors.some((e) => e.property === 'name')).toBe(true);
34
+ });
35
+ it('should return error for invalid email format', () => {
36
+ const invalidDto = {
37
+ id: '123',
38
+ name: 'Test Company',
39
+ emails: ['not-an-email'],
40
+ invoiceEmail: 'invoice@example.com',
41
+ privacyPolicyUrl: 'http://example.com/privacy',
42
+ defaultLanguage: language_enum_1.LanguageEnum.EN,
43
+ languages: [language_enum_1.LanguageEnum.EN, language_enum_1.LanguageEnum.FR],
44
+ telephone: '+12133734253',
45
+ address1: '123 Main St',
46
+ postcode: '12345',
47
+ city: 'Test City',
48
+ country: country_enum_1.CountryEnum.UNITED_STATES,
49
+ };
50
+ const errors = (0, company_data_validator_1.validateCompanyDataDto)(invalidDto);
51
+ expect(errors.length).toBeGreaterThan(0);
52
+ expect(errors.some((e) => e.property === 'emails')).toBe(true);
53
+ });
54
+ it('should return error for invalid URL format', () => {
55
+ const invalidDto = {
56
+ id: '123',
57
+ name: 'Test Company',
58
+ emails: ['test@example.com'],
59
+ invoiceEmail: 'invoice@example.com',
60
+ privacyPolicyUrl: 'not-a-url',
61
+ defaultLanguage: language_enum_1.LanguageEnum.EN,
62
+ languages: [language_enum_1.LanguageEnum.EN, language_enum_1.LanguageEnum.FR],
63
+ telephone: '+12133734253',
64
+ address1: '123 Main St',
65
+ postcode: '12345',
66
+ city: 'Test City',
67
+ country: country_enum_1.CountryEnum.UNITED_STATES,
68
+ };
69
+ const errors = (0, company_data_validator_1.validateCompanyDataDto)(invalidDto);
70
+ expect(errors.length).toBeGreaterThan(0);
71
+ expect(errors.some((e) => e.property === 'privacyPolicyUrl')).toBe(true);
72
+ });
73
+ });