├── .babelrc ├── .eslintrc.js ├── .gitignore ├── LICENSE ├── README.md ├── karma.conf.js ├── package-lock.json ├── package.json ├── src ├── background.js ├── create-pane.js ├── devtools.html ├── icon.png ├── manifest.json ├── pane.css ├── pane.html ├── pane.jsx ├── test.html ├── trackHistory.js └── trackHistory.spec.js ├── webpack.config.js └── webstore-assets ├── icon-large.png ├── icon128x128.png ├── screenshot1.png └── screenshot2.png /.babelrc: -------------------------------------------------------------------------------- 1 | { "plugins": [ "transform-react-jsx" ] } 2 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "browser": true, 4 | "es6": true 5 | }, 6 | "extends": "eslint:recommended", 7 | "parserOptions": { 8 | "ecmaFeatures": { 9 | "experimentalObjectRestSpread": true, 10 | "jsx": true 11 | }, 12 | "sourceType": "module" 13 | }, 14 | "plugins": [ 15 | "react", 16 | "prettier" 17 | ], 18 | "rules": { 19 | "indent": [ 20 | "error", 21 | 4 22 | ], 23 | "linebreak-style": [ 24 | "error", 25 | "unix" 26 | ], 27 | "quotes": [ 28 | "error", 29 | "double" 30 | ], 31 | "semi": [ 32 | "error", 33 | "always" 34 | ], 35 | "no-inner-declarations": "off" 36 | }, 37 | "globals": { 38 | "expect": false, 39 | "chrome": false, 40 | "require": false, 41 | "describe": false, 42 | "it": false 43 | } 44 | }; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | src/pane.js -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Matt Zeunert 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 | # Element History [![CircleCI](https://circleci.com/gh/mattzeunert/ElementHistory/tree/master.svg?style=svg)](https://circleci.com/gh/mattzeunert/ElementHistory/tree/master) 2 | 3 | Chrome extension that shows you what code created or updated a DOM element. 4 | 5 | [Install from Chrome Webstore](https://chrome.google.com/webstore/detail/elementhistory/idhhmihgigngdppfpklkdklfaikkecge) 6 | 7 | ![](https://user-images.githubusercontent.com/1303660/32406215-4b6876e8-c142-11e7-98d0-4069e46db63d.png) 8 | 9 | ## How to use the Chrome extension 10 | 11 | 1. Click on the orange button next to the URL bar. This will enable element history for this tab. 12 | 13 | ![](https://user-images.githubusercontent.com/1303660/31580908-54e79f08-b122-11e7-9657-87dabf06266b.png) 14 | 15 | 2. You may want to reload the page to make sure changes made during initial page load are tracked 16 | 17 | 3. Inspect an element and open the Element History pane 18 | 19 | ![](https://user-images.githubusercontent.com/1303660/31580906-4167262e-b122-11e7-9406-c0b7fc9ef05a.png) 20 | 21 | 4. You can now see the history of the selected element 22 | 23 | ![](https://user-images.githubusercontent.com/1303660/32406217-52763a1a-c142-11e7-88d3-26db1d0b7c9b.png) 24 | 25 | ## Limitations 26 | 27 | I'm adding support for individual DOM changes individually, e.g. `innerHTML` or `setAttribute`. That means not all changes will be tracked. If you run into tracking issues you can report them here: https://github.com/mattzeunert/ElementHistory/issues 28 | 29 | ## Difference to DOM breakpoints 30 | 31 | Chrome has a great feature called DOM breakpoints. It'll pause execution, for example when an attribute changes. 32 | 33 | Use ElementHistory to: 34 | - see where the element was updated without pausing frequently 35 | - see where an element was created or inserted into the DOM 36 | - see the full history instead of each change one by one 37 | 38 | This project is quite useful for plain JavaScript or jQuery code. If you use a framework with a virtual DOM then the place where, for example, the assignment to `innerHTML` happened isn't very interesting. 39 | 40 | ## Development setup 41 | 42 | `npm run install`, then `npm run develop`. 43 | 44 | Load the `src` folder into Chrome as an unpacked extension. 45 | 46 | Use `npm run test` to run the Karma test suite. 47 | 48 | Open `test.html` for quick editing and debugging of the UI. 49 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // Generated on Tue Aug 29 2017 21:37:26 GMT+0800 (CST) 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | 7 | // base path that will be used to resolve all patterns (eg. files, exclude) 8 | basePath: '', 9 | 10 | 11 | // frameworks to use 12 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 13 | frameworks: ['jasmine'], 14 | 15 | 16 | // list of files / patterns to load in the browser 17 | files: [ 18 | 'src/trackHistory.js', 19 | 'src/**/*.spec.js', 20 | 'node_modules/jquery/dist/jquery.js' 21 | ], 22 | 23 | 24 | // list of files to exclude 25 | exclude: [ 26 | ], 27 | 28 | 29 | // preprocess matching files before serving them to the browser 30 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 31 | preprocessors: { 32 | }, 33 | 34 | 35 | // test results reporter to use 36 | // possible values: 'dots', 'progress' 37 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 38 | reporters: ['progress'], 39 | 40 | 41 | // web server port 42 | port: 9876, 43 | 44 | 45 | // enable / disable colors in the output (reporters and logs) 46 | colors: true, 47 | 48 | 49 | // level of logging 50 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 51 | logLevel: config.LOG_INFO, 52 | 53 | 54 | // enable / disable watching file and executing tests whenever any file changes 55 | autoWatch: true, 56 | 57 | 58 | // start these browsers 59 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 60 | browsers: ['Chrome'], 61 | 62 | 63 | // Continuous Integration mode 64 | // if true, Karma captures browsers, runs the tests and exits 65 | singleRun: false, 66 | 67 | // Concurrency level 68 | // how many browser should be started simultaneous 69 | concurrency: Infinity 70 | }) 71 | } 72 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "element-history", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "dependencies": { 6 | "accepts": { 7 | "version": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", 8 | "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", 9 | "dev": true 10 | }, 11 | "acorn": { 12 | "version": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", 13 | "integrity": "sha1-U/4WERH5EquZnuiHqQoLxSgi/XU=", 14 | "dev": true 15 | }, 16 | "acorn-dynamic-import": { 17 | "version": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", 18 | "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", 19 | "dev": true, 20 | "dependencies": { 21 | "acorn": { 22 | "version": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 23 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", 24 | "dev": true 25 | } 26 | } 27 | }, 28 | "acorn-jsx": { 29 | "version": "3.0.1", 30 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 31 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", 32 | "dev": true, 33 | "dependencies": { 34 | "acorn": { 35 | "version": "3.3.0", 36 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 37 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 38 | "dev": true 39 | } 40 | } 41 | }, 42 | "after": { 43 | "version": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 44 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", 45 | "dev": true 46 | }, 47 | "ajv": { 48 | "version": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", 49 | "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", 50 | "dev": true 51 | }, 52 | "ajv-keywords": { 53 | "version": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", 54 | "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=", 55 | "dev": true 56 | }, 57 | "align-text": { 58 | "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 59 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 60 | "dev": true 61 | }, 62 | "ansi-escapes": { 63 | "version": "3.0.0", 64 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", 65 | "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", 66 | "dev": true 67 | }, 68 | "ansi-regex": { 69 | "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 70 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 71 | "dev": true 72 | }, 73 | "ansi-styles": { 74 | "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 75 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 76 | "dev": true 77 | }, 78 | "anymatch": { 79 | "version": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", 80 | "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", 81 | "dev": true 82 | }, 83 | "argparse": { 84 | "version": "1.0.9", 85 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 86 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 87 | "dev": true 88 | }, 89 | "arr-diff": { 90 | "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", 91 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", 92 | "dev": true 93 | }, 94 | "arr-flatten": { 95 | "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 96 | "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", 97 | "dev": true 98 | }, 99 | "array-includes": { 100 | "version": "3.0.3", 101 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", 102 | "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", 103 | "dev": true 104 | }, 105 | "array-slice": { 106 | "version": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", 107 | "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", 108 | "dev": true 109 | }, 110 | "array-union": { 111 | "version": "1.0.2", 112 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 113 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 114 | "dev": true 115 | }, 116 | "array-uniq": { 117 | "version": "1.0.3", 118 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 119 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 120 | "dev": true 121 | }, 122 | "array-unique": { 123 | "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", 124 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", 125 | "dev": true 126 | }, 127 | "arraybuffer.slice": { 128 | "version": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", 129 | "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", 130 | "dev": true 131 | }, 132 | "arrify": { 133 | "version": "1.0.1", 134 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 135 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 136 | "dev": true 137 | }, 138 | "asap": { 139 | "version": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 140 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 141 | }, 142 | "asn1.js": { 143 | "version": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", 144 | "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", 145 | "dev": true 146 | }, 147 | "assert": { 148 | "version": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", 149 | "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", 150 | "dev": true 151 | }, 152 | "async": { 153 | "version": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", 154 | "integrity": "sha1-hDGQ/WtzV6C54clW7d3V7IRitU0=", 155 | "dev": true, 156 | "dependencies": { 157 | "lodash": { 158 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 159 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 160 | "dev": true 161 | } 162 | } 163 | }, 164 | "async-each": { 165 | "version": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", 166 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", 167 | "dev": true 168 | }, 169 | "babel-code-frame": { 170 | "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 171 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 172 | "dev": true 173 | }, 174 | "babel-core": { 175 | "version": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", 176 | "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", 177 | "dev": true, 178 | "dependencies": { 179 | "debug": { 180 | "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 181 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 182 | "dev": true 183 | }, 184 | "lodash": { 185 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 186 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 187 | "dev": true 188 | } 189 | } 190 | }, 191 | "babel-generator": { 192 | "version": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", 193 | "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", 194 | "dev": true, 195 | "dependencies": { 196 | "lodash": { 197 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 198 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 199 | "dev": true 200 | } 201 | } 202 | }, 203 | "babel-helper-builder-react-jsx": { 204 | "version": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", 205 | "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", 206 | "dev": true 207 | }, 208 | "babel-helpers": { 209 | "version": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", 210 | "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", 211 | "dev": true 212 | }, 213 | "babel-loader": { 214 | "version": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", 215 | "integrity": "sha1-9svhInEPGqKvTYgcbVtUNYyiQSY=", 216 | "dev": true 217 | }, 218 | "babel-messages": { 219 | "version": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 220 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 221 | "dev": true 222 | }, 223 | "babel-plugin-syntax-jsx": { 224 | "version": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", 225 | "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", 226 | "dev": true 227 | }, 228 | "babel-plugin-transform-react-jsx": { 229 | "version": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", 230 | "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", 231 | "dev": true 232 | }, 233 | "babel-register": { 234 | "version": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", 235 | "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", 236 | "dev": true, 237 | "dependencies": { 238 | "lodash": { 239 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 240 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 241 | "dev": true 242 | } 243 | } 244 | }, 245 | "babel-runtime": { 246 | "version": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 247 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 248 | "dev": true 249 | }, 250 | "babel-template": { 251 | "version": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 252 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", 253 | "dev": true, 254 | "dependencies": { 255 | "lodash": { 256 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 257 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 258 | "dev": true 259 | } 260 | } 261 | }, 262 | "babel-traverse": { 263 | "version": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 264 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 265 | "dev": true, 266 | "dependencies": { 267 | "debug": { 268 | "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 269 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 270 | "dev": true 271 | }, 272 | "lodash": { 273 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 274 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 275 | "dev": true 276 | } 277 | } 278 | }, 279 | "babel-types": { 280 | "version": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 281 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 282 | "dev": true, 283 | "dependencies": { 284 | "lodash": { 285 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 286 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 287 | "dev": true 288 | } 289 | } 290 | }, 291 | "babylon": { 292 | "version": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 293 | "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", 294 | "dev": true 295 | }, 296 | "backo2": { 297 | "version": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 298 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", 299 | "dev": true 300 | }, 301 | "balanced-match": { 302 | "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 303 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 304 | "dev": true 305 | }, 306 | "base64-arraybuffer": { 307 | "version": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", 308 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", 309 | "dev": true 310 | }, 311 | "base64-js": { 312 | "version": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", 313 | "integrity": "sha1-qRlH2h9KUW6jjltOwOw3c2deCIY=", 314 | "dev": true 315 | }, 316 | "base64id": { 317 | "version": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", 318 | "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", 319 | "dev": true 320 | }, 321 | "better-assert": { 322 | "version": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", 323 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", 324 | "dev": true 325 | }, 326 | "big.js": { 327 | "version": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", 328 | "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=", 329 | "dev": true 330 | }, 331 | "binary-extensions": { 332 | "version": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", 333 | "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", 334 | "dev": true 335 | }, 336 | "blob": { 337 | "version": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", 338 | "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", 339 | "dev": true 340 | }, 341 | "bluebird": { 342 | "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", 343 | "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", 344 | "dev": true 345 | }, 346 | "bn.js": { 347 | "version": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 348 | "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", 349 | "dev": true 350 | }, 351 | "body-parser": { 352 | "version": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", 353 | "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", 354 | "dev": true 355 | }, 356 | "brace-expansion": { 357 | "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 358 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 359 | "dev": true 360 | }, 361 | "braces": { 362 | "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", 363 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", 364 | "dev": true 365 | }, 366 | "brorand": { 367 | "version": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 368 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 369 | "dev": true 370 | }, 371 | "browserify-aes": { 372 | "version": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", 373 | "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", 374 | "dev": true 375 | }, 376 | "browserify-cipher": { 377 | "version": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", 378 | "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", 379 | "dev": true 380 | }, 381 | "browserify-des": { 382 | "version": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", 383 | "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", 384 | "dev": true 385 | }, 386 | "browserify-rsa": { 387 | "version": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 388 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 389 | "dev": true 390 | }, 391 | "browserify-sign": { 392 | "version": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 393 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 394 | "dev": true 395 | }, 396 | "browserify-zlib": { 397 | "version": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", 398 | "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", 399 | "dev": true 400 | }, 401 | "buffer": { 402 | "version": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", 403 | "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", 404 | "dev": true 405 | }, 406 | "buffer-xor": { 407 | "version": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 408 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", 409 | "dev": true 410 | }, 411 | "builtin-modules": { 412 | "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 413 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 414 | "dev": true 415 | }, 416 | "builtin-status-codes": { 417 | "version": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 418 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 419 | "dev": true 420 | }, 421 | "bytes": { 422 | "version": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", 423 | "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", 424 | "dev": true 425 | }, 426 | "caller-path": { 427 | "version": "0.1.0", 428 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 429 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 430 | "dev": true 431 | }, 432 | "callsite": { 433 | "version": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 434 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", 435 | "dev": true 436 | }, 437 | "callsites": { 438 | "version": "0.2.0", 439 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 440 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 441 | "dev": true 442 | }, 443 | "camelcase": { 444 | "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 445 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 446 | "dev": true 447 | }, 448 | "center-align": { 449 | "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 450 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 451 | "dev": true 452 | }, 453 | "chalk": { 454 | "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 455 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 456 | "dev": true, 457 | "dependencies": { 458 | "supports-color": { 459 | "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 460 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 461 | "dev": true 462 | } 463 | } 464 | }, 465 | "chokidar": { 466 | "version": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", 467 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", 468 | "dev": true 469 | }, 470 | "cipher-base": { 471 | "version": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 472 | "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", 473 | "dev": true 474 | }, 475 | "circular-json": { 476 | "version": "0.3.3", 477 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 478 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 479 | "dev": true 480 | }, 481 | "cli-cursor": { 482 | "version": "2.1.0", 483 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 484 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 485 | "dev": true 486 | }, 487 | "cli-width": { 488 | "version": "2.2.0", 489 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 490 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 491 | "dev": true 492 | }, 493 | "cliui": { 494 | "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 495 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 496 | "dev": true, 497 | "dependencies": { 498 | "wordwrap": { 499 | "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 500 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", 501 | "dev": true 502 | } 503 | } 504 | }, 505 | "co": { 506 | "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 507 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 508 | "dev": true 509 | }, 510 | "code-point-at": { 511 | "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 512 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 513 | "dev": true 514 | }, 515 | "color-convert": { 516 | "version": "1.9.0", 517 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", 518 | "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", 519 | "dev": true 520 | }, 521 | "color-name": { 522 | "version": "1.1.3", 523 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 524 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 525 | "dev": true 526 | }, 527 | "colors": { 528 | "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", 529 | "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", 530 | "dev": true 531 | }, 532 | "combine-lists": { 533 | "version": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", 534 | "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", 535 | "dev": true, 536 | "dependencies": { 537 | "lodash": { 538 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 539 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 540 | "dev": true 541 | } 542 | } 543 | }, 544 | "commondir": { 545 | "version": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 546 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 547 | "dev": true 548 | }, 549 | "component-bind": { 550 | "version": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 551 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", 552 | "dev": true 553 | }, 554 | "component-emitter": { 555 | "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", 556 | "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", 557 | "dev": true 558 | }, 559 | "component-inherit": { 560 | "version": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 561 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", 562 | "dev": true 563 | }, 564 | "concat-map": { 565 | "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 566 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 567 | "dev": true 568 | }, 569 | "concat-stream": { 570 | "version": "1.6.0", 571 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 572 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 573 | "dev": true 574 | }, 575 | "connect": { 576 | "version": "https://registry.npmjs.org/connect/-/connect-3.6.3.tgz", 577 | "integrity": "sha1-9zINRqJbS+e0g6IjZRfySx4n4wE=", 578 | "dev": true, 579 | "dependencies": { 580 | "debug": { 581 | "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 582 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 583 | "dev": true 584 | } 585 | } 586 | }, 587 | "console-browserify": { 588 | "version": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 589 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 590 | "dev": true 591 | }, 592 | "constants-browserify": { 593 | "version": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 594 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 595 | "dev": true 596 | }, 597 | "content-type": { 598 | "version": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", 599 | "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", 600 | "dev": true 601 | }, 602 | "convert-source-map": { 603 | "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", 604 | "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", 605 | "dev": true 606 | }, 607 | "cookie": { 608 | "version": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 609 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", 610 | "dev": true 611 | }, 612 | "core-js": { 613 | "version": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", 614 | "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", 615 | "dev": true 616 | }, 617 | "core-util-is": { 618 | "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 619 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 620 | "dev": true 621 | }, 622 | "create-ecdh": { 623 | "version": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", 624 | "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", 625 | "dev": true 626 | }, 627 | "create-hash": { 628 | "version": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", 629 | "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", 630 | "dev": true 631 | }, 632 | "create-hmac": { 633 | "version": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", 634 | "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", 635 | "dev": true 636 | }, 637 | "create-react-class": { 638 | "version": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.0.tgz", 639 | "integrity": "sha1-q0SEl8JlZuHilBPogyB9V8/nvtQ=", 640 | "dependencies": { 641 | "object-assign": { 642 | "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 643 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 644 | } 645 | } 646 | }, 647 | "cross-spawn": { 648 | "version": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 649 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 650 | "dev": true, 651 | "dependencies": { 652 | "lru-cache": { 653 | "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 654 | "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", 655 | "dev": true 656 | } 657 | } 658 | }, 659 | "crypto-browserify": { 660 | "version": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", 661 | "integrity": "sha1-lIlF78Z1ekANbl5a9HGU0QBkJ58=", 662 | "dev": true 663 | }, 664 | "custom-event": { 665 | "version": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", 666 | "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", 667 | "dev": true 668 | }, 669 | "d": { 670 | "version": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", 671 | "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", 672 | "dev": true 673 | }, 674 | "date-now": { 675 | "version": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 676 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 677 | "dev": true 678 | }, 679 | "debug": { 680 | "version": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", 681 | "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", 682 | "dev": true 683 | }, 684 | "decamelize": { 685 | "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 686 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 687 | "dev": true 688 | }, 689 | "deep-is": { 690 | "version": "0.1.3", 691 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 692 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 693 | "dev": true 694 | }, 695 | "define-properties": { 696 | "version": "1.1.2", 697 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", 698 | "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", 699 | "dev": true 700 | }, 701 | "del": { 702 | "version": "2.2.2", 703 | "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", 704 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", 705 | "dev": true 706 | }, 707 | "depd": { 708 | "version": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 709 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", 710 | "dev": true 711 | }, 712 | "des.js": { 713 | "version": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", 714 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", 715 | "dev": true 716 | }, 717 | "detect-indent": { 718 | "version": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", 719 | "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", 720 | "dev": true 721 | }, 722 | "di": { 723 | "version": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", 724 | "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", 725 | "dev": true 726 | }, 727 | "diffie-hellman": { 728 | "version": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", 729 | "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", 730 | "dev": true 731 | }, 732 | "doctrine": { 733 | "version": "2.0.0", 734 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", 735 | "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", 736 | "dev": true 737 | }, 738 | "dom-serialize": { 739 | "version": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", 740 | "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", 741 | "dev": true 742 | }, 743 | "domain-browser": { 744 | "version": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", 745 | "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", 746 | "dev": true 747 | }, 748 | "ee-first": { 749 | "version": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 750 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", 751 | "dev": true 752 | }, 753 | "elliptic": { 754 | "version": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", 755 | "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", 756 | "dev": true 757 | }, 758 | "emojis-list": { 759 | "version": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", 760 | "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", 761 | "dev": true 762 | }, 763 | "encodeurl": { 764 | "version": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", 765 | "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", 766 | "dev": true 767 | }, 768 | "encoding": { 769 | "version": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", 770 | "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=" 771 | }, 772 | "engine.io": { 773 | "version": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", 774 | "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", 775 | "dev": true, 776 | "dependencies": { 777 | "debug": { 778 | "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 779 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 780 | "dev": true 781 | }, 782 | "ms": { 783 | "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 784 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 785 | "dev": true 786 | } 787 | } 788 | }, 789 | "engine.io-client": { 790 | "version": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", 791 | "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", 792 | "dev": true, 793 | "dependencies": { 794 | "component-emitter": { 795 | "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 796 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 797 | "dev": true 798 | }, 799 | "debug": { 800 | "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 801 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 802 | "dev": true 803 | }, 804 | "ms": { 805 | "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 806 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 807 | "dev": true 808 | } 809 | } 810 | }, 811 | "engine.io-parser": { 812 | "version": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", 813 | "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", 814 | "dev": true 815 | }, 816 | "enhanced-resolve": { 817 | "version": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", 818 | "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", 819 | "dev": true 820 | }, 821 | "ent": { 822 | "version": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", 823 | "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", 824 | "dev": true 825 | }, 826 | "errno": { 827 | "version": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", 828 | "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", 829 | "dev": true 830 | }, 831 | "error-ex": { 832 | "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 833 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 834 | "dev": true 835 | }, 836 | "error-stack-parser": { 837 | "version": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.1.tgz", 838 | "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=" 839 | }, 840 | "es-abstract": { 841 | "version": "1.9.0", 842 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", 843 | "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", 844 | "dev": true 845 | }, 846 | "es-to-primitive": { 847 | "version": "1.1.1", 848 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", 849 | "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", 850 | "dev": true 851 | }, 852 | "es5-ext": { 853 | "version": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", 854 | "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", 855 | "dev": true 856 | }, 857 | "es6-iterator": { 858 | "version": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", 859 | "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", 860 | "dev": true 861 | }, 862 | "es6-map": { 863 | "version": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", 864 | "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", 865 | "dev": true 866 | }, 867 | "es6-set": { 868 | "version": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", 869 | "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", 870 | "dev": true 871 | }, 872 | "es6-symbol": { 873 | "version": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", 874 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", 875 | "dev": true 876 | }, 877 | "es6-weak-map": { 878 | "version": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", 879 | "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", 880 | "dev": true 881 | }, 882 | "escape-html": { 883 | "version": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 884 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", 885 | "dev": true 886 | }, 887 | "escape-string-regexp": { 888 | "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 889 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 890 | "dev": true 891 | }, 892 | "escope": { 893 | "version": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", 894 | "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", 895 | "dev": true 896 | }, 897 | "eslint": { 898 | "version": "4.10.0", 899 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.10.0.tgz", 900 | "integrity": "sha512-MMVl8P/dYUFZEvolL8PYt7qc5LNdS2lwheq9BYa5Y07FblhcZqFyaUqlS8TW5QITGex21tV4Lk0a3fK8lsJIkA==", 901 | "dev": true, 902 | "dependencies": { 903 | "ansi-regex": { 904 | "version": "3.0.0", 905 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 906 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 907 | "dev": true 908 | }, 909 | "ansi-styles": { 910 | "version": "3.2.0", 911 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 912 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 913 | "dev": true 914 | }, 915 | "chalk": { 916 | "version": "2.3.0", 917 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 918 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 919 | "dev": true 920 | }, 921 | "debug": { 922 | "version": "3.1.0", 923 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 924 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 925 | "dev": true 926 | }, 927 | "semver": { 928 | "version": "5.4.1", 929 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 930 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 931 | "dev": true 932 | }, 933 | "strip-ansi": { 934 | "version": "4.0.0", 935 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 936 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 937 | "dev": true 938 | } 939 | } 940 | }, 941 | "eslint-plugin-prettier": { 942 | "version": "2.3.1", 943 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.3.1.tgz", 944 | "integrity": "sha512-AV8shBlGN9tRZffj5v/f4uiQWlP3qiQ+lh+BhTqRLuKSyczx+HRWVkVZaf7dOmguxghAH1wftnou/JUEEChhGg==", 945 | "dev": true 946 | }, 947 | "eslint-plugin-react": { 948 | "version": "7.4.0", 949 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz", 950 | "integrity": "sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==", 951 | "dev": true 952 | }, 953 | "eslint-scope": { 954 | "version": "3.7.1", 955 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", 956 | "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", 957 | "dev": true 958 | }, 959 | "espree": { 960 | "version": "3.5.1", 961 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz", 962 | "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=", 963 | "dev": true 964 | }, 965 | "esprima": { 966 | "version": "4.0.0", 967 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 968 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 969 | "dev": true 970 | }, 971 | "esquery": { 972 | "version": "1.0.0", 973 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", 974 | "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", 975 | "dev": true 976 | }, 977 | "esrecurse": { 978 | "version": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", 979 | "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", 980 | "dev": true 981 | }, 982 | "estraverse": { 983 | "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 984 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 985 | "dev": true 986 | }, 987 | "esutils": { 988 | "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 989 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 990 | "dev": true 991 | }, 992 | "event-emitter": { 993 | "version": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 994 | "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", 995 | "dev": true 996 | }, 997 | "eventemitter3": { 998 | "version": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", 999 | "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", 1000 | "dev": true 1001 | }, 1002 | "events": { 1003 | "version": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 1004 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", 1005 | "dev": true 1006 | }, 1007 | "evp_bytestokey": { 1008 | "version": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz", 1009 | "integrity": "sha1-9mu4js1X9xp2aCHiAoPqOMaL+Ao=", 1010 | "dev": true 1011 | }, 1012 | "execa": { 1013 | "version": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 1014 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 1015 | "dev": true 1016 | }, 1017 | "exit": { 1018 | "version": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 1019 | "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", 1020 | "dev": true 1021 | }, 1022 | "expand-braces": { 1023 | "version": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", 1024 | "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", 1025 | "dev": true, 1026 | "dependencies": { 1027 | "braces": { 1028 | "version": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", 1029 | "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", 1030 | "dev": true 1031 | }, 1032 | "expand-range": { 1033 | "version": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", 1034 | "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", 1035 | "dev": true 1036 | }, 1037 | "is-number": { 1038 | "version": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", 1039 | "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", 1040 | "dev": true 1041 | }, 1042 | "repeat-string": { 1043 | "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", 1044 | "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", 1045 | "dev": true 1046 | } 1047 | } 1048 | }, 1049 | "expand-brackets": { 1050 | "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", 1051 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", 1052 | "dev": true 1053 | }, 1054 | "expand-range": { 1055 | "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", 1056 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", 1057 | "dev": true 1058 | }, 1059 | "extend": { 1060 | "version": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 1061 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", 1062 | "dev": true 1063 | }, 1064 | "external-editor": { 1065 | "version": "2.0.5", 1066 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.5.tgz", 1067 | "integrity": "sha512-Msjo64WT5W+NhOpQXh0nOHm+n0RfU1QUwDnKYvJ8dEJ8zlwLrqXNTv5mSUTJpepf41PDJGyhueTw2vNZW+Fr/w==", 1068 | "dev": true, 1069 | "dependencies": { 1070 | "iconv-lite": { 1071 | "version": "0.4.19", 1072 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 1073 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", 1074 | "dev": true 1075 | }, 1076 | "tmp": { 1077 | "version": "0.0.33", 1078 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1079 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1080 | "dev": true 1081 | } 1082 | } 1083 | }, 1084 | "extglob": { 1085 | "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", 1086 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", 1087 | "dev": true 1088 | }, 1089 | "fast-deep-equal": { 1090 | "version": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 1091 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", 1092 | "dev": true 1093 | }, 1094 | "fast-diff": { 1095 | "version": "1.1.2", 1096 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", 1097 | "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", 1098 | "dev": true 1099 | }, 1100 | "fast-json-stable-stringify": { 1101 | "version": "2.0.0", 1102 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1103 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 1104 | "dev": true 1105 | }, 1106 | "fast-levenshtein": { 1107 | "version": "2.0.6", 1108 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1109 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1110 | "dev": true 1111 | }, 1112 | "fbjs": { 1113 | "version": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.14.tgz", 1114 | "integrity": "sha1-0dviviVMNakeCfMfnNUKQLKg7Rw=", 1115 | "dependencies": { 1116 | "core-js": { 1117 | "version": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", 1118 | "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" 1119 | } 1120 | } 1121 | }, 1122 | "figures": { 1123 | "version": "2.0.0", 1124 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 1125 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 1126 | "dev": true 1127 | }, 1128 | "file-entry-cache": { 1129 | "version": "2.0.0", 1130 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 1131 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 1132 | "dev": true 1133 | }, 1134 | "filename-regex": { 1135 | "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", 1136 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", 1137 | "dev": true 1138 | }, 1139 | "fill-range": { 1140 | "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", 1141 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", 1142 | "dev": true 1143 | }, 1144 | "finalhandler": { 1145 | "version": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz", 1146 | "integrity": "sha1-GFdPLnxLmLiuOyMMIfIB8xvbP7c=", 1147 | "dev": true, 1148 | "dependencies": { 1149 | "debug": { 1150 | "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 1151 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 1152 | "dev": true 1153 | } 1154 | } 1155 | }, 1156 | "find-cache-dir": { 1157 | "version": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", 1158 | "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", 1159 | "dev": true 1160 | }, 1161 | "find-up": { 1162 | "version": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 1163 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 1164 | "dev": true 1165 | }, 1166 | "flat-cache": { 1167 | "version": "1.3.0", 1168 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", 1169 | "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", 1170 | "dev": true 1171 | }, 1172 | "for-in": { 1173 | "version": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 1174 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 1175 | "dev": true 1176 | }, 1177 | "for-own": { 1178 | "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", 1179 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", 1180 | "dev": true 1181 | }, 1182 | "foreach": { 1183 | "version": "2.0.5", 1184 | "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 1185 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", 1186 | "dev": true 1187 | }, 1188 | "fs-access": { 1189 | "version": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", 1190 | "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", 1191 | "dev": true 1192 | }, 1193 | "fs.realpath": { 1194 | "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1195 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1196 | "dev": true 1197 | }, 1198 | "fsevents": { 1199 | "version": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", 1200 | "integrity": "sha1-MoK3E/s62A7eDp/PRhG1qm/AM/Q=", 1201 | "dev": true, 1202 | "optional": true, 1203 | "dependencies": { 1204 | "abbrev": { 1205 | "version": "1.1.0", 1206 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", 1207 | "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", 1208 | "dev": true, 1209 | "optional": true 1210 | }, 1211 | "ajv": { 1212 | "version": "4.11.8", 1213 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", 1214 | "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", 1215 | "dev": true, 1216 | "optional": true 1217 | }, 1218 | "ansi-regex": { 1219 | "version": "2.1.1", 1220 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 1221 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 1222 | "dev": true 1223 | }, 1224 | "aproba": { 1225 | "version": "1.1.1", 1226 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", 1227 | "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", 1228 | "dev": true, 1229 | "optional": true 1230 | }, 1231 | "are-we-there-yet": { 1232 | "version": "1.1.4", 1233 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", 1234 | "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", 1235 | "dev": true, 1236 | "optional": true 1237 | }, 1238 | "asn1": { 1239 | "version": "0.2.3", 1240 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 1241 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", 1242 | "dev": true, 1243 | "optional": true 1244 | }, 1245 | "assert-plus": { 1246 | "version": "0.2.0", 1247 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 1248 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", 1249 | "dev": true, 1250 | "optional": true 1251 | }, 1252 | "asynckit": { 1253 | "version": "0.4.0", 1254 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1255 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 1256 | "dev": true, 1257 | "optional": true 1258 | }, 1259 | "aws-sign2": { 1260 | "version": "0.6.0", 1261 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 1262 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", 1263 | "dev": true, 1264 | "optional": true 1265 | }, 1266 | "aws4": { 1267 | "version": "1.6.0", 1268 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 1269 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", 1270 | "dev": true, 1271 | "optional": true 1272 | }, 1273 | "balanced-match": { 1274 | "version": "0.4.2", 1275 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", 1276 | "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", 1277 | "dev": true 1278 | }, 1279 | "bcrypt-pbkdf": { 1280 | "version": "1.0.1", 1281 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 1282 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 1283 | "dev": true, 1284 | "optional": true 1285 | }, 1286 | "block-stream": { 1287 | "version": "0.0.9", 1288 | "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", 1289 | "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", 1290 | "dev": true 1291 | }, 1292 | "boom": { 1293 | "version": "2.10.1", 1294 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 1295 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 1296 | "dev": true 1297 | }, 1298 | "brace-expansion": { 1299 | "version": "1.1.7", 1300 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", 1301 | "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", 1302 | "dev": true 1303 | }, 1304 | "buffer-shims": { 1305 | "version": "1.0.0", 1306 | "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", 1307 | "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", 1308 | "dev": true 1309 | }, 1310 | "caseless": { 1311 | "version": "0.12.0", 1312 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 1313 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 1314 | "dev": true, 1315 | "optional": true 1316 | }, 1317 | "co": { 1318 | "version": "4.6.0", 1319 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 1320 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 1321 | "dev": true, 1322 | "optional": true 1323 | }, 1324 | "code-point-at": { 1325 | "version": "1.1.0", 1326 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 1327 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 1328 | "dev": true 1329 | }, 1330 | "combined-stream": { 1331 | "version": "1.0.5", 1332 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 1333 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 1334 | "dev": true 1335 | }, 1336 | "concat-map": { 1337 | "version": "0.0.1", 1338 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1339 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1340 | "dev": true 1341 | }, 1342 | "console-control-strings": { 1343 | "version": "1.1.0", 1344 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 1345 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", 1346 | "dev": true 1347 | }, 1348 | "core-util-is": { 1349 | "version": "1.0.2", 1350 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1351 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 1352 | "dev": true 1353 | }, 1354 | "cryptiles": { 1355 | "version": "2.0.5", 1356 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 1357 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 1358 | "dev": true, 1359 | "optional": true 1360 | }, 1361 | "dashdash": { 1362 | "version": "1.14.1", 1363 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 1364 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 1365 | "dev": true, 1366 | "optional": true, 1367 | "dependencies": { 1368 | "assert-plus": { 1369 | "version": "1.0.0", 1370 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1371 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 1372 | "dev": true, 1373 | "optional": true 1374 | } 1375 | } 1376 | }, 1377 | "debug": { 1378 | "version": "2.6.8", 1379 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 1380 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 1381 | "dev": true, 1382 | "optional": true 1383 | }, 1384 | "deep-extend": { 1385 | "version": "0.4.2", 1386 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", 1387 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", 1388 | "dev": true, 1389 | "optional": true 1390 | }, 1391 | "delayed-stream": { 1392 | "version": "1.0.0", 1393 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1394 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 1395 | "dev": true 1396 | }, 1397 | "delegates": { 1398 | "version": "1.0.0", 1399 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 1400 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", 1401 | "dev": true, 1402 | "optional": true 1403 | }, 1404 | "ecc-jsbn": { 1405 | "version": "0.1.1", 1406 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 1407 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 1408 | "dev": true, 1409 | "optional": true 1410 | }, 1411 | "extend": { 1412 | "version": "3.0.1", 1413 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 1414 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", 1415 | "dev": true, 1416 | "optional": true 1417 | }, 1418 | "extsprintf": { 1419 | "version": "1.0.2", 1420 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", 1421 | "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", 1422 | "dev": true 1423 | }, 1424 | "forever-agent": { 1425 | "version": "0.6.1", 1426 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1427 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 1428 | "dev": true, 1429 | "optional": true 1430 | }, 1431 | "form-data": { 1432 | "version": "2.1.4", 1433 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", 1434 | "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", 1435 | "dev": true, 1436 | "optional": true 1437 | }, 1438 | "fs.realpath": { 1439 | "version": "1.0.0", 1440 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1441 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1442 | "dev": true 1443 | }, 1444 | "fstream": { 1445 | "version": "1.0.11", 1446 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", 1447 | "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", 1448 | "dev": true 1449 | }, 1450 | "fstream-ignore": { 1451 | "version": "1.0.5", 1452 | "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", 1453 | "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", 1454 | "dev": true, 1455 | "optional": true 1456 | }, 1457 | "gauge": { 1458 | "version": "2.7.4", 1459 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 1460 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 1461 | "dev": true, 1462 | "optional": true 1463 | }, 1464 | "getpass": { 1465 | "version": "0.1.7", 1466 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1467 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1468 | "dev": true, 1469 | "optional": true, 1470 | "dependencies": { 1471 | "assert-plus": { 1472 | "version": "1.0.0", 1473 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1474 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 1475 | "dev": true, 1476 | "optional": true 1477 | } 1478 | } 1479 | }, 1480 | "glob": { 1481 | "version": "7.1.2", 1482 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1483 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1484 | "dev": true 1485 | }, 1486 | "graceful-fs": { 1487 | "version": "4.1.11", 1488 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1489 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1490 | "dev": true 1491 | }, 1492 | "har-schema": { 1493 | "version": "1.0.5", 1494 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", 1495 | "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", 1496 | "dev": true, 1497 | "optional": true 1498 | }, 1499 | "har-validator": { 1500 | "version": "4.2.1", 1501 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", 1502 | "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", 1503 | "dev": true, 1504 | "optional": true 1505 | }, 1506 | "has-unicode": { 1507 | "version": "2.0.1", 1508 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 1509 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", 1510 | "dev": true, 1511 | "optional": true 1512 | }, 1513 | "hawk": { 1514 | "version": "3.1.3", 1515 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 1516 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 1517 | "dev": true, 1518 | "optional": true 1519 | }, 1520 | "hoek": { 1521 | "version": "2.16.3", 1522 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 1523 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", 1524 | "dev": true 1525 | }, 1526 | "http-signature": { 1527 | "version": "1.1.1", 1528 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 1529 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 1530 | "dev": true, 1531 | "optional": true 1532 | }, 1533 | "inflight": { 1534 | "version": "1.0.6", 1535 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1536 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1537 | "dev": true 1538 | }, 1539 | "inherits": { 1540 | "version": "2.0.3", 1541 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1542 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1543 | "dev": true 1544 | }, 1545 | "ini": { 1546 | "version": "1.3.4", 1547 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", 1548 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", 1549 | "dev": true, 1550 | "optional": true 1551 | }, 1552 | "is-fullwidth-code-point": { 1553 | "version": "1.0.0", 1554 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1555 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1556 | "dev": true 1557 | }, 1558 | "is-typedarray": { 1559 | "version": "1.0.0", 1560 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1561 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1562 | "dev": true, 1563 | "optional": true 1564 | }, 1565 | "isarray": { 1566 | "version": "1.0.0", 1567 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1568 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1569 | "dev": true 1570 | }, 1571 | "isstream": { 1572 | "version": "0.1.2", 1573 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1574 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 1575 | "dev": true, 1576 | "optional": true 1577 | }, 1578 | "jodid25519": { 1579 | "version": "1.0.2", 1580 | "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", 1581 | "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", 1582 | "dev": true, 1583 | "optional": true 1584 | }, 1585 | "jsbn": { 1586 | "version": "0.1.1", 1587 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1588 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1589 | "dev": true, 1590 | "optional": true 1591 | }, 1592 | "json-schema": { 1593 | "version": "0.2.3", 1594 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1595 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 1596 | "dev": true, 1597 | "optional": true 1598 | }, 1599 | "json-stable-stringify": { 1600 | "version": "1.0.1", 1601 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 1602 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 1603 | "dev": true, 1604 | "optional": true 1605 | }, 1606 | "json-stringify-safe": { 1607 | "version": "5.0.1", 1608 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1609 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1610 | "dev": true, 1611 | "optional": true 1612 | }, 1613 | "jsonify": { 1614 | "version": "0.0.0", 1615 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1616 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 1617 | "dev": true, 1618 | "optional": true 1619 | }, 1620 | "jsprim": { 1621 | "version": "1.4.0", 1622 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", 1623 | "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", 1624 | "dev": true, 1625 | "optional": true, 1626 | "dependencies": { 1627 | "assert-plus": { 1628 | "version": "1.0.0", 1629 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1630 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 1631 | "dev": true, 1632 | "optional": true 1633 | } 1634 | } 1635 | }, 1636 | "mime-db": { 1637 | "version": "1.27.0", 1638 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", 1639 | "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", 1640 | "dev": true 1641 | }, 1642 | "mime-types": { 1643 | "version": "2.1.15", 1644 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", 1645 | "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", 1646 | "dev": true 1647 | }, 1648 | "minimatch": { 1649 | "version": "3.0.4", 1650 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1651 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1652 | "dev": true 1653 | }, 1654 | "minimist": { 1655 | "version": "0.0.8", 1656 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1657 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1658 | "dev": true 1659 | }, 1660 | "mkdirp": { 1661 | "version": "0.5.1", 1662 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1663 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1664 | "dev": true 1665 | }, 1666 | "ms": { 1667 | "version": "2.0.0", 1668 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1669 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1670 | "dev": true, 1671 | "optional": true 1672 | }, 1673 | "node-pre-gyp": { 1674 | "version": "0.6.36", 1675 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", 1676 | "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", 1677 | "dev": true, 1678 | "optional": true 1679 | }, 1680 | "nopt": { 1681 | "version": "4.0.1", 1682 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", 1683 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", 1684 | "dev": true, 1685 | "optional": true 1686 | }, 1687 | "npmlog": { 1688 | "version": "4.1.0", 1689 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", 1690 | "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", 1691 | "dev": true, 1692 | "optional": true 1693 | }, 1694 | "number-is-nan": { 1695 | "version": "1.0.1", 1696 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1697 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 1698 | "dev": true 1699 | }, 1700 | "oauth-sign": { 1701 | "version": "0.8.2", 1702 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 1703 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 1704 | "dev": true, 1705 | "optional": true 1706 | }, 1707 | "object-assign": { 1708 | "version": "4.1.1", 1709 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1710 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1711 | "dev": true, 1712 | "optional": true 1713 | }, 1714 | "once": { 1715 | "version": "1.4.0", 1716 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1717 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1718 | "dev": true 1719 | }, 1720 | "os-homedir": { 1721 | "version": "1.0.2", 1722 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1723 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 1724 | "dev": true, 1725 | "optional": true 1726 | }, 1727 | "os-tmpdir": { 1728 | "version": "1.0.2", 1729 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1730 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1731 | "dev": true, 1732 | "optional": true 1733 | }, 1734 | "osenv": { 1735 | "version": "0.1.4", 1736 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", 1737 | "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", 1738 | "dev": true, 1739 | "optional": true 1740 | }, 1741 | "path-is-absolute": { 1742 | "version": "1.0.1", 1743 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1744 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1745 | "dev": true 1746 | }, 1747 | "performance-now": { 1748 | "version": "0.2.0", 1749 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", 1750 | "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", 1751 | "dev": true, 1752 | "optional": true 1753 | }, 1754 | "process-nextick-args": { 1755 | "version": "1.0.7", 1756 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1757 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 1758 | "dev": true 1759 | }, 1760 | "punycode": { 1761 | "version": "1.4.1", 1762 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1763 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1764 | "dev": true, 1765 | "optional": true 1766 | }, 1767 | "qs": { 1768 | "version": "6.4.0", 1769 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", 1770 | "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", 1771 | "dev": true, 1772 | "optional": true 1773 | }, 1774 | "rc": { 1775 | "version": "1.2.1", 1776 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", 1777 | "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", 1778 | "dev": true, 1779 | "optional": true, 1780 | "dependencies": { 1781 | "minimist": { 1782 | "version": "1.2.0", 1783 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1784 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1785 | "dev": true, 1786 | "optional": true 1787 | } 1788 | } 1789 | }, 1790 | "readable-stream": { 1791 | "version": "2.2.9", 1792 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", 1793 | "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", 1794 | "dev": true 1795 | }, 1796 | "request": { 1797 | "version": "2.81.0", 1798 | "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", 1799 | "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", 1800 | "dev": true, 1801 | "optional": true 1802 | }, 1803 | "rimraf": { 1804 | "version": "2.6.1", 1805 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", 1806 | "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", 1807 | "dev": true 1808 | }, 1809 | "safe-buffer": { 1810 | "version": "5.0.1", 1811 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", 1812 | "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", 1813 | "dev": true 1814 | }, 1815 | "semver": { 1816 | "version": "5.3.0", 1817 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", 1818 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", 1819 | "dev": true, 1820 | "optional": true 1821 | }, 1822 | "set-blocking": { 1823 | "version": "2.0.0", 1824 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1825 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 1826 | "dev": true, 1827 | "optional": true 1828 | }, 1829 | "signal-exit": { 1830 | "version": "3.0.2", 1831 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1832 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1833 | "dev": true, 1834 | "optional": true 1835 | }, 1836 | "sntp": { 1837 | "version": "1.0.9", 1838 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 1839 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 1840 | "dev": true, 1841 | "optional": true 1842 | }, 1843 | "sshpk": { 1844 | "version": "1.13.0", 1845 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", 1846 | "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", 1847 | "dev": true, 1848 | "optional": true, 1849 | "dependencies": { 1850 | "assert-plus": { 1851 | "version": "1.0.0", 1852 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1853 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 1854 | "dev": true, 1855 | "optional": true 1856 | } 1857 | } 1858 | }, 1859 | "string_decoder": { 1860 | "version": "1.0.1", 1861 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", 1862 | "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", 1863 | "dev": true 1864 | }, 1865 | "string-width": { 1866 | "version": "1.0.2", 1867 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1868 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1869 | "dev": true 1870 | }, 1871 | "stringstream": { 1872 | "version": "0.0.5", 1873 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 1874 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", 1875 | "dev": true, 1876 | "optional": true 1877 | }, 1878 | "strip-ansi": { 1879 | "version": "3.0.1", 1880 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1881 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1882 | "dev": true 1883 | }, 1884 | "strip-json-comments": { 1885 | "version": "2.0.1", 1886 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1887 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1888 | "dev": true, 1889 | "optional": true 1890 | }, 1891 | "tar": { 1892 | "version": "2.2.1", 1893 | "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", 1894 | "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", 1895 | "dev": true 1896 | }, 1897 | "tar-pack": { 1898 | "version": "3.4.0", 1899 | "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", 1900 | "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", 1901 | "dev": true, 1902 | "optional": true 1903 | }, 1904 | "tough-cookie": { 1905 | "version": "2.3.2", 1906 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", 1907 | "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", 1908 | "dev": true, 1909 | "optional": true 1910 | }, 1911 | "tunnel-agent": { 1912 | "version": "0.6.0", 1913 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1914 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1915 | "dev": true, 1916 | "optional": true 1917 | }, 1918 | "tweetnacl": { 1919 | "version": "0.14.5", 1920 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1921 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1922 | "dev": true, 1923 | "optional": true 1924 | }, 1925 | "uid-number": { 1926 | "version": "0.0.6", 1927 | "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", 1928 | "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", 1929 | "dev": true, 1930 | "optional": true 1931 | }, 1932 | "util-deprecate": { 1933 | "version": "1.0.2", 1934 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1935 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1936 | "dev": true 1937 | }, 1938 | "uuid": { 1939 | "version": "3.0.1", 1940 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", 1941 | "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", 1942 | "dev": true, 1943 | "optional": true 1944 | }, 1945 | "verror": { 1946 | "version": "1.3.6", 1947 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", 1948 | "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", 1949 | "dev": true, 1950 | "optional": true 1951 | }, 1952 | "wide-align": { 1953 | "version": "1.1.2", 1954 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", 1955 | "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", 1956 | "dev": true, 1957 | "optional": true 1958 | }, 1959 | "wrappy": { 1960 | "version": "1.0.2", 1961 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1962 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1963 | "dev": true 1964 | } 1965 | } 1966 | }, 1967 | "function-bind": { 1968 | "version": "1.1.1", 1969 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1970 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1971 | "dev": true 1972 | }, 1973 | "functional-red-black-tree": { 1974 | "version": "1.0.1", 1975 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1976 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1977 | "dev": true 1978 | }, 1979 | "get-caller-file": { 1980 | "version": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", 1981 | "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", 1982 | "dev": true 1983 | }, 1984 | "get-stream": { 1985 | "version": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 1986 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 1987 | "dev": true 1988 | }, 1989 | "glob": { 1990 | "version": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1991 | "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", 1992 | "dev": true 1993 | }, 1994 | "glob-base": { 1995 | "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 1996 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", 1997 | "dev": true 1998 | }, 1999 | "glob-parent": { 2000 | "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 2001 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", 2002 | "dev": true 2003 | }, 2004 | "globals": { 2005 | "version": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 2006 | "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", 2007 | "dev": true 2008 | }, 2009 | "globby": { 2010 | "version": "5.0.0", 2011 | "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", 2012 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", 2013 | "dev": true 2014 | }, 2015 | "graceful-fs": { 2016 | "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 2017 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 2018 | "dev": true 2019 | }, 2020 | "has": { 2021 | "version": "1.0.1", 2022 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", 2023 | "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", 2024 | "dev": true 2025 | }, 2026 | "has-ansi": { 2027 | "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 2028 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 2029 | "dev": true 2030 | }, 2031 | "has-binary": { 2032 | "version": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", 2033 | "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", 2034 | "dev": true, 2035 | "dependencies": { 2036 | "isarray": { 2037 | "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 2038 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 2039 | "dev": true 2040 | } 2041 | } 2042 | }, 2043 | "has-cors": { 2044 | "version": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 2045 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", 2046 | "dev": true 2047 | }, 2048 | "has-flag": { 2049 | "version": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 2050 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 2051 | "dev": true 2052 | }, 2053 | "hash-base": { 2054 | "version": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", 2055 | "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", 2056 | "dev": true 2057 | }, 2058 | "hash.js": { 2059 | "version": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", 2060 | "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=", 2061 | "dev": true 2062 | }, 2063 | "hmac-drbg": { 2064 | "version": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 2065 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 2066 | "dev": true 2067 | }, 2068 | "home-or-tmp": { 2069 | "version": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", 2070 | "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", 2071 | "dev": true 2072 | }, 2073 | "hosted-git-info": { 2074 | "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", 2075 | "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", 2076 | "dev": true 2077 | }, 2078 | "http-errors": { 2079 | "version": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 2080 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 2081 | "dev": true 2082 | }, 2083 | "http-proxy": { 2084 | "version": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", 2085 | "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", 2086 | "dev": true 2087 | }, 2088 | "https-browserify": { 2089 | "version": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", 2090 | "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", 2091 | "dev": true 2092 | }, 2093 | "iconv-lite": { 2094 | "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", 2095 | "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" 2096 | }, 2097 | "ieee754": { 2098 | "version": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", 2099 | "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", 2100 | "dev": true 2101 | }, 2102 | "ignore": { 2103 | "version": "3.3.7", 2104 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", 2105 | "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", 2106 | "dev": true 2107 | }, 2108 | "imurmurhash": { 2109 | "version": "0.1.4", 2110 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2111 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 2112 | "dev": true 2113 | }, 2114 | "indexof": { 2115 | "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 2116 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", 2117 | "dev": true 2118 | }, 2119 | "inflight": { 2120 | "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2121 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2122 | "dev": true 2123 | }, 2124 | "inherits": { 2125 | "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2126 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 2127 | "dev": true 2128 | }, 2129 | "inquirer": { 2130 | "version": "3.3.0", 2131 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", 2132 | "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", 2133 | "dev": true, 2134 | "dependencies": { 2135 | "ansi-regex": { 2136 | "version": "3.0.0", 2137 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2138 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2139 | "dev": true 2140 | }, 2141 | "ansi-styles": { 2142 | "version": "3.2.0", 2143 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 2144 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 2145 | "dev": true 2146 | }, 2147 | "chalk": { 2148 | "version": "2.3.0", 2149 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 2150 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 2151 | "dev": true 2152 | }, 2153 | "strip-ansi": { 2154 | "version": "4.0.0", 2155 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2156 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2157 | "dev": true 2158 | } 2159 | } 2160 | }, 2161 | "interpret": { 2162 | "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", 2163 | "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", 2164 | "dev": true 2165 | }, 2166 | "invariant": { 2167 | "version": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", 2168 | "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", 2169 | "dev": true 2170 | }, 2171 | "invert-kv": { 2172 | "version": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", 2173 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", 2174 | "dev": true 2175 | }, 2176 | "is-arrayish": { 2177 | "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 2178 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 2179 | "dev": true 2180 | }, 2181 | "is-binary-path": { 2182 | "version": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 2183 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 2184 | "dev": true 2185 | }, 2186 | "is-buffer": { 2187 | "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", 2188 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", 2189 | "dev": true 2190 | }, 2191 | "is-builtin-module": { 2192 | "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 2193 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 2194 | "dev": true 2195 | }, 2196 | "is-callable": { 2197 | "version": "1.1.3", 2198 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", 2199 | "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", 2200 | "dev": true 2201 | }, 2202 | "is-date-object": { 2203 | "version": "1.0.1", 2204 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 2205 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", 2206 | "dev": true 2207 | }, 2208 | "is-dotfile": { 2209 | "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", 2210 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", 2211 | "dev": true 2212 | }, 2213 | "is-equal-shallow": { 2214 | "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", 2215 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", 2216 | "dev": true 2217 | }, 2218 | "is-extendable": { 2219 | "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 2220 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 2221 | "dev": true 2222 | }, 2223 | "is-extglob": { 2224 | "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 2225 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", 2226 | "dev": true 2227 | }, 2228 | "is-finite": { 2229 | "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 2230 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 2231 | "dev": true 2232 | }, 2233 | "is-fullwidth-code-point": { 2234 | "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 2235 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 2236 | "dev": true 2237 | }, 2238 | "is-glob": { 2239 | "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 2240 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 2241 | "dev": true 2242 | }, 2243 | "is-number": { 2244 | "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", 2245 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", 2246 | "dev": true 2247 | }, 2248 | "is-path-cwd": { 2249 | "version": "1.0.0", 2250 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 2251 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 2252 | "dev": true 2253 | }, 2254 | "is-path-in-cwd": { 2255 | "version": "1.0.0", 2256 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", 2257 | "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", 2258 | "dev": true 2259 | }, 2260 | "is-path-inside": { 2261 | "version": "1.0.0", 2262 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", 2263 | "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", 2264 | "dev": true 2265 | }, 2266 | "is-posix-bracket": { 2267 | "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", 2268 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", 2269 | "dev": true 2270 | }, 2271 | "is-primitive": { 2272 | "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", 2273 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", 2274 | "dev": true 2275 | }, 2276 | "is-promise": { 2277 | "version": "2.1.0", 2278 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 2279 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 2280 | "dev": true 2281 | }, 2282 | "is-regex": { 2283 | "version": "1.0.4", 2284 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 2285 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 2286 | "dev": true 2287 | }, 2288 | "is-resolvable": { 2289 | "version": "1.0.0", 2290 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", 2291 | "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", 2292 | "dev": true 2293 | }, 2294 | "is-stream": { 2295 | "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 2296 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 2297 | }, 2298 | "is-symbol": { 2299 | "version": "1.0.1", 2300 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", 2301 | "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", 2302 | "dev": true 2303 | }, 2304 | "isarray": { 2305 | "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2306 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2307 | "dev": true 2308 | }, 2309 | "isbinaryfile": { 2310 | "version": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", 2311 | "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", 2312 | "dev": true 2313 | }, 2314 | "isexe": { 2315 | "version": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2316 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2317 | "dev": true 2318 | }, 2319 | "isobject": { 2320 | "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 2321 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 2322 | "dev": true 2323 | }, 2324 | "isomorphic-fetch": { 2325 | "version": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", 2326 | "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=" 2327 | }, 2328 | "jasmine": { 2329 | "version": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", 2330 | "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", 2331 | "dev": true 2332 | }, 2333 | "jasmine-core": { 2334 | "version": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", 2335 | "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", 2336 | "dev": true 2337 | }, 2338 | "jest-docblock": { 2339 | "version": "21.2.0", 2340 | "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", 2341 | "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", 2342 | "dev": true 2343 | }, 2344 | "jquery": { 2345 | "version": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", 2346 | "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=", 2347 | "dev": true 2348 | }, 2349 | "js-tokens": { 2350 | "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 2351 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" 2352 | }, 2353 | "js-yaml": { 2354 | "version": "3.10.0", 2355 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", 2356 | "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", 2357 | "dev": true 2358 | }, 2359 | "jschardet": { 2360 | "version": "1.6.0", 2361 | "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.6.0.tgz", 2362 | "integrity": "sha512-xYuhvQ7I9PDJIGBWev9xm0+SMSed3ZDBAmvVjbFR1ZRLAF+vlXcQu6cRI9uAlj81rzikElRVteehwV7DuX2ZmQ==", 2363 | "dev": true 2364 | }, 2365 | "jsesc": { 2366 | "version": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", 2367 | "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", 2368 | "dev": true 2369 | }, 2370 | "json-loader": { 2371 | "version": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", 2372 | "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=", 2373 | "dev": true 2374 | }, 2375 | "json-schema-traverse": { 2376 | "version": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 2377 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 2378 | "dev": true 2379 | }, 2380 | "json-stable-stringify": { 2381 | "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 2382 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 2383 | "dev": true 2384 | }, 2385 | "json3": { 2386 | "version": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", 2387 | "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", 2388 | "dev": true 2389 | }, 2390 | "json5": { 2391 | "version": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 2392 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", 2393 | "dev": true 2394 | }, 2395 | "jsonify": { 2396 | "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 2397 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 2398 | "dev": true 2399 | }, 2400 | "jsx-ast-utils": { 2401 | "version": "2.0.1", 2402 | "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", 2403 | "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", 2404 | "dev": true 2405 | }, 2406 | "karma": { 2407 | "version": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", 2408 | "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", 2409 | "dev": true, 2410 | "dependencies": { 2411 | "lodash": { 2412 | "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 2413 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 2414 | "dev": true 2415 | } 2416 | } 2417 | }, 2418 | "karma-chrome-launcher": { 2419 | "version": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", 2420 | "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=", 2421 | "dev": true 2422 | }, 2423 | "karma-jasmine": { 2424 | "version": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", 2425 | "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", 2426 | "dev": true 2427 | }, 2428 | "karma-requirejs": { 2429 | "version": "https://registry.npmjs.org/karma-requirejs/-/karma-requirejs-1.1.0.tgz", 2430 | "integrity": "sha1-/driy4fX68FvsCIok1ZNf+5Xh5g=", 2431 | "dev": true 2432 | }, 2433 | "kind-of": { 2434 | "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2435 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2436 | "dev": true 2437 | }, 2438 | "lazy-cache": { 2439 | "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 2440 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", 2441 | "dev": true 2442 | }, 2443 | "lcid": { 2444 | "version": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", 2445 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", 2446 | "dev": true 2447 | }, 2448 | "levn": { 2449 | "version": "0.3.0", 2450 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 2451 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 2452 | "dev": true 2453 | }, 2454 | "load-json-file": { 2455 | "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 2456 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 2457 | "dev": true 2458 | }, 2459 | "loader-runner": { 2460 | "version": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", 2461 | "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", 2462 | "dev": true 2463 | }, 2464 | "loader-utils": { 2465 | "version": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 2466 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", 2467 | "dev": true 2468 | }, 2469 | "locate-path": { 2470 | "version": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 2471 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 2472 | "dev": true 2473 | }, 2474 | "lodash": { 2475 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 2476 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 2477 | }, 2478 | "log4js": { 2479 | "version": "https://registry.npmjs.com/log4js/-/log4js-0.6.38.tgz", 2480 | "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", 2481 | "dev": true, 2482 | "dependencies": { 2483 | "isarray": { 2484 | "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 2485 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 2486 | "dev": true 2487 | }, 2488 | "readable-stream": { 2489 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 2490 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 2491 | "dev": true 2492 | }, 2493 | "string_decoder": { 2494 | "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 2495 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 2496 | "dev": true 2497 | } 2498 | } 2499 | }, 2500 | "longest": { 2501 | "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 2502 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", 2503 | "dev": true 2504 | }, 2505 | "loose-envify": { 2506 | "version": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", 2507 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=" 2508 | }, 2509 | "lru-cache": { 2510 | "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", 2511 | "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", 2512 | "dev": true 2513 | }, 2514 | "make-dir": { 2515 | "version": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", 2516 | "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", 2517 | "dev": true 2518 | }, 2519 | "md5.js": { 2520 | "version": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", 2521 | "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", 2522 | "dev": true, 2523 | "dependencies": { 2524 | "hash-base": { 2525 | "version": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 2526 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 2527 | "dev": true 2528 | } 2529 | } 2530 | }, 2531 | "media-typer": { 2532 | "version": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2533 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 2534 | "dev": true 2535 | }, 2536 | "mem": { 2537 | "version": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", 2538 | "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", 2539 | "dev": true 2540 | }, 2541 | "memory-fs": { 2542 | "version": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", 2543 | "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", 2544 | "dev": true 2545 | }, 2546 | "micromatch": { 2547 | "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", 2548 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", 2549 | "dev": true 2550 | }, 2551 | "miller-rabin": { 2552 | "version": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", 2553 | "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", 2554 | "dev": true 2555 | }, 2556 | "mime": { 2557 | "version": "https://registry.npmjs.org/mime/-/mime-1.4.0.tgz", 2558 | "integrity": "sha1-aeng21HUTyo7VuSLeBfX0Tfxo0M=", 2559 | "dev": true 2560 | }, 2561 | "mime-db": { 2562 | "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", 2563 | "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=", 2564 | "dev": true 2565 | }, 2566 | "mime-types": { 2567 | "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", 2568 | "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", 2569 | "dev": true 2570 | }, 2571 | "mimic-fn": { 2572 | "version": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", 2573 | "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", 2574 | "dev": true 2575 | }, 2576 | "minimalistic-assert": { 2577 | "version": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", 2578 | "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", 2579 | "dev": true 2580 | }, 2581 | "minimalistic-crypto-utils": { 2582 | "version": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 2583 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 2584 | "dev": true 2585 | }, 2586 | "minimatch": { 2587 | "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2588 | "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", 2589 | "dev": true 2590 | }, 2591 | "minimist": { 2592 | "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 2593 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", 2594 | "dev": true 2595 | }, 2596 | "mkdirp": { 2597 | "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2598 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2599 | "dev": true, 2600 | "dependencies": { 2601 | "minimist": { 2602 | "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2603 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2604 | "dev": true 2605 | } 2606 | } 2607 | }, 2608 | "ms": { 2609 | "version": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2610 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2611 | "dev": true 2612 | }, 2613 | "mute-stream": { 2614 | "version": "0.0.7", 2615 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 2616 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 2617 | "dev": true 2618 | }, 2619 | "nan": { 2620 | "version": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", 2621 | "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", 2622 | "dev": true, 2623 | "optional": true 2624 | }, 2625 | "natural-compare": { 2626 | "version": "1.4.0", 2627 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2628 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 2629 | "dev": true 2630 | }, 2631 | "negotiator": { 2632 | "version": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 2633 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", 2634 | "dev": true 2635 | }, 2636 | "node-fetch": { 2637 | "version": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.2.tgz", 2638 | "integrity": "sha1-xU6arFfkModSM1JfPIkcQVn/79c=" 2639 | }, 2640 | "node-libs-browser": { 2641 | "version": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", 2642 | "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", 2643 | "dev": true, 2644 | "dependencies": { 2645 | "string_decoder": { 2646 | "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 2647 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 2648 | "dev": true 2649 | } 2650 | } 2651 | }, 2652 | "normalize-package-data": { 2653 | "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 2654 | "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", 2655 | "dev": true 2656 | }, 2657 | "normalize-path": { 2658 | "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 2659 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 2660 | "dev": true 2661 | }, 2662 | "npm-run-path": { 2663 | "version": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 2664 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 2665 | "dev": true 2666 | }, 2667 | "null-check": { 2668 | "version": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", 2669 | "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", 2670 | "dev": true 2671 | }, 2672 | "number-is-nan": { 2673 | "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2674 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 2675 | "dev": true 2676 | }, 2677 | "object-assign": { 2678 | "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 2679 | "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" 2680 | }, 2681 | "object-component": { 2682 | "version": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", 2683 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", 2684 | "dev": true 2685 | }, 2686 | "object-keys": { 2687 | "version": "1.0.11", 2688 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", 2689 | "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", 2690 | "dev": true 2691 | }, 2692 | "object.omit": { 2693 | "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", 2694 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", 2695 | "dev": true 2696 | }, 2697 | "on-finished": { 2698 | "version": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2699 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2700 | "dev": true 2701 | }, 2702 | "once": { 2703 | "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2704 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2705 | "dev": true 2706 | }, 2707 | "onetime": { 2708 | "version": "2.0.1", 2709 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 2710 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 2711 | "dev": true 2712 | }, 2713 | "optimist": { 2714 | "version": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 2715 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 2716 | "dev": true 2717 | }, 2718 | "optionator": { 2719 | "version": "0.8.2", 2720 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 2721 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 2722 | "dev": true, 2723 | "dependencies": { 2724 | "wordwrap": { 2725 | "version": "1.0.0", 2726 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 2727 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 2728 | "dev": true 2729 | } 2730 | } 2731 | }, 2732 | "options": { 2733 | "version": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", 2734 | "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", 2735 | "dev": true 2736 | }, 2737 | "os-browserify": { 2738 | "version": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", 2739 | "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", 2740 | "dev": true 2741 | }, 2742 | "os-homedir": { 2743 | "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 2744 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 2745 | "dev": true 2746 | }, 2747 | "os-locale": { 2748 | "version": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", 2749 | "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", 2750 | "dev": true 2751 | }, 2752 | "os-tmpdir": { 2753 | "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2754 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 2755 | "dev": true 2756 | }, 2757 | "p-finally": { 2758 | "version": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 2759 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 2760 | "dev": true 2761 | }, 2762 | "p-limit": { 2763 | "version": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", 2764 | "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", 2765 | "dev": true 2766 | }, 2767 | "p-locate": { 2768 | "version": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 2769 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 2770 | "dev": true 2771 | }, 2772 | "pako": { 2773 | "version": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", 2774 | "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", 2775 | "dev": true 2776 | }, 2777 | "parse-asn1": { 2778 | "version": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", 2779 | "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", 2780 | "dev": true 2781 | }, 2782 | "parse-glob": { 2783 | "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 2784 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", 2785 | "dev": true 2786 | }, 2787 | "parse-json": { 2788 | "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2789 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2790 | "dev": true 2791 | }, 2792 | "parsejson": { 2793 | "version": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", 2794 | "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", 2795 | "dev": true 2796 | }, 2797 | "parseqs": { 2798 | "version": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", 2799 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", 2800 | "dev": true 2801 | }, 2802 | "parseuri": { 2803 | "version": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", 2804 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", 2805 | "dev": true 2806 | }, 2807 | "parseurl": { 2808 | "version": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", 2809 | "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", 2810 | "dev": true 2811 | }, 2812 | "path-browserify": { 2813 | "version": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", 2814 | "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", 2815 | "dev": true 2816 | }, 2817 | "path-exists": { 2818 | "version": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2819 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2820 | "dev": true 2821 | }, 2822 | "path-is-absolute": { 2823 | "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2824 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2825 | "dev": true 2826 | }, 2827 | "path-is-inside": { 2828 | "version": "1.0.2", 2829 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 2830 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 2831 | "dev": true 2832 | }, 2833 | "path-key": { 2834 | "version": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 2835 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 2836 | "dev": true 2837 | }, 2838 | "path-type": { 2839 | "version": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 2840 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 2841 | "dev": true 2842 | }, 2843 | "pbkdf2": { 2844 | "version": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", 2845 | "integrity": "sha1-w30pVTHnhrHaPj6tyEBCasywriU=", 2846 | "dev": true 2847 | }, 2848 | "pify": { 2849 | "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2850 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 2851 | "dev": true 2852 | }, 2853 | "pinkie": { 2854 | "version": "2.0.4", 2855 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2856 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 2857 | "dev": true 2858 | }, 2859 | "pinkie-promise": { 2860 | "version": "2.0.1", 2861 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2862 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2863 | "dev": true 2864 | }, 2865 | "pkg-dir": { 2866 | "version": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", 2867 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", 2868 | "dev": true 2869 | }, 2870 | "pluralize": { 2871 | "version": "7.0.0", 2872 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", 2873 | "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", 2874 | "dev": true 2875 | }, 2876 | "prelude-ls": { 2877 | "version": "1.1.2", 2878 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 2879 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 2880 | "dev": true 2881 | }, 2882 | "preserve": { 2883 | "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", 2884 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", 2885 | "dev": true 2886 | }, 2887 | "prettier": { 2888 | "version": "1.7.4", 2889 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.7.4.tgz", 2890 | "integrity": "sha1-XoYkrpNjyA+V7GRFhOzfVddPk/o=", 2891 | "dev": true 2892 | }, 2893 | "private": { 2894 | "version": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", 2895 | "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", 2896 | "dev": true 2897 | }, 2898 | "process": { 2899 | "version": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 2900 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 2901 | "dev": true 2902 | }, 2903 | "process-nextick-args": { 2904 | "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2905 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 2906 | "dev": true 2907 | }, 2908 | "progress": { 2909 | "version": "2.0.0", 2910 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", 2911 | "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", 2912 | "dev": true 2913 | }, 2914 | "promise": { 2915 | "version": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 2916 | "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=" 2917 | }, 2918 | "prop-types": { 2919 | "version": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", 2920 | "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=" 2921 | }, 2922 | "prr": { 2923 | "version": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", 2924 | "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", 2925 | "dev": true 2926 | }, 2927 | "pseudomap": { 2928 | "version": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 2929 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 2930 | "dev": true 2931 | }, 2932 | "public-encrypt": { 2933 | "version": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", 2934 | "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", 2935 | "dev": true 2936 | }, 2937 | "punycode": { 2938 | "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2939 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2940 | "dev": true 2941 | }, 2942 | "qjobs": { 2943 | "version": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", 2944 | "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", 2945 | "dev": true 2946 | }, 2947 | "qs": { 2948 | "version": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", 2949 | "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", 2950 | "dev": true 2951 | }, 2952 | "querystring": { 2953 | "version": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 2954 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 2955 | "dev": true 2956 | }, 2957 | "querystring-es3": { 2958 | "version": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 2959 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 2960 | "dev": true 2961 | }, 2962 | "randomatic": { 2963 | "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", 2964 | "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", 2965 | "dev": true, 2966 | "dependencies": { 2967 | "is-number": { 2968 | "version": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 2969 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 2970 | "dev": true, 2971 | "dependencies": { 2972 | "kind-of": { 2973 | "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2974 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2975 | "dev": true 2976 | } 2977 | } 2978 | }, 2979 | "kind-of": { 2980 | "version": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 2981 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 2982 | "dev": true 2983 | } 2984 | } 2985 | }, 2986 | "randombytes": { 2987 | "version": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", 2988 | "integrity": "sha1-3ACaJGuNCaF3tLegrne8Vw9LG3k=", 2989 | "dev": true 2990 | }, 2991 | "range-parser": { 2992 | "version": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 2993 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", 2994 | "dev": true 2995 | }, 2996 | "raw-body": { 2997 | "version": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", 2998 | "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", 2999 | "dev": true 3000 | }, 3001 | "react": { 3002 | "version": "https://registry.npmjs.org/react/-/react-15.6.1.tgz", 3003 | "integrity": "sha1-uqhDTsZ4C96ZfNw4C3nNM7ljk98=" 3004 | }, 3005 | "react-dom": { 3006 | "version": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.1.tgz", 3007 | "integrity": "sha1-LLDtQZEDjlPCCes6eaI+Kkz5lHA=" 3008 | }, 3009 | "read-pkg": { 3010 | "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 3011 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 3012 | "dev": true 3013 | }, 3014 | "read-pkg-up": { 3015 | "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 3016 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 3017 | "dev": true 3018 | }, 3019 | "readable-stream": { 3020 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 3021 | "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", 3022 | "dev": true 3023 | }, 3024 | "readdirp": { 3025 | "version": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", 3026 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", 3027 | "dev": true 3028 | }, 3029 | "regenerator-runtime": { 3030 | "version": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", 3031 | "integrity": "sha1-flT+W1zNXWYk6mJVw0c74JC4AuE=", 3032 | "dev": true 3033 | }, 3034 | "regex-cache": { 3035 | "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", 3036 | "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", 3037 | "dev": true 3038 | }, 3039 | "remove-trailing-separator": { 3040 | "version": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 3041 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 3042 | "dev": true 3043 | }, 3044 | "repeat-element": { 3045 | "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", 3046 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", 3047 | "dev": true 3048 | }, 3049 | "repeat-string": { 3050 | "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 3051 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 3052 | "dev": true 3053 | }, 3054 | "repeating": { 3055 | "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 3056 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 3057 | "dev": true 3058 | }, 3059 | "require-directory": { 3060 | "version": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3061 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 3062 | "dev": true 3063 | }, 3064 | "require-main-filename": { 3065 | "version": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", 3066 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", 3067 | "dev": true 3068 | }, 3069 | "require-uncached": { 3070 | "version": "1.0.3", 3071 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 3072 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 3073 | "dev": true 3074 | }, 3075 | "requirejs": { 3076 | "version": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.5.tgz", 3077 | "integrity": "sha1-YXuay7yzNlQO9JFNeQMjqNS4YbA=", 3078 | "dev": true 3079 | }, 3080 | "requires-port": { 3081 | "version": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 3082 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 3083 | "dev": true 3084 | }, 3085 | "resolve-from": { 3086 | "version": "1.0.1", 3087 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 3088 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 3089 | "dev": true 3090 | }, 3091 | "restore-cursor": { 3092 | "version": "2.0.0", 3093 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 3094 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 3095 | "dev": true 3096 | }, 3097 | "right-align": { 3098 | "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 3099 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 3100 | "dev": true 3101 | }, 3102 | "rimraf": { 3103 | "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", 3104 | "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", 3105 | "dev": true 3106 | }, 3107 | "ripemd160": { 3108 | "version": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", 3109 | "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", 3110 | "dev": true 3111 | }, 3112 | "run-async": { 3113 | "version": "2.3.0", 3114 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 3115 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 3116 | "dev": true 3117 | }, 3118 | "rx-lite": { 3119 | "version": "4.0.8", 3120 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", 3121 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", 3122 | "dev": true 3123 | }, 3124 | "rx-lite-aggregates": { 3125 | "version": "4.0.8", 3126 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", 3127 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", 3128 | "dev": true 3129 | }, 3130 | "safe-buffer": { 3131 | "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 3132 | "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", 3133 | "dev": true 3134 | }, 3135 | "semver": { 3136 | "version": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", 3137 | "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", 3138 | "dev": true 3139 | }, 3140 | "set-blocking": { 3141 | "version": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 3142 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 3143 | "dev": true 3144 | }, 3145 | "set-immediate-shim": { 3146 | "version": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", 3147 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", 3148 | "dev": true 3149 | }, 3150 | "setimmediate": { 3151 | "version": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 3152 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 3153 | }, 3154 | "setprototypeof": { 3155 | "version": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 3156 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", 3157 | "dev": true 3158 | }, 3159 | "sha.js": { 3160 | "version": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", 3161 | "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", 3162 | "dev": true 3163 | }, 3164 | "shebang-command": { 3165 | "version": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 3166 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 3167 | "dev": true 3168 | }, 3169 | "shebang-regex": { 3170 | "version": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 3171 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 3172 | "dev": true 3173 | }, 3174 | "signal-exit": { 3175 | "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 3176 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 3177 | "dev": true 3178 | }, 3179 | "slash": { 3180 | "version": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", 3181 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", 3182 | "dev": true 3183 | }, 3184 | "slice-ansi": { 3185 | "version": "1.0.0", 3186 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", 3187 | "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", 3188 | "dev": true, 3189 | "dependencies": { 3190 | "is-fullwidth-code-point": { 3191 | "version": "2.0.0", 3192 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 3193 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 3194 | "dev": true 3195 | } 3196 | } 3197 | }, 3198 | "socket.io": { 3199 | "version": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", 3200 | "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", 3201 | "dev": true, 3202 | "dependencies": { 3203 | "debug": { 3204 | "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 3205 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 3206 | "dev": true 3207 | }, 3208 | "ms": { 3209 | "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 3210 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 3211 | "dev": true 3212 | } 3213 | } 3214 | }, 3215 | "socket.io-adapter": { 3216 | "version": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", 3217 | "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", 3218 | "dev": true, 3219 | "dependencies": { 3220 | "debug": { 3221 | "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 3222 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 3223 | "dev": true 3224 | }, 3225 | "ms": { 3226 | "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 3227 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 3228 | "dev": true 3229 | } 3230 | } 3231 | }, 3232 | "socket.io-client": { 3233 | "version": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", 3234 | "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", 3235 | "dev": true, 3236 | "dependencies": { 3237 | "component-emitter": { 3238 | "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 3239 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 3240 | "dev": true 3241 | }, 3242 | "debug": { 3243 | "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 3244 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 3245 | "dev": true 3246 | }, 3247 | "ms": { 3248 | "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 3249 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 3250 | "dev": true 3251 | } 3252 | } 3253 | }, 3254 | "socket.io-parser": { 3255 | "version": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", 3256 | "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", 3257 | "dev": true, 3258 | "dependencies": { 3259 | "debug": { 3260 | "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 3261 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", 3262 | "dev": true 3263 | }, 3264 | "isarray": { 3265 | "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 3266 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 3267 | "dev": true 3268 | }, 3269 | "ms": { 3270 | "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 3271 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", 3272 | "dev": true 3273 | } 3274 | } 3275 | }, 3276 | "source-list-map": { 3277 | "version": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", 3278 | "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=", 3279 | "dev": true 3280 | }, 3281 | "source-map": { 3282 | "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 3283 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 3284 | "dev": true 3285 | }, 3286 | "source-map-support": { 3287 | "version": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.16.tgz", 3288 | "integrity": "sha1-Fv7PmCEkZ9AX1Yair2jWKLlCHNg=", 3289 | "dev": true 3290 | }, 3291 | "spdx-correct": { 3292 | "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 3293 | "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", 3294 | "dev": true 3295 | }, 3296 | "spdx-expression-parse": { 3297 | "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", 3298 | "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", 3299 | "dev": true 3300 | }, 3301 | "spdx-license-ids": { 3302 | "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", 3303 | "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", 3304 | "dev": true 3305 | }, 3306 | "sprintf-js": { 3307 | "version": "1.0.3", 3308 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 3309 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 3310 | "dev": true 3311 | }, 3312 | "stackframe": { 3313 | "version": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", 3314 | "integrity": "sha1-NXskqZL5Qny6a1RdlqFO0svKGHs=" 3315 | }, 3316 | "statuses": { 3317 | "version": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 3318 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", 3319 | "dev": true 3320 | }, 3321 | "stream-browserify": { 3322 | "version": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", 3323 | "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", 3324 | "dev": true 3325 | }, 3326 | "stream-http": { 3327 | "version": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", 3328 | "integrity": "sha1-QKBQ7I3DtTsz2ZCUFcAsC/Gr+60=", 3329 | "dev": true 3330 | }, 3331 | "string_decoder": { 3332 | "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 3333 | "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", 3334 | "dev": true 3335 | }, 3336 | "string-width": { 3337 | "version": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 3338 | "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", 3339 | "dev": true, 3340 | "dependencies": { 3341 | "ansi-regex": { 3342 | "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 3343 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 3344 | "dev": true 3345 | }, 3346 | "is-fullwidth-code-point": { 3347 | "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 3348 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 3349 | "dev": true 3350 | }, 3351 | "strip-ansi": { 3352 | "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 3353 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 3354 | "dev": true 3355 | } 3356 | } 3357 | }, 3358 | "strip-ansi": { 3359 | "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 3360 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 3361 | "dev": true 3362 | }, 3363 | "strip-bom": { 3364 | "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 3365 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 3366 | "dev": true 3367 | }, 3368 | "strip-eof": { 3369 | "version": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 3370 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 3371 | "dev": true 3372 | }, 3373 | "strip-json-comments": { 3374 | "version": "2.0.1", 3375 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 3376 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 3377 | "dev": true 3378 | }, 3379 | "supports-color": { 3380 | "version": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 3381 | "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", 3382 | "dev": true 3383 | }, 3384 | "table": { 3385 | "version": "4.0.2", 3386 | "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", 3387 | "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", 3388 | "dev": true, 3389 | "dependencies": { 3390 | "ajv": { 3391 | "version": "5.3.0", 3392 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", 3393 | "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", 3394 | "dev": true 3395 | }, 3396 | "ansi-styles": { 3397 | "version": "3.2.0", 3398 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 3399 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 3400 | "dev": true 3401 | }, 3402 | "chalk": { 3403 | "version": "2.3.0", 3404 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 3405 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 3406 | "dev": true 3407 | } 3408 | } 3409 | }, 3410 | "tapable": { 3411 | "version": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", 3412 | "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", 3413 | "dev": true 3414 | }, 3415 | "text-table": { 3416 | "version": "0.2.0", 3417 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3418 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 3419 | "dev": true 3420 | }, 3421 | "through": { 3422 | "version": "2.3.8", 3423 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3424 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 3425 | "dev": true 3426 | }, 3427 | "timers-browserify": { 3428 | "version": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", 3429 | "integrity": "sha1-lspT9LeUpefA4b18yIo3Ipj6AeY=", 3430 | "dev": true 3431 | }, 3432 | "tmp": { 3433 | "version": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", 3434 | "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", 3435 | "dev": true 3436 | }, 3437 | "to-array": { 3438 | "version": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 3439 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", 3440 | "dev": true 3441 | }, 3442 | "to-arraybuffer": { 3443 | "version": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", 3444 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", 3445 | "dev": true 3446 | }, 3447 | "to-fast-properties": { 3448 | "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 3449 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", 3450 | "dev": true 3451 | }, 3452 | "trim-right": { 3453 | "version": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 3454 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 3455 | "dev": true 3456 | }, 3457 | "tryit": { 3458 | "version": "1.0.3", 3459 | "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", 3460 | "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", 3461 | "dev": true 3462 | }, 3463 | "tty-browserify": { 3464 | "version": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", 3465 | "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", 3466 | "dev": true 3467 | }, 3468 | "type-check": { 3469 | "version": "0.3.2", 3470 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 3471 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 3472 | "dev": true 3473 | }, 3474 | "type-is": { 3475 | "version": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 3476 | "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", 3477 | "dev": true 3478 | }, 3479 | "typedarray": { 3480 | "version": "0.0.6", 3481 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 3482 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 3483 | "dev": true 3484 | }, 3485 | "ua-parser-js": { 3486 | "version": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.14.tgz", 3487 | "integrity": "sha1-EQ1T+kw/MmwSEpK76skE0uAzh8o=" 3488 | }, 3489 | "uglify-js": { 3490 | "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 3491 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 3492 | "dev": true, 3493 | "dependencies": { 3494 | "yargs": { 3495 | "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 3496 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 3497 | "dev": true 3498 | } 3499 | } 3500 | }, 3501 | "uglify-to-browserify": { 3502 | "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 3503 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 3504 | "dev": true, 3505 | "optional": true 3506 | }, 3507 | "uglifyjs-webpack-plugin": { 3508 | "version": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", 3509 | "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", 3510 | "dev": true 3511 | }, 3512 | "ultron": { 3513 | "version": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", 3514 | "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", 3515 | "dev": true 3516 | }, 3517 | "unpipe": { 3518 | "version": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3519 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 3520 | "dev": true 3521 | }, 3522 | "url": { 3523 | "version": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 3524 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 3525 | "dev": true, 3526 | "dependencies": { 3527 | "punycode": { 3528 | "version": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 3529 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 3530 | "dev": true 3531 | } 3532 | } 3533 | }, 3534 | "useragent": { 3535 | "version": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", 3536 | "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", 3537 | "dev": true 3538 | }, 3539 | "util": { 3540 | "version": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 3541 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 3542 | "dev": true, 3543 | "dependencies": { 3544 | "inherits": { 3545 | "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 3546 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 3547 | "dev": true 3548 | } 3549 | } 3550 | }, 3551 | "util-deprecate": { 3552 | "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3553 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3554 | "dev": true 3555 | }, 3556 | "utils-merge": { 3557 | "version": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", 3558 | "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", 3559 | "dev": true 3560 | }, 3561 | "validate-npm-package-license": { 3562 | "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", 3563 | "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", 3564 | "dev": true 3565 | }, 3566 | "vm-browserify": { 3567 | "version": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", 3568 | "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", 3569 | "dev": true 3570 | }, 3571 | "void-elements": { 3572 | "version": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", 3573 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", 3574 | "dev": true 3575 | }, 3576 | "watchpack": { 3577 | "version": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", 3578 | "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", 3579 | "dev": true 3580 | }, 3581 | "webpack": { 3582 | "version": "https://registry.npmjs.org/webpack/-/webpack-3.5.5.tgz", 3583 | "integrity": "sha1-Mibwn8iz5DX/eB5680+CtosmmWw=", 3584 | "dev": true 3585 | }, 3586 | "webpack-sources": { 3587 | "version": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", 3588 | "integrity": "sha1-xzVkNqTRMSO+LiQmoF0drZy+Zc8=", 3589 | "dev": true 3590 | }, 3591 | "whatwg-fetch": { 3592 | "version": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", 3593 | "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" 3594 | }, 3595 | "which": { 3596 | "version": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 3597 | "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", 3598 | "dev": true 3599 | }, 3600 | "which-module": { 3601 | "version": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 3602 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 3603 | "dev": true 3604 | }, 3605 | "window-size": { 3606 | "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 3607 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", 3608 | "dev": true 3609 | }, 3610 | "wordwrap": { 3611 | "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 3612 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", 3613 | "dev": true 3614 | }, 3615 | "wrap-ansi": { 3616 | "version": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 3617 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 3618 | "dev": true, 3619 | "dependencies": { 3620 | "string-width": { 3621 | "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 3622 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 3623 | "dev": true 3624 | } 3625 | } 3626 | }, 3627 | "wrappy": { 3628 | "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3629 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3630 | "dev": true 3631 | }, 3632 | "write": { 3633 | "version": "0.2.1", 3634 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 3635 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 3636 | "dev": true 3637 | }, 3638 | "ws": { 3639 | "version": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", 3640 | "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", 3641 | "dev": true 3642 | }, 3643 | "wtf-8": { 3644 | "version": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", 3645 | "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", 3646 | "dev": true 3647 | }, 3648 | "xmlhttprequest-ssl": { 3649 | "version": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", 3650 | "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", 3651 | "dev": true 3652 | }, 3653 | "xtend": { 3654 | "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 3655 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 3656 | "dev": true 3657 | }, 3658 | "y18n": { 3659 | "version": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", 3660 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", 3661 | "dev": true 3662 | }, 3663 | "yallist": { 3664 | "version": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 3665 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 3666 | "dev": true 3667 | }, 3668 | "yargs": { 3669 | "version": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", 3670 | "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", 3671 | "dev": true, 3672 | "dependencies": { 3673 | "camelcase": { 3674 | "version": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 3675 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", 3676 | "dev": true 3677 | }, 3678 | "cliui": { 3679 | "version": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", 3680 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", 3681 | "dev": true, 3682 | "dependencies": { 3683 | "string-width": { 3684 | "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 3685 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 3686 | "dev": true 3687 | } 3688 | } 3689 | } 3690 | } 3691 | }, 3692 | "yargs-parser": { 3693 | "version": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", 3694 | "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", 3695 | "dev": true, 3696 | "dependencies": { 3697 | "camelcase": { 3698 | "version": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 3699 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", 3700 | "dev": true 3701 | } 3702 | } 3703 | }, 3704 | "yeast": { 3705 | "version": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 3706 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", 3707 | "dev": true 3708 | } 3709 | } 3710 | } 3711 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "element-history", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "./node_modules/karma/bin/karma start --single-run", 8 | "test-develop": "./node_modules/karma/bin/karma start", 9 | "develop": "webpack --watch" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/mattzeunert/ElementHistory.git" 14 | }, 15 | "keywords": [ 16 | "debugging" 17 | ], 18 | "author": "Matt Zeunert", 19 | "license": "MIT", 20 | "bugs": { 21 | "url": "https://github.com/mattzeunert/ElementHistory/issues" 22 | }, 23 | "homepage": "https://github.com/mattzeunert/ElementHistory#readme", 24 | "devDependencies": { 25 | "babel-core": "^6.26.0", 26 | "babel-loader": "^7.1.2", 27 | "babel-plugin-transform-react-jsx": "^6.24.1", 28 | "eslint": "^4.10.0", 29 | "eslint-plugin-prettier": "^2.3.1", 30 | "eslint-plugin-react": "^7.4.0", 31 | "jasmine": "^2.8.0", 32 | "jasmine-core": "^2.8.0", 33 | "jquery": "^3.2.1", 34 | "karma": "^1.7.0", 35 | "karma-chrome-launcher": "^2.2.0", 36 | "karma-jasmine": "^1.1.0", 37 | "karma-requirejs": "^1.1.0", 38 | "prettier": "1.7.4", 39 | "requirejs": "^2.3.5", 40 | "webpack": "^3.5.5" 41 | }, 42 | "dependencies": { 43 | "error-stack-parser": "^2.0.1", 44 | "lodash": "^4.17.4", 45 | "react": "^15.6.1", 46 | "react-dom": "^15.6.1" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/background.js: -------------------------------------------------------------------------------- 1 | let sessions = {}; 2 | 3 | 4 | let trackHistoryCode = "console.log('track history code not loaded yet')"; 5 | fetch(chrome.extension.getURL("trackHistory.js")) 6 | .then(function(r){ 7 | return r.text(); 8 | }) 9 | .then(function(text){ 10 | trackHistoryCode = text; 11 | }); 12 | 13 | chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){ 14 | console.log("changeinfo", changeInfo, tabId); 15 | 16 | if (changeInfo.status === "loading") { 17 | if (isEnabledInTab(tabId)) { 18 | enableInTab(tabId); 19 | } 20 | 21 | // prevent double activation 22 | 23 | // Need to check if stage is RELOADING, because the 24 | // tab state provided by changeInfo can revert 25 | // back to loading after the session has already been 26 | // initialized 27 | // if (session.isReloading()) { 28 | // session.initialize(); 29 | // } else { 30 | // console.log("changeinfo status is back to loading, but session is already initialized (stage:", session._stage, ")") 31 | // } 32 | } 33 | }); 34 | 35 | // chrome.tabs.onRemoved.addListener(function(tabId){ 36 | // var session = self.getTabSession(tabId); 37 | // console.log("onremoved") 38 | // if (session){ 39 | // console.log("closing") 40 | // session.close(); 41 | // } 42 | // }) 43 | 44 | function isEnabledInTab(tabId) { 45 | return sessions[tabId] && sessions[tabId].enabled; 46 | } 47 | 48 | function onBrowserActionClicked(tab) { 49 | if (isEnabledInTab(tab.id)){ 50 | disableInTab(tab.id); 51 | chrome.tabs.executeScript(tab.id, { 52 | code: ` 53 | var scr = document.createElement("script") 54 | var code = decodeURI("${encodeURI("window.__elementHistory.disableTracking()")}") 55 | scr.innerHTML = code; 56 | (document.documentElement || document.body).appendChild(scr) 57 | `, 58 | runAt: "document_start" 59 | }, function(){ 60 | console.log("disabled", arguments); 61 | }); 62 | } 63 | else { 64 | enableInTab(tab.id); 65 | } 66 | 67 | console.log("clicked", tab); 68 | } 69 | chrome.browserAction.onClicked.addListener(onBrowserActionClicked); 70 | 71 | function disableInTab(tabId) { 72 | sessions[tabId] = null; 73 | chrome.browserAction.setBadgeText({ 74 | text: "", 75 | tabId: tabId, 76 | }); 77 | } 78 | 79 | function enableInTab(tabId) { 80 | if (!tabId) {;} 81 | // console.log("enableindtab", enabledTabs, tabId) 82 | sessions[tabId] = { 83 | enabled: true 84 | }; 85 | chrome.browserAction.setBadgeText({ 86 | text: "ON", 87 | tabId: tabId, 88 | }); 89 | // console.log("enabledtabs", enabledTabs) 90 | console.log("calling executescript"); 91 | chrome.tabs.executeScript(tabId, { 92 | code: ` 93 | var scr = document.createElement("script") 94 | var code = decodeURI("${encodeURI(trackHistoryCode + ";window.__elementHistory.enableTracking()")}") 95 | scr.innerHTML = code; 96 | (document.documentElement || document.body).appendChild(scr) 97 | `, 98 | runAt: "document_start" 99 | }, function(){ 100 | console.log("injected", arguments); 101 | }); 102 | 103 | /* 104 | could this work too? 105 | chrome.tabs.executeScript({ 106 | file: '/scripts/runsOnPageLoad.js' 107 | }); 108 | */ 109 | } -------------------------------------------------------------------------------- /src/create-pane.js: -------------------------------------------------------------------------------- 1 | chrome.devtools.panels.elements.createSidebarPane("Element History", 2 | function(sidebar) { 3 | // sidebar initialization code here 4 | console.log(arguments); 5 | sidebar.setPage("pane.html"); 6 | // chrome.devtools.panels.elements.onSelectionChanged.addListener(function() { 7 | // chrome.devtools.inspectedWindow.eval("({history: $0.__elementHistory})", function (res) { 8 | // console.log(res) 9 | // sidebar.setObject(res.history) 10 | // }); 11 | // }); 12 | }); -------------------------------------------------------------------------------- /src/devtools.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mattzeunert/ElementHistory/ff31c1ef593fd65a1d66bed2eb0eefd76c723fdc/src/icon.png -------------------------------------------------------------------------------- /src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | 4 | "name": "ElementHistory", 5 | "description": "See what code created or updated a DOM element", 6 | "version": "1.6", 7 | 8 | "browser_action": { 9 | }, 10 | "icons": { 11 | "64": "icon.png" 12 | }, 13 | "background": { 14 | "scripts": ["background.js"] 15 | }, 16 | "devtools_page": "devtools.html", 17 | "permissions": [ 18 | "http://*/*", 19 | "https://*/*", 20 | "file://*/*" 21 | ], 22 | "web_accessible_resources": [ 23 | "trackHistory.js" 24 | ] 25 | } -------------------------------------------------------------------------------- /src/pane.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: ".SFNSDisplay-Regular", "Helvetica Neue", "Lucida Grande", sans-serif; 3 | font-size: 12px; 4 | line-height: 14px; 5 | margin: 0; 6 | color: #222; 7 | word-break: break-word; 8 | } 9 | h2 { 10 | margin: 0; 11 | font-size: 12px; 12 | } 13 | .attribute-history-item { 14 | border-bottom: 1px dotted #ddd; 15 | padding-top: 5px; 16 | padding-bottom: 5px; 17 | cursor: pointer; 18 | padding-left: 2px; 19 | border-left: 3px solid transparent; 20 | } 21 | .attribute-history-item:hover { 22 | background: #fafafa; 23 | border-left: 3px solid #1f4eff; 24 | } 25 | .attribute-history-item:active { 26 | background: #f5f5f5; 27 | } 28 | .attribute-history-item:last-child { 29 | border-bottom: none; 30 | } 31 | .attribute-history-item_new-value, 32 | .attribute-history-item_action-type { 33 | padding-left: 2px; 34 | } 35 | .attribute-history-item_new-value { 36 | color: rgb(196, 26, 22); 37 | font-size: 10px; 38 | padding-top: 2px; 39 | font-family: monospace; 40 | } 41 | .attribute-history-item_new-value.attribute-history-item_new-value--na, 42 | .attribute-history-item_new-value.attribute-history-item_new-value--null { 43 | color: #777; 44 | } 45 | 46 | 47 | .attribute-history-list-container { 48 | 49 | } 50 | .print-callstack-button { 51 | float: right; 52 | border: none; 53 | background: none; 54 | color: #1f4eff; 55 | cursor: pointer; 56 | opacity: 0.7; 57 | outline: none; 58 | } 59 | .attribute-history-item:hover .print-callstack-button { 60 | opacity: 1; 61 | } 62 | 63 | .attribute-history-title { 64 | color: #222; 65 | border-bottom: 1px solid #e6e6e6; 66 | border-top: 1px solid #e6e6e6; 67 | background-color: #f5f5f5; 68 | padding: 5px; 69 | -webkit-font-smoothing: antialiased; 70 | } 71 | .attribute-history:first-child .attribute-history-title { 72 | border-top: none; 73 | } 74 | 75 | .most-recent-on-top { 76 | float: right; 77 | opacity: .9; 78 | font-size: 10px; 79 | display: none; 80 | } 81 | .attribute-history-title:hover .most-recent-on-top { 82 | display: block; 83 | } 84 | 85 | #search-field { 86 | width: 100%; 87 | padding: 5px; 88 | border: 0; 89 | outline: none; 90 | } -------------------------------------------------------------------------------- /src/pane.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | -------------------------------------------------------------------------------- /src/pane.jsx: -------------------------------------------------------------------------------- 1 | const NotApplicable = "ElementHistory value: not applicable"; 2 | 3 | var React = require("react"); 4 | window.React = React; 5 | var ReactDom = require("react-dom"); 6 | var ErrorStackParser = require("error-stack-parser"); 7 | import {sortBy} from "lodash"; 8 | 9 | if (chrome.devtools) { 10 | update(); 11 | chrome.devtools.panels.elements.onSelectionChanged.addListener(function() { 12 | update(); 13 | }); 14 | function update(){ 15 | chrome.devtools.inspectedWindow.eval(` 16 | ({ 17 | history: window.__elementHistory && window.__elementHistory.getSelectedElementHistory(), 18 | trackingEnabled: window.__elementHistory 19 | })`, function (res) { 20 | if (!res) { 21 | res = {}; 22 | } 23 | ReactDom.render(, document.querySelector("#app")); 24 | }); 25 | } 26 | } else { 27 | 28 | // data for test page 29 | setTimeout(function(){ 30 | var h = { 31 | "className": [ 32 | { 33 | "oldValue": "", 34 | "newValue": "learn-bar", 35 | "actionArguments": [ 36 | "learn-bar" 37 | ], 38 | "actionType": "className assignment", 39 | "callstack": " at Learn.append (http://todomvc.com/examples/vanillajs/node_modules/todomvc-common/base.js:223:27)\n at new Learn (http://todomvc.com/examples/vanillajs/node_modules/todomvc-common/base.js:193:9)\n at Learn (http://todomvc.com/examples/vanillajs/node_modules/todomvc-common/base.js:156:11)\n at XMLHttpRequest.xhr.onload (http://todomvc.com/examples/vanillajs/node_modules/todomvc-common/base.js:149:5)", 40 | "date": "2017-09-05T16:46:53.940Z", 41 | id: 232 42 | }, 43 | { 44 | "actionType": "classList.add call", 45 | "actionArguments": [ 46 | "newclass" 47 | ], 48 | "oldValue": "learn-bar", 49 | "newValue": "learn-bar newclass reallyreallyreallyreallylooooooooooooooooooongclassname", 50 | "callstack": " at :1:14", 51 | "date": "2017-09-05T16:46:57.222Z", 52 | id: 23222 53 | } 54 | ], 55 | "style": [ 56 | { 57 | "actionType": "setAttribute call", 58 | "actionArguments": [ 59 | "style", 60 | "background: red" 61 | ], 62 | "oldValue": null, 63 | "newValue": "background: red; color: blue; url: url(https://github.com/)", 64 | "callstack": " at :1:4", 65 | "date": "2017-09-05T16:46:59.278Z", 66 | id: 2311 67 | } 68 | ], 69 | "checked": [ 70 | { 71 | "actionType": "checkd assignment", 72 | "actionArguments": [true], 73 | "oldValue": null, 74 | "newValue": true, 75 | "callstack": " at :1:4", 76 | "date": "2017-09-05T16:46:59.278Z", 77 | id: 231444 78 | } 79 | ] 80 | }; 81 | ReactDom.render(, document.querySelector("#app")); 82 | }); 83 | } 84 | 85 | 86 | class ElementHistory extends React.Component { 87 | constructor(props){ 88 | super(props); 89 | this.state = { 90 | searchTerm: "" 91 | }; 92 | } 93 | render() { 94 | if (!this.props.history) { 95 | let enableTrackingMessage = null; 96 | let noDataMessage = null; 97 | if (!this.props.trackingEnabled) { 98 | enableTrackingMessage =

