├── .gitignore ├── .vscode ├── launch.json ├── settings.json └── tasks.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── client ├── .vscodeignore ├── README.md ├── images │ ├── ccon.gif │ ├── cdmount.gif │ ├── cocomp.gif │ ├── cwmount.gif │ ├── impf.gif │ ├── ireact.gif │ ├── ired.gif │ ├── logo.png │ ├── reducer.gif │ ├── rstore.gif │ ├── scribe.gif │ ├── tsp.gif │ └── usage.gif ├── package-lock.json ├── package.json ├── snippets │ └── snippets.json ├── src │ ├── extension.ts │ └── traverseWebpack.ts └── tsconfig.json ├── images ├── ccon.gif ├── cdmount.gif ├── cocomp.gif ├── cwmount.gif ├── impf.gif ├── ireact.gif ├── ired.gif ├── reducer.gif ├── rstore.gif ├── scribe.gif ├── tsp.gif └── usage.gif ├── package-lock.json ├── package.json └── server ├── package-lock.json ├── package.json ├── src └── server.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules 3 | client/server 4 | reacted-0.0.1.vsix 5 | .DS_Store -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | // List of configurations. Add new configurations or edit existing ones. 4 | "configurations": [ 5 | { 6 | "name": "Launch Client", 7 | "type": "extensionHost", 8 | "request": "launch", 9 | "runtimeExecutable": "${execPath}", 10 | "args": ["--extensionDevelopmentPath=${workspaceRoot}/client" ], 11 | "stopOnEntry": false, 12 | "sourceMaps": true, 13 | "outFiles": [ "${workspaceRoot}/client/out/src/**/*.js" ], 14 | "preLaunchTask": "watch:client" 15 | }, 16 | { 17 | "name": "Attach to Server", 18 | "type": "node", 19 | "request": "attach", 20 | "port": 6009, 21 | "sourceMaps": true, 22 | "outFiles": [ "${workspaceRoot}/client/server/**/*.js" ], 23 | "preLaunchTask": "watch:server" 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "out": false // set this to true to hide the "out" folder with the compiled JS files 4 | }, 5 | "search.exclude": { 6 | "out": true // set this to false to include "out" folder in search results 7 | }, 8 | "typescript.tsdk": "./node_modules/typescript/lib", 9 | "typescript.tsc.autoDetect": "off" 10 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "compile", 6 | "dependsOn": [ 7 | "compile:client", 8 | "compile:server" 9 | ], 10 | "problemMatcher": [] 11 | }, 12 | { 13 | "label": "compile:client", 14 | "type": "npm", 15 | "script": "compile:client", 16 | "group": "build", 17 | "presentation": { 18 | "panel": "dedicated", 19 | "reveal": "never" 20 | }, 21 | "problemMatcher": [ 22 | "$tsc" 23 | ] 24 | }, 25 | { 26 | "label": "compile:server", 27 | "type": "npm", 28 | "script": "compile:server", 29 | "group": "build", 30 | "presentation": { 31 | "panel": "dedicated", 32 | "reveal": "never" 33 | }, 34 | "problemMatcher": [ 35 | "$tsc" 36 | ] 37 | }, 38 | { 39 | "label": "watch", 40 | "dependsOn": [ 41 | "watch:client", 42 | "watch:server" 43 | ], 44 | "group": { 45 | "kind": "build", 46 | "isDefault": true 47 | }, 48 | "problemMatcher": [] 49 | }, 50 | { 51 | "label": "watch:client", 52 | "type": "npm", 53 | "script": "watch:client", 54 | "isBackground": true, 55 | "group": "build", 56 | "presentation": { 57 | "panel": "dedicated", 58 | "reveal": "never" 59 | }, 60 | "problemMatcher": [ 61 | "$tsc-watch" 62 | ] 63 | }, 64 | { 65 | "label": "watch:server", 66 | "type": "npm", 67 | "script": "watch:server", 68 | "isBackground": true, 69 | "group": "build", 70 | "presentation": { 71 | "panel": "dedicated", 72 | "reveal": "never" 73 | }, 74 | "problemMatcher": [ 75 | "$tsc-watch" 76 | ] 77 | } 78 | ] 79 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 0.03 2 | * Added [README.md](README.md) demonstration gifs 3 | ### 0.0.2 4 | * Added Snippets for `.jsx` and `.js` files 5 | ### 0.0.1 6 | * Initial Release -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 ReactEd 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ReactEd 2 | 3 | ![Visual Studio Marketplace](https://img.shields.io/vscode-marketplace/v/ReactEd.reacted.svg?style=for-the-badge) 4 | ![Visual Studio Marketplace](https://img.shields.io/vscode-marketplace/d/ReactEd.reacted.svg?style=for-the-badge) 5 | ![Visual Studio Marketplace](https://img.shields.io/vscode-marketplace/r/ReactEd.reacted.svg?style=for-the-badge) 6 | 7 | An extension to assist with development of react and redux applications. 8 | 9 | ## Features 10 | 11 | * When you hover over the component name you will see which props are being passed from the state down to the current component. 12 | * React/Redux Snippets for ease of development 13 | 14 | ## Usages 15 | 16 | ### Prop-Drilling 17 | ![Usage](images/usage.gif) 18 | 19 | ### Snippets 20 | #### ccon 21 | ![ccon](images/ccon.gif) 22 | #### cdmount 23 | ![cdmount](images/cdmount.gif) 24 | #### cocomp 25 | ![cocomp](images/cocomp.gif) 26 | #### cwmount 27 | ![cwmount](images/cwmount.gif) 28 | #### impf 29 | ![impf](images/impf.gif) 30 | #### ireact 31 | ![ireact](images/ireact.gif) 32 | #### ired 33 | ![ired](images/ired.gif) 34 | #### reducer 35 | ![reducer](images/reducer.gif) 36 | #### rstore 37 | ![rstore](images/rstore.gif) 38 | #### scribe 39 | ![scribe](images/scribe.gif) 40 | #### tsps 41 | ![tsp](images/tsp.gif) 42 | 43 | ## Configuration 44 | 45 | ReactEd requires a webpack generated bundle file to properly traverse your application. At this time we are unable to offer support for `Create-React-App`. Files need to be refreshed by closing and reopening the file to update the props information. 46 | ```javascript 47 | { 48 | module.exports = { 49 | entry: './src/index.js', 50 | output: { 51 | path: path.resolve(__dirname, 'dist/'), 52 | filename: 'bundle.js', 53 | publicPath: '/dist', 54 | }, 55 | mode: 'none', 56 | } 57 | } 58 | ``` 59 | **Note:** If using Webpack 4.0 or greater please change your [**mode**](https://webpack.js.org/concepts/#mode) to **none** as the default is `Production` which will minify the bundle and make our tool stop working. 60 | 61 | ## Change Log 62 | See Change Log [here](CHANGELOG.md) 63 | 64 | ## Issues 65 | Submit the [issues](https://github.com/ReactEdLLC/ReactEd/issues) if you find any bug or have any suggestion. 66 | 67 | ## Contribution 68 | Fork the [repo](https://github.com/ReactEdLLC/ReactEd) and submit pull requests. -------------------------------------------------------------------------------- /client/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | typings/** 3 | out/test/** 4 | test/** 5 | src/** 6 | **/*.map 7 | .gitignore 8 | tsconfig.json 9 | vsc-extension-quickstart.md 10 | -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- 1 | # ReactEd 2 | 3 | ![Visual Studio Marketplace](https://img.shields.io/vscode-marketplace/v/ReactEd.reacted.svg?style=for-the-badge) 4 | ![Visual Studio Marketplace](https://img.shields.io/vscode-marketplace/d/ReactEd.reacted.svg?style=for-the-badge) 5 | ![Visual Studio Marketplace](https://img.shields.io/vscode-marketplace/r/ReactEd.reacted.svg?style=for-the-badge) 6 | 7 | An extension to assist with development of react and redux applications. 8 | 9 | ## Features 10 | 11 | * When you hover over the component name you will see which props are being passed from the state down to the current component. 12 | * React/Redux Snippets for ease of development 13 | 14 | ## Usages 15 | 16 | ### Prop-Drilling 17 | ![Usage](images/usage.gif) 18 | 19 | ### Snippets 20 | #### ccon 21 | ![ccon](images/ccon.gif) 22 | #### cdmount 23 | ![cdmount](images/cdmount.gif) 24 | #### cocomp 25 | ![cocomp](images/cocomp.gif) 26 | #### cwmount 27 | ![cwmount](images/cwmount.gif) 28 | #### impf 29 | ![impf](images/impf.gif) 30 | #### ireact 31 | ![ireact](images/ireact.gif) 32 | #### ired 33 | ![ired](images/ired.gif) 34 | #### reducer 35 | ![reducer](images/reducer.gif) 36 | #### rstore 37 | ![rstore](images/rstore.gif) 38 | #### scribe 39 | ![scribe](images/scribe.gif) 40 | #### tsps 41 | ![tsp](images/tsp.gif) 42 | 43 | ## Configuration 44 | 45 | ReactEd requires a webpack generated bundle file to properly traverse your application. At this time we are unable to offer support for `Create-React-App`. Files need to be refreshed by closing and reopening the file to update the props information. 46 | ```javascript 47 | { 48 | module.exports = { 49 | entry: './src/index.js', 50 | output: { 51 | path: path.resolve(__dirname, 'dist/'), 52 | filename: 'bundle.js', 53 | publicPath: '/dist', 54 | }, 55 | mode: 'none', 56 | } 57 | } 58 | ``` 59 | **Note:** If using Webpack 4.0 or greater please change your [**mode**](https://webpack.js.org/concepts/#mode) to **none** as the default is `Production` which will minify the bundle and make our tool stop working. 60 | 61 | ## Change Log 62 | See Change Log [here](CHANGELOG.md) 63 | 64 | ## Issues 65 | Submit the [issues](https://github.com/ReactEdLLC/ReactEd/issues) if you find any bug or have any suggestion. 66 | 67 | ## Contribution 68 | Fork the [repo](https://github.com/ReactEdLLC/ReactEd) and submit pull requests. -------------------------------------------------------------------------------- /client/images/ccon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/ccon.gif -------------------------------------------------------------------------------- /client/images/cdmount.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/cdmount.gif -------------------------------------------------------------------------------- /client/images/cocomp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/cocomp.gif -------------------------------------------------------------------------------- /client/images/cwmount.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/cwmount.gif -------------------------------------------------------------------------------- /client/images/impf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/impf.gif -------------------------------------------------------------------------------- /client/images/ireact.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/ireact.gif -------------------------------------------------------------------------------- /client/images/ired.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/ired.gif -------------------------------------------------------------------------------- /client/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/logo.png -------------------------------------------------------------------------------- /client/images/reducer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/reducer.gif -------------------------------------------------------------------------------- /client/images/rstore.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/rstore.gif -------------------------------------------------------------------------------- /client/images/scribe.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/scribe.gif -------------------------------------------------------------------------------- /client/images/tsp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/tsp.gif -------------------------------------------------------------------------------- /client/images/usage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/client/images/usage.gif -------------------------------------------------------------------------------- /client/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reacted", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ajv": { 8 | "version": "5.5.2", 9 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 10 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 11 | "requires": { 12 | "co": "4.6.0", 13 | "fast-deep-equal": "1.1.0", 14 | "fast-json-stable-stringify": "2.0.0", 15 | "json-schema-traverse": "0.3.1" 16 | } 17 | }, 18 | "ansi-cyan": { 19 | "version": "0.1.1", 20 | "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", 21 | "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", 22 | "requires": { 23 | "ansi-wrap": "0.1.0" 24 | } 25 | }, 26 | "ansi-gray": { 27 | "version": "0.1.1", 28 | "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", 29 | "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", 30 | "requires": { 31 | "ansi-wrap": "0.1.0" 32 | } 33 | }, 34 | "ansi-red": { 35 | "version": "0.1.1", 36 | "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", 37 | "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", 38 | "requires": { 39 | "ansi-wrap": "0.1.0" 40 | } 41 | }, 42 | "ansi-regex": { 43 | "version": "2.1.1", 44 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 45 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 46 | }, 47 | "ansi-styles": { 48 | "version": "2.2.1", 49 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 50 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 51 | }, 52 | "ansi-wrap": { 53 | "version": "0.1.0", 54 | "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", 55 | "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" 56 | }, 57 | "arr-diff": { 58 | "version": "1.1.0", 59 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", 60 | "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", 61 | "requires": { 62 | "arr-flatten": "1.1.0", 63 | "array-slice": "0.2.3" 64 | } 65 | }, 66 | "arr-flatten": { 67 | "version": "1.1.0", 68 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 69 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" 70 | }, 71 | "arr-union": { 72 | "version": "2.1.0", 73 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", 74 | "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=" 75 | }, 76 | "array-differ": { 77 | "version": "1.0.0", 78 | "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", 79 | "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" 80 | }, 81 | "array-slice": { 82 | "version": "0.2.3", 83 | "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", 84 | "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" 85 | }, 86 | "array-union": { 87 | "version": "1.0.2", 88 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 89 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 90 | "requires": { 91 | "array-uniq": "1.0.3" 92 | } 93 | }, 94 | "array-uniq": { 95 | "version": "1.0.3", 96 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 97 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" 98 | }, 99 | "array-unique": { 100 | "version": "0.2.1", 101 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", 102 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" 103 | }, 104 | "arrify": { 105 | "version": "1.0.1", 106 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 107 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" 108 | }, 109 | "asn1": { 110 | "version": "0.2.3", 111 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 112 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 113 | }, 114 | "assert-plus": { 115 | "version": "1.0.0", 116 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 117 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 118 | }, 119 | "asynckit": { 120 | "version": "0.4.0", 121 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 122 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 123 | }, 124 | "aws-sign2": { 125 | "version": "0.7.0", 126 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 127 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 128 | }, 129 | "aws4": { 130 | "version": "1.7.0", 131 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", 132 | "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" 133 | }, 134 | "balanced-match": { 135 | "version": "1.0.0", 136 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 137 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 138 | }, 139 | "bcrypt-pbkdf": { 140 | "version": "1.0.1", 141 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 142 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 143 | "optional": true, 144 | "requires": { 145 | "tweetnacl": "0.14.5" 146 | } 147 | }, 148 | "beeper": { 149 | "version": "1.1.1", 150 | "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", 151 | "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" 152 | }, 153 | "block-stream": { 154 | "version": "0.0.9", 155 | "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", 156 | "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", 157 | "requires": { 158 | "inherits": "2.0.3" 159 | } 160 | }, 161 | "boom": { 162 | "version": "4.3.1", 163 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 164 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 165 | "requires": { 166 | "hoek": "4.2.1" 167 | } 168 | }, 169 | "brace-expansion": { 170 | "version": "1.1.11", 171 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 172 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 173 | "requires": { 174 | "balanced-match": "1.0.0", 175 | "concat-map": "0.0.1" 176 | } 177 | }, 178 | "braces": { 179 | "version": "1.8.5", 180 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", 181 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", 182 | "requires": { 183 | "expand-range": "1.8.2", 184 | "preserve": "0.2.0", 185 | "repeat-element": "1.1.2" 186 | } 187 | }, 188 | "browser-stdout": { 189 | "version": "1.3.0", 190 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 191 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" 192 | }, 193 | "buffer-crc32": { 194 | "version": "0.2.13", 195 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 196 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" 197 | }, 198 | "buffer-from": { 199 | "version": "1.0.0", 200 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", 201 | "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" 202 | }, 203 | "caseless": { 204 | "version": "0.12.0", 205 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 206 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 207 | }, 208 | "chalk": { 209 | "version": "1.1.3", 210 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 211 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 212 | "requires": { 213 | "ansi-styles": "2.2.1", 214 | "escape-string-regexp": "1.0.5", 215 | "has-ansi": "2.0.0", 216 | "strip-ansi": "3.0.1", 217 | "supports-color": "2.0.0" 218 | } 219 | }, 220 | "clone": { 221 | "version": "0.2.0", 222 | "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", 223 | "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=" 224 | }, 225 | "clone-buffer": { 226 | "version": "1.0.0", 227 | "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", 228 | "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" 229 | }, 230 | "clone-stats": { 231 | "version": "0.0.1", 232 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", 233 | "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" 234 | }, 235 | "cloneable-readable": { 236 | "version": "1.1.2", 237 | "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", 238 | "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", 239 | "requires": { 240 | "inherits": "2.0.3", 241 | "process-nextick-args": "2.0.0", 242 | "readable-stream": "2.3.6" 243 | } 244 | }, 245 | "co": { 246 | "version": "4.6.0", 247 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 248 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 249 | }, 250 | "color-support": { 251 | "version": "1.1.3", 252 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 253 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" 254 | }, 255 | "combined-stream": { 256 | "version": "1.0.6", 257 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 258 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 259 | "requires": { 260 | "delayed-stream": "1.0.0" 261 | } 262 | }, 263 | "commander": { 264 | "version": "2.11.0", 265 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 266 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" 267 | }, 268 | "concat-map": { 269 | "version": "0.0.1", 270 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 271 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 272 | }, 273 | "convert-source-map": { 274 | "version": "1.5.1", 275 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", 276 | "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" 277 | }, 278 | "core-util-is": { 279 | "version": "1.0.2", 280 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 281 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 282 | }, 283 | "cryptiles": { 284 | "version": "3.1.2", 285 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 286 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 287 | "requires": { 288 | "boom": "5.2.0" 289 | }, 290 | "dependencies": { 291 | "boom": { 292 | "version": "5.2.0", 293 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 294 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 295 | "requires": { 296 | "hoek": "4.2.1" 297 | } 298 | } 299 | } 300 | }, 301 | "dashdash": { 302 | "version": "1.14.1", 303 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 304 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 305 | "requires": { 306 | "assert-plus": "1.0.0" 307 | } 308 | }, 309 | "dateformat": { 310 | "version": "2.2.0", 311 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", 312 | "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=" 313 | }, 314 | "debug": { 315 | "version": "3.1.0", 316 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 317 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 318 | "requires": { 319 | "ms": "2.0.0" 320 | } 321 | }, 322 | "deep-assign": { 323 | "version": "1.0.0", 324 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", 325 | "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", 326 | "requires": { 327 | "is-obj": "1.0.1" 328 | } 329 | }, 330 | "delayed-stream": { 331 | "version": "1.0.0", 332 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 333 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 334 | }, 335 | "diff": { 336 | "version": "3.3.1", 337 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", 338 | "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==" 339 | }, 340 | "duplexer": { 341 | "version": "0.1.1", 342 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 343 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" 344 | }, 345 | "duplexer2": { 346 | "version": "0.0.2", 347 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", 348 | "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", 349 | "requires": { 350 | "readable-stream": "1.1.14" 351 | }, 352 | "dependencies": { 353 | "isarray": { 354 | "version": "0.0.1", 355 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 356 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 357 | }, 358 | "readable-stream": { 359 | "version": "1.1.14", 360 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 361 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 362 | "requires": { 363 | "core-util-is": "1.0.2", 364 | "inherits": "2.0.3", 365 | "isarray": "0.0.1", 366 | "string_decoder": "0.10.31" 367 | } 368 | }, 369 | "string_decoder": { 370 | "version": "0.10.31", 371 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 372 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 373 | } 374 | } 375 | }, 376 | "duplexify": { 377 | "version": "3.6.0", 378 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", 379 | "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", 380 | "requires": { 381 | "end-of-stream": "1.4.1", 382 | "inherits": "2.0.3", 383 | "readable-stream": "2.3.6", 384 | "stream-shift": "1.0.0" 385 | } 386 | }, 387 | "ecc-jsbn": { 388 | "version": "0.1.1", 389 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 390 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 391 | "optional": true, 392 | "requires": { 393 | "jsbn": "0.1.1" 394 | } 395 | }, 396 | "end-of-stream": { 397 | "version": "1.4.1", 398 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 399 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 400 | "requires": { 401 | "once": "1.4.0" 402 | } 403 | }, 404 | "escape-string-regexp": { 405 | "version": "1.0.5", 406 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 407 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 408 | }, 409 | "event-stream": { 410 | "version": "3.3.4", 411 | "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 412 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", 413 | "requires": { 414 | "duplexer": "0.1.1", 415 | "from": "0.1.7", 416 | "map-stream": "0.1.0", 417 | "pause-stream": "0.0.11", 418 | "split": "0.3.3", 419 | "stream-combiner": "0.0.4", 420 | "through": "2.3.8" 421 | } 422 | }, 423 | "expand-brackets": { 424 | "version": "0.1.5", 425 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", 426 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", 427 | "requires": { 428 | "is-posix-bracket": "0.1.1" 429 | } 430 | }, 431 | "expand-range": { 432 | "version": "1.8.2", 433 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", 434 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", 435 | "requires": { 436 | "fill-range": "2.2.3" 437 | } 438 | }, 439 | "extend": { 440 | "version": "3.0.1", 441 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 442 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 443 | }, 444 | "extend-shallow": { 445 | "version": "1.1.4", 446 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", 447 | "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", 448 | "requires": { 449 | "kind-of": "1.1.0" 450 | } 451 | }, 452 | "extglob": { 453 | "version": "0.3.2", 454 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", 455 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", 456 | "requires": { 457 | "is-extglob": "1.0.0" 458 | }, 459 | "dependencies": { 460 | "is-extglob": { 461 | "version": "1.0.0", 462 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 463 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" 464 | } 465 | } 466 | }, 467 | "extsprintf": { 468 | "version": "1.3.0", 469 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 470 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 471 | }, 472 | "fancy-log": { 473 | "version": "1.3.2", 474 | "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", 475 | "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", 476 | "requires": { 477 | "ansi-gray": "0.1.1", 478 | "color-support": "1.1.3", 479 | "time-stamp": "1.1.0" 480 | } 481 | }, 482 | "fast-deep-equal": { 483 | "version": "1.1.0", 484 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 485 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 486 | }, 487 | "fast-json-stable-stringify": { 488 | "version": "2.0.0", 489 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 490 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 491 | }, 492 | "fd-slicer": { 493 | "version": "1.0.1", 494 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", 495 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", 496 | "requires": { 497 | "pend": "1.2.0" 498 | } 499 | }, 500 | "filename-regex": { 501 | "version": "2.0.1", 502 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", 503 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" 504 | }, 505 | "fill-range": { 506 | "version": "2.2.3", 507 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", 508 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", 509 | "requires": { 510 | "is-number": "2.1.0", 511 | "isobject": "2.1.0", 512 | "randomatic": "1.1.7", 513 | "repeat-element": "1.1.2", 514 | "repeat-string": "1.6.1" 515 | } 516 | }, 517 | "first-chunk-stream": { 518 | "version": "1.0.0", 519 | "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", 520 | "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=" 521 | }, 522 | "for-in": { 523 | "version": "1.0.2", 524 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 525 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" 526 | }, 527 | "for-own": { 528 | "version": "0.1.5", 529 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", 530 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", 531 | "requires": { 532 | "for-in": "1.0.2" 533 | } 534 | }, 535 | "forever-agent": { 536 | "version": "0.6.1", 537 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 538 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 539 | }, 540 | "form-data": { 541 | "version": "2.3.2", 542 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", 543 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", 544 | "requires": { 545 | "asynckit": "0.4.0", 546 | "combined-stream": "1.0.6", 547 | "mime-types": "2.1.18" 548 | } 549 | }, 550 | "from": { 551 | "version": "0.1.7", 552 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 553 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" 554 | }, 555 | "fs.realpath": { 556 | "version": "1.0.0", 557 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 558 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 559 | }, 560 | "fstream": { 561 | "version": "1.0.11", 562 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", 563 | "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", 564 | "requires": { 565 | "graceful-fs": "4.1.11", 566 | "inherits": "2.0.3", 567 | "mkdirp": "0.5.1", 568 | "rimraf": "2.6.2" 569 | } 570 | }, 571 | "getpass": { 572 | "version": "0.1.7", 573 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 574 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 575 | "requires": { 576 | "assert-plus": "1.0.0" 577 | } 578 | }, 579 | "glob": { 580 | "version": "7.1.2", 581 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 582 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 583 | "requires": { 584 | "fs.realpath": "1.0.0", 585 | "inflight": "1.0.6", 586 | "inherits": "2.0.3", 587 | "minimatch": "3.0.4", 588 | "once": "1.4.0", 589 | "path-is-absolute": "1.0.1" 590 | } 591 | }, 592 | "glob-base": { 593 | "version": "0.3.0", 594 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 595 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", 596 | "requires": { 597 | "glob-parent": "2.0.0", 598 | "is-glob": "2.0.1" 599 | }, 600 | "dependencies": { 601 | "glob-parent": { 602 | "version": "2.0.0", 603 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 604 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", 605 | "requires": { 606 | "is-glob": "2.0.1" 607 | } 608 | }, 609 | "is-extglob": { 610 | "version": "1.0.0", 611 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 612 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" 613 | }, 614 | "is-glob": { 615 | "version": "2.0.1", 616 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 617 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 618 | "requires": { 619 | "is-extglob": "1.0.0" 620 | } 621 | } 622 | } 623 | }, 624 | "glob-parent": { 625 | "version": "3.1.0", 626 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 627 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", 628 | "requires": { 629 | "is-glob": "3.1.0", 630 | "path-dirname": "1.0.2" 631 | } 632 | }, 633 | "glob-stream": { 634 | "version": "5.3.5", 635 | "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", 636 | "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", 637 | "requires": { 638 | "extend": "3.0.1", 639 | "glob": "5.0.15", 640 | "glob-parent": "3.1.0", 641 | "micromatch": "2.3.11", 642 | "ordered-read-streams": "0.3.0", 643 | "through2": "0.6.5", 644 | "to-absolute-glob": "0.1.1", 645 | "unique-stream": "2.2.1" 646 | }, 647 | "dependencies": { 648 | "glob": { 649 | "version": "5.0.15", 650 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 651 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 652 | "requires": { 653 | "inflight": "1.0.6", 654 | "inherits": "2.0.3", 655 | "minimatch": "3.0.4", 656 | "once": "1.4.0", 657 | "path-is-absolute": "1.0.1" 658 | } 659 | }, 660 | "isarray": { 661 | "version": "0.0.1", 662 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 663 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 664 | }, 665 | "readable-stream": { 666 | "version": "1.0.34", 667 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 668 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 669 | "requires": { 670 | "core-util-is": "1.0.2", 671 | "inherits": "2.0.3", 672 | "isarray": "0.0.1", 673 | "string_decoder": "0.10.31" 674 | } 675 | }, 676 | "string_decoder": { 677 | "version": "0.10.31", 678 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 679 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 680 | }, 681 | "through2": { 682 | "version": "0.6.5", 683 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 684 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 685 | "requires": { 686 | "readable-stream": "1.0.34", 687 | "xtend": "4.0.1" 688 | } 689 | } 690 | } 691 | }, 692 | "glogg": { 693 | "version": "1.0.1", 694 | "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", 695 | "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", 696 | "requires": { 697 | "sparkles": "1.0.0" 698 | } 699 | }, 700 | "graceful-fs": { 701 | "version": "4.1.11", 702 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 703 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 704 | }, 705 | "growl": { 706 | "version": "1.10.3", 707 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", 708 | "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==" 709 | }, 710 | "gulp-chmod": { 711 | "version": "2.0.0", 712 | "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-2.0.0.tgz", 713 | "integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=", 714 | "requires": { 715 | "deep-assign": "1.0.0", 716 | "stat-mode": "0.2.2", 717 | "through2": "2.0.3" 718 | } 719 | }, 720 | "gulp-filter": { 721 | "version": "5.1.0", 722 | "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", 723 | "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM=", 724 | "requires": { 725 | "multimatch": "2.1.0", 726 | "plugin-error": "0.1.2", 727 | "streamfilter": "1.0.7" 728 | } 729 | }, 730 | "gulp-gunzip": { 731 | "version": "1.0.0", 732 | "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz", 733 | "integrity": "sha1-FbdBFF6Dqcb1CIYkG1fMWHHxUak=", 734 | "requires": { 735 | "through2": "0.6.5", 736 | "vinyl": "0.4.6" 737 | }, 738 | "dependencies": { 739 | "isarray": { 740 | "version": "0.0.1", 741 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 742 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 743 | }, 744 | "readable-stream": { 745 | "version": "1.0.34", 746 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 747 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 748 | "requires": { 749 | "core-util-is": "1.0.2", 750 | "inherits": "2.0.3", 751 | "isarray": "0.0.1", 752 | "string_decoder": "0.10.31" 753 | } 754 | }, 755 | "string_decoder": { 756 | "version": "0.10.31", 757 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 758 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 759 | }, 760 | "through2": { 761 | "version": "0.6.5", 762 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 763 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 764 | "requires": { 765 | "readable-stream": "1.0.34", 766 | "xtend": "4.0.1" 767 | } 768 | } 769 | } 770 | }, 771 | "gulp-remote-src-vscode": { 772 | "version": "0.5.0", 773 | "resolved": "https://registry.npmjs.org/gulp-remote-src-vscode/-/gulp-remote-src-vscode-0.5.0.tgz", 774 | "integrity": "sha512-/9vtSk9eI9DEWCqzGieglPqmx0WUQ9pwPHyHFpKmfxqdgqGJC2l0vFMdYs54hLdDsMDEZFLDL2J4ikjc4hQ5HQ==", 775 | "requires": { 776 | "event-stream": "3.3.4", 777 | "node.extend": "1.1.6", 778 | "request": "2.85.0", 779 | "through2": "2.0.3", 780 | "vinyl": "2.1.0" 781 | }, 782 | "dependencies": { 783 | "clone": { 784 | "version": "2.1.1", 785 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", 786 | "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" 787 | }, 788 | "clone-stats": { 789 | "version": "1.0.0", 790 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", 791 | "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" 792 | }, 793 | "vinyl": { 794 | "version": "2.1.0", 795 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", 796 | "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", 797 | "requires": { 798 | "clone": "2.1.1", 799 | "clone-buffer": "1.0.0", 800 | "clone-stats": "1.0.0", 801 | "cloneable-readable": "1.1.2", 802 | "remove-trailing-separator": "1.1.0", 803 | "replace-ext": "1.0.0" 804 | } 805 | } 806 | } 807 | }, 808 | "gulp-sourcemaps": { 809 | "version": "1.6.0", 810 | "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", 811 | "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", 812 | "requires": { 813 | "convert-source-map": "1.5.1", 814 | "graceful-fs": "4.1.11", 815 | "strip-bom": "2.0.0", 816 | "through2": "2.0.3", 817 | "vinyl": "1.2.0" 818 | }, 819 | "dependencies": { 820 | "clone": { 821 | "version": "1.0.4", 822 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 823 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" 824 | }, 825 | "replace-ext": { 826 | "version": "0.0.1", 827 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", 828 | "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" 829 | }, 830 | "vinyl": { 831 | "version": "1.2.0", 832 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", 833 | "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", 834 | "requires": { 835 | "clone": "1.0.4", 836 | "clone-stats": "0.0.1", 837 | "replace-ext": "0.0.1" 838 | } 839 | } 840 | } 841 | }, 842 | "gulp-symdest": { 843 | "version": "1.1.0", 844 | "resolved": "https://registry.npmjs.org/gulp-symdest/-/gulp-symdest-1.1.0.tgz", 845 | "integrity": "sha1-wWUyBzLRks5W/ZQnH/oSMjS/KuA=", 846 | "requires": { 847 | "event-stream": "3.3.4", 848 | "mkdirp": "0.5.1", 849 | "queue": "3.1.0", 850 | "vinyl-fs": "2.4.4" 851 | } 852 | }, 853 | "gulp-untar": { 854 | "version": "0.0.6", 855 | "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.6.tgz", 856 | "integrity": "sha1-1r3v3n6ajgVMnxYjhaB4LEvnQAA=", 857 | "requires": { 858 | "event-stream": "3.3.4", 859 | "gulp-util": "3.0.8", 860 | "streamifier": "0.1.1", 861 | "tar": "2.2.1", 862 | "through2": "2.0.3" 863 | } 864 | }, 865 | "gulp-util": { 866 | "version": "3.0.8", 867 | "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", 868 | "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", 869 | "requires": { 870 | "array-differ": "1.0.0", 871 | "array-uniq": "1.0.3", 872 | "beeper": "1.1.1", 873 | "chalk": "1.1.3", 874 | "dateformat": "2.2.0", 875 | "fancy-log": "1.3.2", 876 | "gulplog": "1.0.0", 877 | "has-gulplog": "0.1.0", 878 | "lodash._reescape": "3.0.0", 879 | "lodash._reevaluate": "3.0.0", 880 | "lodash._reinterpolate": "3.0.0", 881 | "lodash.template": "3.6.2", 882 | "minimist": "1.2.0", 883 | "multipipe": "0.1.2", 884 | "object-assign": "3.0.0", 885 | "replace-ext": "0.0.1", 886 | "through2": "2.0.3", 887 | "vinyl": "0.5.3" 888 | }, 889 | "dependencies": { 890 | "clone": { 891 | "version": "1.0.4", 892 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 893 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" 894 | }, 895 | "minimist": { 896 | "version": "1.2.0", 897 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 898 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 899 | }, 900 | "object-assign": { 901 | "version": "3.0.0", 902 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", 903 | "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" 904 | }, 905 | "replace-ext": { 906 | "version": "0.0.1", 907 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", 908 | "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" 909 | }, 910 | "vinyl": { 911 | "version": "0.5.3", 912 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", 913 | "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", 914 | "requires": { 915 | "clone": "1.0.4", 916 | "clone-stats": "0.0.1", 917 | "replace-ext": "0.0.1" 918 | } 919 | } 920 | } 921 | }, 922 | "gulp-vinyl-zip": { 923 | "version": "2.1.0", 924 | "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.0.tgz", 925 | "integrity": "sha1-JOQGhdwFtxSZlSRQmeBZAmO+ja0=", 926 | "requires": { 927 | "event-stream": "3.3.4", 928 | "queue": "4.4.2", 929 | "through2": "2.0.3", 930 | "vinyl": "2.1.0", 931 | "vinyl-fs": "2.4.4", 932 | "yauzl": "2.9.1", 933 | "yazl": "2.4.3" 934 | }, 935 | "dependencies": { 936 | "clone": { 937 | "version": "2.1.1", 938 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", 939 | "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" 940 | }, 941 | "clone-stats": { 942 | "version": "1.0.0", 943 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", 944 | "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" 945 | }, 946 | "queue": { 947 | "version": "4.4.2", 948 | "resolved": "https://registry.npmjs.org/queue/-/queue-4.4.2.tgz", 949 | "integrity": "sha512-fSMRXbwhMwipcDZ08enW2vl+YDmAmhcNcr43sCJL8DIg+CFOsoRLG23ctxA+fwNk1w55SePSiS7oqQQSgQoVJQ==", 950 | "requires": { 951 | "inherits": "2.0.3" 952 | } 953 | }, 954 | "vinyl": { 955 | "version": "2.1.0", 956 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", 957 | "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", 958 | "requires": { 959 | "clone": "2.1.1", 960 | "clone-buffer": "1.0.0", 961 | "clone-stats": "1.0.0", 962 | "cloneable-readable": "1.1.2", 963 | "remove-trailing-separator": "1.1.0", 964 | "replace-ext": "1.0.0" 965 | } 966 | } 967 | } 968 | }, 969 | "gulplog": { 970 | "version": "1.0.0", 971 | "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", 972 | "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", 973 | "requires": { 974 | "glogg": "1.0.1" 975 | } 976 | }, 977 | "har-schema": { 978 | "version": "2.0.0", 979 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 980 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 981 | }, 982 | "har-validator": { 983 | "version": "5.0.3", 984 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 985 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 986 | "requires": { 987 | "ajv": "5.5.2", 988 | "har-schema": "2.0.0" 989 | } 990 | }, 991 | "has-ansi": { 992 | "version": "2.0.0", 993 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 994 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 995 | "requires": { 996 | "ansi-regex": "2.1.1" 997 | } 998 | }, 999 | "has-flag": { 1000 | "version": "2.0.0", 1001 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 1002 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" 1003 | }, 1004 | "has-gulplog": { 1005 | "version": "0.1.0", 1006 | "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", 1007 | "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", 1008 | "requires": { 1009 | "sparkles": "1.0.0" 1010 | } 1011 | }, 1012 | "hawk": { 1013 | "version": "6.0.2", 1014 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 1015 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 1016 | "requires": { 1017 | "boom": "4.3.1", 1018 | "cryptiles": "3.1.2", 1019 | "hoek": "4.2.1", 1020 | "sntp": "2.1.0" 1021 | } 1022 | }, 1023 | "he": { 1024 | "version": "1.1.1", 1025 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 1026 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" 1027 | }, 1028 | "hoek": { 1029 | "version": "4.2.1", 1030 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", 1031 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" 1032 | }, 1033 | "http-signature": { 1034 | "version": "1.2.0", 1035 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1036 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1037 | "requires": { 1038 | "assert-plus": "1.0.0", 1039 | "jsprim": "1.4.1", 1040 | "sshpk": "1.14.1" 1041 | } 1042 | }, 1043 | "inflight": { 1044 | "version": "1.0.6", 1045 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1046 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1047 | "requires": { 1048 | "once": "1.4.0", 1049 | "wrappy": "1.0.2" 1050 | } 1051 | }, 1052 | "inherits": { 1053 | "version": "2.0.3", 1054 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1055 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1056 | }, 1057 | "is": { 1058 | "version": "3.2.1", 1059 | "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", 1060 | "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=" 1061 | }, 1062 | "is-buffer": { 1063 | "version": "1.1.6", 1064 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1065 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 1066 | }, 1067 | "is-dotfile": { 1068 | "version": "1.0.3", 1069 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", 1070 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" 1071 | }, 1072 | "is-equal-shallow": { 1073 | "version": "0.1.3", 1074 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", 1075 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", 1076 | "requires": { 1077 | "is-primitive": "2.0.0" 1078 | } 1079 | }, 1080 | "is-extendable": { 1081 | "version": "0.1.1", 1082 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1083 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" 1084 | }, 1085 | "is-extglob": { 1086 | "version": "2.1.1", 1087 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1088 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 1089 | }, 1090 | "is-glob": { 1091 | "version": "3.1.0", 1092 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 1093 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 1094 | "requires": { 1095 | "is-extglob": "2.1.1" 1096 | } 1097 | }, 1098 | "is-number": { 1099 | "version": "2.1.0", 1100 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", 1101 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", 1102 | "requires": { 1103 | "kind-of": "3.2.2" 1104 | }, 1105 | "dependencies": { 1106 | "kind-of": { 1107 | "version": "3.2.2", 1108 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1109 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1110 | "requires": { 1111 | "is-buffer": "1.1.6" 1112 | } 1113 | } 1114 | } 1115 | }, 1116 | "is-obj": { 1117 | "version": "1.0.1", 1118 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 1119 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" 1120 | }, 1121 | "is-posix-bracket": { 1122 | "version": "0.1.1", 1123 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", 1124 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" 1125 | }, 1126 | "is-primitive": { 1127 | "version": "2.0.0", 1128 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", 1129 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" 1130 | }, 1131 | "is-stream": { 1132 | "version": "1.1.0", 1133 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1134 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 1135 | }, 1136 | "is-typedarray": { 1137 | "version": "1.0.0", 1138 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1139 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1140 | }, 1141 | "is-utf8": { 1142 | "version": "0.2.1", 1143 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 1144 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" 1145 | }, 1146 | "is-valid-glob": { 1147 | "version": "0.3.0", 1148 | "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", 1149 | "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=" 1150 | }, 1151 | "isarray": { 1152 | "version": "1.0.0", 1153 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1154 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1155 | }, 1156 | "isobject": { 1157 | "version": "2.1.0", 1158 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 1159 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 1160 | "requires": { 1161 | "isarray": "1.0.0" 1162 | } 1163 | }, 1164 | "isstream": { 1165 | "version": "0.1.2", 1166 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1167 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1168 | }, 1169 | "jsbn": { 1170 | "version": "0.1.1", 1171 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1172 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1173 | "optional": true 1174 | }, 1175 | "json-schema": { 1176 | "version": "0.2.3", 1177 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1178 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1179 | }, 1180 | "json-schema-traverse": { 1181 | "version": "0.3.1", 1182 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 1183 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 1184 | }, 1185 | "json-stable-stringify": { 1186 | "version": "1.0.1", 1187 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 1188 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 1189 | "requires": { 1190 | "jsonify": "0.0.0" 1191 | } 1192 | }, 1193 | "json-stringify-safe": { 1194 | "version": "5.0.1", 1195 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1196 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1197 | }, 1198 | "jsonify": { 1199 | "version": "0.0.0", 1200 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1201 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" 1202 | }, 1203 | "jsprim": { 1204 | "version": "1.4.1", 1205 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1206 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1207 | "requires": { 1208 | "assert-plus": "1.0.0", 1209 | "extsprintf": "1.3.0", 1210 | "json-schema": "0.2.3", 1211 | "verror": "1.10.0" 1212 | } 1213 | }, 1214 | "kind-of": { 1215 | "version": "1.1.0", 1216 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", 1217 | "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" 1218 | }, 1219 | "lazystream": { 1220 | "version": "1.0.0", 1221 | "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", 1222 | "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", 1223 | "requires": { 1224 | "readable-stream": "2.3.6" 1225 | } 1226 | }, 1227 | "lodash._basecopy": { 1228 | "version": "3.0.1", 1229 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 1230 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" 1231 | }, 1232 | "lodash._basetostring": { 1233 | "version": "3.0.1", 1234 | "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", 1235 | "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=" 1236 | }, 1237 | "lodash._basevalues": { 1238 | "version": "3.0.0", 1239 | "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", 1240 | "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=" 1241 | }, 1242 | "lodash._getnative": { 1243 | "version": "3.9.1", 1244 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 1245 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" 1246 | }, 1247 | "lodash._isiterateecall": { 1248 | "version": "3.0.9", 1249 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 1250 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" 1251 | }, 1252 | "lodash._reescape": { 1253 | "version": "3.0.0", 1254 | "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", 1255 | "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=" 1256 | }, 1257 | "lodash._reevaluate": { 1258 | "version": "3.0.0", 1259 | "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", 1260 | "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=" 1261 | }, 1262 | "lodash._reinterpolate": { 1263 | "version": "3.0.0", 1264 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", 1265 | "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" 1266 | }, 1267 | "lodash._root": { 1268 | "version": "3.0.1", 1269 | "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", 1270 | "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" 1271 | }, 1272 | "lodash.escape": { 1273 | "version": "3.2.0", 1274 | "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", 1275 | "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", 1276 | "requires": { 1277 | "lodash._root": "3.0.1" 1278 | } 1279 | }, 1280 | "lodash.isarguments": { 1281 | "version": "3.1.0", 1282 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 1283 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" 1284 | }, 1285 | "lodash.isarray": { 1286 | "version": "3.0.4", 1287 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 1288 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" 1289 | }, 1290 | "lodash.isequal": { 1291 | "version": "4.5.0", 1292 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 1293 | "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" 1294 | }, 1295 | "lodash.keys": { 1296 | "version": "3.1.2", 1297 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 1298 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", 1299 | "requires": { 1300 | "lodash._getnative": "3.9.1", 1301 | "lodash.isarguments": "3.1.0", 1302 | "lodash.isarray": "3.0.4" 1303 | } 1304 | }, 1305 | "lodash.restparam": { 1306 | "version": "3.6.1", 1307 | "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", 1308 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" 1309 | }, 1310 | "lodash.template": { 1311 | "version": "3.6.2", 1312 | "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", 1313 | "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", 1314 | "requires": { 1315 | "lodash._basecopy": "3.0.1", 1316 | "lodash._basetostring": "3.0.1", 1317 | "lodash._basevalues": "3.0.0", 1318 | "lodash._isiterateecall": "3.0.9", 1319 | "lodash._reinterpolate": "3.0.0", 1320 | "lodash.escape": "3.2.0", 1321 | "lodash.keys": "3.1.2", 1322 | "lodash.restparam": "3.6.1", 1323 | "lodash.templatesettings": "3.1.1" 1324 | } 1325 | }, 1326 | "lodash.templatesettings": { 1327 | "version": "3.1.1", 1328 | "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", 1329 | "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", 1330 | "requires": { 1331 | "lodash._reinterpolate": "3.0.0", 1332 | "lodash.escape": "3.2.0" 1333 | } 1334 | }, 1335 | "map-stream": { 1336 | "version": "0.1.0", 1337 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 1338 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" 1339 | }, 1340 | "merge-stream": { 1341 | "version": "1.0.1", 1342 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", 1343 | "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", 1344 | "requires": { 1345 | "readable-stream": "2.3.6" 1346 | } 1347 | }, 1348 | "micromatch": { 1349 | "version": "2.3.11", 1350 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", 1351 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", 1352 | "requires": { 1353 | "arr-diff": "2.0.0", 1354 | "array-unique": "0.2.1", 1355 | "braces": "1.8.5", 1356 | "expand-brackets": "0.1.5", 1357 | "extglob": "0.3.2", 1358 | "filename-regex": "2.0.1", 1359 | "is-extglob": "1.0.0", 1360 | "is-glob": "2.0.1", 1361 | "kind-of": "3.2.2", 1362 | "normalize-path": "2.1.1", 1363 | "object.omit": "2.0.1", 1364 | "parse-glob": "3.0.4", 1365 | "regex-cache": "0.4.4" 1366 | }, 1367 | "dependencies": { 1368 | "arr-diff": { 1369 | "version": "2.0.0", 1370 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", 1371 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", 1372 | "requires": { 1373 | "arr-flatten": "1.1.0" 1374 | } 1375 | }, 1376 | "is-extglob": { 1377 | "version": "1.0.0", 1378 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 1379 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" 1380 | }, 1381 | "is-glob": { 1382 | "version": "2.0.1", 1383 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 1384 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 1385 | "requires": { 1386 | "is-extglob": "1.0.0" 1387 | } 1388 | }, 1389 | "kind-of": { 1390 | "version": "3.2.2", 1391 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1392 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1393 | "requires": { 1394 | "is-buffer": "1.1.6" 1395 | } 1396 | } 1397 | } 1398 | }, 1399 | "mime-db": { 1400 | "version": "1.33.0", 1401 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 1402 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" 1403 | }, 1404 | "mime-types": { 1405 | "version": "2.1.18", 1406 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 1407 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 1408 | "requires": { 1409 | "mime-db": "1.33.0" 1410 | } 1411 | }, 1412 | "minimatch": { 1413 | "version": "3.0.4", 1414 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1415 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1416 | "requires": { 1417 | "brace-expansion": "1.1.11" 1418 | } 1419 | }, 1420 | "minimist": { 1421 | "version": "0.0.8", 1422 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1423 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1424 | }, 1425 | "mkdirp": { 1426 | "version": "0.5.1", 1427 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1428 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1429 | "requires": { 1430 | "minimist": "0.0.8" 1431 | } 1432 | }, 1433 | "mocha": { 1434 | "version": "4.1.0", 1435 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", 1436 | "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", 1437 | "requires": { 1438 | "browser-stdout": "1.3.0", 1439 | "commander": "2.11.0", 1440 | "debug": "3.1.0", 1441 | "diff": "3.3.1", 1442 | "escape-string-regexp": "1.0.5", 1443 | "glob": "7.1.2", 1444 | "growl": "1.10.3", 1445 | "he": "1.1.1", 1446 | "mkdirp": "0.5.1", 1447 | "supports-color": "4.4.0" 1448 | }, 1449 | "dependencies": { 1450 | "supports-color": { 1451 | "version": "4.4.0", 1452 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 1453 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 1454 | "requires": { 1455 | "has-flag": "2.0.0" 1456 | } 1457 | } 1458 | } 1459 | }, 1460 | "ms": { 1461 | "version": "2.0.0", 1462 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1463 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1464 | }, 1465 | "multimatch": { 1466 | "version": "2.1.0", 1467 | "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", 1468 | "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", 1469 | "requires": { 1470 | "array-differ": "1.0.0", 1471 | "array-union": "1.0.2", 1472 | "arrify": "1.0.1", 1473 | "minimatch": "3.0.4" 1474 | } 1475 | }, 1476 | "multipipe": { 1477 | "version": "0.1.2", 1478 | "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", 1479 | "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", 1480 | "requires": { 1481 | "duplexer2": "0.0.2" 1482 | } 1483 | }, 1484 | "node.extend": { 1485 | "version": "1.1.6", 1486 | "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", 1487 | "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=", 1488 | "requires": { 1489 | "is": "3.2.1" 1490 | } 1491 | }, 1492 | "normalize-path": { 1493 | "version": "2.1.1", 1494 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 1495 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 1496 | "requires": { 1497 | "remove-trailing-separator": "1.1.0" 1498 | } 1499 | }, 1500 | "oauth-sign": { 1501 | "version": "0.8.2", 1502 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 1503 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 1504 | }, 1505 | "object-assign": { 1506 | "version": "4.1.1", 1507 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1508 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1509 | }, 1510 | "object.omit": { 1511 | "version": "2.0.1", 1512 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", 1513 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", 1514 | "requires": { 1515 | "for-own": "0.1.5", 1516 | "is-extendable": "0.1.1" 1517 | } 1518 | }, 1519 | "once": { 1520 | "version": "1.4.0", 1521 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1522 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1523 | "requires": { 1524 | "wrappy": "1.0.2" 1525 | } 1526 | }, 1527 | "ordered-read-streams": { 1528 | "version": "0.3.0", 1529 | "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", 1530 | "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", 1531 | "requires": { 1532 | "is-stream": "1.1.0", 1533 | "readable-stream": "2.3.6" 1534 | } 1535 | }, 1536 | "parse-glob": { 1537 | "version": "3.0.4", 1538 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 1539 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", 1540 | "requires": { 1541 | "glob-base": "0.3.0", 1542 | "is-dotfile": "1.0.3", 1543 | "is-extglob": "1.0.0", 1544 | "is-glob": "2.0.1" 1545 | }, 1546 | "dependencies": { 1547 | "is-extglob": { 1548 | "version": "1.0.0", 1549 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 1550 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" 1551 | }, 1552 | "is-glob": { 1553 | "version": "2.0.1", 1554 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 1555 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 1556 | "requires": { 1557 | "is-extglob": "1.0.0" 1558 | } 1559 | } 1560 | } 1561 | }, 1562 | "path-dirname": { 1563 | "version": "1.0.2", 1564 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 1565 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" 1566 | }, 1567 | "path-is-absolute": { 1568 | "version": "1.0.1", 1569 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1570 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1571 | }, 1572 | "pause-stream": { 1573 | "version": "0.0.11", 1574 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 1575 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 1576 | "requires": { 1577 | "through": "2.3.8" 1578 | } 1579 | }, 1580 | "pend": { 1581 | "version": "1.2.0", 1582 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1583 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 1584 | }, 1585 | "performance-now": { 1586 | "version": "2.1.0", 1587 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1588 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 1589 | }, 1590 | "plugin-error": { 1591 | "version": "0.1.2", 1592 | "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", 1593 | "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", 1594 | "requires": { 1595 | "ansi-cyan": "0.1.1", 1596 | "ansi-red": "0.1.1", 1597 | "arr-diff": "1.1.0", 1598 | "arr-union": "2.1.0", 1599 | "extend-shallow": "1.1.4" 1600 | } 1601 | }, 1602 | "preserve": { 1603 | "version": "0.2.0", 1604 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", 1605 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" 1606 | }, 1607 | "process-nextick-args": { 1608 | "version": "2.0.0", 1609 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1610 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" 1611 | }, 1612 | "punycode": { 1613 | "version": "1.4.1", 1614 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1615 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 1616 | }, 1617 | "qfgets": { 1618 | "version": "1.1.1", 1619 | "resolved": "https://registry.npmjs.org/qfgets/-/qfgets-1.1.1.tgz", 1620 | "integrity": "sha1-SlC1tSMtWnDIhlvE6mQo302nMsI=" 1621 | }, 1622 | "qs": { 1623 | "version": "6.5.2", 1624 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1625 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 1626 | }, 1627 | "querystringify": { 1628 | "version": "2.0.0", 1629 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", 1630 | "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==" 1631 | }, 1632 | "queue": { 1633 | "version": "3.1.0", 1634 | "resolved": "https://registry.npmjs.org/queue/-/queue-3.1.0.tgz", 1635 | "integrity": "sha1-bEnQHwCeIlZ4h4nyv/rGuLmZBYU=", 1636 | "requires": { 1637 | "inherits": "2.0.3" 1638 | } 1639 | }, 1640 | "randomatic": { 1641 | "version": "1.1.7", 1642 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", 1643 | "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", 1644 | "requires": { 1645 | "is-number": "3.0.0", 1646 | "kind-of": "4.0.0" 1647 | }, 1648 | "dependencies": { 1649 | "is-number": { 1650 | "version": "3.0.0", 1651 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 1652 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 1653 | "requires": { 1654 | "kind-of": "3.2.2" 1655 | }, 1656 | "dependencies": { 1657 | "kind-of": { 1658 | "version": "3.2.2", 1659 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1660 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1661 | "requires": { 1662 | "is-buffer": "1.1.6" 1663 | } 1664 | } 1665 | } 1666 | }, 1667 | "kind-of": { 1668 | "version": "4.0.0", 1669 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 1670 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 1671 | "requires": { 1672 | "is-buffer": "1.1.6" 1673 | } 1674 | } 1675 | } 1676 | }, 1677 | "readable-stream": { 1678 | "version": "2.3.6", 1679 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1680 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1681 | "requires": { 1682 | "core-util-is": "1.0.2", 1683 | "inherits": "2.0.3", 1684 | "isarray": "1.0.0", 1685 | "process-nextick-args": "2.0.0", 1686 | "safe-buffer": "5.1.2", 1687 | "string_decoder": "1.1.1", 1688 | "util-deprecate": "1.0.2" 1689 | } 1690 | }, 1691 | "regex-cache": { 1692 | "version": "0.4.4", 1693 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", 1694 | "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", 1695 | "requires": { 1696 | "is-equal-shallow": "0.1.3" 1697 | } 1698 | }, 1699 | "remove-trailing-separator": { 1700 | "version": "1.1.0", 1701 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 1702 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" 1703 | }, 1704 | "repeat-element": { 1705 | "version": "1.1.2", 1706 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", 1707 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" 1708 | }, 1709 | "repeat-string": { 1710 | "version": "1.6.1", 1711 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1712 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 1713 | }, 1714 | "replace-ext": { 1715 | "version": "1.0.0", 1716 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", 1717 | "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" 1718 | }, 1719 | "request": { 1720 | "version": "2.85.0", 1721 | "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", 1722 | "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", 1723 | "requires": { 1724 | "aws-sign2": "0.7.0", 1725 | "aws4": "1.7.0", 1726 | "caseless": "0.12.0", 1727 | "combined-stream": "1.0.6", 1728 | "extend": "3.0.1", 1729 | "forever-agent": "0.6.1", 1730 | "form-data": "2.3.2", 1731 | "har-validator": "5.0.3", 1732 | "hawk": "6.0.2", 1733 | "http-signature": "1.2.0", 1734 | "is-typedarray": "1.0.0", 1735 | "isstream": "0.1.2", 1736 | "json-stringify-safe": "5.0.1", 1737 | "mime-types": "2.1.18", 1738 | "oauth-sign": "0.8.2", 1739 | "performance-now": "2.1.0", 1740 | "qs": "6.5.2", 1741 | "safe-buffer": "5.1.2", 1742 | "stringstream": "0.0.5", 1743 | "tough-cookie": "2.3.4", 1744 | "tunnel-agent": "0.6.0", 1745 | "uuid": "3.2.1" 1746 | } 1747 | }, 1748 | "requires-port": { 1749 | "version": "1.0.0", 1750 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 1751 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" 1752 | }, 1753 | "rimraf": { 1754 | "version": "2.6.2", 1755 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1756 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 1757 | "requires": { 1758 | "glob": "7.1.2" 1759 | } 1760 | }, 1761 | "safe-buffer": { 1762 | "version": "5.1.2", 1763 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1764 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1765 | }, 1766 | "semver": { 1767 | "version": "5.5.0", 1768 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 1769 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" 1770 | }, 1771 | "sntp": { 1772 | "version": "2.1.0", 1773 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", 1774 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", 1775 | "requires": { 1776 | "hoek": "4.2.1" 1777 | } 1778 | }, 1779 | "source-map": { 1780 | "version": "0.6.1", 1781 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1782 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1783 | }, 1784 | "source-map-support": { 1785 | "version": "0.5.5", 1786 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", 1787 | "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", 1788 | "requires": { 1789 | "buffer-from": "1.0.0", 1790 | "source-map": "0.6.1" 1791 | } 1792 | }, 1793 | "sparkles": { 1794 | "version": "1.0.0", 1795 | "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", 1796 | "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=" 1797 | }, 1798 | "split": { 1799 | "version": "0.3.3", 1800 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 1801 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", 1802 | "requires": { 1803 | "through": "2.3.8" 1804 | } 1805 | }, 1806 | "sshpk": { 1807 | "version": "1.14.1", 1808 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", 1809 | "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", 1810 | "requires": { 1811 | "asn1": "0.2.3", 1812 | "assert-plus": "1.0.0", 1813 | "bcrypt-pbkdf": "1.0.1", 1814 | "dashdash": "1.14.1", 1815 | "ecc-jsbn": "0.1.1", 1816 | "getpass": "0.1.7", 1817 | "jsbn": "0.1.1", 1818 | "tweetnacl": "0.14.5" 1819 | } 1820 | }, 1821 | "stat-mode": { 1822 | "version": "0.2.2", 1823 | "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", 1824 | "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=" 1825 | }, 1826 | "stream-combiner": { 1827 | "version": "0.0.4", 1828 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 1829 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", 1830 | "requires": { 1831 | "duplexer": "0.1.1" 1832 | } 1833 | }, 1834 | "stream-shift": { 1835 | "version": "1.0.0", 1836 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", 1837 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" 1838 | }, 1839 | "streamfilter": { 1840 | "version": "1.0.7", 1841 | "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", 1842 | "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", 1843 | "requires": { 1844 | "readable-stream": "2.3.6" 1845 | } 1846 | }, 1847 | "streamifier": { 1848 | "version": "0.1.1", 1849 | "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", 1850 | "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=" 1851 | }, 1852 | "string_decoder": { 1853 | "version": "1.1.1", 1854 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1855 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1856 | "requires": { 1857 | "safe-buffer": "5.1.2" 1858 | } 1859 | }, 1860 | "stringstream": { 1861 | "version": "0.0.5", 1862 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 1863 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 1864 | }, 1865 | "strip-ansi": { 1866 | "version": "3.0.1", 1867 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1868 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1869 | "requires": { 1870 | "ansi-regex": "2.1.1" 1871 | } 1872 | }, 1873 | "strip-bom": { 1874 | "version": "2.0.0", 1875 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 1876 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 1877 | "requires": { 1878 | "is-utf8": "0.2.1" 1879 | } 1880 | }, 1881 | "strip-bom-stream": { 1882 | "version": "1.0.0", 1883 | "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", 1884 | "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", 1885 | "requires": { 1886 | "first-chunk-stream": "1.0.0", 1887 | "strip-bom": "2.0.0" 1888 | } 1889 | }, 1890 | "supports-color": { 1891 | "version": "2.0.0", 1892 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1893 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 1894 | }, 1895 | "tar": { 1896 | "version": "2.2.1", 1897 | "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", 1898 | "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", 1899 | "requires": { 1900 | "block-stream": "0.0.9", 1901 | "fstream": "1.0.11", 1902 | "inherits": "2.0.3" 1903 | } 1904 | }, 1905 | "through": { 1906 | "version": "2.3.8", 1907 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1908 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1909 | }, 1910 | "through2": { 1911 | "version": "2.0.3", 1912 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", 1913 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", 1914 | "requires": { 1915 | "readable-stream": "2.3.6", 1916 | "xtend": "4.0.1" 1917 | } 1918 | }, 1919 | "through2-filter": { 1920 | "version": "2.0.0", 1921 | "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", 1922 | "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", 1923 | "requires": { 1924 | "through2": "2.0.3", 1925 | "xtend": "4.0.1" 1926 | } 1927 | }, 1928 | "time-stamp": { 1929 | "version": "1.1.0", 1930 | "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", 1931 | "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" 1932 | }, 1933 | "to-absolute-glob": { 1934 | "version": "0.1.1", 1935 | "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", 1936 | "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", 1937 | "requires": { 1938 | "extend-shallow": "2.0.1" 1939 | }, 1940 | "dependencies": { 1941 | "extend-shallow": { 1942 | "version": "2.0.1", 1943 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1944 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1945 | "requires": { 1946 | "is-extendable": "0.1.1" 1947 | } 1948 | } 1949 | } 1950 | }, 1951 | "tough-cookie": { 1952 | "version": "2.3.4", 1953 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 1954 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 1955 | "requires": { 1956 | "punycode": "1.4.1" 1957 | } 1958 | }, 1959 | "tunnel-agent": { 1960 | "version": "0.6.0", 1961 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1962 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1963 | "requires": { 1964 | "safe-buffer": "5.1.2" 1965 | } 1966 | }, 1967 | "tweetnacl": { 1968 | "version": "0.14.5", 1969 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1970 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1971 | "optional": true 1972 | }, 1973 | "unique-stream": { 1974 | "version": "2.2.1", 1975 | "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", 1976 | "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", 1977 | "requires": { 1978 | "json-stable-stringify": "1.0.1", 1979 | "through2-filter": "2.0.0" 1980 | } 1981 | }, 1982 | "url-parse": { 1983 | "version": "1.4.0", 1984 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.0.tgz", 1985 | "integrity": "sha512-ERuGxDiQ6Xw/agN4tuoCRbmwRuZP0cJ1lJxJubXr5Q/5cDa78+Dc4wfvtxzhzhkm5VvmW6Mf8EVj9SPGN4l8Lg==", 1986 | "requires": { 1987 | "querystringify": "2.0.0", 1988 | "requires-port": "1.0.0" 1989 | } 1990 | }, 1991 | "util-deprecate": { 1992 | "version": "1.0.2", 1993 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1994 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1995 | }, 1996 | "uuid": { 1997 | "version": "3.2.1", 1998 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", 1999 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" 2000 | }, 2001 | "vali-date": { 2002 | "version": "1.0.0", 2003 | "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", 2004 | "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" 2005 | }, 2006 | "verror": { 2007 | "version": "1.10.0", 2008 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2009 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 2010 | "requires": { 2011 | "assert-plus": "1.0.0", 2012 | "core-util-is": "1.0.2", 2013 | "extsprintf": "1.3.0" 2014 | } 2015 | }, 2016 | "vinyl": { 2017 | "version": "0.4.6", 2018 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", 2019 | "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", 2020 | "requires": { 2021 | "clone": "0.2.0", 2022 | "clone-stats": "0.0.1" 2023 | } 2024 | }, 2025 | "vinyl-fs": { 2026 | "version": "2.4.4", 2027 | "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", 2028 | "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", 2029 | "requires": { 2030 | "duplexify": "3.6.0", 2031 | "glob-stream": "5.3.5", 2032 | "graceful-fs": "4.1.11", 2033 | "gulp-sourcemaps": "1.6.0", 2034 | "is-valid-glob": "0.3.0", 2035 | "lazystream": "1.0.0", 2036 | "lodash.isequal": "4.5.0", 2037 | "merge-stream": "1.0.1", 2038 | "mkdirp": "0.5.1", 2039 | "object-assign": "4.1.1", 2040 | "readable-stream": "2.3.6", 2041 | "strip-bom": "2.0.0", 2042 | "strip-bom-stream": "1.0.0", 2043 | "through2": "2.0.3", 2044 | "through2-filter": "2.0.0", 2045 | "vali-date": "1.0.0", 2046 | "vinyl": "1.2.0" 2047 | }, 2048 | "dependencies": { 2049 | "clone": { 2050 | "version": "1.0.4", 2051 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 2052 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" 2053 | }, 2054 | "replace-ext": { 2055 | "version": "0.0.1", 2056 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", 2057 | "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" 2058 | }, 2059 | "vinyl": { 2060 | "version": "1.2.0", 2061 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", 2062 | "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", 2063 | "requires": { 2064 | "clone": "1.0.4", 2065 | "clone-stats": "0.0.1", 2066 | "replace-ext": "0.0.1" 2067 | } 2068 | } 2069 | } 2070 | }, 2071 | "vinyl-source-stream": { 2072 | "version": "1.1.2", 2073 | "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz", 2074 | "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=", 2075 | "requires": { 2076 | "through2": "2.0.3", 2077 | "vinyl": "0.4.6" 2078 | } 2079 | }, 2080 | "vscode": { 2081 | "version": "1.1.17", 2082 | "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.17.tgz", 2083 | "integrity": "sha512-yNMyrgEua2qyW7+trNNYhA6PeldRrBcwtLtlazkdtzcmkHMKECM/08bPF8HF2ZFuwHgD+8FQsdqd/DvJYQYjJg==", 2084 | "requires": { 2085 | "glob": "7.1.2", 2086 | "gulp-chmod": "2.0.0", 2087 | "gulp-filter": "5.1.0", 2088 | "gulp-gunzip": "1.0.0", 2089 | "gulp-remote-src-vscode": "0.5.0", 2090 | "gulp-symdest": "1.1.0", 2091 | "gulp-untar": "0.0.6", 2092 | "gulp-vinyl-zip": "2.1.0", 2093 | "mocha": "4.1.0", 2094 | "request": "2.85.0", 2095 | "semver": "5.5.0", 2096 | "source-map-support": "0.5.5", 2097 | "url-parse": "1.4.0", 2098 | "vinyl-source-stream": "1.1.2" 2099 | } 2100 | }, 2101 | "vscode-jsonrpc": { 2102 | "version": "3.6.1", 2103 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.6.1.tgz", 2104 | "integrity": "sha512-+Eb+Dxf2kC2h079msx61hkblxAKE0S2j78+8QpnigLAO2aIIjkCwTIH34etBrU8E8VItRinec7YEwULx9at5bQ==" 2105 | }, 2106 | "vscode-languageclient": { 2107 | "version": "4.1.3", 2108 | "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-4.1.3.tgz", 2109 | "integrity": "sha512-3tu79B56apocobPGkHm7YWobjhNKCU7H4cUk+rkVFCNoOSAm2wZlN2J6HdC15/ONALY4ai25BeyQ+aQaFmM1Jg==", 2110 | "requires": { 2111 | "vscode-languageserver-protocol": "3.7.1" 2112 | } 2113 | }, 2114 | "vscode-languageserver-protocol": { 2115 | "version": "3.7.1", 2116 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.7.1.tgz", 2117 | "integrity": "sha512-AKX9XQ49m/lpiDLZJBypFNc5eAXNlSecunYU5m4o5WIwGgW86TWnXVdziuFm47W2SdigDa/jVbxLPSNUeut9fQ==", 2118 | "requires": { 2119 | "vscode-jsonrpc": "3.6.1", 2120 | "vscode-languageserver-types": "3.7.1" 2121 | } 2122 | }, 2123 | "vscode-languageserver-types": { 2124 | "version": "3.7.1", 2125 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.7.1.tgz", 2126 | "integrity": "sha512-ftGfU79AnnI3OHCG7kzCCN47jNI7BjECPAH2yhddtYTiQk0bnFbuFeQKvpXQcyNI3GsKEx5b6kSiBYshTiep6w==" 2127 | }, 2128 | "wrappy": { 2129 | "version": "1.0.2", 2130 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2131 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2132 | }, 2133 | "xtend": { 2134 | "version": "4.0.1", 2135 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 2136 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 2137 | }, 2138 | "yauzl": { 2139 | "version": "2.9.1", 2140 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", 2141 | "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", 2142 | "requires": { 2143 | "buffer-crc32": "0.2.13", 2144 | "fd-slicer": "1.0.1" 2145 | } 2146 | }, 2147 | "yazl": { 2148 | "version": "2.4.3", 2149 | "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.4.3.tgz", 2150 | "integrity": "sha1-7CblzIfVYBud+EMtvdPNLlFzoHE=", 2151 | "requires": { 2152 | "buffer-crc32": "0.2.13" 2153 | } 2154 | } 2155 | } 2156 | } 2157 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reacted", 3 | "description": "An extension to assist with development of react and redux applications.", 4 | "author": "Madalyn Baehre, Ben Gummelt, Jake Acosta, Robert P Gonzalez", 5 | "icon": "images/logo.png", 6 | "license": "MIT", 7 | "displayName": "ReactEd", 8 | "version": "0.0.3", 9 | "publisher": "ReactEd", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/ReactEdLLC/ReactEd" 13 | }, 14 | "engines": { 15 | "vscode": "^1.20.0" 16 | }, 17 | "categories": [ 18 | "Other", 19 | "Snippets" 20 | ], 21 | "activationEvents": [ 22 | "onLanguage:javascriptreact", 23 | "onLanguage:javascript" 24 | ], 25 | "main": "./out/src/extension", 26 | "contributes": { 27 | "configuration": { 28 | "type": "object", 29 | "title": "Server configuration", 30 | "properties": { 31 | "reacted.maxNumberOfProblems": { 32 | "scope": "resource", 33 | "type": "number", 34 | "default": 100, 35 | "description": "Controls the maximum number of problems produced by the server." 36 | }, 37 | "reacted.trace.server": { 38 | "scope": "window", 39 | "type": "string", 40 | "enum": [ 41 | "off", 42 | "messages", 43 | "verbose" 44 | ], 45 | "default": "off", 46 | "description": "Traces the communication between VSCode and the language server." 47 | } 48 | } 49 | }, 50 | "snippets": [ 51 | { 52 | "language": "javascriptreact", 53 | "path": "./snippets/snippets.json" 54 | }, 55 | { 56 | "language": "javascript", 57 | "path": "./snippets/snippets.json" 58 | } 59 | ] 60 | }, 61 | "scripts": { 62 | "vscode:prepublish": "tsc -p ./", 63 | "compile": "tsc -p ./", 64 | "watch": "tsc -w -p ./", 65 | "update-vscode": "node ./node_modules/vscode/bin/install", 66 | "postinstall": "node ./node_modules/vscode/bin/install" 67 | }, 68 | "dependencies": { 69 | "vscode": "^1.1.17", 70 | "vscode-languageclient": "^4.1.3", 71 | "qfgets": "^1.1.1" 72 | } 73 | } -------------------------------------------------------------------------------- /client/snippets/snippets.json: -------------------------------------------------------------------------------- 1 | { 2 | "React import" : { 3 | "prefix" : "ireact", 4 | "body" : [ 5 | "import React, { Component } from 'react'\n\nclass ${1:Reactools} extends Component {\n\trender () {\n\t\treturn (\n\t\t\t
\n\t\t\t\t$0\n\t\t\t
\n\t\t)\n\t}\n}\n\nexport default ${1:Reactools};" 6 | ], 7 | "description" : "tabs out the skeleton of a react component" 8 | }, 9 | "Class import" : { 10 | "prefix": "cocomp", 11 | "body": "class ${1:componentName} extends Component {\n\trender () {\n\t\treturn (\n\t\t\t
\n\t\t\t\t$0\n\t\t\t
\n\t\t)\n\t}\n}\n", 12 | "description": "creates only the class component" 13 | }, 14 | "Import Style" : { 15 | "prefix": "istyles", 16 | "body": "const styles = StyleSheet.create({\n\t\n\t\n\t});", 17 | "description" : "defines your styles" 18 | }, 19 | "Class with will mount": { 20 | "prefix": "cwmount", 21 | "body": "class ${1:componentName} extends Component {\n\n\tcomponentWillMount () {\n\n\t}\n\n\n\trender () {\n\t\treturn (\n\t\t\t
\n\t\t\t\t$0\n\t\t\t
\n\t\t)\n\t}\n}\n", 22 | "description": "provides a class componenet with the willMount cycle" 23 | }, 24 | "Class with Did mount": { 25 | "prefix": "cdmount", 26 | "body": "class ${1:componentName} extends Component {\n\n\tcomponentDidlMount () {\n\n\t}\n\n\n\trender () {\n\t\treturn (\n\t\t\t
\n\t\t\t\t$0\n\t\t\t
\n\t\t)\n\t}\n}\n", 27 | "description": "provides a class componenet with the didMount cycle" 28 | }, 29 | "Class Constructor" : { 30 | "prefix": "ccon", 31 | "body": "class ${1:componentName} extends Component{\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tconsole.log('')\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t$0\n\t\t\t
\n\t\t)\n\t}\n}\n", 32 | "description": "creates a class component with the contructor inside" 33 | }, 34 | "General Import" : { 35 | "prefix": "impf", 36 | "body": "import $1 from '$2';", 37 | "description": "General import statment" 38 | }, 39 | "This state Props" : { 40 | "prefix": "tsp", 41 | "body": "this.state.props", 42 | "description": "this.state.props" 43 | }, 44 | "import Redux" : { 45 | "prefix": "ired", 46 | "body": "import { createStore } from 'redux' ", 47 | "description": "imports a redux store" 48 | }, 49 | "Reducer" : { 50 | "prefix": "reducer", 51 | "body": "const reducer = (state, action) => {\n\n //makes changes to the state based on the action\n\n}", 52 | "description": "creates a reducer function" 53 | }, 54 | "Creates Redux store": { 55 | "prefix": "rstore", 56 | "body": "const store = createStore(reducer, $1)", 57 | "description": "redux store" 58 | }, 59 | "store subscriber" : { 60 | "prefix": "scribe", 61 | "body": "store.subscribe(() => {\n\t\nconsole.log()\n\n})", 62 | "description": "subscribe method" 63 | } 64 | } -------------------------------------------------------------------------------- /client/src/extension.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import * as path from 'path'; 3 | import * as fs from 'fs'; 4 | import traverseWebpack from './traverseWebpack'; 5 | import { window, workspace, ExtensionContext, WorkspaceConfiguration, Disposable } from 'vscode'; 6 | import { 7 | LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, CancellationToken, Middleware, 8 | DidChangeConfigurationNotification, ConfigurationParams 9 | } from 'vscode-languageclient'; 10 | interface ReactEdSettings { 11 | maxNumberOfProblems: number; 12 | } 13 | 14 | let client: LanguageClient; 15 | 16 | namespace Configuration { 17 | 18 | let configurationListener: Disposable; 19 | // Convert VS Code specific settings to a format acceptable by the server. Since 20 | // both client and server do use JSON the conversion is trivial. 21 | export function computeConfiguration(params: ConfigurationParams, _token: CancellationToken, _next: Function): any[] { 22 | if (!params.items) { 23 | return null; 24 | } 25 | let result: (ReactEdSettings | null)[] = []; 26 | for (let item of params.items) { 27 | // The server asks the client for configuration settings without a section 28 | // If a section is present we return null to indicate that the configuration 29 | // is not supported. 30 | if (item.section) { 31 | result.push(null); 32 | continue; 33 | } 34 | let config: WorkspaceConfiguration; 35 | if (item.scopeUri) { 36 | config = workspace.getConfiguration('reacted', client.protocol2CodeConverter.asUri(item.scopeUri)); 37 | } else { 38 | config = workspace.getConfiguration('reacted'); 39 | } 40 | result.push({ 41 | maxNumberOfProblems: config.get('maxNumberOfProblems') 42 | }); 43 | } 44 | return result; 45 | } 46 | 47 | export function initialize() { 48 | // VS Code currently doesn't sent fine grained configuration changes. So we 49 | // listen to any change. However this will change in the near future. 50 | configurationListener = workspace.onDidChangeConfiguration(() => { 51 | client.sendNotification(DidChangeConfigurationNotification.type, { settings: null }); 52 | }); 53 | } 54 | export function dispose() { 55 | if (configurationListener) { 56 | configurationListener.dispose(); 57 | } 58 | } 59 | } 60 | export function activate(context: ExtensionContext) { 61 | window.showInformationMessage('Started ReactEd'); 62 | function pathExists(p: string): boolean { 63 | try { 64 | fs.accessSync(p); 65 | } catch (err) { 66 | return false; 67 | } 68 | return true; 69 | } 70 | /**** Parsing through the webpack config file for bundle location ****/ 71 | const WebpackPath = path.join(workspace.rootPath, 'webpack.config.js'); // Accessing the webpack file 72 | window.showInformationMessage(WebpackPath); 73 | if (pathExists(WebpackPath)) { 74 | let content = fs.readFileSync(WebpackPath, 'utf-8'); 75 | const filepathReg = /.*path:.*'|.*path:.*"/g; //Regex for the file path 76 | const filenameReg = /.*filename:.*'|.*filename:.*"/g; // Regex for the file name 77 | let filepathLine = content.match(filepathReg); // looking for the file path 78 | let filenameLine = content.match(filenameReg); //looking for the file name 79 | let filesReg = /'.*'|".*"/g; 80 | let filepath = filepathLine[0].match(filesReg); 81 | let filename = filenameLine[0].match(filesReg); 82 | let bundle = path.join(workspace.rootPath, filepath[0].slice(1, filepath[0].length-1), filename[0].slice(1, filename[0].length-1)); 83 | /****if found bundle then traversing the bundle file ****/ 84 | if (pathExists(bundle)) { 85 | window.showInformationMessage('Bundle Found..Starting Parse'); 86 | let traverse = new traverseWebpack(); //Bringing in functionality for parsing the bundle file 87 | traverse.grepWithFs(bundle); 88 | let debounce = false; 89 | fs.watch(bundle, { encoding: 'buffer' }, (event, filename) => { 90 | if(event === 'change' && !debounce && filename) { 91 | debounce = true; 92 | setTimeout(() => { 93 | debounce = false; 94 | }, 5000) 95 | traverse.grepWithFs(bundle); 96 | } 97 | }); 98 | } else { 99 | window.showInformationMessage('Unable to find webpack bundle'); 100 | } 101 | } 102 | // The server is implemented in node 103 | let serverModule = context.asAbsolutePath(path.join('server', 'server.js')); 104 | // The debug options for the server 105 | let debugOptions = { execArgv: ["--nolazy", "--inspect=6009"] }; 106 | 107 | // If the extension is launched in debug mode then the debug server options are used 108 | // Otherwise the run options are used 109 | let serverOptions: ServerOptions = { 110 | run : { module: serverModule, transport: TransportKind.ipc }, 111 | debug: { module: serverModule, transport: TransportKind.ipc, options: debugOptions } 112 | } 113 | let middleware: Middleware = { 114 | workspace: { 115 | configuration: Configuration.computeConfiguration 116 | } 117 | }; 118 | // Options to control the language client 119 | let clientOptions: LanguageClientOptions = { 120 | // Register the server for javascript and JSX files 121 | documentSelector: [{scheme: 'file', language: 'javascript'},{scheme: 'file', language: 'javascriptreact'}], 122 | synchronize: { 123 | // Notify the server about file changes to '.clientrc files contain in the workspace 124 | fileEvents: workspace.createFileSystemWatcher('**/.clientrc') 125 | }, 126 | middleware: middleware 127 | } 128 | // Create the language client and start the client. 129 | client = new LanguageClient('languageServerExample', 'Language Server Example', serverOptions, clientOptions); 130 | 131 | // Start the client. This will also launch the server 132 | client.start(); 133 | } 134 | export function deactivate(): Thenable { 135 | if (!client) { 136 | return undefined; 137 | } 138 | Configuration.dispose(); 139 | return client.stop(); 140 | } -------------------------------------------------------------------------------- /client/src/traverseWebpack.ts: -------------------------------------------------------------------------------- 1 | const qfgets = require("qfgets"); 2 | import * as fs from "fs"; 3 | /* cleans grepped lines by applying regex */ 4 | function regWithMe(line: string, regex: RegExp): string { 5 | let result: string; 6 | let temp: string; 7 | if (regex.exec(line)) { 8 | temp = regex.exec(line)[0]; 9 | result = temp 10 | .replace("_", "") 11 | .replace("2", "") 12 | .replace("(", "") 13 | .replace(".default", ""); 14 | } 15 | return result; 16 | } 17 | 18 | //iterates line by line for regex 19 | export default class TraverseWebpack { 20 | grepWithFs(filename: string) { 21 | const regexp1 = "_reactDom.render"; 22 | const regexp2 = /_createClass\([A-Z][A-Za-z]*/; 23 | const regexp3 = /var.[A-Z][A-Za-z]*.=.function.[A-Z][A-Za-z]*\(props\).{/; 24 | const regexp4 = /_react2.default.createElement\(_[A-Z][A-Za-z]*|_react2.default.createElement\([A-Z][A-Za-z]*/; 25 | let fp = new qfgets(filename); 26 | const contObj: any = {}; 27 | const lineArr: any = []; 28 | let currentClass: string = ""; 29 | function loop() { 30 | for (let i = 0; i < 40; i++) { 31 | let line = fp.fgets(); 32 | if (line.match(regexp1)) { 33 | //finds root of React application in development 34 | currentClass = ""; 35 | } else if (regexp2.exec(line)) { 36 | // Get Class from line if class is present 37 | let cleanClass = regWithMe( 38 | line, 39 | /(?!_createClass)+\([A-Z][A-Za-z]*/ 40 | ); 41 | if (!contObj[cleanClass]) { //saves found class in return object 42 | contObj[cleanClass] = { props: [], parent: null }; 43 | } 44 | currentClass = cleanClass; 45 | } else if (regexp3.exec(line)) { 46 | // Grabs presentational Components if present 47 | let presComp = regWithMe(line, /[A-Z][A-Za-z]*/); 48 | if (!contObj[presComp]) { //saves found components in return object 49 | contObj[presComp] = { props: [], parent: null }; 50 | } 51 | currentClass = presComp; // prepare components to attach props if found next 52 | } else if (regexp4.exec(line)) { 53 | // Component creation with props and assigns to component 54 | let elementItem = regWithMe( 55 | line, 56 | /(?!_react2.default.createElement)\(_[A-Z][A-Za-z]*|(?!_react2.default.createElement)\([A-Z][A-Za-z]*/ 57 | ); 58 | let elementProps = regWithMe(line, /\{.+\}/); 59 | if (!elementProps) { 60 | elementProps = "null"; 61 | } 62 | if (!contObj[elementItem]) { //if return object does not contain current component, adds to object 63 | contObj[elementItem] = { props: [], parent: null }; 64 | } 65 | if (currentClass !== "") { //if current class has value, set parent/child relationship 66 | contObj[elementItem].parent = currentClass; 67 | } 68 | elementProps = elementProps 69 | .replace("{", "") 70 | .replace("}", "") 71 | .replace(" ", ""); 72 | let propArr = elementProps.split(/,|:/g); 73 | let propObj: any = {}; 74 | //parse through line from bundle containing React element props 75 | for (let i = 0; i < propArr.length - 1; i += 2) { 76 | let propsReg = /props.[A-Za-z]*|state.[A-Za-z]*/; 77 | if (propsReg.exec(propArr[i + 1])) { 78 | let val = regWithMe( 79 | propArr[i + 1], 80 | /props.[A-Za-z]*|state.[A-Za-z]*/ 81 | ); 82 | propObj[propArr[i].trim()] = val; 83 | } else { 84 | propObj[propArr[i].trim()] = propArr[i + 1].trim(); 85 | } 86 | } 87 | let propKeys = Object.keys(propObj); 88 | for (let i = 0; i < propKeys.length; i++) { 89 | if ( 90 | !propObj[propKeys[i]].includes("props") && 91 | !propObj[propKeys[i]].includes("state") 92 | ) { 93 | let lineArrInd = 0; 94 | while ( 95 | !lineArr[lineArrInd].includes("props") && 96 | !lineArr[lineArrInd].includes("state") && 97 | lineArrInd < 3 98 | ) { 99 | lineArrInd++; 100 | } 101 | if (lineArrInd < 3) { 102 | let prop = regWithMe( 103 | lineArr[lineArrInd], 104 | /props.[A-Za-z]*|state.[A-Za-z]*/ 105 | ); 106 | propObj[propKeys[i]] = prop; 107 | } 108 | } 109 | } 110 | contObj[elementItem].props = propObj; 111 | } 112 | lineArr.unshift(line); 113 | if (lineArr.length > 4) { 114 | lineArr.pop(); 115 | } 116 | } 117 | if (!fp.feof()) setImmediate(loop); 118 | /* Generate Component Tree file */ 119 | fs.writeFile( 120 | __dirname + "/../../server/componentTree.json", 121 | JSON.stringify(contObj), 122 | (err: any) => { 123 | if (err) console.log(err); 124 | } 125 | ); 126 | } 127 | loop(); 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noUnusedLocals": true, 4 | "noUnusedParameters": true, 5 | "noImplicitAny": true, 6 | "noImplicitReturns": true, 7 | "target": "es6", 8 | "module": "commonjs", 9 | "moduleResolution": "node", 10 | "rootDir": ".", 11 | "outDir": "out", 12 | "lib": [ "es2016" ], 13 | "sourceMap": true 14 | }, 15 | "exclude": [ 16 | "node_modules", 17 | "server" 18 | ] 19 | } -------------------------------------------------------------------------------- /images/ccon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/ccon.gif -------------------------------------------------------------------------------- /images/cdmount.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/cdmount.gif -------------------------------------------------------------------------------- /images/cocomp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/cocomp.gif -------------------------------------------------------------------------------- /images/cwmount.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/cwmount.gif -------------------------------------------------------------------------------- /images/impf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/impf.gif -------------------------------------------------------------------------------- /images/ireact.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/ireact.gif -------------------------------------------------------------------------------- /images/ired.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/ired.gif -------------------------------------------------------------------------------- /images/reducer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/reducer.gif -------------------------------------------------------------------------------- /images/rstore.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/rstore.gif -------------------------------------------------------------------------------- /images/scribe.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/scribe.gif -------------------------------------------------------------------------------- /images/tsp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/tsp.gif -------------------------------------------------------------------------------- /images/usage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactEdCoders/ReactEd/f82c51a8f3a856192379c73040fb14eed890e0ad/images/usage.gif -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reacted", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/mocha": { 8 | "version": "2.2.48", 9 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", 10 | "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", 11 | "dev": true 12 | }, 13 | "@types/node": { 14 | "version": "6.0.108", 15 | "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.108.tgz", 16 | "integrity": "sha512-5q14jNJCPW+Iwk6Y1JxtA7T5ov1aVRS2VA2PvRgFMZtCjoIo8WT1WO56dSV0MSiHR7BEoe2QNuXigBQNqbWdAw==", 17 | "dev": true 18 | }, 19 | "typescript": { 20 | "version": "2.8.3", 21 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", 22 | "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==", 23 | "dev": true 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reacted", 3 | "description": "Tools to enhance react development", 4 | "author": "Madalyn Baehre, Ben Gummelt, Jake Acosta, Robert P Gonzalez", 5 | "license": "MIT", 6 | "version": "0.0.1", 7 | "publisher": "vscode", 8 | "engines": { 9 | "vscode": "^1.1.5" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/ReactEdLLC/ReactEd" 14 | }, 15 | "scripts": { 16 | "postinstall": "cd server && npm install && cd ../client && npm install && cd ..", 17 | "compile": "tsc -p client/tsconfig.json && cd server && npm run installServer && cd .. && tsc -p server/tsconfig.json", 18 | "compile:client": "tsc -p client/tsconfig.json", 19 | "watch:client": "tsc -w -p client/tsconfig.json", 20 | "compile:server": "cd server && npm run installServer && cd .. && tsc -p server/tsconfig.json", 21 | "watch:server": "cd server && npm run installServer && cd .. && tsc -w -p server/tsconfig.json" 22 | }, 23 | "devDependencies": { 24 | "@types/mocha": "^2.2.48", 25 | "@types/node": "^6.0.101", 26 | "typescript": "^2.7.2" 27 | } 28 | } -------------------------------------------------------------------------------- /server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reacted", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "vscode-jsonrpc": { 8 | "version": "3.6.1", 9 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.6.1.tgz", 10 | "integrity": "sha512-+Eb+Dxf2kC2h079msx61hkblxAKE0S2j78+8QpnigLAO2aIIjkCwTIH34etBrU8E8VItRinec7YEwULx9at5bQ==" 11 | }, 12 | "vscode-languageserver": { 13 | "version": "4.1.2", 14 | "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-4.1.2.tgz", 15 | "integrity": "sha512-3iej2tuMaI9yirPXF7/fVyIvBhSzbwZ3EWFRb8bP6lc3tGv9SJHDaJLNyQMgo9J8CNpXil6dWarpJvGSA60v/w==", 16 | "requires": { 17 | "vscode-languageserver-protocol": "3.7.1", 18 | "vscode-uri": "1.0.3" 19 | } 20 | }, 21 | "vscode-languageserver-protocol": { 22 | "version": "3.7.1", 23 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.7.1.tgz", 24 | "integrity": "sha512-AKX9XQ49m/lpiDLZJBypFNc5eAXNlSecunYU5m4o5WIwGgW86TWnXVdziuFm47W2SdigDa/jVbxLPSNUeut9fQ==", 25 | "requires": { 26 | "vscode-jsonrpc": "3.6.1", 27 | "vscode-languageserver-types": "3.7.1" 28 | } 29 | }, 30 | "vscode-languageserver-types": { 31 | "version": "3.7.1", 32 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.7.1.tgz", 33 | "integrity": "sha512-ftGfU79AnnI3OHCG7kzCCN47jNI7BjECPAH2yhddtYTiQk0bnFbuFeQKvpXQcyNI3GsKEx5b6kSiBYshTiep6w==" 34 | }, 35 | "vscode-uri": { 36 | "version": "1.0.3", 37 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz", 38 | "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=" 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reacted", 3 | "description": "Tools to enhance react development", 4 | "version": "0.0.1", 5 | "author": "Madalyn Baehre, Ben Gummelt, Jake Acosta, Robert P Gonzalez", 6 | "license": "MIT", 7 | "engines": { 8 | "node": "*" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/ReactEdLLC/ReactEd" 13 | }, 14 | "dependencies": { 15 | "vscode-languageserver": "^4.1.2" 16 | }, 17 | "scripts": { 18 | "installServer": "installServerIntoExtension ../client ./package.json ./tsconfig.json", 19 | "compile": "installServerIntoExtension ../client ./package.json ./tsconfig.json && tsc -p .", 20 | "watch": "installServerIntoExtension ../client ./package.json ./tsconfig.json && tsc -w -p ." 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /server/src/server.ts: -------------------------------------------------------------------------------- 1 | /* -------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | * ------------------------------------------------------------------------------------------ */ 5 | "use strict"; 6 | 7 | import { 8 | createConnection, TextDocuments, TextDocument, Diagnostic, DiagnosticSeverity, 9 | ProposedFeatures, InitializeParams, DidChangeConfigurationNotification 10 | } from "vscode-languageserver"; 11 | const fs = require("fs"); 12 | 13 | // Create a connection for the server. The connection uses Node's IPC as a transport. 14 | // Also include all preview / proposed LSP features. 15 | let connection = createConnection(ProposedFeatures.all); 16 | 17 | // Create a simple text document manager. The text document manager 18 | // supports full document sync only 19 | //Grabs each text document currently open in VSCode 20 | let documents: TextDocuments = new TextDocuments(); 21 | 22 | let hasConfigurationCapability = false; 23 | let hasWorkspaceFolderCapability = false; 24 | 25 | connection.onInitialize((params: InitializeParams) => { 26 | let capabilities = params.capabilities; 27 | 28 | // Does the client support the `workspace/configuration` request? 29 | // If not, we will fall back using global settings 30 | hasConfigurationCapability = capabilities.workspace && !!capabilities.workspace.configuration; 31 | hasWorkspaceFolderCapability = capabilities.workspace && !!capabilities.workspace.workspaceFolders; 32 | 33 | return { 34 | capabilities: { 35 | textDocumentSync: documents.syncKind 36 | } 37 | }; 38 | }); 39 | 40 | connection.onInitialized(() => { 41 | if (hasConfigurationCapability) { 42 | connection.client.register(DidChangeConfigurationNotification.type, undefined); 43 | } 44 | if (hasWorkspaceFolderCapability) { 45 | connection.workspace.onDidChangeWorkspaceFolders((_event) => { 46 | connection.console.log('Workspace folder change event received.'); 47 | }); 48 | } 49 | }); 50 | 51 | // The example settings 52 | interface ReactEdSettings { 53 | maxNumberOfProblems: number; 54 | } 55 | 56 | // The global settings, used when the `workspace/configuration` request is not supported by the client. 57 | // Please note that this is not the case when using this server with the client provided in this example 58 | // but could happen with other clients. 59 | const defaultSettings: ReactEdSettings = { maxNumberOfProblems: 1000 }; 60 | let globalSettings: ReactEdSettings = defaultSettings; 61 | 62 | // Cache the settings of all open documents 63 | let documentSettings: Map> = new Map(); 64 | 65 | connection.onDidChangeConfiguration(change => { 66 | if (hasConfigurationCapability) { 67 | // Reset all cached document settings 68 | documentSettings.clear(); 69 | } else { 70 | globalSettings = (change.settings.reacted || 71 | defaultSettings); 72 | } 73 | 74 | // Revalidate all open text documents 75 | documents.all().forEach(validateTextDocument); 76 | }); 77 | 78 | function getDocumentSettings(resource: string): Thenable { 79 | if (!hasConfigurationCapability) { 80 | return Promise.resolve(globalSettings); 81 | } 82 | let result = documentSettings.get(resource); 83 | if (!result) { 84 | result = connection.workspace.getConfiguration({ scopeUri: resource }); 85 | documentSettings.set(resource, result); 86 | } 87 | return result; 88 | } 89 | 90 | // Only keep settings for open documents 91 | documents.onDidClose(e => { 92 | documentSettings.delete(e.document.uri); 93 | }); 94 | 95 | // The content of a text document has changed. This event is emitted 96 | // when the text document first opened or when its content has changed. 97 | documents.onDidChangeContent(change => { 98 | validateTextDocument(change.document); 99 | }); 100 | 101 | async function validateTextDocument(textDocument: TextDocument): Promise { 102 | // Trying to dynamically make props obj 103 | //traces path of props from state through children 104 | function traceProp(comp: string, prop: string, obj: any): boolean { 105 | let props = obj[comp].props; 106 | 107 | let parent = obj[comp].parent; 108 | if (props[prop] && props[prop].includes("state")) { 109 | return true; 110 | } else { 111 | if (parent && props[prop]) { 112 | let newProp = props[prop].substr(6, props[prop].length - 6); 113 | return traceProp(parent, newProp, obj); 114 | } else { 115 | return false; 116 | } 117 | } 118 | } 119 | //returns props passed from state to component 120 | function recurseItUp(comp: string, obj: any): any { 121 | let propObj: any = {}; 122 | propObj.state = []; 123 | propObj.parent = []; 124 | 125 | let props = obj[comp].props; 126 | 127 | let parent = obj[comp].parent; 128 | 129 | for (let key in props) { 130 | if (props[key].includes("state")) { 131 | propObj.state.push(key); 132 | } else { 133 | if (parent) { 134 | let prop = props[key].substr(6, props[key].length - 6); 135 | let push = traceProp(parent, prop, obj); 136 | if (push) { 137 | propObj.state.push(key); 138 | } else { 139 | propObj.parent.push(key); 140 | } 141 | } 142 | } 143 | } 144 | return propObj; 145 | } 146 | 147 | //parses through component tree file to create component/props obj & component array 148 | 149 | let content = fs.readFileSync( 150 | __dirname + "/componentTree.json" 151 | ); 152 | let tree = JSON.parse(content.toString()); 153 | 154 | // In this simple example we get the settings for every validate run. 155 | let settings = await getDocumentSettings(textDocument.uri); 156 | // The validator creates diagnostics for all uppercase words length 2 and more 157 | let text = textDocument.getText(); 158 | let ImPattern = /class.[A-Z].*|const.[A-Z].*|let.[A-Z].*/g; 159 | let n: RegExpExecArray; 160 | let o: RegExpExecArray; 161 | 162 | let problems = 0; 163 | let diagnostics: Diagnostic[] = []; 164 | //iterates through text documents open in VSCode looking for instances of regex matches; assigns as problem to underline and show props 165 | while ( 166 | (n = ImPattern.exec(text)) && 167 | problems < settings.maxNumberOfProblems 168 | ) { 169 | let ImPatternCheck = /[A-Z][A-Za-z]*/; 170 | if (ImPatternCheck.exec(n[0])) { 171 | o = ImPatternCheck.exec(n[0]); 172 | let propsObj; 173 | 174 | propsObj = recurseItUp(o[0], tree); 175 | let messageStr: string = ''; 176 | if (propsObj.state.length > 0) messageStr += `Passed from state: ${JSON.stringify(propsObj.state)}`; 177 | if (messageStr != '') messageStr += '\n'; 178 | if (propsObj.parent.length > 0) messageStr += `Passed from parent: ${JSON.stringify(propsObj.parent)}`; 179 | if (messageStr === '') messageStr += 'No Props passed'; 180 | problems++; 181 | //generate diagnostic object with prop information/relationships 182 | diagnostics.push({ 183 | severity: DiagnosticSeverity.Warning, 184 | range: { 185 | start: textDocument.positionAt(n.index + o.index), 186 | end: textDocument.positionAt(n.index + o[0].length + o.index) 187 | }, 188 | message: messageStr, 189 | source: "ReactEd" 190 | }); 191 | } 192 | } 193 | 194 | // Send the computed diagnostics to VSCode. 195 | connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); 196 | } 197 | 198 | // Make the text document manager listen on the connection 199 | // for open, change and close text document events 200 | documents.listen(connection); 201 | 202 | // Listen on the connection 203 | connection.listen(); 204 | 205 | 206 | -------------------------------------------------------------------------------- /server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noUnusedLocals": true, 4 | "noUnusedParameters": true, 5 | "noImplicitAny": true, 6 | "noImplicitReturns": true, 7 | "target": "es6", 8 | "module": "commonjs", 9 | "moduleResolution": "node", 10 | "sourceMap": true, 11 | "lib" : [ "es2016" ], 12 | "outDir": "../client/server" 13 | }, 14 | "exclude": [ 15 | "node_modules" 16 | ] 17 | } --------------------------------------------------------------------------------