@aenode/prop 0.0.23 → 0.0.39
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 +12 -16
- package/assets/favicon.svg +1 -1
- package/bin/prop.mjs +3 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/common/base-dto-class.d.ts +4 -0
- package/dist/lib/common/base-dto-class.d.ts.map +1 -0
- package/dist/lib/common/base-dto-class.js +7 -0
- package/dist/lib/common/base-dto-class.js.map +1 -0
- package/dist/lib/common/global-validation-pipe.d.ts +3 -0
- package/dist/lib/common/global-validation-pipe.d.ts.map +1 -0
- package/dist/lib/common/global-validation-pipe.js +34 -0
- package/dist/lib/common/global-validation-pipe.js.map +1 -0
- package/dist/lib/common/message.dto.d.ts +4 -0
- package/dist/lib/common/message.dto.d.ts.map +1 -0
- package/dist/lib/common/message.dto.js +11 -0
- package/dist/lib/common/message.dto.js.map +1 -0
- package/dist/lib/common/validation-error-response.dto.d.ts +10 -0
- package/dist/lib/common/validation-error-response.dto.d.ts.map +1 -0
- package/dist/lib/common/validation-error-response.dto.js +44 -0
- package/dist/lib/common/validation-error-response.dto.js.map +1 -0
- package/dist/lib/default-value-transformer.d.ts +9 -0
- package/dist/lib/default-value-transformer.d.ts.map +1 -0
- package/dist/lib/default-value-transformer.js +22 -0
- package/dist/lib/default-value-transformer.js.map +1 -0
- package/dist/lib/index.d.ts +27 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +29 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/json-transformer.d.ts +2 -0
- package/dist/lib/json-transformer.d.ts.map +1 -0
- package/dist/lib/json-transformer.js +14 -0
- package/dist/lib/json-transformer.js.map +1 -0
- package/dist/lib/prop-boolean.d.ts +17 -0
- package/dist/lib/prop-boolean.d.ts.map +1 -0
- package/dist/lib/prop-boolean.js +39 -0
- package/dist/lib/prop-boolean.js.map +1 -0
- package/dist/lib/prop-common.d.ts +15 -0
- package/dist/lib/prop-common.d.ts.map +1 -0
- package/dist/lib/prop-common.js +43 -0
- package/dist/lib/prop-common.js.map +1 -0
- package/dist/lib/prop-date.d.ts +17 -0
- package/dist/lib/prop-date.d.ts.map +1 -0
- package/dist/lib/prop-date.js +41 -0
- package/dist/lib/prop-date.js.map +1 -0
- package/dist/lib/prop-enum.d.ts +17 -0
- package/dist/lib/prop-enum.d.ts.map +1 -0
- package/dist/lib/prop-enum.js +36 -0
- package/dist/lib/prop-enum.js.map +1 -0
- package/dist/lib/prop-number.d.ts +19 -0
- package/dist/lib/prop-number.d.ts.map +1 -0
- package/dist/lib/prop-number.js +62 -0
- package/dist/lib/prop-number.js.map +1 -0
- package/dist/lib/prop-object-validation.d.ts +9 -0
- package/dist/lib/prop-object-validation.d.ts.map +1 -0
- package/dist/lib/prop-object-validation.js +24 -0
- package/dist/lib/prop-object-validation.js.map +1 -0
- package/dist/lib/prop-object.d.ts +18 -0
- package/dist/lib/prop-object.d.ts.map +1 -0
- package/dist/lib/prop-object.js +53 -0
- package/dist/lib/prop-object.js.map +1 -0
- package/dist/lib/prop-options.d.ts +67 -0
- package/dist/lib/prop-options.d.ts.map +1 -0
- package/dist/lib/prop-options.js +3 -0
- package/dist/lib/prop-options.js.map +1 -0
- package/dist/lib/prop-string.d.ts +19 -0
- package/dist/lib/prop-string.d.ts.map +1 -0
- package/dist/lib/prop-string.js +112 -0
- package/dist/lib/prop-string.js.map +1 -0
- package/dist/lib/prop-validation.d.ts +10 -0
- package/dist/lib/prop-validation.d.ts.map +1 -0
- package/dist/lib/prop-validation.js +75 -0
- package/dist/lib/prop-validation.js.map +1 -0
- package/dist/lib/prop.d.ts +3 -0
- package/dist/lib/prop.d.ts.map +1 -0
- package/dist/lib/prop.js +13 -0
- package/dist/lib/prop.js.map +1 -0
- package/dist/lib/test-helpers.d.ts +3 -0
- package/dist/lib/test-helpers.d.ts.map +1 -0
- package/dist/lib/test-helpers.js +19 -0
- package/dist/lib/test-helpers.js.map +1 -0
- package/dist/lib/to-api-property-optionts.d.ts +4 -0
- package/dist/lib/to-api-property-optionts.d.ts.map +1 -0
- package/dist/lib/to-api-property-optionts.js +29 -0
- package/dist/lib/to-api-property-optionts.js.map +1 -0
- package/dist/lib/validators/index.d.ts +8 -0
- package/dist/lib/validators/index.d.ts.map +1 -0
- package/dist/lib/validators/index.js +10 -0
- package/dist/lib/validators/index.js.map +1 -0
- package/dist/lib/validators/is-relative-path.d.ts +3 -0
- package/dist/lib/validators/is-relative-path.d.ts.map +1 -0
- package/dist/lib/validators/is-relative-path.js +26 -0
- package/dist/lib/validators/is-relative-path.js.map +1 -0
- package/dist/lib/validators/less-than.d.ts +3 -0
- package/dist/lib/validators/less-than.d.ts.map +1 -0
- package/dist/lib/validators/less-than.js +26 -0
- package/dist/lib/validators/less-than.js.map +1 -0
- package/dist/lib/validators/max-properties.d.ts +3 -0
- package/dist/lib/validators/max-properties.d.ts.map +1 -0
- package/dist/lib/validators/max-properties.js +29 -0
- package/dist/lib/validators/max-properties.js.map +1 -0
- package/dist/lib/validators/min-properties.d.ts +3 -0
- package/dist/lib/validators/min-properties.d.ts.map +1 -0
- package/dist/lib/validators/min-properties.js +29 -0
- package/dist/lib/validators/min-properties.js.map +1 -0
- package/dist/lib/validators/more-than.d.ts +3 -0
- package/dist/lib/validators/more-than.d.ts.map +1 -0
- package/dist/lib/validators/more-than.js +26 -0
- package/dist/lib/validators/more-than.js.map +1 -0
- package/dist/lib/validators/not-with.d.ts +2 -0
- package/dist/lib/validators/not-with.d.ts.map +1 -0
- package/dist/lib/validators/not-with.js +25 -0
- package/dist/lib/validators/not-with.js.map +1 -0
- package/dist/lib/validators/not-without.d.ts +2 -0
- package/dist/lib/validators/not-without.d.ts.map +1 -0
- package/dist/lib/validators/not-without.js +25 -0
- package/dist/lib/validators/not-without.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +4 -0
- package/dist/main.js.map +1 -0
- package/package.json +24 -41
- package/dist/graphql/filter-dtos.d.ts +0 -69
- package/dist/graphql/filter-dtos.d.ts.map +0 -1
- package/dist/graphql/filter-dtos.js +0 -370
- package/dist/graphql/filter-dtos.js.map +0 -1
- package/dist/graphql/index.d.ts +0 -10
- package/dist/graphql/index.d.ts.map +0 -1
- package/dist/graphql/index.js +0 -12
- package/dist/graphql/index.js.map +0 -1
- package/dist/graphql/input-type.d.ts +0 -2
- package/dist/graphql/input-type.d.ts.map +0 -1
- package/dist/graphql/input-type.js +0 -8
- package/dist/graphql/input-type.js.map +0 -1
- package/dist/graphql/object-type.d.ts +0 -2
- package/dist/graphql/object-type.d.ts.map +0 -1
- package/dist/graphql/object-type.js +0 -8
- package/dist/graphql/object-type.js.map +0 -1
- package/dist/graphql/prop-order-count.d.ts +0 -2
- package/dist/graphql/prop-order-count.d.ts.map +0 -1
- package/dist/graphql/prop-order-count.js +0 -11
- package/dist/graphql/prop-order-count.js.map +0 -1
- package/dist/graphql/prop-order.d.ts +0 -2
- package/dist/graphql/prop-order.d.ts.map +0 -1
- package/dist/graphql/prop-order.js +0 -11
- package/dist/graphql/prop-order.js.map +0 -1
- package/dist/graphql/prop.d.ts +0 -9
- package/dist/graphql/prop.d.ts.map +0 -1
- package/dist/graphql/prop.js +0 -38
- package/dist/graphql/prop.js.map +0 -1
- package/dist/graphql/register-enums.d.ts +0 -2
- package/dist/graphql/register-enums.d.ts.map +0 -1
- package/dist/graphql/register-enums.js +0 -11
- package/dist/graphql/register-enums.js.map +0 -1
- package/dist/graphql/sort-count.dto.d.ts +0 -5
- package/dist/graphql/sort-count.dto.d.ts.map +0 -1
- package/dist/graphql/sort-count.dto.js +0 -22
- package/dist/graphql/sort-count.dto.js.map +0 -1
- package/dist/peers.d.ts +0 -2
- package/dist/peers.d.ts.map +0 -1
- package/dist/peers.js +0 -3
- package/dist/peers.js.map +0 -1
- package/dist/restapi/filter-dtos.d.ts +0 -44
- package/dist/restapi/filter-dtos.d.ts.map +0 -1
- package/dist/restapi/filter-dtos.js +0 -202
- package/dist/restapi/filter-dtos.js.map +0 -1
- package/dist/restapi/index.d.ts +0 -7
- package/dist/restapi/index.d.ts.map +0 -1
- package/dist/restapi/index.js +0 -9
- package/dist/restapi/index.js.map +0 -1
- package/dist/restapi/prop-order-count.d.ts +0 -2
- package/dist/restapi/prop-order-count.d.ts.map +0 -1
- package/dist/restapi/prop-order-count.js +0 -11
- package/dist/restapi/prop-order-count.js.map +0 -1
- package/dist/restapi/prop-order.d.ts +0 -2
- package/dist/restapi/prop-order.d.ts.map +0 -1
- package/dist/restapi/prop-order.js +0 -11
- package/dist/restapi/prop-order.js.map +0 -1
- package/dist/restapi/prop.d.ts +0 -3
- package/dist/restapi/prop.d.ts.map +0 -1
- package/dist/restapi/prop.js +0 -11
- package/dist/restapi/prop.js.map +0 -1
- package/dist/restapi/sort-count.dto.d.ts +0 -5
- package/dist/restapi/sort-count.dto.d.ts.map +0 -1
- package/dist/restapi/sort-count.dto.js +0 -18
- package/dist/restapi/sort-count.dto.js.map +0 -1
- package/dist/restapi/to-api-property-options.d.ts +0 -4
- package/dist/restapi/to-api-property-options.d.ts.map +0 -1
- package/dist/restapi/to-api-property-options.js +0 -37
- package/dist/restapi/to-api-property-options.js.map +0 -1
- 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 @@
|
|
|
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"}
|