Skip to content

Commit

Permalink
fix(TS): support validate NestedArray
Browse files Browse the repository at this point in the history
  • Loading branch information
MingboPeng committed Sep 10, 2024
1 parent a386adf commit 4499c7a
Showing 1 changed file with 94 additions and 0 deletions.
94 changes: 94 additions & 0 deletions src/TypeScriptSDK/helpers/class-validator.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator';


// Custom decorator to validate nested arrays of numbers
export function IsNestedNumberArray(validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
registerDecorator({
name: 'isNestedNumberArray',
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
validator: {
validate(value: any, args: ValidationArguments) {
if (value === undefined || value === null) return true; // Allow optional values
if (!Array.isArray(value)) return false;
return value.every(
(arr: any) => Array.isArray(arr) && arr.every(
(subArr: any) =>
(Array.isArray(subArr) && subArr.every(
(num: any) => typeof num === 'number'
)) ||
typeof subArr === 'number'
)
);
},
defaultMessage(args: ValidationArguments) {
return `${args.property} must be number[][] or number[][][]`;
}
}
});
};
}


// Custom decorator to validate nested arrays of numbers
export function IsNestedIntegerArray(validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
registerDecorator({
name: 'isNestedIntegerArray',
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
validator: {
validate(value: any, args: ValidationArguments) {
if (value === undefined || value === null) return true; // Allow optional values
if (!Array.isArray(value)) return false;
return value.every(
(arr: any) => Array.isArray(arr) && arr.every(
(subArr: any) =>
(Array.isArray(subArr) && subArr.every(
(num: any) => Number.isInteger(num)
)) ||
Number.isInteger(subArr)
)
);
},
defaultMessage(args: ValidationArguments) {
return `${args.property} must be number[][] or number[][][]`;
}
}
});
};
}


// Custom decorator to validate nested arrays of numbers
export function IsNestedStringArray(validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
registerDecorator({
name: 'isNestedStringArray',
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
validator: {
validate(value: any, args: ValidationArguments) {
if (value === undefined || value === null) return true; // Allow optional values
if (!Array.isArray(value)) return false;
return value.every(
(arr: any) => Array.isArray(arr) && arr.every(
(subArr: any) =>
(Array.isArray(subArr) && subArr.every(
(num: any) => typeof num === 'string'
)) ||
typeof subArr === 'string'
)
);
},
defaultMessage(args: ValidationArguments) {
return `${args.property} must be string[][] or string[][][]`;
}
}
});
};
}

0 comments on commit 4499c7a

Please sign in to comment.