ts-deco 1.0.4 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +2 -18
  2. package/dist/decorators/utils/apply-decorators.js +8 -2
  3. package/dist/decorators/utils/apply-decorators.js.map +1 -1
  4. package/dist/decorators/validators/string.decorator.d.ts.map +1 -1
  5. package/dist/decorators/validators/string.decorator.js +1 -2
  6. package/dist/decorators/validators/string.decorator.js.map +1 -1
  7. package/dist/src/decorators/utils/apply-decorators.d.ts +21 -0
  8. package/dist/src/decorators/utils/apply-decorators.d.ts.map +1 -0
  9. package/dist/src/decorators/utils/apply-decorators.js +58 -0
  10. package/dist/src/decorators/utils/apply-decorators.js.map +1 -0
  11. package/dist/src/decorators/validators/boolean.decorator.d.ts +6 -0
  12. package/dist/src/decorators/validators/boolean.decorator.d.ts.map +1 -0
  13. package/dist/src/decorators/validators/boolean.decorator.js +40 -0
  14. package/dist/src/decorators/validators/boolean.decorator.js.map +1 -0
  15. package/dist/src/decorators/validators/date.decorator.d.ts +6 -0
  16. package/dist/src/decorators/validators/date.decorator.d.ts.map +1 -0
  17. package/dist/src/decorators/validators/date.decorator.js +24 -0
  18. package/dist/src/decorators/validators/date.decorator.js.map +1 -0
  19. package/dist/src/decorators/validators/enum.decorator.d.ts +6 -0
  20. package/dist/src/decorators/validators/enum.decorator.d.ts.map +1 -0
  21. package/dist/src/decorators/validators/enum.decorator.js +15 -0
  22. package/dist/src/decorators/validators/enum.decorator.js.map +1 -0
  23. package/dist/src/decorators/validators/number.decorator.d.ts +7 -0
  24. package/dist/src/decorators/validators/number.decorator.d.ts.map +1 -0
  25. package/dist/src/decorators/validators/number.decorator.js +45 -0
  26. package/dist/src/decorators/validators/number.decorator.js.map +1 -0
  27. package/dist/src/decorators/validators/property.decorator.d.ts +14 -0
  28. package/dist/src/decorators/validators/property.decorator.d.ts.map +1 -0
  29. package/dist/src/decorators/validators/property.decorator.js +58 -0
  30. package/dist/src/decorators/validators/property.decorator.js.map +1 -0
  31. package/dist/src/decorators/validators/string.decorator.d.ts +6 -0
  32. package/dist/src/decorators/validators/string.decorator.d.ts.map +1 -0
  33. package/dist/src/decorators/validators/string.decorator.js +14 -0
  34. package/dist/src/decorators/validators/string.decorator.js.map +1 -0
  35. package/dist/src/decorators/validators/utils/common-decorators.d.ts +46 -0
  36. package/dist/src/decorators/validators/utils/common-decorators.d.ts.map +1 -0
  37. package/dist/src/decorators/validators/utils/common-decorators.js +75 -0
  38. package/dist/src/decorators/validators/utils/common-decorators.js.map +1 -0
  39. package/dist/src/decorators/validators/utils/validator-options.d.ts +8 -0
  40. package/dist/src/decorators/validators/utils/validator-options.d.ts.map +1 -0
  41. package/dist/src/decorators/validators/utils/validator-options.js +11 -0
  42. package/dist/src/decorators/validators/utils/validator-options.js.map +1 -0
  43. package/dist/src/decorators/validators/validator.type.d.ts +20 -0
  44. package/dist/src/decorators/validators/validator.type.d.ts.map +1 -0
  45. package/dist/src/decorators/validators/validator.type.js +3 -0
  46. package/dist/src/decorators/validators/validator.type.js.map +1 -0
  47. package/dist/src/index.d.ts +11 -0
  48. package/dist/src/index.d.ts.map +1 -0
  49. package/dist/src/index.js +31 -0
  50. package/dist/src/index.js.map +1 -0
  51. package/dist/tests/apply-decorators.test.d.ts +2 -0
  52. package/dist/tests/apply-decorators.test.d.ts.map +1 -0
  53. package/dist/tests/apply-decorators.test.js +21 -0
  54. package/dist/tests/apply-decorators.test.js.map +1 -0
  55. package/dist/tests/property.decorator.test.d.ts +2 -0
  56. package/dist/tests/property.decorator.test.d.ts.map +1 -0
  57. package/dist/tests/property.decorator.test.js +326 -0
  58. package/dist/tests/property.decorator.test.js.map +1 -0
  59. package/dist/tests/setup.d.ts +2 -0
  60. package/dist/tests/setup.d.ts.map +1 -0
  61. package/dist/tests/setup.js +4 -0
  62. package/dist/tests/setup.js.map +1 -0
  63. package/package.json +11 -7
package/README.md CHANGED
@@ -227,22 +227,6 @@ name: string;
227
227
  - **배열 검증**: `isArray: true`인 경우 배열 타입만 허용
228
228
  - **열거형 검증**: `enum`이 제공되면 해당 값만 허용
229
229
 
230
- ## 유틸리티 함수
231
-
232
- ### applyDecorators
233
-
234
- 여러 데코레이터를 하나로 합치는 유틸리티 함수입니다:
235
-
236
- ```typescript
237
- import { applyDecorators } from 'ts-deco';
238
- import { ApiProperty } from '@nestjs/swagger';
239
- import { IsString } from 'class-validator';
240
-
241
- const MyDecorator = applyDecorators(
242
- ApiProperty(),
243
- IsString()
244
- );
245
- ```
246
230
 
247
231
  ⚠️ **주의**: 모든 데코레이터는 동일한 타입이어야 합니다.
248
232
 
