diff --git a/check/index.d.ts b/check/index.d.ts index 99db20f4..75a5999f 100644 --- a/check/index.d.ts +++ b/check/index.d.ts @@ -5,5 +5,6 @@ export { ValidatorOptions, } from './check'; export * from './one-of'; +export * from './schema'; export * from './validation-chain-builders'; export * from './validation-result'; \ No newline at end of file diff --git a/check/schema.d.ts b/check/schema.d.ts new file mode 100644 index 00000000..772660a1 --- /dev/null +++ b/check/schema.d.ts @@ -0,0 +1,74 @@ +import { ValidationChain, ValidatorOptions, CustomValidator } from './check'; +import { Location } from './location'; + +export function checkSchema(schema: ValidationSchema): ValidationChain[]; + +type ValidationSchema = Record; + +type ValidatorSchemaOptions = true | { + options?: T | T[]; + errorMessage?: any; +}; + +interface ValidationParamSchema { + in: Location | Location[], + errorMessage?: any + + custom?: ValidatorSchemaOptions; + optional?: boolean | ValidatorOptions.OptionalOptions; + + equals?: ValidatorSchemaOptions; + contains?: ValidatorSchemaOptions; + isAfter?: ValidatorSchemaOptions; + isAlpha?: ValidatorSchemaOptions; + isAlphanumeric?: ValidatorSchemaOptions; + isAscii?: ValidatorSchemaOptions; + isBase64?: ValidatorSchemaOptions; + isBefore?: ValidatorSchemaOptions; + isBoolean?: ValidatorSchemaOptions; + isByteLength?: ValidatorSchemaOptions; + isCreditCard?: ValidatorSchemaOptions; + isCurrency?: ValidatorSchemaOptions; + isDataURI?: ValidatorSchemaOptions; + isDate?: ValidatorSchemaOptions; + isDecimal?: ValidatorSchemaOptions; + isDivisibleBy?: ValidatorSchemaOptions; + isEmail?: ValidatorSchemaOptions; + isEmpty?: ValidatorSchemaOptions; + isFloat?: ValidatorSchemaOptions; + isFQDN?: ValidatorSchemaOptions; + isFullWidth?: ValidatorSchemaOptions; + isHalfWidth?: ValidatorSchemaOptions; + isHash?: ValidatorSchemaOptions; + isHexadecimal?: ValidatorSchemaOptions; + isHexColor?: ValidatorSchemaOptions; + isIn?: ValidatorSchemaOptions; + isInt?: ValidatorSchemaOptions; + isIP?: ValidatorSchemaOptions; + isISIN?: ValidatorSchemaOptions; + isISO31661Alpha2?: ValidatorSchemaOptions; + isISO8601?: ValidatorSchemaOptions; + isISRC?: ValidatorSchemaOptions; + isISBN?: ValidatorSchemaOptions; + isISSN?: ValidatorSchemaOptions; + isJSON?: ValidatorSchemaOptions; + isNumeric?: ValidatorSchemaOptions; + isLatLong?: ValidatorSchemaOptions; + isLength?: ValidatorSchemaOptions; + isLowercase?: ValidatorSchemaOptions; + isMACAddress?: ValidatorSchemaOptions; + isMD5?: ValidatorSchemaOptions; + isMimeType?: ValidatorSchemaOptions; + isMobilePhone?: ValidatorSchemaOptions; + isMongoId?: ValidatorSchemaOptions; + isMultibyte?: ValidatorSchemaOptions; + isPostalCode?: ValidatorSchemaOptions; + isPort?: ValidatorSchemaOptions; + isSurrogatePair?: ValidatorSchemaOptions; + isUppercase?: ValidatorSchemaOptions; + isURL?: ValidatorSchemaOptions; + isUUID?: ValidatorSchemaOptions; + isVariableWidth?: ValidatorSchemaOptions; + isWhitelisted?: ValidatorSchemaOptions; + matches?: ValidatorSchemaOptions; +} \ No newline at end of file diff --git a/check/schema.spec.ts b/check/schema.spec.ts new file mode 100644 index 00000000..5594dd25 --- /dev/null +++ b/check/schema.spec.ts @@ -0,0 +1,24 @@ +import { ValidationChain } from './check'; +import { checkSchema, ValidationSchema, ValidationParamSchema } from './schema'; + +const fooSchema: ValidationParamSchema = { + in: 'body', + isAlpha: true, + isIn: { + errorMessage: 'foo', + options: [['foo', 'bar']] + }, + custom: { + options: (value, { req, location, path }) => { + return value + req.body.foo + location + path; + } + } +}; + +const barSchema: ValidationParamSchema = { + in: ['body', 'params'], + errorMessage: 'foo' +}; + +const schema: ValidationSchema = { fooSchema, barSchema }; +const chains: ValidationChain[] = checkSchema(schema); \ No newline at end of file