@aenode/prop 0.0.23 → 0.0.37

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 (193) hide show
  1. package/README.md +12 -16
  2. package/assets/favicon.svg +1 -1
  3. package/bin/prop.mjs +3 -0
  4. package/dist/index.d.ts +2 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +2 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/common/base-dto-class.d.ts +4 -0
  9. package/dist/lib/common/base-dto-class.d.ts.map +1 -0
  10. package/dist/lib/common/base-dto-class.js +7 -0
  11. package/dist/lib/common/base-dto-class.js.map +1 -0
  12. package/dist/lib/common/global-validation-pipe.d.ts +3 -0
  13. package/dist/lib/common/global-validation-pipe.d.ts.map +1 -0
  14. package/dist/lib/common/global-validation-pipe.js +34 -0
  15. package/dist/lib/common/global-validation-pipe.js.map +1 -0
  16. package/dist/lib/common/message.dto.d.ts +4 -0
  17. package/dist/lib/common/message.dto.d.ts.map +1 -0
  18. package/dist/lib/common/message.dto.js +11 -0
  19. package/dist/lib/common/message.dto.js.map +1 -0
  20. package/dist/lib/common/validation-error-response.dto.d.ts +10 -0
  21. package/dist/lib/common/validation-error-response.dto.d.ts.map +1 -0
  22. package/dist/lib/common/validation-error-response.dto.js +44 -0
  23. package/dist/lib/common/validation-error-response.dto.js.map +1 -0
  24. package/dist/lib/default-value-transformer.d.ts +9 -0
  25. package/dist/lib/default-value-transformer.d.ts.map +1 -0
  26. package/dist/lib/default-value-transformer.js +22 -0
  27. package/dist/lib/default-value-transformer.js.map +1 -0
  28. package/dist/lib/index.d.ts +27 -0
  29. package/dist/lib/index.d.ts.map +1 -0
  30. package/dist/lib/index.js +29 -0
  31. package/dist/lib/index.js.map +1 -0
  32. package/dist/lib/json-transformer.d.ts +2 -0
  33. package/dist/lib/json-transformer.d.ts.map +1 -0
  34. package/dist/lib/json-transformer.js +14 -0
  35. package/dist/lib/json-transformer.js.map +1 -0
  36. package/dist/lib/prop-boolean.d.ts +17 -0
  37. package/dist/lib/prop-boolean.d.ts.map +1 -0
  38. package/dist/lib/prop-boolean.js +39 -0
  39. package/dist/lib/prop-boolean.js.map +1 -0
  40. package/dist/lib/prop-common.d.ts +15 -0
  41. package/dist/lib/prop-common.d.ts.map +1 -0
  42. package/dist/lib/prop-common.js +43 -0
  43. package/dist/lib/prop-common.js.map +1 -0
  44. package/dist/lib/prop-date.d.ts +17 -0
  45. package/dist/lib/prop-date.d.ts.map +1 -0
  46. package/dist/lib/prop-date.js +41 -0
  47. package/dist/lib/prop-date.js.map +1 -0
  48. package/dist/lib/prop-enum.d.ts +17 -0
  49. package/dist/lib/prop-enum.d.ts.map +1 -0
  50. package/dist/lib/prop-enum.js +36 -0
  51. package/dist/lib/prop-enum.js.map +1 -0
  52. package/dist/lib/prop-number.d.ts +19 -0
  53. package/dist/lib/prop-number.d.ts.map +1 -0
  54. package/dist/lib/prop-number.js +62 -0
  55. package/dist/lib/prop-number.js.map +1 -0
  56. package/dist/lib/prop-object-validation.d.ts +9 -0
  57. package/dist/lib/prop-object-validation.d.ts.map +1 -0
  58. package/dist/lib/prop-object-validation.js +24 -0
  59. package/dist/lib/prop-object-validation.js.map +1 -0
  60. package/dist/lib/prop-object.d.ts +18 -0
  61. package/dist/lib/prop-object.d.ts.map +1 -0
  62. package/dist/lib/prop-object.js +53 -0
  63. package/dist/lib/prop-object.js.map +1 -0
  64. package/dist/lib/prop-options.d.ts +67 -0
  65. package/dist/lib/prop-options.d.ts.map +1 -0
  66. package/dist/lib/prop-options.js +3 -0
  67. package/dist/lib/prop-options.js.map +1 -0
  68. package/dist/lib/prop-string.d.ts +19 -0
  69. package/dist/lib/prop-string.d.ts.map +1 -0
  70. package/dist/lib/prop-string.js +112 -0
  71. package/dist/lib/prop-string.js.map +1 -0
  72. package/dist/lib/prop-validation.d.ts +10 -0
  73. package/dist/lib/prop-validation.d.ts.map +1 -0
  74. package/dist/lib/prop-validation.js +75 -0
  75. package/dist/lib/prop-validation.js.map +1 -0
  76. package/dist/lib/prop.d.ts +3 -0
  77. package/dist/lib/prop.d.ts.map +1 -0
  78. package/dist/lib/prop.js +13 -0
  79. package/dist/lib/prop.js.map +1 -0
  80. package/dist/lib/test-helpers.d.ts +3 -0
  81. package/dist/lib/test-helpers.d.ts.map +1 -0
  82. package/dist/lib/test-helpers.js +19 -0
  83. package/dist/lib/test-helpers.js.map +1 -0
  84. package/dist/lib/to-api-property-optionts.d.ts +4 -0
  85. package/dist/lib/to-api-property-optionts.d.ts.map +1 -0
  86. package/dist/lib/to-api-property-optionts.js +29 -0
  87. package/dist/lib/to-api-property-optionts.js.map +1 -0
  88. package/dist/lib/validators/index.d.ts +8 -0
  89. package/dist/lib/validators/index.d.ts.map +1 -0
  90. package/dist/lib/validators/index.js +10 -0
  91. package/dist/lib/validators/index.js.map +1 -0
  92. package/dist/lib/validators/is-relative-path.d.ts +3 -0
  93. package/dist/lib/validators/is-relative-path.d.ts.map +1 -0
  94. package/dist/lib/validators/is-relative-path.js +26 -0
  95. package/dist/lib/validators/is-relative-path.js.map +1 -0
  96. package/dist/lib/validators/less-than.d.ts +3 -0
  97. package/dist/lib/validators/less-than.d.ts.map +1 -0
  98. package/dist/lib/validators/less-than.js +26 -0
  99. package/dist/lib/validators/less-than.js.map +1 -0
  100. package/dist/lib/validators/max-properties.d.ts +3 -0
  101. package/dist/lib/validators/max-properties.d.ts.map +1 -0
  102. package/dist/lib/validators/max-properties.js +29 -0
  103. package/dist/lib/validators/max-properties.js.map +1 -0
  104. package/dist/lib/validators/min-properties.d.ts +3 -0
  105. package/dist/lib/validators/min-properties.d.ts.map +1 -0
  106. package/dist/lib/validators/min-properties.js +29 -0
  107. package/dist/lib/validators/min-properties.js.map +1 -0
  108. package/dist/lib/validators/more-than.d.ts +3 -0
  109. package/dist/lib/validators/more-than.d.ts.map +1 -0
  110. package/dist/lib/validators/more-than.js +26 -0
  111. package/dist/lib/validators/more-than.js.map +1 -0
  112. package/dist/lib/validators/not-with.d.ts +2 -0
  113. package/dist/lib/validators/not-with.d.ts.map +1 -0
  114. package/dist/lib/validators/not-with.js +25 -0
  115. package/dist/lib/validators/not-with.js.map +1 -0
  116. package/dist/lib/validators/not-without.d.ts +2 -0
  117. package/dist/lib/validators/not-without.d.ts.map +1 -0
  118. package/dist/lib/validators/not-without.js +25 -0
  119. package/dist/lib/validators/not-without.js.map +1 -0
  120. package/dist/main.d.ts +3 -0
  121. package/dist/main.d.ts.map +1 -0
  122. package/dist/main.js +4 -0
  123. package/dist/main.js.map +1 -0
  124. package/package.json +24 -41
  125. package/dist/graphql/filter-dtos.d.ts +0 -69
  126. package/dist/graphql/filter-dtos.d.ts.map +0 -1
  127. package/dist/graphql/filter-dtos.js +0 -370
  128. package/dist/graphql/filter-dtos.js.map +0 -1
  129. package/dist/graphql/index.d.ts +0 -10
  130. package/dist/graphql/index.d.ts.map +0 -1
  131. package/dist/graphql/index.js +0 -12
  132. package/dist/graphql/index.js.map +0 -1
  133. package/dist/graphql/input-type.d.ts +0 -2
  134. package/dist/graphql/input-type.d.ts.map +0 -1
  135. package/dist/graphql/input-type.js +0 -8
  136. package/dist/graphql/input-type.js.map +0 -1
  137. package/dist/graphql/object-type.d.ts +0 -2
  138. package/dist/graphql/object-type.d.ts.map +0 -1
  139. package/dist/graphql/object-type.js +0 -8
  140. package/dist/graphql/object-type.js.map +0 -1
  141. package/dist/graphql/prop-order-count.d.ts +0 -2
  142. package/dist/graphql/prop-order-count.d.ts.map +0 -1
  143. package/dist/graphql/prop-order-count.js +0 -11
  144. package/dist/graphql/prop-order-count.js.map +0 -1
  145. package/dist/graphql/prop-order.d.ts +0 -2
  146. package/dist/graphql/prop-order.d.ts.map +0 -1
  147. package/dist/graphql/prop-order.js +0 -11
  148. package/dist/graphql/prop-order.js.map +0 -1
  149. package/dist/graphql/prop.d.ts +0 -9
  150. package/dist/graphql/prop.d.ts.map +0 -1
  151. package/dist/graphql/prop.js +0 -38
  152. package/dist/graphql/prop.js.map +0 -1
  153. package/dist/graphql/register-enums.d.ts +0 -2
  154. package/dist/graphql/register-enums.d.ts.map +0 -1
  155. package/dist/graphql/register-enums.js +0 -11
  156. package/dist/graphql/register-enums.js.map +0 -1
  157. package/dist/graphql/sort-count.dto.d.ts +0 -5
  158. package/dist/graphql/sort-count.dto.d.ts.map +0 -1
  159. package/dist/graphql/sort-count.dto.js +0 -22
  160. package/dist/graphql/sort-count.dto.js.map +0 -1
  161. package/dist/peers.d.ts +0 -2
  162. package/dist/peers.d.ts.map +0 -1
  163. package/dist/peers.js +0 -3
  164. package/dist/peers.js.map +0 -1
  165. package/dist/restapi/filter-dtos.d.ts +0 -44
  166. package/dist/restapi/filter-dtos.d.ts.map +0 -1
  167. package/dist/restapi/filter-dtos.js +0 -202
  168. package/dist/restapi/filter-dtos.js.map +0 -1
  169. package/dist/restapi/index.d.ts +0 -7
  170. package/dist/restapi/index.d.ts.map +0 -1
  171. package/dist/restapi/index.js +0 -9
  172. package/dist/restapi/index.js.map +0 -1
  173. package/dist/restapi/prop-order-count.d.ts +0 -2
  174. package/dist/restapi/prop-order-count.d.ts.map +0 -1
  175. package/dist/restapi/prop-order-count.js +0 -11
  176. package/dist/restapi/prop-order-count.js.map +0 -1
  177. package/dist/restapi/prop-order.d.ts +0 -2
  178. package/dist/restapi/prop-order.d.ts.map +0 -1
  179. package/dist/restapi/prop-order.js +0 -11
  180. package/dist/restapi/prop-order.js.map +0 -1
  181. package/dist/restapi/prop.d.ts +0 -3
  182. package/dist/restapi/prop.d.ts.map +0 -1
  183. package/dist/restapi/prop.js +0 -11
  184. package/dist/restapi/prop.js.map +0 -1
  185. package/dist/restapi/sort-count.dto.d.ts +0 -5
  186. package/dist/restapi/sort-count.dto.d.ts.map +0 -1
  187. package/dist/restapi/sort-count.dto.js +0 -18
  188. package/dist/restapi/sort-count.dto.js.map +0 -1
  189. package/dist/restapi/to-api-property-options.d.ts +0 -4
  190. package/dist/restapi/to-api-property-options.d.ts.map +0 -1
  191. package/dist/restapi/to-api-property-options.js +0 -37
  192. package/dist/restapi/to-api-property-options.js.map +0 -1
  193. package/license +0 -70