@@ -252,7 +236,7 @@ const MyDecorator = applyDecorators(
252
236
 
253
237
  ## 의존성
254
238
 
255
- 이 라이브러리는 다음 패키지들을 **peer dependencies**로 사용합니다:
239
+ 이 라이브러리는 다음 패키지들을 **dependencies**로 포함하고 있어, `npm install ts-deco` 실행 시 자동으로 함께 설치됩니다:
256
240
 
257
241
  | 패키지 | 버전 | 용도 |
258
242
  |--------|------|------|
@@ -260,7 +244,7 @@ const MyDecorator = applyDecorators(
260
244
  | `class-transformer` | ^0.5.0 | 타입 변환 데코레이터 |
261
245
  | `class-validator` | ^0.14.0 | 검증 데코레이터 |
262
246
 
263
- > **참고**: 라이브러리는 런타임에 패키지들이 설치되어 있어야 합니다. `npm install` 자동으로 설치되지 않으므로, 프로젝트에 직접 설치해야 합니다.
247
+ > **참고**: 별도로 설치할 필요 없이 `npm install ts-deco`만 실행하면 모든 의존성이 자동으로 설치됩니다.
264
248
 
265
249
  ## 라이선스
266
250
 
@@ -44,9 +44,15 @@ function applyDecorators(...decorators) {
44
44
  }
45
45
  }
46
46
  // MethodDecorator일 때는 PropertyDescriptor 반환
47
- // ClassDecorator일 때는 Function 반환
47
+ if (descriptorOrIndex !== undefined && typeof descriptorOrIndex !== 'number') {
48
+ return descriptorOrIndex;
49
+ }
50
+ // ClassDecorator일 때는 Function 반환 (또는 void)
51
+ if (propertyKey === undefined) {
52
+ return target;
53
+ }
48
54
  // PropertyDecorator/ParameterDecorator일 때는 반환값 없음 (undefined)
49
- return descriptorOrIndex ?? target;
55
+ return undefined;
50
56
  };
51
57
  }
52
58
  //# sourceMappingURL=apply-decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-decorators.js","sourceRoot":"","sources":["../../../src/decorators/utils/apply-decorators.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA4BH,0CAmCC;AAzCD;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,GAAG,UAAiB;IAChD,OAAO,UAAU,MAAW,EAAE,WAA6B,EAAE,iBAA+C;QACxG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;oBACxC,oEAAoE;oBACpE,gBAAgB;oBAChB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACJ,kFAAkF;oBAClF,+BAA+B;oBAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;oBACjE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBACvB,iBAAiB,GAAG,MAAM,CAAC;oBAC/B,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,mDAAmD;gBACnD,gBAAgB;gBAChB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACJ,8CAA8C;gBAC9C,qBAAqB;gBACrB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,GAAG,MAAM,CAAC;gBACpB,CAAC;YACL,CAAC;QACL,CAAC;QAED,4CAA4C;QAC5C,iCAAiC;QACjC,8DAA8D;QAC9D,OAAO,iBAAiB,IAAI,MAAM,CAAC;IACvC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"apply-decorators.js","sourceRoot":"","sources":["../../../src/decorators/utils/apply-decorators.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA4BH,0CA2CC;AAjDD;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,GAAG,UAAiB;IAChD,OAAO,UAAU,MAAW,EAAE,WAA6B,EAAE,iBAA+C;QACxG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;oBACxC,oEAAoE;oBACpE,gBAAgB;oBAChB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACJ,kFAAkF;oBAClF,+BAA+B;oBAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;oBACjE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBACvB,iBAAiB,GAAG,MAAM,CAAC;oBAC/B,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,mDAAmD;gBACnD,gBAAgB;gBAChB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACJ,8CAA8C;gBAC9C,qBAAqB;gBACrB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,GAAG,MAAM,CAAC;gBACpB,CAAC;YACL,CAAC;QACL,CAAC;QAED,4CAA4C;QAC5C,IAAI,iBAAiB,KAAK,SAAS,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YAC3E,OAAO,iBAAiB,CAAC;QAC7B,CAAC;QAED,2CAA2C;QAC3C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,8DAA8D;QAC9D,OAAO,SAAS,CAAC;IACrB,CAAC,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"string.decorator.d.ts","sourceRoot":"","sources":["../../../src/decorators/validators/string.decorator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAKvD,KAAK,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAEjE,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,qBAoB3D"}
