diff --git a/gulpfile.js b/gulpfile.js index e6bcaf9..1702643 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -6,7 +6,9 @@ const sourcemaps = require('gulp-sourcemaps'); const browserify = require('browserify'); const source = require('vinyl-source-stream'); const buffer = require('vinyl-buffer'); -const uglify = require('gulp-uglify'); +const uglifyES = require('uglify-es'); +const composer = require('gulp-uglify/composer'); +const uglify = composer(uglifyES, console); const watchify = require('watchify'); const babel = require('babelify'); const postcss = require('gulp-postcss'); @@ -18,6 +20,7 @@ const livereload = require('gulp-livereload'); const htmlmin = require('gulp-htmlmin'); const swPrecache = require('sw-precache'); const image = require('gulp-image'); +const pump = require('pump'); // CONFIG // ============================================================ @@ -71,7 +74,7 @@ function compile(watch) { .pipe(sourcemaps.init({ loadMaps: true })) - .pipe(uglify(uglifyConf)) + .pipe(uglify()) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('./public/dist/js')); } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..f286b52 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7014 @@ +{ + "name": "javascript-practice", + "version": "1.1.2", + "lockfileVersion": 1, + "dependencies": { + "@ava/babel-preset-stage-4": { + "version": "https://registry.npmjs.org/@ava/babel-preset-stage-4/-/babel-preset-stage-4-1.0.0.tgz", + "integrity": "sha1-phO14VL1KTBUIlRrBy1H+s+yYpE=", + "dev": true + }, + "@ava/babel-preset-transform-test-files": { + "version": "https://registry.npmjs.org/@ava/babel-preset-transform-test-files/-/babel-preset-transform-test-files-2.0.1.tgz", + "integrity": "sha1-11IyzG1x3Jx+rkt2qQBP2BUB0ME=", + "dev": true + }, + "@ava/pretty-format": { + "version": "https://registry.npmjs.org/@ava/pretty-format/-/pretty-format-1.1.0.tgz", + "integrity": "sha1-0KV9Jeua6rlkO90aAwZCuRwSPig=", + "dev": true + }, + "@gulp-sourcemaps/identity-map": { + "version": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz", + "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=", + "dev": true, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", + "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "@gulp-sourcemaps/map-sources": { + "version": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", + "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "abbrev": { + "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true + }, + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" + }, + "acorn-jsx": { + "version": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "dependencies": { + "co": { + "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "json-stable-stringify": { + "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true + }, + "alphanum-sort": { + "version": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-align": { + "version": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", + "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", + "dev": true + }, + "ansi-escapes": { + "version": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "dev": true + }, + "app-root-path": { + "version": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, + "aproba": { + "version": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", + "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", + "dev": true + }, + "archy": { + "version": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "are-we-there-yet": { + "version": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "argparse": { + "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true + }, + "arr-diff": { + "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true + }, + "arr-exclude": { + "version": "https://registry.npmjs.org/arr-exclude/-/arr-exclude-1.0.0.tgz", + "integrity": "sha1-38fC5VKicHI8zaBM8xKMjL/lxjE=", + "dev": true + }, + "arr-flatten": { + "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", + "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=", + "dev": true + }, + "array-differ": { + "version": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-filter": { + "version": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-find-index": { + "version": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-map": { + "version": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-union": { + "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true + }, + "array-uniq": { + "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", + "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "dev": true + }, + "assert": { + "version": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true + }, + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "assertion-error": { + "version": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=" + }, + "ast-types": { + "version": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz", + "integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI=" + }, + "astw": { + "version": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", + "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "dev": true, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz", + "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA=", + "dev": true + } + } + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", + "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=", + "dev": true + }, + "auto-bind": { + "version": "https://registry.npmjs.org/auto-bind/-/auto-bind-1.1.0.tgz", + "integrity": "sha1-k7hk3H7gGjJigXddXHXKCnUeWWE=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true + }, + "ava": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/ava/-/ava-0.18.2.tgz", + "integrity": "sha1-eSU9FjYHcDSieAu1W1w+bD1/MS8=", + "dev": true, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + } + } + }, + "ava-init": { + "version": "https://registry.npmjs.org/ava-init/-/ava-init-0.2.0.tgz", + "integrity": "sha1-kwTItMNX1m49/a4fv/R7EZnVxV0=", + "dev": true + }, + "aws-sign2": { + "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-code-frame": { + "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", + "dev": true + }, + "babel-core": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.24.1.tgz", + "integrity": "sha1-jEKFZNzh4fQfszfsNPTDsCK1rYM=", + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + } + } + }, + "babel-generator": { + "version": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.24.1.tgz", + "integrity": "sha1-5xX0hsWN7SVknYiJRNUqoHxdlJc=", + "dev": true, + "dependencies": { + "jsesc": { + "version": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "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 + }, + "babel-helper-call-delegate": { + "version": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true + }, + "babel-helper-define-map": { + "version": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", + "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", + "dev": true + }, + "babel-helper-explode-assignable-expression": { + "version": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true + }, + "babel-helper-function-name": { + "version": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true + }, + "babel-helper-get-function-arity": { + "version": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true + }, + "babel-helper-hoist-variables": { + "version": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true + }, + "babel-helper-optimise-call-expression": { + "version": "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 + }, + "babel-helper-regex": { + "version": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", + "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", + "dev": true + }, + "babel-helper-remap-async-to-generator": { + "version": "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 + }, + "babel-helper-replace-supers": { + "version": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true + }, + "babel-helpers": { + "version": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true + }, + "babel-messages": { + "version": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true + }, + "babel-plugin-ava-throws-helper": { + "version": "https://registry.npmjs.org/babel-plugin-ava-throws-helper/-/babel-plugin-ava-throws-helper-1.0.0.tgz", + "integrity": "sha1-j+bnnS/RmDi1w2Sfic+wP9Vj4kE=", + "dev": true + }, + "babel-plugin-check-es2015-constants": { + "version": "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 + }, + "babel-plugin-espower": { + "version": "https://registry.npmjs.org/babel-plugin-espower/-/babel-plugin-espower-2.3.2.tgz", + "integrity": "sha1-VRa4/NsmyfDh2BYHSfbkxl5xJx4=", + "dev": true + }, + "babel-plugin-syntax-async-functions": { + "version": "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-exponentiation-operator": { + "version": "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-trailing-function-commas": { + "version": "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": "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 + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "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 + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "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 + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", + "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", + "dev": true + }, + "babel-plugin-transform-es2015-classes": { + "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "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 + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "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 + }, + "babel-plugin-transform-es2015-for-of": { + "version": "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 + }, + "babel-plugin-transform-es2015-function-name": { + "version": "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 + }, + "babel-plugin-transform-es2015-literals": { + "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "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 + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", + "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", + "dev": true + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "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 + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "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 + }, + "babel-plugin-transform-es2015-object-super": { + "version": "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 + }, + "babel-plugin-transform-es2015-parameters": { + "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "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 + }, + "babel-plugin-transform-es2015-spread": { + "version": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "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 + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "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 + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "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 + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "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 + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "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 + }, + "babel-plugin-transform-regenerator": { + "version": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", + "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", + "dev": true + }, + "babel-plugin-transform-strict-mode": { + "version": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true + }, + "babel-preset-es2016": { + "version": "https://registry.npmjs.org/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz", + "integrity": "sha1-+QC/k+LrwNJ235uKtZck6/2Vn4s=", + "dev": true + }, + "babel-preset-es2017": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz", + "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=", + "dev": true + }, + "babel-preset-latest": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-latest/-/babel-preset-latest-6.24.1.tgz", + "integrity": "sha1-Z33gaRVKdIXC0lxXfAL2JLhbheg=", + "dev": true + }, + "babel-register": { + "version": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", + "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", + "dev": true + }, + "babel-runtime": { + "version": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "dev": true + }, + "babel-template": { + "version": "https://registry.npmjs.org/babel-template/-/babel-template-6.24.1.tgz", + "integrity": "sha1-BK5RTx+Ts6JTfyoPYKWkX7gwgzM=", + "dev": true + }, + "babel-traverse": { + "version": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.24.1.tgz", + "integrity": "sha1-qzZnP9NW+aCUhlnnszjV/q2zFpU=", + "dev": true + }, + "babel-types": { + "version": "https://registry.npmjs.org/babel-types/-/babel-types-6.24.1.tgz", + "integrity": "sha1-oTaHncFbNga9oNkMH8dDBML/CXU=", + "dev": true + }, + "babelify": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "dev": true + }, + "babylon": { + "version": "https://registry.npmjs.org/babylon/-/babylon-6.17.0.tgz", + "integrity": "sha1-N9qUiHhIi5xOPEA4iT+jMUs/yTI=", + "dev": true + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "base62": { + "version": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz", + "integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=" + }, + "base64-js": { + "version": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", + "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true + }, + "beeper": { + "version": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "binary-extensions": { + "version": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true + }, + "block-stream": { + "version": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true + }, + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "bn.js": { + "version": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "dev": true + }, + "body-parser": { + "version": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", + "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", + "dev": true, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", + "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", + "dev": true + } + } + }, + "boom": { + "version": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true + }, + "boxen": { + "version": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", + "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", + "dev": true + }, + "brace-expansion": { + "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "dev": true + }, + "braces": { + "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true + }, + "brorand": { + "version": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-pack": { + "version": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", + "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "browser-resolve": { + "version": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "dependencies": { + "resolve": { + "version": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.4.0.tgz", + "integrity": "sha1-CJo0Y69Y0OSNjNQHCz90ZU1avKk=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", + "dev": true + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "browserify-aes": { + "version": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", + "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "dev": true + }, + "browserify-cache-api": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/browserify-cache-api/-/browserify-cache-api-3.0.1.tgz", + "integrity": "sha1-liR+hT8Gj9bg1FzHPwuyzZd47wI=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", + "dev": true + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "browserify-cipher": { + "version": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true + }, + "browserify-des": { + "version": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true + }, + "browserify-incremental": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/browserify-incremental/-/browserify-incremental-3.1.1.tgz", + "integrity": "sha1-BxPLdYckemMqnwjPG9FpuHi2Koo=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "jsonparse": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", + "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=", + "dev": true + }, + "JSONStream": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz", + "integrity": "sha1-dDSdDYlSK3HzDwoD/5vSDKbxKsA=", + "dev": true + }, + "readable-stream": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", + "dev": true + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "browserify-rsa": { + "version": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true + }, + "browserify-sign": { + "version": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true + }, + "browserify-zlib": { + "version": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true + }, + "browserslist": { + "version": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true + }, + "buf-compare": { + "version": "https://registry.npmjs.org/buf-compare/-/buf-compare-1.0.1.tgz", + "integrity": "sha1-/vKNqLgROgoNtEMLC2Rntpcws0o=", + "dev": true + }, + "buffer": { + "version": "https://registry.npmjs.org/buffer/-/buffer-5.0.6.tgz", + "integrity": "sha1-LqZp9+7Atu2gWwj4tf9mGyhXNYg=", + "dev": true + }, + "buffer-shims": { + "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "buffer-xor": { + "version": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", + "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", + "dev": true + }, + "cached-path-relative": { + "version": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", + "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", + "dev": true + }, + "caching-transform": { + "version": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", + "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", + "dev": true, + "dependencies": { + "md5-hex": { + "version": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", + "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", + "dev": true + } + } + }, + "call-matcher": { + "version": "https://registry.npmjs.org/call-matcher/-/call-matcher-1.0.1.tgz", + "integrity": "sha1-UTTQd5hPcSpU2tPL9i3ijc5BbKg=", + "dev": true + }, + "call-signature": { + "version": "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz", + "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=", + "dev": true + }, + "caller-path": { + "version": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true + }, + "callsites": { + "version": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true + }, + "caniuse-api": { + "version": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "dependencies": { + "lodash.memoize": { + "version": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + } + } + }, + "caniuse-db": { + "version": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000665.tgz", + "integrity": "sha1-6E9Cd5NfKV9Ub4UzywtBCoQVuXI=", + "dev": true + }, + "capture-stack-trace": { + "version": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "caseless": { + "version": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true + }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=" + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "chokidar": { + "version": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", + "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=", + "dev": true + }, + "ci-info": { + "version": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", + "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=", + "dev": true + }, + "cipher-base": { + "version": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz", + "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=", + "dev": true + }, + "circular-json": { + "version": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", + "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", + "dev": true + }, + "clap": { + "version": "https://registry.npmjs.org/clap/-/clap-1.1.3.tgz", + "integrity": "sha1-s7026T3Uy/s5WjwmiWNSRFJlwFs=", + "dev": true + }, + "clean-stack": { + "version": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.1.1.tgz", + "integrity": "sha1-obNxESLfFi33x8ubPARw8oy1its=", + "dev": true + }, + "clean-yaml-object": { + "version": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", + "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", + "dev": true + }, + "cli-boxes": { + "version": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cli-cursor": { + "version": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true + }, + "cli-spinners": { + "version": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.0.0.tgz", + "integrity": "sha1-75h+09SDkaw9q5GAtAanQhgNbmo=", + "dev": true + }, + "cli-truncate": { + "version": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true + }, + "cli-width": { + "version": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", + "dev": true + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true + }, + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-stats": { + "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "co-with-promise": { + "version": "https://registry.npmjs.org/co-with-promise/-/co-with-promise-4.6.0.tgz", + "integrity": "sha1-QT59tvWJOmC5Qs9JLEvsk9tBWrc=", + "dev": true, + "dependencies": { + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz", + "integrity": "sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q=", + "dev": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", + "integrity": "sha1-0dpn9UglY7t89X8oauKCLs+/NnA=", + "dev": true + } + } + }, + "coa": { + "version": "https://registry.npmjs.org/coa/-/coa-1.0.1.tgz", + "integrity": "sha1-f5WTRs/IcZ4/cjPNaFKFSnxn2KM=", + "dev": true + }, + "code-excerpt": { + "version": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-2.1.0.tgz", + "integrity": "sha1-XcwIHoj0p+O1VOnjXX7yMtR/gUc=", + "dev": true + }, + "code-point-at": { + "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color": { + "version": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true + }, + "color-convert": { + "version": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true + }, + "color-name": { + "version": "https://registry.npmjs.org/color-name/-/color-name-1.1.2.tgz", + "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=", + "dev": true + }, + "color-string": { + "version": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true + }, + "colormin": { + "version": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true + }, + "colors": { + "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-source-map": { + "version": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "dev": true, + "dependencies": { + "convert-source-map": { + "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "combined-stream": { + "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true + }, + "commander": { + "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true + }, + "common-path-prefix": { + "version": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-1.0.0.tgz", + "integrity": "sha1-zVL28HEuC6q5fW+XModPIvR3UsA=", + "dev": true + }, + "commondir": { + "version": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "concat-map": { + "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true + } + } + }, + "configstore": { + "version": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", + "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", + "dev": true, + "dependencies": { + "dot-prop": { + "version": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true + } + } + }, + "console-browserify": { + "version": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true + }, + "console-control-strings": { + "version": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-type": { + "version": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "dev": true + }, + "convert-source-map": { + "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "convert-to-spaces": { + "version": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz", + "integrity": "sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=", + "dev": true + }, + "core-assert": { + "version": "https://registry.npmjs.org/core-assert/-/core-assert-0.2.1.tgz", + "integrity": "sha1-+F4s+b/tKPdzzIs/pcW2m9wC/j8=", + "dev": true + }, + "core-js": { + "version": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", + "dev": true + }, + "core-util-is": { + "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.1.3.tgz", + "integrity": "sha1-lSdx6w3dwcs/ovb75RpSLpOz7go=", + "dev": true, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true + }, + "create-error-class": { + "version": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true + }, + "create-hash": { + "version": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.2.tgz", + "integrity": "sha1-USEAYte7dHn2xlu0GpIgix1hq60=", + "dev": true + }, + "create-hmac": { + "version": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.4.tgz", + "integrity": "sha1-0/tLolPriz9W456i+8uK90e9MXA=", + "dev": true + }, + "cross-spawn": { + "version": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true + }, + "cross-spawn-async": { + "version": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", + "dev": true + }, + "cryptiles": { + "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true + }, + "crypto-browserify": { + "version": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.0.tgz", + "integrity": "sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=", + "dev": true + }, + "crypto-random-string": { + "version": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css": { + "version": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", + "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", + "dev": true, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true + } + } + }, + "css-color-names": { + "version": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true + }, + "csso": { + "version": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "currently-unhandled": { + "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true + }, + "d": { + "version": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true + }, + "dashdash": { + "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-fns": { + "version": "https://registry.npmjs.org/date-fns/-/date-fns-1.28.4.tgz", + "integrity": "sha1-eTiuw0ujH8i9E00jRLwuC7/ZUWU=", + "dev": true + }, + "date-now": { + "version": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "date-time": { + "version": "https://registry.npmjs.org/date-time/-/date-time-0.1.1.tgz", + "integrity": "sha1-7S9tk9l5DOL9ZtW1/z7dW7y/Owc=", + "dev": true + }, + "dateformat": { + "version": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", + "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=", + "dev": true + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.6.6.tgz", + "integrity": "sha1-qfpvvpykPPHnn3O3XAGJy7fW21o=", + "dev": true + }, + "debug-fabulous": { + "version": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.1.0.tgz", + "integrity": "sha1-rQ6gel1RkyT7VYQqjzTuWcf4/2w=", + "dev": true, + "dependencies": { + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "decamelize": { + "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-assign": { + "version": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", + "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", + "dev": true + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=" + } + } + }, + "deep-equal": { + "version": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-extend": { + "version": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz", + "integrity": "sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=", + "dev": true + }, + "deep-is": { + "version": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deep-strict-equal": { + "version": "https://registry.npmjs.org/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz", + "integrity": "sha1-SgeBR6irV/ag1PVUckPNIvROtOQ=", + "dev": true + }, + "defaults": { + "version": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true + }, + "defined": { + "version": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "dependencies": { + "globby": { + "version": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "dev": true + }, + "deprecated": { + "version": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "dev": true + }, + "deps-sort": { + "version": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "des.js": { + "version": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true + }, + "detect-file": { + "version": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", + "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", + "dev": true + }, + "detect-indent": { + "version": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true + }, + "detect-newline": { + "version": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "detective": { + "version": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz", + "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", + "dev": true, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz", + "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA=", + "dev": true + } + } + }, + "diff": { + "version": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "diffie-hellman": { + "version": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true + }, + "doctrine": { + "version": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", + "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "domain-browser": { + "version": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "dot-prop": { + "version": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", + "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", + "dev": true + }, + "duplexer": { + "version": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer2": { + "version": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "duplexer3": { + "version": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecc-jsbn": { + "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true + }, + "ee-first": { + "version": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.9.tgz", + "integrity": "sha1-2xy6KiauvMovf1uLA0VURoYJFX0=", + "dev": true + }, + "elegant-spinner": { + "version": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, + "elliptic": { + "version": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true + }, + "empower-core": { + "version": "https://registry.npmjs.org/empower-core/-/empower-core-0.6.1.tgz", + "integrity": "sha1-bBh/UC/O91VNV5MzlqrGVUg3crE=", + "dev": true + }, + "end-of-stream": { + "version": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "dependencies": { + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true + } + } + }, + "enhance-visitors": { + "version": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", + "integrity": "sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo=", + "dev": true + }, + "equal-length": { + "version": "https://registry.npmjs.org/equal-length/-/equal-length-1.0.1.tgz", + "integrity": "sha1-IcoRLUirJLTh5//A5TOdMf38J0w=", + "dev": true + }, + "error-ex": { + "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true + }, + "es3ify": { + "version": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz", + "integrity": "sha1-rZ+l3xrjTz8x4SEbWBiy1RB439E=", + "dependencies": { + "esprima-fb": { + "version": "3001.1.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", + "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE=" + } + } + }, + "es5-ext": { + "version": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.15.tgz", + "integrity": "sha1-wzClk0we4hKEp8CBqG5f2TfJHqY=", + "dev": true + }, + "es6-iterator": { + "version": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "dev": true + }, + "es6-map": { + "version": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true + }, + "es6-set": { + "version": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true + }, + "es6-symbol": { + "version": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true + }, + "es6-weak-map": { + "version": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true + }, + "escape-string-regexp": { + "version": "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, + "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 + } + } + }, + "escope": { + "version": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true + }, + "eslint": { + "version": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "dev": true, + "dependencies": { + "json-stable-stringify": { + "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true + }, + "user-home": { + "version": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true + } + } + }, + "eslint-config-xo": { + "version": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.18.1.tgz", + "integrity": "sha1-87yHOzOyyCUT2IHqyy7jQoQHrTM=", + "dev": true + }, + "eslint-formatter-pretty": { + "version": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-1.1.0.tgz", + "integrity": "sha1-q00G2gL+2ME66fDcVApDPvftb14=", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": { + "version": "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": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", + "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", + "dev": true + } + } + }, + "eslint-import-resolver-node": { + "version": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", + "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", + "dev": true + }, + "eslint-module-utils": { + "version": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz", + "integrity": "sha1-pvjCHZATWHWc3DXbrBmCrh7li84=", + "dev": true, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "eslint-plugin-ava": { + "version": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-4.2.0.tgz", + "integrity": "sha1-EuRmRlnB+ueJX6PzRsMTzriQfHc=", + "dev": true + }, + "eslint-plugin-import": { + "version": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", + "integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=", + "dev": true, + "dependencies": { + "doctrine": { + "version": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "eslint-plugin-no-use-extend-native": { + "version": "https://registry.npmjs.org/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.3.12.tgz", + "integrity": "sha1-OtmgDC3yO11/f2vpFVCYWkq3Aeo=", + "dev": true + }, + "eslint-plugin-promise": { + "version": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", + "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=", + "dev": true + }, + "eslint-plugin-unicorn": { + "version": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-2.1.1.tgz", + "integrity": "sha1-PpKUNmeZtxXham34kVlJW2iTDLM=", + "dev": true + }, + "esmangle-evaluator": { + "version": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz", + "integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY=" + }, + "espower-location-detector": { + "version": "https://registry.npmjs.org/espower-location-detector/-/espower-location-detector-1.0.0.tgz", + "integrity": "sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU=", + "dev": true, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "espree": { + "version": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", + "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", + "dev": true, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", + "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=", + "dev": true + } + } + }, + "esprima-fb": { + "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", + "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE=" + }, + "espurify": { + "version": "https://registry.npmjs.org/espurify/-/espurify-1.7.0.tgz", + "integrity": "sha1-HFz2y8zDLm9jk4C9T5kfq5up0iY=", + "dev": true + }, + "esquery": { + "version": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true + }, + "esrecurse": { + "version": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", + "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=", + "dev": true, + "dependencies": { + "estraverse": { + "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", + "integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI=", + "dev": true + } + } + }, + "estraverse": { + "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "event-emitter": { + "version": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true + }, + "event-stream": { + "version": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true + }, + "events": { + "version": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", + "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "dev": true + }, + "execa": { + "version": "https://registry.npmjs.org/execa/-/execa-0.5.1.tgz", + "integrity": "sha1-3j+4XLjW6RyFvLzrFkWBeFy1ezY=", + "dev": true + }, + "exit-hook": { + "version": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true + }, + "expand-range": { + "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true + }, + "expand-tilde": { + "version": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "dev": true + }, + "extend": { + "version": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extglob": { + "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true + }, + "extsprintf": { + "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "falafel": { + "version": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz", + "integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=" + }, + "fancy-log": { + "version": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "dev": true + }, + "fast-levenshtein": { + "version": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.7.3.tgz", + "integrity": "sha1-zEB0x/Sk39A69U3WXDVLE1EyzhE=", + "dev": true + }, + "figures": { + "version": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true + }, + "file-entry-cache": { + "version": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true + }, + "filename-regex": { + "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true + }, + "filled-array": { + "version": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", + "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=", + "dev": true + }, + "find-cache-dir": { + "version": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true + }, + "find-index": { + "version": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "find-parent-dir": { + "version": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", + "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", + "dev": true + }, + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true + }, + "findup-sync": { + "version": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", + "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", + "dev": true + }, + "fined": { + "version": "https://registry.npmjs.org/fined/-/fined-1.0.2.tgz", + "integrity": "sha1-WyhCS3YNdZiWC374SA3/itNmDpc=", + "dev": true + }, + "first-chunk-stream": { + "version": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flagged-respawn": { + "version": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", + "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", + "dev": true + }, + "flat-cache": { + "version": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", + "dev": true + }, + "flatten": { + "version": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "fn-name": { + "version": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", + "dev": true + }, + "for-in": { + "version": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true + }, + "foreach": { + "version": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "forever-agent": { + "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true + }, + "from": { + "version": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "fs-exists-sync": { + "version": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", + "dev": true + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz", + "integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=", + "dev": true, + "optional": true, + "dependencies": { + "abbrev": { + "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "optional": true + }, + "aproba": { + "version": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", + "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz", + "integrity": "sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "aws4": { + "version": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true + }, + "block-stream": { + "version": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true + }, + "boom": { + "version": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true + }, + "brace-expansion": { + "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", + "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", + "dev": true + }, + "buffer-shims": { + "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "caseless": { + "version": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true, + "optional": true + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "combined-stream": { + "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true + }, + "commander": { + "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "optional": true + }, + "concat-map": { + "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cryptiles": { + "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true + }, + "dashdash": { + "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "optional": true + }, + "deep-extend": { + "version": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz", + "integrity": "sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=", + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true + }, + "escape-string-regexp": { + "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "optional": true + }, + "extend": { + "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "forever-agent": { + "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", + "integrity": "sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=", + "dev": true, + "optional": true + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz", + "integrity": "sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=", + "dev": true + }, + "fstream-ignore": { + "version": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "https://registry.npmjs.org/gauge/-/gauge-2.7.3.tgz", + "integrity": "sha1-HCOFX5YvF7OtPQ3HRD8wRULt/gk=", + "dev": true, + "optional": true + }, + "generate-function": { + "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true, + "optional": true + }, + "generate-object-property": { + "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "optional": true + }, + "getpass": { + "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "optional": true + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "optional": true + }, + "has-unicode": { + "version": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "hawk": { + "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true + }, + "hoek": { + "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true + }, + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true + }, + "is-my-json-valid": { + "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", + "dev": true, + "optional": true + }, + "is-property": { + "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true, + "optional": true + }, + "is-typedarray": { + "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isstream": { + "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "dev": true, + "optional": true + }, + "jsbn": { + "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true, + "optional": true + }, + "json-stringify-safe": { + "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "jsonpointer": { + "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true, + "optional": true + }, + "jsprim": { + "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", + "dev": true, + "optional": true + }, + "mime-db": { + "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz", + "integrity": "sha1-6v/NDk/Gk1z4E02iRuLmw1MFrf8=", + "dev": true + }, + "mime-types": { + "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz", + "integrity": "sha1-9+99l1g/yvO30oK2+LVnnaselO4=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz", + "integrity": "sha1-ZArFUZj2qSWXLgwWxKwmoDTV7Mk=", + "dev": true, + "optional": true + }, + "nopt": { + "version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true + }, + "npmlog": { + "version": "https://registry.npmjs.org/npmlog/-/npmlog-4.0.2.tgz", + "integrity": "sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=", + "dev": true, + "optional": true + }, + "number-is-nan": { + "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true, + "optional": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "optional": true + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "optional": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.3.1.tgz", + "integrity": "sha1-kYwLO802Z5dyuvE1say0wWUe150=", + "dev": true, + "optional": true + }, + "rc": { + "version": "https://registry.npmjs.org/rc/-/rc-1.1.7.tgz", + "integrity": "sha1-xepWS7B6/5/TpbMukGwdOmWUD+o=", + "dev": true, + "optional": true, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", + "dev": true, + "optional": true + }, + "request": { + "version": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "optional": true + }, + "rimraf": { + "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "dev": true + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "sntp": { + "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true + }, + "sshpk": { + "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.2.tgz", + "integrity": "sha1-1agEziJpVRVjjnmNviMnPeBwpfo=", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "string-width": { + "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + }, + "stringstream": { + "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true + }, + "strip-json-comments": { + "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "optional": true + }, + "tar": { + "version": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true + }, + "tar-pack": { + "version": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.3.0.tgz", + "integrity": "sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=", + "dev": true, + "optional": true, + "dependencies": { + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", + "dev": true, + "optional": true + } + } + }, + "tough-cookie": { + "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true, + "optional": true + }, + "tweetnacl": { + "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "uid-number": { + "version": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true, + "optional": true + }, + "verror": { + "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz", + "integrity": "sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=", + "dev": true, + "optional": true + }, + "wrappy": { + "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true, + "optional": true + } + } + }, + "fstream": { + "version": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true + }, + "function-bind": { + "version": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "dev": true + }, + "gauge": { + "version": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true + }, + "gaze": { + "version": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true + }, + "generate-function": { + "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true + }, + "get-caller-file": { + "version": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-port": { + "version": "https://registry.npmjs.org/get-port/-/get-port-2.1.0.tgz", + "integrity": "sha1-h4P53OvR7qSVozThpqJR54iHqxo=", + "dev": true + }, + "get-set-props": { + "version": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", + "integrity": "sha1-mYR1wXhEVobQsyJG2l3428++jqM=", + "dev": true + }, + "get-stdin": { + "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true + }, + "getpass": { + "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true + }, + "glob-base": { + "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true + }, + "glob-parent": { + "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true + }, + "glob-stream": { + "version": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true + } + } + }, + "glob-watcher": { + "version": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true + }, + "glob2base": { + "version": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true + }, + "global-modules": { + "version": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "dev": true + }, + "global-prefix": { + "version": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", + "dev": true + }, + "globals": { + "version": "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz", + "integrity": "sha1-DAymltm5u2lNLlRwvTd3fKrVAoY=", + "dev": true + }, + "globby": { + "version": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true + }, + "globule": { + "version": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "lru-cache": { + "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true + } + } + }, + "glogg": { + "version": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true + }, + "got": { + "version": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "gulp": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + } + } + }, + "gulp-bro": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/gulp-bro/-/gulp-bro-1.0.2.tgz", + "integrity": "sha1-5W4GDzuf3hgJkCunsnkd8NnEK3A=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", + "dev": true + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "gulp-livereload": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/gulp-livereload/-/gulp-livereload-3.8.1.tgz", + "integrity": "sha1-APdEstdJ0+njdGWJyKRKysd5tQ8=", + "dev": true, + "dependencies": { + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true + }, + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true + }, + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + } + } + }, + "gulp-postcss": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/gulp-postcss/-/gulp-postcss-6.4.0.tgz", + "integrity": "sha1-eKMuPIeqbNzsWuHJBeGW1HjoxdU=", + "dev": true + }, + "gulp-sass": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.1.0.tgz", + "integrity": "sha1-U9xLaKH13f5EJKtMJHZVJpqLdLc=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", + "dev": true + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "gulp-sourcemaps": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.0.tgz", + "integrity": "sha1-fMzomaijv8oVk6M0jQ+/Qd0/UeU=", + "dev": true, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", + "dev": true + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true + } + } + }, + "gulp-svgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/gulp-svgo/-/gulp-svgo-1.0.3.tgz", + "integrity": "sha1-9q0hnygc3JrD4ObBc9XHe7qM1pI=", + "dev": true, + "dependencies": { + "csso": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.0.0.tgz", + "integrity": "sha1-F4tDpEYhIhwndWCG9THgL0KQDug=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "js-yaml": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "svgo": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.6.6.tgz", + "integrity": "sha1-s0CIkDbyD5tEdUMHfQ9Vc+0ETAg=", + "dev": true + } + } + }, + "gulp-uglify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-2.1.2.tgz", + "integrity": "sha1-bbhbHQ7mPRgFhZK2WGSdZcLsRUE=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", + "dev": true + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "readable-stream": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", + "dev": true + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "gulplog": { + "version": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true + }, + "har-schema": { + "version": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true + }, + "has": { + "version": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true + }, + "has-color": { + "version": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true + }, + "has-unicode": { + "version": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-yarn": { + "version": "https://registry.npmjs.org/has-yarn/-/has-yarn-1.0.0.tgz", + "integrity": "sha1-ieJdtgS3Jcj1l2//Ct3JIbgopac=", + "dev": true + }, + "hash.js": { + "version": "https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz", + "integrity": "sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=", + "dev": true + }, + "hawk": { + "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true + }, + "hmac-drbg": { + "version": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true + }, + "hoek": { + "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true + }, + "homedir-polyfill": { + "version": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true + }, + "hosted-git-info": { + "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz", + "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc=", + "dev": true + }, + "html-comment-regex": { + "version": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "htmlescape": { + "version": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "http-errors": { + "version": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", + "dev": true + }, + "http-signature": { + "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true + }, + "https-browserify": { + "version": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "husky": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-0.13.4.tgz", + "integrity": "sha1-SHhcUCjeNFKlHEjBLE+UshJKFAc=", + "dev": true, + "dependencies": { + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + } + } + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + }, + "ieee754": { + "version": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "ignore": { + "version": "https://registry.npmjs.org/ignore/-/ignore-3.3.0.tgz", + "integrity": "sha1-OBLSLL6RJfLCtJFXVaG4q9dFoAE=", + "dev": true + }, + "ignore-by-default": { + "version": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "immediate": { + "version": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "imurmurhash": { + "version": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "https://registry.npmjs.org/indent-string/-/indent-string-3.1.0.tgz", + "integrity": "sha1-CP9DNGAziDmbMp5rlTjcejz13n0=", + "dev": true + }, + "indexes-of": { + "version": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "inline-process-browser": { + "version": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz", + "integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI=" + }, + "inline-source-map": { + "version": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "inquirer": { + "version": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "dependencies": { + "cli-cursor": { + "version": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true + }, + "figures": { + "version": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true + }, + "onetime": { + "version": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true + } + } + }, + "insert-module-globals": { + "version": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "interpret": { + "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "dev": true + }, + "invariant": { + "version": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true + }, + "invert-kv": { + "version": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "irregular-plurals": { + "version": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.2.0.tgz", + "integrity": "sha1-OPKZg0uowAwwvpxVThNyaXUv86w=", + "dev": true + }, + "is-absolute": { + "version": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "dev": true + }, + "is-absolute-url": { + "version": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-arrayish": { + "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true + }, + "is-buffer": { + "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true + }, + "is-ci": { + "version": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", + "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", + "dev": true + }, + "is-directory": { + "version": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", + "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", + "dev": true + }, + "is-equal-shallow": { + "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true + }, + "is-error": { + "version": "https://registry.npmjs.org/is-error/-/is-error-2.2.1.tgz", + "integrity": "sha1-aEqW2EB2V3yY9M20DG0mpRI78Zw=", + "dev": true + }, + "is-extendable": { + "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true + }, + "is-generator-fn": { + "version": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", + "dev": true + }, + "is-get-set-prop": { + "version": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", + "integrity": "sha1-JzGHfk14pqae3M5rudaLB3nnYxI=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true + }, + "is-js-type": { + "version": "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz", + "integrity": "sha1-c2FwBtZZtOtHKbunR9KHgt8PfiI=", + "dev": true + }, + "is-my-json-valid": { + "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", + "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", + "dev": true + }, + "is-npm": { + "version": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true + }, + "is-obj": { + "version": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-obj-prop": { + "version": "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz", + "integrity": "sha1-s03nnEULjXxzqyzfZ9yHWtuF+A4=", + "dev": true + }, + "is-observable": { + "version": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", + "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "dev": true + }, + "is-path-cwd": { + "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true + }, + "is-path-inside": { + "version": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true + }, + "is-plain-obj": { + "version": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-posix-bracket": { + "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-property": { + "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-proto-prop": { + "version": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-1.0.0.tgz", + "integrity": "sha1-s5UflcCJkk+11PzaZUKrPoPisiA=", + "dev": true + }, + "is-redirect": { + "version": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-relative": { + "version": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "dev": true + }, + "is-resolvable": { + "version": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", + "dev": true + }, + "is-retry-allowed": { + "version": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true + }, + "is-typedarray": { + "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "dev": true + }, + "is-url": { + "version": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", + "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=", + "dev": true + }, + "is-utf8": { + "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "isstream": { + "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jest-diff": { + "version": "https://registry.npmjs.org/jest-diff/-/jest-diff-18.1.0.tgz", + "integrity": "sha1-T/eedN2YjBORlbNl3GXYf2BvSAM=", + "dev": true + }, + "jest-file-exists": { + "version": "https://registry.npmjs.org/jest-file-exists/-/jest-file-exists-17.0.0.tgz", + "integrity": "sha1-f2Prc6HEOhP0Yb4mF2i0WvLN0Wk=", + "dev": true + }, + "jest-matcher-utils": { + "version": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-18.1.0.tgz", + "integrity": "sha1-GsRlGVXuKmDO8ef8yYzf13PA+TI=", + "dev": true + }, + "jest-mock": { + "version": "https://registry.npmjs.org/jest-mock/-/jest-mock-18.0.0.tgz", + "integrity": "sha1-XCSIRuoz+lWLUm9TEqtKZ2XkibM=", + "dev": true + }, + "jest-snapshot": { + "version": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-18.1.0.tgz", + "integrity": "sha1-VbltLuY5ybznb4fyo/1Atxx6WRY=", + "dev": true + }, + "jest-util": { + "version": "https://registry.npmjs.org/jest-util/-/jest-util-18.1.0.tgz", + "integrity": "sha1-OpnDIRSrF/hL4JQ4JScAbm1L/Go=", + "dev": true + }, + "jodid25519": { + "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "dev": true, + "optional": true + }, + "js-base64": { + "version": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", + "dev": true + }, + "js-tokens": { + "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", + "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", + "dev": true + }, + "js-types": { + "version": "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz", + "integrity": "sha1-0kLmSU7Vcq08koCfyL7X92h8vwM=", + "dev": true + }, + "js-yaml": { + "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "dependencies": { + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + } + } + }, + "jsbn": { + "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "json-schema": { + "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stable-stringify": { + "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true + }, + "json-stringify-safe": { + "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonify": { + "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonparse": { + "version": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.0.tgz", + "integrity": "sha1-hfwkWx2SWazGlBlguQWt9k594Og=", + "dev": true + }, + "jsonpointer": { + "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "JSONStream": { + "version": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "dev": true + }, + "jsprim": { + "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dev": true, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "jstransform": { + "version": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz", + "integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=" + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.0.tgz", + "integrity": "sha1-tYq+TVwEStM3JqjBUltIz4kb/wc=", + "dev": true + }, + "labeled-stream-splicer": { + "version": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "dev": true + }, + "last-line-stream": { + "version": "https://registry.npmjs.org/last-line-stream/-/last-line-stream-1.0.0.tgz", + "integrity": "sha1-0bZNafhv8kry0EiDos7uFFIKVgA=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "latest-version": { + "version": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", + "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", + "dev": true + }, + "lazy-cache": { + "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lazy-req": { + "version": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", + "dev": true + }, + "lcid": { + "version": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true + }, + "levn": { + "version": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true + }, + "lexical-scope": { + "version": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "dev": true + }, + "lie": { + "version": "https://registry.npmjs.org/lie/-/lie-3.0.2.tgz", + "integrity": "sha1-/9oh17uibzd8rYZdNkmy/Izjn+o=" + }, + "liftoff": { + "version": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", + "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", + "dev": true + }, + "lint-staged": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-3.6.0.tgz", + "integrity": "sha1-zajwvvFueSjMFLc1GGrhLNZiWZw=", + "dev": true, + "dependencies": { + "cosmiconfig": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-1.1.0.tgz", + "integrity": "sha1-DeoPmATv37kp+7GxiOJVU+oFPTc=", + "dev": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true + }, + "execa": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.6.3.tgz", + "integrity": "sha1-V7aaWU8IF1nGnlNw8NF7nLEWWP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "listr": { + "version": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz", + "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=", + "dev": true, + "dependencies": { + "figures": { + "version": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true + }, + "indent-string": { + "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true + } + } + }, + "listr-silent-renderer": { + "version": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz", + "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=", + "dev": true, + "dependencies": { + "figures": { + "version": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true + } + } + }, + "listr-verbose-renderer": { + "version": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz", + "integrity": "sha1-RNwBuww0oDxXIVTU0Izemx3FYg8=", + "dev": true, + "dependencies": { + "cli-cursor": { + "version": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true + }, + "figures": { + "version": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true + }, + "onetime": { + "version": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true + } + } + }, + "livereload-js": { + "version": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", + "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=", + "dev": true + }, + "load-json-file": { + "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true + }, + "localforage": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.5.0.tgz", + "integrity": "sha1-a5lOGbVmEfqF3zmS3zl6xKtm6BU=" + }, + "locate-path": { + "version": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash._baseassign": { + "version": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true + }, + "lodash._basecopy": { + "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._bindcallback": { + "version": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true + }, + "lodash._getnative": { + "version": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.assign": { + "version": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true + }, + "lodash.assignwith": { + "version": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", + "integrity": "sha1-EnqX8CrcQXUalU0ksN4X4QDgOOs=", + "dev": true + }, + "lodash.camelcase": { + "version": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.chunk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", + "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=", + "dev": true + }, + "lodash.clonedeep": { + "version": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.cond": { + "version": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "dev": true + }, + "lodash.debounce": { + "version": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.difference": { + "version": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.escape": { + "version": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true + }, + "lodash.flatten": { + "version": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.isarguments": { + "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isempty": { + "version": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", + "dev": true + }, + "lodash.isequal": { + "version": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.isplainobject": { + "version": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.kebabcase": { + "version": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "lodash.keys": { + "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true + }, + "lodash.mapvalues": { + "version": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.memoize": { + "version": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "lodash.mergewith": { + "version": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", + "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", + "dev": true + }, + "lodash.pick": { + "version": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.restparam": { + "version": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.snakecase": { + "version": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", + "dev": true + }, + "lodash.template": { + "version": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true + }, + "lodash.templatesettings": { + "version": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true + }, + "lodash.uniq": { + "version": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.upperfirst": { + "version": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984=", + "dev": true + }, + "log-symbols": { + "version": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true + }, + "log-update": { + "version": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "dependencies": { + "cli-cursor": { + "version": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true + }, + "onetime": { + "version": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true + } + } + }, + "longest": { + "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true + }, + "loud-rejection": { + "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true + }, + "lowercase-keys": { + "version": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "lru-cache": { + "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", + "dev": true + }, + "macaddress": { + "version": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "make-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", + "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "dev": true + }, + "make-error": { + "version": "https://registry.npmjs.org/make-error/-/make-error-1.2.3.tgz", + "integrity": "sha1-bEQC33MuCXesb691SlB0s9Kx0Z0=", + "dev": true + }, + "make-error-cause": { + "version": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", + "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", + "dev": true + }, + "map-cache": { + "version": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-stream": { + "version": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "matcher": { + "version": "https://registry.npmjs.org/matcher/-/matcher-0.1.2.tgz", + "integrity": "sha1-7yDL3mTCTFDMYa9bg+4LG4/wAQE=", + "dev": true + }, + "math-expression-evaluator": { + "version": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "max-timeout": { + "version": "https://registry.npmjs.org/max-timeout/-/max-timeout-1.0.0.tgz", + "integrity": "sha1-to9povmeC0dv1Msj4gWcp1BxXh8=", + "dev": true + }, + "md5-hex": { + "version": "https://registry.npmjs.org/md5-hex/-/md5-hex-2.0.0.tgz", + "integrity": "sha1-0FiOnxx0lUSS7NJKwKxs6ZfZLjM=", + "dev": true + }, + "md5-o-matic": { + "version": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", + "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", + "dev": true + }, + "media-typer": { + "version": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "dependencies": { + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "load-json-file": { + "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + }, + "path-type": { + "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true + }, + "read-pkg": { + "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true + }, + "read-pkg-up": { + "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true + } + } + }, + "micromatch": { + "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true + }, + "miller-rabin": { + "version": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "dev": true + }, + "mime-db": { + "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "dev": true + }, + "mime-types": { + "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "dev": true + }, + "mimic-fn": { + "version": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "mini-lr": { + "version": "https://registry.npmjs.org/mini-lr/-/mini-lr-0.1.9.tgz", + "integrity": "sha1-AhmdJzR5U9H9HW297UJh8Yey0PY=", + "dev": true + }, + "minimalistic-assert": { + "version": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true + }, + "module-deps": { + "version": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=", + "dev": true + }, + "multimatch": { + "version": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true + }, + "multipipe": { + "version": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "dependencies": { + "duplexer2": { + "version": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true + } + } + }, + "mute-stream": { + "version": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "dev": true + }, + "natives": { + "version": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", + "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", + "dev": true + }, + "natural-compare": { + "version": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-gyp": { + "version": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.1.tgz", + "integrity": "sha1-GVYQZ/8YVGSt7UeCEmgfR/1XjLw=", + "dev": true + }, + "node-sass": { + "version": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.2.tgz", + "integrity": "sha1-QBL6K9EpsdY2URfojZ2gUA2Z2mQ=", + "dev": true, + "dependencies": { + "cross-spawn": { + "version": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true + }, + "gaze": { + "version": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "dev": true + }, + "globule": { + "version": "https://registry.npmjs.org/globule/-/globule-1.1.0.tgz", + "integrity": "sha1-xJNS5NwYPYWJPuglOF65lLtt9F8=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.16.6.tgz", + "integrity": "sha1-0iyaxmAojzhD4Wun0rXQbMon13c=", + "dev": true + }, + "lodash.assign": { + "version": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + } + } + }, + "node-status-codes": { + "version": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", + "dev": true + }, + "nopt": { + "version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true + }, + "normalize-package-data": { + "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", + "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", + "dev": true + }, + "normalize-path": { + "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true + }, + "normalize-range": { + "version": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true + }, + "npm-path": { + "version": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.3.tgz", + "integrity": "sha1-Fc/04ciaONp39W9gVbJPl137K74=", + "dev": true + }, + "npm-run-path": { + "version": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true + }, + "npm-which": { + "version": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "dev": true + }, + "npmlog": { + "version": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", + "integrity": "sha1-3Fm+6F9k8A7UJO+yrweD3yXRwLU=", + "dev": true + }, + "num2fraction": { + "version": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "obj-props": { + "version": "https://registry.npmjs.org/obj-props/-/obj-props-1.1.0.tgz", + "integrity": "sha1-YmMT+qRCvv1KROmgLDy2vek3tRE=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-keys": { + "version": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" + }, + "object.omit": { + "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true + }, + "observable-to-promise": { + "version": "https://registry.npmjs.org/observable-to-promise/-/observable-to-promise-0.4.0.tgz", + "integrity": "sha1-KK/nFkUwjy1B1x9HrT/s4aN35Ss=", + "dev": true + }, + "on-finished": { + "version": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true + }, + "onetime": { + "version": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true + }, + "option-chain": { + "version": "https://registry.npmjs.org/option-chain/-/option-chain-0.1.1.tgz", + "integrity": "sha1-6bgR4AbxwPVIAvKClb/Ilw+Nz70=", + "dev": true + }, + "optionator": { + "version": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "dependencies": { + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "ora": { + "version": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "dependencies": { + "cli-cursor": { + "version": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true + }, + "cli-spinners": { + "version": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "onetime": { + "version": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true + } + } + }, + "orchestrator": { + "version": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true + }, + "ordered-read-streams": { + "version": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true + }, + "os-browserify": { + "version": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", + "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "dev": true + }, + "os-homedir": { + "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true + }, + "os-tmpdir": { + "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true + }, + "outpipe": { + "version": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", + "dev": true + }, + "p-finally": { + "version": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true + }, + "p-map": { + "version": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", + "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=", + "dev": true + }, + "package-hash": { + "version": "https://registry.npmjs.org/package-hash/-/package-hash-1.2.0.tgz", + "integrity": "sha1-AD5WzVe3NqbtYRTMK4FUJnJ3DkQ=", + "dev": true, + "dependencies": { + "md5-hex": { + "version": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", + "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", + "dev": true + } + } + }, + "package-json": { + "version": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", + "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", + "dev": true + }, + "pako": { + "version": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parents": { + "version": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true + }, + "parse-asn1": { + "version": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true + }, + "parse-filepath": { + "version": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", + "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "dev": true + }, + "parse-glob": { + "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true + }, + "parse-json": { + "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true + }, + "parse-ms": { + "version": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", + "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", + "dev": true + }, + "parse-passwd": { + "version": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseurl": { + "version": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "dev": true + }, + "path-browserify": { + "version": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-platform": { + "version": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-root": { + "version": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true + }, + "path-root-regex": { + "version": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true + }, + "pause-stream": { + "version": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true + }, + "pbkdf2": { + "version": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.9.tgz", + "integrity": "sha1-8sSyWmAAWLPDdzwIbDfbvuH/5pM=", + "dev": true + }, + "performance-now": { + "version": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true + }, + "pjs-problems": { + "version": "git+https://github.com/practicejavascript/pjs-problems.git#0823cc1cffb999352e3f0caed295df8633f13916" + }, + "pkg-conf": { + "version": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.0.0.tgz", + "integrity": "sha1-BxyHZQQDvM+5xif1h1G/5HwGcnk=", + "dev": true + }, + "pkg-dir": { + "version": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "dependencies": { + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + } + } + }, + "pkg-up": { + "version": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", + "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", + "dev": true, + "dependencies": { + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + } + } + }, + "plur": { + "version": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", + "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", + "dev": true + }, + "pluralize": { + "version": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "postcss-calc": { + "version": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true + }, + "postcss-colormin": { + "version": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true + }, + "postcss-convert-values": { + "version": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true + }, + "postcss-discard-comments": { + "version": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true + }, + "postcss-discard-duplicates": { + "version": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true + }, + "postcss-discard-empty": { + "version": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true + }, + "postcss-discard-overridden": { + "version": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true + }, + "postcss-discard-unused": { + "version": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true + }, + "postcss-filter-plugins": { + "version": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true + }, + "postcss-load-config": { + "version": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true + }, + "postcss-load-options": { + "version": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true + }, + "postcss-load-plugins": { + "version": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true + }, + "postcss-merge-idents": { + "version": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true + }, + "postcss-merge-longhand": { + "version": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true + }, + "postcss-merge-rules": { + "version": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true + }, + "postcss-message-helpers": { + "version": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true + }, + "postcss-minify-gradients": { + "version": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true + }, + "postcss-minify-params": { + "version": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true + }, + "postcss-minify-selectors": { + "version": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true + }, + "postcss-normalize-charset": { + "version": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true + }, + "postcss-normalize-url": { + "version": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true + }, + "postcss-ordered-values": { + "version": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true + }, + "postcss-reduce-idents": { + "version": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true + }, + "postcss-reduce-initial": { + "version": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true + }, + "postcss-reduce-transforms": { + "version": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true + }, + "postcss-selector-parser": { + "version": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true + }, + "postcss-svgo": { + "version": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true + }, + "postcss-unique-selectors": { + "version": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true + }, + "postcss-value-parser": { + "version": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true + }, + "prelude-ls": { + "version": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-format": { + "version": "https://registry.npmjs.org/pretty-format/-/pretty-format-18.1.0.tgz", + "integrity": "sha1-+2Wob3p/kZSWPu6RhlwbzxA54oQ=", + "dev": true + }, + "pretty-hrtime": { + "version": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "pretty-ms": { + "version": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", + "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", + "dev": true, + "dependencies": { + "plur": { + "version": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", + "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", + "dev": true + } + } + }, + "private": { + "version": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=" + }, + "process": { + "version": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "proto-props": { + "version": "https://registry.npmjs.org/proto-props/-/proto-props-0.2.1.tgz", + "integrity": "sha1-XgHcJnWg3pq/p255nfozTW9IP0s=", + "dev": true + }, + "pseudomap": { + "version": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true + }, + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "dev": true + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-2.2.5.tgz", + "integrity": "sha1-EIirr53MCuWuRbcJ5sa1iIsjkjw=", + "dev": true + }, + "query-string": { + "version": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true + }, + "querystring": { + "version": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", + "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", + "dev": true + }, + "randombytes": { + "version": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz", + "integrity": "sha1-Z0yZdgkBw8QRJ3GjHlIdw0nMCew=", + "dev": true + }, + "raw-body": { + "version": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "dev": true, + "dependencies": { + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + } + } + }, + "rc": { + "version": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "dev": true, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "read-all-stream": { + "version": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "read-only-stream": { + "version": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "read-pkg": { + "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true + }, + "read-pkg-up": { + "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=" + }, + "readdirp": { + "version": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "readline2": { + "version": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true + }, + "recast": { + "version": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz", + "integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=", + "dependencies": { + "esprima-fb": { + "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=" + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + } + } + }, + "rechoir": { + "version": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true + }, + "redent": { + "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "dependencies": { + "indent-string": { + "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true + } + } + }, + "reduce-css-calc": { + "version": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true + }, + "reduce-function-call": { + "version": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true + }, + "regenerate": { + "version": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "dev": true + }, + "regenerator-runtime": { + "version": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "regenerator-transform": { + "version": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", + "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", + "dev": true + }, + "regex-cache": { + "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true + }, + "regexpu-core": { + "version": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true + }, + "registry-auth-token": { + "version": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", + "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "dev": true + }, + "registry-url": { + "version": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true + }, + "regjsgen": { + "version": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true + }, + "remove-trailing-separator": { + "version": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz", + "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=", + "dev": true + }, + "repeat-element": { + "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true + }, + "replace-ext": { + "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "req-all": { + "version": "https://registry.npmjs.org/req-all/-/req-all-1.0.0.tgz", + "integrity": "sha1-0ShWlFHDQLQyQJxlbPFmJgzSYo0=", + "dev": true + }, + "request": { + "version": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "dependencies": { + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "tunnel-agent": { + "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true + }, + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true + } + } + }, + "require-directory": { + "version": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-precompiled": { + "version": "https://registry.npmjs.org/require-precompiled/-/require-precompiled-0.1.0.tgz", + "integrity": "sha1-WhtS63Dr7UPrmC6XTIWrWVceVvo=", + "dev": true + }, + "require-uncached": { + "version": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "dependencies": { + "resolve-from": { + "version": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } + } + }, + "resolve": { + "version": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "dev": true + }, + "resolve-cwd": { + "version": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-1.0.0.tgz", + "integrity": "sha1-Tq7qQe0EDRcCRX32SkKysH0kb58=", + "dev": true + }, + "resolve-dir": { + "version": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "dev": true + }, + "resolve-from": { + "version": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", + "dev": true + }, + "resolve-url": { + "version": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true + }, + "right-align": { + "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true + }, + "rimraf": { + "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true + }, + "ripemd160": { + "version": "https://registry.npmjs.org/ripemd160/-/ripemd160-1.0.1.tgz", + "integrity": "sha1-k6S71JQrxXS2mo+lfHHeEOzKfW4=", + "dev": true + }, + "rollup": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.41.6.tgz", + "integrity": "sha1-4NBUl4d6OYwQTYFtJzOnGKepTio=", + "dev": true + }, + "rollup-stream": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/rollup-stream/-/rollup-stream-1.19.0.tgz", + "integrity": "sha1-ircNOXDY7IUp8cHXpojY1l+QWZo=", + "dev": true + }, + "run-async": { + "version": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true + }, + "rx-lite": { + "version": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "rxjs": { + "version": "https://registry.npmjs.org/rxjs/-/rxjs-5.3.1.tgz", + "integrity": "sha1-nsyeciJH5PRJDTCoeFd6N0D9DLc=", + "dev": true, + "dependencies": { + "symbol-observable": { + "version": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", + "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=", + "dev": true + } + } + }, + "safe-buffer": { + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + }, + "sass-graph": { + "version": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.2.tgz", + "integrity": "sha1-9NbJW1RuoqCdFBdtD8GgfuK0g1Q=", + "dev": true, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true + }, + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "load-json-file": { + "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + }, + "path-type": { + "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true + }, + "read-pkg": { + "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true + }, + "read-pkg-up": { + "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true + } + } + }, + "sax": { + "version": "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz", + "integrity": "sha1-/YYxojvHgmvvXYcb24c3jJVkeCg=", + "dev": true + }, + "scss-tokenizer": { + "version": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.1.tgz", + "integrity": "sha1-B8DMV3u3q00I/ZABha2/S8hEFB0=", + "dev": true, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true + } + } + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "semver-diff": { + "version": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true + }, + "sequencify": { + "version": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "dev": true + }, + "set-blocking": { + "version": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "sha.js": { + "version": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "dev": true + }, + "shasum": { + "version": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true + }, + "shebang-command": { + "version": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true + }, + "shebang-regex": { + "version": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true + }, + "shelljs": { + "version": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz", + "integrity": "sha1-svXHfvlxSPS09uImguELuoZnz/E=", + "dev": true + }, + "sigmund": { + "version": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "slide": { + "version": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "sntp": { + "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true + }, + "sort-keys": { + "version": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz", + "integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE=" + }, + "source-map-resolve": { + "version": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", + "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", + "dev": true + }, + "source-map-support": { + "version": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "dev": true, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "source-map-url": { + "version": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", + "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", + "dev": true + }, + "sparkles": { + "version": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "spdx-correct": { + "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true + }, + "spdx-expression-parse": { + "version": "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": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "split": { + "version": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true + }, + "sprintf-js": { + "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", + "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", + "dev": true, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "stack-utils": { + "version": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "dev": true + }, + "staged-git-files": { + "version": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-0.0.4.tgz", + "integrity": "sha1-15fhtVHKemOd7AI33G60u5vhfTU=", + "dev": true + }, + "static-eval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-1.1.1.tgz", + "integrity": "sha1-yoEwIQNUzxPZpyK8fpI3eEV7sZI=", + "dev": true + }, + "statuses": { + "version": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stdout-stream": { + "version": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "stream-browserify": { + "version": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "stream-combiner": { + "version": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true + }, + "stream-combiner2": { + "version": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "stream-consume": { + "version": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", + "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", + "dev": true + }, + "stream-http": { + "version": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.0.tgz", + "integrity": "sha1-zsH047SUvEqBtFGAiXD4sgtO1fY=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "stream-splicer": { + "version": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "dev": true, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.0.tgz", + "integrity": "sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc=", + "dev": true + } + } + }, + "stream-to-observable": { + "version": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz", + "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=", + "dev": true + }, + "strict-uri-encode": { + "version": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "string-width": { + "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + }, + "stringstream": { + "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-bom-buf": { + "version": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz", + "integrity": "sha1-HLRar1dTD0yvhsf3UXnSyaUd1XI=", + "dev": true + }, + "strip-bom-string": { + "version": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "dev": true + }, + "strip-eof": { + "version": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true + }, + "strip-json-comments": { + "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "subarg": { + "version": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true + }, + "svgo": { + "version": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true + }, + "symbol-observable": { + "version": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true + }, + "syntax-error": { + "version": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", + "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "dev": true, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz", + "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA=", + "dev": true + } + } + }, + "table": { + "version": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": { + "version": "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": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", + "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", + "dev": true + } + } + }, + "tar": { + "version": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true + }, + "term-size": { + "version": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz", + "integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=", + "dev": true, + "dependencies": { + "execa": { + "version": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", + "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", + "dev": true + }, + "npm-run-path": { + "version": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", + "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", + "dev": true + }, + "path-key": { + "version": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", + "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", + "dev": true + } + } + }, + "text-table": { + "version": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "the-argv": { + "version": "https://registry.npmjs.org/the-argv/-/the-argv-1.0.0.tgz", + "integrity": "sha1-AIRwUAVzDdhNt1UlPJMa45jblSI=", + "dev": true + }, + "through": { + "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=" + }, + "tildify": { + "version": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "dev": true + }, + "time-require": { + "version": "https://registry.npmjs.org/time-require/-/time-require-0.1.2.tgz", + "integrity": "sha1-+eEss3D8JgXhFARYK6VO9corLZg=", + "dev": true, + "dependencies": { + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true + }, + "parse-ms": { + "version": "https://registry.npmjs.org/parse-ms/-/parse-ms-0.1.2.tgz", + "integrity": "sha1-3T+iXtbC78e93hKtm0bBY6opIk4=", + "dev": true + }, + "pretty-ms": { + "version": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-0.2.2.tgz", + "integrity": "sha1-2oeaaC/zOjcBEEbxPWJ/Z8c7hPY=", + "dev": true + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "time-stamp": { + "version": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.0.1.tgz", + "integrity": "sha1-n0vSNVnJNllm8zAtu6KwfGuZsVE=", + "dev": true + }, + "timed-out": { + "version": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "dev": true + }, + "timers-browserify": { + "version": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true + }, + "to-arraybuffer": { + "version": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "tough-cookie": { + "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true + }, + "trim-newlines": { + "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tryit": { + "version": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", + "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", + "dev": true + }, + "tty-browserify": { + "version": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tweetnacl": { + "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true + }, + "type-detect": { + "version": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=" + }, + "type-is": { + "version": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true + }, + "typedarray": { + "version": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.22.tgz", + "integrity": "sha1-1Uk0d4qNoUkD+imjJvskwKtRoaA=", + "dev": true, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "uglify-save-license": { + "version": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", + "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=", + "dev": true + }, + "uglify-to-browserify": { + "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyify": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/uglifyify/-/uglifyify-3.0.4.tgz", + "integrity": "sha1-SH4IClp3mIgOaOkN75sGaB+xO9I=", + "dev": true, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=", + "dev": true + } + } + }, + "uid2": { + "version": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", + "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=", + "dev": true + }, + "umd": { + "version": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "dev": true + }, + "unc-path-regex": { + "version": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "uniq": { + "version": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true + }, + "uniqs": { + "version": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-stream": { + "version": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true + }, + "unique-string": { + "version": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true + }, + "unique-temp-dir": { + "version": "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz", + "integrity": "sha1-bc6VsmgcoAPuv7MEpBX5y6vMU4U=", + "dev": true + }, + "unpipe": { + "version": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unreachable-branch-transform": { + "version": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz", + "integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo=" + }, + "unzip-response": { + "version": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", + "dev": true + }, + "update-notifier": { + "version": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", + "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", + "dev": true + }, + "urix": { + "version": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true + }, + "user-home": { + "version": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util": { + "version": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "v8flags": { + "version": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true + }, + "validate-npm-package-license": { + "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true + }, + "vendors": { + "version": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true + }, + "vinyl-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.0.tgz", + "integrity": "sha1-ygZ+oIQx1QdyKx3lCD9gJhbrwjQ=", + "dev": true, + "dependencies": { + "bl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", + "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", + "dev": true + } + } + }, + "vinyl-fs": { + "version": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "dev": true, + "dependencies": { + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "dev": true + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true + } + } + }, + "vinyl-source-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz", + "integrity": "sha1-RMvlEIIFJ53rDFZTwJSiiHk4sas=", + "dev": true, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "dev": true, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "vm-browserify": { + "version": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true + }, + "watchify": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.9.0.tgz", + "integrity": "sha1-8HX9LoqGrN6Eztum5cKgvt1SPZ4=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz", + "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==", + "dev": true + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true + } + } + }, + "websocket-driver": { + "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true + }, + "websocket-extensions": { + "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", + "dev": true + }, + "whet.extend": { + "version": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true + }, + "which-module": { + "version": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz", + "integrity": "sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=", + "dev": true + }, + "widest-line": { + "version": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", + "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "dev": true + }, + "window-size": { + "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrap-ansi": { + "version": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true + }, + "wrappy": { + "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true + }, + "write-file-atomic": { + "version": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "dev": true + }, + "write-json-file": { + "version": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.0.0.tgz", + "integrity": "sha1-Dq7Jgfz5KI28KAbL0m4Gq5vcpO0=", + "dev": true + }, + "write-pkg": { + "version": "https://registry.npmjs.org/write-pkg/-/write-pkg-2.1.0.tgz", + "integrity": "sha1-NTqkTDnEjCFED1wIzmq9RhQcnAg=", + "dev": true + }, + "xdg-basedir": { + "version": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", + "dev": true + }, + "xo": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/xo/-/xo-0.18.2.tgz", + "integrity": "sha1-kqQusCpPsUnf6lUYAhkU9arIT/A=", + "dev": true, + "dependencies": { + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true + }, + "boxen": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz", + "integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "configstore": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz", + "integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=", + "dev": true + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "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 + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true + }, + "lazy-req": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-2.0.0.tgz", + "integrity": "sha1-yUUKNj7N2i5vDHATKtTzf48G8rQ=", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "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 + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "update-notifier": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.1.0.tgz", + "integrity": "sha1-7AweU1NrdmR6JLd8uDlm2TFRI9k=", + "dev": true + }, + "write-file-atomic": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz", + "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==", + "dev": true + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + } + } + }, + "xo-init": { + "version": "https://registry.npmjs.org/xo-init/-/xo-init-0.5.0.tgz", + "integrity": "sha1-jijex5Z2zF4EL95f2PcQ4mRrDjY=", + "dev": true, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "xtend": { + "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json index ab58642..02012ac 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "javascript-practice", - "version": "1.0.0", + "version": "1.1.2", "description": "practice javascript", "main": "index.js", "engines": { "node": "7" }, "scripts": { - "test": "./node_modules/.bin/xo", + "test": "", "build": "./node_modules/.bin/gulp build", "watch": "./node_modules/.bin/gulp watch", "precommit": "npm test", @@ -41,7 +41,8 @@ "license": "MIT", "dependencies": { "chai": "^3.5.0", - "localforage": "^1.5.0" + "localforage": "^1.5.0", + "pjs-problems": "^1.0.3" }, "devDependencies": { "autoprefixer": "^6.7.7", @@ -53,7 +54,11 @@ "babel-preset-latest": "^6.24.1", "babelify": "^7.3.0", "browserify": "^14.3.0", + "chai": "^3.5.0", "cssnano": "^3.10.0", + "dedent": "^0.7.0", + "gulp": "^3.9.1", + "gulp-bro": "^1.0.2", "gulp-htmlmin": "^3.0.0", "gulp-image": "^2.8.0", "gulp-livereload": "^3.8.1", @@ -61,13 +66,15 @@ "gulp-sass": "^3.1.0", "gulp-sourcemaps": "^2.6.0", "gulp-svgo": "^1.0.3", - "gulp-uglify": "^2.1.2", + "gulp-uglify": "^3.0.0", "gulp-util": "^3.0.8", - "gulp": "^3.9.1", "husky": "^0.13.3", "lint-staged": "^3.4.0", + "localforage": "^1.5.0", + "pump": "^1.0.2", "rollup-stream": "^1.19.0", "sw-precache": "^5.1.1", + "uglify-es": "^3.0.15", "uglifyify": "^3.0.4", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0", diff --git a/public/dist/img/social-banner.png b/public/dist/img/social-banner.png index a665cc0..e6c0d5d 100644 Binary files a/public/dist/img/social-banner.png and b/public/dist/img/social-banner.png differ diff --git a/public/dist/js/bundle.min.js b/public/dist/js/bundle.min.js index 81816b3..8916e27 100644 --- a/public/dist/js/bundle.min.js +++ b/public/dist/js/bundle.min.js @@ -1,4 +1,2 @@ -!function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[a]={exports:{}};t[a][0].call(f.exports,function(e){var n=t[a][1][e];return o(n||e)},f,f.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;ae,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",e,r)}else this.assert(n>e,"expected #{this} to be above "+e,"expected #{this} to be at most "+e)}function c(e,t){t&&P(this,"message",t);var n=P(this,"object");if(P(this,"doLength")){new N(n,t).to.have.property("length");var r=n.length;this.assert(r>=e,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",e,r)}else this.assert(n>=e,"expected #{this} to be at least "+e,"expected #{this} to be below "+e)}function f(e,t){t&&P(this,"message",t);var n=P(this,"object");if(P(this,"doLength")){new N(n,t).to.have.property("length");var r=n.length;this.assert(r1)throw new Error(i);break;case"object":if(arguments.length>1)throw new Error(i);e=Object.keys(e);break;default:e=Array.prototype.slice.call(arguments)}if(!e.length)throw new Error("keys required");var a=Object.keys(r),s=e,u=e.length,c=P(this,"any"),f=P(this,"all");if(c||f||(f=!0),c){o=s.filter(function(e){return~a.indexOf(e)}).length>0}if(f&&(o=e.every(function(e){return~a.indexOf(e)}),P(this,"negate")||P(this,"contains")||(o=o&&e.length==a.length)),u>1){e=e.map(function(e){return t.inspect(e)});var l=e.pop();f&&(n=e.join(", ")+", and "+l),c&&(n=e.join(", ")+", or "+l)}else n=t.inspect(e[0]);n=(u>1?"keys ":"key ")+n,n=(P(this,"contains")?"contain ":"have ")+n,this.assert(o,"expected #{this} to "+n,"expected #{this} to not "+n,s.slice(0).sort(),a.sort(),!0)}function m(e,n,r){r&&P(this,"message",r);var o=P(this,"object");new N(o,r).is.a("function");var i=!1,a=null,s=null,u=null;0===arguments.length?(n=null,e=null):e&&(e instanceof RegExp||"string"==typeof e)?(n=e,e=null):e&&e instanceof Error?(a=e,e=null,n=null):"function"==typeof e?(!(s=e.prototype.name)||"Error"===s&&e!==Error)&&(s=e.name||(new e).name):e=null;try{o()}catch(r){if(a)return this.assert(r===a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",a instanceof Error?a.toString():a,r instanceof Error?r.toString():r),P(this,"object",r),this;if(e&&(this.assert(r instanceof e,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",s,r instanceof Error?r.toString():r),!n))return P(this,"object",r),this;var c="error"===t.type(r)&&"message"in r?r.message:""+r;if(null!=c&&n&&n instanceof RegExp)return this.assert(n.exec(c),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",n,c),P(this,"object",r),this;if(null!=c&&n&&"string"==typeof n)return this.assert(~c.indexOf(n),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",n,c),P(this,"object",r),this;i=!0,u=r}var f="",l=null!==s?s:a?"#{exp}":"an error";i&&(f=" but #{act} was thrown"),this.assert(!0===i,"expected #{this} to throw "+l+f,"expected #{this} to not throw "+l+f,a instanceof Error?a.toString():a,u instanceof Error?u.toString():u),P(this,"object",u)}function w(e,n){n&&P(this,"message",n);var r=P(this,"object"),o=P(this,"itself"),i="function"!==t.type(r)||o?r[e]:r.prototype[e];this.assert("function"==typeof i,"expected #{this} to respond to "+t.inspect(e),"expected #{this} to not respond to "+t.inspect(e))}function x(e,n){n&&P(this,"message",n);var r=P(this,"object"),o=e(r);this.assert(o,"expected #{this} to satisfy "+t.objDisplay(e),"expected #{this} to not satisfy"+t.objDisplay(e),!this.negate,o)}function E(e,n,r){r&&P(this,"message",r);var o=P(this,"object");if(new N(o,r).is.a("number"),"number"!==t.type(e)||"number"!==t.type(n))throw new Error("the arguments to closeTo or approximately must be numbers");this.assert(Math.abs(o-e)<=n,"expected #{this} to be close to "+e+" +/- "+n,"expected #{this} not to be close to "+e+" +/- "+n)}function j(e,t,n){return e.every(function(e){return n?t.some(function(t){return n(e,t)}):-1!==t.indexOf(e)})}function O(e,t){t&&P(this,"message",t);var n=P(this,"object");new N(e).to.be.an("array"),this.assert(e.indexOf(n)>-1,"expected #{this} to be one of #{exp}","expected #{this} to not be one of #{exp}",e,n)}function S(e,t,n){n&&P(this,"message",n);var r=P(this,"object");new N(e,n).to.have.property(t),new N(r).is.a("function");var o=e[t];r(),this.assert(o!==e[t],"expected ."+t+" to change","expected ."+t+" to not change")}function A(e,t,n){n&&P(this,"message",n);var r=P(this,"object");new N(e,n).to.have.property(t),new N(r).is.a("function");var o=e[t];r(),this.assert(e[t]-o>0,"expected ."+t+" to increase","expected ."+t+" to not increase")}function _(e,t,n){n&&P(this,"message",n);var r=P(this,"object");new N(e,n).to.have.property(t),new N(r).is.a("function");var o=e[t];r(),this.assert(e[t]-o<0,"expected ."+t+" to decrease","expected ."+t+" to not decrease")}var N=e.Assertion,P=(Object.prototype.toString,t.flag);["to","be","been","is","and","has","have","with","that","which","at","of","same"].forEach(function(e){N.addProperty(e,function(){return this})}),N.addProperty("not",function(){P(this,"negate",!0)}),N.addProperty("deep",function(){P(this,"deep",!0)}),N.addProperty("any",function(){P(this,"any",!0),P(this,"all",!1)}),N.addProperty("all",function(){P(this,"all",!0),P(this,"any",!1)}),N.addChainableMethod("an",n),N.addChainableMethod("a",n),N.addChainableMethod("include",o,r),N.addChainableMethod("contain",o,r),N.addChainableMethod("contains",o,r),N.addChainableMethod("includes",o,r),N.addProperty("ok",function(){this.assert(P(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),N.addProperty("true",function(){this.assert(!0===P(this,"object"),"expected #{this} to be true","expected #{this} to be false",!this.negate)}),N.addProperty("false",function(){this.assert(!1===P(this,"object"),"expected #{this} to be false","expected #{this} to be true",!!this.negate)}),N.addProperty("null",function(){this.assert(null===P(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),N.addProperty("undefined",function(){this.assert(void 0===P(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),N.addProperty("NaN",function(){this.assert(isNaN(P(this,"object")),"expected #{this} to be NaN","expected #{this} not to be NaN")}),N.addProperty("exist",function(){this.assert(null!=P(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),N.addProperty("empty",function(){var e=P(this,"object"),t=e;Array.isArray(e)||"string"==typeof object?t=e.length:"object"==typeof e&&(t=Object.keys(e).length),this.assert(!t,"expected #{this} to be empty","expected #{this} not to be empty")}),N.addProperty("arguments",i),N.addProperty("Arguments",i),N.addMethod("equal",a),N.addMethod("equals",a),N.addMethod("eq",a),N.addMethod("eql",s),N.addMethod("eqls",s),N.addMethod("above",u),N.addMethod("gt",u),N.addMethod("greaterThan",u),N.addMethod("least",c),N.addMethod("gte",c),N.addMethod("below",f),N.addMethod("lt",f),N.addMethod("lessThan",f),N.addMethod("most",l),N.addMethod("lte",l),N.addMethod("within",function(e,t,n){n&&P(this,"message",n);var r=P(this,"object"),o=e+".."+t;if(P(this,"doLength")){new N(r,n).to.have.property("length");var i=r.length;this.assert(i>=e&&i<=t,"expected #{this} to have a length within "+o,"expected #{this} to not have a length within "+o)}else this.assert(r>=e&&r<=t,"expected #{this} to be within "+o,"expected #{this} to not be within "+o)}),N.addMethod("instanceof",d),N.addMethod("instanceOf",d),N.addMethod("property",function(e,n,r){r&&P(this,"message",r);var o=!!P(this,"deep"),i=o?"deep property ":"property ",a=P(this,"negate"),s=P(this,"object"),u=o?t.getPathInfo(e,s):null,c=o?u.exists:t.hasProperty(e,s),f=o?u.value:s[e];if(a&&arguments.length>1){if(void 0===f)throw r=null!=r?r+": ":"",new Error(r+t.inspect(s)+" has no "+i+t.inspect(e))}else this.assert(c,"expected #{this} to have a "+i+t.inspect(e),"expected #{this} to not have "+i+t.inspect(e));arguments.length>1&&this.assert(n===f,"expected #{this} to have a "+i+t.inspect(e)+" of #{exp}, but got #{act}","expected #{this} to not have a "+i+t.inspect(e)+" of #{act}",n,f),P(this,"object",f)}),N.addMethod("ownProperty",h),N.addMethod("haveOwnProperty",h),N.addMethod("ownPropertyDescriptor",p),N.addMethod("haveOwnPropertyDescriptor",p),N.addChainableMethod("length",b,v),N.addMethod("lengthOf",b),N.addMethod("match",y),N.addMethod("matches",y),N.addMethod("string",function(e,n){n&&P(this,"message",n);var r=P(this,"object");new N(r,n).is.a("string"),this.assert(~r.indexOf(e),"expected #{this} to contain "+t.inspect(e),"expected #{this} to not contain "+t.inspect(e))}),N.addMethod("keys",g),N.addMethod("key",g),N.addMethod("throw",m),N.addMethod("throws",m),N.addMethod("Throw",m),N.addMethod("respondTo",w),N.addMethod("respondsTo",w),N.addProperty("itself",function(){P(this,"itself",!0)}),N.addMethod("satisfy",x),N.addMethod("satisfies",x),N.addMethod("closeTo",E),N.addMethod("approximately",E),N.addMethod("members",function(e,n){n&&P(this,"message",n);var r=P(this,"object");new N(r).to.be.an("array"),new N(e).to.be.an("array");var o=P(this,"deep")?t.eql:void 0;if(P(this,"contains"))return this.assert(j(e,r,o),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",r,e);this.assert(j(r,e,o)&&j(e,r,o),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",r,e)}),N.addMethod("oneOf",O),N.addChainableMethod("change",S),N.addChainableMethod("changes",S),N.addChainableMethod("increase",A),N.addChainableMethod("increases",A),N.addChainableMethod("decrease",_),N.addChainableMethod("decreases",_),N.addProperty("extensible",function(){var e,t=P(this,"object");try{e=Object.isExtensible(t)}catch(t){if(!(t instanceof TypeError))throw t;e=!1}this.assert(e,"expected #{this} to be extensible","expected #{this} to not be extensible")}),N.addProperty("sealed",function(){var e,t=P(this,"object");try{e=Object.isSealed(t)}catch(t){if(!(t instanceof TypeError))throw t;e=!0}this.assert(e,"expected #{this} to be sealed","expected #{this} to not be sealed")}),N.addProperty("frozen",function(){var e,t=P(this,"object");try{e=Object.isFrozen(t)}catch(t){if(!(t instanceof TypeError))throw t;e=!0}this.assert(e,"expected #{this} to be frozen","expected #{this} to not be frozen")})}},{}],7:[function(e,t,n){t.exports=function(e,t){var n=e.Assertion,r=t.flag,o=e.assert=function(t,r){new n(null,null,e.assert).assert(t,r,"[ negation message unavailable ]")};o.fail=function(t,n,r,i){throw r=r||"assert.fail()",new e.AssertionError(r,{actual:t,expected:n,operator:i},o.fail)},o.isOk=function(e,t){new n(e,t).is.ok},o.isNotOk=function(e,t){new n(e,t).is.not.ok},o.equal=function(e,t,i){var a=new n(e,i,o.equal);a.assert(t==r(a,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",t,e)},o.notEqual=function(e,t,i){var a=new n(e,i,o.notEqual);a.assert(t!=r(a,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",t,e)},o.strictEqual=function(e,t,r){new n(e,r).to.equal(t)},o.notStrictEqual=function(e,t,r){new n(e,r).to.not.equal(t)},o.deepEqual=function(e,t,r){new n(e,r).to.eql(t)},o.notDeepEqual=function(e,t,r){new n(e,r).to.not.eql(t)},o.isAbove=function(e,t,r){new n(e,r).to.be.above(t)},o.isAtLeast=function(e,t,r){new n(e,r).to.be.least(t)},o.isBelow=function(e,t,r){new n(e,r).to.be.below(t)},o.isAtMost=function(e,t,r){new n(e,r).to.be.most(t)},o.isTrue=function(e,t){new n(e,t).is.true},o.isNotTrue=function(e,t){new n(e,t).to.not.equal(!0)},o.isFalse=function(e,t){new n(e,t).is.false},o.isNotFalse=function(e,t){new n(e,t).to.not.equal(!1)},o.isNull=function(e,t){new n(e,t).to.equal(null)},o.isNotNull=function(e,t){new n(e,t).to.not.equal(null)},o.isNaN=function(e,t){new n(e,t).to.be.NaN},o.isNotNaN=function(e,t){new n(e,t).not.to.be.NaN},o.isUndefined=function(e,t){new n(e,t).to.equal(void 0)},o.isDefined=function(e,t){new n(e,t).to.not.equal(void 0)},o.isFunction=function(e,t){new n(e,t).to.be.a("function")},o.isNotFunction=function(e,t){new n(e,t).to.not.be.a("function")},o.isObject=function(e,t){new n(e,t).to.be.a("object")},o.isNotObject=function(e,t){new n(e,t).to.not.be.a("object")},o.isArray=function(e,t){new n(e,t).to.be.an("array")},o.isNotArray=function(e,t){new n(e,t).to.not.be.an("array")},o.isString=function(e,t){new n(e,t).to.be.a("string")},o.isNotString=function(e,t){new n(e,t).to.not.be.a("string")},o.isNumber=function(e,t){new n(e,t).to.be.a("number")},o.isNotNumber=function(e,t){new n(e,t).to.not.be.a("number")},o.isBoolean=function(e,t){new n(e,t).to.be.a("boolean")},o.isNotBoolean=function(e,t){new n(e,t).to.not.be.a("boolean")},o.typeOf=function(e,t,r){new n(e,r).to.be.a(t)},o.notTypeOf=function(e,t,r){new n(e,r).to.not.be.a(t)},o.instanceOf=function(e,t,r){new n(e,r).to.be.instanceOf(t)},o.notInstanceOf=function(e,t,r){new n(e,r).to.not.be.instanceOf(t)},o.include=function(e,t,r){new n(e,r,o.include).include(t)},o.notInclude=function(e,t,r){new n(e,r,o.notInclude).not.include(t)},o.match=function(e,t,r){new n(e,r).to.match(t)},o.notMatch=function(e,t,r){new n(e,r).to.not.match(t)},o.property=function(e,t,r){new n(e,r).to.have.property(t)},o.notProperty=function(e,t,r){new n(e,r).to.not.have.property(t)},o.deepProperty=function(e,t,r){new n(e,r).to.have.deep.property(t)},o.notDeepProperty=function(e,t,r){new n(e,r).to.not.have.deep.property(t)},o.propertyVal=function(e,t,r,o){new n(e,o).to.have.property(t,r)},o.propertyNotVal=function(e,t,r,o){new n(e,o).to.not.have.property(t,r)},o.deepPropertyVal=function(e,t,r,o){new n(e,o).to.have.deep.property(t,r)},o.deepPropertyNotVal=function(e,t,r,o){new n(e,o).to.not.have.deep.property(t,r)},o.lengthOf=function(e,t,r){new n(e,r).to.have.length(t)},o.throws=function(e,t,o,i){("string"==typeof t||t instanceof RegExp)&&(o=t,t=null);var a=new n(e,i).to.throw(t,o);return r(a,"object")},o.doesNotThrow=function(e,t,r){"string"==typeof t&&(r=t,t=null),new n(e,r).to.not.Throw(t)},o.operator=function(e,o,i,a){var s;switch(o){case"==":s=e==i;break;case"===":s=e===i;break;case">":s=e>i;break;case">=":s=e>=i;break;case"<":s=e1&&n===t.length-1?"or ":"")+r+" "+e}).join(", ");if(!t.some(function(t){return i(e)===t}))throw new r("object tested must be "+n+", but "+i(e)+" given")}},{"./flag":14,"assertion-error":1,"type-detect":36}],14:[function(e,t,n){t.exports=function(e,t,n){var r=e.__flags||(e.__flags=Object.create(null));if(3!==arguments.length)return r[t];r[t]=n}},{}],15:[function(e,t,n){t.exports=function(e,t){return t.length>4?t[4]:e._obj}},{}],16:[function(e,t,n){t.exports=function(e){var t=[];for(var n in e)t.push(n);return t}},{}],17:[function(e,t,n){var r=e("./flag"),o=e("./getActual"),i=(e("./inspect"),e("./objDisplay"));t.exports=function(e,t){var n=r(e,"negate"),a=r(e,"object"),s=t[3],u=o(e,t),c=n?t[2]:t[1],f=r(e,"message");return"function"==typeof c&&(c=c()),c=c||"",c=c.replace(/#\{this\}/g,function(){return i(a)}).replace(/#\{act\}/g,function(){return i(u)}).replace(/#\{exp\}/g,function(){return i(s)}),f?f+": "+c:c}},{"./flag":14,"./getActual":15,"./inspect":24,"./objDisplay":25}],18:[function(e,t,n){t.exports=function(e){if(e.name)return e.name;var t=/^\s?function ([^(]*)\(/.exec(e);return t&&t[1]?t[1]:""}},{}],19:[function(e,t,n){function r(e){return e.replace(/([^\\])\[/g,"$1.[").match(/(\\\.|[^.]+?)+/g).map(function(e){var t=/^\[(\d+)\]$/,n=t.exec(e);return n?{i:parseFloat(n[1])}:{p:e.replace(/\\([.\[\]])/g,"$1")}})}function o(e,t,n){var r,o=t;n=void 0===n?e.length:n;for(var i=0,a=n;i1?o(n,t,n.length-1):t,name:a.p||a.i,value:o(n,t)};return s.exists=i(s.name,s.parent),s}},{"./hasProperty":22}],20:[function(e,t,n){var r=e("./getPathInfo");t.exports=function(e,t){return r(e,t).value}},{"./getPathInfo":19}],21:[function(e,t,n){t.exports=function(e){function t(e){-1===n.indexOf(e)&&n.push(e)}for(var n=Object.getOwnPropertyNames(e),r=Object.getPrototypeOf(e);null!==r;)Object.getOwnPropertyNames(r).forEach(t),r=Object.getPrototypeOf(r);return n}},{}],22:[function(e,t,n){var r=e("type-detect"),o={number:Number,string:String};t.exports=function(e,t){var n=r(t);return"null"!==n&&"undefined"!==n&&(o[n]&&"object"!=typeof t&&(t=new o[n](t)),e in t)}},{"type-detect":36}],23:[function(e,t,n){var n=t.exports={};n.test=e("./test"),n.type=e("type-detect"),n.expectTypes=e("./expectTypes"),n.getMessage=e("./getMessage"),n.getActual=e("./getActual"),n.inspect=e("./inspect"),n.objDisplay=e("./objDisplay"),n.flag=e("./flag"),n.transferFlags=e("./transferFlags"),n.eql=e("deep-eql"),n.getPathValue=e("./getPathValue"),n.getPathInfo=e("./getPathInfo"),n.hasProperty=e("./hasProperty"),n.getName=e("./getName"),n.addProperty=e("./addProperty"),n.addMethod=e("./addMethod"),n.overwriteProperty=e("./overwriteProperty"),n.overwriteMethod=e("./overwriteMethod"),n.addChainableMethod=e("./addChainableMethod"),n.overwriteChainableMethod=e("./overwriteChainableMethod")},{"./addChainableMethod":10,"./addMethod":11,"./addProperty":12,"./expectTypes":13,"./flag":14,"./getActual":15,"./getMessage":17,"./getName":18,"./getPathInfo":19,"./getPathValue":20,"./hasProperty":22,"./inspect":24,"./objDisplay":25,"./overwriteChainableMethod":26,"./overwriteMethod":27,"./overwriteProperty":28,"./test":29,"./transferFlags":30,"deep-eql":31,"type-detect":36}],24:[function(e,t,n){function r(e,t,n,r){return o({showHidden:t,seen:[],stylize:function(e){return e}},e,void 0===n?2:n)}function o(e,t,r){if(t&&"function"==typeof t.inspect&&t.inspect!==n.inspect&&(!t.constructor||t.constructor.prototype!==t)){var p=t.inspect(r);return"string"!=typeof p&&(p=o(e,p,r)),p}var m=i(e,t);if(m)return m;if(g(t)){if("outerHTML"in t)return t.outerHTML;try{if(document.xmlVersion){return(new XMLSerializer).serializeToString(t)}var w=document.createElementNS("http://www.w3.org/1999/xhtml","_");return w.appendChild(t.cloneNode(!1)),html=w.innerHTML.replace("><",">"+t.innerHTML+"<"),w.innerHTML="",html}catch(e){}}var x=y(t),E=e.showHidden?b(t):x;if(0===E.length||h(t)&&(1===E.length&&"stack"===E[0]||2===E.length&&"description"===E[0]&&"stack"===E[1])){if("function"==typeof t){var j=v(t),O=j?": "+j:"";return e.stylize("[Function"+O+"]","special")}if(l(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(d(t))return e.stylize(Date.prototype.toUTCString.call(t),"date");if(h(t))return a(t)}var S="",A=!1,_=["{","}"];if(f(t)&&(A=!0,_=["[","]"]),"function"==typeof t){var j=v(t),O=j?": "+j:"";S=" [Function"+O+"]"}if(l(t)&&(S=" "+RegExp.prototype.toString.call(t)),d(t)&&(S=" "+Date.prototype.toUTCString.call(t)),h(t))return a(t);if(0===E.length&&(!A||0==t.length))return _[0]+S+_[1];if(r<0)return l(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special");e.seen.push(t);var N;return N=A?s(e,t,r,x,E):E.map(function(n){return u(e,t,r,x,n,A)}),e.seen.pop(),c(N,S,_)}function i(e,t){switch(typeof t){case"undefined":return e.stylize("undefined","undefined");case"string":var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string");case"number":return 0===t&&1/t==-1/0?e.stylize("-0","number"):e.stylize(""+t,"number");case"boolean":return e.stylize(""+t,"boolean")}if(null===t)return e.stylize("null","null")}function a(e){return"["+Error.prototype.toString.call(e)+"]"}function s(e,t,n,r,o){for(var i=[],a=0,s=t.length;a-1&&(u=a?u.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+u.split("\n").map(function(e){return" "+e}).join("\n"))):u=e.stylize("[Circular]","special")),void 0===s){if(a&&i.match(/^\d+$/))return u;s=JSON.stringify(""+i),s.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+u}function c(e,t,n){var r=0;return e.reduce(function(e,t){return r++,t.indexOf("\n")>=0&&r++,e+t.length+1},0)>60?n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1]:n[0]+t+" "+e.join(", ")+" "+n[1]}function f(e){return Array.isArray(e)||"object"==typeof e&&"[object Array]"===p(e)}function l(e){return"object"==typeof e&&"[object RegExp]"===p(e)}function d(e){return"object"==typeof e&&"[object Date]"===p(e)}function h(e){return"object"==typeof e&&"[object Error]"===p(e)}function p(e){return Object.prototype.toString.call(e)}var v=e("./getName"),b=e("./getProperties"),y=e("./getEnumerableProperties");t.exports=r;var g=function(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&1===e.nodeType&&"string"==typeof e.nodeName}},{"./getEnumerableProperties":16,"./getName":18,"./getProperties":21}],25:[function(e,t,n){var r=e("./inspect"),o=e("../config");t.exports=function(e){var t=r(e),n=Object.prototype.toString.call(e);if(o.truncateThreshold&&t.length>=o.truncateThreshold){if("[object Function]"===n)return e.name&&""!==e.name?"[Function: "+e.name+"]":"[Function]";if("[object Array]"===n)return"[ Array("+e.length+") ]";if("[object Object]"===n){var i=Object.keys(e);return"{ Object ("+(i.length>2?i.splice(0,2).join(", ")+", ...":i.join(", "))+") }"}return t}return t}},{"../config":5,"./inspect":24}],26:[function(e,t,n){t.exports=function(e,t,n,r){var o=e.__methods[t],i=o.chainingBehavior;o.chainingBehavior=function(){var e=r(i).call(this);return void 0===e?this:e};var a=o.method;o.method=function(){var e=n(a).apply(this,arguments);return void 0===e?this:e}}},{}],27:[function(e,t,n){t.exports=function(e,t,n){var r=e[t],o=function(){return this};r&&"function"==typeof r&&(o=r),e[t]=function(){var e=n(o).apply(this,arguments);return void 0===e?this:e}}},{}],28:[function(e,t,n){t.exports=function(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t),o=function(){};r&&"function"==typeof r.get&&(o=r.get),Object.defineProperty(e,t,{get:function(){var e=n(o).call(this);return void 0===e?this:e},configurable:!0})}},{}],29:[function(e,t,n){var r=e("./flag");t.exports=function(e,t){var n=r(e,"negate"),o=t[0];return n?!o:o}},{"./flag":14}],30:[function(e,t,n){t.exports=function(e,t,n){var r=e.__flags||(e.__flags=Object.create(null));t.__flags||(t.__flags=Object.create(null)),n=3!==arguments.length||n;for(var o in r)(n||"object"!==o&&"ssfi"!==o&&"message"!=o)&&(t.__flags[o]=r[o])}},{}],31:[function(e,t,n){t.exports=e("./lib/eql")},{"./lib/eql":32}],32:[function(e,t,n){function r(e,t,n){return!!o(e,t)||("date"===v(e)?a(e,t):"regexp"===v(e)?s(e,t):p.isBuffer(e)?l(e,t):"arguments"===v(e)?u(e,t,n):!!i(e,t)&&("object"!==v(e)&&"object"!==v(t)&&"array"!==v(e)&&"array"!==v(t)?o(e,t):h(e,t,n)))}function o(e,t){return e===t?0!==e||1/e==1/t:e!==e&&t!==t}function i(e,t){return v(e)===v(t)}function a(e,t){return"date"===v(t)&&o(e.getTime(),t.getTime())}function s(e,t){return"regexp"===v(t)&&o(e.toString(),t.toString())}function u(e,t,n){return"arguments"===v(t)&&(e=[].slice.call(e),t=[].slice.call(t),r(e,t,n))}function c(e){var t=[];for(var n in e)t.push(n);return t}function f(e,t){if(e.length!==t.length)return!1;for(var n=0,r=!0;n=0;o--)if(s=i[o],!r(e[s],t[s],n))return!1;return!0}var p,v=e("type-detect");try{p=e("buffer").Buffer}catch(e){p={},p.isBuffer=function(){return!1}}t.exports=r},{buffer:void 0,"type-detect":33}],33:[function(e,t,n){t.exports=e("./lib/type")},{"./lib/type":34}],34:[function(e,t,n){function r(e){var t=Object.prototype.toString.call(e);return i[t]?i[t]:null===e?"null":void 0===e?"undefined":e===Object(e)?"object":typeof e}function o(){this.tests={}}var n=t.exports=r,i={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};n.Library=o,o.prototype.of=r,o.prototype.define=function(e,t){return 1===arguments.length?this.tests[e]:(this.tests[e]=t,this)},o.prototype.test=function(e,t){if(t===r(e))return!0;var n=this.tests[t];if(n&&"regexp"===r(n))return n.test(e);if(n&&"function"===r(n))return n(e);throw new ReferenceError('Type test "'+t+'" not defined or invalid.')}},{}],35:[function(e,t,n){(function(r){!function(e){if("object"==typeof n&&void 0!==t)t.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o;o="undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:this,o.localforage=e()}}(function(){return function t(n,r,o){function i(s,u){if(!r[s]){if(!n[s]){var c="function"==typeof e&&e;if(!u&&c)return c(s,!0);if(a)return a(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var l=r[s]={exports:{}};n[s][0].call(l.exports,function(e){var t=n[s][1][e];return i(t||e)},l,l.exports,t,n,r,o)}return r[s].exports}for(var a="function"==typeof e&&e,s=0;s=43)}}).catch(function(){return!1})}function c(e){return"boolean"==typeof re?ie.resolve(re):u(e).then(function(e){return re=e})}function f(e){var t=oe[e.name],n={};n.promise=new ie(function(e){n.resolve=e}),t.deferredOperations.push(n),t.dbReady?t.dbReady=t.dbReady.then(function(){return n.promise}):t.dbReady=n.promise}function l(e){var t=oe[e.name],n=t.deferredOperations.pop();n&&n.resolve()}function d(e,t){return new ie(function(n,r){if(e.db){if(!t)return n(e.db);f(e),e.db.close()}var o=[e.name];t&&o.push(e.version);var i=ne.open.apply(ne,o);t&&(i.onupgradeneeded=function(t){var n=i.result;try{n.createObjectStore(e.storeName),t.oldVersion<=1&&n.createObjectStore(ae)}catch(n){if("ConstraintError"!==n.name)throw n;console.warn('The database "'+e.name+'" has been upgraded from version '+t.oldVersion+" to version "+t.newVersion+', but the storage "'+e.storeName+'" already exists.')}}),i.onerror=function(e){e.preventDefault(),r(i.error)},i.onsuccess=function(){n(i.result),l(e)}})}function h(e){return d(e,!1)}function p(e){return d(e,!0)}function v(e,t){if(!e.db)return!0;var n=!e.db.objectStoreNames.contains(e.storeName),r=e.versione.db.version;if(r&&(e.version!==t&&console.warn('The database "'+e.name+"\" can't be downgraded from version "+e.db.version+" to version "+e.version+"."),e.version=e.db.version),o||n){if(n){var i=e.db.version+1;i>e.version&&(e.version=i)}return!0}return!1}function b(e){return new ie(function(t,n){var r=new FileReader;r.onerror=n,r.onloadend=function(n){var r=btoa(n.target.result||"");t({__local_forage_encoded_blob:!0,data:r,type:e.type})},r.readAsBinaryString(e)})}function y(e){return o([s(atob(e.data))],{type:e.type})}function g(e){return e&&e.__local_forage_encoded_blob}function m(e){var t=this,n=t._initReady().then(function(){var e=oe[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady});return a(n,e,e),n}function w(e){function t(){return ie.resolve()}var n=this,r={db:null};if(e)for(var o in e)r[o]=e[o];oe||(oe={});var i=oe[r.name];i||(i={forages:[],db:null,dbReady:null,deferredOperations:[]},oe[r.name]=i),i.forages.push(n),n._initReady||(n._initReady=n.ready,n.ready=m);for(var a=[],s=0;s>4,f[u++]=(15&r)<<4|o>>2,f[u++]=(3&o)<<6|63&i;return c}function M(e){var t,n=new Uint8Array(e),r="";for(t=0;t>2],r+=ce[(3&n[t])<<4|n[t+1]>>4],r+=ce[(15&n[t+1])<<2|n[t+2]>>6],r+=ce[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}function I(e,t){var n="";if(e&&(n=Ae.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===Ae.call(e.buffer))){var r,o=de;e instanceof ArrayBuffer?(r=e,o+=pe):(r=e.buffer,"[object Int8Array]"===n?o+=be:"[object Uint8Array]"===n?o+=ye:"[object Uint8ClampedArray]"===n?o+=ge:"[object Int16Array]"===n?o+=me:"[object Uint16Array]"===n?o+=xe:"[object Int32Array]"===n?o+=we:"[object Uint32Array]"===n?o+=Ee:"[object Float32Array]"===n?o+=je:"[object Float64Array]"===n?o+=Oe:t(new Error("Failed to get type for BinaryArray"))),t(o+M(r))}else if("[object Blob]"===n){var i=new FileReader;i.onload=function(){var n=fe+e.type+"~"+M(this.result);t(de+ve+n)},i.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(n){console.error("Couldn't convert value into a JSON string: ",e),t(null,n)}}function k(e){if(e.substring(0,he)!==de)return JSON.parse(e);var t,n=e.substring(Se),r=e.substring(he,Se);if(r===ve&&le.test(n)){var i=n.match(le);t=i[1],n=n.substring(i[0].length)}var a=P(n);switch(r){case pe:return a;case ve:return o([a],{type:t});case be:return new Int8Array(a);case ye:return new Uint8Array(a);case ge:return new Uint8ClampedArray(a);case me:return new Int16Array(a);case xe:return new Uint16Array(a);case we:return new Int32Array(a);case Ee:return new Uint32Array(a);case je:return new Float32Array(a);case Oe:return new Float64Array(a);default:throw new Error("Unkown type: "+r)}}function T(e){var t=this,n={db:null};if(e)for(var r in e)n[r]="string"!=typeof e[r]?e[r].toString():e[r];var o=new ie(function(e,r){try{n.db=openDatabase(n.name,String(n.version),n.description,n.size)}catch(e){return r(e)}n.db.transaction(function(o){o.executeSql("CREATE TABLE IF NOT EXISTS "+n.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],function(){t._dbInfo=n,e()},function(e,t){r(t)})})});return n.serializer=_e,o}function C(e,t){var n=this;"string"!=typeof e&&(console.warn(e+" used as a key, but it is not a string."),e=String(e));var r=new ie(function(t,r){n.ready().then(function(){var o=n._dbInfo;o.db.transaction(function(n){n.executeSql("SELECT * FROM "+o.storeName+" WHERE key = ? LIMIT 1",[e],function(e,n){var r=n.rows.length?n.rows.item(0).value:null;r&&(r=o.serializer.deserialize(r)),t(r)},function(e,t){r(t)})})}).catch(r)});return i(r,t),r}function R(e,t){var n=this,r=new ie(function(t,r){n.ready().then(function(){var o=n._dbInfo;o.db.transaction(function(n){n.executeSql("SELECT * FROM "+o.storeName,[],function(n,r){for(var i=r.rows,a=i.length,s=0;s0)return void i(q.apply(o,[e,s,n,r-1]));a(t)}})})}).catch(a)});return i(a,n),a}function L(e,t,n){return q.apply(this,[e,t,n,1])}function D(e,t){var n=this;"string"!=typeof e&&(console.warn(e+" used as a key, but it is not a string."),e=String(e));var r=new ie(function(t,r){n.ready().then(function(){var o=n._dbInfo;o.db.transaction(function(n){n.executeSql("DELETE FROM "+o.storeName+" WHERE key = ?",[e],function(){t()},function(e,t){r(t)})})}).catch(r)});return i(r,t),r}function B(e){var t=this,n=new ie(function(e,n){t.ready().then(function(){var r=t._dbInfo;r.db.transaction(function(t){t.executeSql("DELETE FROM "+r.storeName,[],function(){e()},function(e,t){n(t)})})}).catch(n)});return i(n,e),n}function F(e){var t=this,n=new ie(function(e,n){t.ready().then(function(){var r=t._dbInfo;r.db.transaction(function(t){t.executeSql("SELECT COUNT(key) as c FROM "+r.storeName,[],function(t,n){var r=n.rows.item(0).c;e(r)},function(e,t){n(t)})})}).catch(n)});return i(n,e),n}function z(e,t){var n=this,r=new ie(function(t,r){n.ready().then(function(){var o=n._dbInfo;o.db.transaction(function(n){n.executeSql("SELECT key FROM "+o.storeName+" WHERE id = ? LIMIT 1",[e+1],function(e,n){var r=n.rows.length?n.rows.item(0).key:null;t(r)},function(e,t){r(t)})})}).catch(r)});return i(r,t),r}function U(e){var t=this,n=new ie(function(e,n){t.ready().then(function(){var r=t._dbInfo;r.db.transaction(function(t){t.executeSql("SELECT key FROM "+r.storeName,[],function(t,n){for(var r=[],o=0;o=0;n--){var r=localStorage.key(n);0===r.indexOf(e)&&localStorage.removeItem(r)}});return i(n,e),n}function J(e,t){var n=this;"string"!=typeof e&&(console.warn(e+" used as a key, but it is not a string."),e=String(e));var r=n.ready().then(function(){var t=n._dbInfo,r=localStorage.getItem(t.keyPrefix+e);return r&&(r=t.serializer.deserialize(r)),r});return i(r,t),r}function G(e,t){var n=this,r=n.ready().then(function(){for(var t=n._dbInfo,r=t.keyPrefix,o=r.length,i=localStorage.length,a=1,s=0;s=e.length-1||t<0?0:t+1}function getCurrentProblem(e){return e[config.currentIndex]}function previousProblem(){console.log("previousProblem!"),previousProblemButtonEl.classList.add("active"),config.currentIndex=config.shuffle?getRandomIndex(problems):getPreviousIndex(problems),updateLocalstore(config).then(function(){window.location.reload()})}function nextProblem(){console.log("nextProblem!"), -nextProblemButtonEl.classList.add("active"),config.currentIndex=config.shuffle?getRandomIndex(problems):getNextIndex(problems),updateLocalstore(config).then(function(){window.location.reload()})}function toggleShuffle(){console.log("toggle shuffle!"),config.shuffle=!config.shuffle,shuffleProblemsButtonEl.classList.toggle("active"),previousProblemButtonEl.parentNode.classList.toggle("hidden"),updateLocalstore(config)}function loadProblem(e){currentProblem=e,problemEl.innerText=e.prompt,e.given&&(codeEl.value=e.given),testSuite(null,!0)}function updateTests(e,t){!0===t&&buildTests(currentProblem.tests),updateTestStatus(e)}function buildTests(e){if(e){var t=e.map(function(e){return'
\n
[✘]
\n
'+e.name+"
\n
"}).join("");testSuiteEl.innerHTML=t}}function updateTestStatus(e){if(!e)throw new Error("No testStatuses provided.");var t=!0;e.forEach(function(e){!0!==e&&(t=!1)}),[].slice.call(testSuiteEl.querySelectorAll(".test-state")).forEach(function(t,n){!0===e[n]?(t.innerHTML="[✓]",t.classList.remove("fail"),t.classList.add("pass")):(t.innerHTML="[✘]",t.classList.remove("pass"),t.classList.add("fail"))}),!0===t?(testTotalEl.innerText="PASS",testTotalEl.classList.remove("fail"),testTotalEl.classList.add("pass")):(testTotalEl.innerText="FAIL",testTotalEl.classList.remove("pass"),testTotalEl.classList.add("fail"))}function printAssertError(e){var t="";null!==e&&(t='\n
\n Expected: '+JSON.stringify(e.expected)+"\n Actual: "+JSON.stringify(e.actual)+"\n
"),assertConsoleEl.innerHTML=t}function printEvalOutput(e,t){var n="";e&&void 0!==e.message?n='\n
\n Syntax Error: '+JSON.stringify(e.message)+"\n
":t&&(n='\n
\n Output: '+JSON.stringify(t)+"\n
"),evalConsoleEl.innerHTML=n}function testSuite(e){testTotalEl.classList.toggle("working");var t=getOutput(codeEl.value),n=runTests(t);testTotalEl.classList.toggle("working"),updateTests(n,e)}function getOutput(code){var evald=!1;try{evald=eval("(function(){"+code+"})()"),printEvalOutput(null,evald)}catch(e){printEvalOutput(e)}return evald}function runTests(e){return currentProblem.tests.map(function(t){var n=!1;try{e&&(n=t.test(e)),printAssertError(null)}catch(e){printAssertError(e)}return n})}function loadApp(e){function t(t){!1===e.shuffle&&13===t.keyCode&&t.shiftKey&&(t.metaKey||t.ctrlKey)?previousProblem():13!==t.keyCode||t.shiftKey||!t.metaKey&&!t.ctrlKey||nextProblem()}console.log("loading app!"),!0===e.shuffle&&(shuffleProblemsButtonEl.classList.add("active"),previousProblemButtonEl.parentNode.classList.add("hidden"));var n=debounce(function(e){-1===ignoreKeyCodes.indexOf(e.keyCode)&&testSuite()},200);codeEl.addEventListener("keydown",n),document.addEventListener("keydown",t),shuffleProblemsButtonEl.addEventListener("click",toggleShuffle),previousProblemButtonEl.addEventListener("click",previousProblem),nextProblemButtonEl.addEventListener("click",nextProblem),loadProblem(getCurrentProblem(problems)),testSuite(!0)}var localforage=require("localforage"),problems=require("../problems/arrays.js"),currentProblem=void 0,ignoreKeyCodes=[9,37,39,38,40],config={shuffle:!0,timer:!1,currentIndex:0};localforage.getItem("js_practice_config").then(function(e){e&&(config=e),loadApp(config)}).catch(function(e){console.log("localforage err:",e),loadApp(config)});var problemEl=document.getElementById("problem"),codeEl=document.getElementById("code"),testSuiteEl=document.getElementById("test-suite"),testTotalEl=document.getElementById("test-total"),evalConsoleEl=document.getElementById("eval-output"),assertConsoleEl=document.getElementById("assert-output"),shuffleProblemsButtonEl=document.getElementById("shuffle-problems"),previousProblemButtonEl=document.getElementById("prev-problem"),nextProblemButtonEl=document.getElementById("next-problem")}(document,window)},{"../problems/arrays.js":39,localforage:35}],39:[function(e,t,n){"use strict";var r=e("chai").assert;t.exports=[{name:"Create Array",time:10,prompt:"Create and return an array that contains 'apple' and 'banana'",given:"const fruits = [];\rreturn fruits;",answer:"const fruits = ['apple', 'banana'];\n return fruits;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,["apple","banana"])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 2 items",test:function(e){return void 0===r.lengthOf(e,2)}}]},{name:"Access Array by index (first)",time:10,prompt:"Return the first value of the Array",given:"const fruits = ['apple', 'banana'];\r",answer:"const fruits = ['apple', 'banana'];\n return fruits[0];",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,"apple")}},{name:"Returns a String",test:function(e){return void 0===r.isString(e)}}]},{name:"Access Array by index (last)",time:10,prompt:"Return the last value of the Array",given:"const fruits = ['apple', 'banana', 'orange'];\r",answer:"const fruits = ['apple', 'banana', 'orange'];\n return fruits[fruits.length - 1];",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,"orange")}},{name:"Returns a String",test:function(e){return void 0===r.isString(e)}}]},{name:"Access Array by index (second)",time:10,prompt:"Return the second value of the Array",given:"const fruits = ['apple', 'banana'];\r",answer:"const fruits = ['apple', 'banana'];\n return fruits[1];",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,"banana")}},{name:"Returns a String",test:function(e){return void 0===r.isString(e)}}]},{name:"Array.forEach()",time:20,prompt:"Loop over the array, add an 'x' to the end of each name, push each fruit into a new array, then return the new array.",given:"const fruits = ['apple', 'banana'];\r",answer:"const fruits = ['apple', 'banana'];\n const newFruits = [];\n fruits.forEach(function(item) {\n newFruits.push(item+'x');\n });\n return newFruits;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,["applex","bananax"])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 2 items",test:function(e){return void 0===r.lengthOf(e,2)}}]},{name:"Array.push()",time:10,prompt:"Add 'orange' to the end of the 'fruits' array and return 'fruits'.",given:"const fruits = ['apple', 'banana'];\r",answer:"const fruits = ['apple', 'banana'];\n fruits.push('orange');\n return fruits;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,["apple","banana","orange"])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 3 items",test:function(e){return void 0===r.lengthOf(e,3)}}]},{name:"Array.pop()",time:10,prompt:"Remove 'orange' from the end of the 'fruits' array and return 'fruits'.",given:"const fruits = ['apple', 'banana', 'orange'];\r",answer:"const fruits = ['apple', 'banana', 'orange'];\n fruits.pop();\n return fruits;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,["apple","banana"])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 2 items",test:function(e){return void 0===r.lengthOf(e,2)}}]},{name:"Array.shift()",time:10,prompt:"Remove 'apple' from the front of the 'fruits' array and return 'fruits'.",given:"const fruits = ['apple', 'banana', 'orange'];\r",answer:"const fruits = ['apple', 'banana', 'orange'];\n fruits.shift();\n return fruits;",tests:[{name:"Output must be correct",test:function(e){return void 0===r.deepEqual(e,["banana","orange"])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 2 items",test:function(e){return void 0===r.lengthOf(e,2)}}]},{name:"Array.unshift()",time:10,prompt:"Add 'strawberry' to the front of the 'fruits' array and return 'fruits'.",given:"const fruits = ['apple', 'banana', 'orange'];\r",answer:"const fruits = ['apple', 'banana', 'orange'];\n fruits.unshift('strawberry');\n return fruits;",tests:[{name:"Output must be correct",test:function(e){return void 0===r.deepEqual(e,["strawberry","apple","banana","orange"])}},{name:"Must return an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 4 items",test:function(e){return void 0===r.lengthOf(e,4)}}]},{name:"Array.indexOf()",time:10,prompt:"Return the index of 'banana' in the Array.",given:"const fruits = ['strawberry', 'banana', 'mango'];\r",answer:"const fruits = ['strawberry', 'banana', 'mango'];\n const ind = fruits.indexOf('banana');\n return ind;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,1)}},{name:"Returns a Number",test:function(e){return void 0===r.isNumber(e)}}]},{name:"Array.concat()",time:10,prompt:"Merge the two arrays using Array's 'concat()' method. Return the resulting array.",given:"const fruits = ['strawberry', 'banana'];\rconst otherFruits = ['pear','peach'];\r",answer:"const fruits = ['strawberry', 'banana'];\n const otherFruits = ['pear','peach'];\n const allTheFruits = fruits.concat(otherFruits);\n return allTheFruits;\r",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,["strawberry","banana","pear","peach"])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 4 items",test:function(e){return void 0===r.lengthOf(e,4)}}]},{name:"Array.join()",time:10,prompt:"Mix the two flavors with a '-' using Array's 'join' method. Return the resulting hybrid flavor.",given:"const fruits = ['strawberry', 'banana'];\r",answer:"const fruits = ['strawberry', 'banana'];\n const hybrid = fruits.join('-');\n return hybrid;\r",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,"strawberry-banana")}},{name:"Returns a String",test:function(e){return void 0===r.isString(e)}}]},{name:"Array.slice()",time:20,prompt:"Return just the citrus fruits from the 'fruits' array using 'Array.slice()'",given:"const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\r",answer:"const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\n const citrus = fruits.slice(1, 3);\n return citrus;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,["orange","lemon"])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 2 items",test:function(e){return void 0===r.lengthOf(e,2)}}]},{name:"Array.reverse()",time:10,prompt:"Reverse the order of the 'fruit' array using 'Array.reverse()'",given:"const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\r",answer:"const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\n const stiurf = fruits.reverse();\n return stiurf;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,["banana","lemon","orange","strawberry"])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 4 items",test:function(e){return void 0===r.lengthOf(e,4)}},{name:"First item is 'banana'",test:function(e){return void 0===r.deepEqual(e[0],"banana")}}]},{name:"Array.sort()",time:10,prompt:"Sort the order of the 'fruit' array using 'Array.sort()'",given:"const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\r",answer:"const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\n const orderlyFruit = fruits.sort();\n return orderlyFruit;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,["banana","lemon","orange","strawberry"])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 4 items",test:function(e){return void 0===r.lengthOf(e,4)}},{name:"First item is 'banana'",test:function(e){return void 0===r.deepEqual(e[0],"banana")}}]},{name:"Array.lastIndexOf()",time:10,prompt:"Return the index of the last 'peach' instance in the 'fruit' array using 'Array.lastIndexOf()'",given:"const fruits = ['peach', 'orange', 'lemon', 'peach'];\r",answer:"const fruits = ['peach', 'orange', 'lemon', 'peach'];\n const wheresTheLastPeach = fruits.lastIndexOf('peach');\n return wheresTheLastPeach;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,3)}},{name:"Returns a Number",test:function(e){return void 0===r.isNumber(e)}}]},{name:"Array.filter()",time:10,prompt:"Return an array of the numbers greater than 5 in 'numbers' using 'Array.filter()'",given:"const numbers = [1, 1, 2, 3, 5, 8, 13, 21];\r",answer:"const numbers = [1, 1, 2, 3, 5, 8, 13, 21];\n const overFive = numbers.filter(num => num > 5);\n return overFive;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,[8,13,21])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 3 items",test:function(e){return void 0===r.lengthOf(e,3)}},{name:"First item is 8",test:function(e){return void 0===r.deepEqual(e[0],8)}}]},{name:"Array.map()",time:10,prompt:"Return an array of 'numbers' array's square roots, using 'Array.map()' and 'Math.sqrt()'",given:"const numbers = [25, 121, 169];\r",answer:"const numbers = [25, 121, 169];\n const roots = numbers.map(num => Math.sqrt(num));\n return roots;",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,[5,11,13])}},{name:"Returns an Array",test:function(e){return void 0===r.isArray(e)}},{name:"Array has 3 items",test:function(e){return void 0===r.lengthOf(e,3)}},{name:"First item is 5",test:function(e){return void 0===r.deepEqual(e[0],5)}},{name:"Last item is 13",test:function(e){return void 0===r.deepEqual(e[e.length-1],13)}}]},{name:"Array.every()",time:10,prompt:"Return object that returns whether each array contains all even numbers using Array.every().",given:"\nconst evenNumbers = [2, 4, 6, 8];\nconst someOddNumbers = [2, 5, 6, 8];\nfunction isEven(element) {\n\n}\nreturn {\n evenNumbers: evenNumbers.,\n someOddNumbers: someOddNumbers.\n};",answer:"\nconst evenNumbers = [2, 4, 6, 8];\nconst someOddNumbers = [2, 5, 6, 8];\nfunction isEven(element) {\n return element % 2 === 0\n}\nreturn {\n evenNumbers: evenNumbers.every(isEven),\n someOddNumbers: someOddNumbers.every(isEven)\n};",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,{evenNumbers:!0,someOddNumbers:!1})}},{name:"Returns an Object",test:function(e){return void 0===r.isObject(e)}},{name:"Object has 2 items",test:function(e){return void 0===r.lengthOf(Object.keys(e),2)}},{name:"First value is true",test:function(e){return void 0===r.isTrue(e.evenNumbers)}},{name:"Second value is false",test:function(e){return void 0===r.isFalse(e.someOddNumbers)}}]},{name:"Array.some()",time:10,prompt:"Return object that returns whether each array contains some odd numbers using Array.some().",given:"\nconst evenNumbers = [2, 4, 6, 8];\nconst someOddNumbers = [2, 4, 7, 8];\nfunction isOdd(element) {\n\n}\nreturn {\n evenNumbers: evenNumbers.,\n someOddNumbers: someOddNumbers.\n};",answer:"\nconst evenNumbers = [1, 3, 5, 7];\nconst someOddNumbers = [1, 3, 6, 7];\nfunction isOdd(element) {\n return element % 2 !== 0;\n}\nreturn {\n evenNumbers: evenNumbers.some(isOdd),\n someOddNumbers: someOddNumbers.some(isOdd)\n};",tests:[{name:"Correct output",test:function(e){return void 0===r.deepEqual(e,{evenNumbers:!1,someOddNumbers:!0})}},{name:"Returns an Object",test:function(e){return void 0===r.isObject(e)}},{name:"Object has 2 items",test:function(e){return void 0===r.lengthOf(Object.keys(e),2)}},{name:"First value is false",test:function(e){return void 0===r.isFalse(e.evenNumbers)}},{name:"Second value is true",test:function(e){return void 0===r.isTrue(e.someOddNumbers)}}]}]},{chai:2}]},{},[38]); +!function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var f=n[a]={exports:{}};t[a][0].call(f.exports,function(e){var n=t[a][1][e];return o(n||e)},f,f.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;ae,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",e,r)}else this.assert(n>e,"expected #{this} to be above "+e,"expected #{this} to be at most "+e)}function u(e,t){t&&P(this,"message",t);var n=P(this,"object");if(P(this,"doLength")){new N(n,t).to.have.property("length");var r=n.length;this.assert(r>=e,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",e,r)}else this.assert(n>=e,"expected #{this} to be at least "+e,"expected #{this} to be below "+e)}function f(e,t){t&&P(this,"message",t);var n=P(this,"object");if(P(this,"doLength")){new N(n,t).to.have.property("length");var r=n.length;this.assert(r1)throw new Error(i);break;case"object":if(arguments.length>1)throw new Error(i);e=Object.keys(e);break;default:e=Array.prototype.slice.call(arguments)}if(!e.length)throw new Error("keys required");var a=Object.keys(r),s=e,c=e.length,u=P(this,"any"),f=P(this,"all");if(u||f||(f=!0),u&&(o=s.filter(function(e){return~a.indexOf(e)}).length>0),f&&(o=e.every(function(e){return~a.indexOf(e)}),P(this,"negate")||P(this,"contains")||(o=o&&e.length==a.length)),c>1){var l=(e=e.map(function(e){return t.inspect(e)})).pop();f&&(n=e.join(", ")+", and "+l),u&&(n=e.join(", ")+", or "+l)}else n=t.inspect(e[0]);n=(c>1?"keys ":"key ")+n,n=(P(this,"contains")?"contain ":"have ")+n,this.assert(o,"expected #{this} to "+n,"expected #{this} to not "+n,s.slice(0).sort(),a.sort(),!0)}function m(e,n,r){r&&P(this,"message",r);var o=P(this,"object");new N(o,r).is.a("function");var i=!1,a=null,s=null,c=null;0===arguments.length?(n=null,e=null):e&&(e instanceof RegExp||"string"==typeof e)?(n=e,e=null):e&&e instanceof Error?(a=e,e=null,n=null):"function"==typeof e?(!(s=e.prototype.name)||"Error"===s&&e!==Error)&&(s=e.name||(new e).name):e=null;try{o()}catch(r){if(a)return this.assert(r===a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",a instanceof Error?a.toString():a,r instanceof Error?r.toString():r),P(this,"object",r),this;if(e&&(this.assert(r instanceof e,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",s,r instanceof Error?r.toString():r),!n))return P(this,"object",r),this;var u="error"===t.type(r)&&"message"in r?r.message:""+r;if(null!=u&&n&&n instanceof RegExp)return this.assert(n.exec(u),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",n,u),P(this,"object",r),this;if(null!=u&&n&&"string"==typeof n)return this.assert(~u.indexOf(n),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",n,u),P(this,"object",r),this;i=!0,c=r}var f="",l=null!==s?s:a?"#{exp}":"an error";i&&(f=" but #{act} was thrown"),this.assert(!0===i,"expected #{this} to throw "+l+f,"expected #{this} to not throw "+l+f,a instanceof Error?a.toString():a,c instanceof Error?c.toString():c),P(this,"object",c)}function w(e,n){n&&P(this,"message",n);var r=P(this,"object"),o=P(this,"itself"),i="function"!==t.type(r)||o?r[e]:r.prototype[e];this.assert("function"==typeof i,"expected #{this} to respond to "+t.inspect(e),"expected #{this} to not respond to "+t.inspect(e))}function x(e,n){n&&P(this,"message",n);var r=e(P(this,"object"));this.assert(r,"expected #{this} to satisfy "+t.objDisplay(e),"expected #{this} to not satisfy"+t.objDisplay(e),!this.negate,r)}function j(e,n,r){r&&P(this,"message",r);var o=P(this,"object");if(new N(o,r).is.a("number"),"number"!==t.type(e)||"number"!==t.type(n))throw new Error("the arguments to closeTo or approximately must be numbers");this.assert(Math.abs(o-e)<=n,"expected #{this} to be close to "+e+" +/- "+n,"expected #{this} not to be close to "+e+" +/- "+n)}function E(e,t,n){return e.every(function(e){return n?t.some(function(t){return n(e,t)}):-1!==t.indexOf(e)})}function S(e,t){t&&P(this,"message",t);var n=P(this,"object");new N(e).to.be.an("array"),this.assert(e.indexOf(n)>-1,"expected #{this} to be one of #{exp}","expected #{this} to not be one of #{exp}",e,n)}function _(e,t,n){n&&P(this,"message",n);var r=P(this,"object");new N(e,n).to.have.property(t),new N(r).is.a("function");var o=e[t];r(),this.assert(o!==e[t],"expected ."+t+" to change","expected ."+t+" to not change")}function O(e,t,n){n&&P(this,"message",n);var r=P(this,"object");new N(e,n).to.have.property(t),new N(r).is.a("function");var o=e[t];r(),this.assert(e[t]-o>0,"expected ."+t+" to increase","expected ."+t+" to not increase")}function A(e,t,n){n&&P(this,"message",n);var r=P(this,"object");new N(e,n).to.have.property(t),new N(r).is.a("function");var o=e[t];r(),this.assert(e[t]-o<0,"expected ."+t+" to decrease","expected ."+t+" to not decrease")}var N=e.Assertion,P=(Object.prototype.toString,t.flag);["to","be","been","is","and","has","have","with","that","which","at","of","same"].forEach(function(e){N.addProperty(e,function(){return this})}),N.addProperty("not",function(){P(this,"negate",!0)}),N.addProperty("deep",function(){P(this,"deep",!0)}),N.addProperty("any",function(){P(this,"any",!0),P(this,"all",!1)}),N.addProperty("all",function(){P(this,"all",!0),P(this,"any",!1)}),N.addChainableMethod("an",n),N.addChainableMethod("a",n),N.addChainableMethod("include",o,r),N.addChainableMethod("contain",o,r),N.addChainableMethod("contains",o,r),N.addChainableMethod("includes",o,r),N.addProperty("ok",function(){this.assert(P(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),N.addProperty("true",function(){this.assert(!0===P(this,"object"),"expected #{this} to be true","expected #{this} to be false",!this.negate)}),N.addProperty("false",function(){this.assert(!1===P(this,"object"),"expected #{this} to be false","expected #{this} to be true",!!this.negate)}),N.addProperty("null",function(){this.assert(null===P(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),N.addProperty("undefined",function(){this.assert(void 0===P(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),N.addProperty("NaN",function(){this.assert(isNaN(P(this,"object")),"expected #{this} to be NaN","expected #{this} not to be NaN")}),N.addProperty("exist",function(){this.assert(null!=P(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),N.addProperty("empty",function(){var e=P(this,"object"),t=e;Array.isArray(e)||"string"==typeof object?t=e.length:"object"==typeof e&&(t=Object.keys(e).length),this.assert(!t,"expected #{this} to be empty","expected #{this} not to be empty")}),N.addProperty("arguments",i),N.addProperty("Arguments",i),N.addMethod("equal",a),N.addMethod("equals",a),N.addMethod("eq",a),N.addMethod("eql",s),N.addMethod("eqls",s),N.addMethod("above",c),N.addMethod("gt",c),N.addMethod("greaterThan",c),N.addMethod("least",u),N.addMethod("gte",u),N.addMethod("below",f),N.addMethod("lt",f),N.addMethod("lessThan",f),N.addMethod("most",l),N.addMethod("lte",l),N.addMethod("within",function(e,t,n){n&&P(this,"message",n);var r=P(this,"object"),o=e+".."+t;if(P(this,"doLength")){new N(r,n).to.have.property("length");var i=r.length;this.assert(i>=e&&i<=t,"expected #{this} to have a length within "+o,"expected #{this} to not have a length within "+o)}else this.assert(r>=e&&r<=t,"expected #{this} to be within "+o,"expected #{this} to not be within "+o)}),N.addMethod("instanceof",d),N.addMethod("instanceOf",d),N.addMethod("property",function(e,n,r){r&&P(this,"message",r);var o=!!P(this,"deep"),i=o?"deep property ":"property ",a=P(this,"negate"),s=P(this,"object"),c=o?t.getPathInfo(e,s):null,u=o?c.exists:t.hasProperty(e,s),f=o?c.value:s[e];if(a&&arguments.length>1){if(void 0===f)throw r=null!=r?r+": ":"",new Error(r+t.inspect(s)+" has no "+i+t.inspect(e))}else this.assert(u,"expected #{this} to have a "+i+t.inspect(e),"expected #{this} to not have "+i+t.inspect(e));arguments.length>1&&this.assert(n===f,"expected #{this} to have a "+i+t.inspect(e)+" of #{exp}, but got #{act}","expected #{this} to not have a "+i+t.inspect(e)+" of #{act}",n,f),P(this,"object",f)}),N.addMethod("ownProperty",h),N.addMethod("haveOwnProperty",h),N.addMethod("ownPropertyDescriptor",p),N.addMethod("haveOwnPropertyDescriptor",p),N.addChainableMethod("length",y,v),N.addMethod("lengthOf",y),N.addMethod("match",g),N.addMethod("matches",g),N.addMethod("string",function(e,n){n&&P(this,"message",n);var r=P(this,"object");new N(r,n).is.a("string"),this.assert(~r.indexOf(e),"expected #{this} to contain "+t.inspect(e),"expected #{this} to not contain "+t.inspect(e))}),N.addMethod("keys",b),N.addMethod("key",b),N.addMethod("throw",m),N.addMethod("throws",m),N.addMethod("Throw",m),N.addMethod("respondTo",w),N.addMethod("respondsTo",w),N.addProperty("itself",function(){P(this,"itself",!0)}),N.addMethod("satisfy",x),N.addMethod("satisfies",x),N.addMethod("closeTo",j),N.addMethod("approximately",j),N.addMethod("members",function(e,n){n&&P(this,"message",n);var r=P(this,"object");new N(r).to.be.an("array"),new N(e).to.be.an("array");var o=P(this,"deep")?t.eql:void 0;if(P(this,"contains"))return this.assert(E(e,r,o),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",r,e);this.assert(E(r,e,o)&&E(e,r,o),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",r,e)}),N.addMethod("oneOf",S),N.addChainableMethod("change",_),N.addChainableMethod("changes",_),N.addChainableMethod("increase",O),N.addChainableMethod("increases",O),N.addChainableMethod("decrease",A),N.addChainableMethod("decreases",A),N.addProperty("extensible",function(){var e,t=P(this,"object");try{e=Object.isExtensible(t)}catch(t){if(!(t instanceof TypeError))throw t;e=!1}this.assert(e,"expected #{this} to be extensible","expected #{this} to not be extensible")}),N.addProperty("sealed",function(){var e,t=P(this,"object");try{e=Object.isSealed(t)}catch(t){if(!(t instanceof TypeError))throw t;e=!0}this.assert(e,"expected #{this} to be sealed","expected #{this} to not be sealed")}),N.addProperty("frozen",function(){var e,t=P(this,"object");try{e=Object.isFrozen(t)}catch(t){if(!(t instanceof TypeError))throw t;e=!0}this.assert(e,"expected #{this} to be frozen","expected #{this} to not be frozen")})}},{}],7:[function(e,t,n){t.exports=function(e,t){var n=e.Assertion,r=t.flag,o=e.assert=function(t,r){new n(null,null,e.assert).assert(t,r,"[ negation message unavailable ]")};o.fail=function(t,n,r,i){throw r=r||"assert.fail()",new e.AssertionError(r,{actual:t,expected:n,operator:i},o.fail)},o.isOk=function(e,t){new n(e,t).is.ok},o.isNotOk=function(e,t){new n(e,t).is.not.ok},o.equal=function(e,t,i){var a=new n(e,i,o.equal);a.assert(t==r(a,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",t,e)},o.notEqual=function(e,t,i){var a=new n(e,i,o.notEqual);a.assert(t!=r(a,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",t,e)},o.strictEqual=function(e,t,r){new n(e,r).to.equal(t)},o.notStrictEqual=function(e,t,r){new n(e,r).to.not.equal(t)},o.deepEqual=function(e,t,r){new n(e,r).to.eql(t)},o.notDeepEqual=function(e,t,r){new n(e,r).to.not.eql(t)},o.isAbove=function(e,t,r){new n(e,r).to.be.above(t)},o.isAtLeast=function(e,t,r){new n(e,r).to.be.least(t)},o.isBelow=function(e,t,r){new n(e,r).to.be.below(t)},o.isAtMost=function(e,t,r){new n(e,r).to.be.most(t)},o.isTrue=function(e,t){new n(e,t).is.true},o.isNotTrue=function(e,t){new n(e,t).to.not.equal(!0)},o.isFalse=function(e,t){new n(e,t).is.false},o.isNotFalse=function(e,t){new n(e,t).to.not.equal(!1)},o.isNull=function(e,t){new n(e,t).to.equal(null)},o.isNotNull=function(e,t){new n(e,t).to.not.equal(null)},o.isNaN=function(e,t){new n(e,t).to.be.NaN},o.isNotNaN=function(e,t){new n(e,t).not.to.be.NaN},o.isUndefined=function(e,t){new n(e,t).to.equal(void 0)},o.isDefined=function(e,t){new n(e,t).to.not.equal(void 0)},o.isFunction=function(e,t){new n(e,t).to.be.a("function")},o.isNotFunction=function(e,t){new n(e,t).to.not.be.a("function")},o.isObject=function(e,t){new n(e,t).to.be.a("object")},o.isNotObject=function(e,t){new n(e,t).to.not.be.a("object")},o.isArray=function(e,t){new n(e,t).to.be.an("array")},o.isNotArray=function(e,t){new n(e,t).to.not.be.an("array")},o.isString=function(e,t){new n(e,t).to.be.a("string")},o.isNotString=function(e,t){new n(e,t).to.not.be.a("string")},o.isNumber=function(e,t){new n(e,t).to.be.a("number")},o.isNotNumber=function(e,t){new n(e,t).to.not.be.a("number")},o.isBoolean=function(e,t){new n(e,t).to.be.a("boolean")},o.isNotBoolean=function(e,t){new n(e,t).to.not.be.a("boolean")},o.typeOf=function(e,t,r){new n(e,r).to.be.a(t)},o.notTypeOf=function(e,t,r){new n(e,r).to.not.be.a(t)},o.instanceOf=function(e,t,r){new n(e,r).to.be.instanceOf(t)},o.notInstanceOf=function(e,t,r){new n(e,r).to.not.be.instanceOf(t)},o.include=function(e,t,r){new n(e,r,o.include).include(t)},o.notInclude=function(e,t,r){new n(e,r,o.notInclude).not.include(t)},o.match=function(e,t,r){new n(e,r).to.match(t)},o.notMatch=function(e,t,r){new n(e,r).to.not.match(t)},o.property=function(e,t,r){new n(e,r).to.have.property(t)},o.notProperty=function(e,t,r){new n(e,r).to.not.have.property(t)},o.deepProperty=function(e,t,r){new n(e,r).to.have.deep.property(t)},o.notDeepProperty=function(e,t,r){new n(e,r).to.not.have.deep.property(t)},o.propertyVal=function(e,t,r,o){new n(e,o).to.have.property(t,r)},o.propertyNotVal=function(e,t,r,o){new n(e,o).to.not.have.property(t,r)},o.deepPropertyVal=function(e,t,r,o){new n(e,o).to.have.deep.property(t,r)},o.deepPropertyNotVal=function(e,t,r,o){new n(e,o).to.not.have.deep.property(t,r)},o.lengthOf=function(e,t,r){new n(e,r).to.have.length(t)},o.throws=function(e,t,o,i){("string"==typeof t||t instanceof RegExp)&&(o=t,t=null);var a=new n(e,i).to.throw(t,o);return r(a,"object")},o.doesNotThrow=function(e,t,r){"string"==typeof t&&(r=t,t=null),new n(e,r).to.not.Throw(t)},o.operator=function(e,o,i,a){var s;switch(o){case"==":s=e==i;break;case"===":s=e===i;break;case">":s=e>i;break;case">=":s=e>=i;break;case"<":s=e1&&n===t.length-1?"or ":"")+r+" "+e}).join(", ");if(!t.some(function(t){return i(e)===t}))throw new r("object tested must be "+n+", but "+i(e)+" given")}},{"./flag":14,"assertion-error":1,"type-detect":40}],14:[function(e,t,n){t.exports=function(e,t,n){var r=e.__flags||(e.__flags=Object.create(null));if(3!==arguments.length)return r[t];r[t]=n}},{}],15:[function(e,t,n){t.exports=function(e,t){return t.length>4?t[4]:e._obj}},{}],16:[function(e,t,n){t.exports=function(e){var t=[];for(var n in e)t.push(n);return t}},{}],17:[function(e,t,n){var r=e("./flag"),o=e("./getActual"),i=(e("./inspect"),e("./objDisplay"));t.exports=function(e,t){var n=r(e,"negate"),a=r(e,"object"),s=t[3],c=o(e,t),u=n?t[2]:t[1],f=r(e,"message");return"function"==typeof u&&(u=u()),u=u||"",u=u.replace(/#\{this\}/g,function(){return i(a)}).replace(/#\{act\}/g,function(){return i(c)}).replace(/#\{exp\}/g,function(){return i(s)}),f?f+": "+u:u}},{"./flag":14,"./getActual":15,"./inspect":24,"./objDisplay":25}],18:[function(e,t,n){t.exports=function(e){if(e.name)return e.name;var t=/^\s?function ([^(]*)\(/.exec(e);return t&&t[1]?t[1]:""}},{}],19:[function(e,t,n){function r(e){return e.replace(/([^\\])\[/g,"$1.[").match(/(\\\.|[^.]+?)+/g).map(function(e){var t=/^\[(\d+)\]$/.exec(e);return t?{i:parseFloat(t[1])}:{p:e.replace(/\\([.\[\]])/g,"$1")}})}function o(e,t,n){for(var r,o=t,i=0,a=n=void 0===n?e.length:n;i1?o(n,t,n.length-1):t,name:a.p||a.i,value:o(n,t)};return s.exists=i(s.name,s.parent),s}},{"./hasProperty":22}],20:[function(e,t,n){var r=e("./getPathInfo");t.exports=function(e,t){return r(e,t).value}},{"./getPathInfo":19}],21:[function(e,t,n){t.exports=function(e){function t(e){-1===n.indexOf(e)&&n.push(e)}for(var n=Object.getOwnPropertyNames(e),r=Object.getPrototypeOf(e);null!==r;)Object.getOwnPropertyNames(r).forEach(t),r=Object.getPrototypeOf(r);return n}},{}],22:[function(e,t,n){var r=e("type-detect"),o={number:Number,string:String};t.exports=function(e,t){var n=r(t);return"null"!==n&&"undefined"!==n&&(o[n]&&"object"!=typeof t&&(t=new o[n](t)),e in t)}},{"type-detect":40}],23:[function(e,t,n){(n=t.exports={}).test=e("./test"),n.type=e("type-detect"),n.expectTypes=e("./expectTypes"),n.getMessage=e("./getMessage"),n.getActual=e("./getActual"),n.inspect=e("./inspect"),n.objDisplay=e("./objDisplay"),n.flag=e("./flag"),n.transferFlags=e("./transferFlags"),n.eql=e("deep-eql"),n.getPathValue=e("./getPathValue"),n.getPathInfo=e("./getPathInfo"),n.hasProperty=e("./hasProperty"),n.getName=e("./getName"),n.addProperty=e("./addProperty"),n.addMethod=e("./addMethod"),n.overwriteProperty=e("./overwriteProperty"),n.overwriteMethod=e("./overwriteMethod"),n.addChainableMethod=e("./addChainableMethod"),n.overwriteChainableMethod=e("./overwriteChainableMethod")},{"./addChainableMethod":10,"./addMethod":11,"./addProperty":12,"./expectTypes":13,"./flag":14,"./getActual":15,"./getMessage":17,"./getName":18,"./getPathInfo":19,"./getPathValue":20,"./hasProperty":22,"./inspect":24,"./objDisplay":25,"./overwriteChainableMethod":26,"./overwriteMethod":27,"./overwriteProperty":28,"./test":29,"./transferFlags":30,"deep-eql":32,"type-detect":40}],24:[function(e,t,n){function r(e,t,n,r){return o({showHidden:t,seen:[],stylize:function(e){return e}},e,void 0===n?2:n)}function o(e,t,r){if(t&&"function"==typeof t.inspect&&t.inspect!==n.inspect&&(!t.constructor||t.constructor.prototype!==t)){var p=t.inspect(r);return"string"!=typeof p&&(p=o(e,p,r)),p}var m=i(e,t);if(m)return m;if(b(t)){if("outerHTML"in t)return t.outerHTML;try{if(document.xmlVersion)return(new XMLSerializer).serializeToString(t);var w=document.createElementNS("http://www.w3.org/1999/xhtml","_");return w.appendChild(t.cloneNode(!1)),html=w.innerHTML.replace("><",">"+t.innerHTML+"<"),w.innerHTML="",html}catch(e){}}var x=g(t),j=e.showHidden?y(t):x;if(0===j.length||h(t)&&(1===j.length&&"stack"===j[0]||2===j.length&&"description"===j[0]&&"stack"===j[1])){if("function"==typeof t){var E=(A=v(t))?": "+A:"";return e.stylize("[Function"+E+"]","special")}if(l(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(d(t))return e.stylize(Date.prototype.toUTCString.call(t),"date");if(h(t))return a(t)}var S="",_=!1,O=["{","}"];if(f(t)&&(_=!0,O=["[","]"]),"function"==typeof t){var A=v(t);S=" [Function"+(E=A?": "+A:"")+"]"}if(l(t)&&(S=" "+RegExp.prototype.toString.call(t)),d(t)&&(S=" "+Date.prototype.toUTCString.call(t)),h(t))return a(t);if(0===j.length&&(!_||0==t.length))return O[0]+S+O[1];if(r<0)return l(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special");e.seen.push(t);var N;return N=_?s(e,t,r,x,j):j.map(function(n){return c(e,t,r,x,n,_)}),e.seen.pop(),u(N,S,O)}function i(e,t){switch(typeof t){case"undefined":return e.stylize("undefined","undefined");case"string":var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string");case"number":return 0===t&&1/t==-1/0?e.stylize("-0","number"):e.stylize(""+t,"number");case"boolean":return e.stylize(""+t,"boolean")}if(null===t)return e.stylize("null","null")}function a(e){return"["+Error.prototype.toString.call(e)+"]"}function s(e,t,n,r,o){for(var i=[],a=0,s=t.length;a-1&&(c=a?c.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+c.split("\n").map(function(e){return" "+e}).join("\n")):c=e.stylize("[Circular]","special")),void 0===s){if(a&&i.match(/^\d+$/))return c;(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+c}function u(e,t,n){var r=0;return e.reduce(function(e,t){return r++,t.indexOf("\n")>=0&&r++,e+t.length+1},0)>60?n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1]:n[0]+t+" "+e.join(", ")+" "+n[1]}function f(e){return Array.isArray(e)||"object"==typeof e&&"[object Array]"===p(e)}function l(e){return"object"==typeof e&&"[object RegExp]"===p(e)}function d(e){return"object"==typeof e&&"[object Date]"===p(e)}function h(e){return"object"==typeof e&&"[object Error]"===p(e)}function p(e){return Object.prototype.toString.call(e)}var v=e("./getName"),y=e("./getProperties"),g=e("./getEnumerableProperties");t.exports=r;var b=function(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&1===e.nodeType&&"string"==typeof e.nodeName}},{"./getEnumerableProperties":16,"./getName":18,"./getProperties":21}],25:[function(e,t,n){var r=e("./inspect"),o=e("../config");t.exports=function(e){var t=r(e),n=Object.prototype.toString.call(e);if(o.truncateThreshold&&t.length>=o.truncateThreshold){if("[object Function]"===n)return e.name&&""!==e.name?"[Function: "+e.name+"]":"[Function]";if("[object Array]"===n)return"[ Array("+e.length+") ]";if("[object Object]"===n){var i=Object.keys(e);return"{ Object ("+(i.length>2?i.splice(0,2).join(", ")+", ...":i.join(", "))+") }"}return t}return t}},{"../config":5,"./inspect":24}],26:[function(e,t,n){t.exports=function(e,t,n,r){var o=e.__methods[t],i=o.chainingBehavior;o.chainingBehavior=function(){var e=r(i).call(this);return void 0===e?this:e};var a=o.method;o.method=function(){var e=n(a).apply(this,arguments);return void 0===e?this:e}}},{}],27:[function(e,t,n){t.exports=function(e,t,n){var r=e[t],o=function(){return this};r&&"function"==typeof r&&(o=r),e[t]=function(){var e=n(o).apply(this,arguments);return void 0===e?this:e}}},{}],28:[function(e,t,n){t.exports=function(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t),o=function(){};r&&"function"==typeof r.get&&(o=r.get),Object.defineProperty(e,t,{get:function(){var e=n(o).call(this);return void 0===e?this:e},configurable:!0})}},{}],29:[function(e,t,n){var r=e("./flag");t.exports=function(e,t){var n=r(e,"negate"),o=t[0];return n?!o:o}},{"./flag":14}],30:[function(e,t,n){t.exports=function(e,t,n){var r=e.__flags||(e.__flags=Object.create(null));t.__flags||(t.__flags=Object.create(null)),n=3!==arguments.length||n;for(var o in r)(n||"object"!==o&&"ssfi"!==o&&"message"!=o)&&(t.__flags[o]=r[o])}},{}],31:[function(e,t,n){"use strict";function r(e){var t=void 0;t="string"==typeof e?[e]:e.raw;for(var n="",r=0;r=0;o--)if(s=i[o],!r(e[s],t[s],n))return!1;return!0}var p,v=e("type-detect");try{p=e("buffer").Buffer}catch(e){(p={}).isBuffer=function(){return!1}}t.exports=r},{buffer:void 0,"type-detect":38}],34:[function(e,t,n){(function(r){!function(e){if("object"==typeof n&&void 0!==t)t.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:this).localforage=e()}}(function(){return function t(n,r,o){function i(s,c){if(!r[s]){if(!n[s]){var u="function"==typeof e&&e;if(!c&&u)return u(s,!0);if(a)return a(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var l=r[s]={exports:{}};n[s][0].call(l.exports,function(e){var t=n[s][1][e];return i(t||e)},l,l.exports,t,n,r,o)}return r[s].exports}for(var a="function"==typeof e&&e,s=0;s=43)}}).catch(function(){return!1})}function u(e){return"boolean"==typeof re?ie.resolve(re):c(e).then(function(e){return re=e})}function f(e){var t=oe[e.name],n={};n.promise=new ie(function(e){n.resolve=e}),t.deferredOperations.push(n),t.dbReady?t.dbReady=t.dbReady.then(function(){return n.promise}):t.dbReady=n.promise}function l(e){var t=oe[e.name].deferredOperations.pop();t&&t.resolve()}function d(e,t){return new ie(function(n,r){if(e.db){if(!t)return n(e.db);f(e),e.db.close()}var o=[e.name];t&&o.push(e.version);var i=ne.open.apply(ne,o);t&&(i.onupgradeneeded=function(t){var n=i.result;try{n.createObjectStore(e.storeName),t.oldVersion<=1&&n.createObjectStore(ae)}catch(n){if("ConstraintError"!==n.name)throw n;console.warn('The database "'+e.name+'" has been upgraded from version '+t.oldVersion+" to version "+t.newVersion+', but the storage "'+e.storeName+'" already exists.')}}),i.onerror=function(e){e.preventDefault(),r(i.error)},i.onsuccess=function(){n(i.result),l(e)}})}function h(e){return d(e,!1)}function p(e){return d(e,!0)}function v(e,t){if(!e.db)return!0;var n=!e.db.objectStoreNames.contains(e.storeName),r=e.versione.db.version;if(r&&(e.version!==t&&console.warn('The database "'+e.name+"\" can't be downgraded from version "+e.db.version+" to version "+e.version+"."),e.version=e.db.version),o||n){if(n){var i=e.db.version+1;i>e.version&&(e.version=i)}return!0}return!1}function y(e){return new ie(function(t,n){var r=new FileReader;r.onerror=n,r.onloadend=function(n){var r=btoa(n.target.result||"");t({__local_forage_encoded_blob:!0,data:r,type:e.type})},r.readAsBinaryString(e)})}function g(e){return o([s(atob(e.data))],{type:e.type})}function b(e){return e&&e.__local_forage_encoded_blob}function m(e){var t=this,n=t._initReady().then(function(){var e=oe[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady});return a(n,e,e),n}function w(e){function t(){return ie.resolve()}var n=this,r={db:null};if(e)for(var o in e)r[o]=e[o];oe||(oe={});var i=oe[r.name];i||(i={forages:[],db:null,dbReady:null,deferredOperations:[]},oe[r.name]=i),i.forages.push(n),n._initReady||(n._initReady=n.ready,n.ready=m);for(var a=[],s=0;s>4,f[c++]=(15&r)<<4|o>>2,f[c++]=(3&o)<<6|63&i;return u}function M(e){var t,n=new Uint8Array(e),r="";for(t=0;t>2],r+=ue[(3&n[t])<<4|n[t+1]>>4],r+=ue[(15&n[t+1])<<2|n[t+2]>>6],r+=ue[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}function I(e,t){var n="";if(e&&(n=Oe.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===Oe.call(e.buffer))){var r,o=de;e instanceof ArrayBuffer?(r=e,o+=pe):(r=e.buffer,"[object Int8Array]"===n?o+=ye:"[object Uint8Array]"===n?o+=ge:"[object Uint8ClampedArray]"===n?o+=be:"[object Int16Array]"===n?o+=me:"[object Uint16Array]"===n?o+=xe:"[object Int32Array]"===n?o+=we:"[object Uint32Array]"===n?o+=je:"[object Float32Array]"===n?o+=Ee:"[object Float64Array]"===n?o+=Se:t(new Error("Failed to get type for BinaryArray"))),t(o+M(r))}else if("[object Blob]"===n){var i=new FileReader;i.onload=function(){var n=fe+e.type+"~"+M(this.result);t(de+ve+n)},i.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(n){console.error("Couldn't convert value into a JSON string: ",e),t(null,n)}}function k(e){if(e.substring(0,he)!==de)return JSON.parse(e);var t,n=e.substring(_e),r=e.substring(he,_e);if(r===ve&&le.test(n)){var i=n.match(le);t=i[1],n=n.substring(i[0].length)}var a=P(n);switch(r){case pe:return a;case ve:return o([a],{type:t});case ye:return new Int8Array(a);case ge:return new Uint8Array(a);case be:return new Uint8ClampedArray(a);case me:return new Int16Array(a);case xe:return new Uint16Array(a);case we:return new Int32Array(a);case je:return new Uint32Array(a);case Ee:return new Float32Array(a);case Se:return new Float64Array(a);default:throw new Error("Unkown type: "+r)}}function T(e){var t=this,n={db:null};if(e)for(var r in e)n[r]="string"!=typeof e[r]?e[r].toString():e[r];var o=new ie(function(e,r){try{n.db=openDatabase(n.name,String(n.version),n.description,n.size)}catch(e){return r(e)}n.db.transaction(function(o){o.executeSql("CREATE TABLE IF NOT EXISTS "+n.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],function(){t._dbInfo=n,e()},function(e,t){r(t)})})});return n.serializer=Ae,o}function C(e,t){var n=this;"string"!=typeof e&&(console.warn(e+" used as a key, but it is not a string."),e=String(e));var r=new ie(function(t,r){n.ready().then(function(){var o=n._dbInfo;o.db.transaction(function(n){n.executeSql("SELECT * FROM "+o.storeName+" WHERE key = ? LIMIT 1",[e],function(e,n){var r=n.rows.length?n.rows.item(0).value:null;r&&(r=o.serializer.deserialize(r)),t(r)},function(e,t){r(t)})})}).catch(r)});return i(r,t),r}function D(e,t){var n=this,r=new ie(function(t,r){n.ready().then(function(){var o=n._dbInfo;o.db.transaction(function(n){n.executeSql("SELECT * FROM "+o.storeName,[],function(n,r){for(var i=r.rows,a=i.length,s=0;s0)return void i(L.apply(o,[e,s,n,r-1]));a(t)}})})}).catch(a)});return i(a,n),a}function R(e,t,n){return L.apply(this,[e,t,n,1])}function B(e,t){var n=this;"string"!=typeof e&&(console.warn(e+" used as a key, but it is not a string."),e=String(e));var r=new ie(function(t,r){n.ready().then(function(){var o=n._dbInfo;o.db.transaction(function(n){n.executeSql("DELETE FROM "+o.storeName+" WHERE key = ?",[e],function(){t()},function(e,t){r(t)})})}).catch(r)});return i(r,t),r}function q(e){var t=this,n=new ie(function(e,n){t.ready().then(function(){var r=t._dbInfo;r.db.transaction(function(t){t.executeSql("DELETE FROM "+r.storeName,[],function(){e()},function(e,t){n(t)})})}).catch(n)});return i(n,e),n}function z(e){var t=this,n=new ie(function(e,n){t.ready().then(function(){var r=t._dbInfo;r.db.transaction(function(t){t.executeSql("SELECT COUNT(key) as c FROM "+r.storeName,[],function(t,n){var r=n.rows.item(0).c;e(r)},function(e,t){n(t)})})}).catch(n)});return i(n,e),n}function F(e,t){var n=this,r=new ie(function(t,r){n.ready().then(function(){var o=n._dbInfo;o.db.transaction(function(n){n.executeSql("SELECT key FROM "+o.storeName+" WHERE id = ? LIMIT 1",[e+1],function(e,n){var r=n.rows.length?n.rows.item(0).key:null;t(r)},function(e,t){r(t)})})}).catch(r)});return i(r,t),r}function U(e){var t=this,n=new ie(function(e,n){t.ready().then(function(){var r=t._dbInfo;r.db.transaction(function(t){t.executeSql("SELECT key FROM "+r.storeName,[],function(t,n){for(var r=[],o=0;o=0;n--){var r=localStorage.key(n);0===r.indexOf(e)&&localStorage.removeItem(r)}});return i(n,e),n}function J(e,t){var n=this;"string"!=typeof e&&(console.warn(e+" used as a key, but it is not a string."),e=String(e));var r=n.ready().then(function(){var t=n._dbInfo,r=localStorage.getItem(t.keyPrefix+e);return r&&(r=t.serializer.deserialize(r)),r});return i(r,t),r}function G(e,t){var n=this,r=n.ready().then(function(){for(var t=n._dbInfo,r=t.keyPrefix,o=r.length,i=localStorage.length,a=1,s=0;s num > 5);\n return overFive;`,tests:[{name:"Correct output",test:`assert.deepEqual(output, [8, 13, 21]) === undefined;`},{name:"Returns an Array",test:`assert.isArray(output) === undefined;`},{name:"Array has 3 items",test:`assert.lengthOf(output, 3) === undefined;`},{name:`First item is 8`,test:`assert.deepEqual(output[0], 8) === undefined;`}]},{name:"Array.map()",time:10,prompt:`Return an array of 'numbers' array's square roots, using 'Array.map()' and 'Math.sqrt()'`,given:`const numbers = [25, 121, 169];\r`,answer:`const numbers = [25, 121, 169];\n const roots = numbers.map(num => Math.sqrt(num));\n return roots;`,tests:[{name:"Correct output",test:`assert.deepEqual(output, [5, 11, 13]) === undefined;`},{name:"Returns an Array",test:`assert.isArray(output) === undefined;`},{name:"Array has 3 items",test:`assert.lengthOf(output, 3) === undefined;`},{name:`First item is 5`,test:`assert.deepEqual(output[0], 5) === undefined;`},{name:`Last item is 13`,test:`assert.deepEqual(output[output.length - 1], 13) === undefined;`}]},{name:"Array.every()",time:10,prompt:`Return object that returns whether each array contains all even numbers using Array.every().`,given:`const evenNumbers = [2, 4, 6, 8];\n const someOddNumbers = [2, 5, 6, 8];\n function isEven(element) {\n \n }\n return {\n evenNumbers: evenNumbers.,\n someOddNumbers: someOddNumbers.\n };`,answer:`const evenNumbers = [2, 4, 6, 8];\n const someOddNumbers = [2, 5, 6, 8];\n function isEven(element) {\n return element % 2 === 0\n }\n return {\n evenNumbers: evenNumbers.every(isEven),\n someOddNumbers: someOddNumbers.every(isEven)\n };`,tests:[{name:"Correct output",test:`assert.deepEqual(output, {\n evenNumbers: true,\n someOddNumbers: false\n }) === undefined;`},{name:"Returns an Object",test:`assert.isObject(output) === undefined;`},{name:"Object has 2 items",test:`assert.lengthOf(Object.keys(output), 2) === undefined;`},{name:`First value is true`,test:`assert.isTrue(output.evenNumbers) === undefined;`},{name:`Second value is false`,test:`assert.isFalse(output.someOddNumbers) === undefined;`}]},{name:"Array.some()",time:10,prompt:`Return 'Object' that returns whether each array contains some odd numbers using 'Array.some()'.`,given:`const evenNumbers = [2, 4, 6, 8];\n const someOddNumbers = [2, 4, 7, 8];\n function isOdd(element) {\n \n }\n return {\n evenNumbers: evenNumbers.,\n someOddNumbers: someOddNumbers.\n };`,answer:`const evenNumbers = [1, 3, 5, 7];\n const someOddNumbers = [1, 3, 6, 7];\n function isOdd(element) {\n return element % 2 !== 0;\n }\n return {\n evenNumbers: evenNumbers.some(isOdd),\n someOddNumbers: someOddNumbers.some(isOdd)\n };`,tests:[{name:"Correct output",test:`assert.deepEqual(output, {\n evenNumbers: false,\n someOddNumbers: true\n }) === undefined;`},{name:"Returns an Object",test:`assert.isObject(output) === undefined;`},{name:"Object has 2 items",test:`assert.lengthOf(Object.keys(output), 2) === undefined;`},{name:`First value is false`,test:`assert.isFalse(output.evenNumbers) === undefined;`},{name:`Second value is true`,test:`assert.isTrue(output.someOddNumbers) === undefined;`}]}]},{}],37:[function(e,t,n){t.exports=[{name:"Create Array",time:10,prompt:"Create and return an array that contains 'apple' and 'banana'",given:`const fruits = [];\rreturn fruits;`,answer:`const fruits = ['apple', 'banana'];\n return fruits;`,tests:[{name:"Correct output",test:`assert.deepEqual(output, ['apple', 'banana']) === undefined;`},{name:"Returns an Array",test:`assert.isArray(output) === undefined;`},{name:"Array has 2 items",test:`assert.lengthOf(output, 2) === undefined;`}]},{name:"Array.pop()",time:10,prompt:`Remove 'orange' from the end of the 'fruits' array and return 'fruits'.`,given:`const fruits = ['apple', 'banana', 'orange'];\r`,answer:`const fruits = ['apple', 'banana', 'orange'];\n fruits.pop();\n return fruits;`,tests:[{name:"Correct output",test:`assert.deepEqual(output, ['apple', 'banana']) === undefined;`},{name:"Returns an Array",test:`assert.isArray(output) === undefined;`},{name:"Array has 2 items",test:`assert.lengthOf(output, 2) === undefined;`}]}]},{}],38:[function(e,t,n){t.exports=e("./lib/type")},{"./lib/type":39}],39:[function(e,t,n){function r(e){var t=Object.prototype.toString.call(e);return i[t]?i[t]:null===e?"null":void 0===e?"undefined":e===Object(e)?"object":typeof e}function o(){this.tests={}}var i={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};(t.exports=r).Library=o,o.prototype.of=r,o.prototype.define=function(e,t){return 1===arguments.length?this.tests[e]:(this.tests[e]=t,this)},o.prototype.test=function(e,t){if(t===r(e))return!0;var n=this.tests[t];if(n&&"regexp"===r(n))return n.test(e);if(n&&"function"===r(n))return n(e);throw new ReferenceError('Type test "'+t+'" not defined or invalid.')}},{}],40:[function(e,t,n){arguments[4][38][0].apply(n,arguments)},{"./lib/type":41,dup:38}],41:[function(e,t,n){function r(e){var t=Object.prototype.toString.call(e).match(i)[1].toLowerCase();return"function"==typeof Promise&&e instanceof Promise?"promise":null===e?"null":void 0===e?"undefined":t}function o(){if(!(this instanceof o))return new o;this.tests={}}var i=/^\[object (.*)\]$/;(t.exports=r).Library=o,o.prototype.of=r,o.prototype.define=function(e,t){return 1===arguments.length?this.tests[e]:(this.tests[e]=t,this)},o.prototype.test=function(e,t){if(t===r(e))return!0;var n=this.tests[t];if(n&&"regexp"===r(n))return n.test(e);if(n&&"function"===r(n))return n(e);throw new ReferenceError('Type test "'+t+'" not defined or invalid.')}},{}],42:[function(require,module,exports){"use strict";function _toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e.length-1||t<0?0:t+1}function getCurrentProblem(e){return e[config.currentIndex]}function previousProblem(){console.log("previousProblem!"),previousProblemButtonEl.classList.add("active"),config.currentIndex=config.shuffle?getRandomIndex(problems):getPreviousIndex(problems),updateLocalstore(config).then(function(){window.location.reload()})}function nextProblem(){console.log("nextProblem!"),nextProblemButtonEl.classList.add("active"),config.currentIndex=config.shuffle?getRandomIndex(problems):getNextIndex(problems),updateLocalstore(config).then(function(){window.location.reload()})}function toggleShuffle(){console.log("toggle shuffle!"),config.shuffle=!config.shuffle,shuffleProblemsButtonEl.classList.toggle("active"),previousProblemButtonEl.parentNode.classList.toggle("hidden"),updateLocalstore(config)}function loadProblem(e){currentProblem=e,problemEl.innerText=e.prompt,e.given&&(codeEl.value=e.given),testSuite(null,!0)}function updateTests(e,t){!0===t&&buildTests(currentProblem.tests),updateTestStatus(e)}function buildTests(e){if(e){var t=e.map(function(e){return'
\n
[✘]
\n
'+e.name+"
\n
"}).join("");testSuiteEl.innerHTML=t}}function updateTestStatus(e){if(!e)throw new Error("No testStatuses provided.");var t=!0;e.forEach(function(e){!0!==e&&(t=!1)}),[].slice.call(testSuiteEl.querySelectorAll(".test-state")).forEach(function(t,n){!0===e[n]?(t.innerHTML="[✓]",t.classList.remove("fail"),t.classList.add("pass")):(t.innerHTML="[✘]",t.classList.remove("pass"),t.classList.add("fail"))}),!0===t?(testTotalEl.innerText="PASS",testTotalEl.classList.remove("fail"),testTotalEl.classList.add("pass")):(testTotalEl.innerText="FAIL",testTotalEl.classList.remove("pass"),testTotalEl.classList.add("fail"))}function printAssertError(e){var t="";null!==e&&(t='\n
\n Expected: '+JSON.stringify(e.expected)+"\n Actual: "+JSON.stringify(e.actual)+"\n
"),assertConsoleEl.innerHTML=t}function printEvalOutput(e,t){var n="";e&&void 0!==e.message?n='\n
\n Syntax Error: '+JSON.stringify(e.message)+"\n
":t&&(n='\n
\n Output: '+JSON.stringify(t)+"\n
"),evalConsoleEl.innerHTML=n}function testSuite(e){testTotalEl.classList.toggle("working");var t=runTests(getOutput(codeEl.value));testTotalEl.classList.toggle("working"),updateTests(t,e)}function getOutput(code){var evald=!1;try{evald=eval("(function(){"+code+"})()"),printEvalOutput(null,evald)}catch(e){printEvalOutput(e)}return evald}function runTests(output){var tested=!1;return tested=currentProblem.tests.map(function(test){var testOutcome=!1;try{output&&(testOutcome=eval(test.test)),printAssertError(null)}catch(e){printAssertError(e)}return testOutcome})}function loadApp(e){function t(t){!1===e.shuffle&&13===t.keyCode&&t.shiftKey&&(t.metaKey||t.ctrlKey)?previousProblem():13!==t.keyCode||t.shiftKey||!t.metaKey&&!t.ctrlKey||nextProblem()}console.log("loading app!"),!0===e.shuffle&&(shuffleProblemsButtonEl.classList.add("active"),previousProblemButtonEl.parentNode.classList.add("hidden"));var n=debounce(function(e){-1===ignoreKeyCodes.indexOf(e.keyCode)&&testSuite()},200);codeEl.addEventListener("keydown",n),document.addEventListener("keydown",t),shuffleProblemsButtonEl.addEventListener("click",toggleShuffle),previousProblemButtonEl.addEventListener("click",previousProblem),nextProblemButtonEl.addEventListener("click",nextProblem),loadProblem(getCurrentProblem(problems)),testSuite(!0)}var localforage=require("localforage"),probs=require("pjs-problems"),dedent=require("dedent"),assert=require("chai").assert,problems=[];Object.keys(probs).forEach(function(e){var t;(t=problems).push.apply(t,_toConsumableArray(probs[e]))}),problems=dedentStrings(problems);var currentProblem=void 0,ignoreKeyCodes=[9,37,39,38,40],config={shuffle:!0,timer:!1,currentIndex:0};localforage.getItem("js_practice_config").then(function(e){e&&(config=e),loadApp(config)}).catch(function(e){console.log("localforage err:",e),loadApp(config)});var problemEl=document.getElementById("problem"),codeEl=document.getElementById("code"),testSuiteEl=document.getElementById("test-suite"),testTotalEl=document.getElementById("test-total"),evalConsoleEl=document.getElementById("eval-output"),assertConsoleEl=document.getElementById("assert-output"),shuffleProblemsButtonEl=document.getElementById("shuffle-problems"),previousProblemButtonEl=document.getElementById("prev-problem"),nextProblemButtonEl=document.getElementById("next-problem")}(document,window)},{chai:2,dedent:31,localforage:34,"pjs-problems":35}]},{},[42]); //# sourceMappingURL=bundle.min.js.map diff --git a/public/dist/js/bundle.min.js.map b/public/dist/js/bundle.min.js.map index a3a5a8b..708c565 100644 --- a/public/dist/js/bundle.min.js.map +++ b/public/dist/js/bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/assertion-error/index.js","node_modules/chai/index.js","node_modules/chai/lib/chai.js","node_modules/chai/lib/chai/assertion.js","node_modules/chai/lib/chai/config.js","node_modules/chai/lib/chai/core/assertions.js","node_modules/chai/lib/chai/interface/assert.js","node_modules/chai/lib/chai/interface/expect.js","node_modules/chai/lib/chai/interface/should.js","node_modules/chai/lib/chai/utils/addChainableMethod.js","node_modules/chai/lib/chai/utils/addMethod.js","node_modules/chai/lib/chai/utils/addProperty.js","node_modules/chai/lib/chai/utils/expectTypes.js","node_modules/chai/lib/chai/utils/flag.js","node_modules/chai/lib/chai/utils/getActual.js","node_modules/chai/lib/chai/utils/getEnumerableProperties.js","node_modules/chai/lib/chai/utils/getMessage.js","node_modules/chai/lib/chai/utils/getName.js","node_modules/chai/lib/chai/utils/getPathInfo.js","node_modules/chai/lib/chai/utils/getPathValue.js","node_modules/chai/lib/chai/utils/getProperties.js","node_modules/chai/lib/chai/utils/hasProperty.js","node_modules/chai/lib/chai/utils/index.js","node_modules/chai/lib/chai/utils/inspect.js","node_modules/chai/lib/chai/utils/objDisplay.js","node_modules/chai/lib/chai/utils/overwriteChainableMethod.js","node_modules/chai/lib/chai/utils/overwriteMethod.js","node_modules/chai/lib/chai/utils/overwriteProperty.js","node_modules/chai/lib/chai/utils/test.js","node_modules/chai/lib/chai/utils/transferFlags.js","node_modules/deep-eql/index.js","node_modules/deep-eql/lib/eql.js","node_modules/deep-eql/node_modules/type-detect/index.js","node_modules/deep-eql/node_modules/type-detect/lib/type.js","node_modules/localforage/dist/localforage.js","node_modules/type-detect/lib/type.js","src/js/index.js","src/problems/arrays.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","exclude","excludeProps","res","obj","Object","keys","forEach","key","excludes","indexOf","slice","arguments","args","AssertionError","message","_props","ssf","extend","props","this","showDiff","callee","captureStackTrace","stack","prototype","create","name","constructor","toJSON","used","version","util","use","fn","push","config","assertion","core","expect","should","assert","_chai","Assertion","msg","flag","defineProperty","get","console","warn","includeStack","set","value","addProperty","addMethod","addChainableMethod","chainingBehavior","overwriteProperty","overwriteMethod","overwriteChainableMethod","expr","negateMsg","expected","_actual","ok","test","getMessage","actual","getActual","val","truncateThreshold","chai","_","an","type","toLowerCase","article","charAt","includeChainingBehavior","include","expectTypes","eql","k","property","subset","undefined","inspect","checkArguments","toString","assertEqual","_obj","assertEql","assertAbove","to","have","len","assertLeast","assertBelow","assertMost","assertInstanceOf","getName","assertOwnProperty","hasOwnProperty","assertOwnPropertyDescriptor","descriptor","actualDescriptor","getOwnPropertyDescriptor","assertLengthChain","assertLength","assertMatch","re","exec","assertKeys","str","mixedArgsMsg","Array","any","all","filter","every","map","last","pop","join","sort","assertThrows","errMsg","is","thrown","desiredError","thrownError","RegExp","err","actuallyGot","expectedThrown","respondTo","method","itself","context","satisfy","matcher","result","objDisplay","negate","closeTo","delta","Math","abs","isSubsetOf","superset","cmp","elem","some","elem2","oneOf","list","be","assertChanges","object","prop","initial","assertIncreases","assertDecreases","chain","isNaN","isArray","start","finish","range","isDeep","pathInfo","getPathInfo","hasProperty","exists","isExtensible","TypeError","isSealed","isFrozen","express","errmsg","fail","operator","isOk","isNotOk","not","equal","act","exp","notEqual","strictEqual","notStrictEqual","deepEqual","notDeepEqual","isAbove","abv","above","isAtLeast","atlst","least","isBelow","blw","below","isAtMost","atmst","most","isTrue","isNotTrue","isFalse","isNotFalse","isNull","isNotNull","NaN","isNotNaN","isUndefined","isDefined","isFunction","isNotFunction","isObject","isNotObject","isNotArray","isString","isNotString","isNumber","isNotNumber","isBoolean","isNotBoolean","typeOf","notTypeOf","instanceOf","notInstanceOf","inc","notInclude","match","notMatch","notProperty","deepProperty","deep","notDeepProperty","propertyVal","propertyNotVal","deepPropertyVal","deepPropertyNotVal","lengthOf","throws","errt","errs","assertErr","throw","doesNotThrow","Throw","val2","approximately","sameMembers","set1","set2","same","members","sameDeepMembers","includeMembers","includeDeepMembers","inList","changes","change","doesNotChange","increases","increase","doesNotIncrease","decreases","decrease","doesNotDecrease","ifError","extensible","isNotExtensible","sealed","isNotSealed","frozen","isNotFrozen","alias","as","loadShould","shouldGetter","String","Number","Boolean","valueOf","shouldSetter","enumerable","configurable","writable","val1","exist","Should","transferFlags","hasProtoSupport","excludeNames","Function","apply","ctx","chainableBehavior","__methods","__proto__","getOwnPropertyNames","asserterName","pd","getter","types","index","art","flags","__flags","flagMsg","replace","func","parsePath","path","mArr","parseFloat","p","_getPathValue","parsed","tmp","part","info","parent","proto","getPrototypeOf","literals","number","string","ot","getPathValue","showHidden","depth","colors","formatValue","seen","stylize","recurseTimes","ret","primitive","formatPrimitive","isDOMElement","outerHTML","document","xmlVersion","XMLSerializer","serializeToString","container","createElementNS","appendChild","cloneNode","html","innerHTML","visibleKeys","getEnumerableProperties","getProperties","isError","nameSuffix","isRegExp","isDate","Date","toUTCString","formatError","base","array","braces","output","formatArray","formatProperty","reduceToSingleString","simple","JSON","stringify","Infinity","__lookupGetter__","__lookupSetter__","split","line","substr","numLinesEst","reduce","prev","cur","ar","objectToString","d","HTMLElement","nodeType","nodeName","splice","_chainingBehavior","_method","_super","_get","includeAll","b","m","sameValue","dateEqual","regexpEqual","Buffer","isBuffer","bufferEqual","argumentsEqual","typeEqual","objectEqual","getTime","iterableEqual","isValue","ka","kb","ex","getType","natives","Library","tests","[object Array]","[object RegExp]","[object Function]","[object Arguments]","[object Date]","of","define","ReferenceError","amd","g","window","global","self","localforage","_dereq_","nextTick","draining","oldQueue","queue","immediate","task","scheduleDrain","Mutation","MutationObserver","WebKitMutationObserver","called","observer","element","createTextNode","observe","characterData","data","setImmediate","MessageChannel","createElement","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","setTimeout","channel","port1","onmessage","port2","postMessage","2","INTERNAL","Promise","resolver","state","PENDING","outcome","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","returnValue","handlers","reject","resolve","getThen","then","thenable","onError","onSuccess","tryToUnwrap","tryCatch","status","out","reason","iterable","values","resolved","resolveFromAll","outValue","error","race","response","REJECTED","FULFILLED","3","4","_classCallCheck","instance","Constructor","createBlob","parts","properties","Blob","Builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","builder","append","getBlob","executeCallback","callback","executeTwoCallbacks","errorCallback","_binStringToArrayBuffer","bin","buf","ArrayBuffer","arr","Uint8Array","charCodeAt","_checkBlobSupportWithoutCaching","idb","Promise$1","txn","transaction","DETECT_BLOB_SUPPORT_STORE","blob","objectStore","put","onabort","preventDefault","stopPropagation","oncomplete","matchedChrome","navigator","userAgent","matchedEdge","parseInt","_checkBlobSupport","supportsBlobs","_deferReadiness","dbInfo","dbContext","dbContexts","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_getConnection","upgradeNeeded","db","close","dbArgs","openreq","open","onupgradeneeded","createObjectStore","storeName","oldVersion","newVersion","onerror","onsuccess","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","FileReader","onloadend","base64","btoa","target","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","atob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_initStorage","options","ignoreErrors","forages","ready","initPromises","j","forage","_defaultConfig","getItem","store","req","iterate","iterator","openCursor","iterationNumber","cursor","setItem","blobSupport","removeItem","clear","count","advanced","advance","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","buffer","bytes","BASE_CHARS","bufferToString","base64String","substring","serialize","valueType","toString$1","marker","SERIALIZED_MARKER","TYPE_ARRAYBUFFER","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_UINT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","fileReader","onload","BLOB_TYPE_PREFIX","TYPE_BLOB","readAsArrayBuffer","deserialize","SERIALIZED_MARKER_LENGTH","parse","blobType","TYPE_SERIALIZED_MARKER_LENGTH","BLOB_TYPE_PREFIX_REGEX","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","_initStorage$1","dbInfoPromise","openDatabase","description","size","executeSql","serializer","localforageSerializer","getItem$1","results","rows","item","iterate$1","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","c","key$1","keys$1","_initStorage$2","keyPrefix","clear$2","localStorage","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","length$2","removeItem$2","setItem$2","callWhenReady","localForageInstance","libraryMethod","_args","arg","isLibraryDriver","driverName","driver","DriverType","_typeof","Symbol","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","asyncStorage","_driver","webSQLStorage","localStorageWrapper","CustomDrivers","INDEXEDDB","LOCALSTORAGE","WEBSQL","DefaultDriverOrder","LibraryMethods","DefaultConfig","driverSupport","isSafari","platform","hasFetch","fetch","IDBKeyRange","LocalForage","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","defineDriver","driverObject","complianceError","namingError","customDriverMethods","concat","customDriverMethod","supportPromise","_support","supportResult","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","supportedDrivers","driverPromiseLoop","currentDriverIndex","_getSupportedDrivers","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","localforage_js","objectTypeRegexp","updateLocalstore","catch","log","debounce","wait","timeout","later","callNow","clearTimeout","getRandomIndex","problemsArr","ind","floor","random","currentIndex","getPreviousIndex","getNextIndex","getCurrentProblem","previousProblem","previousProblemButtonEl","classList","add","shuffle","problems","location","reload","nextProblem","nextProblemButtonEl","toggleShuffle","shuffleProblemsButtonEl","toggle","loadProblem","problemObj","currentProblem","problemEl","innerText","prompt","given","codeEl","testSuite","updateTests","testStatus","init","buildTests","updateTestStatus","testsDom","testSuiteEl","testStatuses","allPassed","testPassed","querySelectorAll","testStatusEl","iter","remove","testTotalEl","printAssertError","errObj","inner","assertConsoleEl","printEvalOutput","evalConsoleEl","getOutput","tested","runTests","evald","eval","testOutcome","loadApp","problemNav","keyCode","shiftKey","metaKey","ctrlKey","debouncedInputValidation","ignoreKeyCodes","addEventListener","timer","getElementById","time","answer","evenNumbers","someOddNumbers"],"mappings":"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","file":"bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o\n * MIT Licensed\n */\n\n/*!\n * Return a function that will copy properties from\n * one object to another excluding any originally\n * listed. Returned function will create a new `{}`.\n *\n * @param {String} excluded properties ...\n * @return {Function}\n */\n\nfunction exclude () {\n var excludes = [].slice.call(arguments);\n\n function excludeProps (res, obj) {\n Object.keys(obj).forEach(function (key) {\n if (!~excludes.indexOf(key)) res[key] = obj[key];\n });\n }\n\n return function extendExclude () {\n var args = [].slice.call(arguments)\n , i = 0\n , res = {};\n\n for (; i < args.length; i++) {\n excludeProps(res, args[i]);\n }\n\n return res;\n };\n};\n\n/*!\n * Primary Exports\n */\n\nmodule.exports = AssertionError;\n\n/**\n * ### AssertionError\n *\n * An extension of the JavaScript `Error` constructor for\n * assertion and validation scenarios.\n *\n * @param {String} message\n * @param {Object} properties to include (optional)\n * @param {callee} start stack function (optional)\n */\n\nfunction AssertionError (message, _props, ssf) {\n var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')\n , props = extend(_props || {});\n\n // default values\n this.message = message || 'Unspecified AssertionError';\n this.showDiff = false;\n\n // copy from properties\n for (var key in props) {\n this[key] = props[key];\n }\n\n // capture stack trace\n ssf = ssf || arguments.callee;\n if (ssf && Error.captureStackTrace) {\n Error.captureStackTrace(this, ssf);\n } else {\n try {\n throw new Error();\n } catch(e) {\n this.stack = e.stack;\n }\n }\n}\n\n/*!\n * Inherit from Error.prototype\n */\n\nAssertionError.prototype = Object.create(Error.prototype);\n\n/*!\n * Statically set name\n */\n\nAssertionError.prototype.name = 'AssertionError';\n\n/*!\n * Ensure correct constructor\n */\n\nAssertionError.prototype.constructor = AssertionError;\n\n/**\n * Allow errors to be converted to JSON for static transfer.\n *\n * @param {Boolean} include stack (default: `true`)\n * @return {Object} object that can be `JSON.stringify`\n */\n\nAssertionError.prototype.toJSON = function (stack) {\n var extend = exclude('constructor', 'toJSON', 'stack')\n , props = extend({ name: this.name }, this);\n\n // include stack if exists and not turned off\n if (false !== stack && this.stack) {\n props.stack = this.stack;\n }\n\n return props;\n};\n","module.exports = require('./lib/chai');\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nvar used = []\n , exports = module.exports = {};\n\n/*!\n * Chai version\n */\n\nexports.version = '3.5.0';\n\n/*!\n * Assertion Error\n */\n\nexports.AssertionError = require('assertion-error');\n\n/*!\n * Utils for plugins (not exported)\n */\n\nvar util = require('./chai/utils');\n\n/**\n * # .use(function)\n *\n * Provides a way to extend the internals of Chai\n *\n * @param {Function}\n * @returns {this} for chaining\n * @api public\n */\n\nexports.use = function (fn) {\n if (!~used.indexOf(fn)) {\n fn(this, util);\n used.push(fn);\n }\n\n return this;\n};\n\n/*!\n * Utility Functions\n */\n\nexports.util = util;\n\n/*!\n * Configuration\n */\n\nvar config = require('./chai/config');\nexports.config = config;\n\n/*!\n * Primary `Assertion` prototype\n */\n\nvar assertion = require('./chai/assertion');\nexports.use(assertion);\n\n/*!\n * Core Assertions\n */\n\nvar core = require('./chai/core/assertions');\nexports.use(core);\n\n/*!\n * Expect interface\n */\n\nvar expect = require('./chai/interface/expect');\nexports.use(expect);\n\n/*!\n * Should interface\n */\n\nvar should = require('./chai/interface/should');\nexports.use(should);\n\n/*!\n * Assert interface\n */\n\nvar assert = require('./chai/interface/assert');\nexports.use(assert);\n","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nvar config = require('./config');\n\nmodule.exports = function (_chai, util) {\n /*!\n * Module dependencies.\n */\n\n var AssertionError = _chai.AssertionError\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n _chai.Assertion = Assertion;\n\n /*!\n * Assertion Constructor\n *\n * Creates object for chaining.\n *\n * @api private\n */\n\n function Assertion (obj, msg, stack) {\n flag(this, 'ssfi', stack || arguments.callee);\n flag(this, 'object', obj);\n flag(this, 'message', msg);\n }\n\n Object.defineProperty(Assertion, 'includeStack', {\n get: function() {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n return config.includeStack;\n },\n set: function(value) {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n config.includeStack = value;\n }\n });\n\n Object.defineProperty(Assertion, 'showDiff', {\n get: function() {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n return config.showDiff;\n },\n set: function(value) {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n config.showDiff = value;\n }\n });\n\n Assertion.addProperty = function (name, fn) {\n util.addProperty(this.prototype, name, fn);\n };\n\n Assertion.addMethod = function (name, fn) {\n util.addMethod(this.prototype, name, fn);\n };\n\n Assertion.addChainableMethod = function (name, fn, chainingBehavior) {\n util.addChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n Assertion.overwriteProperty = function (name, fn) {\n util.overwriteProperty(this.prototype, name, fn);\n };\n\n Assertion.overwriteMethod = function (name, fn) {\n util.overwriteMethod(this.prototype, name, fn);\n };\n\n Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {\n util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n /**\n * ### .assert(expression, message, negateMessage, expected, actual, showDiff)\n *\n * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.\n *\n * @name assert\n * @param {Philosophical} expression to be tested\n * @param {String|Function} message or function that returns message to display if expression fails\n * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails\n * @param {Mixed} expected value (remember to check for negation)\n * @param {Mixed} actual (optional) will default to `this.obj`\n * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails\n * @api private\n */\n\n Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {\n var ok = util.test(this, arguments);\n if (true !== showDiff) showDiff = false;\n if (true !== config.showDiff) showDiff = false;\n\n if (!ok) {\n var msg = util.getMessage(this, arguments)\n , actual = util.getActual(this, arguments);\n throw new AssertionError(msg, {\n actual: actual\n , expected: expected\n , showDiff: showDiff\n }, (config.includeStack) ? this.assert : flag(this, 'ssfi'));\n }\n };\n\n /*!\n * ### ._obj\n *\n * Quick reference to stored `actual` value for plugin developers.\n *\n * @api private\n */\n\n Object.defineProperty(Assertion.prototype, '_obj',\n { get: function () {\n return flag(this, 'object');\n }\n , set: function (val) {\n flag(this, 'object', val);\n }\n });\n};\n","module.exports = {\n\n /**\n * ### config.includeStack\n *\n * User configurable property, influences whether stack trace\n * is included in Assertion error message. Default of false\n * suppresses stack trace in the error message.\n *\n * chai.config.includeStack = true; // enable stack on error\n *\n * @param {Boolean}\n * @api public\n */\n\n includeStack: false,\n\n /**\n * ### config.showDiff\n *\n * User configurable property, influences whether or not\n * the `showDiff` flag should be included in the thrown\n * AssertionErrors. `false` will always be `false`; `true`\n * will be true when the assertion has requested a diff\n * be shown.\n *\n * @param {Boolean}\n * @api public\n */\n\n showDiff: true,\n\n /**\n * ### config.truncateThreshold\n *\n * User configurable property, sets length threshold for actual and\n * expected values in assertion errors. If this threshold is exceeded, for\n * example for large data structures, the value is replaced with something\n * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.\n *\n * Set it to zero if you want to disable truncating altogether.\n *\n * This is especially userful when doing assertions on arrays: having this\n * set to a reasonable large value makes the failure messages readily\n * inspectable.\n *\n * chai.config.truncateThreshold = 0; // disable truncating\n *\n * @param {Number}\n * @api public\n */\n\n truncateThreshold: 40\n\n};\n","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nmodule.exports = function (chai, _) {\n var Assertion = chai.Assertion\n , toString = Object.prototype.toString\n , flag = _.flag;\n\n /**\n * ### Language Chains\n *\n * The following are provided as chainable getters to\n * improve the readability of your assertions. They\n * do not provide testing capabilities unless they\n * have been overwritten by a plugin.\n *\n * **Chains**\n *\n * - to\n * - be\n * - been\n * - is\n * - that\n * - which\n * - and\n * - has\n * - have\n * - with\n * - at\n * - of\n * - same\n *\n * @name language chains\n * @namespace BDD\n * @api public\n */\n\n [ 'to', 'be', 'been'\n , 'is', 'and', 'has', 'have'\n , 'with', 'that', 'which', 'at'\n , 'of', 'same' ].forEach(function (chain) {\n Assertion.addProperty(chain, function () {\n return this;\n });\n });\n\n /**\n * ### .not\n *\n * Negates any of assertions following in the chain.\n *\n * expect(foo).to.not.equal('bar');\n * expect(goodFn).to.not.throw(Error);\n * expect({ foo: 'baz' }).to.have.property('foo')\n * .and.not.equal('bar');\n *\n * @name not\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('not', function () {\n flag(this, 'negate', true);\n });\n\n /**\n * ### .deep\n *\n * Sets the `deep` flag, later used by the `equal` and\n * `property` assertions.\n *\n * expect(foo).to.deep.equal({ bar: 'baz' });\n * expect({ foo: { bar: { baz: 'quux' } } })\n * .to.have.deep.property('foo.bar.baz', 'quux');\n *\n * `.deep.property` special characters can be escaped\n * by adding two slashes before the `.` or `[]`.\n *\n * var deepCss = { '.link': { '[target]': 42 }};\n * expect(deepCss).to.have.deep.property('\\\\.link.\\\\[target\\\\]', 42);\n *\n * @name deep\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('deep', function () {\n flag(this, 'deep', true);\n });\n\n /**\n * ### .any\n *\n * Sets the `any` flag, (opposite of the `all` flag)\n * later used in the `keys` assertion.\n *\n * expect(foo).to.have.any.keys('bar', 'baz');\n *\n * @name any\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('any', function () {\n flag(this, 'any', true);\n flag(this, 'all', false)\n });\n\n\n /**\n * ### .all\n *\n * Sets the `all` flag (opposite of the `any` flag)\n * later used by the `keys` assertion.\n *\n * expect(foo).to.have.all.keys('bar', 'baz');\n *\n * @name all\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('all', function () {\n flag(this, 'all', true);\n flag(this, 'any', false);\n });\n\n /**\n * ### .a(type)\n *\n * The `a` and `an` assertions are aliases that can be\n * used either as language chains or to assert a value's\n * type.\n *\n * // typeof\n * expect('test').to.be.a('string');\n * expect({ foo: 'bar' }).to.be.an('object');\n * expect(null).to.be.a('null');\n * expect(undefined).to.be.an('undefined');\n * expect(new Error).to.be.an('error');\n * expect(new Promise).to.be.a('promise');\n * expect(new Float32Array()).to.be.a('float32array');\n * expect(Symbol()).to.be.a('symbol');\n *\n * // es6 overrides\n * expect({[Symbol.toStringTag]:()=>'foo'}).to.be.a('foo');\n *\n * // language chain\n * expect(foo).to.be.an.instanceof(Foo);\n *\n * @name a\n * @alias an\n * @param {String} type\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function an (type, msg) {\n if (msg) flag(this, 'message', msg);\n type = type.toLowerCase();\n var obj = flag(this, 'object')\n , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';\n\n this.assert(\n type === _.type(obj)\n , 'expected #{this} to be ' + article + type\n , 'expected #{this} not to be ' + article + type\n );\n }\n\n Assertion.addChainableMethod('an', an);\n Assertion.addChainableMethod('a', an);\n\n /**\n * ### .include(value)\n *\n * The `include` and `contain` assertions can be used as either property\n * based language chains or as methods to assert the inclusion of an object\n * in an array or a substring in a string. When used as language chains,\n * they toggle the `contains` flag for the `keys` assertion.\n *\n * expect([1,2,3]).to.include(2);\n * expect('foobar').to.contain('foo');\n * expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');\n *\n * @name include\n * @alias contain\n * @alias includes\n * @alias contains\n * @param {Object|String|Number} obj\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function includeChainingBehavior () {\n flag(this, 'contains', true);\n }\n\n function include (val, msg) {\n _.expectTypes(this, ['array', 'object', 'string']);\n\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var expected = false;\n\n if (_.type(obj) === 'array' && _.type(val) === 'object') {\n for (var i in obj) {\n if (_.eql(obj[i], val)) {\n expected = true;\n break;\n }\n }\n } else if (_.type(val) === 'object') {\n if (!flag(this, 'negate')) {\n for (var k in val) new Assertion(obj).property(k, val[k]);\n return;\n }\n var subset = {};\n for (var k in val) subset[k] = obj[k];\n expected = _.eql(subset, val);\n } else {\n expected = (obj != undefined) && ~obj.indexOf(val);\n }\n this.assert(\n expected\n , 'expected #{this} to include ' + _.inspect(val)\n , 'expected #{this} to not include ' + _.inspect(val));\n }\n\n Assertion.addChainableMethod('include', include, includeChainingBehavior);\n Assertion.addChainableMethod('contain', include, includeChainingBehavior);\n Assertion.addChainableMethod('contains', include, includeChainingBehavior);\n Assertion.addChainableMethod('includes', include, includeChainingBehavior);\n\n /**\n * ### .ok\n *\n * Asserts that the target is truthy.\n *\n * expect('everything').to.be.ok;\n * expect(1).to.be.ok;\n * expect(false).to.not.be.ok;\n * expect(undefined).to.not.be.ok;\n * expect(null).to.not.be.ok;\n *\n * @name ok\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('ok', function () {\n this.assert(\n flag(this, 'object')\n , 'expected #{this} to be truthy'\n , 'expected #{this} to be falsy');\n });\n\n /**\n * ### .true\n *\n * Asserts that the target is `true`.\n *\n * expect(true).to.be.true;\n * expect(1).to.not.be.true;\n *\n * @name true\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('true', function () {\n this.assert(\n true === flag(this, 'object')\n , 'expected #{this} to be true'\n , 'expected #{this} to be false'\n , this.negate ? false : true\n );\n });\n\n /**\n * ### .false\n *\n * Asserts that the target is `false`.\n *\n * expect(false).to.be.false;\n * expect(0).to.not.be.false;\n *\n * @name false\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('false', function () {\n this.assert(\n false === flag(this, 'object')\n , 'expected #{this} to be false'\n , 'expected #{this} to be true'\n , this.negate ? true : false\n );\n });\n\n /**\n * ### .null\n *\n * Asserts that the target is `null`.\n *\n * expect(null).to.be.null;\n * expect(undefined).to.not.be.null;\n *\n * @name null\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('null', function () {\n this.assert(\n null === flag(this, 'object')\n , 'expected #{this} to be null'\n , 'expected #{this} not to be null'\n );\n });\n\n /**\n * ### .undefined\n *\n * Asserts that the target is `undefined`.\n *\n * expect(undefined).to.be.undefined;\n * expect(null).to.not.be.undefined;\n *\n * @name undefined\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('undefined', function () {\n this.assert(\n undefined === flag(this, 'object')\n , 'expected #{this} to be undefined'\n , 'expected #{this} not to be undefined'\n );\n });\n\n /**\n * ### .NaN\n * Asserts that the target is `NaN`.\n *\n * expect('foo').to.be.NaN;\n * expect(4).not.to.be.NaN;\n *\n * @name NaN\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('NaN', function () {\n this.assert(\n isNaN(flag(this, 'object'))\n , 'expected #{this} to be NaN'\n , 'expected #{this} not to be NaN'\n );\n });\n\n /**\n * ### .exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi'\n * , bar = null\n * , baz;\n *\n * expect(foo).to.exist;\n * expect(bar).to.not.exist;\n * expect(baz).to.not.exist;\n *\n * @name exist\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('exist', function () {\n this.assert(\n null != flag(this, 'object')\n , 'expected #{this} to exist'\n , 'expected #{this} to not exist'\n );\n });\n\n\n /**\n * ### .empty\n *\n * Asserts that the target's length is `0`. For arrays and strings, it checks\n * the `length` property. For objects, it gets the count of\n * enumerable keys.\n *\n * expect([]).to.be.empty;\n * expect('').to.be.empty;\n * expect({}).to.be.empty;\n *\n * @name empty\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('empty', function () {\n var obj = flag(this, 'object')\n , expected = obj;\n\n if (Array.isArray(obj) || 'string' === typeof object) {\n expected = obj.length;\n } else if (typeof obj === 'object') {\n expected = Object.keys(obj).length;\n }\n\n this.assert(\n !expected\n , 'expected #{this} to be empty'\n , 'expected #{this} not to be empty'\n );\n });\n\n /**\n * ### .arguments\n *\n * Asserts that the target is an arguments object.\n *\n * function test () {\n * expect(arguments).to.be.arguments;\n * }\n *\n * @name arguments\n * @alias Arguments\n * @namespace BDD\n * @api public\n */\n\n function checkArguments () {\n var obj = flag(this, 'object')\n , type = Object.prototype.toString.call(obj);\n this.assert(\n '[object Arguments]' === type\n , 'expected #{this} to be arguments but got ' + type\n , 'expected #{this} to not be arguments'\n );\n }\n\n Assertion.addProperty('arguments', checkArguments);\n Assertion.addProperty('Arguments', checkArguments);\n\n /**\n * ### .equal(value)\n *\n * Asserts that the target is strictly equal (`===`) to `value`.\n * Alternately, if the `deep` flag is set, asserts that\n * the target is deeply equal to `value`.\n *\n * expect('hello').to.equal('hello');\n * expect(42).to.equal(42);\n * expect(1).to.not.equal(true);\n * expect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });\n * expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });\n *\n * @name equal\n * @alias equals\n * @alias eq\n * @alias deep.equal\n * @param {Mixed} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEqual (val, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'deep')) {\n return this.eql(val);\n } else {\n this.assert(\n val === obj\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{exp}'\n , val\n , this._obj\n , true\n );\n }\n }\n\n Assertion.addMethod('equal', assertEqual);\n Assertion.addMethod('equals', assertEqual);\n Assertion.addMethod('eq', assertEqual);\n\n /**\n * ### .eql(value)\n *\n * Asserts that the target is deeply equal to `value`.\n *\n * expect({ foo: 'bar' }).to.eql({ foo: 'bar' });\n * expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);\n *\n * @name eql\n * @alias eqls\n * @param {Mixed} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEql(obj, msg) {\n if (msg) flag(this, 'message', msg);\n this.assert(\n _.eql(obj, flag(this, 'object'))\n , 'expected #{this} to deeply equal #{exp}'\n , 'expected #{this} to not deeply equal #{exp}'\n , obj\n , this._obj\n , true\n );\n }\n\n Assertion.addMethod('eql', assertEql);\n Assertion.addMethod('eqls', assertEql);\n\n /**\n * ### .above(value)\n *\n * Asserts that the target is greater than `value`.\n *\n * expect(10).to.be.above(5);\n *\n * Can also be used in conjunction with `length` to\n * assert a minimum length. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.above(2);\n * expect([ 1, 2, 3 ]).to.have.length.above(2);\n *\n * @name above\n * @alias gt\n * @alias greaterThan\n * @param {Number} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertAbove (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len > n\n , 'expected #{this} to have a length above #{exp} but got #{act}'\n , 'expected #{this} to not have a length above #{exp}'\n , n\n , len\n );\n } else {\n this.assert(\n obj > n\n , 'expected #{this} to be above ' + n\n , 'expected #{this} to be at most ' + n\n );\n }\n }\n\n Assertion.addMethod('above', assertAbove);\n Assertion.addMethod('gt', assertAbove);\n Assertion.addMethod('greaterThan', assertAbove);\n\n /**\n * ### .least(value)\n *\n * Asserts that the target is greater than or equal to `value`.\n *\n * expect(10).to.be.at.least(10);\n *\n * Can also be used in conjunction with `length` to\n * assert a minimum length. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.of.at.least(2);\n * expect([ 1, 2, 3 ]).to.have.length.of.at.least(3);\n *\n * @name least\n * @alias gte\n * @param {Number} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLeast (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len >= n\n , 'expected #{this} to have a length at least #{exp} but got #{act}'\n , 'expected #{this} to have a length below #{exp}'\n , n\n , len\n );\n } else {\n this.assert(\n obj >= n\n , 'expected #{this} to be at least ' + n\n , 'expected #{this} to be below ' + n\n );\n }\n }\n\n Assertion.addMethod('least', assertLeast);\n Assertion.addMethod('gte', assertLeast);\n\n /**\n * ### .below(value)\n *\n * Asserts that the target is less than `value`.\n *\n * expect(5).to.be.below(10);\n *\n * Can also be used in conjunction with `length` to\n * assert a maximum length. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.below(4);\n * expect([ 1, 2, 3 ]).to.have.length.below(4);\n *\n * @name below\n * @alias lt\n * @alias lessThan\n * @param {Number} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertBelow (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len < n\n , 'expected #{this} to have a length below #{exp} but got #{act}'\n , 'expected #{this} to not have a length below #{exp}'\n , n\n , len\n );\n } else {\n this.assert(\n obj < n\n , 'expected #{this} to be below ' + n\n , 'expected #{this} to be at least ' + n\n );\n }\n }\n\n Assertion.addMethod('below', assertBelow);\n Assertion.addMethod('lt', assertBelow);\n Assertion.addMethod('lessThan', assertBelow);\n\n /**\n * ### .most(value)\n *\n * Asserts that the target is less than or equal to `value`.\n *\n * expect(5).to.be.at.most(5);\n *\n * Can also be used in conjunction with `length` to\n * assert a maximum length. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.of.at.most(4);\n * expect([ 1, 2, 3 ]).to.have.length.of.at.most(3);\n *\n * @name most\n * @alias lte\n * @param {Number} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertMost (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len <= n\n , 'expected #{this} to have a length at most #{exp} but got #{act}'\n , 'expected #{this} to have a length above #{exp}'\n , n\n , len\n );\n } else {\n this.assert(\n obj <= n\n , 'expected #{this} to be at most ' + n\n , 'expected #{this} to be above ' + n\n );\n }\n }\n\n Assertion.addMethod('most', assertMost);\n Assertion.addMethod('lte', assertMost);\n\n /**\n * ### .within(start, finish)\n *\n * Asserts that the target is within a range.\n *\n * expect(7).to.be.within(5,10);\n *\n * Can also be used in conjunction with `length` to\n * assert a length range. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.within(2,4);\n * expect([ 1, 2, 3 ]).to.have.length.within(2,4);\n *\n * @name within\n * @param {Number} start lowerbound inclusive\n * @param {Number} finish upperbound inclusive\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('within', function (start, finish, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , range = start + '..' + finish;\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len >= start && len <= finish\n , 'expected #{this} to have a length within ' + range\n , 'expected #{this} to not have a length within ' + range\n );\n } else {\n this.assert(\n obj >= start && obj <= finish\n , 'expected #{this} to be within ' + range\n , 'expected #{this} to not be within ' + range\n );\n }\n });\n\n /**\n * ### .instanceof(constructor)\n *\n * Asserts that the target is an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , Chai = new Tea('chai');\n *\n * expect(Chai).to.be.an.instanceof(Tea);\n * expect([ 1, 2, 3 ]).to.be.instanceof(Array);\n *\n * @name instanceof\n * @param {Constructor} constructor\n * @param {String} message _optional_\n * @alias instanceOf\n * @namespace BDD\n * @api public\n */\n\n function assertInstanceOf (constructor, msg) {\n if (msg) flag(this, 'message', msg);\n var name = _.getName(constructor);\n this.assert(\n flag(this, 'object') instanceof constructor\n , 'expected #{this} to be an instance of ' + name\n , 'expected #{this} to not be an instance of ' + name\n );\n };\n\n Assertion.addMethod('instanceof', assertInstanceOf);\n Assertion.addMethod('instanceOf', assertInstanceOf);\n\n /**\n * ### .property(name, [value])\n *\n * Asserts that the target has a property `name`, optionally asserting that\n * the value of that property is strictly equal to `value`.\n * If the `deep` flag is set, you can use dot- and bracket-notation for deep\n * references into objects and arrays.\n *\n * // simple referencing\n * var obj = { foo: 'bar' };\n * expect(obj).to.have.property('foo');\n * expect(obj).to.have.property('foo', 'bar');\n *\n * // deep referencing\n * var deepObj = {\n * green: { tea: 'matcha' }\n * , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]\n * };\n *\n * expect(deepObj).to.have.deep.property('green.tea', 'matcha');\n * expect(deepObj).to.have.deep.property('teas[1]', 'matcha');\n * expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');\n *\n * You can also use an array as the starting point of a `deep.property`\n * assertion, or traverse nested arrays.\n *\n * var arr = [\n * [ 'chai', 'matcha', 'konacha' ]\n * , [ { tea: 'chai' }\n * , { tea: 'matcha' }\n * , { tea: 'konacha' } ]\n * ];\n *\n * expect(arr).to.have.deep.property('[0][1]', 'matcha');\n * expect(arr).to.have.deep.property('[1][2].tea', 'konacha');\n *\n * Furthermore, `property` changes the subject of the assertion\n * to be the value of that property from the original object. This\n * permits for further chainable assertions on that property.\n *\n * expect(obj).to.have.property('foo')\n * .that.is.a('string');\n * expect(deepObj).to.have.property('green')\n * .that.is.an('object')\n * .that.deep.equals({ tea: 'matcha' });\n * expect(deepObj).to.have.property('teas')\n * .that.is.an('array')\n * .with.deep.property('[2]')\n * .that.deep.equals({ tea: 'konacha' });\n *\n * Note that dots and bracket in `name` must be backslash-escaped when\n * the `deep` flag is set, while they must NOT be escaped when the `deep`\n * flag is not set.\n *\n * // simple referencing\n * var css = { '.link[target]': 42 };\n * expect(css).to.have.property('.link[target]', 42);\n *\n * // deep referencing\n * var deepCss = { '.link': { '[target]': 42 }};\n * expect(deepCss).to.have.deep.property('\\\\.link.\\\\[target\\\\]', 42);\n *\n * @name property\n * @alias deep.property\n * @param {String} name\n * @param {Mixed} value (optional)\n * @param {String} message _optional_\n * @returns value of property for chaining\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('property', function (name, val, msg) {\n if (msg) flag(this, 'message', msg);\n\n var isDeep = !!flag(this, 'deep')\n , descriptor = isDeep ? 'deep property ' : 'property '\n , negate = flag(this, 'negate')\n , obj = flag(this, 'object')\n , pathInfo = isDeep ? _.getPathInfo(name, obj) : null\n , hasProperty = isDeep\n ? pathInfo.exists\n : _.hasProperty(name, obj)\n , value = isDeep\n ? pathInfo.value\n : obj[name];\n\n if (negate && arguments.length > 1) {\n if (undefined === value) {\n msg = (msg != null) ? msg + ': ' : '';\n throw new Error(msg + _.inspect(obj) + ' has no ' + descriptor + _.inspect(name));\n }\n } else {\n this.assert(\n hasProperty\n , 'expected #{this} to have a ' + descriptor + _.inspect(name)\n , 'expected #{this} to not have ' + descriptor + _.inspect(name));\n }\n\n if (arguments.length > 1) {\n this.assert(\n val === value\n , 'expected #{this} to have a ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + _.inspect(name) + ' of #{act}'\n , val\n , value\n );\n }\n\n flag(this, 'object', value);\n });\n\n\n /**\n * ### .ownProperty(name)\n *\n * Asserts that the target has an own property `name`.\n *\n * expect('test').to.have.ownProperty('length');\n *\n * @name ownProperty\n * @alias haveOwnProperty\n * @param {String} name\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertOwnProperty (name, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n this.assert(\n obj.hasOwnProperty(name)\n , 'expected #{this} to have own property ' + _.inspect(name)\n , 'expected #{this} to not have own property ' + _.inspect(name)\n );\n }\n\n Assertion.addMethod('ownProperty', assertOwnProperty);\n Assertion.addMethod('haveOwnProperty', assertOwnProperty);\n\n /**\n * ### .ownPropertyDescriptor(name[, descriptor[, message]])\n *\n * Asserts that the target has an own property descriptor `name`, that optionally matches `descriptor`.\n *\n * expect('test').to.have.ownPropertyDescriptor('length');\n * expect('test').to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 4 });\n * expect('test').not.to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 3 });\n * expect('test').ownPropertyDescriptor('length').to.have.property('enumerable', false);\n * expect('test').ownPropertyDescriptor('length').to.have.keys('value');\n *\n * @name ownPropertyDescriptor\n * @alias haveOwnPropertyDescriptor\n * @param {String} name\n * @param {Object} descriptor _optional_\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertOwnPropertyDescriptor (name, descriptor, msg) {\n if (typeof descriptor === 'string') {\n msg = descriptor;\n descriptor = null;\n }\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);\n if (actualDescriptor && descriptor) {\n this.assert(\n _.eql(descriptor, actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)\n , descriptor\n , actualDescriptor\n , true\n );\n } else {\n this.assert(\n actualDescriptor\n , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)\n , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)\n );\n }\n flag(this, 'object', actualDescriptor);\n }\n\n Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);\n Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);\n\n /**\n * ### .length\n *\n * Sets the `doLength` flag later used as a chain precursor to a value\n * comparison for the `length` property.\n *\n * expect('foo').to.have.length.above(2);\n * expect([ 1, 2, 3 ]).to.have.length.above(2);\n * expect('foo').to.have.length.below(4);\n * expect([ 1, 2, 3 ]).to.have.length.below(4);\n * expect('foo').to.have.length.within(2,4);\n * expect([ 1, 2, 3 ]).to.have.length.within(2,4);\n *\n * *Deprecation notice:* Using `length` as an assertion will be deprecated\n * in version 2.4.0 and removed in 3.0.0. Code using the old style of\n * asserting for `length` property value using `length(value)` should be\n * switched to use `lengthOf(value)` instead.\n *\n * @name length\n * @namespace BDD\n * @api public\n */\n\n /**\n * ### .lengthOf(value[, message])\n *\n * Asserts that the target's `length` property has\n * the expected value.\n *\n * expect([ 1, 2, 3]).to.have.lengthOf(3);\n * expect('foobar').to.have.lengthOf(6);\n *\n * @name lengthOf\n * @param {Number} length\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLengthChain () {\n flag(this, 'doLength', true);\n }\n\n function assertLength (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n\n this.assert(\n len == n\n , 'expected #{this} to have a length of #{exp} but got #{act}'\n , 'expected #{this} to not have a length of #{act}'\n , n\n , len\n );\n }\n\n Assertion.addChainableMethod('length', assertLength, assertLengthChain);\n Assertion.addMethod('lengthOf', assertLength);\n\n /**\n * ### .match(regexp)\n *\n * Asserts that the target matches a regular expression.\n *\n * expect('foobar').to.match(/^foo/);\n *\n * @name match\n * @alias matches\n * @param {RegExp} RegularExpression\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n function assertMatch(re, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n this.assert(\n re.exec(obj)\n , 'expected #{this} to match ' + re\n , 'expected #{this} not to match ' + re\n );\n }\n\n Assertion.addMethod('match', assertMatch);\n Assertion.addMethod('matches', assertMatch);\n\n /**\n * ### .string(string)\n *\n * Asserts that the string target contains another string.\n *\n * expect('foobar').to.have.string('bar');\n *\n * @name string\n * @param {String} string\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('string', function (str, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n new Assertion(obj, msg).is.a('string');\n\n this.assert(\n ~obj.indexOf(str)\n , 'expected #{this} to contain ' + _.inspect(str)\n , 'expected #{this} to not contain ' + _.inspect(str)\n );\n });\n\n\n /**\n * ### .keys(key1, [key2], [...])\n *\n * Asserts that the target contains any or all of the passed-in keys.\n * Use in combination with `any`, `all`, `contains`, or `have` will affect\n * what will pass.\n *\n * When used in conjunction with `any`, at least one key that is passed\n * in must exist in the target object. This is regardless whether or not\n * the `have` or `contain` qualifiers are used. Note, either `any` or `all`\n * should be used in the assertion. If neither are used, the assertion is\n * defaulted to `all`.\n *\n * When both `all` and `contain` are used, the target object must have at\n * least all of the passed-in keys but may have more keys not listed.\n *\n * When both `all` and `have` are used, the target object must both contain\n * all of the passed-in keys AND the number of keys in the target object must\n * match the number of keys passed in (in other words, a target object must\n * have all and only all of the passed-in keys).\n *\n * expect({ foo: 1, bar: 2 }).to.have.any.keys('foo', 'baz');\n * expect({ foo: 1, bar: 2 }).to.have.any.keys('foo');\n * expect({ foo: 1, bar: 2 }).to.contain.any.keys('bar', 'baz');\n * expect({ foo: 1, bar: 2 }).to.contain.any.keys(['foo']);\n * expect({ foo: 1, bar: 2 }).to.contain.any.keys({'foo': 6});\n * expect({ foo: 1, bar: 2 }).to.have.all.keys(['bar', 'foo']);\n * expect({ foo: 1, bar: 2 }).to.have.all.keys({'bar': 6, 'foo': 7});\n * expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys(['bar', 'foo']);\n * expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys({'bar': 6});\n *\n *\n * @name keys\n * @alias key\n * @param {...String|Array|Object} keys\n * @namespace BDD\n * @api public\n */\n\n function assertKeys (keys) {\n var obj = flag(this, 'object')\n , str\n , ok = true\n , mixedArgsMsg = 'keys must be given single argument of Array|Object|String, or multiple String arguments';\n\n switch (_.type(keys)) {\n case \"array\":\n if (arguments.length > 1) throw (new Error(mixedArgsMsg));\n break;\n case \"object\":\n if (arguments.length > 1) throw (new Error(mixedArgsMsg));\n keys = Object.keys(keys);\n break;\n default:\n keys = Array.prototype.slice.call(arguments);\n }\n\n if (!keys.length) throw new Error('keys required');\n\n var actual = Object.keys(obj)\n , expected = keys\n , len = keys.length\n , any = flag(this, 'any')\n , all = flag(this, 'all');\n\n if (!any && !all) {\n all = true;\n }\n\n // Has any\n if (any) {\n var intersection = expected.filter(function(key) {\n return ~actual.indexOf(key);\n });\n ok = intersection.length > 0;\n }\n\n // Has all\n if (all) {\n ok = keys.every(function(key){\n return ~actual.indexOf(key);\n });\n if (!flag(this, 'negate') && !flag(this, 'contains')) {\n ok = ok && keys.length == actual.length;\n }\n }\n\n // Key string\n if (len > 1) {\n keys = keys.map(function(key){\n return _.inspect(key);\n });\n var last = keys.pop();\n if (all) {\n str = keys.join(', ') + ', and ' + last;\n }\n if (any) {\n str = keys.join(', ') + ', or ' + last;\n }\n } else {\n str = _.inspect(keys[0]);\n }\n\n // Form\n str = (len > 1 ? 'keys ' : 'key ') + str;\n\n // Have / include\n str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;\n\n // Assertion\n this.assert(\n ok\n , 'expected #{this} to ' + str\n , 'expected #{this} to not ' + str\n , expected.slice(0).sort()\n , actual.sort()\n , true\n );\n }\n\n Assertion.addMethod('keys', assertKeys);\n Assertion.addMethod('key', assertKeys);\n\n /**\n * ### .throw(constructor)\n *\n * Asserts that the function target will throw a specific error, or specific type of error\n * (as determined using `instanceof`), optionally with a RegExp or string inclusion test\n * for the error's message.\n *\n * var err = new ReferenceError('This is a bad function.');\n * var fn = function () { throw err; }\n * expect(fn).to.throw(ReferenceError);\n * expect(fn).to.throw(Error);\n * expect(fn).to.throw(/bad function/);\n * expect(fn).to.not.throw('good function');\n * expect(fn).to.throw(ReferenceError, /bad function/);\n * expect(fn).to.throw(err);\n *\n * Please note that when a throw expectation is negated, it will check each\n * parameter independently, starting with error constructor type. The appropriate way\n * to check for the existence of a type of error but for a message that does not match\n * is to use `and`.\n *\n * expect(fn).to.throw(ReferenceError)\n * .and.not.throw(/good function/);\n *\n * @name throw\n * @alias throws\n * @alias Throw\n * @param {ErrorConstructor} constructor\n * @param {String|RegExp} expected error message\n * @param {String} message _optional_\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @returns error for chaining (null if no error)\n * @namespace BDD\n * @api public\n */\n\n function assertThrows (constructor, errMsg, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n new Assertion(obj, msg).is.a('function');\n\n var thrown = false\n , desiredError = null\n , name = null\n , thrownError = null;\n\n if (arguments.length === 0) {\n errMsg = null;\n constructor = null;\n } else if (constructor && (constructor instanceof RegExp || 'string' === typeof constructor)) {\n errMsg = constructor;\n constructor = null;\n } else if (constructor && constructor instanceof Error) {\n desiredError = constructor;\n constructor = null;\n errMsg = null;\n } else if (typeof constructor === 'function') {\n name = constructor.prototype.name;\n if (!name || (name === 'Error' && constructor !== Error)) {\n name = constructor.name || (new constructor()).name;\n }\n } else {\n constructor = null;\n }\n\n try {\n obj();\n } catch (err) {\n // first, check desired error\n if (desiredError) {\n this.assert(\n err === desiredError\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}'\n , (desiredError instanceof Error ? desiredError.toString() : desiredError)\n , (err instanceof Error ? err.toString() : err)\n );\n\n flag(this, 'object', err);\n return this;\n }\n\n // next, check constructor\n if (constructor) {\n this.assert(\n err instanceof constructor\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp} but #{act} was thrown'\n , name\n , (err instanceof Error ? err.toString() : err)\n );\n\n if (!errMsg) {\n flag(this, 'object', err);\n return this;\n }\n }\n\n // next, check message\n var message = 'error' === _.type(err) && \"message\" in err\n ? err.message\n : '' + err;\n\n if ((message != null) && errMsg && errMsg instanceof RegExp) {\n this.assert(\n errMsg.exec(message)\n , 'expected #{this} to throw error matching #{exp} but got #{act}'\n , 'expected #{this} to throw error not matching #{exp}'\n , errMsg\n , message\n );\n\n flag(this, 'object', err);\n return this;\n } else if ((message != null) && errMsg && 'string' === typeof errMsg) {\n this.assert(\n ~message.indexOf(errMsg)\n , 'expected #{this} to throw error including #{exp} but got #{act}'\n , 'expected #{this} to throw error not including #{act}'\n , errMsg\n , message\n );\n\n flag(this, 'object', err);\n return this;\n } else {\n thrown = true;\n thrownError = err;\n }\n }\n\n var actuallyGot = ''\n , expectedThrown = name !== null\n ? name\n : desiredError\n ? '#{exp}' //_.inspect(desiredError)\n : 'an error';\n\n if (thrown) {\n actuallyGot = ' but #{act} was thrown'\n }\n\n this.assert(\n thrown === true\n , 'expected #{this} to throw ' + expectedThrown + actuallyGot\n , 'expected #{this} to not throw ' + expectedThrown + actuallyGot\n , (desiredError instanceof Error ? desiredError.toString() : desiredError)\n , (thrownError instanceof Error ? thrownError.toString() : thrownError)\n );\n\n flag(this, 'object', thrownError);\n };\n\n Assertion.addMethod('throw', assertThrows);\n Assertion.addMethod('throws', assertThrows);\n Assertion.addMethod('Throw', assertThrows);\n\n /**\n * ### .respondTo(method)\n *\n * Asserts that the object or class target will respond to a method.\n *\n * Klass.prototype.bar = function(){};\n * expect(Klass).to.respondTo('bar');\n * expect(obj).to.respondTo('bar');\n *\n * To check if a constructor will respond to a static function,\n * set the `itself` flag.\n *\n * Klass.baz = function(){};\n * expect(Klass).itself.to.respondTo('baz');\n *\n * @name respondTo\n * @alias respondsTo\n * @param {String} method\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function respondTo (method, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , itself = flag(this, 'itself')\n , context = ('function' === _.type(obj) && !itself)\n ? obj.prototype[method]\n : obj[method];\n\n this.assert(\n 'function' === typeof context\n , 'expected #{this} to respond to ' + _.inspect(method)\n , 'expected #{this} to not respond to ' + _.inspect(method)\n );\n }\n\n Assertion.addMethod('respondTo', respondTo);\n Assertion.addMethod('respondsTo', respondTo);\n\n /**\n * ### .itself\n *\n * Sets the `itself` flag, later used by the `respondTo` assertion.\n *\n * function Foo() {}\n * Foo.bar = function() {}\n * Foo.prototype.baz = function() {}\n *\n * expect(Foo).itself.to.respondTo('bar');\n * expect(Foo).itself.not.to.respondTo('baz');\n *\n * @name itself\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('itself', function () {\n flag(this, 'itself', true);\n });\n\n /**\n * ### .satisfy(method)\n *\n * Asserts that the target passes a given truth test.\n *\n * expect(1).to.satisfy(function(num) { return num > 0; });\n *\n * @name satisfy\n * @alias satisfies\n * @param {Function} matcher\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function satisfy (matcher, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var result = matcher(obj);\n this.assert(\n result\n , 'expected #{this} to satisfy ' + _.objDisplay(matcher)\n , 'expected #{this} to not satisfy' + _.objDisplay(matcher)\n , this.negate ? false : true\n , result\n );\n }\n\n Assertion.addMethod('satisfy', satisfy);\n Assertion.addMethod('satisfies', satisfy);\n\n /**\n * ### .closeTo(expected, delta)\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * expect(1.5).to.be.closeTo(1, 0.5);\n *\n * @name closeTo\n * @alias approximately\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function closeTo(expected, delta, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n\n new Assertion(obj, msg).is.a('number');\n if (_.type(expected) !== 'number' || _.type(delta) !== 'number') {\n throw new Error('the arguments to closeTo or approximately must be numbers');\n }\n\n this.assert(\n Math.abs(obj - expected) <= delta\n , 'expected #{this} to be close to ' + expected + ' +/- ' + delta\n , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta\n );\n }\n\n Assertion.addMethod('closeTo', closeTo);\n Assertion.addMethod('approximately', closeTo);\n\n function isSubsetOf(subset, superset, cmp) {\n return subset.every(function(elem) {\n if (!cmp) return superset.indexOf(elem) !== -1;\n\n return superset.some(function(elem2) {\n return cmp(elem, elem2);\n });\n })\n }\n\n /**\n * ### .members(set)\n *\n * Asserts that the target is a superset of `set`,\n * or that the target and `set` have the same strictly-equal (===) members.\n * Alternately, if the `deep` flag is set, set members are compared for deep\n * equality.\n *\n * expect([1, 2, 3]).to.include.members([3, 2]);\n * expect([1, 2, 3]).to.not.include.members([3, 2, 8]);\n *\n * expect([4, 2]).to.have.members([2, 4]);\n * expect([5, 2]).to.not.have.members([5, 2, 1]);\n *\n * expect([{ id: 1 }]).to.deep.include.members([{ id: 1 }]);\n *\n * @name members\n * @param {Array} set\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('members', function (subset, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n\n new Assertion(obj).to.be.an('array');\n new Assertion(subset).to.be.an('array');\n\n var cmp = flag(this, 'deep') ? _.eql : undefined;\n\n if (flag(this, 'contains')) {\n return this.assert(\n isSubsetOf(subset, obj, cmp)\n , 'expected #{this} to be a superset of #{act}'\n , 'expected #{this} to not be a superset of #{act}'\n , obj\n , subset\n );\n }\n\n this.assert(\n isSubsetOf(obj, subset, cmp) && isSubsetOf(subset, obj, cmp)\n , 'expected #{this} to have the same members as #{act}'\n , 'expected #{this} to not have the same members as #{act}'\n , obj\n , subset\n );\n });\n\n /**\n * ### .oneOf(list)\n *\n * Assert that a value appears somewhere in the top level of array `list`.\n *\n * expect('a').to.be.oneOf(['a', 'b', 'c']);\n * expect(9).to.not.be.oneOf(['z']);\n * expect([3]).to.not.be.oneOf([1, 2, [3]]);\n *\n * var three = [3];\n * // for object-types, contents are not compared\n * expect(three).to.not.be.oneOf([1, 2, [3]]);\n * // comparing references works\n * expect(three).to.be.oneOf([1, 2, three]);\n *\n * @name oneOf\n * @param {Array<*>} list\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function oneOf (list, msg) {\n if (msg) flag(this, 'message', msg);\n var expected = flag(this, 'object');\n new Assertion(list).to.be.an('array');\n\n this.assert(\n list.indexOf(expected) > -1\n , 'expected #{this} to be one of #{exp}'\n , 'expected #{this} to not be one of #{exp}'\n , list\n , expected\n );\n }\n\n Assertion.addMethod('oneOf', oneOf);\n\n\n /**\n * ### .change(function)\n *\n * Asserts that a function changes an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 3 };\n * var noChangeFn = function() { return 'foo' + 'bar'; }\n * expect(fn).to.change(obj, 'val');\n * expect(noChangeFn).to.not.change(obj, 'val')\n *\n * @name change\n * @alias changes\n * @alias Change\n * @param {String} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertChanges (object, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object');\n new Assertion(object, msg).to.have.property(prop);\n new Assertion(fn).is.a('function');\n\n var initial = object[prop];\n fn();\n\n this.assert(\n initial !== object[prop]\n , 'expected .' + prop + ' to change'\n , 'expected .' + prop + ' to not change'\n );\n }\n\n Assertion.addChainableMethod('change', assertChanges);\n Assertion.addChainableMethod('changes', assertChanges);\n\n /**\n * ### .increase(function)\n *\n * Asserts that a function increases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * expect(fn).to.increase(obj, 'val');\n *\n * @name increase\n * @alias increases\n * @alias Increase\n * @param {String} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertIncreases (object, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object');\n new Assertion(object, msg).to.have.property(prop);\n new Assertion(fn).is.a('function');\n\n var initial = object[prop];\n fn();\n\n this.assert(\n object[prop] - initial > 0\n , 'expected .' + prop + ' to increase'\n , 'expected .' + prop + ' to not increase'\n );\n }\n\n Assertion.addChainableMethod('increase', assertIncreases);\n Assertion.addChainableMethod('increases', assertIncreases);\n\n /**\n * ### .decrease(function)\n *\n * Asserts that a function decreases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * expect(fn).to.decrease(obj, 'val');\n *\n * @name decrease\n * @alias decreases\n * @alias Decrease\n * @param {String} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertDecreases (object, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object');\n new Assertion(object, msg).to.have.property(prop);\n new Assertion(fn).is.a('function');\n\n var initial = object[prop];\n fn();\n\n this.assert(\n object[prop] - initial < 0\n , 'expected .' + prop + ' to decrease'\n , 'expected .' + prop + ' to not decrease'\n );\n }\n\n Assertion.addChainableMethod('decrease', assertDecreases);\n Assertion.addChainableMethod('decreases', assertDecreases);\n\n /**\n * ### .extensible\n *\n * Asserts that the target is extensible (can have new properties added to\n * it).\n *\n * var nonExtensibleObject = Object.preventExtensions({});\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * expect({}).to.be.extensible;\n * expect(nonExtensibleObject).to.not.be.extensible;\n * expect(sealedObject).to.not.be.extensible;\n * expect(frozenObject).to.not.be.extensible;\n *\n * @name extensible\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('extensible', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible\n // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n var isExtensible;\n\n try {\n isExtensible = Object.isExtensible(obj);\n } catch (err) {\n if (err instanceof TypeError) isExtensible = false;\n else throw err;\n }\n\n this.assert(\n isExtensible\n , 'expected #{this} to be extensible'\n , 'expected #{this} to not be extensible'\n );\n });\n\n /**\n * ### .sealed\n *\n * Asserts that the target is sealed (cannot have new properties added to it\n * and its existing properties cannot be removed).\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * expect(sealedObject).to.be.sealed;\n * expect(frozenObject).to.be.sealed;\n * expect({}).to.not.be.sealed;\n *\n * @name sealed\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('sealed', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed\n // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n var isSealed;\n\n try {\n isSealed = Object.isSealed(obj);\n } catch (err) {\n if (err instanceof TypeError) isSealed = true;\n else throw err;\n }\n\n this.assert(\n isSealed\n , 'expected #{this} to be sealed'\n , 'expected #{this} to not be sealed'\n );\n });\n\n /**\n * ### .frozen\n *\n * Asserts that the target is frozen (cannot have new properties added to it\n * and its existing properties cannot be modified).\n *\n * var frozenObject = Object.freeze({});\n *\n * expect(frozenObject).to.be.frozen;\n * expect({}).to.not.be.frozen;\n *\n * @name frozen\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('frozen', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen\n // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n var isFrozen;\n\n try {\n isFrozen = Object.isFrozen(obj);\n } catch (err) {\n if (err instanceof TypeError) isFrozen = true;\n else throw err;\n }\n\n this.assert(\n isFrozen\n , 'expected #{this} to be frozen'\n , 'expected #{this} to not be frozen'\n );\n });\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\n\nmodule.exports = function (chai, util) {\n\n /*!\n * Chai dependencies.\n */\n\n var Assertion = chai.Assertion\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n /**\n * ### assert(expression, message)\n *\n * Write your own test expressions.\n *\n * assert('foo' !== 'bar', 'foo is not bar');\n * assert(Array.isArray([]), 'empty arrays are arrays');\n *\n * @param {Mixed} expression to test for truthiness\n * @param {String} message to display on error\n * @name assert\n * @namespace Assert\n * @api public\n */\n\n var assert = chai.assert = function (express, errmsg) {\n var test = new Assertion(null, null, chai.assert);\n test.assert(\n express\n , errmsg\n , '[ negation message unavailable ]'\n );\n };\n\n /**\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure. Node.js `assert` module-compatible.\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace Assert\n * @api public\n */\n\n assert.fail = function (actual, expected, message, operator) {\n message = message || 'assert.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, assert.fail);\n };\n\n /**\n * ### .isOk(object, [message])\n *\n * Asserts that `object` is truthy.\n *\n * assert.isOk('everything', 'everything is ok');\n * assert.isOk(false, 'this will fail');\n *\n * @name isOk\n * @alias ok\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isOk = function (val, msg) {\n new Assertion(val, msg).is.ok;\n };\n\n /**\n * ### .isNotOk(object, [message])\n *\n * Asserts that `object` is falsy.\n *\n * assert.isNotOk('everything', 'this will fail');\n * assert.isNotOk(false, 'this will pass');\n *\n * @name isNotOk\n * @alias notOk\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotOk = function (val, msg) {\n new Assertion(val, msg).is.not.ok;\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * assert.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.equal = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.equal);\n\n test.assert(\n exp == flag(test, 'object')\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{act}'\n , exp\n , act\n );\n };\n\n /**\n * ### .notEqual(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * assert.notEqual(3, 4, 'these numbers are not equal');\n *\n * @name notEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notEqual = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.notEqual);\n\n test.assert(\n exp != flag(test, 'object')\n , 'expected #{this} to not equal #{exp}'\n , 'expected #{this} to equal #{act}'\n , exp\n , act\n );\n };\n\n /**\n * ### .strictEqual(actual, expected, [message])\n *\n * Asserts strict equality (`===`) of `actual` and `expected`.\n *\n * assert.strictEqual(true, true, 'these booleans are strictly equal');\n *\n * @name strictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.strictEqual = function (act, exp, msg) {\n new Assertion(act, msg).to.equal(exp);\n };\n\n /**\n * ### .notStrictEqual(actual, expected, [message])\n *\n * Asserts strict inequality (`!==`) of `actual` and `expected`.\n *\n * assert.notStrictEqual(3, '3', 'no coercion for strict equality');\n *\n * @name notStrictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notStrictEqual = function (act, exp, msg) {\n new Assertion(act, msg).to.not.equal(exp);\n };\n\n /**\n * ### .deepEqual(actual, expected, [message])\n *\n * Asserts that `actual` is deeply equal to `expected`.\n *\n * assert.deepEqual({ tea: 'green' }, { tea: 'green' });\n *\n * @name deepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepEqual = function (act, exp, msg) {\n new Assertion(act, msg).to.eql(exp);\n };\n\n /**\n * ### .notDeepEqual(actual, expected, [message])\n *\n * Assert that `actual` is not deeply equal to `expected`.\n *\n * assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });\n *\n * @name notDeepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepEqual = function (act, exp, msg) {\n new Assertion(act, msg).to.not.eql(exp);\n };\n\n /**\n * ### .isAbove(valueToCheck, valueToBeAbove, [message])\n *\n * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`\n *\n * assert.isAbove(5, 2, '5 is strictly greater than 2');\n *\n * @name isAbove\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAbove\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAbove = function (val, abv, msg) {\n new Assertion(val, msg).to.be.above(abv);\n };\n\n /**\n * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])\n *\n * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`\n *\n * assert.isAtLeast(5, 2, '5 is greater or equal to 2');\n * assert.isAtLeast(3, 3, '3 is greater or equal to 3');\n *\n * @name isAtLeast\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtLeast\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtLeast = function (val, atlst, msg) {\n new Assertion(val, msg).to.be.least(atlst);\n };\n\n /**\n * ### .isBelow(valueToCheck, valueToBeBelow, [message])\n *\n * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`\n *\n * assert.isBelow(3, 6, '3 is strictly less than 6');\n *\n * @name isBelow\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeBelow\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBelow = function (val, blw, msg) {\n new Assertion(val, msg).to.be.below(blw);\n };\n\n /**\n * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])\n *\n * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`\n *\n * assert.isAtMost(3, 6, '3 is less than or equal to 6');\n * assert.isAtMost(4, 4, '4 is less than or equal to 4');\n *\n * @name isAtMost\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtMost\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtMost = function (val, atmst, msg) {\n new Assertion(val, msg).to.be.most(atmst);\n };\n\n /**\n * ### .isTrue(value, [message])\n *\n * Asserts that `value` is true.\n *\n * var teaServed = true;\n * assert.isTrue(teaServed, 'the tea has been served');\n *\n * @name isTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isTrue = function (val, msg) {\n new Assertion(val, msg).is['true'];\n };\n\n /**\n * ### .isNotTrue(value, [message])\n *\n * Asserts that `value` is not true.\n *\n * var tea = 'tasty chai';\n * assert.isNotTrue(tea, 'great, time for tea!');\n *\n * @name isNotTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotTrue = function (val, msg) {\n new Assertion(val, msg).to.not.equal(true);\n };\n\n /**\n * ### .isFalse(value, [message])\n *\n * Asserts that `value` is false.\n *\n * var teaServed = false;\n * assert.isFalse(teaServed, 'no tea yet? hmm...');\n *\n * @name isFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFalse = function (val, msg) {\n new Assertion(val, msg).is['false'];\n };\n\n /**\n * ### .isNotFalse(value, [message])\n *\n * Asserts that `value` is not false.\n *\n * var tea = 'tasty chai';\n * assert.isNotFalse(tea, 'great, time for tea!');\n *\n * @name isNotFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFalse = function (val, msg) {\n new Assertion(val, msg).to.not.equal(false);\n };\n\n /**\n * ### .isNull(value, [message])\n *\n * Asserts that `value` is null.\n *\n * assert.isNull(err, 'there was no error');\n *\n * @name isNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNull = function (val, msg) {\n new Assertion(val, msg).to.equal(null);\n };\n\n /**\n * ### .isNotNull(value, [message])\n *\n * Asserts that `value` is not null.\n *\n * var tea = 'tasty chai';\n * assert.isNotNull(tea, 'great, time for tea!');\n *\n * @name isNotNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNull = function (val, msg) {\n new Assertion(val, msg).to.not.equal(null);\n };\n\n /**\n * ### .isNaN\n * Asserts that value is NaN\n *\n * assert.isNaN('foo', 'foo is NaN');\n *\n * @name isNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNaN = function (val, msg) {\n new Assertion(val, msg).to.be.NaN;\n };\n\n /**\n * ### .isNotNaN\n * Asserts that value is not NaN\n *\n * assert.isNotNaN(4, '4 is not NaN');\n *\n * @name isNotNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n assert.isNotNaN = function (val, msg) {\n new Assertion(val, msg).not.to.be.NaN;\n };\n\n /**\n * ### .isUndefined(value, [message])\n *\n * Asserts that `value` is `undefined`.\n *\n * var tea;\n * assert.isUndefined(tea, 'no tea defined');\n *\n * @name isUndefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isUndefined = function (val, msg) {\n new Assertion(val, msg).to.equal(undefined);\n };\n\n /**\n * ### .isDefined(value, [message])\n *\n * Asserts that `value` is not `undefined`.\n *\n * var tea = 'cup of chai';\n * assert.isDefined(tea, 'tea has been defined');\n *\n * @name isDefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isDefined = function (val, msg) {\n new Assertion(val, msg).to.not.equal(undefined);\n };\n\n /**\n * ### .isFunction(value, [message])\n *\n * Asserts that `value` is a function.\n *\n * function serveTea() { return 'cup of tea'; };\n * assert.isFunction(serveTea, 'great, we can have tea now');\n *\n * @name isFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFunction = function (val, msg) {\n new Assertion(val, msg).to.be.a('function');\n };\n\n /**\n * ### .isNotFunction(value, [message])\n *\n * Asserts that `value` is _not_ a function.\n *\n * var serveTea = [ 'heat', 'pour', 'sip' ];\n * assert.isNotFunction(serveTea, 'great, we have listed the steps');\n *\n * @name isNotFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFunction = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('function');\n };\n\n /**\n * ### .isObject(value, [message])\n *\n * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).\n * _The assertion does not match subclassed objects._\n *\n * var selection = { name: 'Chai', serve: 'with spices' };\n * assert.isObject(selection, 'tea selection is an object');\n *\n * @name isObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isObject = function (val, msg) {\n new Assertion(val, msg).to.be.a('object');\n };\n\n /**\n * ### .isNotObject(value, [message])\n *\n * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).\n *\n * var selection = 'chai'\n * assert.isNotObject(selection, 'tea selection is not an object');\n * assert.isNotObject(null, 'null is not an object');\n *\n * @name isNotObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotObject = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('object');\n };\n\n /**\n * ### .isArray(value, [message])\n *\n * Asserts that `value` is an array.\n *\n * var menu = [ 'green', 'chai', 'oolong' ];\n * assert.isArray(menu, 'what kind of tea do we want?');\n *\n * @name isArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isArray = function (val, msg) {\n new Assertion(val, msg).to.be.an('array');\n };\n\n /**\n * ### .isNotArray(value, [message])\n *\n * Asserts that `value` is _not_ an array.\n *\n * var menu = 'green|chai|oolong';\n * assert.isNotArray(menu, 'what kind of tea do we want?');\n *\n * @name isNotArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotArray = function (val, msg) {\n new Assertion(val, msg).to.not.be.an('array');\n };\n\n /**\n * ### .isString(value, [message])\n *\n * Asserts that `value` is a string.\n *\n * var teaOrder = 'chai';\n * assert.isString(teaOrder, 'order placed');\n *\n * @name isString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isString = function (val, msg) {\n new Assertion(val, msg).to.be.a('string');\n };\n\n /**\n * ### .isNotString(value, [message])\n *\n * Asserts that `value` is _not_ a string.\n *\n * var teaOrder = 4;\n * assert.isNotString(teaOrder, 'order placed');\n *\n * @name isNotString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotString = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('string');\n };\n\n /**\n * ### .isNumber(value, [message])\n *\n * Asserts that `value` is a number.\n *\n * var cups = 2;\n * assert.isNumber(cups, 'how many cups');\n *\n * @name isNumber\n * @param {Number} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNumber = function (val, msg) {\n new Assertion(val, msg).to.be.a('number');\n };\n\n /**\n * ### .isNotNumber(value, [message])\n *\n * Asserts that `value` is _not_ a number.\n *\n * var cups = '2 cups please';\n * assert.isNotNumber(cups, 'how many cups');\n *\n * @name isNotNumber\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNumber = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('number');\n };\n\n /**\n * ### .isBoolean(value, [message])\n *\n * Asserts that `value` is a boolean.\n *\n * var teaReady = true\n * , teaServed = false;\n *\n * assert.isBoolean(teaReady, 'is the tea ready');\n * assert.isBoolean(teaServed, 'has tea been served');\n *\n * @name isBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBoolean = function (val, msg) {\n new Assertion(val, msg).to.be.a('boolean');\n };\n\n /**\n * ### .isNotBoolean(value, [message])\n *\n * Asserts that `value` is _not_ a boolean.\n *\n * var teaReady = 'yep'\n * , teaServed = 'nope';\n *\n * assert.isNotBoolean(teaReady, 'is the tea ready');\n * assert.isNotBoolean(teaServed, 'has tea been served');\n *\n * @name isNotBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotBoolean = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('boolean');\n };\n\n /**\n * ### .typeOf(value, name, [message])\n *\n * Asserts that `value`'s type is `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');\n * assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');\n * assert.typeOf('tea', 'string', 'we have a string');\n * assert.typeOf(/tea/, 'regexp', 'we have a regular expression');\n * assert.typeOf(null, 'null', 'we have a null');\n * assert.typeOf(undefined, 'undefined', 'we have an undefined');\n *\n * @name typeOf\n * @param {Mixed} value\n * @param {String} name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.typeOf = function (val, type, msg) {\n new Assertion(val, msg).to.be.a(type);\n };\n\n /**\n * ### .notTypeOf(value, name, [message])\n *\n * Asserts that `value`'s type is _not_ `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.notTypeOf('tea', 'number', 'strings are not numbers');\n *\n * @name notTypeOf\n * @param {Mixed} value\n * @param {String} typeof name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notTypeOf = function (val, type, msg) {\n new Assertion(val, msg).to.not.be.a(type);\n };\n\n /**\n * ### .instanceOf(object, constructor, [message])\n *\n * Asserts that `value` is an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new Tea('chai');\n *\n * assert.instanceOf(chai, Tea, 'chai is an instance of tea');\n *\n * @name instanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.instanceOf = function (val, type, msg) {\n new Assertion(val, msg).to.be.instanceOf(type);\n };\n\n /**\n * ### .notInstanceOf(object, constructor, [message])\n *\n * Asserts `value` is not an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new String('chai');\n *\n * assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');\n *\n * @name notInstanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInstanceOf = function (val, type, msg) {\n new Assertion(val, msg).to.not.be.instanceOf(type);\n };\n\n /**\n * ### .include(haystack, needle, [message])\n *\n * Asserts that `haystack` includes `needle`. Works\n * for strings and arrays.\n *\n * assert.include('foobar', 'bar', 'foobar contains string \"bar\"');\n * assert.include([ 1, 2, 3 ], 3, 'array contains value');\n *\n * @name include\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.include = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.include).include(inc);\n };\n\n /**\n * ### .notInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` does not include `needle`. Works\n * for strings and arrays.\n *\n * assert.notInclude('foobar', 'baz', 'string not include substring');\n * assert.notInclude([ 1, 2, 3 ], 4, 'array not include contain value');\n *\n * @name notInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notInclude).not.include(inc);\n };\n\n /**\n * ### .match(value, regexp, [message])\n *\n * Asserts that `value` matches the regular expression `regexp`.\n *\n * assert.match('foobar', /^foo/, 'regexp matches');\n *\n * @name match\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.match = function (exp, re, msg) {\n new Assertion(exp, msg).to.match(re);\n };\n\n /**\n * ### .notMatch(value, regexp, [message])\n *\n * Asserts that `value` does not match the regular expression `regexp`.\n *\n * assert.notMatch('foobar', /^foo/, 'regexp does not match');\n *\n * @name notMatch\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notMatch = function (exp, re, msg) {\n new Assertion(exp, msg).to.not.match(re);\n };\n\n /**\n * ### .property(object, property, [message])\n *\n * Asserts that `object` has a property named by `property`.\n *\n * assert.property({ tea: { green: 'matcha' }}, 'tea');\n *\n * @name property\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.property = function (obj, prop, msg) {\n new Assertion(obj, msg).to.have.property(prop);\n };\n\n /**\n * ### .notProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property`.\n *\n * assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');\n *\n * @name notProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notProperty = function (obj, prop, msg) {\n new Assertion(obj, msg).to.not.have.property(prop);\n };\n\n /**\n * ### .deepProperty(object, property, [message])\n *\n * Asserts that `object` has a property named by `property`, which can be a\n * string using dot- and bracket-notation for deep reference.\n *\n * assert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');\n *\n * @name deepProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepProperty = function (obj, prop, msg) {\n new Assertion(obj, msg).to.have.deep.property(prop);\n };\n\n /**\n * ### .notDeepProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property`, which\n * can be a string using dot- and bracket-notation for deep reference.\n *\n * assert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');\n *\n * @name notDeepProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepProperty = function (obj, prop, msg) {\n new Assertion(obj, msg).to.not.have.deep.property(prop);\n };\n\n /**\n * ### .propertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with value given\n * by `value`.\n *\n * assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');\n *\n * @name propertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.propertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg).to.have.property(prop, val);\n };\n\n /**\n * ### .propertyNotVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property`, but with a value\n * different from that given by `value`.\n *\n * assert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');\n *\n * @name propertyNotVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.propertyNotVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg).to.not.have.property(prop, val);\n };\n\n /**\n * ### .deepPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with value given\n * by `value`. `property` can use dot- and bracket-notation for deep\n * reference.\n *\n * assert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');\n *\n * @name deepPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg).to.have.deep.property(prop, val);\n };\n\n /**\n * ### .deepPropertyNotVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property`, but with a value\n * different from that given by `value`. `property` can use dot- and\n * bracket-notation for deep reference.\n *\n * assert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');\n *\n * @name deepPropertyNotVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepPropertyNotVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg).to.not.have.deep.property(prop, val);\n };\n\n /**\n * ### .lengthOf(object, length, [message])\n *\n * Asserts that `object` has a `length` property with the expected value.\n *\n * assert.lengthOf([1,2,3], 3, 'array has length of 3');\n * assert.lengthOf('foobar', 6, 'string has length of 6');\n *\n * @name lengthOf\n * @param {Mixed} object\n * @param {Number} length\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.lengthOf = function (exp, len, msg) {\n new Assertion(exp, msg).to.have.length(len);\n };\n\n /**\n * ### .throws(function, [constructor/string/regexp], [string/regexp], [message])\n *\n * Asserts that `function` will throw an error that is an instance of\n * `constructor`, or alternately that it will throw an error with message\n * matching `regexp`.\n *\n * assert.throws(fn, 'function throws a reference error');\n * assert.throws(fn, /function throws a reference error/);\n * assert.throws(fn, ReferenceError);\n * assert.throws(fn, ReferenceError, 'function throws a reference error');\n * assert.throws(fn, ReferenceError, /function throws a reference error/);\n *\n * @name throws\n * @alias throw\n * @alias Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.throws = function (fn, errt, errs, msg) {\n if ('string' === typeof errt || errt instanceof RegExp) {\n errs = errt;\n errt = null;\n }\n\n var assertErr = new Assertion(fn, msg).to.throw(errt, errs);\n return flag(assertErr, 'object');\n };\n\n /**\n * ### .doesNotThrow(function, [constructor/regexp], [message])\n *\n * Asserts that `function` will _not_ throw an error that is an instance of\n * `constructor`, or alternately that it will not throw an error with message\n * matching `regexp`.\n *\n * assert.doesNotThrow(fn, Error, 'function does not throw');\n *\n * @name doesNotThrow\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotThrow = function (fn, type, msg) {\n if ('string' === typeof type) {\n msg = type;\n type = null;\n }\n\n new Assertion(fn, msg).to.not.Throw(type);\n };\n\n /**\n * ### .operator(val1, operator, val2, [message])\n *\n * Compares two values using `operator`.\n *\n * assert.operator(1, '<', 2, 'everything is ok');\n * assert.operator(1, '>', 2, 'this will fail');\n *\n * @name operator\n * @param {Mixed} val1\n * @param {String} operator\n * @param {Mixed} val2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.operator = function (val, operator, val2, msg) {\n var ok;\n switch(operator) {\n case '==':\n ok = val == val2;\n break;\n case '===':\n ok = val === val2;\n break;\n case '>':\n ok = val > val2;\n break;\n case '>=':\n ok = val >= val2;\n break;\n case '<':\n ok = val < val2;\n break;\n case '<=':\n ok = val <= val2;\n break;\n case '!=':\n ok = val != val2;\n break;\n case '!==':\n ok = val !== val2;\n break;\n default:\n throw new Error('Invalid operator \"' + operator + '\"');\n }\n var test = new Assertion(ok, msg);\n test.assert(\n true === flag(test, 'object')\n , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)\n , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );\n };\n\n /**\n * ### .closeTo(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.closeTo(1.5, 1, 0.5, 'numbers are close');\n *\n * @name closeTo\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.closeTo = function (act, exp, delta, msg) {\n new Assertion(act, msg).to.be.closeTo(exp, delta);\n };\n\n /**\n * ### .approximately(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.approximately(1.5, 1, 0.5, 'numbers are close');\n *\n * @name approximately\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.approximately = function (act, exp, delta, msg) {\n new Assertion(act, msg).to.be.approximately(exp, delta);\n };\n\n /**\n * ### .sameMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members.\n * Order is not taken into account.\n *\n * assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');\n *\n * @name sameMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameMembers = function (set1, set2, msg) {\n new Assertion(set1, msg).to.have.same.members(set2);\n }\n\n /**\n * ### .sameDeepMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members - using a deep equality checking.\n * Order is not taken into account.\n *\n * assert.sameDeepMembers([ {b: 3}, {a: 2}, {c: 5} ], [ {c: 5}, {b: 3}, {a: 2} ], 'same deep members');\n *\n * @name sameDeepMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameDeepMembers = function (set1, set2, msg) {\n new Assertion(set1, msg).to.have.same.deep.members(set2);\n }\n\n /**\n * ### .includeMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset`.\n * Order is not taken into account.\n *\n * assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');\n *\n * @name includeMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeMembers = function (superset, subset, msg) {\n new Assertion(superset, msg).to.include.members(subset);\n }\n\n /**\n * ### .includeDeepMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` - using deep equality checking.\n * Order is not taken into account.\n * Duplicates are ignored.\n *\n * assert.includeDeepMembers([ {a: 1}, {b: 2}, {c: 3} ], [ {b: 2}, {a: 1}, {b: 2} ], 'include deep members');\n *\n * @name includeDeepMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeDeepMembers = function (superset, subset, msg) {\n new Assertion(superset, msg).to.include.deep.members(subset);\n }\n\n /**\n * ### .oneOf(inList, list, [message])\n *\n * Asserts that non-object, non-array value `inList` appears in the flat array `list`.\n *\n * assert.oneOf(1, [ 2, 1 ], 'Not found in list');\n *\n * @name oneOf\n * @param {*} inList\n * @param {Array<*>} list\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.oneOf = function (inList, list, msg) {\n new Assertion(inList, msg).to.be.oneOf(list);\n }\n\n /**\n * ### .changes(function, object, property)\n *\n * Asserts that a function changes the value of a property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 22 };\n * assert.changes(fn, obj, 'val');\n *\n * @name changes\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changes = function (fn, obj, prop) {\n new Assertion(fn).to.change(obj, prop);\n }\n\n /**\n * ### .doesNotChange(function, object, property)\n *\n * Asserts that a function does not changes the value of a property\n *\n * var obj = { val: 10 };\n * var fn = function() { console.log('foo'); };\n * assert.doesNotChange(fn, obj, 'val');\n *\n * @name doesNotChange\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotChange = function (fn, obj, prop) {\n new Assertion(fn).to.not.change(obj, prop);\n }\n\n /**\n * ### .increases(function, object, property)\n *\n * Asserts that a function increases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 13 };\n * assert.increases(fn, obj, 'val');\n *\n * @name increases\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increases = function (fn, obj, prop) {\n new Assertion(fn).to.increase(obj, prop);\n }\n\n /**\n * ### .doesNotIncrease(function, object, property)\n *\n * Asserts that a function does not increase object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 8 };\n * assert.doesNotIncrease(fn, obj, 'val');\n *\n * @name doesNotIncrease\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotIncrease = function (fn, obj, prop) {\n new Assertion(fn).to.not.increase(obj, prop);\n }\n\n /**\n * ### .decreases(function, object, property)\n *\n * Asserts that a function decreases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.decreases(fn, obj, 'val');\n *\n * @name decreases\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreases = function (fn, obj, prop) {\n new Assertion(fn).to.decrease(obj, prop);\n }\n\n /**\n * ### .doesNotDecrease(function, object, property)\n *\n * Asserts that a function does not decreases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * assert.doesNotDecrease(fn, obj, 'val');\n *\n * @name doesNotDecrease\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotDecrease = function (fn, obj, prop) {\n new Assertion(fn).to.not.decrease(obj, prop);\n }\n\n /*!\n * ### .ifError(object)\n *\n * Asserts if value is not a false value, and throws if it is a true value.\n * This is added to allow for chai to be a drop-in replacement for Node's\n * assert class.\n *\n * var err = new Error('I am a custom error');\n * assert.ifError(err); // Rethrows err!\n *\n * @name ifError\n * @param {Object} object\n * @namespace Assert\n * @api public\n */\n\n assert.ifError = function (val) {\n if (val) {\n throw(val);\n }\n };\n\n /**\n * ### .isExtensible(object)\n *\n * Asserts that `object` is extensible (can have new properties added to it).\n *\n * assert.isExtensible({});\n *\n * @name isExtensible\n * @alias extensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isExtensible = function (obj, msg) {\n new Assertion(obj, msg).to.be.extensible;\n };\n\n /**\n * ### .isNotExtensible(object)\n *\n * Asserts that `object` is _not_ extensible.\n *\n * var nonExtensibleObject = Object.preventExtensions({});\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freese({});\n *\n * assert.isNotExtensible(nonExtensibleObject);\n * assert.isNotExtensible(sealedObject);\n * assert.isNotExtensible(frozenObject);\n *\n * @name isNotExtensible\n * @alias notExtensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotExtensible = function (obj, msg) {\n new Assertion(obj, msg).to.not.be.extensible;\n };\n\n /**\n * ### .isSealed(object)\n *\n * Asserts that `object` is sealed (cannot have new properties added to it\n * and its existing properties cannot be removed).\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.seal({});\n *\n * assert.isSealed(sealedObject);\n * assert.isSealed(frozenObject);\n *\n * @name isSealed\n * @alias sealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isSealed = function (obj, msg) {\n new Assertion(obj, msg).to.be.sealed;\n };\n\n /**\n * ### .isNotSealed(object)\n *\n * Asserts that `object` is _not_ sealed.\n *\n * assert.isNotSealed({});\n *\n * @name isNotSealed\n * @alias notSealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotSealed = function (obj, msg) {\n new Assertion(obj, msg).to.not.be.sealed;\n };\n\n /**\n * ### .isFrozen(object)\n *\n * Asserts that `object` is frozen (cannot have new properties added to it\n * and its existing properties cannot be modified).\n *\n * var frozenObject = Object.freeze({});\n * assert.frozen(frozenObject);\n *\n * @name isFrozen\n * @alias frozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isFrozen = function (obj, msg) {\n new Assertion(obj, msg).to.be.frozen;\n };\n\n /**\n * ### .isNotFrozen(object)\n *\n * Asserts that `object` is _not_ frozen.\n *\n * assert.isNotFrozen({});\n *\n * @name isNotFrozen\n * @alias notFrozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFrozen = function (obj, msg) {\n new Assertion(obj, msg).to.not.be.frozen;\n };\n\n /*!\n * Aliases.\n */\n\n (function alias(name, as){\n assert[as] = assert[name];\n return alias;\n })\n ('isOk', 'ok')\n ('isNotOk', 'notOk')\n ('throws', 'throw')\n ('throws', 'Throw')\n ('isExtensible', 'extensible')\n ('isNotExtensible', 'notExtensible')\n ('isSealed', 'sealed')\n ('isNotSealed', 'notSealed')\n ('isFrozen', 'frozen')\n ('isNotFrozen', 'notFrozen');\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n chai.expect = function (val, message) {\n return new chai.Assertion(val, message);\n };\n\n /**\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace Expect\n * @api public\n */\n\n chai.expect.fail = function (actual, expected, message, operator) {\n message = message || 'expect.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, chai.expect.fail);\n };\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n var Assertion = chai.Assertion;\n\n function loadShould () {\n // explicitly define this method as function as to have it's name to include as `ssfi`\n function shouldGetter() {\n if (this instanceof String || this instanceof Number || this instanceof Boolean ) {\n return new Assertion(this.valueOf(), null, shouldGetter);\n }\n return new Assertion(this, null, shouldGetter);\n }\n function shouldSetter(value) {\n // See https://github.com/chaijs/chai/issues/86: this makes\n // `whatever.should = someValue` actually set `someValue`, which is\n // especially useful for `global.should = require('chai').should()`.\n //\n // Note that we have to use [[DefineProperty]] instead of [[Put]]\n // since otherwise we would trigger this very setter!\n Object.defineProperty(this, 'should', {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n }\n // modify Object.prototype to have `should`\n Object.defineProperty(Object.prototype, 'should', {\n set: shouldSetter\n , get: shouldGetter\n , configurable: true\n });\n\n var should = {};\n\n /**\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace Should\n * @api public\n */\n\n should.fail = function (actual, expected, message, operator) {\n message = message || 'should.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, should.fail);\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * should.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])\n *\n * Asserts that `function` will throw an error that is an instance of\n * `constructor`, or alternately that it will throw an error with message\n * matching `regexp`.\n *\n * should.throw(fn, 'function throws a reference error');\n * should.throw(fn, /function throws a reference error/);\n * should.throw(fn, ReferenceError);\n * should.throw(fn, ReferenceError, 'function throws a reference error');\n * should.throw(fn, ReferenceError, /function throws a reference error/);\n *\n * @name throw\n * @alias Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.Throw(errt, errs);\n };\n\n /**\n * ### .exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi';\n *\n * should.exist(foo, 'foo exists');\n *\n * @name exist\n * @namespace Should\n * @api public\n */\n\n should.exist = function (val, msg) {\n new Assertion(val, msg).to.exist;\n }\n\n // negation\n should.not = {}\n\n /**\n * ### .not.equal(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * should.not.equal(3, 4, 'these numbers are not equal');\n *\n * @name not.equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.not.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.not.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/regexp], [message])\n *\n * Asserts that `function` will _not_ throw an error that is an instance of\n * `constructor`, or alternately that it will not throw an error with message\n * matching `regexp`.\n *\n * should.not.throw(fn, Error, 'function does not throw');\n *\n * @name not.throw\n * @alias not.Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.not.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.not.Throw(errt, errs);\n };\n\n /**\n * ### .not.exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var bar = null;\n *\n * should.not.exist(bar, 'bar does not exist');\n *\n * @name not.exist\n * @namespace Should\n * @api public\n */\n\n should.not.exist = function (val, msg) {\n new Assertion(val, msg).to.not.exist;\n }\n\n should['throw'] = should['Throw'];\n should.not['throw'] = should.not['Throw'];\n\n return should;\n };\n\n chai.should = loadShould;\n chai.Should = loadShould;\n};\n","/*!\n * Chai - addChainingMethod utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar transferFlags = require('./transferFlags');\nvar flag = require('./flag');\nvar config = require('../config');\n\n/*!\n * Module variables\n */\n\n// Check whether `__proto__` is supported\nvar hasProtoSupport = '__proto__' in Object;\n\n// Without `__proto__` support, this module will need to add properties to a function.\n// However, some Function.prototype methods cannot be overwritten,\n// and there seems no easy cross-platform way to detect them (@see chaijs/chai/issues/69).\nvar excludeNames = /^(?:length|name|arguments|caller)$/;\n\n// Cache `Function` properties\nvar call = Function.prototype.call,\n apply = Function.prototype.apply;\n\n/**\n * ### addChainableMethod (ctx, name, method, chainingBehavior)\n *\n * Adds a method to an object, such that the method can also be chained.\n *\n * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);\n *\n * The result can then be used as both a method assertion, executing both `method` and\n * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.\n *\n * expect(fooStr).to.be.foo('bar');\n * expect(fooStr).to.be.foo.equal('foo');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for `name`, when called\n * @param {Function} chainingBehavior function to be called every time the property is accessed\n * @namespace Utils\n * @name addChainableMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method, chainingBehavior) {\n if (typeof chainingBehavior !== 'function') {\n chainingBehavior = function () { };\n }\n\n var chainableBehavior = {\n method: method\n , chainingBehavior: chainingBehavior\n };\n\n // save the methods so we can overwrite them later, if we need to.\n if (!ctx.__methods) {\n ctx.__methods = {};\n }\n ctx.__methods[name] = chainableBehavior;\n\n Object.defineProperty(ctx, name,\n { get: function () {\n chainableBehavior.chainingBehavior.call(this);\n\n var assert = function assert() {\n var old_ssfi = flag(this, 'ssfi');\n if (old_ssfi && config.includeStack === false)\n flag(this, 'ssfi', assert);\n var result = chainableBehavior.method.apply(this, arguments);\n return result === undefined ? this : result;\n };\n\n // Use `__proto__` if available\n if (hasProtoSupport) {\n // Inherit all properties from the object by replacing the `Function` prototype\n var prototype = assert.__proto__ = Object.create(this);\n // Restore the `call` and `apply` methods from `Function`\n prototype.call = call;\n prototype.apply = apply;\n }\n // Otherwise, redefine all properties (slow!)\n else {\n var asserterNames = Object.getOwnPropertyNames(ctx);\n asserterNames.forEach(function (asserterName) {\n if (!excludeNames.test(asserterName)) {\n var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);\n Object.defineProperty(assert, asserterName, pd);\n }\n });\n }\n\n transferFlags(this, assert);\n return assert;\n }\n , configurable: true\n });\n};\n","/*!\n * Chai - addMethod utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\nvar config = require('../config');\n\n/**\n * ### .addMethod (ctx, name, method)\n *\n * Adds a method to the prototype of an object.\n *\n * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(fooStr).to.be.foo('bar');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for name\n * @namespace Utils\n * @name addMethod\n * @api public\n */\nvar flag = require('./flag');\n\nmodule.exports = function (ctx, name, method) {\n ctx[name] = function () {\n var old_ssfi = flag(this, 'ssfi');\n if (old_ssfi && config.includeStack === false)\n flag(this, 'ssfi', ctx[name]);\n var result = method.apply(this, arguments);\n return result === undefined ? this : result;\n };\n};\n","/*!\n * Chai - addProperty utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\nvar config = require('../config');\nvar flag = require('./flag');\n\n/**\n * ### addProperty (ctx, name, getter)\n *\n * Adds a property to the prototype of an object.\n *\n * utils.addProperty(chai.Assertion.prototype, 'foo', function () {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.instanceof(Foo);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.foo;\n *\n * @param {Object} ctx object to which the property is added\n * @param {String} name of property to add\n * @param {Function} getter function to be used for name\n * @namespace Utils\n * @name addProperty\n * @api public\n */\n\nmodule.exports = function (ctx, name, getter) {\n Object.defineProperty(ctx, name,\n { get: function addProperty() {\n var old_ssfi = flag(this, 'ssfi');\n if (old_ssfi && config.includeStack === false)\n flag(this, 'ssfi', addProperty);\n\n var result = getter.call(this);\n return result === undefined ? this : result;\n }\n , configurable: true\n });\n};\n","/*!\n * Chai - expectTypes utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### expectTypes(obj, types)\n *\n * Ensures that the object being tested against is of a valid type.\n *\n * utils.expectTypes(this, ['array', 'object', 'string']);\n *\n * @param {Mixed} obj constructed Assertion\n * @param {Array} type A list of allowed types for this assertion\n * @namespace Utils\n * @name expectTypes\n * @api public\n */\n\nvar AssertionError = require('assertion-error');\nvar flag = require('./flag');\nvar type = require('type-detect');\n\nmodule.exports = function (obj, types) {\n var obj = flag(obj, 'object');\n types = types.map(function (t) { return t.toLowerCase(); });\n types.sort();\n\n // Transforms ['lorem', 'ipsum'] into 'a lirum, or an ipsum'\n var str = types.map(function (t, index) {\n var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';\n var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';\n return or + art + ' ' + t;\n }).join(', ');\n\n if (!types.some(function (expected) { return type(obj) === expected; })) {\n throw new AssertionError(\n 'object tested must be ' + str + ', but ' + type(obj) + ' given'\n );\n }\n};\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### flag(object, key, [value])\n *\n * Get or set a flag value on an object. If a\n * value is provided it will be set, else it will\n * return the currently set value or `undefined` if\n * the value is not set.\n *\n * utils.flag(this, 'foo', 'bar'); // setter\n * utils.flag(this, 'foo'); // getter, returns `bar`\n *\n * @param {Object} object constructed Assertion\n * @param {String} key\n * @param {Mixed} value (optional)\n * @namespace Utils\n * @name flag\n * @api private\n */\n\nmodule.exports = function (obj, key, value) {\n var flags = obj.__flags || (obj.__flags = Object.create(null));\n if (arguments.length === 3) {\n flags[key] = value;\n } else {\n return flags[key];\n }\n};\n","/*!\n * Chai - getActual utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * # getActual(object, [actual])\n *\n * Returns the `actual` value for an Assertion\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getActual\n */\n\nmodule.exports = function (obj, args) {\n return args.length > 4 ? args[4] : obj._obj;\n};\n","/*!\n * Chai - getEnumerableProperties utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### .getEnumerableProperties(object)\n *\n * This allows the retrieval of enumerable property names of an object,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getEnumerableProperties\n * @api public\n */\n\nmodule.exports = function getEnumerableProperties(object) {\n var result = [];\n for (var name in object) {\n result.push(name);\n }\n return result;\n};\n","/*!\n * Chai - message composition utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar flag = require('./flag')\n , getActual = require('./getActual')\n , inspect = require('./inspect')\n , objDisplay = require('./objDisplay');\n\n/**\n * ### .getMessage(object, message, negateMessage)\n *\n * Construct the error message based on flags\n * and template tags. Template tags will return\n * a stringified inspection of the object referenced.\n *\n * Message template tags:\n * - `#{this}` current asserted object\n * - `#{act}` actual value\n * - `#{exp}` expected value\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getMessage\n * @api public\n */\n\nmodule.exports = function (obj, args) {\n var negate = flag(obj, 'negate')\n , val = flag(obj, 'object')\n , expected = args[3]\n , actual = getActual(obj, args)\n , msg = negate ? args[2] : args[1]\n , flagMsg = flag(obj, 'message');\n\n if(typeof msg === \"function\") msg = msg();\n msg = msg || '';\n msg = msg\n .replace(/#\\{this\\}/g, function () { return objDisplay(val); })\n .replace(/#\\{act\\}/g, function () { return objDisplay(actual); })\n .replace(/#\\{exp\\}/g, function () { return objDisplay(expected); });\n\n return flagMsg ? flagMsg + ': ' + msg : msg;\n};\n","/*!\n * Chai - getName utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * # getName(func)\n *\n * Gets the name of a function, in a cross-browser way.\n *\n * @param {Function} a function (usually a constructor)\n * @namespace Utils\n * @name getName\n */\n\nmodule.exports = function (func) {\n if (func.name) return func.name;\n\n var match = /^\\s?function ([^(]*)\\(/.exec(func);\n return match && match[1] ? match[1] : \"\";\n};\n","/*!\n * Chai - getPathInfo utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\nvar hasProperty = require('./hasProperty');\n\n/**\n * ### .getPathInfo(path, object)\n *\n * This allows the retrieval of property info in an\n * object given a string path.\n *\n * The path info consists of an object with the\n * following properties:\n *\n * * parent - The parent object of the property referenced by `path`\n * * name - The name of the final property, a number if it was an array indexer\n * * value - The value of the property, if it exists, otherwise `undefined`\n * * exists - Whether the property exists or not\n *\n * @param {String} path\n * @param {Object} object\n * @returns {Object} info\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nmodule.exports = function getPathInfo(path, obj) {\n var parsed = parsePath(path),\n last = parsed[parsed.length - 1];\n\n var info = {\n parent: parsed.length > 1 ? _getPathValue(parsed, obj, parsed.length - 1) : obj,\n name: last.p || last.i,\n value: _getPathValue(parsed, obj)\n };\n info.exists = hasProperty(info.name, info.parent);\n\n return info;\n};\n\n\n/*!\n * ## parsePath(path)\n *\n * Helper function used to parse string object\n * paths. Use in conjunction with `_getPathValue`.\n *\n * var parsed = parsePath('myobject.property.subprop');\n *\n * ### Paths:\n *\n * * Can be as near infinitely deep and nested\n * * Arrays are also valid using the formal `myobject.document[3].property`.\n * * Literal dots and brackets (not delimiter) must be backslash-escaped.\n *\n * @param {String} path\n * @returns {Object} parsed\n * @api private\n */\n\nfunction parsePath (path) {\n var str = path.replace(/([^\\\\])\\[/g, '$1.[')\n , parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n return parts.map(function (value) {\n var re = /^\\[(\\d+)\\]$/\n , mArr = re.exec(value);\n if (mArr) return { i: parseFloat(mArr[1]) };\n else return { p: value.replace(/\\\\([.\\[\\]])/g, '$1') };\n });\n}\n\n\n/*!\n * ## _getPathValue(parsed, obj)\n *\n * Helper companion function for `.parsePath` that returns\n * the value located at the parsed address.\n *\n * var value = getPathValue(parsed, obj);\n *\n * @param {Object} parsed definition from `parsePath`.\n * @param {Object} object to search against\n * @param {Number} object to search against\n * @returns {Object|Undefined} value\n * @api private\n */\n\nfunction _getPathValue (parsed, obj, index) {\n var tmp = obj\n , res;\n\n index = (index === undefined ? parsed.length : index);\n\n for (var i = 0, l = index; i < l; i++) {\n var part = parsed[i];\n if (tmp) {\n if ('undefined' !== typeof part.p)\n tmp = tmp[part.p];\n else if ('undefined' !== typeof part.i)\n tmp = tmp[part.i];\n if (i == (l - 1)) res = tmp;\n } else {\n res = undefined;\n }\n }\n return res;\n}\n","/*!\n * Chai - getPathValue utility\n * Copyright(c) 2012-2014 Jake Luer \n * @see https://github.com/logicalparadox/filtr\n * MIT Licensed\n */\n\nvar getPathInfo = require('./getPathInfo');\n\n/**\n * ### .getPathValue(path, object)\n *\n * This allows the retrieval of values in an\n * object given a string path.\n *\n * var obj = {\n * prop1: {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n * , prop2: {\n * arr: [ { nested: 'Universe' } ]\n * , str: 'Hello again!'\n * }\n * }\n *\n * The following would be the results.\n *\n * getPathValue('prop1.str', obj); // Hello\n * getPathValue('prop1.att[2]', obj); // b\n * getPathValue('prop2.arr[0].nested', obj); // Universe\n *\n * @param {String} path\n * @param {Object} object\n * @returns {Object} value or `undefined`\n * @namespace Utils\n * @name getPathValue\n * @api public\n */\nmodule.exports = function(path, obj) {\n var info = getPathInfo(path, obj);\n return info.value;\n};\n","/*!\n * Chai - getProperties utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### .getProperties(object)\n *\n * This allows the retrieval of property names of an object, enumerable or not,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getProperties\n * @api public\n */\n\nmodule.exports = function getProperties(object) {\n var result = Object.getOwnPropertyNames(object);\n\n function addProperty(property) {\n if (result.indexOf(property) === -1) {\n result.push(property);\n }\n }\n\n var proto = Object.getPrototypeOf(object);\n while (proto !== null) {\n Object.getOwnPropertyNames(proto).forEach(addProperty);\n proto = Object.getPrototypeOf(proto);\n }\n\n return result;\n};\n","/*!\n * Chai - hasProperty utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\nvar type = require('type-detect');\n\n/**\n * ### .hasProperty(object, name)\n *\n * This allows checking whether an object has\n * named property or numeric array index.\n *\n * Basically does the same thing as the `in`\n * operator but works properly with natives\n * and null/undefined values.\n *\n * var obj = {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n *\n * The following would be the results.\n *\n * hasProperty('str', obj); // true\n * hasProperty('constructor', obj); // true\n * hasProperty('bar', obj); // false\n *\n * hasProperty('length', obj.str); // true\n * hasProperty(1, obj.str); // true\n * hasProperty(5, obj.str); // false\n *\n * hasProperty('length', obj.arr); // true\n * hasProperty(2, obj.arr); // true\n * hasProperty(3, obj.arr); // false\n *\n * @param {Objuect} object\n * @param {String|Number} name\n * @returns {Boolean} whether it exists\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nvar literals = {\n 'number': Number\n , 'string': String\n};\n\nmodule.exports = function hasProperty(name, obj) {\n var ot = type(obj);\n\n // Bad Object, obviously no props at all\n if(ot === 'null' || ot === 'undefined')\n return false;\n\n // The `in` operator does not work with certain literals\n // box these before the check\n if(literals[ot] && typeof obj !== 'object')\n obj = new literals[ot](obj);\n\n return name in obj;\n};\n","/*!\n * chai\n * Copyright(c) 2011 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Main exports\n */\n\nvar exports = module.exports = {};\n\n/*!\n * test utility\n */\n\nexports.test = require('./test');\n\n/*!\n * type utility\n */\n\nexports.type = require('type-detect');\n\n/*!\n * expectTypes utility\n */\nexports.expectTypes = require('./expectTypes');\n\n/*!\n * message utility\n */\n\nexports.getMessage = require('./getMessage');\n\n/*!\n * actual utility\n */\n\nexports.getActual = require('./getActual');\n\n/*!\n * Inspect util\n */\n\nexports.inspect = require('./inspect');\n\n/*!\n * Object Display util\n */\n\nexports.objDisplay = require('./objDisplay');\n\n/*!\n * Flag utility\n */\n\nexports.flag = require('./flag');\n\n/*!\n * Flag transferring utility\n */\n\nexports.transferFlags = require('./transferFlags');\n\n/*!\n * Deep equal utility\n */\n\nexports.eql = require('deep-eql');\n\n/*!\n * Deep path value\n */\n\nexports.getPathValue = require('./getPathValue');\n\n/*!\n * Deep path info\n */\n\nexports.getPathInfo = require('./getPathInfo');\n\n/*!\n * Check if a property exists\n */\n\nexports.hasProperty = require('./hasProperty');\n\n/*!\n * Function name\n */\n\nexports.getName = require('./getName');\n\n/*!\n * add Property\n */\n\nexports.addProperty = require('./addProperty');\n\n/*!\n * add Method\n */\n\nexports.addMethod = require('./addMethod');\n\n/*!\n * overwrite Property\n */\n\nexports.overwriteProperty = require('./overwriteProperty');\n\n/*!\n * overwrite Method\n */\n\nexports.overwriteMethod = require('./overwriteMethod');\n\n/*!\n * Add a chainable method\n */\n\nexports.addChainableMethod = require('./addChainableMethod');\n\n/*!\n * Overwrite chainable method\n */\n\nexports.overwriteChainableMethod = require('./overwriteChainableMethod');\n","// This is (almost) directly from Node.js utils\n// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js\n\nvar getName = require('./getName');\nvar getProperties = require('./getProperties');\nvar getEnumerableProperties = require('./getEnumerableProperties');\n\nmodule.exports = inspect;\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Boolean} showHidden Flag that shows hidden (not enumerable)\n * properties of objects.\n * @param {Number} depth Depth in which to descend in object. Default is 2.\n * @param {Boolean} colors Flag to turn on ANSI escape codes to color the\n * output. Default is false (no coloring).\n * @namespace Utils\n * @name inspect\n */\nfunction inspect(obj, showHidden, depth, colors) {\n var ctx = {\n showHidden: showHidden,\n seen: [],\n stylize: function (str) { return str; }\n };\n return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));\n}\n\n// Returns true if object is a DOM element.\nvar isDOMElement = function (object) {\n if (typeof HTMLElement === 'object') {\n return object instanceof HTMLElement;\n } else {\n return object &&\n typeof object === 'object' &&\n object.nodeType === 1 &&\n typeof object.nodeName === 'string';\n }\n};\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (value && typeof value.inspect === 'function' &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes);\n if (typeof ret !== 'string') {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // If this is a DOM element, try to get the outer HTML.\n if (isDOMElement(value)) {\n if ('outerHTML' in value) {\n return value.outerHTML;\n // This value does not have an outerHTML attribute,\n // it could still be an XML element\n } else {\n // Attempt to serialize it\n try {\n if (document.xmlVersion) {\n var xmlSerializer = new XMLSerializer();\n return xmlSerializer.serializeToString(value);\n } else {\n // Firefox 11- do not support outerHTML\n // It does, however, support innerHTML\n // Use the following to render the element\n var ns = \"http://www.w3.org/1999/xhtml\";\n var container = document.createElementNS(ns, '_');\n\n container.appendChild(value.cloneNode(false));\n html = container.innerHTML\n .replace('><', '>' + value.innerHTML + '<');\n container.innerHTML = '';\n return html;\n }\n } catch (err) {\n // This could be a non-native DOM implementation,\n // continue with the normal flow:\n // printing the element as if it is an object.\n }\n }\n }\n\n // Look up the keys of the object.\n var visibleKeys = getEnumerableProperties(value);\n var keys = ctx.showHidden ? getProperties(value) : visibleKeys;\n\n // Some type of object without properties can be shortcutted.\n // In IE, errors have a single `stack` property, or if they are vanilla `Error`,\n // a `stack` plus `description` property; ignore those for consistency.\n if (keys.length === 0 || (isError(value) && (\n (keys.length === 1 && keys[0] === 'stack') ||\n (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')\n ))) {\n if (typeof value === 'function') {\n var name = getName(value);\n var nameSuffix = name ? ': ' + name : '';\n return ctx.stylize('[Function' + nameSuffix + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (typeof value === 'function') {\n var name = getName(value);\n var nameSuffix = name ? ': ' + name : '';\n base = ' [Function' + nameSuffix + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n return formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n switch (typeof value) {\n case 'undefined':\n return ctx.stylize('undefined', 'undefined');\n\n case 'string':\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n\n case 'number':\n if (value === 0 && (1/value) === -Infinity) {\n return ctx.stylize('-0', 'number');\n }\n return ctx.stylize('' + value, 'number');\n\n case 'boolean':\n return ctx.stylize('' + value, 'boolean');\n }\n // For some reason typeof null is \"object\", so special case here.\n if (value === null) {\n return ctx.stylize('null', 'null');\n }\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (Object.prototype.hasOwnProperty.call(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str;\n if (value.__lookupGetter__) {\n if (value.__lookupGetter__(key)) {\n if (value.__lookupSetter__(key)) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (value.__lookupSetter__(key)) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n }\n if (visibleKeys.indexOf(key) < 0) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(value[key]) < 0) {\n if (recurseTimes === null) {\n str = formatValue(ctx, value[key], null);\n } else {\n str = formatValue(ctx, value[key], recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (typeof name === 'undefined') {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\nfunction isArray(ar) {\n return Array.isArray(ar) ||\n (typeof ar === 'object' && objectToString(ar) === '[object Array]');\n}\n\nfunction isRegExp(re) {\n return typeof re === 'object' && objectToString(re) === '[object RegExp]';\n}\n\nfunction isDate(d) {\n return typeof d === 'object' && objectToString(d) === '[object Date]';\n}\n\nfunction isError(e) {\n return typeof e === 'object' && objectToString(e) === '[object Error]';\n}\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar inspect = require('./inspect');\nvar config = require('../config');\n\n/**\n * ### .objDisplay (object)\n *\n * Determines if an object or an array matches\n * criteria to be inspected in-line for error\n * messages or should be truncated.\n *\n * @param {Mixed} javascript object to inspect\n * @name objDisplay\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function (obj) {\n var str = inspect(obj)\n , type = Object.prototype.toString.call(obj);\n\n if (config.truncateThreshold && str.length >= config.truncateThreshold) {\n if (type === '[object Function]') {\n return !obj.name || obj.name === ''\n ? '[Function]'\n : '[Function: ' + obj.name + ']';\n } else if (type === '[object Array]') {\n return '[ Array(' + obj.length + ') ]';\n } else if (type === '[object Object]') {\n var keys = Object.keys(obj)\n , kstr = keys.length > 2\n ? keys.splice(0, 2).join(', ') + ', ...'\n : keys.join(', ');\n return '{ Object (' + kstr + ') }';\n } else {\n return str;\n }\n } else {\n return str;\n }\n};\n","/*!\n * Chai - overwriteChainableMethod utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### overwriteChainableMethod (ctx, name, method, chainingBehavior)\n *\n * Overwites an already existing chainable method\n * and provides access to the previous function or\n * property. Must return functions to be used for\n * name.\n *\n * utils.overwriteChainableMethod(chai.Assertion.prototype, 'length',\n * function (_super) {\n * }\n * , function (_super) {\n * }\n * );\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteChainableMethod('foo', fn, fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.have.length(3);\n * expect(myFoo).to.have.length.above(3);\n *\n * @param {Object} ctx object whose method / property is to be overwritten\n * @param {String} name of method / property to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @param {Function} chainingBehavior function that returns a function to be used for property\n * @namespace Utils\n * @name overwriteChainableMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method, chainingBehavior) {\n var chainableBehavior = ctx.__methods[name];\n\n var _chainingBehavior = chainableBehavior.chainingBehavior;\n chainableBehavior.chainingBehavior = function () {\n var result = chainingBehavior(_chainingBehavior).call(this);\n return result === undefined ? this : result;\n };\n\n var _method = chainableBehavior.method;\n chainableBehavior.method = function () {\n var result = method(_method).apply(this, arguments);\n return result === undefined ? this : result;\n };\n};\n","/*!\n * Chai - overwriteMethod utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### overwriteMethod (ctx, name, fn)\n *\n * Overwites an already existing method and provides\n * access to previous function. Must return function\n * to be used for name.\n *\n * utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {\n * return function (str) {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.value).to.equal(str);\n * } else {\n * _super.apply(this, arguments);\n * }\n * }\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.equal('bar');\n *\n * @param {Object} ctx object whose method is to be overwritten\n * @param {String} name of method to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @namespace Utils\n * @name overwriteMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method) {\n var _method = ctx[name]\n , _super = function () { return this; };\n\n if (_method && 'function' === typeof _method)\n _super = _method;\n\n ctx[name] = function () {\n var result = method(_super).apply(this, arguments);\n return result === undefined ? this : result;\n }\n};\n","/*!\n * Chai - overwriteProperty utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### overwriteProperty (ctx, name, fn)\n *\n * Overwites an already existing property getter and provides\n * access to previous value. Must return function to use as getter.\n *\n * utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {\n * return function () {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.name).to.equal('bar');\n * } else {\n * _super.call(this);\n * }\n * }\n * });\n *\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.ok;\n *\n * @param {Object} ctx object whose property is to be overwritten\n * @param {String} name of property to overwrite\n * @param {Function} getter function that returns a getter function to be used for name\n * @namespace Utils\n * @name overwriteProperty\n * @api public\n */\n\nmodule.exports = function (ctx, name, getter) {\n var _get = Object.getOwnPropertyDescriptor(ctx, name)\n , _super = function () {};\n\n if (_get && 'function' === typeof _get.get)\n _super = _get.get\n\n Object.defineProperty(ctx, name,\n { get: function () {\n var result = getter(_super).call(this);\n return result === undefined ? this : result;\n }\n , configurable: true\n });\n};\n","/*!\n * Chai - test utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar flag = require('./flag');\n\n/**\n * # test(object, expression)\n *\n * Test and object for expression.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name test\n */\n\nmodule.exports = function (obj, args) {\n var negate = flag(obj, 'negate')\n , expr = args[0];\n return negate ? !expr : expr;\n};\n","/*!\n * Chai - transferFlags utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### transferFlags(assertion, object, includeAll = true)\n *\n * Transfer all the flags for `assertion` to `object`. If\n * `includeAll` is set to `false`, then the base Chai\n * assertion flags (namely `object`, `ssfi`, and `message`)\n * will not be transferred.\n *\n *\n * var newAssertion = new Assertion();\n * utils.transferFlags(assertion, newAssertion);\n *\n * var anotherAsseriton = new Assertion(myObj);\n * utils.transferFlags(assertion, anotherAssertion, false);\n *\n * @param {Assertion} assertion the assertion to transfer the flags from\n * @param {Object} object the object to transfer the flags to; usually a new assertion\n * @param {Boolean} includeAll\n * @namespace Utils\n * @name transferFlags\n * @api private\n */\n\nmodule.exports = function (assertion, object, includeAll) {\n var flags = assertion.__flags || (assertion.__flags = Object.create(null));\n\n if (!object.__flags) {\n object.__flags = Object.create(null);\n }\n\n includeAll = arguments.length === 3 ? includeAll : true;\n\n for (var flag in flags) {\n if (includeAll ||\n (flag !== 'object' && flag !== 'ssfi' && flag != 'message')) {\n object.__flags[flag] = flags[flag];\n }\n }\n};\n","module.exports = require('./lib/eql');\n","/*!\n * deep-eql\n * Copyright(c) 2013 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar type = require('type-detect');\n\n/*!\n * Buffer.isBuffer browser shim\n */\n\nvar Buffer;\ntry { Buffer = require('buffer').Buffer; }\ncatch(ex) {\n Buffer = {};\n Buffer.isBuffer = function() { return false; }\n}\n\n/*!\n * Primary Export\n */\n\nmodule.exports = deepEqual;\n\n/**\n * Assert super-strict (egal) equality between\n * two objects of any type.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @param {Array} memoised (optional)\n * @return {Boolean} equal match\n */\n\nfunction deepEqual(a, b, m) {\n if (sameValue(a, b)) {\n return true;\n } else if ('date' === type(a)) {\n return dateEqual(a, b);\n } else if ('regexp' === type(a)) {\n return regexpEqual(a, b);\n } else if (Buffer.isBuffer(a)) {\n return bufferEqual(a, b);\n } else if ('arguments' === type(a)) {\n return argumentsEqual(a, b, m);\n } else if (!typeEqual(a, b)) {\n return false;\n } else if (('object' !== type(a) && 'object' !== type(b))\n && ('array' !== type(a) && 'array' !== type(b))) {\n return sameValue(a, b);\n } else {\n return objectEqual(a, b, m);\n }\n}\n\n/*!\n * Strict (egal) equality test. Ensures that NaN always\n * equals NaN and `-0` does not equal `+0`.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} equal match\n */\n\nfunction sameValue(a, b) {\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n return a !== a && b !== b;\n}\n\n/*!\n * Compare the types of two given objects and\n * return if they are equal. Note that an Array\n * has a type of `array` (not `object`) and arguments\n * have a type of `arguments` (not `array`/`object`).\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction typeEqual(a, b) {\n return type(a) === type(b);\n}\n\n/*!\n * Compare two Date objects by asserting that\n * the time values are equal using `saveValue`.\n *\n * @param {Date} a\n * @param {Date} b\n * @return {Boolean} result\n */\n\nfunction dateEqual(a, b) {\n if ('date' !== type(b)) return false;\n return sameValue(a.getTime(), b.getTime());\n}\n\n/*!\n * Compare two regular expressions by converting them\n * to string and checking for `sameValue`.\n *\n * @param {RegExp} a\n * @param {RegExp} b\n * @return {Boolean} result\n */\n\nfunction regexpEqual(a, b) {\n if ('regexp' !== type(b)) return false;\n return sameValue(a.toString(), b.toString());\n}\n\n/*!\n * Assert deep equality of two `arguments` objects.\n * Unfortunately, these must be sliced to arrays\n * prior to test to ensure no bad behavior.\n *\n * @param {Arguments} a\n * @param {Arguments} b\n * @param {Array} memoize (optional)\n * @return {Boolean} result\n */\n\nfunction argumentsEqual(a, b, m) {\n if ('arguments' !== type(b)) return false;\n a = [].slice.call(a);\n b = [].slice.call(b);\n return deepEqual(a, b, m);\n}\n\n/*!\n * Get enumerable properties of a given object.\n *\n * @param {Object} a\n * @return {Array} property names\n */\n\nfunction enumerable(a) {\n var res = [];\n for (var key in a) res.push(key);\n return res;\n}\n\n/*!\n * Simple equality for flat iterable objects\n * such as Arrays or Node.js buffers.\n *\n * @param {Iterable} a\n * @param {Iterable} b\n * @return {Boolean} result\n */\n\nfunction iterableEqual(a, b) {\n if (a.length !== b.length) return false;\n\n var i = 0;\n var match = true;\n\n for (; i < a.length; i++) {\n if (a[i] !== b[i]) {\n match = false;\n break;\n }\n }\n\n return match;\n}\n\n/*!\n * Extension to `iterableEqual` specifically\n * for Node.js Buffers.\n *\n * @param {Buffer} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction bufferEqual(a, b) {\n if (!Buffer.isBuffer(b)) return false;\n return iterableEqual(a, b);\n}\n\n/*!\n * Block for `objectEqual` ensuring non-existing\n * values don't get in.\n *\n * @param {Mixed} object\n * @return {Boolean} result\n */\n\nfunction isValue(a) {\n return a !== null && a !== undefined;\n}\n\n/*!\n * Recursively check the equality of two objects.\n * Once basic sameness has been established it will\n * defer to `deepEqual` for each enumerable key\n * in the object.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction objectEqual(a, b, m) {\n if (!isValue(a) || !isValue(b)) {\n return false;\n }\n\n if (a.prototype !== b.prototype) {\n return false;\n }\n\n var i;\n if (m) {\n for (i = 0; i < m.length; i++) {\n if ((m[i][0] === a && m[i][1] === b)\n || (m[i][0] === b && m[i][1] === a)) {\n return true;\n }\n }\n } else {\n m = [];\n }\n\n try {\n var ka = enumerable(a);\n var kb = enumerable(b);\n } catch (ex) {\n return false;\n }\n\n ka.sort();\n kb.sort();\n\n if (!iterableEqual(ka, kb)) {\n return false;\n }\n\n m.push([ a, b ]);\n\n var key;\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], m)) {\n return false;\n }\n }\n\n return true;\n}\n","module.exports = require('./lib/type');\n","/*!\n * type-detect\n * Copyright(c) 2013 jake luer \n * MIT Licensed\n */\n\n/*!\n * Primary Exports\n */\n\nvar exports = module.exports = getType;\n\n/*!\n * Detectable javascript natives\n */\n\nvar natives = {\n '[object Array]': 'array'\n , '[object RegExp]': 'regexp'\n , '[object Function]': 'function'\n , '[object Arguments]': 'arguments'\n , '[object Date]': 'date'\n};\n\n/**\n * ### typeOf (obj)\n *\n * Use several different techniques to determine\n * the type of object being tested.\n *\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\n\nfunction getType (obj) {\n var str = Object.prototype.toString.call(obj);\n if (natives[str]) return natives[str];\n if (obj === null) return 'null';\n if (obj === undefined) return 'undefined';\n if (obj === Object(obj)) return 'object';\n return typeof obj;\n}\n\nexports.Library = Library;\n\n/**\n * ### Library\n *\n * Create a repository for custom type detection.\n *\n * ```js\n * var lib = new type.Library;\n * ```\n *\n */\n\nfunction Library () {\n this.tests = {};\n}\n\n/**\n * #### .of (obj)\n *\n * Expose replacement `typeof` detection to the library.\n *\n * ```js\n * if ('string' === lib.of('hello world')) {\n * // ...\n * }\n * ```\n *\n * @param {Mixed} object to test\n * @return {String} type\n */\n\nLibrary.prototype.of = getType;\n\n/**\n * #### .define (type, test)\n *\n * Add a test to for the `.test()` assertion.\n *\n * Can be defined as a regular expression:\n *\n * ```js\n * lib.define('int', /^[0-9]+$/);\n * ```\n *\n * ... or as a function:\n *\n * ```js\n * lib.define('bln', function (obj) {\n * if ('boolean' === lib.of(obj)) return true;\n * var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];\n * if ('string' === lib.of(obj)) obj = obj.toLowerCase();\n * return !! ~blns.indexOf(obj);\n * });\n * ```\n *\n * @param {String} type\n * @param {RegExp|Function} test\n * @api public\n */\n\nLibrary.prototype.define = function (type, test) {\n if (arguments.length === 1) return this.tests[type];\n this.tests[type] = test;\n return this;\n};\n\n/**\n * #### .test (obj, test)\n *\n * Assert that an object is of type. Will first\n * check natives, and if that does not pass it will\n * use the user defined custom tests.\n *\n * ```js\n * assert(lib.test('1', 'int'));\n * assert(lib.test('yes', 'bln'));\n * ```\n *\n * @param {Mixed} object\n * @param {String} type\n * @return {Boolean} result\n * @api public\n */\n\nLibrary.prototype.test = function (obj, type) {\n if (type === getType(obj)) return true;\n var test = this.tests[type];\n\n if (test && 'regexp' === getType(test)) {\n return test.test(obj);\n } else if (test && 'function' === getType(test)) {\n return test(obj);\n } else {\n throw new ReferenceError('Type test \"' + type + '\" not defined or invalid.');\n }\n};\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.5.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && typeof obj === 'object' && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nexports.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nexports.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nexports.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nexports.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {}\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support (#5572)\n // since Safari 10.1 shipped with fetch, we can use that to detect it\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage && localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs;\nvar dbContexts;\nvar toString = Object.prototype.toString;\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, 'readwrite');\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve) {\n deferredOperation.resolve = resolve;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n resolve(openreq.result);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + ' can\\'t be downgraded from version ' + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Initialize a singleton container for all running localForages.\n if (!dbContexts) {\n dbContexts = {};\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n var transaction = dbInfo.db.transaction(dbInfo.storeName, 'readwrite');\n var store = transaction.objectStore(dbInfo.storeName);\n var req = store.put(value, key);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var transaction = dbInfo.db.transaction(dbInfo.storeName, 'readwrite');\n var store = transaction.objectStore(dbInfo.storeName);\n\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var transaction = dbInfo.db.transaction(dbInfo.storeName, 'readwrite');\n var store = transaction.objectStore(dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n\n var advanced = false;\n var req = store.openCursor();\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n\n var req = store.openCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys\n};\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' (id INTEGER PRIMARY KEY, key unique, value)', [], function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n t.executeSql('SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n t.executeSql('INSERT OR REPLACE INTO ' + dbInfo.storeName + ' (key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n t.executeSql('SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n\n resolve(result);\n }, function (t, error) {\n\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1\n};\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = dbInfo.name + '/';\n\n if (dbInfo.storeName !== self._defaultConfig.storeName) {\n dbInfo.keyPrefix += dbInfo.storeName + '/';\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n if (localStorage.key(i).indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(localStorage.key(i).substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n // Default API, from Gaia/localStorage.\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2\n};\n\n// Custom drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar CustomDrivers = {};\n\nvar DriverType = {\n INDEXEDDB: 'asyncStorage',\n LOCALSTORAGE: 'localStorageWrapper',\n WEBSQL: 'webSQLStorage'\n};\n\nvar DefaultDriverOrder = [DriverType.INDEXEDDB, DriverType.WEBSQL, DriverType.LOCALSTORAGE];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'];\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nvar driverSupport = {};\n// Check to see if IndexedDB is available and if it is the latest\n// implementation; it's our preferred backend library. We use \"_spec_test\"\n// as the name of the database because it's not the one we'll operate on,\n// but it's useful to make sure its using the right spec.\n// See: https://github.com/mozilla/localForage/issues/128\ndriverSupport[DriverType.INDEXEDDB] = isIndexedDBValid();\n\ndriverSupport[DriverType.WEBSQL] = isWebSQLValid();\n\ndriverSupport[DriverType.LOCALSTORAGE] = isLocalStorageValid();\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var key in arg) {\n if (arg.hasOwnProperty(key)) {\n if (isArray(arg[key])) {\n arguments[0][key] = arg[key].slice();\n } else {\n arguments[0][key] = arg[key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nfunction isLibraryDriver(driverName) {\n for (var driver in DriverType) {\n if (DriverType.hasOwnProperty(driver) && DriverType[driver] === driverName) {\n return true;\n }\n }\n\n return false;\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n this.INDEXEDDB = DriverType.INDEXEDDB;\n this.LOCALSTORAGE = DriverType.LOCALSTORAGE;\n this.WEBSQL = DriverType.WEBSQL;\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n var namingError = new Error('Custom driver name already in use: ' + driverObject._driver);\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n if (isLibraryDriver(driverObject._driver)) {\n reject(namingError);\n return;\n }\n\n var customDriverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0; i < customDriverMethods.length; i++) {\n var customDriverMethod = customDriverMethods[i];\n if (!customDriverMethod || !driverObject[customDriverMethod] || typeof driverObject[customDriverMethod] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var supportPromise = Promise$1.resolve(true);\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n supportPromise = driverObject._support();\n } else {\n supportPromise = Promise$1.resolve(!!driverObject._support);\n }\n }\n\n supportPromise.then(function (supportResult) {\n driverSupport[driverName] = supportResult;\n CustomDrivers[driverName] = driverObject;\n resolve();\n }, reject);\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var self = this;\n var getDriverPromise = Promise$1.resolve().then(function () {\n if (isLibraryDriver(driverName)) {\n switch (driverName) {\n case self.INDEXEDDB:\n return asyncStorage;\n case self.LOCALSTORAGE:\n return localStorageWrapper;\n case self.WEBSQL:\n return webSQLStorage;\n }\n } else if (CustomDrivers[driverName]) {\n return CustomDrivers[driverName];\n } else {\n throw new Error('Driver not found.');\n }\n });\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!driverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0; i < LibraryMethods.length; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});","/*!\n * type-detect\n * Copyright(c) 2013 jake luer \n * MIT Licensed\n */\n\n/*!\n * Primary Exports\n */\n\nvar exports = module.exports = getType;\n\n/**\n * ### typeOf (obj)\n *\n * Use several different techniques to determine\n * the type of object being tested.\n *\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nvar objectTypeRegexp = /^\\[object (.*)\\]$/;\n\nfunction getType(obj) {\n var type = Object.prototype.toString.call(obj).match(objectTypeRegexp)[1].toLowerCase();\n // Let \"new String('')\" return 'object'\n if (typeof Promise === 'function' && obj instanceof Promise) return 'promise';\n // PhantomJS has type \"DOMWindow\" for null\n if (obj === null) return 'null';\n // PhantomJS has type \"DOMWindow\" for undefined\n if (obj === undefined) return 'undefined';\n return type;\n}\n\nexports.Library = Library;\n\n/**\n * ### Library\n *\n * Create a repository for custom type detection.\n *\n * ```js\n * var lib = new type.Library;\n * ```\n *\n */\n\nfunction Library() {\n if (!(this instanceof Library)) return new Library();\n this.tests = {};\n}\n\n/**\n * #### .of (obj)\n *\n * Expose replacement `typeof` detection to the library.\n *\n * ```js\n * if ('string' === lib.of('hello world')) {\n * // ...\n * }\n * ```\n *\n * @param {Mixed} object to test\n * @return {String} type\n */\n\nLibrary.prototype.of = getType;\n\n/**\n * #### .define (type, test)\n *\n * Add a test to for the `.test()` assertion.\n *\n * Can be defined as a regular expression:\n *\n * ```js\n * lib.define('int', /^[0-9]+$/);\n * ```\n *\n * ... or as a function:\n *\n * ```js\n * lib.define('bln', function (obj) {\n * if ('boolean' === lib.of(obj)) return true;\n * var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];\n * if ('string' === lib.of(obj)) obj = obj.toLowerCase();\n * return !! ~blns.indexOf(obj);\n * });\n * ```\n *\n * @param {String} type\n * @param {RegExp|Function} test\n * @api public\n */\n\nLibrary.prototype.define = function(type, test) {\n if (arguments.length === 1) return this.tests[type];\n this.tests[type] = test;\n return this;\n};\n\n/**\n * #### .test (obj, test)\n *\n * Assert that an object is of type. Will first\n * check natives, and if that does not pass it will\n * use the user defined custom tests.\n *\n * ```js\n * assert(lib.test('1', 'int'));\n * assert(lib.test('yes', 'bln'));\n * ```\n *\n * @param {Mixed} object\n * @param {String} type\n * @return {Boolean} result\n * @api public\n */\n\nLibrary.prototype.test = function(obj, type) {\n if (type === getType(obj)) return true;\n var test = this.tests[type];\n\n if (test && 'regexp' === getType(test)) {\n return test.test(obj);\n } else if (test && 'function' === getType(test)) {\n return test(obj);\n } else {\n throw new ReferenceError('Type test \"' + type + '\" not defined or invalid.');\n }\n};\n","(function (document, window) {\n // DEPENDENCIES\n // ============================================================\n const localforage = require('localforage');\n\n // PROBLEMS\n // ============================================================\n const problems = require('../problems/arrays.js');\n\n // CONFIG\n // ============================================================\n\n // Hoist current problem\n let currentProblem;\n\n // Keys to ignore while user is navigating around the textarea but not changing any code\n const ignoreKeyCodes = [\n 9, // Tab\n 37, // Left arrow\n 39, // Right arrow\n 38, // Up arrow\n 40 // Down arrow\n ];\n\n let config = {\n shuffle: true,\n timer: false,\n currentIndex: 0\n };\n\n // Pull config from localforage\n localforage\n .getItem('js_practice_config')\n .then(val => {\n // console.log('localforage val:', val);\n if (val) {\n config = val;\n }\n loadApp(config);\n })\n .catch(err => {\n console.log('localforage err:', err);\n loadApp(config);\n });\n\n function updateLocalstore(config) {\n return localforage\n .setItem('js_practice_config', config)\n .then(val => {\n // console.log('Settings updated:', val);\n })\n .catch(err => {\n console.log('Settings update error:', err);\n });\n }\n\n // HELPERS\n // ============================================================\n\n function debounce(func, wait, immediate) {\n let timeout;\n return function () {\n const context = this;\n const args = arguments;\n const later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n // UI\n // ============================================================\n\n // elements\n const problemEl = document.getElementById('problem');\n const codeEl = document.getElementById('code');\n const testSuiteEl = document.getElementById('test-suite');\n const testTotalEl = document.getElementById('test-total');\n const evalConsoleEl = document.getElementById('eval-output');\n const assertConsoleEl = document.getElementById('assert-output');\n const shuffleProblemsButtonEl = document.getElementById('shuffle-problems');\n const previousProblemButtonEl = document.getElementById('prev-problem');\n const nextProblemButtonEl = document.getElementById('next-problem');\n\n // Get indexes\n function getRandomIndex(problemsArr) {\n const ind = Math.floor(Math.random() * problemsArr.length);\n config.currentIndex = ind;\n updateLocalstore(config);\n return ind;\n }\n\n function getPreviousIndex(problemsArr) {\n let probInd;\n const currentIndex = config.currentIndex;\n // If at beginning, go to end\n if (currentIndex === 0) {\n probInd = problemsArr.length - 1;\n } else {\n probInd = currentIndex - 1;\n }\n return probInd;\n }\n\n function getNextIndex(problemsArr) {\n let probInd;\n const currentIndex = config.currentIndex;\n // If at end or invalid, restart series\n if (currentIndex >= problemsArr.length - 1 || currentIndex < 0) {\n probInd = 0;\n } else {\n probInd = currentIndex + 1;\n }\n return probInd;\n }\n\n // Get problems\n function getCurrentProblem(problemsArr) {\n return problemsArr[config.currentIndex];\n }\n\n function previousProblem() {\n console.log('previousProblem!');\n // Activate back button, for visual queue of nav feedback\n previousProblemButtonEl.classList.add('active');\n config.currentIndex = config.shuffle\n ? getRandomIndex(problems)\n : getPreviousIndex(problems);\n updateLocalstore(config).then(() => {\n window.location.reload();\n });\n }\n\n function nextProblem() {\n console.log('nextProblem!');\n // Activate next button, for visual queue of nav feedback\n nextProblemButtonEl.classList.add('active');\n config.currentIndex = config.shuffle\n ? getRandomIndex(problems)\n : getNextIndex(problems);\n updateLocalstore(config).then(() => {\n window.location.reload();\n });\n }\n\n function toggleShuffle() {\n console.log('toggle shuffle!');\n config.shuffle = !config.shuffle; // Flip it\n shuffleProblemsButtonEl.classList.toggle('active');\n previousProblemButtonEl.parentNode.classList.toggle('hidden');\n updateLocalstore(config);\n }\n\n function loadProblem(problemObj) {\n currentProblem = problemObj;\n // Prob question\n problemEl.innerText = problemObj.prompt;\n // Prob given code\n if (problemObj.given) {\n codeEl.value = problemObj.given;\n }\n // Seed the tests, pass (init = true) as second param\n testSuite(null, true);\n }\n\n // TODO: Build the assert errors into the test dom on each update.\n function updateTests(testStatus, init) {\n if (init === true) {\n buildTests(currentProblem.tests);\n }\n updateTestStatus(testStatus);\n }\n\n function buildTests(tests) {\n if (tests) {\n const testsDom = tests\n .map(test => {\n return `
\n
[✘]
\n
${test.name}
\n
`;\n })\n .join('');\n testSuiteEl.innerHTML = testsDom;\n }\n }\n\n function updateTestStatus(testStatuses) {\n if (!testStatuses) {\n throw new Error('No testStatuses provided.');\n }\n // Find out if all tests have passed or not\n let allPassed = true;\n testStatuses.forEach(testPassed => {\n if (testPassed !== true) {\n allPassed = false;\n }\n });\n const testEls = [].slice.call(testSuiteEl.querySelectorAll('.test-state'));\n testEls.forEach((testStatusEl, iter) => {\n if (testStatuses[iter] === true) {\n testStatusEl.innerHTML = '[✓]';\n testStatusEl.classList.remove('fail');\n testStatusEl.classList.add('pass');\n } else {\n testStatusEl.innerHTML = '[✘]';\n testStatusEl.classList.remove('pass');\n testStatusEl.classList.add('fail');\n }\n });\n\n if (allPassed === true) {\n testTotalEl.innerText = 'PASS';\n testTotalEl.classList.remove('fail');\n testTotalEl.classList.add('pass');\n } else {\n testTotalEl.innerText = 'FAIL';\n testTotalEl.classList.remove('pass');\n testTotalEl.classList.add('fail');\n }\n }\n\n function printAssertError(errObj) {\n // Make element string\n let inner = '';\n if (errObj !== null) {\n inner = `\n
\n Expected: ${JSON.stringify(errObj.expected)}\n Actual: ${JSON.stringify(errObj.actual)}\n
`;\n }\n\n // Prepend element\n assertConsoleEl.innerHTML = inner;\n }\n\n function printEvalOutput(errObj, output) {\n // Make element string\n let inner = '';\n if (errObj && errObj.message !== undefined) {\n inner = `\n
\n Syntax Error: ${JSON.stringify(errObj.message)}\n
`;\n } else if (output) {\n inner = `\n
\n Output: ${JSON.stringify(output)}\n
`;\n }\n // Prepend element\n evalConsoleEl.innerHTML = inner;\n }\n\n // VERIFICATION LOGIC\n // ============================================================\n\n function testSuite(init) {\n // Show 'working' indicator\n testTotalEl.classList.toggle('working');\n // Run stuff\n const output = getOutput(codeEl.value);\n // Run tests on code, return object/array of test results\n const tested = runTests(output);\n // Hide 'working' indicator\n testTotalEl.classList.toggle('working');\n // Update UI with results\n updateTests(tested, init);\n }\n\n function getOutput(code) {\n let evald = false;\n try {\n evald = eval(`(function(){${code}})()`); // eslint-disable-line no-eval\n printEvalOutput(null, evald); // Print current output\n } catch (err) {\n printEvalOutput(err);\n }\n return evald;\n }\n\n function runTests(output) {\n let tested = false;\n tested = currentProblem.tests.map(test => {\n let testOutcome = false;\n try {\n if (output) {\n testOutcome = test.test(output);\n }\n printAssertError(null);\n } catch (err) {\n printAssertError(err);\n }\n return testOutcome;\n });\n return tested;\n }\n\n // Wrapped to prevent race with local config retrieval\n function loadApp(config) {\n console.log('loading app!');\n\n // Show current toggle state\n if (config.shuffle === true) {\n shuffleProblemsButtonEl.classList.add('active');\n previousProblemButtonEl.parentNode.classList.add('hidden');\n }\n\n // Keybinding stuff\n // ============================================================\n\n // Debounced code validation\n const debouncedInputValidation = debounce(e => {\n // If not arrow keys or other non-character keys\n if (ignoreKeyCodes.indexOf(e.keyCode) === -1) {\n // Run test suite\n testSuite();\n }\n }, 200);\n\n function problemNav(e) {\n // Go to previous problem keybinding\n // If CMD/CTRL + SHIFT + RETURN/ENTER\n if (config.shuffle === false && e.keyCode === 13 && e.shiftKey && (e.metaKey || e.ctrlKey)) {\n // Go to next problem\n previousProblem();\n } else if (e.keyCode === 13 && !e.shiftKey && (e.metaKey || e.ctrlKey)) {\n // Go to next problem keybinding\n // If CMD/CTRL + RETURN/ENTER\n // Go to next problem\n nextProblem();\n }\n }\n\n // Event Bindings\n // ============================================================\n\n // Bind it up\n codeEl.addEventListener('keydown', debouncedInputValidation);\n document.addEventListener('keydown', problemNav);\n shuffleProblemsButtonEl.addEventListener('click', toggleShuffle);\n previousProblemButtonEl.addEventListener('click', previousProblem);\n nextProblemButtonEl.addEventListener('click', nextProblem);\n\n // Start it up!\n // Load current problem\n const currProb = getCurrentProblem(problems);\n loadProblem(currProb);\n // Initalized test suite with starting failures\n testSuite(true);\n }\n})(document, window);\n","const assert = require('chai').assert;\n\nmodule.exports = [\n {\n name: 'Create Array',\n time: 10,\n prompt: 'Create and return an array that contains \\'apple\\' and \\'banana\\'',\n given: `const fruits = [];\\rreturn fruits;`,\n answer: `const fruits = ['apple', 'banana'];\n return fruits;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, ['apple', 'banana']) === undefined;\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 2 items',\n test(output) {\n return assert.lengthOf(output, 2) === undefined;\n }\n }\n ]\n },\n {\n name: 'Access Array by index (first)',\n time: 10,\n prompt: 'Return the first value of the Array',\n given: `const fruits = ['apple', 'banana'];\\r`,\n answer: `const fruits = ['apple', 'banana'];\n return fruits[0];`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, 'apple') === undefined;\n }\n },\n {\n name: 'Returns a String',\n test(output) {\n return assert.isString(output) === undefined;\n }\n }\n ]\n },\n {\n name: 'Access Array by index (last)',\n time: 10,\n prompt: 'Return the last value of the Array',\n given: `const fruits = ['apple', 'banana', 'orange'];\\r`,\n answer: `const fruits = ['apple', 'banana', 'orange'];\n return fruits[fruits.length - 1];`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, 'orange') === undefined;\n }\n },\n {\n name: 'Returns a String',\n test(output) {\n return assert.isString(output) === undefined;\n }\n }\n ]\n },\n {\n name: 'Access Array by index (second)',\n time: 10,\n prompt: 'Return the second value of the Array',\n given: `const fruits = ['apple', 'banana'];\\r`,\n answer: `const fruits = ['apple', 'banana'];\n return fruits[1];`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, 'banana') === undefined;\n }\n },\n {\n name: 'Returns a String',\n test(output) {\n return assert.isString(output) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.forEach()',\n time: 20,\n prompt: 'Loop over the array, add an \\'x\\' to the end of each name, push each fruit into a new array, then return the new array.',\n given: `const fruits = ['apple', 'banana'];\\r`,\n answer: `const fruits = ['apple', 'banana'];\n const newFruits = [];\n fruits.forEach(function(item) {\n newFruits.push(item+'x');\n });\n return newFruits;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, ['applex', 'bananax']) === undefined;\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 2 items',\n test(output) {\n return assert.lengthOf(output, 2) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.push()',\n time: 10,\n prompt: `Add 'orange' to the end of the 'fruits' array and return 'fruits'.`,\n given: `const fruits = ['apple', 'banana'];\\r`,\n answer: `const fruits = ['apple', 'banana'];\n fruits.push('orange');\n return fruits;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return (assert.deepEqual(output, ['apple', 'banana', 'orange']) === undefined);\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 3 items',\n test(output) {\n return assert.lengthOf(output, 3) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.pop()',\n time: 10,\n prompt: `Remove 'orange' from the end of the 'fruits' array and return 'fruits'.`,\n given: `const fruits = ['apple', 'banana', 'orange'];\\r`,\n answer: `const fruits = ['apple', 'banana', 'orange'];\n fruits.pop();\n return fruits;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, ['apple', 'banana']) === undefined;\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 2 items',\n test(output) {\n return assert.lengthOf(output, 2) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.shift()',\n time: 10,\n prompt: `Remove 'apple' from the front of the 'fruits' array and return 'fruits'.`,\n given: `const fruits = ['apple', 'banana', 'orange'];\\r`,\n answer: `const fruits = ['apple', 'banana', 'orange'];\n fruits.shift();\n return fruits;`,\n tests: [\n {\n name: 'Output must be correct',\n test(output) {\n return assert.deepEqual(output, ['banana', 'orange']) === undefined;\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 2 items',\n test(output) {\n return assert.lengthOf(output, 2) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.unshift()',\n time: 10,\n prompt: `Add 'strawberry' to the front of the 'fruits' array and return 'fruits'.`,\n given: `const fruits = ['apple', 'banana', 'orange'];\\r`,\n answer: `const fruits = ['apple', 'banana', 'orange'];\n fruits.unshift('strawberry');\n return fruits;`,\n tests: [\n {\n name: 'Output must be correct',\n test(output) {\n return (\n assert.deepEqual(output, [\n 'strawberry',\n 'apple',\n 'banana',\n 'orange'\n ]) === undefined\n );\n }\n },\n {\n name: 'Must return an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 4 items',\n test(output) {\n return assert.lengthOf(output, 4) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.indexOf()',\n time: 10,\n prompt: `Return the index of 'banana' in the Array.`,\n given: `const fruits = ['strawberry', 'banana', 'mango'];\\r`,\n answer: `const fruits = ['strawberry', 'banana', 'mango'];\n const ind = fruits.indexOf('banana');\n return ind;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, 1) === undefined;\n }\n },\n {\n name: 'Returns a Number',\n test(output) {\n return assert.isNumber(output) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.concat()',\n time: 10,\n prompt: `Merge the two arrays using Array's 'concat()' method. Return the resulting array.`,\n given: `const fruits = ['strawberry', 'banana'];\\rconst otherFruits = ['pear','peach'];\\r`,\n answer: `const fruits = ['strawberry', 'banana'];\n const otherFruits = ['pear','peach'];\n const allTheFruits = fruits.concat(otherFruits);\n return allTheFruits;\\r`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return (\n assert.deepEqual(output, [\n 'strawberry',\n 'banana',\n 'pear',\n 'peach'\n ]) === undefined\n );\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 4 items',\n test(output) {\n return assert.lengthOf(output, 4) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.join()',\n time: 10,\n prompt: `Mix the two flavors with a '-' using Array's 'join' method. Return the resulting hybrid flavor.`,\n given: `const fruits = ['strawberry', 'banana'];\\r`,\n answer: `const fruits = ['strawberry', 'banana'];\n const hybrid = fruits.join('-');\n return hybrid;\\r`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, 'strawberry-banana') === undefined;\n }\n },\n {\n name: 'Returns a String',\n test(output) {\n return assert.isString(output) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.slice()',\n time: 20,\n prompt: `Return just the citrus fruits from the 'fruits' array using 'Array.slice()'`,\n given: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\\r`,\n answer: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\n const citrus = fruits.slice(1, 3);\n return citrus;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, ['orange', 'lemon']) === undefined;\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 2 items',\n test(output) {\n return assert.lengthOf(output, 2) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.reverse()',\n time: 10,\n prompt: `Reverse the order of the 'fruit' array using 'Array.reverse()'`,\n given: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\\r`,\n answer: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\n const stiurf = fruits.reverse();\n return stiurf;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return (\n assert.deepEqual(output, [\n 'banana',\n 'lemon',\n 'orange',\n 'strawberry'\n ]) === undefined\n );\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 4 items',\n test(output) {\n return assert.lengthOf(output, 4) === undefined;\n }\n },\n {\n name: `First item is 'banana'`,\n test(output) {\n return assert.deepEqual(output[0], 'banana') === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.sort()',\n time: 10,\n prompt: `Sort the order of the 'fruit' array using 'Array.sort()'`,\n given: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\\r`,\n answer: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\n const orderlyFruit = fruits.sort();\n return orderlyFruit;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return (\n assert.deepEqual(output, [\n 'banana',\n 'lemon',\n 'orange',\n 'strawberry'\n ]) === undefined\n );\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 4 items',\n test(output) {\n return assert.lengthOf(output, 4) === undefined;\n }\n },\n {\n name: `First item is 'banana'`,\n test(output) {\n return assert.deepEqual(output[0], 'banana') === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.lastIndexOf()',\n time: 10,\n prompt: `Return the index of the last 'peach' instance in the 'fruit' array using 'Array.lastIndexOf()'`,\n given: `const fruits = ['peach', 'orange', 'lemon', 'peach'];\\r`,\n answer: `const fruits = ['peach', 'orange', 'lemon', 'peach'];\n const wheresTheLastPeach = fruits.lastIndexOf('peach');\n return wheresTheLastPeach;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, 3) === undefined;\n }\n },\n {\n name: 'Returns a Number',\n test(output) {\n return assert.isNumber(output) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.filter()',\n time: 10,\n prompt: `Return an array of the numbers greater than 5 in 'numbers' using 'Array.filter()'`,\n given: `const numbers = [1, 1, 2, 3, 5, 8, 13, 21];\\r`,\n answer: `const numbers = [1, 1, 2, 3, 5, 8, 13, 21];\n const overFive = numbers.filter(num => num > 5);\n return overFive;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, [8, 13, 21]) === undefined;\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 3 items',\n test(output) {\n return assert.lengthOf(output, 3) === undefined;\n }\n },\n {\n name: `First item is 8`,\n test(output) {\n return assert.deepEqual(output[0], 8) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.map()',\n time: 10,\n prompt: `Return an array of 'numbers' array's square roots, using 'Array.map()' and 'Math.sqrt()'`,\n given: `const numbers = [25, 121, 169];\\r`,\n answer: `const numbers = [25, 121, 169];\n const roots = numbers.map(num => Math.sqrt(num));\n return roots;`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, [5, 11, 13]) === undefined;\n }\n },\n {\n name: 'Returns an Array',\n test(output) {\n return assert.isArray(output) === undefined;\n }\n },\n {\n name: 'Array has 3 items',\n test(output) {\n return assert.lengthOf(output, 3) === undefined;\n }\n },\n {\n name: `First item is 5`,\n test(output) {\n return assert.deepEqual(output[0], 5) === undefined;\n }\n },\n {\n name: `Last item is 13`,\n test(output) {\n return assert.deepEqual(output[output.length - 1], 13) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.every()',\n time: 10,\n prompt: `Return object that returns whether each array contains all even numbers using Array.every().`,\n given: `\nconst evenNumbers = [2, 4, 6, 8];\nconst someOddNumbers = [2, 5, 6, 8];\nfunction isEven(element) {\n\n}\nreturn {\n evenNumbers: evenNumbers.,\n someOddNumbers: someOddNumbers.\n};`,\n answer: `\nconst evenNumbers = [2, 4, 6, 8];\nconst someOddNumbers = [2, 5, 6, 8];\nfunction isEven(element) {\n return element % 2 === 0\n}\nreturn {\n evenNumbers: evenNumbers.every(isEven),\n someOddNumbers: someOddNumbers.every(isEven)\n};`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, {\n evenNumbers: true,\n someOddNumbers: false\n }) === undefined;\n }\n },\n {\n name: 'Returns an Object',\n test(output) {\n return assert.isObject(output) === undefined;\n }\n },\n {\n name: 'Object has 2 items',\n test(output) {\n return assert.lengthOf(Object.keys(output), 2) === undefined;\n }\n },\n {\n name: `First value is true`,\n test(output) {\n return assert.isTrue(output.evenNumbers) === undefined;\n }\n },\n {\n name: `Second value is false`,\n test(output) {\n return assert.isFalse(output.someOddNumbers) === undefined;\n }\n }\n ]\n },\n {\n name: 'Array.some()',\n time: 10,\n prompt: `Return object that returns whether each array contains some odd numbers using Array.some().`,\n given: `\nconst evenNumbers = [2, 4, 6, 8];\nconst someOddNumbers = [2, 4, 7, 8];\nfunction isOdd(element) {\n\n}\nreturn {\n evenNumbers: evenNumbers.,\n someOddNumbers: someOddNumbers.\n};`,\n answer: `\nconst evenNumbers = [1, 3, 5, 7];\nconst someOddNumbers = [1, 3, 6, 7];\nfunction isOdd(element) {\n return element % 2 !== 0;\n}\nreturn {\n evenNumbers: evenNumbers.some(isOdd),\n someOddNumbers: someOddNumbers.some(isOdd)\n};`,\n tests: [\n {\n name: 'Correct output',\n test(output) {\n return assert.deepEqual(output, {\n evenNumbers: false,\n someOddNumbers: true\n }) === undefined;\n }\n },\n {\n name: 'Returns an Object',\n test(output) {\n return assert.isObject(output) === undefined;\n }\n },\n {\n name: 'Object has 2 items',\n test(output) {\n return assert.lengthOf(Object.keys(output), 2) === undefined;\n }\n },\n {\n name: `First value is false`,\n test(output) {\n return assert.isFalse(output.evenNumbers) === undefined;\n }\n },\n {\n name: `Second value is true`,\n test(output) {\n return assert.isTrue(output.someOddNumbers) === undefined;\n }\n }\n ]\n }\n // Next problems to create:\n // forEach? fix one above that tried, but can't verify forEach was used\n // some\n // reduce\n // reduceRight\n // Array.from and other ways to turn array-like into array\n];\n"]} \ No newline at end of file +{"version":3,"sources":["node_modules/.registry.npmjs.org/browser-pack/6.0.2/node_modules/browser-pack/_prelude.js","node_modules/.registry.npmjs.org/assertion-error/1.0.2/node_modules/assertion-error/index.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/index.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/assertion.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/config.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/core/assertions.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/interface/assert.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/interface/expect.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/interface/should.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/addChainableMethod.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/addMethod.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/addProperty.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/expectTypes.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/flag.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/getActual.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/getEnumerableProperties.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/getMessage.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/getName.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/getPathInfo.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/getPathValue.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/getProperties.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/hasProperty.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/index.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/inspect.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/objDisplay.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/overwriteChainableMethod.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/overwriteMethod.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/overwriteProperty.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/test.js","node_modules/.registry.npmjs.org/chai/3.5.0/node_modules/chai/lib/chai/utils/transferFlags.js","node_modules/.registry.npmjs.org/dedent/0.7.0/node_modules/dedent/dist/dedent.js","node_modules/.registry.npmjs.org/deep-eql/0.1.3/node_modules/deep-eql/index.js","node_modules/.registry.npmjs.org/deep-eql/0.1.3/node_modules/deep-eql/lib/eql.js","node_modules/.registry.npmjs.org/localforage/1.5.0/node_modules/localforage/dist/node_modules/localforage/dist/localforage.js","node_modules/.registry.npmjs.org/pjs-problems/1.0.3/node_modules/pjs-problems/index.js","node_modules/.registry.npmjs.org/pjs-problems/1.0.3/node_modules/pjs-problems/problems/arrays.js","node_modules/.registry.npmjs.org/pjs-problems/1.0.3/node_modules/pjs-problems/problems/initial.js","node_modules/.registry.npmjs.org/type-detect/0.1.1/node_modules/type-detect/index.js","node_modules/.registry.npmjs.org/type-detect/0.1.1/node_modules/type-detect/lib/type.js","node_modules/.registry.npmjs.org/type-detect/1.0.0/node_modules/type-detect/lib/type.js","src/js/index.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","exclude","excludeProps","res","obj","Object","keys","forEach","key","excludes","indexOf","slice","arguments","args","AssertionError","message","_props","ssf","props","this","showDiff","callee","captureStackTrace","stack","prototype","create","name","constructor","toJSON","used","version","util","use","fn","push","config","assertion","core","expect","should","assert","_chai","Assertion","msg","flag","defineProperty","get","console","warn","includeStack","set","value","addProperty","addMethod","addChainableMethod","chainingBehavior","overwriteProperty","overwriteMethod","overwriteChainableMethod","expr","negateMsg","expected","_actual","ok","test","getMessage","actual","getActual","val","truncateThreshold","chai","_","an","type","toLowerCase","article","charAt","includeChainingBehavior","include","expectTypes","eql","k","property","subset","undefined","inspect","checkArguments","toString","assertEqual","_obj","assertEql","assertAbove","to","have","len","assertLeast","assertBelow","assertMost","assertInstanceOf","getName","assertOwnProperty","hasOwnProperty","assertOwnPropertyDescriptor","descriptor","actualDescriptor","getOwnPropertyDescriptor","assertLengthChain","assertLength","assertMatch","re","exec","assertKeys","str","mixedArgsMsg","Array","any","all","filter","every","last","map","pop","join","sort","assertThrows","errMsg","is","thrown","desiredError","thrownError","RegExp","err","actuallyGot","expectedThrown","respondTo","method","itself","context","satisfy","matcher","result","objDisplay","negate","closeTo","delta","Math","abs","isSubsetOf","superset","cmp","elem","some","elem2","oneOf","list","be","assertChanges","object","prop","initial","assertIncreases","assertDecreases","chain","isNaN","isArray","start","finish","range","isDeep","pathInfo","getPathInfo","hasProperty","exists","isExtensible","TypeError","isSealed","isFrozen","express","errmsg","fail","operator","isOk","isNotOk","not","equal","act","exp","notEqual","strictEqual","notStrictEqual","deepEqual","notDeepEqual","isAbove","abv","above","isAtLeast","atlst","least","isBelow","blw","below","isAtMost","atmst","most","isTrue","isNotTrue","isFalse","isNotFalse","isNull","isNotNull","NaN","isNotNaN","isUndefined","isDefined","isFunction","isNotFunction","isObject","isNotObject","isNotArray","isString","isNotString","isNumber","isNotNumber","isBoolean","isNotBoolean","typeOf","notTypeOf","instanceOf","notInstanceOf","inc","notInclude","match","notMatch","notProperty","deepProperty","deep","notDeepProperty","propertyVal","propertyNotVal","deepPropertyVal","deepPropertyNotVal","lengthOf","throws","errt","errs","assertErr","throw","doesNotThrow","Throw","val2","approximately","sameMembers","set1","set2","same","members","sameDeepMembers","includeMembers","includeDeepMembers","inList","changes","change","doesNotChange","increases","increase","doesNotIncrease","decreases","decrease","doesNotDecrease","ifError","extensible","isNotExtensible","sealed","isNotSealed","frozen","isNotFrozen","alias","as","loadShould","shouldGetter","String","Number","Boolean","valueOf","shouldSetter","enumerable","configurable","writable","val1","exist","Should","transferFlags","hasProtoSupport","excludeNames","Function","apply","ctx","chainableBehavior","__methods","__proto__","getOwnPropertyNames","asserterName","pd","getter","types","index","art","flags","__flags","flagMsg","replace","func","parsePath","path","mArr","parseFloat","p","_getPathValue","parsed","tmp","part","info","parent","proto","getPrototypeOf","literals","number","string","ot","getPathValue","showHidden","depth","colors","formatValue","seen","stylize","recurseTimes","ret","primitive","formatPrimitive","isDOMElement","outerHTML","document","xmlVersion","XMLSerializer","serializeToString","container","createElementNS","appendChild","cloneNode","html","innerHTML","visibleKeys","getEnumerableProperties","getProperties","isError","nameSuffix","isRegExp","isDate","Date","toUTCString","formatError","base","array","braces","output","formatArray","formatProperty","reduceToSingleString","simple","JSON","stringify","Infinity","__lookupGetter__","__lookupSetter__","split","line","substr","numLinesEst","reduce","prev","cur","ar","objectToString","d","HTMLElement","nodeType","nodeName","splice","_chainingBehavior","_method","_super","_get","includeAll","dedent","strings","raw","lines","mindent","m","indent","min","trim","b","sameValue","dateEqual","regexpEqual","Buffer","isBuffer","bufferEqual","argumentsEqual","typeEqual","objectEqual","getTime","iterableEqual","isValue","ka","kb","ex","define","amd","window","global","self","localforage","_dereq_","nextTick","draining","oldQueue","queue","immediate","task","scheduleDrain","Mutation","MutationObserver","WebKitMutationObserver","called","observer","element","createTextNode","observe","characterData","data","setImmediate","MessageChannel","createElement","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","setTimeout","channel","port1","onmessage","port2","postMessage","2","INTERNAL","Promise","resolver","state","PENDING","outcome","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","returnValue","handlers","reject","resolve","getThen","then","thenable","onError","onSuccess","tryToUnwrap","tryCatch","status","out","reason","iterable","values","resolved","resolveFromAll","outValue","error","race","response","REJECTED","FULFILLED","3","4","_classCallCheck","instance","Constructor","createBlob","parts","properties","Blob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","append","getBlob","executeCallback","callback","executeTwoCallbacks","errorCallback","_binStringToArrayBuffer","bin","buf","ArrayBuffer","arr","Uint8Array","charCodeAt","_checkBlobSupportWithoutCaching","idb","Promise$1","txn","transaction","DETECT_BLOB_SUPPORT_STORE","blob","objectStore","put","onabort","preventDefault","stopPropagation","oncomplete","matchedChrome","navigator","userAgent","matchedEdge","parseInt","_checkBlobSupport","supportsBlobs","_deferReadiness","dbInfo","dbContext","dbContexts","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_getConnection","upgradeNeeded","db","close","dbArgs","openreq","open","onupgradeneeded","createObjectStore","storeName","oldVersion","newVersion","onerror","onsuccess","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","FileReader","onloadend","base64","btoa","target","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","atob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_initStorage","options","ignoreErrors","forages","ready","initPromises","j","forage","_defaultConfig","getItem","req","iterate","iterator","openCursor","iterationNumber","cursor","setItem","blobSupport","removeItem","clear","count","advanced","advance","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","buffer","bytes","BASE_CHARS","bufferToString","base64String","substring","serialize","valueType","toString$1","marker","SERIALIZED_MARKER","TYPE_ARRAYBUFFER","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_UINT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","fileReader","onload","BLOB_TYPE_PREFIX","TYPE_BLOB","readAsArrayBuffer","deserialize","SERIALIZED_MARKER_LENGTH","parse","blobType","TYPE_SERIALIZED_MARKER_LENGTH","BLOB_TYPE_PREFIX_REGEX","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","_initStorage$1","dbInfoPromise","openDatabase","description","size","executeSql","serializer","localforageSerializer","getItem$1","results","rows","item","iterate$1","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","c","key$1","keys$1","_initStorage$2","keyPrefix","clear$2","localStorage","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","length$2","removeItem$2","setItem$2","callWhenReady","localForageInstance","libraryMethod","_args","extend","arg","isLibraryDriver","driverName","driver","DriverType","_typeof","Symbol","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","asyncStorage","_driver","webSQLStorage","localStorageWrapper","CustomDrivers","INDEXEDDB","LOCALSTORAGE","WEBSQL","LibraryMethods","DefaultConfig","driverSupport","isSafari","platform","hasFetch","fetch","IDBKeyRange","localforage_js","LocalForage","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","defineDriver","driverObject","complianceError","namingError","customDriverMethods","concat","customDriverMethod","supportPromise","_support","supportResult","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","supportedDrivers","driverPromiseLoop","currentDriverIndex","_getSupportedDrivers","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","arrays","time","prompt","given","answer","tests","getType","natives","Library","[object Array]","[object RegExp]","[object Function]","[object Arguments]","[object Date]","of","ReferenceError","objectTypeRegexp","dedentStrings","problems","prob","updateLocalstore","catch","log","debounce","wait","timeout","later","callNow","clearTimeout","getRandomIndex","problemsArr","ind","floor","random","currentIndex","getPreviousIndex","getNextIndex","getCurrentProblem","previousProblem","previousProblemButtonEl","classList","add","shuffle","location","reload","nextProblem","nextProblemButtonEl","toggleShuffle","shuffleProblemsButtonEl","toggle","loadProblem","problemObj","currentProblem","problemEl","innerText","codeEl","testSuite","updateTests","testStatus","init","buildTests","updateTestStatus","testsDom","testSuiteEl","testStatuses","allPassed","testPassed","querySelectorAll","testStatusEl","iter","remove","testTotalEl","printAssertError","errObj","inner","assertConsoleEl","printEvalOutput","evalConsoleEl","tested","runTests","getOutput","evald","eval","testOutcome","loadApp","problemNav","keyCode","shiftKey","metaKey","ctrlKey","debouncedInputValidation","ignoreKeyCodes","addEventListener","probs","subject","_problems","_toConsumableArray","timer","getElementById"],"mappings":"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","file":"bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o\n * MIT Licensed\n */\n\n/*!\n * Return a function that will copy properties from\n * one object to another excluding any originally\n * listed. Returned function will create a new `{}`.\n *\n * @param {String} excluded properties ...\n * @return {Function}\n */\n\nfunction exclude () {\n var excludes = [].slice.call(arguments);\n\n function excludeProps (res, obj) {\n Object.keys(obj).forEach(function (key) {\n if (!~excludes.indexOf(key)) res[key] = obj[key];\n });\n }\n\n return function extendExclude () {\n var args = [].slice.call(arguments)\n , i = 0\n , res = {};\n\n for (; i < args.length; i++) {\n excludeProps(res, args[i]);\n }\n\n return res;\n };\n};\n\n/*!\n * Primary Exports\n */\n\nmodule.exports = AssertionError;\n\n/**\n * ### AssertionError\n *\n * An extension of the JavaScript `Error` constructor for\n * assertion and validation scenarios.\n *\n * @param {String} message\n * @param {Object} properties to include (optional)\n * @param {callee} start stack function (optional)\n */\n\nfunction AssertionError (message, _props, ssf) {\n var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')\n , props = extend(_props || {});\n\n // default values\n this.message = message || 'Unspecified AssertionError';\n this.showDiff = false;\n\n // copy from properties\n for (var key in props) {\n this[key] = props[key];\n }\n\n // capture stack trace\n ssf = ssf || arguments.callee;\n if (ssf && Error.captureStackTrace) {\n Error.captureStackTrace(this, ssf);\n } else {\n try {\n throw new Error();\n } catch(e) {\n this.stack = e.stack;\n }\n }\n}\n\n/*!\n * Inherit from Error.prototype\n */\n\nAssertionError.prototype = Object.create(Error.prototype);\n\n/*!\n * Statically set name\n */\n\nAssertionError.prototype.name = 'AssertionError';\n\n/*!\n * Ensure correct constructor\n */\n\nAssertionError.prototype.constructor = AssertionError;\n\n/**\n * Allow errors to be converted to JSON for static transfer.\n *\n * @param {Boolean} include stack (default: `true`)\n * @return {Object} object that can be `JSON.stringify`\n */\n\nAssertionError.prototype.toJSON = function (stack) {\n var extend = exclude('constructor', 'toJSON', 'stack')\n , props = extend({ name: this.name }, this);\n\n // include stack if exists and not turned off\n if (false !== stack && this.stack) {\n props.stack = this.stack;\n }\n\n return props;\n};\n","module.exports = require('./lib/chai');\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nvar used = []\n , exports = module.exports = {};\n\n/*!\n * Chai version\n */\n\nexports.version = '3.5.0';\n\n/*!\n * Assertion Error\n */\n\nexports.AssertionError = require('assertion-error');\n\n/*!\n * Utils for plugins (not exported)\n */\n\nvar util = require('./chai/utils');\n\n/**\n * # .use(function)\n *\n * Provides a way to extend the internals of Chai\n *\n * @param {Function}\n * @returns {this} for chaining\n * @api public\n */\n\nexports.use = function (fn) {\n if (!~used.indexOf(fn)) {\n fn(this, util);\n used.push(fn);\n }\n\n return this;\n};\n\n/*!\n * Utility Functions\n */\n\nexports.util = util;\n\n/*!\n * Configuration\n */\n\nvar config = require('./chai/config');\nexports.config = config;\n\n/*!\n * Primary `Assertion` prototype\n */\n\nvar assertion = require('./chai/assertion');\nexports.use(assertion);\n\n/*!\n * Core Assertions\n */\n\nvar core = require('./chai/core/assertions');\nexports.use(core);\n\n/*!\n * Expect interface\n */\n\nvar expect = require('./chai/interface/expect');\nexports.use(expect);\n\n/*!\n * Should interface\n */\n\nvar should = require('./chai/interface/should');\nexports.use(should);\n\n/*!\n * Assert interface\n */\n\nvar assert = require('./chai/interface/assert');\nexports.use(assert);\n","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nvar config = require('./config');\n\nmodule.exports = function (_chai, util) {\n /*!\n * Module dependencies.\n */\n\n var AssertionError = _chai.AssertionError\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n _chai.Assertion = Assertion;\n\n /*!\n * Assertion Constructor\n *\n * Creates object for chaining.\n *\n * @api private\n */\n\n function Assertion (obj, msg, stack) {\n flag(this, 'ssfi', stack || arguments.callee);\n flag(this, 'object', obj);\n flag(this, 'message', msg);\n }\n\n Object.defineProperty(Assertion, 'includeStack', {\n get: function() {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n return config.includeStack;\n },\n set: function(value) {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n config.includeStack = value;\n }\n });\n\n Object.defineProperty(Assertion, 'showDiff', {\n get: function() {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n return config.showDiff;\n },\n set: function(value) {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n config.showDiff = value;\n }\n });\n\n Assertion.addProperty = function (name, fn) {\n util.addProperty(this.prototype, name, fn);\n };\n\n Assertion.addMethod = function (name, fn) {\n util.addMethod(this.prototype, name, fn);\n };\n\n Assertion.addChainableMethod = function (name, fn, chainingBehavior) {\n util.addChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n Assertion.overwriteProperty = function (name, fn) {\n util.overwriteProperty(this.prototype, name, fn);\n };\n\n Assertion.overwriteMethod = function (name, fn) {\n util.overwriteMethod(this.prototype, name, fn);\n };\n\n Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {\n util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n /**\n * ### .assert(expression, message, negateMessage, expected, actual, showDiff)\n *\n * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.\n *\n * @name assert\n * @param {Philosophical} expression to be tested\n * @param {String|Function} message or function that returns message to display if expression fails\n * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails\n * @param {Mixed} expected value (remember to check for negation)\n * @param {Mixed} actual (optional) will default to `this.obj`\n * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails\n * @api private\n */\n\n Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {\n var ok = util.test(this, arguments);\n if (true !== showDiff) showDiff = false;\n if (true !== config.showDiff) showDiff = false;\n\n if (!ok) {\n var msg = util.getMessage(this, arguments)\n , actual = util.getActual(this, arguments);\n throw new AssertionError(msg, {\n actual: actual\n , expected: expected\n , showDiff: showDiff\n }, (config.includeStack) ? this.assert : flag(this, 'ssfi'));\n }\n };\n\n /*!\n * ### ._obj\n *\n * Quick reference to stored `actual` value for plugin developers.\n *\n * @api private\n */\n\n Object.defineProperty(Assertion.prototype, '_obj',\n { get: function () {\n return flag(this, 'object');\n }\n , set: function (val) {\n flag(this, 'object', val);\n }\n });\n};\n","module.exports = {\n\n /**\n * ### config.includeStack\n *\n * User configurable property, influences whether stack trace\n * is included in Assertion error message. Default of false\n * suppresses stack trace in the error message.\n *\n * chai.config.includeStack = true; // enable stack on error\n *\n * @param {Boolean}\n * @api public\n */\n\n includeStack: false,\n\n /**\n * ### config.showDiff\n *\n * User configurable property, influences whether or not\n * the `showDiff` flag should be included in the thrown\n * AssertionErrors. `false` will always be `false`; `true`\n * will be true when the assertion has requested a diff\n * be shown.\n *\n * @param {Boolean}\n * @api public\n */\n\n showDiff: true,\n\n /**\n * ### config.truncateThreshold\n *\n * User configurable property, sets length threshold for actual and\n * expected values in assertion errors. If this threshold is exceeded, for\n * example for large data structures, the value is replaced with something\n * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.\n *\n * Set it to zero if you want to disable truncating altogether.\n *\n * This is especially userful when doing assertions on arrays: having this\n * set to a reasonable large value makes the failure messages readily\n * inspectable.\n *\n * chai.config.truncateThreshold = 0; // disable truncating\n *\n * @param {Number}\n * @api public\n */\n\n truncateThreshold: 40\n\n};\n","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nmodule.exports = function (chai, _) {\n var Assertion = chai.Assertion\n , toString = Object.prototype.toString\n , flag = _.flag;\n\n /**\n * ### Language Chains\n *\n * The following are provided as chainable getters to\n * improve the readability of your assertions. They\n * do not provide testing capabilities unless they\n * have been overwritten by a plugin.\n *\n * **Chains**\n *\n * - to\n * - be\n * - been\n * - is\n * - that\n * - which\n * - and\n * - has\n * - have\n * - with\n * - at\n * - of\n * - same\n *\n * @name language chains\n * @namespace BDD\n * @api public\n */\n\n [ 'to', 'be', 'been'\n , 'is', 'and', 'has', 'have'\n , 'with', 'that', 'which', 'at'\n , 'of', 'same' ].forEach(function (chain) {\n Assertion.addProperty(chain, function () {\n return this;\n });\n });\n\n /**\n * ### .not\n *\n * Negates any of assertions following in the chain.\n *\n * expect(foo).to.not.equal('bar');\n * expect(goodFn).to.not.throw(Error);\n * expect({ foo: 'baz' }).to.have.property('foo')\n * .and.not.equal('bar');\n *\n * @name not\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('not', function () {\n flag(this, 'negate', true);\n });\n\n /**\n * ### .deep\n *\n * Sets the `deep` flag, later used by the `equal` and\n * `property` assertions.\n *\n * expect(foo).to.deep.equal({ bar: 'baz' });\n * expect({ foo: { bar: { baz: 'quux' } } })\n * .to.have.deep.property('foo.bar.baz', 'quux');\n *\n * `.deep.property` special characters can be escaped\n * by adding two slashes before the `.` or `[]`.\n *\n * var deepCss = { '.link': { '[target]': 42 }};\n * expect(deepCss).to.have.deep.property('\\\\.link.\\\\[target\\\\]', 42);\n *\n * @name deep\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('deep', function () {\n flag(this, 'deep', true);\n });\n\n /**\n * ### .any\n *\n * Sets the `any` flag, (opposite of the `all` flag)\n * later used in the `keys` assertion.\n *\n * expect(foo).to.have.any.keys('bar', 'baz');\n *\n * @name any\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('any', function () {\n flag(this, 'any', true);\n flag(this, 'all', false)\n });\n\n\n /**\n * ### .all\n *\n * Sets the `all` flag (opposite of the `any` flag)\n * later used by the `keys` assertion.\n *\n * expect(foo).to.have.all.keys('bar', 'baz');\n *\n * @name all\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('all', function () {\n flag(this, 'all', true);\n flag(this, 'any', false);\n });\n\n /**\n * ### .a(type)\n *\n * The `a` and `an` assertions are aliases that can be\n * used either as language chains or to assert a value's\n * type.\n *\n * // typeof\n * expect('test').to.be.a('string');\n * expect({ foo: 'bar' }).to.be.an('object');\n * expect(null).to.be.a('null');\n * expect(undefined).to.be.an('undefined');\n * expect(new Error).to.be.an('error');\n * expect(new Promise).to.be.a('promise');\n * expect(new Float32Array()).to.be.a('float32array');\n * expect(Symbol()).to.be.a('symbol');\n *\n * // es6 overrides\n * expect({[Symbol.toStringTag]:()=>'foo'}).to.be.a('foo');\n *\n * // language chain\n * expect(foo).to.be.an.instanceof(Foo);\n *\n * @name a\n * @alias an\n * @param {String} type\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function an (type, msg) {\n if (msg) flag(this, 'message', msg);\n type = type.toLowerCase();\n var obj = flag(this, 'object')\n , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';\n\n this.assert(\n type === _.type(obj)\n , 'expected #{this} to be ' + article + type\n , 'expected #{this} not to be ' + article + type\n );\n }\n\n Assertion.addChainableMethod('an', an);\n Assertion.addChainableMethod('a', an);\n\n /**\n * ### .include(value)\n *\n * The `include` and `contain` assertions can be used as either property\n * based language chains or as methods to assert the inclusion of an object\n * in an array or a substring in a string. When used as language chains,\n * they toggle the `contains` flag for the `keys` assertion.\n *\n * expect([1,2,3]).to.include(2);\n * expect('foobar').to.contain('foo');\n * expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');\n *\n * @name include\n * @alias contain\n * @alias includes\n * @alias contains\n * @param {Object|String|Number} obj\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function includeChainingBehavior () {\n flag(this, 'contains', true);\n }\n\n function include (val, msg) {\n _.expectTypes(this, ['array', 'object', 'string']);\n\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var expected = false;\n\n if (_.type(obj) === 'array' && _.type(val) === 'object') {\n for (var i in obj) {\n if (_.eql(obj[i], val)) {\n expected = true;\n break;\n }\n }\n } else if (_.type(val) === 'object') {\n if (!flag(this, 'negate')) {\n for (var k in val) new Assertion(obj).property(k, val[k]);\n return;\n }\n var subset = {};\n for (var k in val) subset[k] = obj[k];\n expected = _.eql(subset, val);\n } else {\n expected = (obj != undefined) && ~obj.indexOf(val);\n }\n this.assert(\n expected\n , 'expected #{this} to include ' + _.inspect(val)\n , 'expected #{this} to not include ' + _.inspect(val));\n }\n\n Assertion.addChainableMethod('include', include, includeChainingBehavior);\n Assertion.addChainableMethod('contain', include, includeChainingBehavior);\n Assertion.addChainableMethod('contains', include, includeChainingBehavior);\n Assertion.addChainableMethod('includes', include, includeChainingBehavior);\n\n /**\n * ### .ok\n *\n * Asserts that the target is truthy.\n *\n * expect('everything').to.be.ok;\n * expect(1).to.be.ok;\n * expect(false).to.not.be.ok;\n * expect(undefined).to.not.be.ok;\n * expect(null).to.not.be.ok;\n *\n * @name ok\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('ok', function () {\n this.assert(\n flag(this, 'object')\n , 'expected #{this} to be truthy'\n , 'expected #{this} to be falsy');\n });\n\n /**\n * ### .true\n *\n * Asserts that the target is `true`.\n *\n * expect(true).to.be.true;\n * expect(1).to.not.be.true;\n *\n * @name true\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('true', function () {\n this.assert(\n true === flag(this, 'object')\n , 'expected #{this} to be true'\n , 'expected #{this} to be false'\n , this.negate ? false : true\n );\n });\n\n /**\n * ### .false\n *\n * Asserts that the target is `false`.\n *\n * expect(false).to.be.false;\n * expect(0).to.not.be.false;\n *\n * @name false\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('false', function () {\n this.assert(\n false === flag(this, 'object')\n , 'expected #{this} to be false'\n , 'expected #{this} to be true'\n , this.negate ? true : false\n );\n });\n\n /**\n * ### .null\n *\n * Asserts that the target is `null`.\n *\n * expect(null).to.be.null;\n * expect(undefined).to.not.be.null;\n *\n * @name null\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('null', function () {\n this.assert(\n null === flag(this, 'object')\n , 'expected #{this} to be null'\n , 'expected #{this} not to be null'\n );\n });\n\n /**\n * ### .undefined\n *\n * Asserts that the target is `undefined`.\n *\n * expect(undefined).to.be.undefined;\n * expect(null).to.not.be.undefined;\n *\n * @name undefined\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('undefined', function () {\n this.assert(\n undefined === flag(this, 'object')\n , 'expected #{this} to be undefined'\n , 'expected #{this} not to be undefined'\n );\n });\n\n /**\n * ### .NaN\n * Asserts that the target is `NaN`.\n *\n * expect('foo').to.be.NaN;\n * expect(4).not.to.be.NaN;\n *\n * @name NaN\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('NaN', function () {\n this.assert(\n isNaN(flag(this, 'object'))\n , 'expected #{this} to be NaN'\n , 'expected #{this} not to be NaN'\n );\n });\n\n /**\n * ### .exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi'\n * , bar = null\n * , baz;\n *\n * expect(foo).to.exist;\n * expect(bar).to.not.exist;\n * expect(baz).to.not.exist;\n *\n * @name exist\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('exist', function () {\n this.assert(\n null != flag(this, 'object')\n , 'expected #{this} to exist'\n , 'expected #{this} to not exist'\n );\n });\n\n\n /**\n * ### .empty\n *\n * Asserts that the target's length is `0`. For arrays and strings, it checks\n * the `length` property. For objects, it gets the count of\n * enumerable keys.\n *\n * expect([]).to.be.empty;\n * expect('').to.be.empty;\n * expect({}).to.be.empty;\n *\n * @name empty\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('empty', function () {\n var obj = flag(this, 'object')\n , expected = obj;\n\n if (Array.isArray(obj) || 'string' === typeof object) {\n expected = obj.length;\n } else if (typeof obj === 'object') {\n expected = Object.keys(obj).length;\n }\n\n this.assert(\n !expected\n , 'expected #{this} to be empty'\n , 'expected #{this} not to be empty'\n );\n });\n\n /**\n * ### .arguments\n *\n * Asserts that the target is an arguments object.\n *\n * function test () {\n * expect(arguments).to.be.arguments;\n * }\n *\n * @name arguments\n * @alias Arguments\n * @namespace BDD\n * @api public\n */\n\n function checkArguments () {\n var obj = flag(this, 'object')\n , type = Object.prototype.toString.call(obj);\n this.assert(\n '[object Arguments]' === type\n , 'expected #{this} to be arguments but got ' + type\n , 'expected #{this} to not be arguments'\n );\n }\n\n Assertion.addProperty('arguments', checkArguments);\n Assertion.addProperty('Arguments', checkArguments);\n\n /**\n * ### .equal(value)\n *\n * Asserts that the target is strictly equal (`===`) to `value`.\n * Alternately, if the `deep` flag is set, asserts that\n * the target is deeply equal to `value`.\n *\n * expect('hello').to.equal('hello');\n * expect(42).to.equal(42);\n * expect(1).to.not.equal(true);\n * expect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });\n * expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });\n *\n * @name equal\n * @alias equals\n * @alias eq\n * @alias deep.equal\n * @param {Mixed} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEqual (val, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'deep')) {\n return this.eql(val);\n } else {\n this.assert(\n val === obj\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{exp}'\n , val\n , this._obj\n , true\n );\n }\n }\n\n Assertion.addMethod('equal', assertEqual);\n Assertion.addMethod('equals', assertEqual);\n Assertion.addMethod('eq', assertEqual);\n\n /**\n * ### .eql(value)\n *\n * Asserts that the target is deeply equal to `value`.\n *\n * expect({ foo: 'bar' }).to.eql({ foo: 'bar' });\n * expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);\n *\n * @name eql\n * @alias eqls\n * @param {Mixed} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEql(obj, msg) {\n if (msg) flag(this, 'message', msg);\n this.assert(\n _.eql(obj, flag(this, 'object'))\n , 'expected #{this} to deeply equal #{exp}'\n , 'expected #{this} to not deeply equal #{exp}'\n , obj\n , this._obj\n , true\n );\n }\n\n Assertion.addMethod('eql', assertEql);\n Assertion.addMethod('eqls', assertEql);\n\n /**\n * ### .above(value)\n *\n * Asserts that the target is greater than `value`.\n *\n * expect(10).to.be.above(5);\n *\n * Can also be used in conjunction with `length` to\n * assert a minimum length. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.above(2);\n * expect([ 1, 2, 3 ]).to.have.length.above(2);\n *\n * @name above\n * @alias gt\n * @alias greaterThan\n * @param {Number} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertAbove (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len > n\n , 'expected #{this} to have a length above #{exp} but got #{act}'\n , 'expected #{this} to not have a length above #{exp}'\n , n\n , len\n );\n } else {\n this.assert(\n obj > n\n , 'expected #{this} to be above ' + n\n , 'expected #{this} to be at most ' + n\n );\n }\n }\n\n Assertion.addMethod('above', assertAbove);\n Assertion.addMethod('gt', assertAbove);\n Assertion.addMethod('greaterThan', assertAbove);\n\n /**\n * ### .least(value)\n *\n * Asserts that the target is greater than or equal to `value`.\n *\n * expect(10).to.be.at.least(10);\n *\n * Can also be used in conjunction with `length` to\n * assert a minimum length. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.of.at.least(2);\n * expect([ 1, 2, 3 ]).to.have.length.of.at.least(3);\n *\n * @name least\n * @alias gte\n * @param {Number} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLeast (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len >= n\n , 'expected #{this} to have a length at least #{exp} but got #{act}'\n , 'expected #{this} to have a length below #{exp}'\n , n\n , len\n );\n } else {\n this.assert(\n obj >= n\n , 'expected #{this} to be at least ' + n\n , 'expected #{this} to be below ' + n\n );\n }\n }\n\n Assertion.addMethod('least', assertLeast);\n Assertion.addMethod('gte', assertLeast);\n\n /**\n * ### .below(value)\n *\n * Asserts that the target is less than `value`.\n *\n * expect(5).to.be.below(10);\n *\n * Can also be used in conjunction with `length` to\n * assert a maximum length. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.below(4);\n * expect([ 1, 2, 3 ]).to.have.length.below(4);\n *\n * @name below\n * @alias lt\n * @alias lessThan\n * @param {Number} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertBelow (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len < n\n , 'expected #{this} to have a length below #{exp} but got #{act}'\n , 'expected #{this} to not have a length below #{exp}'\n , n\n , len\n );\n } else {\n this.assert(\n obj < n\n , 'expected #{this} to be below ' + n\n , 'expected #{this} to be at least ' + n\n );\n }\n }\n\n Assertion.addMethod('below', assertBelow);\n Assertion.addMethod('lt', assertBelow);\n Assertion.addMethod('lessThan', assertBelow);\n\n /**\n * ### .most(value)\n *\n * Asserts that the target is less than or equal to `value`.\n *\n * expect(5).to.be.at.most(5);\n *\n * Can also be used in conjunction with `length` to\n * assert a maximum length. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.of.at.most(4);\n * expect([ 1, 2, 3 ]).to.have.length.of.at.most(3);\n *\n * @name most\n * @alias lte\n * @param {Number} value\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertMost (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len <= n\n , 'expected #{this} to have a length at most #{exp} but got #{act}'\n , 'expected #{this} to have a length above #{exp}'\n , n\n , len\n );\n } else {\n this.assert(\n obj <= n\n , 'expected #{this} to be at most ' + n\n , 'expected #{this} to be above ' + n\n );\n }\n }\n\n Assertion.addMethod('most', assertMost);\n Assertion.addMethod('lte', assertMost);\n\n /**\n * ### .within(start, finish)\n *\n * Asserts that the target is within a range.\n *\n * expect(7).to.be.within(5,10);\n *\n * Can also be used in conjunction with `length` to\n * assert a length range. The benefit being a\n * more informative error message than if the length\n * was supplied directly.\n *\n * expect('foo').to.have.length.within(2,4);\n * expect([ 1, 2, 3 ]).to.have.length.within(2,4);\n *\n * @name within\n * @param {Number} start lowerbound inclusive\n * @param {Number} finish upperbound inclusive\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('within', function (start, finish, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , range = start + '..' + finish;\n if (flag(this, 'doLength')) {\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n this.assert(\n len >= start && len <= finish\n , 'expected #{this} to have a length within ' + range\n , 'expected #{this} to not have a length within ' + range\n );\n } else {\n this.assert(\n obj >= start && obj <= finish\n , 'expected #{this} to be within ' + range\n , 'expected #{this} to not be within ' + range\n );\n }\n });\n\n /**\n * ### .instanceof(constructor)\n *\n * Asserts that the target is an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , Chai = new Tea('chai');\n *\n * expect(Chai).to.be.an.instanceof(Tea);\n * expect([ 1, 2, 3 ]).to.be.instanceof(Array);\n *\n * @name instanceof\n * @param {Constructor} constructor\n * @param {String} message _optional_\n * @alias instanceOf\n * @namespace BDD\n * @api public\n */\n\n function assertInstanceOf (constructor, msg) {\n if (msg) flag(this, 'message', msg);\n var name = _.getName(constructor);\n this.assert(\n flag(this, 'object') instanceof constructor\n , 'expected #{this} to be an instance of ' + name\n , 'expected #{this} to not be an instance of ' + name\n );\n };\n\n Assertion.addMethod('instanceof', assertInstanceOf);\n Assertion.addMethod('instanceOf', assertInstanceOf);\n\n /**\n * ### .property(name, [value])\n *\n * Asserts that the target has a property `name`, optionally asserting that\n * the value of that property is strictly equal to `value`.\n * If the `deep` flag is set, you can use dot- and bracket-notation for deep\n * references into objects and arrays.\n *\n * // simple referencing\n * var obj = { foo: 'bar' };\n * expect(obj).to.have.property('foo');\n * expect(obj).to.have.property('foo', 'bar');\n *\n * // deep referencing\n * var deepObj = {\n * green: { tea: 'matcha' }\n * , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]\n * };\n *\n * expect(deepObj).to.have.deep.property('green.tea', 'matcha');\n * expect(deepObj).to.have.deep.property('teas[1]', 'matcha');\n * expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');\n *\n * You can also use an array as the starting point of a `deep.property`\n * assertion, or traverse nested arrays.\n *\n * var arr = [\n * [ 'chai', 'matcha', 'konacha' ]\n * , [ { tea: 'chai' }\n * , { tea: 'matcha' }\n * , { tea: 'konacha' } ]\n * ];\n *\n * expect(arr).to.have.deep.property('[0][1]', 'matcha');\n * expect(arr).to.have.deep.property('[1][2].tea', 'konacha');\n *\n * Furthermore, `property` changes the subject of the assertion\n * to be the value of that property from the original object. This\n * permits for further chainable assertions on that property.\n *\n * expect(obj).to.have.property('foo')\n * .that.is.a('string');\n * expect(deepObj).to.have.property('green')\n * .that.is.an('object')\n * .that.deep.equals({ tea: 'matcha' });\n * expect(deepObj).to.have.property('teas')\n * .that.is.an('array')\n * .with.deep.property('[2]')\n * .that.deep.equals({ tea: 'konacha' });\n *\n * Note that dots and bracket in `name` must be backslash-escaped when\n * the `deep` flag is set, while they must NOT be escaped when the `deep`\n * flag is not set.\n *\n * // simple referencing\n * var css = { '.link[target]': 42 };\n * expect(css).to.have.property('.link[target]', 42);\n *\n * // deep referencing\n * var deepCss = { '.link': { '[target]': 42 }};\n * expect(deepCss).to.have.deep.property('\\\\.link.\\\\[target\\\\]', 42);\n *\n * @name property\n * @alias deep.property\n * @param {String} name\n * @param {Mixed} value (optional)\n * @param {String} message _optional_\n * @returns value of property for chaining\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('property', function (name, val, msg) {\n if (msg) flag(this, 'message', msg);\n\n var isDeep = !!flag(this, 'deep')\n , descriptor = isDeep ? 'deep property ' : 'property '\n , negate = flag(this, 'negate')\n , obj = flag(this, 'object')\n , pathInfo = isDeep ? _.getPathInfo(name, obj) : null\n , hasProperty = isDeep\n ? pathInfo.exists\n : _.hasProperty(name, obj)\n , value = isDeep\n ? pathInfo.value\n : obj[name];\n\n if (negate && arguments.length > 1) {\n if (undefined === value) {\n msg = (msg != null) ? msg + ': ' : '';\n throw new Error(msg + _.inspect(obj) + ' has no ' + descriptor + _.inspect(name));\n }\n } else {\n this.assert(\n hasProperty\n , 'expected #{this} to have a ' + descriptor + _.inspect(name)\n , 'expected #{this} to not have ' + descriptor + _.inspect(name));\n }\n\n if (arguments.length > 1) {\n this.assert(\n val === value\n , 'expected #{this} to have a ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + _.inspect(name) + ' of #{act}'\n , val\n , value\n );\n }\n\n flag(this, 'object', value);\n });\n\n\n /**\n * ### .ownProperty(name)\n *\n * Asserts that the target has an own property `name`.\n *\n * expect('test').to.have.ownProperty('length');\n *\n * @name ownProperty\n * @alias haveOwnProperty\n * @param {String} name\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertOwnProperty (name, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n this.assert(\n obj.hasOwnProperty(name)\n , 'expected #{this} to have own property ' + _.inspect(name)\n , 'expected #{this} to not have own property ' + _.inspect(name)\n );\n }\n\n Assertion.addMethod('ownProperty', assertOwnProperty);\n Assertion.addMethod('haveOwnProperty', assertOwnProperty);\n\n /**\n * ### .ownPropertyDescriptor(name[, descriptor[, message]])\n *\n * Asserts that the target has an own property descriptor `name`, that optionally matches `descriptor`.\n *\n * expect('test').to.have.ownPropertyDescriptor('length');\n * expect('test').to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 4 });\n * expect('test').not.to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 3 });\n * expect('test').ownPropertyDescriptor('length').to.have.property('enumerable', false);\n * expect('test').ownPropertyDescriptor('length').to.have.keys('value');\n *\n * @name ownPropertyDescriptor\n * @alias haveOwnPropertyDescriptor\n * @param {String} name\n * @param {Object} descriptor _optional_\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertOwnPropertyDescriptor (name, descriptor, msg) {\n if (typeof descriptor === 'string') {\n msg = descriptor;\n descriptor = null;\n }\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);\n if (actualDescriptor && descriptor) {\n this.assert(\n _.eql(descriptor, actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)\n , descriptor\n , actualDescriptor\n , true\n );\n } else {\n this.assert(\n actualDescriptor\n , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)\n , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)\n );\n }\n flag(this, 'object', actualDescriptor);\n }\n\n Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);\n Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);\n\n /**\n * ### .length\n *\n * Sets the `doLength` flag later used as a chain precursor to a value\n * comparison for the `length` property.\n *\n * expect('foo').to.have.length.above(2);\n * expect([ 1, 2, 3 ]).to.have.length.above(2);\n * expect('foo').to.have.length.below(4);\n * expect([ 1, 2, 3 ]).to.have.length.below(4);\n * expect('foo').to.have.length.within(2,4);\n * expect([ 1, 2, 3 ]).to.have.length.within(2,4);\n *\n * *Deprecation notice:* Using `length` as an assertion will be deprecated\n * in version 2.4.0 and removed in 3.0.0. Code using the old style of\n * asserting for `length` property value using `length(value)` should be\n * switched to use `lengthOf(value)` instead.\n *\n * @name length\n * @namespace BDD\n * @api public\n */\n\n /**\n * ### .lengthOf(value[, message])\n *\n * Asserts that the target's `length` property has\n * the expected value.\n *\n * expect([ 1, 2, 3]).to.have.lengthOf(3);\n * expect('foobar').to.have.lengthOf(6);\n *\n * @name lengthOf\n * @param {Number} length\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLengthChain () {\n flag(this, 'doLength', true);\n }\n\n function assertLength (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n new Assertion(obj, msg).to.have.property('length');\n var len = obj.length;\n\n this.assert(\n len == n\n , 'expected #{this} to have a length of #{exp} but got #{act}'\n , 'expected #{this} to not have a length of #{act}'\n , n\n , len\n );\n }\n\n Assertion.addChainableMethod('length', assertLength, assertLengthChain);\n Assertion.addMethod('lengthOf', assertLength);\n\n /**\n * ### .match(regexp)\n *\n * Asserts that the target matches a regular expression.\n *\n * expect('foobar').to.match(/^foo/);\n *\n * @name match\n * @alias matches\n * @param {RegExp} RegularExpression\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n function assertMatch(re, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n this.assert(\n re.exec(obj)\n , 'expected #{this} to match ' + re\n , 'expected #{this} not to match ' + re\n );\n }\n\n Assertion.addMethod('match', assertMatch);\n Assertion.addMethod('matches', assertMatch);\n\n /**\n * ### .string(string)\n *\n * Asserts that the string target contains another string.\n *\n * expect('foobar').to.have.string('bar');\n *\n * @name string\n * @param {String} string\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('string', function (str, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n new Assertion(obj, msg).is.a('string');\n\n this.assert(\n ~obj.indexOf(str)\n , 'expected #{this} to contain ' + _.inspect(str)\n , 'expected #{this} to not contain ' + _.inspect(str)\n );\n });\n\n\n /**\n * ### .keys(key1, [key2], [...])\n *\n * Asserts that the target contains any or all of the passed-in keys.\n * Use in combination with `any`, `all`, `contains`, or `have` will affect\n * what will pass.\n *\n * When used in conjunction with `any`, at least one key that is passed\n * in must exist in the target object. This is regardless whether or not\n * the `have` or `contain` qualifiers are used. Note, either `any` or `all`\n * should be used in the assertion. If neither are used, the assertion is\n * defaulted to `all`.\n *\n * When both `all` and `contain` are used, the target object must have at\n * least all of the passed-in keys but may have more keys not listed.\n *\n * When both `all` and `have` are used, the target object must both contain\n * all of the passed-in keys AND the number of keys in the target object must\n * match the number of keys passed in (in other words, a target object must\n * have all and only all of the passed-in keys).\n *\n * expect({ foo: 1, bar: 2 }).to.have.any.keys('foo', 'baz');\n * expect({ foo: 1, bar: 2 }).to.have.any.keys('foo');\n * expect({ foo: 1, bar: 2 }).to.contain.any.keys('bar', 'baz');\n * expect({ foo: 1, bar: 2 }).to.contain.any.keys(['foo']);\n * expect({ foo: 1, bar: 2 }).to.contain.any.keys({'foo': 6});\n * expect({ foo: 1, bar: 2 }).to.have.all.keys(['bar', 'foo']);\n * expect({ foo: 1, bar: 2 }).to.have.all.keys({'bar': 6, 'foo': 7});\n * expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys(['bar', 'foo']);\n * expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys({'bar': 6});\n *\n *\n * @name keys\n * @alias key\n * @param {...String|Array|Object} keys\n * @namespace BDD\n * @api public\n */\n\n function assertKeys (keys) {\n var obj = flag(this, 'object')\n , str\n , ok = true\n , mixedArgsMsg = 'keys must be given single argument of Array|Object|String, or multiple String arguments';\n\n switch (_.type(keys)) {\n case \"array\":\n if (arguments.length > 1) throw (new Error(mixedArgsMsg));\n break;\n case \"object\":\n if (arguments.length > 1) throw (new Error(mixedArgsMsg));\n keys = Object.keys(keys);\n break;\n default:\n keys = Array.prototype.slice.call(arguments);\n }\n\n if (!keys.length) throw new Error('keys required');\n\n var actual = Object.keys(obj)\n , expected = keys\n , len = keys.length\n , any = flag(this, 'any')\n , all = flag(this, 'all');\n\n if (!any && !all) {\n all = true;\n }\n\n // Has any\n if (any) {\n var intersection = expected.filter(function(key) {\n return ~actual.indexOf(key);\n });\n ok = intersection.length > 0;\n }\n\n // Has all\n if (all) {\n ok = keys.every(function(key){\n return ~actual.indexOf(key);\n });\n if (!flag(this, 'negate') && !flag(this, 'contains')) {\n ok = ok && keys.length == actual.length;\n }\n }\n\n // Key string\n if (len > 1) {\n keys = keys.map(function(key){\n return _.inspect(key);\n });\n var last = keys.pop();\n if (all) {\n str = keys.join(', ') + ', and ' + last;\n }\n if (any) {\n str = keys.join(', ') + ', or ' + last;\n }\n } else {\n str = _.inspect(keys[0]);\n }\n\n // Form\n str = (len > 1 ? 'keys ' : 'key ') + str;\n\n // Have / include\n str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;\n\n // Assertion\n this.assert(\n ok\n , 'expected #{this} to ' + str\n , 'expected #{this} to not ' + str\n , expected.slice(0).sort()\n , actual.sort()\n , true\n );\n }\n\n Assertion.addMethod('keys', assertKeys);\n Assertion.addMethod('key', assertKeys);\n\n /**\n * ### .throw(constructor)\n *\n * Asserts that the function target will throw a specific error, or specific type of error\n * (as determined using `instanceof`), optionally with a RegExp or string inclusion test\n * for the error's message.\n *\n * var err = new ReferenceError('This is a bad function.');\n * var fn = function () { throw err; }\n * expect(fn).to.throw(ReferenceError);\n * expect(fn).to.throw(Error);\n * expect(fn).to.throw(/bad function/);\n * expect(fn).to.not.throw('good function');\n * expect(fn).to.throw(ReferenceError, /bad function/);\n * expect(fn).to.throw(err);\n *\n * Please note that when a throw expectation is negated, it will check each\n * parameter independently, starting with error constructor type. The appropriate way\n * to check for the existence of a type of error but for a message that does not match\n * is to use `and`.\n *\n * expect(fn).to.throw(ReferenceError)\n * .and.not.throw(/good function/);\n *\n * @name throw\n * @alias throws\n * @alias Throw\n * @param {ErrorConstructor} constructor\n * @param {String|RegExp} expected error message\n * @param {String} message _optional_\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @returns error for chaining (null if no error)\n * @namespace BDD\n * @api public\n */\n\n function assertThrows (constructor, errMsg, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n new Assertion(obj, msg).is.a('function');\n\n var thrown = false\n , desiredError = null\n , name = null\n , thrownError = null;\n\n if (arguments.length === 0) {\n errMsg = null;\n constructor = null;\n } else if (constructor && (constructor instanceof RegExp || 'string' === typeof constructor)) {\n errMsg = constructor;\n constructor = null;\n } else if (constructor && constructor instanceof Error) {\n desiredError = constructor;\n constructor = null;\n errMsg = null;\n } else if (typeof constructor === 'function') {\n name = constructor.prototype.name;\n if (!name || (name === 'Error' && constructor !== Error)) {\n name = constructor.name || (new constructor()).name;\n }\n } else {\n constructor = null;\n }\n\n try {\n obj();\n } catch (err) {\n // first, check desired error\n if (desiredError) {\n this.assert(\n err === desiredError\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}'\n , (desiredError instanceof Error ? desiredError.toString() : desiredError)\n , (err instanceof Error ? err.toString() : err)\n );\n\n flag(this, 'object', err);\n return this;\n }\n\n // next, check constructor\n if (constructor) {\n this.assert(\n err instanceof constructor\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp} but #{act} was thrown'\n , name\n , (err instanceof Error ? err.toString() : err)\n );\n\n if (!errMsg) {\n flag(this, 'object', err);\n return this;\n }\n }\n\n // next, check message\n var message = 'error' === _.type(err) && \"message\" in err\n ? err.message\n : '' + err;\n\n if ((message != null) && errMsg && errMsg instanceof RegExp) {\n this.assert(\n errMsg.exec(message)\n , 'expected #{this} to throw error matching #{exp} but got #{act}'\n , 'expected #{this} to throw error not matching #{exp}'\n , errMsg\n , message\n );\n\n flag(this, 'object', err);\n return this;\n } else if ((message != null) && errMsg && 'string' === typeof errMsg) {\n this.assert(\n ~message.indexOf(errMsg)\n , 'expected #{this} to throw error including #{exp} but got #{act}'\n , 'expected #{this} to throw error not including #{act}'\n , errMsg\n , message\n );\n\n flag(this, 'object', err);\n return this;\n } else {\n thrown = true;\n thrownError = err;\n }\n }\n\n var actuallyGot = ''\n , expectedThrown = name !== null\n ? name\n : desiredError\n ? '#{exp}' //_.inspect(desiredError)\n : 'an error';\n\n if (thrown) {\n actuallyGot = ' but #{act} was thrown'\n }\n\n this.assert(\n thrown === true\n , 'expected #{this} to throw ' + expectedThrown + actuallyGot\n , 'expected #{this} to not throw ' + expectedThrown + actuallyGot\n , (desiredError instanceof Error ? desiredError.toString() : desiredError)\n , (thrownError instanceof Error ? thrownError.toString() : thrownError)\n );\n\n flag(this, 'object', thrownError);\n };\n\n Assertion.addMethod('throw', assertThrows);\n Assertion.addMethod('throws', assertThrows);\n Assertion.addMethod('Throw', assertThrows);\n\n /**\n * ### .respondTo(method)\n *\n * Asserts that the object or class target will respond to a method.\n *\n * Klass.prototype.bar = function(){};\n * expect(Klass).to.respondTo('bar');\n * expect(obj).to.respondTo('bar');\n *\n * To check if a constructor will respond to a static function,\n * set the `itself` flag.\n *\n * Klass.baz = function(){};\n * expect(Klass).itself.to.respondTo('baz');\n *\n * @name respondTo\n * @alias respondsTo\n * @param {String} method\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function respondTo (method, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , itself = flag(this, 'itself')\n , context = ('function' === _.type(obj) && !itself)\n ? obj.prototype[method]\n : obj[method];\n\n this.assert(\n 'function' === typeof context\n , 'expected #{this} to respond to ' + _.inspect(method)\n , 'expected #{this} to not respond to ' + _.inspect(method)\n );\n }\n\n Assertion.addMethod('respondTo', respondTo);\n Assertion.addMethod('respondsTo', respondTo);\n\n /**\n * ### .itself\n *\n * Sets the `itself` flag, later used by the `respondTo` assertion.\n *\n * function Foo() {}\n * Foo.bar = function() {}\n * Foo.prototype.baz = function() {}\n *\n * expect(Foo).itself.to.respondTo('bar');\n * expect(Foo).itself.not.to.respondTo('baz');\n *\n * @name itself\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('itself', function () {\n flag(this, 'itself', true);\n });\n\n /**\n * ### .satisfy(method)\n *\n * Asserts that the target passes a given truth test.\n *\n * expect(1).to.satisfy(function(num) { return num > 0; });\n *\n * @name satisfy\n * @alias satisfies\n * @param {Function} matcher\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function satisfy (matcher, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var result = matcher(obj);\n this.assert(\n result\n , 'expected #{this} to satisfy ' + _.objDisplay(matcher)\n , 'expected #{this} to not satisfy' + _.objDisplay(matcher)\n , this.negate ? false : true\n , result\n );\n }\n\n Assertion.addMethod('satisfy', satisfy);\n Assertion.addMethod('satisfies', satisfy);\n\n /**\n * ### .closeTo(expected, delta)\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * expect(1.5).to.be.closeTo(1, 0.5);\n *\n * @name closeTo\n * @alias approximately\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function closeTo(expected, delta, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n\n new Assertion(obj, msg).is.a('number');\n if (_.type(expected) !== 'number' || _.type(delta) !== 'number') {\n throw new Error('the arguments to closeTo or approximately must be numbers');\n }\n\n this.assert(\n Math.abs(obj - expected) <= delta\n , 'expected #{this} to be close to ' + expected + ' +/- ' + delta\n , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta\n );\n }\n\n Assertion.addMethod('closeTo', closeTo);\n Assertion.addMethod('approximately', closeTo);\n\n function isSubsetOf(subset, superset, cmp) {\n return subset.every(function(elem) {\n if (!cmp) return superset.indexOf(elem) !== -1;\n\n return superset.some(function(elem2) {\n return cmp(elem, elem2);\n });\n })\n }\n\n /**\n * ### .members(set)\n *\n * Asserts that the target is a superset of `set`,\n * or that the target and `set` have the same strictly-equal (===) members.\n * Alternately, if the `deep` flag is set, set members are compared for deep\n * equality.\n *\n * expect([1, 2, 3]).to.include.members([3, 2]);\n * expect([1, 2, 3]).to.not.include.members([3, 2, 8]);\n *\n * expect([4, 2]).to.have.members([2, 4]);\n * expect([5, 2]).to.not.have.members([5, 2, 1]);\n *\n * expect([{ id: 1 }]).to.deep.include.members([{ id: 1 }]);\n *\n * @name members\n * @param {Array} set\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('members', function (subset, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n\n new Assertion(obj).to.be.an('array');\n new Assertion(subset).to.be.an('array');\n\n var cmp = flag(this, 'deep') ? _.eql : undefined;\n\n if (flag(this, 'contains')) {\n return this.assert(\n isSubsetOf(subset, obj, cmp)\n , 'expected #{this} to be a superset of #{act}'\n , 'expected #{this} to not be a superset of #{act}'\n , obj\n , subset\n );\n }\n\n this.assert(\n isSubsetOf(obj, subset, cmp) && isSubsetOf(subset, obj, cmp)\n , 'expected #{this} to have the same members as #{act}'\n , 'expected #{this} to not have the same members as #{act}'\n , obj\n , subset\n );\n });\n\n /**\n * ### .oneOf(list)\n *\n * Assert that a value appears somewhere in the top level of array `list`.\n *\n * expect('a').to.be.oneOf(['a', 'b', 'c']);\n * expect(9).to.not.be.oneOf(['z']);\n * expect([3]).to.not.be.oneOf([1, 2, [3]]);\n *\n * var three = [3];\n * // for object-types, contents are not compared\n * expect(three).to.not.be.oneOf([1, 2, [3]]);\n * // comparing references works\n * expect(three).to.be.oneOf([1, 2, three]);\n *\n * @name oneOf\n * @param {Array<*>} list\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function oneOf (list, msg) {\n if (msg) flag(this, 'message', msg);\n var expected = flag(this, 'object');\n new Assertion(list).to.be.an('array');\n\n this.assert(\n list.indexOf(expected) > -1\n , 'expected #{this} to be one of #{exp}'\n , 'expected #{this} to not be one of #{exp}'\n , list\n , expected\n );\n }\n\n Assertion.addMethod('oneOf', oneOf);\n\n\n /**\n * ### .change(function)\n *\n * Asserts that a function changes an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 3 };\n * var noChangeFn = function() { return 'foo' + 'bar'; }\n * expect(fn).to.change(obj, 'val');\n * expect(noChangeFn).to.not.change(obj, 'val')\n *\n * @name change\n * @alias changes\n * @alias Change\n * @param {String} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertChanges (object, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object');\n new Assertion(object, msg).to.have.property(prop);\n new Assertion(fn).is.a('function');\n\n var initial = object[prop];\n fn();\n\n this.assert(\n initial !== object[prop]\n , 'expected .' + prop + ' to change'\n , 'expected .' + prop + ' to not change'\n );\n }\n\n Assertion.addChainableMethod('change', assertChanges);\n Assertion.addChainableMethod('changes', assertChanges);\n\n /**\n * ### .increase(function)\n *\n * Asserts that a function increases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * expect(fn).to.increase(obj, 'val');\n *\n * @name increase\n * @alias increases\n * @alias Increase\n * @param {String} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertIncreases (object, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object');\n new Assertion(object, msg).to.have.property(prop);\n new Assertion(fn).is.a('function');\n\n var initial = object[prop];\n fn();\n\n this.assert(\n object[prop] - initial > 0\n , 'expected .' + prop + ' to increase'\n , 'expected .' + prop + ' to not increase'\n );\n }\n\n Assertion.addChainableMethod('increase', assertIncreases);\n Assertion.addChainableMethod('increases', assertIncreases);\n\n /**\n * ### .decrease(function)\n *\n * Asserts that a function decreases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * expect(fn).to.decrease(obj, 'val');\n *\n * @name decrease\n * @alias decreases\n * @alias Decrease\n * @param {String} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertDecreases (object, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object');\n new Assertion(object, msg).to.have.property(prop);\n new Assertion(fn).is.a('function');\n\n var initial = object[prop];\n fn();\n\n this.assert(\n object[prop] - initial < 0\n , 'expected .' + prop + ' to decrease'\n , 'expected .' + prop + ' to not decrease'\n );\n }\n\n Assertion.addChainableMethod('decrease', assertDecreases);\n Assertion.addChainableMethod('decreases', assertDecreases);\n\n /**\n * ### .extensible\n *\n * Asserts that the target is extensible (can have new properties added to\n * it).\n *\n * var nonExtensibleObject = Object.preventExtensions({});\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * expect({}).to.be.extensible;\n * expect(nonExtensibleObject).to.not.be.extensible;\n * expect(sealedObject).to.not.be.extensible;\n * expect(frozenObject).to.not.be.extensible;\n *\n * @name extensible\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('extensible', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible\n // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n var isExtensible;\n\n try {\n isExtensible = Object.isExtensible(obj);\n } catch (err) {\n if (err instanceof TypeError) isExtensible = false;\n else throw err;\n }\n\n this.assert(\n isExtensible\n , 'expected #{this} to be extensible'\n , 'expected #{this} to not be extensible'\n );\n });\n\n /**\n * ### .sealed\n *\n * Asserts that the target is sealed (cannot have new properties added to it\n * and its existing properties cannot be removed).\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * expect(sealedObject).to.be.sealed;\n * expect(frozenObject).to.be.sealed;\n * expect({}).to.not.be.sealed;\n *\n * @name sealed\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('sealed', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed\n // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n var isSealed;\n\n try {\n isSealed = Object.isSealed(obj);\n } catch (err) {\n if (err instanceof TypeError) isSealed = true;\n else throw err;\n }\n\n this.assert(\n isSealed\n , 'expected #{this} to be sealed'\n , 'expected #{this} to not be sealed'\n );\n });\n\n /**\n * ### .frozen\n *\n * Asserts that the target is frozen (cannot have new properties added to it\n * and its existing properties cannot be modified).\n *\n * var frozenObject = Object.freeze({});\n *\n * expect(frozenObject).to.be.frozen;\n * expect({}).to.not.be.frozen;\n *\n * @name frozen\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('frozen', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen\n // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n var isFrozen;\n\n try {\n isFrozen = Object.isFrozen(obj);\n } catch (err) {\n if (err instanceof TypeError) isFrozen = true;\n else throw err;\n }\n\n this.assert(\n isFrozen\n , 'expected #{this} to be frozen'\n , 'expected #{this} to not be frozen'\n );\n });\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\n\nmodule.exports = function (chai, util) {\n\n /*!\n * Chai dependencies.\n */\n\n var Assertion = chai.Assertion\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n /**\n * ### assert(expression, message)\n *\n * Write your own test expressions.\n *\n * assert('foo' !== 'bar', 'foo is not bar');\n * assert(Array.isArray([]), 'empty arrays are arrays');\n *\n * @param {Mixed} expression to test for truthiness\n * @param {String} message to display on error\n * @name assert\n * @namespace Assert\n * @api public\n */\n\n var assert = chai.assert = function (express, errmsg) {\n var test = new Assertion(null, null, chai.assert);\n test.assert(\n express\n , errmsg\n , '[ negation message unavailable ]'\n );\n };\n\n /**\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure. Node.js `assert` module-compatible.\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace Assert\n * @api public\n */\n\n assert.fail = function (actual, expected, message, operator) {\n message = message || 'assert.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, assert.fail);\n };\n\n /**\n * ### .isOk(object, [message])\n *\n * Asserts that `object` is truthy.\n *\n * assert.isOk('everything', 'everything is ok');\n * assert.isOk(false, 'this will fail');\n *\n * @name isOk\n * @alias ok\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isOk = function (val, msg) {\n new Assertion(val, msg).is.ok;\n };\n\n /**\n * ### .isNotOk(object, [message])\n *\n * Asserts that `object` is falsy.\n *\n * assert.isNotOk('everything', 'this will fail');\n * assert.isNotOk(false, 'this will pass');\n *\n * @name isNotOk\n * @alias notOk\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotOk = function (val, msg) {\n new Assertion(val, msg).is.not.ok;\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * assert.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.equal = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.equal);\n\n test.assert(\n exp == flag(test, 'object')\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{act}'\n , exp\n , act\n );\n };\n\n /**\n * ### .notEqual(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * assert.notEqual(3, 4, 'these numbers are not equal');\n *\n * @name notEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notEqual = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.notEqual);\n\n test.assert(\n exp != flag(test, 'object')\n , 'expected #{this} to not equal #{exp}'\n , 'expected #{this} to equal #{act}'\n , exp\n , act\n );\n };\n\n /**\n * ### .strictEqual(actual, expected, [message])\n *\n * Asserts strict equality (`===`) of `actual` and `expected`.\n *\n * assert.strictEqual(true, true, 'these booleans are strictly equal');\n *\n * @name strictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.strictEqual = function (act, exp, msg) {\n new Assertion(act, msg).to.equal(exp);\n };\n\n /**\n * ### .notStrictEqual(actual, expected, [message])\n *\n * Asserts strict inequality (`!==`) of `actual` and `expected`.\n *\n * assert.notStrictEqual(3, '3', 'no coercion for strict equality');\n *\n * @name notStrictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notStrictEqual = function (act, exp, msg) {\n new Assertion(act, msg).to.not.equal(exp);\n };\n\n /**\n * ### .deepEqual(actual, expected, [message])\n *\n * Asserts that `actual` is deeply equal to `expected`.\n *\n * assert.deepEqual({ tea: 'green' }, { tea: 'green' });\n *\n * @name deepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepEqual = function (act, exp, msg) {\n new Assertion(act, msg).to.eql(exp);\n };\n\n /**\n * ### .notDeepEqual(actual, expected, [message])\n *\n * Assert that `actual` is not deeply equal to `expected`.\n *\n * assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });\n *\n * @name notDeepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepEqual = function (act, exp, msg) {\n new Assertion(act, msg).to.not.eql(exp);\n };\n\n /**\n * ### .isAbove(valueToCheck, valueToBeAbove, [message])\n *\n * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`\n *\n * assert.isAbove(5, 2, '5 is strictly greater than 2');\n *\n * @name isAbove\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAbove\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAbove = function (val, abv, msg) {\n new Assertion(val, msg).to.be.above(abv);\n };\n\n /**\n * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])\n *\n * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`\n *\n * assert.isAtLeast(5, 2, '5 is greater or equal to 2');\n * assert.isAtLeast(3, 3, '3 is greater or equal to 3');\n *\n * @name isAtLeast\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtLeast\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtLeast = function (val, atlst, msg) {\n new Assertion(val, msg).to.be.least(atlst);\n };\n\n /**\n * ### .isBelow(valueToCheck, valueToBeBelow, [message])\n *\n * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`\n *\n * assert.isBelow(3, 6, '3 is strictly less than 6');\n *\n * @name isBelow\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeBelow\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBelow = function (val, blw, msg) {\n new Assertion(val, msg).to.be.below(blw);\n };\n\n /**\n * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])\n *\n * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`\n *\n * assert.isAtMost(3, 6, '3 is less than or equal to 6');\n * assert.isAtMost(4, 4, '4 is less than or equal to 4');\n *\n * @name isAtMost\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtMost\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtMost = function (val, atmst, msg) {\n new Assertion(val, msg).to.be.most(atmst);\n };\n\n /**\n * ### .isTrue(value, [message])\n *\n * Asserts that `value` is true.\n *\n * var teaServed = true;\n * assert.isTrue(teaServed, 'the tea has been served');\n *\n * @name isTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isTrue = function (val, msg) {\n new Assertion(val, msg).is['true'];\n };\n\n /**\n * ### .isNotTrue(value, [message])\n *\n * Asserts that `value` is not true.\n *\n * var tea = 'tasty chai';\n * assert.isNotTrue(tea, 'great, time for tea!');\n *\n * @name isNotTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotTrue = function (val, msg) {\n new Assertion(val, msg).to.not.equal(true);\n };\n\n /**\n * ### .isFalse(value, [message])\n *\n * Asserts that `value` is false.\n *\n * var teaServed = false;\n * assert.isFalse(teaServed, 'no tea yet? hmm...');\n *\n * @name isFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFalse = function (val, msg) {\n new Assertion(val, msg).is['false'];\n };\n\n /**\n * ### .isNotFalse(value, [message])\n *\n * Asserts that `value` is not false.\n *\n * var tea = 'tasty chai';\n * assert.isNotFalse(tea, 'great, time for tea!');\n *\n * @name isNotFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFalse = function (val, msg) {\n new Assertion(val, msg).to.not.equal(false);\n };\n\n /**\n * ### .isNull(value, [message])\n *\n * Asserts that `value` is null.\n *\n * assert.isNull(err, 'there was no error');\n *\n * @name isNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNull = function (val, msg) {\n new Assertion(val, msg).to.equal(null);\n };\n\n /**\n * ### .isNotNull(value, [message])\n *\n * Asserts that `value` is not null.\n *\n * var tea = 'tasty chai';\n * assert.isNotNull(tea, 'great, time for tea!');\n *\n * @name isNotNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNull = function (val, msg) {\n new Assertion(val, msg).to.not.equal(null);\n };\n\n /**\n * ### .isNaN\n * Asserts that value is NaN\n *\n * assert.isNaN('foo', 'foo is NaN');\n *\n * @name isNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNaN = function (val, msg) {\n new Assertion(val, msg).to.be.NaN;\n };\n\n /**\n * ### .isNotNaN\n * Asserts that value is not NaN\n *\n * assert.isNotNaN(4, '4 is not NaN');\n *\n * @name isNotNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n assert.isNotNaN = function (val, msg) {\n new Assertion(val, msg).not.to.be.NaN;\n };\n\n /**\n * ### .isUndefined(value, [message])\n *\n * Asserts that `value` is `undefined`.\n *\n * var tea;\n * assert.isUndefined(tea, 'no tea defined');\n *\n * @name isUndefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isUndefined = function (val, msg) {\n new Assertion(val, msg).to.equal(undefined);\n };\n\n /**\n * ### .isDefined(value, [message])\n *\n * Asserts that `value` is not `undefined`.\n *\n * var tea = 'cup of chai';\n * assert.isDefined(tea, 'tea has been defined');\n *\n * @name isDefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isDefined = function (val, msg) {\n new Assertion(val, msg).to.not.equal(undefined);\n };\n\n /**\n * ### .isFunction(value, [message])\n *\n * Asserts that `value` is a function.\n *\n * function serveTea() { return 'cup of tea'; };\n * assert.isFunction(serveTea, 'great, we can have tea now');\n *\n * @name isFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFunction = function (val, msg) {\n new Assertion(val, msg).to.be.a('function');\n };\n\n /**\n * ### .isNotFunction(value, [message])\n *\n * Asserts that `value` is _not_ a function.\n *\n * var serveTea = [ 'heat', 'pour', 'sip' ];\n * assert.isNotFunction(serveTea, 'great, we have listed the steps');\n *\n * @name isNotFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFunction = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('function');\n };\n\n /**\n * ### .isObject(value, [message])\n *\n * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).\n * _The assertion does not match subclassed objects._\n *\n * var selection = { name: 'Chai', serve: 'with spices' };\n * assert.isObject(selection, 'tea selection is an object');\n *\n * @name isObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isObject = function (val, msg) {\n new Assertion(val, msg).to.be.a('object');\n };\n\n /**\n * ### .isNotObject(value, [message])\n *\n * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).\n *\n * var selection = 'chai'\n * assert.isNotObject(selection, 'tea selection is not an object');\n * assert.isNotObject(null, 'null is not an object');\n *\n * @name isNotObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotObject = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('object');\n };\n\n /**\n * ### .isArray(value, [message])\n *\n * Asserts that `value` is an array.\n *\n * var menu = [ 'green', 'chai', 'oolong' ];\n * assert.isArray(menu, 'what kind of tea do we want?');\n *\n * @name isArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isArray = function (val, msg) {\n new Assertion(val, msg).to.be.an('array');\n };\n\n /**\n * ### .isNotArray(value, [message])\n *\n * Asserts that `value` is _not_ an array.\n *\n * var menu = 'green|chai|oolong';\n * assert.isNotArray(menu, 'what kind of tea do we want?');\n *\n * @name isNotArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotArray = function (val, msg) {\n new Assertion(val, msg).to.not.be.an('array');\n };\n\n /**\n * ### .isString(value, [message])\n *\n * Asserts that `value` is a string.\n *\n * var teaOrder = 'chai';\n * assert.isString(teaOrder, 'order placed');\n *\n * @name isString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isString = function (val, msg) {\n new Assertion(val, msg).to.be.a('string');\n };\n\n /**\n * ### .isNotString(value, [message])\n *\n * Asserts that `value` is _not_ a string.\n *\n * var teaOrder = 4;\n * assert.isNotString(teaOrder, 'order placed');\n *\n * @name isNotString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotString = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('string');\n };\n\n /**\n * ### .isNumber(value, [message])\n *\n * Asserts that `value` is a number.\n *\n * var cups = 2;\n * assert.isNumber(cups, 'how many cups');\n *\n * @name isNumber\n * @param {Number} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNumber = function (val, msg) {\n new Assertion(val, msg).to.be.a('number');\n };\n\n /**\n * ### .isNotNumber(value, [message])\n *\n * Asserts that `value` is _not_ a number.\n *\n * var cups = '2 cups please';\n * assert.isNotNumber(cups, 'how many cups');\n *\n * @name isNotNumber\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNumber = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('number');\n };\n\n /**\n * ### .isBoolean(value, [message])\n *\n * Asserts that `value` is a boolean.\n *\n * var teaReady = true\n * , teaServed = false;\n *\n * assert.isBoolean(teaReady, 'is the tea ready');\n * assert.isBoolean(teaServed, 'has tea been served');\n *\n * @name isBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBoolean = function (val, msg) {\n new Assertion(val, msg).to.be.a('boolean');\n };\n\n /**\n * ### .isNotBoolean(value, [message])\n *\n * Asserts that `value` is _not_ a boolean.\n *\n * var teaReady = 'yep'\n * , teaServed = 'nope';\n *\n * assert.isNotBoolean(teaReady, 'is the tea ready');\n * assert.isNotBoolean(teaServed, 'has tea been served');\n *\n * @name isNotBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotBoolean = function (val, msg) {\n new Assertion(val, msg).to.not.be.a('boolean');\n };\n\n /**\n * ### .typeOf(value, name, [message])\n *\n * Asserts that `value`'s type is `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');\n * assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');\n * assert.typeOf('tea', 'string', 'we have a string');\n * assert.typeOf(/tea/, 'regexp', 'we have a regular expression');\n * assert.typeOf(null, 'null', 'we have a null');\n * assert.typeOf(undefined, 'undefined', 'we have an undefined');\n *\n * @name typeOf\n * @param {Mixed} value\n * @param {String} name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.typeOf = function (val, type, msg) {\n new Assertion(val, msg).to.be.a(type);\n };\n\n /**\n * ### .notTypeOf(value, name, [message])\n *\n * Asserts that `value`'s type is _not_ `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.notTypeOf('tea', 'number', 'strings are not numbers');\n *\n * @name notTypeOf\n * @param {Mixed} value\n * @param {String} typeof name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notTypeOf = function (val, type, msg) {\n new Assertion(val, msg).to.not.be.a(type);\n };\n\n /**\n * ### .instanceOf(object, constructor, [message])\n *\n * Asserts that `value` is an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new Tea('chai');\n *\n * assert.instanceOf(chai, Tea, 'chai is an instance of tea');\n *\n * @name instanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.instanceOf = function (val, type, msg) {\n new Assertion(val, msg).to.be.instanceOf(type);\n };\n\n /**\n * ### .notInstanceOf(object, constructor, [message])\n *\n * Asserts `value` is not an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new String('chai');\n *\n * assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');\n *\n * @name notInstanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInstanceOf = function (val, type, msg) {\n new Assertion(val, msg).to.not.be.instanceOf(type);\n };\n\n /**\n * ### .include(haystack, needle, [message])\n *\n * Asserts that `haystack` includes `needle`. Works\n * for strings and arrays.\n *\n * assert.include('foobar', 'bar', 'foobar contains string \"bar\"');\n * assert.include([ 1, 2, 3 ], 3, 'array contains value');\n *\n * @name include\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.include = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.include).include(inc);\n };\n\n /**\n * ### .notInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` does not include `needle`. Works\n * for strings and arrays.\n *\n * assert.notInclude('foobar', 'baz', 'string not include substring');\n * assert.notInclude([ 1, 2, 3 ], 4, 'array not include contain value');\n *\n * @name notInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notInclude).not.include(inc);\n };\n\n /**\n * ### .match(value, regexp, [message])\n *\n * Asserts that `value` matches the regular expression `regexp`.\n *\n * assert.match('foobar', /^foo/, 'regexp matches');\n *\n * @name match\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.match = function (exp, re, msg) {\n new Assertion(exp, msg).to.match(re);\n };\n\n /**\n * ### .notMatch(value, regexp, [message])\n *\n * Asserts that `value` does not match the regular expression `regexp`.\n *\n * assert.notMatch('foobar', /^foo/, 'regexp does not match');\n *\n * @name notMatch\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notMatch = function (exp, re, msg) {\n new Assertion(exp, msg).to.not.match(re);\n };\n\n /**\n * ### .property(object, property, [message])\n *\n * Asserts that `object` has a property named by `property`.\n *\n * assert.property({ tea: { green: 'matcha' }}, 'tea');\n *\n * @name property\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.property = function (obj, prop, msg) {\n new Assertion(obj, msg).to.have.property(prop);\n };\n\n /**\n * ### .notProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property`.\n *\n * assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');\n *\n * @name notProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notProperty = function (obj, prop, msg) {\n new Assertion(obj, msg).to.not.have.property(prop);\n };\n\n /**\n * ### .deepProperty(object, property, [message])\n *\n * Asserts that `object` has a property named by `property`, which can be a\n * string using dot- and bracket-notation for deep reference.\n *\n * assert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');\n *\n * @name deepProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepProperty = function (obj, prop, msg) {\n new Assertion(obj, msg).to.have.deep.property(prop);\n };\n\n /**\n * ### .notDeepProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property`, which\n * can be a string using dot- and bracket-notation for deep reference.\n *\n * assert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');\n *\n * @name notDeepProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepProperty = function (obj, prop, msg) {\n new Assertion(obj, msg).to.not.have.deep.property(prop);\n };\n\n /**\n * ### .propertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with value given\n * by `value`.\n *\n * assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');\n *\n * @name propertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.propertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg).to.have.property(prop, val);\n };\n\n /**\n * ### .propertyNotVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property`, but with a value\n * different from that given by `value`.\n *\n * assert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');\n *\n * @name propertyNotVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.propertyNotVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg).to.not.have.property(prop, val);\n };\n\n /**\n * ### .deepPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with value given\n * by `value`. `property` can use dot- and bracket-notation for deep\n * reference.\n *\n * assert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');\n *\n * @name deepPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg).to.have.deep.property(prop, val);\n };\n\n /**\n * ### .deepPropertyNotVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property`, but with a value\n * different from that given by `value`. `property` can use dot- and\n * bracket-notation for deep reference.\n *\n * assert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');\n *\n * @name deepPropertyNotVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepPropertyNotVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg).to.not.have.deep.property(prop, val);\n };\n\n /**\n * ### .lengthOf(object, length, [message])\n *\n * Asserts that `object` has a `length` property with the expected value.\n *\n * assert.lengthOf([1,2,3], 3, 'array has length of 3');\n * assert.lengthOf('foobar', 6, 'string has length of 6');\n *\n * @name lengthOf\n * @param {Mixed} object\n * @param {Number} length\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.lengthOf = function (exp, len, msg) {\n new Assertion(exp, msg).to.have.length(len);\n };\n\n /**\n * ### .throws(function, [constructor/string/regexp], [string/regexp], [message])\n *\n * Asserts that `function` will throw an error that is an instance of\n * `constructor`, or alternately that it will throw an error with message\n * matching `regexp`.\n *\n * assert.throws(fn, 'function throws a reference error');\n * assert.throws(fn, /function throws a reference error/);\n * assert.throws(fn, ReferenceError);\n * assert.throws(fn, ReferenceError, 'function throws a reference error');\n * assert.throws(fn, ReferenceError, /function throws a reference error/);\n *\n * @name throws\n * @alias throw\n * @alias Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.throws = function (fn, errt, errs, msg) {\n if ('string' === typeof errt || errt instanceof RegExp) {\n errs = errt;\n errt = null;\n }\n\n var assertErr = new Assertion(fn, msg).to.throw(errt, errs);\n return flag(assertErr, 'object');\n };\n\n /**\n * ### .doesNotThrow(function, [constructor/regexp], [message])\n *\n * Asserts that `function` will _not_ throw an error that is an instance of\n * `constructor`, or alternately that it will not throw an error with message\n * matching `regexp`.\n *\n * assert.doesNotThrow(fn, Error, 'function does not throw');\n *\n * @name doesNotThrow\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotThrow = function (fn, type, msg) {\n if ('string' === typeof type) {\n msg = type;\n type = null;\n }\n\n new Assertion(fn, msg).to.not.Throw(type);\n };\n\n /**\n * ### .operator(val1, operator, val2, [message])\n *\n * Compares two values using `operator`.\n *\n * assert.operator(1, '<', 2, 'everything is ok');\n * assert.operator(1, '>', 2, 'this will fail');\n *\n * @name operator\n * @param {Mixed} val1\n * @param {String} operator\n * @param {Mixed} val2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.operator = function (val, operator, val2, msg) {\n var ok;\n switch(operator) {\n case '==':\n ok = val == val2;\n break;\n case '===':\n ok = val === val2;\n break;\n case '>':\n ok = val > val2;\n break;\n case '>=':\n ok = val >= val2;\n break;\n case '<':\n ok = val < val2;\n break;\n case '<=':\n ok = val <= val2;\n break;\n case '!=':\n ok = val != val2;\n break;\n case '!==':\n ok = val !== val2;\n break;\n default:\n throw new Error('Invalid operator \"' + operator + '\"');\n }\n var test = new Assertion(ok, msg);\n test.assert(\n true === flag(test, 'object')\n , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)\n , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );\n };\n\n /**\n * ### .closeTo(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.closeTo(1.5, 1, 0.5, 'numbers are close');\n *\n * @name closeTo\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.closeTo = function (act, exp, delta, msg) {\n new Assertion(act, msg).to.be.closeTo(exp, delta);\n };\n\n /**\n * ### .approximately(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.approximately(1.5, 1, 0.5, 'numbers are close');\n *\n * @name approximately\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.approximately = function (act, exp, delta, msg) {\n new Assertion(act, msg).to.be.approximately(exp, delta);\n };\n\n /**\n * ### .sameMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members.\n * Order is not taken into account.\n *\n * assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');\n *\n * @name sameMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameMembers = function (set1, set2, msg) {\n new Assertion(set1, msg).to.have.same.members(set2);\n }\n\n /**\n * ### .sameDeepMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members - using a deep equality checking.\n * Order is not taken into account.\n *\n * assert.sameDeepMembers([ {b: 3}, {a: 2}, {c: 5} ], [ {c: 5}, {b: 3}, {a: 2} ], 'same deep members');\n *\n * @name sameDeepMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameDeepMembers = function (set1, set2, msg) {\n new Assertion(set1, msg).to.have.same.deep.members(set2);\n }\n\n /**\n * ### .includeMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset`.\n * Order is not taken into account.\n *\n * assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');\n *\n * @name includeMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeMembers = function (superset, subset, msg) {\n new Assertion(superset, msg).to.include.members(subset);\n }\n\n /**\n * ### .includeDeepMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` - using deep equality checking.\n * Order is not taken into account.\n * Duplicates are ignored.\n *\n * assert.includeDeepMembers([ {a: 1}, {b: 2}, {c: 3} ], [ {b: 2}, {a: 1}, {b: 2} ], 'include deep members');\n *\n * @name includeDeepMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeDeepMembers = function (superset, subset, msg) {\n new Assertion(superset, msg).to.include.deep.members(subset);\n }\n\n /**\n * ### .oneOf(inList, list, [message])\n *\n * Asserts that non-object, non-array value `inList` appears in the flat array `list`.\n *\n * assert.oneOf(1, [ 2, 1 ], 'Not found in list');\n *\n * @name oneOf\n * @param {*} inList\n * @param {Array<*>} list\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.oneOf = function (inList, list, msg) {\n new Assertion(inList, msg).to.be.oneOf(list);\n }\n\n /**\n * ### .changes(function, object, property)\n *\n * Asserts that a function changes the value of a property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 22 };\n * assert.changes(fn, obj, 'val');\n *\n * @name changes\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changes = function (fn, obj, prop) {\n new Assertion(fn).to.change(obj, prop);\n }\n\n /**\n * ### .doesNotChange(function, object, property)\n *\n * Asserts that a function does not changes the value of a property\n *\n * var obj = { val: 10 };\n * var fn = function() { console.log('foo'); };\n * assert.doesNotChange(fn, obj, 'val');\n *\n * @name doesNotChange\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotChange = function (fn, obj, prop) {\n new Assertion(fn).to.not.change(obj, prop);\n }\n\n /**\n * ### .increases(function, object, property)\n *\n * Asserts that a function increases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 13 };\n * assert.increases(fn, obj, 'val');\n *\n * @name increases\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increases = function (fn, obj, prop) {\n new Assertion(fn).to.increase(obj, prop);\n }\n\n /**\n * ### .doesNotIncrease(function, object, property)\n *\n * Asserts that a function does not increase object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 8 };\n * assert.doesNotIncrease(fn, obj, 'val');\n *\n * @name doesNotIncrease\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotIncrease = function (fn, obj, prop) {\n new Assertion(fn).to.not.increase(obj, prop);\n }\n\n /**\n * ### .decreases(function, object, property)\n *\n * Asserts that a function decreases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.decreases(fn, obj, 'val');\n *\n * @name decreases\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreases = function (fn, obj, prop) {\n new Assertion(fn).to.decrease(obj, prop);\n }\n\n /**\n * ### .doesNotDecrease(function, object, property)\n *\n * Asserts that a function does not decreases an object property\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * assert.doesNotDecrease(fn, obj, 'val');\n *\n * @name doesNotDecrease\n * @param {Function} modifier function\n * @param {Object} object\n * @param {String} property name\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotDecrease = function (fn, obj, prop) {\n new Assertion(fn).to.not.decrease(obj, prop);\n }\n\n /*!\n * ### .ifError(object)\n *\n * Asserts if value is not a false value, and throws if it is a true value.\n * This is added to allow for chai to be a drop-in replacement for Node's\n * assert class.\n *\n * var err = new Error('I am a custom error');\n * assert.ifError(err); // Rethrows err!\n *\n * @name ifError\n * @param {Object} object\n * @namespace Assert\n * @api public\n */\n\n assert.ifError = function (val) {\n if (val) {\n throw(val);\n }\n };\n\n /**\n * ### .isExtensible(object)\n *\n * Asserts that `object` is extensible (can have new properties added to it).\n *\n * assert.isExtensible({});\n *\n * @name isExtensible\n * @alias extensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isExtensible = function (obj, msg) {\n new Assertion(obj, msg).to.be.extensible;\n };\n\n /**\n * ### .isNotExtensible(object)\n *\n * Asserts that `object` is _not_ extensible.\n *\n * var nonExtensibleObject = Object.preventExtensions({});\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freese({});\n *\n * assert.isNotExtensible(nonExtensibleObject);\n * assert.isNotExtensible(sealedObject);\n * assert.isNotExtensible(frozenObject);\n *\n * @name isNotExtensible\n * @alias notExtensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotExtensible = function (obj, msg) {\n new Assertion(obj, msg).to.not.be.extensible;\n };\n\n /**\n * ### .isSealed(object)\n *\n * Asserts that `object` is sealed (cannot have new properties added to it\n * and its existing properties cannot be removed).\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.seal({});\n *\n * assert.isSealed(sealedObject);\n * assert.isSealed(frozenObject);\n *\n * @name isSealed\n * @alias sealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isSealed = function (obj, msg) {\n new Assertion(obj, msg).to.be.sealed;\n };\n\n /**\n * ### .isNotSealed(object)\n *\n * Asserts that `object` is _not_ sealed.\n *\n * assert.isNotSealed({});\n *\n * @name isNotSealed\n * @alias notSealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotSealed = function (obj, msg) {\n new Assertion(obj, msg).to.not.be.sealed;\n };\n\n /**\n * ### .isFrozen(object)\n *\n * Asserts that `object` is frozen (cannot have new properties added to it\n * and its existing properties cannot be modified).\n *\n * var frozenObject = Object.freeze({});\n * assert.frozen(frozenObject);\n *\n * @name isFrozen\n * @alias frozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isFrozen = function (obj, msg) {\n new Assertion(obj, msg).to.be.frozen;\n };\n\n /**\n * ### .isNotFrozen(object)\n *\n * Asserts that `object` is _not_ frozen.\n *\n * assert.isNotFrozen({});\n *\n * @name isNotFrozen\n * @alias notFrozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFrozen = function (obj, msg) {\n new Assertion(obj, msg).to.not.be.frozen;\n };\n\n /*!\n * Aliases.\n */\n\n (function alias(name, as){\n assert[as] = assert[name];\n return alias;\n })\n ('isOk', 'ok')\n ('isNotOk', 'notOk')\n ('throws', 'throw')\n ('throws', 'Throw')\n ('isExtensible', 'extensible')\n ('isNotExtensible', 'notExtensible')\n ('isSealed', 'sealed')\n ('isNotSealed', 'notSealed')\n ('isFrozen', 'frozen')\n ('isNotFrozen', 'notFrozen');\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n chai.expect = function (val, message) {\n return new chai.Assertion(val, message);\n };\n\n /**\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace Expect\n * @api public\n */\n\n chai.expect.fail = function (actual, expected, message, operator) {\n message = message || 'expect.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, chai.expect.fail);\n };\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer \n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n var Assertion = chai.Assertion;\n\n function loadShould () {\n // explicitly define this method as function as to have it's name to include as `ssfi`\n function shouldGetter() {\n if (this instanceof String || this instanceof Number || this instanceof Boolean ) {\n return new Assertion(this.valueOf(), null, shouldGetter);\n }\n return new Assertion(this, null, shouldGetter);\n }\n function shouldSetter(value) {\n // See https://github.com/chaijs/chai/issues/86: this makes\n // `whatever.should = someValue` actually set `someValue`, which is\n // especially useful for `global.should = require('chai').should()`.\n //\n // Note that we have to use [[DefineProperty]] instead of [[Put]]\n // since otherwise we would trigger this very setter!\n Object.defineProperty(this, 'should', {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n }\n // modify Object.prototype to have `should`\n Object.defineProperty(Object.prototype, 'should', {\n set: shouldSetter\n , get: shouldGetter\n , configurable: true\n });\n\n var should = {};\n\n /**\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace Should\n * @api public\n */\n\n should.fail = function (actual, expected, message, operator) {\n message = message || 'should.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, should.fail);\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * should.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])\n *\n * Asserts that `function` will throw an error that is an instance of\n * `constructor`, or alternately that it will throw an error with message\n * matching `regexp`.\n *\n * should.throw(fn, 'function throws a reference error');\n * should.throw(fn, /function throws a reference error/);\n * should.throw(fn, ReferenceError);\n * should.throw(fn, ReferenceError, 'function throws a reference error');\n * should.throw(fn, ReferenceError, /function throws a reference error/);\n *\n * @name throw\n * @alias Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.Throw(errt, errs);\n };\n\n /**\n * ### .exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi';\n *\n * should.exist(foo, 'foo exists');\n *\n * @name exist\n * @namespace Should\n * @api public\n */\n\n should.exist = function (val, msg) {\n new Assertion(val, msg).to.exist;\n }\n\n // negation\n should.not = {}\n\n /**\n * ### .not.equal(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * should.not.equal(3, 4, 'these numbers are not equal');\n *\n * @name not.equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.not.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.not.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/regexp], [message])\n *\n * Asserts that `function` will _not_ throw an error that is an instance of\n * `constructor`, or alternately that it will not throw an error with message\n * matching `regexp`.\n *\n * should.not.throw(fn, Error, 'function does not throw');\n *\n * @name not.throw\n * @alias not.Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.not.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.not.Throw(errt, errs);\n };\n\n /**\n * ### .not.exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var bar = null;\n *\n * should.not.exist(bar, 'bar does not exist');\n *\n * @name not.exist\n * @namespace Should\n * @api public\n */\n\n should.not.exist = function (val, msg) {\n new Assertion(val, msg).to.not.exist;\n }\n\n should['throw'] = should['Throw'];\n should.not['throw'] = should.not['Throw'];\n\n return should;\n };\n\n chai.should = loadShould;\n chai.Should = loadShould;\n};\n","/*!\n * Chai - addChainingMethod utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar transferFlags = require('./transferFlags');\nvar flag = require('./flag');\nvar config = require('../config');\n\n/*!\n * Module variables\n */\n\n// Check whether `__proto__` is supported\nvar hasProtoSupport = '__proto__' in Object;\n\n// Without `__proto__` support, this module will need to add properties to a function.\n// However, some Function.prototype methods cannot be overwritten,\n// and there seems no easy cross-platform way to detect them (@see chaijs/chai/issues/69).\nvar excludeNames = /^(?:length|name|arguments|caller)$/;\n\n// Cache `Function` properties\nvar call = Function.prototype.call,\n apply = Function.prototype.apply;\n\n/**\n * ### addChainableMethod (ctx, name, method, chainingBehavior)\n *\n * Adds a method to an object, such that the method can also be chained.\n *\n * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);\n *\n * The result can then be used as both a method assertion, executing both `method` and\n * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.\n *\n * expect(fooStr).to.be.foo('bar');\n * expect(fooStr).to.be.foo.equal('foo');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for `name`, when called\n * @param {Function} chainingBehavior function to be called every time the property is accessed\n * @namespace Utils\n * @name addChainableMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method, chainingBehavior) {\n if (typeof chainingBehavior !== 'function') {\n chainingBehavior = function () { };\n }\n\n var chainableBehavior = {\n method: method\n , chainingBehavior: chainingBehavior\n };\n\n // save the methods so we can overwrite them later, if we need to.\n if (!ctx.__methods) {\n ctx.__methods = {};\n }\n ctx.__methods[name] = chainableBehavior;\n\n Object.defineProperty(ctx, name,\n { get: function () {\n chainableBehavior.chainingBehavior.call(this);\n\n var assert = function assert() {\n var old_ssfi = flag(this, 'ssfi');\n if (old_ssfi && config.includeStack === false)\n flag(this, 'ssfi', assert);\n var result = chainableBehavior.method.apply(this, arguments);\n return result === undefined ? this : result;\n };\n\n // Use `__proto__` if available\n if (hasProtoSupport) {\n // Inherit all properties from the object by replacing the `Function` prototype\n var prototype = assert.__proto__ = Object.create(this);\n // Restore the `call` and `apply` methods from `Function`\n prototype.call = call;\n prototype.apply = apply;\n }\n // Otherwise, redefine all properties (slow!)\n else {\n var asserterNames = Object.getOwnPropertyNames(ctx);\n asserterNames.forEach(function (asserterName) {\n if (!excludeNames.test(asserterName)) {\n var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);\n Object.defineProperty(assert, asserterName, pd);\n }\n });\n }\n\n transferFlags(this, assert);\n return assert;\n }\n , configurable: true\n });\n};\n","/*!\n * Chai - addMethod utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\nvar config = require('../config');\n\n/**\n * ### .addMethod (ctx, name, method)\n *\n * Adds a method to the prototype of an object.\n *\n * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(fooStr).to.be.foo('bar');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for name\n * @namespace Utils\n * @name addMethod\n * @api public\n */\nvar flag = require('./flag');\n\nmodule.exports = function (ctx, name, method) {\n ctx[name] = function () {\n var old_ssfi = flag(this, 'ssfi');\n if (old_ssfi && config.includeStack === false)\n flag(this, 'ssfi', ctx[name]);\n var result = method.apply(this, arguments);\n return result === undefined ? this : result;\n };\n};\n","/*!\n * Chai - addProperty utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\nvar config = require('../config');\nvar flag = require('./flag');\n\n/**\n * ### addProperty (ctx, name, getter)\n *\n * Adds a property to the prototype of an object.\n *\n * utils.addProperty(chai.Assertion.prototype, 'foo', function () {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.instanceof(Foo);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.foo;\n *\n * @param {Object} ctx object to which the property is added\n * @param {String} name of property to add\n * @param {Function} getter function to be used for name\n * @namespace Utils\n * @name addProperty\n * @api public\n */\n\nmodule.exports = function (ctx, name, getter) {\n Object.defineProperty(ctx, name,\n { get: function addProperty() {\n var old_ssfi = flag(this, 'ssfi');\n if (old_ssfi && config.includeStack === false)\n flag(this, 'ssfi', addProperty);\n\n var result = getter.call(this);\n return result === undefined ? this : result;\n }\n , configurable: true\n });\n};\n","/*!\n * Chai - expectTypes utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### expectTypes(obj, types)\n *\n * Ensures that the object being tested against is of a valid type.\n *\n * utils.expectTypes(this, ['array', 'object', 'string']);\n *\n * @param {Mixed} obj constructed Assertion\n * @param {Array} type A list of allowed types for this assertion\n * @namespace Utils\n * @name expectTypes\n * @api public\n */\n\nvar AssertionError = require('assertion-error');\nvar flag = require('./flag');\nvar type = require('type-detect');\n\nmodule.exports = function (obj, types) {\n var obj = flag(obj, 'object');\n types = types.map(function (t) { return t.toLowerCase(); });\n types.sort();\n\n // Transforms ['lorem', 'ipsum'] into 'a lirum, or an ipsum'\n var str = types.map(function (t, index) {\n var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';\n var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';\n return or + art + ' ' + t;\n }).join(', ');\n\n if (!types.some(function (expected) { return type(obj) === expected; })) {\n throw new AssertionError(\n 'object tested must be ' + str + ', but ' + type(obj) + ' given'\n );\n }\n};\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### flag(object, key, [value])\n *\n * Get or set a flag value on an object. If a\n * value is provided it will be set, else it will\n * return the currently set value or `undefined` if\n * the value is not set.\n *\n * utils.flag(this, 'foo', 'bar'); // setter\n * utils.flag(this, 'foo'); // getter, returns `bar`\n *\n * @param {Object} object constructed Assertion\n * @param {String} key\n * @param {Mixed} value (optional)\n * @namespace Utils\n * @name flag\n * @api private\n */\n\nmodule.exports = function (obj, key, value) {\n var flags = obj.__flags || (obj.__flags = Object.create(null));\n if (arguments.length === 3) {\n flags[key] = value;\n } else {\n return flags[key];\n }\n};\n","/*!\n * Chai - getActual utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * # getActual(object, [actual])\n *\n * Returns the `actual` value for an Assertion\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getActual\n */\n\nmodule.exports = function (obj, args) {\n return args.length > 4 ? args[4] : obj._obj;\n};\n","/*!\n * Chai - getEnumerableProperties utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### .getEnumerableProperties(object)\n *\n * This allows the retrieval of enumerable property names of an object,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getEnumerableProperties\n * @api public\n */\n\nmodule.exports = function getEnumerableProperties(object) {\n var result = [];\n for (var name in object) {\n result.push(name);\n }\n return result;\n};\n","/*!\n * Chai - message composition utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar flag = require('./flag')\n , getActual = require('./getActual')\n , inspect = require('./inspect')\n , objDisplay = require('./objDisplay');\n\n/**\n * ### .getMessage(object, message, negateMessage)\n *\n * Construct the error message based on flags\n * and template tags. Template tags will return\n * a stringified inspection of the object referenced.\n *\n * Message template tags:\n * - `#{this}` current asserted object\n * - `#{act}` actual value\n * - `#{exp}` expected value\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getMessage\n * @api public\n */\n\nmodule.exports = function (obj, args) {\n var negate = flag(obj, 'negate')\n , val = flag(obj, 'object')\n , expected = args[3]\n , actual = getActual(obj, args)\n , msg = negate ? args[2] : args[1]\n , flagMsg = flag(obj, 'message');\n\n if(typeof msg === \"function\") msg = msg();\n msg = msg || '';\n msg = msg\n .replace(/#\\{this\\}/g, function () { return objDisplay(val); })\n .replace(/#\\{act\\}/g, function () { return objDisplay(actual); })\n .replace(/#\\{exp\\}/g, function () { return objDisplay(expected); });\n\n return flagMsg ? flagMsg + ': ' + msg : msg;\n};\n","/*!\n * Chai - getName utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * # getName(func)\n *\n * Gets the name of a function, in a cross-browser way.\n *\n * @param {Function} a function (usually a constructor)\n * @namespace Utils\n * @name getName\n */\n\nmodule.exports = function (func) {\n if (func.name) return func.name;\n\n var match = /^\\s?function ([^(]*)\\(/.exec(func);\n return match && match[1] ? match[1] : \"\";\n};\n","/*!\n * Chai - getPathInfo utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\nvar hasProperty = require('./hasProperty');\n\n/**\n * ### .getPathInfo(path, object)\n *\n * This allows the retrieval of property info in an\n * object given a string path.\n *\n * The path info consists of an object with the\n * following properties:\n *\n * * parent - The parent object of the property referenced by `path`\n * * name - The name of the final property, a number if it was an array indexer\n * * value - The value of the property, if it exists, otherwise `undefined`\n * * exists - Whether the property exists or not\n *\n * @param {String} path\n * @param {Object} object\n * @returns {Object} info\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nmodule.exports = function getPathInfo(path, obj) {\n var parsed = parsePath(path),\n last = parsed[parsed.length - 1];\n\n var info = {\n parent: parsed.length > 1 ? _getPathValue(parsed, obj, parsed.length - 1) : obj,\n name: last.p || last.i,\n value: _getPathValue(parsed, obj)\n };\n info.exists = hasProperty(info.name, info.parent);\n\n return info;\n};\n\n\n/*!\n * ## parsePath(path)\n *\n * Helper function used to parse string object\n * paths. Use in conjunction with `_getPathValue`.\n *\n * var parsed = parsePath('myobject.property.subprop');\n *\n * ### Paths:\n *\n * * Can be as near infinitely deep and nested\n * * Arrays are also valid using the formal `myobject.document[3].property`.\n * * Literal dots and brackets (not delimiter) must be backslash-escaped.\n *\n * @param {String} path\n * @returns {Object} parsed\n * @api private\n */\n\nfunction parsePath (path) {\n var str = path.replace(/([^\\\\])\\[/g, '$1.[')\n , parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n return parts.map(function (value) {\n var re = /^\\[(\\d+)\\]$/\n , mArr = re.exec(value);\n if (mArr) return { i: parseFloat(mArr[1]) };\n else return { p: value.replace(/\\\\([.\\[\\]])/g, '$1') };\n });\n}\n\n\n/*!\n * ## _getPathValue(parsed, obj)\n *\n * Helper companion function for `.parsePath` that returns\n * the value located at the parsed address.\n *\n * var value = getPathValue(parsed, obj);\n *\n * @param {Object} parsed definition from `parsePath`.\n * @param {Object} object to search against\n * @param {Number} object to search against\n * @returns {Object|Undefined} value\n * @api private\n */\n\nfunction _getPathValue (parsed, obj, index) {\n var tmp = obj\n , res;\n\n index = (index === undefined ? parsed.length : index);\n\n for (var i = 0, l = index; i < l; i++) {\n var part = parsed[i];\n if (tmp) {\n if ('undefined' !== typeof part.p)\n tmp = tmp[part.p];\n else if ('undefined' !== typeof part.i)\n tmp = tmp[part.i];\n if (i == (l - 1)) res = tmp;\n } else {\n res = undefined;\n }\n }\n return res;\n}\n","/*!\n * Chai - getPathValue utility\n * Copyright(c) 2012-2014 Jake Luer \n * @see https://github.com/logicalparadox/filtr\n * MIT Licensed\n */\n\nvar getPathInfo = require('./getPathInfo');\n\n/**\n * ### .getPathValue(path, object)\n *\n * This allows the retrieval of values in an\n * object given a string path.\n *\n * var obj = {\n * prop1: {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n * , prop2: {\n * arr: [ { nested: 'Universe' } ]\n * , str: 'Hello again!'\n * }\n * }\n *\n * The following would be the results.\n *\n * getPathValue('prop1.str', obj); // Hello\n * getPathValue('prop1.att[2]', obj); // b\n * getPathValue('prop2.arr[0].nested', obj); // Universe\n *\n * @param {String} path\n * @param {Object} object\n * @returns {Object} value or `undefined`\n * @namespace Utils\n * @name getPathValue\n * @api public\n */\nmodule.exports = function(path, obj) {\n var info = getPathInfo(path, obj);\n return info.value;\n};\n","/*!\n * Chai - getProperties utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### .getProperties(object)\n *\n * This allows the retrieval of property names of an object, enumerable or not,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getProperties\n * @api public\n */\n\nmodule.exports = function getProperties(object) {\n var result = Object.getOwnPropertyNames(object);\n\n function addProperty(property) {\n if (result.indexOf(property) === -1) {\n result.push(property);\n }\n }\n\n var proto = Object.getPrototypeOf(object);\n while (proto !== null) {\n Object.getOwnPropertyNames(proto).forEach(addProperty);\n proto = Object.getPrototypeOf(proto);\n }\n\n return result;\n};\n","/*!\n * Chai - hasProperty utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\nvar type = require('type-detect');\n\n/**\n * ### .hasProperty(object, name)\n *\n * This allows checking whether an object has\n * named property or numeric array index.\n *\n * Basically does the same thing as the `in`\n * operator but works properly with natives\n * and null/undefined values.\n *\n * var obj = {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n *\n * The following would be the results.\n *\n * hasProperty('str', obj); // true\n * hasProperty('constructor', obj); // true\n * hasProperty('bar', obj); // false\n *\n * hasProperty('length', obj.str); // true\n * hasProperty(1, obj.str); // true\n * hasProperty(5, obj.str); // false\n *\n * hasProperty('length', obj.arr); // true\n * hasProperty(2, obj.arr); // true\n * hasProperty(3, obj.arr); // false\n *\n * @param {Objuect} object\n * @param {String|Number} name\n * @returns {Boolean} whether it exists\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nvar literals = {\n 'number': Number\n , 'string': String\n};\n\nmodule.exports = function hasProperty(name, obj) {\n var ot = type(obj);\n\n // Bad Object, obviously no props at all\n if(ot === 'null' || ot === 'undefined')\n return false;\n\n // The `in` operator does not work with certain literals\n // box these before the check\n if(literals[ot] && typeof obj !== 'object')\n obj = new literals[ot](obj);\n\n return name in obj;\n};\n","/*!\n * chai\n * Copyright(c) 2011 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Main exports\n */\n\nvar exports = module.exports = {};\n\n/*!\n * test utility\n */\n\nexports.test = require('./test');\n\n/*!\n * type utility\n */\n\nexports.type = require('type-detect');\n\n/*!\n * expectTypes utility\n */\nexports.expectTypes = require('./expectTypes');\n\n/*!\n * message utility\n */\n\nexports.getMessage = require('./getMessage');\n\n/*!\n * actual utility\n */\n\nexports.getActual = require('./getActual');\n\n/*!\n * Inspect util\n */\n\nexports.inspect = require('./inspect');\n\n/*!\n * Object Display util\n */\n\nexports.objDisplay = require('./objDisplay');\n\n/*!\n * Flag utility\n */\n\nexports.flag = require('./flag');\n\n/*!\n * Flag transferring utility\n */\n\nexports.transferFlags = require('./transferFlags');\n\n/*!\n * Deep equal utility\n */\n\nexports.eql = require('deep-eql');\n\n/*!\n * Deep path value\n */\n\nexports.getPathValue = require('./getPathValue');\n\n/*!\n * Deep path info\n */\n\nexports.getPathInfo = require('./getPathInfo');\n\n/*!\n * Check if a property exists\n */\n\nexports.hasProperty = require('./hasProperty');\n\n/*!\n * Function name\n */\n\nexports.getName = require('./getName');\n\n/*!\n * add Property\n */\n\nexports.addProperty = require('./addProperty');\n\n/*!\n * add Method\n */\n\nexports.addMethod = require('./addMethod');\n\n/*!\n * overwrite Property\n */\n\nexports.overwriteProperty = require('./overwriteProperty');\n\n/*!\n * overwrite Method\n */\n\nexports.overwriteMethod = require('./overwriteMethod');\n\n/*!\n * Add a chainable method\n */\n\nexports.addChainableMethod = require('./addChainableMethod');\n\n/*!\n * Overwrite chainable method\n */\n\nexports.overwriteChainableMethod = require('./overwriteChainableMethod');\n","// This is (almost) directly from Node.js utils\n// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js\n\nvar getName = require('./getName');\nvar getProperties = require('./getProperties');\nvar getEnumerableProperties = require('./getEnumerableProperties');\n\nmodule.exports = inspect;\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Boolean} showHidden Flag that shows hidden (not enumerable)\n * properties of objects.\n * @param {Number} depth Depth in which to descend in object. Default is 2.\n * @param {Boolean} colors Flag to turn on ANSI escape codes to color the\n * output. Default is false (no coloring).\n * @namespace Utils\n * @name inspect\n */\nfunction inspect(obj, showHidden, depth, colors) {\n var ctx = {\n showHidden: showHidden,\n seen: [],\n stylize: function (str) { return str; }\n };\n return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));\n}\n\n// Returns true if object is a DOM element.\nvar isDOMElement = function (object) {\n if (typeof HTMLElement === 'object') {\n return object instanceof HTMLElement;\n } else {\n return object &&\n typeof object === 'object' &&\n object.nodeType === 1 &&\n typeof object.nodeName === 'string';\n }\n};\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (value && typeof value.inspect === 'function' &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes);\n if (typeof ret !== 'string') {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // If this is a DOM element, try to get the outer HTML.\n if (isDOMElement(value)) {\n if ('outerHTML' in value) {\n return value.outerHTML;\n // This value does not have an outerHTML attribute,\n // it could still be an XML element\n } else {\n // Attempt to serialize it\n try {\n if (document.xmlVersion) {\n var xmlSerializer = new XMLSerializer();\n return xmlSerializer.serializeToString(value);\n } else {\n // Firefox 11- do not support outerHTML\n // It does, however, support innerHTML\n // Use the following to render the element\n var ns = \"http://www.w3.org/1999/xhtml\";\n var container = document.createElementNS(ns, '_');\n\n container.appendChild(value.cloneNode(false));\n html = container.innerHTML\n .replace('><', '>' + value.innerHTML + '<');\n container.innerHTML = '';\n return html;\n }\n } catch (err) {\n // This could be a non-native DOM implementation,\n // continue with the normal flow:\n // printing the element as if it is an object.\n }\n }\n }\n\n // Look up the keys of the object.\n var visibleKeys = getEnumerableProperties(value);\n var keys = ctx.showHidden ? getProperties(value) : visibleKeys;\n\n // Some type of object without properties can be shortcutted.\n // In IE, errors have a single `stack` property, or if they are vanilla `Error`,\n // a `stack` plus `description` property; ignore those for consistency.\n if (keys.length === 0 || (isError(value) && (\n (keys.length === 1 && keys[0] === 'stack') ||\n (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')\n ))) {\n if (typeof value === 'function') {\n var name = getName(value);\n var nameSuffix = name ? ': ' + name : '';\n return ctx.stylize('[Function' + nameSuffix + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (typeof value === 'function') {\n var name = getName(value);\n var nameSuffix = name ? ': ' + name : '';\n base = ' [Function' + nameSuffix + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n return formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n switch (typeof value) {\n case 'undefined':\n return ctx.stylize('undefined', 'undefined');\n\n case 'string':\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n\n case 'number':\n if (value === 0 && (1/value) === -Infinity) {\n return ctx.stylize('-0', 'number');\n }\n return ctx.stylize('' + value, 'number');\n\n case 'boolean':\n return ctx.stylize('' + value, 'boolean');\n }\n // For some reason typeof null is \"object\", so special case here.\n if (value === null) {\n return ctx.stylize('null', 'null');\n }\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (Object.prototype.hasOwnProperty.call(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str;\n if (value.__lookupGetter__) {\n if (value.__lookupGetter__(key)) {\n if (value.__lookupSetter__(key)) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (value.__lookupSetter__(key)) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n }\n if (visibleKeys.indexOf(key) < 0) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(value[key]) < 0) {\n if (recurseTimes === null) {\n str = formatValue(ctx, value[key], null);\n } else {\n str = formatValue(ctx, value[key], recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (typeof name === 'undefined') {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\nfunction isArray(ar) {\n return Array.isArray(ar) ||\n (typeof ar === 'object' && objectToString(ar) === '[object Array]');\n}\n\nfunction isRegExp(re) {\n return typeof re === 'object' && objectToString(re) === '[object RegExp]';\n}\n\nfunction isDate(d) {\n return typeof d === 'object' && objectToString(d) === '[object Date]';\n}\n\nfunction isError(e) {\n return typeof e === 'object' && objectToString(e) === '[object Error]';\n}\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar inspect = require('./inspect');\nvar config = require('../config');\n\n/**\n * ### .objDisplay (object)\n *\n * Determines if an object or an array matches\n * criteria to be inspected in-line for error\n * messages or should be truncated.\n *\n * @param {Mixed} javascript object to inspect\n * @name objDisplay\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function (obj) {\n var str = inspect(obj)\n , type = Object.prototype.toString.call(obj);\n\n if (config.truncateThreshold && str.length >= config.truncateThreshold) {\n if (type === '[object Function]') {\n return !obj.name || obj.name === ''\n ? '[Function]'\n : '[Function: ' + obj.name + ']';\n } else if (type === '[object Array]') {\n return '[ Array(' + obj.length + ') ]';\n } else if (type === '[object Object]') {\n var keys = Object.keys(obj)\n , kstr = keys.length > 2\n ? keys.splice(0, 2).join(', ') + ', ...'\n : keys.join(', ');\n return '{ Object (' + kstr + ') }';\n } else {\n return str;\n }\n } else {\n return str;\n }\n};\n","/*!\n * Chai - overwriteChainableMethod utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### overwriteChainableMethod (ctx, name, method, chainingBehavior)\n *\n * Overwites an already existing chainable method\n * and provides access to the previous function or\n * property. Must return functions to be used for\n * name.\n *\n * utils.overwriteChainableMethod(chai.Assertion.prototype, 'length',\n * function (_super) {\n * }\n * , function (_super) {\n * }\n * );\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteChainableMethod('foo', fn, fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.have.length(3);\n * expect(myFoo).to.have.length.above(3);\n *\n * @param {Object} ctx object whose method / property is to be overwritten\n * @param {String} name of method / property to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @param {Function} chainingBehavior function that returns a function to be used for property\n * @namespace Utils\n * @name overwriteChainableMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method, chainingBehavior) {\n var chainableBehavior = ctx.__methods[name];\n\n var _chainingBehavior = chainableBehavior.chainingBehavior;\n chainableBehavior.chainingBehavior = function () {\n var result = chainingBehavior(_chainingBehavior).call(this);\n return result === undefined ? this : result;\n };\n\n var _method = chainableBehavior.method;\n chainableBehavior.method = function () {\n var result = method(_method).apply(this, arguments);\n return result === undefined ? this : result;\n };\n};\n","/*!\n * Chai - overwriteMethod utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### overwriteMethod (ctx, name, fn)\n *\n * Overwites an already existing method and provides\n * access to previous function. Must return function\n * to be used for name.\n *\n * utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {\n * return function (str) {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.value).to.equal(str);\n * } else {\n * _super.apply(this, arguments);\n * }\n * }\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.equal('bar');\n *\n * @param {Object} ctx object whose method is to be overwritten\n * @param {String} name of method to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @namespace Utils\n * @name overwriteMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method) {\n var _method = ctx[name]\n , _super = function () { return this; };\n\n if (_method && 'function' === typeof _method)\n _super = _method;\n\n ctx[name] = function () {\n var result = method(_super).apply(this, arguments);\n return result === undefined ? this : result;\n }\n};\n","/*!\n * Chai - overwriteProperty utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### overwriteProperty (ctx, name, fn)\n *\n * Overwites an already existing property getter and provides\n * access to previous value. Must return function to use as getter.\n *\n * utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {\n * return function () {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.name).to.equal('bar');\n * } else {\n * _super.call(this);\n * }\n * }\n * });\n *\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.ok;\n *\n * @param {Object} ctx object whose property is to be overwritten\n * @param {String} name of property to overwrite\n * @param {Function} getter function that returns a getter function to be used for name\n * @namespace Utils\n * @name overwriteProperty\n * @api public\n */\n\nmodule.exports = function (ctx, name, getter) {\n var _get = Object.getOwnPropertyDescriptor(ctx, name)\n , _super = function () {};\n\n if (_get && 'function' === typeof _get.get)\n _super = _get.get\n\n Object.defineProperty(ctx, name,\n { get: function () {\n var result = getter(_super).call(this);\n return result === undefined ? this : result;\n }\n , configurable: true\n });\n};\n","/*!\n * Chai - test utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar flag = require('./flag');\n\n/**\n * # test(object, expression)\n *\n * Test and object for expression.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name test\n */\n\nmodule.exports = function (obj, args) {\n var negate = flag(obj, 'negate')\n , expr = args[0];\n return negate ? !expr : expr;\n};\n","/*!\n * Chai - transferFlags utility\n * Copyright(c) 2012-2014 Jake Luer \n * MIT Licensed\n */\n\n/**\n * ### transferFlags(assertion, object, includeAll = true)\n *\n * Transfer all the flags for `assertion` to `object`. If\n * `includeAll` is set to `false`, then the base Chai\n * assertion flags (namely `object`, `ssfi`, and `message`)\n * will not be transferred.\n *\n *\n * var newAssertion = new Assertion();\n * utils.transferFlags(assertion, newAssertion);\n *\n * var anotherAsseriton = new Assertion(myObj);\n * utils.transferFlags(assertion, anotherAssertion, false);\n *\n * @param {Assertion} assertion the assertion to transfer the flags from\n * @param {Object} object the object to transfer the flags to; usually a new assertion\n * @param {Boolean} includeAll\n * @namespace Utils\n * @name transferFlags\n * @api private\n */\n\nmodule.exports = function (assertion, object, includeAll) {\n var flags = assertion.__flags || (assertion.__flags = Object.create(null));\n\n if (!object.__flags) {\n object.__flags = Object.create(null);\n }\n\n includeAll = arguments.length === 3 ? includeAll : true;\n\n for (var flag in flags) {\n if (includeAll ||\n (flag !== 'object' && flag !== 'ssfi' && flag != 'message')) {\n object.__flags[flag] = flags[flag];\n }\n }\n};\n","\"use strict\";\n\nfunction dedent(strings) {\n\n var raw = void 0;\n if (typeof strings === \"string\") {\n // dedent can be used as a plain function\n raw = [strings];\n } else {\n raw = strings.raw;\n }\n\n // first, perform interpolation\n var result = \"\";\n for (var i = 0; i < raw.length; i++) {\n result += raw[i].\n // join lines when there is a suppressed newline\n replace(/\\\\\\n[ \\t]*/g, \"\").\n\n // handle escaped backticks\n replace(/\\\\`/g, \"`\");\n\n if (i < (arguments.length <= 1 ? 0 : arguments.length - 1)) {\n result += arguments.length <= i + 1 ? undefined : arguments[i + 1];\n }\n }\n\n // now strip indentation\n var lines = result.split(\"\\n\");\n var mindent = null;\n lines.forEach(function (l) {\n var m = l.match(/^(\\s+)\\S+/);\n if (m) {\n var indent = m[1].length;\n if (!mindent) {\n // this is the first indented line\n mindent = indent;\n } else {\n mindent = Math.min(mindent, indent);\n }\n }\n });\n\n if (mindent !== null) {\n result = lines.map(function (l) {\n return l[0] === \" \" ? l.slice(mindent) : l;\n }).join(\"\\n\");\n }\n\n // dedent eats leading and trailing whitespace too\n result = result.trim();\n\n // handle escaped newlines at the end to ensure they don't get stripped too\n return result.replace(/\\\\n/g, \"\\n\");\n}\n\nif (typeof module !== \"undefined\") {\n module.exports = dedent;\n}\n","module.exports = require('./lib/eql');\n","/*!\n * deep-eql\n * Copyright(c) 2013 Jake Luer \n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar type = require('type-detect');\n\n/*!\n * Buffer.isBuffer browser shim\n */\n\nvar Buffer;\ntry { Buffer = require('buffer').Buffer; }\ncatch(ex) {\n Buffer = {};\n Buffer.isBuffer = function() { return false; }\n}\n\n/*!\n * Primary Export\n */\n\nmodule.exports = deepEqual;\n\n/**\n * Assert super-strict (egal) equality between\n * two objects of any type.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @param {Array} memoised (optional)\n * @return {Boolean} equal match\n */\n\nfunction deepEqual(a, b, m) {\n if (sameValue(a, b)) {\n return true;\n } else if ('date' === type(a)) {\n return dateEqual(a, b);\n } else if ('regexp' === type(a)) {\n return regexpEqual(a, b);\n } else if (Buffer.isBuffer(a)) {\n return bufferEqual(a, b);\n } else if ('arguments' === type(a)) {\n return argumentsEqual(a, b, m);\n } else if (!typeEqual(a, b)) {\n return false;\n } else if (('object' !== type(a) && 'object' !== type(b))\n && ('array' !== type(a) && 'array' !== type(b))) {\n return sameValue(a, b);\n } else {\n return objectEqual(a, b, m);\n }\n}\n\n/*!\n * Strict (egal) equality test. Ensures that NaN always\n * equals NaN and `-0` does not equal `+0`.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} equal match\n */\n\nfunction sameValue(a, b) {\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n return a !== a && b !== b;\n}\n\n/*!\n * Compare the types of two given objects and\n * return if they are equal. Note that an Array\n * has a type of `array` (not `object`) and arguments\n * have a type of `arguments` (not `array`/`object`).\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction typeEqual(a, b) {\n return type(a) === type(b);\n}\n\n/*!\n * Compare two Date objects by asserting that\n * the time values are equal using `saveValue`.\n *\n * @param {Date} a\n * @param {Date} b\n * @return {Boolean} result\n */\n\nfunction dateEqual(a, b) {\n if ('date' !== type(b)) return false;\n return sameValue(a.getTime(), b.getTime());\n}\n\n/*!\n * Compare two regular expressions by converting them\n * to string and checking for `sameValue`.\n *\n * @param {RegExp} a\n * @param {RegExp} b\n * @return {Boolean} result\n */\n\nfunction regexpEqual(a, b) {\n if ('regexp' !== type(b)) return false;\n return sameValue(a.toString(), b.toString());\n}\n\n/*!\n * Assert deep equality of two `arguments` objects.\n * Unfortunately, these must be sliced to arrays\n * prior to test to ensure no bad behavior.\n *\n * @param {Arguments} a\n * @param {Arguments} b\n * @param {Array} memoize (optional)\n * @return {Boolean} result\n */\n\nfunction argumentsEqual(a, b, m) {\n if ('arguments' !== type(b)) return false;\n a = [].slice.call(a);\n b = [].slice.call(b);\n return deepEqual(a, b, m);\n}\n\n/*!\n * Get enumerable properties of a given object.\n *\n * @param {Object} a\n * @return {Array} property names\n */\n\nfunction enumerable(a) {\n var res = [];\n for (var key in a) res.push(key);\n return res;\n}\n\n/*!\n * Simple equality for flat iterable objects\n * such as Arrays or Node.js buffers.\n *\n * @param {Iterable} a\n * @param {Iterable} b\n * @return {Boolean} result\n */\n\nfunction iterableEqual(a, b) {\n if (a.length !== b.length) return false;\n\n var i = 0;\n var match = true;\n\n for (; i < a.length; i++) {\n if (a[i] !== b[i]) {\n match = false;\n break;\n }\n }\n\n return match;\n}\n\n/*!\n * Extension to `iterableEqual` specifically\n * for Node.js Buffers.\n *\n * @param {Buffer} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction bufferEqual(a, b) {\n if (!Buffer.isBuffer(b)) return false;\n return iterableEqual(a, b);\n}\n\n/*!\n * Block for `objectEqual` ensuring non-existing\n * values don't get in.\n *\n * @param {Mixed} object\n * @return {Boolean} result\n */\n\nfunction isValue(a) {\n return a !== null && a !== undefined;\n}\n\n/*!\n * Recursively check the equality of two objects.\n * Once basic sameness has been established it will\n * defer to `deepEqual` for each enumerable key\n * in the object.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction objectEqual(a, b, m) {\n if (!isValue(a) || !isValue(b)) {\n return false;\n }\n\n if (a.prototype !== b.prototype) {\n return false;\n }\n\n var i;\n if (m) {\n for (i = 0; i < m.length; i++) {\n if ((m[i][0] === a && m[i][1] === b)\n || (m[i][0] === b && m[i][1] === a)) {\n return true;\n }\n }\n } else {\n m = [];\n }\n\n try {\n var ka = enumerable(a);\n var kb = enumerable(b);\n } catch (ex) {\n return false;\n }\n\n ka.sort();\n kb.sort();\n\n if (!iterableEqual(ka, kb)) {\n return false;\n }\n\n m.push([ a, b ]);\n\n var key;\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], m)) {\n return false;\n }\n }\n\n return true;\n}\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.5.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && typeof obj === 'object' && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nexports.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nexports.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nexports.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nexports.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {}\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support (#5572)\n // since Safari 10.1 shipped with fetch, we can use that to detect it\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage && localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs;\nvar dbContexts;\nvar toString = Object.prototype.toString;\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, 'readwrite');\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve) {\n deferredOperation.resolve = resolve;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n resolve(openreq.result);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + ' can\\'t be downgraded from version ' + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Initialize a singleton container for all running localForages.\n if (!dbContexts) {\n dbContexts = {};\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n var transaction = dbInfo.db.transaction(dbInfo.storeName, 'readwrite');\n var store = transaction.objectStore(dbInfo.storeName);\n var req = store.put(value, key);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var transaction = dbInfo.db.transaction(dbInfo.storeName, 'readwrite');\n var store = transaction.objectStore(dbInfo.storeName);\n\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var transaction = dbInfo.db.transaction(dbInfo.storeName, 'readwrite');\n var store = transaction.objectStore(dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n\n var advanced = false;\n var req = store.openCursor();\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);\n\n var req = store.openCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys\n};\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' (id INTEGER PRIMARY KEY, key unique, value)', [], function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n t.executeSql('SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n t.executeSql('INSERT OR REPLACE INTO ' + dbInfo.storeName + ' (key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n t.executeSql('SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n\n resolve(result);\n }, function (t, error) {\n\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n t.executeSql('SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1\n};\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = dbInfo.name + '/';\n\n if (dbInfo.storeName !== self._defaultConfig.storeName) {\n dbInfo.keyPrefix += dbInfo.storeName + '/';\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n if (localStorage.key(i).indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(localStorage.key(i).substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n // Default API, from Gaia/localStorage.\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2\n};\n\n// Custom drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar CustomDrivers = {};\n\nvar DriverType = {\n INDEXEDDB: 'asyncStorage',\n LOCALSTORAGE: 'localStorageWrapper',\n WEBSQL: 'webSQLStorage'\n};\n\nvar DefaultDriverOrder = [DriverType.INDEXEDDB, DriverType.WEBSQL, DriverType.LOCALSTORAGE];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'];\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nvar driverSupport = {};\n// Check to see if IndexedDB is available and if it is the latest\n// implementation; it's our preferred backend library. We use \"_spec_test\"\n// as the name of the database because it's not the one we'll operate on,\n// but it's useful to make sure its using the right spec.\n// See: https://github.com/mozilla/localForage/issues/128\ndriverSupport[DriverType.INDEXEDDB] = isIndexedDBValid();\n\ndriverSupport[DriverType.WEBSQL] = isWebSQLValid();\n\ndriverSupport[DriverType.LOCALSTORAGE] = isLocalStorageValid();\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var key in arg) {\n if (arg.hasOwnProperty(key)) {\n if (isArray(arg[key])) {\n arguments[0][key] = arg[key].slice();\n } else {\n arguments[0][key] = arg[key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nfunction isLibraryDriver(driverName) {\n for (var driver in DriverType) {\n if (DriverType.hasOwnProperty(driver) && DriverType[driver] === driverName) {\n return true;\n }\n }\n\n return false;\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n this.INDEXEDDB = DriverType.INDEXEDDB;\n this.LOCALSTORAGE = DriverType.LOCALSTORAGE;\n this.WEBSQL = DriverType.WEBSQL;\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n var namingError = new Error('Custom driver name already in use: ' + driverObject._driver);\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n if (isLibraryDriver(driverObject._driver)) {\n reject(namingError);\n return;\n }\n\n var customDriverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0; i < customDriverMethods.length; i++) {\n var customDriverMethod = customDriverMethods[i];\n if (!customDriverMethod || !driverObject[customDriverMethod] || typeof driverObject[customDriverMethod] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var supportPromise = Promise$1.resolve(true);\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n supportPromise = driverObject._support();\n } else {\n supportPromise = Promise$1.resolve(!!driverObject._support);\n }\n }\n\n supportPromise.then(function (supportResult) {\n driverSupport[driverName] = supportResult;\n CustomDrivers[driverName] = driverObject;\n resolve();\n }, reject);\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var self = this;\n var getDriverPromise = Promise$1.resolve().then(function () {\n if (isLibraryDriver(driverName)) {\n switch (driverName) {\n case self.INDEXEDDB:\n return asyncStorage;\n case self.LOCALSTORAGE:\n return localStorageWrapper;\n case self.WEBSQL:\n return webSQLStorage;\n }\n } else if (CustomDrivers[driverName]) {\n return CustomDrivers[driverName];\n } else {\n throw new Error('Driver not found.');\n }\n });\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!driverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0; i < LibraryMethods.length; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});","const initial = require('./problems/initial');\nconst arrays = require('./problems/arrays');\n\nmodule.exports = {\n initial: initial,\n arrays: arrays\n};\n","module.exports = [\n {\n name: 'Access Array by index (first)',\n time: 10,\n prompt: 'Return the first value of the Array',\n given: `const fruits = ['apple', 'banana'];\\r`,\n answer: `const fruits = ['apple', 'banana'];\n return fruits[0];`,\n tests: [\n {\n name: 'Correct output',\n test: 'assert.deepEqual(output, \\'apple\\') === undefined'\n },\n {\n name: 'Returns a String',\n test: 'assert.isString(output) === undefined'\n }\n ]\n },\n {\n name: 'Access Array by index (last)',\n time: 10,\n prompt: 'Return the last value of the Array',\n given: `const fruits = ['apple', 'banana', 'orange'];\\r`,\n answer: `const fruits = ['apple', 'banana', 'orange'];\n return fruits[fruits.length - 1];`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, 'orange') === undefined;`\n },\n {\n name: 'Returns a String',\n test: `assert.isString(output) === undefined;`\n }\n ]\n },\n {\n name: 'Access Array by index (second)',\n time: 10,\n prompt: 'Return the second value of the Array',\n given: `const fruits = ['apple', 'banana'];\\r`,\n answer: `const fruits = ['apple', 'banana'];\n return fruits[1];`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, 'banana') === undefined;`\n },\n {\n name: 'Returns a String',\n test: `assert.isString(output) === undefined;`\n }\n ]\n },\n {\n name: 'Array.forEach()',\n time: 20,\n prompt: 'Loop over the array, add an \\'x\\' to the end of each name, push each fruit into a new array, then return the new array.',\n given: `const fruits = ['apple', 'banana'];\\r`,\n answer: `const fruits = ['apple', 'banana'];\n const newFruits = [];\n fruits.forEach(function(item) {\n newFruits.push(item+'x');\n });\n return newFruits;`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, ['applex', 'bananax']) === undefined;`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 2 items',\n test: `assert.lengthOf(output, 2) === undefined;`\n }\n ]\n },\n {\n name: 'Array.push()',\n time: 10,\n prompt: `Add 'orange' to the end of the 'fruits' array and return 'fruits'.`,\n given: `const fruits = ['apple', 'banana'];\\r`,\n answer: `const fruits = ['apple', 'banana'];\n fruits.push('orange');\n return fruits;`,\n tests: [\n {\n name: 'Correct output',\n test: `(assert.deepEqual(output, ['apple', 'banana', 'orange']) === undefined);`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 3 items',\n test: `assert.lengthOf(output, 3) === undefined;`\n }\n ]\n },\n {\n name: 'Array.shift()',\n time: 10,\n prompt: `Remove 'apple' from the front of the 'fruits' array and return 'fruits'.`,\n given: `const fruits = ['apple', 'banana', 'orange'];\\r`,\n answer: `const fruits = ['apple', 'banana', 'orange'];\n fruits.shift();\n return fruits;`,\n tests: [\n {\n name: 'Output must be correct',\n test: `assert.deepEqual(output, ['banana', 'orange']) === undefined;`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 2 items',\n test: `assert.lengthOf(output, 2) === undefined;`\n }\n ]\n },\n {\n name: 'Array.unshift()',\n time: 10,\n prompt: `Add 'strawberry' to the front of the 'fruits' array and return 'fruits'.`,\n given: `const fruits = ['apple', 'banana', 'orange'];\\r`,\n answer: `const fruits = ['apple', 'banana', 'orange'];\n fruits.unshift('strawberry');\n return fruits;`,\n tests: [\n {\n name: 'Output must be correct',\n test: `(assert.deepEqual(output, [\n 'strawberry',\n 'apple',\n 'banana',\n 'orange'\n ]) === undefined)`\n },\n {\n name: 'Must return an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 4 items',\n test: `assert.lengthOf(output, 4) === undefined;`\n }\n ]\n },\n {\n name: 'Array.indexOf()',\n time: 10,\n prompt: `Return the index of 'banana' in the Array.`,\n given: `const fruits = ['strawberry', 'banana', 'mango'];\\r`,\n answer: `const fruits = ['strawberry', 'banana', 'mango'];\n const ind = fruits.indexOf('banana');\n return ind;`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, 1) === undefined;`\n },\n {\n name: 'Returns a Number',\n test: `assert.isNumber(output) === undefined;`\n }\n ]\n },\n {\n name: 'Array.concat()',\n time: 10,\n prompt: `Merge the two arrays using Array's 'concat()' method. Return the resulting array.`,\n given: `const fruits = ['strawberry', 'banana'];\\rconst otherFruits = ['pear','peach'];\\r`,\n answer: `const fruits = ['strawberry', 'banana'];\n const otherFruits = ['pear','peach'];\n const allTheFruits = fruits.concat(otherFruits);\n return allTheFruits;\\r`,\n tests: [\n {\n name: 'Correct output',\n test: `(assert.deepEqual(output, [\n 'strawberry',\n 'banana',\n 'pear',\n 'peach'\n ]) === undefined\n );`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 4 items',\n test: `assert.lengthOf(output, 4) === undefined;`\n }\n ]\n },\n {\n name: 'Array.join()',\n time: 10,\n prompt: `Mix the two flavors with a '-' using Array's 'join' method. Return the resulting hybrid flavor.`,\n given: `const fruits = ['strawberry', 'banana'];\\r`,\n answer: `const fruits = ['strawberry', 'banana'];\n const hybrid = fruits.join('-');\n return hybrid;\\r`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, 'strawberry-banana') === undefined;`\n },\n {\n name: 'Returns a String',\n test: `assert.isString(output) === undefined;`\n }\n ]\n },\n {\n name: 'Array.slice()',\n time: 20,\n prompt: `Return just the citrus fruits from the 'fruits' array using 'Array.slice()'`,\n given: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\\r`,\n answer: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\n const citrus = fruits.slice(1, 3);\n return citrus;`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, ['orange', 'lemon']) === undefined;`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 2 items',\n test: `assert.lengthOf(output, 2) === undefined;`\n }\n ]\n },\n {\n name: 'Array.reverse()',\n time: 10,\n prompt: `Reverse the order of the 'fruit' array using 'Array.reverse()'`,\n given: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\\r`,\n answer: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\n const stiurf = fruits.reverse();\n return stiurf;`,\n tests: [\n {\n name: 'Correct output',\n test: `(assert.deepEqual(output, [\n 'banana',\n 'lemon',\n 'orange',\n 'strawberry'\n ]) === undefined);`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 4 items',\n test: `assert.lengthOf(output, 4) === undefined;`\n },\n {\n name: `First item is 'banana'`,\n test: `assert.deepEqual(output[0], 'banana') === undefined;`\n }\n ]\n },\n {\n name: 'Array.sort()',\n time: 10,\n prompt: `Return the 'fruits' Array after sorting them using 'Array.sort()'.`,\n given: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\\r`,\n answer: `const fruits = ['strawberry', 'orange', 'lemon', 'banana'];\n const orderlyFruit = fruits.sort();\n return orderlyFruit;`,\n tests: [\n {\n name: 'Correct output',\n test: `(assert.deepEqual(output, [\n 'banana',\n 'lemon',\n 'orange',\n 'strawberry'\n ]) === undefined);`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 4 items',\n test: `assert.lengthOf(output, 4) === undefined;`\n },\n {\n name: `First item is 'banana'`,\n test: `assert.deepEqual(output[0], 'banana') === undefined;`\n }\n ]\n },\n {\n name: 'Array.lastIndexOf()',\n time: 10,\n prompt: `Return the index of the last 'peach' instance in the 'fruit' array using 'Array.lastIndexOf()'`,\n given: `const fruits = ['peach', 'orange', 'lemon', 'peach'];\\r`,\n answer: `const fruits = ['peach', 'orange', 'lemon', 'peach'];\n const wheresTheLastPeach = fruits.lastIndexOf('peach');\n return wheresTheLastPeach;`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, 3) === undefined;`\n },\n {\n name: 'Returns a Number',\n test: `assert.isNumber(output) === undefined;`\n }\n ]\n },\n {\n name: 'Array.filter()',\n time: 10,\n prompt: `Return an array of the numbers greater than 5 in 'numbers' using 'Array.filter()'`,\n given: `const numbers = [1, 1, 2, 3, 5, 8, 13, 21];\\r`,\n answer: `const numbers = [1, 1, 2, 3, 5, 8, 13, 21];\n const overFive = numbers.filter(num => num > 5);\n return overFive;`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, [8, 13, 21]) === undefined;`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 3 items',\n test: `assert.lengthOf(output, 3) === undefined;`\n },\n {\n name: `First item is 8`,\n test: `assert.deepEqual(output[0], 8) === undefined;`\n }\n ]\n },\n {\n name: 'Array.map()',\n time: 10,\n prompt: `Return an array of 'numbers' array's square roots, using 'Array.map()' and 'Math.sqrt()'`,\n given: `const numbers = [25, 121, 169];\\r`,\n answer: `const numbers = [25, 121, 169];\n const roots = numbers.map(num => Math.sqrt(num));\n return roots;`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, [5, 11, 13]) === undefined;`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 3 items',\n test: `assert.lengthOf(output, 3) === undefined;`\n },\n {\n name: `First item is 5`,\n test: `assert.deepEqual(output[0], 5) === undefined;`\n },\n {\n name: `Last item is 13`,\n test: `assert.deepEqual(output[output.length - 1], 13) === undefined;`\n }\n ]\n },\n {\n name: 'Array.every()',\n time: 10,\n prompt: `Return object that returns whether each array contains all even numbers using Array.every().`,\n given: `const evenNumbers = [2, 4, 6, 8];\n const someOddNumbers = [2, 5, 6, 8];\n function isEven(element) {\n \n }\n return {\n evenNumbers: evenNumbers.,\n someOddNumbers: someOddNumbers.\n };`,\n answer: `const evenNumbers = [2, 4, 6, 8];\n const someOddNumbers = [2, 5, 6, 8];\n function isEven(element) {\n return element % 2 === 0\n }\n return {\n evenNumbers: evenNumbers.every(isEven),\n someOddNumbers: someOddNumbers.every(isEven)\n };`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, {\n evenNumbers: true,\n someOddNumbers: false\n }) === undefined;`\n },\n {\n name: 'Returns an Object',\n test: `assert.isObject(output) === undefined;`\n },\n {\n name: 'Object has 2 items',\n test: `assert.lengthOf(Object.keys(output), 2) === undefined;`\n },\n {\n name: `First value is true`,\n test: `assert.isTrue(output.evenNumbers) === undefined;`\n },\n {\n name: `Second value is false`,\n test: `assert.isFalse(output.someOddNumbers) === undefined;`\n }\n ]\n },\n {\n name: 'Array.some()',\n time: 10,\n prompt: `Return 'Object' that returns whether each array contains some odd numbers using 'Array.some()'.`,\n given: `const evenNumbers = [2, 4, 6, 8];\n const someOddNumbers = [2, 4, 7, 8];\n function isOdd(element) {\n \n }\n return {\n evenNumbers: evenNumbers.,\n someOddNumbers: someOddNumbers.\n };`,\n answer: `const evenNumbers = [1, 3, 5, 7];\n const someOddNumbers = [1, 3, 6, 7];\n function isOdd(element) {\n return element % 2 !== 0;\n }\n return {\n evenNumbers: evenNumbers.some(isOdd),\n someOddNumbers: someOddNumbers.some(isOdd)\n };`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, {\n evenNumbers: false,\n someOddNumbers: true\n }) === undefined;`\n },\n {\n name: 'Returns an Object',\n test: `assert.isObject(output) === undefined;`\n },\n {\n name: 'Object has 2 items',\n test: `assert.lengthOf(Object.keys(output), 2) === undefined;`\n },\n {\n name: `First value is false`,\n test: `assert.isFalse(output.evenNumbers) === undefined;`\n },\n {\n name: `Second value is true`,\n test: `assert.isTrue(output.someOddNumbers) === undefined;`\n }\n ]\n }\n // Next problems to create:\n // forEach? fix one above that tried, but can't verify forEach was used\n // some\n // reduce\n // reduceRight\n // Array.from and other ways to turn array-like into array\n];\n","module.exports = [\n {\n name: 'Create Array',\n time: 10,\n prompt: 'Create and return an array that contains \\'apple\\' and \\'banana\\'',\n given: `const fruits = [];\\rreturn fruits;`,\n answer: `const fruits = ['apple', 'banana'];\n return fruits;`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, ['apple', 'banana']) === undefined;`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 2 items',\n test: `assert.lengthOf(output, 2) === undefined;`\n }\n ]\n },\n {\n name: 'Array.pop()',\n time: 10,\n prompt: `Remove 'orange' from the end of the 'fruits' array and return 'fruits'.`,\n given: `const fruits = ['apple', 'banana', 'orange'];\\r`,\n answer: `const fruits = ['apple', 'banana', 'orange'];\n fruits.pop();\n return fruits;`,\n tests: [\n {\n name: 'Correct output',\n test: `assert.deepEqual(output, ['apple', 'banana']) === undefined;`\n },\n {\n name: 'Returns an Array',\n test: `assert.isArray(output) === undefined;`\n },\n {\n name: 'Array has 2 items',\n test: `assert.lengthOf(output, 2) === undefined;`\n }\n ]\n }\n]\n","module.exports = require('./lib/type');\n","/*!\n * type-detect\n * Copyright(c) 2013 jake luer \n * MIT Licensed\n */\n\n/*!\n * Primary Exports\n */\n\nvar exports = module.exports = getType;\n\n/*!\n * Detectable javascript natives\n */\n\nvar natives = {\n '[object Array]': 'array'\n , '[object RegExp]': 'regexp'\n , '[object Function]': 'function'\n , '[object Arguments]': 'arguments'\n , '[object Date]': 'date'\n};\n\n/**\n * ### typeOf (obj)\n *\n * Use several different techniques to determine\n * the type of object being tested.\n *\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\n\nfunction getType (obj) {\n var str = Object.prototype.toString.call(obj);\n if (natives[str]) return natives[str];\n if (obj === null) return 'null';\n if (obj === undefined) return 'undefined';\n if (obj === Object(obj)) return 'object';\n return typeof obj;\n}\n\nexports.Library = Library;\n\n/**\n * ### Library\n *\n * Create a repository for custom type detection.\n *\n * ```js\n * var lib = new type.Library;\n * ```\n *\n */\n\nfunction Library () {\n this.tests = {};\n}\n\n/**\n * #### .of (obj)\n *\n * Expose replacement `typeof` detection to the library.\n *\n * ```js\n * if ('string' === lib.of('hello world')) {\n * // ...\n * }\n * ```\n *\n * @param {Mixed} object to test\n * @return {String} type\n */\n\nLibrary.prototype.of = getType;\n\n/**\n * #### .define (type, test)\n *\n * Add a test to for the `.test()` assertion.\n *\n * Can be defined as a regular expression:\n *\n * ```js\n * lib.define('int', /^[0-9]+$/);\n * ```\n *\n * ... or as a function:\n *\n * ```js\n * lib.define('bln', function (obj) {\n * if ('boolean' === lib.of(obj)) return true;\n * var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];\n * if ('string' === lib.of(obj)) obj = obj.toLowerCase();\n * return !! ~blns.indexOf(obj);\n * });\n * ```\n *\n * @param {String} type\n * @param {RegExp|Function} test\n * @api public\n */\n\nLibrary.prototype.define = function (type, test) {\n if (arguments.length === 1) return this.tests[type];\n this.tests[type] = test;\n return this;\n};\n\n/**\n * #### .test (obj, test)\n *\n * Assert that an object is of type. Will first\n * check natives, and if that does not pass it will\n * use the user defined custom tests.\n *\n * ```js\n * assert(lib.test('1', 'int'));\n * assert(lib.test('yes', 'bln'));\n * ```\n *\n * @param {Mixed} object\n * @param {String} type\n * @return {Boolean} result\n * @api public\n */\n\nLibrary.prototype.test = function (obj, type) {\n if (type === getType(obj)) return true;\n var test = this.tests[type];\n\n if (test && 'regexp' === getType(test)) {\n return test.test(obj);\n } else if (test && 'function' === getType(test)) {\n return test(obj);\n } else {\n throw new ReferenceError('Type test \"' + type + '\" not defined or invalid.');\n }\n};\n","/*!\n * type-detect\n * Copyright(c) 2013 jake luer \n * MIT Licensed\n */\n\n/*!\n * Primary Exports\n */\n\nvar exports = module.exports = getType;\n\n/**\n * ### typeOf (obj)\n *\n * Use several different techniques to determine\n * the type of object being tested.\n *\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nvar objectTypeRegexp = /^\\[object (.*)\\]$/;\n\nfunction getType(obj) {\n var type = Object.prototype.toString.call(obj).match(objectTypeRegexp)[1].toLowerCase();\n // Let \"new String('')\" return 'object'\n if (typeof Promise === 'function' && obj instanceof Promise) return 'promise';\n // PhantomJS has type \"DOMWindow\" for null\n if (obj === null) return 'null';\n // PhantomJS has type \"DOMWindow\" for undefined\n if (obj === undefined) return 'undefined';\n return type;\n}\n\nexports.Library = Library;\n\n/**\n * ### Library\n *\n * Create a repository for custom type detection.\n *\n * ```js\n * var lib = new type.Library;\n * ```\n *\n */\n\nfunction Library() {\n if (!(this instanceof Library)) return new Library();\n this.tests = {};\n}\n\n/**\n * #### .of (obj)\n *\n * Expose replacement `typeof` detection to the library.\n *\n * ```js\n * if ('string' === lib.of('hello world')) {\n * // ...\n * }\n * ```\n *\n * @param {Mixed} object to test\n * @return {String} type\n */\n\nLibrary.prototype.of = getType;\n\n/**\n * #### .define (type, test)\n *\n * Add a test to for the `.test()` assertion.\n *\n * Can be defined as a regular expression:\n *\n * ```js\n * lib.define('int', /^[0-9]+$/);\n * ```\n *\n * ... or as a function:\n *\n * ```js\n * lib.define('bln', function (obj) {\n * if ('boolean' === lib.of(obj)) return true;\n * var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];\n * if ('string' === lib.of(obj)) obj = obj.toLowerCase();\n * return !! ~blns.indexOf(obj);\n * });\n * ```\n *\n * @param {String} type\n * @param {RegExp|Function} test\n * @api public\n */\n\nLibrary.prototype.define = function(type, test) {\n if (arguments.length === 1) return this.tests[type];\n this.tests[type] = test;\n return this;\n};\n\n/**\n * #### .test (obj, test)\n *\n * Assert that an object is of type. Will first\n * check natives, and if that does not pass it will\n * use the user defined custom tests.\n *\n * ```js\n * assert(lib.test('1', 'int'));\n * assert(lib.test('yes', 'bln'));\n * ```\n *\n * @param {Mixed} object\n * @param {String} type\n * @return {Boolean} result\n * @api public\n */\n\nLibrary.prototype.test = function(obj, type) {\n if (type === getType(obj)) return true;\n var test = this.tests[type];\n\n if (test && 'regexp' === getType(test)) {\n return test.test(obj);\n } else if (test && 'function' === getType(test)) {\n return test(obj);\n } else {\n throw new ReferenceError('Type test \"' + type + '\" not defined or invalid.');\n }\n};\n","(function (document, window) {\n // DEPENDENCIES\n // ============================================================\n const localforage = require('localforage');\n const probs = require('pjs-problems');\n const dedent = require('dedent');\n const assert = require('chai').assert;\n\n // PROBLEM TEMPLATE NICE-IFICATION\n // ============================================================\n\n function dedentStrings(problems) {\n return problems.map(prob => {\n prob.given = dedent(prob.given)\n prob.answer = dedent(prob.answer)\n return prob\n });\n }\n\n\n // PROBLEMS\n // ============================================================\n\n let problems = [];\n Object.keys(probs).forEach(subject => {\n problems.push(...probs[subject]);\n });\n problems = dedentStrings(problems);\n\n\n // CONFIG\n // ============================================================\n\n // Hoist current problem\n let currentProblem;\n\n // Keys to ignore while user is navigating around the textarea but not changing any code\n const ignoreKeyCodes = [\n 9, // Tab\n 37, // Left arrow\n 39, // Right arrow\n 38, // Up arrow\n 40 // Down arrow\n ];\n\n let config = {\n shuffle: true,\n timer: false,\n currentIndex: 0\n };\n\n // Pull config from localforage\n localforage\n .getItem('js_practice_config')\n .then(val => {\n if (val) {\n config = val;\n }\n loadApp(config);\n })\n .catch(err => {\n console.log('localforage err:', err);\n loadApp(config);\n });\n\n function updateLocalstore(config) {\n return localforage\n .setItem('js_practice_config', config)\n .then(val => val)\n .catch(err => {\n console.log('Settings update error:', err);\n });\n }\n\n // HELPERS\n // ============================================================\n\n function debounce(func, wait, immediate) {\n let timeout;\n return function () {\n const context = this;\n const args = arguments;\n const later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n // UI\n // ============================================================\n\n // elements\n const problemEl = document.getElementById('problem');\n const codeEl = document.getElementById('code');\n const testSuiteEl = document.getElementById('test-suite');\n const testTotalEl = document.getElementById('test-total');\n const evalConsoleEl = document.getElementById('eval-output');\n const assertConsoleEl = document.getElementById('assert-output');\n const shuffleProblemsButtonEl = document.getElementById('shuffle-problems');\n const previousProblemButtonEl = document.getElementById('prev-problem');\n const nextProblemButtonEl = document.getElementById('next-problem');\n\n // Get indexes\n function getRandomIndex(problemsArr) {\n const ind = Math.floor(Math.random() * problemsArr.length);\n config.currentIndex = ind;\n updateLocalstore(config);\n return ind;\n }\n\n function getPreviousIndex(problemsArr) {\n let probInd;\n const currentIndex = config.currentIndex;\n // If at beginning, go to end\n if (currentIndex === 0) {\n probInd = problemsArr.length - 1;\n } else {\n probInd = currentIndex - 1;\n }\n return probInd;\n }\n\n function getNextIndex(problemsArr) {\n let probInd;\n const currentIndex = config.currentIndex;\n // If at end or invalid, restart series\n if (currentIndex >= problemsArr.length - 1 || currentIndex < 0) {\n probInd = 0;\n } else {\n probInd = currentIndex + 1;\n }\n return probInd;\n }\n\n // Get problems\n function getCurrentProblem(problemsArr) {\n return problemsArr[config.currentIndex];\n }\n\n function previousProblem() {\n console.log('previousProblem!');\n // Activate back button, for visual queue of nav feedback\n previousProblemButtonEl.classList.add('active');\n config.currentIndex = config.shuffle\n ? getRandomIndex(problems)\n : getPreviousIndex(problems);\n updateLocalstore(config).then(() => {\n window.location.reload();\n });\n }\n\n function nextProblem() {\n console.log('nextProblem!');\n // Activate next button, for visual queue of nav feedback\n nextProblemButtonEl.classList.add('active');\n config.currentIndex = config.shuffle\n ? getRandomIndex(problems)\n : getNextIndex(problems);\n updateLocalstore(config).then(() => {\n window.location.reload();\n });\n }\n\n function toggleShuffle() {\n console.log('toggle shuffle!');\n config.shuffle = !config.shuffle; // Flip it\n shuffleProblemsButtonEl.classList.toggle('active');\n previousProblemButtonEl.parentNode.classList.toggle('hidden');\n updateLocalstore(config);\n }\n\n function loadProblem(problemObj) {\n currentProblem = problemObj;\n // Prob question\n problemEl.innerText = problemObj.prompt;\n // Prob given code\n if (problemObj.given) {\n codeEl.value = problemObj.given;\n }\n // Seed the tests, pass (init = true) as second param\n testSuite(null, true);\n }\n\n // TODO: Build the assert errors into the test dom on each update.\n function updateTests(testStatus, init) {\n if (init === true) {\n buildTests(currentProblem.tests);\n }\n updateTestStatus(testStatus);\n }\n\n function buildTests(tests) {\n if (tests) {\n const testsDom = tests\n .map(test => {\n return `
\n
[✘]
\n
${test.name}
\n
`;\n })\n .join('');\n testSuiteEl.innerHTML = testsDom;\n }\n }\n\n function updateTestStatus(testStatuses) {\n if (!testStatuses) {\n throw new Error('No testStatuses provided.');\n }\n // Find out if all tests have passed or not\n let allPassed = true;\n testStatuses.forEach(testPassed => {\n if (testPassed !== true) {\n allPassed = false;\n }\n });\n const testEls = [].slice.call(testSuiteEl.querySelectorAll('.test-state'));\n testEls.forEach((testStatusEl, iter) => {\n if (testStatuses[iter] === true) {\n testStatusEl.innerHTML = '[✓]';\n testStatusEl.classList.remove('fail');\n testStatusEl.classList.add('pass');\n } else {\n testStatusEl.innerHTML = '[✘]';\n testStatusEl.classList.remove('pass');\n testStatusEl.classList.add('fail');\n }\n });\n\n if (allPassed === true) {\n testTotalEl.innerText = 'PASS';\n testTotalEl.classList.remove('fail');\n testTotalEl.classList.add('pass');\n } else {\n testTotalEl.innerText = 'FAIL';\n testTotalEl.classList.remove('pass');\n testTotalEl.classList.add('fail');\n }\n }\n\n function printAssertError(errObj) {\n // Make element string\n let inner = '';\n if (errObj !== null) {\n inner = `\n
\n Expected: ${JSON.stringify(errObj.expected)}\n Actual: ${JSON.stringify(errObj.actual)}\n
`;\n }\n\n // Prepend element\n assertConsoleEl.innerHTML = inner;\n }\n\n function printEvalOutput(errObj, output) {\n // Make element string\n let inner = '';\n if (errObj && errObj.message !== undefined) {\n inner = `\n
\n Syntax Error: ${JSON.stringify(errObj.message)}\n
`;\n } else if (output) {\n inner = `\n
\n Output: ${JSON.stringify(output)}\n
`;\n }\n // Prepend element\n evalConsoleEl.innerHTML = inner;\n }\n\n\n // VERIFICATION LOGIC\n // ============================================================\n\n function testSuite(init) {\n // Show 'working' indicator\n testTotalEl.classList.toggle('working');\n // Run stuff\n const output = getOutput(codeEl.value);\n // Run tests on code, return object/array of test results\n const tested = runTests(output);\n // Hide 'working' indicator\n testTotalEl.classList.toggle('working');\n // Update UI with results\n updateTests(tested, init);\n }\n\n function getOutput(code) {\n let evald = false;\n try {\n evald = eval(`(function(){${code}})()`); // eslint-disable-line no-eval\n printEvalOutput(null, evald); // Print current output\n } catch (err) {\n printEvalOutput(err);\n }\n return evald;\n }\n\n function runTests(output) {\n let tested = false;\n tested = currentProblem.tests.map(test => {\n let testOutcome = false;\n try {\n if (output) {\n testOutcome = eval(test.test);\n }\n printAssertError(null);\n } catch (err) {\n printAssertError(err);\n }\n return testOutcome;\n });\n return tested;\n }\n\n // Wrapped to prevent race with local config retrieval\n function loadApp(config) {\n console.log('loading app!');\n\n // Show current toggle state\n if (config.shuffle === true) {\n shuffleProblemsButtonEl.classList.add('active');\n previousProblemButtonEl.parentNode.classList.add('hidden');\n }\n\n // Keybinding stuff\n // ============================================================\n\n // Debounced code validation\n const debouncedInputValidation = debounce(e => {\n // If not arrow keys or other non-character keys\n if (ignoreKeyCodes.indexOf(e.keyCode) === -1) {\n // Run test suite\n testSuite();\n }\n }, 200);\n\n function problemNav(e) {\n // Go to previous problem keybinding\n // If CMD/CTRL + SHIFT + RETURN/ENTER\n if (config.shuffle === false && e.keyCode === 13 && e.shiftKey && (e.metaKey || e.ctrlKey)) {\n // Go to next problem\n previousProblem();\n } else if (e.keyCode === 13 && !e.shiftKey && (e.metaKey || e.ctrlKey)) {\n // Go to next problem keybinding\n // If CMD/CTRL + RETURN/ENTER\n // Go to next problem\n nextProblem();\n }\n }\n\n // Event Bindings\n // ============================================================\n\n // Bind it up\n codeEl.addEventListener('keydown', debouncedInputValidation);\n document.addEventListener('keydown', problemNav);\n shuffleProblemsButtonEl.addEventListener('click', toggleShuffle);\n previousProblemButtonEl.addEventListener('click', previousProblem);\n nextProblemButtonEl.addEventListener('click', nextProblem);\n\n // Start it up!\n // Load current problem\n const currProb = getCurrentProblem(problems);\n loadProblem(currProb);\n // Initalized test suite with starting failures\n testSuite(true);\n }\n})(document, window);\n"]} \ No newline at end of file diff --git a/public/dist/js/loadJS.js.map b/public/dist/js/loadJS.js.map index f15c043..b3120a5 100644 --- a/public/dist/js/loadJS.js.map +++ b/public/dist/js/loadJS.js.map @@ -1 +1 @@ -{"version":3,"sources":["loadJS.js"],"names":["w","loadJS","src","cb","ref","document","getElementsByTagName","script","createElement","async","parentNode","insertBefore","onload","module","exports","global","this"],"mappings":"CACA,SAAUA,GACR,GAAIC,GAAS,SAASC,EAAKC,GACzB,YACA,IAAIC,GAAMJ,EAAEK,SAASC,qBAAqB,UAAU,GAChDC,EAASP,EAAEK,SAASG,cAAc,SAOtC,OANAD,GAAOL,IAAMA,EACbK,EAAOE,OAAQ,EACfL,EAAIM,WAAWC,aAAaJ,EAAQH,GAChCD,GAAoB,kBAAPA,KACfI,EAAOK,OAAST,GAEXI,EAGa,oBAAXM,QACTA,OAAOC,QAAUb,EAEjBD,EAAEC,OAASA,GAEM,mBAAXc,QAAyBA,OAASC","file":"loadJS.js","sourcesContent":["/*! loadJS: load a JS file asynchronously. [c]2014 @scottjehl, Filament Group, Inc. (Based on http://goo.gl/REQGQ by Paul Irish). Licensed MIT */\n(function(w) {\n var loadJS = function(src, cb) {\n 'use strict';\n var ref = w.document.getElementsByTagName('script')[0];\n var script = w.document.createElement('script');\n script.src = src;\n script.async = true;\n ref.parentNode.insertBefore(script, ref);\n if (cb && typeof cb === 'function') {\n script.onload = cb;\n }\n return script;\n };\n // commonjs\n if (typeof module !== 'undefined') {\n module.exports = loadJS;\n } else {\n w.loadJS = loadJS;\n }\n})(typeof global !== 'undefined' ? global : this);\n"]} \ No newline at end of file +{"version":3,"sources":["loadJS.js"],"names":["w","loadJS","src","cb","ref","document","getElementsByTagName","script","createElement","async","parentNode","insertBefore","onload","module","exports","global","this"],"mappings":"CACA,SAAUA,GACR,IAAIC,EAAS,SAASC,EAAKC,GACzB,aACA,IAAIC,EAAMJ,EAAEK,SAASC,qBAAqB,UAAU,GAChDC,EAASP,EAAEK,SAASG,cAAc,UAOtC,OANAD,EAAOL,IAAMA,EACbK,EAAOE,OAAQ,EACfL,EAAIM,WAAWC,aAAaJ,EAAQH,GAChCD,GAAoB,mBAAPA,IACfI,EAAOK,OAAST,GAEXI,GAGa,oBAAXM,OACTA,OAAOC,QAAUb,EAEjBD,EAAEC,OAASA,GAEM,oBAAXc,OAAyBA,OAASC","file":"loadJS.js","sourcesContent":["/*! loadJS: load a JS file asynchronously. [c]2014 @scottjehl, Filament Group, Inc. (Based on http://goo.gl/REQGQ by Paul Irish). Licensed MIT */\n(function(w) {\n var loadJS = function(src, cb) {\n 'use strict';\n var ref = w.document.getElementsByTagName('script')[0];\n var script = w.document.createElement('script');\n script.src = src;\n script.async = true;\n ref.parentNode.insertBefore(script, ref);\n if (cb && typeof cb === 'function') {\n script.onload = cb;\n }\n return script;\n };\n // commonjs\n if (typeof module !== 'undefined') {\n module.exports = loadJS;\n } else {\n w.loadJS = loadJS;\n }\n})(typeof global !== 'undefined' ? global : this);\n"]} \ No newline at end of file diff --git a/public/dist/js/sw-registration.js.map b/public/dist/js/sw-registration.js.map index 7470abf..bd10674 100644 --- a/public/dist/js/sw-registration.js.map +++ b/public/dist/js/sw-registration.js.map @@ -1 +1 @@ -{"version":3,"sources":["sw-registration.js"],"names":["navigator","window","addEventListener","serviceWorker","register","then","reg","onupdatefound","installingWorker","installing","onstatechange","state","controller","console","log","error","catch","e"],"mappings":"AAiBA,YAEI,kBAAmBA,YAIrBC,OAAOC,iBAAiB,OAAQ,WAK9BF,UAAUG,cAAcC,SAAS,qBAAqBC,KAAK,SAASC,GAElEA,EAAIC,cAAgB,WAGlB,GAAIC,GAAmBF,EAAIG,UAE3BD,GAAiBE,cAAgB,WAC/B,OAAQF,EAAiBG,OACvB,IAAK,YACCX,UAAUG,cAAcS,WAK1BC,QAAQC,IAAI,wCAIZD,QAAQC,IAAI,oCAEd,MAEF,KAAK,YACHD,QAAQE,MAAM,wDAKrBC,MAAM,SAASC,GAChBJ,QAAQE,MAAM,4CAA6CE","file":"sw-registration.js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-env browser */\n'use strict';\n\nif ('serviceWorker' in navigator) {\n // Delay registration until after the page has loaded, to ensure that our\n // precaching requests don't degrade the first visit experience.\n // See https://developers.google.com/web/fundamentals/instant-and-offline/service-worker/registration\n window.addEventListener('load', function() {\n // Your service-worker.js *must* be located at the top-level directory relative to your site.\n // It won't be able to control pages unless it's located at the same level or higher than them.\n // *Don't* register service worker file in, e.g., a scripts/ sub-directory!\n // See https://github.com/slightlyoff/ServiceWorker/issues/468\n navigator.serviceWorker.register('service-worker.js').then(function(reg) {\n // updatefound is fired if service-worker.js changes.\n reg.onupdatefound = function() {\n // The updatefound event implies that reg.installing is set; see\n // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-container-updatefound-event\n var installingWorker = reg.installing;\n\n installingWorker.onstatechange = function() {\n switch (installingWorker.state) {\n case 'installed':\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n // It's the perfect time to display a \"New content is available; please refresh.\"\n // message in the page's interface.\n console.log('New or updated content is available.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log('Content is now available offline!');\n }\n break;\n\n case 'redundant':\n console.error('The installing service worker became redundant.');\n break;\n }\n };\n };\n }).catch(function(e) {\n console.error('Error during service worker registration:', e);\n });\n });\n}\n"]} \ No newline at end of file +{"version":3,"sources":["sw-registration.js"],"names":["navigator","window","addEventListener","serviceWorker","register","then","reg","onupdatefound","installingWorker","installing","onstatechange","state","controller","console","log","error","catch","e"],"mappings":"AAiBA,aAEI,kBAAmBA,WAIrBC,OAAOC,iBAAiB,OAAQ,WAK9BF,UAAUG,cAAcC,SAAS,qBAAqBC,KAAK,SAASC,GAElEA,EAAIC,cAAgB,WAGlB,IAAIC,EAAmBF,EAAIG,WAE3BD,EAAiBE,cAAgB,WAC/B,OAAQF,EAAiBG,OACvB,IAAK,YACCX,UAAUG,cAAcS,WAK1BC,QAAQC,IAAI,wCAIZD,QAAQC,IAAI,qCAEd,MAEF,IAAK,YACHD,QAAQE,MAAM,wDAKrBC,MAAM,SAASC,GAChBJ,QAAQE,MAAM,4CAA6CE","file":"sw-registration.js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-env browser */\n'use strict';\n\nif ('serviceWorker' in navigator) {\n // Delay registration until after the page has loaded, to ensure that our\n // precaching requests don't degrade the first visit experience.\n // See https://developers.google.com/web/fundamentals/instant-and-offline/service-worker/registration\n window.addEventListener('load', function() {\n // Your service-worker.js *must* be located at the top-level directory relative to your site.\n // It won't be able to control pages unless it's located at the same level or higher than them.\n // *Don't* register service worker file in, e.g., a scripts/ sub-directory!\n // See https://github.com/slightlyoff/ServiceWorker/issues/468\n navigator.serviceWorker.register('service-worker.js').then(function(reg) {\n // updatefound is fired if service-worker.js changes.\n reg.onupdatefound = function() {\n // The updatefound event implies that reg.installing is set; see\n // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-container-updatefound-event\n var installingWorker = reg.installing;\n\n installingWorker.onstatechange = function() {\n switch (installingWorker.state) {\n case 'installed':\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n // It's the perfect time to display a \"New content is available; please refresh.\"\n // message in the page's interface.\n console.log('New or updated content is available.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log('Content is now available offline!');\n }\n break;\n\n case 'redundant':\n console.error('The installing service worker became redundant.');\n break;\n }\n };\n };\n }).catch(function(e) {\n console.error('Error during service worker registration:', e);\n });\n });\n}\n"]} \ No newline at end of file diff --git a/public/service-worker.js b/public/service-worker.js index 9c5c5a3..e2df7b3 100644 --- a/public/service-worker.js +++ b/public/service-worker.js @@ -1,2 +1,2 @@ -"use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}var precacheConfig=[["/dist/css/style.css","ba4d66c91d1ed66848154a34ab4948cf"],["/dist/img/back.svg","898ada2a32ec64bd5b6959c22e8f231d"],["/dist/img/monitor.svg","348592da5567b5a3c46acfb5dcd341bc"],["/dist/img/next.svg","045593410b9f51390e750b9e1e7fff15"],["/dist/img/reload.svg","a0ab1b765280e4d22e6fb747042f6503"],["/dist/img/shuffle.svg","3a5e3c1bf04eb3493d8a2ffa547aa58f"],["/dist/img/social-banner.png","a70702eeea1dbe4a401b7c23189eb7d3"],["/dist/js/bundle.min.js","5a4878a0d8d1655d9f3edbc1aee091b7"],["/dist/js/loadJS.js","72c55936069f60560a386e46f462c73a"],["/dist/js/sw-registration.js","677217d8e642c1ccff69fc01c96b4431"],["/index.html","c7522a5d3255caca0f12c5282ef0644d"]],cacheName="sw-precache-v3--"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,r){var a=new URL(e);return r&&a.pathname.match(r)||(a.search+=(a.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),a.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.hash="",n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],r=new URL(t,self.location),a=createCacheKey(r,hashParamName,n,!1);return[r.toString(),a]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var r=new Request(n,{credentials:"same-origin"});return fetch(r).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);t=urlsToCacheKeys.has(n);t||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}); +"use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}var precacheConfig=[["/dist/css/style.css","ba4d66c91d1ed66848154a34ab4948cf"],["/dist/img/back.svg","898ada2a32ec64bd5b6959c22e8f231d"],["/dist/img/monitor.svg","348592da5567b5a3c46acfb5dcd341bc"],["/dist/img/next.svg","045593410b9f51390e750b9e1e7fff15"],["/dist/img/reload.svg","a0ab1b765280e4d22e6fb747042f6503"],["/dist/img/shuffle.svg","3a5e3c1bf04eb3493d8a2ffa547aa58f"],["/dist/img/social-banner.png","7c1a8058bb3d00c2b40283c735748cfc"],["/dist/js/bundle.min.js","d6329d2b9a6a07313555b757df5081d3"],["/dist/js/loadJS.js","72c55936069f60560a386e46f462c73a"],["/dist/js/sw-registration.js","677217d8e642c1ccff69fc01c96b4431"],["/index.html","c7522a5d3255caca0f12c5282ef0644d"]],cacheName="sw-precache-v3--"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,r){var a=new URL(e);return r&&a.pathname.match(r)||(a.search+=(a.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),a.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.hash="",n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],r=new URL(t,self.location),a=createCacheKey(r,hashParamName,n,!1);return[r.toString(),a]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var r=new Request(n,{credentials:"same-origin"});return fetch(r).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);(t=urlsToCacheKeys.has(n))||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}); //# sourceMappingURL=service-worker.js.map diff --git a/public/service-worker.js.map b/public/service-worker.js.map index 24d6d1d..e9cb7a5 100644 --- a/public/service-worker.js.map +++ b/public/service-worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["service-worker.js"],"names":["setOfCachedUrls","cache","keys","then","requests","map","request","url","urls","Set","precacheConfig","cacheName","self","registration","scope","ignoreUrlParametersMatching","addDirectoryIndex","originalUrl","index","URL","pathname","slice","toString","cleanResponse","originalResponse","redirected","Promise","resolve","body","blob","Response","headers","status","statusText","createCacheKey","paramName","paramValue","dontCacheBustUrlsMatching","match","search","encodeURIComponent","isPathWhitelisted","whitelist","absoluteUrlString","length","path","some","whitelistedPathRegex","stripIgnoredUrlParameters","hash","split","kv","filter","every","ignoredRegex","test","join","hashParamName","urlsToCacheKeys","Map","item","relativeUrl","absoluteUrl","location","cacheKey","addEventListener","event","waitUntil","caches","open","cachedUrls","all","Array","from","values","has","Request","credentials","fetch","response","ok","Error","responseToCache","put","skipWaiting","setOfExpectedUrls","existingRequests","existingRequest","delete","clients","claim","method","shouldRespond","respondWith","get","catch","e","console","warn"],"mappings":"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","file":"service-worker.js","sourcesContent":["/**\n * Copyright 2016 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n*/\n\n// DO NOT EDIT THIS GENERATED OUTPUT DIRECTLY!\n// This file should be overwritten as part of your build process.\n// If you need to extend the behavior of the generated service worker, the best approach is to write\n// additional code and include it using the importScripts option:\n// https://github.com/GoogleChrome/sw-precache#importscripts-arraystring\n//\n// Alternatively, it's possible to make changes to the underlying template file and then use that as the\n// new base for generating output, via the templateFilePath option:\n// https://github.com/GoogleChrome/sw-precache#templatefilepath-string\n//\n// If you go that route, make sure that whenever you update your sw-precache dependency, you reconcile any\n// changes made to this original template file with your modified copy.\n\n// This generated service worker JavaScript will precache your site's resources.\n// The code needs to be saved in a .js file at the top-level of your site, and registered\n// from your pages in order to be used. See\n// https://github.com/googlechrome/sw-precache/blob/master/demo/app/js/service-worker-registration.js\n// for an example of how you can register this script and handle various service worker events.\n\n/* eslint-env worker, serviceworker */\n/* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren, quotes, comma-spacing */\n'use strict';\n\nvar precacheConfig = [[\"/dist/css/style.css\",\"ba4d66c91d1ed66848154a34ab4948cf\"],[\"/dist/img/back.svg\",\"898ada2a32ec64bd5b6959c22e8f231d\"],[\"/dist/img/monitor.svg\",\"348592da5567b5a3c46acfb5dcd341bc\"],[\"/dist/img/next.svg\",\"045593410b9f51390e750b9e1e7fff15\"],[\"/dist/img/reload.svg\",\"a0ab1b765280e4d22e6fb747042f6503\"],[\"/dist/img/shuffle.svg\",\"3a5e3c1bf04eb3493d8a2ffa547aa58f\"],[\"/dist/img/social-banner.png\",\"a70702eeea1dbe4a401b7c23189eb7d3\"],[\"/dist/js/bundle.min.js\",\"5a4878a0d8d1655d9f3edbc1aee091b7\"],[\"/dist/js/loadJS.js\",\"72c55936069f60560a386e46f462c73a\"],[\"/dist/js/sw-registration.js\",\"677217d8e642c1ccff69fc01c96b4431\"],[\"/index.html\",\"c7522a5d3255caca0f12c5282ef0644d\"]];\nvar cacheName = 'sw-precache-v3--' + (self.registration ? self.registration.scope : '');\n\n\nvar ignoreUrlParametersMatching = [/^utm_/];\n\n\n\nvar addDirectoryIndex = function (originalUrl, index) {\n var url = new URL(originalUrl);\n if (url.pathname.slice(-1) === '/') {\n url.pathname += index;\n }\n return url.toString();\n };\n\nvar cleanResponse = function (originalResponse) {\n // If this is not a redirected response, then we don't have to do anything.\n if (!originalResponse.redirected) {\n return Promise.resolve(originalResponse);\n }\n\n // Firefox 50 and below doesn't support the Response.body stream, so we may\n // need to read the entire body to memory as a Blob.\n var bodyPromise = 'body' in originalResponse ?\n Promise.resolve(originalResponse.body) :\n originalResponse.blob();\n\n return bodyPromise.then(function(body) {\n // new Response() is happy when passed either a stream or a Blob.\n return new Response(body, {\n headers: originalResponse.headers,\n status: originalResponse.status,\n statusText: originalResponse.statusText\n });\n });\n };\n\nvar createCacheKey = function (originalUrl, paramName, paramValue,\n dontCacheBustUrlsMatching) {\n // Create a new URL object to avoid modifying originalUrl.\n var url = new URL(originalUrl);\n\n // If dontCacheBustUrlsMatching is not set, or if we don't have a match,\n // then add in the extra cache-busting URL parameter.\n if (!dontCacheBustUrlsMatching ||\n !(url.pathname.match(dontCacheBustUrlsMatching))) {\n url.search += (url.search ? '&' : '') +\n encodeURIComponent(paramName) + '=' + encodeURIComponent(paramValue);\n }\n\n return url.toString();\n };\n\nvar isPathWhitelisted = function (whitelist, absoluteUrlString) {\n // If the whitelist is empty, then consider all URLs to be whitelisted.\n if (whitelist.length === 0) {\n return true;\n }\n\n // Otherwise compare each path regex to the path of the URL passed in.\n var path = (new URL(absoluteUrlString)).pathname;\n return whitelist.some(function(whitelistedPathRegex) {\n return path.match(whitelistedPathRegex);\n });\n };\n\nvar stripIgnoredUrlParameters = function (originalUrl,\n ignoreUrlParametersMatching) {\n var url = new URL(originalUrl);\n // Remove the hash; see https://github.com/GoogleChrome/sw-precache/issues/290\n url.hash = '';\n\n url.search = url.search.slice(1) // Exclude initial '?'\n .split('&') // Split into an array of 'key=value' strings\n .map(function(kv) {\n return kv.split('='); // Split each 'key=value' string into a [key, value] array\n })\n .filter(function(kv) {\n return ignoreUrlParametersMatching.every(function(ignoredRegex) {\n return !ignoredRegex.test(kv[0]); // Return true iff the key doesn't match any of the regexes.\n });\n })\n .map(function(kv) {\n return kv.join('='); // Join each [key, value] array into a 'key=value' string\n })\n .join('&'); // Join the array of 'key=value' strings into a string with '&' in between each\n\n return url.toString();\n };\n\n\nvar hashParamName = '_sw-precache';\nvar urlsToCacheKeys = new Map(\n precacheConfig.map(function(item) {\n var relativeUrl = item[0];\n var hash = item[1];\n var absoluteUrl = new URL(relativeUrl, self.location);\n var cacheKey = createCacheKey(absoluteUrl, hashParamName, hash, false);\n return [absoluteUrl.toString(), cacheKey];\n })\n);\n\nfunction setOfCachedUrls(cache) {\n return cache.keys().then(function(requests) {\n return requests.map(function(request) {\n return request.url;\n });\n }).then(function(urls) {\n return new Set(urls);\n });\n}\n\nself.addEventListener('install', function(event) {\n event.waitUntil(\n caches.open(cacheName).then(function(cache) {\n return setOfCachedUrls(cache).then(function(cachedUrls) {\n return Promise.all(\n Array.from(urlsToCacheKeys.values()).map(function(cacheKey) {\n // If we don't have a key matching url in the cache already, add it.\n if (!cachedUrls.has(cacheKey)) {\n var request = new Request(cacheKey, {credentials: 'same-origin'});\n return fetch(request).then(function(response) {\n // Bail out of installation unless we get back a 200 OK for\n // every request.\n if (!response.ok) {\n throw new Error('Request for ' + cacheKey + ' returned a ' +\n 'response with status ' + response.status);\n }\n\n return cleanResponse(response).then(function(responseToCache) {\n return cache.put(cacheKey, responseToCache);\n });\n });\n }\n })\n );\n });\n }).then(function() {\n \n // Force the SW to transition from installing -> active state\n return self.skipWaiting();\n \n })\n );\n});\n\nself.addEventListener('activate', function(event) {\n var setOfExpectedUrls = new Set(urlsToCacheKeys.values());\n\n event.waitUntil(\n caches.open(cacheName).then(function(cache) {\n return cache.keys().then(function(existingRequests) {\n return Promise.all(\n existingRequests.map(function(existingRequest) {\n if (!setOfExpectedUrls.has(existingRequest.url)) {\n return cache.delete(existingRequest);\n }\n })\n );\n });\n }).then(function() {\n \n return self.clients.claim();\n \n })\n );\n});\n\n\nself.addEventListener('fetch', function(event) {\n if (event.request.method === 'GET') {\n // Should we call event.respondWith() inside this fetch event handler?\n // This needs to be determined synchronously, which will give other fetch\n // handlers a chance to handle the request if need be.\n var shouldRespond;\n\n // First, remove all the ignored parameters and hash fragment, and see if we\n // have that URL in our cache. If so, great! shouldRespond will be true.\n var url = stripIgnoredUrlParameters(event.request.url, ignoreUrlParametersMatching);\n shouldRespond = urlsToCacheKeys.has(url);\n\n // If shouldRespond is false, check again, this time with 'index.html'\n // (or whatever the directoryIndex option is set to) at the end.\n var directoryIndex = 'index.html';\n if (!shouldRespond && directoryIndex) {\n url = addDirectoryIndex(url, directoryIndex);\n shouldRespond = urlsToCacheKeys.has(url);\n }\n\n // If shouldRespond is still false, check to see if this is a navigation\n // request, and if so, whether the URL matches navigateFallbackWhitelist.\n var navigateFallback = '';\n if (!shouldRespond &&\n navigateFallback &&\n (event.request.mode === 'navigate') &&\n isPathWhitelisted([], event.request.url)) {\n url = new URL(navigateFallback, self.location).toString();\n shouldRespond = urlsToCacheKeys.has(url);\n }\n\n // If shouldRespond was set to true at any point, then call\n // event.respondWith(), using the appropriate cache key.\n if (shouldRespond) {\n event.respondWith(\n caches.open(cacheName).then(function(cache) {\n return cache.match(urlsToCacheKeys.get(url)).then(function(response) {\n if (response) {\n return response;\n }\n throw Error('The cached response that was expected is missing.');\n });\n }).catch(function(e) {\n // Fall back to just fetch()ing the request if some unexpected error\n // prevented the cached response from being valid.\n console.warn('Couldn\\'t serve response for \"%s\" from cache: %O', event.request.url, e);\n return fetch(event.request);\n })\n );\n }\n }\n});\n\n\n\n\n\n\n\n"]} \ No newline at end of file +{"version":3,"sources":["service-worker.js"],"names":["setOfCachedUrls","cache","keys","then","requests","map","request","url","urls","Set","precacheConfig","cacheName","self","registration","scope","ignoreUrlParametersMatching","addDirectoryIndex","originalUrl","index","URL","pathname","slice","toString","cleanResponse","originalResponse","redirected","Promise","resolve","body","blob","Response","headers","status","statusText","createCacheKey","paramName","paramValue","dontCacheBustUrlsMatching","match","search","encodeURIComponent","isPathWhitelisted","whitelist","absoluteUrlString","length","path","some","whitelistedPathRegex","stripIgnoredUrlParameters","hash","split","kv","filter","every","ignoredRegex","test","join","hashParamName","urlsToCacheKeys","Map","item","relativeUrl","absoluteUrl","location","cacheKey","addEventListener","event","waitUntil","caches","open","cachedUrls","all","Array","from","values","has","Request","credentials","fetch","response","ok","Error","responseToCache","put","skipWaiting","setOfExpectedUrls","existingRequests","existingRequest","delete","clients","claim","method","shouldRespond","respondWith","get","catch","e","console","warn"],"mappings":"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","file":"service-worker.js","sourcesContent":["/**\n * Copyright 2016 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n*/\n\n// DO NOT EDIT THIS GENERATED OUTPUT DIRECTLY!\n// This file should be overwritten as part of your build process.\n// If you need to extend the behavior of the generated service worker, the best approach is to write\n// additional code and include it using the importScripts option:\n// https://github.com/GoogleChrome/sw-precache#importscripts-arraystring\n//\n// Alternatively, it's possible to make changes to the underlying template file and then use that as the\n// new base for generating output, via the templateFilePath option:\n// https://github.com/GoogleChrome/sw-precache#templatefilepath-string\n//\n// If you go that route, make sure that whenever you update your sw-precache dependency, you reconcile any\n// changes made to this original template file with your modified copy.\n\n// This generated service worker JavaScript will precache your site's resources.\n// The code needs to be saved in a .js file at the top-level of your site, and registered\n// from your pages in order to be used. See\n// https://github.com/googlechrome/sw-precache/blob/master/demo/app/js/service-worker-registration.js\n// for an example of how you can register this script and handle various service worker events.\n\n/* eslint-env worker, serviceworker */\n/* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren, quotes, comma-spacing */\n'use strict';\n\nvar precacheConfig = [[\"/dist/css/style.css\",\"ba4d66c91d1ed66848154a34ab4948cf\"],[\"/dist/img/back.svg\",\"898ada2a32ec64bd5b6959c22e8f231d\"],[\"/dist/img/monitor.svg\",\"348592da5567b5a3c46acfb5dcd341bc\"],[\"/dist/img/next.svg\",\"045593410b9f51390e750b9e1e7fff15\"],[\"/dist/img/reload.svg\",\"a0ab1b765280e4d22e6fb747042f6503\"],[\"/dist/img/shuffle.svg\",\"3a5e3c1bf04eb3493d8a2ffa547aa58f\"],[\"/dist/img/social-banner.png\",\"7c1a8058bb3d00c2b40283c735748cfc\"],[\"/dist/js/bundle.min.js\",\"d6329d2b9a6a07313555b757df5081d3\"],[\"/dist/js/loadJS.js\",\"72c55936069f60560a386e46f462c73a\"],[\"/dist/js/sw-registration.js\",\"677217d8e642c1ccff69fc01c96b4431\"],[\"/index.html\",\"c7522a5d3255caca0f12c5282ef0644d\"]];\nvar cacheName = 'sw-precache-v3--' + (self.registration ? self.registration.scope : '');\n\n\nvar ignoreUrlParametersMatching = [/^utm_/];\n\n\n\nvar addDirectoryIndex = function (originalUrl, index) {\n var url = new URL(originalUrl);\n if (url.pathname.slice(-1) === '/') {\n url.pathname += index;\n }\n return url.toString();\n };\n\nvar cleanResponse = function (originalResponse) {\n // If this is not a redirected response, then we don't have to do anything.\n if (!originalResponse.redirected) {\n return Promise.resolve(originalResponse);\n }\n\n // Firefox 50 and below doesn't support the Response.body stream, so we may\n // need to read the entire body to memory as a Blob.\n var bodyPromise = 'body' in originalResponse ?\n Promise.resolve(originalResponse.body) :\n originalResponse.blob();\n\n return bodyPromise.then(function(body) {\n // new Response() is happy when passed either a stream or a Blob.\n return new Response(body, {\n headers: originalResponse.headers,\n status: originalResponse.status,\n statusText: originalResponse.statusText\n });\n });\n };\n\nvar createCacheKey = function (originalUrl, paramName, paramValue,\n dontCacheBustUrlsMatching) {\n // Create a new URL object to avoid modifying originalUrl.\n var url = new URL(originalUrl);\n\n // If dontCacheBustUrlsMatching is not set, or if we don't have a match,\n // then add in the extra cache-busting URL parameter.\n if (!dontCacheBustUrlsMatching ||\n !(url.pathname.match(dontCacheBustUrlsMatching))) {\n url.search += (url.search ? '&' : '') +\n encodeURIComponent(paramName) + '=' + encodeURIComponent(paramValue);\n }\n\n return url.toString();\n };\n\nvar isPathWhitelisted = function (whitelist, absoluteUrlString) {\n // If the whitelist is empty, then consider all URLs to be whitelisted.\n if (whitelist.length === 0) {\n return true;\n }\n\n // Otherwise compare each path regex to the path of the URL passed in.\n var path = (new URL(absoluteUrlString)).pathname;\n return whitelist.some(function(whitelistedPathRegex) {\n return path.match(whitelistedPathRegex);\n });\n };\n\nvar stripIgnoredUrlParameters = function (originalUrl,\n ignoreUrlParametersMatching) {\n var url = new URL(originalUrl);\n // Remove the hash; see https://github.com/GoogleChrome/sw-precache/issues/290\n url.hash = '';\n\n url.search = url.search.slice(1) // Exclude initial '?'\n .split('&') // Split into an array of 'key=value' strings\n .map(function(kv) {\n return kv.split('='); // Split each 'key=value' string into a [key, value] array\n })\n .filter(function(kv) {\n return ignoreUrlParametersMatching.every(function(ignoredRegex) {\n return !ignoredRegex.test(kv[0]); // Return true iff the key doesn't match any of the regexes.\n });\n })\n .map(function(kv) {\n return kv.join('='); // Join each [key, value] array into a 'key=value' string\n })\n .join('&'); // Join the array of 'key=value' strings into a string with '&' in between each\n\n return url.toString();\n };\n\n\nvar hashParamName = '_sw-precache';\nvar urlsToCacheKeys = new Map(\n precacheConfig.map(function(item) {\n var relativeUrl = item[0];\n var hash = item[1];\n var absoluteUrl = new URL(relativeUrl, self.location);\n var cacheKey = createCacheKey(absoluteUrl, hashParamName, hash, false);\n return [absoluteUrl.toString(), cacheKey];\n })\n);\n\nfunction setOfCachedUrls(cache) {\n return cache.keys().then(function(requests) {\n return requests.map(function(request) {\n return request.url;\n });\n }).then(function(urls) {\n return new Set(urls);\n });\n}\n\nself.addEventListener('install', function(event) {\n event.waitUntil(\n caches.open(cacheName).then(function(cache) {\n return setOfCachedUrls(cache).then(function(cachedUrls) {\n return Promise.all(\n Array.from(urlsToCacheKeys.values()).map(function(cacheKey) {\n // If we don't have a key matching url in the cache already, add it.\n if (!cachedUrls.has(cacheKey)) {\n var request = new Request(cacheKey, {credentials: 'same-origin'});\n return fetch(request).then(function(response) {\n // Bail out of installation unless we get back a 200 OK for\n // every request.\n if (!response.ok) {\n throw new Error('Request for ' + cacheKey + ' returned a ' +\n 'response with status ' + response.status);\n }\n\n return cleanResponse(response).then(function(responseToCache) {\n return cache.put(cacheKey, responseToCache);\n });\n });\n }\n })\n );\n });\n }).then(function() {\n \n // Force the SW to transition from installing -> active state\n return self.skipWaiting();\n \n })\n );\n});\n\nself.addEventListener('activate', function(event) {\n var setOfExpectedUrls = new Set(urlsToCacheKeys.values());\n\n event.waitUntil(\n caches.open(cacheName).then(function(cache) {\n return cache.keys().then(function(existingRequests) {\n return Promise.all(\n existingRequests.map(function(existingRequest) {\n if (!setOfExpectedUrls.has(existingRequest.url)) {\n return cache.delete(existingRequest);\n }\n })\n );\n });\n }).then(function() {\n \n return self.clients.claim();\n \n })\n );\n});\n\n\nself.addEventListener('fetch', function(event) {\n if (event.request.method === 'GET') {\n // Should we call event.respondWith() inside this fetch event handler?\n // This needs to be determined synchronously, which will give other fetch\n // handlers a chance to handle the request if need be.\n var shouldRespond;\n\n // First, remove all the ignored parameters and hash fragment, and see if we\n // have that URL in our cache. If so, great! shouldRespond will be true.\n var url = stripIgnoredUrlParameters(event.request.url, ignoreUrlParametersMatching);\n shouldRespond = urlsToCacheKeys.has(url);\n\n // If shouldRespond is false, check again, this time with 'index.html'\n // (or whatever the directoryIndex option is set to) at the end.\n var directoryIndex = 'index.html';\n if (!shouldRespond && directoryIndex) {\n url = addDirectoryIndex(url, directoryIndex);\n shouldRespond = urlsToCacheKeys.has(url);\n }\n\n // If shouldRespond is still false, check to see if this is a navigation\n // request, and if so, whether the URL matches navigateFallbackWhitelist.\n var navigateFallback = '';\n if (!shouldRespond &&\n navigateFallback &&\n (event.request.mode === 'navigate') &&\n isPathWhitelisted([], event.request.url)) {\n url = new URL(navigateFallback, self.location).toString();\n shouldRespond = urlsToCacheKeys.has(url);\n }\n\n // If shouldRespond was set to true at any point, then call\n // event.respondWith(), using the appropriate cache key.\n if (shouldRespond) {\n event.respondWith(\n caches.open(cacheName).then(function(cache) {\n return cache.match(urlsToCacheKeys.get(url)).then(function(response) {\n if (response) {\n return response;\n }\n throw Error('The cached response that was expected is missing.');\n });\n }).catch(function(e) {\n // Fall back to just fetch()ing the request if some unexpected error\n // prevented the cached response from being valid.\n console.warn('Couldn\\'t serve response for \"%s\" from cache: %O', event.request.url, e);\n return fetch(event.request);\n })\n );\n }\n }\n});\n\n\n\n\n\n\n\n"]} \ No newline at end of file diff --git a/shrinkwrap.yaml b/shrinkwrap.yaml new file mode 100644 index 0000000..55d8e81 --- /dev/null +++ b/shrinkwrap.yaml @@ -0,0 +1,4747 @@ +createdWith: pnpm@0.68.0 +dependencies: + autoprefixer@^6.7.7: 6.7.7 + ava@^0.18.2: 0.18.2 + babel-core@^6.24.0: 6.24.1 + babel-preset-env@^1.4.0: 1.5.1 + babel-preset-es2015@^6.24.1: 6.24.1 + babel-preset-es2017@^6.24.1: 6.24.1 + babel-preset-latest@^6.24.1: 6.24.1 + babelify@^7.3.0: 7.3.0 + browserify@^14.3.0: 14.4.0 + chai@^3.5.0: 3.5.0 + cssnano@^3.10.0: 3.10.0 + dedent@^0.7.0: 0.7.0 + gulp-bro@^1.0.2: 1.0.2 + gulp-htmlmin@^3.0.0: 3.0.0 + gulp-image@^2.8.0: 2.9.0 + gulp-livereload@^3.8.1: 3.8.1 + gulp-postcss@^6.4.0: 6.4.0 + gulp-sass@^3.1.0: 3.1.0 + gulp-sourcemaps@^2.6.0: 2.6.0 + gulp-svgo@^1.0.3: 1.0.3 + gulp-uglify@^3.0.0: 3.0.0 + gulp-util@^3.0.8: 3.0.8 + gulp@^3.9.1: 3.9.1 + husky@^0.13.3: 0.13.4 + lint-staged@^3.4.0: 3.6.0 + localforage@^1.5.0: 1.5.0 + pjs-problems@^1.0.3: 1.0.3 + pump@^1.0.2: 1.0.2 + rollup-stream@^1.19.0: 1.19.0 + sw-precache@^5.1.1: 5.1.1 + uglify-es@^3.0.15: 3.0.15 + uglifyify@^3.0.4: 3.0.4 + vinyl-buffer@^1.0.0: 1.0.0 + vinyl-source-stream@^1.1.0: 1.1.0 + watchify@^3.9.0: 3.9.0 + xo@^0.18.2: 0.18.2 +packages: + /@ava/babel-preset-stage-4/1.0.0: + dependencies: + 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-destructuring: 6.23.0 + babel-plugin-transform-es2015-function-name: 6.24.1 + babel-plugin-transform-es2015-modules-commonjs: 6.24.1 + babel-plugin-transform-es2015-parameters: 6.24.1 + babel-plugin-transform-es2015-spread: 6.22.0 + babel-plugin-transform-es2015-sticky-regex: 6.24.1 + babel-plugin-transform-es2015-unicode-regex: 6.24.1 + babel-plugin-transform-exponentiation-operator: 6.24.1 + package-hash: 1.2.0 + resolution: a613b5e152f529305422546b072d47facfb26291 + /@ava/babel-preset-transform-test-files/2.0.1: + dependencies: + babel-plugin-ava-throws-helper: 1.0.0 + babel-plugin-espower: 2.3.2 + package-hash: 1.2.0 + resolution: d75232cc6d71dc9c7eae4b76a9004fd81501d0c1 + /@ava/pretty-format/1.1.0: + dependencies: + ansi-styles: 2.2.1 + esutils: 2.0.2 + resolution: d0a57d25eb9aeab9643bdd1a030642b91c123e28 + /@gulp-sourcemaps/identity-map/1.0.1: + dependencies: + acorn: 5.0.3 + css: 2.2.1 + normalize-path: 2.1.1 + source-map: 0.5.6 + through2: 2.0.3 + resolution: cfa23bc5840f9104ce32a65e74db7e7a974bbee1 + /@gulp-sourcemaps/map-sources/1.0.0: + dependencies: + normalize-path: 2.1.1 + through2: 2.0.3 + resolution: 890ae7c5d8c877f6d384860215ace9d7ec945bda + /JSONStream/0.10.0: + dependencies: + jsonparse: 0.0.5 + through: 2.3.8 + resolution: 74349d0d89522b71f30f0a03ff9bd20ca6f12ac0 + /JSONStream/1.3.1: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + resolution: 707f761e01dae9e16f1bcf93703b78c70966579a + /abbrev/1.1.0: d0554c2256636e2f56e7c2e5ad183f859428d81f + /acorn-jsx/3.0.1: + dependencies: + acorn: 3.3.0 + resolution: afdf9488fb1ecefc8348f6fb22f464e32a58b36b + /acorn/1.2.2: c8ce27de0acc76d896d2b1fad3df588d9e82f014 + /acorn/3.3.0: 45e37fb39e8da3f25baee3ff5369e2bb5f22017a + /acorn/4.0.13: 105495ae5361d697bd195c825192e1ad7f253787 + /acorn/5.0.3: c460df08491463f028ccb82eab3730bf01087b3d + /ajv-keywords/1.5.1: 314dd0a4b3368fad3dfcdc54ede6171b886daf3c + /ajv/4.11.8: + dependencies: + co: 4.6.0 + json-stable-stringify: 1.0.1 + resolution: 82ffb02b29e662ae53bdc20af15947706739c536 + /align-text/0.1.4: + dependencies: + kind-of: 3.2.2 + longest: 1.0.1 + repeat-string: 1.6.1 + resolution: 0cd90a561093f35d0a99256c22b7069433fad117 + /alphanum-sort/1.0.2: 97a1119649b211ad33691d9f9f486a8ec9fbe0a3 + /amdefine/1.0.1: 4a5282ac164729e93619bcfd3ad151f817ce91f5 + /ansi-align/1.1.0: + dependencies: + string-width: 1.0.2 + resolution: 2f0c1658829739add5ebb15e6b0c6e3423f016ba + /ansi-align/2.0.0: + dependencies: + string-width: 2.0.0 + resolution: c36aeccba563b89ceb556f3690f0b1d9e3547f7f + /ansi-escapes/1.4.0: d3a8a83b319aa67793662b13e761c7911422306e + /ansi-regex/0.2.1: 0d8e946967a3d8143f93e24e298525fc1b2235f9 + /ansi-regex/2.1.1: c3b33ab5ee360d86e0e628f0468ae7ef27d654df + /ansi-styles/1.0.0: cb102df1c56f5123eab8b67cd7b98027a0279178 + /ansi-styles/1.1.0: eaecbf66cd706882760b2f4691582b8f55d7a7de + /ansi-styles/2.2.1: b432dd3358b634cf75e1e4664368240533c1ddbe + /anymatch/1.3.0: + dependencies: + arrify: 1.0.1 + micromatch: 2.3.11 + resolution: a3e52fa39168c825ff57b0248126ce5a8ff95507 + /app-root-path/2.0.1: cd62dcf8e4fd5a417efc664d2e5b10653c651b46 + /aproba/1.1.2: 45c6629094de4e96f693ef7eab74ae079c240fc1 + /archive-type/3.2.0: + dependencies: + file-type: 3.9.0 + resolution: 9cd9c006957ebe95fadad5bd6098942a813737f6 + /archy/1.0.0: f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40 + /are-we-there-yet/1.1.4: + dependencies: + delegates: 1.0.0 + readable-stream: 2.2.10 + resolution: bb5dca382bb94f05e15194373d16fd3ba1ca110d + /argparse/1.0.9: + dependencies: + sprintf-js: 1.0.3 + resolution: 73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86 + /arr-diff/2.0.0: + dependencies: + arr-flatten: 1.0.3 + resolution: 8f3b827f955a8bd669697e4a4256ac3ceae356cf + /arr-exclude/1.0.0: dfc7c2e552a270723ccda04cf3128c8cbfe5c631 + /arr-flatten/1.0.3: a274ed85ac08849b6bd7847c4580745dc51adfb1 + /array-differ/1.0.0: eff52e3758249d33be402b8bb8e564bb2b5d4031 + /array-filter/0.0.1: 7da8cf2e26628ed732803581fd21f67cacd2eeec + /array-find-index/1.0.2: df010aa1287e164bbda6f9723b0a96a1ec4187a1 + /array-map/0.0.0: 88a2bab73d1cf7bcd5c1b118a003f66f665fa662 + /array-reduce/0.0.0: 173899d3ffd1c7d9383e4479525dbe278cab5f2b + /array-union/1.0.2: + dependencies: + array-uniq: 1.0.3 + resolution: 9a34410e4f4e3da23dea375be5be70f24778ec39 + /array-uniq/1.0.3: af6ac877a25cc7f74e058894753858dfdb24fdb6 + /array-unique/0.2.1: a1d97ccafcbc2625cc70fadceb36a50c58b01a53 + /arrify/1.0.1: 898508da2226f380df904728456849c1501a4b0d + /asn1.js/4.9.1: + dependencies: + bn.js: 4.11.6 + inherits: 2.0.3 + minimalistic-assert: 1.0.0 + resolution: 48ba240b45a9280e94748990ba597d216617fd40 + /asn1/0.2.3: dac8787713c9966849fc8180777ebe9c1ddf3b86 + /assert-plus/0.2.0: d74e1b87e7affc0db8aadb7021f3fe48101ab234 + /assert-plus/1.0.0: f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525 + /assert/1.4.1: + dependencies: + util: 0.10.3 + resolution: 99912d591836b5a6f5b345c0f07eefc08fc65d91 + /assertion-error/1.0.2: 13ca515d86206da0bac66e834dd397d87581094c + /ast-types/0.8.15: 8eef0827f04dff0ec8857ba925abe3fea6194e52 + /astw/2.2.0: + dependencies: + acorn: 4.0.13 + resolution: 7bd41784d32493987aeb239b6b4e1c57a873b917 + /async-each-series/1.1.0: f42fd8155d38f21a5b8ea07c28e063ed1700b138 + /async-each/1.0.1: 19d386a1d9edc6e7c1c85d388aedbcc56d33602d + /async-foreach/0.1.3: 36121f845c0578172de419a97dbeb1d16ec34542 + /async/1.5.2: ec6a61ae56480c0c3cb241c95618e20892f9672a + /asynckit/0.4.0: c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79 + /atob/1.1.3: 95f13629b12c3a51a5d215abdce2aa9f32f80773 + /auto-bind/1.1.0: 93b864dc7ee01a326281775d5c75ca0a751e5961 + /autoprefixer/6.7.7: + dependencies: + browserslist: 1.7.7 + caniuse-db: 1.0.30000676 + normalize-range: 0.1.2 + num2fraction: 1.2.2 + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: 1dbd1c835658e35ce3f9984099db00585c782014 + /ava-init/0.2.0: + dependencies: + arr-exclude: 1.0.0 + execa: 0.5.1 + has-yarn: 1.0.0 + read-pkg-up: 2.0.0 + write-pkg: 2.1.0 + resolution: 9304c8b4c357d66e3dfdae1fbff47b1199d5c55d + /ava/0.18.2: + dependencies: + '@ava/babel-preset-stage-4': 1.0.0 + '@ava/babel-preset-transform-test-files': 2.0.1 + '@ava/pretty-format': 1.1.0 + arr-flatten: 1.0.3 + array-union: 1.0.2 + array-uniq: 1.0.3 + arrify: 1.0.1 + auto-bind: 1.1.0 + ava-init: 0.2.0 + babel-code-frame: 6.22.0 + babel-core: 6.24.1 + bluebird: 3.5.0 + caching-transform: 1.0.1 + chalk: 1.1.3 + chokidar: 1.7.0 + clean-stack: 1.3.0 + clean-yaml-object: 0.1.0 + cli-cursor: 2.1.0 + cli-spinners: 1.0.0 + cli-truncate: 0.2.1 + co-with-promise: 4.6.0 + code-excerpt: 2.1.0 + common-path-prefix: 1.0.0 + convert-source-map: 1.5.0 + core-assert: 0.2.1 + currently-unhandled: 0.4.1 + debug: 2.6.8 + diff: 3.2.0 + dot-prop: 4.1.1 + empower-core: 0.6.1 + equal-length: 1.0.1 + figures: 2.0.0 + find-cache-dir: 0.1.1 + fn-name: 2.0.1 + get-port: 2.1.0 + globby: 6.1.0 + has-flag: 2.0.0 + ignore-by-default: 1.0.1 + indent-string: 3.1.0 + is-ci: 1.0.10 + is-generator-fn: 1.0.0 + is-obj: 1.0.1 + is-observable: 0.2.0 + is-promise: 2.1.0 + jest-snapshot: 18.1.0 + last-line-stream: 1.0.0 + lodash.debounce: 4.0.8 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isequal: 4.5.0 + loud-rejection: 1.6.0 + matcher: 0.1.2 + max-timeout: 1.0.0 + md5-hex: 2.0.0 + meow: 3.7.0 + ms: 0.7.3 + multimatch: 2.1.0 + observable-to-promise: 0.4.0 + option-chain: 0.1.1 + package-hash: 1.2.0 + pkg-conf: 2.0.0 + plur: 2.1.2 + pretty-ms: 2.1.0 + require-precompiled: 0.1.0 + resolve-cwd: 1.0.0 + slash: 1.0.0 + source-map-support: 0.4.15 + stack-utils: 1.0.1 + strip-ansi: 3.0.1 + strip-bom-buf: 1.0.0 + time-require: 0.1.2 + unique-temp-dir: 1.0.0 + update-notifier: 1.0.3 + resolution: 79253d1636077034a2780bb55b5c3e6c3d7f312f + /aws-sign2/0.6.0: 14342dd38dbcc94d0e5b87d763cd63612c0e794f + /aws4/1.6.0: 83ef5ca860b2b32e4a0deedee8c771b9db57471e + /babel-code-frame/6.22.0: + dependencies: + chalk: 1.1.3 + esutils: 2.0.2 + js-tokens: 3.0.1 + resolution: 027620bee567a88c32561574e7fd0801d33118e4 + /babel-core/6.24.1: + dependencies: + 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.2 + convert-source-map: 1.5.0 + debug: 2.6.8 + json5: 0.5.1 + lodash: 4.17.4 + minimatch: 3.0.4 + path-is-absolute: 1.0.1 + private: 0.1.7 + slash: 1.0.0 + source-map: 0.5.6 + resolution: 8c428564dce1e1f41fb337ec34f4c3b022b5ad83 + /babel-generator/6.24.1: + dependencies: + 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 + resolution: e715f486c58ded25649d888944d52aa07c5d9497 + /babel-helper-builder-binary-assignment-operator-visitor/6.24.1: + dependencies: + babel-helper-explode-assignable-expression: 6.24.1 + babel-runtime: 6.23.0 + babel-types: 6.24.1 + resolution: cce4517ada356f4220bcae8a02c2b346f9a56664 + /babel-helper-call-delegate/6.24.1: + dependencies: + babel-helper-hoist-variables: 6.24.1 + babel-runtime: 6.23.0 + babel-traverse: 6.24.1 + babel-types: 6.24.1 + resolution: ece6aacddc76e41c3461f88bfc575bd0daa2df8d + /babel-helper-define-map/6.24.1: + dependencies: + babel-helper-function-name: 6.24.1 + babel-runtime: 6.23.0 + babel-types: 6.24.1 + lodash: 4.17.4 + resolution: 7a9747f258d8947d32d515f6aa1c7bd02204a080 + /babel-helper-explode-assignable-expression/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-traverse: 6.24.1 + babel-types: 6.24.1 + resolution: f25b82cf7dc10433c55f70592d5746400ac22caa + /babel-helper-function-name/6.24.1: + dependencies: + 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 + resolution: d3475b8c03ed98242a25b48351ab18399d3580a9 + /babel-helper-get-function-arity/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-types: 6.24.1 + resolution: 8f7782aa93407c41d3aa50908f89b031b1b6853d + /babel-helper-hoist-variables/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-types: 6.24.1 + resolution: 1ecb27689c9d25513eadbc9914a73f5408be7a76 + /babel-helper-optimise-call-expression/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-types: 6.24.1 + resolution: f7a13427ba9f73f8f4fa993c54a97882d1244257 + /babel-helper-regex/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-types: 6.24.1 + lodash: 4.17.4 + resolution: d36e22fab1008d79d88648e32116868128456ce8 + /babel-helper-remap-async-to-generator/6.24.1: + dependencies: + 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 + resolution: 5ec581827ad723fecdd381f1c928390676e4551b + /babel-helper-replace-supers/6.24.1: + dependencies: + 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 + resolution: bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a + /babel-helpers/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-template: 6.24.1 + resolution: 3471de9caec388e5c850e597e58a26ddf37602b2 + /babel-messages/6.23.0: + dependencies: + babel-runtime: 6.23.0 + resolution: f3cdf4703858035b2a2951c6ec5edf6c62f2630e + /babel-plugin-ava-throws-helper/1.0.0: + dependencies: + babel-template: 6.24.1 + babel-types: 6.24.1 + resolution: 8fe6e79d2fd19838b5c3649f89cfb03fd563e241 + /babel-plugin-check-es2015-constants/6.22.0: + dependencies: + babel-runtime: 6.23.0 + resolution: 35157b101426fd2ffd3da3f75c7d1e91835bbf8a + /babel-plugin-espower/2.3.2: + dependencies: + babel-generator: 6.24.1 + babylon: 6.17.2 + call-matcher: 1.0.1 + core-js: 2.4.1 + espower-location-detector: 1.0.0 + espurify: 1.7.0 + estraverse: 4.2.0 + resolution: 5516b8fcdb26c9f0e1d8160749f6e4c65e71271e + /babel-plugin-syntax-async-functions/6.13.0: cad9cad1191b5ad634bf30ae0872391e0647be95 + /babel-plugin-syntax-exponentiation-operator/6.13.0: 9ee7e8337290da95288201a6a57f4170317830de + /babel-plugin-syntax-trailing-function-commas/6.22.0: ba0360937f8d06e40180a43fe0d5616fff532cf3 + /babel-plugin-transform-async-to-generator/6.24.1: + dependencies: + babel-helper-remap-async-to-generator: 6.24.1 + babel-plugin-syntax-async-functions: 6.13.0 + babel-runtime: 6.23.0 + resolution: 6536e378aff6cb1d5517ac0e40eb3e9fc8d08761 + /babel-plugin-transform-es2015-arrow-functions/6.22.0: + dependencies: + babel-runtime: 6.23.0 + resolution: 452692cb711d5f79dc7f85e440ce41b9f244d221 + /babel-plugin-transform-es2015-block-scoped-functions/6.22.0: + dependencies: + babel-runtime: 6.23.0 + resolution: bbc51b49f964d70cb8d8e0b94e820246ce3a6141 + /babel-plugin-transform-es2015-block-scoping/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-template: 6.24.1 + babel-traverse: 6.24.1 + babel-types: 6.24.1 + lodash: 4.17.4 + resolution: 76c295dc3a4741b1665adfd3167215dcff32a576 + /babel-plugin-transform-es2015-classes/6.24.1: + dependencies: + babel-helper-define-map: 6.24.1 + 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 + resolution: 5a4c58a50c9c9461e564b4b2a3bfabc97a2584db + /babel-plugin-transform-es2015-computed-properties/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-template: 6.24.1 + resolution: 6fe2a8d16895d5634f4cd999b6d3480a308159b3 + /babel-plugin-transform-es2015-destructuring/6.23.0: + dependencies: + babel-runtime: 6.23.0 + resolution: 997bb1f1ab967f682d2b0876fe358d60e765c56d + /babel-plugin-transform-es2015-duplicate-keys/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-types: 6.24.1 + resolution: 73eb3d310ca969e3ef9ec91c53741a6f1576423e + /babel-plugin-transform-es2015-for-of/6.23.0: + dependencies: + babel-runtime: 6.23.0 + resolution: f47c95b2b613df1d3ecc2fdb7573623c75248691 + /babel-plugin-transform-es2015-function-name/6.24.1: + dependencies: + babel-helper-function-name: 6.24.1 + babel-runtime: 6.23.0 + babel-types: 6.24.1 + resolution: 834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b + /babel-plugin-transform-es2015-literals/6.22.0: + dependencies: + babel-runtime: 6.23.0 + resolution: 4f54a02d6cd66cf915280019a31d31925377ca2e + /babel-plugin-transform-es2015-modules-amd/6.24.1: + dependencies: + babel-plugin-transform-es2015-modules-commonjs: 6.24.1 + babel-runtime: 6.23.0 + babel-template: 6.24.1 + resolution: 3b3e54017239842d6d19c3011c4bd2f00a00d154 + /babel-plugin-transform-es2015-modules-commonjs/6.24.1: + dependencies: + babel-plugin-transform-strict-mode: 6.24.1 + babel-runtime: 6.23.0 + babel-template: 6.24.1 + babel-types: 6.24.1 + resolution: d3e310b40ef664a36622200097c6d440298f2bfe + /babel-plugin-transform-es2015-modules-systemjs/6.24.1: + dependencies: + babel-helper-hoist-variables: 6.24.1 + babel-runtime: 6.23.0 + babel-template: 6.24.1 + resolution: ff89a142b9119a906195f5f106ecf305d9407d23 + /babel-plugin-transform-es2015-modules-umd/6.24.1: + dependencies: + babel-plugin-transform-es2015-modules-amd: 6.24.1 + babel-runtime: 6.23.0 + babel-template: 6.24.1 + resolution: ac997e6285cd18ed6176adb607d602344ad38468 + /babel-plugin-transform-es2015-object-super/6.24.1: + dependencies: + babel-helper-replace-supers: 6.24.1 + babel-runtime: 6.23.0 + resolution: 24cef69ae21cb83a7f8603dad021f572eb278f8d + /babel-plugin-transform-es2015-parameters/6.24.1: + dependencies: + 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 + resolution: 57ac351ab49caf14a97cd13b09f66fdf0a625f2b + /babel-plugin-transform-es2015-shorthand-properties/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-types: 6.24.1 + resolution: 24f875d6721c87661bbd99a4622e51f14de38aa0 + /babel-plugin-transform-es2015-spread/6.22.0: + dependencies: + babel-runtime: 6.23.0 + resolution: d6d68a99f89aedc4536c81a542e8dd9f1746f8d1 + /babel-plugin-transform-es2015-sticky-regex/6.24.1: + dependencies: + babel-helper-regex: 6.24.1 + babel-runtime: 6.23.0 + babel-types: 6.24.1 + resolution: 00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc + /babel-plugin-transform-es2015-template-literals/6.22.0: + dependencies: + babel-runtime: 6.23.0 + resolution: a84b3450f7e9f8f1f6839d6d687da84bb1236d8d + /babel-plugin-transform-es2015-typeof-symbol/6.23.0: + dependencies: + babel-runtime: 6.23.0 + resolution: dec09f1cddff94b52ac73d505c84df59dcceb372 + /babel-plugin-transform-es2015-unicode-regex/6.24.1: + dependencies: + babel-helper-regex: 6.24.1 + babel-runtime: 6.23.0 + regexpu-core: 2.0.0 + resolution: d38b12f42ea7323f729387f18a7c5ae1faeb35e9 + /babel-plugin-transform-exponentiation-operator/6.24.1: + dependencies: + babel-helper-builder-binary-assignment-operator-visitor: 6.24.1 + babel-plugin-syntax-exponentiation-operator: 6.13.0 + babel-runtime: 6.23.0 + resolution: 2ab0c9c7f3098fa48907772bb813fe41e8de3a0e + /babel-plugin-transform-regenerator/6.24.1: + dependencies: + regenerator-transform: 0.9.11 + resolution: b8da305ad43c3c99b4848e4fe4037b770d23c418 + /babel-plugin-transform-strict-mode/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-types: 6.24.1 + resolution: d5faf7aa578a65bbe591cf5edae04a0c67020758 + /babel-preset-env/1.5.1: + dependencies: + 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.24.1 + 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.24.1 + 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.24.1 + browserslist: 2.1.4 + invariant: 2.2.2 + semver: 5.3.0 + resolution: d2eca6af179edf27cdc305a84820f601b456dd0b + /babel-preset-es2015/6.24.1: + dependencies: + babel-plugin-check-es2015-constants: 6.22.0 + 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.24.1 + 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.24.1 + 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-regenerator: 6.24.1 + resolution: d44050d6bc2c9feea702aaf38d727a0210538939 + /babel-preset-es2016/6.24.1: + dependencies: + babel-plugin-transform-exponentiation-operator: 6.24.1 + resolution: f900bf93e2ebc0d276df9b8ab59724ebfd959f8b + /babel-preset-es2017/6.24.1: + dependencies: + babel-plugin-syntax-trailing-function-commas: 6.22.0 + babel-plugin-transform-async-to-generator: 6.24.1 + resolution: 597beadfb9f7f208bcfd8a12e9b2b29b8b2f14d1 + /babel-preset-latest/6.24.1: + dependencies: + babel-preset-es2015: 6.24.1 + babel-preset-es2016: 6.24.1 + babel-preset-es2017: 6.24.1 + resolution: 677de069154a7485c2d25c577c02f624b85b85e8 + /babel-register/6.24.1: + dependencies: + 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 + resolution: 7e10e13a2f71065bdfad5a1787ba45bca6ded75f + /babel-runtime/6.23.0: + dependencies: + core-js: 2.4.1 + regenerator-runtime: 0.10.5 + resolution: 0a9489f144de70efb3ce4300accdb329e2fc543b + /babel-template/6.24.1: + dependencies: + babel-runtime: 6.23.0 + babel-traverse: 6.24.1 + babel-types: 6.24.1 + babylon: 6.17.2 + lodash: 4.17.4 + resolution: 04ae514f1f93b3a2537f2a0f60a5a45fb8308333 + /babel-traverse/6.24.1: + dependencies: + babel-code-frame: 6.22.0 + babel-messages: 6.23.0 + babel-runtime: 6.23.0 + babel-types: 6.24.1 + babylon: 6.17.2 + debug: 2.6.8 + globals: 9.17.0 + invariant: 2.2.2 + lodash: 4.17.4 + resolution: ab36673fd356f9a0948659e7b338d5feadb31695 + /babel-types/6.24.1: + dependencies: + babel-runtime: 6.23.0 + esutils: 2.0.2 + lodash: 4.17.4 + to-fast-properties: 1.0.3 + resolution: a136879dc15b3606bda0d90c1fc74304c2ff0975 + /babelify/7.3.0: + dependencies: + babel-core: 6.24.1 + object-assign: 4.1.1 + resolution: aa56aede7067fd7bd549666ee16dc285087e88e5 + /babylon/6.17.2: 201d25ef5f892c41bae49488b08db0dd476e9f5c + /balanced-match/0.4.2: cb3f3e3c732dc0f01ee70b403f302e61d7709838 + /base62/0.1.1: 7b4174c2f94449753b11c2651c083da841a7b084 + /base64-js/1.2.0: a39992d723584811982be5e290bb6a53d86700f1 + /bcrypt-pbkdf/1.0.1: + dependencies: + tweetnacl: 0.14.5 + resolution: 63bc5dcb61331b92bc05fd528953c33462a06f8d + /beeper/1.1.1: e6d5ea8c5dad001304a70b22638447f69cb2f809 + /bin-build/2.2.0: + dependencies: + archive-type: 3.2.0 + decompress: 3.0.0 + download: 4.4.3 + exec-series: 1.0.3 + rimraf: 2.6.1 + tempfile: 1.1.1 + url-regex: 3.2.0 + resolution: 11f8dd61f70ffcfa2bdcaa5b46f5e8fedd4221cc + /bin-check/2.0.0: + dependencies: + executable: 1.1.0 + resolution: 86f8e6f4253893df60dc316957f5af02acb05930 + /bin-version-check/2.1.0: + dependencies: + bin-version: 1.0.4 + minimist: 1.2.0 + semver: 4.3.6 + semver-truncate: 1.1.2 + resolution: e4e5df290b9069f7d111324031efc13fdd11a5b0 + /bin-version/1.0.4: + dependencies: + find-versions: 1.2.1 + resolution: 9eb498ee6fd76f7ab9a7c160436f89579435d78e + /bin-wrapper/3.0.2: + dependencies: + bin-check: 2.0.0 + bin-version-check: 2.1.0 + download: 4.4.3 + each-async: 1.1.1 + lazy-req: 1.1.0 + os-filter-obj: 1.0.3 + resolution: 67d3306262e4b1a5f2f88ee23464f6a655677aeb + /binary-extensions/1.8.0: 48ec8d16df4377eae5fa5884682480af4d95c774 + /bl/0.9.5: + dependencies: + readable-stream: 1.0.34 + resolution: c06b797af085ea00bc527afc8efcf11de2232054 + /bl/1.2.1: + dependencies: + readable-stream: 2.2.10 + resolution: cac328f7bee45730d404b692203fcb590e172d5e + /block-stream/0.0.9: + dependencies: + inherits: 2.0.3 + resolution: 13ebfe778a03205cfe03751481ebb4b3300c126a + /bluebird/3.5.0: 791420d7f551eea2897453a8a77653f96606d67c + /bn.js/4.11.6: 53344adb14617a13f6e8dd2ce28905d1c0ba3215 + /body-parser/1.14.2: + dependencies: + bytes: 2.2.0 + content-type: 1.0.2 + debug: 2.2.0 + depd: 1.1.0 + http-errors: 1.3.1 + iconv-lite: 0.4.13 + on-finished: 2.3.0 + qs: 5.2.0 + raw-body: 2.1.7 + type-is: 1.6.15 + resolution: 1015cb1fe2c443858259581db53332f8d0cf50f9 + /boom/2.10.1: + dependencies: + hoek: 2.16.3 + resolution: 39c8918ceff5799f83f9492a848f625add0c766f + /boxen/0.6.0: + dependencies: + ansi-align: 1.1.0 + camelcase: 2.1.1 + chalk: 1.1.3 + cli-boxes: 1.0.0 + filled-array: 1.1.0 + object-assign: 4.1.1 + repeating: 2.0.1 + string-width: 1.0.2 + widest-line: 1.0.0 + resolution: 8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6 + /boxen/1.1.0: + dependencies: + ansi-align: 2.0.0 + camelcase: 4.1.0 + chalk: 1.1.3 + cli-boxes: 1.0.0 + string-width: 2.0.0 + term-size: 0.1.1 + widest-line: 1.0.0 + resolution: b1b69dd522305e807a99deee777dbd6e5167b102 + /brace-expansion/1.1.7: + dependencies: + balanced-match: 0.4.2 + concat-map: 0.0.1 + resolution: 3effc3c50e000531fb720eaff80f0ae8ef23cf59 + /braces/1.8.5: + dependencies: + expand-range: 1.8.2 + preserve: 0.2.0 + repeat-element: 1.1.2 + resolution: ba77962e12dff969d6b76711e914b737857bf6a7 + /brorand/1.1.0: 12c25efe40a45e3c323eb8675a0a0ce57b22371f + /browser-pack/6.0.2: + dependencies: + JSONStream: 1.3.1 + combine-source-map: 0.7.2 + defined: 1.0.0 + through2: 2.0.3 + umd: 3.0.1 + resolution: f86cd6cef4f5300c8e63e07a4d512f65fbff4531 + /browser-resolve/1.11.2: + dependencies: + resolve: 1.1.7 + resolution: 8ff09b0a2c421718a1051c260b32e48f442938ce + /browserify-aes/1.0.6: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.3 + create-hash: 1.1.3 + evp_bytestokey: 1.0.0 + inherits: 2.0.3 + resolution: 5e7725dbdef1fd5930d4ebab48567ce451c48a0a + /browserify-cache-api/3.0.1: + dependencies: + async: 1.5.2 + through2: 2.0.3 + xtend: 4.0.1 + resolution: 96247e853f068fd6e0d45cc73f0bb2cd9778ef02 + /browserify-cipher/1.0.0: + dependencies: + browserify-aes: 1.0.6 + browserify-des: 1.0.0 + evp_bytestokey: 1.0.0 + resolution: 9988244874bf5ed4e28da95666dcd66ac8fc363a + /browserify-des/1.0.0: + dependencies: + cipher-base: 1.0.3 + des.js: 1.0.0 + inherits: 2.0.3 + resolution: daa277717470922ed2fe18594118a175439721dd + /browserify-incremental/3.1.1: + dependencies: + JSONStream: 0.10.0 + browserify-cache-api: 3.0.1 + through2: 2.0.3 + xtend: 4.0.1 + resolution: 0713cb7587247a632a9f08cf1bd169b878b62a8a + /browserify-rsa/4.0.1: + dependencies: + bn.js: 4.11.6 + randombytes: 2.0.4 + resolution: 21e0abfaf6f2029cf2fafb133567a701d4135524 + /browserify-sign/4.0.4: + dependencies: + bn.js: 4.11.6 + browserify-rsa: 4.0.1 + create-hash: 1.1.3 + create-hmac: 1.1.6 + elliptic: 6.4.0 + inherits: 2.0.3 + parse-asn1: 5.1.0 + resolution: aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298 + /browserify-zlib/0.1.4: + dependencies: + pako: 0.2.9 + resolution: bb35f8a519f600e0fa6b8485241c979d0141fb2d + /browserify/14.4.0: + dependencies: + JSONStream: 1.3.1 + assert: 1.4.1 + browser-pack: 6.0.2 + browser-resolve: 1.11.2 + browserify-zlib: 0.1.4 + buffer: 5.0.6 + cached-path-relative: 1.0.1 + concat-stream: 1.5.2 + console-browserify: 1.1.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.11.0 + defined: 1.0.0 + deps-sort: 2.0.0 + domain-browser: 1.1.7 + duplexer2: 0.1.4 + events: 1.1.1 + glob: 7.1.2 + has: 1.0.1 + htmlescape: 1.1.1 + https-browserify: 1.0.0 + inherits: 2.0.3 + insert-module-globals: 7.0.1 + labeled-stream-splicer: 2.0.0 + module-deps: 4.1.1 + os-browserify: 0.1.2 + parents: 1.0.1 + path-browserify: 0.0.0 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + read-only-stream: 2.0.0 + readable-stream: 2.2.10 + resolve: 1.3.3 + shasum: 1.0.2 + shell-quote: 1.6.1 + stream-browserify: 2.0.1 + stream-http: 2.7.1 + string_decoder: 1.0.1 + subarg: 1.0.0 + syntax-error: 1.3.0 + through2: 2.0.3 + timers-browserify: 1.4.2 + tty-browserify: 0.0.0 + url: 0.11.0 + util: 0.10.3 + vm-browserify: 0.0.4 + xtend: 4.0.1 + resolution: 089a3463af58d0e48d8cd4070b3f74654d5abca9 + /browserslist/1.7.7: + dependencies: + caniuse-db: 1.0.30000676 + electron-to-chromium: 1.3.13 + resolution: 0bd76704258be829b2398bb50e4b62d1a166b0b9 + /browserslist/2.1.4: + dependencies: + caniuse-lite: 1.0.30000676 + electron-to-chromium: 1.3.13 + resolution: cc526af4a1312b7d2e05653e56d0c8ab70c0e053 + /buf-compare/1.0.1: fef28da8b8113a0a0db4430b0b6467b69730b34a + /buffer-crc32/0.2.13: 0d333e3f00eac50aa1454abd30ef8c2a5d9a7242 + /buffer-to-vinyl/1.1.0: + dependencies: + file-type: 3.9.0 + readable-stream: 2.2.10 + uuid: 2.0.3 + vinyl: 1.2.0 + resolution: 00f15faee3ab7a1dda2cde6d9121bffdd07b2262 + /buffer-xor/1.0.3: 26e61ed1422fb70dd42e6e36729ed51d855fe8d9 + /buffer/5.0.6: + dependencies: + base64-js: 1.2.0 + ieee754: 1.1.8 + resolution: 2ea669f7eec0b6eda05b08f8b5ff661b28573588 + /bufferstreams/1.1.1: + dependencies: + readable-stream: 2.2.10 + resolution: 0161373060ac5988eff99058731114f6e195d51e + /builtin-modules/1.1.1: 270f076c5a72c02f5b65a47df94c5fe3a278892f + /builtin-status-codes/3.0.0: 85982878e21b98e1c66425e03d0174788f569ee8 + /bytes/2.2.0: fd35464a403f6f9117c2de3609ecff9cae000588 + /bytes/2.4.0: 7d97196f9d5baf7f6935e25985549edd2a6c2339 + /cached-path-relative/1.0.1: d09c4b52800aa4c078e2dd81a869aac90d2e54e7 + /caching-transform/1.0.1: + dependencies: + md5-hex: 1.3.0 + mkdirp: 0.5.1 + write-file-atomic: 1.3.4 + resolution: 6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1 + /call-matcher/1.0.1: + dependencies: + core-js: 2.4.1 + deep-equal: 1.0.1 + espurify: 1.7.0 + estraverse: 4.2.0 + resolution: 5134d077984f712a54dad3cbf62de28dce416ca8 + /call-signature/0.0.2: a84abc825a55ef4cb2b028bd74e205a65b9a4996 + /caller-path/0.1.0: + dependencies: + callsites: 0.2.0 + resolution: 94085ef63581ecd3daa92444a8fe94e82577751f + /callsites/0.2.0: afab96262910a7f33c19a5775825c69f34e350ca + /camel-case/3.0.0: + dependencies: + no-case: 2.3.1 + upper-case: 1.1.3 + resolution: ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73 + /camelcase-keys/2.1.0: + dependencies: + camelcase: 2.1.1 + map-obj: 1.0.1 + resolution: 308beeaffdf28119051efa1d932213c91b8f92e7 + /camelcase/1.2.1: 9bb5304d2e0b56698b2c758b08a3eaa9daa58a39 + /camelcase/2.1.1: 7c1d16d679a1bbe59ca02cacecfb011e201f5a1f + /camelcase/3.0.0: 32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a + /camelcase/4.1.0: d545635be1e33c542649c69173e5de6acfae34dd + /caniuse-api/1.6.1: + dependencies: + browserslist: 1.7.7 + caniuse-db: 1.0.30000676 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + resolution: b534e7c734c4f81ec5fbe8aca2ad24354b962c6c + /caniuse-db/1.0.30000676: 82ea578237637c8ff34a28acaade373b624c4ea8 + /caniuse-lite/1.0.30000676: 1e962123f48073f0c51c4ea0651dd64d25786498 + /capture-stack-trace/1.0.0: 4a6fa07399c26bba47f0b2496b4d0fb408c5550d + /caseless/0.12.0: 1b681c21ff84033c826543090689420d187151dc + /caw/1.2.0: + dependencies: + get-proxy: 1.1.0 + is-obj: 1.0.1 + object-assign: 3.0.0 + tunnel-agent: 0.4.3 + resolution: ffb226fe7efc547288dc62ee3e97073c212d1034 + /center-align/0.1.3: + dependencies: + align-text: 0.1.4 + lazy-cache: 1.0.4 + resolution: aa0d32629b6ee972200411cbd4461c907bc2b7ad + /chai/3.5.0: + dependencies: + assertion-error: 1.0.2 + deep-eql: 0.1.3 + type-detect: 1.0.0 + resolution: 4d02637b067fe958bdbfdd3a40ec56fef7373247 + /chalk/0.4.0: + dependencies: + ansi-styles: 1.0.0 + has-color: 0.1.7 + strip-ansi: 0.1.1 + resolution: 5199a3ddcd0c1efe23bc08c1b027b06176e0c64f + /chalk/0.5.1: + dependencies: + ansi-styles: 1.1.0 + escape-string-regexp: 1.0.5 + has-ansi: 0.1.0 + strip-ansi: 0.3.0 + supports-color: 0.2.0 + resolution: 663b3a648b68b55d04690d49167aa837858f2174 + /chalk/1.1.3: + dependencies: + 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 + resolution: a8115c55e4a702fe4d150abd3872822a7e09fc98 + /chokidar/1.7.0: + dependencies: + anymatch: 1.3.0 + async-each: 1.0.1 + fsevents: 1.1.1 + 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 + resolution: 798e689778151c8076b4b360e5edd28cda2bb468 + /ci-info/1.0.0: dc5285f2b4e251821683681c381c3388f46ec534 + /cipher-base/1.0.3: + dependencies: + inherits: 2.0.3 + resolution: eeabf194419ce900da3018c207d212f2a6df0a07 + /circular-json/0.3.1: be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d + /clap/1.1.3: + dependencies: + chalk: 1.1.3 + resolution: b3bd36e93dd4cbfb395a3c26896352445265c05b + /clean-css/4.1.3: + dependencies: + source-map: 0.5.6 + resolution: 07cfe8980edb20d455ddc23aadcf1e04c6e509ce + /clean-stack/1.3.0: 9e821501ae979986c46b1d66d2d432db2fd4ae31 + /clean-yaml-object/0.1.0: 63fb110dc2ce1a84dc21f6d9334876d010ae8b68 + /cli-boxes/1.0.0: 4fa917c3e59c94a004cd61f8ee509da651687143 + /cli-cursor/1.0.2: + dependencies: + restore-cursor: 1.0.1 + resolution: 64da3f7d56a54412e59794bd62dc35295e8f2987 + /cli-cursor/2.1.0: + dependencies: + restore-cursor: 2.0.0 + resolution: b35dac376479facc3e94747d41d0d0f5238ffcb5 + /cli-spinners/0.1.2: bb764d88e185fb9e1e6a2a1f19772318f605e31c + /cli-spinners/1.0.0: ef987ed3d48391ac3dab9180b406a742180d6e6a + /cli-truncate/0.2.1: + dependencies: + slice-ansi: 0.0.4 + string-width: 1.0.2 + resolution: 9f15cfbb0705005369216c626ac7d05ab90dd574 + /cli-width/2.1.0: b234ca209b29ef66fc518d9b98d5847b00edf00a + /cliui/2.1.0: + dependencies: + center-align: 0.1.3 + right-align: 0.1.3 + wordwrap: 0.0.2 + resolution: 4b475760ff80264c762c3a1719032e91c7fea0d1 + /cliui/3.2.0: + dependencies: + string-width: 1.0.2 + strip-ansi: 3.0.1 + wrap-ansi: 2.1.0 + resolution: 120601537a916d29940f934da3b48d585a39213d + /clone-stats/0.0.1: b88f94a82cf38b8791d58046ea4029ad88ca99d1 + /clone/0.2.0: c6126a90ad4f72dbf5acdb243cc37724fe93fc1f + /clone/1.0.2: 260b7a99ebb1edfe247538175f783243cb19d149 + /co-with-promise/4.6.0: + dependencies: + pinkie-promise: 1.0.0 + resolution: 413e7db6f5893a60b942cf492c4bec93db415ab7 + /co/3.1.0: 4ea54ea5a08938153185e15210c68d9092bc1b78 + /co/4.6.0: 6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184 + /coa/1.0.2: + dependencies: + q: 1.5.0 + resolution: 2ba9fec3b4aa43d7a49d7e6c3561e92061b6bcec + /code-excerpt/2.1.0: + dependencies: + convert-to-spaces: 1.0.2 + resolution: 5dcc081e88f4a7e3b554e9e35d7ef232d47f8147 + /code-point-at/1.1.0: 0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77 + /color-convert/1.9.0: + dependencies: + color-name: 1.1.2 + resolution: 1accf97dd739b983bf994d56fec8f95853641b7a + /color-name/1.1.2: 5c8ab72b64bd2215d617ae9559ebb148475cf98d + /color-string/0.3.0: + dependencies: + color-name: 1.1.2 + resolution: 27d46fb67025c5c2fa25993bfbf579e47841b991 + /color/0.11.4: + dependencies: + clone: 1.0.2 + color-convert: 1.9.0 + color-string: 0.3.0 + resolution: 6d7b5c74fb65e841cd48792ad1ed5e07b904d764 + /colormin/1.1.2: + dependencies: + color: 0.11.4 + css-color-names: 0.0.4 + has: 1.0.1 + resolution: ea2f7420a72b96881a38aae59ec124a6f7298133 + /colors/1.1.2: 168a4701756b6a7f51a12ce0c97bfa28c084ed63 + /combine-source-map/0.7.2: + dependencies: + convert-source-map: 1.1.3 + inline-source-map: 0.6.2 + lodash.memoize: 3.0.4 + source-map: 0.5.6 + resolution: 0870312856b307a87cc4ac486f3a9a62aeccc09e + /combined-stream/1.0.5: + dependencies: + delayed-stream: 1.0.0 + resolution: 938370a57b4a51dea2c77c15d5c5fdf895164009 + /commander/2.8.1: + dependencies: + graceful-readlink: 1.0.1 + resolution: 06be367febfda0c330aa1e2a072d3dc9762425d4 + /commander/2.9.0: + dependencies: + graceful-readlink: 1.0.1 + resolution: 9c99094176e12240cb22d6c5146098400fe0f7d4 + /common-path-prefix/1.0.0: cd52f6f0712e0baab97d6f9732874f22f47752c0 + /commondir/1.0.1: ddd800da0c66127393cca5950ea968a3aaf1253b + /concat-map/0.0.1: d8a96bd77fd68df7793a73036a3ba0d5405d477b + /concat-stream/1.5.2: + dependencies: + inherits: 2.0.3 + readable-stream: 2.0.6 + typedarray: 0.0.6 + resolution: 708978624d856af41a5a741defdd261da752c266 + /concat-stream/1.6.0: + dependencies: + inherits: 2.0.3 + readable-stream: 2.2.10 + typedarray: 0.0.6 + resolution: 0aac662fd52be78964d5532f694784e70110acf7 + /configstore/2.1.0: + dependencies: + dot-prop: 3.0.0 + graceful-fs: 4.1.11 + mkdirp: 0.5.1 + object-assign: 4.1.1 + os-tmpdir: 1.0.2 + osenv: 0.1.4 + uuid: 2.0.3 + write-file-atomic: 1.3.4 + xdg-basedir: 2.0.0 + resolution: 737a3a7036e9886102aa6099e47bb33ab1aba1a1 + /configstore/3.1.0: + dependencies: + dot-prop: 4.1.1 + graceful-fs: 4.1.11 + make-dir: 1.0.0 + unique-string: 1.0.0 + write-file-atomic: 2.1.0 + xdg-basedir: 3.0.0 + resolution: 45df907073e26dfa1cf4b2d52f5b60545eaa11d1 + /console-browserify/1.1.0: + dependencies: + date-now: 0.1.4 + resolution: f0241c45730a9fc6323b206dbf38edc741d0bb10 + /console-control-strings/1.1.0: 3d7cf4464db6446ea644bf4b39507f9851008e8e + /console-stream/0.1.1: a095fe07b20465955f2fafd28b5d72bccd949d44 + /constants-browserify/1.0.0: c20b96d8c617748aaf1c16021760cd27fcb8cb75 + /contains-path/0.1.0: fe8cf184ff6670b6baef01a9d4861a5cbec4120a + /content-type/1.0.2: b7d113aee7a8dd27bd21133c4dc2529df1721eed + /convert-source-map/1.1.3: 4829c877e9fe49b3161f3bf3673888e204699860 + /convert-source-map/1.5.0: 9acd70851c6d5dfdd93d9282e5edf94a03ff46b5 + /convert-to-spaces/1.0.2: 7e3e48bbe6d997b1417ddca2868204b4d3d85715 + /core-assert/0.2.1: + dependencies: + buf-compare: 1.0.1 + is-error: 2.2.1 + resolution: f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f + /core-js/2.4.1: 4de911e667b0eae9124e34254b53aea6fc618d3e + /core-util-is/1.0.2: b5fd54220aa2bc5ab57aab7140c940754503c1a7 + /cosmiconfig/1.1.0: + dependencies: + graceful-fs: 4.1.11 + js-yaml: 3.8.4 + minimist: 1.2.0 + object-assign: 4.1.1 + os-homedir: 1.0.2 + parse-json: 2.2.0 + pinkie-promise: 2.0.1 + require-from-string: 1.2.1 + resolution: 0dea0f9804efdfb929fbb1b188e25553ea053d37 + /cosmiconfig/2.1.3: + dependencies: + is-directory: 0.3.1 + js-yaml: 3.8.4 + minimist: 1.2.0 + object-assign: 4.1.1 + os-homedir: 1.0.2 + parse-json: 2.2.0 + require-from-string: 1.2.1 + resolution: 952771eb0dddc1cb3fa2f6fbe51a522e93b3ee0a + /create-ecdh/4.0.0: + dependencies: + bn.js: 4.11.6 + elliptic: 6.4.0 + resolution: 888c723596cdf7612f6498233eebd7a35301737d + /create-error-class/3.0.2: + dependencies: + capture-stack-trace: 1.0.0 + resolution: 06be7abef947a3f14a30fd610671d401bca8b7b6 + /create-hash/1.1.3: + dependencies: + cipher-base: 1.0.3 + inherits: 2.0.3 + ripemd160: 2.0.1 + sha.js: 2.4.8 + resolution: 606042ac8b9262750f483caddab0f5819172d8fd + /create-hmac/1.1.6: + dependencies: + cipher-base: 1.0.3 + create-hash: 1.1.3 + inherits: 2.0.3 + ripemd160: 2.0.1 + safe-buffer: 5.1.0 + sha.js: 2.4.8 + resolution: acb9e221a4e17bdb076e90657c42b93e3726cf06 + /cross-spawn-async/2.2.5: + dependencies: + lru-cache: 4.0.2 + which: 1.2.14 + resolution: 845ff0c0834a3ded9d160daca6d390906bb288cc + /cross-spawn/3.0.1: + dependencies: + lru-cache: 4.0.2 + which: 1.2.14 + resolution: 1256037ecb9f0c5f79e3d6ef135e30770184b982 + /cross-spawn/4.0.2: + dependencies: + lru-cache: 4.0.2 + which: 1.2.14 + resolution: 7b9247621c23adfdd3856004a823cbe397424d41 + /cross-spawn/5.1.0: + dependencies: + lru-cache: 4.0.2 + shebang-command: 1.2.0 + which: 1.2.14 + resolution: e8bd0efee58fcff6f8f94510a0a554bbfa235449 + /cryptiles/2.0.5: + dependencies: + boom: 2.10.1 + resolution: 3bdfecdc608147c1c67202fa291e7dca59eaa3b8 + /crypto-browserify/3.11.0: + dependencies: + browserify-cipher: 1.0.0 + browserify-sign: 4.0.4 + create-ecdh: 4.0.0 + create-hash: 1.1.3 + create-hmac: 1.1.6 + diffie-hellman: 5.0.2 + inherits: 2.0.3 + pbkdf2: 3.0.12 + public-encrypt: 4.0.0 + randombytes: 2.0.4 + resolution: 3652a0906ab9b2a7e0c3ce66a408e957a2485522 + /crypto-random-string/1.0.0: a230f64f568310e1498009940790ec99545bca7e + /css-color-names/0.0.4: 808adc2e79cf84738069b646cb20ec27beb629e0 + /css/2.2.1: + dependencies: + inherits: 2.0.3 + source-map: 0.1.43 + source-map-resolve: 0.3.1 + urix: 0.1.0 + resolution: 73a4c81de85db664d4ee674f7d47085e3b2d55dc + /cssnano/3.10.0: + dependencies: + autoprefixer: 6.7.7 + decamelize: 1.2.0 + defined: 1.0.0 + has: 1.0.1 + object-assign: 4.1.1 + postcss: 5.2.17 + postcss-calc: 5.3.1 + postcss-colormin: 2.2.2 + postcss-convert-values: 2.6.1 + postcss-discard-comments: 2.0.4 + postcss-discard-duplicates: 2.1.0 + postcss-discard-empty: 2.1.0 + postcss-discard-overridden: 0.1.1 + postcss-discard-unused: 2.2.3 + postcss-filter-plugins: 2.0.2 + postcss-merge-idents: 2.1.7 + postcss-merge-longhand: 2.0.2 + postcss-merge-rules: 2.1.2 + postcss-minify-font-values: 1.0.5 + postcss-minify-gradients: 1.0.5 + postcss-minify-params: 1.2.2 + postcss-minify-selectors: 2.1.1 + postcss-normalize-charset: 1.1.1 + postcss-normalize-url: 3.0.8 + postcss-ordered-values: 2.2.3 + postcss-reduce-idents: 2.4.0 + postcss-reduce-initial: 1.0.1 + postcss-reduce-transforms: 1.0.4 + postcss-svgo: 2.1.6 + postcss-unique-selectors: 2.0.2 + postcss-value-parser: 3.3.0 + postcss-zindex: 2.2.0 + resolution: 4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38 + /csso/2.0.0: + dependencies: + clap: 1.1.3 + source-map: 0.5.6 + resolution: 178b43a44621221c27756086f531e02f42900ee8 + /csso/2.3.2: + dependencies: + clap: 1.1.3 + source-map: 0.5.6 + resolution: ddd52c587033f49e94b71fc55569f252e8ff5f85 + /currently-unhandled/0.4.1: + dependencies: + array-find-index: 1.0.2 + resolution: 988df33feab191ef799a61369dd76c17adf957ea + /d/1.0.0: + dependencies: + es5-ext: 0.10.22 + resolution: 754bb5bfe55451da69a58b94d45f4c5b0462d58f + /dashdash/1.14.1: + dependencies: + assert-plus: 1.0.0 + resolution: 853cfa0f7cbe2fed5de20326b8dd581035f6e2f0 + /date-fns/1.28.5: 257cfc45d322df45ef5658665967ee841cd73faf + /date-now/0.1.4: eaf439fd4d4848ad74e5cc7dbef200672b9e345b + /date-time/0.1.1: ed2f6d93d9790ce2fd66d5b5ff3edd5bbcbf3b07 + /dateformat/2.0.0: 2743e3abb5c3fc2462e527dca445e04e9f4dee17 + /debug-fabulous/0.1.0: + dependencies: + debug: 2.6.8 + object-assign: 4.1.0 + resolution: ad0ea07a5d519324fb55842a8f34ee59c7f8ff6c + /debug/2.2.0: + dependencies: + ms: 0.7.1 + resolution: f87057e995b1a1f6ae6a4960664137bc56f039da + /debug/2.6.8: + dependencies: + ms: 2.0.0 + resolution: e731531ca2ede27d188222427da17821d68ff4fc + /decamelize/1.2.0: f6534d15148269b20352e7bee26f501f9a191290 + /decompress-tar/3.1.0: + dependencies: + is-tar: 1.0.0 + object-assign: 2.1.1 + strip-dirs: 1.1.1 + tar-stream: 1.5.4 + through2: 0.6.5 + vinyl: 0.4.6 + resolution: 217c789f9b94450efaadc5c5e537978fc333c466 + /decompress-tarbz2/3.1.0: + dependencies: + is-bzip2: 1.0.0 + object-assign: 2.1.1 + seek-bzip: 1.0.5 + strip-dirs: 1.1.1 + tar-stream: 1.5.4 + through2: 0.6.5 + vinyl: 0.4.6 + resolution: 8b23935681355f9f189d87256a0f8bdd96d9666d + /decompress-targz/3.1.0: + dependencies: + is-gzip: 1.0.0 + object-assign: 2.1.1 + strip-dirs: 1.1.1 + tar-stream: 1.5.4 + through2: 0.6.5 + vinyl: 0.4.6 + resolution: b2c13df98166268991b715d6447f642e9696f5a0 + /decompress-unzip/3.4.0: + dependencies: + is-zip: 1.0.0 + read-all-stream: 3.1.0 + stat-mode: 0.2.2 + strip-dirs: 1.1.1 + through2: 2.0.3 + vinyl: 1.2.0 + yauzl: 2.8.0 + resolution: 61475b4152066bbe3fee12f9d629d15fe6478eeb + /decompress/3.0.0: + dependencies: + buffer-to-vinyl: 1.1.0 + concat-stream: 1.6.0 + decompress-tar: 3.1.0 + decompress-tarbz2: 3.1.0 + decompress-targz: 3.1.0 + decompress-unzip: 3.4.0 + stream-combiner2: 1.1.1 + vinyl-assign: 1.2.1 + vinyl-fs: 2.4.4 + resolution: af1dd50d06e3bfc432461d37de11b38c0d991bed + /dedent/0.7.0: 2495ddbaf6eb874abb0e1be9df22d2e5a544326c + /deep-assign/1.0.0: + dependencies: + is-obj: 1.0.1 + resolution: b092743be8427dc621ea0067cdec7e70dd19f37b + /deep-eql/0.1.3: + dependencies: + type-detect: 0.1.1 + resolution: ef558acab8de25206cd713906d74e56930eb69f2 + /deep-equal/1.0.1: f5d260292b660e084eff4cdbc9f08ad3247448b5 + /deep-extend/0.4.2: 48b699c27e334bf89f10892be432f6e4c7d34a7f + /deep-is/0.1.3: b369d6fb5dbc13eecf524f91b070feedc357cf34 + /deep-strict-equal/0.2.0: + dependencies: + core-assert: 0.2.1 + resolution: 4a078147a8ab57f6a0d4f5547243cd22f44eb4e4 + /defaults/1.0.3: + dependencies: + clone: 1.0.2 + resolution: c656051e9817d9ff08ed881477f3fe4019f3ef7d + /defined/1.0.0: c98d9bcef75674188e110969151199e39b1fa693 + /del/2.2.2: + dependencies: + 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 + resolution: c12c981d067846c84bcaf862cff930d907ffd1a8 + /delayed-stream/1.0.0: df3ae199acadfb7d440aaae0b29e2272b24ec619 + /delegates/1.0.0: 84c6e159b81904fdca59a0ef44cd870d31250f9a + /depd/1.1.0: e1bd82c6aab6ced965b97b88b17ed3e528ca18c3 + /deprecated/0.0.1: f9c9af5464afa1e7a971458a8bdef2aa94d5bb19 + /deps-sort/2.0.0: + dependencies: + JSONStream: 1.3.1 + shasum: 1.0.2 + subarg: 1.0.0 + through2: 2.0.3 + resolution: 091724902e84658260eb910748cccd1af6e21fb5 + /des.js/1.0.0: + dependencies: + inherits: 2.0.3 + minimalistic-assert: 1.0.0 + resolution: c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc + /detect-file/0.1.0: + dependencies: + fs-exists-sync: 0.1.0 + resolution: 4935dedfd9488648e006b0129566e9386711ea63 + /detect-indent/4.0.0: + dependencies: + repeating: 2.0.1 + resolution: f76d064352cdf43a1cb6ce619c4ee3a9475de208 + /detect-indent/5.0.0: 3871cc0a6a002e8c3e5b3cf7f336264675f06b9d + /detect-newline/2.1.0: f41f1c10be4b00e87b5f13da680759f2c5bfd3e2 + /detective/4.5.0: + dependencies: + acorn: 4.0.13 + defined: 1.0.0 + resolution: 6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1 + /diff/3.2.0: c9ce393a4b7cbd0b058a725c93df299027868ff9 + /diffie-hellman/5.0.2: + dependencies: + bn.js: 4.11.6 + miller-rabin: 4.0.0 + randombytes: 2.0.4 + resolution: b5835739270cfe26acf632099fded2a07f209e5e + /doctrine/1.5.0: + dependencies: + esutils: 2.0.2 + isarray: 1.0.0 + resolution: 379dce730f6166f76cefa4e6707a159b02c5a6fa + /doctrine/2.0.0: + dependencies: + esutils: 2.0.2 + isarray: 1.0.0 + resolution: c73d8d2909d22291e1a007a395804da8b665fe63 + /dom-urls/1.1.0: + dependencies: + urijs: 1.18.10 + resolution: 001ddf81628cd1e706125c7176f53ccec55d918e + /domain-browser/1.1.7: 867aa4b093faa05f1de08c06f4d7b21fdf8698bc + /dot-prop/3.0.0: + dependencies: + is-obj: 1.0.1 + resolution: 1b708af094a49c9a0e7dbcad790aba539dac1177 + /dot-prop/4.1.1: + dependencies: + is-obj: 1.0.1 + resolution: a8493f0b7b5eeec82525b5c7587fa7de7ca859c1 + /download/4.4.3: + dependencies: + caw: 1.2.0 + concat-stream: 1.6.0 + each-async: 1.1.1 + filenamify: 1.2.1 + got: 5.7.1 + gulp-decompress: 1.2.0 + gulp-rename: 1.2.2 + is-url: 1.2.2 + object-assign: 4.1.1 + read-all-stream: 3.1.0 + readable-stream: 2.2.10 + stream-combiner2: 1.1.1 + vinyl: 1.2.0 + vinyl-fs: 2.4.4 + ware: 1.3.0 + resolution: aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac + /duplexer/0.1.1: ace6ff808c1ce66b57d1ebf97977acb02334cfc1 + /duplexer2/0.0.2: + dependencies: + readable-stream: 1.1.14 + resolution: c614dcf67e2fb14995a91711e5a617e8a60a31db + /duplexer2/0.1.4: + dependencies: + readable-stream: 2.2.10 + resolution: 8b12dab878c0d69e3e7891051662a32fc6bddcc1 + /duplexer3/0.1.4: ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2 + /duplexify/3.5.0: + dependencies: + end-of-stream: 1.0.0 + inherits: 2.0.3 + readable-stream: 2.2.10 + stream-shift: 1.0.0 + resolution: 1aa773002e1578457e9d9d4a50b0ccaaebcbd604 + /each-async/1.1.1: + dependencies: + onetime: 1.1.0 + set-immediate-shim: 1.0.1 + resolution: dee5229bdf0ab6ba2012a395e1b869abf8813473 + /ecc-jsbn/0.1.1: + dependencies: + jsbn: 0.1.1 + resolution: 0fc73a9ed5f0d53c38193398523ef7e543777505 + /ee-first/1.1.1: 590c61156b0ae2f4f0255732a158b266bc56b21d + /electron-to-chromium/1.3.13: 1b3a5eace6e087bb5e257a100b0cbfe81b2891fc + /elegant-spinner/1.0.1: db043521c95d7e303fd8f345bedc3349cfb0729e + /elliptic/6.4.0: + dependencies: + bn.js: 4.11.6 + brorand: 1.1.0 + hash.js: 1.0.3 + hmac-drbg: 1.0.1 + inherits: 2.0.3 + minimalistic-assert: 1.0.0 + minimalistic-crypto-utils: 1.0.1 + resolution: cac9af8762c85836187003c8dfe193e5e2eae5df + /empower-core/0.6.1: + dependencies: + call-signature: 0.0.2 + core-js: 2.4.1 + resolution: 6c187f502fcef7554d57933396aac655483772b1 + /end-of-stream/0.1.5: + dependencies: + once: 1.3.3 + resolution: 8e177206c3c80837d85632e8b9359dfe8b2f6eaf + /end-of-stream/1.0.0: + dependencies: + once: 1.3.3 + resolution: d4596e702734a93e40e9af864319eabd99ff2f0e + /end-of-stream/1.4.0: + dependencies: + once: 1.4.0 + resolution: 7a90d833efda6cfa6eac0f4949dbb0fad3a63206 + /enhance-visitors/1.0.0: + dependencies: + lodash: 4.17.4 + resolution: aa945d05da465672a1ebd38fee2ed3da8518e95a + /equal-length/1.0.1: 21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c + /error-ex/1.3.1: + dependencies: + is-arrayish: 0.2.1 + resolution: f855a86ce61adc4e8621c3cda21e7a7612c3a8dc + /es3ify/0.1.4: + dependencies: + esprima-fb: 3001.1.0-dev-harmony-fb + jstransform: 3.0.0 + through: 2.3.8 + resolution: ad9fa5df1ae34f3f31e1211b5818b2d51078dfd1 + /es5-ext/0.10.22: + dependencies: + es6-iterator: 2.0.1 + es6-symbol: 3.1.1 + resolution: 1876c51f990769c112c781ea3ebe89f84fd39071 + /es6-iterator/2.0.1: + dependencies: + d: 1.0.0 + es5-ext: 0.10.22 + es6-symbol: 3.1.1 + resolution: 8e319c9f0453bf575d374940a655920e59ca5512 + /es6-map/0.1.5: + dependencies: + d: 1.0.0 + es5-ext: 0.10.22 + es6-iterator: 2.0.1 + es6-set: 0.1.5 + es6-symbol: 3.1.1 + event-emitter: 0.3.5 + resolution: 9136e0503dcc06a301690f0bb14ff4e364e949f0 + /es6-promise/4.1.0: dda03ca8f9f89bc597e689842929de7ba8cebdf0 + /es6-set/0.1.5: + dependencies: + d: 1.0.0 + es5-ext: 0.10.22 + es6-iterator: 2.0.1 + es6-symbol: 3.1.1 + event-emitter: 0.3.5 + resolution: d2b3ec5d4d800ced818db538d28974db0a73ccb1 + /es6-symbol/3.1.1: + dependencies: + d: 1.0.0 + es5-ext: 0.10.22 + resolution: bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77 + /es6-weak-map/2.0.2: + dependencies: + d: 1.0.0 + es5-ext: 0.10.22 + es6-iterator: 2.0.1 + es6-symbol: 3.1.1 + resolution: 5e3ab32251ffd1538a1f8e5ffa1357772f92d96f + /escape-string-regexp/1.0.5: 1b61c0562190a8dff6ae3bb2cf0200ca130b86d4 + /escope/3.6.0: + dependencies: + es6-map: 0.1.5 + es6-weak-map: 2.0.2 + esrecurse: 4.1.0 + estraverse: 4.2.0 + resolution: e01975e812781a163a6dadfdd80398dc64c889c3 + /eslint-config-xo/0.18.2: 0a157120875619929e735ffd6b185c41e8a187af + /eslint-formatter-pretty/1.1.0: + dependencies: + ansi-escapes: 1.4.0 + chalk: 1.1.3 + log-symbols: 1.0.2 + plur: 2.1.2 + string-width: 2.0.0 + resolution: ab4d06da02fed8c13ae9f0dc540a433ef7ed6f5e + /eslint-import-resolver-node/0.2.3: + dependencies: + debug: 2.6.8 + object-assign: 4.1.1 + resolve: 1.3.3 + resolution: 5add8106e8c928db2cba232bcd9efa846e3da16c + /eslint-module-utils/2.0.0: + dependencies: + debug: 2.2.0 + pkg-dir: 1.0.0 + resolution: a6f8c21d901358759cdc35dbac1982ae1ee58bce + /eslint-plugin-ava/4.2.0: + dependencies: + arrify: 1.0.1 + deep-strict-equal: 0.2.0 + enhance-visitors: 1.0.0 + espree: 3.4.3 + espurify: 1.7.0 + multimatch: 2.1.0 + pkg-up: 1.0.0 + req-all: 1.0.0 + resolution: 12e4664659c1fae7895fa3f346c313ceb8907c77 + /eslint-plugin-import/2.3.0: + dependencies: + builtin-modules: 1.1.1 + contains-path: 0.1.0 + debug: 2.6.8 + doctrine: 1.5.0 + eslint-import-resolver-node: 0.2.3 + eslint-module-utils: 2.0.0 + has: 1.0.1 + lodash.cond: 4.5.2 + minimatch: 3.0.4 + read-pkg-up: 2.0.0 + resolution: 37c801e0ada0e296cbdf20c3f393acb5b52af36b + /eslint-plugin-no-use-extend-native/0.3.12: + dependencies: + is-get-set-prop: 1.0.0 + is-js-type: 2.0.0 + is-obj-prop: 1.0.0 + is-proto-prop: 1.0.0 + resolution: 3ad9a00c2df23b5d7f7f6be91550985a4ab701ea + /eslint-plugin-promise/3.5.0: 78fbb6ffe047201627569e85a6c5373af2a68fca + /eslint-plugin-unicorn/2.1.1: + dependencies: + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.upperfirst: 4.3.1 + req-all: 1.0.0 + resolution: 3e9294366799b715e16a6df89159495b68930cb3 + /eslint/3.19.0: + dependencies: + babel-code-frame: 6.22.0 + chalk: 1.1.3 + concat-stream: 1.6.0 + debug: 2.6.8 + doctrine: 2.0.0 + escope: 3.6.0 + espree: 3.4.3 + esquery: 1.0.0 + estraverse: 4.2.0 + esutils: 2.0.2 + file-entry-cache: 2.0.0 + glob: 7.1.2 + globals: 9.17.0 + ignore: 3.3.3 + imurmurhash: 0.1.4 + inquirer: 0.12.0 + is-my-json-valid: 2.16.0 + is-resolvable: 1.0.0 + js-yaml: 3.8.4 + 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 + resolution: c8fc6201c7f40dd08941b87c085767386a679acc + /esmangle-evaluator/1.0.1: 620d866ef4861b3311f75766d52a8572bb3c6336 + /espower-location-detector/1.0.0: + dependencies: + is-url: 1.2.2 + path-is-absolute: 1.0.1 + source-map: 0.5.6 + xtend: 4.0.1 + resolution: a17b7ecc59d30e179e2bef73fb4137704cb331b5 + /espree/3.4.3: + dependencies: + acorn: 5.0.3 + acorn-jsx: 3.0.1 + resolution: 2910b5ccd49ce893c2ffffaab4fd8b3a31b82374 + /esprima-fb/15001.1001.0-dev-harmony-fb: 43beb57ec26e8cf237d3dd8b33e42533577f2659 + /esprima-fb/3001.1.0-dev-harmony-fb: b77d37abcd38ea0b77426bb8bc2922ce6b426411 + /esprima/2.7.3: 96e3b70d5779f6ad49cd032673d1c312767ba581 + /esprima/3.1.3: fdca51cee6133895e3c88d535ce49dbff62a4633 + /espurify/1.7.0: + dependencies: + core-js: 2.4.1 + resolution: 1c5cf6cbccc32e6f639380bd4f991fab9ba9d226 + /esquery/1.0.0: + dependencies: + estraverse: 4.2.0 + resolution: cfba8b57d7fba93f17298a8a006a04cda13d80fa + /esrecurse/4.1.0: + dependencies: + estraverse: 4.1.1 + object-assign: 4.1.1 + resolution: 4713b6536adf7f2ac4f327d559e7756bff648220 + /estraverse/4.1.1: f6caca728933a850ef90661d0e17982ba47111a2 + /estraverse/4.2.0: 0dee3fed31fcd469618ce7342099fc1afa0bdb13 + /esutils/2.0.2: 0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b + /event-emitter/0.3.5: + dependencies: + d: 1.0.0 + es5-ext: 0.10.22 + resolution: df8c69eef1647923c7157b9ce83840610b02cc39 + /event-stream/3.3.4: + dependencies: + duplexer: 0.1.1 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + resolution: 4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571 + /events/1.1.1: 9ebdb7635ad099c70dcc4c2a1f5004288e8bd924 + /evp_bytestokey/1.0.0: + dependencies: + create-hash: 1.1.3 + resolution: 497b66ad9fef65cd7c08a6180824ba1476b66e53 + /exec-buffer/3.1.0: + dependencies: + execa: 0.5.1 + p-finally: 1.0.0 + pify: 2.3.0 + rimraf: 2.6.1 + tempfile: 1.1.1 + resolution: 851b46d062fca9bcbc6ff8781693e28e8da80402 + /exec-series/1.0.3: + dependencies: + async-each-series: 1.1.0 + object-assign: 4.1.1 + resolution: 6d257a9beac482a872c7783bc8615839fc77143a + /execa/0.4.0: + dependencies: + cross-spawn-async: 2.2.5 + is-stream: 1.1.0 + npm-run-path: 1.0.0 + object-assign: 4.1.1 + path-key: 1.0.0 + strip-eof: 1.0.0 + resolution: 4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3 + /execa/0.5.1: + dependencies: + cross-spawn: 4.0.2 + get-stream: 2.3.1 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.2 + strip-eof: 1.0.0 + resolution: de3fb85cb8d6e91c85bcbceb164581785cb57b36 + /execa/0.6.3: + dependencies: + cross-spawn: 5.1.0 + get-stream: 3.0.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.2 + strip-eof: 1.0.0 + resolution: 57b69a594f081759c69e5370f0d17b9cb11658fe + /executable/1.1.0: + dependencies: + meow: 3.7.0 + resolution: 877980e9112f3391066da37265de7ad8434ab4d9 + /exit-hook/1.1.1: f05ca233b48c05d54fff07765df8507e95c02ff8 + /expand-brackets/0.1.5: + dependencies: + is-posix-bracket: 0.1.1 + resolution: df07284e342a807cd733ac5af72411e581d1177b + /expand-range/1.8.2: + dependencies: + fill-range: 2.2.3 + resolution: a299effd335fe2721ebae8e257ec79644fc85337 + /expand-tilde/1.2.2: + dependencies: + os-homedir: 1.0.2 + resolution: 0b81eba897e5a3d31d1c3d102f8f01441e559449 + /extend-shallow/2.0.1: + dependencies: + is-extendable: 0.1.1 + resolution: 51af7d614ad9a9f610ea1bafbb989d6b1c56890f + /extend/1.3.0: d1516fb0ff5624d2ebf9123ea1dac5a1994004f8 + /extend/3.0.1: a755ea7bc1adfcc5a31ce7e762dbaadc5e636444 + /extglob/0.3.2: + dependencies: + is-extglob: 1.0.0 + resolution: 2e18ff3d2f49ab2765cec9023f011daa8d8349a1 + /extsprintf/1.0.2: e1080e0658e300b06294990cc70e1502235fd550 + /falafel/1.2.0: + dependencies: + acorn: 1.2.2 + foreach: 2.0.5 + isarray: 0.0.1 + object-keys: 1.0.11 + resolution: c18d24ef5091174a497f318cd24b026a25cddab4 + /fancy-log/1.3.0: + dependencies: + chalk: 1.1.3 + time-stamp: 1.1.0 + resolution: 45be17d02bb9917d60ccffd4995c999e6c8c9948 + /fast-levenshtein/2.0.6: 3d8a5c66883a16a30ca8643e851f19baa7797917 + /faye-websocket/0.7.3: + dependencies: + websocket-driver: 0.6.5 + resolution: cc4074c7f4a4dfd03af54dd65c354b135132ce11 + /fd-slicer/1.0.1: + dependencies: + pend: 1.2.0 + resolution: 8b5bcbd9ec327c5041bf9ab023fd6750f1177e65 + /figures/1.7.0: + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + resolution: cbe1e3affcf1cd44b80cadfed28dc793a9701d2e + /figures/2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + resolution: 3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962 + /file-entry-cache/2.0.0: + dependencies: + flat-cache: 1.2.2 + object-assign: 4.1.1 + resolution: c392990c3e684783d838b8c84a45d8a048458361 + /file-type/3.9.0: 257a078384d1db8087bc449d107d52a52672b9e9 + /filename-regex/2.0.1: c1c4b9bee3e09725ddb106b75c1e301fe2f18b26 + /filename-reserved-regex/1.0.0: e61cf805f0de1c984567d0386dc5df50ee5af7e4 + /filenamify/1.2.1: + dependencies: + filename-reserved-regex: 1.0.0 + strip-outer: 1.0.0 + trim-repeated: 1.0.0 + resolution: a9f2ffd11c503bed300015029272378f1f1365a5 + /filesize/3.5.10: fc8fa23ddb4ef9e5e0ab6e1e64f679a24a56761f + /fill-range/2.2.3: + dependencies: + is-number: 2.1.0 + isobject: 2.1.0 + randomatic: 1.1.6 + repeat-element: 1.1.2 + repeat-string: 1.6.1 + resolution: 50b77dfd7e469bc7492470963699fe7a8485a723 + /filled-array/1.1.0: c3c4f6c663b923459a9aa29912d2d031f1507f84 + /find-cache-dir/0.1.1: + dependencies: + commondir: 1.0.1 + mkdirp: 0.5.1 + pkg-dir: 1.0.0 + resolution: c8defae57c8a52a8a784f9e31c57c742e993a0b9 + /find-index/0.1.1: 675d358b2ca3892d795a1ab47232f8b6e2e0dde4 + /find-parent-dir/0.3.0: 33c44b429ab2b2f0646299c5f9f718f376ff8d54 + /find-up/1.1.2: + dependencies: + path-exists: 2.1.0 + pinkie-promise: 2.0.1 + resolution: 6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f + /find-up/2.1.0: + dependencies: + locate-path: 2.0.0 + resolution: 45d1b7e506c717ddd482775a2b77920a3c0c57a7 + /find-versions/1.2.1: + dependencies: + array-uniq: 1.0.3 + get-stdin: 4.0.1 + meow: 3.7.0 + semver-regex: 1.0.0 + resolution: cbde9f12e38575a0af1be1b9a2c5d5fd8f186b62 + /findup-sync/0.4.3: + dependencies: + detect-file: 0.1.0 + is-glob: 2.0.1 + micromatch: 2.3.11 + resolve-dir: 0.1.1 + resolution: 40043929e7bc60adf0b7f4827c4c6e75a0deca12 + /fined/1.0.2: + dependencies: + expand-tilde: 1.2.2 + lodash.assignwith: 4.2.0 + lodash.isempty: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.pick: 4.4.0 + parse-filepath: 1.0.1 + resolution: 5b28424b760d7598960b7ef8480dff8ad3660e97 + /first-chunk-stream/1.0.0: 59bfb50cd905f60d7c394cd3d9acaab4e6ad934e + /flagged-respawn/0.3.2: ff191eddcd7088a675b2610fffc976be9b8074b5 + /flat-cache/1.2.2: + dependencies: + circular-json: 0.3.1 + del: 2.2.2 + graceful-fs: 4.1.11 + write: 0.2.1 + resolution: fa86714e72c21db88601761ecf2f555d1abc6b96 + /flatten/1.0.2: dae46a9d78fbe25292258cc1e780a41d95c03782 + /fn-name/2.0.1: 5214d7537a4d06a4a301c0cc262feb84188002e7 + /for-in/1.0.2: 81068d295a8142ec0ac726c6e2200c30fb6d5e80 + /for-own/0.1.5: + dependencies: + for-in: 1.0.2 + resolution: 5265c681a4f294dabbf17c9509b6763aa84510ce + /foreach/2.0.5: 0bee005018aeb260d0a3af3ae658dd0136ec1b99 + /forever-agent/0.6.1: fbc71f0c41adeb37f96c577ad1ed42d8fdacca91 + /form-data/2.1.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.5 + mime-types: 2.1.15 + resolution: 33c183acf193276ecaa98143a69e94bfee1750d1 + /from/0.1.7: 83c60afc58b9c56997007ed1a768b3ab303a44fe + /fs-exists-sync/0.1.0: 982d6893af918e72d08dec9e8673ff2b5a8d6add + /fs.realpath/1.0.0: 1504ad2523158caa40db4a2787cb01411994ea4f + /fsevents/1.1.1: + dependencies: + nan: 2.6.2 + resolution: f19fd28f43eeaf761680e519a203c4d0b3d31aff + /fstream/1.0.11: + dependencies: + graceful-fs: 4.1.11 + inherits: 2.0.3 + mkdirp: 0.5.1 + rimraf: 2.6.1 + resolution: 5c1fb1f117477114f0632a0eb4b71b3cb0fd3171 + /function-bind/1.1.0: 16176714c801798e4e8f2cf7f7529467bb4a5771 + /gauge/2.7.4: + dependencies: + aproba: 1.1.2 + 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 + resolution: 2c03405c7538c39d7eb37b317022e325fb018bf7 + /gaze/0.5.2: + dependencies: + globule: 0.1.0 + resolution: 40b709537d24d1d45767db5a908689dfe69ac44f + /gaze/1.1.2: + dependencies: + globule: 1.1.0 + resolution: 847224677adb8870d679257ed3388fdb61e40105 + /generate-function/2.0.0: 6858fe7c0969b7d4e9093337647ac79f60dfbe74 + /generate-object-property/1.2.0: + dependencies: + is-property: 1.0.2 + resolution: 9c0e1c40308ce804f4783618b937fa88f99d50d0 + /get-caller-file/1.0.2: f702e63127e7e231c160a80c1554acb70d5047e5 + /get-port/2.1.0: + dependencies: + pinkie-promise: 2.0.1 + resolution: 8783f9dcebd1eea495a334e1a6a251e78887ab1a + /get-proxy/1.1.0: + dependencies: + rc: 1.2.1 + resolution: 894854491bc591b0f147d7ae570f5c678b7256eb + /get-set-props/0.1.0: 998475c178445686d0b32246da5df8dbcfbe8ea3 + /get-stdin/4.0.1: b968c6b0a04384324902e8bf1a5df32579a450fe + /get-stdin/5.0.1: 122e161591e21ff4c52530305693f20e6393a398 + /get-stream/2.3.1: + dependencies: + object-assign: 4.1.1 + pinkie-promise: 2.0.1 + resolution: 5f38f93f346009666ee0150a054167f91bdd95de + /get-stream/3.0.0: 8e943d1358dc37555054ecbe2edb05aa174ede14 + /getpass/0.1.7: + dependencies: + assert-plus: 1.0.0 + resolution: 5eff8e3e684d569ae4cb2b1282604e8ba62149fa + /gifsicle/3.0.4: + dependencies: + bin-build: 2.2.0 + bin-wrapper: 3.0.2 + logalot: 2.1.0 + resolution: f45cb5ed10165b665dc929e0e9328b6c821dfa3b + /glob-base/0.3.0: + dependencies: + glob-parent: 2.0.0 + is-glob: 2.0.1 + resolution: dbb164f6221b1c0b1ccf82aea328b497df0ea3c4 + /glob-parent/2.0.0: + dependencies: + is-glob: 2.0.1 + resolution: 81383d72db054fcccf5336daa902f182f6edbb28 + /glob-parent/3.1.0: + dependencies: + is-glob: 3.1.0 + path-dirname: 1.0.2 + resolution: 9e6af6299d8d3bd2bd40430832bd113df906c5ae + /glob-stream/3.1.18: + dependencies: + glob: 4.5.3 + glob2base: 0.0.12 + minimatch: 2.0.10 + ordered-read-streams: 0.1.0 + through2: 0.6.5 + unique-stream: 1.0.0 + resolution: 9170a5f12b790306fdfe598f313f8f7954fd143b + /glob-stream/5.3.5: + dependencies: + extend: 3.0.1 + glob: 5.0.15 + glob-parent: 3.1.0 + micromatch: 2.3.11 + ordered-read-streams: 0.3.0 + through2: 0.6.5 + to-absolute-glob: 0.1.1 + unique-stream: 2.2.1 + resolution: a55665a9a8ccdc41915a87c701e32d4e016fad22 + /glob-watcher/0.0.6: + dependencies: + gaze: 0.5.2 + resolution: b95b4a8df74b39c83298b0c05c978b4d9a3b710b + /glob/3.1.21: + dependencies: + graceful-fs: 1.2.3 + inherits: 1.0.2 + minimatch: 0.2.14 + resolution: d29e0a055dea5138f4d07ed40e8982e83c2066cd + /glob/4.5.3: + dependencies: + inflight: 1.0.6 + inherits: 2.0.3 + minimatch: 2.0.10 + once: 1.4.0 + resolution: c6cb73d3226c1efef04de3c56d012f03377ee15f + /glob/5.0.15: + dependencies: + inflight: 1.0.6 + inherits: 2.0.3 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + resolution: 1bc936b9e02f4a603fcc222ecf7633d30b8b93b1 + /glob/7.1.2: + dependencies: + 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 + resolution: c19c9df9a028702d678612384a6552404c636d15 + /glob2base/0.0.12: + dependencies: + find-index: 0.1.1 + resolution: 9d419b3e28f12e83a362164a277055922c9c0d56 + /global-modules/0.2.3: + dependencies: + global-prefix: 0.1.5 + is-windows: 0.2.0 + resolution: ea5a3bed42c6d6ce995a4f8a1269b5dae223828d + /global-prefix/0.1.5: + dependencies: + homedir-polyfill: 1.0.1 + ini: 1.3.4 + is-windows: 0.2.0 + which: 1.2.14 + resolution: 8d3bc6b8da3ca8112a160d8d496ff0462bfef78f + /globals/9.17.0: 0c0ca696d9b9bb694d2e5470bd37777caad50286 + /globby/5.0.0: + dependencies: + array-union: 1.0.2 + arrify: 1.0.1 + glob: 7.1.2 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + resolution: ebd84667ca0dbb330b99bcfc68eac2bc54370e0d + /globby/6.1.0: + dependencies: + array-union: 1.0.2 + glob: 7.1.2 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + resolution: f5a6d70e8395e21c858fb0489d64df02424d506c + /globule/0.1.0: + dependencies: + glob: 3.1.21 + lodash: 1.0.2 + minimatch: 0.2.14 + resolution: d9c8edde1da79d125a151b79533b978676346ae5 + /globule/1.1.0: + dependencies: + glob: 7.1.2 + lodash: 4.16.6 + minimatch: 3.0.4 + resolution: c49352e4dc183d85893ee825385eb994bb6df45f + /glogg/1.0.0: + dependencies: + sparkles: 1.0.0 + resolution: 7fe0f199f57ac906cf512feead8f90ee4a284fc5 + /got/5.7.1: + dependencies: + create-error-class: 3.0.2 + duplexer2: 0.1.4 + is-redirect: 1.0.0 + is-retry-allowed: 1.1.0 + is-stream: 1.1.0 + lowercase-keys: 1.0.0 + node-status-codes: 1.0.0 + object-assign: 4.1.1 + parse-json: 2.2.0 + pinkie-promise: 2.0.1 + read-all-stream: 3.1.0 + readable-stream: 2.2.10 + timed-out: 3.1.3 + unzip-response: 1.0.2 + url-parse-lax: 1.0.0 + resolution: 5f81635a61e4a6589f180569ea4e381680a51f35 + /got/6.7.1: + dependencies: + create-error-class: 3.0.2 + duplexer3: 0.1.4 + get-stream: 3.0.0 + is-redirect: 1.0.0 + is-retry-allowed: 1.1.0 + is-stream: 1.1.0 + lowercase-keys: 1.0.0 + safe-buffer: 5.1.0 + timed-out: 4.0.1 + unzip-response: 2.0.1 + url-parse-lax: 1.0.0 + resolution: 240cd05785a9a18e561dc1b44b41c763ef1e8db0 + /graceful-fs/1.2.3: 15a4806a57547cb2d2dbf27f42e89a8c3451b364 + /graceful-fs/3.0.11: + dependencies: + natives: 1.1.0 + resolution: 7613c778a1afea62f25c630a086d7f3acbbdd818 + /graceful-fs/4.1.11: 0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658 + /graceful-readlink/1.0.1: 4cafad76bc62f02fa039b2f94e9a3dd3a391a725 + /guetzli/1.0.1: + dependencies: + bin-build: 2.2.0 + bin-wrapper: 3.0.2 + logalot: 2.1.0 + resolution: 48cd01d18dbd60fb47318a1724a295a035d9b9f2 + /gulp-bro/1.0.2: + dependencies: + browserify: 14.4.0 + browserify-incremental: 3.1.1 + concat-stream: 1.6.0 + gulp-util: 3.0.8 + through2: 2.0.3 + resolution: e56e060f3b9fde1809902ba7b2791df0d9c42b70 + /gulp-decompress/1.2.0: + dependencies: + archive-type: 3.2.0 + decompress: 3.0.0 + gulp-util: 3.0.8 + readable-stream: 2.2.10 + resolution: 8eeb65a5e015f8ed8532cafe28454960626f0dc7 + /gulp-htmlmin/3.0.0: + dependencies: + bufferstreams: 1.1.1 + gulp-util: 3.0.8 + html-minifier: 3.5.2 + object-assign: 4.1.1 + readable-stream: 2.2.10 + tryit: 1.0.3 + resolution: 19ea8002d1231d6b1f18a12d20f2a66a77770fb3 + /gulp-image/2.9.0: + dependencies: + exec-buffer: 3.1.0 + execa: 0.6.3 + filesize: 3.5.10 + gifsicle: 3.0.4 + guetzli: 1.0.1 + gulp-util: 3.0.8 + is-gif: 1.0.0 + is-jpg: 1.0.0 + is-png: 1.1.0 + is-svg: 2.1.0 + jpeg-recompress-bin: 3.0.1 + jpegoptim-bin: 3.0.0 + mozjpeg: 4.1.1 + optipng-bin: 4.0.0 + pngquant-bin: 3.1.1 + svgo: 0.7.2 + through2-concurrent: 1.1.1 + zopflipng-bin: 4.0.0 + resolution: 21fcbfdbbf7c55783cccb1b204c2d6fed881e03f + /gulp-livereload/3.8.1: + dependencies: + chalk: 0.5.1 + debug: 2.6.8 + event-stream: 3.3.4 + gulp-util: 3.0.8 + lodash.assign: 3.2.0 + mini-lr: 0.1.9 + resolution: 00f744b2d749d3e9e3746589c8a44acac779b50f + /gulp-postcss/6.4.0: + dependencies: + gulp-util: 3.0.8 + postcss: 5.2.17 + postcss-load-config: 1.2.0 + vinyl-sourcemaps-apply: 0.2.1 + resolution: 78a32e3c87aa6cdcec5ae1c905e196d478e8c5d5 + /gulp-rename/1.2.2: 3ad4428763f05e2764dec1c67d868db275687817 + /gulp-sass/3.1.0: + dependencies: + gulp-util: 3.0.8 + lodash.clonedeep: 4.5.0 + node-sass: 4.5.3 + through2: 2.0.3 + vinyl-sourcemaps-apply: 0.2.1 + resolution: 53dc4b68a1f5ddfe4424ab4c247655269a8b74b7 + /gulp-sourcemaps/1.6.0: + dependencies: + convert-source-map: 1.5.0 + graceful-fs: 4.1.11 + strip-bom: 2.0.0 + through2: 2.0.3 + vinyl: 1.2.0 + resolution: b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c + /gulp-sourcemaps/2.6.0: + dependencies: + '@gulp-sourcemaps/identity-map': 1.0.1 + '@gulp-sourcemaps/map-sources': 1.0.0 + acorn: 4.0.13 + convert-source-map: 1.5.0 + css: 2.2.1 + debug-fabulous: 0.1.0 + detect-newline: 2.1.0 + graceful-fs: 4.1.11 + source-map: 0.5.6 + strip-bom-string: 1.0.0 + through2: 2.0.3 + vinyl: 1.2.0 + resolution: 7ccce899a8a3bfca1593a3348d0fbf41dd3f51e5 + /gulp-svgo/1.0.3: + dependencies: + svgo: 0.6.6 + resolution: f6ad219f281cdc9ac3e0e6c173d5c77bba8cd692 + /gulp-uglify/3.0.0: + dependencies: + gulplog: 1.0.0 + has-gulplog: 0.1.0 + lodash: 4.17.4 + make-error-cause: 1.2.2 + through2: 2.0.3 + uglify-js: 3.0.15 + vinyl-sourcemaps-apply: 0.2.1 + resolution: 0df0331d72a0d302e3e37e109485dddf33c6d1ca + /gulp-util/3.0.8: + dependencies: + array-differ: 1.0.0 + array-uniq: 1.0.3 + beeper: 1.1.1 + chalk: 1.1.3 + dateformat: 2.0.0 + fancy-log: 1.3.0 + gulplog: 1.0.0 + has-gulplog: 0.1.0 + lodash._reescape: 3.0.0 + lodash._reevaluate: 3.0.0 + lodash._reinterpolate: 3.0.0 + lodash.template: 3.6.2 + minimist: 1.2.0 + multipipe: 0.1.2 + object-assign: 3.0.0 + replace-ext: 0.0.1 + through2: 2.0.3 + vinyl: 0.5.3 + resolution: 0054e1e744502e27c04c187c3ecc505dd54bbb4f + /gulp/3.9.1: + dependencies: + archy: 1.0.0 + chalk: 1.1.3 + deprecated: 0.0.1 + gulp-util: 3.0.8 + interpret: 1.0.3 + liftoff: 2.3.0 + minimist: 1.2.0 + orchestrator: 0.3.8 + pretty-hrtime: 1.0.3 + semver: 4.3.6 + tildify: 1.2.0 + v8flags: 2.1.1 + vinyl-fs: 0.3.14 + resolution: 571ce45928dd40af6514fc4011866016c13845b4 + /gulplog/1.0.0: + dependencies: + glogg: 1.0.0 + resolution: e28c4d45d05ecbbed818363ce8f9c5926229ffe5 + /har-schema/1.0.5: d263135f43307c02c602afc8fe95970c0151369e + /har-validator/4.2.1: + dependencies: + ajv: 4.11.8 + har-schema: 1.0.5 + resolution: 33481d0f1bbff600dd203d75812a6a5fba002e2a + /has-ansi/0.1.0: + dependencies: + ansi-regex: 0.2.1 + resolution: 84f265aae8c0e6a88a12d7022894b7568894c62e + /has-ansi/2.0.0: + dependencies: + ansi-regex: 2.1.1 + resolution: 34f5049ce1ecdf2b0649af3ef24e45ed35416d91 + /has-color/0.1.7: 67144a5260c34fc3cca677d041daf52fe7b78b2f + /has-flag/1.0.0: 9d9e793165ce017a00f00418c43f942a7b1d11fa + /has-flag/2.0.0: e8207af1cc7b30d446cc70b734b5e8be18f88d51 + /has-gulplog/0.1.0: + dependencies: + sparkles: 1.0.0 + resolution: 6414c82913697da51590397dafb12f22967811ce + /has-unicode/2.0.1: e0e6fe6a28cf51138855e086d1691e771de2a8b9 + /has-yarn/1.0.0: 89e25db604b725c8f5976fff0addc921b828a5a7 + /has/1.0.1: + dependencies: + function-bind: 1.1.0 + resolution: 8461733f538b0837c9361e39a9ab9e9704dc2f28 + /hash-base/2.0.2: + dependencies: + inherits: 2.0.3 + resolution: 66ea1d856db4e8a5470cadf6fce23ae5244ef2e1 + /hash.js/1.0.3: + dependencies: + inherits: 2.0.3 + resolution: 1332ff00156c0a0ffdd8236013d07b77a0451573 + /hawk/3.1.3: + dependencies: + boom: 2.10.1 + cryptiles: 2.0.5 + hoek: 2.16.3 + sntp: 1.0.9 + resolution: 078444bd7c1640b0fe540d2c9b73d59678e8e1c4 + /he/1.1.1: 93410fd21b009735151f8868c2f271f3427e23fd + /hmac-drbg/1.0.1: + dependencies: + hash.js: 1.0.3 + minimalistic-assert: 1.0.0 + minimalistic-crypto-utils: 1.0.1 + resolution: d2745701025a6c775a6c545793ed502fc0c649a1 + /hoek/2.16.3: 20bb7403d3cea398e91dc4710a8ff1b8274a25ed + /home-or-tmp/2.0.0: + dependencies: + os-homedir: 1.0.2 + os-tmpdir: 1.0.2 + resolution: e36c3f2d2cae7d746a857e38d18d5f32a7882db8 + /homedir-polyfill/1.0.1: + dependencies: + parse-passwd: 1.0.0 + resolution: 4c2bbc8a758998feebf5ed68580f76d46768b4bc + /hosted-git-info/2.4.2: 0076b9f46a270506ddbaaea56496897460612a67 + /html-comment-regex/1.1.1: 668b93776eaae55ebde8f3ad464b307a4963625e + /html-minifier/3.5.2: + dependencies: + camel-case: 3.0.0 + clean-css: 4.1.3 + commander: 2.9.0 + he: 1.1.1 + ncname: 1.0.0 + param-case: 2.1.1 + relateurl: 0.2.7 + uglify-js: 3.0.15 + resolution: d73bc3ff448942408818ce609bf3fb0ea7ef4eb7 + /htmlescape/1.1.1: 3a03edc2214bca3b66424a3e7959349509cb0351 + /http-errors/1.3.1: + dependencies: + inherits: 2.0.3 + statuses: 1.3.1 + resolution: 197e22cdebd4198585e8694ef6786197b91ed942 + /http-signature/1.1.1: + dependencies: + assert-plus: 0.2.0 + jsprim: 1.4.0 + sshpk: 1.13.0 + resolution: df72e267066cd0ac67fb76adf8e134a8fbcf91bf + /https-browserify/1.0.0: ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73 + /husky/0.13.4: + dependencies: + chalk: 1.1.3 + find-parent-dir: 0.3.0 + is-ci: 1.0.10 + normalize-path: 1.0.0 + resolution: 48785c5028de3452a51c48c12c4f94b2124a1407 + /iconv-lite/0.4.13: 1f88aba4ab0b1508e8312acc39345f36e992e2f2 + /ieee754/1.1.8: be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4 + /ignore-by-default/1.0.1: 48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09 + /ignore/3.3.3: 432352e57accd87ab3110e82d3fea0e47812156d + /immediate/3.0.6: 9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b + /imurmurhash/0.1.4: 9218b9b2b928a238b13dc4fb6b6d576f231453ea + /in-publish/2.0.0: e20ff5e3a2afc2690320b6dc552682a9c7fadf51 + /indent-string/2.1.0: + dependencies: + repeating: 2.0.1 + resolution: 8e2d48348742121b4a8218b7a137e9a52049dc80 + /indent-string/3.1.0: 08ff4334603388399b329e6b9538dc7a3cf5de7d + /indexes-of/1.0.1: f30f716c8e2bd346c7b67d3df3915566a7c05607 + /indexof/0.0.1: 82dc336d232b9062179d05ab3293a66059fd435d + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + resolution: 49bd6331d7d02d0c09bc910a1075ba8165b56df9 + /inherits/1.0.2: ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b + /inherits/2.0.1: b17d08d326b4423e568eff719f91b0b1cbdf69f1 + /inherits/2.0.3: 633c2c83e3da42a502f52466022480f4208261de + /ini/1.3.4: 0537cb79daf59b59a1a517dff706c86ec039162e + /inline-process-browser/1.0.0: + dependencies: + falafel: 1.2.0 + through2: 0.6.5 + resolution: 46a61b153dd3c9b1624b1a00626edb4f7f414f22 + /inline-source-map/0.6.2: + dependencies: + source-map: 0.5.6 + resolution: f9393471c18a79d1724f863fa38b586370ade2a5 + /inquirer/0.12.0: + dependencies: + 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 + resolution: 1ef2bfd63504df0bc75785fff8c2c41df12f077e + /insert-module-globals/7.0.1: + dependencies: + JSONStream: 1.3.1 + combine-source-map: 0.7.2 + concat-stream: 1.5.2 + is-buffer: 1.1.5 + lexical-scope: 1.2.0 + process: 0.11.10 + through2: 2.0.3 + xtend: 4.0.1 + resolution: c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3 + /interpret/1.0.3: cbc35c62eeee73f19ab7b10a801511401afc0f90 + /invariant/2.2.2: + dependencies: + loose-envify: 1.3.1 + resolution: 9e1f56ac0acdb6bf303306f338be3b204ae60360 + /invert-kv/1.0.0: 104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6 + /ip-regex/1.0.3: dc589076f659f419c222039a33316f1c7387effd + /irregular-plurals/1.2.0: 38f299834ba8c00c30be9c554e137269752ff3ac + /is-absolute-url/2.1.0: 50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6 + /is-absolute/0.1.7: + dependencies: + is-relative: 0.1.3 + resolution: 847491119fccb5fb436217cc737f7faad50f603f + /is-absolute/0.2.6: + dependencies: + is-relative: 0.2.1 + is-windows: 0.2.0 + resolution: 20de69f3db942ef2d87b9c2da36f172235b1b5eb + /is-arrayish/0.2.1: 77c99840527aa8ecb1a8ba697b80645a7a926a9d + /is-binary-path/1.0.1: + dependencies: + binary-extensions: 1.8.0 + resolution: 75f16642b480f187a711c814161fd3a4a7655898 + /is-buffer/1.1.5: 1f3b26ef613b214b88cbca23cc6c01d87961eecc + /is-builtin-module/1.0.0: + dependencies: + builtin-modules: 1.1.1 + resolution: 540572d34f7ac3119f8f76c30cbc1b1e037affbe + /is-bzip2/1.0.0: 5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc + /is-ci/1.0.10: + dependencies: + ci-info: 1.0.0 + resolution: f739336b2632365061a9d48270cd56ae3369318e + /is-directory/0.3.1: 61339b6f2475fc772fd9c9d83f5c8575dc154ae1 + /is-dotfile/1.0.3: a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1 + /is-equal-shallow/0.1.3: + dependencies: + is-primitive: 2.0.0 + resolution: 2238098fc221de0bcfa5d9eac4c45d638aa1c534 + /is-error/2.2.1: 684a96d84076577c98f4cdb40c6d26a5123bf19c + /is-extendable/0.1.1: 62b110e289a471418e3ec36a617d472e301dfc89 + /is-extglob/1.0.0: ac468177c4943405a092fc8f29760c6ffc6206c0 + /is-extglob/2.1.1: a88c02535791f02ed37c76a1b9ea9773c833f8c2 + /is-finite/1.0.2: + dependencies: + number-is-nan: 1.0.1 + resolution: cc6677695602be550ef11e8b4aa6305342b6d0aa + /is-fullwidth-code-point/1.0.0: + dependencies: + number-is-nan: 1.0.1 + resolution: ef9e31386f031a7f0d643af82fde50c457ef00cb + /is-fullwidth-code-point/2.0.0: a3b30a5c4f199183167aaab93beefae3ddfb654f + /is-generator-fn/1.0.0: 969d49e1bb3329f6bb7f09089be26578b2ddd46a + /is-get-set-prop/1.0.0: + dependencies: + get-set-props: 0.1.0 + lowercase-keys: 1.0.0 + resolution: 2731877e4d78a6a69edcce6bb9d68b0779e76312 + /is-gif/1.0.0: a6d2ae98893007bffa97a1d8c01d63205832097e + /is-glob/2.0.1: + dependencies: + is-extglob: 1.0.0 + resolution: d096f926a3ded5600f3fdfd91198cb0888c2d863 + /is-glob/3.1.0: + dependencies: + is-extglob: 2.1.1 + resolution: 7ba5ae24217804ac70707b96922567486cc3e84a + /is-gzip/1.0.0: 6ca8b07b99c77998025900e555ced8ed80879a83 + /is-jpg/1.0.0: 2959c17e73430db38264da75b90dd54f2d86da1c + /is-js-type/2.0.0: + dependencies: + js-types: 1.0.0 + resolution: 73617006d659b4eb4729bba747d28782df0f7e22 + /is-my-json-valid/2.16.0: + dependencies: + generate-function: 2.0.0 + generate-object-property: 1.2.0 + jsonpointer: 4.0.1 + xtend: 4.0.1 + resolution: f079dd9bfdae65ee2038aae8acbc86ab109e3693 + /is-natural-number/2.1.1: 7d4c5728377ef386c3e194a9911bf57c6dc335e7 + /is-npm/1.0.0: f2fb63a65e4905b406c86072765a1a4dc793b9f4 + /is-number/2.1.0: + dependencies: + kind-of: 3.2.2 + resolution: 01fcbbb393463a548f2f466cce16dece49db908f + /is-obj-prop/1.0.0: + dependencies: + lowercase-keys: 1.0.0 + obj-props: 1.1.0 + resolution: b34de79c450b8d7c73ab2cdf67dc875adb85f80e + /is-obj/1.0.1: 3e4729ac1f5fde025cd7d83a896dab9f4f67db0f + /is-observable/0.2.0: + dependencies: + symbol-observable: 0.2.4 + resolution: b361311d83c6e5d726cabf5e250b0237106f5ae2 + /is-path-cwd/1.0.0: d225ec23132e89edd38fda767472e62e65f1106d + /is-path-in-cwd/1.0.0: + dependencies: + is-path-inside: 1.0.0 + resolution: 6477582b8214d602346094567003be8a9eac04dc + /is-path-inside/1.0.0: + dependencies: + path-is-inside: 1.0.2 + resolution: fc06e5a1683fbda13de667aff717bbc10a48f37f + /is-plain-obj/1.1.0: 71a50c8429dfca773c92a390a4a03b39fcd51d3e + /is-png/1.1.0: d574b12bf275c0350455570b0e5b57ab062077ce + /is-posix-bracket/0.1.1: 3334dc79774368e92f016e6fbc0a88f5cd6e6bc4 + /is-primitive/2.0.0: 207bab91638499c07b2adf240a41a87210034575 + /is-promise/2.1.0: 79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa + /is-property/1.0.2: 57fe1c4e48474edd65b09911f26b1cd4095dda84 + /is-proto-prop/1.0.0: + dependencies: + lowercase-keys: 1.0.0 + proto-props: 0.2.1 + resolution: b3951f95c089924fb5d4fcda6542ab3e83e2b220 + /is-redirect/1.0.0: 1d03dded53bd8db0f30c26e4f95d36fc7c87dc24 + /is-relative/0.1.3: 905fee8ae86f45b3ec614bc3c15c869df0876e82 + /is-relative/0.2.1: + dependencies: + is-unc-path: 0.1.2 + resolution: d27f4c7d516d175fb610db84bbeef23c3bc97aa5 + /is-resolvable/1.0.0: + dependencies: + tryit: 1.0.3 + resolution: 8df57c61ea2e3c501408d100fb013cf8d6e0cc62 + /is-retry-allowed/1.1.0: 11a060568b67339444033d0125a61a20d564fb34 + /is-stream/1.1.0: 12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44 + /is-svg/2.1.0: + dependencies: + html-comment-regex: 1.1.1 + resolution: cf61090da0d9efbcab8722deba6f032208dbb0e9 + /is-tar/1.0.0: 2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d + /is-typedarray/1.0.0: e479c80858df0c1b11ddda6940f96011fcda4a9a + /is-unc-path/0.1.2: + dependencies: + unc-path-regex: 0.1.2 + resolution: 6ab053a72573c10250ff416a3814c35178af39b9 + /is-url/1.2.2: 498905a593bf47cc2d9e7f738372bbf7696c7f26 + /is-utf8/0.2.1: 4b0da1442104d1b336340e80797e865cf39f7d72 + /is-valid-glob/0.3.0: d4b55c69f51886f9b65c70d6c2622d37e29f48fe + /is-windows/0.2.0: de1aa6d63ea29dd248737b69f1ff8b8002d2108c + /is-zip/1.0.0: 47b0a8ff4d38a76431ccfd99a8e15a4c86ba2325 + /isarray/0.0.1: 8a18acfca9a8f4177e09abfc6038939b05d1eedf + /isarray/1.0.0: bb935d48582cba168c06834957a54a3e07124f11 + /isexe/2.0.0: e8fbf374dc556ff8947a10dcb0572d633f2cfa10 + /isobject/2.1.0: + dependencies: + isarray: 1.0.0 + resolution: f065561096a3f1da2ef46272f815c840d87e0c89 + /isstream/0.1.2: 47e63f7af55afa6f92e1500e690eb8b8529c099a + /jest-diff/18.1.0: + dependencies: + chalk: 1.1.3 + diff: 3.2.0 + jest-matcher-utils: 18.1.0 + pretty-format: 18.1.0 + resolution: 4ff79e74dd988c139195b365dc65d87f606f4803 + /jest-file-exists/17.0.0: 7f63eb73a1c43a13f461be261768b45af2cdd169 + /jest-matcher-utils/18.1.0: + dependencies: + chalk: 1.1.3 + pretty-format: 18.1.0 + resolution: 1ac4651955ee2a60cef1e7fcc98cdfd773c0f932 + /jest-mock/18.0.0: 5c248846ea33fa558b526f5312ab4a6765e489b3 + /jest-snapshot/18.1.0: + dependencies: + jest-diff: 18.1.0 + jest-file-exists: 17.0.0 + jest-matcher-utils: 18.1.0 + jest-util: 18.1.0 + natural-compare: 1.4.0 + pretty-format: 18.1.0 + resolution: 55b96d2ee639c9bce76f87f2a3fd40b71c7a5916 + /jest-util/18.1.0: + dependencies: + chalk: 1.1.3 + diff: 3.2.0 + graceful-fs: 4.1.11 + jest-file-exists: 17.0.0 + jest-mock: 18.0.0 + mkdirp: 0.5.1 + resolution: 3a99c32114ab17f84be094382527006e6d4bfc6a + /jodid25519/1.0.2: + dependencies: + jsbn: 0.1.1 + resolution: 06d4912255093419477d425633606e0e90782967 + /jpeg-recompress-bin/3.0.1: + dependencies: + bin-wrapper: 3.0.2 + logalot: 2.1.0 + resolution: 46a3e7300ccab795b1b8db27ae802c27a28333a4 + /jpegoptim-bin/3.0.0: + dependencies: + bin-build: 2.2.0 + bin-wrapper: 3.0.2 + logalot: 2.1.0 + resolution: 9f7a05d83b302bd19913decf339a9dae1bda0c2b + /js-base64/2.1.9: f0e80ae039a4bd654b5f281fc93f04a914a7fcce + /js-tokens/3.0.1: 08e9f132484a2c45a30907e9dc4d5567b7f114d7 + /js-types/1.0.0: d242e6494ed572ad3c92809fc8bed7f7687cbf03 + /js-yaml/3.6.1: + dependencies: + argparse: 1.0.9 + esprima: 2.7.3 + resolution: 6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30 + /js-yaml/3.7.0: + dependencies: + argparse: 1.0.9 + esprima: 2.7.3 + resolution: 5c967ddd837a9bfdca5f2de84253abe8a1c03b80 + /js-yaml/3.8.4: + dependencies: + argparse: 1.0.9 + esprima: 3.1.3 + resolution: 520b4564f86573ba96662af85a8cafa7b4b5a6f6 + /jsbn/0.1.1: a5e654c2e5a2deb5f201d96cefbca80c0ef2f513 + /jsesc/0.5.0: e7dee66e35d6fc16f710fe91d5cf69f70f08911d + /jsesc/1.3.0: 46c3fec8c1892b12b0833db9bc7622176dbab34b + /json-schema/0.2.3: b480c892e59a2f05954ce727bd3f2a4e882f9e13 + /json-stable-stringify/0.0.1: + dependencies: + jsonify: 0.0.0 + resolution: 611c23e814db375527df851193db59dd2af27f45 + /json-stable-stringify/1.0.1: + dependencies: + jsonify: 0.0.0 + resolution: 9a759d39c5f2ff503fd5300646ed445f88c4f9af + /json-stringify-safe/5.0.1: 1296a2d58fd45f19a0f6ce01d65701e2c735b6eb + /json5/0.5.1: 1eade7acc012034ad84e2396767ead9fa5495821 + /jsonify/0.0.0: 2c74b6ee41d93ca51b7b5aaee8f503631d252a73 + /jsonparse/0.0.5: 330542ad3f0a654665b778f3eb2d9a9fa507ac64 + /jsonparse/1.3.1: 3f4dae4a91fac315f71062f8521cc239f1366280 + /jsonpointer/4.0.1: 4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9 + /jsprim/1.4.0: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.0.2 + json-schema: 0.2.3 + verror: 1.3.6 + resolution: a3b87e40298d8c380552d8cc7628a0bb95a22918 + /jstransform/3.0.0: + dependencies: + base62: 0.1.1 + esprima-fb: 3001.1.0-dev-harmony-fb + source-map: 0.1.31 + resolution: a2591ab6cee8d97bf3be830dbfa2313b87cd640b + /kind-of/3.2.2: + dependencies: + is-buffer: 1.1.5 + resolution: 31ea21a734bab9bbb0f32466d893aea51e4a3c64 + /labeled-stream-splicer/2.0.0: + dependencies: + inherits: 2.0.3 + isarray: 0.0.1 + stream-splicer: 2.0.0 + resolution: a52e1d138024c00b86b1c0c91f677918b8ae0a59 + /last-line-stream/1.0.0: + dependencies: + through2: 2.0.3 + resolution: d1b64d69f86ff24af2d04883a2ceee14520a5600 + /latest-version/2.0.0: + dependencies: + package-json: 2.4.0 + resolution: 56f8d6139620847b8017f8f1f4d78e211324168b + /latest-version/3.1.0: + dependencies: + package-json: 4.0.1 + resolution: a205383fea322b33b5ae3b18abee0dc2f356ee15 + /lazy-cache/1.0.4: a1d78fc3a50474cb80845d3b3b6e1da49a446e8e + /lazy-req/1.1.0: bdaebead30f8d824039ce0ce149d4daa07ba1fac + /lazy-req/2.0.0: c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4 + /lazystream/1.0.0: + dependencies: + readable-stream: 2.2.10 + resolution: f6995fe0f820392f61396be89462407bb77168e4 + /lcid/1.0.0: + dependencies: + invert-kv: 1.0.0 + resolution: 308accafa0bc483a3867b4b6f2b9506251d1b835 + /levn/0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + resolution: 3b09924edf9f083c0490fdd4c0bc4421e04764ee + /lexical-scope/1.2.0: + dependencies: + astw: 2.2.0 + resolution: fcea5edc704a4b3a8796cdca419c3a0afaf22df4 + /lie/3.0.2: + dependencies: + es3ify: 0.1.4 + immediate: 3.0.6 + inline-process-browser: 1.0.0 + unreachable-branch-transform: 0.3.0 + resolution: ffda21d7bba26f377cad865d3649b2fc8ce39fea + /liftoff/2.3.0: + dependencies: + extend: 3.0.1 + findup-sync: 0.4.3 + fined: 1.0.2 + flagged-respawn: 0.3.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.mapvalues: 4.6.0 + rechoir: 0.6.2 + resolve: 1.3.3 + resolution: a98f2ff67183d8ba7cfaca10548bd7ff0550b385 + /lint-staged/3.6.0: + dependencies: + app-root-path: 2.0.1 + cosmiconfig: 1.1.0 + execa: 0.6.3 + listr: 0.12.0 + lodash.chunk: 4.2.0 + minimatch: 3.0.4 + npm-which: 3.0.1 + p-map: 1.1.1 + staged-git-files: 0.0.4 + resolution: cda8f0bef16e7928cc14b735186ae12cd662599c + /listr-silent-renderer/1.1.1: 924b5a3757153770bf1a8e3fbf74b8bbf3f9242e + /listr-update-renderer/0.2.0: + dependencies: + chalk: 1.1.3 + cli-truncate: 0.2.1 + elegant-spinner: 1.0.1 + figures: 1.7.0 + indent-string: 3.1.0 + log-symbols: 1.0.2 + log-update: 1.0.2 + strip-ansi: 3.0.1 + resolution: ca80e1779b4e70266807e8eed1ad6abe398550f9 + /listr-verbose-renderer/0.4.0: + dependencies: + chalk: 1.1.3 + cli-cursor: 1.0.2 + date-fns: 1.28.5 + figures: 1.7.0 + resolution: 44dc01bb0c34a03c572154d4d08cde9b1dc5620f + /listr/0.12.0: + dependencies: + chalk: 1.1.3 + cli-truncate: 0.2.1 + figures: 1.7.0 + indent-string: 2.1.0 + is-promise: 2.1.0 + is-stream: 1.1.0 + listr-silent-renderer: 1.1.1 + listr-update-renderer: 0.2.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.0 + stream-to-observable: 0.1.0 + strip-ansi: 3.0.1 + resolution: 6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a + /livereload-js/2.2.2: 6c87257e648ab475bc24ea257457edcc1f8d0bc2 + /load-json-file/1.1.0: + dependencies: + graceful-fs: 4.1.11 + parse-json: 2.2.0 + pify: 2.3.0 + pinkie-promise: 2.0.1 + strip-bom: 2.0.0 + resolution: 956905708d58b4bab4c2261b04f59f31c99374c0 + /load-json-file/2.0.0: + dependencies: + graceful-fs: 4.1.11 + parse-json: 2.2.0 + pify: 2.3.0 + strip-bom: 3.0.0 + resolution: 7947e42149af80d696cbf797bcaabcfe1fe29ca8 + /localforage/1.5.0: + dependencies: + lie: 3.0.2 + resolution: 6b994e19b56611fa85df3992df397ac4ab66e815 + /locate-path/2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + resolution: 2b568b265eec944c6d9c0de9c3dbbbca0354cd8e + /lodash._baseassign/3.2.0: + dependencies: + lodash._basecopy: 3.0.1 + lodash.keys: 3.1.2 + resolution: 8c38a099500f215ad09e59f1722fd0c52bfe0a4e + /lodash._basecopy/3.0.1: 8da0e6a876cf344c0ad8a54882111dd3c5c7ca36 + /lodash._basetostring/3.0.1: d1861d877f824a52f669832dcaf3ee15566a07d5 + /lodash._basevalues/3.0.0: 5b775762802bde3d3297503e26300820fdf661b7 + /lodash._bindcallback/3.0.1: e531c27644cf8b57a99e17ed95b35c748789392e + /lodash._createassigner/3.1.1: + dependencies: + lodash._bindcallback: 3.0.1 + lodash._isiterateecall: 3.0.9 + lodash.restparam: 3.6.1 + resolution: 838a5bae2fdaca63ac22dee8e19fa4e6d6970b11 + /lodash._getnative/3.9.1: 570bc7dede46d61cdcde687d65d3eecbaa3aaff5 + /lodash._isiterateecall/3.0.9: 5203ad7ba425fae842460e696db9cf3e6aac057c + /lodash._reescape/3.0.0: 2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a + /lodash._reevaluate/3.0.0: 58bc74c40664953ae0b124d806996daca431e2ed + /lodash._reinterpolate/3.0.0: 0ccf2d89166af03b3663c796538b75ac6e114d9d + /lodash._root/3.0.1: fba1c4524c19ee9a5f8136b4609f017cf4ded692 + /lodash.assign/3.2.0: + dependencies: + lodash._baseassign: 3.2.0 + lodash._createassigner: 3.1.1 + lodash.keys: 3.1.2 + resolution: 3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa + /lodash.assign/4.2.0: 0d99f3ccd7a6d261d19bdaeb9245005d285808e7 + /lodash.assignwith/4.2.0: 127a97f02adc41751a954d24b0de17e100e038eb + /lodash.camelcase/4.3.0: b28aa6288a2b9fc651035c7711f65ab6190331a6 + /lodash.chunk/4.2.0: 66e5ce1f76ed27b4303d8c6512e8d1216e8106bc + /lodash.clonedeep/4.5.0: e23f3f9c4f8fbdde872529c1071857a086e5ccef + /lodash.cond/4.5.2: f471a1da486be60f6ab955d17115523dd1d255d5 + /lodash.debounce/4.0.8: 82d79bff30a67c4005ffd5e2515300ad9ca4d7af + /lodash.defaults/4.2.0: d09178716ffea4dde9e5fb7b37f6f0802274580c + /lodash.difference/4.5.0: 9ccb4e505d486b91651345772885a2df27fd017c + /lodash.escape/3.2.0: + dependencies: + lodash._root: 3.0.1 + resolution: 995ee0dc18c1b48cc92effae71a10aab5b487698 + /lodash.flatten/4.4.0: f31c22225a9632d2bbf8e4addbef240aa765a61f + /lodash.isarguments/3.1.0: 2f573d85c6a24289ff00663b491c1d338ff3458a + /lodash.isarray/3.0.4: 79e4eb88c36a8122af86f844aa9bcd851b5fbb55 + /lodash.isempty/4.4.0: 6f86cbedd8be4ec987be9aaf33c9684db1b31e7e + /lodash.isequal/4.5.0: 415c4478f2bcc30120c22ce10ed3226f7d3e18e0 + /lodash.isplainobject/4.0.6: 7c526a52d89b45c45cc690b88163be0497f550cb + /lodash.isstring/4.0.1: d527dfb5456eca7cc9bb95d5daeaf88ba54a5451 + /lodash.kebabcase/4.1.1: 8489b1cb0d29ff88195cceca448ff6d6cc295c36 + /lodash.keys/3.1.2: + dependencies: + lodash._getnative: 3.9.1 + lodash.isarguments: 3.1.0 + lodash.isarray: 3.0.4 + resolution: 4dbc0472b156be50a0b286855d1bd0b0c656098a + /lodash.mapvalues/4.6.0: 1bafa5005de9dd6f4f26668c30ca37230cc9689c + /lodash.memoize/3.0.4: 2dcbd2c287cbc0a55cc42328bd0c736150d53e3f + /lodash.memoize/4.1.2: bcc6c49a42a2840ed997f323eada5ecd182e0bfe + /lodash.mergewith/4.6.0: 150cf0a16791f5903b8891eab154609274bdea55 + /lodash.pick/4.4.0: 52f05610fff9ded422611441ed1fc123a03001b3 + /lodash.restparam/3.6.1: 936a4e309ef330a7645ed4145986c85ae5b20805 + /lodash.snakecase/4.1.1: 39d714a35357147837aefd64b5dcbb16becd8f8d + /lodash.template/3.6.2: + dependencies: + lodash._basecopy: 3.0.1 + lodash._basetostring: 3.0.1 + lodash._basevalues: 3.0.0 + lodash._isiterateecall: 3.0.9 + lodash._reinterpolate: 3.0.0 + lodash.escape: 3.2.0 + lodash.keys: 3.1.2 + lodash.restparam: 3.6.1 + lodash.templatesettings: 3.1.1 + resolution: f8cdecc6169a255be9098ae8b0c53d378931d14f + /lodash.template/4.4.0: + dependencies: + lodash._reinterpolate: 3.0.0 + lodash.templatesettings: 4.1.0 + resolution: e73a0385c8355591746e020b99679c690e68fba0 + /lodash.templatesettings/3.1.1: + dependencies: + lodash._reinterpolate: 3.0.0 + lodash.escape: 3.2.0 + resolution: fb307844753b66b9f1afa54e262c745307dba8e5 + /lodash.templatesettings/4.1.0: + dependencies: + lodash._reinterpolate: 3.0.0 + resolution: 2b4d4e95ba440d915ff08bc899e4553666713316 + /lodash.uniq/4.5.0: d0225373aeb652adc1bc82e4945339a842754773 + /lodash.upperfirst/4.3.1: 1365edf431480481ef0d1c68957a5ed99d49f7ce + /lodash/1.0.2: 8f57560c83b59fc270bd3d561b690043430e2551 + /lodash/4.16.6: d22c9ac660288f3843e16ba7d2b5d06cca27d777 + /lodash/4.17.4: 78203a4d1c328ae1d86dca6460e369b57f4055ae + /log-symbols/1.0.2: + dependencies: + chalk: 1.1.3 + resolution: 376ff7b58ea3086a0f09facc74617eca501e1a18 + /log-update/1.0.2: + dependencies: + ansi-escapes: 1.4.0 + cli-cursor: 1.0.2 + resolution: 19929f64c4093d2d2e7075a1dad8af59c296b8d1 + /logalot/2.1.0: + dependencies: + figures: 1.7.0 + squeak: 1.3.0 + resolution: 5f8e8c90d304edf12530951a5554abb8c5e3f552 + /longest/1.0.1: 30a0b2da38f73770e8294a0d22e6625ed77d0097 + /loose-envify/1.3.1: + dependencies: + js-tokens: 3.0.1 + resolution: d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848 + /loud-rejection/1.6.0: + dependencies: + currently-unhandled: 0.4.1 + signal-exit: 3.0.2 + resolution: 5b46f80147edee578870f086d04821cf998e551f + /lower-case/1.1.4: 9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac + /lowercase-keys/1.0.0: 4e3366b39e7f5457e35f1324bdf6f88d0bfc7306 + /lpad-align/1.1.2: + dependencies: + get-stdin: 4.0.1 + indent-string: 2.1.0 + longest: 1.0.1 + meow: 3.7.0 + resolution: 21f600ac1c3095c3c6e497ee67271ee08481fe9e + /lru-cache/2.7.3: 6d4524e8b955f95d4f5b58851ce21dd72fb4e952 + /lru-cache/4.0.2: + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + resolution: 1d17679c069cda5d040991a09dbc2c0db377e55e + /macaddress/0.2.8: 5904dc537c39ec6dbefeae902327135fa8511f12 + /make-dir/1.0.0: + dependencies: + pify: 2.3.0 + resolution: 97a011751e91dd87cfadef58832ebb04936de978 + /make-error-cause/1.2.2: + dependencies: + make-error: 1.3.0 + resolution: df0388fcd0b37816dff0a5fb8108939777dcbc9d + /make-error/1.3.0: 52ad3a339ccf10ce62b4040b708fe707244b8b96 + /map-cache/0.2.2: c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf + /map-obj/1.0.1: d933ceb9205d82bdcf4886f6742bdc2b4dea146d + /map-stream/0.1.0: e56aa94c4c8055a16404a0674b78f215f7c8e194 + /matcher/0.1.2: + dependencies: + escape-string-regexp: 1.0.5 + resolution: ef20cbde64c24c50cc61af5b83ee0b1b8ff00101 + /math-expression-evaluator/1.2.17: de819fdbcd84dccd8fae59c6aeb79615b9d266ac + /max-timeout/1.0.0: b68f69a2f99e0b476fd4cb23e2059ca750715e1f + /md5-hex/1.3.0: + dependencies: + md5-o-matic: 0.1.1 + resolution: d2c4afe983c4370662179b8cad145219135046c4 + /md5-hex/2.0.0: + dependencies: + md5-o-matic: 0.1.1 + resolution: d0588e9f1c74954492ecd24ac0ac6ce997d92e33 + /md5-o-matic/0.1.1: 822bccd65e117c514fab176b25945d54100a03c3 + /media-typer/0.3.0: 8710d7af0aa626f8fffa1ce00168545263255748 + /meow/3.7.0: + dependencies: + camelcase-keys: 2.1.0 + decamelize: 1.2.0 + loud-rejection: 1.6.0 + map-obj: 1.0.1 + minimist: 1.2.0 + normalize-package-data: 2.3.8 + object-assign: 4.1.1 + read-pkg-up: 1.0.1 + redent: 1.0.0 + trim-newlines: 1.0.0 + resolution: 72cb668b425228290abbfa856892587308a801fb + /merge-stream/1.0.1: + dependencies: + readable-stream: 2.2.10 + resolution: 4041202d508a342ba00174008df0c251b8c135e1 + /micromatch/2.3.11: + dependencies: + 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.2 + normalize-path: 2.1.1 + object.omit: 2.0.1 + parse-glob: 3.0.4 + regex-cache: 0.4.3 + resolution: 86677c97d1720b363431d04d0d15293bd38c1565 + /miller-rabin/4.0.0: + dependencies: + bn.js: 4.11.6 + brorand: 1.1.0 + resolution: 4a62fb1d42933c05583982f4c716f6fb9e6c6d3d + /mime-db/1.27.0: 820f572296bbd20ec25ed55e5b5de869e5436eb1 + /mime-types/2.1.15: + dependencies: + mime-db: 1.27.0 + resolution: a4ebf5064094569237b8cf70046776d09fc92aed + /mimic-fn/1.1.0: e667783d92e89dbd342818b5230b9d62a672ad18 + /mini-lr/0.1.9: + dependencies: + body-parser: 1.14.2 + debug: 2.6.8 + faye-websocket: 0.7.3 + livereload-js: 2.2.2 + parseurl: 1.3.1 + qs: 2.2.5 + resolution: 02199d27347953d1fd1d6dbded4261f187b2d0f6 + /minimalistic-assert/1.0.0: 702be2dda6b37f4836bcb3f5db56641b64a1d3d3 + /minimalistic-crypto-utils/1.0.1: f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a + /minimatch/0.2.14: + dependencies: + lru-cache: 2.7.3 + sigmund: 1.0.1 + resolution: c74e780574f63c6f9a090e90efbe6ef53a6a756a + /minimatch/2.0.10: + dependencies: + brace-expansion: 1.1.7 + resolution: 8d087c39c6b38c001b97fca7ce6d0e1e80afbac7 + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.7 + resolution: 5166e286457f03306064be5497e8dbb0c3d32083 + /minimist/0.0.8: 857fcabfc3397d2625b8228262e86aa7a011b05d + /minimist/1.2.0: a35008b20f41383eec1fb914f4cd5df79a264284 + /mkdirp/0.5.1: + dependencies: + minimist: 0.0.8 + resolution: 30057438eac6cf7f8c4767f38648d6697d75c903 + /module-deps/4.1.1: + dependencies: + JSONStream: 1.3.1 + browser-resolve: 1.11.2 + cached-path-relative: 1.0.1 + concat-stream: 1.5.2 + defined: 1.0.0 + detective: 4.5.0 + duplexer2: 0.1.4 + inherits: 2.0.3 + parents: 1.0.1 + readable-stream: 2.2.10 + resolve: 1.3.3 + stream-combiner2: 1.1.1 + subarg: 1.0.0 + through2: 2.0.3 + xtend: 4.0.1 + resolution: 23215833f1da13fd606ccb8087b44852dcb821fd + /mozjpeg/4.1.1: + dependencies: + bin-build: 2.2.0 + bin-wrapper: 3.0.2 + logalot: 2.1.0 + resolution: 859030b24f689a53db9b40f0160d89195b88fd50 + /ms/0.7.1: 9cd13c03adbff25b65effde7ce864ee952017098 + /ms/0.7.3: 708155a5e44e33f5fd0fc53e81d0d40a91be1fff + /ms/2.0.0: 5608aeadfc00be6c2901df5f9861788de0d597c8 + /multimatch/2.1.0: + dependencies: + array-differ: 1.0.0 + array-union: 1.0.2 + arrify: 1.0.1 + minimatch: 3.0.4 + resolution: 9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b + /multipipe/0.1.2: + dependencies: + duplexer2: 0.0.2 + resolution: 2a8f2ddf70eed564dff2d57f1e1a137d9f05078b + /mute-stream/0.0.5: 8fbfabb0a98a253d3184331f9e8deb7372fac6c0 + /nan/2.6.2: e4ff34e6c95fdfb5aecc08de6596f43605a7db45 + /natives/1.1.0: e9ff841418a6b2ec7a495e939984f78f163e6e31 + /natural-compare/1.4.0: 4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7 + /ncname/1.0.0: + dependencies: + xml-char-classes: 1.0.0 + resolution: 5b57ad18b1ca092864ef62b0b1ed8194f383b71c + /no-case/2.3.1: + dependencies: + lower-case: 1.1.4 + resolution: 7aeba1c73a52184265554b7dc03baf720df80081 + /node-gyp/3.6.2: + dependencies: + fstream: 1.0.11 + glob: 7.1.2 + graceful-fs: 4.1.11 + minimatch: 3.0.4 + mkdirp: 0.5.1 + nopt: 3.0.6 + npmlog: 4.1.0 + osenv: 0.1.4 + request: 2.81.0 + rimraf: 2.6.1 + semver: 5.3.0 + tar: 2.2.1 + which: 1.2.14 + resolution: 9bfbe54562286284838e750eac05295853fa1c60 + /node-sass/4.5.3: + dependencies: + async-foreach: 0.1.3 + chalk: 1.1.3 + cross-spawn: 3.0.1 + gaze: 1.1.2 + get-stdin: 4.0.1 + glob: 7.1.2 + in-publish: 2.0.0 + lodash.assign: 4.2.0 + lodash.clonedeep: 4.5.0 + lodash.mergewith: 4.6.0 + meow: 3.7.0 + mkdirp: 0.5.1 + nan: 2.6.2 + node-gyp: 3.6.2 + npmlog: 4.1.0 + request: 2.81.0 + sass-graph: 2.2.4 + stdout-stream: 1.4.0 + resolution: d09c9d1179641239d1b97ffc6231fdcec53e1568 + /node-status-codes/1.0.0: 5ae5541d024645d32a58fcddc9ceecea7ae3ac2f + /nopt/3.0.6: + dependencies: + abbrev: 1.1.0 + resolution: c6465dbf08abcd4db359317f79ac68a646b28ff9 + /normalize-package-data/2.3.8: + dependencies: + hosted-git-info: 2.4.2 + is-builtin-module: 1.0.0 + semver: 5.3.0 + validate-npm-package-license: 3.0.1 + resolution: d819eda2a9dedbd1ffa563ea4071d936782295bb + /normalize-path/1.0.0: 32d0e472f91ff345701c15a8311018d3b0a90379 + /normalize-path/2.1.1: + dependencies: + remove-trailing-separator: 1.0.1 + resolution: 1ab28b556e198363a8c1a6f7e6fa20137fe6aed9 + /normalize-range/0.1.2: 2d10c06bdfd312ea9777695a4d28439456b75942 + /normalize-url/1.9.1: + dependencies: + object-assign: 4.1.1 + prepend-http: 1.0.4 + query-string: 4.3.4 + sort-keys: 1.1.2 + resolution: 2cc0d66b31ea23036458436e3620d85954c66c3c + /npm-path/2.0.3: + dependencies: + which: 1.2.14 + resolution: 15cff4e1c89a38da77f56f6055b24f975dfb2bbe + /npm-run-path/1.0.0: + dependencies: + path-key: 1.0.0 + resolution: f5c32bf595fe81ae927daec52e82f8b000ac3c8f + /npm-run-path/2.0.2: + dependencies: + path-key: 2.0.1 + resolution: 35a9232dfa35d7067b4cb2ddf2357b1871536c5f + /npm-which/3.0.1: + dependencies: + commander: 2.9.0 + npm-path: 2.0.3 + which: 1.2.14 + resolution: 9225f26ec3a285c209cae67c3b11a6b4ab7140aa + /npmlog/4.1.0: + dependencies: + are-we-there-yet: 1.1.4 + console-control-strings: 1.1.0 + gauge: 2.7.4 + set-blocking: 2.0.0 + resolution: dc59bee85f64f00ed424efb2af0783df25d1c0b5 + /num2fraction/1.2.2: 6f682b6a027a4e9ddfa4564cd2589d1d4e669ede + /number-is-nan/1.0.1: 097b602b53422a522c1afb8790318336941a011d + /oauth-sign/0.8.2: 46a6ab7f0aead8deae9ec0565780b7d4efeb9d43 + /obj-props/1.1.0: 626313faa442befd4a44e9a02c3cb6bde937b511 + /object-assign/2.1.1: 43c36e5d569ff8e4816c4efa8be02d26967c18aa + /object-assign/3.0.0: 9bedd5ca0897949bca47e7ff408062d549f587f2 + /object-assign/4.1.0: 7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0 + /object-assign/4.1.1: 2109adc7965887cfc05cbbd442cac8bfbb360863 + /object-keys/1.0.11: c54601778ad560f1142ce0e01bcca8b56d13426d + /object.omit/2.0.1: + dependencies: + for-own: 0.1.5 + is-extendable: 0.1.1 + resolution: 1a9c744829f39dbb858c76ca3579ae2a54ebd1fa + /observable-to-promise/0.4.0: + dependencies: + is-observable: 0.2.0 + symbol-observable: 0.2.4 + resolution: 28afe71645308f2d41d71f47ad3fece1a377e52b + /on-finished/2.3.0: + dependencies: + ee-first: 1.1.1 + resolution: 20f1336481b083cd75337992a16971aa2d906947 + /once/1.3.3: + dependencies: + wrappy: 1.0.2 + resolution: b2e261557ce4c314ec8304f3fa82663e4297ca20 + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + resolution: 583b1aa775961d4b113ac17d9c50baef9dd76bd1 + /onetime/1.1.0: a1f7838f8314c516f05ecefcbc4ccfe04b4ed789 + /onetime/2.0.1: + dependencies: + mimic-fn: 1.1.0 + resolution: 067428230fd67443b2794b22bba528b6867962d4 + /option-chain/0.1.1: + dependencies: + object-assign: 4.1.1 + resolution: e9b811e006f1c0f54802f28295bfc8970f8dcfbd + /optionator/0.8.2: + dependencies: + 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 + resolution: 364c5e409d3f4d6301d6c0b4c05bba50180aeb64 + /optipng-bin/4.0.0: + dependencies: + bin-build: 2.2.0 + bin-wrapper: 3.0.2 + logalot: 2.1.0 + resolution: 92b937d97ee67fe8a2d29bbcec6b8cee8f1a867e + /ora/0.2.3: + dependencies: + chalk: 1.1.3 + cli-cursor: 1.0.2 + cli-spinners: 0.1.2 + object-assign: 4.1.1 + resolution: 37527d220adcd53c39b73571d754156d5db657a4 + /orchestrator/0.3.8: + dependencies: + end-of-stream: 0.1.5 + sequencify: 0.0.7 + stream-consume: 0.1.0 + resolution: 14e7e9e2764f7315fbac184e506c7aa6df94ad7e + /ordered-read-streams/0.1.0: fd565a9af8eb4473ba69b6ed8a34352cb552f126 + /ordered-read-streams/0.3.0: + dependencies: + is-stream: 1.1.0 + readable-stream: 2.2.10 + resolution: 7137e69b3298bb342247a1bbee3881c80e2fd78b + /os-browserify/0.1.2: 49ca0293e0b19590a5f5de10c7f265a617d8fe54 + /os-filter-obj/1.0.3: 5915330d90eced557d2d938a31c6dd214d9c63ad + /os-homedir/1.0.2: ffbc4988336e0e833de0c168c7ef152121aa7fb3 + /os-locale/1.4.0: + dependencies: + lcid: 1.0.0 + resolution: 20f9f17ae29ed345e8bde583b13d2009803c14d9 + /os-tmpdir/1.0.2: bbe67406c79aa85c5cfec766fe5734555dfa1274 + /osenv/0.1.4: + dependencies: + os-homedir: 1.0.2 + os-tmpdir: 1.0.2 + resolution: 42fe6d5953df06c8064be6f176c3d05aaaa34644 + /outpipe/1.1.1: + dependencies: + shell-quote: 1.6.1 + resolution: 50cf8616365e87e031e29a5ec9339a3da4725fa2 + /p-finally/1.0.0: 3fbcfb15b899a44123b34b6dcc18b724336a2cae + /p-limit/1.1.0: b07ff2d9a5d88bec806035895a2bab66a27988bc + /p-locate/2.0.0: + dependencies: + p-limit: 1.1.0 + resolution: 20a0103b222a70c8fd39cc2e580680f3dde5ec43 + /p-map/1.1.1: 05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a + /package-hash/1.2.0: + dependencies: + md5-hex: 1.3.0 + resolution: 003e56cd57b736a6ed6114cc2b81542672770e44 + /package-json/2.4.0: + dependencies: + got: 5.7.1 + registry-auth-token: 3.3.1 + registry-url: 3.1.0 + semver: 5.3.0 + resolution: 0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb + /package-json/4.0.1: + dependencies: + got: 6.7.1 + registry-auth-token: 3.3.1 + registry-url: 3.1.0 + semver: 5.3.0 + resolution: 8869a0401253661c4c4ca3da6c2121ed555f5eed + /pako/0.2.9: f3f7522f4ef782348da8161bad9ecfd51bf83a75 + /param-case/2.1.1: + dependencies: + no-case: 2.3.1 + resolution: df94fd8cf6531ecf75e6bef9a0858fbc72be2247 + /parents/1.0.1: + dependencies: + path-platform: 0.11.15 + resolution: fedd4d2bf193a77745fe71e371d73c3307d9c751 + /parse-asn1/5.1.0: + dependencies: + asn1.js: 4.9.1 + browserify-aes: 1.0.6 + create-hash: 1.1.3 + evp_bytestokey: 1.0.0 + pbkdf2: 3.0.12 + resolution: 37c4f9b7ed3ab65c74817b5f2480937fbf97c712 + /parse-filepath/1.0.1: + dependencies: + is-absolute: 0.2.6 + map-cache: 0.2.2 + path-root: 0.1.1 + resolution: 159d6155d43904d16c10ef698911da1e91969b73 + /parse-glob/3.0.4: + dependencies: + glob-base: 0.3.0 + is-dotfile: 1.0.3 + is-extglob: 1.0.0 + is-glob: 2.0.1 + resolution: b2c376cfb11f35513badd173ef0bb6e3a388391c + /parse-json/2.2.0: + dependencies: + error-ex: 1.3.1 + resolution: f480f40434ef80741f8469099f8dea18f55a4dc9 + /parse-ms/0.1.2: dd3fa25ed6c2efc7bdde12ad9b46c163aa29224e + /parse-ms/1.0.1: 56346d4749d78f23430ca0c713850aef91aa361d + /parse-passwd/1.0.0: 6d5b934a456993b23d37f40a382d6f1666a8e5c6 + /parseurl/1.3.1: c8ab8c9223ba34888aa64a297b28853bec18da56 + /path-browserify/0.0.0: a0b870729aae214005b7d5032ec2cbbb0fb4451a + /path-dirname/1.0.2: cc33d24d525e099a5388c0336c6e32b9160609e0 + /path-exists/2.1.0: + dependencies: + pinkie-promise: 2.0.1 + resolution: 0feb6c64f0fc518d9a754dd5efb62c7022761f4b + /path-exists/3.0.0: ce0ebeaa5f78cb18925ea7d810d7b59b010fd515 + /path-is-absolute/1.0.1: 174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f + /path-is-inside/1.0.2: 365417dede44430d1c11af61027facf074bdfc53 + /path-key/1.0.0: 5d53d578019646c0d68800db4e146e6bdc2ac7af + /path-key/2.0.1: 411cadb574c5a140d3a4b1910d40d80cc9f40b40 + /path-parse/1.0.5: 3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1 + /path-platform/0.11.15: e864217f74c36850f0852b78dc7bf7d4a5721bf2 + /path-root-regex/0.1.2: bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d + /path-root/0.1.1: + dependencies: + path-root-regex: 0.1.2 + resolution: 9a4a6814cac1c0cd73360a95f32083c8ea4745b7 + /path-to-regexp/1.7.0: + dependencies: + isarray: 0.0.1 + resolution: 59fde0f435badacba103a84e9d3bc64e96b9937d + /path-type/1.1.0: + dependencies: + graceful-fs: 4.1.11 + pify: 2.3.0 + pinkie-promise: 2.0.1 + resolution: 59c44f7ee491da704da415da5a4070ba4f8fe441 + /path-type/2.0.0: + dependencies: + pify: 2.3.0 + resolution: f012ccb8415b7096fc2daa1054c3d72389594c73 + /pause-stream/0.0.11: + dependencies: + through: 2.3.8 + resolution: fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445 + /pbkdf2/3.0.12: + dependencies: + create-hash: 1.1.3 + create-hmac: 1.1.6 + ripemd160: 2.0.1 + safe-buffer: 5.1.0 + sha.js: 2.4.8 + resolution: be36785c5067ea48d806ff923288c5f750b6b8a2 + /pend/1.2.0: 7a57eb550a6783f9115331fcf4663d5c8e007a50 + /performance-now/0.2.0: 33ef30c5c77d4ea21c5a53869d91b56d8f2555e5 + /pify/2.3.0: ed141a6ac043a849ea588498e7dca8b15330e90c + /pinkie-promise/1.0.0: + dependencies: + pinkie: 1.0.0 + resolution: d1da67f5482563bb7cf57f286ae2822ecfbf3670 + /pinkie-promise/2.0.1: + dependencies: + pinkie: 2.0.4 + resolution: 2135d6dfa7a358c069ac9b178776288228450ffa + /pinkie/1.0.0: 5a47f28ba1015d0201bda7bf0f358e47bec8c7e4 + /pinkie/2.0.4: 72556b80cfa0d48a974e80e77248e80ed4f7f870 + /pjs-problems/1.0.3: 861601b28fda9aa4752d38d161d4a29589d25151 + /pkg-conf/2.0.0: + dependencies: + find-up: 2.1.0 + load-json-file: 2.0.0 + resolution: 071c87650403bccfb9c627f58751bfe47c067279 + /pkg-dir/1.0.0: + dependencies: + find-up: 1.1.2 + resolution: 7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4 + /pkg-up/1.0.0: + dependencies: + find-up: 1.1.2 + resolution: 3e08fb461525c4421624a33b9f7e6d0af5b05a26 + /plur/1.0.0: db85c6814f5e5e5a3b49efc28d604fec62975156 + /plur/2.1.2: + dependencies: + irregular-plurals: 1.2.0 + resolution: 7482452c1a0f508e3e344eaec312c91c29dc655a + /pluralize/1.2.1: d1a21483fd22bb41e58a12fa3421823140897c45 + /pngquant-bin/3.1.1: + dependencies: + bin-build: 2.2.0 + bin-wrapper: 3.0.2 + logalot: 2.1.0 + resolution: d124d98a75a9487f40c1640b4dbfcbb2bd5a1fd1 + /postcss-calc/5.3.1: + dependencies: + postcss: 5.2.17 + postcss-message-helpers: 2.0.0 + reduce-css-calc: 1.3.0 + resolution: 77bae7ca928ad85716e2fda42f261bf7c1d65b5e + /postcss-colormin/2.2.2: + dependencies: + colormin: 1.1.2 + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: 6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b + /postcss-convert-values/2.6.1: + dependencies: + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d + /postcss-discard-comments/2.0.4: + dependencies: + postcss: 5.2.17 + resolution: befe89fafd5b3dace5ccce51b76b81514be00e3d + /postcss-discard-duplicates/2.1.0: + dependencies: + postcss: 5.2.17 + resolution: b9abf27b88ac188158a5eb12abcae20263b91932 + /postcss-discard-empty/2.1.0: + dependencies: + postcss: 5.2.17 + resolution: d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5 + /postcss-discard-overridden/0.1.1: + dependencies: + postcss: 5.2.17 + resolution: 8b1eaf554f686fb288cd874c55667b0aa3668d58 + /postcss-discard-unused/2.2.3: + dependencies: + postcss: 5.2.17 + uniqs: 2.0.0 + resolution: bce30b2cc591ffc634322b5fb3464b6d934f4433 + /postcss-filter-plugins/2.0.2: + dependencies: + postcss: 5.2.17 + uniqid: 4.1.1 + resolution: 6d85862534d735ac420e4a85806e1f5d4286d84c + /postcss-load-config/1.2.0: + dependencies: + cosmiconfig: 2.1.3 + object-assign: 4.1.1 + postcss-load-options: 1.2.0 + postcss-load-plugins: 2.3.0 + resolution: 539e9afc9ddc8620121ebf9d8c3673e0ce50d28a + /postcss-load-options/1.2.0: + dependencies: + cosmiconfig: 2.1.3 + object-assign: 4.1.1 + resolution: b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c + /postcss-load-plugins/2.3.0: + dependencies: + cosmiconfig: 2.1.3 + object-assign: 4.1.1 + resolution: 745768116599aca2f009fad426b00175049d8d92 + /postcss-merge-idents/2.1.7: + dependencies: + has: 1.0.1 + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: 4c5530313c08e1d5b3bbf3d2bbc747e278eea270 + /postcss-merge-longhand/2.0.2: + dependencies: + postcss: 5.2.17 + resolution: 23d90cd127b0a77994915332739034a1a4f3d658 + /postcss-merge-rules/2.1.2: + dependencies: + browserslist: 1.7.7 + caniuse-api: 1.6.1 + postcss: 5.2.17 + postcss-selector-parser: 2.2.3 + vendors: 1.0.1 + resolution: d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721 + /postcss-message-helpers/2.0.0: a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e + /postcss-minify-font-values/1.0.5: + dependencies: + object-assign: 4.1.1 + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: 4b58edb56641eba7c8474ab3526cafd7bbdecb69 + /postcss-minify-gradients/1.0.5: + dependencies: + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: 5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1 + /postcss-minify-params/1.2.2: + dependencies: + alphanum-sort: 1.0.2 + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + uniqs: 2.0.0 + resolution: ad2ce071373b943b3d930a3fa59a358c28d6f1f3 + /postcss-minify-selectors/2.1.1: + dependencies: + alphanum-sort: 1.0.2 + has: 1.0.1 + postcss: 5.2.17 + postcss-selector-parser: 2.2.3 + resolution: b2c6a98c0072cf91b932d1a496508114311735bf + /postcss-normalize-charset/1.1.1: + dependencies: + postcss: 5.2.17 + resolution: ef9ee71212d7fe759c78ed162f61ed62b5cb93f1 + /postcss-normalize-url/3.0.8: + dependencies: + is-absolute-url: 2.1.0 + normalize-url: 1.9.1 + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: 108f74b3f2fcdaf891a2ffa3ea4592279fc78222 + /postcss-ordered-values/2.2.3: + dependencies: + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: eec6c2a67b6c412a8db2042e77fe8da43f95c11d + /postcss-reduce-idents/2.4.0: + dependencies: + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: c2c6d20cc958284f6abfbe63f7609bf409059ad3 + /postcss-reduce-initial/1.0.1: + dependencies: + postcss: 5.2.17 + resolution: 68f80695f045d08263a879ad240df8dd64f644ea + /postcss-reduce-transforms/1.0.4: + dependencies: + has: 1.0.1 + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + resolution: ff76f4d8212437b31c298a42d2e1444025771ae1 + /postcss-selector-parser/2.2.3: + dependencies: + flatten: 1.0.2 + indexes-of: 1.0.1 + uniq: 1.0.1 + resolution: f9437788606c3c9acee16ffe8d8b16297f27bb90 + /postcss-svgo/2.1.6: + dependencies: + is-svg: 2.1.0 + postcss: 5.2.17 + postcss-value-parser: 3.3.0 + svgo: 0.7.2 + resolution: b6df18aa613b666e133f08adb5219c2684ac108d + /postcss-unique-selectors/2.0.2: + dependencies: + alphanum-sort: 1.0.2 + postcss: 5.2.17 + uniqs: 2.0.0 + resolution: 981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d + /postcss-value-parser/3.3.0: 87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15 + /postcss-zindex/2.2.0: + dependencies: + has: 1.0.1 + postcss: 5.2.17 + uniqs: 2.0.0 + resolution: d2109ddc055b91af67fc4cb3b025946639d2af22 + /postcss/5.2.17: + dependencies: + chalk: 1.1.3 + js-base64: 2.1.9 + source-map: 0.5.6 + supports-color: 3.2.3 + resolution: cf4f597b864d65c8a492b2eabe9d706c879c388b + /prelude-ls/1.1.2: 21932a549f5e52ffd9a827f570e04be62a97da54 + /prepend-http/1.0.4: d4f4562b0ce3696e41ac52d0e002e57a635dc6dc + /preserve/0.2.0: 815ed1f6ebc65926f865b310c0713bcb3315ce4b + /pretty-bytes/4.0.2: b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9 + /pretty-format/18.1.0: + dependencies: + ansi-styles: 2.2.1 + resolution: fb65a86f7a7f9194963eee91865c1bcf1039e284 + /pretty-hrtime/1.0.3: b7e3ea42435a4c9b2759d99e0f201eb195802ee1 + /pretty-ms/0.2.2: + dependencies: + parse-ms: 0.1.2 + resolution: da879a682ff33a37011046f13d627f67c73b84f6 + /pretty-ms/2.1.0: + dependencies: + is-finite: 1.0.2 + parse-ms: 1.0.1 + plur: 1.0.0 + resolution: 4257c256df3fb0b451d6affaab021884126981dc + /private/0.1.7: 68ce5e8a1ef0a23bb570cc28537b5332aba63ef1 + /process-nextick-args/1.0.7: 150e20b756590ad3f91093f25a4f2ad8bff30ba3 + /process/0.11.10: 7332300e840161bda3e69a1d1d91a7d4bc16f182 + /progress/1.1.8: e260c78f6161cdd9b0e56cc3e0a85de17c7a57be + /proto-props/0.2.1: 5e01dc2675a0de9abfa76e799dfa334d6f483f4b + /pseudomap/1.0.2: f052a28da70e618917ef0a8ac34c1ae5a68286b3 + /public-encrypt/4.0.0: + dependencies: + bn.js: 4.11.6 + browserify-rsa: 4.0.1 + create-hash: 1.1.3 + parse-asn1: 5.1.0 + randombytes: 2.0.4 + resolution: 39f699f3a46560dd5ebacbca693caf7c65c18cc6 + /pump/1.0.2: + dependencies: + end-of-stream: 1.4.0 + once: 1.4.0 + resolution: 3b3ee6512f94f0e575538c17995f9f16990a5d51 + /punycode/1.3.2: 9653a036fb7c1ee42342f2325cceefea3926c48d + /punycode/1.4.1: c0d5a63b2718800ad8e1eb0fa5269c84dd41845e + /q/1.5.0: dd01bac9d06d30e6f219aecb8253ee9ebdc308f1 + /qs/2.2.5: 1088abaf9dcc0ae5ae45b709e6c6b5888b23923c + /qs/5.2.0: a9f31142af468cb72b25b30136ba2456834916be + /qs/6.4.0: 13e26d28ad6b0ffaa91312cd3bf708ed351e7233 + /query-string/4.3.4: + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + resolution: bbb693b9ca915c232515b228b1a02b609043dbeb + /querystring-es3/0.2.1: 9ec61f79049875707d69414596fd907a4d711e73 + /querystring/0.2.0: b209849203bb25df820da756e747005878521620 + /randomatic/1.1.6: + dependencies: + is-number: 2.1.0 + kind-of: 3.2.2 + resolution: 110dcabff397e9dcff7c0789ccc0a49adf1ec5bb + /randombytes/2.0.4: + dependencies: + safe-buffer: 5.1.0 + resolution: 9551df208422c8f80eb58e2326dd0b840ff22efd + /raw-body/2.1.7: + dependencies: + bytes: 2.4.0 + iconv-lite: 0.4.13 + unpipe: 1.0.0 + resolution: adfeace2e4fb3098058014d08c072dcc59758774 + /rc/1.2.1: + dependencies: + deep-extend: 0.4.2 + ini: 1.3.4 + minimist: 1.2.0 + strip-json-comments: 2.0.1 + resolution: 2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95 + /read-all-stream/3.1.0: + dependencies: + pinkie-promise: 2.0.1 + readable-stream: 2.2.10 + resolution: 35c3e177f2078ef789ee4bfafa4373074eaef4fa + /read-only-stream/2.0.0: + dependencies: + readable-stream: 2.2.10 + resolution: 2724fd6a8113d73764ac288d4386270c1dbf17f0 + /read-pkg-up/1.0.1: + dependencies: + find-up: 1.1.2 + read-pkg: 1.1.0 + resolution: 9d63c13276c065918d57f002a57f40a1b643fb02 + /read-pkg-up/2.0.0: + dependencies: + find-up: 2.1.0 + read-pkg: 2.0.0 + resolution: 6b72a8048984e0c41e79510fd5e9fa99b3b549be + /read-pkg/1.1.0: + dependencies: + load-json-file: 1.1.0 + normalize-package-data: 2.3.8 + path-type: 1.1.0 + resolution: f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28 + /read-pkg/2.0.0: + dependencies: + load-json-file: 2.0.0 + normalize-package-data: 2.3.8 + path-type: 2.0.0 + resolution: 8ef1c0623c6a6db0dc6713c4bfac46332b2368f8 + /readable-stream/1.0.34: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.3 + isarray: 0.0.1 + string_decoder: 0.10.31 + resolution: 125820e34bc842d2f2aaafafe4c2916ee32c157c + /readable-stream/1.1.14: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.3 + isarray: 0.0.1 + string_decoder: 0.10.31 + resolution: 7cf4c54ef648e3813084c636dd2079e166c081d9 + /readable-stream/2.0.6: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.3 + isarray: 1.0.0 + process-nextick-args: 1.0.7 + string_decoder: 0.10.31 + util-deprecate: 1.0.2 + resolution: 8f90341e68a53ccc928788dacfcd11b36eb9b78e + /readable-stream/2.2.10: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.3 + isarray: 1.0.0 + process-nextick-args: 1.0.7 + safe-buffer: 5.1.0 + string_decoder: 1.0.1 + util-deprecate: 1.0.2 + resolution: effe72bb7c884c0dd335e2379d526196d9d011ee + /readdirp/2.1.0: + dependencies: + graceful-fs: 4.1.11 + minimatch: 3.0.4 + readable-stream: 2.2.10 + set-immediate-shim: 1.0.1 + resolution: 4ed0ad060df3073300c48440373f72d1cc642d78 + /readline2/1.0.1: + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + mute-stream: 0.0.5 + resolution: 41059608ffc154757b715d9989d199ffbf372e35 + /recast/0.10.43: + dependencies: + ast-types: 0.8.15 + esprima-fb: 15001.1001.0-dev-harmony-fb + private: 0.1.7 + source-map: 0.5.6 + resolution: b95d50f6d60761a5f6252e15d80678168491ce7f + /rechoir/0.6.2: + dependencies: + resolve: 1.3.3 + resolution: 85204b54dba82d5742e28c96756ef43af50e3384 + /redent/1.0.0: + dependencies: + indent-string: 2.1.0 + strip-indent: 1.0.1 + resolution: cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde + /reduce-css-calc/1.3.0: + dependencies: + balanced-match: 0.4.2 + math-expression-evaluator: 1.2.17 + reduce-function-call: 1.0.2 + resolution: 747c914e049614a4c9cfbba629871ad1d2927716 + /reduce-function-call/1.0.2: + dependencies: + balanced-match: 0.4.2 + resolution: 5a200bf92e0e37751752fe45b0ab330fd4b6be99 + /regenerate/1.3.2: d1941c67bad437e1be76433add5b385f95b19260 + /regenerator-runtime/0.10.5: 336c3efc1220adcedda2c9fab67b5a7955a33658 + /regenerator-transform/0.9.11: + dependencies: + babel-runtime: 6.23.0 + babel-types: 6.24.1 + private: 0.1.7 + resolution: 3a7d067520cb7b7176769eb5ff868691befe1283 + /regex-cache/0.4.3: + dependencies: + is-equal-shallow: 0.1.3 + is-primitive: 2.0.0 + resolution: 9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145 + /regexpu-core/2.0.0: + dependencies: + regenerate: 1.3.2 + regjsgen: 0.2.0 + regjsparser: 0.1.5 + resolution: 49d038837b8dcf8bfa5b9a42139938e6ea2ae240 + /registry-auth-token/3.3.1: + dependencies: + rc: 1.2.1 + safe-buffer: 5.1.0 + resolution: fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006 + /registry-url/3.1.0: + dependencies: + rc: 1.2.1 + resolution: 3d4ef870f73dde1d77f0cf9a381432444e174942 + /regjsgen/0.2.0: 6c016adeac554f75823fe37ac05b92d5a4edb1f7 + /regjsparser/0.1.5: + dependencies: + jsesc: 0.5.0 + resolution: 7ee8f84dc6fa792d3fd0ae228d24bd949ead205c + /relateurl/0.2.7: 54dbf377e51440aca90a4cd274600d3ff2d888a9 + /remove-trailing-separator/1.0.1: 615ebb96af559552d4bf4057c8436d486ab63cc4 + /repeat-element/1.1.2: ef089a178d1483baae4d93eb98b4f9e4e11d990a + /repeat-string/1.6.1: 8dcae470e1c88abc2d600fff4a776286da75e637 + /repeating/2.0.1: + dependencies: + is-finite: 1.0.2 + resolution: 5214c53a926d3552707527fbab415dbc08d06dda + /replace-ext/0.0.1: 29bbd92078a739f0bcce2b4ee41e837953522924 + /req-all/1.0.0: d128569451c340b432409c656cf166260cd2628d + /request/2.81.0: + dependencies: + 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.1.0 + stringstream: 0.0.5 + tough-cookie: 2.3.2 + tunnel-agent: 0.6.0 + uuid: 3.0.1 + resolution: c6928946a0e06c5f8d6f8a9333469ffda46298a0 + /require-directory/2.1.1: 8c64ad5fd30dab1c976e2344ffe7f792a6a6df42 + /require-from-string/1.2.1: 529c9ccef27380adfec9a2f965b649bbee636418 + /require-main-filename/1.0.1: 97f717b69d48784f5f526a6c5aa8ffdda055a4d1 + /require-precompiled/0.1.0: 5a1b52eb70ebed43eb982e974c85ab59571e56fa + /require-uncached/1.0.3: + dependencies: + caller-path: 0.1.0 + resolve-from: 1.0.1 + resolution: 4e0d56d6c9662fd31e43011c4b95aa49955421d3 + /resolve-cwd/1.0.0: + dependencies: + resolve-from: 2.0.0 + resolution: 4eaeea41ed040d1702457df64a42b2b07d246f9f + /resolve-dir/0.1.1: + dependencies: + expand-tilde: 1.2.2 + global-modules: 0.2.3 + resolution: b219259a5602fac5c5c496ad894a6e8cc430261e + /resolve-from/1.0.1: 26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226 + /resolve-from/2.0.0: 9480ab20e94ffa1d9e80a804c7ea147611966b57 + /resolve-url/0.2.1: 2c637fe77c893afd2a663fe21aa9080068e2052a + /resolve/1.1.7: 203114d82ad2c5ed9e8e0411b3932875e889e97b + /resolve/1.3.3: + dependencies: + path-parse: 1.0.5 + resolution: 655907c3469a8680dc2de3a275a8fdd69691f0e5 + /restore-cursor/1.0.1: + dependencies: + exit-hook: 1.1.1 + onetime: 1.1.0 + resolution: 34661f46886327fed2991479152252df92daa541 + /restore-cursor/2.0.0: + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.2 + resolution: 9f7ee287f82fd326d4fd162923d62129eee0dfaf + /right-align/0.1.3: + dependencies: + align-text: 0.1.4 + resolution: 61339b722fe6a3515689210d24e14c96148613ef + /rimraf/2.6.1: + dependencies: + glob: 7.1.2 + resolution: c2338ec643df7a1b7fe5c54fa86f57428a55f33d + /ripemd160/2.0.1: + dependencies: + hash-base: 2.0.2 + inherits: 2.0.3 + resolution: 0f4584295c53a3628af7e6d79aca21ce57d1c6e7 + /rollup-stream/1.19.0: + dependencies: + rollup: 0.41.6 + resolution: 8ab70d3970d8ec8529f1c1d7a688d8d65f90599a + /rollup/0.41.6: + dependencies: + source-map-support: 0.4.15 + resolution: e0d05497877a398c104d816d2733a718a7a94e2a + /run-async/0.1.0: + dependencies: + once: 1.4.0 + resolution: c8ad4a5e110661e402a7d21b530e009f25f8e389 + /rx-lite/3.1.2: 19ce502ca572665f3b647b10939f97fd1615f102 + /rxjs/5.4.0: + dependencies: + symbol-observable: 1.0.4 + resolution: a7db14ab157f9d7aac6a56e655e7a3860d39bf26 + /safe-buffer/5.1.0: fe4c8460397f9eaaaa58e73be46273408a45e223 + /sass-graph/2.2.4: + dependencies: + glob: 7.1.2 + lodash: 4.17.4 + scss-tokenizer: 0.2.3 + yargs: 7.1.0 + resolution: 13fbd63cd1caf0908b9fd93476ad43a51d1e0b49 + /sax/1.2.2: fd8631a23bc7826bef5d871bdb87378c95647828 + /scss-tokenizer/0.2.3: + dependencies: + js-base64: 2.1.9 + source-map: 0.4.4 + resolution: 8eb06db9a9723333824d3f5530641149847ce5d1 + /seek-bzip/1.0.5: + dependencies: + commander: 2.8.1 + resolution: cfe917cb3d274bcffac792758af53173eb1fabdc + /semver-diff/2.1.0: + dependencies: + semver: 5.3.0 + resolution: 4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36 + /semver-regex/1.0.0: 92a4969065f9c70c694753d55248fc68f8f652c9 + /semver-truncate/1.1.2: + dependencies: + semver: 5.3.0 + resolution: 57f41de69707a62709a7e0104ba2117109ea47e8 + /semver/4.3.6: 300bc6e0e86374f7ba61068b5b1ecd57fc6532da + /semver/5.3.0: 9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f + /sequencify/0.0.7: 90cff19d02e07027fd767f5ead3e7b95d1e7380c + /serviceworker-cache-polyfill/4.0.0: de19ee73bef21ab3c0740a37b33db62464babdeb + /set-blocking/2.0.0: 045f9782d011ae9a6803ddd382b24392b3d890f7 + /set-immediate-shim/1.0.1: 4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61 + /sha.js/2.4.8: + dependencies: + inherits: 2.0.3 + resolution: 37068c2c476b6baf402d14a49c67f597921f634f + /shasum/1.0.2: + dependencies: + json-stable-stringify: 0.0.1 + sha.js: 2.4.8 + resolution: e7012310d8f417f4deb5712150e5678b87ae565f + /shebang-command/1.2.0: + dependencies: + shebang-regex: 1.0.0 + resolution: 44aac65b695b03398968c39f363fee5deafdf1ea + /shebang-regex/1.0.0: da42f49740c0b42db2ca9728571cb190c98efea3 + /shell-quote/1.6.1: + dependencies: + array-filter: 0.0.1 + array-map: 0.0.0 + array-reduce: 0.0.0 + jsonify: 0.0.0 + resolution: f4781949cce402697127430ea3b3c5476f481767 + /shelljs/0.7.7: + dependencies: + glob: 7.1.2 + interpret: 1.0.3 + rechoir: 0.6.2 + resolution: b2f5c77ef97148f4b4f6e22682e10bba8667cff1 + /sigmund/1.0.1: 3ff21f198cad2175f9f3b781853fd94d0d19b590 + /signal-exit/3.0.2: b5fdc08f1287ea1178628e415e25132b73646c6d + /slash/1.0.0: c41f2f6c39fc16d1cd17ad4b5d896114ae470d55 + /slice-ansi/0.0.4: edbf8903f66f7ce2f8eafd6ceed65e264c831b35 + /slide/1.1.6: 56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707 + /sntp/1.0.9: + dependencies: + hoek: 2.16.3 + resolution: 6541184cc90aeea6c6e7b35e2659082443c66198 + /sort-keys/1.1.2: + dependencies: + is-plain-obj: 1.1.0 + resolution: 441b6d4d346798f1b4e49e8920adfba0e543f9ad + /source-map-resolve/0.3.1: + dependencies: + atob: 1.1.3 + resolve-url: 0.2.1 + source-map-url: 0.3.0 + urix: 0.1.0 + resolution: 610f6122a445b8dd51535a2a71b783dfc1248761 + /source-map-support/0.4.15: + dependencies: + source-map: 0.5.6 + resolution: 03202df65c06d2bd8c7ec2362a193056fef8d3b1 + /source-map-url/0.3.0: 7ecaf13b57bcd09da8a40c5d269db33799d4aaf9 + /source-map/0.1.31: + dependencies: + amdefine: 1.0.1 + resolution: 9f704d0d69d9e138a81badf6ebb4fde33d151c61 + /source-map/0.1.43: + dependencies: + amdefine: 1.0.1 + resolution: c24bc146ca517c1471f5dacbe2571b2b7f9e3346 + /source-map/0.4.4: + dependencies: + amdefine: 1.0.1 + resolution: eba4f5da9c0dc999de68032d8b4f76173652036b + /source-map/0.5.6: 75ce38f52bf0733c5a7f0c118d81334a2bb5f412 + /sparkles/1.0.0: 1acbbfb592436d10bbe8f785b7cc6f82815012c3 + /spdx-correct/1.0.2: + dependencies: + spdx-license-ids: 1.2.2 + resolution: 4b3073d933ff51f3912f03ac5519498a4150db40 + /spdx-expression-parse/1.0.4: 9bdf2f20e1f40ed447fbe273266191fced51626c + /spdx-license-ids/1.2.2: c9df7a3424594ade6bd11900d596696dc06bac57 + /split/0.3.3: + dependencies: + through: 2.3.8 + resolution: cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f + /sprintf-js/1.0.3: 04e6926f662895354f3dd015203633b857297e2c + /squeak/1.3.0: + dependencies: + chalk: 1.1.3 + console-stream: 0.1.1 + lpad-align: 1.1.2 + resolution: 33045037b64388b567674b84322a6521073916c3 + /sshpk/1.13.0: + dependencies: + 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 + resolution: ff2a3e4fd04497555fed97b39a0fd82fafb3a33c + /stack-utils/1.0.1: d4f33ab54e8e38778b0ca5cfd3b3afb12db68620 + /staged-git-files/0.0.4: d797e1b551ca7a639dec0237dc6eb4bb9be17d35 + /stat-mode/0.2.2: e6c80b623123d7d80cf132ce538f346289072502 + /statuses/1.3.1: faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e + /stdout-stream/1.4.0: + dependencies: + readable-stream: 2.2.10 + resolution: a2c7c8587e54d9427ea9edb3ac3f2cd522df378b + /stream-browserify/2.0.1: + dependencies: + inherits: 2.0.3 + readable-stream: 2.2.10 + resolution: 66266ee5f9bdb9940a4e4514cafb43bb71e5c9db + /stream-combiner/0.0.4: + dependencies: + duplexer: 0.1.1 + resolution: 4d5e433c185261dde623ca3f44c586bcf5c4ad14 + /stream-combiner2/1.1.1: + dependencies: + duplexer2: 0.1.4 + readable-stream: 2.2.10 + resolution: fb4d8a1420ea362764e21ad4780397bebcb41cbe + /stream-consume/0.1.0: a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f + /stream-http/2.7.1: + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.3 + readable-stream: 2.2.10 + to-arraybuffer: 1.0.1 + xtend: 4.0.1 + resolution: 546a51741ad5a6b07e9e31b0b10441a917df528a + /stream-shift/1.0.0: d5c752825e5367e786f78e18e445ea223a155952 + /stream-splicer/2.0.0: + dependencies: + inherits: 2.0.3 + readable-stream: 2.2.10 + resolution: 1b63be438a133e4b671cc1935197600175910d83 + /stream-to-observable/0.1.0: 45bf1d9f2d7dc09bed81f1c307c430e68b84cffe + /strict-uri-encode/1.1.0: 279b225df1d582b1f54e65addd4352e18faa0713 + /string-width/1.0.2: + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + resolution: 118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3 + /string-width/2.0.0: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 3.0.1 + resolution: 635c5436cc72a6e0c387ceca278d4e2eec52687e + /string_decoder/0.10.31: 62e203bc41766c6c28c9fc84301dab1c5310fa94 + /string_decoder/1.0.1: + dependencies: + safe-buffer: 5.1.0 + resolution: 62e200f039955a6810d8df0a33ffc0f013662d98 + /stringstream/0.0.5: 4e484cd4de5a0bbbee18e46307710a8a81621878 + /strip-ansi/0.1.1: 39e8a98d044d150660abe4a6808acf70bb7bc991 + /strip-ansi/0.3.0: + dependencies: + ansi-regex: 0.2.1 + resolution: 25f48ea22ca79187f3174a4db8759347bb126220 + /strip-ansi/3.0.1: + dependencies: + ansi-regex: 2.1.1 + resolution: 6a385fb8853d952d5ff05d0e8aaf94278dc63dcf + /strip-bom-buf/1.0.0: + dependencies: + is-utf8: 0.2.1 + resolution: 1cb45aaf57530f4caf86c7f75179d2c9a51dd572 + /strip-bom-stream/1.0.0: + dependencies: + first-chunk-stream: 1.0.0 + strip-bom: 2.0.0 + resolution: e7144398577d51a6bed0fa1994fa05f43fd988ee + /strip-bom-string/1.0.0: e5211e9224369fbb81d633a2f00044dc8cedad92 + /strip-bom/1.0.0: + dependencies: + first-chunk-stream: 1.0.0 + is-utf8: 0.2.1 + resolution: 85b8862f3844b5a6d5ec8467a93598173a36f794 + /strip-bom/2.0.0: + dependencies: + is-utf8: 0.2.1 + resolution: 6219a85616520491f35788bdbf1447a99c7e6b0e + /strip-bom/3.0.0: 2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3 + /strip-dirs/1.1.1: + dependencies: + chalk: 1.1.3 + get-stdin: 4.0.1 + is-absolute: 0.1.7 + is-natural-number: 2.1.1 + minimist: 1.2.0 + sum-up: 1.0.3 + resolution: 960bbd1287844f3975a4558aa103a8255e2456a0 + /strip-eof/1.0.0: bb43ff5598a6eb05d89b59fcd129c983313606bf + /strip-indent/1.0.1: + dependencies: + get-stdin: 4.0.1 + resolution: 0c7962a6adefa7bbd4ac366460a638552ae1a0a2 + /strip-json-comments/2.0.1: 3c531942e908c2697c0ec344858c286c7ca0a60a + /strip-outer/1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + resolution: aac0ba60d2e90c5d4f275fd8869fd9a2d310ffb8 + /subarg/1.0.0: + dependencies: + minimist: 1.2.0 + resolution: f62cf17581e996b48fc965699f54c06ae268b8d2 + /sum-up/1.0.3: + dependencies: + chalk: 1.1.3 + resolution: 1c661f667057f63bcb7875aa1438bc162525156e + /supports-color/0.2.0: d92de2694eb3f67323973d7ae3d8b55b4c22190a + /supports-color/2.0.0: 535d045ce6b6363fa40117084629995e9df324c7 + /supports-color/3.2.3: + dependencies: + has-flag: 1.0.0 + resolution: 65ac0504b3954171d8a64946b2ae3cbb8a5f54f6 + /svgo/0.6.6: + dependencies: + coa: 1.0.2 + colors: 1.1.2 + csso: 2.0.0 + js-yaml: 3.6.1 + mkdirp: 0.5.1 + sax: 1.2.2 + whet.extend: 0.9.9 + resolution: b340889036f20f9b447543077d0f5573ed044c08 + /svgo/0.7.2: + dependencies: + coa: 1.0.2 + colors: 1.1.2 + csso: 2.3.2 + js-yaml: 3.7.0 + mkdirp: 0.5.1 + sax: 1.2.2 + whet.extend: 0.9.9 + resolution: 9f5772413952135c6fefbf40afe6a4faa88b4bb5 + /sw-precache/5.1.1: + dependencies: + dom-urls: 1.1.0 + es6-promise: 4.1.0 + glob: 7.1.2 + lodash.defaults: 4.2.0 + lodash.template: 4.4.0 + meow: 3.7.0 + mkdirp: 0.5.1 + pretty-bytes: 4.0.2 + sw-toolbox: 3.6.0 + update-notifier: 1.0.3 + resolution: 928720957463e55ed56777e177c4699f35ec59b6 + /sw-toolbox/3.6.0: + dependencies: + path-to-regexp: 1.7.0 + serviceworker-cache-polyfill: 4.0.0 + resolution: 26df1d1c70348658e4dea2884319149b7b3183b5 + /symbol-observable/0.2.4: 95a83db26186d6af7e7a18dbd9760a2f86d08f40 + /symbol-observable/1.0.4: 29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d + /syntax-error/1.3.0: + dependencies: + acorn: 4.0.13 + resolution: 1ed9266c4d40be75dc55bf9bb1cb77062bb96ca1 + /table/3.8.3: + dependencies: + 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 + resolution: 2bbc542f0fda9861a755d3947fefd8b3f513855f + /tar-stream/1.5.4: + dependencies: + bl: 1.2.1 + end-of-stream: 1.4.0 + readable-stream: 2.2.10 + xtend: 4.0.1 + resolution: 36549cf04ed1aee9b2a30c0143252238daf94016 + /tar/2.2.1: + dependencies: + block-stream: 0.0.9 + fstream: 1.0.11 + inherits: 2.0.3 + resolution: 8e4d2a256c0e2185c6b18ad694aec968b83cb1d1 + /tempfile/1.1.1: + dependencies: + os-tmpdir: 1.0.2 + uuid: 2.0.3 + resolution: 5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2 + /term-size/0.1.1: + dependencies: + execa: 0.4.0 + resolution: 87360b96396cab5760963714cda0d0cbeecad9ca + /text-table/0.2.0: 7f5ee823ae805207c00af2df4a84ec3fcfa570b4 + /the-argv/1.0.0: 0084705005730dd84db755253c931ae398db9522 + /through/2.3.8: 0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5 + /through2-concurrent/1.1.1: + dependencies: + through2: 2.0.3 + resolution: 11cb4ea4c9e31bca6e4c1e6dba48d1c728c3524b + /through2-filter/2.0.0: + dependencies: + through2: 2.0.3 + xtend: 4.0.1 + resolution: 60bc55a0dacb76085db1f9dae99ab43f83d622ec + /through2/0.6.5: + dependencies: + readable-stream: 1.0.34 + xtend: 4.0.1 + resolution: 41ab9c67b29d57209071410e1d7a7a968cd3ad48 + /through2/2.0.3: + dependencies: + readable-stream: 2.2.10 + xtend: 4.0.1 + resolution: 0004569b37c7c74ba39c43f3ced78d1ad94140be + /tildify/1.2.0: + dependencies: + os-homedir: 1.0.2 + resolution: dcec03f55dca9b7aa3e5b04f21817eb56e63588a + /time-require/0.1.2: + dependencies: + chalk: 0.4.0 + date-time: 0.1.1 + pretty-ms: 0.2.2 + text-table: 0.2.0 + resolution: f9e12cb370fc2605e11404582ba54ef5ca2b2d98 + /time-stamp/1.1.0: 764a5a11af50561921b133f3b44e618687e0f5c3 + /timed-out/3.1.3: 95860bfcc5c76c277f8f8326fd0f5b2e20eba217 + /timed-out/4.0.1: f32eacac5a175bea25d7fab565ab3ed8741ef56f + /timers-browserify/1.4.2: + dependencies: + process: 0.11.10 + resolution: c9c58b575be8407375cb5e2462dacee74359f41d + /to-absolute-glob/0.1.1: + dependencies: + extend-shallow: 2.0.1 + resolution: 1cdfa472a9ef50c239ee66999b662ca0eb39937f + /to-arraybuffer/1.0.1: 7d229b1fcc637e466ca081180836a7aabff83f43 + /to-fast-properties/1.0.3: b83571fa4d8c25b82e231b06e3a3055de4ca1a47 + /tough-cookie/2.3.2: + dependencies: + punycode: 1.4.1 + resolution: f081f76e4c85720e6c37a5faced737150d84072a + /trim-newlines/1.0.0: 5887966bb582a4503a41eb524f7d35011815a613 + /trim-repeated/1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + resolution: e3646a2ea4e891312bf7eace6cfb05380bc01c21 + /trim-right/1.0.1: cb2e1203067e0c8de1f614094b9fe45704ea6003 + /tryit/1.0.3: 393be730a9446fd1ead6da59a014308f36c289cb + /tty-browserify/0.0.0: a157ba402da24e9bf957f9aa69d524eed42901a6 + /tunnel-agent/0.4.3: 6373db76909fe570e08d73583365ed828a74eeeb + /tunnel-agent/0.6.0: + dependencies: + safe-buffer: 5.1.0 + resolution: 27a5dea06b36b04a0a9966774b290868f0fc40fd + /tweetnacl/0.14.5: 5ae68177f192d4456269d108afa93ff8743f4f64 + /type-check/0.3.2: + dependencies: + prelude-ls: 1.1.2 + resolution: 5884cab512cf1d355e3fb784f30804b2b520db72 + /type-detect/0.1.1: 0ba5ec2a885640e470ea4e8505971900dac58822 + /type-detect/1.0.0: 762217cc06db258ec48908a1298e8b95121e8ea2 + /type-is/1.6.15: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.15 + resolution: cab10fb4909e441c82842eafe1ad646c81804410 + /typedarray/0.0.6: 867ac74e3864187b1d3d47d996a78ec5c8830777 + /uglify-es/3.0.15: + dependencies: + commander: 2.9.0 + source-map: 0.5.6 + resolution: 4a23d0e9cb5f25f7bb3f1f0bbe0bb364e600d047 + /uglify-js/2.8.27: + dependencies: + source-map: 0.5.6 + uglify-to-browserify: 1.0.2 + yargs: 3.10.0 + resolution: 47787f912b0f242e5b984343be8e35e95f694c9c + /uglify-js/3.0.15: + dependencies: + commander: 2.9.0 + source-map: 0.5.6 + resolution: aacb323a846b234602270dead8a32441a8806f42 + /uglify-to-browserify/1.0.2: 6e0924d6bda6b5afe349e39a6d632850a0f882b7 + /uglifyify/3.0.4: + dependencies: + convert-source-map: 1.1.3 + extend: 1.3.0 + minimatch: 3.0.4 + through: 2.3.8 + uglify-js: 2.8.27 + resolution: 487e080a5a7798880e68e90def9b06681fb13bd2 + /uid2/0.0.3: 483126e11774df2f71b8b639dcd799c376162b82 + /umd/3.0.1: 8ae556e11011f63c2596708a8837259f01b3d60e + /unc-path-regex/0.1.2: e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa + /uniq/1.0.1: b31c5ae8254844a3a8281541ce2b04b865a734ff + /uniqid/4.1.1: + dependencies: + macaddress: 0.2.8 + resolution: 89220ddf6b751ae52b5f72484863528596bb84c1 + /uniqs/2.0.0: ffede4b36b25290696e6e165d4a59edb998e6b02 + /unique-stream/1.0.0: d59a4a75427447d9aa6c91e70263f8d26a4b104b + /unique-stream/2.2.1: + dependencies: + json-stable-stringify: 1.0.1 + through2-filter: 2.0.0 + resolution: 5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369 + /unique-string/1.0.0: + dependencies: + crypto-random-string: 1.0.0 + resolution: 9e1057cca851abb93398f8b33ae187b99caec11a + /unique-temp-dir/1.0.0: + dependencies: + mkdirp: 0.5.1 + os-tmpdir: 1.0.2 + uid2: 0.0.3 + resolution: 6dce95b2681ca003eebfb304a415f9cbabcc5385 + /unpipe/1.0.0: b2bf4ee8514aae6165b4817829d21b2ef49904ec + /unreachable-branch-transform/0.3.0: + dependencies: + esmangle-evaluator: 1.0.1 + recast: 0.10.43 + through2: 0.6.5 + resolution: d99cc4c6e746d264928845b611db54b0f3474caa + /unzip-response/1.0.2: b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe + /unzip-response/2.0.1: d2f0f737d16b0615e72a6935ed04214572d56f97 + /update-notifier/1.0.3: + dependencies: + boxen: 0.6.0 + chalk: 1.1.3 + configstore: 2.1.0 + is-npm: 1.0.0 + latest-version: 2.0.0 + lazy-req: 1.1.0 + semver-diff: 2.1.0 + xdg-basedir: 2.0.0 + resolution: 8f92c515482bd6831b7c93013e70f87552c7cf5a + /update-notifier/2.1.0: + dependencies: + boxen: 1.1.0 + chalk: 1.1.3 + configstore: 3.1.0 + is-npm: 1.0.0 + latest-version: 3.1.0 + lazy-req: 2.0.0 + semver-diff: 2.1.0 + xdg-basedir: 3.0.0 + resolution: ec0c1e53536b76647a24b77cb83966d9315123d9 + /upper-case/1.1.3: f6b4501c2ec4cdd26ba78be7222961de77621598 + /urijs/1.18.10: b94463eaba59a1a796036a467bb633c667f221ab + /urix/0.1.0: da937f7a62e21fec1fd18d49b35c2935067a6c72 + /url-parse-lax/1.0.0: + dependencies: + prepend-http: 1.0.4 + resolution: 7af8f303645e9bd79a272e7a14ac68bc0609da73 + /url-regex/3.2.0: + dependencies: + ip-regex: 1.0.3 + resolution: dbad1e0c9e29e105dd0b1f09f6862f7fdb482724 + /url/0.11.0: + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + resolution: 3838e97cfc60521eb73c525a8e55bfdd9e2e28f1 + /user-home/1.1.1: 2b5be23a32b63a7c9deb8d0f28d485724a3df190 + /user-home/2.0.0: + dependencies: + os-homedir: 1.0.2 + resolution: 9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f + /util-deprecate/1.0.2: 450d4dc9fa70de732762fbd2d4a28981419a0ccf + /util/0.10.3: + dependencies: + inherits: 2.0.1 + resolution: 7afb1afe50805246489e3db7fe0ed379336ac0f9 + /uuid/2.0.3: 67e2e863797215530dff318e5bf9dcebfd47b21a + /uuid/3.0.1: 6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1 + /v8flags/2.1.1: + dependencies: + user-home: 1.1.1 + resolution: aab1a1fa30d45f88dd321148875ac02c0b55e5b4 + /vali-date/1.0.0: 1b904a59609fb328ef078138420934f6b86709a6 + /validate-npm-package-license/3.0.1: + dependencies: + spdx-correct: 1.0.2 + spdx-expression-parse: 1.0.4 + resolution: 2804babe712ad3379459acfbe24746ab2c303fbc + /vendors/1.0.1: 37ad73c8ee417fb3d580e785312307d274847f22 + /verror/1.3.6: + dependencies: + extsprintf: 1.0.2 + resolution: cff5df12946d297d2baaefaa2689e25be01c005c + /vinyl-assign/1.2.1: + dependencies: + object-assign: 4.1.1 + readable-stream: 2.2.10 + resolution: 4d198891b5515911d771a8cd9c5480a46a074a45 + /vinyl-buffer/1.0.0: + dependencies: + bl: 0.9.5 + through2: 0.6.5 + resolution: ca067ea08431d507722b1de5083f602616ebc234 + /vinyl-fs/0.3.14: + dependencies: + defaults: 1.0.3 + glob-stream: 3.1.18 + glob-watcher: 0.0.6 + graceful-fs: 3.0.11 + mkdirp: 0.5.1 + strip-bom: 1.0.0 + through2: 0.6.5 + vinyl: 0.4.6 + resolution: 9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6 + /vinyl-fs/2.4.4: + dependencies: + duplexify: 3.5.0 + glob-stream: 5.3.5 + graceful-fs: 4.1.11 + gulp-sourcemaps: 1.6.0 + is-valid-glob: 0.3.0 + lazystream: 1.0.0 + lodash.isequal: 4.5.0 + merge-stream: 1.0.1 + mkdirp: 0.5.1 + object-assign: 4.1.1 + readable-stream: 2.2.10 + strip-bom: 2.0.0 + strip-bom-stream: 1.0.0 + through2: 2.0.3 + through2-filter: 2.0.0 + vali-date: 1.0.0 + vinyl: 1.2.0 + resolution: be6ff3270cb55dfd7d3063640de81f25d7532239 + /vinyl-source-stream/1.1.0: + dependencies: + through2: 0.6.5 + vinyl: 0.4.6 + resolution: 44cbe5108205279deb0c5653c094a2887938b1ab + /vinyl-sourcemaps-apply/0.2.1: + dependencies: + source-map: 0.5.6 + resolution: ab6549d61d172c2b1b87be5c508d239c8ef87705 + /vinyl/0.4.6: + dependencies: + clone: 0.2.0 + clone-stats: 0.0.1 + resolution: 2f356c87a550a255461f36bbeb2a5ba8bf784847 + /vinyl/0.5.3: + dependencies: + clone: 1.0.2 + clone-stats: 0.0.1 + replace-ext: 0.0.1 + resolution: b0455b38fc5e0cf30d4325132e461970c2091cde + /vinyl/1.2.0: + dependencies: + clone: 1.0.2 + clone-stats: 0.0.1 + replace-ext: 0.0.1 + resolution: 5c88036cf565e5df05558bfc911f8656df218884 + /vm-browserify/0.0.4: + dependencies: + indexof: 0.0.1 + resolution: 5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73 + /ware/1.3.0: + dependencies: + wrap-fn: 0.1.5 + resolution: d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4 + /watchify/3.9.0: + dependencies: + anymatch: 1.3.0 + browserify: 14.4.0 + chokidar: 1.7.0 + defined: 1.0.0 + outpipe: 1.1.1 + through2: 2.0.3 + xtend: 4.0.1 + resolution: f075fd2e8a86acde84cedba6e5c2a0bedd523d9e + /websocket-driver/0.6.5: + dependencies: + websocket-extensions: 0.1.1 + resolution: 5cb2556ceb85f4373c6d8238aa691c8454e13a36 + /websocket-extensions/0.1.1: 76899499c184b6ef754377c2dbb0cd6cb55d29e7 + /whet.extend/0.9.9: f877d5bf648c97e5aa542fadc16d6a259b9c11a1 + /which-module/1.0.0: bba63ca861948994ff307736089e3b96026c2a4f + /which/1.2.14: + dependencies: + isexe: 2.0.0 + resolution: 9a87c4378f03e827cecaf1acdf56c736c01c14e5 + /wide-align/1.1.2: + dependencies: + string-width: 1.0.2 + resolution: 571e0f1b0604636ebc0dfc21b0339bbe31341710 + /widest-line/1.0.0: + dependencies: + string-width: 1.0.2 + resolution: 0c09c85c2a94683d0d7eaf8ee097d564bf0e105c + /window-size/0.1.0: 5438cd2ea93b202efa3a19fe8887aee7c94f9c9d + /wordwrap/0.0.2: b79669bb42ecb409f83d583cad52ca17eaa1643f + /wordwrap/1.0.0: 27584810891456a4171c8d0226441ade90cbcaeb + /wrap-ansi/2.1.0: + dependencies: + string-width: 1.0.2 + strip-ansi: 3.0.1 + resolution: d8fc3d284dd05794fe84973caecdd1cf824fdd85 + /wrap-fn/0.1.5: + dependencies: + co: 3.1.0 + resolution: f21b6e41016ff4a7e31720dbc63a09016bdf9845 + /wrappy/1.0.2: b5243d8f3ec1aa35f1364605bc0d1036e30ab69f + /write-file-atomic/1.3.4: + dependencies: + graceful-fs: 4.1.11 + imurmurhash: 0.1.4 + slide: 1.1.6 + resolution: f807a4f0b1d9e913ae7a48112e6cc3af1991b45f + /write-file-atomic/2.1.0: + dependencies: + graceful-fs: 4.1.11 + imurmurhash: 0.1.4 + slide: 1.1.6 + resolution: 1769f4b551eedce419f0505deae2e26763542d37 + /write-json-file/2.2.0: + dependencies: + detect-indent: 5.0.0 + graceful-fs: 4.1.11 + make-dir: 1.0.0 + pify: 2.3.0 + sort-keys: 1.1.2 + write-file-atomic: 2.1.0 + resolution: 51862506bbb3b619eefab7859f1fd6c6d0530876 + /write-pkg/2.1.0: + dependencies: + sort-keys: 1.1.2 + write-json-file: 2.2.0 + resolution: 353aa44c39c48c21440f5c08ce6abd46141c9c08 + /write/0.2.1: + dependencies: + mkdirp: 0.5.1 + resolution: 5fc03828e264cea3fe91455476f7a3c566cb0757 + /xdg-basedir/2.0.0: + dependencies: + os-homedir: 1.0.2 + resolution: edbc903cc385fc04523d966a335504b5504d1bd2 + /xdg-basedir/3.0.0: 496b2cc109eca8dbacfe2dc72b603c17c5870ad4 + /xml-char-classes/1.0.0: 64657848a20ffc5df583a42ad8a277b4512bbc4d + /xo-init/0.5.0: + dependencies: + arrify: 1.0.1 + execa: 0.5.1 + minimist: 1.2.0 + path-exists: 3.0.0 + read-pkg-up: 2.0.0 + the-argv: 1.0.0 + write-pkg: 2.1.0 + resolution: 8e28dec79676cc5e042fde5fd8f710e2646b0e36 + /xo/0.18.2: + dependencies: + arrify: 1.0.1 + debug: 2.6.8 + deep-assign: 1.0.0 + eslint: 3.19.0 + eslint-config-xo: 0.18.2 + eslint-formatter-pretty: 1.1.0 + eslint-plugin-ava: 4.2.0 + eslint-plugin-import: 2.3.0 + eslint-plugin-no-use-extend-native: 0.3.12 + eslint-plugin-promise: 3.5.0 + eslint-plugin-unicorn: 2.1.1 + get-stdin: 5.0.1 + globby: 6.1.0 + has-flag: 2.0.0 + ignore: 3.3.3 + lodash.isequal: 4.5.0 + meow: 3.7.0 + multimatch: 2.1.0 + path-exists: 3.0.0 + pkg-conf: 2.0.0 + resolve-cwd: 1.0.0 + resolve-from: 2.0.0 + slash: 1.0.0 + update-notifier: 2.1.0 + xo-init: 0.5.0 + resolution: 92a42eb02a4fb149dfea5518021914f5aac84ff0 + /xtend/4.0.1: a5c6d532be656e23db820efb943a1f04998d63af + /y18n/3.2.1: 6d15fba884c08679c0d77e88e7759e811e07fa41 + /yallist/2.1.2: 1c11f9218f076089a47dd512f93c6699a6a81d52 + /yargs-parser/5.0.0: + dependencies: + camelcase: 3.0.0 + resolution: 275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a + /yargs/3.10.0: + dependencies: + camelcase: 1.2.1 + cliui: 2.1.0 + decamelize: 1.2.0 + window-size: 0.1.0 + resolution: f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1 + /yargs/7.1.0: + dependencies: + 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 + resolution: 6ba318eb16961727f5d284f8ea003e8d6154d0c8 + /yauzl/2.8.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.0.1 + resolution: 79450aff22b2a9c5a41ef54e02db907ccfbf9ee2 + /zopflipng-bin/4.0.0: + dependencies: + bin-build: 2.2.0 + bin-wrapper: 3.0.2 + logalot: 2.1.0 + resolution: e3cd3d1264605f38f405a770c191e89520bfa22e +registry: 'https://registry.npmjs.org/' +version: 2 diff --git a/src/js/index.js b/src/js/index.js index c4e5c8e..88af32b 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -2,10 +2,31 @@ // DEPENDENCIES // ============================================================ const localforage = require('localforage'); + const probs = require('pjs-problems'); + const dedent = require('dedent'); + const assert = require('chai').assert; + + // PROBLEM TEMPLATE NICE-IFICATION + // ============================================================ + + function dedentStrings(problems) { + return problems.map(prob => { + prob.given = dedent(prob.given) + prob.answer = dedent(prob.answer) + return prob + }); + } + // PROBLEMS // ============================================================ - const problems = require('../problems/arrays.js'); + + let problems = []; + Object.keys(probs).forEach(subject => { + problems.push(...probs[subject]); + }); + problems = dedentStrings(problems); + // CONFIG // ============================================================ @@ -259,6 +280,7 @@ evalConsoleEl.innerHTML = inner; } + // VERIFICATION LOGIC // ============================================================ @@ -292,7 +314,7 @@ let testOutcome = false; try { if (output) { - testOutcome = test.test(output); + testOutcome = eval(test.test); } printAssertError(null); } catch (err) { diff --git a/src/service-worker.js b/src/service-worker.js index 01b3385..b3f5aec 100644 --- a/src/service-worker.js +++ b/src/service-worker.js @@ -37,7 +37,7 @@ /* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren, quotes, comma-spacing */ 'use strict'; -var precacheConfig = [["/dist/css/style.css","ba4d66c91d1ed66848154a34ab4948cf"],["/dist/img/back.svg","898ada2a32ec64bd5b6959c22e8f231d"],["/dist/img/monitor.svg","348592da5567b5a3c46acfb5dcd341bc"],["/dist/img/next.svg","045593410b9f51390e750b9e1e7fff15"],["/dist/img/reload.svg","a0ab1b765280e4d22e6fb747042f6503"],["/dist/img/shuffle.svg","3a5e3c1bf04eb3493d8a2ffa547aa58f"],["/dist/img/social-banner.png","a70702eeea1dbe4a401b7c23189eb7d3"],["/dist/js/bundle.min.js","5a4878a0d8d1655d9f3edbc1aee091b7"],["/dist/js/loadJS.js","72c55936069f60560a386e46f462c73a"],["/dist/js/sw-registration.js","677217d8e642c1ccff69fc01c96b4431"],["/index.html","c7522a5d3255caca0f12c5282ef0644d"]]; +var precacheConfig = [["/dist/css/style.css","ba4d66c91d1ed66848154a34ab4948cf"],["/dist/img/back.svg","898ada2a32ec64bd5b6959c22e8f231d"],["/dist/img/monitor.svg","348592da5567b5a3c46acfb5dcd341bc"],["/dist/img/next.svg","045593410b9f51390e750b9e1e7fff15"],["/dist/img/reload.svg","a0ab1b765280e4d22e6fb747042f6503"],["/dist/img/shuffle.svg","3a5e3c1bf04eb3493d8a2ffa547aa58f"],["/dist/img/social-banner.png","7c1a8058bb3d00c2b40283c735748cfc"],["/dist/js/bundle.min.js","d6329d2b9a6a07313555b757df5081d3"],["/dist/js/loadJS.js","72c55936069f60560a386e46f462c73a"],["/dist/js/sw-registration.js","677217d8e642c1ccff69fc01c96b4431"],["/index.html","c7522a5d3255caca0f12c5282ef0644d"]]; var cacheName = 'sw-precache-v3--' + (self.registration ? self.registration.scope : '');