Skip to content
uupaa edited this page Feb 25, 2016 · 31 revisions

API

  • Valid.valid - 例外を発生させます
  • Valid.args - 自動的にバリデーションコードを生成し引数を評価します
  • Valid.type - 型の一致を検査します
  • Valid.keys - 引数で与えられた Object/Array の key の値が想定通りか検査します
  • Valid.values - 引数で与えられた Object/Array の value の値が想定通りか検査します
  • Valid.some - 引数で与えられた文字列が想定通りか検査します
  • Valid.json - 引数で与えられたJSONの構造と型が想定通りか検査します
  • Valid.stack - コールスタックの不要部分をカットした状態でダンプします

Valid

Valid(value:Boolean, api:Function, highlihgt:String = ""):void は value が false の場合に例外を発生させます

  • api には関数を指定します
  • highlihgt には Syntax Highlight させたいキーワードを指定します

api に指定した関数がコンソールにダンプされます

Valid(false) // -> Error("Validation Error: " + api.name + "(" + highlihgt + ") is invalid value.");

Valid.args

Valid.args(api:Function, args:Array|ArrayLike):void は、Help.js のフォーマットで記述された 関数のコメント部分から、関数の引数の型と戻り値の情報を読み取り、バリデーションコードを生成し args に渡された引数を自動的に評価します。

具体的には @arg ..., @var_args ..., @ret ... を読み取り、全ての引数と戻り値に対してバリデーション( $valid($type(...)) 相当のコード) を実行します。

function foo(arg1,   // @arg Number|String
             arg2) { // @arg String = ""
//{@dev
    $args(foo, arguments);
//}@dev

    // your code
}

上記のコードは、以下のコードと同じ結果になります。

function foo(arg1,   // @arg Number|String
             arg2) { // @arg String = ""
//{@dev
    $valid($type(arg1, "Number|String"), foo, "arg1");
    $valid($type(arg2, "String|omit"),   foo, "arg2");
//}@dev

    // your code
}

Valid.type

Valid.type(value:Any, types:String):Boolean は、value の型が types のいずれかと一致する場合に true を返します。

types には value が取りうる型名を複数指定可能です。 複数指定する場合は "Object|Function" のように区切り文字(|)で区切って指定します。一部の型名は大文字小文字を区別しません。

$type(123, "String");          // -> false
$type(null, "null|undefined"); // -> true

valuetypes のいずれかのベースクラスと型が一致するかどうかも比較できます。

$type(new TypeError(), "TypeError"); // -> true
$type(new Error(),     "TypeError"); // -> false
$type(new TypeError(), "Error");     // -> true (TypeError は Error から派生しているため true になります)

ユーザ定義クラスとインスタンスも指定できます。

function MyClass() { }

var myclass = new MyClass();

$type(myclass, "MyClass"); // -> true

特別な機能をもった型名も指定可能です。