1
+ {"version":3,"file":"string.decorator.d.ts","sourceRoot":"","sources":["../../../src/decorators/validators/string.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAKvD,KAAK,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAEjE,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,qBAmB3D"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = DtoString;
4
- const class_transformer_1 = require("class-transformer");
5
4
  const class_validator_1 = require("class-validator");
6
5
  const validator_options_1 = require("./utils/validator-options");
7
6
  const common_decorators_1 = require("./utils/common-decorators");
@@ -10,6 +9,6 @@ function DtoString(options) {
10
9
  const { isArray = false, optional = false, validatorMessage, notEmptyMessage, arrayMessage, ...swaggerOptions } = options || {};
11
10
  const validatorOption = (0, validator_options_1.getValidatorOptions)({ isArray, validatorMessage });
12
11
  const each = validatorOption.each ?? false;
13
- return (0, apply_decorators_1.applyDecorators)((0, common_decorators_1.getApiPropertyDecorator)(optional, String, isArray, swaggerOptions), (0, class_transformer_1.Type)(() => String), (0, common_decorators_1.getRequiredValidator)(optional, each, true, notEmptyMessage), ...(0, common_decorators_1.getIsArrayDecorator)(isArray, arrayMessage), (0, class_validator_1.IsString)(validatorOption));
12
+ return (0, apply_decorators_1.applyDecorators)((0, common_decorators_1.getApiPropertyDecorator)(optional, String, isArray, swaggerOptions), (0, common_decorators_1.getRequiredValidator)(optional, each, false), ...(0, common_decorators_1.getIsArrayDecorator)(isArray, arrayMessage), (0, class_validator_1.IsString)(validatorOption));
14
13
  }
15
14
  //# sourceMappingURL=string.decorator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"string.decorator.js","sourceRoot":"","sources":["../../../src/decorators/validators/string.decorator.ts"],"names":[],"mappings":";;AAUA,4BAoBC;AA9BD,yDAAyC;AACzC,qDAA2C;AAG3C,iEAAgE;AAChE,iEAA+G;AAC/G,gEAA4D;AAI5D,SAAwB,SAAS,CAAC,OAA0B;IACxD,MAAM,EACF,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,GAAG,cAAc,EACpB,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,MAAM,eAAe,GAAG,IAAA,uCAAmB,EAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,KAAK,CAAC;IAE3C,OAAO,IAAA,kCAAe,EAClB,IAAA,2CAAuB,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,EAClE,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAClB,IAAA,wCAAoB,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,EAC3D,GAAG,IAAA,uCAAmB,EAAC,OAAO,EAAE,YAAY,CAAC,EAC7C,IAAA,0BAAQ,EAAC,eAAe,CAAC,CAC5B,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"string.decorator.js","sourceRoot":"","sources":["../../../src/decorators/validators/string.decorator.ts"],"names":[],"mappings":";;AASA,4BAmBC;AA5BD,qDAA2C;AAG3C,iEAAgE;AAChE,iEAA+G;AAC/G,gEAA4D;AAI5D,SAAwB,SAAS,CAAC,OAA0B;IACxD,MAAM,EACF,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,GAAG,cAAc,EACpB,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,MAAM,eAAe,GAAG,IAAA,uCAAmB,EAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,KAAK,CAAC;IAE3C,OAAO,IAAA,kCAAe,EAClB,IAAA,2CAAuB,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,EAClE,IAAA,wCAAoB,EAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,EAC3C,GAAG,IAAA,uCAAmB,EAAC,OAAO,EAAE,YAAY,CAAC,EAC7C,IAAA,0BAAQ,EAAC,eAAe,CAAC,CAC5B,CAAC;AACN,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 여러 데코레이터를 하나로 합치는 유틸리티 함수
3
+ * TypeScript의 모든 데코레이터 타입을 지원합니다.
4
+ */
5
+ /**
6
+ * Class 데코레이터를 합칩니다.
7
+ */
8
+ export declare function applyDecorators(...decorators: ClassDecorator[]): ClassDecorator;
9
+ /**
10
+ * Property 데코레이터를 합칩니다.
11
+ */
12
+ export declare function applyDecorators(...decorators: PropertyDecorator[]): PropertyDecorator;
13
+ /**
14
+ * Method 데코레이터를 합칩니다.
15
+ */
16
+ export declare function applyDecorators(...decorators: MethodDecorator[]): MethodDecorator;
17
+ /**
18
+ * Parameter 데코레이터를 합칩니다.
19
+ */
20
+ export declare function applyDecorators(...decorators: ParameterDecorator[]): ParameterDecorator;
21
+ //# sourceMappingURL=apply-decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-decorators.d.ts","sourceRoot":"","sources":["../../../../src/decorators/utils/apply-decorators.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,UAAU,EAAE,cAAc,EAAE,GAAG,cAAc,CAAC;AAEjF;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,CAAC;AAEvF;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC;AAEnF;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,UAAU,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * 여러 데코레이터를 하나로 합치는 유틸리티 함수
4
+ * TypeScript의 모든 데코레이터 타입을 지원합니다.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.applyDecorators = applyDecorators;
8
+ /**
9
+ * 여러 데코레이터를 하나로 합치는 구현 함수
10
+ *
11
+ * ⚠️ 주의: 모든 데코레이터는 동일한 타입이어야 합니다.
12
+ * (ClassDecorator, PropertyDecorator, MethodDecorator, ParameterDecorator 중 하나)
13
+ */
14
+ function applyDecorators(...decorators) {
15
+ return function (target, propertyKey, descriptorOrIndex) {
16
+ for (const decorator of decorators) {
17
+ if (descriptorOrIndex !== undefined) {
18
+ if (typeof descriptorOrIndex === 'number') {
19
+ // ParameterDecorator: (target, propertyKey, parameterIndex) => void
20
+ // 반환값 없음 (void)
21
+ decorator(target, propertyKey, descriptorOrIndex);
22
+ }
23
+ else {
24
+ // MethodDecorator: (target, propertyKey, descriptor) => PropertyDescriptor | void
25
+ // PropertyDescriptor를 반환할 수 있음
26
+ const result = decorator(target, propertyKey, descriptorOrIndex);
27
+ if (result !== undefined) {
28
+ descriptorOrIndex = result;
29
+ }
30
+ }
31
+ }
32
+ else if (propertyKey !== undefined) {
33
+ // PropertyDecorator: (target, propertyKey) => void
34
+ // 반환값 없음 (void)
35
+ decorator(target, propertyKey);
36
+ }
37
+ else {
38
+ // ClassDecorator: (target) => Function | void
39
+ // Function을 반환할 수 있음
40
+ const result = decorator(target);
41
+ if (result !== undefined) {
42
+ target = result;
43
+ }
44
+ }
45
+ }
46
+ // MethodDecorator일 때는 PropertyDescriptor 반환
47
+ if (descriptorOrIndex !== undefined && typeof descriptorOrIndex !== 'number') {
48
+ return descriptorOrIndex;
49
+ }
50
+ // ClassDecorator일 때는 Function 반환 (또는 void)
51
+ if (propertyKey === undefined) {
52
+ return target;
53
+ }
54
+ // PropertyDecorator/ParameterDecorator일 때는 반환값 없음 (undefined)
55
+ return undefined;
56
+ };
57
+ }
58
+ //# sourceMappingURL=apply-decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-decorators.js","sourceRoot":"","sources":["../../../../src/decorators/utils/apply-decorators.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA4BH,0CA2CC;AAjDD;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,GAAG,UAAiB;IAChD,OAAO,UAAU,MAAW,EAAE,WAA6B,EAAE,iBAA+C;QACxG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;oBACxC,oEAAoE;oBACpE,gBAAgB;oBAChB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACJ,kFAAkF;oBAClF,+BAA+B;oBAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;oBACjE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBACvB,iBAAiB,GAAG,MAAM,CAAC;oBAC/B,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,mDAAmD;gBACnD,gBAAgB;gBAChB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACJ,8CAA8C;gBAC9C,qBAAqB;gBACrB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,GAAG,MAAM,CAAC;gBACpB,CAAC;YACL,CAAC;QACL,CAAC;QAED,4CAA4C;QAC5C,IAAI,iBAAiB,KAAK,SAAS,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YAC3E,OAAO,iBAAiB,CAAC;QAC7B,CAAC;QAED,2CAA2C;QAC3C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,8DAA8D;QAC9D,OAAO,SAAS,CAAC;IACrB,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ApiPropertyOptions } from '@nestjs/swagger';
2
+ import { DtoValidatorOptions } from './validator.type';
3
+ type DtoBooleanOptions = ApiPropertyOptions & DtoValidatorOptions;
4
+ export default function DtoBoolean(options?: DtoBooleanOptions): PropertyDecorator;
5
+ export {};
6
+ //# sourceMappingURL=boolean.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean.decorator.d.ts","sourceRoot":"","sources":["../../../../src/decorators/validators/boolean.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,KAAK,iBAAiB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAElE,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,qBAgC7D"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = DtoBoolean;
4
+ const class_validator_1 = require("class-validator");
5
+ const apply_decorators_1 = require("../utils/apply-decorators");
6
+ const class_transformer_1 = require("class-transformer");
7
+ const validator_options_1 = require("./utils/validator-options");
8
+ const common_decorators_1 = require("./utils/common-decorators");
9
+ function DtoBoolean(options) {
10
+ const { isArray = false, optional = false, validatorMessage, arrayMessage, ...swaggerOptions } = options || {};
11
+ const validatorOption = (0, validator_options_1.getValidatorOptions)({ isArray, validatorMessage });
12
+ const each = validatorOption.each ?? false;
13
+ return (0, apply_decorators_1.applyDecorators)((0, common_decorators_1.getApiPropertyDecorator)(optional, Boolean, isArray, swaggerOptions), (0, class_transformer_1.Transform)(({ value }) => {
14
+ if (Array.isArray(value)) {
15
+ return value.map(v => {
16
+ if (typeof v === 'boolean')
17
+ return v;
18
+ if (typeof v === 'string') {
19
+ const lower = v.toLowerCase();
20
+ if (['true', '1'].includes(lower))
21
+ return true;
22
+ if (['false', '0'].includes(lower))
23
+ return false;
24
+ }
25
+ return v;
26
+ });
27
+ }
28
+ if (typeof value === 'boolean')
29
+ return value;
30
+ if (typeof value === 'string') {
31
+ const lower = value.toLowerCase();
32
+ if (['true', '1'].includes(lower))
33
+ return true;
34
+ if (['false', '0'].includes(lower))
35
+ return false;
36
+ }
37
+ return value;
38
+ }), (0, common_decorators_1.getRequiredValidator)(optional, each), ...(0, common_decorators_1.getIsArrayDecorator)(isArray, arrayMessage), (0, class_validator_1.IsBoolean)(validatorOption));
39
+ }
40
+ //# sourceMappingURL=boolean.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean.decorator.js","sourceRoot":"","sources":["../../../../src/decorators/validators/boolean.decorator.ts"],"names":[],"mappings":";;AAUA,6BAgCC;AAzCD,qDAA4C;AAC5C,gEAA4D;AAC5D,yDAA8C;AAC9C,iEAAgE;AAEhE,iEAA+G;AAI/G,SAAwB,UAAU,CAAC,OAA2B;IAC1D,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE/G,MAAM,eAAe,GAAG,IAAA,uCAAmB,EAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,KAAK,CAAC;IAE3C,OAAO,IAAA,kCAAe,EAClB,IAAA,2CAAuB,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,EACnE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACjB,IAAI,OAAO,CAAC,KAAK,SAAS;oBAAE,OAAO,CAAC,CAAC;gBACrC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACxB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAC/C,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;wBAAE,OAAO,KAAK,CAAC;gBACrD,CAAC;gBACD,OAAO,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;QACP,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC/C,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;QACrD,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,EACF,IAAA,wCAAoB,EAAC,QAAQ,EAAE,IAAI,CAAC,EACpC,GAAG,IAAA,uCAAmB,EAAC,OAAO,EAAE,YAAY,CAAC,EAC7C,IAAA,2BAAS,EAAC,eAAe,CAAC,CAC7B,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ApiPropertyOptions } from '@nestjs/swagger';
2
+ import { DtoValidatorOptions } from './validator.type';
3
+ type DtoDateOptions = ApiPropertyOptions & DtoValidatorOptions;
4
+ export default function DtoDate(options?: DtoDateOptions): PropertyDecorator;
5
+ export {};
6
+ //# sourceMappingURL=date.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.decorator.d.ts","sourceRoot":"","sources":["../../../../src/decorators/validators/date.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,KAAK,cAAc,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAE/D,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,qBAsBvD"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = DtoDate;
4
+ const class_validator_1 = require("class-validator");
5
+ const apply_decorators_1 = require("../utils/apply-decorators");
6
+ const class_transformer_1 = require("class-transformer");
7
+ const validator_options_1 = require("./utils/validator-options");
8
+ const common_decorators_1 = require("./utils/common-decorators");
9
+ function DtoDate(options) {
10
+ const { isArray = false, optional = false, validatorMessage, arrayMessage, ...swaggerOptions } = options || {};
11
+ const validatorOption = (0, validator_options_1.getValidatorOptions)({ isArray, validatorMessage });
12
+ const each = validatorOption.each ?? false;
13
+ return (0, apply_decorators_1.applyDecorators)((0, common_decorators_1.getApiPropertyDecorator)(optional, Date, isArray, swaggerOptions), (0, class_transformer_1.Transform)(({ value }) => {
14
+ if (Array.isArray(value)) {
15
+ return value.map(v => {
16
+ const d = new Date(v);
17
+ return isNaN(d.getTime()) ? v : d;
18
+ });
19
+ }
20
+ const d = new Date(value);
21
+ return isNaN(d.getTime()) ? value : d;
22
+ }), (0, common_decorators_1.getRequiredValidator)(optional, each), ...(0, common_decorators_1.getIsArrayDecorator)(isArray, arrayMessage), (0, class_validator_1.IsDate)(validatorOption));
23
+ }
24
+ //# sourceMappingURL=date.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.decorator.js","sourceRoot":"","sources":["../../../../src/decorators/validators/date.decorator.ts"],"names":[],"mappings":";;AAUA,0BAsBC;AA/BD,qDAAyC;AACzC,gEAA4D;AAC5D,yDAA8C;AAC9C,iEAAgE;AAEhE,iEAA+G;AAI/G,SAAwB,OAAO,CAAC,OAAwB;IACpD,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE/G,MAAM,eAAe,GAAG,IAAA,uCAAmB,EAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,KAAK,CAAC;IAE3C,OAAO,IAAA,kCAAe,EAClB,IAAA,2CAAuB,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAChE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACjB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,EACF,IAAA,wCAAoB,EAAC,QAAQ,EAAE,IAAI,CAAC,EACpC,GAAG,IAAA,uCAAmB,EAAC,OAAO,EAAE,YAAY,CAAC,EAC7C,IAAA,wBAAM,EAAC,eAAe,CAAC,CAC1B,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ApiPropertyOptions } from '@nestjs/swagger';
2
+ import { DtoEnumValidatorOptions } from './validator.type';
3
+ type DtoEnumOptions = ApiPropertyOptions & DtoEnumValidatorOptions;
4
+ export default function DtoEnum(enumType: object, options?: DtoEnumOptions): PropertyDecorator;
5
+ export {};
6
+ //# sourceMappingURL=enum.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.decorator.d.ts","sourceRoot":"","sources":["../../../../src/decorators/validators/enum.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,KAAK,cAAc,GAAG,kBAAkB,GAAG,uBAAuB,CAAC;AAEnE,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,qBAmBzE"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = DtoEnum;
4
+ const class_validator_1 = require("class-validator");
5
+ const apply_decorators_1 = require("../utils/apply-decorators");
6
+ const validator_options_1 = require("./utils/validator-options");
7
+ const common_decorators_1 = require("./utils/common-decorators");
8
+ function DtoEnum(enumType, options) {
9
+ const { isArray = false, optional = false, exclude = [], validatorMessage, arrayMessage, ...swaggerOptions } = options || {};
10
+ const validatorOption = (0, validator_options_1.getValidatorOptions)({ isArray, validatorMessage });
11
+ const each = validatorOption.each ?? false;
12
+ const enumValues = Object.values(enumType).filter(v => !exclude.includes(v));
13
+ return (0, apply_decorators_1.applyDecorators)((0, common_decorators_1.getApiPropertyDecorator)(optional, undefined, isArray, { enum: enumValues, ...swaggerOptions }), (0, common_decorators_1.getRequiredValidator)(optional, each), ...(0, common_decorators_1.getIsArrayDecorator)(isArray, arrayMessage), (0, class_validator_1.IsEnum)(enumValues, validatorOption));
14
+ }
15
+ //# sourceMappingURL=enum.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.decorator.js","sourceRoot":"","sources":["../../../../src/decorators/validators/enum.decorator.ts"],"names":[],"mappings":";;AASA,0BAmBC;AA3BD,qDAAyC;AACzC,gEAA4D;AAC5D,iEAAgE;AAEhE,iEAA+G;AAI/G,SAAwB,OAAO,CAAC,QAAgB,EAAE,OAAwB;IACtE,MAAM,EACF,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,EAAE,EACZ,gBAAgB,EAChB,YAAY,EACZ,GAAG,cAAc,EACpB,GAAG,OAAO,IAAI,EAAE,CAAC;IAClB,MAAM,eAAe,GAAG,IAAA,uCAAmB,EAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,KAAK,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,OAAO,IAAA,kCAAe,EAClB,IAAA,2CAAuB,EAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,CAAC,EAC9F,IAAA,wCAAoB,EAAC,QAAQ,EAAE,IAAI,CAAC,EACpC,GAAG,IAAA,uCAAmB,EAAC,OAAO,EAAE,YAAY,CAAC,EAC7C,IAAA,wBAAM,EAAC,UAAiB,EAAE,eAAe,CAAC,CAC7C,CAAC;AACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { ApiPropertyOptions } from '@nestjs/swagger';
2
+ import { IsNumberOptions } from 'class-validator';
3
+ import { DtoNumberValidatorOptions } from './validator.type';
4
+ type DtoNumberOptions = ApiPropertyOptions & IsNumberOptions & DtoNumberValidatorOptions;
5
+ export default function DtoNumber(options?: DtoNumberOptions): PropertyDecorator;
6
+ export {};
7
+ //# sourceMappingURL=number.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.decorator.d.ts","sourceRoot":"","sources":["../../../../src/decorators/validators/number.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAmB,eAAe,EAAY,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAI7D,KAAK,gBAAgB,GAAG,kBAAkB,GAAG,eAAe,GAAG,yBAAyB,CAAC;AAEzF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,qBAoE3D"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = DtoNumber;
4
+ const apply_decorators_1 = require("../utils/apply-decorators");
5
+ const class_transformer_1 = require("class-transformer");
6
+ const class_validator_1 = require("class-validator");
7
+ const validator_options_1 = require("./utils/validator-options");
8
+ const common_decorators_1 = require("./utils/common-decorators");
9
+ function DtoNumber(options) {
10
+ const { isArray = false, optional = false, isInt = false, validatorMessage, arrayMessage, min, max,
11
+ // IsNumberOptions
12
+ allowNaN = false, allowInfinity = false, maxDecimalPlaces = 0, minMessage, maxMessage,
13
+ // ApiPropertyOptions
14
+ ...swaggerOptions } = options || {};
15
+ const validatorOption = (0, validator_options_1.getValidatorOptions)({ isArray, validatorMessage });
16
+ const each = validatorOption.each ?? false;
17
+ // Min/Max 검증용 옵션 (message 제외, minMessage/maxMessage가 우선)
18
+ const { message: _, ...minMaxValidatorOption } = validatorOption;
19
+ const isNumberOption = allowNaN !== undefined || allowInfinity !== undefined || maxDecimalPlaces !== undefined
20
+ ? {
21
+ ...(allowNaN !== undefined && { allowNaN }),
22
+ ...(allowInfinity !== undefined && { allowInfinity }),
23
+ ...(maxDecimalPlaces !== undefined && { maxDecimalPlaces }),
24
+ }
25
+ : undefined;
26
+ // 숫자 검증 데코레이터
27
+ const numberValidator = isInt ? (0, class_validator_1.IsInt)(validatorOption) : (0, class_validator_1.IsNumber)(isNumberOption, validatorOption);
28
+ const minMaxValidators = [];
29
+ if (min !== undefined) {
30
+ minMaxValidators.push((0, class_validator_1.Min)(min, {
31
+ ...minMaxValidatorOption,
32
+ each,
33
+ message: minMessage,
34
+ }));
35
+ }
36
+ if (max !== undefined) {
37
+ minMaxValidators.push((0, class_validator_1.Max)(max, {
38
+ ...minMaxValidatorOption,
39
+ each,
40
+ message: maxMessage,
41
+ }));
42
+ }
43
+ return (0, apply_decorators_1.applyDecorators)((0, common_decorators_1.getApiPropertyDecorator)(optional, Number, isArray, swaggerOptions), (0, common_decorators_1.getRequiredValidator)(optional, each), (0, class_transformer_1.Transform)(({ value }) => (Array.isArray(value) ? value.map(Number) : Number(value))), numberValidator, ...(0, common_decorators_1.getIsArrayDecorator)(isArray, arrayMessage), ...minMaxValidators);
44
+ }
45
+ //# sourceMappingURL=number.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.decorator.js","sourceRoot":"","sources":["../../../../src/decorators/validators/number.decorator.ts"],"names":[],"mappings":";;AAUA,4BAoEC;AA9ED,gEAA4D;AAE5D,yDAA8C;AAC9C,qDAA6E;AAE7E,iEAAgE;AAChE,iEAA+G;AAI/G,SAAwB,SAAS,CAAC,OAA0B;IACxD,MAAM,EACF,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,KAAK,GAAG,KAAK,EACb,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,GAAG;IAEH,kBAAkB;IAClB,QAAQ,GAAG,KAAK,EAChB,aAAa,GAAG,KAAK,EACrB,gBAAgB,GAAG,CAAC,EACpB,UAAU,EACV,UAAU;IAEV,qBAAqB;IACrB,GAAG,cAAc,EACpB,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,MAAM,eAAe,GAAG,IAAA,uCAAmB,EAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,KAAK,CAAC;IAE3C,yDAAyD;IACzD,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,qBAAqB,EAAE,GAAG,eAAe,CAAC;IAEjE,MAAM,cAAc,GAChB,QAAQ,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS;QACnF,CAAC,CAAC;YACI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC3C,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,CAAC;YACrD,GAAG,CAAC,gBAAgB,KAAK,SAAS,IAAI,EAAE,gBAAgB,EAAE,CAAC;SAC9D;QACH,CAAC,CAAC,SAAS,CAAC;IAEpB,cAAc;IACd,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,IAAA,uBAAK,EAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAA,0BAAQ,EAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAEnG,MAAM,gBAAgB,GAAwB,EAAE,CAAC;IAEjD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,gBAAgB,CAAC,IAAI,CACjB,IAAA,qBAAG,EAAC,GAAG,EAAE;YACL,GAAG,qBAAqB;YACxB,IAAI;YACJ,OAAO,EAAE,UAAU;SACtB,CAAC,CACL,CAAC;IACN,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,gBAAgB,CAAC,IAAI,CACjB,IAAA,qBAAG,EAAC,GAAG,EAAE;YACL,GAAG,qBAAqB;YACxB,IAAI;YACJ,OAAO,EAAE,UAAU;SACtB,CAAC,CACL,CAAC;IACN,CAAC;IAED,OAAO,IAAA,kCAAe,EAClB,IAAA,2CAAuB,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,EAClE,IAAA,wCAAoB,EAAC,QAAQ,EAAE,IAAI,CAAC,EACpC,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EACpF,eAAe,EACf,GAAG,IAAA,uCAAmB,EAAC,OAAO,EAAE,YAAY,CAAC,EAC7C,GAAG,gBAAgB,CACtB,CAAC;AACN,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { ApiPropertyOptions } from '@nestjs/swagger';
2
+ import { IsNumberOptions } from 'class-validator';
3
+ import { DtoEnumValidatorOptions, DtoNumberValidatorOptions, DtoValidatorOptions } from './validator.type';
4
+ type PropertyStringOptions = ApiPropertyOptions & DtoValidatorOptions;
5
+ type PropertyNumberOptions = ApiPropertyOptions & IsNumberOptions & DtoNumberValidatorOptions;
6
+ type PropertyDateOptions = ApiPropertyOptions & DtoValidatorOptions;
7
+ type PropertyBooleanOptions = ApiPropertyOptions & DtoValidatorOptions;
8
+ type PropertyEnumOptions = ApiPropertyOptions & DtoEnumValidatorOptions & {
9
+ enum: object;
10
+ };
11
+ type PropertyOptions = PropertyStringOptions | PropertyNumberOptions | PropertyDateOptions | PropertyBooleanOptions | PropertyEnumOptions;
12
+ export default function Property(options: PropertyOptions): PropertyDecorator;
13
+ export {};
14
+ //# sourceMappingURL=property.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property.decorator.d.ts","sourceRoot":"","sources":["../../../../src/decorators/validators/property.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMlD,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG3G,KAAK,qBAAqB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AACtE,KAAK,qBAAqB,GAAG,kBAAkB,GAAG,eAAe,GAAG,yBAAyB,CAAC;AAC9F,KAAK,mBAAmB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AACpE,KAAK,sBAAsB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AACvE,KAAK,mBAAmB,GAAG,kBAAkB,GAAG,uBAAuB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAG3F,KAAK,eAAe,GACd,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,GACtB,mBAAmB,CAAC;AAE1B,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,iBAAiB,CAkD5E"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = Property;
7
+ const string_decorator_1 = __importDefault(require("./string.decorator"));
8
+ const number_decorator_1 = __importDefault(require("./number.decorator"));
9
+ const date_decorator_1 = __importDefault(require("./date.decorator"));
10
+ const boolean_decorator_1 = __importDefault(require("./boolean.decorator"));
11
+ const enum_decorator_1 = __importDefault(require("./enum.decorator"));
12
+ function Property(options) {
13
+ // enum이 있으면 enum 처리
14
+ if ('enum' in options && options.enum) {
15
+ const { enum: enumType, ...restOptions } = options;
16
+ return (0, enum_decorator_1.default)(enumType, restOptions);
17
+ }
18
+ // type이 없으면 에러
19
+ if (!options.type) {
20
+ throw new Error('type 또는 enum 속성이 필요합니다.');
21
+ }
22
+ const { type, ...restOptions } = options;
23
+ // type이 생성자 함수인 경우 name으로 분기 처리
24
+ if (typeof type === 'function') {
25
+ const typeName = type.name;
26
+ switch (typeName) {
27
+ case 'String':
28
+ return (0, string_decorator_1.default)(restOptions);
29
+ case 'Number':
30
+ return (0, number_decorator_1.default)(restOptions);
31
+ case 'Date':
32
+ return (0, date_decorator_1.default)(restOptions);
33
+ case 'Boolean':
34
+ return (0, boolean_decorator_1.default)(restOptions);
35
+ default:
36
+ throw new Error(`지원하지 않는 타입입니다.: ${typeName}`);
37
+ }
38
+ }
39
+ // type이 문자열인 경우도 처리 (하위 호환성)
40
+ if (typeof type === 'string') {
41
+ const typeStr = type;
42
+ if (typeStr === 'string' || typeStr === 'String') {
43
+ return (0, string_decorator_1.default)(restOptions);
44
+ }
45
+ if (typeStr === 'number' || typeStr === 'Number') {
46
+ return (0, number_decorator_1.default)(restOptions);
47
+ }
48
+ if (typeStr === 'date' || typeStr === 'Date') {
49
+ return (0, date_decorator_1.default)(restOptions);
50
+ }
51
+ if (typeStr === 'boolean' || typeStr === 'Boolean') {
52
+ return (0, boolean_decorator_1.default)(restOptions);
53
+ }
54
+ throw new Error(`지원하지 않는 타입입니다.: ${typeStr}`);
55
+ }
56
+ throw new Error('지원하지 않는 type 형식입니다.');
57
+ }
58
+ //# sourceMappingURL=property.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property.decorator.js","sourceRoot":"","sources":["../../../../src/decorators/validators/property.decorator.ts"],"names":[],"mappings":";;;;;AAwBA,2BAkDC;AAxED,0EAA2C;AAC3C,0EAA2C;AAC3C,sEAAuC;AACvC,4EAA6C;AAC7C,sEAAuC;AAkBvC,SAAwB,QAAQ,CAAC,OAAwB;IACrD,oBAAoB;IACpB,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;QACnD,OAAO,IAAA,wBAAO,EAAC,QAAQ,EAAE,WAA4C,CAAC,CAAC;IAC3E,CAAC;IAED,eAAe;IACf,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IAEzC,gCAAgC;IAChC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAI,IAAiB,CAAC,IAAI,CAAC;QACzC,QAAQ,QAAQ,EAAE,CAAC;YACf,KAAK,QAAQ;gBACT,OAAO,IAAA,0BAAS,EAAC,WAA8C,CAAC,CAAC;YACrE,KAAK,QAAQ;gBACT,OAAO,IAAA,0BAAS,EAAC,WAA8C,CAAC,CAAC;YACrE,KAAK,MAAM;gBACP,OAAO,IAAA,wBAAO,EAAC,WAA4C,CAAC,CAAC;YACjE,KAAK,SAAS;gBACV,OAAO,IAAA,2BAAU,EAAC,WAA+C,CAAC,CAAC;YACvE;gBACI,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,6BAA6B;IAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAW,CAAC;QAC5B,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO,IAAA,0BAAS,EAAC,WAA8C,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO,IAAA,0BAAS,EAAC,WAA8C,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC3C,OAAO,IAAA,wBAAO,EAAC,WAA4C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,IAAA,2BAAU,EAAC,WAA+C,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ApiPropertyOptions } from '@nestjs/swagger';
2
+ import { DtoValidatorOptions } from './validator.type';
3
+ type DtoStringOptions = ApiPropertyOptions & DtoValidatorOptions;
4
+ export default function DtoString(options?: DtoStringOptions): PropertyDecorator;
5
+ export {};
6
+ //# sourceMappingURL=string.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.decorator.d.ts","sourceRoot":"","sources":["../../../../src/decorators/validators/string.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAKvD,KAAK,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAEjE,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,qBAmB3D"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = DtoString;
4
+ const class_validator_1 = require("class-validator");
5
+ const validator_options_1 = require("./utils/validator-options");
6
+ const common_decorators_1 = require("./utils/common-decorators");
7
+ const apply_decorators_1 = require("../utils/apply-decorators");
8
+ function DtoString(options) {
9
+ const { isArray = false, optional = false, validatorMessage, notEmptyMessage, arrayMessage, ...swaggerOptions } = options || {};
10
+ const validatorOption = (0, validator_options_1.getValidatorOptions)({ isArray, validatorMessage });
11
+ const each = validatorOption.each ?? false;
12
+ return (0, apply_decorators_1.applyDecorators)((0, common_decorators_1.getApiPropertyDecorator)(optional, String, isArray, swaggerOptions), (0, common_decorators_1.getRequiredValidator)(optional, each, false), ...(0, common_decorators_1.getIsArrayDecorator)(isArray, arrayMessage), (0, class_validator_1.IsString)(validatorOption));
13
+ }
14
+ //# sourceMappingURL=string.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.decorator.js","sourceRoot":"","sources":["../../../../src/decorators/validators/string.decorator.ts"],"names":[],"mappings":";;AASA,4BAmBC;AA5BD,qDAA2C;AAG3C,iEAAgE;AAChE,iEAA+G;AAC/G,gEAA4D;AAI5D,SAAwB,SAAS,CAAC,OAA0B;IACxD,MAAM,EACF,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,GAAG,cAAc,EACpB,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,MAAM,eAAe,GAAG,IAAA,uCAAmB,EAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,KAAK,CAAC;IAE3C,OAAO,IAAA,kCAAe,EAClB,IAAA,2CAAuB,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,EAClE,IAAA,wCAAoB,EAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,EAC3C,GAAG,IAAA,uCAAmB,EAAC,OAAO,EAAE,YAAY,CAAC,EAC7C,IAAA,0BAAQ,EAAC,eAAe,CAAC,CAC5B,CAAC;AACN,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { ApiPropertyOptions } from '@nestjs/swagger';
2
+ import { DtoValidatorOptions } from '../validator.type';
3
+ /**
4
+ * PropertyDecorator 타입 정의
5
+ * TypeScript의 기본 PropertyDecorator와 호환되도록 정의
6
+ */
7
+ export type PropertyDecorator = (target: any, propertyKey: string | symbol) => void;
8
+ /**
9
+ * 공통 옵션 추출 타입
10
+ */
11
+ export type CommonOptions = DtoValidatorOptions & {
12
+ isArray?: boolean;
13
+ };
14
+ /**
15
+ * 공통 옵션에서 표준 옵션 추출
16
+ */
17
+ export declare const extractCommonOptions: <T extends CommonOptions>(options?: T) => {
18
+ isArray: boolean;
19
+ optional: boolean;
20
+ validatorMessage: string | undefined;
21
+ arrayMessage: string | undefined;
22
+ notEmptyMessage: string | undefined;
23
+ swaggerOptions: Omit<T, keyof CommonOptions>;
24
+ };
25
+ /**
26
+ * ApiProperty 또는 ApiPropertyOptional 데코레이터 반환
27
+ */
28
+ export declare const getApiPropertyDecorator: (optional: boolean, type: ApiPropertyOptions["type"], isArray: boolean, swaggerOptions?: Partial<ApiPropertyOptions>) => globalThis.PropertyDecorator;
29
+ /**
30
+ * IsOptional 또는 IsDefined/IsNotEmpty 데코레이터 반환
31
+ */
32
+ export declare const getRequiredValidator: (optional: boolean, each: boolean, useIsNotEmpty?: boolean, notEmptyMessage?: string) => globalThis.PropertyDecorator;
33
+ /**
34
+ * IsArray 데코레이터 조건부 반환
35
+ */
36
+ export declare const getIsArrayDecorator: (isArray: boolean, arrayMessage?: string) => globalThis.PropertyDecorator[];
37
+ /**
38
+ * 공통 데코레이터 배열 생성 (ApiProperty, Type 변환, 필수/선택 검증, 배열 검증)
39
+ */
40
+ export declare const createCommonDecorators: (options: CommonOptions & {
41
+ type: ApiPropertyOptions["type"];
42
+ typeTransformer?: PropertyDecorator;
43
+ customValidator?: PropertyDecorator | PropertyDecorator[];
44
+ useIsNotEmpty?: boolean;
45
+ }) => PropertyDecorator;
46
+ //# sourceMappingURL=common-decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-decorators.d.ts","sourceRoot":"","sources":["../../../../../src/decorators/validators/utils/common-decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;AAEpF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,aAAa,EAAE,UAAU,CAAC;;;;;;oBAgB/B,IAAI,CAAC,CAAC,EAAE,MAAM,aAAa,CAAC;CAErE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAChC,UAAU,OAAO,EACjB,MAAM,kBAAkB,CAAC,MAAM,CAAC,EAChC,SAAS,OAAO,EAChB,iBAAiB,OAAO,CAAC,kBAAkB,CAAC,iCAS/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC7B,UAAU,OAAO,EACjB,MAAM,OAAO,EACb,gBAAe,OAAe,EAC9B,kBAAkB,MAAM,iCAS3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,OAAO,EAAE,eAAe,MAAM,mCAE1E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAC/B,SAAS,aAAa,GAAG;IACrB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,eAAe,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;IAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,KACF,iBAkBF,CAAC"}