├── .babelrc ├── .eslintrc.json ├── .gitignore ├── .npmignore ├── .nycrc ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── example ├── .editorconfig ├── .eslintrc.json ├── .gitignore ├── .stylelintrc.json ├── README.md ├── kyt.config.js ├── package.json ├── src │ ├── client │ │ └── index.js │ ├── components │ │ ├── App │ │ │ ├── App.test.js │ │ │ └── index.js │ │ ├── Button │ │ │ └── index.js │ │ ├── Code │ │ │ └── index.js │ │ ├── Header │ │ │ └── index.js │ │ └── HelloWorld │ │ │ ├── HelloWorld.style.js │ │ │ └── index.js │ └── server │ │ └── index.js └── yarn.lock ├── package.json ├── src ├── dom │ └── index.js ├── index.js ├── insert-style.js └── server │ └── index.js ├── test ├── .eslintrc.json ├── .setup.js ├── components │ ├── DecoratedButton.js │ ├── TaggedDecoratedButton.js │ └── WrappedButton.js ├── dom.test.js ├── insertStyle.test.js ├── mocha.opts ├── server.test.js ├── testUtil.js └── withStyles.test.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "test": { 4 | "plugins": [ 5 | "istanbul", 6 | "rewire", 7 | "transform-decorators-legacy" 8 | ] 9 | } 10 | }, 11 | "plugins": ["transform-runtime"], 12 | "presets": ["es2015", "react", "stage-0"] 13 | } 14 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "extends": "eslint-config-airbnb", 4 | "env": { 5 | "browser": true 6 | }, 7 | "rules": { 8 | "react/jsx-filename-extension": [1, { 9 | "extensions": [".js", ".jsx"] 10 | }] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | 13 | # Directory for instrumented libs generated by jscoverage/JSCover 14 | lib-cov 15 | 16 | # Coverage directory used by tools like istanbul 17 | coverage 18 | 19 | # nyc test coverage 20 | .nyc_output 21 | 22 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 23 | .grunt 24 | 25 | # node-waf configuration 26 | .lock-wscript 27 | 28 | # Compiled binary addons (http://nodejs.org/api/addons.html) 29 | build/Release 30 | 31 | # Dependency directories 32 | node_modules 33 | jspm_packages 34 | 35 | # Optional npm cache directory 36 | .npm 37 | 38 | # Optional REPL history 39 | .node_repl_history 40 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | example 3 | test 4 | yarn.lock 5 | -------------------------------------------------------------------------------- /.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "include": [ 3 | "**/src/**" 4 | ], 5 | "require": [ 6 | "babel-register" 7 | ], 8 | "sourceMap": false, 9 | "instrument": false 10 | } 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | node_js: 4 | - "node" 5 | before_script: 6 | - npm run lint 7 | after_success: 8 | - "nyc report --reporter=text-lcov | coveralls" 9 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## Please see the [releases page](https://github.com/tizmagik/react-csjs/releases) 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Jeremy Gayed 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React CSJS 2 | 3 | React Higher Order Component for [CSJS](https://github.com/rtsao/csjs). Automatically mounts/unmounts styles, works with React Hot Loader. _Inspired by the JSS-equivalent, [react-jss](https://github.com/jsstyles/react-jss)._ 4 | 5 | [![npm](https://img.shields.io/npm/v/react-csjs.svg)](https://www.npmjs.com/package/react-csjs) 6 | [![Build Status](https://travis-ci.org/tizmagik/react-csjs.svg?branch=master)](https://travis-ci.org/tizmagik/react-csjs) 7 | [![Coverage Status](https://coveralls.io/repos/github/tizmagik/react-csjs/badge.svg)](https://coveralls.io/github/tizmagik/react-csjs) 8 | 9 | ### Auto-mount/unmounting of styles 10 | 11 | The benefit of using react-csjs instead of using CSJS directly is auto-mount/unmount so that only the styles relevant to which components are currently rendered into the DOM will be mounted; and then once those components are removed/unmounted, so will their styles. 12 | 13 | ### Installation 14 | 15 | You'll need to install both `csjs` and `react-csjs` like so: 16 | 17 | ``` 18 | npm install --save csjs react-csjs 19 | ``` 20 | 21 | ## Usage 22 | 23 | ##### tagged `@decorator` syntax 24 | 25 | You can use react-csjs as a higher order component via the decorators syntax (which you'll need something like [babel-plugin-transform-decorators-legacy](https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy) for it to work). 26 | 27 | Simply pass the CSS as a string literal. If CSJS plugins like [babel-plugin-csjs-postcss](https://github.com/rtsao/babel-plugin-csjs-postcss) are used, they will apply their transforms as usual as long as the default export is named "csjs". 28 | 29 | ```js 30 | import React from 'react'; 31 | import csjs from 'react-csjs'; 32 | 33 | @csjs` 34 | .button { 35 | background-color: purple 36 | } 37 | .label { 38 | color: blue 39 | }` 40 | export default class Button extends React.Component { 41 | render() { 42 | return ( 43 |
44 | 45 | {this.props.children} 46 | 47 |
48 | ) 49 | } 50 | } 51 | ``` 52 | 53 | ##### `@decorator` syntax 54 | 55 | You can also use react-csjs as a higher order component in combination with CSJS via the decorators syntax. The decorator can be exported under any name, in this case "withStyles." 56 | 57 | ```js 58 | import React from 'react'; 59 | import csjs from 'csjs'; 60 | import withStyles from 'react-csjs'; 61 | 62 | const styles = csjs` 63 | .button { 64 | background-color: purple 65 | } 66 | .label { 67 | color: blue 68 | }`; 69 | 70 | @withStyles(styles) 71 | export default class Button extends React.Component { 72 | render() { 73 | return ( 74 |
75 | 76 | {this.props.children} 77 | 78 |
79 | ) 80 | } 81 | } 82 | ``` 83 | 84 | ##### Default export wrapper 85 | 86 | _Or_ you can wrap your default export if you'd prefer not to use the decorator syntax, or you're applying to a stateless functional component, like so: 87 | 88 | ```js 89 | import React from 'react'; 90 | import csjs from 'csjs'; 91 | import withStyles from 'react-csjs'; 92 | 93 | const styles = csjs` 94 | .button { 95 | background-color: purple 96 | } 97 | .label { 98 | color: blue 99 | }`; 100 | 101 | const Button = ({classes, children}) => ( 102 |
103 | 104 | {children} 105 | 106 |
107 | ); 108 | 109 | export default withStyles(styles)(Button); 110 | ``` 111 | 112 | ### The `classes` property 113 | 114 | react-csjs adds its own `classes` prop to the higher order component which contains the same CSJS object that was passed in through `withStyles`. You are welcome to use `classes` or the original styles object if it is still in scope, but in some circumstances the `classes` prop may be your only option. 115 | 116 | Popular linting rules such as [`react/prop-types`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md) from [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) will complain that the `classes` prop is missing from props validation. There are several ways to address this: 117 | 118 | 1. Add the `classes` prop to your component's propTypes: 119 | 120 | ```js 121 | Button.propTypes = { 122 | classes: React.PropTypes.objectOf(React.PropTypes.object).isRequired, 123 | }; 124 | ``` 125 | 126 | 2. Tweak the lint rule to ignore the `classes` prop: 127 | 128 | ```json 129 | "prop-types": [2, { "ignore": ["classes"] }] 130 | ``` 131 | 132 | ## Server-side Rendering 133 | 134 | `react-csjs` fully supports isomorphic/universal apps out of the box. You simply call the provided `getStyle()` method to grab all of your app's styles after rendering your app to string, like so: 135 | 136 | ```js 137 | /* server.js */ 138 | 139 | import React from 'react'; 140 | import ReactDOM from 'react-dom/server'; 141 | import express from 'express'; 142 | import App from './App'; 143 | import { getStyle } from 'react-csjs'; 144 | 145 | const server = express(); 146 | 147 | // Render the app 148 | const renderedApp = ReactDOM.renderToString(); 149 | // Gather the generated styles 150 | const renderedStyles = getStyle(); 151 | 152 | server.get('/', (req, res) => { 153 | res.send(` 154 | 155 | 156 | 157 | 158 | 159 |
${renderedApp}
160 | 161 | 162 | 163 | `); 164 | }); 165 | 166 | server.listen(3000); 167 | ``` 168 | 169 | You can then remove the SSR styles after rendering on the client. 170 | 171 | > NOTE: Although this step is not strictly necessary, without removing the SSR styles, you'll effectively have 2 declarations for every style definition: one for the server rendered and one for the auto-mounted styles on the client. 172 | 173 | ```js 174 | /* client.js */ 175 | 176 | import React from 'react'; 177 | import ReactDOM from 'react-dom'; 178 | import App from './App'; 179 | import { removeStyle } from 'react-csjs'; 180 | 181 | const root = document.getElementById('root'); 182 | const ssrStyles = document.getElementById('ssr-styles'); 183 | 184 | // Render the app client-side 185 | ReactDOM.render(, root); 186 | 187 | // Can now safely remove the SSR styles since from here on, 188 | // styles will be auto-mounted by react-csjs 189 | removeStyle(ssrStyles); 190 | ``` 191 | 192 | ## Example App 193 | 194 | You can see a fully working example of an isomorphic/universal React app using `react-csjs` in the [/example](/example) directory. 195 | -------------------------------------------------------------------------------- /example/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /example/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "./node_modules/kyt/config/.eslintrc.base.json" 4 | ], 5 | 6 | "env": { 7 | }, 8 | 9 | "plugins": [ 10 | ], 11 | 12 | "rules": { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # node-waf configuration 18 | .lock-wscript 19 | 20 | # Dependency directory 21 | node_modules 22 | 23 | # build directory 24 | build 25 | 26 | # Optional npm cache directory 27 | .npm 28 | 29 | # Optional REPL history 30 | .node_repl_history 31 | 32 | # OS-specific temporary files 33 | Thumbs.db 34 | .DS_Store 35 | -------------------------------------------------------------------------------- /example/.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./node_modules/kyt/config/.stylelintrc.base.json", 3 | "rules": { 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # React CSJS Example 2 | 3 | This is a fully working React app (using [kyt](https://github.com/NYTimes/kyt)) that shows some example `react-csjs` usage. 4 | 5 | You can use this as a reference or as a place to test out changes to `react-csjs` for local development before submitting a PR. The `react-csjs` module referenced in this example repo is aliased to `../src`, so any changes made there will be reflected. 6 | 7 | ## Example usage 8 | 9 | The various [components](./src/components) in this app show example usage patterns in react-csjs. The patterns shown in [``](./src/components/Code/index.js) and [`
`](./src/components/Header/index.js) components are recommended. 10 | 11 | ## Installation 12 | 13 | From within the `/example` directory: 14 | 15 | ``` 16 | npm i 17 | ``` 18 | 19 | Or, if using [Yarn](https://github.com/yarnpkg/yarn): 20 | 21 | ``` 22 | yarn 23 | ``` 24 | 25 | ## Running 26 | 27 | ``` 28 | npm run dev 29 | ``` 30 | 31 | Then the app will be running on http://localhost:3000 32 | -------------------------------------------------------------------------------- /example/kyt.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | reactHotLoader: true, 5 | modifyWebpackConfig: (kytConfig, options) => { 6 | kytConfig.resolve.alias = { 7 | 'react-csjs': path.resolve('../src') 8 | } 9 | 10 | const babelLoader = kytConfig.module.loaders.find(loader => loader.loader === 'babel-loader'); 11 | babelLoader.query.presets = ["es2015", "react", "stage-0"]; 12 | babelLoader.query.plugins.push(require.resolve('babel-plugin-transform-decorators-legacy')); 13 | 14 | return kytConfig; 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-csjs-example", 3 | "version": "1.0.0", 4 | "description": "Example app showing simple react-csjs use", 5 | "scripts": { 6 | "dev": "kyt dev", 7 | "test": "kyt test" 8 | }, 9 | "author": "Jeremy Gayed (http://github.com/tizmagik)", 10 | "license": "MIT", 11 | "dependencies": { 12 | "csjs": "^1.0.6", 13 | "express": "^4.14.0", 14 | "kyt": "^0.2.2", 15 | "react": "^15.3.0", 16 | "react-dom": "^15.3.0", 17 | "react-hot-loader": "3.0.0-beta.5" 18 | }, 19 | "devDependencies": { 20 | "babel-preset-es2015": "^6.9.0", 21 | "babel-preset-react": "^6.11.1", 22 | "babel-preset-stage-0": "^6.5.0", 23 | "babel-plugin-transform-decorators-legacy": "^1.3.4", 24 | "enzyme": "^2.4.1", 25 | "react-addons-test-utils": "^15.3.0" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /example/src/client/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from 'react-dom'; 3 | import { AppContainer } from 'react-hot-loader'; 4 | import App from './../components/App'; 5 | import { removeStyle } from 'react-csjs'; 6 | 7 | const root = document.getElementById('root'); 8 | const ssrStyles = document.getElementById('ssr-styles'); 9 | 10 | const mount = RootComponent => render( 11 | 12 | 13 | , 14 | root 15 | ); 16 | 17 | if (module.hot) { 18 | module.hot.accept('./../components/App', () => { 19 | const RootComponent = require('./../components/App').default; // eslint-disable-line 20 | mount(RootComponent); 21 | }); 22 | } 23 | 24 | mount(App); 25 | // We can safely remove SSR styles once we've rendered on the client 26 | // since from here on, styles will be auto-mounted/unmounted 27 | removeStyle(ssrStyles); 28 | -------------------------------------------------------------------------------- /example/src/components/App/App.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | import App from './index'; 4 | import HelloWorld from '../HelloWorld'; 5 | 6 | it('Tests that the App renders.', () => { 7 | const wrapper = shallow(); 8 | expect(wrapper.contains()).toBeTruthy(); 9 | }); 10 | -------------------------------------------------------------------------------- /example/src/components/App/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | 4 | This is just a top-level thin wrapper. 5 | 6 | All react-csjs usage starts in `` 7 | */ 8 | 9 | import React from 'react'; 10 | import HelloWorld from '../HelloWorld'; 11 | 12 | const App = () => ( 13 |
14 | 15 |
16 | ); 17 | 18 | export default App; 19 | -------------------------------------------------------------------------------- /example/src/components/Button/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | 55 | ); 56 | } 57 | }; 58 | -------------------------------------------------------------------------------- /example/src/components/Code/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | 4 | This file shows the pattern of using the tagged template 5 | wrapper around the default export of a stateless functional 6 | component. 7 | */ 8 | 9 | import React, {Component} from 'react'; 10 | import csjs from 'react-csjs'; 11 | 12 | const Code = 13 | ({ classes, children }) => {children}; 14 | 15 | export default csjs` 16 | .code { 17 | display: inline-block; 18 | color: crimson; 19 | } 20 | `(Code); 21 | -------------------------------------------------------------------------------- /example/src/components/Header/index.js: -------------------------------------------------------------------------------- 1 | /* 2 |
3 | 4 | This file shows using the tagged template @decorator pattern. 5 | */ 6 | 7 | import React, { Component } from 'react'; 8 | import csjs from 'react-csjs'; 9 | 10 | const crimson = 'crimson'; 11 | const lineHeight = '1.8em'; 12 | 13 | @csjs` 14 | .header { 15 | color: ${crimson}; 16 | line-height: ${lineHeight}; 17 | } 18 | ` 19 | export default class Header extends Component { 20 | render() { 21 | /* 22 | no `styles` object in scope, 23 | so we use `classes` prop provided by react-csjs 24 | */ 25 | return

{this.props.children}

; 26 | } 27 | }; 28 | -------------------------------------------------------------------------------- /example/src/components/HelloWorld/HelloWorld.style.js: -------------------------------------------------------------------------------- 1 | import csjs from 'csjs'; 2 | 3 | export default csjs` 4 | body { 5 | font-family: Helvetica, Arial, sans-serif; 6 | } 7 | 8 | p { 9 | padding: 10px 0; 10 | } 11 | 12 | .hello { 13 | background: whitesmoke; 14 | padding: 20px; 15 | } 16 | 17 | hr { 18 | margin-top: 50px; 19 | border: 1px dotted silver; 20 | } 21 | 22 | .footer { 23 | margin: 20px; 24 | color: #777; 25 | font-size: small; 26 | } 27 | ` 28 | -------------------------------------------------------------------------------- /example/src/components/HelloWorld/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | 4 | This component shows the pattern of moving 5 | styles to an adjacent file, HelloWorld.style.js 6 | and then wrapping the default export with withStyles() 7 | 8 | See the other components imported here for more sample usage. 9 | */ 10 | 11 | import React from 'react'; 12 | import csjs from 'csjs'; 13 | import withStyles from 'react-csjs'; 14 | import Header from '../Header'; 15 | import Button from '../Button'; 16 | import Code from '../Code'; 17 | import styles from './HelloWorld.style.js'; 18 | 19 | const HelloWorld = ({ classes }) => ( 20 |
21 |
22 |
Hello World from react-csjs
23 |

24 | View the source for this in the /example directory. 25 |

26 |

27 | Here is a styled button:

31 |
32 |

33 | View this project on Github 34 |

35 |
36 |
37 | ); 38 | 39 | export default withStyles(styles)(HelloWorld); 40 | -------------------------------------------------------------------------------- /example/src/server/index.js: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import express from 'express'; 3 | import React from 'react'; 4 | import ReactDOM from 'react-dom/server'; 5 | import App from '../components/App'; 6 | import { getStyle } from 'react-csjs'; 7 | 8 | const server = express(); 9 | const clientAssets = require(KYT.ASSETS_MANIFEST); 10 | server.use(express.static(path.join(process.cwd(), KYT.PUBLIC_DIR))); 11 | 12 | // Render the app 13 | const renderedApp = ReactDOM.renderToString(); 14 | // Gather the generated CSS 15 | const renderedStyles = getStyle(); 16 | 17 | server.get('/', (req, res) => { 18 | res.send(` 19 | 20 | 21 | 22 | react-csjs example app 23 | 24 | 25 |
${renderedApp}
26 | 27 | 28 | 29 | `); 30 | }); 31 | 32 | server.listen(parseInt(KYT.SERVER_PORT, 10)); 33 | -------------------------------------------------------------------------------- /example/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | abab@^1.0.0: 4 | version "1.0.3" 5 | resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" 6 | 7 | accepts@~1.3.3: 8 | version "1.3.3" 9 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" 10 | dependencies: 11 | mime-types "~2.1.11" 12 | negotiator "0.6.1" 13 | 14 | acorn-globals@^1.0.4: 15 | version "1.0.9" 16 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" 17 | dependencies: 18 | acorn "^2.1.0" 19 | 20 | acorn@^2.1.0, acorn@^2.4.0: 21 | version "2.7.0" 22 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" 23 | 24 | amdefine@>=0.0.4: 25 | version "1.0.0" 26 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.0.tgz#fd17474700cb5cc9c2b709f0be9d23ce3c198c33" 27 | 28 | ansi-regex@^2.0.0: 29 | version "2.0.0" 30 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" 31 | 32 | ansi-styles@^2.2.1: 33 | version "2.2.1" 34 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 35 | 36 | array-flatten@1.1.1: 37 | version "1.1.1" 38 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 39 | 40 | asap@~2.0.3: 41 | version "2.0.5" 42 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" 43 | 44 | asn1@~0.2.3: 45 | version "0.2.3" 46 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 47 | 48 | assert-plus@^0.2.0: 49 | version "0.2.0" 50 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 51 | 52 | assert-plus@^1.0.0: 53 | version "1.0.0" 54 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 55 | 56 | asynckit@^0.4.0: 57 | version "0.4.0" 58 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 59 | 60 | aws-sign2@~0.6.0: 61 | version "0.6.0" 62 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 63 | 64 | aws4@^1.2.1: 65 | version "1.4.1" 66 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.4.1.tgz#fde7d5292466d230e5ee0f4e038d9dfaab08fc61" 67 | 68 | babel-code-frame@^6.16.0: 69 | version "6.16.0" 70 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.16.0.tgz#f90e60da0862909d3ce098733b5d3987c97cb8de" 71 | dependencies: 72 | chalk "^1.1.0" 73 | esutils "^2.0.2" 74 | js-tokens "^2.0.0" 75 | 76 | babel-helper-bindify-decorators@^6.8.0: 77 | version "6.8.0" 78 | resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.8.0.tgz#b34805a30b1433cc0042f7054f88a7133c144909" 79 | dependencies: 80 | babel-runtime "^6.0.0" 81 | babel-traverse "^6.8.0" 82 | babel-types "^6.8.0" 83 | 84 | babel-helper-builder-binary-assignment-operator-visitor@^6.8.0: 85 | version "6.15.0" 86 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.15.0.tgz#39e9ee143f797b642262e4646c681c32089ef1ab" 87 | dependencies: 88 | babel-helper-explode-assignable-expression "^6.8.0" 89 | babel-runtime "^6.0.0" 90 | babel-types "^6.15.0" 91 | 92 | babel-helper-builder-react-jsx@^6.8.0: 93 | version "6.9.0" 94 | resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.9.0.tgz#a633978d669c4c9dcad716cc577ee3e0bb8ae723" 95 | dependencies: 96 | babel-runtime "^6.9.0" 97 | babel-types "^6.9.0" 98 | esutils "^2.0.0" 99 | lodash "^4.2.0" 100 | 101 | babel-helper-call-delegate@^6.8.0: 102 | version "6.8.0" 103 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.8.0.tgz#9d283e7486779b6b0481864a11b371ea5c01fa64" 104 | dependencies: 105 | babel-helper-hoist-variables "^6.8.0" 106 | babel-runtime "^6.0.0" 107 | babel-traverse "^6.8.0" 108 | babel-types "^6.8.0" 109 | 110 | babel-helper-define-map@^6.8.0, babel-helper-define-map@^6.9.0: 111 | version "6.9.0" 112 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.9.0.tgz#6629f9b2a7e58e18e8379a57d1e6fbb2969902fb" 113 | dependencies: 114 | babel-helper-function-name "^6.8.0" 115 | babel-runtime "^6.9.0" 116 | babel-types "^6.9.0" 117 | lodash "^4.2.0" 118 | 119 | babel-helper-explode-assignable-expression@^6.8.0: 120 | version "6.8.0" 121 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.8.0.tgz#9b3525e05b761c3b88919d730a28bad1967e6556" 122 | dependencies: 123 | babel-runtime "^6.0.0" 124 | babel-traverse "^6.8.0" 125 | babel-types "^6.8.0" 126 | 127 | babel-helper-explode-class@^6.8.0: 128 | version "6.8.0" 129 | resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.8.0.tgz#196a228cc69ea57308695e4ebd1a36cf3f8eca3d" 130 | dependencies: 131 | babel-helper-bindify-decorators "^6.8.0" 132 | babel-runtime "^6.0.0" 133 | babel-traverse "^6.8.0" 134 | babel-types "^6.8.0" 135 | 136 | babel-helper-function-name@^6.8.0: 137 | version "6.8.0" 138 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.8.0.tgz#a0336ba14526a075cdf502fc52d3fe84b12f7a34" 139 | dependencies: 140 | babel-helper-get-function-arity "^6.8.0" 141 | babel-runtime "^6.0.0" 142 | babel-template "^6.8.0" 143 | babel-traverse "^6.8.0" 144 | babel-types "^6.8.0" 145 | 146 | babel-helper-get-function-arity@^6.8.0: 147 | version "6.8.0" 148 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.8.0.tgz#88276c24bd251cdf6f61b6f89f745f486ced92af" 149 | dependencies: 150 | babel-runtime "^6.0.0" 151 | babel-types "^6.8.0" 152 | 153 | babel-helper-hoist-variables@^6.8.0: 154 | version "6.8.0" 155 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.8.0.tgz#8b0766dc026ea9ea423bc2b34e665a4da7373aaf" 156 | dependencies: 157 | babel-runtime "^6.0.0" 158 | babel-types "^6.8.0" 159 | 160 | babel-helper-optimise-call-expression@^6.8.0: 161 | version "6.8.0" 162 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.8.0.tgz#4175628e9c89fc36174904f27070f29d38567f06" 163 | dependencies: 164 | babel-runtime "^6.0.0" 165 | babel-types "^6.8.0" 166 | 167 | babel-helper-regex@^6.8.0: 168 | version "6.9.0" 169 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.9.0.tgz#c74265fde180ff9a16735fee05e63cadb9e0b057" 170 | dependencies: 171 | babel-runtime "^6.9.0" 172 | babel-types "^6.9.0" 173 | lodash "^4.2.0" 174 | 175 | babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.16.2: 176 | version "6.16.2" 177 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.16.2.tgz#24315bde8326c60022dc053cce84cfe38d724b82" 178 | dependencies: 179 | babel-helper-function-name "^6.8.0" 180 | babel-runtime "^6.0.0" 181 | babel-template "^6.16.0" 182 | babel-traverse "^6.16.0" 183 | babel-types "^6.16.0" 184 | 185 | babel-helper-replace-supers@^6.14.0, babel-helper-replace-supers@^6.8.0: 186 | version "6.16.0" 187 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.16.0.tgz#21c97623cc7e430855753f252740122626a39e6b" 188 | dependencies: 189 | babel-helper-optimise-call-expression "^6.8.0" 190 | babel-messages "^6.8.0" 191 | babel-runtime "^6.0.0" 192 | babel-template "^6.16.0" 193 | babel-traverse "^6.16.0" 194 | babel-types "^6.16.0" 195 | 196 | babel-messages@^6.8.0: 197 | version "6.8.0" 198 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9" 199 | dependencies: 200 | babel-runtime "^6.0.0" 201 | 202 | babel-plugin-check-es2015-constants@^6.3.13: 203 | version "6.8.0" 204 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7" 205 | dependencies: 206 | babel-runtime "^6.0.0" 207 | 208 | babel-plugin-syntax-async-functions@^6.8.0: 209 | version "6.13.0" 210 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" 211 | 212 | babel-plugin-syntax-async-generators@^6.5.0: 213 | version "6.13.0" 214 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" 215 | 216 | babel-plugin-syntax-class-constructor-call@^6.8.0: 217 | version "6.13.0" 218 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.13.0.tgz#96fb2e9f177dca22824065de4392f2fe3486b765" 219 | 220 | babel-plugin-syntax-class-properties@^6.8.0: 221 | version "6.13.0" 222 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" 223 | 224 | babel-plugin-syntax-decorators@^6.1.18, babel-plugin-syntax-decorators@^6.13.0: 225 | version "6.13.0" 226 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" 227 | 228 | babel-plugin-syntax-do-expressions@^6.8.0: 229 | version "6.13.0" 230 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" 231 | 232 | babel-plugin-syntax-exponentiation-operator@^6.8.0: 233 | version "6.13.0" 234 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" 235 | 236 | babel-plugin-syntax-export-extensions@^6.8.0: 237 | version "6.13.0" 238 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" 239 | 240 | babel-plugin-syntax-flow@^6.3.13, babel-plugin-syntax-flow@^6.8.0: 241 | version "6.13.0" 242 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.13.0.tgz#9af0cd396087bf7677053e1afa52f206c0416f17" 243 | 244 | babel-plugin-syntax-function-bind@^6.8.0: 245 | version "6.13.0" 246 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" 247 | 248 | babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: 249 | version "6.13.0" 250 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.13.0.tgz#e741ff3992c578310be45c571bcd90a2f9c5586e" 251 | 252 | babel-plugin-syntax-object-rest-spread@^6.8.0: 253 | version "6.13.0" 254 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" 255 | 256 | babel-plugin-syntax-trailing-function-commas@^6.3.13: 257 | version "6.13.0" 258 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz#2b84b7d53dd744f94ff1fad7669406274b23f541" 259 | 260 | babel-plugin-transform-async-generator-functions@^6.17.0: 261 | version "6.17.0" 262 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz#d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54" 263 | dependencies: 264 | babel-helper-remap-async-to-generator "^6.16.2" 265 | babel-plugin-syntax-async-generators "^6.5.0" 266 | babel-runtime "^6.0.0" 267 | 268 | babel-plugin-transform-async-to-generator@^6.16.0: 269 | version "6.16.0" 270 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" 271 | dependencies: 272 | babel-helper-remap-async-to-generator "^6.16.0" 273 | babel-plugin-syntax-async-functions "^6.8.0" 274 | babel-runtime "^6.0.0" 275 | 276 | babel-plugin-transform-class-constructor-call@^6.3.13: 277 | version "6.8.0" 278 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.8.0.tgz#6e740bc80f16d295fa598d92518666020a906192" 279 | dependencies: 280 | babel-plugin-syntax-class-constructor-call "^6.8.0" 281 | babel-runtime "^6.0.0" 282 | babel-template "^6.8.0" 283 | 284 | babel-plugin-transform-class-properties@^6.16.0: 285 | version "6.16.0" 286 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.16.0.tgz#969bca24d34e401d214f36b8af5c1346859bc904" 287 | dependencies: 288 | babel-helper-function-name "^6.8.0" 289 | babel-plugin-syntax-class-properties "^6.8.0" 290 | babel-runtime "^6.9.1" 291 | 292 | babel-plugin-transform-decorators-legacy: 293 | version "1.3.4" 294 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925" 295 | dependencies: 296 | babel-plugin-syntax-decorators "^6.1.18" 297 | babel-runtime "^6.2.0" 298 | babel-template "^6.3.0" 299 | 300 | babel-plugin-transform-decorators@^6.13.0: 301 | version "6.13.0" 302 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz#82d65c1470ae83e2d13eebecb0a1c2476d62da9d" 303 | dependencies: 304 | babel-helper-define-map "^6.8.0" 305 | babel-helper-explode-class "^6.8.0" 306 | babel-plugin-syntax-decorators "^6.13.0" 307 | babel-runtime "^6.0.0" 308 | babel-template "^6.8.0" 309 | babel-types "^6.13.0" 310 | 311 | babel-plugin-transform-do-expressions@^6.3.13: 312 | version "6.8.0" 313 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.8.0.tgz#fda692af339835cc255bb7544efb8f7c1306c273" 314 | dependencies: 315 | babel-plugin-syntax-do-expressions "^6.8.0" 316 | babel-runtime "^6.0.0" 317 | 318 | babel-plugin-transform-es2015-arrow-functions@^6.3.13: 319 | version "6.8.0" 320 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d" 321 | dependencies: 322 | babel-runtime "^6.0.0" 323 | 324 | babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: 325 | version "6.8.0" 326 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d" 327 | dependencies: 328 | babel-runtime "^6.0.0" 329 | 330 | babel-plugin-transform-es2015-block-scoping@^6.14.0: 331 | version "6.15.0" 332 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.15.0.tgz#5b443ca142be8d1db6a8c2ae42f51958b66b70f6" 333 | dependencies: 334 | babel-runtime "^6.9.0" 335 | babel-template "^6.15.0" 336 | babel-traverse "^6.15.0" 337 | babel-types "^6.15.0" 338 | lodash "^4.2.0" 339 | 340 | babel-plugin-transform-es2015-classes@^6.14.0: 341 | version "6.14.0" 342 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.14.0.tgz#87d5149ee91fb475922409f9af5b2ba5d1e39287" 343 | dependencies: 344 | babel-helper-define-map "^6.9.0" 345 | babel-helper-function-name "^6.8.0" 346 | babel-helper-optimise-call-expression "^6.8.0" 347 | babel-helper-replace-supers "^6.14.0" 348 | babel-messages "^6.8.0" 349 | babel-runtime "^6.9.0" 350 | babel-template "^6.14.0" 351 | babel-traverse "^6.14.0" 352 | babel-types "^6.14.0" 353 | 354 | babel-plugin-transform-es2015-computed-properties@^6.3.13: 355 | version "6.8.0" 356 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870" 357 | dependencies: 358 | babel-helper-define-map "^6.8.0" 359 | babel-runtime "^6.0.0" 360 | babel-template "^6.8.0" 361 | 362 | babel-plugin-transform-es2015-destructuring@^6.16.0: 363 | version "6.16.0" 364 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.16.0.tgz#050fe0866f5d53b36062ee10cdf5bfe64f929627" 365 | dependencies: 366 | babel-runtime "^6.9.0" 367 | 368 | babel-plugin-transform-es2015-duplicate-keys@^6.6.0: 369 | version "6.8.0" 370 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d" 371 | dependencies: 372 | babel-runtime "^6.0.0" 373 | babel-types "^6.8.0" 374 | 375 | babel-plugin-transform-es2015-for-of@^6.6.0: 376 | version "6.8.0" 377 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.8.0.tgz#82eda139ba4270dda135c3ec1b1f2813fa62f23c" 378 | dependencies: 379 | babel-runtime "^6.0.0" 380 | 381 | babel-plugin-transform-es2015-function-name@^6.9.0: 382 | version "6.9.0" 383 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719" 384 | dependencies: 385 | babel-helper-function-name "^6.8.0" 386 | babel-runtime "^6.9.0" 387 | babel-types "^6.9.0" 388 | 389 | babel-plugin-transform-es2015-literals@^6.3.13: 390 | version "6.8.0" 391 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468" 392 | dependencies: 393 | babel-runtime "^6.0.0" 394 | 395 | babel-plugin-transform-es2015-modules-amd@^6.8.0: 396 | version "6.8.0" 397 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.8.0.tgz#25d954aa0bf04031fc46d2a8e6230bb1abbde4a3" 398 | dependencies: 399 | babel-plugin-transform-es2015-modules-commonjs "^6.8.0" 400 | babel-runtime "^6.0.0" 401 | babel-template "^6.8.0" 402 | 403 | babel-plugin-transform-es2015-modules-commonjs@^6.16.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: 404 | version "6.16.0" 405 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.16.0.tgz#0a34b447bc88ad1a70988b6d199cca6d0b96c892" 406 | dependencies: 407 | babel-plugin-transform-strict-mode "^6.8.0" 408 | babel-runtime "^6.0.0" 409 | babel-template "^6.16.0" 410 | babel-types "^6.16.0" 411 | 412 | babel-plugin-transform-es2015-modules-systemjs@^6.14.0: 413 | version "6.14.0" 414 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.14.0.tgz#c519b5c73e32388e679c9b1edf41b2fc23dc3303" 415 | dependencies: 416 | babel-helper-hoist-variables "^6.8.0" 417 | babel-runtime "^6.11.6" 418 | babel-template "^6.14.0" 419 | 420 | babel-plugin-transform-es2015-modules-umd@^6.12.0: 421 | version "6.12.0" 422 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.12.0.tgz#5d73559eb49266775ed281c40be88a421bd371a3" 423 | dependencies: 424 | babel-plugin-transform-es2015-modules-amd "^6.8.0" 425 | babel-runtime "^6.0.0" 426 | babel-template "^6.8.0" 427 | 428 | babel-plugin-transform-es2015-object-super@^6.3.13: 429 | version "6.8.0" 430 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5" 431 | dependencies: 432 | babel-helper-replace-supers "^6.8.0" 433 | babel-runtime "^6.0.0" 434 | 435 | babel-plugin-transform-es2015-parameters@^6.16.0: 436 | version "6.17.0" 437 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.17.0.tgz#e06d30cef897f46adb4734707bbe128a0d427d58" 438 | dependencies: 439 | babel-helper-call-delegate "^6.8.0" 440 | babel-helper-get-function-arity "^6.8.0" 441 | babel-runtime "^6.9.0" 442 | babel-template "^6.16.0" 443 | babel-traverse "^6.16.0" 444 | babel-types "^6.16.0" 445 | 446 | babel-plugin-transform-es2015-shorthand-properties@^6.3.13: 447 | version "6.8.0" 448 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.8.0.tgz#f0a4c5fd471630acf333c2d99c3d677bf0952149" 449 | dependencies: 450 | babel-runtime "^6.0.0" 451 | babel-types "^6.8.0" 452 | 453 | babel-plugin-transform-es2015-spread@^6.3.13: 454 | version "6.8.0" 455 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c" 456 | dependencies: 457 | babel-runtime "^6.0.0" 458 | 459 | babel-plugin-transform-es2015-sticky-regex@^6.3.13: 460 | version "6.8.0" 461 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be" 462 | dependencies: 463 | babel-helper-regex "^6.8.0" 464 | babel-runtime "^6.0.0" 465 | babel-types "^6.8.0" 466 | 467 | babel-plugin-transform-es2015-template-literals@^6.6.0: 468 | version "6.8.0" 469 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b" 470 | dependencies: 471 | babel-runtime "^6.0.0" 472 | 473 | babel-plugin-transform-es2015-typeof-symbol@^6.6.0: 474 | version "6.8.0" 475 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.8.0.tgz#84c29eb1219372480955a020fef7a65c44f30533" 476 | dependencies: 477 | babel-runtime "^6.0.0" 478 | 479 | babel-plugin-transform-es2015-unicode-regex@^6.3.13: 480 | version "6.11.0" 481 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c" 482 | dependencies: 483 | babel-helper-regex "^6.8.0" 484 | babel-runtime "^6.0.0" 485 | regexpu-core "^2.0.0" 486 | 487 | babel-plugin-transform-exponentiation-operator@^6.3.13: 488 | version "6.8.0" 489 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4" 490 | dependencies: 491 | babel-helper-builder-binary-assignment-operator-visitor "^6.8.0" 492 | babel-plugin-syntax-exponentiation-operator "^6.8.0" 493 | babel-runtime "^6.0.0" 494 | 495 | babel-plugin-transform-export-extensions@^6.3.13: 496 | version "6.8.0" 497 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.8.0.tgz#fa80ff655b636549431bfd38f6b817bd82e47f5b" 498 | dependencies: 499 | babel-plugin-syntax-export-extensions "^6.8.0" 500 | babel-runtime "^6.0.0" 501 | 502 | babel-plugin-transform-flow-strip-types@^6.3.13: 503 | version "6.14.0" 504 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.14.0.tgz#35ceb03f8770934044bab1a76f7e4ee0aa9220f9" 505 | dependencies: 506 | babel-plugin-syntax-flow "^6.8.0" 507 | babel-runtime "^6.0.0" 508 | 509 | babel-plugin-transform-function-bind@^6.3.13: 510 | version "6.8.0" 511 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.8.0.tgz#e7f334ce69f50d28fe850a822eaaab9fa4f4d821" 512 | dependencies: 513 | babel-plugin-syntax-function-bind "^6.8.0" 514 | babel-runtime "^6.0.0" 515 | 516 | babel-plugin-transform-object-rest-spread@^6.16.0: 517 | version "6.16.0" 518 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.16.0.tgz#db441d56fffc1999052fdebe2e2f25ebd28e36a9" 519 | dependencies: 520 | babel-plugin-syntax-object-rest-spread "^6.8.0" 521 | babel-runtime "^6.0.0" 522 | 523 | babel-plugin-transform-react-display-name@^6.3.13: 524 | version "6.8.0" 525 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.8.0.tgz#f7a084977383d728bdbdc2835bba0159577f660e" 526 | dependencies: 527 | babel-runtime "^6.0.0" 528 | 529 | babel-plugin-transform-react-jsx-self@^6.11.0: 530 | version "6.11.0" 531 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.11.0.tgz#605c9450c1429f97a930f7e1dfe3f0d9d0dbd0f4" 532 | dependencies: 533 | babel-plugin-syntax-jsx "^6.8.0" 534 | babel-runtime "^6.9.0" 535 | 536 | babel-plugin-transform-react-jsx-source@^6.3.13: 537 | version "6.9.0" 538 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.9.0.tgz#af684a05c2067a86e0957d4f343295ccf5dccf00" 539 | dependencies: 540 | babel-plugin-syntax-jsx "^6.8.0" 541 | babel-runtime "^6.9.0" 542 | 543 | babel-plugin-transform-react-jsx@^6.3.13: 544 | version "6.8.0" 545 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.8.0.tgz#94759942f70af18c617189aa7f3593f1644a71ab" 546 | dependencies: 547 | babel-helper-builder-react-jsx "^6.8.0" 548 | babel-plugin-syntax-jsx "^6.8.0" 549 | babel-runtime "^6.0.0" 550 | 551 | babel-plugin-transform-regenerator@^6.16.0: 552 | version "6.16.1" 553 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59" 554 | dependencies: 555 | babel-runtime "^6.9.0" 556 | babel-types "^6.16.0" 557 | private "~0.1.5" 558 | 559 | babel-plugin-transform-strict-mode@^6.8.0: 560 | version "6.11.3" 561 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.11.3.tgz#183741325126bc7ec9cf4c0fc257d3e7ca5afd40" 562 | dependencies: 563 | babel-runtime "^6.0.0" 564 | babel-types "^6.8.0" 565 | 566 | babel-preset-es2015@^6.9.0: 567 | version "6.16.0" 568 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.16.0.tgz#59acecd1efbebaf48f89404840f2fe78c4d2ad5c" 569 | dependencies: 570 | babel-plugin-check-es2015-constants "^6.3.13" 571 | babel-plugin-transform-es2015-arrow-functions "^6.3.13" 572 | babel-plugin-transform-es2015-block-scoped-functions "^6.3.13" 573 | babel-plugin-transform-es2015-block-scoping "^6.14.0" 574 | babel-plugin-transform-es2015-classes "^6.14.0" 575 | babel-plugin-transform-es2015-computed-properties "^6.3.13" 576 | babel-plugin-transform-es2015-destructuring "^6.16.0" 577 | babel-plugin-transform-es2015-duplicate-keys "^6.6.0" 578 | babel-plugin-transform-es2015-for-of "^6.6.0" 579 | babel-plugin-transform-es2015-function-name "^6.9.0" 580 | babel-plugin-transform-es2015-literals "^6.3.13" 581 | babel-plugin-transform-es2015-modules-amd "^6.8.0" 582 | babel-plugin-transform-es2015-modules-commonjs "^6.16.0" 583 | babel-plugin-transform-es2015-modules-systemjs "^6.14.0" 584 | babel-plugin-transform-es2015-modules-umd "^6.12.0" 585 | babel-plugin-transform-es2015-object-super "^6.3.13" 586 | babel-plugin-transform-es2015-parameters "^6.16.0" 587 | babel-plugin-transform-es2015-shorthand-properties "^6.3.13" 588 | babel-plugin-transform-es2015-spread "^6.3.13" 589 | babel-plugin-transform-es2015-sticky-regex "^6.3.13" 590 | babel-plugin-transform-es2015-template-literals "^6.6.0" 591 | babel-plugin-transform-es2015-typeof-symbol "^6.6.0" 592 | babel-plugin-transform-es2015-unicode-regex "^6.3.13" 593 | babel-plugin-transform-regenerator "^6.16.0" 594 | 595 | babel-preset-react@^6.11.1: 596 | version "6.16.0" 597 | resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.16.0.tgz#aa117d60de0928607e343c4828906e4661824316" 598 | dependencies: 599 | babel-plugin-syntax-flow "^6.3.13" 600 | babel-plugin-syntax-jsx "^6.3.13" 601 | babel-plugin-transform-flow-strip-types "^6.3.13" 602 | babel-plugin-transform-react-display-name "^6.3.13" 603 | babel-plugin-transform-react-jsx "^6.3.13" 604 | babel-plugin-transform-react-jsx-self "^6.11.0" 605 | babel-plugin-transform-react-jsx-source "^6.3.13" 606 | 607 | babel-preset-stage-0@^6.5.0: 608 | version "6.16.0" 609 | resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.16.0.tgz#f5a263c420532fd57491f1a7315b3036e428f823" 610 | dependencies: 611 | babel-plugin-transform-do-expressions "^6.3.13" 612 | babel-plugin-transform-function-bind "^6.3.13" 613 | babel-preset-stage-1 "^6.16.0" 614 | 615 | babel-preset-stage-1@^6.16.0: 616 | version "6.16.0" 617 | resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.16.0.tgz#9d31fbbdae7b17c549fd3ac93e3cf6902695e479" 618 | dependencies: 619 | babel-plugin-transform-class-constructor-call "^6.3.13" 620 | babel-plugin-transform-export-extensions "^6.3.13" 621 | babel-preset-stage-2 "^6.16.0" 622 | 623 | babel-preset-stage-2@^6.16.0: 624 | version "6.17.0" 625 | resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.17.0.tgz#dc4f84582781353cef36c41247eae5e36c4cae0d" 626 | dependencies: 627 | babel-plugin-transform-class-properties "^6.16.0" 628 | babel-plugin-transform-decorators "^6.13.0" 629 | babel-preset-stage-3 "^6.17.0" 630 | 631 | babel-preset-stage-3@^6.17.0: 632 | version "6.17.0" 633 | resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz#b6638e46db6e91e3f889013d8ce143917c685e39" 634 | dependencies: 635 | babel-plugin-syntax-trailing-function-commas "^6.3.13" 636 | babel-plugin-transform-async-generator-functions "^6.17.0" 637 | babel-plugin-transform-async-to-generator "^6.16.0" 638 | babel-plugin-transform-exponentiation-operator "^6.3.13" 639 | babel-plugin-transform-object-rest-spread "^6.16.0" 640 | 641 | babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.2.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1: 642 | version "6.11.6" 643 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.11.6.tgz#6db707fef2d49c49bfa3cb64efdb436b518b8222" 644 | dependencies: 645 | core-js "^2.4.0" 646 | regenerator-runtime "^0.9.5" 647 | 648 | babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.8.0: 649 | version "6.16.0" 650 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" 651 | dependencies: 652 | babel-runtime "^6.9.0" 653 | babel-traverse "^6.16.0" 654 | babel-types "^6.16.0" 655 | babylon "^6.11.0" 656 | lodash "^4.2.0" 657 | 658 | babel-traverse@^6.14.0, babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.8.0: 659 | version "6.16.0" 660 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.16.0.tgz#fba85ae1fd4d107de9ce003149cc57f53bef0c4f" 661 | dependencies: 662 | babel-code-frame "^6.16.0" 663 | babel-messages "^6.8.0" 664 | babel-runtime "^6.9.0" 665 | babel-types "^6.16.0" 666 | babylon "^6.11.0" 667 | debug "^2.2.0" 668 | globals "^8.3.0" 669 | invariant "^2.2.0" 670 | lodash "^4.2.0" 671 | 672 | babel-types@^6.13.0, babel-types@^6.14.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.8.0, babel-types@^6.9.0: 673 | version "6.16.0" 674 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.16.0.tgz#71cca1dbe5337766225c5c193071e8ebcbcffcfe" 675 | dependencies: 676 | babel-runtime "^6.9.1" 677 | esutils "^2.0.2" 678 | lodash "^4.2.0" 679 | to-fast-properties "^1.0.1" 680 | 681 | babylon@^6.11.0: 682 | version "6.11.4" 683 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.11.4.tgz#75e1f52187efa0cde5a541a7f7fdda38f6eb5bd2" 684 | 685 | bcrypt-pbkdf@^1.0.0: 686 | version "1.0.0" 687 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" 688 | dependencies: 689 | tweetnacl "^0.14.3" 690 | 691 | bl@~1.1.2: 692 | version "1.1.2" 693 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" 694 | dependencies: 695 | readable-stream "~2.0.5" 696 | 697 | boolbase@~1.0.0: 698 | version "1.0.0" 699 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 700 | 701 | boom@2.x.x: 702 | version "2.10.1" 703 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 704 | dependencies: 705 | hoek "2.x.x" 706 | 707 | caseless@~0.11.0: 708 | version "0.11.0" 709 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" 710 | 711 | chalk@^1.1.0, chalk@^1.1.1: 712 | version "1.1.3" 713 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 714 | dependencies: 715 | ansi-styles "^2.2.1" 716 | escape-string-regexp "^1.0.2" 717 | has-ansi "^2.0.0" 718 | strip-ansi "^3.0.0" 719 | supports-color "^2.0.0" 720 | 721 | cheerio@^0.20.0: 722 | version "0.20.0" 723 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.20.0.tgz#5c710f2bab95653272842ba01c6ea61b3545ec35" 724 | dependencies: 725 | css-select "~1.2.0" 726 | dom-serializer "~0.1.0" 727 | entities "~1.1.1" 728 | htmlparser2 "~3.8.1" 729 | lodash "^4.1.0" 730 | optionalDependencies: 731 | jsdom "^7.0.2" 732 | 733 | combined-stream@^1.0.5, combined-stream@~1.0.5: 734 | version "1.0.5" 735 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 736 | dependencies: 737 | delayed-stream "~1.0.0" 738 | 739 | commander@^2.9.0: 740 | version "2.9.0" 741 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 742 | dependencies: 743 | graceful-readlink ">= 1.0.0" 744 | 745 | content-disposition@0.5.1: 746 | version "0.5.1" 747 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" 748 | 749 | content-type@~1.0.2: 750 | version "1.0.2" 751 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" 752 | 753 | cookie-signature@1.0.6: 754 | version "1.0.6" 755 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 756 | 757 | cookie@0.3.1: 758 | version "0.3.1" 759 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 760 | 761 | core-js@^1.0.0: 762 | version "1.2.7" 763 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 764 | 765 | core-js@^2.4.0: 766 | version "2.4.1" 767 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 768 | 769 | core-util-is@~1.0.0: 770 | version "1.0.2" 771 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 772 | 773 | cryptiles@2.x.x: 774 | version "2.0.5" 775 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 776 | dependencies: 777 | boom "2.x.x" 778 | 779 | csjs@^1.0.6: 780 | version "1.0.6" 781 | resolved "https://registry.yarnpkg.com/csjs/-/csjs-1.0.6.tgz#43a6a5b87d95a8252f13144eade86e33a8c8564b" 782 | 783 | css-select@~1.2.0: 784 | version "1.2.0" 785 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" 786 | dependencies: 787 | boolbase "~1.0.0" 788 | css-what "2.1" 789 | domutils "1.5.1" 790 | nth-check "~1.0.1" 791 | 792 | css-what@2.1: 793 | version "2.1.0" 794 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" 795 | 796 | "cssom@>= 0.3.0 < 0.4.0", cssom@0.3.x: 797 | version "0.3.1" 798 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.1.tgz#c9e37ef2490e64f6d1baa10fda852257082c25d3" 799 | 800 | "cssstyle@>= 0.2.29 < 0.3.0": 801 | version "0.2.37" 802 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" 803 | dependencies: 804 | cssom "0.3.x" 805 | 806 | dashdash@^1.12.0: 807 | version "1.14.0" 808 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141" 809 | dependencies: 810 | assert-plus "^1.0.0" 811 | 812 | debug@^2.2.0, debug@~2.2.0: 813 | version "2.2.0" 814 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 815 | dependencies: 816 | ms "0.7.1" 817 | 818 | deep-is@~0.1.3: 819 | version "0.1.3" 820 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 821 | 822 | define-properties@^1.1.1, define-properties@^1.1.2: 823 | version "1.1.2" 824 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 825 | dependencies: 826 | foreach "^2.0.5" 827 | object-keys "^1.0.8" 828 | 829 | delayed-stream@~1.0.0: 830 | version "1.0.0" 831 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 832 | 833 | depd@~1.1.0: 834 | version "1.1.0" 835 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" 836 | 837 | destroy@~1.0.4: 838 | version "1.0.4" 839 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 840 | 841 | dom-serializer@~0.1.0, dom-serializer@0: 842 | version "0.1.0" 843 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 844 | dependencies: 845 | domelementtype "~1.1.1" 846 | entities "~1.1.1" 847 | 848 | domelementtype@~1.1.1: 849 | version "1.1.3" 850 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 851 | 852 | domelementtype@1: 853 | version "1.3.0" 854 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" 855 | 856 | domhandler@2.3: 857 | version "2.3.0" 858 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" 859 | dependencies: 860 | domelementtype "1" 861 | 862 | domutils@1.5, domutils@1.5.1: 863 | version "1.5.1" 864 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" 865 | dependencies: 866 | dom-serializer "0" 867 | domelementtype "1" 868 | 869 | ecc-jsbn@~0.1.1: 870 | version "0.1.1" 871 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 872 | dependencies: 873 | jsbn "~0.1.0" 874 | 875 | ee-first@1.1.1: 876 | version "1.1.1" 877 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 878 | 879 | encodeurl@~1.0.1: 880 | version "1.0.1" 881 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" 882 | 883 | encoding@^0.1.11: 884 | version "0.1.12" 885 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 886 | dependencies: 887 | iconv-lite "~0.4.13" 888 | 889 | entities@~1.1.1: 890 | version "1.1.1" 891 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" 892 | 893 | entities@1.0: 894 | version "1.0.0" 895 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" 896 | 897 | enzyme@^2.4.1: 898 | version "2.4.1" 899 | resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.4.1.tgz#90fa9861d982d0ceb92a9fd57e38426a2f74d3b1" 900 | dependencies: 901 | cheerio "^0.20.0" 902 | is-subset "^0.1.1" 903 | lodash "^4.13.1" 904 | object-is "^1.0.1" 905 | object.assign "^4.0.3" 906 | object.values "^1.0.3" 907 | 908 | es-abstract@^1.3.2: 909 | version "1.6.1" 910 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.6.1.tgz#bb8a2064120abcf928a086ea3d9043114285ec99" 911 | dependencies: 912 | es-to-primitive "^1.1.1" 913 | function-bind "^1.1.0" 914 | is-callable "^1.1.3" 915 | is-regex "^1.0.3" 916 | 917 | es-to-primitive@^1.1.1: 918 | version "1.1.1" 919 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 920 | dependencies: 921 | is-callable "^1.1.1" 922 | is-date-object "^1.0.1" 923 | is-symbol "^1.0.1" 924 | 925 | escape-html@~1.0.3: 926 | version "1.0.3" 927 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 928 | 929 | escape-string-regexp@^1.0.2: 930 | version "1.0.5" 931 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 932 | 933 | escodegen@^1.6.1: 934 | version "1.8.1" 935 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" 936 | dependencies: 937 | esprima "^2.7.1" 938 | estraverse "^1.9.1" 939 | esutils "^2.0.2" 940 | optionator "^0.8.1" 941 | optionalDependencies: 942 | source-map "~0.2.0" 943 | 944 | esprima@^2.7.1: 945 | version "2.7.3" 946 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 947 | 948 | estraverse@^1.9.1: 949 | version "1.9.3" 950 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" 951 | 952 | esutils@^2.0.0, esutils@^2.0.2: 953 | version "2.0.2" 954 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 955 | 956 | etag@~1.7.0: 957 | version "1.7.0" 958 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" 959 | 960 | express@^4.14.0: 961 | version "4.14.0" 962 | resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" 963 | dependencies: 964 | accepts "~1.3.3" 965 | array-flatten "1.1.1" 966 | content-disposition "0.5.1" 967 | content-type "~1.0.2" 968 | cookie "0.3.1" 969 | cookie-signature "1.0.6" 970 | debug "~2.2.0" 971 | depd "~1.1.0" 972 | encodeurl "~1.0.1" 973 | escape-html "~1.0.3" 974 | etag "~1.7.0" 975 | finalhandler "0.5.0" 976 | fresh "0.3.0" 977 | merge-descriptors "1.0.1" 978 | methods "~1.1.2" 979 | on-finished "~2.3.0" 980 | parseurl "~1.3.1" 981 | path-to-regexp "0.1.7" 982 | proxy-addr "~1.1.2" 983 | qs "6.2.0" 984 | range-parser "~1.2.0" 985 | send "0.14.1" 986 | serve-static "~1.11.1" 987 | type-is "~1.6.13" 988 | utils-merge "1.0.0" 989 | vary "~1.1.0" 990 | 991 | extend@~3.0.0: 992 | version "3.0.0" 993 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" 994 | 995 | extsprintf@1.0.2: 996 | version "1.0.2" 997 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 998 | 999 | fast-levenshtein@~2.0.4: 1000 | version "2.0.5" 1001 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2" 1002 | 1003 | fbjs@^0.8.4: 1004 | version "0.8.5" 1005 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.5.tgz#f69ba8a876096cb1b9bffe4d7c1e71c19d39d008" 1006 | dependencies: 1007 | core-js "^1.0.0" 1008 | immutable "^3.7.6" 1009 | isomorphic-fetch "^2.1.1" 1010 | loose-envify "^1.0.0" 1011 | object-assign "^4.1.0" 1012 | promise "^7.1.1" 1013 | ua-parser-js "^0.7.9" 1014 | 1015 | finalhandler@0.5.0: 1016 | version "0.5.0" 1017 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" 1018 | dependencies: 1019 | debug "~2.2.0" 1020 | escape-html "~1.0.3" 1021 | on-finished "~2.3.0" 1022 | statuses "~1.3.0" 1023 | unpipe "~1.0.0" 1024 | 1025 | foreach@^2.0.5: 1026 | version "2.0.5" 1027 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 1028 | 1029 | forever-agent@~0.6.1: 1030 | version "0.6.1" 1031 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1032 | 1033 | form-data@~2.0.0: 1034 | version "2.0.0" 1035 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" 1036 | dependencies: 1037 | asynckit "^0.4.0" 1038 | combined-stream "^1.0.5" 1039 | mime-types "^2.1.11" 1040 | 1041 | forwarded@~0.1.0: 1042 | version "0.1.0" 1043 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" 1044 | 1045 | fresh@0.3.0: 1046 | version "0.3.0" 1047 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" 1048 | 1049 | function-bind@^1.0.2, function-bind@^1.1.0: 1050 | version "1.1.0" 1051 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 1052 | 1053 | generate-function@^2.0.0: 1054 | version "2.0.0" 1055 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" 1056 | 1057 | generate-object-property@^1.1.0: 1058 | version "1.2.0" 1059 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 1060 | dependencies: 1061 | is-property "^1.0.0" 1062 | 1063 | getpass@^0.1.1: 1064 | version "0.1.6" 1065 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" 1066 | dependencies: 1067 | assert-plus "^1.0.0" 1068 | 1069 | globals@^8.3.0: 1070 | version "8.18.0" 1071 | resolved "https://registry.yarnpkg.com/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" 1072 | 1073 | "graceful-readlink@>= 1.0.0": 1074 | version "1.0.1" 1075 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 1076 | 1077 | har-validator@~2.0.6: 1078 | version "2.0.6" 1079 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" 1080 | dependencies: 1081 | chalk "^1.1.1" 1082 | commander "^2.9.0" 1083 | is-my-json-valid "^2.12.4" 1084 | pinkie-promise "^2.0.0" 1085 | 1086 | has-ansi@^2.0.0: 1087 | version "2.0.0" 1088 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1089 | dependencies: 1090 | ansi-regex "^2.0.0" 1091 | 1092 | has@^1.0.1: 1093 | version "1.0.1" 1094 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 1095 | dependencies: 1096 | function-bind "^1.0.2" 1097 | 1098 | hawk@~3.1.3: 1099 | version "3.1.3" 1100 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 1101 | dependencies: 1102 | boom "2.x.x" 1103 | cryptiles "2.x.x" 1104 | hoek "2.x.x" 1105 | sntp "1.x.x" 1106 | 1107 | hoek@2.x.x: 1108 | version "2.16.3" 1109 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 1110 | 1111 | htmlparser2@~3.8.1: 1112 | version "3.8.3" 1113 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" 1114 | dependencies: 1115 | domelementtype "1" 1116 | domhandler "2.3" 1117 | domutils "1.5" 1118 | entities "1.0" 1119 | readable-stream "1.1" 1120 | 1121 | http-errors@~1.5.0: 1122 | version "1.5.0" 1123 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.0.tgz#b1cb3d8260fd8e2386cad3189045943372d48211" 1124 | dependencies: 1125 | inherits "2.0.1" 1126 | setprototypeof "1.0.1" 1127 | statuses ">= 1.3.0 < 2" 1128 | 1129 | http-signature@~1.1.0: 1130 | version "1.1.1" 1131 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 1132 | dependencies: 1133 | assert-plus "^0.2.0" 1134 | jsprim "^1.2.2" 1135 | sshpk "^1.7.0" 1136 | 1137 | iconv-lite@~0.4.13: 1138 | version "0.4.13" 1139 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" 1140 | 1141 | immutable@^3.7.6: 1142 | version "3.8.1" 1143 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2" 1144 | 1145 | inherits@~2.0.1: 1146 | version "2.0.3" 1147 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1148 | 1149 | inherits@2.0.1: 1150 | version "2.0.1" 1151 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 1152 | 1153 | invariant@^2.2.0: 1154 | version "2.2.1" 1155 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54" 1156 | dependencies: 1157 | loose-envify "^1.0.0" 1158 | 1159 | ipaddr.js@1.1.1: 1160 | version "1.1.1" 1161 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230" 1162 | 1163 | is-callable@^1.1.1, is-callable@^1.1.3: 1164 | version "1.1.3" 1165 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" 1166 | 1167 | is-date-object@^1.0.1: 1168 | version "1.0.1" 1169 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1170 | 1171 | is-my-json-valid@^2.12.4: 1172 | version "2.15.0" 1173 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" 1174 | dependencies: 1175 | generate-function "^2.0.0" 1176 | generate-object-property "^1.1.0" 1177 | jsonpointer "^4.0.0" 1178 | xtend "^4.0.0" 1179 | 1180 | is-property@^1.0.0: 1181 | version "1.0.2" 1182 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 1183 | 1184 | is-regex@^1.0.3: 1185 | version "1.0.3" 1186 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637" 1187 | 1188 | is-stream@^1.0.1: 1189 | version "1.1.0" 1190 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1191 | 1192 | is-subset@^0.1.1: 1193 | version "0.1.1" 1194 | resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" 1195 | 1196 | is-symbol@^1.0.1: 1197 | version "1.0.1" 1198 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 1199 | 1200 | is-typedarray@~1.0.0: 1201 | version "1.0.0" 1202 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1203 | 1204 | isarray@~1.0.0: 1205 | version "1.0.0" 1206 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1207 | 1208 | isarray@0.0.1: 1209 | version "0.0.1" 1210 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1211 | 1212 | isomorphic-fetch@^2.1.1: 1213 | version "2.2.1" 1214 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" 1215 | dependencies: 1216 | node-fetch "^1.0.1" 1217 | whatwg-fetch ">=0.10.0" 1218 | 1219 | isstream@~0.1.2: 1220 | version "0.1.2" 1221 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1222 | 1223 | jodid25519@^1.0.0: 1224 | version "1.0.2" 1225 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 1226 | dependencies: 1227 | jsbn "~0.1.0" 1228 | 1229 | js-tokens@^1.0.1: 1230 | version "1.0.3" 1231 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.3.tgz#14e56eb68c8f1a92c43d59f5014ec29dc20f2ae1" 1232 | 1233 | js-tokens@^2.0.0: 1234 | version "2.0.0" 1235 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" 1236 | 1237 | jsbn@~0.1.0: 1238 | version "0.1.0" 1239 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" 1240 | 1241 | jsdom@^7.0.2: 1242 | version "7.2.2" 1243 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e" 1244 | dependencies: 1245 | abab "^1.0.0" 1246 | acorn "^2.4.0" 1247 | acorn-globals "^1.0.4" 1248 | cssom ">= 0.3.0 < 0.4.0" 1249 | cssstyle ">= 0.2.29 < 0.3.0" 1250 | escodegen "^1.6.1" 1251 | nwmatcher ">= 1.3.7 < 2.0.0" 1252 | parse5 "^1.5.1" 1253 | request "^2.55.0" 1254 | sax "^1.1.4" 1255 | symbol-tree ">= 3.1.0 < 4.0.0" 1256 | tough-cookie "^2.2.0" 1257 | webidl-conversions "^2.0.0" 1258 | whatwg-url-compat "~0.6.5" 1259 | xml-name-validator ">= 2.0.1 < 3.0.0" 1260 | 1261 | jsesc@~0.5.0: 1262 | version "0.5.0" 1263 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1264 | 1265 | json-schema@0.2.3: 1266 | version "0.2.3" 1267 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1268 | 1269 | json-stringify-safe@~5.0.1: 1270 | version "5.0.1" 1271 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1272 | 1273 | jsonpointer@^4.0.0: 1274 | version "4.0.0" 1275 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" 1276 | 1277 | jsprim@^1.2.2: 1278 | version "1.3.1" 1279 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" 1280 | dependencies: 1281 | extsprintf "1.0.2" 1282 | json-schema "0.2.3" 1283 | verror "1.3.6" 1284 | 1285 | levn@~0.3.0: 1286 | version "0.3.0" 1287 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1288 | dependencies: 1289 | prelude-ls "~1.1.2" 1290 | type-check "~0.3.2" 1291 | 1292 | lodash@^4.1.0, lodash@^4.13.1, lodash@^4.2.0: 1293 | version "4.16.4" 1294 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127" 1295 | 1296 | loose-envify@^1.0.0, loose-envify@^1.1.0: 1297 | version "1.2.0" 1298 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.2.0.tgz#69a65aad3de542cf4ee0f4fe74e8e33c709ccb0f" 1299 | dependencies: 1300 | js-tokens "^1.0.1" 1301 | 1302 | media-typer@0.3.0: 1303 | version "0.3.0" 1304 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1305 | 1306 | merge-descriptors@1.0.1: 1307 | version "1.0.1" 1308 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1309 | 1310 | methods@~1.1.2: 1311 | version "1.1.2" 1312 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1313 | 1314 | mime-db@~1.24.0: 1315 | version "1.24.0" 1316 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c" 1317 | 1318 | mime-types@^2.1.11, mime-types@~2.1.11, mime-types@~2.1.7: 1319 | version "2.1.12" 1320 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729" 1321 | dependencies: 1322 | mime-db "~1.24.0" 1323 | 1324 | mime@1.3.4: 1325 | version "1.3.4" 1326 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" 1327 | 1328 | ms@0.7.1: 1329 | version "0.7.1" 1330 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 1331 | 1332 | negotiator@0.6.1: 1333 | version "0.6.1" 1334 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 1335 | 1336 | node-fetch@^1.0.1: 1337 | version "1.6.3" 1338 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" 1339 | dependencies: 1340 | encoding "^0.1.11" 1341 | is-stream "^1.0.1" 1342 | 1343 | node-uuid@~1.4.7: 1344 | version "1.4.7" 1345 | resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" 1346 | 1347 | nth-check@~1.0.1: 1348 | version "1.0.1" 1349 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" 1350 | dependencies: 1351 | boolbase "~1.0.0" 1352 | 1353 | "nwmatcher@>= 1.3.7 < 2.0.0": 1354 | version "1.3.8" 1355 | resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.8.tgz#34edb93de1aa6cb4448b573c9f2a059300241157" 1356 | 1357 | oauth-sign@~0.8.1: 1358 | version "0.8.2" 1359 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1360 | 1361 | object-assign@^4.1.0: 1362 | version "4.1.0" 1363 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" 1364 | 1365 | object-is@^1.0.1: 1366 | version "1.0.1" 1367 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" 1368 | 1369 | object-keys@^1.0.10, object-keys@^1.0.8: 1370 | version "1.0.11" 1371 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 1372 | 1373 | object.assign@^4.0.3: 1374 | version "4.0.4" 1375 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" 1376 | dependencies: 1377 | define-properties "^1.1.2" 1378 | function-bind "^1.1.0" 1379 | object-keys "^1.0.10" 1380 | 1381 | object.values@^1.0.3: 1382 | version "1.0.3" 1383 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.3.tgz#a7774ba050893fe6a5d5958acd05823e0f426bef" 1384 | dependencies: 1385 | define-properties "^1.1.1" 1386 | es-abstract "^1.3.2" 1387 | function-bind "^1.0.2" 1388 | has "^1.0.1" 1389 | 1390 | on-finished@~2.3.0: 1391 | version "2.3.0" 1392 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1393 | dependencies: 1394 | ee-first "1.1.1" 1395 | 1396 | optionator@^0.8.1: 1397 | version "0.8.2" 1398 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1399 | dependencies: 1400 | deep-is "~0.1.3" 1401 | fast-levenshtein "~2.0.4" 1402 | levn "~0.3.0" 1403 | prelude-ls "~1.1.2" 1404 | type-check "~0.3.2" 1405 | wordwrap "~1.0.0" 1406 | 1407 | parse5@^1.5.1: 1408 | version "1.5.1" 1409 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" 1410 | 1411 | parseurl@~1.3.1: 1412 | version "1.3.1" 1413 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" 1414 | 1415 | path-to-regexp@0.1.7: 1416 | version "0.1.7" 1417 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1418 | 1419 | pinkie-promise@^2.0.0: 1420 | version "2.0.1" 1421 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1422 | dependencies: 1423 | pinkie "^2.0.0" 1424 | 1425 | pinkie@^2.0.0: 1426 | version "2.0.4" 1427 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1428 | 1429 | prelude-ls@~1.1.2: 1430 | version "1.1.2" 1431 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1432 | 1433 | private@~0.1.5: 1434 | version "0.1.6" 1435 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" 1436 | 1437 | process-nextick-args@~1.0.6: 1438 | version "1.0.7" 1439 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1440 | 1441 | promise@^7.1.1: 1442 | version "7.1.1" 1443 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" 1444 | dependencies: 1445 | asap "~2.0.3" 1446 | 1447 | proxy-addr@~1.1.2: 1448 | version "1.1.2" 1449 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37" 1450 | dependencies: 1451 | forwarded "~0.1.0" 1452 | ipaddr.js "1.1.1" 1453 | 1454 | qs@~6.2.0: 1455 | version "6.2.1" 1456 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" 1457 | 1458 | qs@6.2.0: 1459 | version "6.2.0" 1460 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" 1461 | 1462 | range-parser@~1.2.0: 1463 | version "1.2.0" 1464 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 1465 | 1466 | react-addons-test-utils@^15.3.0: 1467 | version "15.3.2" 1468 | resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.3.2.tgz#c09a44f583425a4a9c1b38444d7a6c3e6f0f41f6" 1469 | 1470 | react-dom@^15.3.0: 1471 | version "15.3.2" 1472 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.2.tgz#c46b0aa5380d7b838e7a59c4a7beff2ed315531f" 1473 | 1474 | react@^15.3.0: 1475 | version "15.3.2" 1476 | resolved "https://registry.yarnpkg.com/react/-/react-15.3.2.tgz#a7bccd2fee8af126b0317e222c28d1d54528d09e" 1477 | dependencies: 1478 | fbjs "^0.8.4" 1479 | loose-envify "^1.1.0" 1480 | object-assign "^4.1.0" 1481 | 1482 | readable-stream@~2.0.5: 1483 | version "2.0.6" 1484 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" 1485 | dependencies: 1486 | core-util-is "~1.0.0" 1487 | inherits "~2.0.1" 1488 | isarray "~1.0.0" 1489 | process-nextick-args "~1.0.6" 1490 | string_decoder "~0.10.x" 1491 | util-deprecate "~1.0.1" 1492 | 1493 | readable-stream@1.1: 1494 | version "1.1.13" 1495 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" 1496 | dependencies: 1497 | core-util-is "~1.0.0" 1498 | inherits "~2.0.1" 1499 | isarray "0.0.1" 1500 | string_decoder "~0.10.x" 1501 | 1502 | regenerate@^1.2.1: 1503 | version "1.3.1" 1504 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.1.tgz#0300203a5d2fdcf89116dce84275d011f5903f33" 1505 | 1506 | regenerator-runtime@^0.9.5: 1507 | version "0.9.5" 1508 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz#403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc" 1509 | 1510 | regexpu-core@^2.0.0: 1511 | version "2.0.0" 1512 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 1513 | dependencies: 1514 | regenerate "^1.2.1" 1515 | regjsgen "^0.2.0" 1516 | regjsparser "^0.1.4" 1517 | 1518 | regjsgen@^0.2.0: 1519 | version "0.2.0" 1520 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 1521 | 1522 | regjsparser@^0.1.4: 1523 | version "0.1.5" 1524 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 1525 | dependencies: 1526 | jsesc "~0.5.0" 1527 | 1528 | request@^2.55.0: 1529 | version "2.75.0" 1530 | resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" 1531 | dependencies: 1532 | aws-sign2 "~0.6.0" 1533 | aws4 "^1.2.1" 1534 | bl "~1.1.2" 1535 | caseless "~0.11.0" 1536 | combined-stream "~1.0.5" 1537 | extend "~3.0.0" 1538 | forever-agent "~0.6.1" 1539 | form-data "~2.0.0" 1540 | har-validator "~2.0.6" 1541 | hawk "~3.1.3" 1542 | http-signature "~1.1.0" 1543 | is-typedarray "~1.0.0" 1544 | isstream "~0.1.2" 1545 | json-stringify-safe "~5.0.1" 1546 | mime-types "~2.1.7" 1547 | node-uuid "~1.4.7" 1548 | oauth-sign "~0.8.1" 1549 | qs "~6.2.0" 1550 | stringstream "~0.0.4" 1551 | tough-cookie "~2.3.0" 1552 | tunnel-agent "~0.4.1" 1553 | 1554 | sax@^1.1.4: 1555 | version "1.2.1" 1556 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" 1557 | 1558 | send@0.14.1: 1559 | version "0.14.1" 1560 | resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" 1561 | dependencies: 1562 | debug "~2.2.0" 1563 | depd "~1.1.0" 1564 | destroy "~1.0.4" 1565 | encodeurl "~1.0.1" 1566 | escape-html "~1.0.3" 1567 | etag "~1.7.0" 1568 | fresh "0.3.0" 1569 | http-errors "~1.5.0" 1570 | mime "1.3.4" 1571 | ms "0.7.1" 1572 | on-finished "~2.3.0" 1573 | range-parser "~1.2.0" 1574 | statuses "~1.3.0" 1575 | 1576 | serve-static@~1.11.1: 1577 | version "1.11.1" 1578 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" 1579 | dependencies: 1580 | encodeurl "~1.0.1" 1581 | escape-html "~1.0.3" 1582 | parseurl "~1.3.1" 1583 | send "0.14.1" 1584 | 1585 | setprototypeof@1.0.1: 1586 | version "1.0.1" 1587 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.1.tgz#52009b27888c4dc48f591949c0a8275834c1ca7e" 1588 | 1589 | sntp@1.x.x: 1590 | version "1.0.9" 1591 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1592 | dependencies: 1593 | hoek "2.x.x" 1594 | 1595 | source-map@~0.2.0: 1596 | version "0.2.0" 1597 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" 1598 | dependencies: 1599 | amdefine ">=0.0.4" 1600 | 1601 | sshpk@^1.7.0: 1602 | version "1.10.1" 1603 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" 1604 | dependencies: 1605 | asn1 "~0.2.3" 1606 | assert-plus "^1.0.0" 1607 | dashdash "^1.12.0" 1608 | getpass "^0.1.1" 1609 | optionalDependencies: 1610 | bcrypt-pbkdf "^1.0.0" 1611 | ecc-jsbn "~0.1.1" 1612 | jodid25519 "^1.0.0" 1613 | jsbn "~0.1.0" 1614 | tweetnacl "~0.14.0" 1615 | 1616 | "statuses@>= 1.3.0 < 2", statuses@~1.3.0: 1617 | version "1.3.0" 1618 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.0.tgz#8e55758cb20e7682c1f4fce8dcab30bf01d1e07a" 1619 | 1620 | string_decoder@~0.10.x: 1621 | version "0.10.31" 1622 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1623 | 1624 | stringstream@~0.0.4: 1625 | version "0.0.5" 1626 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1627 | 1628 | strip-ansi@^3.0.0: 1629 | version "3.0.1" 1630 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1631 | dependencies: 1632 | ansi-regex "^2.0.0" 1633 | 1634 | supports-color@^2.0.0: 1635 | version "2.0.0" 1636 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1637 | 1638 | "symbol-tree@>= 3.1.0 < 4.0.0": 1639 | version "3.1.4" 1640 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.1.4.tgz#02b279348d337debc39694c5c95f882d448a312a" 1641 | 1642 | to-fast-properties@^1.0.1: 1643 | version "1.0.2" 1644 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" 1645 | 1646 | tough-cookie@^2.2.0, tough-cookie@~2.3.0: 1647 | version "2.3.1" 1648 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.1.tgz#99c77dfbb7d804249e8a299d4cb0fd81fef083fd" 1649 | 1650 | tr46@~0.0.1: 1651 | version "0.0.3" 1652 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1653 | 1654 | tunnel-agent@~0.4.1: 1655 | version "0.4.3" 1656 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" 1657 | 1658 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1659 | version "0.14.3" 1660 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" 1661 | 1662 | type-check@~0.3.2: 1663 | version "0.3.2" 1664 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1665 | dependencies: 1666 | prelude-ls "~1.1.2" 1667 | 1668 | type-is@~1.6.13: 1669 | version "1.6.13" 1670 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.13.tgz#6e83ba7bc30cd33a7bb0b7fb00737a2085bf9d08" 1671 | dependencies: 1672 | media-typer "0.3.0" 1673 | mime-types "~2.1.11" 1674 | 1675 | ua-parser-js@^0.7.9: 1676 | version "0.7.10" 1677 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.10.tgz#917559ddcce07cbc09ece7d80495e4c268f4ef9f" 1678 | 1679 | unpipe@~1.0.0: 1680 | version "1.0.0" 1681 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1682 | 1683 | util-deprecate@~1.0.1: 1684 | version "1.0.2" 1685 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1686 | 1687 | utils-merge@1.0.0: 1688 | version "1.0.0" 1689 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" 1690 | 1691 | vary@~1.1.0: 1692 | version "1.1.0" 1693 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" 1694 | 1695 | verror@1.3.6: 1696 | version "1.3.6" 1697 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 1698 | dependencies: 1699 | extsprintf "1.0.2" 1700 | 1701 | webidl-conversions@^2.0.0: 1702 | version "2.0.1" 1703 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-2.0.1.tgz#3bf8258f7d318c7443c36f2e169402a1a6703506" 1704 | 1705 | whatwg-fetch@>=0.10.0: 1706 | version "1.0.0" 1707 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz#01c2ac4df40e236aaa18480e3be74bd5c8eb798e" 1708 | 1709 | whatwg-url-compat@~0.6.5: 1710 | version "0.6.5" 1711 | resolved "https://registry.yarnpkg.com/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf" 1712 | dependencies: 1713 | tr46 "~0.0.1" 1714 | 1715 | wordwrap@~1.0.0: 1716 | version "1.0.0" 1717 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1718 | 1719 | "xml-name-validator@>= 2.0.1 < 3.0.0": 1720 | version "2.0.1" 1721 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" 1722 | 1723 | xtend@^4.0.0: 1724 | version "4.0.1" 1725 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1726 | 1727 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-csjs", 3 | "version": "2.1.0", 4 | "description": "React Higher Order Component for CSJS", 5 | "main": "lib", 6 | "scripts": { 7 | "build": "cross-env NODE_ENV=production BABEL_ENV=commonjs babel src --out-dir lib", 8 | "test": "cross-env NODE_ENV=test nyc --reporter=lcov --reporter=text mocha", 9 | "prepublish": "npm run lint && npm run test && npm run build", 10 | "lint": "eslint ./src ./test" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/tizmagik/react-csjs.git" 15 | }, 16 | "keywords": [ 17 | "react", 18 | "csjs", 19 | "css", 20 | "style", 21 | "stylesheet", 22 | "hoc", 23 | "decorator" 24 | ], 25 | "peerDependencies": { 26 | "csjs": ">=1.0.0 < 5.0.0", 27 | "react": ">=0.13" 28 | }, 29 | "author": "Jeremy Gayed (https://github.com/tizmagik)", 30 | "contributors": [ 31 | "Paul Henschel ", 32 | "Justin Hall " 33 | ], 34 | "license": "MIT", 35 | "bugs": { 36 | "url": "https://github.com/tizmagik/react-csjs/issues" 37 | }, 38 | "homepage": "https://github.com/tizmagik/react-csjs#readme", 39 | "devDependencies": { 40 | "babel-cli": "^6.18.0", 41 | "babel-core": "^6.18.2", 42 | "babel-eslint": "^7.1.0", 43 | "babel-plugin-istanbul": "^2.0.3", 44 | "babel-plugin-rewire": "^1.0.0", 45 | "babel-plugin-transform-decorators-legacy": "^1.3.4", 46 | "babel-plugin-transform-runtime": "^6.15.0", 47 | "babel-preset-es2015": "^6.18.0", 48 | "babel-preset-react": "^6.11.1", 49 | "babel-preset-stage-0": "^6.5.0", 50 | "babel-register": "^6.18.0", 51 | "babel-runtime": "^6.18.0", 52 | "babel-template": "^6.16.0", 53 | "babel-types": "^6.18.0", 54 | "chai": "^3.5.0", 55 | "coveralls": "^2.11.15", 56 | "cross-env": "^3.1.3", 57 | "csjs": "^1.0.5", 58 | "enzyme": "^2.6.0", 59 | "eslint": "^3.9.1", 60 | "eslint-config-airbnb": "^13.0.0", 61 | "eslint-plugin-import": "^2.2.0", 62 | "eslint-plugin-jsx-a11y": "^2.0.1", 63 | "eslint-plugin-react": "^6.6.0", 64 | "jsdom": "^9.8.3", 65 | "mocha": "^3.1.1", 66 | "nyc": "^8.4.0", 67 | "react": "^15.2.1", 68 | "react-addons-test-utils": "^15.3.2", 69 | "react-dom": "^15.2.1", 70 | "sinon": "^1.17.6", 71 | "source-map-support": "^0.4.6" 72 | }, 73 | "dependencies": {} 74 | } 75 | -------------------------------------------------------------------------------- /src/dom/index.js: -------------------------------------------------------------------------------- 1 | // DOM variant of insert-style 2 | // insertStyle, { getStyle, removeStyle } 3 | 4 | 5 | export const getStyle = (elm) => { 6 | if ('styleSheet' in elm && 'cssText' in elm.styleSheet) { 7 | return elm.styleSheet.cssText; // IE8 8 | } 9 | 10 | return elm.textContent; 11 | }; 12 | 13 | export const removeStyle = elm => elm.parentNode.removeChild(elm); 14 | 15 | const insertStyle = (css, options = {}) => { 16 | const elm = options.element || document.createElement('style'); 17 | elm.setAttribute('type', 'text/css'); 18 | 19 | if ('styleSheet' in elm && 'cssText' in elm.styleSheet) { 20 | elm.styleSheet.cssText = css; // IE8 21 | } else { 22 | elm.textContent = css; 23 | } 24 | 25 | if (!options.element) { 26 | const head = document.getElementsByTagName('head')[0]; 27 | if (options && options.prepend) { 28 | head.insertBefore(elm, head.childNodes[0]); 29 | } else { 30 | head.appendChild(elm); 31 | } 32 | } 33 | 34 | return elm; 35 | }; 36 | 37 | export default insertStyle; 38 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import csjs from 'csjs'; 3 | import scopedName from 'csjs/lib/scoped-name'; 4 | import insertStyle, { removeStyle, getStyle } from './insert-style'; 5 | 6 | const cache = {}; 7 | 8 | export { removeStyle, getStyle }; 9 | 10 | export default function (userCss, ...values) { 11 | let css = userCss; 12 | 13 | if (Array.isArray(css)) { 14 | // Forward string literals to csjs 15 | css = csjs(css, ...values); 16 | } 17 | 18 | let cssText = csjs.getCss(css); 19 | const scope = scopedName(cssText)('DecoratedComponent'); 20 | 21 | return DecoratedComponent => 22 | class WithStyleDecorator extends Component { 23 | static displayName = `csjs(${DecoratedComponent.displayName 24 | || DecoratedComponent.name || 'Component'})` 25 | 26 | componentWillMount() { 27 | const refs = cache[scope]; 28 | if (!refs) { 29 | this.elm = insertStyle(cssText); 30 | cache[scope] = { style: this.elm, count: 1 }; 31 | } else { 32 | this.elm = refs.style; 33 | refs.count += 1; 34 | } 35 | } 36 | 37 | componentWillUpdate() { 38 | if (process.env.NODE_ENV !== 'production') { 39 | // Support React Hot Loader 40 | cssText = csjs.getCss(css); 41 | if (getStyle(this.elm) !== cssText) { 42 | this.elm = insertStyle(cssText, { element: this.elm }); 43 | } 44 | } 45 | } 46 | 47 | componentWillUnmount() { 48 | const refs = cache[scope]; 49 | if (refs) { 50 | refs.count -= 1; 51 | if (refs.count === 0) { 52 | delete cache[scope]; 53 | removeStyle(this.elm); 54 | this.elm = null; 55 | } 56 | } 57 | } 58 | 59 | render() { 60 | return ; 61 | } 62 | }; 63 | } 64 | -------------------------------------------------------------------------------- /src/insert-style.js: -------------------------------------------------------------------------------- 1 | // Depending on environment, we return the proper 2 | // DOM or Node-based version of 'insert-style' 3 | // insertStyle, { getStyle, removeStyle } 4 | 5 | import insertStyleServer, 6 | { getStyle as getStyleServer, removeStyle as removeStyleServer } from './server'; 7 | import insertStyleDOM, 8 | { getStyle as getStyleDOM, removeStyle as removeStyleDOM } from './dom'; 9 | 10 | const isServer = (typeof document === 'undefined'); 11 | 12 | const getStyle = isServer ? getStyleServer : getStyleDOM; 13 | const removeStyle = isServer ? removeStyleServer : removeStyleDOM; 14 | const insertStyle = isServer ? insertStyleServer : insertStyleDOM; 15 | 16 | export { getStyle, removeStyle }; 17 | export default insertStyle; 18 | -------------------------------------------------------------------------------- /src/server/index.js: -------------------------------------------------------------------------------- 1 | // Node variant of insert-style 2 | // insertStyle, { getStyle, removeStyle } 3 | 4 | const serverStyles = new Map(); 5 | 6 | export const getStyle = (key) => { 7 | if (key) { 8 | return serverStyles.get(key); 9 | } 10 | 11 | return Array.from(serverStyles.values()).join('\n'); 12 | }; 13 | 14 | export const removeStyle = key => serverStyles.delete(key); 15 | 16 | const insertStyle = style => serverStyles.set(style, style); 17 | export default insertStyle; 18 | -------------------------------------------------------------------------------- /test/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "rules": { 6 | "no-underscore-dangle": "off", 7 | "no-unused-expressions": "off", 8 | "react/prefer-stateless-function": "off", 9 | "react/prop-types": "off" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/.setup.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file is used to initialize a DOM for the test environment. It MUST be 3 | * loaded prior to React, Enzyme, etc., so we require it with mocha directly. 4 | */ 5 | import { jsdom } from 'jsdom'; 6 | 7 | const exposedProperties = ['window', 'navigator', 'document']; 8 | const emptyDom = ''; 9 | 10 | global.document = jsdom(emptyDom); 11 | global.window = document.defaultView; 12 | Object.keys(document.defaultView).forEach((property) => { 13 | if (typeof global[property] === 'undefined') { 14 | exposedProperties.push(property); 15 | global[property] = document.defaultView[property]; 16 | } 17 | }); 18 | 19 | global.navigator = window.navigator; 20 | -------------------------------------------------------------------------------- /test/components/DecoratedButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { testStyles } from '../testUtil'; 3 | import withStyles from '../../src'; 4 | 5 | // Decorator Syntax 6 | @withStyles(testStyles) 7 | export default class extends React.Component { 8 | render() { 9 | return ( 10 |
11 | 12 | {this.props.children} 13 | 14 |
15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/components/TaggedDecoratedButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { testCss } from '../testUtil'; 3 | import csjs from '../../src'; 4 | 5 | // Tagged Decorator Syntax 6 | @csjs`${testCss}` 7 | export default class extends React.Component { 8 | render() { 9 | return ( 10 |
11 | 12 | {this.props.children} 13 | 14 |
15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/components/WrappedButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { testStyles } from '../testUtil'; 3 | import withStyles from '../../src'; 4 | 5 | // Wrapped Syntax 6 | const ButtonComponent = ({ classes, children }) => ( 7 |
8 | 9 | {children} 10 | 11 |
12 | ); 13 | 14 | export default withStyles(testStyles)(ButtonComponent); 15 | -------------------------------------------------------------------------------- /test/dom.test.js: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { testCss, testElm, testElmIe8 } from './testUtil'; 3 | import insertStyle, { removeStyle, getStyle } from '../src/dom'; 4 | 5 | describe('DOM variant', () => { 6 | describe('insertStyle', () => { 7 | it('should insert a style element with the given CSS (append)', () => { 8 | const elm = insertStyle(testCss); 9 | expect(elm.textContent).to.equal(testCss); 10 | }); 11 | 12 | it('should insert a style element with the given CSS (prepend)', () => { 13 | const elm = insertStyle(testCss, { prepend: true }); 14 | expect(elm.textContent).to.equal(testCss); 15 | }); 16 | 17 | it('should update an existing style element with the given CSS', () => { 18 | const elm = insertStyle(testCss, { element: testElm }); 19 | expect(getStyle(elm)).to.equal(testCss); 20 | }); 21 | 22 | it('should update an existing IE8 style element with the given CSS', () => { 23 | const elm = insertStyle(testCss, { element: testElmIe8 }); 24 | expect(getStyle(elm)).to.equal(testCss); 25 | }); 26 | }); 27 | 28 | describe('getStyle', () => { 29 | it('should get CSS text from a style element', () => { 30 | const elm = insertStyle(testCss); 31 | expect(getStyle(elm)).to.equal(testCss); 32 | }); 33 | 34 | it('should get CSS text from an IE8 style element', () => { 35 | const elm = insertStyle(testCss, { element: testElmIe8 }); 36 | expect(getStyle(elm)).to.equal(testCss); 37 | }); 38 | }); 39 | 40 | describe('removeStyle', () => { 41 | it('should remove an appended style element', () => { 42 | const elm = insertStyle(testCss); 43 | const removedElm = removeStyle(elm); 44 | expect(removedElm).to.equal(elm); 45 | }); 46 | 47 | it('should remove a prepended style element', () => { 48 | const elm = insertStyle(testCss, { prepend: true }); 49 | const removedElm = removeStyle(elm); 50 | expect(removedElm).to.equal(elm); 51 | }); 52 | }); 53 | }); 54 | -------------------------------------------------------------------------------- /test/insertStyle.test.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable global-require */ 2 | import { expect } from 'chai'; 3 | 4 | const cacheKey = require.resolve('../src/insert-style'); 5 | 6 | describe('insertStyle', () => { 7 | const document = global.document; 8 | 9 | after(() => { 10 | global.document = document; 11 | }); 12 | 13 | beforeEach(() => { 14 | if (require.cache[cacheKey]) { 15 | delete require.cache[cacheKey]; 16 | } 17 | }); 18 | 19 | describe('when in a browser', () => { 20 | it('should return DOM variant', () => { 21 | global.document = {}; 22 | const insertStyle = require('../src/insert-style'); 23 | 24 | expect(insertStyle.__get__('isServer')).to.equal(false); 25 | }); 26 | }); 27 | 28 | describe('when on the server', () => { 29 | it('should return Server variant', () => { 30 | delete global.document; 31 | const insertStyle = require('../src/insert-style'); 32 | 33 | expect(insertStyle.__get__('isServer')).to.equal(true); 34 | }); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /test/mocha.opts: -------------------------------------------------------------------------------- 1 | --require babel-register 2 | --require test/.setup.js 3 | -------------------------------------------------------------------------------- /test/server.test.js: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { testCss } from './testUtil'; 3 | import insertStyle, { removeStyle, getStyle } from '../src/server'; 4 | 5 | describe('Server variant', () => { 6 | describe('insertStyle', () => { 7 | it('should add a style element with the given CSS', () => { 8 | const style = insertStyle(testCss); 9 | expect(style.get(testCss)).to.equal(testCss); 10 | }); 11 | }); 12 | 13 | describe('getStyle', () => { 14 | it('should get the CSS text for a given key', () => { 15 | insertStyle(testCss); 16 | expect(getStyle(testCss)).to.equal(testCss); 17 | }); 18 | 19 | it('should get all the CSS when no key given', () => { 20 | const blah = 'blah'; 21 | insertStyle(testCss); 22 | insertStyle(blah); 23 | const expectedStyles = [testCss, blah].join('\n'); 24 | expect(getStyle()).to.contain(expectedStyles); 25 | }); 26 | }); 27 | 28 | describe('removeStyle', () => { 29 | it('should remove a given style key', () => { 30 | const forRemoval = '.removeMe{}'; 31 | insertStyle(forRemoval); 32 | const removedSuccessfully = removeStyle(forRemoval); 33 | expect(removedSuccessfully).to.equal(true); 34 | expect(getStyle()).to.not.contain(forRemoval); 35 | }); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /test/testUtil.js: -------------------------------------------------------------------------------- 1 | import csjs from 'csjs'; 2 | import { jsdom } from 'jsdom'; 3 | 4 | export const testCss = ` 5 | .button { 6 | background-color: purple 7 | } 8 | 9 | .label { 10 | color: blue 11 | } 12 | `; 13 | 14 | export const testStyles = csjs`${testCss}`; 15 | 16 | export const testElm = jsdom().createElement('style'); 17 | testElm.setAttribute('type', 'text/css'); 18 | 19 | export const testElmIe8 = jsdom().createElement('style'); 20 | testElmIe8.setAttribute('type', 'text/css'); 21 | testElmIe8.styleSheet = { cssText: testCss }; 22 | -------------------------------------------------------------------------------- /test/withStyles.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import getCss from 'csjs/get-css'; 3 | import scopedName from 'csjs/lib/scoped-name'; 4 | import { expect } from 'chai'; 5 | import { mount, shallow } from 'enzyme'; 6 | import sinon from 'sinon'; 7 | import { testStyles } from './testUtil'; 8 | import TaggedDecoratedButton from './components/TaggedDecoratedButton'; 9 | import DecoratedButton from './components/DecoratedButton'; 10 | import WrappedButton from './components/WrappedButton'; 11 | import withStyles from '../src'; 12 | 13 | describe('withStyles', () => { 14 | describe('core', () => { 15 | it('should return a styled React component (tagged decorator)', () => { 16 | const wrapper = shallow(); 17 | expect(wrapper.props().classes).to.be.an.instanceOf(Object); 18 | Object 19 | .keys(testStyles) 20 | .forEach((style) => { 21 | expect(wrapper.html()).to.contain(testStyles[`${style}`].className); 22 | }); 23 | }); 24 | 25 | it('should return a styled React component (decorator)', () => { 26 | const wrapper = shallow(); 27 | expect(wrapper.props().classes).to.be.an.instanceOf(Object); 28 | Object 29 | .keys(testStyles) 30 | .forEach((style) => { 31 | expect(wrapper.html()).to.contain(testStyles[`${style}`].className); 32 | }); 33 | }); 34 | 35 | it('should return a styled React component (wrapped)', () => { 36 | const wrapper = shallow(); 37 | expect(wrapper.props().classes).to.be.an.instanceOf(Object); 38 | Object 39 | .keys(testStyles) 40 | .forEach((style) => { 41 | expect(wrapper.html()).to.contain(testStyles[`${style}`].className); 42 | }); 43 | }); 44 | }); 45 | 46 | describe('caching', () => { 47 | const scope = scopedName(getCss(testStyles))('DecoratedComponent'); 48 | let cache; 49 | 50 | beforeEach(() => { 51 | cache = {}; 52 | withStyles.__Rewire__('cache', cache); 53 | }); 54 | 55 | afterEach(() => { 56 | withStyles.__ResetDependency__('cache'); 57 | }); 58 | 59 | it('should cache styles on subsequent mounts', () => { 60 | expect(cache[scope]).to.be.undefined; 61 | mount(); 62 | mount(); 63 | expect(cache[scope]).to.be.an('object').and.to.have.property('count', 2); 64 | }); 65 | 66 | it('should clear styles cache on last component instance dismount', () => { 67 | expect(cache[scope]).to.be.undefined; 68 | const wrapper = mount(); 69 | expect(cache[scope]).to.be.an('object').and.to.have.property('count', 1); 70 | wrapper.unmount(); 71 | expect(cache[scope]).to.be.undefined; 72 | }); 73 | 74 | it('should not clear styles cache on normal component dismount', () => { 75 | expect(cache[scope]).to.be.undefined; 76 | /** 77 | * Calling mount triggers componentWillMount for the first instance of the 78 | * component being mounted. Mounting again right afterwards triggers 79 | * componentWillMount again, increasing the count to 2. Unmounting the 80 | * second one will trigger componentWillUnmount, but the first one still 81 | * remains, so the cache should not be cleared. 82 | */ 83 | mount(); 84 | const wrapper = mount(); 85 | wrapper.unmount(); 86 | expect(cache[scope]).to.be.an('object').and.to.have.property('count', 1); 87 | }); 88 | }); 89 | 90 | describe('hot reload', () => { 91 | const csjs = { getCss: sinon.spy() }; 92 | const realNodeEnv = process.env.NODE_ENV; 93 | 94 | beforeEach(() => { 95 | withStyles.__Rewire__('csjs', csjs); 96 | }); 97 | 98 | afterEach(() => { 99 | csjs.getCss.reset(); 100 | withStyles.__ResetDependency__('csjs'); 101 | }); 102 | 103 | it('should refresh styles in componentWillUpdate (non-production)', () => { 104 | process.env.NODE_ENV = 'test'; 105 | const wrapper = shallow(); 106 | /** 107 | * Calling setProps on the Enzyme wrapper of the shallow render of 108 | * will trigger the componentWillUpdate lifecycle 109 | * method. 110 | */ 111 | wrapper.setProps({ foo: 'bar' }); 112 | process.env.NODE_ENV = realNodeEnv; 113 | expect(csjs.getCss.called).to.be.true; 114 | }); 115 | 116 | it('should not refresh styles in componentWillUpdate (production)', () => { 117 | process.env.NODE_ENV = 'production'; 118 | const wrapper = shallow(); 119 | wrapper.setProps({ foo: 'bar' }); 120 | process.env.NODE_ENV = realNodeEnv; 121 | expect(csjs.getCss.called).to.be.false; 122 | }); 123 | }); 124 | }); 125 | --------------------------------------------------------------------------------