argstype

Deep function arguments type check

npm install argstype
3 downloads in the last week
5 downloads in the last month

ArgsType

Deep function arguments type check

Example Пример

var argstype = require('argstype');



// define function, making module-specific errors
// определение функции, создающей экземпляры ошибок текущего модуля
var errorProvider = function( text ){
    return ( new Error( 'Module name: ' + text ) );
};



// supported types:
// поддерживаемые типы в правилах:
//  'b' - boolean
//  'n' - number
//  's' - string
//  'f' - function
//  'o' - object
//  'a' - array

// define rule
// пример правила
var rules = [
    // rule pattern:
    // name, required, type, child type (child type may be a string, rule, array of rules)
    // name is used to access to object property and generate error messages
    // правило состоит из 4 частей:
    // имя, обязательность, тип, тип дочерних элементов (может быть строкой, правилом или массивом правил)
    // имя используется для доступа к параметру и генерации ошибок
    ['options', true, 'o', [
        ['provider', true, 'o', [
            // array of rules; rules are applied by name (to object) or by position (to array)
            // это массив правил; правила применяются по имени (в объекте) или по позиции (в массиве)
            ['find', true, 'f'],
            ['insert', true, 'f'],
            ['modify', true, 'f'],
            ['delete', true, 'f']
        ]],
        ['views', true, 'o', [
            // rule with name '*' means that this rule should be applied to every element of object/array
            // правило с именем '*' означает, что правило должно быть применено ко всем элементам массива/объекта
            '*', false, 'o', [
                ['view', true, 'o', [
                    ['name', true, 's'],
                    ['template', false, 's'],
                    ['config', true, 'o'],
                    ['view', true, 'o']
                ]],
                ['vids', true, 'o', [
                    '*', false, 'a', [
                        ['flexo', true, 's'],
                        ['field', true, 's']
                    ]
                ]]
            ]
        ]],
        ['templatePath', true, 's'],
        ['templateTimeout', false, 'n']
    ]],
    // if last rule has name 'callback' AND
    // if it is required AND
    // if it's type is a function AND
    // if there's no callback in arguments THAN
    // module throws an exception
    // если имя последнего правила 'callback' И
    // если аргумент является обязательным И
    // если он должен быть фукцией
    // если в аргументах вызова функции его нет, ТО
    // модуль выкидывает исключение
    ['callback', true, 'f']
];



// make a specialized checker
// можно получить функцию проверки аргументов, к которой прикреплены провайдер ошибок и правила
var checker = argstype.getChecker( errorProvider, rules );



// define function, which arguments should be checked
// определим функцию для которой надо провести проверку аргументов
var myFunction = function( options, callback ){
    var error;

    // use predefined checker
    // здесь производится проверка посредством ранее созданной функции проверки
    error = checker( arguments );

    // or checking in place
    // но можно воспользоваться и длинным путем
    error = argstype.check( arguments, rules, errorProvider );

    if( error ){
        callback( error );
        return;
    }

    // superstar code
    // тело супер-функции

    callback( null, true );
};



// valid arguments example
// пример валидных входных аргументов
var validOptions = {
    provider: {
        find: function(){},
        insert: function(){},
        modify: function(){},
        delete: function(){}
    },
    views: {
        test: { // optional
            view: {
                name: 'test',
                //optional
                // необязательное поле
                template: 'test.tpl',
                config: {},
                view: {}
            },
            vids: {
                //optional
                // необязательное поле
                a: [ 'foo', 'bar' ]
            }
        }
    },
    templatePath: '/dev/random/',
    templateTimeout: '100'
};
var validCallback = function(error, result){};



// run your function
// запуск функции с валидными аргументами
myFunction( validOptions, validCallback );
npm loves you