1.3.9 • Published 9 years ago

tcomb-validator-plus v1.3.9

Weekly downloads
4
License
ISC
Repository
-
Last release
9 years ago

tcomb-validator-plus

Advanced validation helpers for tcomb-validation

Features

  • Used validator.js for strings
  • Custom error messages
  • Context binding
  • Compile from simple schema

Extending rules

import createValidator from 'tcomb-validator-plus'
import extend from 'tcomb-validator-plus/extend'
import gt from 'tcomb-validator-plus/getType'
import {intersection} from 'tcomb'

function fakeLocalize(message, context) {
    return {
        message,
        context
    }
}

const validate = createValidator(fakeLocalize)

const password = (min, max) => intersection([
    gt('isLengthMin')(min),
    gt('isLengthMax', 'password greate than #{val}')(max)
])

extend('password', password)


const schema = struct({
    password: gt('password')(3, 5),
})
const compiledSchema = compile({
    password: 'password'
})

const data = {
    password: '12'
}

const errors = {
    errors: {
        password: {
            context: {
                actual: '12',
                val: 3
            },
            message: 'isLengthMin'
        }
    },
    isError: true,
    params: {
        password: '12'
    }
}

const obj = validate(schema)(data)
assert.deepEqual(obj, errors)
const obj2 = validate(compiledSchema)(data)
assert.deepEqual(obj2, errors)

Simple usage

// simple-1.js
import assert from 'power-assert'
import createValidator from 'tcomb-validator-plus'
import compile from 'tcomb-validator-plus/compile'

function fakeLocalize(message, context) {
    return {
        message,
        context
    }
}

const validate = createValidator(fakeLocalize)

const myValidate = validate(compile({
    confirmed: {v: 'required', l: 'check confirm'},
    password: [
        ['isLengthMin', 3],
        {l: 'password greate than #{val}', v: ['isLengthMax', 5]}
    ],
    confirmPassword: [
        ['isLengthMin', 3],
        {l: 'password greate than #{val}', v: ['isLengthMax', 5]}
    ],
    user: {v: 'required', l: 'user required'},
    opts: {v: ['listOf', ['opt1', 'opt2']], l: '#{actual} is not a one of #{val}'},
    __: {v: ['equal', 'password', 'confirmPassword'], l: 'Passwords are not equal'}
}))

const data = {
    confirmed: false,
    password: '1234',
    confirmPassword: '1235',
    user: '',
    opts: ['opt1', 'opt3']
}

const errors = {
    errors: {
        confirmed: {
            message: 'check confirm',
            context: {
                actual: false
            }
        },
        user: {
            message: 'user required',
            context: {
                actual: ''
                path: ['user'],
            }
        },
        opts: {
            message: '#{actual} is not a one of #{val}',
            context: {
                val: 'opt1, opt2',
                actual: 'opt3'
            }
        }
    },
    isError: true,
    params: {
        confirmed: false,
        password: '1234',
        confirmPassword: '1235',
        user: '',
        opts: ['opt1', 'opt3']
    }
}

const obj1 = myValidate(data)
assert.deepEqual(obj1, errors)

const data2 = {
    confirmed: true,
    password: '1234',
    confirmPassword: '1235',
    user: 'test',
    opts: ['opt1', 'opt2']
}

const errors = {
    errors: {
        __: {
            context: {
                from: 'password',
                to: 'confirmPassword',
                actual: {
                    confirmed: true,
                    password: '1234',
                    confirmPassword: '1235',
                    user: 'test',
                    opts: [
                        'opt1',
                        'opt2'
                    ]
                }
            },
            message: 'Passwords are not equal'
        }
    },
    isError: true,
    {
        confirmed: true,
        password: '1234',
        confirmPassword: '1235',
        user: 'test',
        opts: ['opt1', 'opt2']
    }
}

const obj2 = myValidate(data2)
assert.deepEqual(obj2, errors)

Promise usage

import {validate} from 'tcomb-validation'
import assert from 'power-assert'
import createValidator from 'tcomb-validator-plus'
import promisifyValidate, {ParamsError} from 'tcomb-validator-plus/promisifyValidate'
import compile from 'tcomb-validator-plus/compile'

function fakeLocalize(message, context) {
    return {
        message,
        context
    }
}

const validate = promisifyValidate(createValidator(fakeLocalize))

const myValidate = validate(compile({
    confirmed: {v: 'required', l: 'check confirm'},
    password: [
        ['isLengthMin', 3],
        {l: 'password greate than #{val}', v: ['isLengthMax', 5]}
    ],
    confirmPassword: [
        ['isLengthMin', 3],
        {l: 'password greate than #{val}', v: ['isLengthMax', 5]}
    ],
    user: {v: 'required', l: 'user required'},
    opts: {v: ['listOf', ['opt1', 'opt2']], l: '#{actual} is not a one of #{val}'},
    __: {v: ['equal', 'password', 'confirmPassword'], l: 'Passwords are not equal'}
}))

const data = {
    confirmed: false,
    password: '1234',
    confirmPassword: '1235',
    user: '',
    opts: ['opt1', 'opt3']
}

const errors = {
    errors: {
        confirmed: {
            message: 'check confirm',
            context: {
                actual: false
            }
        },
        user: {
            message: 'user required',
            context: {
                actual: ''
                path: ['user'],
            }
        },
        opts: {
            message: '#{actual} is not a one of #{val}',
            context: {
                val: 'opt1, opt2',
                actual: 'opt3'
            }
        }
    },
    isError: true,
    params: {
        confirmed: false,
        password: '1234',
        confirmPassword: '1235',
        user: '',
        opts: ['opt1', 'opt3']
    }
}

myValidate(data)
    .then(params => {
        assert.deepEqual(params, data)
    })
    .catch(e => {
        assert.deepEqual(e.errors, errors)
    })
1.3.9

9 years ago

1.3.8

9 years ago

1.3.7

10 years ago

1.3.6

10 years ago

1.3.5

10 years ago

1.3.4

10 years ago

1.3.3

10 years ago

1.3.2

10 years ago

1.3.0

10 years ago

1.2.9

10 years ago

1.2.6

10 years ago

1.2.5

10 years ago

1.2.4

10 years ago

1.2.3

10 years ago

1.2.2

10 years ago

1.2.0

10 years ago

1.1.4

10 years ago

1.1.3

10 years ago

1.1.2

10 years ago

1.1.1

10 years ago

1.1.0

10 years ago

1.0.5

10 years ago

1.0.4

10 years ago

1.0.3

10 years ago

1.0.2

10 years ago

1.0.1

10 years ago