@@ -0,0 +1,17 @@
1
+ import { type ValidationOptions } from '@aenode/nest/validator';
2
+ import type { EnumValidationOptions } from './prop-options.js';
3
+ /**
4
+ * Enum property validation decorator
5
+ *
6
+ * @param options enum validation options
7
+ * @returns a property decorator
8
+ */
9
+ export declare function PropEnum(options: EnumValidationOptions): PropertyDecorator;
10
+ /**
11
+ * Enum property validation decorator
12
+ *
13
+ * @param options enum validation options
14
+ * @returns a property decorator
15
+ */
16
+ export declare function __PropEnum(options: EnumValidationOptions, validationOptions?: ValidationOptions): PropertyDecorator;
17
+ //# sourceMappingURL=prop-enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-enum.d.ts","sourceRoot":"","sources":["../../src/lib/prop-enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAgB,MAAM,wBAAwB,CAAC;AAE9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,CAI1E;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,qBAAqB,EAC9B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,iBAAiB,CAoBnB"}
@@ -0,0 +1,36 @@
1
+ import { IsEnum, IsIn } from '@aenode/nest/validator';
2
+ import { __PropCommon } from './prop-common.js';
3
+ /**
4
+ * Enum property validation decorator
5
+ *
6
+ * @param options enum validation options
7
+ * @returns a property decorator
8
+ */ export function PropEnum(options) {
9
+ return (...args)=>{
10
+ __PropEnum(options)(...args);
11
+ };
12
+ }
13
+ /**
14
+ * Enum property validation decorator
15
+ *
16
+ * @param options enum validation options
17
+ * @returns a property decorator
18
+ */ export function __PropEnum(options, validationOptions) {
19
+ return (...args)=>{
20
+ const inferedType = Reflect.getMetadata('design:type', ...args);
21
+ validationOptions ??= {
22
+ each: inferedType === Array,
23
+ groups: options?.groups
24
+ };
25
+ __PropCommon(options, validationOptions)(...args);
26
+ if (options.enum) {
27
+ IsEnum(options.enum, validationOptions)(...args);
28
+ } else if (options.isIn) {
29
+ IsIn(options.isIn, validationOptions)(...args);
30
+ } else {
31
+ throw new Error(`${args[0].constructor.name}.${args[1].toString()} should provide enum or isIn option.`);
32
+ }
33
+ };
34
+ }
35
+
36
+ //# sourceMappingURL=prop-enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/prop-enum.ts"],"sourcesContent":["import { type ValidationOptions, IsEnum, IsIn } from '@aenode/nest/validator';\nimport { __PropCommon } from './prop-common.js';\nimport type { EnumValidationOptions } from './prop-options.js';\n\n/**\n * Enum property validation decorator\n *\n * @param options enum validation options\n * @returns a property decorator\n */\nexport function PropEnum(options: EnumValidationOptions): PropertyDecorator {\n return (...args) => {\n __PropEnum(options)(...args);\n };\n}\n\n/**\n * Enum property validation decorator\n *\n * @param options enum validation options\n * @returns a property decorator\n */\nexport function __PropEnum(\n options: EnumValidationOptions,\n validationOptions?: ValidationOptions,\n): PropertyDecorator {\n return (...args) => {\n const inferedType = Reflect.getMetadata('design:type', ...args);\n validationOptions ??= {\n each: inferedType === Array,\n groups: options?.groups,\n };\n\n __PropCommon(options, validationOptions)(...args);\n\n if (options.enum) {\n IsEnum(options.enum, validationOptions)(...args);\n } else if (options.isIn) {\n IsIn(options.isIn, validationOptions)(...args);\n } else {\n throw new Error(\n `${args[0].constructor.name}.${args[1].toString()} should provide enum or isIn option.`,\n );\n }\n };\n}\n"],"names":["IsEnum","IsIn","__PropCommon","PropEnum","options","args","__PropEnum","validationOptions","inferedType","Reflect","getMetadata","each","Array","groups","enum","isIn","Error","name","toString"],"mappings":"AAAA,SAAiCA,MAAM,EAAEC,IAAI,QAAQ,yBAAyB;AAC9E,SAASC,YAAY,QAAQ,mBAAmB;AAGhD;;;;;CAKC,GACD,OAAO,SAASC,SAASC,OAA8B;IACrD,OAAO,CAAC,GAAGC;QACTC,WAAWF,YAAYC;IACzB;AACF;AAEA;;;;;CAKC,GACD,OAAO,SAASC,WACdF,OAA8B,EAC9BG,iBAAqC;IAErC,OAAO,CAAC,GAAGF;QACT,MAAMG,cAAcC,QAAQC,WAAW,CAAC,kBAAkBL;QAC1DE,sBAAsB;YACpBI,MAAMH,gBAAgBI;YACtBC,QAAQT,SAASS;QACnB;QAEAX,aAAaE,SAASG,sBAAsBF;QAE5C,IAAID,QAAQU,IAAI,EAAE;YAChBd,OAAOI,QAAQU,IAAI,EAAEP,sBAAsBF;QAC7C,OAAO,IAAID,QAAQW,IAAI,EAAE;YACvBd,KAAKG,QAAQW,IAAI,EAAER,sBAAsBF;QAC3C,OAAO;YACL,MAAM,IAAIW,MACR,GAAGX,IAAI,CAAC,EAAE,CAAC,WAAW,CAACY,IAAI,CAAC,CAAC,EAAEZ,IAAI,CAAC,EAAE,CAACa,QAAQ,GAAG,oCAAoC,CAAC;QAE3F;IACF;AACF"}
@@ -0,0 +1,19 @@
1
+ import { type ValidationOptions } from '@aenode/nest/validator';
2
+ import type { NumberFormat, NumberValidationOptions } from './prop-options.js';
3
+ /**
4
+ * Number property format validation decorator
5
+ *
6
+ * @param format number format {@link NumberFormat}
7
+ * @param validationOptions class-validation validation options.
8
+ * @returns a property decorator
9
+ */
10
+ export declare function __PropNumberFormat(format: NumberFormat, validationOptions: ValidationOptions): PropertyDecorator;
11
+ /**
12
+ * Number property validation decorator
13
+ *
14
+ * @param options number validation options
15
+ * @param validationOptions class-validator validation options
16
+ * @returns a property decorator
17
+ */
18
+ export declare function __PropNumber(options: NumberValidationOptions, validationOptions?: ValidationOptions): PropertyDecorator;
19
+ //# sourceMappingURL=prop-number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-number.d.ts","sourceRoot":"","sources":["../../src/lib/prop-number.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,iBAAiB,EAKvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE/E;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,iBAAiB,EAAE,iBAAiB,GACnC,iBAAiB,CAkBnB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,uBAAuB,EAChC,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,iBAAiB,CA0BnB"}
@@ -0,0 +1,62 @@
1
+ import { Transform } from '@aenode/nest/transformer';
2
+ import { IsInt, IsNumber, Max, Min } from '@aenode/nest/validator';
3
+ import { __PropCommon } from './prop-common.js';
4
+ /**
5
+ * Number property format validation decorator
6
+ *
7
+ * @param format number format {@link NumberFormat}
8
+ * @param validationOptions class-validation validation options.
9
+ * @returns a property decorator
10
+ */ export function __PropNumberFormat(format, validationOptions) {
11
+ return (...args)=>{
12
+ switch(format){
13
+ case 'integer':
14
+ {
15
+ IsInt(validationOptions)(...args);
16
+ break;
17
+ }
18
+ case 'positive':
19
+ {
20
+ Min(0, validationOptions)(...args);
21
+ break;
22
+ }
23
+ case 'percent':
24
+ {
25
+ Min(0, validationOptions)(...args);
26
+ Max(100, validationOptions)(...args);
27
+ break;
28
+ }
29
+ }
30
+ };
31
+ }
32
+ /**
33
+ * Number property validation decorator
34
+ *
35
+ * @param options number validation options
36
+ * @param validationOptions class-validator validation options
37
+ * @returns a property decorator
38
+ */ export function __PropNumber(options, validationOptions) {
39
+ return (...args)=>{
40
+ const inferedType = Reflect.getMetadata('design:type', ...args);
41
+ validationOptions ??= {
42
+ each: inferedType === Array,
43
+ groups: options?.groups
44
+ };
45
+ const { min, max, format } = options;
46
+ __PropCommon(options, validationOptions)(...args);
47
+ Transform(({ value })=>{
48
+ if (typeof value === 'string') {
49
+ return parseFloat(value);
50
+ }
51
+ return value;
52
+ })(...args);
53
+ IsNumber(undefined, validationOptions)(...args);
54
+ if (min !== undefined) Min(min, validationOptions)(...args);
55
+ if (max !== undefined) Max(max, validationOptions)(...args);
56
+ if (format) {
57
+ __PropNumberFormat(format, validationOptions)(...args);
58
+ }
59
+ };
60
+ }
61
+
62
+ //# sourceMappingURL=prop-number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/prop-number.ts"],"sourcesContent":["import { Transform } from '@aenode/nest/transformer';\nimport {\n type ValidationOptions,\n IsInt,\n IsNumber,\n Max,\n Min,\n} from '@aenode/nest/validator';\nimport { __PropCommon } from './prop-common.js';\nimport type { NumberFormat, NumberValidationOptions } from './prop-options.js';\n\n/**\n * Number property format validation decorator\n *\n * @param format number format {@link NumberFormat}\n * @param validationOptions class-validation validation options.\n * @returns a property decorator\n */\nexport function __PropNumberFormat(\n format: NumberFormat,\n validationOptions: ValidationOptions,\n): PropertyDecorator {\n return (...args) => {\n switch (format) {\n case 'integer': {\n IsInt(validationOptions)(...args);\n break;\n }\n case 'positive': {\n Min(0, validationOptions)(...args);\n break;\n }\n case 'percent': {\n Min(0, validationOptions)(...args);\n Max(100, validationOptions)(...args);\n break;\n }\n }\n };\n}\n\n/**\n * Number property validation decorator\n *\n * @param options number validation options\n * @param validationOptions class-validator validation options\n * @returns a property decorator\n */\nexport function __PropNumber(\n options: NumberValidationOptions,\n validationOptions?: ValidationOptions,\n): PropertyDecorator {\n return (...args) => {\n const inferedType = Reflect.getMetadata('design:type', ...args);\n validationOptions ??= {\n each: inferedType === Array,\n groups: options?.groups,\n };\n\n const { min, max, format } = options;\n\n __PropCommon(options, validationOptions)(...args);\n Transform(({ value }) => {\n if (typeof value === 'string') {\n return parseFloat(value);\n }\n return value;\n })(...args);\n IsNumber(undefined, validationOptions)(...args);\n\n if (min !== undefined) Min(min, validationOptions)(...args);\n if (max !== undefined) Max(max, validationOptions)(...args);\n\n if (format) {\n __PropNumberFormat(format, validationOptions)(...args);\n }\n };\n}\n"],"names":["Transform","IsInt","IsNumber","Max","Min","__PropCommon","__PropNumberFormat","format","validationOptions","args","__PropNumber","options","inferedType","Reflect","getMetadata","each","Array","groups","min","max","value","parseFloat","undefined"],"mappings":"AAAA,SAASA,SAAS,QAAQ,2BAA2B;AACrD,SAEEC,KAAK,EACLC,QAAQ,EACRC,GAAG,EACHC,GAAG,QACE,yBAAyB;AAChC,SAASC,YAAY,QAAQ,mBAAmB;AAGhD;;;;;;CAMC,GACD,OAAO,SAASC,mBACdC,MAAoB,EACpBC,iBAAoC;IAEpC,OAAO,CAAC,GAAGC;QACT,OAAQF;YACN,KAAK;gBAAW;oBACdN,MAAMO,sBAAsBC;oBAC5B;gBACF;YACA,KAAK;gBAAY;oBACfL,IAAI,GAAGI,sBAAsBC;oBAC7B;gBACF;YACA,KAAK;gBAAW;oBACdL,IAAI,GAAGI,sBAAsBC;oBAC7BN,IAAI,KAAKK,sBAAsBC;oBAC/B;gBACF;QACF;IACF;AACF;AAEA;;;;;;CAMC,GACD,OAAO,SAASC,aACdC,OAAgC,EAChCH,iBAAqC;IAErC,OAAO,CAAC,GAAGC;QACT,MAAMG,cAAcC,QAAQC,WAAW,CAAC,kBAAkBL;QAC1DD,sBAAsB;YACpBO,MAAMH,gBAAgBI;YACtBC,QAAQN,SAASM;QACnB;QAEA,MAAM,EAAEC,GAAG,EAAEC,GAAG,EAAEZ,MAAM,EAAE,GAAGI;QAE7BN,aAAaM,SAASH,sBAAsBC;QAC5CT,UAAU,CAAC,EAAEoB,KAAK,EAAE;YAClB,IAAI,OAAOA,UAAU,UAAU;gBAC7B,OAAOC,WAAWD;YACpB;YACA,OAAOA;QACT,MAAMX;QACNP,SAASoB,WAAWd,sBAAsBC;QAE1C,IAAIS,QAAQI,WAAWlB,IAAIc,KAAKV,sBAAsBC;QACtD,IAAIU,QAAQG,WAAWnB,IAAIgB,KAAKX,sBAAsBC;QAEtD,IAAIF,QAAQ;YACVD,mBAAmBC,QAAQC,sBAAsBC;QACnD;IACF;AACF"}
@@ -0,0 +1,9 @@
1
+ import type { ObjectValidationOptions } from './prop-options.js';
2
+ /**
3
+ * Object property validation decorator
4
+ *
5
+ * @param options object validation options {@link ObjectValidationOptions}
6
+ * @returns a property decorator
7
+ */
8
+ export declare function PropObjectValidation(options: ObjectValidationOptions & Required<Pick<ObjectValidationOptions, 'type'>>): PropertyDecorator;
9
+ //# sourceMappingURL=prop-object-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-object-validation.d.ts","sourceRoot":"","sources":["../../src/lib/prop-object-validation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,uBAAuB,GAC9B,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,GAChD,iBAAiB,CAcnB"}
@@ -0,0 +1,24 @@
1
+ import { Type } from '@aenode/nest/transformer';
2
+ import { IsObject, ValidateNested } from '@aenode/nest/validator';
3
+ import { JsonTransformer } from './json-transformer.js';
4
+ import { __PropCommon } from './prop-common.js';
5
+ /**
6
+ * Object property validation decorator
7
+ *
8
+ * @param options object validation options {@link ObjectValidationOptions}
9
+ * @returns a property decorator
10
+ */ export function PropObjectValidation(options) {
11
+ return (...args)=>{
12
+ const validationOptions = {
13
+ each: options.isArray,
14
+ groups: options?.groups
15
+ };
16
+ __PropCommon(options, validationOptions)(...args);
17
+ JsonTransformer()(...args);
18
+ IsObject(validationOptions)(...args);
19
+ Type(options.type)(...args);
20
+ ValidateNested(validationOptions)(...args);
21
+ };
22
+ }
23
+
24
+ //# sourceMappingURL=prop-object-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/prop-object-validation.ts"],"sourcesContent":["import { Type } from '@aenode/nest/transformer';\nimport { IsObject, ValidateNested } from '@aenode/nest/validator';\nimport { JsonTransformer } from './json-transformer.js';\nimport { __PropCommon } from './prop-common.js';\nimport type { ObjectValidationOptions } from './prop-options.js';\n\n/**\n * Object property validation decorator\n *\n * @param options object validation options {@link ObjectValidationOptions}\n * @returns a property decorator\n */\nexport function PropObjectValidation(\n options: ObjectValidationOptions &\n Required<Pick<ObjectValidationOptions, 'type'>>,\n): PropertyDecorator {\n return (...args) => {\n const validationOptions = {\n each: options.isArray,\n groups: options?.groups,\n };\n\n __PropCommon(options, validationOptions)(...args);\n\n JsonTransformer()(...args);\n IsObject(validationOptions)(...args);\n Type(options.type)(...args);\n ValidateNested(validationOptions)(...args);\n };\n}\n"],"names":["Type","IsObject","ValidateNested","JsonTransformer","__PropCommon","PropObjectValidation","options","args","validationOptions","each","isArray","groups","type"],"mappings":"AAAA,SAASA,IAAI,QAAQ,2BAA2B;AAChD,SAASC,QAAQ,EAAEC,cAAc,QAAQ,yBAAyB;AAClE,SAASC,eAAe,QAAQ,wBAAwB;AACxD,SAASC,YAAY,QAAQ,mBAAmB;AAGhD;;;;;CAKC,GACD,OAAO,SAASC,qBACdC,OACiD;IAEjD,OAAO,CAAC,GAAGC;QACT,MAAMC,oBAAoB;YACxBC,MAAMH,QAAQI,OAAO;YACrBC,QAAQL,SAASK;QACnB;QAEAP,aAAaE,SAASE,sBAAsBD;QAE5CJ,qBAAqBI;QACrBN,SAASO,sBAAsBD;QAC/BP,KAAKM,QAAQM,IAAI,KAAKL;QACtBL,eAAeM,sBAAsBD;IACvC;AACF"}
@@ -0,0 +1,18 @@
1
+ import { type ValidationOptions } from '@aenode/nest/validator';
2
+ import type { ObjectValidationOptions } from './prop-options.js';
3
+ /**
4
+ * Object property validation decorator
5
+ *
6
+ * @param options object validation options
7
+ * @returns a property decorator
8
+ */
9
+ export declare function PropObject(options: ObjectValidationOptions & Required<Pick<ObjectValidationOptions, 'type'>>): PropertyDecorator;
10
+ /**
11
+ * Object property validation decorator
12
+ *
13
+ * @param options object validation options {@link ObjectValidationOptions}
14
+ * @param validationOptions class-validator validation options
15
+ * @returns a validatino decorator
16
+ */
17
+ export declare function __PropObject(options?: ObjectValidationOptions, validationOptions?: ValidationOptions): PropertyDecorator;
18
+ //# sourceMappingURL=prop-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-object.d.ts","sourceRoot":"","sources":["../../src/lib/prop-object.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,iBAAiB,EAGvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAIjE;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,uBAAuB,GAC9B,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,GAChD,iBAAiB,CAInB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,CAAC,EAAE,uBAAuB,EACjC,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,iBAAiB,CAkCnB"}
@@ -0,0 +1,53 @@
1
+ import { Type } from '@aenode/nest/transformer';
2
+ import { IsObject, ValidateNested } from '@aenode/nest/validator';
3
+ import { JsonTransformer } from './json-transformer.js';
4
+ import { __PropCommon } from './prop-common.js';
5
+ import { MaxProperties } from './validators/max-properties.js';
6
+ import { MinProperties } from './validators/min-properties.js';
7
+ /**
8
+ * Object property validation decorator
9
+ *
10
+ * @param options object validation options
11
+ * @returns a property decorator
12
+ */ export function PropObject(options) {
13
+ return (...args)=>{
14
+ __PropObject(options)(...args);
15
+ };
16
+ }
17
+ /**
18
+ * Object property validation decorator
19
+ *
20
+ * @param options object validation options {@link ObjectValidationOptions}
21
+ * @param validationOptions class-validator validation options
22
+ * @returns a validatino decorator
23
+ */ export function __PropObject(options, validationOptions) {
24
+ return (...args)=>{
25
+ options ??= {};
26
+ const inferedType = Reflect.getMetadata('design:type', ...args);
27
+ const isArrayType = inferedType === Array;
28
+ if (isArrayType) {
29
+ if (!options.type) {
30
+ throw new Error('Could not resolve the object type');
31
+ }
32
+ } else {
33
+ options.type = ()=>inferedType;
34
+ }
35
+ validationOptions ??= {
36
+ each: isArrayType,
37
+ groups: options?.groups
38
+ };
39
+ if (options.minProperties !== undefined) {
40
+ MinProperties(options.minProperties, validationOptions)(...args);
41
+ }
42
+ if (options.maxProperties !== undefined) {
43
+ MaxProperties(options.maxProperties, validationOptions)(...args);
44
+ }
45
+ __PropCommon(options, validationOptions)(...args);
46
+ JsonTransformer()(...args);
47
+ IsObject(validationOptions)(...args);
48
+ Type(options.type)(...args);
49
+ ValidateNested(validationOptions)(...args);
50
+ };
51
+ }
52
+
53
+ //# sourceMappingURL=prop-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/prop-object.ts"],"sourcesContent":["import { Type } from '@aenode/nest/transformer';\nimport {\n type ValidationOptions,\n IsObject,\n ValidateNested,\n} from '@aenode/nest/validator';\nimport { JsonTransformer } from './json-transformer.js';\nimport { __PropCommon } from './prop-common.js';\nimport type { ObjectValidationOptions } from './prop-options.js';\nimport { MaxProperties } from './validators/max-properties.js';\nimport { MinProperties } from './validators/min-properties.js';\n\n/**\n * Object property validation decorator\n *\n * @param options object validation options\n * @returns a property decorator\n */\nexport function PropObject(\n options: ObjectValidationOptions &\n Required<Pick<ObjectValidationOptions, 'type'>>,\n): PropertyDecorator {\n return (...args) => {\n __PropObject(options)(...args);\n };\n}\n\n/**\n * Object property validation decorator\n *\n * @param options object validation options {@link ObjectValidationOptions}\n * @param validationOptions class-validator validation options\n * @returns a validatino decorator\n */\nexport function __PropObject(\n options?: ObjectValidationOptions,\n validationOptions?: ValidationOptions,\n): PropertyDecorator {\n return (...args) => {\n options ??= {};\n const inferedType = Reflect.getMetadata('design:type', ...args);\n const isArrayType = inferedType === Array;\n\n if (isArrayType) {\n if (!options.type) {\n throw new Error('Could not resolve the object type');\n }\n } else {\n options.type = () => inferedType;\n }\n\n validationOptions ??= {\n each: isArrayType,\n groups: options?.groups,\n };\n\n if (options.minProperties !== undefined) {\n MinProperties(options.minProperties, validationOptions)(...args);\n }\n\n if (options.maxProperties !== undefined) {\n MaxProperties(options.maxProperties, validationOptions)(...args);\n }\n\n __PropCommon(options, validationOptions)(...args);\n\n JsonTransformer()(...args);\n IsObject(validationOptions)(...args);\n Type(options.type)(...args);\n ValidateNested(validationOptions)(...args);\n };\n}\n"],"names":["Type","IsObject","ValidateNested","JsonTransformer","__PropCommon","MaxProperties","MinProperties","PropObject","options","args","__PropObject","validationOptions","inferedType","Reflect","getMetadata","isArrayType","Array","type","Error","each","groups","minProperties","undefined","maxProperties"],"mappings":"AAAA,SAASA,IAAI,QAAQ,2BAA2B;AAChD,SAEEC,QAAQ,EACRC,cAAc,QACT,yBAAyB;AAChC,SAASC,eAAe,QAAQ,wBAAwB;AACxD,SAASC,YAAY,QAAQ,mBAAmB;AAEhD,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,SAASC,aAAa,QAAQ,iCAAiC;AAE/D;;;;;CAKC,GACD,OAAO,SAASC,WACdC,OACiD;IAEjD,OAAO,CAAC,GAAGC;QACTC,aAAaF,YAAYC;IAC3B;AACF;AAEA;;;;;;CAMC,GACD,OAAO,SAASC,aACdF,OAAiC,EACjCG,iBAAqC;IAErC,OAAO,CAAC,GAAGF;QACTD,YAAY,CAAC;QACb,MAAMI,cAAcC,QAAQC,WAAW,CAAC,kBAAkBL;QAC1D,MAAMM,cAAcH,gBAAgBI;QAEpC,IAAID,aAAa;YACf,IAAI,CAACP,QAAQS,IAAI,EAAE;gBACjB,MAAM,IAAIC,MAAM;YAClB;QACF,OAAO;YACLV,QAAQS,IAAI,GAAG,IAAML;QACvB;QAEAD,sBAAsB;YACpBQ,MAAMJ;YACNK,QAAQZ,SAASY;QACnB;QAEA,IAAIZ,QAAQa,aAAa,KAAKC,WAAW;YACvChB,cAAcE,QAAQa,aAAa,EAAEV,sBAAsBF;QAC7D;QAEA,IAAID,QAAQe,aAAa,KAAKD,WAAW;YACvCjB,cAAcG,QAAQe,aAAa,EAAEZ,sBAAsBF;QAC7D;QAEAL,aAAaI,SAASG,sBAAsBF;QAE5CN,qBAAqBM;QACrBR,SAASU,sBAAsBF;QAC/BT,KAAKQ,QAAQS,IAAI,KAAKR;QACtBP,eAAeS,sBAAsBF;IACvC;AACF"}
@@ -0,0 +1,67 @@
1
+ import type { ApiPropertyOptions } from '@aenode/nest/swagger';
2
+ import type { ClassConstructor } from '@aenode/nest/transformer';
3
+ export type StringFormat = 'email' | 'password' | 'uuid' | 'uuid4' | 'uuid7' | 'name' | 'ean' | 'json' | 'url' | 'data-uri' | 'path' | 'jwt';
4
+ export type NumberFormat = 'integer' | 'positive' | 'percent';
5
+ export type PropFormat = StringFormat | NumberFormat;
6
+ export type PropType = StringConstructor | NumberConstructor | BooleanConstructor | DateConstructor | (() => ClassConstructor<unknown>);
7
+ export type CommonValidationOptions = {
8
+ type?: PropType;
9
+ required?: boolean;
10
+ groups?: string[];
11
+ maxItems?: number;
12
+ minItems?: number;
13
+ defaultValue?: unknown;
14
+ };
15
+ export type StringValidationOptions = {
16
+ format?: StringFormat;
17
+ minLength?: number;
18
+ maxLength?: number;
19
+ isIn?: string[];
20
+ isNotIn?: string[];
21
+ } & CommonValidationOptions;
22
+ export type NumberValidationOptions = {
23
+ format?: NumberFormat;
24
+ min?: number;
25
+ max?: number;
26
+ isIn?: number[];
27
+ isNotIn?: number[];
28
+ } & CommonValidationOptions;
29
+ export type BooleanValidationOptions = {} & CommonValidationOptions;
30
+ export type DateType = Date | (() => Date);
31
+ export type DateValidationOptions = {
32
+ type?: Date;
33
+ minDate?: DateType;
34
+ maxDate?: DateType;
35
+ isIn?: DateType[];
36
+ isNotIn?: DateType[];
37
+ } & CommonValidationOptions;
38
+ export type EnumValidationOptions = {
39
+ enum?: object;
40
+ isIn?: (string | number)[];
41
+ } & CommonValidationOptions;
42
+ export type ObjectValidationOptions = {
43
+ type?: () => ClassConstructor<unknown>;
44
+ isArray?: boolean;
45
+ minProperties?: number;
46
+ maxProperties?: number;
47
+ } & CommonValidationOptions;
48
+ export type PropValidationOptions = {
49
+ type?: PropType;
50
+ enum?: object;
51
+ format?: PropFormat;
52
+ min?: number;
53
+ max?: number;
54
+ minLength?: number;
55
+ maxLength?: number;
56
+ minDate?: DateType;
57
+ maxDate?: DateType;
58
+ isIn?: unknown[];
59
+ isNotIn?: unknown[];
60
+ notWith?: string[];
61
+ notWithout?: string[];
62
+ moreThan?: string[];
63
+ lessThan?: string[];
64
+ } & CommonValidationOptions;
65
+ export type PropObjectOptions = ObjectValidationOptions & Required<Pick<ObjectValidationOptions, 'type'>> & Omit<ApiPropertyOptions, 'type' | 'required' | 'nullable' | 'format'>;
66
+ export type PropOptions = PropValidationOptions & Omit<ApiPropertyOptions, 'type' | 'required' | 'nullable' | 'format'>;
67
+ //# sourceMappingURL=prop-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-options.d.ts","sourceRoot":"","sources":["../../src/lib/prop-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=prop-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/prop-options.ts"],"sourcesContent":["import type { ApiPropertyOptions } from '@aenode/nest/swagger';\nimport type { ClassConstructor } from '@aenode/nest/transformer';\n\nexport type StringFormat =\n | 'email'\n | 'password'\n | 'uuid'\n | 'uuid4'\n | 'uuid7'\n | 'name'\n | 'ean'\n | 'json'\n | 'url'\n | 'data-uri'\n | 'path'\n | 'jwt';\n\nexport type NumberFormat = 'integer' | 'positive' | 'percent';\n\nexport type PropFormat = StringFormat | NumberFormat;\n\nexport type PropType =\n | StringConstructor\n | NumberConstructor\n | BooleanConstructor\n | DateConstructor\n | (() => ClassConstructor<unknown>);\n\nexport type CommonValidationOptions = {\n type?: PropType;\n required?: boolean;\n groups?: string[];\n\n maxItems?: number;\n minItems?: number;\n defaultValue?: unknown;\n};\n\nexport type StringValidationOptions = {\n format?: StringFormat;\n minLength?: number;\n maxLength?: number;\n isIn?: string[];\n isNotIn?: string[];\n} & CommonValidationOptions;\n\nexport type NumberValidationOptions = {\n format?: NumberFormat;\n min?: number;\n max?: number;\n isIn?: number[];\n isNotIn?: number[];\n} & CommonValidationOptions;\n\nexport type BooleanValidationOptions = {} & CommonValidationOptions;\n\nexport type DateType = Date | (() => Date);\n\nexport type DateValidationOptions = {\n type?: Date;\n minDate?: DateType;\n maxDate?: DateType;\n isIn?: DateType[];\n isNotIn?: DateType[];\n} & CommonValidationOptions;\n\nexport type EnumValidationOptions = {\n enum?: object;\n isIn?: (string | number)[];\n} & CommonValidationOptions;\n\nexport type ObjectValidationOptions = {\n type?: () => ClassConstructor<unknown>;\n isArray?: boolean;\n minProperties?: number;\n maxProperties?: number;\n} & CommonValidationOptions;\n\nexport type PropValidationOptions = {\n type?: PropType;\n enum?: object;\n format?: PropFormat;\n min?: number;\n max?: number;\n minLength?: number;\n maxLength?: number;\n minDate?: DateType;\n maxDate?: DateType;\n isIn?: unknown[];\n isNotIn?: unknown[];\n notWith?: string[];\n notWithout?: string[];\n moreThan?: string[];\n lessThan?: string[];\n} & CommonValidationOptions;\n\nexport type PropObjectOptions = ObjectValidationOptions &\n Required<Pick<ObjectValidationOptions, 'type'>> &\n Omit<ApiPropertyOptions, 'type' | 'required' | 'nullable' | 'format'>;\n\nexport type PropOptions = PropValidationOptions &\n Omit<ApiPropertyOptions, 'type' | 'required' | 'nullable' | 'format'>;\n"],"names":[],"mappings":"AAoGA,WACwE"}
@@ -0,0 +1,19 @@
1
+ import { type ValidationOptions } from '@aenode/nest/validator';
2
+ import type { StringFormat, StringValidationOptions } from './prop-options.js';
3
+ /**
4
+ * String property format validation decorator
5
+ *
6
+ * @param format string format {@link StringFormat}
7
+ * @param validationOptions class-validator validation options
8
+ * @returns a property decorator
9
+ */
10
+ export declare function __PropStringFormat(format: StringFormat, validationOptions: ValidationOptions): PropertyDecorator;
11
+ /**
12
+ * String property validation decorator
13
+ *
14
+ * @param options string validation options {@link StringValidationOptions}
15
+ * @returns a property decorator
16
+ */
17
+ export declare function PropString(options: StringValidationOptions): PropertyDecorator;
18
+ export declare function __PropString(options?: StringValidationOptions, validationOptions?: ValidationOptions): PropertyDecorator;
19
+ //# sourceMappingURL=prop-string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-string.d.ts","sourceRoot":"","sources":["../../src/lib/prop-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAG/E;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,iBAAiB,EAAE,iBAAiB,GACnC,iBAAiB,CAsDnB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,uBAAuB,GAC/B,iBAAiB,CAInB;AAED,wBAAgB,YAAY,CAC1B,OAAO,CAAC,EAAE,uBAAuB,EACjC,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,iBAAiB,CAkCnB"}
@@ -0,0 +1,112 @@
1
+ import { IsDataURI, IsEAN, IsEmail, IsIn, IsJSON, IsJWT, IsNotIn, IsString, IsStrongPassword, IsUrl, IsUUID, MaxLength, MinLength } from '@aenode/nest/validator';
2
+ import { __PropCommon } from './prop-common.js';
3
+ import { IsRelativePath } from './validators/is-relative-path.js';
4
+ /**
5
+ * String property format validation decorator
6
+ *
7
+ * @param format string format {@link StringFormat}
8
+ * @param validationOptions class-validator validation options
9
+ * @returns a property decorator
10
+ */ export function __PropStringFormat(format, validationOptions) {
11
+ return (...args)=>{
12
+ switch(format){
13
+ case 'email':
14
+ {
15
+ IsEmail(undefined, validationOptions)(...args);
16
+ break;
17
+ }
18
+ case 'password':
19
+ {
20
+ IsStrongPassword(undefined, validationOptions)(...args);
21
+ break;
22
+ }
23
+ case 'uuid4':
24
+ case 'uuid':
25
+ {
26
+ IsUUID('4', validationOptions)(...args);
27
+ break;
28
+ }
29
+ case 'uuid7':
30
+ {
31
+ IsUUID('7', validationOptions)(...args);
32
+ break;
33
+ }
34
+ case 'ean':
35
+ {
36
+ IsEAN(validationOptions)(...args);
37
+ break;
38
+ }
39
+ case 'name':
40
+ {
41
+ MinLength(3, validationOptions)(...args);
42
+ MinLength(255, validationOptions)(...args);
43
+ break;
44
+ }
45
+ case 'json':
46
+ {
47
+ IsJSON(validationOptions)(...args);
48
+ break;
49
+ }
50
+ case 'data-uri':
51
+ {
52
+ IsDataURI(validationOptions)(...args);
53
+ break;
54
+ }
55
+ case 'url':
56
+ {
57
+ IsUrl(undefined, validationOptions)(...args);
58
+ break;
59
+ }
60
+ case 'path':
61
+ {
62
+ IsRelativePath(validationOptions)(...args);
63
+ break;
64
+ }
65
+ case 'jwt':
66
+ {
67
+ IsJWT(validationOptions)(...args);
68
+ break;
69
+ }
70
+ }
71
+ };
72
+ }
73
+ /**
74
+ * String property validation decorator
75
+ *
76
+ * @param options string validation options {@link StringValidationOptions}
77
+ * @returns a property decorator
78
+ */ export function PropString(options) {
79
+ return (...args)=>{
80
+ __PropString(options)(...args);
81
+ };
82
+ }
83
+ export function __PropString(options, validationOptions) {
84
+ return (...args)=>{
85
+ options ??= {};
86
+ const inferedType = Reflect.getMetadata('design:type', ...args);
87
+ validationOptions ??= {
88
+ each: inferedType === Array,
89
+ groups: options?.groups
90
+ };
91
+ const { format, isIn, isNotIn, maxLength, minLength } = options ?? {};
92
+ __PropCommon(options, validationOptions)(...args);
93
+ IsString(validationOptions)(...args);
94
+ if (format) {
95
+ __PropStringFormat(format, validationOptions)(...args);
96
+ }
97
+ if (isIn) {
98
+ IsIn(isIn, validationOptions)(...args);
99
+ }
100
+ if (isNotIn) {
101
+ IsNotIn(isNotIn, validationOptions)(...args);
102
+ }
103
+ if (maxLength) {
104
+ MaxLength(maxLength, validationOptions)(...args);
105
+ }
106
+ if (minLength) {
107
+ MinLength(minLength, validationOptions)(...args);
108
+ }
109
+ };
110
+ }
111
+
112
+ //# sourceMappingURL=prop-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/prop-string.ts"],"sourcesContent":["import {\n IsDataURI,\n IsEAN,\n IsEmail,\n IsIn,\n IsJSON,\n IsJWT,\n IsNotIn,\n IsString,\n IsStrongPassword,\n IsUrl,\n IsUUID,\n MaxLength,\n MinLength,\n type ValidationOptions,\n} from '@aenode/nest/validator';\nimport { __PropCommon } from './prop-common.js';\nimport type { StringFormat, StringValidationOptions } from './prop-options.js';\nimport { IsRelativePath } from './validators/is-relative-path.js';\n\n/**\n * String property format validation decorator\n *\n * @param format string format {@link StringFormat}\n * @param validationOptions class-validator validation options\n * @returns a property decorator\n */\nexport function __PropStringFormat(\n format: StringFormat,\n validationOptions: ValidationOptions,\n): PropertyDecorator {\n return (...args) => {\n switch (format) {\n case 'email': {\n IsEmail(undefined, validationOptions)(...args);\n break;\n }\n case 'password': {\n IsStrongPassword(undefined, validationOptions)(...args);\n break;\n }\n case 'uuid4':\n case 'uuid': {\n IsUUID('4', validationOptions)(...args);\n break;\n }\n case 'uuid7': {\n IsUUID('7', validationOptions)(...args);\n break;\n }\n case 'ean': {\n IsEAN(validationOptions)(...args);\n\n break;\n }\n case 'name': {\n MinLength(3, validationOptions)(...args);\n MinLength(255, validationOptions)(...args);\n break;\n }\n case 'json': {\n IsJSON(validationOptions)(...args);\n break;\n }\n case 'data-uri': {\n IsDataURI(validationOptions)(...args);\n break;\n }\n case 'url': {\n IsUrl(undefined, validationOptions)(...args);\n break;\n }\n\n case 'path': {\n IsRelativePath(validationOptions)(...args);\n break;\n }\n\n case 'jwt': {\n IsJWT(validationOptions)(...args);\n break;\n }\n }\n };\n}\n\n/**\n * String property validation decorator\n *\n * @param options string validation options {@link StringValidationOptions}\n * @returns a property decorator\n */\nexport function PropString(\n options: StringValidationOptions,\n): PropertyDecorator {\n return (...args) => {\n __PropString(options)(...args);\n };\n}\n\nexport function __PropString(\n options?: StringValidationOptions,\n validationOptions?: ValidationOptions,\n): PropertyDecorator {\n return (...args) => {\n options ??= {};\n const inferedType = Reflect.getMetadata('design:type', ...args);\n validationOptions ??= {\n each: inferedType === Array,\n groups: options?.groups,\n };\n\n const { format, isIn, isNotIn, maxLength, minLength } = options ?? {};\n\n __PropCommon(options, validationOptions)(...args);\n IsString(validationOptions)(...args);\n\n if (format) {\n __PropStringFormat(format, validationOptions)(...args);\n }\n\n if (isIn) {\n IsIn(isIn, validationOptions)(...args);\n }\n\n if (isNotIn) {\n IsNotIn(isNotIn, validationOptions)(...args);\n }\n\n if (maxLength) {\n MaxLength(maxLength, validationOptions)(...args);\n }\n\n if (minLength) {\n MinLength(minLength, validationOptions)(...args);\n }\n };\n}\n"],"names":["IsDataURI","IsEAN","IsEmail","IsIn","IsJSON","IsJWT","IsNotIn","IsString","IsStrongPassword","IsUrl","IsUUID","MaxLength","MinLength","__PropCommon","IsRelativePath","__PropStringFormat","format","validationOptions","args","undefined","PropString","options","__PropString","inferedType","Reflect","getMetadata","each","Array","groups","isIn","isNotIn","maxLength","minLength"],"mappings":"AAAA,SACEA,SAAS,EACTC,KAAK,EACLC,OAAO,EACPC,IAAI,EACJC,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,QAAQ,EACRC,gBAAgB,EAChBC,KAAK,EACLC,MAAM,EACNC,SAAS,EACTC,SAAS,QAEJ,yBAAyB;AAChC,SAASC,YAAY,QAAQ,mBAAmB;AAEhD,SAASC,cAAc,QAAQ,mCAAmC;AAElE;;;;;;CAMC,GACD,OAAO,SAASC,mBACdC,MAAoB,EACpBC,iBAAoC;IAEpC,OAAO,CAAC,GAAGC;QACT,OAAQF;YACN,KAAK;gBAAS;oBACZd,QAAQiB,WAAWF,sBAAsBC;oBACzC;gBACF;YACA,KAAK;gBAAY;oBACfV,iBAAiBW,WAAWF,sBAAsBC;oBAClD;gBACF;YACA,KAAK;YACL,KAAK;gBAAQ;oBACXR,OAAO,KAAKO,sBAAsBC;oBAClC;gBACF;YACA,KAAK;gBAAS;oBACZR,OAAO,KAAKO,sBAAsBC;oBAClC;gBACF;YACA,KAAK;gBAAO;oBACVjB,MAAMgB,sBAAsBC;oBAE5B;gBACF;YACA,KAAK;gBAAQ;oBACXN,UAAU,GAAGK,sBAAsBC;oBACnCN,UAAU,KAAKK,sBAAsBC;oBACrC;gBACF;YACA,KAAK;gBAAQ;oBACXd,OAAOa,sBAAsBC;oBAC7B;gBACF;YACA,KAAK;gBAAY;oBACflB,UAAUiB,sBAAsBC;oBAChC;gBACF;YACA,KAAK;gBAAO;oBACVT,MAAMU,WAAWF,sBAAsBC;oBACvC;gBACF;YAEA,KAAK;gBAAQ;oBACXJ,eAAeG,sBAAsBC;oBACrC;gBACF;YAEA,KAAK;gBAAO;oBACVb,MAAMY,sBAAsBC;oBAC5B;gBACF;QACF;IACF;AACF;AAEA;;;;;CAKC,GACD,OAAO,SAASE,WACdC,OAAgC;IAEhC,OAAO,CAAC,GAAGH;QACTI,aAAaD,YAAYH;IAC3B;AACF;AAEA,OAAO,SAASI,aACdD,OAAiC,EACjCJ,iBAAqC;IAErC,OAAO,CAAC,GAAGC;QACTG,YAAY,CAAC;QACb,MAAME,cAAcC,QAAQC,WAAW,CAAC,kBAAkBP;QAC1DD,sBAAsB;YACpBS,MAAMH,gBAAgBI;YACtBC,QAAQP,SAASO;QACnB;QAEA,MAAM,EAAEZ,MAAM,EAAEa,IAAI,EAAEC,OAAO,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGX,WAAW,CAAC;QAEpER,aAAaQ,SAASJ,sBAAsBC;QAC5CX,SAASU,sBAAsBC;QAE/B,IAAIF,QAAQ;YACVD,mBAAmBC,QAAQC,sBAAsBC;QACnD;QAEA,IAAIW,MAAM;YACR1B,KAAK0B,MAAMZ,sBAAsBC;QACnC;QAEA,IAAIY,SAAS;YACXxB,QAAQwB,SAASb,sBAAsBC;QACzC;QAEA,IAAIa,WAAW;YACbpB,UAAUoB,WAAWd,sBAAsBC;QAC7C;QAEA,IAAIc,WAAW;YACbpB,UAAUoB,WAAWf,sBAAsBC;QAC7C;IACF;AACF"}
@@ -0,0 +1,10 @@
1
+ import { type PropValidationOptions } from './prop-options.js';
2
+ /**
3
+ * Property validation decorator.
4
+ *
5
+ * @important for circler objects use ProjectObjectValidation decorator.
6
+ * @param options validation options {@link PropValidationOptions}
7
+ * @returns a property decorator
8
+ */
9
+ export declare function PropValidation(options?: PropValidationOptions): PropertyDecorator;
10
+ //# sourceMappingURL=prop-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-validation.d.ts","sourceRoot":"","sources":["../../src/lib/prop-validation.ts"],"names":[],"mappings":"AAMA,OAAO,EAML,KAAK,qBAAqB,EAE3B,MAAM,mBAAmB,CAAC;AAG3B;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,iBAAiB,CAsFnB"}
@@ -0,0 +1,75 @@
1
+ import { IsArray } from '@aenode/nest/validator';
2
+ import { __PropBoolean } from './prop-boolean.js';
3
+ import { __PropDate } from './prop-date.js';
4
+ import { __PropEnum } from './prop-enum.js';
5
+ import { __PropNumber } from './prop-number.js';
6
+ import { __PropObject } from './prop-object.js';
7
+ import { __PropString } from './prop-string.js';
8
+ /**
9
+ * Property validation decorator.
10
+ *
11
+ * @important for circler objects use ProjectObjectValidation decorator.
12
+ * @param options validation options {@link PropValidationOptions}
13
+ * @returns a property decorator
14
+ */ export function PropValidation(options) {
15
+ return (...args)=>{
16
+ options ??= {};
17
+ const inferedType = Reflect.getMetadata('design:type', ...args);
18
+ const isArrayType = inferedType === Array;
19
+ const isUnkownObject = inferedType === Object;
20
+ const propertyDef = `${args[0].constructor.name}.${args[1].toString()} is ${inferedType}: `;
21
+ ArrayORUnkownObjectShouldProvideTypeOrEnumOrIsIn: {
22
+ if (isArrayType || isUnkownObject) {
23
+ if (isArrayType) {
24
+ IsArray()(...args);
25
+ }
26
+ if (!options.type && !options.enum && !options.isIn) {
27
+ throw new Error(`${propertyDef} does not provide type, enum, or isIn option`);
28
+ }
29
+ } else {
30
+ options.type ??= inferedType;
31
+ }
32
+ break ArrayORUnkownObjectShouldProvideTypeOrEnumOrIsIn;
33
+ }
34
+ const validationOptions = {
35
+ each: isArrayType,
36
+ groups: options?.groups
37
+ };
38
+ IfPropertyHasEnumOrIsInOptionThenApplyEnumDecorator: {
39
+ if (options.enum || options.isIn) {
40
+ __PropEnum(options, validationOptions)(...args);
41
+ return;
42
+ }
43
+ break IfPropertyHasEnumOrIsInOptionThenApplyEnumDecorator;
44
+ }
45
+ switch(options.type){
46
+ case String:
47
+ {
48
+ __PropString(options, validationOptions)(...args);
49
+ break;
50
+ }
51
+ case Number:
52
+ {
53
+ __PropNumber(options, validationOptions)(...args);
54
+ break;
55
+ }
56
+ case Boolean:
57
+ {
58
+ __PropBoolean(options, validationOptions)(...args);
59
+ break;
60
+ }
61
+ case Date:
62
+ {
63
+ __PropDate(options, validationOptions)(...args);
64
+ break;
65
+ }
66
+ default:
67
+ {
68
+ __PropObject(options, validationOptions)(...args);
69
+ break;
70
+ }
71
+ }
72
+ };
73
+ }
74
+
75
+ //# sourceMappingURL=prop-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/prop-validation.ts"],"sourcesContent":["import { IsArray } from '@aenode/nest/validator';\nimport { __PropBoolean } from './prop-boolean.js';\nimport { __PropDate } from './prop-date.js';\nimport { __PropEnum } from './prop-enum.js';\nimport { __PropNumber } from './prop-number.js';\nimport { __PropObject } from './prop-object.js';\nimport {\n type BooleanValidationOptions,\n type DateValidationOptions,\n type EnumValidationOptions,\n type NumberValidationOptions,\n type ObjectValidationOptions,\n type PropValidationOptions,\n type StringValidationOptions,\n} from './prop-options.js';\nimport { __PropString } from './prop-string.js';\n\n/**\n * Property validation decorator.\n *\n * @important for circler objects use ProjectObjectValidation decorator.\n * @param options validation options {@link PropValidationOptions}\n * @returns a property decorator\n */\nexport function PropValidation(\n options?: PropValidationOptions,\n): PropertyDecorator {\n return (...args) => {\n options ??= {};\n\n const inferedType = Reflect.getMetadata('design:type', ...args);\n const isArrayType = inferedType === Array;\n const isUnkownObject = inferedType === Object;\n const propertyDef = `${args[0].constructor.name}.${args[1].toString()} is ${inferedType}: `;\n\n ArrayORUnkownObjectShouldProvideTypeOrEnumOrIsIn: {\n if (isArrayType || isUnkownObject) {\n if (isArrayType) {\n IsArray()(...args);\n }\n if (\n !options.type &&\n !(options as EnumValidationOptions).enum &&\n !(options as EnumValidationOptions).isIn\n ) {\n throw new Error(\n `${propertyDef} does not provide type, enum, or isIn option`,\n );\n }\n } else {\n options.type ??= inferedType;\n }\n\n break ArrayORUnkownObjectShouldProvideTypeOrEnumOrIsIn;\n }\n\n const validationOptions = {\n each: isArrayType,\n groups: options?.groups,\n };\n\n IfPropertyHasEnumOrIsInOptionThenApplyEnumDecorator: {\n if (options.enum || options.isIn) {\n __PropEnum(\n options as EnumValidationOptions,\n validationOptions,\n )(...args);\n return;\n }\n break IfPropertyHasEnumOrIsInOptionThenApplyEnumDecorator;\n }\n\n switch (options.type) {\n case String: {\n __PropString(\n options as StringValidationOptions,\n validationOptions,\n )(...args);\n break;\n }\n case Number: {\n __PropNumber(\n options as NumberValidationOptions,\n validationOptions,\n )(...args);\n break;\n }\n case Boolean: {\n __PropBoolean(\n options as BooleanValidationOptions,\n validationOptions,\n )(...args);\n break;\n }\n case Date: {\n __PropDate(\n options as DateValidationOptions,\n validationOptions,\n )(...args);\n break;\n }\n\n default: {\n __PropObject(\n options as ObjectValidationOptions,\n validationOptions,\n )(...args);\n\n break;\n }\n }\n };\n}\n"],"names":["IsArray","__PropBoolean","__PropDate","__PropEnum","__PropNumber","__PropObject","__PropString","PropValidation","options","args","inferedType","Reflect","getMetadata","isArrayType","Array","isUnkownObject","Object","propertyDef","name","toString","ArrayORUnkownObjectShouldProvideTypeOrEnumOrIsIn","type","enum","isIn","Error","validationOptions","each","groups","IfPropertyHasEnumOrIsInOptionThenApplyEnumDecorator","String","Number","Boolean","Date"],"mappings":"AAAA,SAASA,OAAO,QAAQ,yBAAyB;AACjD,SAASC,aAAa,QAAQ,oBAAoB;AAClD,SAASC,UAAU,QAAQ,iBAAiB;AAC5C,SAASC,UAAU,QAAQ,iBAAiB;AAC5C,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,YAAY,QAAQ,mBAAmB;AAUhD,SAASC,YAAY,QAAQ,mBAAmB;AAEhD;;;;;;CAMC,GACD,OAAO,SAASC,eACdC,OAA+B;IAE/B,OAAO,CAAC,GAAGC;QACTD,YAAY,CAAC;QAEb,MAAME,cAAcC,QAAQC,WAAW,CAAC,kBAAkBH;QAC1D,MAAMI,cAAcH,gBAAgBI;QACpC,MAAMC,iBAAiBL,gBAAgBM;QACvC,MAAMC,cAAc,GAAGR,IAAI,CAAC,EAAE,CAAC,WAAW,CAACS,IAAI,CAAC,CAAC,EAAET,IAAI,CAAC,EAAE,CAACU,QAAQ,GAAG,IAAI,EAAET,YAAY,EAAE,CAAC;QAE3FU,kDAAkD;YAChD,IAAIP,eAAeE,gBAAgB;gBACjC,IAAIF,aAAa;oBACfb,aAAaS;gBACf;gBACA,IACE,CAACD,QAAQa,IAAI,IACb,CAAC,AAACb,QAAkCc,IAAI,IACxC,CAAC,AAACd,QAAkCe,IAAI,EACxC;oBACA,MAAM,IAAIC,MACR,GAAGP,YAAY,4CAA4C,CAAC;gBAEhE;YACF,OAAO;gBACLT,QAAQa,IAAI,KAAKX;YACnB;YAEA,MAAMU;QACR;QAEA,MAAMK,oBAAoB;YACxBC,MAAMb;YACNc,QAAQnB,SAASmB;QACnB;QAEAC,qDAAqD;YACnD,IAAIpB,QAAQc,IAAI,IAAId,QAAQe,IAAI,EAAE;gBAChCpB,WACEK,SACAiB,sBACGhB;gBACL;YACF;YACA,MAAMmB;QACR;QAEA,OAAQpB,QAAQa,IAAI;YAClB,KAAKQ;gBAAQ;oBACXvB,aACEE,SACAiB,sBACGhB;oBACL;gBACF;YACA,KAAKqB;gBAAQ;oBACX1B,aACEI,SACAiB,sBACGhB;oBACL;gBACF;YACA,KAAKsB;gBAAS;oBACZ9B,cACEO,SACAiB,sBACGhB;oBACL;gBACF;YACA,KAAKuB;gBAAM;oBACT9B,WACEM,SACAiB,sBACGhB;oBACL;gBACF;YAEA;gBAAS;oBACPJ,aACEG,SACAiB,sBACGhB;oBAEL;gBACF;QACF;IACF;AACF"}