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.
- package/README.md +2 -18
- package/dist/decorators/utils/apply-decorators.js +8 -2
- package/dist/decorators/utils/apply-decorators.js.map +1 -1
- package/dist/decorators/validators/string.decorator.d.ts.map +1 -1
- package/dist/decorators/validators/string.decorator.js +1 -2
- package/dist/decorators/validators/string.decorator.js.map +1 -1
- package/dist/src/decorators/utils/apply-decorators.d.ts +21 -0
- package/dist/src/decorators/utils/apply-decorators.d.ts.map +1 -0
- package/dist/src/decorators/utils/apply-decorators.js +58 -0
- package/dist/src/decorators/utils/apply-decorators.js.map +1 -0
- package/dist/src/decorators/validators/boolean.decorator.d.ts +6 -0
- package/dist/src/decorators/validators/boolean.decorator.d.ts.map +1 -0
- package/dist/src/decorators/validators/boolean.decorator.js +40 -0
- package/dist/src/decorators/validators/boolean.decorator.js.map +1 -0
- package/dist/src/decorators/validators/date.decorator.d.ts +6 -0
- package/dist/src/decorators/validators/date.decorator.d.ts.map +1 -0
- package/dist/src/decorators/validators/date.decorator.js +24 -0
- package/dist/src/decorators/validators/date.decorator.js.map +1 -0
- package/dist/src/decorators/validators/enum.decorator.d.ts +6 -0
- package/dist/src/decorators/validators/enum.decorator.d.ts.map +1 -0
- package/dist/src/decorators/validators/enum.decorator.js +15 -0
- package/dist/src/decorators/validators/enum.decorator.js.map +1 -0
- package/dist/src/decorators/validators/number.decorator.d.ts +7 -0
- package/dist/src/decorators/validators/number.decorator.d.ts.map +1 -0
- package/dist/src/decorators/validators/number.decorator.js +45 -0
- package/dist/src/decorators/validators/number.decorator.js.map +1 -0
- package/dist/src/decorators/validators/property.decorator.d.ts +14 -0
- package/dist/src/decorators/validators/property.decorator.d.ts.map +1 -0
- package/dist/src/decorators/validators/property.decorator.js +58 -0
- package/dist/src/decorators/validators/property.decorator.js.map +1 -0
- package/dist/src/decorators/validators/string.decorator.d.ts +6 -0
- package/dist/src/decorators/validators/string.decorator.d.ts.map +1 -0
- package/dist/src/decorators/validators/string.decorator.js +14 -0
- package/dist/src/decorators/validators/string.decorator.js.map +1 -0
- package/dist/src/decorators/validators/utils/common-decorators.d.ts +46 -0
- package/dist/src/decorators/validators/utils/common-decorators.d.ts.map +1 -0
- package/dist/src/decorators/validators/utils/common-decorators.js +75 -0
- package/dist/src/decorators/validators/utils/common-decorators.js.map +1 -0
- package/dist/src/decorators/validators/utils/validator-options.d.ts +8 -0
- package/dist/src/decorators/validators/utils/validator-options.d.ts.map +1 -0
- package/dist/src/decorators/validators/utils/validator-options.js +11 -0
- package/dist/src/decorators/validators/utils/validator-options.js.map +1 -0
- package/dist/src/decorators/validators/validator.type.d.ts +20 -0
- package/dist/src/decorators/validators/validator.type.d.ts.map +1 -0
- package/dist/src/decorators/validators/validator.type.js +3 -0
- package/dist/src/decorators/validators/validator.type.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +31 -0
- package/dist/src/index.js.map +1 -0
- package/dist/tests/apply-decorators.test.d.ts +2 -0
- package/dist/tests/apply-decorators.test.d.ts.map +1 -0
- package/dist/tests/apply-decorators.test.js +21 -0
- package/dist/tests/apply-decorators.test.js.map +1 -0
- package/dist/tests/property.decorator.test.d.ts +2 -0
- package/dist/tests/property.decorator.test.d.ts.map +1 -0
- package/dist/tests/property.decorator.test.js +326 -0
- package/dist/tests/property.decorator.test.js.map +1 -0
- package/dist/tests/setup.d.ts +2 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/tests/setup.js +4 -0
- package/dist/tests/setup.js.map +1 -0
- 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
|
-
이 라이브러리는 다음 패키지들을 **
|
|
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
|
-
> **참고**:
|
|
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
|
-
|
|
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
|
|
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,
|
|
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":"
|
|
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,
|
|
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":";;
|
|
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"}
|