[
  {
    "__docId__": 0,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/Legitimate.js",
    "memberof": null,
    "longname": "lib/Legitimate.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import * as defaultValidators from './validators';\nimport * as defaultLocales from './locales';\n\nconst\n  rulesMap = new WeakMap(),\n  stateMap = new WeakMap(),\n  localesMap = new WeakMap(),\n  isPropProper = prop => {\n    if (typeof prop !== 'string') {\n      throw new Error('Given prop must be a valid string in order to update');\n    }\n  };\n\n/**\n * Merge unique\n * @param response\n */\nexport const flattenResponse = response => new Promise((resolve, reject) => {\n  try {\n    if (typeof response !== 'object') {\n      throw new Error(`${response} should be object`);\n    }\n    if (response instanceof Array === false) {\n      return resolve(response);\n    }\n    resolve([...new Set([].concat(...response))]);\n  } catch (error) {\n\n    reject(error);\n\n  }\n});\n\n/**\n * @class {class} Legitimate\n * @classdesc Legitimate class to validate given state by updating and validating\n */\nexport class Legitimate {\n\n  /**\n   * @property state\n   * @readonly\n   * @description Returns the current state\n   * @type {object}\n   */\n  get state() {\n    return stateMap.get(this);\n  }\n\n  /**\n   * @property rules\n   * @readonly\n   * @description Returns the current rules\n   * @type {object}\n   */\n  get rules() {\n    return rulesMap.get(this);\n  }\n\n  /**\n   * @property locales\n   * @readonly\n   * @description Returns the current locales\n   * @type {object}\n   */\n  get locales() {\n    return localesMap.get(this);\n  }\n\n  /**\n   * @constructor\n   * @param locales {object} [param=defaultLocales]\n   * @param initialState {object} [initialState={}]\n   */\n  constructor(locales = defaultLocales, initialState = {}) {\n\n    rulesMap.set(this, Object.create(null));\n    stateMap.set(this, initialState);\n    localesMap.set(this, locales);\n  }\n\n  /**\n   * Sets validation functions for given prop\n   * @param prop\n   * @param rulesToAdd\n   * @returns {Legitimate}\n   */\n  setRules(prop = false, ...rulesToAdd) {\n    isPropProper(prop);\n\n    rulesMap.set(this, { ...this.rules, [prop] : [...rulesToAdd] });\n\n    return this;\n  }\n\n  /**\n   * Updates the state by given prop and value\n   * @param prop {string}\n   * @param value {*}\n   * @returns {Legitimate}\n   */\n  update(prop = false, value) {\n    isPropProper(prop);\n\n    stateMap\n      .set(this, { ...this.state, [prop] : value });\n\n    return this;\n  }\n\n  /**\n   * Triggers defined rules for prop\n   * @param prop\n   * @returns {Promise.<*>}\n   */\n  validate(prop) {\n    return new Promise((resolve, reject) => {\n\n      isPropProper(prop);\n\n      Promise\n        .all(this.rules[prop].map(validator => validator(this.state[prop], this.locales)))\n        .then(flattenResponse)\n        .then(resolve)\n        .catch(response => flattenResponse(response)\n          .then(reject)\n          .catch(reject));\n\n    });\n  }\n\n  /**\n   * Validate all\n   * @returns {Promise.<*>}\n   */\n  isLegit() {\n    return Promise\n      .all(Object.keys(this.rules).map(::this.validate))\n      .then(flattenResponse)\n      .then(::Promise.resolve)\n      .catch(response => {\n\n        return flattenResponse(response)\n          .then(::Promise.reject)\n          .catch(::Promise.reject);\n\n      });\n  }\n\n}\n\nexport const\n  locales = defaultLocales,\n  validators = defaultValidators;\n\nexport default Legitimate;\n"
  },
  {
    "__docId__": 1,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "rulesMap",
    "memberof": "lib/Legitimate.js",
    "longname": "lib/Legitimate.js~rulesMap",
    "access": null,
    "export": false,
    "importPath": "legitimate/lib/Legitimate.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "type": {
      "types": [
        "WeakMap"
      ]
    }
  },
  {
    "__docId__": 2,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "flattenResponse",
    "memberof": "lib/Legitimate.js",
    "longname": "lib/Legitimate.js~flattenResponse",
    "access": null,
    "export": true,
    "importPath": "legitimate/lib/Legitimate.js",
    "importStyle": "{flattenResponse}",
    "description": "Merge unique",
    "lineNumber": 18,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "response",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 3,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "Legitimate",
    "memberof": "lib/Legitimate.js",
    "longname": "lib/Legitimate.js~Legitimate",
    "access": null,
    "export": true,
    "importPath": "legitimate/lib/Legitimate.js",
    "importStyle": "{Legitimate}",
    "description": "",
    "lineNumber": 38,
    "unknown": [
      {
        "tagName": "@class",
        "tagValue": "{class} Legitimate"
      },
      {
        "tagName": "@classdesc",
        "tagValue": "Legitimate class to validate given state by updating and validating"
      }
    ],
    "interface": false
  },
  {
    "__docId__": 4,
    "kind": "get",
    "static": false,
    "variation": null,
    "name": "state",
    "memberof": "lib/Legitimate.js~Legitimate",
    "longname": "lib/Legitimate.js~Legitimate#state",
    "access": null,
    "description": "",
    "lineNumber": 46,
    "unknown": [
      {
        "tagName": "@readonly",
        "tagValue": ""
      },
      {
        "tagName": "@description",
        "tagValue": "Returns the current state"
      }
    ],
    "properties": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "state",
        "description": ""
      }
    ],
    "type": {
      "nullable": null,
      "types": [
        "object"
      ],
      "spread": false,
      "description": null
    },
    "generator": false
  },
  {
    "__docId__": 5,
    "kind": "get",
    "static": false,
    "variation": null,
    "name": "rules",
    "memberof": "lib/Legitimate.js~Legitimate",
    "longname": "lib/Legitimate.js~Legitimate#rules",
    "access": null,
    "description": "",
    "lineNumber": 56,
    "unknown": [
      {
        "tagName": "@readonly",
        "tagValue": ""
      },
      {
        "tagName": "@description",
        "tagValue": "Returns the current rules"
      }
    ],
    "properties": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "rules",
        "description": ""
      }
    ],
    "type": {
      "nullable": null,
      "types": [
        "object"
      ],
      "spread": false,
      "description": null
    },
    "generator": false
  },
  {
    "__docId__": 6,
    "kind": "get",
    "static": false,
    "variation": null,
    "name": "locales",
    "memberof": "lib/Legitimate.js~Legitimate",
    "longname": "lib/Legitimate.js~Legitimate#locales",
    "access": null,
    "description": "",
    "lineNumber": 66,
    "unknown": [
      {
        "tagName": "@readonly",
        "tagValue": ""
      },
      {
        "tagName": "@description",
        "tagValue": "Returns the current locales"
      }
    ],
    "properties": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "locales",
        "description": ""
      }
    ],
    "type": {
      "nullable": null,
      "types": [
        "object"
      ],
      "spread": false,
      "description": null
    },
    "generator": false
  },
  {
    "__docId__": 7,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "lib/Legitimate.js~Legitimate",
    "longname": "lib/Legitimate.js~Legitimate#constructor",
    "access": null,
    "description": "",
    "lineNumber": 75,
    "unknown": [
      {
        "tagName": "@constructor",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "locales",
        "description": "{object} [param=defaultLocales]"
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "initialState",
        "description": "{object} [initialState={}]"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 8,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setRules",
    "memberof": "lib/Legitimate.js~Legitimate",
    "longname": "lib/Legitimate.js~Legitimate#setRules",
    "access": null,
    "description": "Sets validation functions for given prop",
    "lineNumber": 88,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Legitimate}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "prop",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "rulesToAdd",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Legitimate"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 9,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "update",
    "memberof": "lib/Legitimate.js~Legitimate",
    "longname": "lib/Legitimate.js~Legitimate#update",
    "access": null,
    "description": "Updates the state by given prop and value",
    "lineNumber": 102,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Legitimate}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "prop",
        "description": "{string}"
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Legitimate"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 10,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "validate",
    "memberof": "lib/Legitimate.js~Legitimate",
    "longname": "lib/Legitimate.js~Legitimate#validate",
    "access": null,
    "description": "Triggers defined rules for prop",
    "lineNumber": 116,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise.<*>}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "prop",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise.<*>"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 11,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isLegit",
    "memberof": "lib/Legitimate.js~Legitimate",
    "longname": "lib/Legitimate.js~Legitimate#isLegit",
    "access": null,
    "description": "Validate all",
    "lineNumber": 136,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise.<*>}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise.<*>"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 12,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "locales",
    "memberof": "lib/Legitimate.js",
    "longname": "lib/Legitimate.js~locales",
    "access": null,
    "export": true,
    "importPath": "legitimate/lib/Legitimate.js",
    "importStyle": "{locales}",
    "description": null,
    "lineNumber": 152,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 13,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/locales.js",
    "memberof": null,
    "longname": "lib/locales.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "const\n  okHand = String.fromCodePoint(0x1F44C),\n  crossMark = String.fromCodePoint(0x274C);\n\nexport const\n\n  LEGIT = () => okHand,\n\n  NOT_LEGIT = () => `${crossMark}`,\n\n  TEXT_LEGIT = LEGIT,\n\n  NOT_ALPHANUMERIC_LEGIT = LEGIT,\n\n  NOT_ALPHANUMERIC = (value = '') => `${crossMark} ${value} must contain only letters and numerals`,\n\n  EMPTY_LEGIT = LEGIT,\n\n  EMPTY = () => `${crossMark} Could not be empty`,\n\n  TOO_SHORT = (value = '', min = '') => `${crossMark} ${value} is shorter than ${min} characters`,\n\n  TOO_SHORT_LEGIT = LEGIT,\n\n  TOO_LONG = (value = '', max = '') => `${crossMark} ${value} is longer than ${max} characters`,\n\n  TOO_LONG_LEGIT = LEGIT,\n\n  NEED_MORE_LOWER_CASE = (value = '', min = '') => `${crossMark} At least ${min} small case characters required`,\n\n  NEED_MORE_LOWER_CASE_LEGIT = LEGIT,\n\n  NEED_MORE_UPPER_CASE = (value = '', min = '') => `${crossMark} At least ${min} upper case characters required`,\n\n  NEED_MORE_UPPER_CASE_LEGIT = LEGIT,\n\n  URL_IS_NOT_VALID = (value = '') => `${crossMark} ${value} is not a valid URL`,\n\n  URL_IS_NOT_VALID_LEGIT = LEGIT,\n\n  EMAIL_IS_NOT_VALID = (value = '') => `${crossMark} ${value} is not a valid email`,\n\n  EMAIL_IS_NOT_VALID_LEGIT = LEGIT,\n\n  FULL_NAME_IS_NOT_VALID = (value = '') => `${crossMark} ${value} is not a valid full name`,\n\n  FULL_NAME_IS_NOT_VALID_LEGIT = LEGIT;\n\n"
  },
  {
    "__docId__": 14,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "okHand",
    "memberof": "lib/locales.js",
    "longname": "lib/locales.js~okHand",
    "access": null,
    "export": false,
    "importPath": "legitimate/lib/locales.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 1,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 15,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "LEGIT",
    "memberof": "lib/locales.js",
    "longname": "lib/locales.js~LEGIT",
    "access": null,
    "export": true,
    "importPath": "legitimate/lib/locales.js",
    "importStyle": "{LEGIT}",
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 16,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/validators.js",
    "memberof": null,
    "longname": "lib/validators.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import * as defaultLocales from './locales';\n\nexport const\n\n  /**\n   * Checks string\n   * @param value\n   * @param locales\n   */\n  isText = (value, locales = defaultLocales) => new Promise((resolve, reject) => typeof value === 'string' ?\n    resolve([locales.LEGIT(value)]) : reject([locales.NOT_LEGIT(value)])),\n\n  /**\n   * Checks for latin alphanumeric\n   * @param value\n   * @param locales\n   */\n  alphanumeric = (value, locales = defaultLocales) => isText(value)\n    .then(response => RegExp(/^[a-zA-Z0-9]*$/).test(value)\n      ? Promise.resolve([...response, locales.NOT_ALPHANUMERIC_LEGIT(value)])\n        : Promise.reject([locales.NOT_ALPHANUMERIC(value)]))\n    .catch(response => Promise.reject([...response])),\n\n  /**\n   * Checks if string has some length\n   * @param value\n   * @param locales\n   */\n  notEmpty = (value, locales = defaultLocales) => isText(value, locales)\n    .then(response => value.length > 0 ?\n        Promise.resolve([...response, locales.EMPTY_LEGIT(value)]) : Promise.reject([locales.EMPTY(value)]))\n    .catch(response => Promise.reject([...response])),\n\n  /**\n   * Checks minimum chars\n   * @param value\n   * @param locales\n   * @param min\n   */\n  min = (value, locales = defaultLocales, min = 1) => isText(value, locales)\n    .then(response => value.length >= min ?\n      Promise.resolve([...response, locales.TOO_SHORT_LEGIT(value)]) : Promise.reject([locales.TOO_SHORT(value, min)]))\n    .catch(response => Promise.reject([...response])),\n\n  /**\n   * Checks maximum chars\n   * @param value\n   * @param locales\n   * @param max\n   */\n  max = (value, locales = defaultLocales, max = 1) => isText(value, locales)\n    .then(response => (value.length <= max)\n      ? Promise.resolve([...response, locales.TOO_LONG_LEGIT(value, max)])\n        : Promise.reject([locales.TOO_LONG(value, max)]))\n    .catch(response => Promise.reject([...response])),\n\n  /**\n   * Checks minimum amount of lower cases with unicode support\n   * @param value\n   * @param locales\n   *\n   * @param min\n   */\n  minLowerCaseChars = (value, locales = defaultLocales, min = 1) => isText(value, locales)\n    .then(response => {\n      const pattern = new RegExp(/\\p{Lowercase_Letter}/u, 'g'); //eslint-disable-line\n\n      if (value.match(pattern).length >= min) {\n        return Promise.resolve([...response, locales.NEED_MORE_LOWER_CASE_LEGIT(value, min)]);\n      }\n      return Promise.reject([locales.NEED_MORE_LOWER_CASE(value, min)])\n    })\n    .catch(response => Promise.reject([...response])),\n\n  /**\n   * Checks minimum amount of upper cases with unicode support\n   * @param value\n   * @param locales\n   * @param min\n   */\n  minUpperCaseChars = (value, locales = defaultLocales, min = 1) => isText(value, locales)\n    .then(response => {\n      const pattern = new RegExp(/\\p{Uppercase_Letter}/u, 'g'); //eslint-disable-line\n\n      if (value.match(pattern).length >= min) {\n        return Promise.resolve([...response, locales.NEED_MORE_UPPER_CASE_LEGIT(value, min)]);\n      }\n      return Promise.reject([locales.NEED_MORE_UPPER_CASE(value, min)])\n    })\n    .catch(response => Promise.reject([...response])),\n\n  /**\n   * Checks URL with URL parser spec\n   * @param value\n   * @param locales\n   */\n  url = (value, locales = defaultLocales) => new Promise((resolve, reject) => {\n    try {\n      const url = new URL(value);\n\n      if (typeof url === 'object') {\n        resolve([locales.URL_IS_NOT_VALID_LEGIT(value)]);\n      }\n\n      reject([locales.URL_IS_NOT_VALID(value)]);\n\n    } catch (error) {\n      reject([locales.URL_IS_NOT_VALID(value)]);\n    }\n  }),\n\n  /**\n   * Forgiving email check, checks dots and @\n   * @param value\n   * @param locales\n   */\n  email = (value, locales = defaultLocales) => new Promise((resolve, reject) => {\n\n    const atPosition = value.lastIndexOf(\"@\");\n\n    if (atPosition <= 0) {\n      reject([locales.EMAIL_IS_NOT_VALID(value)]);\n    }\n\n    if (value.lastIndexOf(\".\") <= atPosition) {\n      reject([locales.EMAIL_IS_NOT_VALID(value)]);\n    }\n\n    if (value.length - atPosition <= 4) {\n      reject([locales.EMAIL_IS_NOT_VALID(value)]);\n    }\n\n    resolve([locales.EMAIL_IS_NOT_VALID_LEGIT(value)]);\n\n  }),\n\n  /**\n   * Checks an at least two names and special chars\n   * @param value\n   * @param locales\n   */\n  fullName = (value, locales = defaultLocales) => isText(value, locales)\n    .then(response => {\n      const pattern = new RegExp(/^[\\p{L}]([-']?[\\p{L}]+)*( [\\p{L}]([-']?[\\p{L}]+)*)+$/u); //eslint-disable-line\n\n      if (pattern.test(value) === true) {\n        return Promise.resolve([...response, locales.FULL_NAME_IS_NOT_VALID_LEGIT(value)]);\n      }\n      return Promise.reject([locales.FULL_NAME_IS_NOT_VALID(value)])\n    })\n    .catch(response => Promise.reject([...response, locales.FULL_NAME_IS_NOT_VALID(value)]));\n"
  },
  {
    "__docId__": 17,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isText",
    "memberof": "lib/validators.js",
    "longname": "lib/validators.js~isText",
    "access": null,
    "export": true,
    "importPath": "legitimate/lib/validators.js",
    "importStyle": "{isText}",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 19,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Infinity",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Infinity",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 20,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "NaN",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~NaN",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 21,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "undefined",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~undefined",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 22,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "null",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~null",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 23,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 24,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 25,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 26,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 27,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 28,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 29,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Symbol",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Symbol",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 30,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Error",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Error",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 31,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "EvalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~EvalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 32,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "InternalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/InternalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~InternalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 33,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "RangeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RangeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 34,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "ReferenceError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ReferenceError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 35,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "SyntaxError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~SyntaxError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 36,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "TypeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~TypeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 37,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "URIError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~URIError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 38,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 39,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 40,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Date",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Date",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 41,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "String",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~String",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 42,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "string",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~string",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 43,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "RegExp",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RegExp",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 44,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 45,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Int8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 46,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 47,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint8ClampedArray",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8ClampedArray",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 48,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Int16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 49,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 50,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Int32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 51,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 52,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Float32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 53,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Float64Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float64Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 54,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Map",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Map",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 55,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Set",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Set",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 56,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "WeakMap",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakMap",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 57,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "WeakSet",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakSet",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 58,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "ArrayBuffer",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ArrayBuffer",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 59,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "DataView",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~DataView",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 60,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "JSON",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~JSON",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 61,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Promise",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Promise",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 62,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Generator",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Generator",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 63,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "GeneratorFunction",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~GeneratorFunction",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 64,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Reflect",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Reflect",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 65,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Proxy",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Proxy",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 67,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "CanvasRenderingContext2D",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~CanvasRenderingContext2D",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 68,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "DocumentFragment",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~DocumentFragment",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 69,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Element",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Element",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~Element",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 70,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Event",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Event",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~Event",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 71,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Node",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Node",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~Node",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 72,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "NodeList",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/NodeList",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~NodeList",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 73,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "XMLHttpRequest",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~XMLHttpRequest",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 74,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "AudioContext",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/AudioContext",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~AudioContext",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 75,
    "kind": "testFile",
    "static": true,
    "variation": null,
    "name": "lib/Legitimate.test.js",
    "memberof": null,
    "longname": "lib/Legitimate.test.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { Legitimate, flattenResponse, locales, validators as defaultValidators } from './Legitimate';\n\njasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;\n\n/** @test {Legitimate} */\ndescribe('Legitimate', () => {\n\n  let legitimate;\n\n  const\n    TEST_OK = value => `alright value : ${value}`,\n    TEST_NOT_OKAY = value => `nope value : ${value}`,\n    validators = {\n      ...defaultValidators,\n      mock : jest.fn(),\n      async : (value, locales) => new Promise((resolve) => {\n        const timer = setTimeout(() => {\n          resolve([locales.TEST_OK(value)])\n        }, 200);\n      }),\n      test : (value, locales) => new Promise((resolve) => {\n        return resolve([locales.TEST_OK(value)]);\n      }),\n      testFail : (value, locales) => {\n        return validators.reject([locales.TEST_NOT_OKAY(value)]);\n      }\n    },\n    testLocales = {\n      ...locales,\n      TEST_OK,\n      TEST_NOT_OKAY\n    };\n\n  /** @test {Legitimate#constructor} */\n  it('can initialize', () => {\n    legitimate = new Legitimate(testLocales, {\n      invalidProp : undefined,\n      validProp : 'valid prop'\n    });\n    expect(legitimate).toBeInstanceOf(Legitimate);\n  });\n\n  /** @test {Legitimate#constructor} */\n  it('legitimate instanceof Legitimate', () => {\n    expect(legitimate instanceof Legitimate).toBe(true);\n  });\n\n  /** @test {Legitimate#rules} */\n  it('get rules', () => {\n    expect(typeof legitimate.rules).toBe('object');\n  });\n\n  /** @test {Legitimate#state} */\n  it('get state', () => {\n    expect(typeof legitimate.state).toBe('object');\n  });\n\n  /** @test {Legitimate#locales} */\n  it('get locales', () => {\n    expect(typeof legitimate.locales).toBe('object');\n  });\n\n  /** @test {flattenResponse} */\n  describe('flattenResponse', () => {\n\n    it('resolve array', cb => {\n      flattenResponse([1, 2, 3, 1, 2, 3])\n        .then(response => {\n          expect(response).toEqual([1,2,3]);\n          cb();\n        })\n        .catch(cb.fail)\n    });\n\n    it('resolve object', cb => {\n\n      const error = new Error('test');\n\n      flattenResponse(error)\n        .then(response => {\n          expect(response).toEqual(error);\n          cb();\n        })\n        .catch(cb.fail)\n    });\n\n    it('reject', cb => {\n      flattenResponse('string')\n        .then(cb.fail)\n        .catch(cb)\n    });\n\n  });\n\n  it('fails without string props', cb => {\n    expect(() => legitimate.setRules(null)).toThrow();\n    expect(() => legitimate.update(null)).toThrow();\n    legitimate\n      .validate(null)\n      .then(cb.fail)\n      .catch(cb);\n  });\n\n  /** @test {Legitimate#setRules} */\n  it('setRules', () => {\n    legitimate.setRules('newProp', validators.test);\n    expect(legitimate.rules['newProp']).toContain(validators.test);\n  });\n\n  /** @test {Legitimate#update} */\n  it('update', () => {\n    const value = 'updated value';\n    legitimate.update('newProp', value);\n    expect(legitimate.state['newProp']).toBe(value);\n  });\n\n  /** @test {Legitimate#validate} */\n  describe('validate', () => {\n\n    it('mock', cb => {\n\n      const\n        mockProp = 'mockProp',\n        mockVal = 'mockVal';\n\n      legitimate\n        .update(mockProp, mockVal)\n        .setRules(mockProp, validators.mock)\n        .validate(mockProp)\n        .then(() => {\n          expect(validators.mock).toHaveBeenLastCalledWith(mockVal, testLocales);\n          cb();\n        })\n        .catch(cb.fail);\n    });\n\n    it('real', cb => {\n\n      let val = 'newPropVal';\n\n      legitimate\n        .update('newProp', val)\n        .setRules('newProp', validators.test)\n        .validate('newProp')\n        .then(messages => {\n          expect(messages instanceof Array).toBe(true);\n          expect(messages).toContain(testLocales.TEST_OK(val));\n          cb();\n        })\n        .catch(cb.fail);\n    });\n\n    describe('complex', () => {\n\n      it('resolve', cb => {\n\n        const\n          value = 'aaaBBBB',\n          rules = [\n            validators.isText,\n            validators.notEmpty,\n            (...params) => validators.minLowerCaseChars(...params, 3)\n          ];\n\n        legitimate\n          .update('newProp', value)\n          .setRules('newProp', ...rules)\n          .validate('newProp')\n          .then(response => {\n            expect(response instanceof Array).toBe(true);\n            expect(response).toContain(testLocales.LEGIT(value));\n            cb();\n          })\n          .catch(cb.fail);\n\n\n\n      });\n\n      it('reject', cb => {\n\n        let value = 'aaBBBBBBBB';\n\n        legitimate\n          .update('newProp', value)\n          .validate('newProp')\n          .then(cb.fail)\n          .catch(response => {\n            expect(response instanceof Array).toBe(true);\n            expect(response).toContain(testLocales.NEED_MORE_LOWER_CASE(value, 3));\n            cb();\n          });\n\n      });\n\n    });\n\n  });\n\n  describe('isLegit', () => {\n\n    it('could reject', cb => {\n\n      const value = legitimate.state.newProp;\n\n      legitimate\n        .isLegit()\n        .then(error => {\n          cb.fail(error);\n        })\n        .catch(response => {\n          expect(response instanceof Array).toBe(true);\n          expect(response).toContain(testLocales.NEED_MORE_LOWER_CASE(value, 3));\n\n          cb();\n        });\n\n    });\n\n    it('could resolve', cb => {\n\n      const\n        value = 'aaaBBBB';\n\n      legitimate\n        .update('newProp', value)\n        .isLegit()\n        .then(response => {\n          expect(response instanceof Array).toBe(true);\n          expect(response).toContain(testLocales.LEGIT(value));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n  });\n\n});\n"
  },
  {
    "__docId__": 76,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe0",
    "testId": 0,
    "memberof": "lib/Legitimate.test.js",
    "testDepth": 0,
    "longname": "lib/Legitimate.test.js~describe0",
    "access": null,
    "description": "Legitimate",
    "lineNumber": 6,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{Legitimate}"
      }
    ],
    "testTargets": [
      "Legitimate"
    ]
  },
  {
    "__docId__": 77,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it1",
    "testId": 1,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.it1",
    "access": null,
    "description": "can initialize",
    "lineNumber": 35,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{Legitimate#constructor}"
      }
    ],
    "testTargets": [
      "Legitimate#constructor"
    ]
  },
  {
    "__docId__": 78,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it2",
    "testId": 2,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.it2",
    "access": null,
    "description": "legitimate instanceof Legitimate",
    "lineNumber": 44,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{Legitimate#constructor}"
      }
    ],
    "testTargets": [
      "Legitimate#constructor"
    ]
  },
  {
    "__docId__": 79,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it3",
    "testId": 3,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.it3",
    "access": null,
    "description": "get rules",
    "lineNumber": 49,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{Legitimate#rules}"
      }
    ],
    "testTargets": [
      "Legitimate#rules"
    ]
  },
  {
    "__docId__": 80,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it4",
    "testId": 4,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.it4",
    "access": null,
    "description": "get state",
    "lineNumber": 54,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{Legitimate#state}"
      }
    ],
    "testTargets": [
      "Legitimate#state"
    ]
  },
  {
    "__docId__": 81,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it5",
    "testId": 5,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.it5",
    "access": null,
    "description": "get locales",
    "lineNumber": 59,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{Legitimate#locales}"
      }
    ],
    "testTargets": [
      "Legitimate#locales"
    ]
  },
  {
    "__docId__": 82,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe6",
    "testId": 6,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.describe6",
    "access": null,
    "description": "flattenResponse",
    "lineNumber": 64,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{flattenResponse}"
      }
    ],
    "testTargets": [
      "flattenResponse"
    ]
  },
  {
    "__docId__": 83,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it7",
    "testId": 7,
    "memberof": "lib/Legitimate.test.js~describe0.describe6",
    "testDepth": 2,
    "longname": "lib/Legitimate.test.js~describe0.describe6.it7",
    "access": null,
    "description": "resolve array",
    "lineNumber": 66
  },
  {
    "__docId__": 84,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it8",
    "testId": 8,
    "memberof": "lib/Legitimate.test.js~describe0.describe6",
    "testDepth": 2,
    "longname": "lib/Legitimate.test.js~describe0.describe6.it8",
    "access": null,
    "description": "resolve object",
    "lineNumber": 75
  },
  {
    "__docId__": 85,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it9",
    "testId": 9,
    "memberof": "lib/Legitimate.test.js~describe0.describe6",
    "testDepth": 2,
    "longname": "lib/Legitimate.test.js~describe0.describe6.it9",
    "access": null,
    "description": "reject",
    "lineNumber": 87
  },
  {
    "__docId__": 86,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it10",
    "testId": 10,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.it10",
    "access": null,
    "description": "fails without string props",
    "lineNumber": 95
  },
  {
    "__docId__": 87,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it11",
    "testId": 11,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.it11",
    "access": null,
    "description": "setRules",
    "lineNumber": 105,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{Legitimate#setRules}"
      }
    ],
    "testTargets": [
      "Legitimate#setRules"
    ]
  },
  {
    "__docId__": 88,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it12",
    "testId": 12,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.it12",
    "access": null,
    "description": "update",
    "lineNumber": 111,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{Legitimate#update}"
      }
    ],
    "testTargets": [
      "Legitimate#update"
    ]
  },
  {
    "__docId__": 89,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe13",
    "testId": 13,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.describe13",
    "access": null,
    "description": "validate",
    "lineNumber": 118,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{Legitimate#validate}"
      }
    ],
    "testTargets": [
      "Legitimate#validate"
    ]
  },
  {
    "__docId__": 90,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it14",
    "testId": 14,
    "memberof": "lib/Legitimate.test.js~describe0.describe13",
    "testDepth": 2,
    "longname": "lib/Legitimate.test.js~describe0.describe13.it14",
    "access": null,
    "description": "mock",
    "lineNumber": 120
  },
  {
    "__docId__": 91,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it15",
    "testId": 15,
    "memberof": "lib/Legitimate.test.js~describe0.describe13",
    "testDepth": 2,
    "longname": "lib/Legitimate.test.js~describe0.describe13.it15",
    "access": null,
    "description": "real",
    "lineNumber": 137
  },
  {
    "__docId__": 92,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe16",
    "testId": 16,
    "memberof": "lib/Legitimate.test.js~describe0.describe13",
    "testDepth": 2,
    "longname": "lib/Legitimate.test.js~describe0.describe13.describe16",
    "access": null,
    "description": "complex",
    "lineNumber": 153
  },
  {
    "__docId__": 93,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it17",
    "testId": 17,
    "memberof": "lib/Legitimate.test.js~describe0.describe13.describe16",
    "testDepth": 3,
    "longname": "lib/Legitimate.test.js~describe0.describe13.describe16.it17",
    "access": null,
    "description": "resolve",
    "lineNumber": 155
  },
  {
    "__docId__": 94,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it18",
    "testId": 18,
    "memberof": "lib/Legitimate.test.js~describe0.describe13.describe16",
    "testDepth": 3,
    "longname": "lib/Legitimate.test.js~describe0.describe13.describe16.it18",
    "access": null,
    "description": "reject",
    "lineNumber": 180
  },
  {
    "__docId__": 95,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe19",
    "testId": 19,
    "memberof": "lib/Legitimate.test.js~describe0",
    "testDepth": 1,
    "longname": "lib/Legitimate.test.js~describe0.describe19",
    "access": null,
    "description": "isLegit",
    "lineNumber": 200
  },
  {
    "__docId__": 96,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it20",
    "testId": 20,
    "memberof": "lib/Legitimate.test.js~describe0.describe19",
    "testDepth": 2,
    "longname": "lib/Legitimate.test.js~describe0.describe19.it20",
    "access": null,
    "description": "could reject",
    "lineNumber": 202
  },
  {
    "__docId__": 97,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it21",
    "testId": 21,
    "memberof": "lib/Legitimate.test.js~describe0.describe19",
    "testDepth": 2,
    "longname": "lib/Legitimate.test.js~describe0.describe19.it21",
    "access": null,
    "description": "could resolve",
    "lineNumber": 220
  },
  {
    "__docId__": 98,
    "kind": "testFile",
    "static": true,
    "variation": null,
    "name": "lib/locales.test.js",
    "memberof": null,
    "longname": "lib/locales.test.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { locales } from './Legitimate'\n\ndescribe('locales', () => {\n\n  it('should be object', () => {\n    expect(typeof locales).toBe('object');\n  });\n\n  it('should have proper properties', () => {\n    expect(Object.keys(locales).map(localeProp => {\n      expect(typeof locales[localeProp]).toBe('function');\n\n      let locale = locales[localeProp]('a', 'b', 'c', 'd', 'e', 'f');\n      expect(typeof locale).toBe('string');\n\n    }) instanceof Array).toBe(true);\n  });\n\n});\n"
  },
  {
    "__docId__": 99,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe22",
    "testId": 22,
    "memberof": "lib/locales.test.js",
    "testDepth": 0,
    "longname": "lib/locales.test.js~describe22",
    "access": null,
    "description": "locales",
    "lineNumber": 3
  },
  {
    "__docId__": 100,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it23",
    "testId": 23,
    "memberof": "lib/locales.test.js~describe22",
    "testDepth": 1,
    "longname": "lib/locales.test.js~describe22.it23",
    "access": null,
    "description": "should be object",
    "lineNumber": 5
  },
  {
    "__docId__": 101,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it24",
    "testId": 24,
    "memberof": "lib/locales.test.js~describe22",
    "testDepth": 1,
    "longname": "lib/locales.test.js~describe22.it24",
    "access": null,
    "description": "should have proper properties",
    "lineNumber": 9
  },
  {
    "__docId__": 102,
    "kind": "testFile",
    "static": true,
    "variation": null,
    "name": "lib/validators.test.js",
    "memberof": null,
    "longname": "lib/validators.test.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import * as locales from './locales';\nimport * as validators from './validators';\nimport { flattenResponse } from './Legitimate';\n\n\njasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;\n\ndescribe('validators', () => {\n\n  /** @test {validators} */\n  it('must be object', () => {\n    expect(typeof validators).toBe('object');\n  });\n\n  /** @test {isText} */\n  describe('isText', () => {\n\n    it('could resolve', cb => {\n\n      const testText = 'Just TESTING';\n\n      validators\n        .isText(testText)\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.LEGIT(testText));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      validators\n        .isText(null)\n        .then(flattenResponse)\n        .then(response => {\n          cb.fail(response);\n        })\n        .catch((...response) => {\n\n          flattenResponse(...response)\n            .then(response => {\n              expect(response).toContain(locales.NOT_LEGIT(null));\n              cb();\n            })\n            .catch(cb.fail)\n        });\n\n    });\n\n  });\n\n  /** @test {notEmpty} */\n  describe('notEmpty', () => {\n\n    it('could resolve', cb => {\n\n      validators\n        .notEmpty('string')\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.EMPTY_LEGIT('string'));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      validators\n        .notEmpty('')\n        .then(flattenResponse)\n        .then(cb.fail)\n        .catch(response => {\n          expect(response).toContain(locales.EMPTY(''));\n          cb();\n        });\n\n    });\n\n  });\n\n  /** @test {min} */\n  describe('min', () => {\n\n    it('could resolve', cb => {\n\n      let value = 'üöı';\n\n      validators\n        .min(value, locales, 3)\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.TOO_SHORT_LEGIT(value, 3));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      let value = 'üö';\n\n      validators\n        .min(value, locales, 3)\n        .then(flattenResponse)\n        .then(cb.fail)\n        .catch(response => {\n          expect(response).toContain(locales.TOO_SHORT(value, 3));\n          cb();\n        });\n\n    });\n\n  })\n\n  /** @test {max} */\n  describe('max', () => {\n\n    it('could resolve', cb => {\n\n      let value = '12345678';\n\n      validators\n        .max(value, locales, 8)\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.TOO_LONG_LEGIT(value, 8));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      let value = '12345678';\n\n      validators\n        .max(value, locales, 7)\n        .then(flattenResponse)\n        .then(cb.fail)\n        .catch(response => {\n          console.log('response', response);\n          expect(response).toContain(locales.TOO_LONG(value, 7));\n          cb();\n        });\n\n    });\n\n  });\n\n  /** @test {minLowerCaseChars} */\n  describe('minLowerCaseChars', () => {\n\n    it('could resolve', cb => {\n\n      let value = 'aüöıBBBB';\n\n      validators\n        .minLowerCaseChars(value, locales, 4)\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.NEED_MORE_LOWER_CASE_LEGIT(value, 4));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      let value = 'üöıBBBB';\n\n      validators\n        .minLowerCaseChars(value, locales, 4)\n        .then(flattenResponse)\n        .then(cb.fail)\n        .catch(response => {\n          expect(response).toContain(locales.NEED_MORE_LOWER_CASE(value, 4));\n          cb();\n        });\n\n    });\n\n  })\n\n  /** @test {minUpperCaseChars} */\n  describe('minUpperCaseChars', () => {\n\n    it('could resolve', cb => {\n\n      let value = 'BbbBbBBÇ';\n\n      validators\n        .minUpperCaseChars(value, locales, 5)\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.NEED_MORE_UPPER_CASE_LEGIT(value, 5));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      let value = 'BbbBbBBÇ';\n\n      validators\n        .minUpperCaseChars(value, locales, 6)\n        .then(flattenResponse)\n        .then(cb.fail)\n        .catch(response => {\n          expect(response).toContain(locales.NEED_MORE_UPPER_CASE(value, 6));\n          cb();\n        });\n\n    });\n\n  })\n\n  /** @test {url} */\n  describe('url', () => {\n\n    it('could resolve', cb => {\n\n      let value = 'https://example.org/file?a=b&c=d';\n\n      validators\n        .url(value, locales)\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.URL_IS_NOT_VALID_LEGIT(value));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      let value = 'https//example.orgfile?a=b&c=d';\n\n      validators\n        .url(value, locales)\n        .then(flattenResponse)\n        .then(cb.fail)\n        .catch(response => {\n          expect(response).toContain(locales.URL_IS_NOT_VALID(value));\n          cb();\n        });\n\n    });\n\n  });\n\n  /** @test {email} */\n  describe('email', () => {\n\n    it('could resolve', cb => {\n\n      let value = 'furkan@τεστ.com';\n\n      validators\n        .email(value, locales)\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.EMAIL_IS_NOT_VALID_LEGIT(value));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      let value = 'asdasd.asa';\n\n      validators\n        .email(value, locales)\n        .then(flattenResponse)\n        .then(cb.fail)\n        .catch(response => {\n          expect(response).toContain(locales.EMAIL_IS_NOT_VALID(value));\n          cb();\n        });\n\n    });\n\n  });\n\n  /** @test {fullName} */\n  describe('fullName', () => {\n\n    it('could resolve', cb => {\n\n      let value = 'Furkan Tunalı öçÜ';\n\n      validators\n        .fullName(value, locales)\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.FULL_NAME_IS_NOT_VALID_LEGIT(value));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      let value = 'Abc.Aa';\n\n      validators\n        .fullName(value, locales)\n        .then(flattenResponse)\n        .then(cb.fail)\n        .catch(response => {\n          expect(response).toContain(locales.FULL_NAME_IS_NOT_VALID(value));\n          cb();\n        });\n\n    });\n\n  });\n\n  /** @test {username} */\n  describe('username', () => {\n\n    it('could resolve', cb => {\n\n      let value = 'jacopkane';\n\n      validators\n        .alphanumeric(value, locales)\n        .then(flattenResponse)\n        .then(response => {\n          expect(response).toContain(locales.NOT_ALPHANUMERIC_LEGIT(value));\n          cb();\n        })\n        .catch(cb.fail);\n\n    });\n\n    it('could reject', cb => {\n\n      let value = 'Furkan Tunalı';\n\n      validators\n        .alphanumeric(value, locales)\n        .then(flattenResponse)\n        .then(cb.fail)\n        .catch(response => {\n          expect(response).toContain(locales.NOT_ALPHANUMERIC(value));\n          cb();\n        });\n\n    });\n\n  })\n\n});\n"
  },
  {
    "__docId__": 103,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe25",
    "testId": 25,
    "memberof": "lib/validators.test.js",
    "testDepth": 0,
    "longname": "lib/validators.test.js~describe25",
    "access": null,
    "description": "validators",
    "lineNumber": 8
  },
  {
    "__docId__": 104,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it26",
    "testId": 26,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.it26",
    "access": null,
    "description": "must be object",
    "lineNumber": 11,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{validators}"
      }
    ],
    "testTargets": [
      "validators"
    ]
  },
  {
    "__docId__": 105,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe27",
    "testId": 27,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe27",
    "access": null,
    "description": "isText",
    "lineNumber": 16,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{isText}"
      }
    ],
    "testTargets": [
      "isText"
    ]
  },
  {
    "__docId__": 106,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it28",
    "testId": 28,
    "memberof": "lib/validators.test.js~describe25.describe27",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe27.it28",
    "access": null,
    "description": "could resolve",
    "lineNumber": 18
  },
  {
    "__docId__": 107,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it29",
    "testId": 29,
    "memberof": "lib/validators.test.js~describe25.describe27",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe27.it29",
    "access": null,
    "description": "could reject",
    "lineNumber": 33
  },
  {
    "__docId__": 108,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe30",
    "testId": 30,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe30",
    "access": null,
    "description": "notEmpty",
    "lineNumber": 56,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{notEmpty}"
      }
    ],
    "testTargets": [
      "notEmpty"
    ]
  },
  {
    "__docId__": 109,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it31",
    "testId": 31,
    "memberof": "lib/validators.test.js~describe25.describe30",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe30.it31",
    "access": null,
    "description": "could resolve",
    "lineNumber": 58
  },
  {
    "__docId__": 110,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it32",
    "testId": 32,
    "memberof": "lib/validators.test.js~describe25.describe30",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe30.it32",
    "access": null,
    "description": "could reject",
    "lineNumber": 71
  },
  {
    "__docId__": 111,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe33",
    "testId": 33,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe33",
    "access": null,
    "description": "min",
    "lineNumber": 87,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{min}"
      }
    ],
    "testTargets": [
      "min"
    ]
  },
  {
    "__docId__": 112,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it34",
    "testId": 34,
    "memberof": "lib/validators.test.js~describe25.describe33",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe33.it34",
    "access": null,
    "description": "could resolve",
    "lineNumber": 89
  },
  {
    "__docId__": 113,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it35",
    "testId": 35,
    "memberof": "lib/validators.test.js~describe25.describe33",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe33.it35",
    "access": null,
    "description": "could reject",
    "lineNumber": 104
  },
  {
    "__docId__": 114,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe36",
    "testId": 36,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe36",
    "access": null,
    "description": "max",
    "lineNumber": 122,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{max}"
      }
    ],
    "testTargets": [
      "max"
    ]
  },
  {
    "__docId__": 115,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it37",
    "testId": 37,
    "memberof": "lib/validators.test.js~describe25.describe36",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe36.it37",
    "access": null,
    "description": "could resolve",
    "lineNumber": 124
  },
  {
    "__docId__": 116,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it38",
    "testId": 38,
    "memberof": "lib/validators.test.js~describe25.describe36",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe36.it38",
    "access": null,
    "description": "could reject",
    "lineNumber": 139
  },
  {
    "__docId__": 117,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe39",
    "testId": 39,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe39",
    "access": null,
    "description": "minLowerCaseChars",
    "lineNumber": 158,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{minLowerCaseChars}"
      }
    ],
    "testTargets": [
      "minLowerCaseChars"
    ]
  },
  {
    "__docId__": 118,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it40",
    "testId": 40,
    "memberof": "lib/validators.test.js~describe25.describe39",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe39.it40",
    "access": null,
    "description": "could resolve",
    "lineNumber": 160
  },
  {
    "__docId__": 119,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it41",
    "testId": 41,
    "memberof": "lib/validators.test.js~describe25.describe39",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe39.it41",
    "access": null,
    "description": "could reject",
    "lineNumber": 175
  },
  {
    "__docId__": 120,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe42",
    "testId": 42,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe42",
    "access": null,
    "description": "minUpperCaseChars",
    "lineNumber": 193,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{minUpperCaseChars}"
      }
    ],
    "testTargets": [
      "minUpperCaseChars"
    ]
  },
  {
    "__docId__": 121,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it43",
    "testId": 43,
    "memberof": "lib/validators.test.js~describe25.describe42",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe42.it43",
    "access": null,
    "description": "could resolve",
    "lineNumber": 195
  },
  {
    "__docId__": 122,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it44",
    "testId": 44,
    "memberof": "lib/validators.test.js~describe25.describe42",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe42.it44",
    "access": null,
    "description": "could reject",
    "lineNumber": 210
  },
  {
    "__docId__": 123,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe45",
    "testId": 45,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe45",
    "access": null,
    "description": "url",
    "lineNumber": 228,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{url}"
      }
    ],
    "testTargets": [
      "url"
    ]
  },
  {
    "__docId__": 124,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it46",
    "testId": 46,
    "memberof": "lib/validators.test.js~describe25.describe45",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe45.it46",
    "access": null,
    "description": "could resolve",
    "lineNumber": 230
  },
  {
    "__docId__": 125,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it47",
    "testId": 47,
    "memberof": "lib/validators.test.js~describe25.describe45",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe45.it47",
    "access": null,
    "description": "could reject",
    "lineNumber": 245
  },
  {
    "__docId__": 126,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe48",
    "testId": 48,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe48",
    "access": null,
    "description": "email",
    "lineNumber": 263,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{email}"
      }
    ],
    "testTargets": [
      "email"
    ]
  },
  {
    "__docId__": 127,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it49",
    "testId": 49,
    "memberof": "lib/validators.test.js~describe25.describe48",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe48.it49",
    "access": null,
    "description": "could resolve",
    "lineNumber": 265
  },
  {
    "__docId__": 128,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it50",
    "testId": 50,
    "memberof": "lib/validators.test.js~describe25.describe48",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe48.it50",
    "access": null,
    "description": "could reject",
    "lineNumber": 280
  },
  {
    "__docId__": 129,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe51",
    "testId": 51,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe51",
    "access": null,
    "description": "fullName",
    "lineNumber": 298,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{fullName}"
      }
    ],
    "testTargets": [
      "fullName"
    ]
  },
  {
    "__docId__": 130,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it52",
    "testId": 52,
    "memberof": "lib/validators.test.js~describe25.describe51",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe51.it52",
    "access": null,
    "description": "could resolve",
    "lineNumber": 300
  },
  {
    "__docId__": 131,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it53",
    "testId": 53,
    "memberof": "lib/validators.test.js~describe25.describe51",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe51.it53",
    "access": null,
    "description": "could reject",
    "lineNumber": 315
  },
  {
    "__docId__": 132,
    "kind": "testDescribe",
    "static": true,
    "variation": null,
    "name": "describe54",
    "testId": 54,
    "memberof": "lib/validators.test.js~describe25",
    "testDepth": 1,
    "longname": "lib/validators.test.js~describe25.describe54",
    "access": null,
    "description": "username",
    "lineNumber": 333,
    "unknown": [
      {
        "tagName": "@test",
        "tagValue": "{username}"
      }
    ],
    "testTargets": [
      "username"
    ]
  },
  {
    "__docId__": 133,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it55",
    "testId": 55,
    "memberof": "lib/validators.test.js~describe25.describe54",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe54.it55",
    "access": null,
    "description": "could resolve",
    "lineNumber": 335
  },
  {
    "__docId__": 134,
    "kind": "testIt",
    "static": true,
    "variation": null,
    "name": "it56",
    "testId": 56,
    "memberof": "lib/validators.test.js~describe25.describe54",
    "testDepth": 2,
    "longname": "lib/validators.test.js~describe25.describe54.it56",
    "access": null,
    "description": "could reject",
    "lineNumber": 350
  }
]