types
"omit" 引数が省略可能なことを明示します。
`"null
"integer" 小数点以下を持たない数値なら true になります
"typedarray" value が TypedArray 型(Uint8Array, Float32Array, ...)なら true になります

Valid.keys

Valid.keys(object:Object|Array|null|undefined, key:String):Boolean は、 Object.keys(object) が返す配列と key を比較し、key で明示されていない要素が配列に含まれている場合に false を返します。

  • object が null または undefined の場合は true を返します
  • key に複数の値を指定する場合は、区切り文字(|)で連結し, "a|b" のようにします
var object = { "foo": 1, "bar": 2, "buz": 3, };
var array  = [ 1, 2 ]; // { 0: 1, 1: 2, length: 2 }

$keys(object,    "foo|bar");         // -> false (foo or bar を想定しているが、object に想定外の buz が存在する → false)
$keys(object,    "foo|bar|buz|pee"); // -> true  (foo or bar or buz or pee を想定しており、 object に foo, bar, buz が含まれる → true)
$keys(array,     "0|1");             // -> true  (0 or 1 を想定しており、array に 0, 1 が含まれる → true)
$keys(array,     "0|2");             // -> false (0 or 1 を想定しており、array に想定外の 2 が含まれる → false)
$kyes(null,      "");                // -> true
$kyes(undefined, "");                // -> true

Valid.values

Valid.values(object:Object|Array|null|undefined, value:Array):Boolean は、 Object.values(object) が返す配列と value を比較し、value で明示されていない要素が配列に含まれている場合に false を返します。

  • object が null または undefined の場合は true を返します
var object = { "foo": 1, "bar": 2, "buz": 3, };
var array  = [ 1, 2 ]; // { 0: 1, 1: 2, length: 2 }

$values(object,    [1,2]);          // -> false (1 or 2 を想定しているが、object に想定外の 3 が存在する → false)
$values(object,    [1,2,3,4]);      // -> true  (1 or 2 or 3 or 4 を想定しており、object に 1, 2, 3 が含まれる → true)
$values(array,     [1,2]);          // -> true  (1 or 2 を想定しており、array に 1, 2 が含まれる → true)
$values(array,     [1,3]);          // -> false (1 or 3 を想定しており、array に想定外の 2 が含まれる → false)
$values(null,      []);             // -> true
$values(undefined, []);             // -> true

Valid.some

Valid.some(value:String|null|undefined, candidate:String|Object, ignoreCase:Boolean = false):Boolean は、 valuecandidate で指定された文字列のどれかである場合に true を返します。 candidate には、区切り文字(|)で区切られた文字列を指定できます。

  • candidate が Object の場合は、内部で candidate = Object.keys(candidate).join("|") 相当の前処理を行います
  • value が null または undefined の場合は true を返します。
  • ignoreCase が true なら大文字小文字を区別せずに比較します。
$values("foo", "foo|bar"       ); // -> true
$values("foo", { 1:"foo", 2:"bar" }); // -> true
$values(null,  "foo|bar"       ); // -> true

Valid.json

Valid.json(data:JSONObject, validate:JSONObject):Boolean は、datavalidate を比較し、構造と型が一致する場合に true を返します。

data と同じ構造で同じ型を持つダミーの JSON Object を validate に指定します。

この関数は、階層構造と型のチェックを行いますが、値が一致しているかどうかは検査しません。

var data = {
        "key1": "abc",
        "key2": 123
    };

var validate = {
        "key1": "", // validate.key1 は String 型
        "key2": 0   // validate.key2 は Number 型
    };

Valid.json(data, validate); // -> true
var data = {
        "key1": "abc",
        "key2": [
            {
                "key3": [
                    1111111111,
                    false
                ]
            }
        ]
    };

var validate = {
        "key1": "",        // validate.key1 は String 型
        "key2": [          // validate.key2 は Array 型
            {              // validate.key2[0] は Object 型
                "key3": [  // validate.key2[0].key3 は Array 型
                    0,     // validate.key2[0].key3[0] は Number 型
                    true   // validate.key2[0].key3[1] は Boolean 型
                ]
            }
        ]
    };

Valid.json(data, validate); // -> true

Valid.stack

Valid.stack(message:String = "", depth:Integer = 3):String は、コールスタックを生成し、depth 分の行をカットした文字列を返します。

  • message を先頭行に出力します。
Valid.stack("Hello callstack");

Hello callstack
    at FrameMirror.evaluate (native)
    at Object.evaluate (<anonymous>:354:28)
    at Object.InjectedScript._evaluateOn (<anonymous>:641:39)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:580:52)
    at Object.InjectedScript.evaluateOnCallFrame (<anonymous>:691:21)
    at testValidType (file://localhost/Users/obara.takao/oss/my/Valid.js/test/test.js:62:16)
    at _next (file://localhost/Users/obara.takao/oss/my/Valid.js/node_modules/uupaa.test.js/lib/Test.js:212:13)
    at _runTest (file://localhost/Users/obara.takao/oss/my/Valid.js/node_modules/uupaa.test.js/lib/Test.js:206:5)