From b9e652a69cbde4e0c7b4f4c306ddd850b3641a79 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 11:21:18 -0400 Subject: [PATCH 01/34] :arrow_up: enzyme :heavy_plus_sign: React 1.5 adapter --- package-lock.json | 3205 +++++++++++++++++++++++++++++++++++++-------- package.json | 3 +- 2 files changed, 2697 insertions(+), 511 deletions(-) diff --git a/package-lock.json b/package-lock.json index ee6363dbfd..529260f08a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,8 @@ { "name": "github", - "version": "0.12.0", + "version": "0.13.2", "lockfileVersion": 1, + "requires": true, "dependencies": { "7zip": { "version": "0.0.6", @@ -9,6 +10,12 @@ "integrity": "sha1-nK+xca+CMpSQNTtIFvAzR6oVCjA=", "dev": true }, + "@types/node": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz", + "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==", + "dev": true + }, "acorn": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", @@ -19,6 +26,9 @@ "version": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, + "requires": { + "acorn": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz" + }, "dependencies": { "acorn": { "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", @@ -30,7 +40,13 @@ "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=" + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } }, "ajv-keywords": { "version": "1.5.1", @@ -55,7 +71,10 @@ "argparse": { "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } }, "arr-diff": { "version": "4.0.0", @@ -76,7 +95,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } }, "array-uniq": { "version": "1.0.3", @@ -133,25 +155,41 @@ "atom-babel6-transpiler": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/atom-babel6-transpiler/-/atom-babel6-transpiler-1.1.3.tgz", - "integrity": "sha1-1wKxDpDrzx+R4apcSnm5zqmKm6Y=" + "integrity": "sha1-1wKxDpDrzx+R4apcSnm5zqmKm6Y=", + "requires": { + "babel-core": "6.26.0" + } }, "atom-mocha-test-runner": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/atom-mocha-test-runner/-/atom-mocha-test-runner-1.2.0.tgz", "integrity": "sha1-qPZQm40pqAn8tv9H8FiEthLNxqk=", "dev": true, + "requires": { + "etch": "0.8.0", + "grim": "2.0.2", + "less": "2.7.3", + "mocha": "3.4.2", + "tmp": "0.0.31" + }, "dependencies": { "etch": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/etch/-/etch-0.8.0.tgz", "integrity": "sha1-VPYZV0NG+KPueXP1T7vQG1YnItY=", - "dev": true + "dev": true, + "requires": { + "virtual-dom": "2.1.1" + } }, "grim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/grim/-/grim-2.0.2.tgz", "integrity": "sha512-Qj7hTJRfd87E/gUgfvM0YIH/g2UA2SV6niv6BYXk1o6w4mhgv+QyYM1EjOJQljvzgEj4SqSsRWldXIeKHz3e3Q==", - "dev": true + "dev": true, + "requires": { + "event-kit": "2.4.0" + } } } }, @@ -166,37 +204,96 @@ }, "babel-code-frame": { "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=" + "integrity": "sha512-Dmx3yJCO/UHWgFTKUlBPHUm7h5hCjI5Lfc07gmSv7H4AbUwxS7NHyorp8HN1YEd4xSDCf7P4zqnS63I3aaJTwg==", + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "3.0.2" + } }, "babel-core": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.8", + "json5": "0.5.1", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + }, "dependencies": { "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=" + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "3.0.2" + } }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.1" + } }, "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=" + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } }, "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=" + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=" + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } }, "babylon": { "version": "6.18.0", @@ -219,6 +316,12 @@ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4" + }, "dependencies": { "ansi-regex": { "version": "2.1.1", @@ -236,13 +339,25 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } }, "escape-string-regexp": { "version": "1.0.5", @@ -260,13 +375,19 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "supports-color": { "version": "2.0.0", @@ -280,16 +401,36 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "requires": { + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "jsesc": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz" + }, "dependencies": { "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.0" + } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=" + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "4.17.5", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } }, "regenerator-runtime": { "version": "0.11.0", @@ -307,16 +448,31 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" + }, "dependencies": { "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.1" + } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=" + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "4.17.5", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } }, "regenerator-runtime": { "version": "0.11.1", @@ -329,16 +485,32 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "requires": { + "babel-helper-function-name": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + }, "dependencies": { "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.1" + } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=" + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "4.17.5", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } }, "regenerator-runtime": { "version": "0.11.1", @@ -349,35 +521,72 @@ }, "babel-helper-function-name": { "version": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=" + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "babel-runtime": "6.25.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "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=" + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-optimise-call-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=" + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "requires": { + "babel-runtime": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-remap-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=" + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "requires": { + "babel-helper-function-name": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "babel-runtime": "6.25.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=" + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "6.25.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=" + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "6.25.0", + "babel-template": "6.25.0" + } }, "babel-messages": { "version": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=" + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-chai-assert-async": { "version": "0.1.0", @@ -387,17 +596,28 @@ "babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=" + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-relay": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-relay/-/babel-plugin-relay-1.4.1.tgz", "integrity": "sha1-isVivLH9KzVl0nGqztMr5CyCc1M=", + "requires": { + "babel-runtime": "6.25.0", + "babel-types": "6.25.0", + "graphql": "0.11.7" + }, "dependencies": { "graphql": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", - "integrity": "sha1-5auqnLe3zMuE6fCDa/Q3DSaHUMY=" + "integrity": "sha1-5auqnLe3zMuE6fCDa/Q3DSaHUMY=", + "requires": { + "iterall": "1.1.3" + } } } }, @@ -434,22 +654,44 @@ "babel-plugin-transform-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=" + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-class-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.25.0", + "babel-template": "6.25.0" + }, "dependencies": { "babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=" + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.25.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=" + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-syntax-class-properties": { "version": "6.13.0", @@ -462,6 +704,11 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz", "integrity": "sha1-dBtY9sW86eYCfgiC2cmU8E82aSU=", + "requires": { + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.25.0", + "babel-template": "6.25.0" + }, "dependencies": { "babel-plugin-syntax-decorators": { "version": "6.13.0", @@ -473,42 +720,88 @@ "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=" + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=" + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-es2015-block-scoping": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + }, "dependencies": { "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=" + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "3.0.2" + } }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.1" + } }, "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=" + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" + } }, "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=" + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "2.2.3", + "lodash": "4.17.5" + } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=" + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "4.17.5", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } }, "babylon": { "version": "6.18.0", @@ -518,7 +811,10 @@ "invariant": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", - "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==" + "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "requires": { + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz" + } }, "regenerator-runtime": { "version": "0.11.1", @@ -530,62 +826,130 @@ "babel-plugin-transform-es2015-classes": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=" + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "6.25.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=" + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "requires": { + "babel-runtime": "6.25.0", + "babel-template": "6.25.0" + } }, "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=" + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=" + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-es2015-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=" + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "requires": { + "babel-helper-function-name": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "babel-runtime": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=" + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + }, "dependencies": { "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=" + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "3.0.2" + } }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.0" + } }, "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=" + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" + } }, "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=" + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "lodash": "4.17.5" + } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=" + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "4.17.5", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } }, "babylon": { "version": "6.18.0", @@ -602,69 +966,123 @@ "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=" + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-es2015-parameters": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.25.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + }, "dependencies": { "babel-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=" + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=" + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=" + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "requires": { + "babel-runtime": "6.25.0", + "babel-types": "6.25.0" + } } } }, "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=" + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "requires": { + "babel-runtime": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-es2015-spread": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=" + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=" + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-es3-member-expression-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz", - "integrity": "sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs=" + "integrity": "sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-es3-property-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz", - "integrity": "sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g=" + "integrity": "sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-flow-strip-types": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=" + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-object-rest-spread": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + }, "dependencies": { "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.0" + } }, "regenerator-runtime": { "version": "0.11.0", @@ -676,27 +1094,48 @@ "babel-plugin-transform-react-display-name": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=" + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "requires": { + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-react-jsx": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=" + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "requires": { + "babel-helper-builder-react-jsx": "6.26.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=" + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-polyfill": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.0", + "regenerator-runtime": "0.10.5" + }, "dependencies": { "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.1" + }, "dependencies": { "regenerator-runtime": { "version": "0.11.1", @@ -715,22 +1154,69 @@ "babel-preset-fbjs": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz", - "integrity": "sha1-IvNY5mVAc6z2HkegUqd317zPA68=" + "integrity": "sha1-IvNY5mVAc6z2HkegUqd317zPA68=", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-plugin-syntax-flow": "6.18.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-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-commonjs": "6.26.0", + "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-template-literals": "6.22.0", + "babel-plugin-transform-es3-member-expression-literals": "6.22.0", + "babel-plugin-transform-es3-property-literals": "6.22.0", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.26.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1" + } }, "babel-preset-react": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" + }, "dependencies": { "babel-helper-builder-react-jsx": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "esutils": "2.0.2" + }, "dependencies": { "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.1" + } } } }, @@ -747,37 +1233,67 @@ "babel-plugin-transform-flow-strip-types": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=" + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-react-jsx": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=" + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "requires": { + "babel-helper-builder-react-jsx": "6.26.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-react-jsx-self": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=" + "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.25.0" + } }, "babel-plugin-transform-react-jsx-source": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=" + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.25.0" + } }, "babel-preset-flow": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=" + "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0" + } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "1.0.3" + }, "dependencies": { "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.1" + } } } }, @@ -807,11 +1323,24 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.0", + "home-or-tmp": "2.0.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + }, "dependencies": { "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.1" + } }, "regenerator-runtime": { "version": "0.11.1", @@ -823,22 +1352,50 @@ "babel-runtime": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", - "integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=" + "integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz" + } }, "babel-template": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", - "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=" + "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "requires": { + "babel-runtime": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "lodash": "4.17.5" + } }, "babel-traverse": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", - "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=" + "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "lodash": "4.17.5" + } }, "babel-types": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", - "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=" + "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", + "requires": { + "babel-runtime": "6.25.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "4.17.5", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } }, "babylon": { "version": "6.17.4", @@ -854,29 +1411,57 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } } } }, "bash-glob": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bash-glob/-/bash-glob-1.0.2.tgz", - "integrity": "sha1-laxWMf3XqPxWnyZxZ6hOuDGXmhs=" + "integrity": "sha1-laxWMf3XqPxWnyZxZ6hOuDGXmhs=", + "requires": { + "async-each": "1.0.1", + "bash-path": "1.0.3", + "component-emitter": "1.2.1", + "cross-spawn": "5.1.0", + "extend-shallow": "2.0.1", + "is-extglob": "2.1.1", + "is-glob": "4.0.0" + } }, "bash-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/bash-path/-/bash-path-1.0.3.tgz", - "integrity": "sha1-28nvvfGLHBFBPctZuWDmqlbIQlg=" + "integrity": "sha1-28nvvfGLHBFBPctZuWDmqlbIQlg=", + "requires": { + "arr-union": "3.1.0", + "is-windows": "1.0.2" + } }, "bcrypt-pbkdf": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "boolbase": { "version": "1.0.0", @@ -887,22 +1472,46 @@ "boom": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=" + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.2.1" + } }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=" + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } }, "braces": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", "integrity": "sha1-cIbJE7TloI2+N6wO5qJQDEumkbs=", + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } } } }, @@ -920,7 +1529,10 @@ "bser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=" + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "requires": { + "node-int64": "0.4.0" + } }, "buffer-from": { "version": "1.0.0", @@ -935,7 +1547,18 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=" + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + } }, "call-me-maybe": { "version": "1.0.1", @@ -946,7 +1569,10 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true + "dev": true, + "requires": { + "callsites": "0.2.0" + } }, "callsites": { "version": "0.2.0", @@ -975,6 +1601,11 @@ "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", "dev": true, + "requires": { + "assertion-error": "1.1.0", + "deep-eql": "0.1.3", + "type-detect": "1.0.0" + }, "dependencies": { "assertion-error": { "version": "1.1.0", @@ -987,6 +1618,9 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", "dev": true, + "requires": { + "type-detect": "0.1.1" + }, "dependencies": { "type-detect": { "version": "0.1.1", @@ -1012,18 +1646,36 @@ }, "chalk": { "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } }, "checksum": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/checksum/-/checksum-0.1.1.tgz", - "integrity": "sha1-3GUn1MkL6FYNvR7Uzs8yl9Uo6ek=" + "integrity": "sha1-3GUn1MkL6FYNvR7Uzs8yl9Uo6ek=", + "requires": { + "optimist": "0.3.7" + } }, "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dev": true + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash": "4.17.5", + "parse5": "3.0.3" + } }, "chownr": { "version": "1.0.1", @@ -1033,28 +1685,43 @@ "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=", "dev": true }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -1062,18 +1729,29 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=" + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } }, "kind-of": { "version": "5.1.0", @@ -1091,7 +1769,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } }, "cli-width": { "version": "2.2.0", @@ -1103,11 +1784,21 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "wrap-ansi": "2.1.0" + }, "dependencies": { "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } } } }, @@ -1124,17 +1815,33 @@ "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", + "dev": true }, "combined-stream": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=" + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + } }, "compare-sets": { "version": "1.0.1", @@ -1154,7 +1861,13 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true + "dev": true, + "requires": { + "buffer-from": "1.0.0", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } }, "contains-path": { "version": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", @@ -1188,17 +1901,30 @@ "create-react-class": { "version": "15.6.2", "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz", - "integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=" + "integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=", + "requires": { + "fbjs": "0.8.14", + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } }, "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=", + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + }, "dependencies": { "lru-cache": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==" + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "requires": { + "yallist": "3.0.2" + } } } }, @@ -1212,11 +1938,17 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.2.0" + }, "dependencies": { "boom": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=" + "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", + "requires": { + "hoek": "4.2.1" + } } } }, @@ -1224,7 +1956,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } }, "css-what": { "version": "2.1.0", @@ -1236,12 +1974,18 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true + "dev": true, + "requires": { + "es5-ext": "0.10.41" + } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1253,7 +1997,10 @@ "debug": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } }, "decamelize": { "version": "1.2.0", @@ -1281,18 +2028,34 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=" + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + } }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz" + } }, "delayed-stream": { "version": "1.0.0", @@ -1301,23 +2064,40 @@ }, "detect-indent": { "version": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=" + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + } }, "diff": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=" }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "dev": true + }, "doctrine": { "version": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true + "integrity": "sha512-i5aQLQvEyAhw7XI4mbKxyrVdkqIc4OsCh9Z0XQof9X/ANftd0ZN1M4qz+TSU2VSokVwl23kXDvhnC4F4W+ip/g==", + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, "dependencies": { "domelementtype": { "version": "1.1.3", @@ -1343,7 +2123,10 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } }, "dompurify": { "version": "1.0.3", @@ -1354,28 +2137,52 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } }, "dugite": { "version": "1.60.0", "resolved": "https://registry.npmjs.org/dugite/-/dugite-1.60.0.tgz", - "integrity": "sha512-HP5Qfx867ESOkrrEhXtxi72UQoNWaCSEcahGCmnBM/v+ldgbFu94s9CvG3tDcBtz1HJkvYEtkBd8V8Vb63nfUw==" + "integrity": "sha1-HN50Tm5+m2LbJze+ONGBqO/bvSs=", + "requires": { + "checksum": "0.1.1", + "mkdirp": "0.5.1", + "progress": "2.0.0", + "request": "2.85.0", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "tar": "4.4.0" + } }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "electron-devtools-installer": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.3.tgz", "integrity": "sha1-WLmk7FBzd7xG4JHNQ3FBiODDab4=", - "dev": true + "dev": true, + "requires": { + "7zip": "0.0.6", + "cross-unzip": "0.0.2", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "semver": "5.4.1" + } }, "encoding": { "version": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=" + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "0.4.18" + } }, "entities": { "version": "1.1.1", @@ -1384,53 +2191,111 @@ "dev": true }, "enzyme": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-2.9.1.tgz", - "integrity": "sha1-B9XOaRJBJA+4F78sSxjW5TAkDfY=", - "dev": true + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.3.0.tgz", + "integrity": "sha512-l8csyPyLmtxskTz6pX9W8eDOyH1ckEtDttXk/vlFWCjv00SkjTjtoUrogqp4yEvMyneU9dUJoOLnqFoiHb8IHA==", + "dev": true, + "requires": { + "cheerio": "1.0.0-rc.2", + "function.prototype.name": "1.1.0", + "has": "1.0.1", + "is-boolean-object": "1.0.0", + "is-callable": "1.1.3", + "is-number-object": "1.0.3", + "is-string": "1.0.4", + "is-subset": "0.1.1", + "lodash": "4.17.5", + "object-inspect": "1.5.0", + "object-is": "1.0.1", + "object.assign": "4.1.0", + "object.entries": "1.0.4", + "object.values": "1.0.4", + "raf": "3.4.0", + "rst-selector-parser": "2.2.3" + } + }, + "enzyme-adapter-react-15": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-15/-/enzyme-adapter-react-15-1.0.5.tgz", + "integrity": "sha512-GxQ+ZYbo6YFwwpaLc9LLyAwsx+F1au628/+hwTx3XV2OiuvHGyWgC/r1AAK1HlDRjujzfwwMNZTc/JxkjIuYVg==", + "requires": { + "enzyme-adapter-utils": "1.3.0", + "lodash": "4.17.5", + "object.assign": "4.1.0", + "object.values": "1.0.4", + "prop-types": "15.6.1" + } + }, + "enzyme-adapter-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz", + "integrity": "sha512-vVXSt6uDv230DIv+ebCG66T1Pm36Kv+m74L1TrF4kaE7e1V7Q/LcxO0QRkajk5cA6R3uu9wJf5h13wOTezTbjA==", + "requires": { + "lodash": "4.17.5", + "object.assign": "4.1.0", + "prop-types": "15.6.1" + } }, "errno": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", "dev": true, - "optional": true + "optional": true, + "requires": { + "prr": "0.0.0" + } }, "error": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/error/-/error-4.4.0.tgz", "integrity": "sha1-v2n/JR+0onnBmtzNqmth6Q2b8So=", - "dev": true + "dev": true, + "requires": { + "camelize": "1.0.0", + "string-template": "0.2.1", + "xtend": "4.0.1" + } }, "error-ex": { "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=" + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "requires": { + "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + } }, "es-abstract": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", - "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", - "dev": true, - "dependencies": { - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - } + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" } }, "es-to-primitive": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } }, "es5-ext": { "version": "0.10.41", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + }, "dependencies": { "next-tick": { "version": "1.0.0", @@ -1444,13 +2309,26 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-symbol": "3.1.1" + } }, "es6-map": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } }, "es6-promise": { "version": "4.2.4", @@ -1461,19 +2339,36 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41" + } }, "es6-weak-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } }, "escape-string-regexp": { "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1483,13 +2378,56 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } }, "eslint": { "version": "3.19.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", "dev": true, + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "concat-stream": "1.6.2", + "debug": "2.6.8", + "doctrine": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", + "escope": "3.6.0", + "espree": "3.5.0", + "esquery": "1.0.0", + "estraverse": "4.2.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "file-entry-cache": "2.0.0", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.3", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.17.2", + "is-resolvable": "1.1.0", + "js-yaml": "3.9.1", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "levn": "0.3.0", + "lodash": "4.17.5", + "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.8", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "strip-json-comments": "2.0.1", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + }, "dependencies": { "progress": { "version": "1.1.8", @@ -1515,7 +2453,11 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", "integrity": "sha1-q67IJBd2E7ipWymWOeG2+s9HNEk=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "pkg-dir": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz" + } }, "eslint-plugin-babel": { "version": "4.1.2", @@ -1527,19 +2469,37 @@ "version": "2.34.1", "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.34.1.tgz", "integrity": "sha512-xwXpTW7Xv+wfuQdfPILmFl9HWBdWbDjE1aZWWQ4EgCpQtMzymEkDQfyD1ME0VA8C0HTXV7cufypQRvLi+Hk/og==", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.5" + } }, "eslint-plugin-import": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.6.1.tgz", "integrity": "sha512-aAMb32eHCQaQmgdb1MOG1hfu/rPiNgGur2IF71VJeDfTXdLpPiKALKWlzxMdcxQOZZ2CmYVKabAxCvjACxH1uQ==", "dev": true, + "requires": { + "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "contains-path": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "debug": "2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.1", + "eslint-module-utils": "2.1.1", + "has": "1.0.1", + "lodash.cond": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz" + }, "dependencies": { "debug": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "doctrine": { "version": "1.5.0", @@ -1551,7 +2511,11 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "resolve": "1.4.0" + } }, "ms": { "version": "2.0.0", @@ -1572,6 +2536,12 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz", "integrity": "sha1-gN8yU8TXkBBF7If6ZgooTjK9yik=", "dev": true, + "requires": { + "ignore": "3.3.7", + "minimatch": "3.0.4", + "resolve": "1.4.0", + "semver": "5.3.0" + }, "dependencies": { "ignore": { "version": "3.3.7", @@ -1583,7 +2553,10 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } }, "semver": { "version": "5.3.0", @@ -1609,7 +2582,12 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz", "integrity": "sha1-J3cKzzn1/UnNCvQIPOWBBOs5DUw=", - "dev": true + "dev": true, + "requires": { + "doctrine": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", + "has": "1.0.1", + "jsx-ast-utils": "1.4.1" + } }, "eslint-plugin-standard": { "version": "3.0.1", @@ -1621,7 +2599,11 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", - "dev": true + "dev": true, + "requires": { + "acorn": "5.1.1", + "acorn-jsx": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz" + } }, "esprima": { "version": "4.0.0", @@ -1633,13 +2615,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true + "dev": true, + "requires": { + "estraverse": "4.2.0" + } }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } }, "estraverse": { "version": "4.2.0", @@ -1660,13 +2648,20 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/ev-store/-/ev-store-7.0.0.tgz", "integrity": "sha1-GrDH+CE2UF3XSzHRdwHLK+bSZVg=", - "dev": true + "dev": true, + "requires": { + "individual": "3.0.0" + } }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41" + } }, "event-kit": { "version": "2.4.0", @@ -1676,7 +2671,16 @@ "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=" + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } }, "exit-hook": { "version": "1.1.1", @@ -1688,21 +2692,39 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "2.6.8", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -1710,18 +2732,29 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=" + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } }, "kind-of": { "version": "5.1.0", @@ -1737,17 +2770,33 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } } } }, @@ -1764,7 +2813,13 @@ "fast-glob": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-1.0.1.tgz", - "integrity": "sha1-MPmxEg/Ven8XI2SmRY+9vZgYezw=" + "integrity": "sha1-MPmxEg/Ven8XI2SmRY+9vZgYezw=", + "requires": { + "bash-glob": "1.0.2", + "glob-parent": "3.1.0", + "micromatch": "3.1.9", + "readdir-enhanced": "1.5.2" + } }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -1780,12 +2835,24 @@ "fb-watchman": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=" + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "2.0.0" + } }, "fbjs": { "version": "0.8.14", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.14.tgz", "integrity": "sha1-0dviviVMNakeCfMfnNUKQLKg7Rw=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "promise": "7.3.1", + "setimmediate": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "ua-parser-js": "0.7.14" + }, "dependencies": { "core-js": { "version": "1.2.7", @@ -1798,29 +2865,53 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true + "dev": true, + "requires": { + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } }, "file-entry-cache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } }, "find-up": { "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } }, "flat-cache": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "write": "0.2.1" + } }, "for-in": { "version": "1.0.2", @@ -1830,8 +2921,7 @@ "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "forever-agent": { "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -1840,49 +2930,65 @@ "form-data": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=" + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.16" + } }, "formatio": { "version": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true + "dev": true, + "requires": { + "samsam": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz" + } }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "0.2.2" + } }, "fs-extra": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha1-QU0BEM3QZwVzTQVWUsVBEmDDGr0=" + "integrity": "sha1-QU0BEM3QZwVzTQVWUsVBEmDDGr0=", + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "jsonfile": "4.0.0", + "universalify": "0.1.1" + } }, "fs-minipass": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==" + "integrity": "sha1-BsJ3IYRU7CiN93raVKA7hwKqy50=", + "requires": { + "minipass": "2.2.1" + } }, "fs.realpath": { "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "function-bind": { - "version": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.0.3.tgz", - "integrity": "sha512-5EblxZUdioXi2JiMZ9FUbwYj40eQ9MFHyzFLBSPdlRl3SO8l7SLWuAnQ/at/1Wi4hjJwME/C5WpF2ZfAc8nGNw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", + "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", "dev": true, - "dependencies": { - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - } + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "is-callable": "1.1.3" } }, "generate-function": { @@ -1895,7 +3001,10 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true + "dev": true, + "requires": { + "is-property": "1.0.2" + } }, "get-caller-file": { "version": "1.0.2", @@ -1916,6 +3025,9 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1927,17 +3039,32 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=" + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, "dependencies": { "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "2.1.1" + } } } }, @@ -1950,7 +3077,11 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true + "dev": true, + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + } }, "globals": { "version": "9.18.0", @@ -1961,7 +3092,15 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } }, "graceful-fs": { "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -1976,6 +3115,9 @@ "version": "0.10.3", "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.10.3.tgz", "integrity": "sha1-wxOv1VGOZzNRvuGPtj4qDkh0B6s=", + "requires": { + "iterall": "1.1.1" + }, "dependencies": { "iterall": { "version": "1.1.1", @@ -1997,44 +3139,80 @@ "har-validator": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=" + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } }, "has": { - "version": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true + "requires": { + "function-bind": "1.1.1" + } }, "has-ansi": { "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } }, "has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, "dependencies": { "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } } } }, "hawk": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=" + "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=", + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" + } }, "hock": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/hock/-/hock-1.3.2.tgz", "integrity": "sha1-btPovkK0ZnmBGNEhUKqA6NbvIhk=", "dev": true, + "requires": { + "deep-equal": "0.2.1" + }, "dependencies": { "deep-equal": { "version": "0.2.1", @@ -2057,22 +3235,39 @@ "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=" + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } }, "hosted-git-info": { "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=" + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" }, "htmlparser2": { "version": "3.9.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "2.3.6" + } }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=" + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } }, "iconv-lite": { "version": "0.4.18", @@ -2111,7 +3306,11 @@ }, "inflight": { "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } }, "inherits": { "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -2122,23 +3321,46 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.5", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + }, "dependencies": { "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } } } }, "interpret": { "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", - "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "integrity": "sha512-QZeLkTbMF2lgHs0JhQF8cCiJO8RSgBJ7b5ey6LIzAeiKWBZTD1LpsAXfqlONI3uw8VQS9YkQP647Fy0HRO54bA==", "dev": true }, "invariant": { "version": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=" + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "requires": { + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz" + } }, "invert-kv": { "version": "1.0.0", @@ -2148,12 +3370,21 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=" + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "6.0.2" + } }, "is-arrayish": { "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-boolean-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", + "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", + "dev": true + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -2161,29 +3392,38 @@ }, "is-builtin-module": { "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=" + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + } }, "is-callable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=" + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "6.0.2" + } }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=" + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } }, "is-extendable": { "version": "0.1.1", @@ -2197,42 +3437,70 @@ }, "is-finite": { "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=" + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=" + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "requires": { + "is-extglob": "2.1.1" + } }, "is-my-ip-valid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "integrity": "sha1-ezUbjo7dTTmV1NBmaA5mTZRpaCQ=", "dev": true }, "is-my-json-valid": { "version": "2.17.2", "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true + "integrity": "sha1-ayEDoojpTvPeXPFdKd2F/Et41lw=", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, + "is-number-object": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", + "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", + "dev": true + }, "is-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", @@ -2243,6 +3511,9 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", "integrity": "sha1-dkZiRnH9fqVYzNmieVGC8pWPGyQ=", + "requires": { + "is-number": "4.0.0" + }, "dependencies": { "is-number": { "version": "4.0.0", @@ -2261,18 +3532,27 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } }, "is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=" + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "requires": { + "isobject": "3.0.1" + } }, "is-property": { "version": "1.0.2", @@ -2284,18 +3564,26 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true + "requires": { + "has": "1.0.1" + } }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", "dev": true }, "is-stream": { "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-string": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", + "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", + "dev": true + }, "is-subset": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", @@ -2305,8 +3593,7 @@ "is-symbol": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" }, "is-typedarray": { "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2333,7 +3620,11 @@ }, "isomorphic-fetch": { "version": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=" + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "1.7.1", + "whatwg-fetch": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz" + } }, "isstream": { "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -2349,6 +3640,10 @@ "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, "dependencies": { "commander": { "version": "0.6.1", @@ -2373,7 +3668,11 @@ "version": "3.9.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", - "dev": true + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "4.0.0" + } }, "jsbn": { "version": "0.1.1", @@ -2398,7 +3697,10 @@ "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 + "dev": true, + "requires": { + "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + } }, "json-stringify-safe": { "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -2417,7 +3719,10 @@ "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=" + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + } }, "jsonify": { "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -2434,6 +3739,12 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2451,7 +3762,10 @@ "keytar": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-4.1.0.tgz", - "integrity": "sha512-L3KqiSMtpVitlug4uuI+K5XLne9SAVEFWE8SCQIhQiH0IA/CTbon5v5prVLKK0Ken54o2O8V9HceKagpwJum+Q==" + "integrity": "sha512-L3KqiSMtpVitlug4uuI+K5XLne9SAVEFWE8SCQIhQiH0IA/CTbon5v5prVLKK0Ken54o2O8V9HceKagpwJum+Q==", + "requires": { + "nan": "2.5.1" + } }, "kind-of": { "version": "6.0.2", @@ -2461,25 +3775,45 @@ "lazy-cache": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=" + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "requires": { + "set-getter": "0.1.0" + } }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=" + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "1.0.0" + } }, "less": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", "integrity": "sha1-zBJg9RyQCp7A2R+2mYE54CUHtjs=", "dev": true, + "requires": { + "errno": "0.1.4", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "image-size": "0.5.5", + "mime": "1.4.1", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.81.0", + "source-map": "0.5.7" + }, "dependencies": { "ajv": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, - "optional": true + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + } }, "assert-plus": { "version": "0.2.0", @@ -2499,14 +3833,29 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "combined-stream": { + "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha512-JgSRe4l4UzPwpJuxfcPWEK1SCrL4dxNjp1uqrQLMop3QZUVo+hDU8w9BJKA4JPbulTWI+UzrI2UA3tK12yQ6bg==", + "dev": true, + "optional": true, + "requires": { + "delayed-stream": "1.0.0" + } }, "cryptiles": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.10.1" + } }, "form-data": { "version": "2.1.4", @@ -2514,13 +3863,21 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.16" + }, "dependencies": { "combined-stream": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, - "optional": true + "optional": true, + "requires": { + "delayed-stream": "1.0.0" + } } } }, @@ -2536,14 +3893,24 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "dev": true, - "optional": true + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } }, "hawk": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "hoek": { "version": "2.16.3", @@ -2556,7 +3923,12 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, - "optional": true + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } }, "mime": { "version": "1.4.1", @@ -2585,25 +3957,29 @@ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "dev": true, "optional": true, - "dependencies": { - "combined-stream": { - "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha512-JgSRe4l4UzPwpJuxfcPWEK1SCrL4dxNjp1uqrQLMop3QZUVo+hDU8w9BJKA4JPbulTWI+UzrI2UA3tK12yQ6bg==", - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "tough-cookie": { - "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha512-42UXjmzk88F7URyg9wDV/dlQ7hXtl/SDV6xIMVdDq82cnDGQDyg8mI8xGBPOwpEfbhvrja6cJ8H1wr0xxykBKA==", - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - } + "requires": { + "aws-sign2": "0.6.0", + "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "caseless": "0.12.0", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "2.1.16", + "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" } }, "sntp": { @@ -2611,7 +3987,10 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, - "optional": true + "optional": true, + "requires": { + "hoek": "2.16.3" + } }, "source-map": { "version": "0.5.7", @@ -2619,6 +3998,15 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "optional": true + }, + "tough-cookie": { + "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha512-42UXjmzk88F7URyg9wDV/dlQ7hXtl/SDV6xIMVdDq82cnDGQDyg8mI8xGBPOwpEfbhvrja6cJ8H1wr0xxykBKA==", + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } } } }, @@ -2626,11 +4014,30 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } }, "load-json-file": { "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=" + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "2.0.0", + "path-exists": "2.1.0" + } }, "lodash": { "version": "4.17.5", @@ -2640,7 +4047,11 @@ "lodash._baseassign": { "version": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz" + } }, "lodash._basecopy": { "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", @@ -2662,18 +4073,6 @@ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", "dev": true }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", - "dev": true - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", - "dev": true - }, "lodash.cond": { "version": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", @@ -2682,30 +4081,17 @@ "lodash.create": { "version": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", - "dev": true + "dev": true, + "requires": { + "lodash._baseassign": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "lodash._basecreate": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "lodash._isiterateecall": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz" + } }, - "lodash.flatten": { + "lodash.flattendeep": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "lodash.isarguments": { @@ -2726,49 +4112,18 @@ "lodash.keys": { "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "lodash.isarguments": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "lodash.isarray": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz" + } }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" }, - "lodash.merge": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", - "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=", - "dev": true - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "dev": true - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", - "dev": true - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", - "dev": true - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", - "dev": true - }, "lolex": { "version": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", @@ -2776,7 +4131,10 @@ }, "loose-envify": { "version": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=" + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } }, "lru-cache": { "version": "2.7.3", @@ -2792,27 +4150,55 @@ "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "1.0.1" + } }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=" + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "1.2.0" + } }, "micromatch": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", "integrity": "sha1-FdyTF1rjnlLpMIeEcJbv/HPvz4k=", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + }, "dependencies": { "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=" + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "2.0.4" + } } } }, @@ -2824,7 +4210,10 @@ "mime-types": { "version": "2.1.16", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=" + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "requires": { + "mime-db": "1.29.0" + } }, "mimic-fn": { "version": "1.2.0", @@ -2835,31 +4224,50 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true + "dev": true, + "requires": { + "dom-walk": "0.1.1" + } }, "minimatch": { "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=" + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "1.1.8" + } }, "minipass": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.1.tgz", - "integrity": "sha512-u1aUllxPJUI07cOqzR7reGmQxmCqlH88uIIsf6XZFEWgw7gXKpJdR+5R9Y3KEDmWYkdIz9wXZs3C0jOPxejk/Q==" + "integrity": "sha512-u1aUllxPJUI07cOqzR7reGmQxmCqlH88uIIsf6XZFEWgw7gXKpJdR+5R9Y3KEDmWYkdIz9wXZs3C0jOPxejk/Q==", + "requires": { + "yallist": "3.0.2" + } }, "minizlib": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", - "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==" + "integrity": "sha1-EeE2WM5GvDpwomeqxYNZ0eDCnOs=", + "requires": { + "minipass": "2.2.1" + } }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, "dependencies": { "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=" + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "2.0.4" + } } } }, @@ -2867,6 +4275,9 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -2880,12 +4291,28 @@ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.4.2.tgz", "integrity": "sha1-0O9NMyEm2/GNDWQMmzgt1IvpdZQ=", "dev": true, + "requires": { + "browser-stdout": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "debug": "2.6.0", + "diff": "3.2.0", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "glob": "7.1.1", + "growl": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "json3": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "lodash.create": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, "dependencies": { "debug": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "glob": { "version": "7.1.1", @@ -2920,6 +4347,9 @@ "resolved": "https://registry.npmjs.org/mocha-appveyor-reporter/-/mocha-appveyor-reporter-0.4.0.tgz", "integrity": "sha1-gpOC/8Bla2Z+e+ZQoJSgba69Uk8=", "dev": true, + "requires": { + "request-json": "0.6.3" + }, "dependencies": { "depd": { "version": "1.1.2", @@ -2931,7 +4361,11 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/request-json/-/request-json-0.6.3.tgz", "integrity": "sha512-5TVnMD3LaeK0GRCyFlsNgJf5Fjg8J8j7VEfsoJESSWZlWRgPIf7IojsBLbTHcg2798JrrRkJ6L3k1+wj4sglgw==", - "dev": true + "dev": true, + "requires": { + "depd": "1.1.2", + "request": "2.85.0" + } } } }, @@ -2940,6 +4374,12 @@ "resolved": "https://registry.npmjs.org/mocha-junit-and-console-reporter/-/mocha-junit-and-console-reporter-1.6.0.tgz", "integrity": "sha1-kBmEuev51g9xXvDo4EwG5KsSJFc=", "dev": true, + "requires": { + "debug": "2.6.8", + "mkdirp": "0.5.1", + "mocha": "2.5.3", + "xml": "1.0.1" + }, "dependencies": { "commander": { "version": "2.3.0", @@ -2951,7 +4391,10 @@ "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "diff": { "version": "1.4.0", @@ -2969,25 +4412,48 @@ "version": "3.2.11", "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "0.3.0" + } }, "minimatch": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } }, "mocha": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", "dev": true, + "requires": { + "commander": "2.3.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.2", + "glob": "3.2.11", + "growl": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "jade": "0.26.3", + "mkdirp": "0.5.1", + "supports-color": "1.2.0", + "to-iso-string": "0.0.2" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -3047,16 +4513,37 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", "integrity": "sha1-h59xUMstq3pHElkGbBBO7m4Pp8I=", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + }, "dependencies": { "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=" + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "2.0.4" + } } } }, @@ -3071,6 +4558,18 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "nearley": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.13.0.tgz", + "integrity": "sha512-ioYYogSaZhFlCpRizQgY3UT3G1qFXmHGY/5ozoFE3dMfiCRAeJfh+IPE3/eh9gCZvqLhPCWb4bLt7Bqzo+1mLQ==", + "dev": true, + "requires": { + "nomnom": "1.6.2", + "railroad-diagrams": "1.0.0", + "randexp": "0.4.6", + "semver": "5.4.1" + } + }, "next-tick": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", @@ -3080,27 +4579,53 @@ "node-fetch": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz", - "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==" + "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==", + "requires": { + "encoding": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + } }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, + "nomnom": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", + "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", + "dev": true, + "requires": { + "colors": "0.5.1", + "underscore": "1.4.4" + } + }, "normalize-package-data": { "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=" + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "requires": { + "hosted-git-info": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "is-builtin-module": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "semver": "5.4.1", + "validate-npm-package-license": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz" + } }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "2.0.1" + } }, "nth-check": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true + "dev": true, + "requires": { + "boolbase": "1.0.0" + } }, "number-is-nan": { "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -3118,26 +4643,45 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + } }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + } }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, "dependencies": { "kind-of": { "version": "5.1.0", @@ -3149,10 +4693,19 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, + "object-inspect": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.5.0.tgz", + "integrity": "sha512-UmOFbHbwvv+XHj7BerrhVq+knjceBdkvU5AriwLMvhv2qi+e7DJzxfBeFpILEjVzCp+xA+W/pIf06RGPWlZNfw==", + "dev": true + }, "object-is": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", @@ -3162,26 +4715,25 @@ "object-keys": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "3.0.1" + } }, "object.assign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", - "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", - "dev": true, - "dependencies": { - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - } + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.11" } }, "object.entries": { @@ -3189,37 +4741,38 @@ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", "dev": true, - "dependencies": { - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - } + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0", + "function-bind": "1.1.1", + "has": "1.0.1" } }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "3.0.1" + } }, "object.values": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", - "dev": true, - "dependencies": { - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - } + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0", + "function-bind": "1.1.1", + "has": "1.0.1" } }, "once": { "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } }, "onetime": { "version": "1.1.0", @@ -3230,13 +4783,24 @@ "optimist": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=" + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "0.0.3" + } }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, "dependencies": { "wordwrap": { "version": "1.0.0", @@ -3253,7 +4817,12 @@ "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=" + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } }, "os-tmpdir": { "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -3264,9 +4833,42 @@ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "1.2.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, "parse-json": { "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=" + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "9.6.4" + } }, "pascalcase": { "version": "0.1.1", @@ -3282,7 +4884,9 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true + "requires": { + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } }, "path-is-absolute": { "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3308,6 +4912,9 @@ "version": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", "dev": true, + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, "dependencies": { "isarray": { "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -3318,7 +4925,10 @@ }, "path-type": { "version": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=" + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + } }, "performance-now": { "version": "2.1.0", @@ -3331,18 +4941,22 @@ }, "pinkie": { "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true + "requires": { + "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } }, "pkg-dir": { "version": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true + "dev": true, + "requires": { + "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" + } }, "pluralize": { "version": "1.2.1", @@ -3374,8 +4988,7 @@ }, "process-nextick-args": { "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==" }, "progress": { "version": "2.0.0", @@ -3385,12 +4998,20 @@ "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=" + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "requires": { + "asap": "2.0.6" + } }, "prop-types": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", "integrity": "sha1-NmREU1ZCVd3aORGR+zoSXL32VMo=", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + }, "dependencies": { "core-js": { "version": "1.2.7", @@ -3400,17 +5021,33 @@ "fbjs": { "version": "0.8.16", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=" + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.14" + } }, "isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=" + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "1.7.1", + "whatwg-fetch": "2.0.3" + } }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=" + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } }, "object-assign": { "version": "4.1.1", @@ -3446,20 +5083,61 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=" }, + "raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", + "dev": true, + "requires": { + "performance-now": "2.1.0" + } + }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", + "dev": true + }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, + "requires": { + "discontinuous-range": "1.0.0", + "ret": "0.1.15" + } + }, "react": { "version": "15.6.2", "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz", - "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=" + "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=", + "requires": { + "create-react-class": "15.6.2", + "fbjs": "0.8.14", + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "prop-types": "15.6.1" + } }, "react-dom": { "version": "15.6.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz", - "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=" + "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", + "requires": { + "fbjs": "0.8.14", + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "prop-types": "15.6.1" + } }, "react-input-autosize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.1.tgz", - "integrity": "sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA==", + "integrity": "sha1-7EKPoVsVkplPtfmqFbsetrr0IPg=", + "requires": { + "prop-types": "15.6.1" + }, "dependencies": { "core-js": { "version": "1.2.7", @@ -3469,24 +5147,49 @@ "fbjs": { "version": "0.8.16", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=" + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "promise": "7.3.1", + "setimmediate": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "ua-parser-js": "0.7.14" + } }, "prop-types": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==" + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } } } }, "react-relay": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/react-relay/-/react-relay-1.4.1.tgz", - "integrity": "sha1-Yfe1gC1wRG4VRJD50PzuyRUOvaU=" + "integrity": "sha1-Yfe1gC1wRG4VRJD50PzuyRUOvaU=", + "requires": { + "babel-runtime": "6.25.0", + "fbjs": "0.8.14", + "prop-types": "15.6.1", + "relay-runtime": "1.4.1" + } }, "react-select": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/react-select/-/react-select-1.2.1.tgz", - "integrity": "sha512-vaCgT2bEl+uTyE/uKOEgzE5Dc/wLtzhnBvoHCeuLoJWc4WuadN6WQDhoL42DW+TziniZK2Gaqe/wUXydI3NSaQ==", + "integrity": "sha1-ov5YpWnrFNyqZUOBYmC5flOBINE=", + "requires": { + "classnames": "2.2.5", + "prop-types": "15.6.1", + "react-input-autosize": "2.2.1" + }, "dependencies": { "core-js": { "version": "1.2.7", @@ -3496,12 +5199,26 @@ "fbjs": { "version": "0.8.16", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=" + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "promise": "7.3.1", + "setimmediate": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "ua-parser-js": "0.7.14" + } }, "prop-types": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==" + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } } } }, @@ -3509,43 +5226,80 @@ "version": "15.6.2", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-15.6.2.tgz", "integrity": "sha1-0DM0NPwsQ4CSaWyncNpe1IA376g=", - "dev": true + "dev": true, + "requires": { + "fbjs": "0.8.14", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } }, "read-pkg": { "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=" + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "path-type": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz" + } }, "read-pkg-up": { "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz" + }, "dependencies": { "find-up": { "version": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=" + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "requires": { + "locate-path": "2.0.0" + } } } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } }, "readdir-enhanced": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/readdir-enhanced/-/readdir-enhanced-1.5.2.tgz", - "integrity": "sha1-YUYwSGkKxqRVt1ti+nioj43IXlM=" + "integrity": "sha1-YUYwSGkKxqRVt1ti+nioj43IXlM=", + "requires": { + "call-me-maybe": "1.0.1", + "es6-promise": "4.2.4", + "glob-to-regexp": "0.3.0" + } }, "readline2": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + } }, "rechoir": { "version": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true + "dev": true, + "requires": { + "resolve": "1.4.0" + } }, "regenerator-runtime": { "version": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", @@ -3555,16 +5309,27 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + }, "dependencies": { "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=" + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "2.0.4" + } } } }, @@ -3572,26 +5337,70 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/relay-compiler/-/relay-compiler-1.4.1.tgz", "integrity": "sha1-EOg/D13o2z0ACFGkwOQ1590d65U=", + "requires": { + "babel-generator": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-preset-fbjs": "2.1.4", + "babel-runtime": "6.25.0", + "babel-traverse": "6.26.0", + "babel-types": "6.25.0", + "babylon": "6.18.0", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "fast-glob": "1.0.1", + "fb-watchman": "2.0.0", + "fbjs": "0.8.14", + "graphql": "0.11.7", + "immutable": "3.7.6", + "relay-runtime": "1.4.1", + "signedsource": "1.0.0", + "yargs": "9.0.1" + }, "dependencies": { "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=" + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "3.0.2" + } }, "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "2.2.3", + "lodash": "4.17.5" + }, "dependencies": { "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=" + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.0", + "regenerator-runtime": "0.11.1" + } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=" + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "4.17.5", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } } } }, @@ -3603,12 +5412,18 @@ "graphql": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", - "integrity": "sha1-5auqnLe3zMuE6fCDa/Q3DSaHUMY=" + "integrity": "sha1-5auqnLe3zMuE6fCDa/Q3DSaHUMY=", + "requires": { + "iterall": "1.1.3" + } }, "invariant": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", - "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==" + "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "requires": { + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz" + } }, "regenerator-runtime": { "version": "0.11.1", @@ -3625,7 +5440,12 @@ "relay-runtime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-1.4.1.tgz", - "integrity": "sha1-+I3NCkInAKBFY/KR9XDkzjaONtA=" + "integrity": "sha1-+I3NCkInAKBFY/KR9XDkzjaONtA=", + "requires": { + "babel-runtime": "6.25.0", + "fbjs": "0.8.14", + "relay-debugger-react-native-runtime": "0.0.10" + } }, "repeat-element": { "version": "1.1.2", @@ -3639,12 +5459,39 @@ }, "repeating": { "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=" + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + } }, "request": { "version": "2.85.0", "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha1-WgNhWkfGFCCz65m326IE+DYD4fo=" + "integrity": "sha1-WgNhWkfGFCCz65m326IE+DYD4fo=", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "2.1.16", + "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } }, "require-directory": { "version": "2.1.1", @@ -3660,13 +5507,20 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } }, "resolve": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", - "dev": true + "dev": true, + "requires": { + "path-parse": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" + } }, "resolve-from": { "version": "1.0.1", @@ -3683,7 +5537,11 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } }, "ret": { "version": "0.1.15", @@ -3692,13 +5550,29 @@ }, "rimraf": { "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=" + "integrity": "sha512-5QIcndZ8am2WyseL6lln/utl51SwRBQs/at+zi1UnhsnPyZcAID+g0PZrKdb+kJn2fo/CwgyJweR8sP36Jer5g==", + "requires": { + "glob": "7.1.2" + } + }, + "rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "dev": true, + "requires": { + "lodash.flattendeep": "4.4.0", + "nearley": "2.13.0" + } }, "run-async": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } }, "rx-lite": { "version": "3.1.2", @@ -3714,11 +5588,14 @@ "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "0.1.15" + } }, "samsam": { "version": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz", - "integrity": "sha1-7dOQk6MYQ3DLhZJDsr3yVefY6mc=", + "integrity": "sha512-LYfDHJWc/TF9xgJXZC+10mqbb85wSyFAVRF5LLHQTYd7DCe7WpVpwmnVa5TQO2gMQ0s8D2VQVOdp5P36Km4uzw==", "dev": true }, "semver": { @@ -3734,12 +5611,21 @@ "set-getter": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=" + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "requires": { + "to-object-path": "0.3.0" + } }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=" + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + } }, "setimmediate": { "version": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -3748,7 +5634,10 @@ "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "1.0.0" + } }, "shebang-regex": { "version": "1.0.0", @@ -3759,7 +5648,12 @@ "version": "0.7.8", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "rechoir": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + } }, "sigmund": { "version": "1.0.1", @@ -3788,6 +5682,16 @@ "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.3.6.tgz", "integrity": "sha1-lTeOfg+XapcS6bRZH/WznnPcPd4=", "dev": true, + "requires": { + "diff": "3.2.0", + "formatio": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", + "lolex": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", + "native-promise-only": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "path-to-regexp": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "samsam": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz", + "text-encoding": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "type-detect": "4.0.3" + }, "dependencies": { "type-detect": { "version": "4.0.3", @@ -3812,6 +5716,16 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "requires": { + "base": "0.11.2", + "debug": "2.6.8", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "source-map-resolve": "0.5.1", + "use": "2.0.2" + }, "dependencies": { "define-property": { "version": "0.2.5", @@ -3845,7 +5759,12 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=" + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } }, "kind-of": { "version": "5.1.0", @@ -3858,11 +5777,19 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } } } }, @@ -3870,32 +5797,51 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, "sntp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=" + "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=", + "requires": { + "hoek": "4.2.1" + } }, "source-map": { "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==" }, "source-map-resolve": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=" + "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=", + "requires": { + "atob": "2.0.3", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=" + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + } }, "source-map-url": { "version": "0.4.0", @@ -3905,7 +5851,10 @@ "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=" + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "requires": { + "spdx-license-ids": "1.2.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -3920,22 +5869,35 @@ "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=" + "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=", + "requires": { + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "requires": { + "extend-shallow": "3.0.2" + }, "dependencies": { "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=" + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "2.0.4" + } } } }, @@ -3949,6 +5911,16 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -3961,21 +5933,34 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -3983,18 +5968,29 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=" + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } }, "kind-of": { "version": "5.1.0", @@ -4003,12 +5999,6 @@ } } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true - }, "string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", @@ -4019,6 +6009,10 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "strip-ansi": "4.0.0" + }, "dependencies": { "ansi-regex": { "version": "3.0.0", @@ -4032,22 +6026,41 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=" + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "requires": { + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "strip-ansi": "4.0.0" + } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } } } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "stringstream": { "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, "strip-ansi": { "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } }, "strip-bom": { "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -4073,24 +6086,48 @@ "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, + "requires": { + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "lodash": "4.17.5", + "slice-ansi": "0.0.4", + "string-width": "2.1.1" + }, "dependencies": { "ajv": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + } } } }, "tar": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.0.tgz", - "integrity": "sha512-gJlTiiErwo96K904FnoYWl+5+FBgS+FimU6GMh66XLdLa55al8+d4jeDfPoGwSNHdtWI5FJP6xurmVqhBuGJpQ==" + "integrity": "sha512-gJlTiiErwo96K904FnoYWl+5+FBgS+FimU6GMh66XLdLa55al8+d4jeDfPoGwSNHdtWI5FJP6xurmVqhBuGJpQ==", + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.1", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "yallist": "3.0.2" + } }, "temp": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, "dependencies": { "os-tmpdir": { "version": "1.0.2", @@ -4134,7 +6171,10 @@ "version": "0.0.31", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true + "dev": true, + "requires": { + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } }, "to-fast-properties": { "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", @@ -4150,11 +6190,17 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -4162,28 +6208,48 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + }, "dependencies": { "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=" + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "2.0.4" + } } } }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } }, "tough-cookie": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=" + "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=", + "requires": { + "punycode": "1.4.1" + } }, "tree-kill": { "version": "1.2.0", @@ -4197,7 +6263,10 @@ "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } }, "tweetnacl": { "version": "0.14.5", @@ -4209,7 +6278,10 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } }, "typedarray": { "version": "0.0.6", @@ -4222,15 +6294,33 @@ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.14.tgz", "integrity": "sha1-EQ1T+kw/MmwSEpK76skE0uAzh8o=" }, + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", + "dev": true + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, "dependencies": { "set-value": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=" + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } } } }, @@ -4243,16 +6333,28 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, "dependencies": { "has-value": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, "dependencies": { "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } } } }, @@ -4272,21 +6374,35 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", + "requires": { + "define-property": "0.2.5", + "isobject": "3.0.1", + "lazy-cache": "2.0.2" + }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -4294,18 +6410,29 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=" + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } }, "kind-of": { "version": "5.1.0", @@ -4318,7 +6445,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + } }, "util-deprecate": { "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4332,12 +6462,21 @@ }, "validate-npm-package-license": { "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=" + "integrity": "sha512-VD0zBfAttoSxzPa+I+rF6ckOEEPSbifYNTSgRW5BsyfaD7gSE/uge00r2Xqa0d/yhF1MyHnMPHqLUdQRNimR2A==", + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "extsprintf": "1.3.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -4350,7 +6489,17 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/virtual-dom/-/virtual-dom-2.1.1.tgz", "integrity": "sha1-gO2i1IG57eDASRGM78tKBfIdE3U=", - "dev": true + "dev": true, + "requires": { + "browser-split": "0.0.1", + "error": "4.4.0", + "ev-store": "7.0.0", + "global": "4.3.2", + "is-object": "1.0.1", + "next-tick": "0.2.2", + "x-is-array": "0.1.0", + "x-is-string": "0.1.0" + } }, "what-the-diff": { "version": "0.4.0", @@ -4360,7 +6509,10 @@ "what-the-status": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/what-the-status/-/what-the-status-1.0.3.tgz", - "integrity": "sha1-lP3NAR/7U6Ijnnb6+NrL78mHdRA=" + "integrity": "sha1-lP3NAR/7U6Ijnnb6+NrL78mHdRA=", + "requires": { + "split": "1.0.1" + } }, "whatwg-fetch": { "version": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", @@ -4369,7 +6521,10 @@ "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=" + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "requires": { + "isexe": "2.0.0" + } }, "which-module": { "version": "2.0.0", @@ -4385,11 +6540,20 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + }, "dependencies": { "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } } } }, @@ -4401,7 +6565,10 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } }, "x-is-array": { "version": "0.1.0", @@ -4440,12 +6607,30 @@ "yargs": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=" + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + } }, "yargs-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=" + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "4.1.0" + } }, "yubikiri": { "version": "1.0.0", diff --git a/package.json b/package.json index 36c76fc1d2..c7ef24b5f6 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,8 @@ "chai-as-promised": "^5.3.0", "dedent-js": "^1.0.1", "electron-devtools-installer": "^2.2.3", - "enzyme": "^2.9.1", + "enzyme": "^3.3.0", + "enzyme-adapter-react-15": "^1.0.5", "eslint": "^3.19.0", "eslint-config-fbjs": "2.0.0-alpha.1", "eslint-config-standard": "^10.2.0", From 2d191b36d1795d6e90c19dc7d4562dfff3055406 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 11:23:11 -0400 Subject: [PATCH 02/34] Activate the React 15 adapter --- test/runner.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/runner.js b/test/runner.js index 68b438a27f..7066d32479 100644 --- a/test/runner.js +++ b/test/runner.js @@ -16,6 +16,10 @@ module.exports = createRunner({ reporter: process.env.MOCHA_REPORTER || 'spec', overrideTestPaths: [/spec$/, /test/], }, mocha => { + const Enzyme = require('enzyme'); + const Adapter = require('enzyme-adapter-react-15'); + Enzyme.configure({adapter: new Adapter()}); + require('mocha-stress'); mocha.timeout(parseInt(process.env.MOCHA_TIMEOUT || '5000', 10)); From 6114214818f20b43d0ecc0f1c157efa2ff270750 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 11:51:35 -0400 Subject: [PATCH 03/34] CommitController :white_check_mark: --- test/controllers/commit-controller.test.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/controllers/commit-controller.test.js b/test/controllers/commit-controller.test.js index 228d696135..32a0e2ba8d 100644 --- a/test/controllers/commit-controller.test.js +++ b/test/controllers/commit-controller.test.js @@ -193,6 +193,7 @@ describe('CommitController', function() { wrapper.find('CommitView').prop('toggleExpandedCommitMessageEditor')('message in box'); await assert.async.equal(workspace.getActiveTextEditor().getPath(), wrapper.instance().getCommitMessagePath()); + wrapper.update(); assert.isTrue(wrapper.find('CommitView').prop('deactivateCommitBox')); const editor = workspace.getActiveTextEditor(); @@ -208,7 +209,7 @@ describe('CommitController', function() { workspace.getActiveTextEditor().destroy(); assert.isTrue(wrapper.find('CommitView').prop('deactivateCommitBox')); - await assert.async.strictEqual(wrapper.find('CommitView').prop('message'), 'message in editor'); + await assert.async.strictEqual(wrapper.update().find('CommitView').prop('message'), 'message in editor'); }); it('activates editor if already opened but in background', async function() { @@ -253,7 +254,7 @@ describe('CommitController', function() { wrapper.find('CommitView').prop('toggleExpandedCommitMessageEditor')(); await assert.async.lengthOf(wrapper.instance().getCommitMessageEditors(), 0); assert.isTrue(atomEnvironment.applicationDelegate.confirm.called); - await assert.async.strictEqual(wrapper.find('CommitView').prop('message'), 'make some new changes'); + await assert.async.strictEqual(wrapper.update().find('CommitView').prop('message'), 'make some new changes'); }); }); From c2ea0f8d5a304acd26ad0824a05b5e77f3cec3d7 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 11:54:46 -0400 Subject: [PATCH 04/34] EditorConflictController :white_check_mark: --- test/controllers/editor-conflict-controller.test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/controllers/editor-conflict-controller.test.js b/test/controllers/editor-conflict-controller.test.js index 0e34962b3a..61ef4b376c 100644 --- a/test/controllers/editor-conflict-controller.test.js +++ b/test/controllers/editor-conflict-controller.test.js @@ -284,6 +284,7 @@ describe('EditorConflictController', function() { editor.setCursorBufferPosition([16, 6]); // On "Your middle changes" commandRegistry.dispatch(editorView, 'github:dismiss-conflict'); + wrapper.update(); assert.equal(resolutionProgress.getRemaining(editor.getPath()), 2); assert.include(editor.getText(), 'Text in between 0 and 1.\n\n' + @@ -301,6 +302,8 @@ describe('EditorConflictController', function() { fs.writeFileSync(fixtureFile, onlyTwoMarkers); await assert.async.equal(wrapper.state('conflicts').size, 2); + wrapper.update(); + assert.lengthOf(wrapper.find(ConflictController), 2); assert.equal(resolutionProgress.getRemaining(fixtureFile), 2); }); From a9c45b6a8cf819cc38dc9af1eb4552195ca1d461 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 12:47:39 -0400 Subject: [PATCH 05/34] :fire: whitespace :art: --- lib/controllers/file-patch-controller.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/controllers/file-patch-controller.js b/lib/controllers/file-patch-controller.js index 7c24870a47..1d071ca474 100644 --- a/lib/controllers/file-patch-controller.js +++ b/lib/controllers/file-patch-controller.js @@ -262,6 +262,7 @@ export default class FilePatchController extends React.Component { await this.repositoryObserver.getActiveModel().applyPatchToIndex( this.state.filePatch.getStagePatchForHunk(hunk), ); + this.props.switchboard.didFinishStageOperation({stage: true, hunk: true}); } From d10c9609ea32424997ab5a6319af39a85742f0a5 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 12:47:51 -0400 Subject: [PATCH 06/34] Use a ref instead of findDOMNode --- lib/views/file-patch-view.js | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/lib/views/file-patch-view.js b/lib/views/file-patch-view.js index a43ff529c4..d023e03750 100644 --- a/lib/views/file-patch-view.js +++ b/lib/views/file-patch-view.js @@ -1,5 +1,4 @@ import React from 'react'; -import ReactDom from 'react-dom'; import PropTypes from 'prop-types'; import {CompositeDisposable, Disposable} from 'event-kit'; @@ -64,16 +63,12 @@ export default class FilePatchView extends React.Component { this.state = { selection: new FilePatchSelection(this.props.hunks), - domNode: null, }; } componentDidMount() { window.addEventListener('mouseup', this.mouseup); this.disposables.add(new Disposable(() => window.removeEventListener('mouseup', this.mouseup))); - this.setState({ - domNode: ReactDom.findDOMNode(this), - }); } componentWillReceiveProps(nextProps) { @@ -128,10 +123,6 @@ export default class FilePatchView extends React.Component { return true; } - if (this.state.domNode !== nextState.domNode) { - return true; - } - return false; } @@ -215,7 +206,7 @@ export default class FilePatchView extends React.Component { onMouseUp={this.mouseup} ref={e => { this.element = e; }}> - {this.state.domNode && this.registerCommands()} + {this.element && this.registerCommands()}
@@ -238,7 +229,7 @@ export default class FilePatchView extends React.Component { registerCommands() { return (
- + From 0aa67ac420eed9f9fa5e08e10a72abe1ffca3c0a Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 12:48:21 -0400 Subject: [PATCH 07/34] FilePatchController :white_check_mark: --- .../controllers/file-patch-controller.test.js | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index 94d6915ca0..04817450ad 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -137,9 +137,9 @@ describe('FilePatchController', function() { const wrapper = mount(React.cloneElement(component, {largeDiffLineThreshold: 5})); - - await assert.async.isTrue(wrapper.find('.large-file-patch').exists()); + await assert.async.isTrue(wrapper.update().find('.large-file-patch').exists()); wrapper.find('.large-file-patch').find('button').simulate('click'); + assert.isTrue(wrapper.find('HunkView').exists()); }); @@ -161,17 +161,17 @@ describe('FilePatchController', function() { filePath: filePatch1.getPath(), largeDiffLineThreshold: 5, })); - await assert.async.isTrue(wrapper.find('.large-file-patch').exists()); + await assert.async.isTrue(wrapper.update().find('.large-file-patch').exists()); wrapper.find('.large-file-patch').find('button').simulate('click'); assert.isTrue(wrapper.find('HunkView').exists()); getFilePatchForPath.returns(filePatch2); wrapper.setProps({filePath: filePatch2.getPath()}); - await assert.async.isTrue(wrapper.find('.large-file-patch').exists()); + await assert.async.isTrue(wrapper.update().find('.large-file-patch').exists()); getFilePatchForPath.returns(filePatch1); wrapper.setProps({filePath: filePatch1.getPath()}); - assert.isTrue(wrapper.find('HunkView').exists()); + assert.isTrue(wrapper.update().find('HunkView').exists()); }); }); @@ -210,7 +210,8 @@ describe('FilePatchController', function() { getFilePatchForPath.returns(filePatch); wrapper.instance().onRepoRefresh(repository); - await assert.async.isTrue(wrapper.find('HunkView').exists()); + + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); assert.isTrue(wrapper.find('HunkView').text().includes('@@ -0,1 +0,1 @@')); }); @@ -224,7 +225,7 @@ describe('FilePatchController', function() { let view0; await until(() => { - view0 = wrapper.find('FilePatchView').shallow(); + view0 = wrapper.update().find('FilePatchView').shallow(); return view0.find({hunk: hunk1}).exists(); }); assert.isTrue(view0.find({hunk: hunk2}).exists()); @@ -236,7 +237,7 @@ describe('FilePatchController', function() { wrapper.instance().onRepoRefresh(repository); let view1; await until(() => { - view1 = wrapper.find('FilePatchView').shallow(); + view1 = wrapper.update().find('FilePatchView').shallow(); return view1.find({hunk: hunk3}).exists(); }); assert.isTrue(view1.find({hunk: hunk1}).exists()); @@ -249,7 +250,7 @@ describe('FilePatchController', function() { const wrapper = mount(component); - await assert.async.isTrue(wrapper.find('FilePatchView').exists()); + await assert.async.isTrue(wrapper.update().find('Commands').exists()); commandRegistry.dispatch(wrapper.find('FilePatchView').getDOMNode(), 'core:move-right'); assert.isTrue(didSurfaceFile.calledWith(filePath, 'unstaged')); }); @@ -274,11 +275,12 @@ describe('FilePatchController', function() { const wrapper = mount(React.cloneElement(component, {openFiles: openFilesStub})); - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); wrapper.find('LineView').simulate('mousedown', {button: 0, detail: 1}); window.dispatchEvent(new MouseEvent('mouseup')); commandRegistry.dispatch(wrapper.find('FilePatchView').getDOMNode(), 'github:open-file'); + wrapper.update(); await assert.async.isTrue(editorSpy.setCursorBufferPosition.called); @@ -328,7 +330,7 @@ describe('FilePatchController', function() { assert.equal((await indexModeAndOid(repository, deletedSymlinkAddedFilePath)).mode, '100644'); // Unstage a couple added lines, but not all - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const opPromise0 = switchboard.getFinishStageOperationPromise(); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('LineView').at(1).find('.github-HunkView-line').simulate('mousedown', {button: 0, detail: 1}); @@ -359,7 +361,7 @@ describe('FilePatchController', function() { assert.autocrlfEqual(await repository.readFileFromIndex(deletedFileAddedSymlinkPath), 'foo\nbar\nbaz\n\n'); // stage a couple of lines, but not all - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const opPromise0 = switchboard.getFinishStageOperationPromise(); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('LineView').at(1).find('.github-HunkView-line').simulate('mousedown', {button: 0, detail: 1}); @@ -392,7 +394,7 @@ describe('FilePatchController', function() { assert.equal((await indexModeAndOid(repository, deletedSymlinkAddedFilePath)).mode, '120000'); // Stage a couple added lines, but not all - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const opPromise0 = switchboard.getFinishStageOperationPromise(); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('LineView').at(1).find('.github-HunkView-line').simulate('mousedown', {button: 0, detail: 1}); @@ -423,7 +425,7 @@ describe('FilePatchController', function() { assert.equal((await indexModeAndOid(repository, deletedFileAddedSymlinkPath)).mode, '120000'); // unstage a couple of lines, but not all - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const opPromise0 = switchboard.getFinishStageOperationPromise(); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('LineView').at(1).find('.github-HunkView-line').simulate('mousedown', {button: 0, detail: 1}); @@ -453,7 +455,7 @@ describe('FilePatchController', function() { assert.equal((await indexModeAndOid(repository, deletedFileAddedSymlinkPath)).mode, '100644'); // stage all deleted lines - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const opPromise0 = switchboard.getFinishStageOperationPromise(); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('.github-HunkView-title').simulate('click'); @@ -485,7 +487,7 @@ describe('FilePatchController', function() { assert.equal((await indexModeAndOid(repository, deletedSymlinkAddedFilePath)).mode, '100644'); // unstage all added lines - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const opPromise0 = switchboard.getFinishStageOperationPromise(); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('.github-HunkView-title').simulate('click'); @@ -524,11 +526,10 @@ describe('FilePatchController', function() { const wrapper = mount(component); - // selectNext() - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); commandRegistry.dispatch(wrapper.find('FilePatchView').getDOMNode(), 'core:move-down'); - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const hunkView0 = wrapper.find('HunkView').at(0); assert.isFalse(hunkView0.prop('isSelected')); const opPromise0 = switchboard.getFinishStageOperationPromise(); @@ -574,7 +575,7 @@ describe('FilePatchController', function() { // stage a subset of lines from first hunk const wrapper = mount(component); - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const opPromise0 = switchboard.getFinishStageOperationPromise(); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('LineView').at(1).find('.github-HunkView-line').simulate('mousedown', {button: 0, detail: 1}); @@ -669,7 +670,7 @@ describe('FilePatchController', function() { initialStagingStatus: 'staged', })); - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const opPromise = switchboard.getFinishStageOperationPromise(); wrapper.find('HunkView').at(0).find('button.github-HunkView-stageButton').simulate('click'); @@ -690,7 +691,7 @@ describe('FilePatchController', function() { initialStagingStatus: 'staged', })); - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const viewNode = wrapper.find('FilePatchView').getDOMNode(); commandRegistry.dispatch(viewNode, 'github:toggle-patch-selection-mode'); @@ -723,7 +724,7 @@ describe('FilePatchController', function() { const wrapper = mount(component); - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('LineView').at(1).find('.github-HunkView-line') .simulate('mousedown', {button: 0, detail: 1}); @@ -747,6 +748,7 @@ describe('FilePatchController', function() { let actualLines = await repository.readFileFromIndex(filePath); assert.autocrlfEqual(actualLines, expectedLines.join('\n')); await changePatchPromise; + wrapper.update(); const hunkView1 = wrapper.find('HunkView').at(0); hunkView1.find('LineView').at(2).find('.github-HunkView-line') @@ -782,7 +784,7 @@ describe('FilePatchController', function() { const wrapper = mount(component); - await assert.async.isTrue(wrapper.find('HunkView').exists()); + await assert.async.isTrue(wrapper.update().find('HunkView').exists()); // ensure staging the same hunk twice does not cause issues // second stage action is a no-op since the first staging operation is in flight From 001dda8b26241058fa3fc1abd00f5b592fff66c2 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 13:27:32 -0400 Subject: [PATCH 08/34] GitTabController :white_check_mark: --- test/controllers/git-tab-controller.test.js | 63 ++++++++++----------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/test/controllers/git-tab-controller.test.js b/test/controllers/git-tab-controller.test.js index 51bf2a5b94..12c5ac81de 100644 --- a/test/controllers/git-tab-controller.test.js +++ b/test/controllers/git-tab-controller.test.js @@ -72,11 +72,11 @@ describe('GitTabController', function() { app = React.cloneElement(app, {repository}); const wrapper = mount(app); - assert.isTrue(wrapper.hasClass('is-loading')); + assert.isTrue(wrapper.find('.github-Panel').hasClass('is-loading')); assert.lengthOf(wrapper.find('EtchWrapper'), 1); assert.lengthOf(wrapper.find('CommitController'), 1); - await assert.async.isFalse(wrapper.hasClass('is-loading')); + await assert.async.isFalse(wrapper.update().find('.github-Panel').hasClass('is-loading')); assert.lengthOf(wrapper.find('EtchWrapper'), 1); assert.lengthOf(wrapper.find('CommitController'), 1); }); @@ -87,8 +87,8 @@ describe('GitTabController', function() { app = React.cloneElement(app, {repository}); const wrapper = mount(app); - assert.isTrue(wrapper.hasClass('is-empty')); - assert.lengthOf(wrapper.find('.no-repository'), 1); + assert.isTrue(wrapper.find('.is-empty').exists()); + assert.isTrue(wrapper.find('.no-repository').exists()); }); it('keeps the state of the GitTabView in sync with the assigned repository', async function() { @@ -111,17 +111,17 @@ describe('GitTabController', function() { // Fetches data when a new repository is assigned // Does not update repository instance variable until that data is fetched wrapper.setProps({repository: repository1}); - await assert.async.deepEqual(wrapper.find('GitTabView').prop('unstagedChanges'), await repository1.getUnstagedChanges()); + await assert.async.deepEqual(wrapper.update().find('GitTabView').prop('unstagedChanges'), await repository1.getUnstagedChanges()); wrapper.setProps({repository: repository2}); - await assert.async.deepEqual(wrapper.find('GitTabView').prop('unstagedChanges'), await repository2.getUnstagedChanges()); + await assert.async.deepEqual(wrapper.update().find('GitTabView').prop('unstagedChanges'), await repository2.getUnstagedChanges()); // Fetches data and updates child view when the repository is mutated fs.writeFileSync(path.join(workdirPath2, 'a.txt'), 'a change\n'); fs.unlinkSync(path.join(workdirPath2, 'b.txt')); repository2.refresh(); - await assert.async.deepEqual(wrapper.find('GitTabView').prop('unstagedChanges'), await repository2.getUnstagedChanges()); + await assert.async.deepEqual(wrapper.update().find('GitTabView').prop('unstagedChanges'), await repository2.getUnstagedChanges()); }); it('fetches conflict marker counts for conflicting files', async function() { @@ -153,18 +153,17 @@ describe('GitTabController', function() { const confirm = sinon.stub(); app = React.cloneElement(app, {repository, confirm}); const wrapper = mount(app); - const view = wrapper.find('GitTabView'); - await assert.async.isTrue(view.prop('isMerging')); - assert.notEqual(view.prop('mergeConflicts').length, 0); - assert.isOk(view.prop('mergeMessage')); + await assert.async.isTrue(wrapper.update().find('GitTabView').prop('isMerging')); + assert.notEqual(wrapper.find('GitTabView').prop('mergeConflicts').length, 0); + assert.isOk(wrapper.find('GitTabView').prop('mergeMessage')); confirm.returns(0); await wrapper.instance().getWrappedComponentInstance().abortMerge(); - await assert.async.lengthOf(view.prop('mergeConflicts'), 0); - assert.isFalse(view.prop('isMerging')); - assert.isNull(view.prop('mergeMessage')); + await assert.async.lengthOf(wrapper.update().find('GitTabView').prop('mergeConflicts'), 0); + assert.isFalse(wrapper.find('GitTabView').prop('isMerging')); + assert.isNull(wrapper.find('GitTabView').prop('mergeMessage')); }); }); @@ -243,7 +242,7 @@ describe('GitTabController', function() { app = React.cloneElement(app, {repository}); const wrapper = mount(app); - await assert.async.lengthOf(wrapper.find('GitTabView').prop('unstagedChanges'), 3); + await assert.async.lengthOf(wrapper.update().find('GitTabView').prop('unstagedChanges'), 3); const controller = wrapper.instance().getWrappedComponentInstance(); const gitTab = controller.refView; @@ -268,7 +267,7 @@ describe('GitTabController', function() { const wrapper = mount(app); const controller = wrapper.instance().getWrappedComponentInstance(); - assert.isTrue(wrapper.hasClass('is-empty')); + assert.isTrue(wrapper.find('.is-empty').exists()); assert.lengthOf(wrapper.find('.no-repository'), 1); controller.rememberLastFocus({target: null}); @@ -336,7 +335,7 @@ describe('GitTabController', function() { app = React.cloneElement(app, {repository}); wrapper = mount(app); - await assert.async.lengthOf(wrapper.find('GitTabView').prop('unstagedChanges'), 3); + await assert.async.lengthOf(wrapper.update().find('GitTabView').prop('unstagedChanges'), 3); extractReferences(); }); @@ -344,7 +343,7 @@ describe('GitTabController', function() { it('blurs on tool-panel:unfocus', function() { sinon.spy(workspace.getActivePane(), 'activate'); - commandRegistry.dispatch(wrapper.find('.github-Panel').getNode(), 'tool-panel:unfocus'); + commandRegistry.dispatch(wrapper.find('.github-Panel').getDOMNode(), 'tool-panel:unfocus'); assert.isTrue(workspace.getActivePane().activate.called); }); @@ -444,7 +443,7 @@ describe('GitTabController', function() { app = React.cloneElement(app, {repository, ensureGitTab}); const wrapper = mount(app); - await assert.async.lengthOf(wrapper.find('GitTabView').prop('unstagedChanges'), 2); + await assert.async.lengthOf(wrapper.update().find('GitTabView').prop('unstagedChanges'), 2); const gitTab = wrapper.instance().getWrappedComponentInstance().refView; const stagingView = gitTab.refStagingView.getWrappedComponent(); @@ -468,7 +467,7 @@ describe('GitTabController', function() { await assert.async.lengthOf(stagingView.props.unstagedChanges, 1); assert.lengthOf(stagingView.props.stagedChanges, 1); - commitView.find('atom-text-editor').getNode().getModel().setText('Make it so'); + commitView.find('atom-text-editor').instance().getModel().setText('Make it so'); commitView.find('.github-CommitView-commit').simulate('click'); await assert.async.equal((await repository.getLastCommit()).getMessageSubject(), 'Make it so'); @@ -484,7 +483,7 @@ describe('GitTabController', function() { app = React.cloneElement(app, {repository, confirm}); const wrapper = mount(app); - await assert.async.lengthOf(wrapper.find('GitTabView').prop('mergeConflicts'), 5); + await assert.async.lengthOf(wrapper.update().find('GitTabView').prop('mergeConflicts'), 5); const stagingView = wrapper.instance().getWrappedComponentInstance().refView.refStagingView.getWrappedComponent(); assert.equal(stagingView.props.mergeConflicts.length, 5); @@ -607,7 +606,7 @@ describe('GitTabController', function() { await repository.commit(commitMessage); getLastCommit = () => { - return wrapper.find('RecentCommitView').getNodes()[0].props.commit; + return wrapper.update().find('RecentCommitView').at(0).instance().props.commit; }; await assert.async.strictEqual(getLastCommit().getMessageSubject(), commitMessage); @@ -620,16 +619,16 @@ describe('GitTabController', function() { // stage some changes fs.writeFileSync(path.join(workdirPath, 'new-file.txt'), 'oh\nem\ngee\n'); await repository.stageFiles(['new-file.txt']); - await assert.async.lengthOf(wrapper.find('GitTabView').prop('stagedChanges'), 1); + await assert.async.lengthOf(wrapper.update().find('GitTabView').prop('stagedChanges'), 1); // ensure that the commit editor is empty - assert.strictEqual(wrapper.find('CommitView').getNode().editor.getText(), ''); + assert.strictEqual(wrapper.find('CommitView').instance().editor.getText(), ''); commandRegistry.dispatch(workspaceElement, 'github:amend-last-commit'); await assert.async.deepEqual(repository.commit.args[0][1], {amend: true, coAuthors: []}); // amending should commit all unstaged changes - await assert.async.lengthOf(wrapper.find('GitTabView').prop('stagedChanges'), 0); + await assert.async.lengthOf(wrapper.update().find('GitTabView').prop('stagedChanges'), 0); // commit message from previous commit should be used const lastCommit = getLastCommit(); @@ -642,10 +641,10 @@ describe('GitTabController', function() { // new commit message const newMessage = 'such new very message'; const commitView = wrapper.find('CommitView'); - commitView.getNode().editor.setText(newMessage); + commitView.instance().editor.setText(newMessage); // no staged changes - await assert.async.lengthOf(wrapper.find('GitTabView').prop('stagedChanges'), 0); + await assert.async.lengthOf(wrapper.update().find('GitTabView').prop('stagedChanges'), 0); commandRegistry.dispatch(workspaceElement, 'github:amend-last-commit'); await assert.async.deepEqual(repository.commit.args[0][1], {amend: true, coAuthors: []}); @@ -663,7 +662,7 @@ describe('GitTabController', function() { // add co author const author = {email: 'foo@bar.com', name: 'foo bar'}; - const commitView = wrapper.find('CommitView').getNode(); + const commitView = wrapper.find('CommitView').instance(); commitView.setState({showCoAuthorInput: true}); commitView.onSelectedCoAuthorsChanged([author]); @@ -682,7 +681,7 @@ describe('GitTabController', function() { // add co author const author = {email: 'foo@bar.com', name: 'foo bar'}; - const commitView = wrapper.find('CommitView').getNode(); + const commitView = wrapper.find('CommitView').instance(); commitView.setState({showCoAuthorInput: true}); commitView.onSelectedCoAuthorsChanged([author]); const newMessage = 'Star Wars: A New Message'; @@ -714,7 +713,7 @@ describe('GitTabController', function() { assert.strictEqual(getLastCommit().getMessageSubject(), message); // buh bye co author - const commitView = wrapper.find('CommitView').getNode(); + const commitView = wrapper.find('CommitView').instance(); assert.strictEqual(commitView.editor.getText(), ''); commitView.onSelectedCoAuthorsChanged([]); @@ -766,14 +765,14 @@ describe('GitTabController', function() { assert.deepEqual(wrapper.find('CommitView').prop('selectedCoAuthors'), []); - await assert.async.lengthOf(wrapper.find('.github-RecentCommit-undoButton'), 1); + await assert.async.lengthOf(wrapper.update().find('.github-RecentCommit-undoButton'), 1); wrapper.find('.github-RecentCommit-undoButton').simulate('click'); let commitMessages = wrapper.find('.github-RecentCommit-message').map(node => node.text()); // ensure that the co author trailer is stripped from commit message assert.deepEqual(commitMessages, [commitSubject, 'Initial commit']); - await assert.async.lengthOf(wrapper.find('GitTabView').prop('stagedChanges'), 1); + await assert.async.lengthOf(wrapper.update().find('GitTabView').prop('stagedChanges'), 1); assert.deepEqual(wrapper.find('GitTabView').prop('stagedChanges'), [{ filePath: 'new-file.txt', status: 'added', From e1d45fc9ad4d5ec64fbebb32fe67caa07d9fd501 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 14:24:35 -0400 Subject: [PATCH 09/34] RepositoryConflictController :white_check_mark: --- test/controllers/repository-conflict-controller.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/controllers/repository-conflict-controller.test.js b/test/controllers/repository-conflict-controller.test.js index 822a938081..af3963a05e 100644 --- a/test/controllers/repository-conflict-controller.test.js +++ b/test/controllers/repository-conflict-controller.test.js @@ -65,7 +65,7 @@ describe('RepositoryConflictController', () => { app = React.cloneElement(app, {repository}); const wrapper = mount(app); - await assert.async.equal(wrapper.find(EditorConflictController).length, 2); + await assert.async.equal(wrapper.update().find(EditorConflictController).length, 2); }); }); From 25f3369de5793e16d0a75929e4cde6fe651162bf Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 14:32:22 -0400 Subject: [PATCH 10/34] RootController :white_check_mark: --- test/controllers/root-controller.test.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/controllers/root-controller.test.js b/test/controllers/root-controller.test.js index b8ac62c1c2..3ddc313c9b 100644 --- a/test/controllers/root-controller.test.js +++ b/test/controllers/root-controller.test.js @@ -316,6 +316,7 @@ describe('RootController', function() { const wrapper = shallow(app); wrapper.instance().initializeRepo(); + wrapper.update(); assert.lengthOf(wrapper.find('Panel').find({location: 'modal'}).find('InitDialog'), 1); }); @@ -325,6 +326,7 @@ describe('RootController', function() { const wrapper = shallow(app); wrapper.instance().initializeRepo(); + wrapper.update(); const dialog = wrapper.find('InitDialog'); dialog.prop('didAccept')('/a/path'); resolveInit(); @@ -337,9 +339,11 @@ describe('RootController', function() { const wrapper = shallow(app); wrapper.instance().initializeRepo(); + wrapper.update(); const dialog = wrapper.find('InitDialog'); dialog.prop('didCancel')(); + wrapper.update(); assert.isFalse(wrapper.find('InitDialog').exists()); }); @@ -350,6 +354,7 @@ describe('RootController', function() { const wrapper = shallow(app); wrapper.instance().initializeRepo(); + wrapper.update(); const dialog = wrapper.find('InitDialog'); const acceptPromise = dialog.prop('didAccept')('/a/path'); const err = new GitError('git init exited with status 1'); @@ -357,6 +362,7 @@ describe('RootController', function() { rejectInit(err); await acceptPromise; + wrapper.update(); assert.isFalse(wrapper.find('InitDialog').exists()); assert.isTrue(notificationManager.addError.calledWith( 'Unable to initialize git repository in /a/path', @@ -380,12 +386,14 @@ describe('RootController', function() { it('renders the modal clone panel', function() { wrapper.instance().openCloneDialog(); + wrapper.update(); assert.lengthOf(wrapper.find('Panel').find({location: 'modal'}).find('CloneDialog'), 1); }); it('triggers the clone callback on accept', function() { wrapper.instance().openCloneDialog(); + wrapper.update(); const dialog = wrapper.find('CloneDialog'); dialog.prop('didAccept')('git@github.com:atom/github.git', '/home/me/github'); @@ -396,17 +404,20 @@ describe('RootController', function() { it('marks the clone dialog as in progress during clone', async function() { wrapper.instance().openCloneDialog(); + wrapper.update(); const dialog = wrapper.find('CloneDialog'); assert.isFalse(dialog.prop('inProgress')); const acceptPromise = dialog.prop('didAccept')('git@github.com:atom/github.git', '/home/me/github'); + wrapper.update(); assert.isTrue(wrapper.find('CloneDialog').prop('inProgress')); resolveClone(); await acceptPromise; + wrapper.update(); assert.isFalse(wrapper.find('CloneDialog').exists()); }); @@ -414,6 +425,7 @@ describe('RootController', function() { sinon.stub(notificationManager, 'addError'); wrapper.instance().openCloneDialog(); + wrapper.update(); const dialog = wrapper.find('CloneDialog'); assert.isFalse(dialog.prop('inProgress')); @@ -424,6 +436,7 @@ describe('RootController', function() { rejectClone(err); await acceptPromise; + wrapper.update(); assert.isFalse(wrapper.find('CloneDialog').exists()); assert.isTrue(notificationManager.addError.calledWith( 'Unable to clone git@github.com:nope/nope.git', @@ -433,10 +446,12 @@ describe('RootController', function() { it('dismisses the clone panel on cancel', function() { wrapper.instance().openCloneDialog(); + wrapper.update(); const dialog = wrapper.find('CloneDialog'); dialog.prop('didCancel')(); + wrapper.update(); assert.lengthOf(wrapper.find('CloneDialog'), 0); assert.isFalse(cloneRepositoryForProjectPath.called); }); @@ -454,6 +469,7 @@ describe('RootController', function() { prompt: 'Password plz', includeUsername: true, }); + wrapper.update(); const dialog = wrapper.find('Panel').find({location: 'modal'}).find('CredentialDialog'); assert.isTrue(dialog.exists()); @@ -466,9 +482,12 @@ describe('RootController', function() { prompt: 'Speak "friend" and enter', includeUsername: false, }); + wrapper.update(); wrapper.find('CredentialDialog').prop('onSubmit')({password: 'friend'}); assert.deepEqual(await credentialPromise, {password: 'friend'}); + + wrapper.update(); assert.isFalse(wrapper.find('CredentialDialog').exists()); }); @@ -477,9 +496,12 @@ describe('RootController', function() { prompt: 'Enter the square root of 1244313452349528345', includeUsername: false, }); + wrapper.update(); wrapper.find('CredentialDialog').prop('onCancel')(); await assert.isRejected(credentialPromise); + + wrapper.update(); assert.isFalse(wrapper.find('CredentialDialog').exists()); }); }); From af53496f662d762ecfd485def9275630b9b25f97 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 14:45:59 -0400 Subject: [PATCH 11/34] StatusBarTileController :white_check_mark: --- test/controllers/status-bar-tile-controller.test.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/test/controllers/status-bar-tile-controller.test.js b/test/controllers/status-bar-tile-controller.test.js index 37883e2c72..951c07611d 100644 --- a/test/controllers/status-bar-tile-controller.test.js +++ b/test/controllers/status-bar-tile-controller.test.js @@ -44,7 +44,7 @@ describe('StatusBarTileController', function() { }); function getTooltipNode(wrapper, selector) { - const ts = tooltips.findTooltips(wrapper.find(selector).node.element); + const ts = tooltips.findTooltips(wrapper.find(selector).getDOMNode()); assert.lengthOf(ts, 1); ts[0].show(); return ts[0].getTooltipElement(); @@ -57,6 +57,7 @@ describe('StatusBarTileController', function() { const wrapper = mount(React.cloneElement(component, {repository})); await wrapper.instance().refreshModelData(); + wrapper.update(); assert.equal(wrapper.find(BranchView).prop('currentBranch').name, 'master'); assert.lengthOf(wrapper.find(BranchView).find('.github-branch-detached'), 0); @@ -69,6 +70,7 @@ describe('StatusBarTileController', function() { const wrapper = mount(React.cloneElement(component, {repository})); await wrapper.instance().refreshModelData(); + wrapper.update(); assert.equal(wrapper.find(BranchView).prop('currentBranch').name, 'master~2'); assert.lengthOf(wrapper.find(BranchView).find('.github-branch-detached'), 1); @@ -95,6 +97,7 @@ describe('StatusBarTileController', function() { const wrapper = mount(React.cloneElement(component, {repository})); await wrapper.instance().refreshModelData(); + wrapper.update(); const tip = getTooltipNode(wrapper, BranchView); const selectList = tip.querySelector('select'); @@ -281,6 +284,7 @@ describe('StatusBarTileController', function() { statusBarTile = mount(React.cloneElement(component, {repository})); await statusBarTile.instance().refreshModelData(); + statusBarTile.update(); sinon.spy(repository, 'fetch'); sinon.spy(repository, 'push'); @@ -318,6 +322,7 @@ describe('StatusBarTileController', function() { statusBarTile = mount(React.cloneElement(component, {repository})); await statusBarTile.instance().refreshModelData(); + statusBarTile.update(); sinon.spy(repository, 'fetch'); sinon.spy(repository, 'push'); @@ -356,6 +361,7 @@ describe('StatusBarTileController', function() { statusBarTile = mount(React.cloneElement(component, {repository})); await statusBarTile.instance().refreshModelData(); + statusBarTile.update(); sinon.spy(repository, 'fetch'); sinon.spy(repository, 'push'); @@ -394,6 +400,7 @@ describe('StatusBarTileController', function() { statusBarTile = mount(React.cloneElement(component, {repository})); await statusBarTile.instance().refreshModelData(); + statusBarTile.update(); sinon.spy(repository, 'fetch'); sinon.spy(repository, 'push'); @@ -433,6 +440,7 @@ describe('StatusBarTileController', function() { statusBarTile = mount(React.cloneElement(component, {repository})); await statusBarTile.instance().refreshModelData(); + statusBarTile.update(); sinon.spy(repository, 'fetch'); sinon.spy(repository, 'push'); @@ -473,6 +481,7 @@ describe('StatusBarTileController', function() { statusBarTile = mount(React.cloneElement(component, {repository})); await statusBarTile.instance().refreshModelData(); + statusBarTile.update(); sinon.spy(repository, 'fetch'); sinon.spy(repository, 'push'); @@ -503,6 +512,7 @@ describe('StatusBarTileController', function() { statusBarTile = mount(React.cloneElement(component, {repository})); await statusBarTile.instance().refreshModelData(); + statusBarTile.update(); sinon.spy(repository, 'fetch'); sinon.spy(repository, 'push'); From a3cd3c59b3e9ffcdcf606d6e30e5d93abd563974 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 14:49:22 -0400 Subject: [PATCH 12/34] ObserveModelDecorator :white_check_mark: --- test/decorators/observe-model.test.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/test/decorators/observe-model.test.js b/test/decorators/observe-model.test.js index 314900655b..4bbb60171c 100644 --- a/test/decorators/observe-model.test.js +++ b/test/decorators/observe-model.test.js @@ -51,25 +51,25 @@ describe('ObserveModelDecorator', function() { assert.isTrue(wrapper.is('ObserveModelDecorator(TestComponent)')); - await assert.async.equal(wrapper.find('TestComponent').prop('one'), 1); - await assert.async.equal(wrapper.find('TestComponent').prop('two'), 2); - await assert.async.equal(wrapper.find('TestComponent').prop('testModel'), model); + await assert.async.equal(wrapper.update().find('TestComponent').prop('one'), 1); + await assert.async.equal(wrapper.update().find('TestComponent').prop('two'), 2); + await assert.async.equal(wrapper.update().find('TestComponent').prop('testModel'), model); model.update({one: 'one', two: 'two'}); - await assert.async.equal(wrapper.find('TestComponent').prop('one'), 'one'); - await assert.async.equal(wrapper.find('TestComponent').prop('two'), 'two'); - await assert.async.equal(wrapper.find('TestComponent').prop('testModel'), model); + await assert.async.equal(wrapper.update().find('TestComponent').prop('one'), 'one'); + await assert.async.equal(wrapper.update().find('TestComponent').prop('two'), 'two'); + await assert.async.equal(wrapper.update().find('TestComponent').prop('testModel'), model); wrapper.setProps({testModel: null}); - await assert.async.equal(wrapper.find('TestComponent').prop('one'), undefined); - await assert.async.equal(wrapper.find('TestComponent').prop('two'), undefined); - await assert.async.isNull(wrapper.find('TestComponent').prop('testModel')); + await assert.async.equal(wrapper.update().find('TestComponent').prop('one'), undefined); + await assert.async.equal(wrapper.update().find('TestComponent').prop('two'), undefined); + await assert.async.isNull(wrapper.update().find('TestComponent').prop('testModel')); const model2 = new TestModel({one: 1, two: 2}); wrapper.setProps({testModel: model2}); - await assert.async.equal(wrapper.find('TestComponent').prop('one'), 1); - await assert.async.equal(wrapper.find('TestComponent').prop('two'), 2); - await assert.async.equal(wrapper.find('TestComponent').prop('testModel'), model2); + await assert.async.equal(wrapper.update().find('TestComponent').prop('one'), 1); + await assert.async.equal(wrapper.update().find('TestComponent').prop('two'), 2); + await assert.async.equal(wrapper.update().find('TestComponent').prop('testModel'), model2); }); it('hosts static methods', function() { From 6c5ddd22b6b958e928aaacde3730627a771871f0 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 14:50:44 -0400 Subject: [PATCH 13/34] CloneDialog :white_check_mark: --- test/views/clone-dialog.test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/views/clone-dialog.test.js b/test/views/clone-dialog.test.js index 200732a459..fd3c9a1f39 100644 --- a/test/views/clone-dialog.test.js +++ b/test/views/clone-dialog.test.js @@ -69,6 +69,7 @@ describe('CloneDialog', function() { it('disables the clone button with no remote URL', function() { setTextIn('.github-ProjectPath atom-text-editor', path.join('somewhere', 'else')); setTextIn('.github-CloneUrl atom-text-editor', ''); + wrapper.update(); assert.isTrue(wrapper.find('button.icon-repo-clone').prop('disabled')); }); @@ -76,6 +77,7 @@ describe('CloneDialog', function() { it('disables the clone button with no project path', function() { setTextIn('.github-ProjectPath atom-text-editor', ''); setTextIn('.github-CloneUrl atom-text-editor', 'git@github.com:atom/github.git'); + wrapper.update(); assert.isTrue(wrapper.find('button.icon-repo-clone').prop('disabled')); }); @@ -83,6 +85,7 @@ describe('CloneDialog', function() { it('enables the clone button when both text boxes are populated', function() { setTextIn('.github-ProjectPath atom-text-editor', path.join('somewhere', 'else')); setTextIn('.github-CloneUrl atom-text-editor', 'git@github.com:atom/github.git'); + wrapper.update(); assert.isFalse(wrapper.find('button.icon-repo-clone').prop('disabled')); }); From cfdc6c5f3bee793852d42cb9c3dd3723acb80898 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 14:53:08 -0400 Subject: [PATCH 14/34] CoAuthorForm :white_check_mark: --- test/views/co-author-form.test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/views/co-author-form.test.js b/test/views/co-author-form.test.js index 53ab56136b..cc1167f82f 100644 --- a/test/views/co-author-form.test.js +++ b/test/views/co-author-form.test.js @@ -35,7 +35,7 @@ describe('CoAuthorForm', function() { const name = 'Original Name'; app = React.cloneElement(app, {name}); wrapper = mount(app); - assert.strictEqual(wrapper.find('.github-CoAuthorForm-name').node.value, name); + assert.strictEqual(wrapper.find('.github-CoAuthorForm-name').prop('value'), name); }); }); @@ -60,7 +60,7 @@ describe('CoAuthorForm', function() { wrapper = mount(app); const submitButton = wrapper.find('.btn-primary'); - assert.isTrue(submitButton.node.disabled); + assert.isTrue(submitButton.prop('disabled')); submitButton.simulate('click'); assert.isFalse(didSubmit.called); }); @@ -74,7 +74,7 @@ describe('CoAuthorForm', function() { setTextIn('.github-CoAuthorForm-email', email); const submitButton = wrapper.find('.btn-primary'); - assert.isTrue(submitButton.node.disabled); + assert.isTrue(submitButton.prop('disabled')); submitButton.simulate('click'); assert.isFalse(didSubmit.called); }); @@ -89,7 +89,7 @@ describe('CoAuthorForm', function() { it('calls cancel prop when `core:cancel` is triggered', function() { wrapper = mount(app); - atomEnv.commands.dispatch(wrapper.find('.github-CoAuthorForm').getNode(), 'core:cancel'); + atomEnv.commands.dispatch(wrapper.find('.github-CoAuthorForm').getDOMNode(), 'core:cancel'); assert.isTrue(didCancel.called); }); }); From 388d8dd66aa2b68fa80469ff6891ebebad91c42e Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 15:30:49 -0400 Subject: [PATCH 15/34] CommitView :white_check_mark: --- test/views/commit-view.test.js | 71 ++++++++++++++++------------------ 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/test/views/commit-view.test.js b/test/views/commit-view.test.js index f0dc1efc00..61474a5ea3 100644 --- a/test/views/commit-view.test.js +++ b/test/views/commit-view.test.js @@ -62,39 +62,38 @@ describe('CommitView', function() { it('displays the remaining characters limit based on which line is being edited', function() { const wrapper = mount(app); - const remaining = wrapper.find('.github-CommitView-remaining-characters'); - assert.strictEqual(remaining.text(), '72'); + assert.strictEqual(wrapper.find('.github-CommitView-remaining-characters').text(), '72'); wrapper.setProps({message: 'abcde fghij'}); - assert.strictEqual(remaining.text(), '61'); - assert.isFalse(remaining.hasClass('is-error')); - assert.isFalse(remaining.hasClass('is-warning')); + assert.strictEqual(wrapper.find('.github-CommitView-remaining-characters').text(), '61'); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-error')); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-warning')); wrapper.setProps({message: '\nklmno'}); - assert.strictEqual(remaining.text(), '∞'); - assert.isFalse(remaining.hasClass('is-error')); - assert.isFalse(remaining.hasClass('is-warning')); + assert.strictEqual(wrapper.find('.github-CommitView-remaining-characters').text(), '∞'); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-error')); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-warning')); wrapper.setProps({message: 'abcde\npqrst'}); - assert.strictEqual(remaining.text(), '∞'); - assert.isFalse(remaining.hasClass('is-error')); - assert.isFalse(remaining.hasClass('is-warning')); + assert.strictEqual(wrapper.find('.github-CommitView-remaining-characters').text(), '∞'); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-error')); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-warning')); - wrapper.find('atom-text-editor').getNode().getModel().setCursorBufferPosition([0, 3]); + wrapper.find('atom-text-editor').getDOMNode().getModel().setCursorBufferPosition([0, 3]); wrapper.update(); - assert.strictEqual(remaining.text(), '67'); - assert.isFalse(remaining.hasClass('is-error')); - assert.isFalse(remaining.hasClass('is-warning')); + assert.strictEqual(wrapper.find('.github-CommitView-remaining-characters').text(), '67'); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-error')); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-warning')); wrapper.setProps({stagedChangesExist: true, maximumCharacterLimit: 50}); - assert.strictEqual(remaining.text(), '45'); - assert.isFalse(remaining.hasClass('is-error')); - assert.isFalse(remaining.hasClass('is-warning')); + assert.strictEqual(wrapper.find('.github-CommitView-remaining-characters').text(), '45'); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-error')); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-warning')); wrapper.setProps({message: 'a'.repeat(41)}); - assert.strictEqual(remaining.text(), '9'); - assert.isFalse(remaining.hasClass('is-error')); - assert.isTrue(remaining.hasClass('is-warning')); + assert.strictEqual(wrapper.find('.github-CommitView-remaining-characters').text(), '9'); + assert.isFalse(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-error')); + assert.isTrue(wrapper.find('.github-CommitView-remaining-characters').hasClass('is-warning')); wrapper.setProps({message: 'a'.repeat(58)}); assert.strictEqual(wrapper.find('.github-CommitView-remaining-characters').text(), '-8'); @@ -103,7 +102,7 @@ describe('CommitView', function() { }); describe('the commit button', function() { - let wrapper, commitButton; + let wrapper; beforeEach(async function() { const workdirPath = await cloneRepository('three-files'); @@ -116,53 +115,51 @@ describe('CommitView', function() { message: 'something', }); wrapper = mount(app); - - commitButton = wrapper.find('.github-CommitView-commit'); }); it('is disabled when no changes are staged', function() { wrapper.setProps({stagedChangesExist: false}); - assert.isTrue(commitButton.prop('disabled')); + assert.isTrue(wrapper.find('.github-CommitView-commit').prop('disabled')); wrapper.setProps({stagedChangesExist: true}); - assert.isFalse(commitButton.prop('disabled')); + assert.isFalse(wrapper.find('.github-CommitView-commit').prop('disabled')); }); it('is disabled when there are merge conflicts', function() { wrapper.setProps({mergeConflictsExist: true}); - assert.isTrue(commitButton.prop('disabled')); + assert.isTrue(wrapper.find('.github-CommitView-commit').prop('disabled')); wrapper.setProps({mergeConflictsExist: false}); - assert.isFalse(commitButton.prop('disabled')); + assert.isFalse(wrapper.find('.github-CommitView-commit').prop('disabled')); }); it('is disabled when the commit message is empty', function() { wrapper.setProps({message: ''}); - assert.isTrue(commitButton.prop('disabled')); + assert.isTrue(wrapper.find('.github-CommitView-commit').prop('disabled')); wrapper.setProps({message: 'Not empty'}); - assert.isFalse(commitButton.prop('disabled')); + assert.isFalse(wrapper.find('.github-CommitView-commit').prop('disabled')); }); it('displays the current branch name', function() { const currentBranch = new Branch('aw-do-the-stuff'); wrapper.setProps({currentBranch}); - assert.strictEqual(commitButton.text(), 'Commit to aw-do-the-stuff'); + assert.strictEqual(wrapper.find('.github-CommitView-commit').text(), 'Commit to aw-do-the-stuff'); }); it('indicates when a commit will be detached', function() { const currentBranch = Branch.createDetached('master~3'); wrapper.setProps({currentBranch}); - assert.strictEqual(commitButton.text(), 'Create detached commit'); + assert.strictEqual(wrapper.find('.github-CommitView-commit').text(), 'Create detached commit'); }); it('displays a progress message while committing', function() { wrapper.setState({showWorking: true}); - assert.strictEqual(commitButton.text(), 'Working...'); + assert.strictEqual(wrapper.find('.github-CommitView-commit').text(), 'Working...'); }); it('falls back to "commit" with no current branch', function() { - assert.strictEqual(commitButton.text(), 'Commit'); + assert.strictEqual(wrapper.find('.github-CommitView-commit').text(), 'Commit'); }); }); @@ -177,16 +174,15 @@ describe('CommitView', function() { app = React.cloneElement(app, {stagedChangesExist: true, prepareToCommit, commit, message: 'Something'}); wrapper = mount(app); - editorElement = wrapper.find('atom-text-editor').getNode(); + editorElement = wrapper.find('atom-text-editor').getDOMNode(); sinon.spy(editorElement, 'focus'); editor = editorElement.getModel(); // Perform an extra render to ensure the editor text is reflected in the commit button enablement. // The controller accomplishes this by re-rendering on Repository update. - wrapper.update(); + wrapper.setProps({}); commitButton = wrapper.find('.github-CommitView-commit'); - workspaceElement = atomEnv.views.getView(atomEnv.workspace); }); @@ -196,6 +192,7 @@ describe('CommitView', function() { }); it('calls props.commit(message) when the commit button is clicked', async function() { + wrapper.update(); commitButton.simulate('click'); await assert.async.isTrue(commit.calledWith('Something')); From ecedd74253454017212ed01a236c426adf990ec8 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 15:59:56 -0400 Subject: [PATCH 16/34] All but one of the FilePatchView tests --- test/views/file-patch-view.test.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/views/file-patch-view.test.js b/test/views/file-patch-view.test.js index 4292216d0e..59132587d3 100644 --- a/test/views/file-patch-view.test.js +++ b/test/views/file-patch-view.test.js @@ -82,6 +82,7 @@ describe('FilePatchView', function() { getHunkView(0).prop('mousedownOnLine')({button: 0, detail: 1}, hunks[0], hunks[0].lines[2]); getHunkView(1).prop('mousemoveOnLine')({}, hunks[1], hunks[1].lines[1]); wrapper.instance().mouseup(); + wrapper.update(); assert.isTrue(getHunkView(0).prop('isSelected')); assert.isTrue(getHunkView(0).prop('selectedLines').has(hunks[0].lines[2])); @@ -91,6 +92,7 @@ describe('FilePatchView', function() { // start a new selection, drag it across an existing selection getHunkView(1).prop('mousedownOnLine')({button: 0, detail: 1, metaKey: true}, hunks[1], hunks[1].lines[3]); getHunkView(0).prop('mousemoveOnLine')({}, hunks[0], hunks[0].lines[0]); + wrapper.update(); assert.isTrue(getHunkView(0).prop('isSelected')); assert.isTrue(getHunkView(0).prop('selectedLines').has(hunks[0].lines[1])); @@ -102,6 +104,7 @@ describe('FilePatchView', function() { // drag back down without releasing mouse; the other selection remains intact getHunkView(1).prop('mousemoveOnLine')({}, hunks[1], hunks[1].lines[3]); + wrapper.update(); assert.isTrue(getHunkView(0).prop('isSelected')); assert.isFalse(getHunkView(0).prop('selectedLines').has(hunks[0].lines[1])); @@ -114,6 +117,7 @@ describe('FilePatchView', function() { // drag back up so selections are adjacent, then release the mouse. selections should merge. getHunkView(1).prop('mousemoveOnLine')({}, hunks[1], hunks[1].lines[2]); wrapper.instance().mouseup(); + wrapper.update(); assert.isTrue(getHunkView(0).prop('isSelected')); assert.isTrue(getHunkView(0).prop('selectedLines').has(hunks[0].lines[2])); @@ -124,12 +128,14 @@ describe('FilePatchView', function() { // we detect merged selections based on the head here wrapper.instance().selectToNext(); + wrapper.update(); assert.isFalse(getHunkView(0).prop('isSelected')); assert.isFalse(getHunkView(0).prop('selectedLines').has(hunks[0].lines[2])); // double-clicking clears the existing selection and starts hunk-wise selection getHunkView(0).prop('mousedownOnLine')({button: 0, detail: 2}, hunks[0], hunks[0].lines[2]); + wrapper.update(); assert.isTrue(getHunkView(0).prop('isSelected')); assert.isTrue(getHunkView(0).prop('selectedLines').has(hunks[0].lines[1])); @@ -137,6 +143,7 @@ describe('FilePatchView', function() { assert.isFalse(getHunkView(1).prop('isSelected')); getHunkView(1).prop('mousemoveOnLine')({}, hunks[1], hunks[1].lines[1]); + wrapper.update(); assert.isTrue(getHunkView(0).prop('isSelected')); assert.isTrue(getHunkView(0).prop('selectedLines').has(hunks[0].lines[1])); @@ -148,6 +155,7 @@ describe('FilePatchView', function() { // clicking the header clears the existing selection and starts hunk-wise selection getHunkView(0).prop('mousedownOnHeader')({button: 0, detail: 1}, hunks[0], hunks[0].lines[2]); + wrapper.update(); assert.isTrue(getHunkView(0).prop('isSelected')); assert.isTrue(getHunkView(0).prop('selectedLines').has(hunks[0].lines[1])); @@ -155,6 +163,7 @@ describe('FilePatchView', function() { assert.isFalse(getHunkView(1).prop('isSelected')); getHunkView(1).prop('mousemoveOnLine')({}, hunks[1], hunks[1].lines[1]); + wrapper.update(); assert.isTrue(getHunkView(0).prop('isSelected')); assert.isTrue(getHunkView(0).prop('selectedLines').has(hunks[0].lines[1])); @@ -470,6 +479,7 @@ describe('FilePatchView', function() { assert.equal(wrapper.find('HunkView').prop('stageButtonLabel'), 'Unstage Hunk'); wrapper.instance().togglePatchSelectionMode(); + wrapper.update(); assert.equal(wrapper.find('HunkView').prop('stageButtonLabel'), 'Unstage Selection'); wrapper.setProps({stagingStatus: 'unstaged'}); From e262eccb1ae189a6522d23a12e8eddf4bc048ae8 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Wed, 11 Apr 2018 16:02:16 -0400 Subject: [PATCH 17/34] InitDialog :white_check_mark: --- test/views/init-dialog.test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/views/init-dialog.test.js b/test/views/init-dialog.test.js index 3991558c49..974f7e5d8f 100644 --- a/test/views/init-dialog.test.js +++ b/test/views/init-dialog.test.js @@ -34,6 +34,7 @@ describe('InitDialog', function() { const setTextIn = function(selector, text) { wrapper.find(selector).getDOMNode().getModel().setText(text); + wrapper.update(); }; it('defaults to your project home path', function() { From e9bb35c1f6e22d0eb402ce62057c6e32f8ed04b8 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 10:13:58 -0400 Subject: [PATCH 18/34] RefHolder to operate on refs captured by parent components --- lib/models/ref-holder.js | 86 ++++++++++++++++++++++++++++++++++ test/models/ref-holder.test.js | 68 +++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 lib/models/ref-holder.js create mode 100644 test/models/ref-holder.test.js diff --git a/lib/models/ref-holder.js b/lib/models/ref-holder.js new file mode 100644 index 0000000000..a0c095cf19 --- /dev/null +++ b/lib/models/ref-holder.js @@ -0,0 +1,86 @@ +import {Emitter} from 'event-kit'; + +/* + * Allow child components to operate on refs captured by a parent component. + * + * React does not guarantee that refs are available until the component has finished mounting (before + * componentDidMount() is called), but a component does not finish mounting until all of its children are mounted. This + * causes problems when a child needs to consume a DOM node from its parent to interact with the Atom API, like we do in + * the `Tooltip` and `Commands` components. + * + * To pass a ref to a child, capture it in a RefHolder in the parent, and pass the RefHolder to the child: + * + * class Parent extends React.Component { + * constructor() { + * this.theRef = new RefHolder(); + * } + * + * render() { + * return ( + *
+ * + *
+ * ) + * } + * } + * + * In the child, use the `observe()` method to defer operations that need the DOM node to proceed: + * + * class Child extends React.Component { + * + * componentDidMount() { + * this.props.theRef.observe(domNode => this.register(domNode)) + * } + * + * render() { + * return null; + * } + * + * register(domNode) { + * console.log('Hey look I have a real DOM node', domNode); + * } + * } + */ +export default class RefHolder { + constructor() { + this.emitter = new Emitter(); + this.value = undefined; + } + + isEmpty() { + return this.value === undefined; + } + + get() { + if (this.isEmpty()) { + throw new Error('RefHolder is empty'); + } + return this.value; + } + + setter = value => { + if (value === null || value === undefined) { return; } + const oldValue = this.value; + this.value = value; + if (value !== oldValue) { + this.emitter.emit('did-update', value); + } + } + + observe(callback) { + if (!this.isEmpty()) { + callback(this.value); + } + return this.emitter.on('did-update', callback); + } + + static on(valueOrHolder) { + if (valueOrHolder instanceof this) { + return valueOrHolder; + } else { + const holder = new this(); + holder.setter(valueOrHolder); + return holder; + } + } +} diff --git a/test/models/ref-holder.test.js b/test/models/ref-holder.test.js new file mode 100644 index 0000000000..97a62791fd --- /dev/null +++ b/test/models/ref-holder.test.js @@ -0,0 +1,68 @@ +import RefHolder from '../../lib/models/ref-holder'; + +describe('RefHolder', function() { + let sub; + + afterEach(function() { + if (sub) { sub.dispose(); } + }); + + it('begins empty', function() { + const h = new RefHolder(); + assert.isTrue(h.isEmpty()); + assert.throws(() => h.get(), /empty/); + }); + + it('does not become populated when assigned null', function() { + const h = new RefHolder(); + h.setter(null); + assert.isTrue(h.isEmpty()); + }); + + it('provides synchronous access to its current value', function() { + const h = new RefHolder(); + h.setter(1234); + assert.isFalse(h.isEmpty()); + assert.strictEqual(h.get(), 1234); + }); + + it('notifies subscribers when it becomes available', function() { + const h = new RefHolder(); + const callback = sinon.spy(); + sub = h.observe(callback); + + h.setter(1); + assert.isTrue(callback.calledWith(1)); + + h.setter(2); + assert.isTrue(callback.calledWith(2)); + + sub.dispose(); + + h.setter(3); + assert.isFalse(callback.calledWith(3)); + }); + + it('immediately notifies new subscribers if it is already available', function() { + const h = new RefHolder(); + h.setter(12); + + const callback = sinon.spy(); + sub = h.observe(callback); + assert.isTrue(callback.calledWith(12)); + }); + + describe('.on()', function() { + it('returns an existing RefHolder as-is', function() { + const original = new RefHolder(); + const wrapped = RefHolder.on(original); + assert.strictEqual(original, wrapped); + }); + + it('wraps a non-RefHolder value with a RefHolder set to it', function() { + const wrapped = RefHolder.on(9000); + assert.isFalse(wrapped.isEmpty()); + assert.strictEqual(wrapped.get(), 9000); + }); + }); +}); From 406622b737999330911e31380a2b8d798845e234 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 10:39:59 -0400 Subject: [PATCH 19/34] Use a RefHolder in Commands --- lib/views/commands.js | 34 ++++++++++++++++++++++++---------- test/views/commands.test.js | 19 +++++++++++++++++++ 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/lib/views/commands.js b/lib/views/commands.js index 9469592983..fdf8544dd0 100644 --- a/lib/views/commands.js +++ b/lib/views/commands.js @@ -1,7 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; +import {Disposable} from 'event-kit'; -import {DOMNodePropType} from '../prop-types'; +import {DOMNodePropType, RefHolderPropType} from '../prop-types'; +import RefHolder from '../models/ref-holder'; export default class Commands extends React.Component { static propTypes = { @@ -9,6 +11,7 @@ export default class Commands extends React.Component { target: PropTypes.oneOfType([ PropTypes.string, DOMNodePropType, + RefHolderPropType, ]).isRequired, children: PropTypes.oneOfType([ PropTypes.element, @@ -34,30 +37,41 @@ export class Command extends React.Component { target: PropTypes.oneOfType([ PropTypes.string, DOMNodePropType, + RefHolderPropType, ]), command: PropTypes.string.isRequired, callback: PropTypes.func.isRequired, } + constructor(props, context) { + super(props, context); + this.subTarget = new Disposable(); + this.subCommand = new Disposable(); + } + componentDidMount() { - this.registerCommand(this.props); + this.observeTarget(this.props); } componentWillReceiveProps(newProps) { - for (const prop of ['registry', 'target', 'command', 'callback']) { - if (newProps[prop] !== this.props[prop]) { - this.disposable.dispose(); - this.registerCommand(newProps); - } + if (['registry', 'target', 'command', 'callback'].some(p => newProps[p] !== this.props[p])) { + this.observeTarget(newProps); } } componentWillUnmount() { - this.disposable.dispose(); + this.subTarget.dispose(); + this.subCommand.dispose(); + } + + observeTarget(props) { + this.subTarget.dispose(); + this.subTarget = RefHolder.on(props.target).observe(t => this.registerCommand(t, props)); } - registerCommand({registry, target, command, callback}) { - this.disposable = registry.add(target, command, callback); + registerCommand(target, {registry, command, callback}) { + this.subCommand.dispose(); + this.subCommand = registry.add(target, command, callback); } render() { diff --git a/test/views/commands.test.js b/test/views/commands.test.js index 3882cd5633..7030296d2d 100644 --- a/test/views/commands.test.js +++ b/test/views/commands.test.js @@ -2,6 +2,7 @@ import React from 'react'; import {mount} from 'enzyme'; import Commands, {Command} from '../../lib/views/commands'; +import RefHolder from '../../lib/models/ref-holder'; describe('Commands', function() { let atomEnv, commandRegistry; @@ -89,4 +90,22 @@ describe('Commands', function() { assert.equal(callback1.callCount, 0); assert.equal(callback2.callCount, 1); }); + + it('allows the target prop to be a RefHolder to capture refs from parent components', function() { + const callback = sinon.spy(); + const holder = new RefHolder(); + mount( + + + , + ); + + const element = document.createElement('div'); + commandRegistry.dispatch(element, 'github:do-thing'); + assert.isFalse(callback.called); + + holder.setter(element); + commandRegistry.dispatch(element, 'github:do-thing'); + assert.isTrue(callback.called); + }); }); From e693a443f3de16c720df5992f110acbaba179a73 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 10:42:58 -0400 Subject: [PATCH 20/34] RefHolder prop type --- lib/prop-types.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/prop-types.js b/lib/prop-types.js index dd39e732a6..786dfd4042 100644 --- a/lib/prop-types.js +++ b/lib/prop-types.js @@ -57,3 +57,10 @@ export const RelayConnectionPropType = nodePropType => PropTypes.shape({ }), totalCount: PropTypes.number, }); + +export const RefHolderPropType = PropTypes.shape({ + isEmpty: PropTypes.func.isRequired, + get: PropTypes.func.isRequired, + setter: PropTypes.func.isRequired, + observe: PropTypes.func.isRequired, +}); From 911ab2d692d57756f21c188aed350fa125a6c1ec Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 10:43:15 -0400 Subject: [PATCH 21/34] Use a RefHolder to pass a DOM node from FilePatchView --- lib/views/file-patch-view.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/views/file-patch-view.js b/lib/views/file-patch-view.js index d023e03750..8da207b76d 100644 --- a/lib/views/file-patch-view.js +++ b/lib/views/file-patch-view.js @@ -10,6 +10,7 @@ import SimpleTooltip from './simple-tooltip'; import Commands, {Command} from './commands'; import FilePatchSelection from './file-patch-selection'; import Switchboard from '../switchboard'; +import RefHolder from '../models/ref-holder'; const executableText = { 100644: 'non executable 100644', @@ -61,6 +62,8 @@ export default class FilePatchView extends React.Component { this.mouseSelectionInProgress = false; this.disposables = new CompositeDisposable(); + this.refElement = new RefHolder(); + this.state = { selection: new FilePatchSelection(this.props.hunks), }; @@ -204,9 +207,9 @@ export default class FilePatchView extends React.Component { className={cx('github-FilePatchView', {'is-staged': !unstaged, 'is-unstaged': unstaged})} tabIndex="-1" onMouseUp={this.mouseup} - ref={e => { this.element = e; }}> + ref={this.refElement.setter}> - {this.element && this.registerCommands()} + {this.registerCommands()}
@@ -229,7 +232,7 @@ export default class FilePatchView extends React.Component { registerCommands() { return (
- + @@ -687,7 +690,7 @@ export default class FilePatchView extends React.Component { @autobind focus() { - this.element.focus(); + this.refElement.get().focus(); } @autobind From efce5f09c56709ec353f5df2aebbe99b43beb976 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 11:13:51 -0400 Subject: [PATCH 22/34] Is that test flaky now? --- test/controllers/file-patch-controller.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index 04817450ad..23863a0fdd 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -557,7 +557,7 @@ describe('FilePatchController', function() { assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), originalLines.join('\n')); }); - it('stages and unstages individual lines when the stage button is clicked on a hunk with selected lines', async function() { + it.stress(200, 'stages and unstages individual lines when the stage button is clicked on a hunk with selected lines', async function() { const absFilePath = path.join(workdirPath, filePath); const originalLines = fs.readFileSync(absFilePath, 'utf8').split('\n'); From 9016e87c6847858db0ed4d34199d7b7cddfba47b Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 11:36:06 -0400 Subject: [PATCH 23/34] Log progress --- test/controllers/file-patch-controller.test.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index 23863a0fdd..30c4318548 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -576,6 +576,7 @@ describe('FilePatchController', function() { const wrapper = mount(component); await assert.async.isTrue(wrapper.update().find('HunkView').exists()); + console.log('0'); const opPromise0 = switchboard.getFinishStageOperationPromise(); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('LineView').at(1).find('.github-HunkView-line').simulate('mousedown', {button: 0, detail: 1}); @@ -583,6 +584,7 @@ describe('FilePatchController', function() { window.dispatchEvent(new MouseEvent('mouseup')); hunkView0.find('button.github-HunkView-stageButton').simulate('click'); await opPromise0; + console.log('1'); repository.refresh(); const expectedLines0 = originalLines.slice(); @@ -591,16 +593,20 @@ describe('FilePatchController', function() { 'this is a new line', ); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), expectedLines0.join('\n')); + console.log('2'); // stage remaining lines in hunk const updatePromise1 = switchboard.getChangePatchPromise(); const unstagedFilePatch1 = await repository.getFilePatchForPath('sample.js'); + console.log('3'); wrapper.setState({filePatch: unstagedFilePatch1}); await updatePromise1; + console.log('4'); const opPromise1 = switchboard.getFinishStageOperationPromise(); wrapper.find('HunkView').at(0).find('button.github-HunkView-stageButton').simulate('click'); await opPromise1; + console.log('5'); repository.refresh(); const expectedLines1 = originalLines.slice(); @@ -610,15 +616,18 @@ describe('FilePatchController', function() { 'this is another new line', ); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), expectedLines1.join('\n')); + console.log('6'); // unstage a subset of lines from the first hunk const updatePromise2 = switchboard.getChangePatchPromise(); const stagedFilePatch2 = await repository.getFilePatchForPath('sample.js', {staged: true}); + console.log('7'); wrapper.setState({ filePatch: stagedFilePatch2, stagingStatus: 'staged', }); await updatePromise2; + console.log('8'); const hunkView2 = wrapper.find('HunkView').at(0); hunkView2.find('LineView').at(1).find('.github-HunkView-line') @@ -631,6 +640,7 @@ describe('FilePatchController', function() { const opPromise2 = switchboard.getFinishStageOperationPromise(); hunkView2.find('button.github-HunkView-stageButton').simulate('click'); await opPromise2; + console.log('9'); repository.refresh(); const expectedLines2 = originalLines.slice(); @@ -639,10 +649,12 @@ describe('FilePatchController', function() { 'this is another new line', ); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), expectedLines2.join('\n')); + console.log('10'); // unstage the rest of the hunk const updatePromise3 = switchboard.getChangePatchPromise(); const stagedFilePatch3 = await repository.getFilePatchForPath('sample.js', {staged: true}); + console.log('11'); wrapper.setState({ filePatch: stagedFilePatch3, }); @@ -653,8 +665,10 @@ describe('FilePatchController', function() { const opPromise3 = switchboard.getFinishStageOperationPromise(); wrapper.find('HunkView').at(0).find('button.github-HunkView-stageButton').simulate('click'); await opPromise3; + console.log('12'); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), originalLines.join('\n')); + console.log('13'); }); // https://github.com/atom/github/issues/417 From 29d5547e38495c7b9a39ab3c44a857ba5ebf9466 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 11:59:44 -0400 Subject: [PATCH 24/34] Missed an await :eyes: --- test/controllers/file-patch-controller.test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index 30c4318548..4c3bb406e3 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -659,6 +659,7 @@ describe('FilePatchController', function() { filePatch: stagedFilePatch3, }); await updatePromise3; + console.log('11.5'); commandRegistry.dispatch(wrapper.find('FilePatchView').getDOMNode(), 'github:toggle-patch-selection-mode'); From 5fe71a178303b33d92e3dff0a2337a1ea03e1969 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 14:50:45 -0400 Subject: [PATCH 25/34] More console.logs --- lib/views/file-patch-view.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/views/file-patch-view.js b/lib/views/file-patch-view.js index 8da207b76d..6406e07ad3 100644 --- a/lib/views/file-patch-view.js +++ b/lib/views/file-patch-view.js @@ -75,17 +75,22 @@ export default class FilePatchView extends React.Component { } componentWillReceiveProps(nextProps) { + console.log('FilePatchView.componentWillReceiveProps: enter'); const hunksChanged = this.props.hunks.length !== nextProps.hunks.length || this.props.hunks.some((hunk, index) => hunk !== nextProps.hunks[index]); if (hunksChanged) { + console.log('FilePatchView.componentWillReceiveProps: updating hunks'); this.setState(prevState => { return { selection: prevState.selection.updateHunks(nextProps.hunks), }; }, () => { + console.log('FilePatchView.componentWillReceiveProps: setState() call for hunk update completed'); nextProps.switchboard.didChangePatch(); }); + } else { + console.log('FilePatchView.componentWillReceiveProps: hunks unchanged'); } } From 1e11dae7a3ee7229b7c9ab601e00709c6044bcc5 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 15:11:37 -0400 Subject: [PATCH 26/34] Log the hunks we're rendering --- lib/controllers/file-patch-controller.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/controllers/file-patch-controller.js b/lib/controllers/file-patch-controller.js index 1d071ca474..d52f3db33e 100644 --- a/lib/controllers/file-patch-controller.js +++ b/lib/controllers/file-patch-controller.js @@ -193,6 +193,8 @@ export default class FilePatchController extends React.Component {
); } else { + console.log(`rendering with hunks ${require('util').inspect(hunks, {depth: 4})}`); + // NOTE: Outer div is required for etch to render elements correctly const hasUndoHistory = repository ? this.hasUndoHistory() : false; return ( From 265f8142b0691b9a124f6d4fec94ecf888c1380e Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 15:11:44 -0400 Subject: [PATCH 27/34] Cut down the iterations --- test/controllers/file-patch-controller.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index 4c3bb406e3..2cc6a5684e 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -557,7 +557,7 @@ describe('FilePatchController', function() { assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), originalLines.join('\n')); }); - it.stress(200, 'stages and unstages individual lines when the stage button is clicked on a hunk with selected lines', async function() { + it.stress(75, 'stages and unstages individual lines when the stage button is clicked on a hunk with selected lines', async function() { const absFilePath = path.join(workdirPath, filePath); const originalLines = fs.readFileSync(absFilePath, 'utf8').split('\n'); From 030b034a1859dc2bd7f67d9bb568538f01a5513b Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 15:21:16 -0400 Subject: [PATCH 28/34] Report which FilePatch we're rendering when --- lib/controllers/file-patch-controller.js | 3 ++- test/controllers/file-patch-controller.test.js | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/controllers/file-patch-controller.js b/lib/controllers/file-patch-controller.js index d52f3db33e..64402a3e5f 100644 --- a/lib/controllers/file-patch-controller.js +++ b/lib/controllers/file-patch-controller.js @@ -193,7 +193,8 @@ export default class FilePatchController extends React.Component {
); } else { - console.log(`rendering with hunks ${require('util').inspect(hunks, {depth: 4})}`); + const fpName = fp ? (fp.name || '') : ''; + console.log(`rendering with hunks from ${fpName}`); // NOTE: Outer div is required for etch to render elements correctly const hasUndoHistory = repository ? this.hasUndoHistory() : false; diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index 2cc6a5684e..a89832863b 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -598,6 +598,7 @@ describe('FilePatchController', function() { // stage remaining lines in hunk const updatePromise1 = switchboard.getChangePatchPromise(); const unstagedFilePatch1 = await repository.getFilePatchForPath('sample.js'); + unstagedFilePatch1.name = 'unstagedFilePatch1'; console.log('3'); wrapper.setState({filePatch: unstagedFilePatch1}); await updatePromise1; @@ -621,6 +622,7 @@ describe('FilePatchController', function() { // unstage a subset of lines from the first hunk const updatePromise2 = switchboard.getChangePatchPromise(); const stagedFilePatch2 = await repository.getFilePatchForPath('sample.js', {staged: true}); + stagedFilePatch2.name = 'stagedFilePatch2'; console.log('7'); wrapper.setState({ filePatch: stagedFilePatch2, @@ -654,6 +656,7 @@ describe('FilePatchController', function() { // unstage the rest of the hunk const updatePromise3 = switchboard.getChangePatchPromise(); const stagedFilePatch3 = await repository.getFilePatchForPath('sample.js', {staged: true}); + stagedFilePatch3.name = 'stagedFilePatch3'; console.log('11'); wrapper.setState({ filePatch: stagedFilePatch3, From e84bad68772dd800db0721f02a76a762264e2463 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 16:30:16 -0400 Subject: [PATCH 29/34] Utility to await a full repository refresh --- lib/controllers/file-patch-controller.js | 17 +++++++- lib/switchboard.js | 1 + .../controllers/file-patch-controller.test.js | 39 ++++++++++++------- 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/lib/controllers/file-patch-controller.js b/lib/controllers/file-patch-controller.js index 64402a3e5f..d0ee0967bf 100644 --- a/lib/controllers/file-patch-controller.js +++ b/lib/controllers/file-patch-controller.js @@ -129,9 +129,18 @@ export default class FilePatchController extends React.Component { const staged = this.isStaged(); let filePatch = await this.getFilePatchForPath(this.props.filePath, staged); const isPartiallyStaged = await repository.isPartiallyStaged(this.props.filePath); + + const onFinish = () => { + this.props.switchboard.didFinishRepositoryRefresh(); + }; + if (filePatch) { this.resolveFilePatchLoadedPromise(); - if (!this.destroyed) { this.setState({filePatch, isPartiallyStaged}); } + if (!this.destroyed) { + this.setState({filePatch, isPartiallyStaged}, onFinish); + } else { + onFinish(); + } } else { const oldFilePatch = this.state.filePatch; if (oldFilePatch) { @@ -140,7 +149,11 @@ export default class FilePatchController extends React.Component { newFile: oldFilePatch.newFile.clone({mode: null, symlink: null}), patch: oldFilePatch.getPatch().clone({hunks: []}), }); - if (!this.destroyed) { this.setState({filePatch, isPartiallyStaged}); } + if (!this.destroyed) { + this.setState({filePatch, isPartiallyStaged}, onFinish); + } else { + onFinish(); + } } } } diff --git a/lib/switchboard.js b/lib/switchboard.js index 45a66603b6..423b61d504 100644 --- a/lib/switchboard.js +++ b/lib/switchboard.js @@ -63,6 +63,7 @@ export default class Switchboard { 'FinishActiveContextUpdate', 'FinishRender', 'FinishContextChangeRender', + 'FinishRepositoryRefresh', ].forEach(eventName => { Switchboard.prototype[`did${eventName}`] = function(payload) { this.did(eventName, payload); diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index a89832863b..b35f97748a 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -42,7 +42,6 @@ function createComponent(repository, filePath) { openFiles = sinon.spy(); getSelectedStagingViewItems = sinon.spy(); - getRepositoryForWorkdir = () => repository; resolutionProgress = new ResolutionProgress(); @@ -72,6 +71,16 @@ function createComponent(repository, filePath) { ); } +async function refreshRepository(wrapper) { + const workDir = wrapper.prop('workingDirectoryPath'); + const repository = wrapper.prop('getRepositoryForWorkdir')(workDir); + + const promise = wrapper.prop('switchboard').getFinishRepositoryRefreshPromise(); + repository.refresh(); + await promise; + wrapper.update(); +} + describe('FilePatchController', function() { afterEach(function() { atomEnv.destroy(); @@ -188,8 +197,7 @@ describe('FilePatchController', function() { assert.equal(wrapper.state('stagingStatus'), 'unstaged'); fs.writeFileSync(path.join(workdirPath, 'file.txt'), 'change\nand again!', 'utf8'); - repository.refresh(); - await wrapper.instance().onRepoRefresh(repository); + await refreshRepository(wrapper); assert.notEqual(originalFilePatch, wrapper.state('filePatch')); assert.equal(wrapper.state('stagingStatus'), 'unstaged'); @@ -339,7 +347,8 @@ describe('FilePatchController', function() { hunkView0.find('button.github-HunkView-stageButton').simulate('click'); await opPromise0; - repository.refresh(); + await refreshRepository(wrapper); + // index shows symlink deletions still staged, only a couple of lines have been unstaged assert.equal((await indexModeAndOid(repository, deletedSymlinkAddedFilePath)).mode, '100644'); assert.autocrlfEqual(await repository.readFileFromIndex(deletedSymlinkAddedFilePath), 'qux\nbaz\nzoo\n'); @@ -370,7 +379,8 @@ describe('FilePatchController', function() { hunkView0.find('button.github-HunkView-stageButton').simulate('click'); await opPromise0; - repository.refresh(); + await refreshRepository(wrapper); + // index shows symlink change has not been staged, a couple of lines have been deleted assert.equal((await indexModeAndOid(repository, deletedFileAddedSymlinkPath)).mode, '100644'); assert.autocrlfEqual(await repository.readFileFromIndex(deletedFileAddedSymlinkPath), 'foo\n\n'); @@ -403,7 +413,8 @@ describe('FilePatchController', function() { hunkView0.find('button.github-HunkView-stageButton').simulate('click'); await opPromise0; - repository.refresh(); + await refreshRepository(wrapper); + // index no longer shows file is symlink (symlink has been deleted), now a regular file with contents assert.equal((await indexModeAndOid(repository, deletedSymlinkAddedFilePath)).mode, '100644'); assert.autocrlfEqual(await repository.readFileFromIndex(deletedSymlinkAddedFilePath), 'foo\nbar\n'); @@ -434,7 +445,8 @@ describe('FilePatchController', function() { hunkView0.find('button.github-HunkView-stageButton').simulate('click'); await opPromise0; - repository.refresh(); + await refreshRepository(wrapper); + // index no longer shows file is symlink (symlink creation has been unstaged), shows contents of file that existed prior to symlink assert.equal((await indexModeAndOid(repository, deletedFileAddedSymlinkPath)).mode, '100644'); assert.autocrlfEqual(await repository.readFileFromIndex(deletedFileAddedSymlinkPath), 'bar\nbaz\n'); @@ -462,7 +474,8 @@ describe('FilePatchController', function() { hunkView0.find('button.github-HunkView-stageButton').simulate('click'); await opPromise0; - repository.refresh(); + await refreshRepository(wrapper); + // File is not on index, file deletion has been staged assert.isNull(await indexModeAndOid(repository, deletedFileAddedSymlinkPath)); const {stagedFiles, unstagedFiles} = await repository.getStatusesForChangedFiles(); @@ -494,7 +507,8 @@ describe('FilePatchController', function() { hunkView0.find('button.github-HunkView-stageButton').simulate('click'); await opPromise0; - repository.refresh(); + await refreshRepository(wrapper); + // File is not on index, file creation has been unstaged assert.isNull(await indexModeAndOid(repository, deletedSymlinkAddedFilePath)); const {stagedFiles, unstagedFiles} = await repository.getStatusesForChangedFiles(); @@ -586,7 +600,6 @@ describe('FilePatchController', function() { await opPromise0; console.log('1'); - repository.refresh(); const expectedLines0 = originalLines.slice(); expectedLines0.splice(1, 1, 'this is a modified line', @@ -609,7 +622,6 @@ describe('FilePatchController', function() { await opPromise1; console.log('5'); - repository.refresh(); const expectedLines1 = originalLines.slice(); expectedLines1.splice(1, 1, 'this is a modified line', @@ -644,7 +656,6 @@ describe('FilePatchController', function() { await opPromise2; console.log('9'); - repository.refresh(); const expectedLines2 = originalLines.slice(); expectedLines2.splice(2, 0, 'this is a new line', @@ -758,7 +769,7 @@ describe('FilePatchController', function() { const changePatchPromise = switchboard.getChangePatchPromise(); // assert that only line 1 has been staged - repository.refresh(); // clear the cached file patches + await refreshRepository(wrapper); // clear the cached file patches let expectedLines = originalLines.slice(); expectedLines.splice(1, 0, 'this is a modified line', @@ -812,7 +823,7 @@ describe('FilePatchController', function() { await hunk1StagingPromise; const patchPromise0 = switchboard.getChangePatchPromise(); - repository.refresh(); // clear the cached file patches + await refreshRepository(wrapper); // clear the cached file patches const modifiedFilePatch = await repository.getFilePatchForPath(filePath); wrapper.setState({filePatch: modifiedFilePatch}); await patchPromise0; From fafc1d322919acf79a0695079d9b3edd078b0848 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 16:30:37 -0400 Subject: [PATCH 30/34] :hocho: console.logs --- lib/views/file-patch-view.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/views/file-patch-view.js b/lib/views/file-patch-view.js index 6406e07ad3..8da207b76d 100644 --- a/lib/views/file-patch-view.js +++ b/lib/views/file-patch-view.js @@ -75,22 +75,17 @@ export default class FilePatchView extends React.Component { } componentWillReceiveProps(nextProps) { - console.log('FilePatchView.componentWillReceiveProps: enter'); const hunksChanged = this.props.hunks.length !== nextProps.hunks.length || this.props.hunks.some((hunk, index) => hunk !== nextProps.hunks[index]); if (hunksChanged) { - console.log('FilePatchView.componentWillReceiveProps: updating hunks'); this.setState(prevState => { return { selection: prevState.selection.updateHunks(nextProps.hunks), }; }, () => { - console.log('FilePatchView.componentWillReceiveProps: setState() call for hunk update completed'); nextProps.switchboard.didChangePatch(); }); - } else { - console.log('FilePatchView.componentWillReceiveProps: hunks unchanged'); } } From 7bdc8ed946e1f2d9af6c52629952bda0f09c9ed9 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 16:48:38 -0400 Subject: [PATCH 31/34] :fire: more diagnostics --- lib/controllers/file-patch-controller.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/controllers/file-patch-controller.js b/lib/controllers/file-patch-controller.js index d0ee0967bf..f8ccbc7904 100644 --- a/lib/controllers/file-patch-controller.js +++ b/lib/controllers/file-patch-controller.js @@ -206,9 +206,6 @@ export default class FilePatchController extends React.Component { ); } else { - const fpName = fp ? (fp.name || '') : ''; - console.log(`rendering with hunks from ${fpName}`); - // NOTE: Outer div is required for etch to render elements correctly const hasUndoHistory = repository ? this.hasUndoHistory() : false; return ( From 8dc266e0cff3937d839cc787cc84a43c0c9abdef Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 16:49:25 -0400 Subject: [PATCH 32/34] Use repository.refresh() to re-render with an updated patch --- .../controllers/file-patch-controller.test.js | 46 ++++++------------- 1 file changed, 13 insertions(+), 33 deletions(-) diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index b35f97748a..9317a70dd8 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -573,7 +573,6 @@ describe('FilePatchController', function() { it.stress(75, 'stages and unstages individual lines when the stage button is clicked on a hunk with selected lines', async function() { const absFilePath = path.join(workdirPath, filePath); - const originalLines = fs.readFileSync(absFilePath, 'utf8').split('\n'); // write some unstaged changes @@ -600,26 +599,24 @@ describe('FilePatchController', function() { await opPromise0; console.log('1'); + await refreshRepository(wrapper); + console.log('2'); + const expectedLines0 = originalLines.slice(); expectedLines0.splice(1, 1, 'this is a modified line', 'this is a new line', ); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), expectedLines0.join('\n')); - console.log('2'); - - // stage remaining lines in hunk - const updatePromise1 = switchboard.getChangePatchPromise(); - const unstagedFilePatch1 = await repository.getFilePatchForPath('sample.js'); - unstagedFilePatch1.name = 'unstagedFilePatch1'; console.log('3'); - wrapper.setState({filePatch: unstagedFilePatch1}); - await updatePromise1; - console.log('4'); + // stage remaining lines in hunk const opPromise1 = switchboard.getFinishStageOperationPromise(); wrapper.find('HunkView').at(0).find('button.github-HunkView-stageButton').simulate('click'); await opPromise1; + console.log('4'); + + await refreshRepository(wrapper); console.log('5'); const expectedLines1 = originalLines.slice(); @@ -632,16 +629,9 @@ describe('FilePatchController', function() { console.log('6'); // unstage a subset of lines from the first hunk - const updatePromise2 = switchboard.getChangePatchPromise(); - const stagedFilePatch2 = await repository.getFilePatchForPath('sample.js', {staged: true}); - stagedFilePatch2.name = 'stagedFilePatch2'; + wrapper.setState({stagingStatus: 'staged'}); + await refreshRepository(wrapper); console.log('7'); - wrapper.setState({ - filePatch: stagedFilePatch2, - stagingStatus: 'staged', - }); - await updatePromise2; - console.log('8'); const hunkView2 = wrapper.find('HunkView').at(0); hunkView2.find('LineView').at(1).find('.github-HunkView-line') @@ -654,7 +644,7 @@ describe('FilePatchController', function() { const opPromise2 = switchboard.getFinishStageOperationPromise(); hunkView2.find('button.github-HunkView-stageButton').simulate('click'); await opPromise2; - console.log('9'); + console.log('8'); const expectedLines2 = originalLines.slice(); expectedLines2.splice(2, 0, @@ -662,28 +652,18 @@ describe('FilePatchController', function() { 'this is another new line', ); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), expectedLines2.join('\n')); - console.log('10'); + console.log('9'); // unstage the rest of the hunk - const updatePromise3 = switchboard.getChangePatchPromise(); - const stagedFilePatch3 = await repository.getFilePatchForPath('sample.js', {staged: true}); - stagedFilePatch3.name = 'stagedFilePatch3'; - console.log('11'); - wrapper.setState({ - filePatch: stagedFilePatch3, - }); - await updatePromise3; - console.log('11.5'); - commandRegistry.dispatch(wrapper.find('FilePatchView').getDOMNode(), 'github:toggle-patch-selection-mode'); const opPromise3 = switchboard.getFinishStageOperationPromise(); wrapper.find('HunkView').at(0).find('button.github-HunkView-stageButton').simulate('click'); await opPromise3; - console.log('12'); + console.log('10'); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), originalLines.join('\n')); - console.log('13'); + console.log('11'); }); // https://github.com/atom/github/issues/417 From d30c68456f7ecb7d8065fc59d79954e859ac2ef1 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 16:51:43 -0400 Subject: [PATCH 33/34] Missed a necessary refresh --- test/controllers/file-patch-controller.test.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index 9317a70dd8..09b44b9240 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -646,13 +646,16 @@ describe('FilePatchController', function() { await opPromise2; console.log('8'); + await refreshRepository(wrapper); + console.log('9'); + const expectedLines2 = originalLines.slice(); expectedLines2.splice(2, 0, 'this is a new line', 'this is another new line', ); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), expectedLines2.join('\n')); - console.log('9'); + console.log('10'); // unstage the rest of the hunk commandRegistry.dispatch(wrapper.find('FilePatchView').getDOMNode(), 'github:toggle-patch-selection-mode'); @@ -660,10 +663,10 @@ describe('FilePatchController', function() { const opPromise3 = switchboard.getFinishStageOperationPromise(); wrapper.find('HunkView').at(0).find('button.github-HunkView-stageButton').simulate('click'); await opPromise3; - console.log('10'); + console.log('11'); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), originalLines.join('\n')); - console.log('11'); + console.log('12'); }); // https://github.com/atom/github/issues/417 From d4d245b0e4ed2c0b74751de80b0989942a82f8c3 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 16:59:02 -0400 Subject: [PATCH 34/34] :fire: console.log --- test/controllers/file-patch-controller.test.js | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/test/controllers/file-patch-controller.test.js b/test/controllers/file-patch-controller.test.js index 09b44b9240..7143f1fb81 100644 --- a/test/controllers/file-patch-controller.test.js +++ b/test/controllers/file-patch-controller.test.js @@ -571,7 +571,7 @@ describe('FilePatchController', function() { assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), originalLines.join('\n')); }); - it.stress(75, 'stages and unstages individual lines when the stage button is clicked on a hunk with selected lines', async function() { + it('stages and unstages individual lines when the stage button is clicked on a hunk with selected lines', async function() { const absFilePath = path.join(workdirPath, filePath); const originalLines = fs.readFileSync(absFilePath, 'utf8').split('\n'); @@ -589,7 +589,6 @@ describe('FilePatchController', function() { const wrapper = mount(component); await assert.async.isTrue(wrapper.update().find('HunkView').exists()); - console.log('0'); const opPromise0 = switchboard.getFinishStageOperationPromise(); const hunkView0 = wrapper.find('HunkView').at(0); hunkView0.find('LineView').at(1).find('.github-HunkView-line').simulate('mousedown', {button: 0, detail: 1}); @@ -597,10 +596,8 @@ describe('FilePatchController', function() { window.dispatchEvent(new MouseEvent('mouseup')); hunkView0.find('button.github-HunkView-stageButton').simulate('click'); await opPromise0; - console.log('1'); await refreshRepository(wrapper); - console.log('2'); const expectedLines0 = originalLines.slice(); expectedLines0.splice(1, 1, @@ -608,16 +605,13 @@ describe('FilePatchController', function() { 'this is a new line', ); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), expectedLines0.join('\n')); - console.log('3'); // stage remaining lines in hunk const opPromise1 = switchboard.getFinishStageOperationPromise(); wrapper.find('HunkView').at(0).find('button.github-HunkView-stageButton').simulate('click'); await opPromise1; - console.log('4'); await refreshRepository(wrapper); - console.log('5'); const expectedLines1 = originalLines.slice(); expectedLines1.splice(1, 1, @@ -626,12 +620,10 @@ describe('FilePatchController', function() { 'this is another new line', ); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), expectedLines1.join('\n')); - console.log('6'); // unstage a subset of lines from the first hunk wrapper.setState({stagingStatus: 'staged'}); await refreshRepository(wrapper); - console.log('7'); const hunkView2 = wrapper.find('HunkView').at(0); hunkView2.find('LineView').at(1).find('.github-HunkView-line') @@ -644,10 +636,8 @@ describe('FilePatchController', function() { const opPromise2 = switchboard.getFinishStageOperationPromise(); hunkView2.find('button.github-HunkView-stageButton').simulate('click'); await opPromise2; - console.log('8'); await refreshRepository(wrapper); - console.log('9'); const expectedLines2 = originalLines.slice(); expectedLines2.splice(2, 0, @@ -655,7 +645,6 @@ describe('FilePatchController', function() { 'this is another new line', ); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), expectedLines2.join('\n')); - console.log('10'); // unstage the rest of the hunk commandRegistry.dispatch(wrapper.find('FilePatchView').getDOMNode(), 'github:toggle-patch-selection-mode'); @@ -663,10 +652,8 @@ describe('FilePatchController', function() { const opPromise3 = switchboard.getFinishStageOperationPromise(); wrapper.find('HunkView').at(0).find('button.github-HunkView-stageButton').simulate('click'); await opPromise3; - console.log('11'); assert.autocrlfEqual(await repository.readFileFromIndex('sample.js'), originalLines.join('\n')); - console.log('12'); }); // https://github.com/atom/github/issues/417