From a25262b8f9b60d371fbf448963305a9a9be08667 Mon Sep 17 00:00:00 2001 From: Jason Quense Date: Fri, 9 Feb 2018 12:21:55 -0500 Subject: [PATCH] prettier --- package-lock.json | 6792 ---------------------------------- package.json | 27 +- src/Condition.js | 44 +- src/Lazy.js | 20 +- src/Reference.js | 33 +- src/ValidationError.js | 53 +- src/array.js | 133 +- src/boolean.js | 26 +- src/customLocale.js | 8 +- src/date.js | 59 +- src/index.js | 14 +- src/locale.js | 78 +- src/mixed.js | 428 +-- src/number.js | 77 +- src/object.js | 217 +- src/string.js | 129 +- src/util/createValidation.js | 113 +- src/util/inherits.js | 5 +- src/util/isAbsent.js | 3 +- src/util/isSchema.js | 4 +- src/util/isodate.js | 45 +- src/util/makePath.js | 5 +- src/util/merge.js | 42 +- src/util/printValue.js | 22 +- src/util/reach.js | 25 +- src/util/runValidations.js | 60 +- src/util/sortByKeyOrder.js | 11 +- src/util/sortFields.js | 33 +- test/ValidationError.js | 66 +- test/array.js | 201 +- test/bool.js | 100 +- test/customLocale.js | 26 +- test/date.js | 212 +- test/helpers.js | 62 +- test/mixed.js | 747 ++-- test/number.js | 349 +- test/object.js | 861 +++-- test/string.js | 401 +- test/yup.js | 193 +- yarn.lock | 438 ++- 40 files changed, 3071 insertions(+), 9091 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index cbc3d60e2..000000000 --- a/package-lock.json +++ /dev/null @@ -1,6792 +0,0 @@ -{ - "name": "yup", - "version": "0.22.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "abab": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", - "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=", - "dev": true - }, - "acorn": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", - "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=", - "dev": true - }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "dev": true, - "requires": { - "acorn": "4.0.11" - }, - "dependencies": { - "acorn": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz", - "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA=", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.0", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "anchor-markdown-header": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", - "integrity": "sha1-BFBj125qH5zTJ6V6ASaqD97Dcac=", - "dev": true, - "requires": { - "emoji-regex": "6.1.3" - } - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "any-promise": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz", - "integrity": "sha1-gwtoCqflbzNFHUsEnzvYBESY7ic=", - "dev": true - }, - "anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", - "dev": true, - "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11" - } - }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, - "requires": { - "default-require-extensions": "1.0.0" - } - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.0.3" - } - }, - "arr-flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", - "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "array.prototype.find": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.7.0" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", - "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "assertion-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", - "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", - "dev": true - }, - "async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.4.0.tgz", - "integrity": "sha1-SZAgDxjqW4N8LMT4wDGmmFw4VhE=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "babel-cli": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.24.1.tgz", - "integrity": "sha1-IHzXBbumFImy6kG1MSNBz2rKIoM=", - "dev": true, - "requires": { - "babel-core": "6.24.1", - "babel-polyfill": "6.23.0", - "babel-register": "6.24.1", - "babel-runtime": "6.23.0", - "chokidar": "1.6.1", - "commander": "2.9.0", - "convert-source-map": "1.5.0", - "fs-readdir-recursive": "1.0.0", - "glob": "7.1.1", - "lodash": "4.17.4", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.6", - "v8flags": "2.1.1" - } - }, - "babel-code-frame": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.1" - } - }, - "babel-core": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.24.1.tgz", - "integrity": "sha1-jEKFZNzh4fQfszfsNPTDsCK1rYM=", - "dev": true, - "requires": { - "babel-code-frame": "6.22.0", - "babel-generator": "6.24.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.0", - "convert-source-map": "1.5.0", - "debug": "2.6.6", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.3", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "slash": "1.0.0", - "source-map": "0.5.6" - } - }, - "babel-eslint": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-6.1.2.tgz", - "integrity": "sha1-UpNBn+NnLWZZjTJ9qWlFZ7pqXy8=", - "dev": true, - "requires": { - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.0", - "lodash.assign": "4.2.0", - "lodash.pickby": "4.6.0" - } - }, - "babel-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.24.1.tgz", - "integrity": "sha1-5xX0hsWN7SVknYiJRNUqoHxdlJc=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.6", - "trim-right": "1.0.1" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1" - } - }, - "babel-helper-builder-react-jsx": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", - "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "esutils": "2.0.2" - }, - "dependencies": { - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - } - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - }, - "dependencies": { - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - } - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - }, - "dependencies": { - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - } - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.24.1" - } - }, - "babel-jest": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-20.0.3.tgz", - "integrity": "sha1-5KA7E9wQOJ4UD8ZF0J/8TO0wFnE=", - "dev": true, - "requires": { - "babel-core": "6.24.1", - "babel-plugin-istanbul": "4.1.3", - "babel-preset-jest": "20.0.3" - }, - "dependencies": { - "babel-plugin-jest-hoist": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz", - "integrity": "sha1-r+3IU70/jcNUjqZx++adA8wsF2c=", - "dev": true - }, - "babel-preset-jest": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz", - "integrity": "sha1-y6yq3stdaJyh4d4TYOv8ZoYsF4o=", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "20.0.3" - } - } - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-add-module-exports": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", - "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=", - "dev": true - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-dev-expression": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.1.tgz", - "integrity": "sha1-1Ke+7++7UOPyc0mQqCokhs+eue4=", - "dev": true - }, - "babel-plugin-istanbul": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.3.tgz", - "integrity": "sha1-buYoBBDc9Zx3R1GMPf2YaAlY8QI=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "istanbul-lib-instrument": "1.7.1", - "test-exclude": "4.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - } - } - }, - "babel-plugin-jsx-fragment": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jsx-fragment/-/babel-plugin-jsx-fragment-4.0.3.tgz", - "integrity": "sha1-eNHqZhhQFDcKdgvJizWrjxQQTZI=", - "dev": true - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-export-extensions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - }, - "dependencies": { - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - } - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - }, - "dependencies": { - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - } - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.23.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-export-extensions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", - "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "dev": true, - "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, - "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-object-assign": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", - "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" - }, - "dependencies": { - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.0" - } - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - } - } - }, - "babel-plugin-transform-react-display-name": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", - "dev": true, - "requires": { - "babel-helper-builder-react-jsx": "6.26.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-react-jsx-self": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-react-jsx-source": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.24.1" - } - }, - "babel-polyfill": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", - "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" - } - }, - "babel-preset-env": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.0.tgz", - "integrity": "sha512-OVgtQRuOZKckrILgMA5rvctvFZPv72Gua9Rt006AiPoB0DJKGN07UmaQA+qRrYgK71MVct8fFhT0EyNWYorVew==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "2.5.1", - "invariant": "2.2.2", - "semver": "5.3.0" - } - }, - "babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true, - "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" - } - }, - "babel-preset-jason": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-jason/-/babel-preset-jason-3.1.0.tgz", - "integrity": "sha1-VWCj2+sL2dekWAK7MAAI7ajMsVM=", - "dev": true, - "requires": { - "babel-plugin-add-module-exports": "0.2.1", - "babel-plugin-dev-expression": "0.2.1", - "babel-plugin-jsx-fragment": "4.0.3", - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-plugin-transform-object-assign": "6.22.0", - "babel-plugin-transform-object-rest-spread": "6.26.0", - "babel-plugin-transform-runtime": "6.23.0", - "babel-preset-env": "1.6.0", - "babel-preset-react": "6.24.1" - } - }, - "babel-preset-react": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", - "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" - } - }, - "babel-register": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", - "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", - "dev": true, - "requires": { - "babel-core": "6.24.1", - "babel-runtime": "6.23.0", - "core-js": "2.4.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.15" - } - }, - "babel-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", - "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" - } - }, - "babel-template": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.24.1.tgz", - "integrity": "sha1-BK5RTx+Ts6JTfyoPYKWkX7gwgzM=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.24.1.tgz", - "integrity": "sha1-qzZnP9NW+aCUhlnnszjV/q2zFpU=", - "dev": true, - "requires": { - "babel-code-frame": "6.22.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.24.1", - "babylon": "6.17.0", - "debug": "2.6.6", - "globals": "9.17.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.24.1.tgz", - "integrity": "sha1-oTaHncFbNga9oNkMH8dDBML/CXU=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.0.tgz", - "integrity": "sha1-N9qUiHhIi5xOPEA4iT+jMUs/yTI=", - "dev": true - }, - "bail": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.1.tgz", - "integrity": "sha1-kSV53os5Gq3zxf30zSoPwiXfO8I=", - "dev": true - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "benchmark": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", - "dev": true, - "requires": { - "lodash": "4.17.4", - "platform": "1.3.4" - } - }, - "binary-extensions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", - "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", - "dev": true, - "optional": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "boundary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", - "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserslist": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.5.1.tgz", - "integrity": "sha512-jAvM2ku7YDJ+leAq3bFH1DE0Ylw+F+EQDq4GkqZfgPEqpWYw9ofQH85uKSB9r3Tv7XDbfqVtE+sdvKJW7IlPJA==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000746", - "electron-to-chromium": "1.3.26" - } - }, - "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "dev": true, - "requires": { - "node-int64": "0.4.0" - } - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000746", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000746.tgz", - "integrity": "sha1-xk+Vo5Jc/TAgejCO12wa6W6gnqA=", - "dev": true - }, - "case": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/case/-/case-1.5.2.tgz", - "integrity": "sha1-KOjb3RMSxdVfNE1EJAaJuS4NoWg=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "ccount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.1.tgz", - "integrity": "sha1-ZlaHlFFowhjsd/9hpBVa4AInqWw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "dev": true, - "requires": { - "assertion-error": "1.0.2", - "deep-eql": "0.1.3", - "type-detect": "1.0.0" - } - }, - "chai-as-promised": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-5.3.0.tgz", - "integrity": "sha1-CdekApCKpw39vq1T5YU/x50+8hw=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "character-entities": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.0.tgz", - "integrity": "sha1-poPiz3Xb6LFxljUxNk5Y4YobFV8=", - "dev": true - }, - "character-entities-html4": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.0.tgz", - "integrity": "sha1-GrCFUdPOH6HfCNAPucod77FHoGw=", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.0.tgz", - "integrity": "sha1-sYqtmPa3vMZGweTIH58ZVjdqVho=", - "dev": true - }, - "character-reference-invalid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.0.tgz", - "integrity": "sha1-3smtHfufjQa0/NqircPE/ZevHmg=", - "dev": true - }, - "child-process-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-1.1.0.tgz", - "integrity": "sha1-Ex4BpwXxXtSgXVVN1eAy5SYSzzA=", - "dev": true, - "requires": { - "q": "1.5.0" - } - }, - "chokidar": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", - "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=", - "dev": true, - "optional": true, - "requires": { - "anymatch": "1.3.0", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "ci-info": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", - "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=", - "dev": true - }, - "circular-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", - "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "cli-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collapse-white-space": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.2.tgz", - "integrity": "sha1-nEY/ucbRkNLcriGjVqAbyunu720=", - "dev": true - }, - "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true, - "requires": { - "color-name": "1.1.2" - } - }, - "color-name": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.2.tgz", - "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.2.9", - "typedarray": "0.0.6" - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-type-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz", - "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=", - "dev": true - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", - "dev": true - }, - "core-js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", - "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", - "dev": true - }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "dev": true, - "requires": { - "cssom": "0.3.2" - } - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.15" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "debug": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.6.tgz", - "integrity": "sha1-qfpvvpykPPHnn3O3XAGJy7fW21o=", - "dev": true, - "requires": { - "ms": "0.7.3" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - } - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", - "dev": true, - "requires": { - "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", - "dev": true - }, - "dirty-chai": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/dirty-chai/-/dirty-chai-1.2.2.tgz", - "integrity": "sha1-eEleYZY19/5EIZqkyDeEm/GDFC4=", - "dev": true - }, - "doctoc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/doctoc/-/doctoc-1.3.0.tgz", - "integrity": "sha1-fwg5hR3VjICKLK5V2VBOAS0I7jA=", - "dev": true, - "requires": { - "anchor-markdown-header": "0.5.7", - "htmlparser2": "3.9.2", - "markdown-to-ast": "3.4.0", - "minimist": "1.2.0", - "underscore": "1.8.3", - "update-section": "0.3.3" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.0.tgz", - "integrity": "sha1-hT3gfwEyh/l2t/4EYXQCIuoU7Ls=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "electron-to-chromium": { - "version": "1.3.26", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.26.tgz", - "integrity": "sha1-mWQnKUhhp02cfIK5Jg6jAejALWY=", - "dev": true - }, - "emoji-regex": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.3.tgz", - "integrity": "sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true, - "requires": { - "prr": "0.0.0" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.7.0.tgz", - "integrity": "sha1-363ndOAb/Nl/lhgCmMRJyGI/uUw=", - "dev": true, - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.0", - "is-callable": "1.1.3", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.15", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.15.tgz", - "integrity": "sha1-wzClk0we4hKEp8CBqG5f2TfJHqY=", - "dev": true, - "requires": { - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", - "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.15", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.15", - "es6-iterator": "2.0.1", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.15", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.15" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.15", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.1.0", - "estraverse": "4.2.0" - } - }, - "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true, - "requires": { - "babel-code-frame": "6.22.0", - "chalk": "1.1.3", - "concat-stream": "1.6.0", - "debug": "2.6.6", - "doctrine": "2.0.0", - "escope": "3.6.0", - "espree": "3.4.2", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "7.1.1", - "globals": "9.17.0", - "ignore": "3.3.0", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.16.0", - "is-resolvable": "1.0.0", - "js-yaml": "3.8.3", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.7", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - }, - "dependencies": { - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - } - } - }, - "eslint-config-jason": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-jason/-/eslint-config-jason-4.0.0.tgz", - "integrity": "sha1-QHKGeCezH4HHnnTu96GwXAXMFjE=", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", - "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", - "dev": true, - "requires": { - "debug": "2.6.6", - "object-assign": "4.1.1", - "resolve": "1.3.3" - } - }, - "eslint-plugin-import": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-1.16.0.tgz", - "integrity": "sha1-svoH68xTUE0PKkR3WC7Iv/GHG58=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.6", - "doctrine": "1.3.0", - "es6-map": "0.1.5", - "es6-set": "0.1.5", - "eslint-import-resolver-node": "0.2.3", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "lodash.endswith": "4.2.1", - "lodash.find": "4.6.0", - "lodash.findindex": "4.6.0", - "minimatch": "3.0.3", - "object-assign": "4.1.1", - "pkg-dir": "1.0.0", - "pkg-up": "1.0.0" - }, - "dependencies": { - "doctrine": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.3.0.tgz", - "integrity": "sha1-E+dWgrVVGEJCdvfBc3g0Vu+RPSY=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - } - } - }, - "eslint-plugin-react": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", - "dev": true, - "requires": { - "array.prototype.find": "2.0.4", - "doctrine": "1.5.0", - "has": "1.0.1", - "jsx-ast-utils": "1.4.1", - "object.assign": "4.0.4" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - } - } - }, - "espree": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.2.tgz", - "integrity": "sha1-ONve2+3JW4lhofvwRzSo9qnIxZI=", - "dev": true, - "requires": { - "acorn": "5.0.3", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", - "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=", - "dev": true, - "requires": { - "estraverse": "4.1.1", - "object-assign": "4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", - "integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI=", - "dev": true - } - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.15" - } - }, - "exec-sh": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz", - "integrity": "sha1-FPdd4/INKG75MwmbLOUKkDWc7xA=", - "dev": true, - "requires": { - "merge": "1.2.0" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.2.2", - "object-assign": "4.1.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, - "requires": { - "glob": "7.1.1", - "minimatch": "3.0.3" - } - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.6", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true, - "requires": { - "circular-json": "0.3.1", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "fn-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-1.0.1.tgz", - "integrity": "sha1-3o2KFTiLM8vyFFeCFx9zdwxgMPA=" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "formatio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", - "dev": true, - "requires": { - "samsam": "1.1.2" - } - }, - "fs-promise": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-0.3.1.tgz", - "integrity": "sha1-vzQFA2jyTW3J38ZoirXOrY+GhCo=", - "dev": true, - "requires": { - "any-promise": "0.1.0" - } - }, - "fs-readdir-recursive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", - "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", - "dev": true - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "github-url-to-object": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-2.2.6.tgz", - "integrity": "sha1-ypJQFlFJdI7uswv8xgAMb+DSQvc=", - "dev": true, - "requires": { - "is-url": "1.2.2" - } - }, - "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.3", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "globals": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz", - "integrity": "sha1-DAymltm5u2lNLlRwvTd3fKrVAoY=", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handlebars": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.8.tgz", - "integrity": "sha1-Irh1zT8ObL6jAxTxROgrx6cv9CA=", - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.22" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "hosted-git-info": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz", - "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc=", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", - "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=", - "dev": true, - "requires": { - "whatwg-encoding": "1.0.1" - } - }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.3.0", - "domutils": "1.6.0", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.2.9" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", - "dev": true - }, - "ignore": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.0.tgz", - "integrity": "sha1-OBLSLL6RJfLCtJFXVaG4q9dFoAE=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.1.0", - "figures": "1.7.0", - "lodash": "4.17.4", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "interpret": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", - "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", - "dev": true - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-alphabetical": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.0.tgz", - "integrity": "sha1-4lRMEwWCVfIUTLdXBmzTNCocjEY=", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.0.tgz", - "integrity": "sha1-4GSS5xnBvxXewjnk8a9fZ7TW578=", - "dev": true, - "requires": { - "is-alphabetical": "1.0.0", - "is-decimal": "1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "1.8.0" - } - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "is-ci": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", - "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", - "dev": true, - "requires": { - "ci-info": "1.0.0" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-decimal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.0.tgz", - "integrity": "sha1-lAV5tupjxigICmnmK9qIyEcLT+A=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", - "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-hexadecimal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.0.tgz", - "integrity": "sha1-XEWXcdKvmi45Ungf1U/LG8/kETw=", - "dev": true - }, - "is-my-json-valid": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", - "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.0" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "1.0.1" - } - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-url": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", - "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-api": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.8.tgz", - "integrity": "sha1-qETlXG+a7uKS5/QpQhlvYLI9yT4=", - "dev": true, - "requires": { - "async": "2.4.0", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.0", - "istanbul-lib-hook": "1.0.6", - "istanbul-lib-instrument": "1.7.1", - "istanbul-lib-report": "1.1.0", - "istanbul-lib-source-maps": "1.2.0", - "istanbul-reports": "1.1.0", - "js-yaml": "3.8.3", - "mkdirp": "0.5.1", - "once": "1.4.0" - } - }, - "istanbul-lib-coverage": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz", - "integrity": "sha1-ysoZ3srvNSW11jMdcB8/O3rUhSg=", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz", - "integrity": "sha1-wIZtHoHPLVMZJJUQEx/Bbe5JIx8=", - "dev": true, - "requires": { - "append-transform": "0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz", - "integrity": "sha1-Fp4xvGLHeIUamUOd2Zw8wSGE02A=", - "dev": true, - "requires": { - "babel-generator": "6.24.1", - "babel-template": "6.24.1", - "babel-traverse": "6.24.1", - "babel-types": "6.24.1", - "babylon": "6.17.0", - "istanbul-lib-coverage": "1.1.0", - "semver": "5.3.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz", - "integrity": "sha1-RExOzKmvqTz1hPVrEPGVv3aMB3A=", - "dev": true, - "requires": { - "istanbul-lib-coverage": "1.1.0", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz", - "integrity": "sha1-jHcG1Jfib+62rz4MKP1bBmlZjQ4=", - "dev": true, - "requires": { - "debug": "2.6.6", - "istanbul-lib-coverage": "1.1.0", - "mkdirp": "0.5.1", - "rimraf": "2.6.1", - "source-map": "0.5.6" - } - }, - "istanbul-reports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.0.tgz", - "integrity": "sha1-HvO3lYiSGc+1+tFjZfbOEI1fjGY=", - "dev": true, - "requires": { - "handlebars": "4.0.8" - } - }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "dev": true, - "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "dev": true - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "dev": true - } - } - }, - "jest": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-20.0.4.tgz", - "integrity": "sha1-PdJgwpidba1nix6cxNkZRPbWAqw=", - "dev": true, - "requires": { - "jest-cli": "20.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "bser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", - "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=", - "dev": true, - "requires": { - "node-int64": "0.4.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "jest-changed-files": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-20.0.3.tgz", - "integrity": "sha1-k5TVzGXEOEBhSb7xv01Sto4D4/g=", - "dev": true - }, - "jest-cli": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-20.0.4.tgz", - "integrity": "sha1-5TKxnYiuW8bEF+iwWTpv6VSx3JM=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "callsites": "2.0.0", - "chalk": "1.1.3", - "graceful-fs": "4.1.11", - "is-ci": "1.0.10", - "istanbul-api": "1.1.8", - "istanbul-lib-coverage": "1.1.0", - "istanbul-lib-instrument": "1.7.1", - "istanbul-lib-source-maps": "1.2.0", - "jest-changed-files": "20.0.3", - "jest-config": "20.0.4", - "jest-docblock": "20.0.3", - "jest-environment-jsdom": "20.0.3", - "jest-haste-map": "20.0.5", - "jest-jasmine2": "20.0.4", - "jest-message-util": "20.0.3", - "jest-regex-util": "20.0.3", - "jest-resolve-dependencies": "20.0.3", - "jest-runtime": "20.0.4", - "jest-snapshot": "20.0.3", - "jest-util": "20.0.3", - "micromatch": "2.3.11", - "node-notifier": "5.1.2", - "pify": "2.3.0", - "slash": "1.0.0", - "string-length": "1.0.1", - "throat": "3.0.0", - "which": "1.2.14", - "worker-farm": "1.3.1", - "yargs": "7.1.0" - } - }, - "jest-config": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-20.0.4.tgz", - "integrity": "sha1-43kwqyIXyRNgXv8T5712PsSPruo=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "glob": "7.1.1", - "jest-environment-jsdom": "20.0.3", - "jest-environment-node": "20.0.3", - "jest-jasmine2": "20.0.4", - "jest-matcher-utils": "20.0.3", - "jest-regex-util": "20.0.3", - "jest-resolve": "20.0.4", - "jest-validate": "20.0.3", - "pretty-format": "20.0.3" - } - }, - "jest-diff": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-20.0.3.tgz", - "integrity": "sha1-gfKI/Z5nXw+yPHXxwrGURf5YZhc=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "diff": "3.2.0", - "jest-matcher-utils": "20.0.3", - "pretty-format": "20.0.3" - } - }, - "jest-environment-jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz", - "integrity": "sha1-BIqKwS7iJfcZBBdxODS7mZeH3pk=", - "dev": true, - "requires": { - "jest-mock": "20.0.3", - "jest-util": "20.0.3", - "jsdom": "9.12.0" - } - }, - "jest-environment-node": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-20.0.3.tgz", - "integrity": "sha1-1Ii8RhKvLCRumG6K52caCZFj1AM=", - "dev": true, - "requires": { - "jest-mock": "20.0.3", - "jest-util": "20.0.3" - } - }, - "jest-haste-map": { - "version": "20.0.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-20.0.5.tgz", - "integrity": "sha512-0IKAQjUvuZjMCNi/0VNQQF74/H9KB67hsHJqGiwTWQC6XO5Azs7kLWm+6Q/dwuhvDUvABDOBMFK2/FwZ3sZ07Q==", - "dev": true, - "requires": { - "fb-watchman": "2.0.0", - "graceful-fs": "4.1.11", - "jest-docblock": "20.0.3", - "micromatch": "2.3.11", - "sane": "1.6.0", - "worker-farm": "1.3.1" - } - }, - "jest-jasmine2": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz", - "integrity": "sha1-/MWxQReA2RHQQpAu8YWehS5g1eE=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "graceful-fs": "4.1.11", - "jest-diff": "20.0.3", - "jest-matcher-utils": "20.0.3", - "jest-matchers": "20.0.3", - "jest-message-util": "20.0.3", - "jest-snapshot": "20.0.3", - "once": "1.4.0", - "p-map": "1.2.0" - } - }, - "jest-matcher-utils": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz", - "integrity": "sha1-s6a443yld4A7CDKpixZPRLeBVhI=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "pretty-format": "20.0.3" - } - }, - "jest-matchers": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-matchers/-/jest-matchers-20.0.3.tgz", - "integrity": "sha1-ymnbHDLbWm9wf6XgQBq7VXAN/WA=", - "dev": true, - "requires": { - "jest-diff": "20.0.3", - "jest-matcher-utils": "20.0.3", - "jest-message-util": "20.0.3", - "jest-regex-util": "20.0.3" - } - }, - "jest-message-util": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-20.0.3.tgz", - "integrity": "sha1-auwoRDBvyw5udNV5bBAG2W/dgxw=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "micromatch": "2.3.11", - "slash": "1.0.0" - } - }, - "jest-mock": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-20.0.3.tgz", - "integrity": "sha1-i8Bw6QQUqhVcEajWTIaaDVxx2lk=", - "dev": true - }, - "jest-regex-util": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-20.0.3.tgz", - "integrity": "sha1-hburXRM+RGJbGfr4xqpRItCF12I=", - "dev": true - }, - "jest-resolve": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-20.0.4.tgz", - "integrity": "sha1-lEiz6La6/BVHlETGSZBFt//ll6U=", - "dev": true, - "requires": { - "browser-resolve": "1.11.2", - "is-builtin-module": "1.0.0", - "resolve": "1.3.3" - } - }, - "jest-resolve-dependencies": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz", - "integrity": "sha1-bhSntxevDyyzZnxUneQK8Bexcjo=", - "dev": true, - "requires": { - "jest-regex-util": "20.0.3" - } - }, - "jest-runtime": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-20.0.4.tgz", - "integrity": "sha1-osgCIZxCA/dU3xQE5JAYYWnRJNg=", - "dev": true, - "requires": { - "babel-core": "6.24.1", - "babel-jest": "20.0.3", - "babel-plugin-istanbul": "4.1.3", - "chalk": "1.1.3", - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "jest-config": "20.0.4", - "jest-haste-map": "20.0.5", - "jest-regex-util": "20.0.3", - "jest-resolve": "20.0.4", - "jest-util": "20.0.3", - "json-stable-stringify": "1.0.1", - "micromatch": "2.3.11", - "strip-bom": "3.0.0", - "yargs": "7.1.0" - } - }, - "jest-snapshot": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-20.0.3.tgz", - "integrity": "sha1-W4R+GtsaTZCFKn+fElCG4YfHZWY=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "jest-diff": "20.0.3", - "jest-matcher-utils": "20.0.3", - "jest-util": "20.0.3", - "natural-compare": "1.4.0", - "pretty-format": "20.0.3" - } - }, - "jest-util": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-20.0.3.tgz", - "integrity": "sha1-DAf32A2C9OWmfG+LnD/n9lz9Mq0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "graceful-fs": "4.1.11", - "jest-message-util": "20.0.3", - "jest-mock": "20.0.3", - "jest-validate": "20.0.3", - "leven": "2.1.0", - "mkdirp": "0.5.1" - } - }, - "jest-validate": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-20.0.3.tgz", - "integrity": "sha1-0M/R3k9XnymEhJJcKA+PHZTsPKs=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "jest-matcher-utils": "20.0.3", - "leven": "2.1.0", - "pretty-format": "20.0.3" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "pretty-format": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-20.0.3.tgz", - "integrity": "sha1-Ag41ClYKH+GpjcO+tsz/s4beixQ=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1", - "ansi-styles": "3.2.0" - } - }, - "sane": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-1.6.0.tgz", - "integrity": "sha1-lhDEUjB6E10pwf3+JUcDQYDEZ3U=", - "dev": true, - "requires": { - "anymatch": "1.3.0", - "exec-sh": "0.2.0", - "fb-watchman": "1.9.2", - "minimatch": "3.0.3", - "minimist": "1.2.0", - "walker": "1.0.7", - "watch": "0.10.0" - }, - "dependencies": { - "fb-watchman": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz", - "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M=", - "dev": true, - "requires": { - "bser": "1.0.2" - } - } - } - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "jest-docblock": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-20.0.3.tgz", - "integrity": "sha1-F76phDQswz2DxQ++FUXqDvqkRxI=", - "dev": true - }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "js-tokens": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", - "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", - "dev": true - }, - "js-yaml": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.3.tgz", - "integrity": "sha1-M6BexIHIUMiHWSkWb+G+thxyh2Y=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "3.1.3" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", - "dev": true, - "requires": { - "abab": "1.0.3", - "acorn": "4.0.11", - "acorn-globals": "3.1.0", - "array-equal": "1.0.0", - "content-type-parser": "1.0.1", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "escodegen": "1.8.1", - "html-encoding-sniffer": "1.0.1", - "nwmatcher": "1.3.9", - "parse5": "1.5.1", - "request": "2.81.0", - "sax": "1.2.2", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.2", - "webidl-conversions": "4.0.1", - "whatwg-encoding": "1.0.1", - "whatwg-url": "4.7.1", - "xml-name-validator": "2.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz", - "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA=", - "dev": true - } - } - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "dev": true - }, - "kind-of": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.0.tgz", - "integrity": "sha1-tYq+TVwEStM3JqjBUltIz4kb/wc=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", - "dev": true - }, - "lodash.endswith": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.endswith/-/lodash.endswith-4.2.1.tgz", - "integrity": "sha1-/tWawXOO0+I27dcGTsRWRIs3vAk=", - "dev": true - }, - "lodash.find": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", - "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", - "dev": true - }, - "lodash.findindex": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.findindex/-/lodash.findindex-4.6.0.tgz", - "integrity": "sha1-oyRd7mH7m24GJLU1ElYku2nBEQY=", - "dev": true - }, - "lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "longest-streak": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-1.0.0.tgz", - "integrity": "sha1-0GWXxNTDG1LMsfXY+P5xSOr9aWU=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.1" - } - }, - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.4" - } - }, - "markdown-table": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-0.4.0.tgz", - "integrity": "sha1-iQwsGzv+g/sA5BKbjkz+ZFJw+dE=", - "dev": true - }, - "markdown-to-ast": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/markdown-to-ast/-/markdown-to-ast-3.4.0.tgz", - "integrity": "sha1-Diy6gTkLBUmpFT7DsNkVthwWS+c=", - "dev": true, - "requires": { - "debug": "2.6.6", - "remark": "5.1.0", - "structured-source": "3.0.2", - "traverse": "0.6.6" - } - }, - "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.0", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.3" - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", - "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=", - "dev": true - }, - "mt-changelog": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/mt-changelog/-/mt-changelog-0.6.2.tgz", - "integrity": "sha1-AEjl08afaju/oVVGWzjw3fPAqDI=", - "dev": true, - "requires": { - "child-process-promise": "1.1.0", - "colors": "1.1.2", - "commander": "2.9.0", - "fs-promise": "0.3.1", - "promise": "7.1.1", - "semver": "5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true, - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-notifier": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.1.2.tgz", - "integrity": "sha1-L6nhJgX6EACdRFSdb82KY93g5P8=", - "dev": true, - "requires": { - "growly": "1.3.0", - "semver": "5.3.0", - "shellwords": "0.1.0", - "which": "1.2.14" - } - }, - "normalize-package-data": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", - "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", - "dev": true, - "requires": { - "hosted-git-info": "2.4.2", - "is-builtin-module": "1.0.0", - "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.0.1" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwmatcher": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.9.tgz", - "integrity": "sha1-i6tIb/f6Pf0IZla76LFxFtNpLSo=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, - "object.assign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", - "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.0", - "object-keys": "1.0.11" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" - } - }, - "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "parse-entities": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.0.tgz", - "integrity": "sha1-S8WPNf3I5l3e01oS8uQCI8oko/c=", - "dev": true, - "requires": { - "character-entities": "1.2.0", - "character-entities-legacy": "1.1.0", - "character-reference-invalid": "1.1.0", - "has": "1.0.1", - "is-alphanumerical": "1.0.0", - "is-decimal": "1.0.0", - "is-hexadecimal": "1.0.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.2", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "1.1.2" - } - }, - "pkg-up": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", - "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", - "dev": true, - "requires": { - "find-up": "1.1.2" - } - }, - "platform": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.4.tgz", - "integrity": "sha1-bw+xftqqSPIUQrOpdcBjEw8cPr0=", - "dev": true - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "private": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "promise": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", - "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=", - "dev": true, - "requires": { - "asap": "2.0.5" - } - }, - "promises-aplus-tests": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/promises-aplus-tests/-/promises-aplus-tests-2.1.2.tgz", - "integrity": "sha1-drfFY4locghhlpz7zYeVr9J0iFw=", - "dev": true, - "requires": { - "mocha": "2.5.3", - "sinon": "1.17.7", - "underscore": "1.8.3" - }, - "dependencies": { - "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", - "dev": true - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", - "dev": true - }, - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" - } - }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2.2.4", - "sigmund": "1.0.1" - } - }, - "mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", - "dev": true, - "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", - "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", - "dev": true - } - } - }, - "property-expr": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.3.1.tgz", - "integrity": "sha1-U/Svjs08bbAO2YuOD2r/vogPqgo=" - }, - "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", - "dev": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, - "randomatic": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", - "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "kind-of": "3.2.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.3.8", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.0", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.3", - "readable-stream": "2.2.9", - "set-immediate-shim": "1.0.1" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.3.3" - } - }, - "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.24.1", - "private": "0.1.7" - } - }, - "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" - } - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "release-script": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/release-script/-/release-script-0.5.8.tgz", - "integrity": "sha1-dqgkqw0V6OneMSy1XEsJNNdKSag=", - "dev": true, - "requires": { - "colors": "1.1.2", - "github-url-to-object": "2.2.6", - "request": "2.81.0", - "semver": "5.3.0", - "shelljs": "0.5.3", - "yargs": "3.32.0" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - }, - "shelljs": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", - "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=", - "dev": true - } - } - }, - "remark": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-5.1.0.tgz", - "integrity": "sha1-y0Y709vLS5l5STXu4c9x16jjBow=", - "dev": true, - "requires": { - "remark-parse": "1.1.0", - "remark-stringify": "1.1.0", - "unified": "4.2.1" - } - }, - "remark-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-1.1.0.tgz", - "integrity": "sha1-w8oQ+ajaBGFcKPCapOMEUQUm7CE=", - "dev": true, - "requires": { - "collapse-white-space": "1.0.2", - "extend": "3.0.1", - "parse-entities": "1.1.0", - "repeat-string": "1.6.1", - "trim": "0.0.1", - "trim-trailing-lines": "1.1.0", - "unherit": "1.1.0", - "unist-util-remove-position": "1.1.0", - "vfile-location": "2.0.1" - } - }, - "remark-stringify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-1.1.0.tgz", - "integrity": "sha1-pxBeJbnuK/mkm3XSxCPxGwauIJI=", - "dev": true, - "requires": { - "ccount": "1.0.1", - "extend": "3.0.1", - "longest-streak": "1.0.0", - "markdown-table": "0.4.0", - "parse-entities": "1.1.0", - "repeat-string": "1.6.1", - "stringify-entities": "1.3.0", - "unherit": "1.1.0" - } - }, - "remove-trailing-separator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz", - "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", - "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "7.1.1" - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", - "dev": true - }, - "samsam": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", - "dev": true - }, - "sax": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz", - "integrity": "sha1-/YYxojvHgmvvXYcb24c3jJVkeCg=", - "dev": true - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true, - "optional": true - }, - "shelljs": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz", - "integrity": "sha1-svXHfvlxSPS09uImguELuoZnz/E=", - "dev": true, - "requires": { - "glob": "7.1.1", - "interpret": "1.0.3", - "rechoir": "0.6.2" - } - }, - "shellwords": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.0.tgz", - "integrity": "sha1-Zq/Ue2oSky2Qccv9mKUueFzQuhQ=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "sinon": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", - "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", - "dev": true, - "requires": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": "0.10.3" - }, - "dependencies": { - "lolex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", - "dev": true - } - } - }, - "sinon-chai": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.10.0.tgz", - "integrity": "sha1-arMAi7jK6ZKedE12ZXS0zzXzS1s=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true - }, - "source-map-support": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", - "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", - "dev": true, - "requires": { - "source-map": "0.5.6" - } - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", - "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", - "dev": true, - "requires": { - "strip-ansi": "3.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", - "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", - "dev": true, - "requires": { - "buffer-shims": "1.0.0" - } - }, - "stringify-entities": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.0.tgz", - "integrity": "sha1-IkSlFsTx6OAbc9rQECMBZ3ar2Rc=", - "dev": true, - "requires": { - "character-entities-html4": "1.1.0", - "character-entities-legacy": "1.1.0", - "has": "1.0.1", - "is-alphanumerical": "1.0.0", - "is-hexadecimal": "1.0.0" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "structured-source": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", - "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", - "dev": true, - "requires": { - "boundary": "1.0.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", - "dev": true - }, - "synchronous-promise": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-1.0.18.tgz", - "integrity": "sha512-UqMAK6BBBXu8qaDI5omlyV9iDpM9nQfgthaBOK0nlfXnMgiuOBv+meWG73CGeCCFRhOOOa2e4rvqYzfynzy5zg==" - }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.4", - "slice-ansi": "0.0.4", - "string-width": "2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", - "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "test-exclude": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.0.tgz", - "integrity": "sha1-BMpwtzkN04yY1KADoXOAbKeZHJE=", - "dev": true, - "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throat": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-3.0.0.tgz", - "integrity": "sha1-58ZMhny7OEXxCHdkL3tgBVuOwNY=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", - "dev": true - }, - "toposort": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-0.2.12.tgz", - "integrity": "sha1-x9KYTz1IwhcxXMMtdwiIt3lJHoE=" - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz", - "integrity": "sha1-eu+7eAjfnWafbaLkOMrIxGradoQ=", - "dev": true - }, - "trough": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.0.tgz", - "integrity": "sha1-a97f5/KqSabzxDIldodVWVfzQv0=", - "dev": true - }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", - "dev": true - }, - "type-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", - "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=" - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "2.8.22", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.22.tgz", - "integrity": "sha1-1Uk0d4qNoUkD+imjJvskwKtRoaA=", - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.6", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - }, - "unherit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz", - "integrity": "sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "xtend": "4.0.1" - } - }, - "unified": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-4.2.1.tgz", - "integrity": "sha1-dv9Dqo2kMPbn5KVchOusKtLPzS4=", - "dev": true, - "requires": { - "bail": "1.0.1", - "extend": "3.0.1", - "has": "1.0.1", - "once": "1.4.0", - "trough": "1.0.0", - "vfile": "1.4.0" - } - }, - "unist-util-remove-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.0.tgz", - "integrity": "sha1-JET+3DRLxfVA2rY1PgE7bXgQHcI=", - "dev": true, - "requires": { - "unist-util-visit": "1.1.1" - } - }, - "unist-util-visit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.1.1.tgz", - "integrity": "sha1-6RejsTdlizNctEIMfaLnTZKOTpQ=", - "dev": true - }, - "update-section": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/update-section/-/update-section-0.3.3.tgz", - "integrity": "sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg=", - "dev": true - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "dev": true - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "vfile": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-1.4.0.tgz", - "integrity": "sha1-wP1vpIT43r23cfaMMe112I2pf+c=", - "dev": true - }, - "vfile-location": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.1.tgz", - "integrity": "sha1-C/iBb3MrD4vZAqVv2kxiyOk13FI=", - "dev": true - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.11" - } - }, - "watch": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", - "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=", - "dev": true - }, - "webidl-conversions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz", - "integrity": "sha1-gBWherg+fhsxFjhIas6B2mziBqA=", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", - "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", - "dev": true, - "requires": { - "iconv-lite": "0.4.13" - } - }, - "whatwg-url": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.7.1.tgz", - "integrity": "sha1-303C4/JaY7H6WzLtbWwTlXfWkN4=", - "dev": true, - "requires": { - "tr46": "0.0.3", - "webidl-conversions": "3.0.1" - }, - "dependencies": { - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - } - } - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "worker-farm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.3.1.tgz", - "integrity": "sha1-QzMRK7SbF6oFC4eJXKayys9A5f8=", - "dev": true, - "requires": { - "errno": "0.1.4", - "xtend": "4.0.1" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "xml-name-validator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "os-locale": "1.4.0", - "string-width": "1.0.2", - "window-size": "0.1.4", - "y18n": "3.2.1" - } - } - } -} diff --git a/package.json b/package.json index 2472e0191..909a80a59 100644 --- a/package.json +++ b/package.json @@ -6,17 +6,16 @@ "scripts": { "test": "npm run lint && npm run test-all -- --runInBand", "testonly": "jest", - "test-all": "npm run testonly -- --projects ./jest-sync.config.js --projects ./package.json", + "test-all": + "npm run testonly -- --projects ./jest-sync.config.js --projects ./package.json", "tdd": "jest --watch", "lint": "eslint src test", - "clean": "rimaf ./lib/*", + "precommit": "lint-staged", "toc": "doctoc README.md --github", "build": "babel src --out-dir lib && npm run toc", "release": "release" }, - "files": [ - "lib" - ], + "files": ["lib"], "repository": { "type": "git", "url": "https://github.com/jquense/yup.git" @@ -27,16 +26,19 @@ "url": "https://github.com/jquense/yup/issues" }, "homepage": "https://github.com/jquense/yup", + "prettier": { + "singleQuote": true, + "trailingComma": "all" + }, + "lint-staged": { + "*.{js,json,css,md}": ["prettier --write", "git add"] + }, "jest": { "testEnvironment": "node", "setupTestFrameworkScriptFile": "./test-setup.js", - "roots": [ - "test" - ], + "roots": ["test"], "testRegex": "\\.js", - "testPathIgnorePatterns": [ - "helpers\\.js" - ] + "testPathIgnorePatterns": ["helpers\\.js"] }, "devDependencies": { "babel-cli": "^6.6.5", @@ -53,8 +55,11 @@ "eslint-config-jason": "^4.0.0", "eslint-plugin-import": "^1.14.0", "eslint-plugin-react": "^6.2.0", + "husky": "^0.14.3", "jest": "^20.0.3", + "lint-staged": "^6.1.0", "mt-changelog": "^0.6.2", + "prettier": "^1.10.2", "promises-aplus-tests": "^2.1.2", "release-script": "^0.5.2", "sinon": "^1.17.7", diff --git a/src/Condition.js b/src/Condition.js index a40d0f16c..d1ef6eed6 100644 --- a/src/Condition.js +++ b/src/Condition.js @@ -2,59 +2,57 @@ import has from 'lodash/has'; import isSchema from './util/isSchema'; function callOrConcat(schema) { - if (typeof schema === 'function') - return schema + if (typeof schema === 'function') return schema; - return base => base.concat(schema) + return base => base.concat(schema); } class Conditional { - constructor(refs, options) { let { is, then, otherwise } = options; - this.refs = [].concat(refs) + this.refs = [].concat(refs); then = callOrConcat(then); otherwise = callOrConcat(otherwise); - if (typeof options === 'function') - this.fn = options - else - { + if (typeof options === 'function') this.fn = options; + else { if (!has(options, 'is')) - throw new TypeError('`is:` is required for `when()` conditions') + throw new TypeError('`is:` is required for `when()` conditions'); if (!options.then && !options.otherwise) throw new TypeError( - 'either `then:` or `otherwise:` is required for `when()` conditions' - ) + 'either `then:` or `otherwise:` is required for `when()` conditions', + ); - let isFn = typeof is === 'function' - ? is : ((...values) => values.every(value => value === is)) + let isFn = + typeof is === 'function' + ? is + : (...values) => values.every(value => value === is); - this.fn = function (...values) { + this.fn = function(...values) { let currentSchema = values.pop(); - let option = isFn(...values) ? then : otherwise + let option = isFn(...values) ? then : otherwise; - return option(currentSchema) - } + return option(currentSchema); + }; } } getValue(parent, context) { - let values = this.refs.map(r => r.getValue(parent, context)) + let values = this.refs.map(r => r.getValue(parent, context)); - return values + return values; } resolve(ctx, values) { - let schema = this.fn.apply(ctx, values.concat(ctx)) + let schema = this.fn.apply(ctx, values.concat(ctx)); if (schema !== undefined && !isSchema(schema)) - throw new TypeError('conditions must return a schema object') + throw new TypeError('conditions must return a schema object'); - return schema || ctx + return schema || ctx; } } diff --git a/src/Lazy.js b/src/Lazy.js index 8b4fd6397..3eb9ca8a4 100644 --- a/src/Lazy.js +++ b/src/Lazy.js @@ -2,30 +2,28 @@ import isSchema from './util/isSchema'; class Lazy { constructor(mapFn) { - this._resolve = (...args) => { - let schema = mapFn(...args) + this._resolve = (...args) => { + let schema = mapFn(...args); if (!isSchema(schema)) - throw new TypeError('lazy() functions must return a valid schema') + throw new TypeError('lazy() functions must return a valid schema'); - return schema - } + return schema; + }; } resolve({ value, ...rest }) { - return this._resolve(value, rest) + return this._resolve(value, rest); } cast(value, options) { - return this._resolve(value, options) - .cast(value, options) + return this._resolve(value, options).cast(value, options); } validate(value, options) { - return this._resolve(value, options) - .validate(value, options) + return this._resolve(value, options).validate(value, options); } } Lazy.prototype.__isYupSchema__ = true; -export default Lazy +export default Lazy; diff --git a/src/Reference.js b/src/Reference.js index 12e40b79b..bcb03b07e 100644 --- a/src/Reference.js +++ b/src/Reference.js @@ -2,47 +2,48 @@ import { getter } from 'property-expr'; let validateName = d => { if (typeof d !== 'string') - throw new TypeError('ref\'s must be strings, got: ' + d) -} + throw new TypeError("ref's must be strings, got: " + d); +}; export default class Reference { static isRef(value) { - return !!(value && (value.__isYupRef || value instanceof Reference)) + return !!(value && (value.__isYupRef || value instanceof Reference)); } toString() { - return `Ref(${this.key})` + return `Ref(${this.key})`; } constructor(key, mapFn, options = {}) { - validateName(key) + validateName(key); let prefix = options.contextPrefix || '$'; if (typeof key === 'function') { key = '.'; - } this.key = key.trim(); this.prefix = prefix; - this.isContext = this.key.indexOf(prefix) === 0 - this.isSelf = this.key === '.'; + this.isContext = this.key.indexOf(prefix) === 0; + this.isSelf = this.key === '.'; - this.path = this.isContext ? this.key.slice(this.prefix.length) : this.key - this._get = getter(this.path, true) + this.path = this.isContext ? this.key.slice(this.prefix.length) : this.key; + this._get = getter(this.path, true); this.map = mapFn || (value => value); } - resolve() { return this; } + resolve() { + return this; + } cast(value, { parent, context }) { - return this.getValue(parent, context) + return this.getValue(parent, context); } getValue(parent, context) { - let isContext = this.isContext - let value = this._get(isContext ? context : (parent || context) || {}) - return this.map(value) + let isContext = this.isContext; + let value = this._get(isContext ? context : parent || context || {}); + return this.map(value); } } -Reference.prototype.__isYupRef = true +Reference.prototype.__isYupRef = true; diff --git a/src/ValidationError.js b/src/ValidationError.js index 6bacf2ced..50e9b305f 100644 --- a/src/ValidationError.js +++ b/src/ValidationError.js @@ -2,50 +2,47 @@ import printValue from './util/printValue'; let strReg = /\$\{\s*(\w+)\s*\}/g; -let replace = str => - params => str.replace(strReg, (_, key) => printValue(params[key])) - +let replace = str => params => + str.replace(strReg, (_, key) => printValue(params[key])); export default function ValidationError(errors, value, field, type) { - this.name = 'ValidationError' - this.value = value - this.path = field - this.type = type - this.errors = [] - this.inner = [] + this.name = 'ValidationError'; + this.value = value; + this.path = field; + this.type = type; + this.errors = []; + this.inner = []; if (errors) [].concat(errors).forEach(err => { - this.errors = this.errors.concat(err.errors || err) + this.errors = this.errors.concat(err.errors || err); if (err.inner) - this.inner = this.inner.concat(err.inner.length ? err.inner : err) - }) + this.inner = this.inner.concat(err.inner.length ? err.inner : err); + }); - this.message = this.errors.length > 1 - ? `${this.errors.length} errors occurred` - : this.errors[0] + this.message = + this.errors.length > 1 + ? `${this.errors.length} errors occurred` + : this.errors[0]; - if (Error.captureStackTrace) - Error.captureStackTrace(this, ValidationError); + if (Error.captureStackTrace) Error.captureStackTrace(this, ValidationError); } ValidationError.prototype = Object.create(Error.prototype); ValidationError.prototype.constructor = ValidationError; -ValidationError.isError = function(err){ - return err && err.name === 'ValidationError' -} +ValidationError.isError = function(err) { + return err && err.name === 'ValidationError'; +}; ValidationError.formatError = function(message, params) { - - if (typeof message === 'string') - message = replace(message) + if (typeof message === 'string') message = replace(message); let fn = ({ path, label, ...params }) => { - params.path = label || path || 'this' - return typeof message === 'function' ? message(params) : message - } + params.path = label || path || 'this'; + return typeof message === 'function' ? message(params) : message; + }; - return arguments.length === 1 ? fn : fn(params) -} + return arguments.length === 1 ? fn : fn(params); +}; diff --git a/src/array.js b/src/array.js index 818c458a8..d0b407ec1 100644 --- a/src/array.js +++ b/src/array.js @@ -8,16 +8,14 @@ import MixedSchema from './mixed'; import { mixed, array as locale } from './locale.js'; import runValidations, { propagateErrors } from './util/runValidations'; - let hasLength = value => !isAbsent(value) && value.length > 0; -export default ArraySchema +export default ArraySchema; function ArraySchema(type) { - if (!(this instanceof ArraySchema)) - return new ArraySchema(type) + if (!(this instanceof ArraySchema)) return new ArraySchema(type); - MixedSchema.call(this, { type: 'array'}) + MixedSchema.call(this, { type: 'array' }); // `undefined` specifically means uninitialized, as opposed to // "no subtype" @@ -27,57 +25,56 @@ function ArraySchema(type) { this.transform(function(values) { if (typeof values === 'string') try { - values = JSON.parse(values) - } catch (err){ values = null } + values = JSON.parse(values); + } catch (err) { + values = null; + } - return this.isType(values) ? values : null - }) + return this.isType(values) ? values : null; + }); - if (type) - this.of(type) - }) + if (type) this.of(type); + }); } inherits(ArraySchema, MixedSchema, { - - _typeCheck(v){ - return Array.isArray(v) + _typeCheck(v) { + return Array.isArray(v); }, _cast(_value, _opts) { - var value = MixedSchema.prototype._cast.call(this, _value, _opts) + var value = MixedSchema.prototype._cast.call(this, _value, _opts); //should ignore nulls here - if (!this._typeCheck(value) || !this._subType) - return value; + if (!this._typeCheck(value) || !this._subType) return value; - return value.map(v => this._subType.cast(v, _opts)) + return value.map(v => this._subType.cast(v, _opts)); }, _validate(_value, options = {}) { - let errors = [] - let sync = options.sync - let path = options.path - let subType = this._subType - let endEarly = this._option('abortEarly', options) - let recursive = this._option('recursive', options) + let errors = []; + let sync = options.sync; + let path = options.path; + let subType = this._subType; + let endEarly = this._option('abortEarly', options); + let recursive = this._option('recursive', options); - let originalValue = options.originalValue != null ? - options.originalValue : _value + let originalValue = + options.originalValue != null ? options.originalValue : _value; return MixedSchema.prototype._validate .call(this, _value, options) .catch(propagateErrors(endEarly, errors)) - .then((value) => { - if (!recursive || !subType || !this._typeCheck(value) ) { - if (errors.length) throw errors[0] - return value + .then(value => { + if (!recursive || !subType || !this._typeCheck(value)) { + if (errors.length) throw errors[0]; + return value; } - originalValue = originalValue || value + originalValue = originalValue || value; let validations = value.map((item, idx) => { - var path = makePath`${options.path}[${idx}]` + var path = makePath`${options.path}[${idx}]`; // object._validate note for isStrict explanation var innerOptions = { @@ -85,14 +82,13 @@ inherits(ArraySchema, MixedSchema, { path, strict: true, parent: value, - originalValue: originalValue[idx] + originalValue: originalValue[idx], }; - if (subType.validate) - return subType.validate(item, innerOptions) + if (subType.validate) return subType.validate(item, innerOptions); - return true - }) + return true; + }); return runValidations({ sync, @@ -100,37 +96,34 @@ inherits(ArraySchema, MixedSchema, { value, errors, endEarly, - validations - }) - }) + validations, + }); + }); }, of(schema) { - var next = this.clone() + var next = this.clone(); if (schema !== false && !isSchema(schema)) throw new TypeError( '`array.of()` sub-schema must be a valid yup schema, or `false` to negate a current sub-schema. ' + - 'not: ' + typeOf(schema) - ) + 'not: ' + + typeOf(schema), + ); next._subType = schema; - return next + return next; }, required(msg) { var next = MixedSchema.prototype.required.call(this, msg || mixed.required); - return next.test( - 'required' - , msg || mixed.required - , hasLength - ) + return next.test('required', msg || mixed.required, hasLength); }, - min(min, message){ - message = message || locale.min + min(min, message) { + message = message || locale.min; return this.test({ message, @@ -138,35 +131,35 @@ inherits(ArraySchema, MixedSchema, { exclusive: true, params: { min }, test(value) { - return isAbsent(value) || value.length >= this.resolve(min) - } - }) + return isAbsent(value) || value.length >= this.resolve(min); + }, + }); }, - max(max, message){ - message = message || locale.max + max(max, message) { + message = message || locale.max; return this.test({ message, name: 'max', exclusive: true, params: { max }, test(value) { - return isAbsent(value) || value.length <= this.resolve(max) - } - }) + return isAbsent(value) || value.length <= this.resolve(max); + }, + }); }, ensure() { - return this - .default(() => []) - .transform(val => val === null ? [] : [].concat(val)) + return this.default(() => []).transform( + val => (val === null ? [] : [].concat(val)), + ); }, - compact(rejector){ - let reject = !rejector - ? v => !!v - : (v, i, a) => !rejector(v, i, a); + compact(rejector) { + let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a); - return this.transform(values => values != null ? values.filter(reject) : values) - } -}) + return this.transform( + values => (values != null ? values.filter(reject) : values), + ); + }, +}); diff --git a/src/boolean.js b/src/boolean.js index 638636a3f..a886fa7f7 100644 --- a/src/boolean.js +++ b/src/boolean.js @@ -1,30 +1,28 @@ import inherits from './util/inherits'; import MixedSchema from './mixed'; -export default BooleanSchema +export default BooleanSchema; -function BooleanSchema(){ - if (!(this instanceof BooleanSchema)) - return new BooleanSchema() +function BooleanSchema() { + if (!(this instanceof BooleanSchema)) return new BooleanSchema(); - MixedSchema.call(this, { type: 'boolean'}) + MixedSchema.call(this, { type: 'boolean' }); this.withMutation(() => { this.transform(function(value) { if (!this.isType(value)) { - if (/^(true|1)$/i.test(value)) return true - if (/^(false|0)$/i.test(value)) return false + if (/^(true|1)$/i.test(value)) return true; + if (/^(false|0)$/i.test(value)) return false; } - return value - }) - }) + return value; + }); + }); } inherits(BooleanSchema, MixedSchema, { - _typeCheck(v) { if (v instanceof Boolean) v = v.valueOf(); - return typeof v === 'boolean' - } -}) + return typeof v === 'boolean'; + }, +}); diff --git a/src/customLocale.js b/src/customLocale.js index 1cc227582..cc5433cf8 100644 --- a/src/customLocale.js +++ b/src/customLocale.js @@ -1,9 +1,9 @@ import locale from './locale'; -export function setLocale(custom){ +export function setLocale(custom) { Object.keys(custom).forEach(type => { Object.keys(custom[type]).forEach(method => { - locale[type][method] = custom[type][method] - }) - }) + locale[type][method] = custom[type][method]; + }); + }); } diff --git a/src/date.js b/src/date.js index d15d3b7b3..f9b59b7bc 100644 --- a/src/date.js +++ b/src/date.js @@ -5,41 +5,41 @@ import { date as locale } from './locale.js'; import isAbsent from './util/isAbsent'; import Ref from './Reference'; -let invalidDate = new Date('') +let invalidDate = new Date(''); -let isDate = obj => Object.prototype.toString.call(obj) === '[object Date]' +let isDate = obj => Object.prototype.toString.call(obj) === '[object Date]'; -export default DateSchema +export default DateSchema; -function DateSchema(){ - if ( !(this instanceof DateSchema)) return new DateSchema() +function DateSchema() { + if (!(this instanceof DateSchema)) return new DateSchema(); - MixedSchema.call(this, { type: 'date'}) + MixedSchema.call(this, { type: 'date' }); this.withMutation(() => { this.transform(function(value) { - if (this.isType(value)) - return isDate(value) ? new Date(value) : value + if (this.isType(value)) return isDate(value) ? new Date(value) : value; - value = isoParse(value) - return value ? new Date(value) : invalidDate - }) - }) + value = isoParse(value); + return value ? new Date(value) : invalidDate; + }); + }); } inherits(DateSchema, MixedSchema, { - _typeCheck(v) { - return isDate(v) && !isNaN(v.getTime()) + return isDate(v) && !isNaN(v.getTime()); }, - min(min, msg){ + min(min, msg) { var limit = min; if (!Ref.isRef(limit)) { - limit = this.cast(min) + limit = this.cast(min); if (!this._typeCheck(limit)) - throw new TypeError('`min` must be a Date or a value that can be `cast()` to a Date') + throw new TypeError( + '`min` must be a Date or a value that can be `cast()` to a Date', + ); } return this.test({ @@ -48,18 +48,20 @@ inherits(DateSchema, MixedSchema, { message: msg || locale.min, params: { min }, test(value) { - return isAbsent(value) || value >= this.resolve(limit) - } - }) + return isAbsent(value) || value >= this.resolve(limit); + }, + }); }, - max(max, msg){ + max(max, msg) { var limit = max; if (!Ref.isRef(limit)) { - limit = this.cast(max) + limit = this.cast(max); if (!this._typeCheck(limit)) - throw new TypeError('`max` must be a Date or a value that can be `cast()` to a Date') + throw new TypeError( + '`max` must be a Date or a value that can be `cast()` to a Date', + ); } return this.test({ @@ -68,9 +70,8 @@ inherits(DateSchema, MixedSchema, { message: msg || locale.max, params: { max }, test(value) { - return isAbsent(value) || value <= this.resolve(limit) - } - }) - } - -}) + return isAbsent(value) || value <= this.resolve(limit); + }, + }); + }, +}); diff --git a/src/index.js b/src/index.js index 761fe4016..f0f021435 100644 --- a/src/index.js +++ b/src/index.js @@ -14,16 +14,18 @@ import isSchema from './util/isSchema'; let boolean = bool; let ref = (key, options) => new Ref(key, options); -let lazy = (fn) => new Lazy(fn); +let lazy = fn => new Lazy(fn); function addMethod(schemaType, name, fn) { if (!schemaType || !isSchema(schemaType.prototype)) - throw new TypeError('You must provide a yup schema constructor function') + throw new TypeError('You must provide a yup schema constructor function'); - if (typeof name !== 'string') throw new TypeError('A Method name must be provided') - if (typeof fn !== 'function') throw new TypeError('Method function must be provided') + if (typeof name !== 'string') + throw new TypeError('A Method name must be provided'); + if (typeof fn !== 'function') + throw new TypeError('Method function must be provided'); - schemaType.prototype[name] = fn + schemaType.prototype[name] = fn; } export { @@ -41,7 +43,7 @@ export { isSchema, addMethod, ValidationError, -} +}; export default { mixed, diff --git a/src/locale.js b/src/locale.js index a6b35d833..606da4145 100644 --- a/src/locale.js +++ b/src/locale.js @@ -1,63 +1,65 @@ import printValue from './util/printValue'; export let mixed = { - default: '${path} is invalid', - required: '${path} is a required field', - oneOf: '${path} must be one of the following values: ${values}', - notOneOf: '${path} must not be one of the following values: ${values}', - notType: ({ path, type, value, originalValue }) => { - let isCast = originalValue != null && originalValue !== value - let msg = `${path} must be a \`${type}\` type, ` + - `but the final value was: \`${printValue(value, true)}\`` + (isCast ? - ` (cast from the value \`${printValue(originalValue, true)}\`).` : '.') + default: '${path} is invalid', + required: '${path} is a required field', + oneOf: '${path} must be one of the following values: ${values}', + notOneOf: '${path} must not be one of the following values: ${values}', + notType: ({ path, type, value, originalValue }) => { + let isCast = originalValue != null && originalValue !== value; + let msg = + `${path} must be a \`${type}\` type, ` + + `but the final value was: \`${printValue(value, true)}\`` + + (isCast + ? ` (cast from the value \`${printValue(originalValue, true)}\`).` + : '.'); if (value === null) { - msg += `\n If "null" is intended as an empty value be sure to mark the schema as \`.nullable()\`` + msg += `\n If "null" is intended as an empty value be sure to mark the schema as \`.nullable()\``; } return msg; }, -} +}; export let string = { - length: '${path} must be exactly ${length} characters', - min: '${path} must be at least ${min} characters', - max: '${path} must be at most ${max} characters', - matches: '${path} must match the following: "${regex}"', - email: '${path} must be a valid email', - url: '${path} must be a valid URL', - trim: '${path} must be a trimmed string', + length: '${path} must be exactly ${length} characters', + min: '${path} must be at least ${min} characters', + max: '${path} must be at most ${max} characters', + matches: '${path} must match the following: "${regex}"', + email: '${path} must be a valid email', + url: '${path} must be a valid URL', + trim: '${path} must be a trimmed string', lowercase: '${path} must be a lowercase string', uppercase: '${path} must be a upper case string', -} +}; export let number = { - min: '${path} must be greater than or equal to ${min}', - max: '${path} must be less than or equal to ${max}', - less: '${path} must be less than ${less}', - more: '${path} must be greater than ${more}', - notEqual: '${path} must be not equal to ${notEqual}', - positive: '${path} must be a positive number', - negative: '${path} must be a negative number', - integer: '${path} must be an integer', -} + min: '${path} must be greater than or equal to ${min}', + max: '${path} must be less than or equal to ${max}', + less: '${path} must be less than ${less}', + more: '${path} must be greater than ${more}', + notEqual: '${path} must be not equal to ${notEqual}', + positive: '${path} must be a positive number', + negative: '${path} must be a negative number', + integer: '${path} must be an integer', +}; export let date = { - min: '${path} field must be later than ${min}', - max: '${path} field must be earlier than ${max}', -} - -export let boolean = { + min: '${path} field must be later than ${min}', + max: '${path} field must be at earlier than ${max}', }; +export let boolean = {}; + export let object = { noUnknown: '${path} field cannot have keys not specified in the object shape', -} +}; export let array = { - min: '${path} field must have at least ${min} items', - max: '${path} field must have less than or equal to ${max} items', -} + min: '${path} field must have at least ${min} items', + max: '${path} field must have less than or equal to ${max} items', +}; export default { mixed, @@ -67,4 +69,4 @@ export default { object, array, boolean, -} +}; diff --git a/src/mixed.js b/src/mixed.js index 96041ea1d..f0b241adb 100644 --- a/src/mixed.js +++ b/src/mixed.js @@ -18,87 +18,85 @@ function extractTestParams(name, message, test) { var opts = name; if (typeof message === 'function') { - test = message; message = locale.default; name = null; + test = message; + message = locale.default; + name = null; } if (typeof name === 'function') { - test = name; message = locale.default; name = null; + test = name; + message = locale.default; + name = null; } if (typeof name === 'string' || name === null) - opts = { name, test, message, exclusive: false } + opts = { name, test, message, exclusive: false }; if (typeof opts.test !== 'function') - throw new TypeError('`test` is a required parameters') + throw new TypeError('`test` is a required parameters'); - return opts + return opts; } -const listToArray = list => - toArray(list).concat(toArray(list.refs.values())) +const listToArray = list => toArray(list).concat(toArray(list.refs.values())); const removeFromList = (value, list) => { - Ref.isRef(value) ? list.refs.delete(value.key) : list.delete(value) -} + Ref.isRef(value) ? list.refs.delete(value.key) : list.delete(value); +}; const addToList = (value, list) => { - Ref.isRef(value) ? list.refs.set(value.key, value) : list.add(value) -} + Ref.isRef(value) ? list.refs.set(value.key, value) : list.add(value); +}; const hasInList = (value, resolve, list) => { if (list.has(value)) return true; - let item; let values = list.refs.values() + let item; + let values = list.refs.values(); - while (item = values.next(), !item.done) { - if (resolve(item.value) === value) - return true; + while (((item = values.next()), !item.done)) { + if (resolve(item.value) === value) return true; } - return false -} + return false; +}; -export default function SchemaType(options = {}){ - if ( !(this instanceof SchemaType)) - return new SchemaType() +export default function SchemaType(options = {}) { + if (!(this instanceof SchemaType)) return new SchemaType(); - this._deps = [] - this._conditions = [] - this._options = { abortEarly: true, recursive: true } - this._exclusive = Object.create(null) + this._deps = []; + this._conditions = []; + this._options = { abortEarly: true, recursive: true }; + this._exclusive = Object.create(null); - this._whitelist = new Set() - this._whitelist.refs = new Map() + this._whitelist = new Set(); + this._whitelist.refs = new Map(); - this._blacklist = new Set() - this._blacklist.refs = new Map() - this.tests = [] - this.transforms = [] + this._blacklist = new Set(); + this._blacklist.refs = new Map(); + this.tests = []; + this.transforms = []; this.withMutation(() => { - this.typeError(locale.notType) - }) + this.typeError(locale.notType); + }); - if (has(options, 'default')) - this._defaultDefault = options.default + if (has(options, 'default')) this._defaultDefault = options.default; - this._type = options.type || 'mixed' + this._type = options.type || 'mixed'; } SchemaType.prototype = { - __isYupSchema__: true, constructor: SchemaType, clone() { - if (this._mutate) - return this; + if (this._mutate) return this; // if the nested value is a schema we can skip cloning, since // they are already immutable - return cloneDeepWith(this, (value) => { - if (isSchema(value) && value !== this) - return value + return cloneDeepWith(this, value => { + if (isSchema(value) && value !== this) return value; }); }, @@ -109,64 +107,68 @@ SchemaType.prototype = { }, meta(obj) { - if (arguments.length === 0) - return this._meta; + if (arguments.length === 0) return this._meta; var next = this.clone(); - next._meta = Object.assign(next._meta || {}, obj) + next._meta = Object.assign(next._meta || {}, obj); return next; }, withMutation(fn) { - this._mutate = true - let result = fn(this) - this._mutate = false - return result + this._mutate = true; + let result = fn(this); + this._mutate = false; + return result; }, - concat(schema){ - if (!schema) - return this + concat(schema) { + if (!schema) return this; if (schema._type !== this._type && this._type !== 'mixed') - throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this._type} and ${schema._type}`) - var cloned = this.clone() - var next = merge(this.clone(), schema.clone()) + throw new TypeError( + `You cannot \`concat()\` schema's of different types: ${ + this._type + } and ${schema._type}`, + ); + var cloned = this.clone(); + var next = merge(this.clone(), schema.clone()); // undefined isn't merged over, but is a valid value for default - if (has(schema, '_default')) - next._default = schema._default + if (has(schema, '_default')) next._default = schema._default; next.tests = cloned.tests; next._exclusive = cloned._exclusive; // manually add the new tests to ensure // the deduping logic is consistent - schema.tests.forEach((fn) => { - next = next.test(fn.TEST) + schema.tests.forEach(fn => { + next = next.test(fn.TEST); }); next._type = schema._type; - return next + return next; }, isType(v) { - if( this._nullable && v === null) return true - return !this._typeCheck || this._typeCheck(v) + if (this._nullable && v === null) return true; + return !this._typeCheck || this._typeCheck(v); }, resolve({ context, parent }) { if (this._conditions.length) { - return this._conditions.reduce((schema, match) => - match.resolve(schema, match.getValue(parent, context)), this) + return this._conditions.reduce( + (schema, match) => + match.resolve(schema, match.getValue(parent, context)), + this, + ); } - return this + return this; }, cast(value, options = {}) { - let resolvedSchema = this.resolve(options) + let resolvedSchema = this.resolve(options); let result = resolvedSchema._cast(value, options); if ( @@ -177,11 +179,13 @@ SchemaType.prototype = { let formattedValue = printValue(value); let formattedResult = printValue(result); throw new TypeError( - `The value of ${options.path || 'field'} could not be cast to a value ` + - `that satisfies the schema type: "${resolvedSchema._type}". \n\n` + - `attempted value: ${formattedValue} \n` + - ((formattedResult !== formattedValue) - ? `result of cast: ${formattedResult}` : '') + `The value of ${options.path || + 'field'} could not be cast to a value ` + + `that satisfies the schema type: "${resolvedSchema._type}". \n\n` + + `attempted value: ${formattedValue} \n` + + (formattedResult !== formattedValue + ? `result of cast: ${formattedResult}` + : ''), ); } @@ -189,38 +193,49 @@ SchemaType.prototype = { }, _cast(rawValue) { - let value = rawValue === undefined ? rawValue - : this.transforms.reduce( - (value, fn) => fn.call(this, value, rawValue), rawValue) + let value = + rawValue === undefined + ? rawValue + : this.transforms.reduce( + (value, fn) => fn.call(this, value, rawValue), + rawValue, + ); if (value === undefined && has(this, '_default')) { - value = this.default() + value = this.default(); } - return value + return value; }, _validate(_value, options = {}) { - let value = _value; - let originalValue = options.originalValue != null ? - options.originalValue : _value + let value = _value; + let originalValue = + options.originalValue != null ? options.originalValue : _value; - let isStrict = this._option('strict', options) - let endEarly = this._option('abortEarly', options) + let isStrict = this._option('strict', options); + let endEarly = this._option('abortEarly', options); - let sync = options.sync - let path = options.path - let label = this._label + let sync = options.sync; + let path = options.path; + let label = this._label; if (!isStrict) { - value = this._cast(value, { assert: false, ...options }) + value = this._cast(value, { assert: false, ...options }); } // value is cast, we can check if it meets type requirements - let validationParams = { value, path, schema: this, options, label, originalValue, sync } - let initialTests = [] - - if (this._typeError) - initialTests.push(this._typeError(validationParams)); + let validationParams = { + value, + path, + schema: this, + options, + label, + originalValue, + sync, + }; + let initialTests = []; + + if (this._typeError) initialTests.push(this._typeError(validationParams)); if (this._whitelistError) initialTests.push(this._whitelistError(validationParams)); @@ -228,108 +243,107 @@ SchemaType.prototype = { if (this._blacklistError) initialTests.push(this._blacklistError(validationParams)); - return runValidations({ validations: initialTests, endEarly, value, path, sync }) - .then(value => runValidations({ + return runValidations({ + validations: initialTests, + endEarly, + value, + path, + sync, + }).then(value => + runValidations({ path, sync, value, endEarly, validations: this.tests.map(fn => fn(validationParams)), - })) + }), + ); }, validate(value, options = {}) { - let schema = this.resolve(options) - return schema._validate(value, options) + let schema = this.resolve(options); + return schema._validate(value, options); }, validateSync(value, options = {}) { - let schema = this.resolve(options) + let schema = this.resolve(options); let result, err; schema ._validate(value, { ...options, sync: true }) - .then(r => result = r) - .catch(e => err = e); + .then(r => (result = r)) + .catch(e => (err = e)); - if (err) throw err - return result; + if (err) throw err; + return result; }, - isValid(value, options) { - return this - .validate(value, options) + return this.validate(value, options) .then(() => true) .catch(err => { - if (err.name === 'ValidationError') - return false + if (err.name === 'ValidationError') return false; - throw err - }) + throw err; + }); }, isValidSync(value, options) { try { - this.validateSync(value, { ...options }) - return true - } - catch (err) { - if (err.name === 'ValidationError') return false - throw err + this.validateSync(value, { ...options }); + return true; + } catch (err) { + if (err.name === 'ValidationError') return false; + throw err; } }, getDefault({ context, parent }) { - return this._resolve(context, parent).default() + return this._resolve(context, parent).default(); }, default(def) { if (arguments.length === 0) { var defaultValue = has(this, '_default') ? this._default - : this._defaultDefault + : this._defaultDefault; return typeof defaultValue === 'function' ? defaultValue.call(this) - : cloneDeepWith(defaultValue) + : cloneDeepWith(defaultValue); } - var next = this.clone() - next._default = def - return next + var next = this.clone(); + next._default = def; + return next; }, strict() { - var next = this.clone() - next._options.strict = true - return next + var next = this.clone(); + next._options.strict = true; + return next; }, required(msg) { - return this.test( - 'required', - msg || locale.required, - notEmpty - ) + return this.test('required', msg || locale.required, notEmpty); }, notRequired() { - var next = this.clone() - next.tests = next.tests.filter(test => test.TEST_NAME !== 'required') - return next + var next = this.clone(); + next.tests = next.tests.filter(test => test.TEST_NAME !== 'required'); + return next; }, nullable(value) { - var next = this.clone() - next._nullable = value === false ? false : true - return next + var next = this.clone(); + next._nullable = value === false ? false : true; + return next; }, transform(fn) { var next = this.clone(); - next.transforms.push(fn) - return next + next.transforms.push(fn); + return next; }, /** @@ -346,52 +360,50 @@ SchemaType.prototype = { * the previous tests are removed and further tests of the same name will replace each other. */ test(name, message, test) { - let opts = extractTestParams(name, message, test) - , next = this.clone(); + let opts = extractTestParams(name, message, test), + next = this.clone(); let validate = createValidation(opts); - let isExclusive = ( - opts.exclusive || - (opts.name && next._exclusive[opts.name] === true) - ) + let isExclusive = + opts.exclusive || (opts.name && next._exclusive[opts.name] === true); if (opts.exclusive && !opts.name) { - throw new TypeError('Exclusive tests must provide a unique `name` identifying the test') + throw new TypeError( + 'Exclusive tests must provide a unique `name` identifying the test', + ); } - next._exclusive[opts.name] = !!opts.exclusive + next._exclusive[opts.name] = !!opts.exclusive; - next.tests = next.tests - .filter(fn => { - if (fn.TEST_NAME === opts.name) { - if (isExclusive) return false - if (fn.TEST.test === validate.TEST.test) return false - } - return true - }) + next.tests = next.tests.filter(fn => { + if (fn.TEST_NAME === opts.name) { + if (isExclusive) return false; + if (fn.TEST.test === validate.TEST.test) return false; + } + return true; + }); - next.tests.push(validate) + next.tests.push(validate); - return next + return next; }, when(keys, options) { - var next = this.clone() - , deps = [].concat(keys).map(key => new Ref(key)); + var next = this.clone(), + deps = [].concat(keys).map(key => new Ref(key)); deps.forEach(dep => { - if (!dep.isContext) - next._deps.push(dep.key) - }) + if (!dep.isContext) next._deps.push(dep.key); + }); - next._conditions.push(new Condition(deps, options)) + next._conditions.push(new Condition(deps, options)); - return next + return next; }, typeError(message) { - var next = this.clone() + var next = this.clone(); next._typeError = createValidation({ name: 'typeError', @@ -400,75 +412,76 @@ SchemaType.prototype = { if (value !== undefined && !this.schema.isType(value)) return this.createError({ params: { - type: this.schema._type - } - }) - return true - } - }) - return next + type: this.schema._type, + }, + }); + return true; + }, + }); + return next; }, oneOf(enums, message = locale.oneOf) { var next = this.clone(); enums.forEach(val => { - addToList(val, next._whitelist) - removeFromList(val, next._blacklist) - }) + addToList(val, next._whitelist); + removeFromList(val, next._blacklist); + }); next._whitelistError = createValidation({ message, name: 'oneOf', test(value) { - if (value === undefined) return true - let valids = this.schema._whitelist - - return hasInList(value, this.resolve, valids) ? true : this.createError({ - params: { - values: listToArray(valids).join(', ') - } - }) - } - }) + if (value === undefined) return true; + let valids = this.schema._whitelist; + + return hasInList(value, this.resolve, valids) + ? true + : this.createError({ + params: { + values: listToArray(valids).join(', '), + }, + }); + }, + }); - return next + return next; }, notOneOf(enums, message = locale.notOneOf) { var next = this.clone(); enums.forEach(val => { - addToList(val, next._blacklist) - removeFromList(val, next._whitelist) - }) + addToList(val, next._blacklist); + removeFromList(val, next._whitelist); + }); next._blacklistError = createValidation({ message, name: 'notOneOf', test(value) { - let invalids = this.schema._blacklist + let invalids = this.schema._blacklist; if (hasInList(value, this.resolve, invalids)) return this.createError({ params: { - values: listToArray(invalids).join(', ') - } - }) - return true - } - }) + values: listToArray(invalids).join(', '), + }, + }); + return true; + }, + }); - return next + return next; }, strip(strip = true) { - let next = this.clone() - next._strip = strip - return next + let next = this.clone(); + next._strip = strip; + return next; }, _option(key, overrides) { - return has(overrides, key) - ? overrides[key] : this._options[key] + return has(overrides, key) ? overrides[key] : this._options[key]; }, describe() { @@ -478,19 +491,18 @@ SchemaType.prototype = { type: next._type, meta: next._meta, label: next._label, - tests: next.tests.map((fn) => fn.TEST_NAME, {}) - } - } -} - + tests: next.tests.map(fn => fn.TEST_NAME, {}), + }; + }, +}; let aliases = { oneOf: ['equals', 'is'], - notOneOf: ['not', 'nope'] -} + notOneOf: ['not', 'nope'], +}; Object.keys(aliases).forEach(method => { - aliases[method].forEach(alias => - SchemaType.prototype[alias] = SchemaType.prototype[method] - ) -}) + aliases[method].forEach( + alias => (SchemaType.prototype[alias] = SchemaType.prototype[method]), + ); +}); diff --git a/src/number.js b/src/number.js index 00889f3f9..ad685f26e 100644 --- a/src/number.js +++ b/src/number.js @@ -3,35 +3,32 @@ import MixedSchema from './mixed'; import { number as locale } from './locale.js'; import isAbsent from './util/isAbsent'; -let isNaN = value => value != +value +let isNaN = value => value != +value; -let isInteger = val => isAbsent(val) || val === (val | 0) +let isInteger = val => isAbsent(val) || val === (val | 0); export default function NumberSchema() { - if (!(this instanceof NumberSchema)) - return new NumberSchema() + if (!(this instanceof NumberSchema)) return new NumberSchema(); - MixedSchema.call(this, { type: 'number' }) + MixedSchema.call(this, { type: 'number' }); this.withMutation(() => { - this.transform(function (value) { - if (this.isType(value)) return value + this.transform(function(value) { + if (this.isType(value)) return value; let parsed = parseFloat(value); - if (this.isType(parsed)) return parsed + if (this.isType(parsed)) return parsed; return NaN; - }) - }) + }); + }); } inherits(NumberSchema, MixedSchema, { - _typeCheck(value) { - if (value instanceof Number) - value = value.valueOf(); + if (value instanceof Number) value = value.valueOf(); - return typeof value === 'number' && !isNaN(value) + return typeof value === 'number' && !isNaN(value); }, min(min, msg) { @@ -41,9 +38,9 @@ inherits(NumberSchema, MixedSchema, { params: { min }, message: msg || locale.min, test(value) { - return isAbsent(value) || value >= this.resolve(min) - } - }) + return isAbsent(value) || value >= this.resolve(min); + }, + }); }, max(max, msg) { @@ -53,9 +50,9 @@ inherits(NumberSchema, MixedSchema, { params: { max }, message: msg || locale.max, test(value) { - return isAbsent(value) || value <= this.resolve(max) - } - }) + return isAbsent(value) || value <= this.resolve(max); + }, + }); }, lessThan(less, msg) { @@ -65,9 +62,9 @@ inherits(NumberSchema, MixedSchema, { params: { less }, message: msg || locale.less, test(value) { - return isAbsent(value) || value < this.resolve(less) - } - }) + return isAbsent(value) || value < this.resolve(less); + }, + }); }, moreThan(more, msg) { @@ -77,41 +74,43 @@ inherits(NumberSchema, MixedSchema, { params: { more }, message: msg || locale.more, test(value) { - return isAbsent(value) || value > this.resolve(more) - } - }) + return isAbsent(value) || value > this.resolve(more); + }, + }); }, positive(msg) { - return this.min(0, msg || locale.positive) + return this.min(0, msg || locale.positive); }, negative(msg) { - return this.max(0, msg || locale.negative) + return this.max(0, msg || locale.negative); }, integer(msg) { msg = msg || locale.integer; - return this.test('integer', msg, isInteger) + return this.test('integer', msg, isInteger); }, truncate() { - return this.transform(value => - !isAbsent(value) ? (value | 0) : value) + return this.transform(value => (!isAbsent(value) ? value | 0 : value)); }, round(method) { - var avail = ['ceil', 'floor', 'round', 'trunc'] - method = (method && method.toLowerCase()) || 'round' + var avail = ['ceil', 'floor', 'round', 'trunc']; + method = (method && method.toLowerCase()) || 'round'; // this exists for symemtry with the new Math.trunc - if (method === 'trunc') - return this.truncate() + if (method === 'trunc') return this.truncate(); if (avail.indexOf(method.toLowerCase()) === -1) - throw new TypeError('Only valid options for round() are: ' + avail.join(', ')) + throw new TypeError( + 'Only valid options for round() are: ' + avail.join(', '), + ); - return this.transform(value => !isAbsent(value) ? Math[method](value) : value) - } -}) + return this.transform( + value => (!isAbsent(value) ? Math[method](value) : value), + ); + }, +}); diff --git a/src/object.js b/src/object.js index 36193d783..c3030a074 100644 --- a/src/object.js +++ b/src/object.js @@ -17,70 +17,70 @@ import runValidations, { propagateErrors } from './util/runValidations'; let isObject = obj => Object.prototype.toString.call(obj) === '[object Object]'; function unknown(ctx, value) { - var known = Object.keys(ctx.fields) - return Object.keys(value) - .filter(key => known.indexOf(key) === -1) + var known = Object.keys(ctx.fields); + return Object.keys(value).filter(key => known.indexOf(key) === -1); } - export default function ObjectSchema(spec) { - if (!(this instanceof ObjectSchema)) - return new ObjectSchema(spec) - - MixedSchema.call(this, { type: 'object', default() { - var dft = transform(this._nodes, (obj, key) => { - obj[key] = this.fields[key].default - ? this.fields[key].default() - : undefined - }, {}) - - return Object.keys(dft).length === 0 ? undefined : dft - } - }) - - this.fields = Object.create(null) - this._nodes = [] - this._excludedEdges = [] + if (!(this instanceof ObjectSchema)) return new ObjectSchema(spec); + + MixedSchema.call(this, { + type: 'object', + default() { + var dft = transform( + this._nodes, + (obj, key) => { + obj[key] = this.fields[key].default + ? this.fields[key].default() + : undefined; + }, + {}, + ); + + return Object.keys(dft).length === 0 ? undefined : dft; + }, + }); + + this.fields = Object.create(null); + this._nodes = []; + this._excludedEdges = []; this.withMutation(() => { this.transform(function coerce(value) { if (typeof value === 'string') { try { - value = JSON.parse(value) + value = JSON.parse(value); + } catch (err) { + value = null; } - catch (err){ value = null } } - if (this.isType(value)) - return value - return null - }) + if (this.isType(value)) return value; + return null; + }); if (spec) { this.shape(spec); } - }) + }); } inherits(ObjectSchema, MixedSchema, { - _typeCheck(value) { return isObject(value) || typeof value === 'function'; }, _cast(_value, options = {}) { - var value = MixedSchema.prototype._cast.call(this, _value, options) + var value = MixedSchema.prototype._cast.call(this, _value, options); //should ignore nulls here - if (value === undefined) - return this.default(); + if (value === undefined) return this.default(); - if (!this._typeCheck(value)) - return value; + if (!this._typeCheck(value)) return value; - let fields = this.fields - , strip = this._option('stripUnknown', options) === true - , extra = Object.keys(value).filter(v => this._nodes.indexOf(v) === -1) - , props = this._nodes.concat(extra); + let fields = this.fields, + strip = this._option('stripUnknown', options) === true, + extra = Object.keys(value).filter(v => this._nodes.indexOf(v) === -1), + props = this._nodes.concat(extra); let innerOptions = { ...options, @@ -88,47 +88,47 @@ inherits(ObjectSchema, MixedSchema, { __validating: false, }; - value = transform(props, (obj, prop) => { - let field = fields[prop]; - let exists = has(value, prop); - - if (field) { - let fieldValue; - let strict = field._options && field._options.strict; + value = transform( + props, + (obj, prop) => { + let field = fields[prop]; + let exists = has(value, prop); - // safe to mutate since this is fired in sequence - innerOptions.path = makePath`${options.path}.${prop}`; - innerOptions.value = value[prop]; + if (field) { + let fieldValue; + let strict = field._options && field._options.strict; - field = field.resolve(innerOptions); + // safe to mutate since this is fired in sequence + innerOptions.path = makePath`${options.path}.${prop}`; + innerOptions.value = value[prop]; - if (field._strip === true) - return + field = field.resolve(innerOptions); - fieldValue = !options.__validating || !strict - ? field.cast(value[prop], innerOptions) - : value[prop] + if (field._strip === true) return; - if (fieldValue !== undefined) - obj[prop] = fieldValue - } - else if (exists && !strip) - obj[prop] = value[prop] + fieldValue = + !options.__validating || !strict + ? field.cast(value[prop], innerOptions) + : value[prop]; - }, innerOptions.parent) + if (fieldValue !== undefined) obj[prop] = fieldValue; + } else if (exists && !strip) obj[prop] = value[prop]; + }, + innerOptions.parent, + ); - return value + return value; }, _validate(_value, opts = {}) { let endEarly, recursive; - let sync = opts.sync - let errors = [] - let originalValue = opts.originalValue != null ? - opts.originalValue : _value + let sync = opts.sync; + let errors = []; + let originalValue = + opts.originalValue != null ? opts.originalValue : _value; - endEarly = this._option('abortEarly', opts) - recursive = this._option('recursive', opts) + endEarly = this._option('abortEarly', opts); + recursive = this._option('recursive', opts); opts = { ...opts, __validating: true, originalValue }; @@ -136,16 +136,17 @@ inherits(ObjectSchema, MixedSchema, { .call(this, _value, opts) .catch(propagateErrors(endEarly, errors)) .then(value => { - if (!recursive || !isObject(value)) { // only iterate though actual objects - if (errors.length) throw errors[0] - return value + if (!recursive || !isObject(value)) { + // only iterate though actual objects + if (errors.length) throw errors[0]; + return value; } - originalValue = originalValue || value + originalValue = originalValue || value; let validations = this._nodes.map(key => { - let path = makePath`${opts.path}.${key}` - let field = this.fields[key] + let path = makePath`${opts.path}.${key}`; + let field = this.fields[key]; let innerOptions = { ...opts, @@ -160,12 +161,11 @@ inherits(ObjectSchema, MixedSchema, { // 2. this is strict in which case the nested values weren't cast either innerOptions.strict = true; - if (field.validate) - return field.validate(value[key], innerOptions) + if (field.validate) return field.validate(value[key], innerOptions); } - return true - }) + return true; + }); return runValidations({ sync, @@ -174,37 +174,36 @@ inherits(ObjectSchema, MixedSchema, { errors, endEarly, path: opts.path, - sort: sortByKeyOrder(this.fields) - }) - }) + sort: sortByKeyOrder(this.fields), + }); + }); }, concat(schema) { - var next = MixedSchema.prototype.concat.call(this, schema) + var next = MixedSchema.prototype.concat.call(this, schema); - next._nodes = sortFields(next.fields, next._excludedEdges) + next._nodes = sortFields(next.fields, next._excludedEdges); - return next + return next; }, shape(schema, excludes = []) { - var next = this.clone() - , fields = Object.assign(next.fields, schema); + var next = this.clone(), + fields = Object.assign(next.fields, schema); - next.fields = fields + next.fields = fields; if (excludes.length) { - if (!Array.isArray(excludes[0])) - excludes = [excludes] + if (!Array.isArray(excludes[0])) excludes = [excludes]; let keys = excludes.map(([first, second]) => `${first}-${second}`); - next._excludedEdges = next._excludedEdges.concat(keys) + next._excludedEdges = next._excludedEdges.concat(keys); } - next._nodes = sortFields(fields, next._excludedEdges) + next._nodes = sortFields(fields, next._excludedEdges); - return next + return next; }, from(from, to, alias) { @@ -213,16 +212,15 @@ inherits(ObjectSchema, MixedSchema, { return this.transform(obj => { var newObj = obj; - if (obj == null) - return obj + if (obj == null) return obj; if (has(obj, from)) { newObj = alias ? { ...obj } : omit(obj, from); - newObj[to] = fromGetter(obj) + newObj[to] = fromGetter(obj); } - return newObj - }) + return newObj; + }); }, noUnknown(noAllow = true, message = locale.noUnknown) { @@ -237,34 +235,29 @@ inherits(ObjectSchema, MixedSchema, { message: message, test(value) { return ( - value == null || - !noAllow || - unknown(this.schema, value).length === 0 - ) - } - }) + value == null || !noAllow || unknown(this.schema, value).length === 0 + ); + }, + }); - if (noAllow) - next._options.stripUnknown = true + if (noAllow) next._options.stripUnknown = true; - return next + return next; }, transformKeys(fn) { - return this.transform(obj => obj && - mapKeys(obj, (_, key) => fn(key)) - ) + return this.transform(obj => obj && mapKeys(obj, (_, key) => fn(key))); }, camelCase() { - return this.transformKeys(camelCase) + return this.transformKeys(camelCase); }, snakeCase() { - return this.transformKeys(snakeCase) + return this.transformKeys(snakeCase); }, constantCase() { - return this.transformKeys(key => snakeCase(key).toUpperCase()) + return this.transformKeys(key => snakeCase(key).toUpperCase()); }, -}) +}); diff --git a/src/string.js b/src/string.js index 03489c877..355ba4bb6 100644 --- a/src/string.js +++ b/src/string.js @@ -4,69 +4,59 @@ import { mixed, string as locale } from './locale'; import isAbsent from './util/isAbsent'; let rEmail = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i; -let rUrl = /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i; +let rUrl = /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i; let hasLength = value => isAbsent(value) || value.length > 0; -let isTrimmed = value => isAbsent(value) || value === value.trim() +let isTrimmed = value => isAbsent(value) || value === value.trim(); export default function StringSchema() { - if ( !(this instanceof StringSchema)) - return new StringSchema() + if (!(this instanceof StringSchema)) return new StringSchema(); - MixedSchema.call(this, { type: 'string'}) + MixedSchema.call(this, { type: 'string' }); this.withMutation(() => { this.transform(function(value) { - if (this.isType(value)) return value - return value != null && value.toString - ? value.toString() - : value - }) - }) + if (this.isType(value)) return value; + return value != null && value.toString ? value.toString() : value; + }); + }); } inherits(StringSchema, MixedSchema, { - _typeCheck(value) { - if (value instanceof String) - value = value.valueOf(); + if (value instanceof String) value = value.valueOf(); - return typeof value === 'string' + return typeof value === 'string'; }, required(msg) { - var next = MixedSchema.prototype - .required.call(this, msg || mixed.required) - - return next.test( - 'required' - , msg || mixed.required - , hasLength - ) + var next = MixedSchema.prototype.required.call(this, msg || mixed.required); + + return next.test('required', msg || mixed.required, hasLength); }, length(length, msg) { return this.test({ name: 'length', exclusive: true, - message: msg || locale.length, + message: msg || locale.length, params: { length }, test(value) { - return isAbsent(value) || value.length === this.resolve(length) - } - }) + return isAbsent(value) || value.length === this.resolve(length); + }, + }); }, min(min, msg) { return this.test({ name: 'min', exclusive: true, - message: msg || locale.min, + message: msg || locale.min, params: { min }, test(value) { - return isAbsent(value) || value.length >= this.resolve(min) - } - }) + return isAbsent(value) || value.length >= this.resolve(min); + }, + }); }, max(max, msg) { @@ -76,80 +66,77 @@ inherits(StringSchema, MixedSchema, { message: msg || locale.max, params: { max }, test(value) { - return isAbsent(value) || value.length <= this.resolve(max) - } - }) + return isAbsent(value) || value.length <= this.resolve(max); + }, + }); }, matches(regex, options = {}) { - let excludeEmptyString = false - , message; + let excludeEmptyString = false, + message; if (options.message || options.hasOwnProperty('excludeEmptyString')) { ({ excludeEmptyString, message } = options); - } - else - message = options + } else message = options; return this.test({ message: message || locale.matches, params: { regex }, - test: value => ( + test: value => isAbsent(value) || (value === '' && excludeEmptyString) || - regex.test(value) - ) - }) + regex.test(value), + }); }, email(msg) { return this.matches(rEmail, { message: msg || locale.email, - excludeEmptyString: true + excludeEmptyString: true, }); }, url(msg) { return this.matches(rUrl, { message: msg || locale.url, - excludeEmptyString: true + excludeEmptyString: true, }); }, //-- transforms -- ensure() { - return this - .default('') - .transform(val => val === null ? '' : val) + return this.default('').transform(val => (val === null ? '' : val)); }, trim(msg) { - msg = msg || locale.trim + msg = msg || locale.trim; - return this - .transform(val => val != null ? val.trim() : val) - .test('trim', msg, isTrimmed) + return this.transform(val => (val != null ? val.trim() : val)).test( + 'trim', + msg, + isTrimmed, + ); }, lowercase(msg) { - return this - .transform(value => !isAbsent(value) ? value.toLowerCase() : value) - .test({ - name: 'string_case', - exclusive: true, - message: msg || locale.lowercase, - test: value => isAbsent(value) || value === value.toLowerCase() - }) + return this.transform( + value => (!isAbsent(value) ? value.toLowerCase() : value), + ).test({ + name: 'string_case', + exclusive: true, + message: msg || locale.lowercase, + test: value => isAbsent(value) || value === value.toLowerCase(), + }); }, - uppercase(msg){ - return this - .transform(value => !isAbsent(value) ? value.toUpperCase() : value) - .test({ - name: 'string_case', - exclusive: true, - message: msg || locale.uppercase, - test: value => isAbsent(value) || value === value.toUpperCase() - }) - } -}) + uppercase(msg) { + return this.transform( + value => (!isAbsent(value) ? value.toUpperCase() : value), + ).test({ + name: 'string_case', + exclusive: true, + message: msg || locale.uppercase, + test: value => isAbsent(value) || value === value.toUpperCase(), + }); + }, +}); diff --git a/src/util/createValidation.js b/src/util/createValidation.js index 7dcb0c324..48f23ded9 100644 --- a/src/util/createValidation.js +++ b/src/util/createValidation.js @@ -1,83 +1,102 @@ import mapValues from 'lodash/mapValues'; -import ValidationError from '../ValidationError' -import Ref from '../Reference' +import ValidationError from '../ValidationError'; +import Ref from '../Reference'; import { SynchronousPromise } from 'synchronous-promise'; +let formatError = ValidationError.formatError; -let formatError = ValidationError.formatError - -let thenable = p => p && typeof p.then === 'function' && typeof p.catch === 'function' +let thenable = p => + p && typeof p.then === 'function' && typeof p.catch === 'function'; function runTest(testFn, ctx, value, sync) { - let result = testFn.call(ctx, value) - if (!sync) return Promise.resolve(result) + let result = testFn.call(ctx, value); + if (!sync) return Promise.resolve(result); if (thenable(result)) { throw new Error( - `Validation test of type: "${ctx.type}" returned a Promise during a synchronous validate. ` + - `This test will finish after the validate call has returned` - ) + `Validation test of type: "${ + ctx.type + }" returned a Promise during a synchronous validate. ` + + `This test will finish after the validate call has returned`, + ); } - return SynchronousPromise.resolve(result) + return SynchronousPromise.resolve(result); } - function resolveParams(oldParams, newParams, resolve) { - return mapValues({ ...oldParams, ...newParams }, resolve) + return mapValues({ ...oldParams, ...newParams }, resolve); } -function createErrorFactory({ value, label, resolve, originalValue, ...opts}) { - return function createError({ path = opts.path, message = opts.message, type = opts.name, params } = {}) { +function createErrorFactory({ value, label, resolve, originalValue, ...opts }) { + return function createError({ + path = opts.path, + message = opts.message, + type = opts.name, + params, + } = {}) { params = { path, value, originalValue, label, - ...resolveParams(opts.params, params, resolve) + ...resolveParams(opts.params, params, resolve), }; return Object.assign( - new ValidationError( - formatError(message, params) - , value - , path - , type - ) - , { params }) - } + new ValidationError(formatError(message, params), value, path, type), + { params }, + ); + }; } export default function createValidation(options) { - let { name, message, test, params } = options - - function validate({ value, path, label, options, originalValue, sync, ...rest }) { + let { name, message, test, params } = options; + + function validate({ + value, + path, + label, + options, + originalValue, + sync, + ...rest + }) { let parent = options.parent; - let resolve = (value) => Ref.isRef(value) - ? value.getValue(parent, options.context) - : value + let resolve = value => + Ref.isRef(value) ? value.getValue(parent, options.context) : value; let createError = createErrorFactory({ - message, path, value, originalValue, params - , label, resolve, name - }) - - let ctx = { path, parent, type: name, createError, resolve, options, ...rest } + message, + path, + value, + originalValue, + params, + label, + resolve, + name, + }); - return runTest(test, ctx, value, sync) - .then(validOrError => { - if (ValidationError.isError(validOrError)) - throw validOrError + let ctx = { + path, + parent, + type: name, + createError, + resolve, + options, + ...rest, + }; - else if (!validOrError) - throw createError() - }) + return runTest(test, ctx, value, sync).then(validOrError => { + if (ValidationError.isError(validOrError)) throw validOrError; + else if (!validOrError) throw createError(); + }); } - validate.TEST_NAME = name - validate.TEST_FN = test - validate.TEST = options + validate.TEST_NAME = name; + validate.TEST_FN = test; + validate.TEST = options; - return validate + return validate; } -module.exports.createErrorFactory = createErrorFactory +module.exports.createErrorFactory = createErrorFactory; diff --git a/src/util/inherits.js b/src/util/inherits.js index 89a7c2474..a98ad455b 100644 --- a/src/util/inherits.js +++ b/src/util/inherits.js @@ -1,12 +1,11 @@ - export default function inherits(ctor, superCtor, spec) { ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, - configurable: true - } + configurable: true, + }, }); Object.assign(ctor.prototype, spec); diff --git a/src/util/isAbsent.js b/src/util/isAbsent.js index b2cc8b8c3..35fdc9ceb 100644 --- a/src/util/isAbsent.js +++ b/src/util/isAbsent.js @@ -1,2 +1 @@ - -export default value => value == null +export default value => value == null; diff --git a/src/util/isSchema.js b/src/util/isSchema.js index c214fd909..cdd7e5545 100644 --- a/src/util/isSchema.js +++ b/src/util/isSchema.js @@ -1,3 +1 @@ - - -export default obj => obj && obj.__isYupSchema__ +export default obj => obj && obj.__isYupSchema__; diff --git a/src/util/isodate.js b/src/util/isodate.js index 3e18199b0..75ed1b631 100644 --- a/src/util/isodate.js +++ b/src/util/isodate.js @@ -5,17 +5,17 @@ * Released under MIT license. */ // 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 ± 10 tzHH 11 tzmm -var isoReg = /^(\d{4}|[+\-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/ +var isoReg = /^(\d{4}|[+\-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/; export default function parseIsoDate(date) { - var numericKeys = [ 1, 4, 5, 6, 7, 10, 11 ] - , minutesOffset = 0 - , timestamp, struct; + var numericKeys = [1, 4, 5, 6, 7, 10, 11], + minutesOffset = 0, + timestamp, + struct; if ((struct = isoReg.exec(date))) { // avoid NaN timestamps caused by “undefined” values being passed to Date.UTC - for (var i = 0, k; (k = numericKeys[i]); ++i) - struct[k] = +struct[k] || 0; + for (var i = 0, k; (k = numericKeys[i]); ++i) struct[k] = +struct[k] || 0; // allow undefined days and months struct[2] = (+struct[2] || 1) - 1; @@ -25,22 +25,37 @@ export default function parseIsoDate(date) { struct[7] = struct[7] ? String(struct[7]).substr(0, 3) : 0; // timestamps without timezone identifiers should be considered local time - if ((struct[8] === undefined || struct[8] === '') && (struct[9] === undefined || struct[9] === '')) - timestamp = +new Date(struct[1], struct[2], struct[3], struct[4], struct[5], struct[6], struct[7]); - + if ( + (struct[8] === undefined || struct[8] === '') && + (struct[9] === undefined || struct[9] === '') + ) + timestamp = +new Date( + struct[1], + struct[2], + struct[3], + struct[4], + struct[5], + struct[6], + struct[7], + ); else { if (struct[8] !== 'Z' && struct[9] !== undefined) { minutesOffset = struct[10] * 60 + struct[11]; - if (struct[9] === '+') - minutesOffset = 0 - minutesOffset; + if (struct[9] === '+') minutesOffset = 0 - minutesOffset; } - timestamp = Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7]); + timestamp = Date.UTC( + struct[1], + struct[2], + struct[3], + struct[4], + struct[5] + minutesOffset, + struct[6], + struct[7], + ); } - } - else - timestamp = Date.parse ? Date.parse(date) : NaN; + } else timestamp = Date.parse ? Date.parse(date) : NaN; return timestamp; } diff --git a/src/util/makePath.js b/src/util/makePath.js index c4567c1d4..8f994f50d 100644 --- a/src/util/makePath.js +++ b/src/util/makePath.js @@ -1,9 +1,8 @@ - export default function makePath(strings, ...values) { let path = strings.reduce((str, next) => { let value = values.shift(); - return str + (value == null ? '' : value) + next - }) + return str + (value == null ? '' : value) + next; + }); return path.replace(/^\./, ''); } diff --git a/src/util/merge.js b/src/util/merge.js index 80ddf6e99..79ab8a2ba 100644 --- a/src/util/merge.js +++ b/src/util/merge.js @@ -3,32 +3,28 @@ import isSchema from './isSchema'; let isObject = obj => Object.prototype.toString.call(obj) === '[object Object]'; -export default function merge(target, source){ - for (var key in source) if (has(source, key)) { - var targetVal = target[key] - , sourceVal = source[key]; +export default function merge(target, source) { + for (var key in source) + if (has(source, key)) { + var targetVal = target[key], + sourceVal = source[key]; - if ( sourceVal === undefined ) - continue + if (sourceVal === undefined) continue; - if (isSchema(sourceVal)) { - target[key] = isSchema(targetVal) - ? targetVal.concat(sourceVal) - : sourceVal + if (isSchema(sourceVal)) { + target[key] = isSchema(targetVal) + ? targetVal.concat(sourceVal) + : sourceVal; + } else if (isObject(sourceVal)) { + target[key] = isObject(targetVal) + ? merge(targetVal, sourceVal) + : sourceVal; + } else if (Array.isArray(sourceVal)) { + target[key] = Array.isArray(targetVal) + ? targetVal.concat(sourceVal) + : sourceVal; + } else target[key] = source[key]; } - else if (isObject(sourceVal)) { - target[key] = isObject(targetVal) - ? merge(targetVal, sourceVal) - : sourceVal - } - else if (Array.isArray(sourceVal)) { - target[key] = Array.isArray(targetVal) - ? targetVal.concat(sourceVal) - : sourceVal - } - else - target[key] = source[key]; - } return target; } diff --git a/src/util/printValue.js b/src/util/printValue.js index 3f9c14f7f..6896c71f1 100644 --- a/src/util/printValue.js +++ b/src/util/printValue.js @@ -5,9 +5,8 @@ const toString = Object.prototype.toString; const toISOString = Date.prototype.toISOString; const errorToString = Error.prototype.toString; const regExpToString = RegExp.prototype.toString; -const symbolToString = typeof Symbol !== 'undefined' ? - Symbol.prototype.toString : - ()=> ''; +const symbolToString = + typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => ''; const SYMBOL_REGEXP = /^Symbol\((.*)\)(.*)$/; @@ -42,7 +41,8 @@ function printSimpleValue(val, quoteStrings = false) { if (isSymbol(val)) return printSymbol(val); const tag = toString.call(val); - if (tag === '[object Date]') return isNaN(val.getTime()) ? String(val) : toISOString.call(val); + if (tag === '[object Date]') + return isNaN(val.getTime()) ? String(val) : toISOString.call(val); if (tag === '[object Error]' || val instanceof Error) return printError(val); if (tag === '[object RegExp]') return regExpToString.call(val); @@ -53,9 +53,13 @@ export default function printValue(value, quoteStrings) { let result = printSimpleValue(value, quoteStrings); if (result !== null) return result; - return JSON.stringify(value, function (key, value) { - let result = printSimpleValue(this[key], quoteStrings); - if (result !== null) return result - return value - }, 2) + return JSON.stringify( + value, + function(key, value) { + let result = printSimpleValue(this[key], quoteStrings); + if (result !== null) return result; + return value; + }, + 2, + ); } diff --git a/src/util/reach.js b/src/util/reach.js index cffd7f990..2d603da1b 100644 --- a/src/util/reach.js +++ b/src/util/reach.js @@ -1,7 +1,7 @@ import { forEach } from 'property-expr'; import has from 'lodash/has'; -let trim = part => part.substr(0, part.length - 1).substr(1) +let trim = part => part.substr(0, part.length - 1).substr(1); export default function reach(obj, path, value, context) { let parent, lastPart; @@ -12,7 +12,8 @@ export default function reach(obj, path, value, context) { forEach(path, (_part, isBracket, isArray) => { let part = isBracket ? trim(_part) : _part; - if (isArray || has(obj, '_subType')) { // we skipped an array: foo[].bar + if (isArray || has(obj, '_subType')) { + // we skipped an array: foo[].bar let idx = isArray ? parseInt(part, 10) : 0; obj = obj.resolve({ context, parent, value })._subType; @@ -21,11 +22,11 @@ export default function reach(obj, path, value, context) { if (isArray && idx >= value.length) { throw new Error( `Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + - `because there is no value at that index. ` - ) + `because there is no value at that index. `, + ); } - value = value[idx] + value = value[idx]; } } @@ -35,20 +36,20 @@ export default function reach(obj, path, value, context) { if (!has(obj, 'fields') || !has(obj.fields, part)) throw new Error( `The schema does not contain the path: ${path}. ` + - `(failed at: ${lastPart} which is a type: "${obj._type}") ` - ) + `(failed at: ${lastPart} which is a type: "${obj._type}") `, + ); - obj = obj.fields[part] + obj = obj.fields[part]; parent = value; - value = value && value[part] - lastPart = isBracket ? '[' + _part + ']' : '.' + _part + value = value && value[part]; + lastPart = isBracket ? '[' + _part + ']' : '.' + _part; } - }) + }); if (obj) { obj = obj.resolve({ context, parent, value }); } - return obj + return obj; } diff --git a/src/util/runValidations.js b/src/util/runValidations.js index 802d48764..12346a4ec 100644 --- a/src/util/runValidations.js +++ b/src/util/runValidations.js @@ -1,12 +1,10 @@ import { SynchronousPromise } from 'synchronous-promise'; import ValidationError from '../ValidationError'; -let promise = sync => sync ? SynchronousPromise: Promise; +let promise = sync => (sync ? SynchronousPromise : Promise); let unwrapError = (errors = []) => - errors.inner && errors.inner.length - ? errors.inner - : [].concat(errors); + errors.inner && errors.inner.length ? errors.inner : [].concat(errors); function scopeToValue(promises, value, sync) { //console.log('scopeToValue', promises, value) @@ -15,14 +13,13 @@ function scopeToValue(promises, value, sync) { //console.log('scopeToValue B', p) let b = p.catch(err => { - if (err.name === 'ValidationError') - err.value = value - throw err - }) + if (err.name === 'ValidationError') err.value = value; + throw err; + }); //console.log('scopeToValue c', b) let c = b.then(() => value); //console.log('scopeToValue d', c) - return c + return c; } /** @@ -30,29 +27,32 @@ function scopeToValue(promises, value, sync) { * and collect them in an array */ export function propagateErrors(endEarly, errors) { - return endEarly ? null : err => { - errors.push(err) - return err.value - } + return endEarly + ? null + : err => { + errors.push(err); + return err.value; + }; } export function settled(promises, sync) { - let settle = promise => promise.then( - value => ({ fulfilled: true, value }), - value => ({ fulfilled: false, value })) + let settle = promise => + promise.then( + value => ({ fulfilled: true, value }), + value => ({ fulfilled: false, value }), + ); - return promise(sync).all(promises.map(settle)) + return promise(sync).all(promises.map(settle)); } - export function collectErrors({ validations, value, path, sync, errors, - sort -}){ + sort, +}) { errors = unwrapError(errors); return settled(validations, sync).then(results => { let nestedErrors = results @@ -62,25 +62,23 @@ export function collectErrors({ if (!ValidationError.isError(error)) { throw error; } - return arr.concat(error) - }, []) + return arr.concat(error); + }, []); - if (sort) nestedErrors.sort(sort) + if (sort) nestedErrors.sort(sort); //show parent errors after the nested ones: name.first, name - errors = nestedErrors.concat(errors) + errors = nestedErrors.concat(errors); - if (errors.length) - throw new ValidationError(errors, value, path) + if (errors.length) throw new ValidationError(errors, value, path); - return value - }) + return value; + }); } - export default function runValidations({ endEarly, ...options }) { if (endEarly) - return scopeToValue(options.validations, options.value, options.sync) + return scopeToValue(options.validations, options.value, options.sync); - return collectErrors(options) + return collectErrors(options); } diff --git a/src/util/sortByKeyOrder.js b/src/util/sortByKeyOrder.js index ebdd01646..8cad2af66 100644 --- a/src/util/sortByKeyOrder.js +++ b/src/util/sortByKeyOrder.js @@ -1,19 +1,18 @@ - function findIndex(arr, err) { let idx = Infinity; arr.some((key, ii) => { if (err.path.indexOf(key) !== -1) { - idx = ii - return true + idx = ii; + return true; } }); - return idx + return idx; } export default function sortByKeyOrder(fields) { let keys = Object.keys(fields); return (a, b) => { - return findIndex(keys, a) - findIndex(keys, b) - } + return findIndex(keys, a) - findIndex(keys, b); + }; } diff --git a/src/util/sortFields.js b/src/util/sortFields.js index 0a88ca6bf..b544d9407 100644 --- a/src/util/sortFields.js +++ b/src/util/sortFields.js @@ -5,31 +5,28 @@ import { split } from 'property-expr'; import Ref from '../Reference'; import isSchema from './isSchema'; -export default function sortFields(fields, excludes = []){ - var edges = [], nodes = [] +export default function sortFields(fields, excludes = []) { + var edges = [], + nodes = []; function addNode(depPath, key) { - var node = split(depPath)[0] + var node = split(depPath)[0]; - if (!~nodes.indexOf(node)) - nodes.push(node) + if (!~nodes.indexOf(node)) nodes.push(node); - if (!~excludes.indexOf(`${key}-${node}`)) - edges.push([key, node]) + if (!~excludes.indexOf(`${key}-${node}`)) edges.push([key, node]); } - for (var key in fields) if (has(fields, key)) { - let value = fields[key]; + for (var key in fields) + if (has(fields, key)) { + let value = fields[key]; - if (!~nodes.indexOf(key)) - nodes.push(key) + if (!~nodes.indexOf(key)) nodes.push(key); - if (Ref.isRef(value) && !value.isContext) - addNode(value.path, key) + if (Ref.isRef(value) && !value.isContext) addNode(value.path, key); + else if (isSchema(value) && value._deps) + value._deps.forEach(path => addNode(path, key)); + } - else if (isSchema(value) && value._deps) - value._deps.forEach(path => addNode(path, key)) - } - - return toposort.array(nodes, edges).reverse() + return toposort.array(nodes, edges).reverse(); } diff --git a/test/ValidationError.js b/test/ValidationError.js index 153b68637..4a96230df 100644 --- a/test/ValidationError.js +++ b/test/ValidationError.js @@ -1,57 +1,57 @@ -import ValidationError from '../src/ValidationError' +import ValidationError from '../src/ValidationError'; describe('ValidationError', function() { describe('formatError', function() { it('should insert the params into the message', function() { const str = ValidationError.formatError('Some message ${param}', { - param: 'here' - }) - str.should.contain('here') - }) + param: 'here', + }); + str.should.contain('here'); + }); it(`should auto include any param named 'label' or 'path' as the 'path' param`, function() { const str = ValidationError.formatError('${path} goes here', { - label: 'label' - }) - str.should.contain('label') - }) + label: 'label', + }); + str.should.contain('label'); + }); it(`should use 'this' if a 'label' or 'path' param is not provided`, function() { - const str = ValidationError.formatError('${path} goes here', {}) - str.should.contain('this') - }) + const str = ValidationError.formatError('${path} goes here', {}); + str.should.contain('this'); + }); it(`should return the validation function if only a message is provided`, function() { - const str = ValidationError.formatError('${path} goes here')({}) - str.should.contain('this') - }) + const str = ValidationError.formatError('${path} goes here')({}); + str.should.contain('this'); + }); it(`should include "undefined" in the message if undefined is provided as a param`, function() { const str = ValidationError.formatError('${path} value is ${min}', { - min: undefined - }) - str.should.contain('undefined') - }) + min: undefined, + }); + str.should.contain('undefined'); + }); it(`should include "null" in the message if null is provided as a param`, function() { const str = ValidationError.formatError('${path} value is ${min}', { - min: null - }) - str.should.contain('null') - }) + min: null, + }); + str.should.contain('null'); + }); it(`should include "NaN" in the message if null is provided as a param`, function() { const str = ValidationError.formatError('${path} value is ${min}', { - min: NaN - }) - str.should.contain('NaN') - }) + min: NaN, + }); + str.should.contain('NaN'); + }); it(`should include 0 in the message if 0 is provided as a param`, function() { const str = ValidationError.formatError('${path} value is ${min}', { - min: 0 - }) - str.should.contain('0') - }) - }) -}) + min: 0, + }); + str.should.contain('0'); + }); + }); +}); diff --git a/test/array.js b/test/array.js index 695ce2a7e..455f002ff 100644 --- a/test/array.js +++ b/test/array.js @@ -1,172 +1,177 @@ -import string from '../src/string' -import number from '../src/number' -import object from '../src/object' -import array from '../src/array' +import string from '../src/string'; +import number from '../src/number'; +import object from '../src/object'; +import array from '../src/array'; describe('Array types', () => { - - describe('casting', ()=> { + describe('casting', () => { it('should parse json strings', () => { array() .cast('[2,3,5,6]') - .should.eql([2, 3, 5, 6]) - }) + .should.eql([2, 3, 5, 6]); + }); it('should return null for failed casts', () => { - expect( - array().cast('asfasf', { assert: false })).to.equal(null) + expect(array().cast('asfasf', { assert: false })).to.equal(null); - expect( - array().cast(null, { assert: false })).to.equal(null) - }) + expect(array().cast(null, { assert: false })).to.equal(null); + }); it('should recursively cast fields', () => { - array().of(number()) + array() + .of(number()) .cast(['4', '5']) - .should.eql([4, 5]) + .should.eql([4, 5]); - array().of(string()) + array() + .of(string()) .cast(['4', 5, false]) - .should.eql(['4', '5', 'false']) - }) - }) - + .should.eql(['4', '5', 'false']); + }); + }); it('should handle DEFAULT', () => { - expect(array().default()).to.equal(undefined) + expect(array().default()).to.equal(undefined); array() .default(() => [1, 2, 3]) .default() - .should.eql([1, 2, 3]) - }) + .should.eql([1, 2, 3]); + }); it('should type check', () => { - var inst = array() + var inst = array(); - inst.isType([]).should.equal(true) - inst.isType({}).should.equal(false) - inst.isType('true').should.equal(false) - inst.isType(NaN).should.equal(false) - inst.isType(34545).should.equal(false) + inst.isType([]).should.equal(true); + inst.isType({}).should.equal(false); + inst.isType('true').should.equal(false); + inst.isType(NaN).should.equal(false); + inst.isType(34545).should.equal(false); - expect( - inst.isType(null)).to.equal(false) + expect(inst.isType(null)).to.equal(false); - inst.nullable().isType(null).should.equal(true) - }) + inst + .nullable() + .isType(null) + .should.equal(true); + }); it('should cast children', () => { array() .of(number()) - .cast(['1', '3']).should.eql([1, 3]) - }) + .cast(['1', '3']) + .should.eql([1, 3]); + }); it('should concat subType correctly', () => { expect( array() .of(number()) - .concat(array()) - ._subType - ).to.exist() + .concat(array())._subType, + ).to.exist(); expect( array() .of(number()) - .concat(array().of(false)) - ._subType - ).to.equal(false) - }) + .concat(array().of(false))._subType, + ).to.equal(false); + }); it('should pass options to children', () => { - array( - object({ name: string() }) - ) - .cast([{ id: 1, name: 'john' }], { stripUnknown: true }) - .should.eql([{name: 'john'}]) - }) + array(object({ name: string() })) + .cast([{ id: 1, name: 'john' }], { stripUnknown: true }) + .should.eql([{ name: 'john' }]); + }); describe('validation', () => { it('should allow undefined', async () => { - await array().of(number().max(5)) + await array() + .of(number().max(5)) .isValid() - .should.become(true) - }) + .should.become(true); + }); it('should not allow null when not nullable', async () => { + await array() + .isValid(null) + .should.become(false); - await array().isValid(null).should.become(false) - - await array().nullable().isValid(null).should.become(true) - }) + await array() + .nullable() + .isValid(null) + .should.become(true); + }); it('should respect subtype validations', async () => { - var inst = array() - .of(number().max(5)) + var inst = array().of(number().max(5)); - await inst.isValid(['gg', 3]).should.become(false) - await inst.isValid([7, 3]).should.become(false) + await inst.isValid(['gg', 3]).should.become(false); + await inst.isValid([7, 3]).should.become(false); - let value = await inst.validate(['4', 3]) + let value = await inst.validate(['4', 3]); - value.should.eql([4, 3]) - }) + value.should.eql([4, 3]); + }); it('should prevent recursive casting', async () => { let castSpy = sinon.spy(string.prototype, '_cast'); - let value = await array(string()) - .validate([ 5 ]) + let value = await array(string()).validate([5]); - value[0].should.equal('5') - - castSpy.should.have.been.calledOnce() - string.prototype._cast.restore() - }) - }) + value[0].should.equal('5'); + castSpy.should.have.been.calledOnce(); + string.prototype._cast.restore(); + }); + }); it('should respect abortEarly', () => { var inst = array() - .of(object({ str: string().required() })) - .test('name', 'oops', () => false) + .of(object({ str: string().required() })) + .test('name', 'oops', () => false); return Promise.all([ - inst.validate([{ str: '' }]).should.be.rejected() + inst + .validate([{ str: '' }]) + .should.be.rejected() .then(err => { - err.value.should.eql([{ str: '' }]) - err.errors.length.should.equal(1) - err.errors.should.eql(['oops']) + err.value.should.eql([{ str: '' }]); + err.errors.length.should.equal(1); + err.errors.should.eql(['oops']); }), - inst.validate([{ str: '' }], { abortEarly: false }).should.be.rejected() - .then((err) => { - err.value.should.eql([{ str: '' }]) + inst + .validate([{ str: '' }], { abortEarly: false }) + .should.be.rejected() + .then(err => { + err.value.should.eql([{ str: '' }]); - err.errors.length.should.equal(2) - err.errors.should.eql(['[0].str is a required field', 'oops' ]) - }) - ]) - }) + err.errors.length.should.equal(2); + err.errors.should.eql(['[0].str is a required field', 'oops']); + }), + ]); + }); it('should compact arrays', () => { - var arr = ['', 1, 0, 4, false, null] - , inst = array() + var arr = ['', 1, 0, 4, false, null], + inst = array(); - inst.compact().cast(arr) - .should.eql([1, 4]) + inst + .compact() + .cast(arr) + .should.eql([1, 4]); - inst.compact(v => v == null) - .cast(arr).should.eql(['', 1, 0, 4, false]) - }) + inst + .compact(v => v == null) + .cast(arr) + .should.eql(['', 1, 0, 4, false]); + }); it('should ensure arrays', () => { - var inst = array().ensure() + var inst = array().ensure(); - inst.cast([1, 4]) - .should.eql([1, 4]) + inst.cast([1, 4]).should.eql([1, 4]); - inst.cast(null) - .should.eql([]) - }) -}) + inst.cast(null).should.eql([]); + }); +}); diff --git a/test/bool.js b/test/bool.js index 57625f68b..aaf1d7549 100644 --- a/test/bool.js +++ b/test/bool.js @@ -1,61 +1,79 @@ import bool from '../src/boolean'; describe('Boolean types', () => { - it('should CAST correctly', () => { let inst = bool(); - inst.cast('true').should.equal(true) - inst.cast('True').should.equal(true) - inst.cast('false').should.equal(false) - inst.cast('False').should.equal(false) - inst.cast(1).should.equal(true) - inst.cast(0).should.equal(false) + inst.cast('true').should.equal(true); + inst.cast('True').should.equal(true); + inst.cast('false').should.equal(false); + inst.cast('False').should.equal(false); + inst.cast(1).should.equal(true); + inst.cast(0).should.equal(false); - TestHelpers - .castAndShouldFail(inst, 'foo') + TestHelpers.castAndShouldFail(inst, 'foo'); - TestHelpers - .castAndShouldFail(inst, 'bar1') - }) + TestHelpers.castAndShouldFail(inst, 'bar1'); + }); it('should handle DEFAULT', () => { - let inst = bool() + let inst = bool(); - expect(inst.default()).to.equal(undefined) - inst.default(true).required().default().should.equal(true) - }) + expect(inst.default()).to.equal(undefined); + inst + .default(true) + .required() + .default() + .should.equal(true); + }); it('should type check', () => { - let inst = bool() + let inst = bool(); - inst.isType(1).should.equal(false) - inst.isType(false).should.equal(true) - inst.isType('true').should.equal(false) - inst.isType(NaN).should.equal(false) - inst.isType(new Number('foooo')).should.equal(false) + inst.isType(1).should.equal(false); + inst.isType(false).should.equal(true); + inst.isType('true').should.equal(false); + inst.isType(NaN).should.equal(false); + inst.isType(new Number('foooo')).should.equal(false); - inst.isType(34545).should.equal(false) - inst.isType(new Boolean(false)).should.equal(true) + inst.isType(34545).should.equal(false); + inst.isType(new Boolean(false)).should.equal(true); - expect(inst.isType(null)).to.equal(false) + expect(inst.isType(null)).to.equal(false); - inst.nullable().isType(null).should.equal(true) - }) + inst + .nullable() + .isType(null) + .should.equal(true); + }); it('should VALIDATE correctly', () => { - let inst = bool().required() + let inst = bool().required(); return Promise.all([ - bool().isValid('1').should.eventually().equal(true), - - bool().strict().isValid(null).should.eventually().equal(false), - - bool().nullable().isValid(null).should.eventually().equal(true), - - inst.validate().should.be.rejected().then(err => { - err.errors.length.should.equal(1) - err.errors[0].should.contain('required') - }) - ]) - }) -}) + bool() + .isValid('1') + .should.eventually() + .equal(true), + + bool() + .strict() + .isValid(null) + .should.eventually() + .equal(false), + + bool() + .nullable() + .isValid(null) + .should.eventually() + .equal(true), + + inst + .validate() + .should.be.rejected() + .then(err => { + err.errors.length.should.equal(1); + err.errors[0].should.contain('required'); + }), + ]); + }); +}); diff --git a/test/customLocale.js b/test/customLocale.js index 4bdae65f8..9c4314f8d 100644 --- a/test/customLocale.js +++ b/test/customLocale.js @@ -1,26 +1,26 @@ -import { setLocale } from '../src/customLocale' +import { setLocale } from '../src/customLocale'; describe('Custom locale', () => { it('should get default locale', () => { - const locale = require('../src/locale').default - expect(locale.string.email).to.equal('${path} must be a valid email') - }) + const locale = require('../src/locale').default; + expect(locale.string.email).to.equal('${path} must be a valid email'); + }); it('should set a new locale', () => { - const locale = require('../src/locale').default + const locale = require('../src/locale').default; const dict = { string: { email: 'Invalid email', }, - } + }; - setLocale(dict) + setLocale(dict); - expect(locale.string.email).to.equal(dict.string.email) - }) + expect(locale.string.email).to.equal(dict.string.email); + }); it('should update the main locale', () => { - const locale = require('../src/locale').default - expect(locale.string.email).to.equal('Invalid email') - }) -}) + const locale = require('../src/locale').default; + expect(locale.string.email).to.equal('Invalid email'); + }); +}); diff --git a/test/date.js b/test/date.js index afb4d8310..4252d9856 100644 --- a/test/date.js +++ b/test/date.js @@ -1,103 +1,161 @@ import { ref, date } from '../src'; -function isValidDate(date){ - return date instanceof Date && !isNaN(date.getTime()) +function isValidDate(date) { + return date instanceof Date && !isNaN(date.getTime()); } describe('Date types', () => { - - it('should CAST correctly', () => { - var inst = date() + var inst = date(); - inst.cast(new Date()).should.be.a('date') - inst.cast('jan 15 2014').should.eql(new Date(2014, 0, 15)) - inst.cast('2014-09-23T19:25:25Z').should.eql(new Date(1411500325000)) + inst.cast(new Date()).should.be.a('date'); + inst.cast('jan 15 2014').should.eql(new Date(2014, 0, 15)); + inst.cast('2014-09-23T19:25:25Z').should.eql(new Date(1411500325000)); // Leading-zero milliseconds - inst.cast('2016-08-10T11:32:19.012Z').should.eql(new Date(1470828739012)) + inst.cast('2016-08-10T11:32:19.012Z').should.eql(new Date(1470828739012)); // Microsecond precision - inst.cast('2016-08-10T11:32:19.2125Z').should.eql(new Date(1470828739212)) - }) + inst.cast('2016-08-10T11:32:19.2125Z').should.eql(new Date(1470828739212)); + }); - it('should return invalid date for failed casts', function(){ - var inst = date() + it('should return invalid date for failed casts', function() { + var inst = date(); - inst.cast(null, { assert: false }).should.not.satisfy(isValidDate) - inst.cast('', { assert: false }).should.not.satisfy(isValidDate) - }) + inst.cast(null, { assert: false }).should.not.satisfy(isValidDate); + inst.cast('', { assert: false }).should.not.satisfy(isValidDate); + }); it('should type check', () => { - var inst = date() - - inst.isType(new Date()).should.equal(true) - inst.isType(false).should.equal(false) - inst.isType(null).should.equal(false) - inst.isType(NaN).should.equal(false) - inst.nullable().isType(new Date()).should.equal(true) - }) + var inst = date(); + + inst.isType(new Date()).should.equal(true); + inst.isType(false).should.equal(false); + inst.isType(null).should.equal(false); + inst.isType(NaN).should.equal(false); + inst + .nullable() + .isType(new Date()) + .should.equal(true); + }); it('should VALIDATE correctly', () => { - - var inst = date().required().max(new Date(2014, 5, 15)) + var inst = date() + .required() + .max(new Date(2014, 5, 15)); return Promise.all([ - date().isValid(null).should.eventually().equal(false), - date().nullable().isValid(null).should.eventually().equal(true), - - inst.isValid(new Date(2014, 0, 15)).should.eventually().equal(true), - inst.isValid(new Date(2014, 7, 15)).should.eventually().equal(false), - inst.isValid('5').should.eventually().equal(true), - - inst.validate().should.be.rejected().then((err) => { - err.errors.length.should.equal(1) - err.errors[0].should.contain('required') - }) - ]) - }) + date() + .isValid(null) + .should.eventually() + .equal(false), + date() + .nullable() + .isValid(null) + .should.eventually() + .equal(true), + + inst + .isValid(new Date(2014, 0, 15)) + .should.eventually() + .equal(true), + inst + .isValid(new Date(2014, 7, 15)) + .should.eventually() + .equal(false), + inst + .isValid('5') + .should.eventually() + .equal(true), + + inst + .validate() + .should.be.rejected() + .then(err => { + err.errors.length.should.equal(1); + err.errors[0].should.contain('required'); + }), + ]); + }); it('should check MIN correctly', () => { - var min = new Date(2014, 3, 15) - , invalid = new Date(2014, 1, 15) - , valid = new Date(2014, 5, 15) - - ;(function(){ date().max('hello') }).should.throw(TypeError) - ;(function(){ date().max(ref('$foo')) }).should.not.throw() + var min = new Date(2014, 3, 15), + invalid = new Date(2014, 1, 15), + valid = new Date(2014, 5, 15); + (function() { + date().max('hello'); + }.should.throw(TypeError)); + (function() { + date().max(ref('$foo')); + }.should.not.throw()); return Promise.all([ - date().min(min).isValid(valid).should.eventually().equal(true), - date().min(min).isValid(invalid).should.eventually().equal(false), - date().min(min).isValid(null).should.eventually().equal(false), - - date().min(ref('$foo')) - .isValid(valid, { context: { foo: min }}) - .should.eventually().equal(true), - date().min(ref('$foo')) - .isValid(invalid, { context: { foo: min }}) - .should.eventually().equal(false) - ]) - }) + date() + .min(min) + .isValid(valid) + .should.eventually() + .equal(true), + date() + .min(min) + .isValid(invalid) + .should.eventually() + .equal(false), + date() + .min(min) + .isValid(null) + .should.eventually() + .equal(false), + + date() + .min(ref('$foo')) + .isValid(valid, { context: { foo: min } }) + .should.eventually() + .equal(true), + date() + .min(ref('$foo')) + .isValid(invalid, { context: { foo: min } }) + .should.eventually() + .equal(false), + ]); + }); it('should check MAX correctly', () => { - var max = new Date(2014, 7, 15) - , invalid = new Date(2014, 9, 15) - , valid = new Date(2014, 5, 15) - - ;(function(){ date().max('hello') }).should.throw(TypeError) - ;(function(){ date().max(ref('$foo')) }).should.not.throw() + var max = new Date(2014, 7, 15), + invalid = new Date(2014, 9, 15), + valid = new Date(2014, 5, 15); + (function() { + date().max('hello'); + }.should.throw(TypeError)); + (function() { + date().max(ref('$foo')); + }.should.not.throw()); return Promise.all([ - date().max(max).isValid(valid).should.eventually().equal(true), - date().max(max).isValid(invalid).should.eventually().equal(false), - date().max(max) + date() + .max(max) + .isValid(valid) + .should.eventually() + .equal(true), + date() + .max(max) + .isValid(invalid) + .should.eventually() + .equal(false), + date() + .max(max) .nullable(true) - .isValid(null).should.eventually().equal(true), - - date().max(ref('$foo')) - .isValid(valid, { context: { foo: max }}) - .should.eventually().equal(true), - date().max(ref('$foo')) - .isValid(invalid, { context: { foo: max }}) - .should.eventually().equal(false) - ]) - }) -}) + .isValid(null) + .should.eventually() + .equal(true), + + date() + .max(ref('$foo')) + .isValid(valid, { context: { foo: max } }) + .should.eventually() + .equal(true), + date() + .max(ref('$foo')) + .isValid(invalid, { context: { foo: max } }) + .should.eventually() + .equal(false), + ]); + }); +}); diff --git a/test/helpers.js b/test/helpers.js index bac7e9fdf..057d4c664 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -1,51 +1,45 @@ import printValue from '../src/util/printValue'; export let castAndShouldFail = (schema, value) => { - (()=> schema.cast(value)) - .should.throw( - TypeError, - /The value of (.+) could not be cast to a value that satisfies the schema type/gi - ) -} + (() => schema.cast(value)).should.throw( + TypeError, + /The value of (.+) could not be cast to a value that satisfies the schema type/gi, + ); +}; export let castAll = (inst, { invalid = [], valid = [] }) => { - valid.forEach(([value, result, schema = inst ]) => { + valid.forEach(([value, result, schema = inst]) => { it(`should cast ${printValue(value)} to ${printValue(result)}`, () => { - expect( - schema.cast(value) - ) - .to.equal(result) - }) - }) - - invalid.forEach((value) => { + expect(schema.cast(value)).to.equal(result); + }); + }); + + invalid.forEach(value => { it(`should not cast ${printValue(value)}`, () => { - castAndShouldFail(inst, value) - }) - }) -} + castAndShouldFail(inst, value); + }); + }); +}; export let validateAll = (inst, { valid = [], invalid = [] }) => { describe('valid:', () => { - runValidations(valid, true) - }) + runValidations(valid, true); + }); describe('invalid:', () => { - runValidations(invalid, false) - }) + runValidations(invalid, false); + }); function runValidations(arr, isValid) { - arr.forEach((config) => { - let message = '', value = config, schema = inst; + arr.forEach(config => { + let message = '', + value = config, + schema = inst; - if (Array.isArray(config)) - [ value, schema, message = '' ] = config; + if (Array.isArray(config)) [value, schema, message = ''] = config; - it(`${printValue(value)}${message && ` (${message})`}`, - () => schema.isValid(value).should.become(isValid) - ) - }) + it(`${printValue(value)}${message && ` (${message})`}`, () => + schema.isValid(value).should.become(isValid)); + }); } - - -} +}; diff --git a/test/mixed.js b/test/mixed.js index ae96e17fb..aafd44300 100644 --- a/test/mixed.js +++ b/test/mixed.js @@ -1,18 +1,18 @@ -import {mixed, string, number, object, ref, reach } from '../src'; -let noop = () => {} +import { mixed, string, number, object, ref, reach } from '../src'; +let noop = () => {}; function ensureSync(fn) { let run = false; - let resolve = (t) => { - if (!run) return t - throw new Error('Did not execute synchonously') - } - let err = (t) => { - if (!run) throw t - throw new Error('Did not execute synchonously') - } + let resolve = t => { + if (!run) return t; + throw new Error('Did not execute synchonously'); + }; + let err = t => { + if (!run) throw t; + throw new Error('Did not execute synchonously'); + }; - let result = fn().then(resolve, err) + let result = fn().then(resolve, err); run = true; return result; @@ -20,319 +20,355 @@ function ensureSync(fn) { global.YUP_USE_SYNC && it('[internal] normal methods should be running in sync Mode', async () => { - let schema = number() + let schema = number(); - await ensureSync(() => Promise.resolve()).should.be.rejected() + await ensureSync(() => Promise.resolve()).should.be.rejected(); - await ensureSync(() => schema.isValid('john')) - .should.be.become(false) + await ensureSync(() => schema.isValid('john')).should.be.become(false); - let err = await ensureSync(() => schema.validate('john')) - .should.be.rejected() + let err = await ensureSync(() => + schema.validate('john'), + ).should.be.rejected(); - expect(err.message) - .to.match(/the final value was: `NaN`.+cast from the value `"john"`/) - }) + expect(err.message).to.match( + /the final value was: `NaN`.+cast from the value `"john"`/, + ); + }); describe('Mixed Types ', () => { - it('should be immutable', () => { - let inst = mixed(), next; - let sub = inst.sub = mixed() + let inst = mixed(), + next; + let sub = (inst.sub = mixed()); - inst.should.not.equal(next = inst.required()) + inst.should.not.equal((next = inst.required())); - next.sub.should.equal(sub) - inst.sub.should.equal(next.sub) + next.sub.should.equal(sub); + inst.sub.should.equal(next.sub); - inst.should.be.an.instanceOf(mixed) - next.should.be.an.instanceOf(mixed) + inst.should.be.an.instanceOf(mixed); + next.should.be.an.instanceOf(mixed); return Promise.all([ - inst.isValid().should.eventually().equal(true), - next.isValid(null) - ]) - }) + inst + .isValid() + .should.eventually() + .equal(true), + next.isValid(null), + ]); + }); it('cast should return a default when undefined', () => { - let inst = mixed().default('hello') + let inst = mixed().default('hello'); - inst.cast(undefined).should.equal('hello') - }) + inst.cast(undefined).should.equal('hello'); + }); it('should warn about null types', async () => { - let error = await string().strict() - .validate(null).should.be.rejected() + let error = await string() + .strict() + .validate(null) + .should.be.rejected(); - expect(error.message).to.match(/If "null" is intended/) - }) + expect(error.message).to.match(/If "null" is intended/); + }); it('should print the original value', async () => { let error = await number() - .validate('john').should.be.rejected() + .validate('john') + .should.be.rejected(); - expect(error.message).to.match(/the final value was: `NaN`.+cast from the value `"john"`/) - }) + expect(error.message).to.match( + /the final value was: `NaN`.+cast from the value `"john"`/, + ); + }); it('should check types', async () => { - let inst = string().strict().typeError('must be a ${type}!') + let inst = string() + .strict() + .typeError('must be a ${type}!'); - let error = await inst.validate(5).should.be.rejected() + let error = await inst.validate(5).should.be.rejected(); - error.type.should.equal('typeError') - error.message.should.equal('must be a string!') - error.inner.length.should.equal(0) + error.type.should.equal('typeError'); + error.message.should.equal('must be a string!'); + error.inner.length.should.equal(0); - error = await inst.validate(5, { abortEarly: false }).should.be.rejected() + error = await inst.validate(5, { abortEarly: false }).should.be.rejected(); - expect(error.type).to.not.exist() - error.message.should.equal('must be a string!') - error.inner.length.should.equal(1) - }) + expect(error.type).to.not.exist(); + error.message.should.equal('must be a string!'); + error.inner.length.should.equal(1); + }); it('should limit values', async () => { - let inst = mixed().oneOf([5, 'hello']) + let inst = mixed().oneOf([5, 'hello']); - await inst.isValid(5).should.eventually().equal(true) - await inst.isValid('hello').should.eventually().equal(true) + await inst + .isValid(5) + .should.eventually() + .equal(true); + await inst + .isValid('hello') + .should.eventually() + .equal(true); - let err = await inst.validate(6).should.be.rejected() + let err = await inst.validate(6).should.be.rejected(); - err.errors[0].should.equal('this must be one of the following values: 5, hello') - }) + err.errors[0].should.equal( + 'this must be one of the following values: 5, hello', + ); + }); it('should not require field when notRequired was set', async () => { let inst = mixed().required(); - await inst.isValid('test').should.eventually().equal(true) - await inst.isValid(1).should.eventually.equal(true) + await inst + .isValid('test') + .should.eventually() + .equal(true); + await inst.isValid(1).should.eventually.equal(true); - let err = await inst.validate().should.be.rejected() + let err = await inst.validate().should.be.rejected(); - err.errors[0].should.equal('this is a required field') + err.errors[0].should.equal('this is a required field'); - inst = inst.notRequired() + inst = inst.notRequired(); - await inst.isValid().should.eventually.equal(true) - }) + await inst.isValid().should.eventually.equal(true); + }); global.YUP_USE_SYNC && describe('synchronous methods', () => { it('should validate synchronously', async () => { - let schema = number() + let schema = number(); - schema.isValidSync('john') - .should.equal(false) + schema.isValidSync('john').should.equal(false); expect(() => schema.validateSync('john')).to.throw( - /the final value was: `NaN`.+cast from the value `"john"`/ - ) - }) + /the final value was: `NaN`.+cast from the value `"john"`/, + ); + }); it('should isValid synchronously', async () => { - let schema = number() + let schema = number(); - schema.isValidSync('john') - .should.equal(false) - }) + schema.isValidSync('john').should.equal(false); + }); it('should throw on async test', async () => { - let schema = mixed().test('test', 'foo', () => Promise.resolve()) + let schema = mixed().test('test', 'foo', () => Promise.resolve()); - let err = await ensureSync(() => schema.validate('john')) - .should.be.rejected() + let err = await ensureSync(() => + schema.validate('john'), + ).should.be.rejected(); - expect(err.message).to.match(/Validation test of type: "test"/) - }) - }) + expect(err.message).to.match(/Validation test of type: "test"/); + }); + }); describe('oneOf', () => { - let inst = mixed().oneOf(['hello']) + let inst = mixed().oneOf(['hello']); TestHelpers.validateAll(inst, { - valid: [ - undefined, - 'hello' - ], + valid: [undefined, 'hello'], invalid: [ 'YOLO', [undefined, inst.required(), 'required'], [null, inst.nullable()], [null, inst.nullable().required(), 'required'], - ] - }) + ], + }); it('should work with refs', async () => { let inst = object({ foo: string(), - bar: string().oneOf([ref('foo'), 'b']) - }) + bar: string().oneOf([ref('foo'), 'b']), + }); - await inst.validate({ foo: 'a', bar: 'a' }).should.be.fulfilled() + await inst.validate({ foo: 'a', bar: 'a' }).should.be.fulfilled(); - await inst.validate({ foo: 'foo', bar: 'bar' }).should.be.rejected() - }) - }) + await inst.validate({ foo: 'foo', bar: 'bar' }).should.be.rejected(); + }); + }); describe('should exclude values', () => { - let inst = mixed().notOneOf([5, 'hello']) + let inst = mixed().notOneOf([5, 'hello']); TestHelpers.validateAll(inst, { - valid: [ - 6, - 'hfhfh', - [5, inst.oneOf([5]), '`oneOf` called after'], - null, - ], - invalid: [ - 5, - [null, inst.required(), 'required schema'] - ] - }) + valid: [6, 'hfhfh', [5, inst.oneOf([5]), '`oneOf` called after'], null], + invalid: [5, [null, inst.required(), 'required schema']], + }); it('should throw the correct error', async () => { - let err = await inst.validate(5).should.be.rejected() + let err = await inst.validate(5).should.be.rejected(); - err.errors[0].should - .equal('this must not be one of the following values: 5, hello') - }) - }) + err.errors[0].should.equal( + 'this must not be one of the following values: 5, hello', + ); + }); + }); it('should run subset of validations first', () => { let called = false; let inst = string() .strict() - .test('test', 'boom', () => called = true) + .test('test', 'boom', () => (called = true)); - return inst.validate(25).should.be.rejected() + return inst + .validate(25) + .should.be.rejected() .then(() => { - called.should.equal(false) - }) - }) + called.should.equal(false); + }); + }); it('should respect strict', () => { - let inst = string().equals(['hello', '5']) + let inst = string().equals(['hello', '5']); return Promise.all([ - inst.isValid(5).should.eventually().equal(true), - inst.strict().isValid(5).should.eventually().equal(false) - ]) - }) + inst + .isValid(5) + .should.eventually() + .equal(true), + inst + .strict() + .isValid(5) + .should.eventually() + .equal(false), + ]); + }); it('should respect abortEarly', () => { - let inst = string().trim().min(10) + let inst = string() + .trim() + .min(10); return Promise.all([ - - inst.strict().validate(' hi ').should.be.rejected() + inst + .strict() + .validate(' hi ') + .should.be.rejected() .then(err => { - err.errors.length.should.equal(1) + err.errors.length.should.equal(1); }), - inst.strict().validate(' hi ', { abortEarly: false }).should.be.rejected() + inst + .strict() + .validate(' hi ', { abortEarly: false }) + .should.be.rejected() .then(err => { - err.errors.length.should.equal(2) - }) - ]) - }) + err.errors.length.should.equal(2); + }), + ]); + }); it('should overload test()', () => { - let inst = mixed().test('test', noop) + let inst = mixed().test('test', noop); - inst.tests.length.should.equal(1) - inst.tests[0].TEST.test.should.equal(noop) - inst.tests[0].TEST.message.should.equal('${path} is invalid') - }) + inst.tests.length.should.equal(1); + inst.tests[0].TEST.test.should.equal(noop); + inst.tests[0].TEST.message.should.equal('${path} is invalid'); + }); it('should allow non string messages', async () => { let message = { key: 'foo' }; - let inst = mixed().test('test', message, () => false) + let inst = mixed().test('test', message, () => false); - inst.tests.length.should.equal(1) - inst.tests[0].TEST.message.should.equal(message) + inst.tests.length.should.equal(1); + inst.tests[0].TEST.message.should.equal(message); let error = await inst.validate('foo').should.be.rejected(); - error.message.should.equal(message) - }) + error.message.should.equal(message); + }); it('should dedupe tests with the same test function', () => { let inst = mixed() .test('test', ' ', noop) - .test('test', 'asdasd', noop) + .test('test', 'asdasd', noop); - inst.tests.length.should.equal(1) - inst.tests[0].TEST.message.should.equal('asdasd') - }) + inst.tests.length.should.equal(1); + inst.tests[0].TEST.message.should.equal('asdasd'); + }); it('should not dedupe tests with the same test function and different type', () => { let inst = mixed() .test('test', ' ', noop) - .test('test-two', 'asdasd', noop) + .test('test-two', 'asdasd', noop); - inst.tests.length.should.equal(2) - }) + inst.tests.length.should.equal(2); + }); it('should respect exclusive validation', () => { let inst = mixed() - .test({ message: 'invalid', exclusive: true, name: 'test', test: () => {} }) - .test({ message: 'also invalid', name: 'test', test: () => {} }) + .test({ + message: 'invalid', + exclusive: true, + name: 'test', + test: () => {}, + }) + .test({ message: 'also invalid', name: 'test', test: () => {} }); - inst.tests.length.should.equal(1) + inst.tests.length.should.equal(1); inst = mixed() .test({ message: 'invalid', name: 'test', test: () => {} }) - .test({ message: 'also invalid', name: 'test', test: () => {} }) + .test({ message: 'also invalid', name: 'test', test: () => {} }); - inst.tests.length.should.equal(2) - }) + inst.tests.length.should.equal(2); + }); it('should non-exclusive tests should stack', () => { let inst = mixed() .test({ name: 'test', message: ' ', test: () => {} }) - .test({ name: 'test', message: ' ', test: () => {} }) + .test({ name: 'test', message: ' ', test: () => {} }); - inst.tests.length.should.equal(2) - }) + inst.tests.length.should.equal(2); + }); it('should replace existing tests, with exclusive test ', () => { let inst = mixed() .test({ name: 'test', message: ' ', test: noop }) - .test({ name: 'test', exclusive: true, message: ' ', test: noop }) + .test({ name: 'test', exclusive: true, message: ' ', test: noop }); - inst.tests.length.should.equal(1) - }) + inst.tests.length.should.equal(1); + }); it('should replace existing exclusive tests, with non-exclusive', () => { let inst = mixed() .test({ name: 'test', exclusive: true, message: ' ', test: () => {} }) .test({ name: 'test', message: ' ', test: () => {} }) - .test({ name: 'test', message: ' ', test: () => {} }) + .test({ name: 'test', message: ' ', test: () => {} }); - inst.tests.length.should.equal(2) - }) + inst.tests.length.should.equal(2); + }); it('exclusive tests should throw without a name', () => { (() => { - mixed().test({ message: 'invalid', exclusive: true, test: noop }) - }).should.throw() - }) + mixed().test({ message: 'invalid', exclusive: true, test: noop }); + }).should.throw(); + }); it('exclusive tests should replace previous ones', async () => { let inst = mixed().test({ message: 'invalid', exclusive: true, name: 'max', - test: v => v < 5 + test: v => v < 5, }); (await inst.isValid(8)).should.equal(false); (await inst - .test({ message: 'invalid', exclusive: true, name: 'max', test: v => v < 10 }) - .isValid(8) - ).should.equal(true) - }) + .test({ + message: 'invalid', + exclusive: true, + name: 'max', + test: v => v < 10, + }) + .isValid(8)).should.equal(true); + }); it('tests should be called with the correct `this`', async () => { let called = false; @@ -343,254 +379,301 @@ describe('Mixed Types ', () => { exclusive: true, name: 'max', test() { - this.path.should.equal('test') - this.parent.should.eql({ other: 5, test: 'hi' }) - this.options.context.should.eql({ user: 'jason' }) + this.path.should.equal('test'); + this.parent.should.eql({ other: 5, test: 'hi' }); + this.options.context.should.eql({ user: 'jason' }); called = true; return true; - } - }) - }) + }, + }), + }); - await inst.validate({ other: 5, test: 'hi' }, { context: { user: 'jason' } }) + await inst.validate( + { other: 5, test: 'hi' }, + { context: { user: 'jason' } }, + ); - called.should.equal(true) - }) + called.should.equal(true); + }); it('tests can return an error', () => { let inst = mixed().test({ - message: 'invalid ${path}', - name: 'max', - test() { - return this.createError({ path: 'my.path' }) - } - }) + message: 'invalid ${path}', + name: 'max', + test() { + return this.createError({ path: 'my.path' }); + }, + }); - return inst.validate('') + return inst + .validate('') .should.be.rejected() - .then(function(e){ - e.path.should.equal('my.path') - e.errors[0].should.equal('invalid my.path') - }) - }) + .then(function(e) { + e.path.should.equal('my.path'); + e.errors[0].should.equal('invalid my.path'); + }); + }); it('should use returned error path and message', () => { let inst = mixed().test({ - message: 'invalid ${path}', - name: 'max', - test: function(){ - return this.createError({ message: '${path} nope!', path: 'my.path' }) - } - }) + message: 'invalid ${path}', + name: 'max', + test: function() { + return this.createError({ message: '${path} nope!', path: 'my.path' }); + }, + }); - return inst.validate({ other: 5, test : 'hi' }) + return inst + .validate({ other: 5, test: 'hi' }) .should.be.rejected() - .then(function(e){ - e.path.should.equal('my.path') - e.errors[0].should.equal('my.path nope!') - }) - }) + .then(function(e) { + e.path.should.equal('my.path'); + e.errors[0].should.equal('my.path nope!'); + }); + }); it('should allow custom validation', async () => { - let inst = string() - .test('name', 'test a', val => val === 'jim') - - return inst.validate('joe').should.be.rejected().then(e => { - e.errors[0].should.equal('test a') - }) - }) + let inst = string().test('name', 'test a', val => val === 'jim'); + return inst + .validate('joe') + .should.be.rejected() + .then(e => { + e.errors[0].should.equal('test a'); + }); + }); describe('concat', () => { - let next + let next; let inst = object({ str: string().required(), obj: object({ - str: string() - }) - }) + str: string(), + }), + }); beforeEach(() => { - next = inst.concat(object({ - str: string().required().trim(), - str2: string().required(), - obj: object({ - str: string().required() - }) - })) - }) + next = inst.concat( + object({ + str: string() + .required() + .trim(), + str2: string().required(), + obj: object({ + str: string().required(), + }), + }), + ); + }); it('should have the correct number of tests', () => { - reach(next, 'str').tests.length.should.equal(3) // presence, alt presence, and trim - }) + reach(next, 'str').tests.length.should.equal(3); // presence, alt presence, and trim + }); it('should have the tests in the correct order', () => { - reach(next, 'str').tests[0].TEST_NAME.should.equal('required') - }) + reach(next, 'str').tests[0].TEST_NAME.should.equal('required'); + }); it('should validate correctly', async () => { await inst .isValid({ str: 'hi', str2: 'hi', obj: {} }) - .should.become(true) - - ;(await next + .should.become(true); + (await next .validate({ str: ' hi ', str2: 'hi', obj: { str: 'hi' } }) - .should.be.fulfilled()) - .should.deep.eql({ str: 'hi', str2: 'hi', obj: {str: 'hi'} }) - }) + .should.be.fulfilled()).should.deep.eql({ + str: 'hi', + str2: 'hi', + obj: { str: 'hi' }, + }); + }); it('should throw the correct validation errors', async () => { - let result = await next .validate({ str: 'hi', str2: 'hi', obj: {} }) - .should.be.rejected() + .should.be.rejected(); - result.message.should.contain('obj.str is a required field') + result.message.should.contain('obj.str is a required field'); result = await next - .validate({ str2: 'hi', obj: { str: 'hi'} }) - .should.be.rejected() + .validate({ str2: 'hi', obj: { str: 'hi' } }) + .should.be.rejected(); - result.message.should.contain('str is a required field') - }) - - }) + result.message.should.contain('str is a required field'); + }); + }); - it('concat should fail on different types', function(){ + it('concat should fail on different types', function() { let inst = string().default('hi'); - (function(){ - inst.concat(object()) - }).should.throw(TypeError) - }) + (function() { + inst.concat(object()); + }.should.throw(TypeError)); + }); - it('concat should allow mixed and other type', function(){ + it('concat should allow mixed and other type', function() { let inst = mixed().default('hi'); - (function(){ - inst.concat(string())._type.should.equal('string') - - }).should.not.throw(TypeError) - }) + (function() { + inst.concat(string())._type.should.equal('string'); + }.should.not.throw(TypeError)); + }); - it('concat should maintain undefined defaults', function(){ - let inst = string().default('hi') + it('concat should maintain undefined defaults', function() { + let inst = string().default('hi'); - expect( - inst.concat(string().default(undefined)).default()).to.equal(undefined) - }) + expect(inst.concat(string().default(undefined)).default()).to.equal( + undefined, + ); + }); - it('defaults should be validated but not transformed', function(){ - let inst = string().trim().default(' hi ') + it('defaults should be validated but not transformed', function() { + let inst = string() + .trim() + .default(' hi '); - return inst.validate(undefined).should.be.rejected() - .then(function(err){ - err.message.should.equal('this must be a trimmed string') - }) - }) + return inst + .validate(undefined) + .should.be.rejected() + .then(function(err) { + err.message.should.equal('this must be a trimmed string'); + }); + }); - it('should handle conditionals', async function(){ - let inst = mixed() - .when('prop', { is: 5, then: mixed().required('from parent') }) + it('should handle conditionals', async function() { + let inst = mixed().when('prop', { + is: 5, + then: mixed().required('from parent'), + }); - await inst.validate(undefined, { parent: { prop: 5 }}).should.be.rejected() - await inst.validate(undefined, { parent: { prop: 1 }}).should.be.fulfilled() - await inst.validate('hello', { parent: { prop: 5 }}).should.be.fulfilled() + await inst + .validate(undefined, { parent: { prop: 5 } }) + .should.be.rejected(); + await inst + .validate(undefined, { parent: { prop: 1 } }) + .should.be.fulfilled(); + await inst.validate('hello', { parent: { prop: 5 } }).should.be.fulfilled(); inst = string().when('prop', { - is: function(val) { return val === 5 }, - then: string().required(), - otherwise: string().min(4) - }) + is: function(val) { + return val === 5; + }, + then: string().required(), + otherwise: string().min(4), + }); - await inst.validate(undefined, { parent: { prop: 5 }}).should.be.rejected() - await inst.validate('hello', { parent: { prop: 1 }}).should.be.fulfilled() - await inst.validate('hel', { parent: { prop: 1 }}).should.be.rejected() - }) + await inst + .validate(undefined, { parent: { prop: 5 } }) + .should.be.rejected(); + await inst.validate('hello', { parent: { prop: 1 } }).should.be.fulfilled(); + await inst.validate('hel', { parent: { prop: 1 } }).should.be.rejected(); + }); it('should handle multiple conditionals', function() { - let called = false - let inst = mixed() - .when(['prop', 'other'], function(prop, other) { - other.should.equal(true) - prop.should.equal(1) - called = true - }) + let called = false; + let inst = mixed().when(['prop', 'other'], function(prop, other) { + other.should.equal(true); + prop.should.equal(1); + called = true; + }); - inst.cast({}, { context: { prop: 1, other: true }}) - called.should.equal(true) + inst.cast({}, { context: { prop: 1, other: true } }); + called.should.equal(true); inst = mixed().when(['prop', 'other'], { is: 5, - then: mixed().required() - }) + then: mixed().required(), + }); return inst - .isValid(undefined, { context: { prop: 5, other: 5 }}) - .should.eventually().equal(false) - - }) + .isValid(undefined, { context: { prop: 5, other: 5 } }) + .should.eventually() + .equal(false); + }); - it('should require context when needed', async function(){ - let inst = mixed() - .when('$prop', { is: 5, then: mixed().required('from context') }) + it('should require context when needed', async function() { + let inst = mixed().when('$prop', { + is: 5, + then: mixed().required('from context'), + }); - await inst.validate(undefined, { context: { prop: 5 }}).should.be.rejected() - await inst.validate(undefined, { context: { prop: 1 }}).should.be.fulfilled() - await inst.validate('hello', { context: { prop: 5 }}).should.be.fulfilled() + await inst + .validate(undefined, { context: { prop: 5 } }) + .should.be.rejected(); + await inst + .validate(undefined, { context: { prop: 1 } }) + .should.be.fulfilled(); + await inst + .validate('hello', { context: { prop: 5 } }) + .should.be.fulfilled(); inst = string().when('$prop', { - is: function(val) { return val === 5 }, - then: string().required(), - otherwise: string().min(4) - }) + is: function(val) { + return val === 5; + }, + then: string().required(), + otherwise: string().min(4), + }); - await inst.validate(undefined, { context: { prop: 5 }}).should.be.rejected() - await inst.validate('hello', { context: { prop: 1 }}).should.be.fulfilled() - await inst.validate('hel', { context: { prop: 1 }}).should.be.rejected() - }) + await inst + .validate(undefined, { context: { prop: 5 } }) + .should.be.rejected(); + await inst + .validate('hello', { context: { prop: 1 } }) + .should.be.fulfilled(); + await inst.validate('hel', { context: { prop: 1 } }).should.be.rejected(); + }); - it('should not use context refs in object calculations', function(){ + it('should not use context refs in object calculations', function() { let inst = object({ - prop: string().when('$prop', { is: 5, then: string().required('from context') }) - }) + prop: string().when('$prop', { + is: 5, + then: string().required('from context'), + }), + }); - inst.default().should.eql({ prop: undefined }) - }) + inst.default().should.eql({ prop: undefined }); + }); - it('should use label in error message', async function () { - let label = 'Label' + it('should use label in error message', async function() { + let label = 'Label'; let inst = object({ - prop: string().required().label(label) - }) + prop: string() + .required() + .label(label), + }); - await inst.validate({}).should.be.rejected().then(function (err) { - err.message.should.equal(`${label} is a required field`) - }) - }) + await inst + .validate({}) + .should.be.rejected() + .then(function(err) { + err.message.should.equal(`${label} is a required field`); + }); + }); it('should add meta() data', () => { string() .meta({ input: 'foo' }) .meta({ foo: 'bar' }) - .meta().should.eql({ + .meta() + .should.eql({ input: 'foo', - foo: 'bar' - }) - }) + foo: 'bar', + }); + }); it('should describe', () => { - string().max(2) + string() + .max(2) .meta({ input: 'foo' }) .label('str!') - .describe().should.eql({ + .describe() + .should.eql({ type: 'string', label: 'str!', tests: ['max'], meta: { - input: 'foo' - } - }) - }) - -}) + input: 'foo', + }, + }); + }); +}); diff --git a/test/number.js b/test/number.js index 1bdbe53ab..397da4d67 100644 --- a/test/number.js +++ b/test/number.js @@ -3,11 +3,10 @@ import * as TestHelpers from './helpers'; import number from '../src/number'; describe('Number types', function() { - it('is newable', () => { let schema = new number(); - schema.integer().required() - }) + schema.integer().required(); + }); it('is extensible', () => { class MyNumber extends number { @@ -16,10 +15,13 @@ describe('Number types', function() { } } - new MyNumber().foo().integer().required() - }) + new MyNumber() + .foo() + .integer() + .required(); + }); - describe('casting', ()=> { + describe('casting', () => { let schema = number(); TestHelpers.castAll(schema, { @@ -29,207 +31,218 @@ describe('Number types', function() { //[new Number(5), 5], [' 5.656 ', 5.656], ], - invalid: [ - '', - false, - true, - new Date(), - new Number('foo') - ] - }) + invalid: ['', false, true, new Date(), new Number('foo')], + }); it('should round', () => { - schema.round('floor').cast(45.99999).should.equal(45) - schema.round('ceIl').cast(45.1111).should.equal(46) - schema.round().cast(45.444444).should.equal(45) + schema + .round('floor') + .cast(45.99999) + .should.equal(45); + schema + .round('ceIl') + .cast(45.1111) + .should.equal(46); + schema + .round() + .cast(45.444444) + .should.equal(45); expect( - schema.nullable() + schema + .nullable() .integer() .round() - .cast(null) - ).to.equal(null) - - ;(function(){ schema.round('fasf') }).should.throw(TypeError) - }) + .cast(null), + ).to.equal(null); + (function() { + schema.round('fasf'); + }.should.throw(TypeError)); + }); it('should truncate', () => { - schema.truncate().cast(45.55).should.equal(45) - }) + schema + .truncate() + .cast(45.55) + .should.equal(45); + }); it('should return NaN for failed casts', () => { - expect( - number().cast('asfasf', { assert: false })).to.eql(NaN) - - expect( - number().cast(null, { assert: false })).to.eql(NaN) - }) - }) - - it('should handle DEFAULT', function(){ - var inst = number().default(0) - - inst.default().should.equal(0) - inst.default(5).required().default().should.equal(5) - }) - - it('should type check', function(){ + expect(number().cast('asfasf', { assert: false })).to.eql(NaN); + + expect(number().cast(null, { assert: false })).to.eql(NaN); + }); + }); + + it('should handle DEFAULT', function() { + var inst = number().default(0); + + inst.default().should.equal(0); + inst + .default(5) + .required() + .default() + .should.equal(5); + }); + + it('should type check', function() { + var inst = number(); + + inst.isType(5).should.equal(true); + inst.isType(new Number(5)).should.equal(true); + inst.isType(new Number('foo')).should.equal(false); + inst.isType(false).should.equal(false); + inst.isType(null).should.equal(false); + inst.isType(NaN).should.equal(false); + inst + .nullable() + .isType(null) + .should.equal(true); + }); + + it('should VALIDATE correctly', function() { var inst = number() - - inst.isType(5).should.equal(true) - inst.isType(new Number(5)).should.equal(true) - inst.isType(new Number('foo')).should.equal(false) - inst.isType(false).should.equal(false) - inst.isType(null).should.equal(false) - inst.isType(NaN).should.equal(false) - inst.nullable().isType(null).should.equal(true) - }) - - it('should VALIDATE correctly', function(){ - - var inst = number().required().min(4) + .required() + .min(4); return Promise.all([ - number().isValid(null).should.eventually().equal(false), - number().nullable().isValid(null).should.eventually().equal(true), - - inst.isValid(5).should.eventually().equal(true), - inst.isValid(2).should.eventually().equal(false), - - inst.validate().should.be.rejected().then(function(err){ - err.errors.length.should.equal(1) - err.errors[0].should.contain('required') - }) - ]) - }) + number() + .isValid(null) + .should.eventually() + .equal(false), + number() + .nullable() + .isValid(null) + .should.eventually() + .equal(true), + + inst + .isValid(5) + .should.eventually() + .equal(true), + inst + .isValid(2) + .should.eventually() + .equal(false), + + inst + .validate() + .should.be.rejected() + .then(function(err) { + err.errors.length.should.equal(1); + err.errors[0].should.contain('required'); + }), + ]); + }); describe('min', () => { var schema = number().min(5); TestHelpers.validateAll(schema, { - valid: [ - 7, - 35738787838, - [null, schema.nullable()] - ], - invalid: [ - 2, - null, - [14, schema.min(10).min(15)] - ] - }) - }) + valid: [7, 35738787838, [null, schema.nullable()]], + invalid: [2, null, [14, schema.min(10).min(15)]], + }); + }); describe('max', () => { var schema = number().max(5); TestHelpers.validateAll(schema, { - valid: [ - 4, - -5222, - [null, schema.nullable()] - ], - invalid: [ - 10, - null, - [16, schema.max(20).max(15)] - ] - }) - }) + valid: [4, -5222, [null, schema.nullable()]], + invalid: [10, null, [16, schema.max(20).max(15)]], + }); + }); describe('lessThan', () => { var schema = number().lessThan(5); TestHelpers.validateAll(schema, { - valid: [ - 4, - -10, - [null, schema.nullable()] - ], - invalid: [ - 5, - 7, - null, - [14, schema.lessThan(10).lessThan(14)] - ] - }) - }) + valid: [4, -10, [null, schema.nullable()]], + invalid: [5, 7, null, [14, schema.lessThan(10).lessThan(14)]], + }); + }); describe('more', () => { var schema = number().moreThan(5); TestHelpers.validateAll(schema, { - valid: [ - 6, - 56445435, - [null, schema.nullable()] - ], - invalid: [ - 5, - -10, - null, - [64, schema.moreThan(52).moreThan(74)] - ] - }) - }) - - describe('integer', ()=> { - TestHelpers.validateAll( - number().integer(), - { - valid: [ - 4, - -5222, - ], - invalid: [ - 10.53, - 0.1 * 0.2, - -34512535.626, - 3.12312e+51, - new Date(), - ] - } - ) - }) - it('should check integer', function(){ + valid: [6, 56445435, [null, schema.nullable()]], + invalid: [5, -10, null, [64, schema.moreThan(52).moreThan(74)]], + }); + }); + + describe('integer', () => { + TestHelpers.validateAll(number().integer(), { + valid: [4, -5222], + invalid: [10.53, 0.1 * 0.2, -34512535.626, 3.12312e51, new Date()], + }); + }); + it('should check integer', function() { var v = number().positive(); return Promise.all([ - v.isValid(7).should.eventually().equal(true), - - v.isValid(0).should.eventually().equal(true), - - v.validate(-4).should.be.rejected().then(null, function(err){ - err.errors[0].should.contain('this must be a positive number') - }) - ]) - }) - - it('should check POSITIVE correctly', function(){ + v + .isValid(7) + .should.eventually() + .equal(true), + + v + .isValid(0) + .should.eventually() + .equal(true), + + v + .validate(-4) + .should.be.rejected() + .then(null, function(err) { + err.errors[0].should.contain('this must be a positive number'); + }), + ]); + }); + + it('should check POSITIVE correctly', function() { var v = number().positive(); return Promise.all([ - v.isValid(7).should.eventually().equal(true), - - v.isValid(0).should.eventually().equal(true), - - v.validate(-4).should.be.rejected().then(null, function(err){ - err.errors[0].should.contain('this must be a positive number') - }) - ]) - }) - - it('should check NEGATIVE correctly', function(){ + v + .isValid(7) + .should.eventually() + .equal(true), + + v + .isValid(0) + .should.eventually() + .equal(true), + + v + .validate(-4) + .should.be.rejected() + .then(null, function(err) { + err.errors[0].should.contain('this must be a positive number'); + }), + ]); + }); + + it('should check NEGATIVE correctly', function() { var v = number().negative(); return Promise.all([ - v.isValid(-4).should.eventually().equal(true), - - v.isValid(0).should.eventually().equal(true), - - v.validate(10).should.be.rejected().then(null, function(err){ - err.errors[0].should.contain('this must be a negative number') - }) - ]) - }) -}) + v + .isValid(-4) + .should.eventually() + .equal(true), + + v + .isValid(0) + .should.eventually() + .equal(true), + + v + .validate(10) + .should.be.rejected() + .then(null, function(err) { + err.errors[0].should.contain('this must be a negative number'); + }), + ]); + }); +}); diff --git a/test/object.js b/test/object.js index e8f97bd18..d5f76ebef 100644 --- a/test/object.js +++ b/test/object.js @@ -1,24 +1,29 @@ - import { - mixed, string, date, number - , bool, array, object, ref, lazy, reach + mixed, + string, + date, + number, + bool, + array, + object, + ref, + lazy, + reach, } from '../src'; describe('Object types', () => { - - describe('casting', ()=> { + describe('casting', () => { it('should parse json strings', () => { object({ hello: number() }) - .cast('{ \"hello\": \"5\" }') + .cast('{ "hello": "5" }') .should.eql({ - hello: 5 - }) - }) + hello: 5, + }); + }); it('should return null for failed casts', () => { - expect( - object().cast('dfhdfh', { assert: false })).to.equal(null) - }) + expect(object().cast('dfhdfh', { assert: false })).to.equal(null); + }); it('should recursively cast fields', () => { let obj = { @@ -27,8 +32,8 @@ describe('Object types', () => { arr: ['4', 5], dte: '2014-09-23T19:25:25Z', nested: { str: 5 }, - arrNested: [{ num: 5 }, { num: '5' }] - } + arrNested: [{ num: 5 }, { num: '5' }], + }; object({ num: number(), @@ -36,20 +41,19 @@ describe('Object types', () => { arr: array().of(number()), dte: date(), nested: object().shape({ str: string() }), - arrNested: array().of( - object().shape({ num: number() }) - ) + arrNested: array().of(object().shape({ num: number() })), }) - .cast(obj).should.eql({ - num: 5, - str: 'hello', - arr: [4, 5], - dte: new Date(1411500325000), - nested: { str: '5' }, - arrNested: [{ num: 5 }, { num: 5 }] - }) - }) - }) + .cast(obj) + .should.eql({ + num: 5, + str: 'hello', + arr: [4, 5], + dte: new Date(1411500325000), + nested: { str: '5' }, + arrNested: [{ num: 5 }, { num: 5 }], + }); + }); + }); describe('validation', () => { let inst, obj; @@ -60,148 +64,151 @@ describe('Object types', () => { str: string(), arr: array().of(number().max(6)), dte: date(), - nested: object().shape({ str: string().min(3) }).required(), - arrNested: array().of(object().shape({ num: number() })) - }) + nested: object() + .shape({ str: string().min(3) }) + .required(), + arrNested: array().of(object().shape({ num: number() })), + }); obj = { num: '4', str: 'hello', arr: ['4', 5, 6], dte: '2014-09-23T19:25:25Z', nested: { str: 5 }, - arrNested: [{ num: 5 }, { num: '2' }] - } - }) + arrNested: [{ num: 5 }, { num: '2' }], + }; + }); it('should run validations recursively', async () => { - await inst.isValid().should.eventually().equal(true) + await inst + .isValid() + .should.eventually() + .equal(true); let error = await inst.validate(obj).should.be.rejected(); - error.errors.length.should.equal(1) - error.errors[0].should.contain('nested.str') + error.errors.length.should.equal(1); + error.errors[0].should.contain('nested.str'); obj.nested.str = 'hello'; - obj.arr[1] = 8 + obj.arr[1] = 8; - error = await inst.validate(obj).should.be.rejected() - error.errors[0].should.contain('arr[1]') - }) + error = await inst.validate(obj).should.be.rejected(); + error.errors[0].should.contain('arr[1]'); + }); it('should prevent recursive casting', async () => { let castSpy = sinon.spy(string.prototype, '_cast'); inst = object({ - field: string() - }) + field: string(), + }); - let value = await inst.validate({ field: 5 }) + let value = await inst.validate({ field: 5 }); - value.field.should.equal('5') + value.field.should.equal('5'); - castSpy.should.have.been.calledOnce() + castSpy.should.have.been.calledOnce(); - string.prototype._cast.restore() - }) + string.prototype._cast.restore(); + }); it('should respect strict for nested values', async () => { inst = object({ - field: string() - }) - .strict() + field: string(), + }).strict(); - let err = await inst.validate({ field: 5 }).should.be.rejected() + let err = await inst.validate({ field: 5 }).should.be.rejected(); - err.message.should.match(/must be a `string` type/) - }) + err.message.should.match(/must be a `string` type/); + }); it('should respect child schema with strict()', async () => { inst = object({ - field: number().strict() - }) + field: number().strict(), + }); - let err = await inst.validate({ field: '5' }).should.be.rejected() + let err = await inst.validate({ field: '5' }).should.be.rejected(); - err.message.should.match(/must be a `number` type/) + err.message.should.match(/must be a `number` type/); - inst.cast({ field: '5' }).should.eql({ field: 5 }) + inst.cast({ field: '5' }).should.eql({ field: 5 }); err = await object({ port: number() .strict() - .integer() + .integer(), }) - .validate({ port: 'asdad' }) - .should.be.rejected() - }) + .validate({ port: 'asdad' }) + .should.be.rejected(); + }); it('should handle custom validation', async () => { - let inst = object().shape({ - prop: mixed(), - other: mixed() - }) - .test('test', '${path} oops', () => false) + let inst = object() + .shape({ + prop: mixed(), + other: mixed(), + }) + .test('test', '${path} oops', () => false); - let err = await inst.validate({}).should.be.rejected() + let err = await inst.validate({}).should.be.rejected(); - err.errors[0].should.equal('this oops') - }) + err.errors[0].should.equal('this oops'); + }); it('should not clone during validating', async function() { let base = mixed.prototype.clone; mixed.prototype.clone = function(...args) { - if (!this._mutate) - throw new Error('should not call clone') + if (!this._mutate) throw new Error('should not call clone'); - return base.apply(this, args) - } + return base.apply(this, args); + }; try { await inst.validate({ nested: { str: 'jimmm' }, - arrNested: [{ num: 5 }, { num: '2' }] - }) + arrNested: [{ num: 5 }, { num: '2' }], + }); await inst.validate({ nested: { str: 5 }, - arrNested: [{ num: 5 }, { num: '2' }] - }) + arrNested: [{ num: 5 }, { num: '2' }], + }); + } catch (err) { + } finally { + //eslint-disable-line + mixed.prototype.clone = base; } - catch (err) {} //eslint-disable-line - finally { - mixed.prototype.clone = base - } - }) - - - }) - + }); + }); it('should pass options to children', function() { object({ names: object({ - first: string() - }) - }) - .cast({ - extra: true, - names: { first: 'john', extra: true } - }, { stripUnknown: true } - ) - .should.eql({ - names: { - first: 'john' - } + first: string(), + }), }) - }) + .cast( + { + extra: true, + names: { first: 'john', extra: true }, + }, + { stripUnknown: true }, + ) + .should.eql({ + names: { + first: 'john', + }, + }); + }); it('should call shape with constructed with an arg', () => { let inst = object({ - prop: mixed() - }) + prop: mixed(), + }); - inst.should.have.deep.property('fields.prop') - }) + inst.should.have.deep.property('fields.prop'); + }); describe('object defaults', () => { let objSchema; @@ -209,496 +216,540 @@ describe('Object types', () => { beforeEach(() => { objSchema = object({ nest: object({ - str: string().default('hi') - }) - }) - }) + str: string().default('hi'), + }), + }); + }); it('should expand objects by default', () => { objSchema.default().should.eql({ - nest: { str: 'hi' } - }) - }) + nest: { str: 'hi' }, + }); + }); it('should accept a user provided default', () => { - objSchema = objSchema.default({ boom: 'hi'}) + objSchema = objSchema.default({ boom: 'hi' }); objSchema.default().should.eql({ - boom: 'hi' - }) - }) + boom: 'hi', + }); + }); it('should add empty keys when sub schema has no default', () => { object({ str: string(), - nest: object({ str: string() }) + nest: object({ str: string() }), }) - .default() - .should.eql({ - nest: { str: undefined }, - str: undefined - }) - }) + .default() + .should.eql({ + nest: { str: undefined }, + str: undefined, + }); + }); it('should create defaults for missing object fields', () => { - object({ prop: mixed(), other: object({ - x: object({ b: string() }) - }) - }) - .cast({ prop: 'foo' }) - .should.eql({ - prop: 'foo', - other: { x: { b: undefined } } + x: object({ b: string() }), + }), }) - }) - }) + .cast({ prop: 'foo' }) + .should.eql({ + prop: 'foo', + other: { x: { b: undefined } }, + }); + }); + }); it('should handle empty keys', () => { let inst = object().shape({ - prop: mixed() - }) + prop: mixed(), + }); return Promise.all([ + inst + .isValid({}) + .should.eventually() + .equal(true), - inst.isValid({}).should.eventually().equal(true), - - inst.shape({ prop: mixed().required() }) - .isValid({}).should.eventually().equal(false) - ]) - }) + inst + .shape({ prop: mixed().required() }) + .isValid({}) + .should.eventually() + .equal(false), + ]); + }); it('should work with noUnknown', () => { let inst = object().shape({ - prop: mixed(), - other: mixed() - }) + prop: mixed(), + other: mixed(), + }); return Promise.all([ inst .noUnknown('hi') - .validate({ extra: 'field' }, { strict: true }).should.be.rejected() - .then((err) => { - err.errors[0].should.equal('hi') - }), + .validate({ extra: 'field' }, { strict: true }) + .should.be.rejected() + .then(err => { + err.errors[0].should.equal('hi'); + }), inst .noUnknown() - .validate({ extra: 'field' }, { strict: true }).should.be.rejected() - .then(err => { - err.errors[0].should.be.a('string') - }) - ]) - }) + .validate({ extra: 'field' }, { strict: true }) + .should.be.rejected() + .then(err => { + err.errors[0].should.be.a('string'); + }), + ]); + }); it('should strip specific fields', () => { let inst = object().shape({ - prop: mixed().strip(false), - other: mixed().strip() - }) + prop: mixed().strip(false), + other: mixed().strip(), + }); - inst.cast({ other: 'boo', prop: 'bar'}) - .should.eql({ - prop: 'bar' - }) - }) + inst.cast({ other: 'boo', prop: 'bar' }).should.eql({ + prop: 'bar', + }); + }); it('should handle field striping with `when`', () => { let inst = object().shape({ - other: bool(), - prop: mixed().when('other', { - is: true, - then: s => s.strip() - }), - }) + other: bool(), + prop: mixed().when('other', { + is: true, + then: s => s.strip(), + }), + }); - inst.cast({ other: true, prop: 'bar'}) - .should.eql({ - other: true - }) - }) + inst.cast({ other: true, prop: 'bar' }).should.eql({ + other: true, + }); + }); it('should allow refs', async function() { let schema = object({ quz: ref('baz'), baz: ref('foo.bar'), foo: object({ - bar: string() + bar: string(), }), - x: ref('$x') - }) + x: ref('$x'), + }); - let value = await schema.validate({ - foo: { bar: 'boom' } - }, { context: { x: 5 } }) + let value = await schema.validate( + { + foo: { bar: 'boom' }, + }, + { context: { x: 5 } }, + ); //console.log(value) value.should.eql({ foo: { - bar: 'boom' + bar: 'boom', }, baz: 'boom', quz: 'boom', - x: 5 - }) - - - }) + x: 5, + }); + }); describe('lazy evaluation', () => { let types = { - 'string': string(), - 'number': number() - } + string: string(), + number: number(), + }; it('should be cast-able', () => { - let inst = lazy(()=> number()) + let inst = lazy(() => number()); - inst.cast.should.be.a('function') - inst.cast('4').should.equal(4) - }) + inst.cast.should.be.a('function'); + inst.cast('4').should.equal(4); + }); it('should be validatable', async () => { - let inst = lazy(()=> string().trim('trim me!').strict()) + let inst = lazy(() => + string() + .trim('trim me!') + .strict(), + ); - inst.validate.should.be.a('function') + inst.validate.should.be.a('function'); try { - await inst.validate(' john ') - } - catch (err) { - err.message.should.equal('trim me!') + await inst.validate(' john '); + } catch (err) { + err.message.should.equal('trim me!'); } - }) + }); it('should resolve to schema', () => { let inst = object({ - nested: lazy(()=> inst), + nested: lazy(() => inst), x: object({ - y: lazy(()=> inst) - }) - }) + y: lazy(() => inst), + }), + }); - reach(inst, 'nested').should.equal(inst) - reach(inst, 'x.y').should.equal(inst) - }) + reach(inst, 'nested').should.equal(inst); + reach(inst, 'x.y').should.equal(inst); + }); - it('should be passed the value', (done) => { + it('should be passed the value', done => { let inst = object({ nested: lazy(value => { - value.should.equal('foo') - done() - return string() - }) - }) + value.should.equal('foo'); + done(); + return string(); + }), + }); - inst.cast({ nested: 'foo' }) - }) + inst.cast({ nested: 'foo' }); + }); - it('should be passed the options', (done) => { - let opts = {} + it('should be passed the options', done => { + let opts = {}; let inst = lazy((_, options) => { - options.should.equal(opts) - done() - return string() - }) + options.should.equal(opts); + done(); + return string(); + }); - inst.cast({ nested: 'foo' }, opts) - }) + inst.cast({ nested: 'foo' }, opts); + }); it('should always return a schema', () => { - (() => lazy(() => {}).cast()) - .should.throw(/must return a valid schema/) - }) + (() => lazy(() => {}).cast()).should.throw(/must return a valid schema/); + }); it('should set the correct path', async () => { let inst = object({ - str: string().required().nullable(), - nested: lazy(() => inst.default(undefined)) - }) + str: string() + .required() + .nullable(), + nested: lazy(() => inst.default(undefined)), + }); let value = { nested: { str: null }, - str: 'foo' - } + str: 'foo', + }; try { - await inst.validate(value, { strict: true }) + await inst.validate(value, { strict: true }); + } catch (err) { + err.path.should.equal('nested.str'); + err.message.should.match(/required/); } - catch (err) { - err.path.should.equal('nested.str') - err.message.should.match(/required/) - } - }) + }); it('should resolve array sub types', async () => { let inst = object({ - str: string().required().nullable(), - nested: array().of( - lazy(() => inst.default(undefined)) - ) - }) + str: string() + .required() + .nullable(), + nested: array().of(lazy(() => inst.default(undefined))), + }); let value = { nested: [{ str: null }], - str: 'foo' - } + str: 'foo', + }; try { - await inst.validate(value, { strict: true }) - } - catch (err) { - err.path.should.equal('nested[0].str') - err.message.should.match(/required/) + await inst.validate(value, { strict: true }); + } catch (err) { + err.path.should.equal('nested[0].str'); + err.message.should.match(/required/); } - }) + }); it('should resolve for each array item', async () => { - let inst = array() - .of(lazy(value => types[typeof value])) + let inst = array().of(lazy(value => types[typeof value])); - let val = await inst.validate(['john', 4], { strict: true }) - - val.should.eql(['john', 4]) - }) - }) + let val = await inst.validate(['john', 4], { strict: true }); + val.should.eql(['john', 4]); + }); + }); it('should respect abortEarly', () => { let inst = object({ - nest: object({ - str: string().required() - }) - .test('name', 'oops', () => false) - }) + nest: object({ + str: string().required(), + }).test('name', 'oops', () => false), + }); return Promise.all([ inst - .validate({ nest: { str: '' } }).should.be.rejected() + .validate({ nest: { str: '' } }) + .should.be.rejected() .then(err => { - err.value.should.eql({ nest: { str: '' } }) - err.errors.length.should.equal(1) - err.errors.should.eql(['oops']) + err.value.should.eql({ nest: { str: '' } }); + err.errors.length.should.equal(1); + err.errors.should.eql(['oops']); - err.path.should.equal('nest') + err.path.should.equal('nest'); }), inst - .validate( - { nest: { str: '' } }, - { abortEarly: false } - ) + .validate({ nest: { str: '' } }, { abortEarly: false }) .should.be.rejected() .then(err => { - err.value.should.eql({ nest: { str: '' } }) - err.errors.length.should.equal(2) - err.errors.should.eql(['nest.str is a required field', 'oops']) - }) - ]) - }) + err.value.should.eql({ nest: { str: '' } }); + err.errors.length.should.equal(2); + err.errors.should.eql(['nest.str is a required field', 'oops']); + }), + ]); + }); it('should sort errors by insertion order', async () => { let inst = object({ // use `when` to make sure it is validated second foo: string().when('bar', () => string().min(5)), - bar: string().required() - }) + bar: string().required(), + }); let err = await inst .validate({ foo: 'foo' }, { abortEarly: false }) .should.rejected(); - err.errors.should.eql([ 'foo must be at least 5 characters', - 'bar is a required field' - ]) - }) + 'bar is a required field', + ]); + }); it('should respect recursive', () => { let inst = object({ nest: object({ - str: string().required() - }) - }) - .test('name', 'oops', () => false) + str: string().required(), + }), + }).test('name', 'oops', () => false); let val = { nest: { str: null } }; return Promise.all([ inst - .validate(val, { abortEarly: false }).should.be.rejected() - .then(err => { - err.errors.length.should.equal(2) - }), + .validate(val, { abortEarly: false }) + .should.be.rejected() + .then(err => { + err.errors.length.should.equal(2); + }), inst - .validate(val, { abortEarly: false, recursive: false }).should.be.rejected() + .validate(val, { abortEarly: false, recursive: false }) + .should.be.rejected() .then(err => { - err.errors.length.should.equal(1) - err.errors.should.eql(['oops']) - }) - ]) - - }) + err.errors.length.should.equal(1); + err.errors.should.eql(['oops']); + }), + ]); + }); it('should alias or move keys', () => { - let inst = object().shape({ - myProp: mixed(), - Other: mixed() - }) - .from('prop', 'myProp') - .from('other', 'Other', true) + let inst = object() + .shape({ + myProp: mixed(), + Other: mixed(), + }) + .from('prop', 'myProp') + .from('other', 'Other', true); - inst.cast({ prop: 5, other: 6}) - .should.eql({ myProp: 5, other: 6, Other: 6 }) - }) + inst + .cast({ prop: 5, other: 6 }) + .should.eql({ myProp: 5, other: 6, Other: 6 }); + }); it('should move nested keys', () => { let inst = object({ foo: object({ - bar: string() + bar: string(), }), - }) - .from('foo.bar', 'foobar') + }).from('foo.bar', 'foobar'); - inst.cast({ foo: { bar: 'quz', foof: 5 } }) - .should.eql({ foobar: 'quz', foo: { foof: 5 } }) - }) + inst + .cast({ foo: { bar: 'quz', foof: 5 } }) + .should.eql({ foobar: 'quz', foo: { foof: 5 } }); + }); it('should alias nested keys', () => { let inst = object({ foo: object({ - bar: string() + bar: string(), }), - }) - .from('foo.bar', 'foobar', true) + }).from('foo.bar', 'foobar', true); - inst.cast({ foo: { bar: 'quz' } }) - .should.eql({ foobar: 'quz', foo: { bar: 'quz' } }) - }) + inst + .cast({ foo: { bar: 'quz' } }) + .should.eql({ foobar: 'quz', foo: { bar: 'quz' } }); + }); it('should not move keys when it does not exist', () => { - let inst = object().shape({ - myProp: mixed() - }) - .from('prop', 'myProp') + let inst = object() + .shape({ + myProp: mixed(), + }) + .from('prop', 'myProp'); - inst.cast({ myProp: 5 }) - .should.eql({ myProp: 5 }) + inst.cast({ myProp: 5 }).should.eql({ myProp: 5 }); - inst.cast({ myProp: 5, prop: 7 }) - .should.eql({ myProp: 7 }) - }) + inst.cast({ myProp: 5, prop: 7 }).should.eql({ myProp: 7 }); + }); it('should handle conditionals', () => { let inst = object().shape({ noteDate: number() .when('stats.isBig', { is: true, then: number().min(5) }) - .when('other', function(v){ - if (v === 4) return this.max(6) + .when('other', function(v) { + if (v === 4) return this.max(6); }), stats: object({ isBig: bool() }), - other: number().min(1).when('stats', { is: 5, then: number() }) - }) + other: number() + .min(1) + .when('stats', { is: 5, then: number() }), + }); return Promise.all([ - inst.isValid({ stats: { isBig: true }, rand: 5, noteDate: 7, other: 4 }).should.eventually().equal(false), - inst.isValid({ stats: { isBig: true }, noteDate: 1, other: 4 }).should.eventually().equal(false), + inst + .isValid({ stats: { isBig: true }, rand: 5, noteDate: 7, other: 4 }) + .should.eventually() + .equal(false), + inst + .isValid({ stats: { isBig: true }, noteDate: 1, other: 4 }) + .should.eventually() + .equal(false), - inst.isValid({ stats: { isBig: true }, noteDate: 7, other: 6 }).should.eventually().equal(true), - inst.isValid({ stats: { isBig: true }, noteDate: 7, other: 4 }).should.eventually().equal(false), + inst + .isValid({ stats: { isBig: true }, noteDate: 7, other: 6 }) + .should.eventually() + .equal(true), + inst + .isValid({ stats: { isBig: true }, noteDate: 7, other: 4 }) + .should.eventually() + .equal(false), - inst.isValid({ stats: { isBig: false }, noteDate: 4, other: 4 }).should.eventually().equal(true), + inst + .isValid({ stats: { isBig: false }, noteDate: 4, other: 4 }) + .should.eventually() + .equal(true), - inst.isValid({ stats: { isBig: true }, noteDate: 1, other: 4 }).should.eventually().equal(false), - inst.isValid({ stats: { isBig: true }, noteDate: 6, other: 4 }).should.eventually().equal(true) - ]) - }) + inst + .isValid({ stats: { isBig: true }, noteDate: 1, other: 4 }) + .should.eventually() + .equal(false), + inst + .isValid({ stats: { isBig: true }, noteDate: 6, other: 4 }) + .should.eventually() + .equal(true), + ]); + }); it('should allow opt out of topo sort on specific edges', () => { (function() { object().shape({ - orgID: number() - .when('location', function(v){ if (v == null) return this.required() }), - location: string() - .when('orgID', function(v){ if (v == null) return this.required() }) - }) - }).should.throw('Cyclic dependency: "location"') - - ;(function() { - object().shape({ - orgID: number() - .when('location', function(v){ if (v == null) return this.required() }), - location: string() - .when('orgID', function(v){ if (v == null) return this.required() }) - }, [ ['location', 'orgID'] ]) - }).should.not.throw() - }) + orgID: number().when('location', function(v) { + if (v == null) return this.required(); + }), + location: string().when('orgID', function(v) { + if (v == null) return this.required(); + }), + }); + }.should.throw('Cyclic dependency: "location"')); + (function() { + object().shape( + { + orgID: number().when('location', function(v) { + if (v == null) return this.required(); + }), + location: string().when('orgID', function(v) { + if (v == null) return this.required(); + }), + }, + [['location', 'orgID']], + ); + }.should.not.throw()); + }); it('should use correct default when concating', () => { let inst = object({ - other: bool() - }) - .default(undefined) + other: bool(), + }).default(undefined); - expect(inst.concat(object()).default()).to.equal(undefined) + expect(inst.concat(object()).default()).to.equal(undefined); - expect(inst.concat(object().default({})).default()).to.eql({}) - }) + expect(inst.concat(object().default({})).default()).to.eql({}); + }); it('should handle nested conditionals', () => { - let countSchema = number().when('isBig', { is: true, then: number().min(5) }) + let countSchema = number().when('isBig', { + is: true, + then: number().min(5), + }); let inst = object({ other: bool(), stats: object({ - isBig: bool(), - count: countSchema - }) + isBig: bool(), + count: countSchema, + }) .default(undefined) - .when('other', { is: true, then: object().required() }) - }) + .when('other', { is: true, then: object().required() }), + }); return Promise.all([ - inst.validate({ stats: undefined, other: true }).should.be.rejected() - .then((err) => { - err.errors[0].should.contain('required') + inst + .validate({ stats: undefined, other: true }) + .should.be.rejected() + .then(err => { + err.errors[0].should.contain('required'); }), - inst.validate({ stats: { isBig: true, count: 3 }, other: true }).should.be.rejected() - .then((err) => { - err.errors[0].should.contain('must be greater than or equal to 5') + inst + .validate({ stats: { isBig: true, count: 3 }, other: true }) + .should.be.rejected() + .then(err => { + err.errors[0].should.contain('must be greater than or equal to 5'); }), - inst.validate({ stats: { isBig: true, count: 10 }, other: true }).should.be.fulfilled() + inst + .validate({ stats: { isBig: true, count: 10 }, other: true }) + .should.be.fulfilled() .then(value => { - value.should.deep.equal({ stats: { isBig: true, count: 10 }, other: true }) + value.should.deep.equal({ + stats: { isBig: true, count: 10 }, + other: true, + }); }), - countSchema.validate(10, { context: { isBig: true } }).should.be.fulfilled() + countSchema + .validate(10, { context: { isBig: true } }) + .should.be.fulfilled() .then(value => { - value.should.deep.equal(10) - }) - ]) - }) + value.should.deep.equal(10); + }), + ]); + }); it('should camelCase keys', () => { - let inst = object().shape({ - conStat: number(), - caseStatus: number(), - hiJohn: number() - }) - .camelCase() + let inst = object() + .shape({ + conStat: number(), + caseStatus: number(), + hiJohn: number(), + }) + .camelCase(); - inst.cast({ CON_STAT: 5, CaseStatus: 6, 'hi john': 4 }) - .should.eql({ conStat: 5, caseStatus: 6, hiJohn: 4 }) + inst + .cast({ CON_STAT: 5, CaseStatus: 6, 'hi john': 4 }) + .should.eql({ conStat: 5, caseStatus: 6, hiJohn: 4 }); - expect(inst - .nullable() - .cast(null)).to.equal(null) - }) + expect(inst.nullable().cast(null)).to.equal(null); + }); // it('should camelCase with leading underscore', () => { // let inst = object().camelCase() @@ -710,18 +761,18 @@ describe('Object types', () => { // }) it('should CONSTANT_CASE keys', () => { - let inst = object().shape({ - CON_STAT: number(), - CASE_STATUS: number(), - HI_JOHN: number() - }) - .constantCase() + let inst = object() + .shape({ + CON_STAT: number(), + CASE_STATUS: number(), + HI_JOHN: number(), + }) + .constantCase(); - inst.cast({ conStat: 5, CaseStatus: 6, 'hi john': 4 }) - .should.eql({ CON_STAT: 5, CASE_STATUS: 6, HI_JOHN: 4 }) + inst + .cast({ conStat: 5, CaseStatus: 6, 'hi john': 4 }) + .should.eql({ CON_STAT: 5, CASE_STATUS: 6, HI_JOHN: 4 }); - expect(inst - .nullable() - .cast(null)).to.equal(null) - }) -}) + expect(inst.nullable().cast(null)).to.equal(null); + }); +}); diff --git a/test/string.js b/test/string.js index 1f1f2b21a..739eca865 100644 --- a/test/string.js +++ b/test/string.js @@ -3,8 +3,7 @@ import * as TestHelpers from './helpers'; import { string, number, object, ref } from '../src'; describe('String types', () => { - - describe('casting', ()=> { + describe('casting', () => { let schema = string(); TestHelpers.castAll(schema, { @@ -16,193 +15,317 @@ describe('String types', () => { [true, 'true'], [false, 'false'], [0, '0'], - [null, null, schema.nullable()] + [null, null, schema.nullable()], ], - invalid: [ - null, - ] - }) + invalid: [null], + }); describe('ensure', () => { let schema = string().ensure(); - TestHelpers.castAll( - schema, - { - valid: [ - [5, '5'], - ['3', '3'], - [null, ''], - [undefined, ''], - [null, '', schema.default('foo')], - [undefined, 'foo', schema.default('foo')], - ] - } - ) - }) + TestHelpers.castAll(schema, { + valid: [ + [5, '5'], + ['3', '3'], + [null, ''], + [undefined, ''], + [null, '', schema.default('foo')], + [undefined, 'foo', schema.default('foo')], + ], + }); + }); it('should trim', () => { - schema.trim().cast(' 3 ').should.equal('3') - }) + schema + .trim() + .cast(' 3 ') + .should.equal('3'); + }); it('should transform to lowercase', () => { - schema.lowercase() + schema + .lowercase() .cast('HellO JohN') - .should.equal('hello john') - }) + .should.equal('hello john'); + }); it('should transform to lowercase', () => { - schema.uppercase() + schema + .uppercase() .cast('HellO JohN') - .should.equal('HELLO JOHN') - }) + .should.equal('HELLO JOHN'); + }); it('should handle nulls', () => { - expect(schema.nullable() - .trim() - .lowercase() - .uppercase() - .cast(null)).to.equal(null) - }) - }) - - it('should handle DEFAULT', function(){ + expect( + schema + .nullable() + .trim() + .lowercase() + .uppercase() + .cast(null), + ).to.equal(null); + }); + }); + + it('should handle DEFAULT', function() { + var inst = string(); + + inst + .default('my_value') + .required() + .default() + .should.equal('my_value'); + }); + + it('should type check', function() { + var inst = string(); + + inst.isType('5').should.equal(true); + inst.isType(new String('5')).should.equal(true); + inst.isType(false).should.equal(false); + inst.isType(null).should.equal(false); + inst + .nullable(false) + .isType(null) + .should.equal(false); + }); + + it('should VALIDATE correctly', function() { var inst = string() - - inst.default('my_value').required().default().should.equal('my_value') - }) - - it('should type check', function(){ - var inst = string() - - inst.isType('5').should.equal(true) - inst.isType(new String('5')).should.equal(true) - inst.isType(false).should.equal(false) - inst.isType(null).should.equal(false) - inst.nullable(false).isType(null).should.equal(false) - }) - - it('should VALIDATE correctly', function(){ - var inst = string().required().min(4).strict() + .required() + .min(4) + .strict(); return Promise.all([ - - string().strict().isValid(null).should.eventually().equal(false), - - string().strict().nullable(true).isValid(null).should.eventually().equal(true), - - inst.isValid('hello').should.eventually().equal(true), - - inst.isValid('hel').should.eventually().equal(false), - - inst.validate('').should.be.rejected().then(function(err) { - err.errors.length.should.equal(1) - }) - ]) - }) - - it('should check MATCHES correctly', function(){ + string() + .strict() + .isValid(null) + .should.eventually() + .equal(false), + + string() + .strict() + .nullable(true) + .isValid(null) + .should.eventually() + .equal(true), + + inst + .isValid('hello') + .should.eventually() + .equal(true), + + inst + .isValid('hel') + .should.eventually() + .equal(false), + + inst + .validate('') + .should.be.rejected() + .then(function(err) { + err.errors.length.should.equal(1); + }), + ]); + }); + + it('should check MATCHES correctly', function() { var v = string().matches(/(hi|bye)/); return Promise.all([ - v.isValid('hi').should.eventually().equal(true), - v.isValid('nope').should.eventually().equal(false), - v.isValid('bye').should.eventually().equal(true) - ]) - }) + v + .isValid('hi') + .should.eventually() + .equal(true), + v + .isValid('nope') + .should.eventually() + .equal(false), + v + .isValid('bye') + .should.eventually() + .equal(true), + ]); + }); it('MATCHES should include empty strings', () => { let v = string().matches(/(hi|bye)/); - return v.isValid('').should.eventually().equal(false) - }) + return v + .isValid('') + .should.eventually() + .equal(false); + }); it('MATCHES should exclude empty strings', () => { let v = string().matches(/(hi|bye)/, { excludeEmptyString: true }); - return v.isValid('').should.eventually().equal(true) - }) + return v + .isValid('') + .should.eventually() + .equal(true); + }); it('EMAIL should exclude empty strings', () => { let v = string().email(); - return v.isValid('').should.eventually().equal(true) - }) + return v + .isValid('') + .should.eventually() + .equal(true); + }); - it('should check MIN correctly', function(){ + it('should check MIN correctly', function() { var v = string().min(5); var obj = object({ len: number(), - name: string().min(ref('len')) - }) + name: string().min(ref('len')), + }); return Promise.all([ - v.isValid('hiiofff').should.eventually().equal(true), - v.isValid('big').should.eventually().equal(false), - v.isValid('noffasfasfasf saf').should.eventually().equal(true), - - v.isValid(null).should.eventually().equal(false), // null -> '' - v.nullable().isValid(null).should.eventually().equal(true), // null -> null - - obj.isValid({ len: 10, name: 'john' }).should.eventually().equal(false) - ]) - - }) - - it('should check MAX correctly', function(){ + v + .isValid('hiiofff') + .should.eventually() + .equal(true), + v + .isValid('big') + .should.eventually() + .equal(false), + v + .isValid('noffasfasfasf saf') + .should.eventually() + .equal(true), + + v + .isValid(null) + .should.eventually() + .equal(false), // null -> '' + v + .nullable() + .isValid(null) + .should.eventually() + .equal(true), // null -> null + + obj + .isValid({ len: 10, name: 'john' }) + .should.eventually() + .equal(false), + ]); + }); + + it('should check MAX correctly', function() { var v = string().max(5); var obj = object({ len: number(), - name: string().max(ref('len')) - }) + name: string().max(ref('len')), + }); return Promise.all([ - v.isValid('adgf').should.eventually().equal(true), - v.isValid('bigdfdsfsdf').should.eventually().equal(false), - v.isValid('no').should.eventually().equal(true), - - v.isValid(null).should.eventually().equal(false), - - v.nullable().isValid(null).should.eventually().equal(true), - - obj.isValid({ len: 3, name: 'john' }).should.eventually().equal(false) - ]) - }) - - it('should check LENGTH correctly', function(){ + v + .isValid('adgf') + .should.eventually() + .equal(true), + v + .isValid('bigdfdsfsdf') + .should.eventually() + .equal(false), + v + .isValid('no') + .should.eventually() + .equal(true), + + v + .isValid(null) + .should.eventually() + .equal(false), + + v + .nullable() + .isValid(null) + .should.eventually() + .equal(true), + + obj + .isValid({ len: 3, name: 'john' }) + .should.eventually() + .equal(false), + ]); + }); + + it('should check LENGTH correctly', function() { var v = string().length(5); var obj = object({ len: number(), - name: string().length(ref('len')) - }) + name: string().length(ref('len')), + }); return Promise.all([ - v.isValid('exact').should.eventually().equal(true), - v.isValid('sml').should.eventually().equal(false), - v.isValid('biiiig').should.eventually().equal(false), - - v.isValid(null).should.eventually().equal(false), - v.nullable().isValid(null).should.eventually().equal(true), - - obj.isValid({ len: 5, name: 'foo' }).should.eventually().equal(false) - - ]) - }) - - it('should validate transforms', function(){ + v + .isValid('exact') + .should.eventually() + .equal(true), + v + .isValid('sml') + .should.eventually() + .equal(false), + v + .isValid('biiiig') + .should.eventually() + .equal(false), + + v + .isValid(null) + .should.eventually() + .equal(false), + v + .nullable() + .isValid(null) + .should.eventually() + .equal(true), + + obj + .isValid({ len: 5, name: 'foo' }) + .should.eventually() + .equal(false), + ]); + }); + + it('should validate transforms', function() { return Promise.all([ - string().trim().isValid(' 3 ').should.eventually().equal(true), + string() + .trim() + .isValid(' 3 ') + .should.eventually() + .equal(true), - string().lowercase().isValid('HellO JohN').should.eventually().equal(true), + string() + .lowercase() + .isValid('HellO JohN') + .should.eventually() + .equal(true), - string().uppercase().isValid('HellO JohN').should.eventually().equal(true), + string() + .uppercase() + .isValid('HellO JohN') + .should.eventually() + .equal(true), - string().trim().isValid(' 3 ', { strict: true }) - .should.eventually().equal(false), + string() + .trim() + .isValid(' 3 ', { strict: true }) + .should.eventually() + .equal(false), - string().lowercase().isValid('HellO JohN', { strict: true }) - .should.eventually().equal(false), + string() + .lowercase() + .isValid('HellO JohN', { strict: true }) + .should.eventually() + .equal(false), - string().uppercase().isValid('HellO JohN', { strict: true }) - .should.eventually().equal(false) - ]) - }) -}) + string() + .uppercase() + .isValid('HellO JohN', { strict: true }) + .should.eventually() + .equal(false), + ]); + }); +}); diff --git a/test/yup.js b/test/yup.js index 62da5cd79..fe10c1b0f 100644 --- a/test/yup.js +++ b/test/yup.js @@ -4,45 +4,42 @@ import { settled } from '../src/util/runValidations'; import { object, array, string, lazy, number } from '../src'; -describe('Yup', function(){ - +describe('Yup', function() { it('cast should not assert on undefined', () => { - (() => string().cast(undefined)) - .should.not.throw() - }) + (() => string().cast(undefined)).should.not.throw(); + }); it('cast should assert on undefined cast results', () => { - (() => string().transform(() => undefined).cast('foo')) - .should.throw() - }) + (() => + string() + .transform(() => undefined) + .cast('foo')).should.throw(); + }); it('cast should respect assert option', () => { - (() => string().cast(null)) - .should.throw(); + (() => string().cast(null)).should.throw(); - (() => string().cast(null, { assert: false })) - .should.not.throw() - }) + (() => string().cast(null, { assert: false })).should.not.throw(); + }); - it('should do settled', function(){ + it('should do settled', function() { return Promise.all([ - settled([Promise.resolve('hi'), Promise.reject('error')]) .catch(err => console.log(err)) .should.be.fulfilled() - .then(function (results) { - results.length.should.equal(2) - results[0].fulfilled.should.equal(true) - results[0].value.should.equal('hi') - results[1].fulfilled.should.equal(false) - results[1].value.should.equal('error') - }) - ]) - }) - - it('should merge', function(){ - var a = { a: 1, b: 'hello', c: [1, 2, 3], d: { a: /hi/ }, e: { b: 5} } - var b = { a: 4, c: [4, 5, 3], d: { b: 'hello' }, f: { c: 5}, g: null } + .then(function(results) { + results.length.should.equal(2); + results[0].fulfilled.should.equal(true); + results[0].value.should.equal('hi'); + results[1].fulfilled.should.equal(false); + results[1].value.should.equal('error'); + }), + ]); + }); + + it('should merge', function() { + var a = { a: 1, b: 'hello', c: [1, 2, 3], d: { a: /hi/ }, e: { b: 5 } }; + var b = { a: 4, c: [4, 5, 3], d: { b: 'hello' }, f: { c: 5 }, g: null }; merge(a, b).should.deep.eql({ a: 4, @@ -50,100 +47,92 @@ describe('Yup', function(){ c: [1, 2, 3, 4, 5, 3], d: { a: /hi/, - b: 'hello' + b: 'hello', }, e: { b: 5 }, f: { c: 5 }, - g: null - }) - }) + g: null, + }); + }); it('should REACH correctly', async () => { - var num = number() - , inst = object().shape({ + var num = number(), + inst = object().shape({ num: number().max(4), - nested: object() - .shape({ - arr: array().of( - object().shape({ num: num }) - ) - }) - }) + nested: object().shape({ + arr: array().of(object().shape({ num: num })), + }), + }); + + reach(inst, 'nested.arr.num').should.equal(num); + reach(inst, 'nested.arr[].num').should.equal(num); + reach(inst, 'nested.arr[1].num').should.equal(num); + reach(inst, 'nested["arr"][1].num').should.not.equal(number()); - reach(inst, 'nested.arr.num').should.equal(num) - reach(inst, 'nested.arr[].num').should.equal(num) - reach(inst, 'nested.arr[1].num').should.equal(num) - reach(inst, 'nested["arr"][1].num').should.not.equal(number()) - - let valid = await reach(inst, 'nested.arr[].num').isValid(5) - valid.should.equal(true) - }) - - it('should REACH conditionally correctly', function(){ - var num = number() - , inst = object().shape({ - num: number().max(4), - nested: object() - .shape({ - arr: array().when('$bar', function(bar) { - return bar !== 3 - ? array().of(number()) - : array().of( - object().shape({ - foo: number(), - num: number().when('foo', (foo) => { - if (foo === 5) - return num - }) - }) - ) - }) - }) - }) - - let context = { bar: 3 } + let valid = await reach(inst, 'nested.arr[].num').isValid(5); + valid.should.equal(true); + }); + + it('should REACH conditionally correctly', function() { + var num = number(), + inst = object().shape({ + num: number().max(4), + nested: object().shape({ + arr: array().when('$bar', function(bar) { + return bar !== 3 + ? array().of(number()) + : array().of( + object().shape({ + foo: number(), + num: number().when('foo', foo => { + if (foo === 5) return num; + }), + }), + ); + }), + }), + }); + + let context = { bar: 3 }; let value = { bar: 3, nested: { - arr: [{ foo: 5 }, { foo: 3 }] - } - } + arr: [{ foo: 5 }, { foo: 3 }], + }, + }; - reach(inst, 'nested.arr.num', value).should.equal(num) - reach(inst, 'nested.arr[].num', value).should.equal(num) + reach(inst, 'nested.arr.num', value).should.equal(num); + reach(inst, 'nested.arr[].num', value).should.equal(num); - reach(inst, 'nested.arr.num', value, context).should.equal(num) - reach(inst, 'nested.arr[].num', value, context).should.equal(num) - reach(inst, 'nested.arr[0].num', value, context).should.equal(num) + reach(inst, 'nested.arr.num', value, context).should.equal(num); + reach(inst, 'nested.arr[].num', value, context).should.equal(num); + reach(inst, 'nested.arr[0].num', value, context).should.equal(num); // should fail b/c item[1] is used to resolve the schema - reach(inst, 'nested["arr"][1].num', value, context).should.not.equal(num) + reach(inst, 'nested["arr"][1].num', value, context).should.not.equal(num); - return reach(inst, 'nested.arr[].num', value, context).isValid(5) - .then((valid) => { - valid.should.equal(true) - }) - }) + return reach(inst, 'nested.arr[].num', value, context) + .isValid(5) + .then(valid => { + valid.should.equal(true); + }); + }); it('should reach through lazy', async () => { let types = { '1': object({ foo: string() }), - '2': object({ foo: number() }) - } + '2': object({ foo: number() }), + }; let err = await object({ - x: array( - lazy(val => types[val.type]) - ) + x: array(lazy(val => types[val.type])), }) - .strict() - .validate({ x: [ - { type: 1, foo: '4' }, - { type: 2, foo: '5' } - ]}) - .should.be.rejected() - err.message.should.match(/must be a `number` type/) - }) - -}) + .strict() + .validate({ + x: [{ type: 1, foo: '4' }, { type: 2, foo: '5' }], + }) + .should.be.rejected(); + err.message.should.match(/must be a `number` type/); + }); +}); diff --git a/yarn.lock b/yarn.lock index 07509e130..56fb1a947 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,7 +63,7 @@ anchor-markdown-header@^0.5.5: dependencies: emoji-regex "~6.1.0" -ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -71,6 +71,10 @@ ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -81,6 +85,16 @@ ansi-styles@^3.0.0: dependencies: color-convert "^1.0.0" +ansi-styles@^3.1.0, ansi-styles@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +any-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" + any-promise@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-0.1.0.tgz#830b680aa7e56f33451d4b049f3bd8044498ee27" @@ -92,6 +106,10 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" +app-root-path@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" + append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" @@ -1131,6 +1149,14 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.1, chalk@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + character-entities-html4@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.0.tgz#1ab08551d3ce1fa1df08d00fb9ca1defb147a06c" @@ -1176,12 +1202,23 @@ circular-json@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" -cli-cursor@^1.0.1: +cli-cursor@^1.0.1, cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" dependencies: restore-cursor "^1.0.1" +cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" @@ -1220,6 +1257,12 @@ color-convert@^1.0.0: dependencies: color-name "^1.1.1" +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + color-name@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" @@ -1252,6 +1295,10 @@ commander@^2.8.1: dependencies: graceful-readlink ">= 1.0.0" +commander@^2.9.0: + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1292,6 +1339,23 @@ core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +cosmiconfig@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + require-from-string "^2.0.1" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -1320,6 +1384,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-fns@^1.27.2: + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + debug@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" @@ -1338,10 +1406,20 @@ debug@^2.6.8: dependencies: ms "2.0.0" +debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + deep-eql@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" @@ -1470,6 +1548,10 @@ electron-to-chromium@^1.3.11: version "1.3.11" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.11.tgz#744761df1d67b492b322ce9aa0aba5393260eb61" +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + emoji-regex@~6.1.0: version "6.1.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932" @@ -1484,7 +1566,7 @@ entities@^1.1.1, entities@~1.1.1: dependencies: prr "~0.0.0" -error-ex@^1.2.0: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: @@ -1685,6 +1767,10 @@ esprima@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + esquery@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" @@ -1727,6 +1813,18 @@ exec-sh@^0.2.0: dependencies: merge "^1.1.3" +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -1773,7 +1871,7 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -figures@^1.3.5: +figures@^1.3.5, figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" dependencies: @@ -1808,6 +1906,10 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +find-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1935,6 +2037,14 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-own-enumerable-property-symbols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -2044,6 +2154,10 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -2103,6 +2217,14 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -2115,6 +2237,16 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2215,6 +2347,10 @@ is-decimal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.0.tgz#940579b6ea63c628080a69e62bda88c8470b4fe0" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" @@ -2233,6 +2369,10 @@ is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -2255,6 +2395,12 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + is-hexadecimal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.0.tgz#5c459771d2af9a2e3952781fd54fcb1bcfe4113c" @@ -2274,6 +2420,16 @@ is-number@^2.0.2, is-number@^2.1.0: dependencies: kind-of "^3.0.2" +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" + dependencies: + symbol-observable "^0.2.2" + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -2298,6 +2454,10 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2308,12 +2468,20 @@ is-regex@^1.0.3: dependencies: has "^1.0.1" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + is-resolvable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" dependencies: tryit "^1.0.1" +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" @@ -2500,6 +2668,10 @@ jest-environment-node@^20.0.3: jest-mock "^20.0.3" jest-util "^20.0.3" +jest-get-type@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" + jest-haste-map@^20.0.4: version "20.0.5" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112" @@ -2623,6 +2795,15 @@ jest-validate@^20.0.3: leven "^2.1.0" pretty-format "^20.0.3" +jest-validate@^21.1.0: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" + dependencies: + chalk "^2.0.1" + jest-get-type "^21.2.0" + leven "^2.1.0" + pretty-format "^21.2.1" + jest@^20.0.3: version "20.0.4" resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" @@ -2650,6 +2831,13 @@ js-yaml@^3.5.1, js-yaml@^3.7.0: argparse "^1.0.7" esprima "^3.1.1" +js-yaml@^3.9.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -2686,6 +2874,10 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +json-parse-better-errors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -2752,6 +2944,79 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lint-staged@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.1.0.tgz#28f600c10a6cbd249ceb003118a1552e53544a93" + dependencies: + app-root-path "^2.0.0" + chalk "^2.1.0" + commander "^2.11.0" + cosmiconfig "^4.0.0" + debug "^3.1.0" + dedent "^0.7.0" + execa "^0.8.0" + find-parent-dir "^0.3.0" + is-glob "^4.0.0" + jest-validate "^21.1.0" + listr "^0.13.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + minimatch "^3.0.0" + npm-which "^3.0.1" + p-map "^1.1.1" + path-is-inside "^1.0.2" + pify "^3.0.0" + staged-git-files "0.0.4" + stringify-object "^3.2.0" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + +listr-update-renderer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-observable "^0.2.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.4.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.4.2" + stream-to-observable "^0.2.0" + strip-ansi "^3.0.1" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -2797,6 +3062,25 @@ lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.0, lodash@^4.17.4, lodash@^4.2.0, lo version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + +log-symbols@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + lolex@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" @@ -2819,6 +3103,13 @@ lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -2990,12 +3281,36 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" +npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + dependencies: + which "^1.2.10" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + npmlog@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" @@ -3068,6 +3383,15 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -3097,6 +3421,10 @@ output-file-sync@^1.1.2: mkdirp "^0.5.1" object-assign "^4.1.0" +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + p-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" @@ -3138,6 +3466,13 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" @@ -3156,10 +3491,14 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" @@ -3180,6 +3519,10 @@ pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -3218,6 +3561,10 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prettier@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.10.2.tgz#1af8356d1842276a99a5b5529c82dd9e9ad3cc93" + pretty-format@^20.0.3: version "20.0.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" @@ -3225,6 +3572,13 @@ pretty-format@^20.0.3: ansi-regex "^2.1.1" ansi-styles "^3.0.0" +pretty-format@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + private@^0.1.6, private@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -3259,6 +3613,10 @@ prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -3477,6 +3835,10 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-from-string@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -3531,6 +3893,12 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +rxjs@^5.4.2: + version "5.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" + dependencies: + symbol-observable "1.0.1" + safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -3567,6 +3935,16 @@ set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + shelljs@^0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.5.3.tgz#c54982b996c76ef0c1e6b59fbdc5825f5b713113" @@ -3679,6 +4057,16 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +staged-git-files@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" + +stream-to-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" + dependencies: + any-observable "^0.2.0" + string-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" @@ -3716,6 +4104,14 @@ stringify-entities@^1.0.1: is-alphanumerical "^1.0.0" is-hexadecimal "^1.0.0" +stringify-object@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" + dependencies: + get-own-enumerable-property-symbols "^2.0.1" + is-obj "^1.0.1" + is-regexp "^1.0.0" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -3736,6 +4132,14 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -3760,6 +4164,20 @@ supports-color@^3.1.2: dependencies: has-flag "^1.0.0" +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +symbol-observable@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" + symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -4043,6 +4461,12 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" +which@^1.2.10, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + which@^1.2.12: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" @@ -4111,6 +4535,10 @@ y18n@^3.2.0, y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"