diff --git a/package.json b/package.json index 613fa7fe..8391b82b 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "private": true, "devDependencies": { "babel-eslint": "^10.0.0", + "eslint-plugin-react": "7.4.0", "lerna": "3.4.2" }, "scripts": { diff --git a/packages/react-json-tree/.babelrc b/packages/react-json-tree/.babelrc new file mode 100644 index 00000000..6094aeaf --- /dev/null +++ b/packages/react-json-tree/.babelrc @@ -0,0 +1,16 @@ +{ + "plugins": [ + "transform-runtime", + "transform-es3-property-literals", + "transform-es3-member-expression-literals", + "transform-object-rest-spread", + "transform-class-properties" + ], + "presets": [[ + "env", + { + "loose": true, + "shippedProposals": true + } + ], "react"] +} diff --git a/packages/react-json-tree/.eslintignore b/packages/react-json-tree/.eslintignore new file mode 100644 index 00000000..cd3f61e1 --- /dev/null +++ b/packages/react-json-tree/.eslintignore @@ -0,0 +1,5 @@ +lib +**/node_modules +**/webpack.config.js +examples/**/server.js +examples/src/App.js diff --git a/packages/react-json-tree/.eslintrc b/packages/react-json-tree/.eslintrc new file mode 100644 index 00000000..8f30c735 --- /dev/null +++ b/packages/react-json-tree/.eslintrc @@ -0,0 +1,53 @@ +{ + "parser": "babel-eslint", + "extends": [ + "eslint:recommended", + "standard", + "plugin:react/recommended", + "prettier" + ], + "env": { + "browser": true, + "mocha": true, + "node": true + }, + "rules": { + "no-restricted-syntax": 0, + "comma-dangle": 0, + "no-param-reassign": 0, + "space-infix-ops": 0, + "react/sort-comp": [ + 1, { + "order": [ + "static-methods", + "constructor", + "lifecycle", + "everything-else", + "render", + "/^handle.+$/" + ], + "groups": { + "lifecycle": [ + "childContextTypes", + "getInitialState", + "state", + "getChildContext", + "componentWillMount", + "componentDidMount", + "componentWillReceiveProps", + "shouldComponentUpdate", + "componentWillUpdate", + "componentDidUpdate", + "componentWillUnmount" + ] + } + } + ] + }, + "plugins": [ + "prettier", + "standard", + "react", + "babel" + ] +} diff --git a/packages/react-json-tree/LICENSE.md b/packages/react-json-tree/LICENSE.md new file mode 100644 index 00000000..69ccc6cb --- /dev/null +++ b/packages/react-json-tree/LICENSE.md @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Shusaku Uesugi, (c) 2016-present Alexander Kuznetsov + + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/react-json-tree/README.md b/packages/react-json-tree/README.md new file mode 100644 index 00000000..41727260 --- /dev/null +++ b/packages/react-json-tree/README.md @@ -0,0 +1,155 @@ +# react-json-tree + +React JSON Viewer Component, Extracted from [redux-devtools](https://github.com/reduxjs/redux-devtools). Supports [iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable) objects, such as [Immutable.js](https://facebook.github.io/immutable-js/). + +![](https://img.shields.io/npm/v/react-json-tree.svg) + +### Usage + +```jsx +import JSONTree from 'react-json-tree' +// If you're using Immutable.js: `npm i --save immutable` +import { Map } from 'immutable' + +// Inside a React component: +const json = { + array: [1, 2, 3], + bool: true, + object: { + foo: 'bar' + }, + immutable: Map({ key: 'value' }) +} + + +``` + +#### Result: + +![](http://cl.ly/image/3f2C2k2t3D0o/screenshot%202015-08-26%20at%2010.24.12%20AM.png) + +Check out [examples](examples) directory for more details. + +### Theming + +This component now uses [react-base16-styling](https://github.com/alexkuz/react-base16-styling) module, which allows to customize component via `theme` property, which can be the following: +- [base16](http://chriskempson.github.io/base16) theme data. [The example theme data can be found here](https://github.com/gaearon/redux-devtools/tree/75322b15ee7ba03fddf10ac3399881e302848874/src/react/themes). +- object that contains style objects, strings (that treated as classnames) or functions. A function is used to extend its first argument `{ style, className }` and should return an object with the same structure. Other arguments depend on particular context (and should be described here). See [createStylingFromTheme.js](https://github.com/alexkuz/react-json-tree/blob/feature-refactor-styling/src/createStylingFromTheme.js) for the list of styling object keys. Also, this object can extend `base16` theme via `extend` property. + +Every theme has a light version, which is enabled with `invertTheme` prop. + +```jsx +const theme = { + scheme: 'monokai', + author: 'wimer hazenberg (http://www.monokai.nl)', + base00: '#272822', + base01: '#383830', + base02: '#49483e', + base03: '#75715e', + base04: '#a59f85', + base05: '#f8f8f2', + base06: '#f5f4f1', + base07: '#f9f8f5', + base08: '#f92672', + base09: '#fd971f', + base0A: '#f4bf75', + base0B: '#a6e22e', + base0C: '#a1efe4', + base0D: '#66d9ef', + base0E: '#ae81ff', + base0F: '#cc6633' +}; + +
+ +
+ +``` + +#### Result (Monokai theme, dark background): + +![](http://cl.ly/image/330o2L1J3V0h/screenshot%202015-08-26%20at%2010.48.24%20AM.png) + +#### Advanced Customization + +```jsx +
+ ({ + style: { + ...style, + textTransform: expanded ? 'uppercase' : style.textTransform + } + }) + }} /> +
+``` + +#### Customize Labels for Arrays, Objects, and Iterables + +You can pass `getItemString` to customize the way arrays, objects, and iterable nodes are displayed (optional). + +By default, it'll be: + +```jsx + {itemType} {itemString}} +``` + +But if you pass the following: + +```jsx +const getItemString = (type, data, itemType, itemString) + => ( // {type}); +``` + +Then the preview of child elements now look like this: + +![](http://cl.ly/image/1J1a0b0T0K3c/screenshot%202015-10-07%20at%203.44.31%20PM.png) + +#### Customize Rendering + +You can pass the following properties to customize rendered labels and values: + +```jsx + {raw}} + valueRenderer={raw => {raw}} +/> +``` + +In this example the label and value will be rendered with `` and `` wrappers respectively. + +For `labelRenderer`, you can provide a full path - [see this PR](https://github.com/chibicode/react-json-tree/pull/32). + +#### More Options + +- `shouldExpandNode: function(keyName, data, level)` - determines if node should be expanded (root is expanded by default) +- `hideRoot: Boolean` - if `true`, the root node is hidden. +- `sortObjectKeys: Boolean | function(a, b)` - sorts object keys with compare function (optional). Isn't applied to iterable maps like `Immutable.Map`. + +### Credits + +- All credits to [Dave Vedder](http://www.eskimospy.com/) ([veddermatic@gmail.com](mailto:veddermatic@gmail.com)), who wrote the original code as [JSONViewer](https://bitbucket.org/davevedder/react-json-viewer/). +- Extracted from [redux-devtools](https://github.com/gaearon/redux-devtools), which contained ES6 + inline style port of [JSONViewer](https://bitbucket.org/davevedder/react-json-viewer/) by [Daniele Zannotti](http://www.github.com/dzannotti) ([dzannotti@me.com](mailto:dzannotti@me.com)) +- [Iterable support](https://github.com/gaearon/redux-devtools/pull/79) thanks to [Daniel K](https://github.com/FredyC). +- npm package created by [Shu Uesugi](http://github.com/chibicode) ([shu@chibicode.com](mailto:shu@chibicode.com)) per [this issue](https://github.com/gaearon/redux-devtools/issues/85). +- Improved and maintained by [Alexander Kuznetsov](https://github.com/alexkuz). The repository was merged into [`redux-devtools` monorepo](https://github.com/reduxjs/redux-devtools) from [`alexkuz/react-json-tree`](https://github.com/alexkuz/react-json-tree). + +### Similar Libraries + +- [react-treeview](https://github.com/chenglou/react-treeview) +- [react-json-inspector](https://github.com/Lapple/react-json-inspector) +- [react-object-inspector](https://github.com/xyc/react-object-inspector) +- [react-json-view](https://github.com/mac-s-g/react-json-view) + +### License + +MIT diff --git a/packages/react-json-tree/examples/.babelrc b/packages/react-json-tree/examples/.babelrc new file mode 100755 index 00000000..422b2d38 --- /dev/null +++ b/packages/react-json-tree/examples/.babelrc @@ -0,0 +1,9 @@ +{ + "plugins": [ + "transform-object-rest-spread", + "transform-class-properties" + ], + "presets": [ + "env", "react" + ] +} diff --git a/packages/react-json-tree/examples/.eslintrc b/packages/react-json-tree/examples/.eslintrc new file mode 100755 index 00000000..1208b32d --- /dev/null +++ b/packages/react-json-tree/examples/.eslintrc @@ -0,0 +1,25 @@ +{ + "extends": [ + "eslint:recommended", + "standard", + "plugin:react/recommended", + "prettier" + ], + "env": { + "browser": true, + "node": true + }, + "parser": "babel-eslint", + "rules": { + "quotes": [2, "single"], + "strict": [2, "never"], + "react/jsx-uses-react": 2, + "react/jsx-uses-vars": 2, + "react/react-in-jsx-scope": 2 + }, + "plugins": [ + "prettier", + "standard", + "react" + ] +} diff --git a/packages/react-json-tree/examples/LICENSE b/packages/react-json-tree/examples/LICENSE new file mode 100755 index 00000000..44a03c28 --- /dev/null +++ b/packages/react-json-tree/examples/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Dan Abramov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/react-json-tree/examples/README.md b/packages/react-json-tree/examples/README.md new file mode 100755 index 00000000..4b77be16 --- /dev/null +++ b/packages/react-json-tree/examples/README.md @@ -0,0 +1,47 @@ +react-hot-boilerplate +===================== + +The minimal dev environment to enable live-editing React components. + +### Usage + +``` +npm install +npm start +open http://localhost:3000 +``` + +Now edit `src/App.js`. +Your changes will appear without reloading the browser like in [this video](http://vimeo.com/100010922). + +### Linting + +This boilerplate project includes React-friendly ESLint configuration. + +``` +npm run lint +``` + +### Using `0.0.0.0` as Host + +You may want to change the host in `server.js` and `webpack.config.js` from `localhost` to `0.0.0.0` to allow access from same WiFi network. This is not enabled by default because it is reported to cause problems on Windows. This may also be useful if you're using a VM. + +### Missing Features + +This boilerplate is purposefully simple to show the minimal configuration for React Hot Loader. For a real project, you'll want to add a separate config for production with hot reloading disabled and minification enabled. You'll also want to add a router, styles and maybe combine dev server with an existing server. This is out of scope of this boilerplate, but you may want to look into [other starter kits](https://github.com/gaearon/react-hot-loader/blob/master/docs/README.md#starter-kits). + +### Dependencies + +* React +* Webpack +* [webpack-dev-server](https://github.com/webpack/webpack-dev-server) +* [babel-loader](https://github.com/babel/babel-loader) +* [react-hot-loader](https://github.com/gaearon/react-hot-loader) + +### Resources + +* [Demo video](http://vimeo.com/100010922) +* [react-hot-loader on Github](https://github.com/gaearon/react-hot-loader) +* [Integrating JSX live reload into your workflow](http://gaearon.github.io/react-hot-loader/getstarted/) +* [Troubleshooting guide](https://github.com/gaearon/react-hot-loader/blob/master/docs/Troubleshooting.md) +* Ping dan_abramov on Twitter or #reactjs IRC diff --git a/packages/react-json-tree/examples/index.html b/packages/react-json-tree/examples/index.html new file mode 100755 index 00000000..1118d62a --- /dev/null +++ b/packages/react-json-tree/examples/index.html @@ -0,0 +1,17 @@ + + + Sample App + + + +
+
+ + + diff --git a/packages/react-json-tree/examples/package.json b/packages/react-json-tree/examples/package.json new file mode 100644 index 00000000..e3b6df2b --- /dev/null +++ b/packages/react-json-tree/examples/package.json @@ -0,0 +1,51 @@ +{ + "name": "react-json-tree-example", + "version": "1.0.0", + "description": "React-Json-Tree example", + "scripts": { + "start": "node server.js", + "lint": "eslint src", + "stats": "NODE_ENV=production webpack --json > dist/stats.json" + }, + "repository": { + "type": "git", + "url": "https://github.com/gaearon/react-hot-boilerplate.git" + }, + "keywords": [ + "react", + "reactjs", + "boilerplate", + "hot", + "reload", + "hmr", + "live", + "edit", + "webpack" + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/gaearon/react-hot-boilerplate/issues" + }, + "homepage": "https://github.com/gaearon/react-hot-boilerplate", + "devDependencies": { + "babel-core": "^6.26.0", + "babel-eslint": "^8.0.1", + "babel-loader": "^7.1.2", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-preset-react": "^6.5.0", + "eslint": "^4.10.0", + "eslint-plugin-babel": "^4.1.2", + "eslint-plugin-import": "^2.8.0", + "eslint-plugin-jsx-a11y": "^6.0.2", + "eslint-plugin-react": "^7.4.0", + "webpack": "^3.8.1", + "webpack-dev-server": "^2.4.1" + }, + "dependencies": { + "immutable": "^3.8.1", + "react": "^16.0.0", + "react-base16-styling": "^0.5.3", + "react-dom": "^16.0.0" + } +} diff --git a/packages/react-json-tree/examples/server.js b/packages/react-json-tree/examples/server.js new file mode 100755 index 00000000..5ac2b33b --- /dev/null +++ b/packages/react-json-tree/examples/server.js @@ -0,0 +1,15 @@ +var webpack = require('webpack'); +var WebpackDevServer = require('webpack-dev-server'); +var config = require('./webpack.config'); + +new WebpackDevServer(webpack(config), { + publicPath: config.output.publicPath, + hot: true, + historyApiFallback: true +}).listen(3000, 'localhost', function (err, result) { + if (err) { + console.log(err); + } + + console.log('Listening at localhost:3000'); +}); diff --git a/packages/react-json-tree/examples/src/App.js b/packages/react-json-tree/examples/src/App.js new file mode 100755 index 00000000..c9293f77 --- /dev/null +++ b/packages/react-json-tree/examples/src/App.js @@ -0,0 +1,193 @@ +import React from 'react'; +import { Map } from 'immutable'; +import JSONTree from '../../src'; + +const getLabelStyle = ({ style }, nodeType, expanded) => ({ + style: { + ...style, + textTransform: expanded ? 'uppercase' : style.textTransform + } +}); + +const getBoolStyle = ({ style }, nodeType) => ({ + style: { + ...style, + border: nodeType === 'Boolean' ? '1px solid #DD3333' : style.border, + borderRadius: nodeType === 'Boolean' ? 3 : style.borderRadius + } +}); + +const getItemString = type => ( + + {' // '} + {type} + +); + +const getValueLabelStyle = ({ style }, nodeType, keyPath) => ({ + style: { + ...style, + color: + !Number.isNaN(keyPath[0]) && !(parseInt(keyPath, 10) % 2) + ? '#33F' + : style.color + } +}); + +// eslint-disable-next-line max-len +const longString = + 'Loremipsumdolorsitamet,consecteturadipiscingelit.Namtempusipsumutfelisdignissimauctor.Maecenasodiolectus,finibusegetultricesvel,aliquamutelit.Loremipsumdolorsitamet,consecteturadipiscingelit.Namtempusipsumutfelisdignissimauctor.Maecenasodiolectus,finibusegetultricesvel,aliquamutelit.Loremipsumdolorsitamet,consecteturadipiscingelit.Namtempusipsumutfelisdignissimauctor.Maecenasodiolectus,finibusegetultricesvel,aliquamutelit.'; + +const Custom = function(value) { + this.value = value; +}; +Custom.prototype[Symbol.toStringTag] = 'Custom'; + +const data = { + array: [1, 2, 3], + emptyArray: [], + bool: true, + date: new Date(), + error: new Error(longString), + object: { + foo: { + bar: 'baz', + nested: { + moreNested: { + evenMoreNested: { + veryNested: { + insanelyNested: { + ridiculouslyDeepValue: 'Hello' + } + } + } + } + } + }, + baz: undefined, + func: function User() {} + }, + emptyObject: {}, + symbol: Symbol('value'), + // eslint-disable-next-line new-cap + immutable: Map([ + ['key', 'value'], + [{ objectKey: 'value' }, { objectKey: 'value' }] + ]), + map: new window.Map([ + ['key', 'value'], + [0, 'value'], + [{ objectKey: 'value' }, { objectKey: 'value' }] + ]), + weakMap: new window.WeakMap([ + [{ objectKey: 'value' }, { objectKey: 'value' }] + ]), + set: new window.Set(['value', 0, { objectKey: 'value' }]), + weakSet: new window.WeakSet([ + { objectKey: 'value1' }, + { objectKey: 'value2' } + ]), + hugeArray: Array.from({ length: 10000 }).map((_, i) => `item #${i}`), + customProfile: { + avatar: new Custom('placehold.it/50x50'), + name: new Custom('Name') + }, + longString +}; + +const theme = { + scheme: 'monokai', + author: 'wimer hazenberg (http://www.monokai.nl)', + base00: '#272822', + base01: '#383830', + base02: '#49483e', + base03: '#75715e', + base04: '#a59f85', + base05: '#f8f8f2', + base06: '#f5f4f1', + base07: '#f9f8f5', + base08: '#f92672', + base09: '#fd971f', + base0A: '#f4bf75', + base0B: '#a6e22e', + base0C: '#a1efe4', + base0D: '#66d9ef', + base0E: '#ae81ff', + base0F: '#cc6633' +}; + +const App = () => ( +
+ +
+

Dark Theme

+ +
+

Hidden Root

+ +
+

Base16 Greenscreen Theme

+ +

Inverted Theme

+ +
+

Style Customization

+
    +
  • + Label changes between uppercase/lowercase based on the expanded state. +
  • +
  • Array keys are styled based on their parity.
  • +
  • + The labels of objects, arrays, and iterables are customized as "// + type". +
  • +
  • See code for details.
  • +
+
+ +
+

More Fine Grained Rendering

+

+ Pass labelRenderer or valueRenderer. +

+
+ (({raw})):} + valueRenderer={raw => ( + + + 😐 + {' '} + {raw}{' '} + + 😐 + + + )} + /> +
+

+ Sort object keys with sortObjectKeys prop. +

+
+ +
+

Collapsed root node

+
+ false} /> +
+
+); + +export default App; diff --git a/packages/react-json-tree/examples/src/index.js b/packages/react-json-tree/examples/src/index.js new file mode 100755 index 00000000..aca61f2f --- /dev/null +++ b/packages/react-json-tree/examples/src/index.js @@ -0,0 +1,5 @@ +import { render } from 'react-dom'; +import React from 'react'; +import App from './App'; + +render(, document.getElementById('root')); diff --git a/packages/react-json-tree/examples/webpack.config.js b/packages/react-json-tree/examples/webpack.config.js new file mode 100755 index 00000000..8c781525 --- /dev/null +++ b/packages/react-json-tree/examples/webpack.config.js @@ -0,0 +1,51 @@ +var path = require('path'); +var webpack = require('webpack'); + +var isProduction = process.env.NODE_ENV === 'production'; + +module.exports = { + devtool: 'source-map', + entry: [ + !isProduction && 'webpack-dev-server/client?http://localhost:3000', + !isProduction && 'webpack/hot/only-dev-server', + './src/index' + ].filter(Boolean), + output: { + path: path.join(__dirname, 'dist'), + filename: 'bundle.js', + publicPath: '/static/' + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify(process.env.NODE_ENV) + } + }), + new webpack.HotModuleReplacementPlugin(), + new webpack.NoEmitOnErrorsPlugin(), + isProduction && new webpack.optimize.UglifyJsPlugin({ + compress: { warnings: false }, + output: { comments: false }, + sourceMap: true + }) + ].filter(Boolean), + resolve: { + alias: { + 'react-json-tree/lib': path.join(__dirname, '..', 'src'), + 'react-json-tree': path.join(__dirname, '..', 'src'), + 'react': path.join(__dirname, 'node_modules', 'react') + }, + extensions: ['.js'] + }, + module: { + loaders: [{ + test: /\.js$/, + loaders: ['babel-loader'].filter(Boolean), + include: path.join(__dirname, 'src') + }, { + test: /\.js$/, + loaders: ['babel-loader'].filter(Boolean), + include: path.join(__dirname, '..', 'src') + }] + } +}; diff --git a/packages/react-json-tree/package.json b/packages/react-json-tree/package.json new file mode 100644 index 00000000..96a32529 --- /dev/null +++ b/packages/react-json-tree/package.json @@ -0,0 +1,85 @@ +{ + "name": "react-json-tree", + "version": "0.11.1", + "description": "React JSON Viewer Component, Extracted from redux-devtools", + "main": "lib/index.js", + "scripts": { + "clean": "rimraf lib", + "build": "babel src --out-dir lib", + "lint": "eslint --max-warnings=0 src test examples/src", + "test": + "npm run lint && NODE_ENV=test mocha --compilers js:babel-core/register --recursive", + "test:watch": + "NODE_ENV=test mocha --compilers js:babel-core/register --recursive --watch", + "test:cov": + "babel-node ./node_modules/.bin/isparta cover ./node_modules/.bin/_mocha -- --recursive", + "prepare": "npm run build", + "prepublishOnly": "npm run test && npm run clean && npm run build", + "start": "cd examples && npm start", + "precommit": "lint-staged" + }, + "files": [ + "lib", + "src" + ], + "repository": { + "type": "git", + "url": "https://github.com/reduxjs/redux-devtools.git" + }, + "keywords": ["react", "json viewer"], + "author": "Shu Uesugi (http://github.com/chibicode)", + "contributors": [ + "Alexander Kuznetsov (http://kuzya.org/)", + "Dave Vedder (http://www.eskimospy.com/)", + "Daniele Zannotti (http://www.github.com/dzannotti)" + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/reduxjs/redux-devtools/issues" + }, + "homepage": "https://github.com/reduxjs/redux-devtools", + "devDependencies": { + "babel-cli": "^6.26.0", + "babel-core": "^6.26.0", + "babel-eslint": "^8.0.1", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-es3-member-expression-literals": "^6.22.0", + "babel-plugin-transform-es3-property-literals": "^6.22.0", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-preset-env": "^1.6.1", + "babel-preset-react": "^6.5.0", + "eslint": "^4.10", + "eslint-config-prettier": "^2.6.0", + "eslint-config-standard": "^10.2.1", + "eslint-plugin-babel": "^4.1.2", + "eslint-plugin-import": "^2.8.0", + "eslint-plugin-node": "^5.2.1", + "eslint-plugin-prettier": "^2.3.1", + "eslint-plugin-promise": "^3.6.0", + "eslint-plugin-react": "7.4.0", + "eslint-plugin-standard": "^3.0.1", + "expect": "^21.2.1", + "husky": "^0.14.3", + "isparta": "^4.0.0", + "lint-staged": "^4.3.0", + "mocha": "^4.0.1", + "prettier": "^1.7.4", + "react": "^16.0.0", + "react-dom": "^16.0.0", + "react-test-renderer": "^16.0.0", + "rimraf": "^2.5.2" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0", + "react-dom": "^15.0.0 || ^16.0.0" + }, + "dependencies": { + "babel-runtime": "^6.6.1", + "prop-types": "^15.5.8", + "react-base16-styling": "^0.5.1" + }, + "lint-staged": { + "*.{js,json,css}": ["prettier --single-quote --write", "git add"] + } +} diff --git a/packages/react-json-tree/src/ItemRange.js b/packages/react-json-tree/src/ItemRange.js new file mode 100644 index 00000000..f7ed29a8 --- /dev/null +++ b/packages/react-json-tree/src/ItemRange.js @@ -0,0 +1,48 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import JSONArrow from './JSONArrow'; + +export default class ItemRange extends React.Component { + static propTypes = { + styling: PropTypes.func.isRequired, + from: PropTypes.number.isRequired, + to: PropTypes.number.isRequired, + renderChildNodes: PropTypes.func.isRequired, + nodeType: PropTypes.string.isRequired + }; + + constructor(props) { + super(props); + this.state = { expanded: false }; + + this.handleClick = this.handleClick.bind(this); + } + + render() { + const { styling, from, to, renderChildNodes, nodeType } = this.props; + + return this.state.expanded ? ( +
+ {renderChildNodes(this.props, from, to)} +
+ ) : ( +
+ + {`${from} ... ${to}`} +
+ ); + } + + handleClick() { + this.setState({ expanded: !this.state.expanded }); + } +} diff --git a/packages/react-json-tree/src/JSONArrayNode.js b/packages/react-json-tree/src/JSONArrayNode.js new file mode 100644 index 00000000..98a95b84 --- /dev/null +++ b/packages/react-json-tree/src/JSONArrayNode.js @@ -0,0 +1,27 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import JSONNestedNode from './JSONNestedNode'; + +// Returns the "n Items" string for this node, +// generating and caching it if it hasn't been created yet. +function createItemString(data) { + return `${data.length} ${data.length !== 1 ? 'items' : 'item'}`; +} + +// Configures to render an Array +const JSONArrayNode = ({ data, ...props }) => ( + 0} + /> +); + +JSONArrayNode.propTypes = { + data: PropTypes.array +}; + +export default JSONArrayNode; diff --git a/packages/react-json-tree/src/JSONArrow.js b/packages/react-json-tree/src/JSONArrow.js new file mode 100644 index 00000000..138374e0 --- /dev/null +++ b/packages/react-json-tree/src/JSONArrow.js @@ -0,0 +1,27 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +const JSONArrow = ({ styling, arrowStyle, expanded, nodeType, onClick }) => ( +
+
+ {'\u25B6'} + {arrowStyle === 'double' && ( +
{'\u25B6'}
+ )} +
+
+); + +JSONArrow.propTypes = { + styling: PropTypes.func.isRequired, + arrowStyle: PropTypes.oneOf(['single', 'double']), + expanded: PropTypes.bool.isRequired, + nodeType: PropTypes.string.isRequired, + onClick: PropTypes.func.isRequired +}; + +JSONArrow.defaultProps = { + arrowStyle: 'single' +}; + +export default JSONArrow; diff --git a/packages/react-json-tree/src/JSONIterableNode.js b/packages/react-json-tree/src/JSONIterableNode.js new file mode 100644 index 00000000..f252481c --- /dev/null +++ b/packages/react-json-tree/src/JSONIterableNode.js @@ -0,0 +1,34 @@ +import React from 'react'; +import JSONNestedNode from './JSONNestedNode'; + +// Returns the "n Items" string for this node, +// generating and caching it if it hasn't been created yet. +function createItemString(data, limit) { + let count = 0; + let hasMore = false; + if (Number.isSafeInteger(data.size)) { + count = data.size; + } else { + // eslint-disable-next-line no-unused-vars + for (const entry of data) { + if (limit && count + 1 > limit) { + hasMore = true; + break; + } + count += 1; + } + } + return `${hasMore ? '>' : ''}${count} ${count !== 1 ? 'entries' : 'entry'}`; +} + +// Configures to render an iterable +export default function JSONIterableNode({ ...props }) { + return ( + + ); +} diff --git a/packages/react-json-tree/src/JSONNestedNode.js b/packages/react-json-tree/src/JSONNestedNode.js new file mode 100644 index 00000000..e19aa253 --- /dev/null +++ b/packages/react-json-tree/src/JSONNestedNode.js @@ -0,0 +1,204 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import JSONArrow from './JSONArrow'; +import getCollectionEntries from './getCollectionEntries'; +import JSONNode from './JSONNode'; +import ItemRange from './ItemRange'; + +/** + * Renders nested values (eg. objects, arrays, lists, etc.) + */ + +function renderChildNodes(props, from, to) { + const { + nodeType, + data, + collectionLimit, + circularCache, + keyPath, + postprocessValue, + sortObjectKeys + } = props; + const childNodes = []; + + getCollectionEntries( + nodeType, + data, + sortObjectKeys, + collectionLimit, + from, + to + ).forEach(entry => { + if (entry.to) { + childNodes.push( + + ); + } else { + const { key, value } = entry; + const isCircular = circularCache.indexOf(value) !== -1; + + const node = ( + + ); + + if (node !== false) { + childNodes.push(node); + } + } + }); + + return childNodes; +} + +function getStateFromProps(props) { + // calculate individual node expansion if necessary + const expanded = + props.shouldExpandNode && !props.isCircular + ? props.shouldExpandNode(props.keyPath, props.data, props.level) + : false; + return { + expanded + }; +} + +export default class JSONNestedNode extends React.Component { + static propTypes = { + getItemString: PropTypes.func.isRequired, + nodeTypeIndicator: PropTypes.any, + nodeType: PropTypes.string.isRequired, + data: PropTypes.any, + hideRoot: PropTypes.bool.isRequired, + createItemString: PropTypes.func.isRequired, + styling: PropTypes.func.isRequired, + collectionLimit: PropTypes.number, + keyPath: PropTypes.arrayOf( + PropTypes.oneOfType([PropTypes.string, PropTypes.number]) + ).isRequired, + labelRenderer: PropTypes.func.isRequired, + shouldExpandNode: PropTypes.func, + level: PropTypes.number.isRequired, + sortObjectKeys: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]), + isCircular: PropTypes.bool, + expandable: PropTypes.bool + }; + + static defaultProps = { + data: [], + circularCache: [], + level: 0, + expandable: true + }; + + constructor(props) { + super(props); + this.state = getStateFromProps(props); + } + + componentWillReceiveProps(nextProps) { + const nextState = getStateFromProps(nextProps); + if (getStateFromProps(this.props).expanded !== nextState.expanded) { + this.setState(nextState); + } + } + + shouldComponentUpdate(nextProps, nextState) { + return ( + !!Object.keys(nextProps).find( + key => + key !== 'circularCache' && + (key === 'keyPath' + ? nextProps[key].join('/') !== this.props[key].join('/') + : nextProps[key] !== this.props[key]) + ) || nextState.expanded !== this.state.expanded + ); + } + + render() { + const { + getItemString, + nodeTypeIndicator, + nodeType, + data, + hideRoot, + createItemString, + styling, + collectionLimit, + keyPath, + labelRenderer, + expandable + } = this.props; + const { expanded } = this.state; + const renderedChildren = + expanded || (hideRoot && this.props.level === 0) + ? renderChildNodes({ ...this.props, level: this.props.level + 1 }) + : null; + + const itemType = ( + + {nodeTypeIndicator} + + ); + const renderedItemString = getItemString( + nodeType, + data, + itemType, + createItemString(data, collectionLimit) + ); + const stylingArgs = [keyPath, nodeType, expanded, expandable]; + + return hideRoot ? ( +
  • +
      + {renderedChildren} +
    +
  • + ) : ( +
  • + {expandable && ( + + )} + + + {renderedItemString} + +
      + {renderedChildren} +
    +
  • + ); + } + + handleClick = () => { + if (this.props.expandable) { + this.setState({ expanded: !this.state.expanded }); + } + }; +} diff --git a/packages/react-json-tree/src/JSONNode.js b/packages/react-json-tree/src/JSONNode.js new file mode 100644 index 00000000..d8509bc2 --- /dev/null +++ b/packages/react-json-tree/src/JSONNode.js @@ -0,0 +1,106 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import objType from './objType'; +import JSONObjectNode from './JSONObjectNode'; +import JSONArrayNode from './JSONArrayNode'; +import JSONIterableNode from './JSONIterableNode'; +import JSONValueNode from './JSONValueNode'; + +const JSONNode = ({ + getItemString, + keyPath, + labelRenderer, + styling, + value, + valueRenderer, + isCustomNode, + ...rest +}) => { + const nodeType = isCustomNode(value) ? 'Custom' : objType(value); + + const simpleNodeProps = { + getItemString, + key: keyPath[0], + keyPath, + labelRenderer, + nodeType, + styling, + value, + valueRenderer + }; + + const nestedNodeProps = { + ...rest, + ...simpleNodeProps, + data: value, + isCustomNode + }; + + switch (nodeType) { + case 'Object': + case 'Error': + case 'WeakMap': + case 'WeakSet': + return ; + case 'Array': + return ; + case 'Iterable': + case 'Map': + case 'Set': + return ; + case 'String': + return ( + `"${raw}"`} /> + ); + case 'Number': + return ; + case 'Boolean': + return ( + (raw ? 'true' : 'false')} + /> + ); + case 'Date': + return ( + raw.toISOString()} + /> + ); + case 'Null': + return 'null'} />; + case 'Undefined': + return ( + 'undefined'} /> + ); + case 'Function': + case 'Symbol': + return ( + raw.toString()} + /> + ); + case 'Custom': + return ; + default: + return ( + `<${nodeType}>`} /> + ); + } +}; + +JSONNode.propTypes = { + getItemString: PropTypes.func.isRequired, + keyPath: PropTypes.arrayOf( + PropTypes.oneOfType([PropTypes.string, PropTypes.number]) + ).isRequired, + labelRenderer: PropTypes.func.isRequired, + styling: PropTypes.func.isRequired, + value: PropTypes.any, + valueRenderer: PropTypes.func.isRequired, + isCustomNode: PropTypes.func.isRequired +}; + +export default JSONNode; diff --git a/packages/react-json-tree/src/JSONObjectNode.js b/packages/react-json-tree/src/JSONObjectNode.js new file mode 100644 index 00000000..a8e55827 --- /dev/null +++ b/packages/react-json-tree/src/JSONObjectNode.js @@ -0,0 +1,29 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import JSONNestedNode from './JSONNestedNode'; + +// Returns the "n Items" string for this node, +// generating and caching it if it hasn't been created yet. +function createItemString(data) { + const len = Object.getOwnPropertyNames(data).length; + return `${len} ${len !== 1 ? 'keys' : 'key'}`; +} + +// Configures to render an Object +const JSONObjectNode = ({ data, ...props }) => ( + 0} + /> +); + +JSONObjectNode.propTypes = { + data: PropTypes.object, + nodeType: PropTypes.string +}; + +export default JSONObjectNode; diff --git a/packages/react-json-tree/src/JSONValueNode.js b/packages/react-json-tree/src/JSONValueNode.js new file mode 100644 index 00000000..1dd7e93b --- /dev/null +++ b/packages/react-json-tree/src/JSONValueNode.js @@ -0,0 +1,43 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +/** + * Renders simple values (eg. strings, numbers, booleans, etc) + */ + +const JSONValueNode = ({ + nodeType, + styling, + labelRenderer, + keyPath, + valueRenderer, + value, + valueGetter +}) => ( +
  • + + + {valueRenderer(valueGetter(value), value, ...keyPath)} + +
  • +); + +JSONValueNode.propTypes = { + nodeType: PropTypes.string.isRequired, + styling: PropTypes.func.isRequired, + labelRenderer: PropTypes.func.isRequired, + keyPath: PropTypes.arrayOf( + PropTypes.oneOfType([PropTypes.string, PropTypes.number]) + ).isRequired, + valueRenderer: PropTypes.func.isRequired, + value: PropTypes.any, + valueGetter: PropTypes.func +}; + +JSONValueNode.defaultProps = { + valueGetter: value => value +}; + +export default JSONValueNode; diff --git a/packages/react-json-tree/src/createStylingFromTheme.js b/packages/react-json-tree/src/createStylingFromTheme.js new file mode 100644 index 00000000..deb86ff4 --- /dev/null +++ b/packages/react-json-tree/src/createStylingFromTheme.js @@ -0,0 +1,189 @@ +import { createStyling } from 'react-base16-styling'; +import solarized from './themes/solarized'; + +const colorMap = theme => ({ + BACKGROUND_COLOR: theme.base00, + TEXT_COLOR: theme.base07, + STRING_COLOR: theme.base0B, + DATE_COLOR: theme.base0B, + NUMBER_COLOR: theme.base09, + BOOLEAN_COLOR: theme.base09, + NULL_COLOR: theme.base08, + UNDEFINED_COLOR: theme.base08, + FUNCTION_COLOR: theme.base08, + SYMBOL_COLOR: theme.base08, + LABEL_COLOR: theme.base0D, + ARROW_COLOR: theme.base0D, + ITEM_STRING_COLOR: theme.base0B, + ITEM_STRING_EXPANDED_COLOR: theme.base03 +}); + +const valueColorMap = colors => ({ + String: colors.STRING_COLOR, + Date: colors.DATE_COLOR, + Number: colors.NUMBER_COLOR, + Boolean: colors.BOOLEAN_COLOR, + Null: colors.NULL_COLOR, + Undefined: colors.UNDEFINED_COLOR, + Function: colors.FUNCTION_COLOR, + Symbol: colors.SYMBOL_COLOR +}); + +const getDefaultThemeStyling = theme => { + const colors = colorMap(theme); + + return { + tree: { + border: 0, + padding: 0, + marginTop: '0.5em', + marginBottom: '0.5em', + marginLeft: '0.125em', + marginRight: 0, + listStyle: 'none', + MozUserSelect: 'none', + WebkitUserSelect: 'none', + backgroundColor: colors.BACKGROUND_COLOR + }, + + value: ({ style }, nodeType, keyPath) => ({ + style: { + ...style, + paddingTop: '0.25em', + paddingRight: 0, + marginLeft: '0.875em', + WebkitUserSelect: 'text', + MozUserSelect: 'text', + wordWrap: 'break-word', + paddingLeft: keyPath.length > 1 ? '2.125em' : '1.25em', + textIndent: '-0.5em', + wordBreak: 'break-all' + } + }), + + label: { + display: 'inline-block', + color: colors.LABEL_COLOR + }, + + valueLabel: { + margin: '0 0.5em 0 0' + }, + + valueText: ({ style }, nodeType) => ({ + style: { + ...style, + color: valueColorMap(colors)[nodeType] + } + }), + + itemRange: (styling, expanded) => ({ + style: { + paddingTop: expanded ? 0 : '0.25em', + cursor: 'pointer', + color: colors.LABEL_COLOR + } + }), + + arrow: ({ style }, nodeType, expanded) => ({ + style: { + ...style, + marginLeft: 0, + transition: '150ms', + WebkitTransition: '150ms', + MozTransition: '150ms', + WebkitTransform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)', + MozTransform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)', + transform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)', + transformOrigin: '45% 50%', + WebkitTransformOrigin: '45% 50%', + MozTransformOrigin: '45% 50%', + position: 'relative', + lineHeight: '1.1em', + fontSize: '0.75em' + } + }), + + arrowContainer: ({ style }, arrowStyle) => ({ + style: { + ...style, + display: 'inline-block', + paddingRight: '0.5em', + paddingLeft: arrowStyle === 'double' ? '1em' : 0, + cursor: 'pointer' + } + }), + + arrowSign: { + color: colors.ARROW_COLOR + }, + + arrowSignInner: { + position: 'absolute', + top: 0, + left: '-0.4em' + }, + + nestedNode: ({ style }, keyPath, nodeType, expanded, expandable) => ({ + style: { + ...style, + position: 'relative', + paddingTop: '0.25em', + marginLeft: keyPath.length > 1 ? '0.875em' : 0, + paddingLeft: !expandable ? '1.125em' : 0 + } + }), + + rootNode: { + padding: 0, + margin: 0 + }, + + nestedNodeLabel: ({ style }, keyPath, nodeType, expanded, expandable) => ({ + style: { + ...style, + margin: 0, + padding: 0, + WebkitUserSelect: expandable ? 'inherit' : 'text', + MozUserSelect: expandable ? 'inherit' : 'text', + cursor: expandable ? 'pointer' : 'default' + } + }), + + nestedNodeItemString: ({ style }, keyPath, nodeType, expanded) => ({ + style: { + ...style, + paddingLeft: '0.5em', + cursor: 'default', + color: expanded + ? colors.ITEM_STRING_EXPANDED_COLOR + : colors.ITEM_STRING_COLOR + } + }), + + nestedNodeItemType: { + marginLeft: '0.3em', + marginRight: '0.3em' + }, + + nestedNodeChildren: ({ style }, nodeType, expanded) => ({ + style: { + ...style, + padding: 0, + margin: 0, + listStyle: 'none', + display: expanded ? 'block' : 'none' + } + }), + + rootNodeChildren: { + padding: 0, + margin: 0, + listStyle: 'none' + } + }; +}; + +export default createStyling(getDefaultThemeStyling, { + defaultBase16: solarized +}); diff --git a/packages/react-json-tree/src/getCollectionEntries.js b/packages/react-json-tree/src/getCollectionEntries.js new file mode 100644 index 00000000..2579bbe8 --- /dev/null +++ b/packages/react-json-tree/src/getCollectionEntries.js @@ -0,0 +1,139 @@ +function getLength(type, collection) { + if (type === 'Object') { + return Object.keys(collection).length; + } else if (type === 'Array') { + return collection.length; + } + + return Infinity; +} + +function isIterableMap(collection) { + return typeof collection.set === 'function'; +} + +function getEntries(type, collection, sortObjectKeys, from = 0, to = Infinity) { + let res; + + if (type === 'Object') { + let keys = Object.getOwnPropertyNames(collection); + + if (sortObjectKeys) { + keys.sort(sortObjectKeys === true ? undefined : sortObjectKeys); + } + + keys = keys.slice(from, to + 1); + + res = { + entries: keys.map(key => ({ key, value: collection[key] })) + }; + } else if (type === 'Array') { + res = { + entries: collection + .slice(from, to + 1) + .map((val, idx) => ({ key: idx + from, value: val })) + }; + } else { + let idx = 0; + const entries = []; + let done = true; + + const isMap = isIterableMap(collection); + + for (const item of collection) { + if (idx > to) { + done = false; + break; + } + if (from <= idx) { + if (isMap && Array.isArray(item)) { + if (typeof item[0] === 'string' || typeof item[0] === 'number') { + entries.push({ key: item[0], value: item[1] }); + } else { + entries.push({ + key: `[entry ${idx}]`, + value: { + '[key]': item[0], + '[value]': item[1] + } + }); + } + } else { + entries.push({ key: idx, value: item }); + } + } + idx++; + } + + res = { + hasMore: !done, + entries + }; + } + + return res; +} + +function getRanges(from, to, limit) { + const ranges = []; + while (to - from > limit * limit) { + limit = limit * limit; + } + for (let i = from; i <= to; i += limit) { + ranges.push({ from: i, to: Math.min(to, i + limit - 1) }); + } + + return ranges; +} + +export default function getCollectionEntries( + type, + collection, + sortObjectKeys, + limit, + from = 0, + to = Infinity +) { + const getEntriesBound = getEntries.bind( + null, + type, + collection, + sortObjectKeys + ); + + if (!limit) { + return getEntriesBound().entries; + } + + const isSubset = to < Infinity; + const length = Math.min(to - from, getLength(type, collection)); + + if (type !== 'Iterable') { + if (length <= limit || limit < 7) { + return getEntriesBound(from, to).entries; + } + } else { + if (length <= limit && !isSubset) { + return getEntriesBound(from, to).entries; + } + } + + let limitedEntries; + if (type === 'Iterable') { + const { hasMore, entries } = getEntriesBound(from, from + limit - 1); + + limitedEntries = hasMore + ? [...entries, ...getRanges(from + limit, from + 2 * limit - 1, limit)] + : entries; + } else { + limitedEntries = isSubset + ? getRanges(from, to, limit) + : [ + ...getEntriesBound(0, limit - 5).entries, + ...getRanges(limit - 4, length - 5, limit), + ...getEntriesBound(length - 4, length - 1).entries + ]; + } + + return limitedEntries; +} diff --git a/packages/react-json-tree/src/index.js b/packages/react-json-tree/src/index.js new file mode 100644 index 00000000..d5587e8d --- /dev/null +++ b/packages/react-json-tree/src/index.js @@ -0,0 +1,151 @@ +// ES6 + inline style port of JSONViewer https://bitbucket.org/davevedder/react-json-viewer/ +// all credits and original code to the author +// Dave Vedder http://www.eskimospy.com/ +// port by Daniele Zannotti http://www.github.com/dzannotti + +import React from 'react'; +import PropTypes from 'prop-types'; +import JSONNode from './JSONNode'; +import createStylingFromTheme from './createStylingFromTheme'; +import { invertTheme } from 'react-base16-styling'; + +const identity = value => value; +const expandRootNode = (keyName, data, level) => level === 0; +const defaultItemString = (type, data, itemType, itemString) => ( + + {itemType} {itemString} + +); +const defaultLabelRenderer = ([label]) => {label}:; +const noCustomNode = () => false; + +function checkLegacyTheming(theme, props) { + const deprecatedStylingMethodsMap = { + getArrowStyle: 'arrow', + getListStyle: 'nestedNodeChildren', + getItemStringStyle: 'nestedNodeItemString', + getLabelStyle: 'label', + getValueStyle: 'valueText' + }; + + const deprecatedStylingMethods = Object.keys( + deprecatedStylingMethodsMap + ).filter(name => props[name]); + + if (deprecatedStylingMethods.length > 0) { + if (typeof theme === 'string') { + theme = { + extend: theme + }; + } else { + theme = { ...theme }; + } + + deprecatedStylingMethods.forEach(name => { + // eslint-disable-next-line no-console + console.error( + `Styling method "${name}" is deprecated, use "theme" property instead` + ); + + theme[deprecatedStylingMethodsMap[name]] = ({ style }, ...args) => ({ + style: { + ...style, + ...props[name](...args) + } + }); + }); + } + + return theme; +} + +function getStateFromProps(props) { + let theme = checkLegacyTheming(props.theme, props); + if (props.invertTheme) { + if (typeof theme === 'string') { + theme = `${theme}:inverted`; + } else if (theme && theme.extend) { + if (typeof theme === 'string') { + theme = { ...theme, extend: `${theme.extend}:inverted` }; + } else { + theme = { ...theme, extend: invertTheme(theme.extend) }; + } + } else if (theme) { + theme = invertTheme(theme); + } + } + return { + styling: createStylingFromTheme(theme) + }; +} + +export default class JSONTree extends React.Component { + static propTypes = { + data: PropTypes.oneOfType([PropTypes.array, PropTypes.object]).isRequired, + hideRoot: PropTypes.bool, + theme: PropTypes.oneOfType([PropTypes.object, PropTypes.string]), + invertTheme: PropTypes.bool, + keyPath: PropTypes.arrayOf( + PropTypes.oneOfType([PropTypes.string, PropTypes.number]) + ), + postprocessValue: PropTypes.func, + sortObjectKeys: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]) + }; + + static defaultProps = { + shouldExpandNode: expandRootNode, + hideRoot: false, + keyPath: ['root'], + getItemString: defaultItemString, + labelRenderer: defaultLabelRenderer, + valueRenderer: identity, + postprocessValue: identity, + isCustomNode: noCustomNode, + collectionLimit: 50, + invertTheme: true + }; + + constructor(props) { + super(props); + this.state = getStateFromProps(props); + } + + componentWillReceiveProps(nextProps) { + if (['theme', 'invertTheme'].find(k => nextProps[k] !== this.props[k])) { + this.setState(getStateFromProps(nextProps)); + } + } + + shouldComponentUpdate(nextProps) { + return !!Object.keys(nextProps).find( + k => + k === 'keyPath' + ? nextProps[k].join('/') !== this.props[k].join('/') + : nextProps[k] !== this.props[k] + ); + } + + render() { + const { + data: value, + keyPath, + postprocessValue, + hideRoot, + theme, // eslint-disable-line no-unused-vars + invertTheme: _, // eslint-disable-line no-unused-vars + ...rest + } = this.props; + + const { styling } = this.state; + + return ( +
      + +
    + ); + } +} diff --git a/packages/react-json-tree/src/objType.js b/packages/react-json-tree/src/objType.js new file mode 100644 index 00000000..023718ec --- /dev/null +++ b/packages/react-json-tree/src/objType.js @@ -0,0 +1,13 @@ +export default function objType(obj) { + const type = Object.prototype.toString.call(obj).slice(8, -1); + if (type === 'Object' && typeof obj[Symbol.iterator] === 'function') { + return 'Iterable'; + } + + if (type === 'Custom' && obj.constructor !== Object && obj instanceof Object) { + // For projects implementing objects overriding `.prototype[Symbol.toStringTag]` + return 'Object'; + } + + return type; +} diff --git a/packages/react-json-tree/src/themes/solarized.js b/packages/react-json-tree/src/themes/solarized.js new file mode 100644 index 00000000..b601e859 --- /dev/null +++ b/packages/react-json-tree/src/themes/solarized.js @@ -0,0 +1,20 @@ +export default { + scheme: 'solarized', + author: 'ethan schoonover (http://ethanschoonover.com/solarized)', + base00: '#002b36', + base01: '#073642', + base02: '#586e75', + base03: '#657b83', + base04: '#839496', + base05: '#93a1a1', + base06: '#eee8d5', + base07: '#fdf6e3', + base08: '#dc322f', + base09: '#cb4b16', + base0A: '#b58900', + base0B: '#859900', + base0C: '#2aa198', + base0D: '#268bd2', + base0E: '#6c71c4', + base0F: '#d33682' +}; diff --git a/packages/react-json-tree/src/utils/hexToRgb.js b/packages/react-json-tree/src/utils/hexToRgb.js new file mode 100644 index 00000000..08a29b26 --- /dev/null +++ b/packages/react-json-tree/src/utils/hexToRgb.js @@ -0,0 +1,10 @@ +export default function(hex) { + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result + ? { + r: parseInt(result[1], 16), + g: parseInt(result[2], 16), + b: parseInt(result[3], 16) + } + : null; +} diff --git a/packages/react-json-tree/test/index.spec.js b/packages/react-json-tree/test/index.spec.js new file mode 100644 index 00000000..550e484c --- /dev/null +++ b/packages/react-json-tree/test/index.spec.js @@ -0,0 +1,23 @@ +import React from 'react'; +import expect from 'expect'; +import { createRenderer } from 'react-test-renderer/shallow'; + +import JSONTree from '../src/index'; +import JSONNode from '../src/JSONNode'; + +const BASIC_DATA = { a: 1, b: 'c' }; + +function render(component) { + const renderer = createRenderer(); + renderer.render(component); + return renderer.getRenderOutput(); +} + +describe('JSONTree', () => { + it('should render basic tree', () => { + const result = render(); + + expect(result.type).toBe('ul'); + expect(result.props.children.type.name).toBe(JSONNode.name); + }); +}); diff --git a/packages/react-json-tree/test/objType.spec.js b/packages/react-json-tree/test/objType.spec.js new file mode 100644 index 00000000..70b19bf5 --- /dev/null +++ b/packages/react-json-tree/test/objType.spec.js @@ -0,0 +1,23 @@ +import expect from 'expect'; + +import objType from '../src/objType'; + +describe('objType', () => { + it('should determine the correct type', () => { + expect(objType({})).toBe('Object'); + expect(objType([])).toBe('Array'); + expect(objType(new Map())).toBe('Map'); + expect(objType(new WeakMap())).toBe('WeakMap'); + expect(objType(new Set())).toBe('Set'); + expect(objType(new WeakSet())).toBe('WeakSet'); + expect(objType(new Error())).toBe('Error'); + expect(objType(new Date())).toBe('Date'); + expect(objType(() => {})).toBe('Function'); + expect(objType('')).toBe('String'); + expect(objType(true)).toBe('Boolean'); + expect(objType(null)).toBe('Null'); + expect(objType(undefined)).toBe('Undefined'); + expect(objType(10)).toBe('Number'); + expect(objType(Symbol.iterator)).toBe('Symbol'); + }); +}); diff --git a/packages/redux-devtools-trace-monitor/package.json b/packages/redux-devtools-trace-monitor/package.json index 28138166..37d46994 100644 --- a/packages/redux-devtools-trace-monitor/package.json +++ b/packages/redux-devtools-trace-monitor/package.json @@ -44,7 +44,7 @@ "eslint-plugin-flowtype": "3.2.0", "eslint-plugin-import": "2.14.0", "eslint-plugin-jsx-a11y": "6.1.1", - "eslint-plugin-react": "7.11.1", + "eslint-plugin-react": "7.4.0", "jest": "^23.6.0", "react-addons-test-utils": "^15.4.0", "react-dom": "^15.4.0", diff --git a/yarn.lock b/yarn.lock index 14dc5bec..9ab1cee7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@babel/code-frame@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== + dependencies: + "@babel/highlight" "7.0.0-beta.44" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -9,6 +16,17 @@ dependencies: "@babel/highlight" "^7.0.0" +"@babel/generator@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== + dependencies: + "@babel/types" "7.0.0-beta.44" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/generator@^7.1.6": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.0.tgz#eaf3821fa0301d9d4aef88e63d4bcc19b73ba16c" @@ -20,6 +38,15 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/helper-function-name@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.44" + "@babel/template" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + "@babel/helper-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" @@ -29,6 +56,13 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-get-function-arity@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== + dependencies: + "@babel/types" "7.0.0-beta.44" + "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" @@ -36,6 +70,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-split-export-declaration@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== + dependencies: + "@babel/types" "7.0.0-beta.44" + "@babel/helper-split-export-declaration@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" @@ -43,6 +84,15 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/highlight@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" @@ -57,6 +107,16 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.0.tgz#02d01dbc330b6cbf36b76ac93c50752c69027065" integrity sha512-M74+GvK4hn1eejD9lZ7967qAwvqTZayQa3g10ag4s9uewgR7TKjeaT0YMyoq+gVfKYABiWZ4MQD701/t5e1Jhg== +"@babel/template@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + lodash "^4.2.0" + "@babel/template@^7.1.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" @@ -66,6 +126,22 @@ "@babel/parser" "^7.1.2" "@babel/types" "^7.1.2" +"@babel/traverse@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/generator" "7.0.0-beta.44" + "@babel/helper-function-name" "7.0.0-beta.44" + "@babel/helper-split-export-declaration" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + "@babel/traverse@^7.0.0": version "7.1.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" @@ -81,6 +157,15 @@ globals "^11.1.0" lodash "^4.17.10" +"@babel/types@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + "@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.6", "@babel/types@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.0.tgz#7941c5b2d8060e06f9601d6be7c223eef906d5d8" @@ -716,6 +801,13 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= + dependencies: + acorn "^3.0.4" + acorn-jsx@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" @@ -741,12 +833,12 @@ acorn@^2.1.0, acorn@^2.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc= -acorn@^3.0.0: +acorn@^3.0.0, acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= -acorn@^5.2.1, acorn@^5.5.3: +acorn@^5.2.1, acorn@^5.5.0, acorn@^5.5.3: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== @@ -775,6 +867,21 @@ airbnb-style@2.0.0: resolved "https://registry.yarnpkg.com/airbnb-style/-/airbnb-style-2.0.0.tgz#aea1b7d45042726fb59fa72c33aa03cfebdad17b" integrity sha1-rqG31FBCcm+1n6csM6oDz+va0Xs= +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= + +ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1: version "6.6.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61" @@ -811,7 +918,7 @@ anser@^1.4.7: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.7.tgz#78c0ce6aefffaa09bed267bd7d26ee5b9fb6d575" integrity sha512-0jA836gkgorW5M+yralEdnAuQ4Z8o/jAu9Po3//dAClUyq9LdKEIAVVZNoej9jfnRi20wPL/gBb3eTjpzppjLg== -ansi-escapes@^1.1.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= @@ -874,6 +981,11 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +app-root-path@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" + integrity sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo= + append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" @@ -1118,7 +1230,7 @@ axobject-query@^2.0.1: dependencies: ast-types-flow "0.0.7" -babel-cli@^6.10.1, babel-cli@^6.3.15, babel-cli@^6.3.17: +babel-cli@^6.10.1, babel-cli@^6.26.0, babel-cli@^6.3.15, babel-cli@^6.3.17: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" integrity sha1-UCq1SHTX24itALiHoGODzgPQAvE= @@ -1140,7 +1252,7 @@ babel-cli@^6.10.1, babel-cli@^6.3.15, babel-cli@^6.3.17: optionalDependencies: chokidar "^1.6.1" -babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= @@ -1201,7 +1313,7 @@ babel-core@^5.1.8, babel-core@^5.8.25, babel-core@^5.8.33: trim-right "^1.0.0" try-resolve "^1.0.0" -babel-core@^6.0.0, babel-core@^6.1.20, babel-core@^6.26.0, babel-core@^6.3.17: +babel-core@^6.0.0, babel-core@^6.1.20, babel-core@^6.1.4, babel-core@^6.26.0, babel-core@^6.3.17: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== @@ -1268,6 +1380,18 @@ babel-eslint@^5.0.0-beta4: lodash.assign "^3.2.0" lodash.pick "^3.1.0" +babel-eslint@^8.0.1: + version "8.2.6" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/traverse" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" @@ -1890,6 +2014,20 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es20 babel-runtime "^6.22.0" regexpu-core "^2.0.0" +babel-plugin-transform-es3-member-expression-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" + integrity sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es3-property-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" + integrity sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g= + dependencies: + babel-runtime "^6.22.0" + babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" @@ -1923,7 +2061,7 @@ babel-plugin-transform-function-bind@^6.22.0: babel-plugin-syntax-function-bind "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-object-rest-spread@6.26.0, babel-plugin-transform-object-rest-spread@^6.22.0: +babel-plugin-transform-object-rest-spread@6.26.0, babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= @@ -1977,7 +2115,7 @@ babel-plugin-transform-regenerator@6.26.0, babel-plugin-transform-regenerator@^6 dependencies: regenerator-transform "^0.10.0" -babel-plugin-transform-runtime@6.23.0: +babel-plugin-transform-runtime@6.23.0, babel-plugin-transform-runtime@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4= @@ -2049,7 +2187,7 @@ babel-preset-env@1.6.1: invariant "^2.2.2" semver "^5.3.0" -babel-preset-env@^1.7.0: +babel-preset-env@^1.6.1, babel-preset-env@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== @@ -2265,7 +2403,7 @@ babel-runtime@^5.0.0: dependencies: core-js "^1.0.0" -babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: +babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -2309,6 +2447,11 @@ babel-types@^6.0.0, babel-types@^6.0.19, babel-types@^6.18.0, babel-types@^6.19. lodash "^4.17.4" to-fast-properties "^1.0.3" +babylon@7.0.0-beta.44: + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== + babylon@^5.8.38: version "5.8.38" resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" @@ -2446,6 +2589,11 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= + browserify-aes@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" @@ -2684,6 +2832,11 @@ chalk@~0.4.0: has-color "~0.1.0" strip-ansi "~0.1.0" +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -2742,7 +2895,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -cli-cursor@^1.0.1: +cli-cursor@^1.0.1, cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= @@ -2756,6 +2909,19 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + integrity sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw= + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + cli-width@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-1.1.1.tgz#a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d" @@ -2852,12 +3018,17 @@ commander@0.6.1: resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" integrity sha1-+mihT2qUXVTbvlDYzbMyDp47GgY= +commander@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== + commander@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" integrity sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM= -commander@^2.11.0, commander@^2.5.0: +commander@^2.11.0, commander@^2.5.0, commander@^2.9.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== @@ -3072,6 +3243,20 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cosmiconfig@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" + integrity sha1-DeoPmATv37kp+7GxiOJVU+oFPTc= + dependencies: + graceful-fs "^4.1.2" + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.0.1" + os-homedir "^1.0.1" + parse-json "^2.2.0" + pinkie-promise "^2.0.0" + require-from-string "^1.1.0" + cosmiconfig@^5.0.2: version "5.0.7" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" @@ -3106,7 +3291,7 @@ cross-spawn@^3.0.1: lru-cache "^4.0.1" which "^1.2.9" -cross-spawn@^5.0.1: +cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= @@ -3226,6 +3411,11 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -3440,6 +3630,11 @@ diff@1.4.0: resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= +diff@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" + integrity sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww== + diff@^2.2.1: version "2.2.3" resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99" @@ -3487,7 +3682,7 @@ doctrine@^0.7.1: esutils "^1.1.6" isarray "0.0.1" -doctrine@^2.1.0: +doctrine@^2.0.0, doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== @@ -3589,6 +3784,11 @@ electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.47: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.90.tgz#b4c51b8303beff18f2b74817402bf4898e09558a" integrity sha512-IjJZKRhFbWSOX1w0sdIXgp4CMRguu6UYcTckyFF/Gjtemsu/25eZ+RXwFlV+UWcIueHyQA1UnRJxocTpH5NdGA== +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + emoji-regex@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" @@ -3803,7 +4003,7 @@ escape-string-regexp@1.0.2: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" integrity sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE= -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -3854,6 +4054,18 @@ eslint-config-airbnb@0.0.6: resolve "1.1.6" strip-json-comments "1.0.2" +eslint-config-prettier@^2.6.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz#ec07bc1d01f87d09f61d3840d112dc8a9791e30b" + integrity sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA== + dependencies: + get-stdin "^5.0.1" + +eslint-config-standard@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591" + integrity sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE= + eslint-import-resolver-node@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" @@ -3870,6 +4082,11 @@ eslint-module-utils@^2.2.0: debug "^2.6.8" pkg-dir "^1.0.0" +eslint-plugin-babel@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz#79202a0e35757dd92780919b2336f1fa2fe53c1e" + integrity sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4= + eslint-plugin-flowtype@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.2.0.tgz#824364ed5940a404b91326fdb5a313a2a74760df" @@ -3877,7 +4094,7 @@ eslint-plugin-flowtype@3.2.0: dependencies: lodash "^4.17.10" -eslint-plugin-import@2.14.0: +eslint-plugin-import@2.14.0, eslint-plugin-import@^2.8.0: version "2.14.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g== @@ -3907,21 +4124,43 @@ eslint-plugin-jsx-a11y@6.1.1: has "^1.0.3" jsx-ast-utils "^2.0.1" +eslint-plugin-node@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz#80df3253c4d7901045ec87fa660a284e32bdca29" + integrity sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g== + dependencies: + ignore "^3.3.6" + minimatch "^3.0.4" + resolve "^1.3.3" + semver "5.3.0" + +eslint-plugin-prettier@^2.3.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" + integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== + dependencies: + fast-diff "^1.1.1" + jest-docblock "^21.0.0" + +eslint-plugin-promise@^3.6.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz#65ebf27a845e3c1e9d6f6a5622ddd3801694b621" + integrity sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ== + eslint-plugin-react@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-2.3.0.tgz#2d793a4dff1b73fb111796e463b48acd06420001" integrity sha1-LXk6Tf8bc/sRF5bkY7SKzQZCAAE= -eslint-plugin-react@7.11.1: - version "7.11.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" - integrity sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw== +eslint-plugin-react@7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" + integrity sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA== dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.2" + doctrine "^2.0.0" + has "^1.0.1" + jsx-ast-utils "^2.0.0" + prop-types "^15.5.10" eslint-plugin-react@^2.3.0: version "2.7.1" @@ -3933,6 +4172,11 @@ eslint-plugin-react@^3.6.3: resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-3.16.1.tgz#262d96b77d7c4a42af809a73c0e527a58612293c" integrity sha1-Ji2Wt318SkKvgJpzwOUnpYYSKTw= +eslint-plugin-standard@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz#2a9e21259ba4c47c02d53b2d0c9135d4b1022d47" + integrity sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w== + eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" @@ -3941,6 +4185,14 @@ eslint-scope@3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-scope@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" @@ -4081,6 +4333,50 @@ eslint@^0.24: user-home "^1.0.0" xml-escape "~1.0.0" +eslint@^4.10: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + eslint@^5.0.0: version "5.10.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.10.0.tgz#24adcbe92bf5eb1fc2d2f2b1eebe0c5e0713903a" @@ -4129,6 +4425,14 @@ espree@^2.0.1, espree@^2.2.4: resolved "https://registry.yarnpkg.com/espree/-/espree-2.2.5.tgz#df691b9310889402aeb29cc066708c56690b854b" integrity sha1-32kbkxCIlAKuspzAZnCMVmkLhUs= +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + espree@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.0.tgz#fc7f984b62b36a0f543b13fb9cd7b9f4a7f5b65c" @@ -4163,7 +4467,7 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: +esquery@^1.0.0, esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== @@ -4258,6 +4562,19 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -4321,6 +4638,18 @@ expect@^1.6.0: object-keys "^1.0.9" tmatch "^2.0.1" +expect@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b" + integrity sha512-orfQQqFRTX0jH7znRIGi8ZMR8kTNpXklTTz8+HGTpmTKZo3Occ6JNB5FXMb8cRuiiC/GyDqsr30zUa66ACYlYw== + dependencies: + ansi-styles "^3.2.0" + jest-diff "^21.2.1" + jest-get-type "^21.2.0" + jest-matcher-utils "^21.2.1" + jest-message-util "^21.2.1" + jest-regex-util "^21.2.0" + expect@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" @@ -4353,6 +4682,15 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + external-editor@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" @@ -4393,11 +4731,21 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-diff@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^2.0.2: version "2.2.4" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.4.tgz#e54f4b66d378040e0e4d6a68ec36bbc5b04363c0" @@ -4461,7 +4809,7 @@ figgy-pudding@^3.1.0, figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== -figures@^1.3.5, figures@^1.4.0: +figures@^1.3.5, figures@^1.4.0, figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= @@ -4737,6 +5085,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" + integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== + get-pkg-repo@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" @@ -4758,6 +5111,11 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -4852,6 +5210,18 @@ glob@3.2.11: inherits "2" minimatch "0.3" +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^5.0.14, glob@^5.0.15, glob@~5.0.3: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -4875,7 +5245,7 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0, globals@^11.7.0: +globals@^11.0.1, globals@^11.1.0, globals@^11.7.0: version "11.9.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg== @@ -4913,6 +5283,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +growl@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" + integrity sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q== + growl@1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" @@ -4964,6 +5339,11 @@ has-flag@^1.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -5017,6 +5397,11 @@ has@^1.0.1, has@^1.0.3, has@~1.0.1: dependencies: function-bind "^1.1.1" +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" @@ -5122,7 +5507,16 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@^0.4.5, iconv-lite@~0.4.13: +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + integrity sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA== + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@^0.4.5, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5146,7 +5540,7 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.3.5: +ignore@^3.3.3, ignore@^3.3.5, ignore@^3.3.6: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== @@ -5269,6 +5663,26 @@ inquirer@^0.8.2: rx "^2.4.3" through "^2.3.6" +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + inquirer@^6.1.0, inquirer@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52" @@ -5293,7 +5707,7 @@ interpret@^0.6.4: resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" integrity sha1-/s16GOfOXKar+5U+H4YhOknxYls= -invariant@^2.0.0, invariant@^2.2.2, invariant@^2.2.4: +invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -5567,7 +5981,7 @@ is-number@^4.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== -is-obj@^1.0.0: +is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= @@ -5611,6 +6025,11 @@ is-regex@^1.0.3, is-regex@^1.0.4: dependencies: has "^1.0.1" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -5711,6 +6130,21 @@ isparta@^3.0.3: source-map "^0.5.0" which "^1.0.9" +isparta@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/isparta/-/isparta-4.1.1.tgz#c92e49672946914ec5407c801160f3374e0b7cb4" + integrity sha512-kGwkNqmALQzdfGhgo5o8kOA88p14R3Lwg0nfQ/qzv4IhB4rXarT9maPMaYbo6cms4poWbeulrlFlURLUR6rDwQ== + dependencies: + babel-core "^6.1.4" + escodegen "^1.6.1" + esprima "^4.0.0" + istanbul "0.4.5" + mkdirp "^0.5.0" + nomnomnomnom "^2.0.0" + object-assign "^4.0.1" + source-map "^0.5.0" + which "^1.0.9" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -5786,7 +6220,7 @@ istanbul-reports@^1.5.1: dependencies: handlebars "^4.0.3" -istanbul@^0.4.0: +istanbul@0.4.5, istanbul@^0.4.0: version "0.4.5" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= @@ -5883,6 +6317,16 @@ jest-config@^23.6.0: micromatch "^2.3.11" pretty-format "^23.6.0" +jest-diff@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f" + integrity sha512-E5fu6r7PvvPr5qAWE1RaUwIh/k6Zx/3OOkZ4rk5dBJkEWRrUuSgbMt2EO8IUTPTd6DOqU3LW6uTIwX5FRvXoFA== + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" + jest-diff@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" @@ -5893,6 +6337,11 @@ jest-diff@^23.6.0: jest-get-type "^22.1.0" pretty-format "^23.6.0" +jest-docblock@^21.0.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== + jest-docblock@^23.2.0: version "23.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" @@ -5925,6 +6374,11 @@ jest-environment-node@^23.4.0: jest-mock "^23.2.0" jest-util "^23.4.0" +jest-get-type@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" + integrity sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q== + jest-get-type@^22.1.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" @@ -5969,6 +6423,15 @@ jest-leak-detector@^23.6.0: dependencies: pretty-format "^23.6.0" +jest-matcher-utils@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64" + integrity sha512-kn56My+sekD43dwQPrXBl9Zn9tAqwoy25xxe7/iY4u+mG8P3ALj5IK7MLHZ4Mi3xW7uWVCjGY8cm4PqgbsqMCg== + dependencies: + chalk "^2.0.1" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" + jest-matcher-utils@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" @@ -5978,6 +6441,15 @@ jest-matcher-utils@^23.6.0: jest-get-type "^22.1.0" pretty-format "^23.6.0" +jest-message-util@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe" + integrity sha512-EbC1X2n0t9IdeMECJn2BOg7buOGivCvVNjqKMXTzQOu7uIfLml+keUfCALDh8o4rbtndIeyGU8/BKfoTr/LVDQ== + dependencies: + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + jest-message-util@^23.4.0: version "23.4.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" @@ -5994,6 +6466,11 @@ jest-mock@^23.2.0: resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ= +jest-regex-util@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530" + integrity sha512-BKQ1F83EQy0d9Jen/mcVX7D+lUt2tthhK/2gDWRgLDJRNOdRgSp1iVqFxP8EN1ARuypvDflRfPzYT8fQnoBQFQ== + jest-regex-util@^23.3.0: version "23.3.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" @@ -6097,6 +6574,16 @@ jest-util@^23.4.0: slash "^1.0.0" source-map "^0.6.0" +jest-validate@^21.1.0: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" + integrity sha512-k4HLI1rZQjlU+EC682RlQ6oZvLrE5SCh3brseQc24vbZTxzT/k/3urar5QMCVgjadmSO7lECeGdc6YxnM3yEGg== + dependencies: + chalk "^2.0.1" + jest-get-type "^21.2.0" + leven "^2.1.0" + pretty-format "^21.2.1" + jest-validate@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" @@ -6136,16 +6623,16 @@ js-tokens@1.0.1: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae" integrity sha1-zENaXIuUrRWst5gxQPyAGCyJrq4= +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - js-yaml@3.4.5: version "3.4.5" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.5.tgz#c3403797df12b91866574f2de23646fe8cafb44d" @@ -6154,7 +6641,7 @@ js-yaml@3.4.5: argparse "^1.0.2" esprima "^2.6.0" -js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.7.0, js-yaml@^3.9.0: +js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== @@ -6241,6 +6728,11 @@ json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -6321,7 +6813,7 @@ jstransform@^11.0.3: object-assign "^2.0.0" source-map "^0.4.2" -jsx-ast-utils@^2.0.1: +jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= @@ -6440,6 +6932,78 @@ libnpmaccess@^3.0.0: npm-package-arg "^6.1.0" npm-registry-fetch "^3.8.0" +lint-staged@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-4.3.0.tgz#ed0779ad9a42c0dc62bb3244e522870b41125879" + integrity sha512-C/Zxslg0VRbsxwmCu977iIs+QyrmW2cyRCPUV5NDFYOH/jtRFHH8ch7ua2fH0voI/nVC3Tpg7DykfgMZySliKw== + dependencies: + app-root-path "^2.0.0" + chalk "^2.1.0" + commander "^2.11.0" + cosmiconfig "^1.1.0" + execa "^0.8.0" + is-glob "^4.0.0" + jest-validate "^21.1.0" + listr "^0.12.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + minimatch "^3.0.0" + npm-which "^3.0.1" + p-map "^1.1.1" + staged-git-files "0.0.4" + stringify-object "^3.2.0" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= + +listr-update-renderer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" + integrity sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk= + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + integrity sha1-ggb0z21S3cWCfl/RSYng6WWTOjU= + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" + integrity sha1-a84sD1YD+klYDqF81qAMwOX6RRo= + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.2.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.0.0-beta.11" + stream-to-observable "^0.1.0" + strip-ansi "^3.0.1" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -6657,6 +7221,11 @@ lodash.clonedeep@^3.0.1: lodash._baseclone "^3.0.0" lodash._bindcallback "^3.0.0" +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + lodash.escape@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" @@ -6667,6 +7236,11 @@ lodash.flattendeep@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -6802,11 +7376,33 @@ lodash@^3.10.0, lodash@^3.3.1, lodash@^3.6.0, lodash@^3.9.3: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.6.1: +lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-symbols@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE= + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -7045,7 +7641,7 @@ minimatch@0.3: lru-cache "2" sigmund "~1.0.0" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -7154,6 +7750,22 @@ mocha@^2.2.5: supports-color "1.2.0" to-iso-string "0.0.2" +mocha@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794" + integrity sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA== + dependencies: + browser-stdout "1.3.0" + commander "2.11.0" + debug "3.1.0" + diff "3.3.1" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.3" + he "1.1.1" + mkdirp "0.5.1" + supports-color "4.4.0" + modify-babel-preset@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/modify-babel-preset/-/modify-babel-preset-1.2.0.tgz#d1b7c8c24896e19dbc4847347213e6b7144d1bc7" @@ -7445,6 +8057,11 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= + normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -7489,6 +8106,13 @@ npm-packlist@^1.1.12, npm-packlist@^1.1.6: ignore-walk "^3.0.1" npm-bundled "^1.0.1" +npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== + dependencies: + which "^1.2.10" + npm-pick-manifest@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40" @@ -7517,6 +8141,15 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -7716,6 +8349,16 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + integrity sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q= + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + os-browserify@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" @@ -7726,7 +8369,7 @@ os-browserify@~0.1.2: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" integrity sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ= -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= @@ -7828,7 +8471,7 @@ p-map-series@^1.0.0: dependencies: p-reduce "^1.0.0" -p-map@^1.2.0: +p-map@^1.1.1, p-map@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== @@ -8006,7 +8649,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: +path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -8110,6 +8753,19 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= +prettier@^1.7.4: + version "1.15.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a" + integrity sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg== + +pretty-format@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" + integrity sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A== + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + pretty-format@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" @@ -8182,7 +8838,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.6.2: +prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== @@ -8257,6 +8913,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -8341,6 +9002,16 @@ react-addons-test-utils@^15.4.0: resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz#c12b6efdc2247c10da7b8770d185080a7b047156" integrity sha1-wStu/cIkfBDae4dw0YUICnsEcVY= +react-base16-styling@^0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.5.3.tgz#3858f24e9c4dd8cbd3f702f3f74d581ca2917269" + integrity sha1-OFjyTpxN2MvT9wLz901YHKKRcmk= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + react-dom@^0.14.0: version "0.14.9" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-0.14.9.tgz#05064a3dcf0fb1880a3b2bfc9d58c55d8d9f6293" @@ -8356,11 +9027,26 @@ react-dom@^15.4.0: object-assign "^4.1.0" prop-types "^15.5.10" +react-dom@^16.0.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.7.0.tgz#a17b2a7ca89ee7390bc1ed5eb81783c7461748b8" + integrity sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.12.0" + react-is@^16.6.1: version "16.6.3" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.6.3.tgz#d2d7462fcfcbe6ec0da56ad69047e47e56e7eac0" integrity sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA== +react-is@^16.7.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.7.0.tgz#c1bd21c64f1f1364c6f70695ec02d69392f41bfa" + integrity sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g== + react-redux@^4.0.0: version "4.4.9" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.9.tgz#8ca6d4670925a454ce67086c2305e9630670909a" @@ -8381,6 +9067,16 @@ react-test-renderer@^15.3.2: fbjs "^0.8.9" object-assign "^4.1.0" +react-test-renderer@^16.0.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.7.0.tgz#1ca96c2b450ab47c36ba92cd8c03fcefc52ea01c" + integrity sha512-tFbhSjknSQ6+ttzmuGdv+SjQfmvGcq3PFKyPItohwhhOBmRoTf1We3Mlt3rJtIn85mjPXOkKV+TaKK4irvk9Yg== + dependencies: + object-assign "^4.1.1" + prop-types "^15.6.2" + react-is "^16.7.0" + scheduler "^0.12.0" + react@^0.14.9: version "0.14.9" resolved "https://registry.yarnpkg.com/react/-/react-0.14.9.tgz#9110a6497c49d44ba1c0edd317aec29c2e0d91d1" @@ -8400,6 +9096,16 @@ react@^15.4.0: object-assign "^4.1.0" prop-types "^15.5.10" +react@^16.0.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.7.0.tgz#b674ec396b0a5715873b350446f7ea0802ab6381" + integrity sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.12.0" + read-cmd-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" @@ -8685,6 +9391,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -8798,6 +9509,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -8860,6 +9576,13 @@ resolve@^1.1.6, resolve@^1.5.0, resolve@^1.6.0: dependencies: path-parse "^1.0.5" +resolve@^1.3.3: + version "1.9.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" + integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ== + dependencies: + path-parse "^1.0.6" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -8946,6 +9669,18 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" @@ -8956,7 +9691,7 @@ rx@^2.4.3: resolved "https://registry.yarnpkg.com/rx/-/rx-2.5.3.tgz#21adc7d80f02002af50dae97fd9dbf248755f566" integrity sha1-Ia3H2A8CACr1Da6X/Z2/JIdV9WY= -rxjs@^5.0.0-beta.6: +rxjs@^5.0.0-beta.11, rxjs@^5.0.0-beta.6: version "5.5.12" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== @@ -9008,12 +9743,20 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +scheduler@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.12.0.tgz#8ab17699939c0aedc5a196a657743c496538647b" + integrity sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== -semver@~5.3.0: +semver@5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= @@ -9110,6 +9853,18 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + slice-ansi@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7" @@ -9340,6 +10095,11 @@ stack-utils@^1.0.1: resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== +staged-git-files@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" + integrity sha1-15fhtVHKemOd7AI33G60u5vhfTU= + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -9393,6 +10153,11 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= +stream-to-observable@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" + integrity sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4= + string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -9446,6 +10211,15 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-object@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + stringmap@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz#556c137b258f942b8776f5b2ef582aa069d7d1b1" @@ -9548,6 +10322,13 @@ supports-color@1.2.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" integrity sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4= +supports-color@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + integrity sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ== + dependencies: + has-flag "^2.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -9582,6 +10363,18 @@ symbol-observable@^1.0.2, symbol-observable@^1.0.3, symbol-observable@^1.2.0: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + table@^5.0.2: version "5.1.1" resolved "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837" @@ -10269,7 +11062,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.0.9, which@^1.1.1, which@^1.2.12, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@1, which@^1.0.9, which@^1.1.1, which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==