Element history tracking is disabled in this tab - click the orange icon next to the address bar.

; 99 | } else { 100 | noDataMessage =
101 |

102 | No history available for this element. Maybe it hasn't changed since page load, or since tracking was enabled? 103 |

104 |

105 | Attribute change not tracked properly? Report missing tracking here. 106 |

107 |
; 108 | } 109 | 110 | return
111 | {enableTrackingMessage} 112 | {noDataMessage} 113 |
; 114 | } 115 | 116 | let historyKeys = Object.keys(this.props.history); 117 | historyKeys = sortBy(historyKeys, function(historyKey){ 118 | if (historyKey === "ElementCreation") { 119 | return "aaaa"; 120 | } 121 | if (historyKey === "Insertion") { 122 | return "aaab"; 123 | } 124 | // todo: tracke element content, make it second thing 125 | if (historyKey === "") { 126 | 127 | } 128 | return historyKey; 129 | }); 130 | 131 | let hasItems = false; 132 | const attributeHistories = historyKeys.map((historyKey) => { 133 | 134 | const searchTerm = this.state.searchTerm; 135 | let visibleHistory = this.props.history[historyKey]; 136 | if (!matchesSearchTerm(historyKey, searchTerm)) { 137 | visibleHistory = this.props.history[historyKey].filter(function(history) { 138 | return ( 139 | matchesSearchTerm(history.newValue, searchTerm) || 140 | matchesSearchTerm(history.actionType, searchTerm) 141 | ); 142 | }); 143 | } 144 | if (visibleHistory.length > 0) { 145 | hasItems = true; 146 | } 147 | 148 | return
149 | 154 |
; 155 | }); 156 | 157 | 158 | 159 | return
160 | this.setState({searchTerm: e.target.value})}> 166 | {attributeHistories} 167 | {!hasItems &&

168 | No matching history items found. 169 |

} 170 |
; 171 | } 172 | } 173 | 174 | function matchesSearchTerm(text, searchTerm) { 175 | text = text + ""; // convert to string, unlike .toString this also works for `null` 176 | return text.toLowerCase().includes(searchTerm.toLowerCase()); 177 | } 178 | 179 | class AttributeHistory extends React.Component { 180 | render() { 181 | if (this.props.visibleHistory.length === 0) { 182 | return null; 183 | } 184 | 185 | return
186 |
187 |

188 | {this.props.historyKey} 189 |

190 |
most recent on top
191 |
192 | 193 |
194 | {this.props.visibleHistory.map((history) => { 195 | return ; 196 | })} 197 |
198 |
; 199 | } 200 | } 201 | 202 | class AttributeHistoryItem extends React.Component { 203 | constructor(props) { 204 | super(props); 205 | this.state = { 206 | recentlyPrintedCallstack: false 207 | }; 208 | } 209 | render() { 210 | const history = this.props.history; 211 | 212 | //var frames = ErrorStackParser.parse({stack: history.callstack}) 213 | //var fileName = (frames[0].fileName && frames[0].fileName.split("/").pop()) || "" 214 | let printCallStackButtonText = "Print callstack"; 215 | if (this.state.recentlyPrintedCallstack) { 216 | printCallStackButtonText = "Printed to console"; 217 | } 218 | var printCallStackButton = ; 219 | let newValue = history.newValue; 220 | let newValueClassName = "attribute-history-item_new-value "; 221 | if (newValue === NotApplicable) { 222 | newValue = "(n/a)"; 223 | newValueClassName += " attribute-history-item_new-value--na"; 224 | } else if (newValue === null) { 225 | newValueClassName += " attribute-history-item_new-value--null"; 226 | newValue = "null"; 227 | } else { 228 | newValue = "\"" + newValue + "\""; 229 | } 230 | return
{ 231 | const historyWithoutCallStack = Object.assign({}, history); 232 | delete historyWithoutCallStack.callstack; 233 | 234 | if (chrome.devtools) { // don't have that in test.html 235 | chrome.devtools.inspectedWindow.eval(` 236 | window.__elementHistory.printHistoryInfo(${history.id}) 237 | `); 238 | } 239 | 240 | this.setState({ recentlyPrintedCallstack: true }); 241 | setTimeout(() => { 242 | this.setState({ recentlyPrintedCallstack: false}); 243 | }, 3000); 244 | }}> 245 |
246 |
247 | {history.actionType} {printCallStackButton} 248 |
249 |
{newValue}
250 | 251 |
252 |
; 253 | } 254 | } 255 | 256 | // this migt be useful: chrome.devtools.panels.openResource(string url, integer lineNumber, function callback) 257 | -------------------------------------------------------------------------------- /src/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | -------------------------------------------------------------------------------- /src/trackHistory.js: -------------------------------------------------------------------------------- 1 | function load() { 2 | let trackHistEnabled = false; 3 | let sentHistoryItemsById = {}; 4 | let hooksAreSetUp = false; 5 | 6 | var NotApplicable = "ElementHistory value: not applicable"; 7 | let id = 1; 8 | 9 | var trackingEventTypes = [ 10 | { 11 | obj: Element.prototype, 12 | fnName: "setAttribute", 13 | getValue(attrName, attrValue) { 14 | return this.getAttribute(attrName); 15 | }, 16 | getActionInfo(attrName, attrValue){ 17 | return { 18 | actionType: "setAttribute call", 19 | historyKey: attrName, 20 | actionArguments: [attrName, attrValue] 21 | }; 22 | } 23 | }, 24 | { 25 | obj: HTMLInputElement.prototype, 26 | keys: ["disabled", "value", "checked"], 27 | getValue(newValue, key) { 28 | return this[key]; 29 | }, 30 | getActionInfo(newValue, key) { 31 | return { 32 | actionType: key + " assignment", 33 | historyKey: key, 34 | actionArguments: [newValue] 35 | }; 36 | } 37 | }, 38 | { 39 | obj: HTMLScriptElement.prototype, 40 | keys: ["src"], 41 | getValue(newValue, key) { 42 | return this[key]; 43 | }, 44 | getActionInfo(newValue, key) { 45 | return { 46 | actionType: key + " assignment", 47 | historyKey: key, 48 | actionArguments: [newValue] 49 | }; 50 | } 51 | }, 52 | { 53 | obj: Element.prototype, 54 | fnName: "removeAttribute", 55 | getValue(attrName, attrValue) { 56 | return this.getAttribute(attrName); 57 | }, 58 | getActionInfo(attrName){ 59 | return { 60 | actionType: "removeAttribute call", 61 | historyKey: attrName, 62 | actionArguments: [attrName] 63 | }; 64 | } 65 | }, 66 | { 67 | obj: Element.prototype, 68 | fnName: "appendChild", 69 | getValue() { 70 | return NotApplicable; 71 | }, 72 | getActionInfo(insertedElement) { 73 | return { 74 | actionType: "appendChild", 75 | historyKey: "Insertion", 76 | actionArguments: [this] 77 | }; 78 | }, 79 | getElement(insertedElement) { 80 | return insertedElement; 81 | } 82 | }, 83 | { 84 | originalCreateElement: document.createElement, 85 | enable: function(){ 86 | const originalCreateElement = this.originalCreateElement; 87 | document.createElement = function(){ 88 | var el = originalCreateElement.apply(this, arguments); 89 | addHistoryItem(el, "ElementCreation", { 90 | actionType: "document.createElement", 91 | actionArguments: Array.from(arguments), 92 | oldValue: NotApplicable, 93 | newValue: NotApplicable 94 | }); 95 | return el; 96 | }; 97 | }, 98 | disable: function(){ 99 | 100 | } 101 | }, 102 | { 103 | obj: Element.prototype, 104 | keys: ["className"], 105 | getValue: function(){ 106 | return this.className; 107 | }, 108 | getActionInfo: function(newValue){ 109 | return { 110 | actionType: "className assignment", 111 | historyKey: "className", 112 | actionArguments: [newValue] 113 | }; 114 | } 115 | }, 116 | { 117 | enable: function(){ 118 | var originalDescriptor = Object.getOwnPropertyDescriptor(Element.prototype, "classList"); 119 | Object.defineProperty(Element.prototype, "classList", { 120 | get: function(){ 121 | var ret = originalDescriptor.get.apply(this, arguments); 122 | var originalAdd = ret.add; 123 | var originalToggle = ret.toggle; 124 | var el = this; 125 | ret.add = function(){ 126 | var before = el.className; 127 | var ret2 = originalAdd.apply(this, arguments); 128 | var after = el.className; 129 | // console.log("called add") 130 | 131 | addHistoryItem(el, "className", { 132 | actionType: "classList.add call", 133 | actionArguments: Array.from(arguments), 134 | oldValue: before, 135 | newValue: after 136 | }); 137 | return ret2; 138 | }; 139 | ret.toggle = function(){ 140 | var before = el.className; 141 | var ret2 = originalToggle.apply(this, arguments); 142 | var after = el.className; 143 | // console.log("called add") 144 | 145 | addHistoryItem(el, "className", { 146 | actionType: "classList.toggle call", 147 | actionArguments: Array.from(arguments), 148 | oldValue: before, 149 | newValue: after 150 | }); 151 | return ret2; 152 | }; 153 | return ret; 154 | }, 155 | set: function(){ 156 | console.log("todo: track set classList"); 157 | return originalDescriptor.set.apply(this, arguments); 158 | } 159 | }); 160 | 161 | }, 162 | disable: function() { 163 | 164 | } 165 | }, 166 | { 167 | enable: function(){ 168 | var originalDescriptor = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML"); 169 | Object.defineProperty(Element.prototype, "innerHTML", { 170 | get: function(){ 171 | return originalDescriptor.get.apply(this, arguments); 172 | }, 173 | set: function(innerHTML){ 174 | var error = Error(); 175 | var ret = originalDescriptor.set.apply(this, arguments); 176 | var parentEl = this; 177 | iterateOverAllChildren(this, function(child) { 178 | Array.from(child.attributes).forEach(function(attr){ 179 | var name = attr.name; 180 | addHistoryItem(child, name, { 181 | actionType: "innerHTML assignment on parent", 182 | actionArguments: [parentEl, innerHTML], 183 | oldValue: null, 184 | newValue: attr.value, 185 | error: error 186 | }); 187 | }); 188 | addHistoryItem(child, "ElementCreation", { 189 | actionType: "innerHTML assignment on parent", 190 | actionArguments: [parentEl, innerHTML], 191 | oldValue: null, 192 | newValue: NotApplicable, 193 | error: error 194 | }); 195 | }); 196 | return ret; 197 | } 198 | }); 199 | }, 200 | disable: function() { 201 | 202 | } 203 | }, 204 | { 205 | enable: function(){ 206 | var originalDescriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "style"); 207 | Object.defineProperty(HTMLElement.prototype, "style", { 208 | get: function(){ 209 | const style = originalDescriptor.get.apply(this, arguments); 210 | var el = this; 211 | return new Proxy(style, { 212 | get(target, propKey, receiver) { 213 | let ret = target[propKey]; 214 | if (typeof ret === "function") { 215 | ret = ret.bind(target); 216 | } 217 | return ret; 218 | }, 219 | set(target, propKey, value, receiver) { 220 | const origMethod = target[propKey]; 221 | const before = el.getAttribute("style"); 222 | target[propKey] = value; 223 | const after = el.getAttribute("style"); 224 | addHistoryItem(el, "style", { 225 | actionType: "assign .style." + propKey, 226 | actionArguments: [value], 227 | oldValue: before, 228 | newValue: after 229 | }); 230 | // Return true, even thoug it's not super accurate 231 | // """ 232 | // The set method should return a boolean value. Return true to indicate that assignment succeeded. 233 | // If the set method returns false, and the assignment happened in strict-mode code, a TypeError will be thrown. 234 | // """ - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set 235 | return true; 236 | } 237 | }); 238 | }, 239 | set: function(){ 240 | return originalDescriptor.set.apply(this, arguments); 241 | } 242 | }); 243 | }, 244 | disable: function(){ 245 | 246 | } 247 | } 248 | ]; 249 | 250 | function iterateOverAllChildren(el, callback){ 251 | el.querySelectorAll("*").forEach(callback); 252 | } 253 | 254 | function enableTracking(){ 255 | if (trackHistEnabled) { 256 | return 257 | } 258 | Error.stackTraceLimit = Infinity; 259 | trackHistEnabled = true; 260 | console.log("Enabling ElementHistory tracking"); 261 | 262 | if (hooksAreSetUp) { 263 | return; 264 | } 265 | hooksAreSetUp = true; 266 | 267 | trackingEventTypes.forEach(function(trackingEventType){ 268 | if (trackingEventType.obj && trackingEventType.fnName) { 269 | trackingEventType.originalFunction = trackingEventType.obj[trackingEventType.fnName]; 270 | trackingEventType.obj[trackingEventType.fnName] = function(){ 271 | var before = trackingEventType.getValue.apply(this, arguments); 272 | var actionInfo = trackingEventType.getActionInfo.apply(this, arguments); 273 | 274 | var ret = trackingEventType.originalFunction.apply(this, arguments); 275 | var after = trackingEventType.getValue.apply(this, arguments); 276 | 277 | var element = this; 278 | if (trackingEventType.getElement) { 279 | element = trackingEventType.getElement.apply(this, arguments); 280 | } 281 | 282 | addHistoryItem(element, actionInfo.historyKey, { 283 | actionType: actionInfo.actionType, 284 | actionArguments: actionInfo.actionArguments, 285 | oldValue: before, 286 | newValue: after 287 | }); 288 | 289 | return ret; 290 | }; 291 | } 292 | else if (trackingEventType.obj && trackingEventType.keys) { 293 | trackingEventType.keys.forEach(function(key) { 294 | var originalDescriptor = Object.getOwnPropertyDescriptor(trackingEventType.obj, key); 295 | Object.defineProperty(trackingEventType.obj, key, { 296 | get: function(){ 297 | return originalDescriptor.get.apply(this, arguments); 298 | }, 299 | set: function(){ 300 | var argsAndKey = [...arguments, key]; 301 | var before = trackingEventType.getValue.apply(this, argsAndKey); 302 | var actionInfo = trackingEventType.getActionInfo.apply(this, argsAndKey); 303 | var ret = originalDescriptor.set.apply(this, argsAndKey); 304 | var after = trackingEventType.getValue.apply(this, argsAndKey); 305 | addHistoryItem(this, actionInfo.historyKey, { 306 | oldValue: before, 307 | newValue: after, 308 | actionArguments: actionInfo.actionArguments, 309 | actionType: actionInfo.actionType 310 | }); 311 | return ret; 312 | } 313 | }); 314 | }); 315 | } else if (trackingEventType.enable && trackingEventType.disable) { 316 | trackingEventType.enable(); 317 | } 318 | else { 319 | throw "unknown tracking type"; 320 | } 321 | 322 | }); 323 | 324 | } 325 | 326 | function ElementHistoryItem(data) { 327 | Object.assign(this, data); 328 | } 329 | 330 | 331 | function addHistoryItem(element, key, data){ 332 | if (!trackHistEnabled) { 333 | return; 334 | } 335 | if (key === "class") { 336 | key = "className"; 337 | } 338 | if (!element.__elementHistory) { 339 | element.__elementHistory = {}; 340 | } 341 | if (!element.__elementHistory[key]) { 342 | element.__elementHistory[key] = []; 343 | } 344 | if (data.error) { 345 | data.callstack = data.error.stack.split("\n").slice(2).join("\n"); 346 | delete data.errors; 347 | } 348 | else { 349 | data.callstack = Error().stack.split("\n").slice(3).join("\n"); 350 | } 351 | data.id = id++; 352 | data.date = new Date().toString(); 353 | element.__elementHistory[key].unshift(new ElementHistoryItem(data)); 354 | 355 | // code for detecting lack of tracking 356 | /* 357 | if (element.__elementHistory[key].length > 1) { 358 | if (key !== 'disabled') { // disabled has some acceptable inconsistencies between el.disabled and el.setAttr('disabled', ...) 359 | var previousHistoryItem = element.__elementHistory[key][1] 360 | if (previousHistoryItem.newValue !== data.oldValue) { 361 | // something wasn't tracked 362 | debugger 363 | } 364 | } 365 | } 366 | */ 367 | } 368 | 369 | function disableTracking(){ 370 | if (!trackHistEnabled) { 371 | return; 372 | } 373 | // todo: actually disable it, since right now it'll still slow things down by e.g. capturing callstack 374 | console.log("Disabling ElementHistory tracking"); 375 | trackHistEnabled = false; 376 | } 377 | 378 | function getSelectedElementHistory() { 379 | // this is used so we later can find the actual history item, 380 | // if the pane just gives us an id 381 | sentHistoryItemsById = {}; 382 | var hist = $0.__elementHistory; 383 | if (!hist) { 384 | return null; 385 | } 386 | var ret = {}; 387 | Object.keys(hist).forEach(function(prop) { 388 | ret[prop] = hist[prop].map(function(histItem) { 389 | var newItem = {}; 390 | Object.keys(histItem).forEach(function(key) { 391 | if (key !== "actionArguments") { // actionarguments can contain stuff that's hard to serialize, like dom elements 392 | newItem[key] = histItem[key]; 393 | } 394 | }); 395 | sentHistoryItemsById[newItem.id] = newItem; 396 | return newItem; 397 | }); 398 | }); 399 | return ret; 400 | } 401 | 402 | function printHistoryInfo(historyItemId) { 403 | var historyItem = sentHistoryItemsById[historyItemId]; 404 | var { actionType, date, newValue, oldValue, actionArguments } = historyItem; 405 | console.log({ actionType, date, newValue, oldValue, actionArguments }); 406 | console.log(historyItem.callstack); 407 | } 408 | 409 | window.__elementHistory = { 410 | enableTracking, 411 | disableTracking, 412 | getSelectedElementHistory, 413 | printHistoryInfo, 414 | isEnabled() { 415 | return trackHistEnabled; 416 | } 417 | }; 418 | } 419 | 420 | if (!window.__elementHistory) { 421 | load(); 422 | } 423 | document.currentScript.remove(); -------------------------------------------------------------------------------- /src/trackHistory.spec.js: -------------------------------------------------------------------------------- 1 | const NotApplicable = "ElementHistory value: not applicable"; 2 | 3 | function getLastHistoryItem(el, historyKey){ 4 | return el.__elementHistory[historyKey][0]; 5 | } 6 | 7 | window.__elementHistory.enableTracking(); 8 | 9 | describe("A suite", function() { 10 | it("It tracks setAttribute calls", function specFunctionName() { 11 | var el = document.createElement("div"); 12 | function functionName() { 13 | el.setAttribute("style", "background: red"); 14 | } 15 | functionName(); 16 | var lastHistoryItem = getLastHistoryItem(el, "style"); 17 | expect(lastHistoryItem.actionType).toEqual("setAttribute call"); 18 | expect(lastHistoryItem.actionArguments).toEqual(["style", "background: red"]); 19 | expect(lastHistoryItem.oldValue).toEqual(null); 20 | expect(lastHistoryItem.newValue).toEqual("background: red"); 21 | expect(lastHistoryItem.callstack).toContain("specFunctionName"); 22 | expect(lastHistoryItem.date).not.toBe(undefined); 23 | expect(lastHistoryItem.callstack.split("\n")[0]).toContain("functionName"); 24 | }); 25 | it("Tracks className assignments", function(){ 26 | var el = document.createElement("div"); 27 | el.className += "cake"; 28 | var lastHistoryItem = getLastHistoryItem(el, "className"); 29 | expect(lastHistoryItem.actionType).toEqual("className assignment"); 30 | expect(lastHistoryItem.actionArguments).toEqual(["cake"]); 31 | expect(lastHistoryItem.oldValue).toEqual(""); 32 | expect(lastHistoryItem.newValue).toEqual("cake"); 33 | }); 34 | it("Track classList.add calls", function(){ 35 | var el = document.createElement("div"); 36 | el.classList.add("cake"); 37 | var lastHistoryItem = getLastHistoryItem(el, "className"); 38 | expect(lastHistoryItem.actionType).toEqual("classList.add call"); 39 | expect(lastHistoryItem.actionArguments).toEqual(["cake"]); 40 | expect(lastHistoryItem.oldValue).toEqual(""); 41 | expect(lastHistoryItem.newValue).toEqual("cake"); 42 | }); 43 | it("Tracks classList.toggle calls", function(){ 44 | var el = document.createElement("div"); 45 | el.classList.toggle("cake"); 46 | var lastHistoryItem = getLastHistoryItem(el, "className"); 47 | expect(lastHistoryItem.actionType).toEqual("classList.toggle call"); 48 | expect(lastHistoryItem.actionArguments).toEqual(["cake"]); 49 | expect(lastHistoryItem.oldValue).toEqual(""); 50 | expect(lastHistoryItem.newValue).toEqual("cake"); 51 | }); 52 | 53 | describe("Tracks attributes when creating element by assigning to innerHTML", function(){ 54 | it("Tracks classnames", function(){ 55 | var parentEl = document.createElement("div"); 56 | parentEl.innerHTML = "
"; 57 | var el = parentEl.children[0]; 58 | var lastHistoryItem = getLastHistoryItem(el, "className"); 59 | expect(lastHistoryItem.actionType).toEqual("innerHTML assignment on parent"); 60 | expect(lastHistoryItem.actionArguments).toEqual([parentEl, "
"]); 61 | expect(lastHistoryItem.oldValue).toEqual(null); 62 | expect(lastHistoryItem.newValue).toEqual("cake"); 63 | }); 64 | it("Tracks arbitray attributes", function(){ 65 | var parentEl = document.createElement("div"); 66 | parentEl.innerHTML = "
"; 67 | var el = parentEl.children[0]; 68 | var lastHistoryItem = getLastHistoryItem(el, "something"); 69 | expect(lastHistoryItem.actionType).toEqual("innerHTML assignment on parent"); 70 | expect(lastHistoryItem.actionArguments).toEqual([parentEl, "
"]); 71 | expect(lastHistoryItem.oldValue).toEqual(null); 72 | expect(lastHistoryItem.newValue).toEqual("cake"); 73 | }); 74 | it("has correct callstack for nested items", function(){ 75 | var parentEl = document.createElement("div"); 76 | function functionName() { 77 | parentEl.innerHTML = "
"; 78 | } 79 | functionName(); 80 | var el = parentEl.children[0].children[0]; 81 | var lastHistoryItem = getLastHistoryItem(el, "className"); 82 | expect(lastHistoryItem.callstack.split("\n")[0]).toContain("functionName"); 83 | }); 84 | }); 85 | 86 | describe("input element", function(){ 87 | it("Tracks explicit 'disabled' assignment", function(){ 88 | var el = document.createElement("input"); 89 | el.disabled = true; 90 | 91 | var lastHistoryItem = getLastHistoryItem(el, "disabled"); 92 | expect(lastHistoryItem.actionType).toEqual("disabled assignment"); 93 | expect(lastHistoryItem.oldValue).toEqual(false); 94 | expect(lastHistoryItem.newValue).toEqual(true); 95 | }); 96 | it("Tracks explicit 'checked' assignment", function(){ 97 | var el = document.createElement("input"); 98 | el.checked = true; 99 | 100 | var lastHistoryItem = getLastHistoryItem(el, "checked"); 101 | expect(lastHistoryItem.actionType).toEqual("checked assignment"); 102 | expect(lastHistoryItem.oldValue).toEqual(false); 103 | expect(lastHistoryItem.newValue).toEqual(true); 104 | }); 105 | it("Tracks explicit 'disabled' assignment", function(){ 106 | var el = document.createElement("input"); 107 | el.value = "Hello"; 108 | 109 | var lastHistoryItem = getLastHistoryItem(el, "value"); 110 | expect(lastHistoryItem.actionType).toEqual("value assignment"); 111 | expect(lastHistoryItem.oldValue).toEqual(""); 112 | expect(lastHistoryItem.newValue).toEqual("Hello"); 113 | }); 114 | }); 115 | 116 | it("Tracks when src is set on a script tag", function(){ 117 | var el = document.createElement("script"); 118 | el.src = "http://example.com/asfdsf"; 119 | var lastHistoryItem = getLastHistoryItem(el, "src"); 120 | expect(lastHistoryItem.actionType).toBe("src assignment"); 121 | expect(lastHistoryItem.actionArguments[0]).toBe("http://example.com/asfdsf"); 122 | expect(lastHistoryItem.newValue).toBe("http://example.com/asfdsf"); 123 | }); 124 | 125 | 126 | describe("Tracking element creation", function(){ 127 | it("Tracks when elements are created using createElement", function(){ 128 | var el = document.createElement("span"); 129 | var lastHistoryItem = getLastHistoryItem(el, "ElementCreation"); 130 | expect(lastHistoryItem.actionType).toBe("document.createElement"); 131 | expect(lastHistoryItem.actionArguments[0]).toBe("span"); 132 | expect(lastHistoryItem.newValue).toBe(NotApplicable); 133 | }); 134 | it("Tracks when elements are created by innerHTML assignments", function(){ 135 | var parentEl = document.createElement("div"); 136 | parentEl.innerHTML = "Hello World!!"; 137 | var el = parentEl.querySelector("a"); 138 | var lastHistoryItem = getLastHistoryItem(el, "ElementCreation"); 139 | expect(lastHistoryItem.actionType).toBe("innerHTML assignment on parent"); 140 | expect(lastHistoryItem.actionArguments[1]).toBe("Hello World!!"); 141 | expect(lastHistoryItem.newValue).toBe(NotApplicable); 142 | }); 143 | }); 144 | 145 | it("Tracks when an element is inserted into the DOM with appendChild", function(){ 146 | var parent = document.createElement("div"); 147 | var child = document.createElement("span"); 148 | function functionName() { 149 | parent.appendChild(child); 150 | } 151 | functionName(); 152 | var lastHistoryItem = getLastHistoryItem(child, "Insertion"); 153 | expect(lastHistoryItem.actionType).toBe("appendChild"); 154 | expect(lastHistoryItem.newValue).toBe(NotApplicable); 155 | expect(lastHistoryItem.callstack.split("\n")[0]).toContain("functionName"); 156 | }); 157 | 158 | describe("jQuery", function(){ 159 | it("Detects where minHeight style was set", function(){ 160 | var el = document.createElement("div"); 161 | $(el).css("min-height", "20px"); // equivalent to el.style.minHeight = "20px" 162 | var lastHistoryItem = getLastHistoryItem(el, "style"); 163 | expect(lastHistoryItem.newValue).toBe("min-height: 20px;"); 164 | }); 165 | }); 166 | 167 | describe("removeAttribute", function() { 168 | it("Tracks when removeAttribute is called", function(){ 169 | var el = document.createElement("div"); 170 | el.setAttribute("something", "cake"); 171 | el.removeAttribute("something"); 172 | var lastHistoryItem = getLastHistoryItem(el, "something"); 173 | expect(lastHistoryItem.actionType).toEqual("removeAttribute call"); 174 | expect(lastHistoryItem.actionArguments).toEqual(["something"]); 175 | expect(lastHistoryItem.oldValue).toEqual("cake"); 176 | expect(lastHistoryItem.newValue).toEqual(null); 177 | }); 178 | }); 179 | 180 | describe("Doesn't break CSSStyleDeclaration methods", function() { 181 | var div; 182 | beforeEach(function(){ 183 | div = document.createElement("div"); 184 | div.style.backgroundColor = "red"; 185 | }); 186 | it("removeProperty", function(){ 187 | div.style.removeProperty("background-color"); 188 | }); 189 | it("setProperty", function(){ 190 | div.style.setProperty("background-color", "green"); 191 | expect(div.style.backgroundColor).toBe("green"); 192 | }); 193 | it("items", function(){ 194 | expect(div.style.item(0)).toBe("background-color"); 195 | }); 196 | it("getPropertyPriority", function() { 197 | expect(div.style.getPropertyPriority("background-color")).toBe(""); 198 | }); 199 | it("getPropertyValue", function() { 200 | expect(div.style.getPropertyValue("background-color")).toBe("red"); 201 | }); 202 | 203 | 204 | }); 205 | 206 | }); -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | console.log(__dirname) 2 | module.exports = { 3 | entry: './src/pane.jsx', 4 | output: { 5 | path: __dirname + '/src', 6 | filename: 'pane.js', 7 | }, 8 | module: { 9 | loaders: [{ 10 | test: /\.jsx$/, 11 | exclude: /node_modules/, 12 | loader: 'babel-loader' 13 | }] 14 | } 15 | } -------------------------------------------------------------------------------- /webstore-assets/icon-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mattzeunert/ElementHistory/ff31c1ef593fd65a1d66bed2eb0eefd76c723fdc/webstore-assets/icon-large.png -------------------------------------------------------------------------------- /webstore-assets/icon128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mattzeunert/ElementHistory/ff31c1ef593fd65a1d66bed2eb0eefd76c723fdc/webstore-assets/icon128x128.png -------------------------------------------------------------------------------- /webstore-assets/screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mattzeunert/ElementHistory/ff31c1ef593fd65a1d66bed2eb0eefd76c723fdc/webstore-assets/screenshot1.png -------------------------------------------------------------------------------- /webstore-assets/screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mattzeunert/ElementHistory/ff31c1ef593fd65a1d66bed2eb0eefd76c723fdc/webstore-assets/screenshot2.png --------------------------------------------------------------------------------