├── LICENSE ├── README.md ├── bin ├── index.js └── public │ ├── data.json │ ├── favicon.ico │ ├── index.html │ └── main.js ├── package-lock.json └── package.json /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Chandrahass Tvs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Lint Visualizer 4 |

5 | 6 | > Lint Visualizer provides a smart way to view your project's lint errors & warnings as actionable items 7 | 8 | 9 | 10 | It's time to say BYE BYE to the old-school terminal based output for your lint errors/warnings. With the all new **Lint Visualizer**, you will now have a clear way to visualize your lint errors/warnings and keep track of them as they are being fixed. It comes with a couple of handy features that help you to clearly work on the errors/warnings and easily launch google search for the fix. 11 | 12 | > *Currently supports only **Angular** based projects* 13 | 14 | 15 | ## Highlights 16 | 17 | - Issues are grouped as Errors/Warnings 18 | - Resolved issues can be viewed under a separate section 19 | - Easy to copy the results in **JSON** format 20 | - Search for the issue in google by clicking on the issue title 21 | 22 | 23 | ## Installation 24 | 25 | Use the package manager **npm** to install lint-visualizer. 26 | 27 | ```bash 28 | npm install -D lint-visualizer 29 | ``` 30 | 31 | 32 | ## Usage 33 | 34 | Add the following line to the `package.json` under the scripts section 35 | 36 | ``` 37 | "scripts": { 38 | 39 | ... 40 | 41 | "lint-visualizer": "lint-visualizer -p [options]" 42 | } 43 | ``` 44 | 45 | Now run the following command to see the **Lint Visualizer** in action 46 | 47 | ``` 48 | $ npm run lint-visualizer 49 | ``` 50 | 51 | The results will be available at [http://localhost:8080](http://localhost:8080) once the command is executed successfully 52 | 53 | 54 | ## Options 55 | 56 | | Option | Alias | Description | 57 | | :---: | :---: | :---: | 58 | | `-configuration` | `-c` | Specify the configuration to use | 59 | | `-tslint-config` | `-tc` | The name of the TSLint configuration file | 60 | 61 | 62 | ## Roadmap 🚀 63 | 64 | Looking to improve this tool by adding more features going forward as mentioned below: 65 | 66 | - Support for the other frameworks and libraries 67 | - Ability to Filter/Sort the results 68 | - Results history with timestamp 69 | - Easy to use light-weight hosted application 70 | 71 | 72 | ## License 73 | 74 | ![GitHub](https://img.shields.io/github/license/chandrahasstvs/lint-visualizer) 75 | -------------------------------------------------------------------------------- /bin/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const chalk = require("chalk"); 4 | const exec = require("child_process").exec; 5 | const spawn = require("child_process").spawn; 6 | const yargs = require("yargs"); 7 | const fileSystem = require('fs'); 8 | var parser = require('xml2json'); 9 | 10 | const options = yargs 11 | .usage("Usage: lint-visualizer -p [options]") 12 | .option("p", { 13 | alias: "project", 14 | describe: "Project Name", 15 | type: "string", 16 | demandOption: true, 17 | }).option("configuration", { 18 | alias: "c", 19 | describe: "Specify the configuration to use", 20 | type: "string", 21 | demandOption: false, 22 | }).option("tslint-config", { 23 | alias: "tc", 24 | describe: "The name of the TSLint configuration file", 25 | type: "string", 26 | demandOption: false, 27 | }).argv; 28 | 29 | const red = chalk.keyword("red"); 30 | const yellow = chalk.keyword("yellow"); 31 | const orange = chalk.keyword("orange"); 32 | const green = chalk.green; 33 | const blue = chalk.blue; 34 | var warnings = []; 35 | var errors = []; 36 | 37 | executeLintCommand(); 38 | 39 | 40 | function executeLintCommand() { 41 | console.log(blue.bold("Please wait while we scan your project for lint issues")); 42 | const command = spawn('ng', getArgs()); 43 | var output = ""; 44 | command.stdout.on('data', (data) => { 45 | output += data; 46 | }); 47 | 48 | command.stderr.on('data', (data) => { 49 | console.log(yellow(data)); 50 | }); 51 | 52 | command.on('error', (error) => { 53 | console.log(red(error)); 54 | }); 55 | 56 | command.on('close', (code) => { 57 | if (!code) { 58 | console.log(green.bold("\nScan completed successfully!\n")); 59 | processLintOutput(xmlToJson(JSON.parse(parser.toJson(output)))); 60 | } 61 | }); 62 | } 63 | 64 | function getArgs() { 65 | const cmdArgs = ['lint', options.p || "", '--format', 'checkstyle']; 66 | if (options.c) { 67 | cmdArgs = cmdArgs.concat(['--configuration', options.c]); 68 | } 69 | if (options.tc) { 70 | cmdArgs = cmdArgs.concat(['--tslint-config', options.tc]); 71 | } 72 | return cmdArgs; 73 | } 74 | 75 | function xmlToJson(output) { 76 | var array = []; 77 | output.checkstyle.file.forEach(item => { 78 | item.error = item.error.map(el => { 79 | el.name = item.name; 80 | el.source = (el.source || '').split('.')[2]; 81 | return el; 82 | }) 83 | array = array.concat(item.error); 84 | }); 85 | return array; 86 | } 87 | 88 | function processLintOutput(output) { 89 | output = output.filter((item, index) => output.findIndex(element => 90 | element.column === item.column 91 | && element.line === item.line 92 | && element.column === item.column 93 | && element.line === item.line 94 | && element.message === item.message 95 | && element.name === item.name 96 | && element.source === item.source 97 | && element.severity === item.severity 98 | ) === index && (item.id = index + 1)); 99 | 100 | 101 | if (output.length) { 102 | warnings = output.filter(item=> item.severity.toLowerCase() === "warning"); 103 | errors = output.filter(item => item.severity.toLowerCase() === "error"); 104 | 105 | if (errors.length) { 106 | console.log(red("Error(s): " + errors.length)); 107 | } 108 | 109 | if (warnings.length) { 110 | console.log(orange("Warning(s): " + warnings.length)); 111 | } 112 | showOutput(); 113 | } 114 | } 115 | 116 | function showOutput() { 117 | let data = JSON.stringify({projectName: options.project, errors, warnings}); 118 | fileSystem.writeFileSync(`${__dirname}/public/data.json`, data); 119 | process.chdir(__dirname); 120 | exec('http-server -c-1'); 121 | console.log('\nResults avaibale at:'); 122 | console.log(` http://localhost:${green(8080)}`); 123 | console.log(` http://127.0.0.1:${green(8080)}`); 124 | } 125 | -------------------------------------------------------------------------------- /bin/public/data.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChandrahassTvs/lint-visualizer/286b317fbd4fbb4dde6b58d86ef2deabd1344a3c/bin/public/data.json -------------------------------------------------------------------------------- /bin/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChandrahassTvs/lint-visualizer/286b317fbd4fbb4dde6b58d86ef2deabd1344a3c/bin/public/favicon.ico -------------------------------------------------------------------------------- /bin/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Lint Visualizer 8 | 9 | 10 | 11 | 12 | 25 | 26 | 27 |
28 |
29 |
LINT Visualizer
30 | 104 |
105 |
106 |
107 |
108 |
109 |
110 | 111 | 112 | 113 |
114 |
115 |
116 |
117 | Errors 118 |
119 |
120 | 0 121 |
122 |
123 |
124 |
125 |
126 |
127 | 128 | 129 | 130 |
131 |
132 |
133 |
134 | Warnings 135 |
136 |
137 | 0 138 |
139 |
140 |
141 |
142 |
143 |
144 | 145 | 146 | 147 |
148 |
149 |
150 |
151 | Resolved 152 |
153 |
154 | 0 / 0 155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 | 163 | 165 |
166 | 180 |
181 |
182 | 183 |
184 | 202 |
203 |
204 |
205 | 206 | 207 | -------------------------------------------------------------------------------- /bin/public/main.js: -------------------------------------------------------------------------------- 1 | // Html Refereces 2 | 3 | var errorsCountHtml = document.getElementById('errors-count'); 4 | var warningsCountHtml = document.getElementById('warnings-count'); 5 | var resolvedCountHtml = document.getElementById('resolved-count'); 6 | var totalCountHtml = document.getElementById('total-count'); 7 | var fromCountHtml = document.getElementById('from-count'); 8 | var toCountHtml = document.getElementById('to-count'); 9 | var totalSectionHtml = document.getElementById('total-section'); 10 | var totalSectionCountHtml = document.getElementById('total-section-count'); 11 | var totalSectionTextHtml = document.getElementById('total-section-text'); 12 | 13 | var errorsButtonHtml = document.getElementById('errors-button'); 14 | var warningsButtonHtml = document.getElementById('warnings-button'); 15 | var resolvedButtonHtml = document.getElementById('resolved-button'); 16 | 17 | var indicatorOuterHtml = document.getElementById('indicator-outer'); 18 | var indicatorInnerHtml = document.getElementById('indicator-inner'); 19 | 20 | var resultsListHtml = document.getElementById('results-list'); 21 | var checkAllHtml = document.getElementById('check-all'); 22 | 23 | var copyToClipboardHtml = document.getElementById('copy-to-clipboard'); 24 | var copyToClipboardTooltipHtml = document.getElementById('copy-to-clipboard-tooltip'); 25 | 26 | var projectNameHtml = document.getElementById('project-name'); 27 | 28 | var paginationHtml = document.getElementById('pagination'); 29 | var nextHtml = document.getElementById('next'); 30 | var previousHtml = document.getElementById('previous'); 31 | 32 | const STATUS = { 33 | Errors: 'errors', 34 | Warnings: 'warnings', 35 | Resolved: 'resolved' 36 | } 37 | 38 | const COLOUR = { 39 | Errors: 'red', 40 | Warnings: 'orange', 41 | Resolved: 'green' 42 | } 43 | 44 | const MAX_PAGE_SIZE = 50; 45 | 46 | var results = {}; 47 | var resolvedCount = 0; 48 | var currentStatus = STATUS.Errors; 49 | var currentPage = 1; 50 | var totalPages = 1; 51 | 52 | getResults(); 53 | initiateListeners(); 54 | 55 | function initiateListeners() { 56 | errorsButtonHtml.addEventListener('click', (e) => { 57 | currentPage = 1; 58 | currentStatus = STATUS.Errors; 59 | setCheckAll(); 60 | setResults(); 61 | }); 62 | warningsButtonHtml.addEventListener('click', (e) => { 63 | currentPage = 1; 64 | currentStatus = STATUS.Warnings; 65 | setCheckAll(); 66 | setResults(); 67 | }); 68 | resolvedButtonHtml.addEventListener('click', (e) => { 69 | currentPage = 1; 70 | currentStatus = STATUS.Resolved; 71 | setCheckAll(); 72 | setResults(); 73 | }); 74 | } 75 | 76 | function getResults() { 77 | fetch('/data.json') 78 | .then(response => response.text()) 79 | .then(data => { 80 | results = data && data.length ? JSON.parse(data) : {projectName: '-', errors: [], warnings: []}; 81 | projectNameHtml.innerHTML = results.projectName; 82 | displayResults(); 83 | }); 84 | } 85 | 86 | function displayResults() { 87 | setCount(); 88 | setCurrentStatus(); 89 | setResults(); 90 | } 91 | 92 | function setCurrentStatus() { 93 | if (!results.errors.length && results.warnings.length) { 94 | currentStatus = STATUS.Warnings; 95 | } 96 | } 97 | 98 | function setResults() { 99 | const items = (currentStatus === STATUS.Errors ? results.errors : currentStatus === STATUS.Warnings ? results.warnings : 100 | [...results.errors, ...results.warnings].filter(item => item.isResolved)); 101 | 102 | totalSectionCountHtml.innerText = items.length; 103 | totalSectionTextHtml.innerText = currentStatus; 104 | 105 | indicatorOuterHtml.classList.remove(`bg-${COLOUR.Errors}-200`, `bg-${COLOUR.Warnings}-200`, `bg-${COLOUR.Resolved}-200`); 106 | indicatorInnerHtml.classList.remove(`bg-${COLOUR.Errors}-600`, `bg-${COLOUR.Warnings}-600`, `bg-${COLOUR.Resolved}-600`); 107 | 108 | indicatorOuterHtml.classList.add(`bg-${getColourByStatus(currentStatus)}-200`); 109 | indicatorInnerHtml.classList.add(`bg-${getColourByStatus(currentStatus)}-600`); 110 | 111 | warningsButtonHtml.classList.remove(`border-${COLOUR.Warnings}-600`); 112 | errorsButtonHtml.classList.remove(`border-${COLOUR.Errors}-600`); 113 | resolvedButtonHtml.classList.remove(`border-${COLOUR.Resolved}-600`); 114 | 115 | switch (currentStatus) { 116 | case STATUS.Errors: 117 | errorsButtonHtml.classList.add(`border-${getColourByStatus(currentStatus)}-600`); 118 | break; 119 | case STATUS.Warnings: 120 | warningsButtonHtml.classList.add(`border-${getColourByStatus(currentStatus)}-600`); 121 | break; 122 | case STATUS.Resolved: 123 | resolvedButtonHtml.classList.add(`border-${getColourByStatus(currentStatus)}-600`); 124 | break; 125 | } 126 | 127 | totalPages = Math.ceil(items.length / MAX_PAGE_SIZE); 128 | if (totalPages > 1) { 129 | paginationHtml.classList.remove('hidden'); 130 | } else { 131 | paginationHtml.classList.add('hidden'); 132 | } 133 | handlePaginationButtons(); 134 | resultsListHtml.innerHTML = getFormattedResults(items); 135 | if (!(resultsListHtml.innerHTML.length) && currentPage > 1) { 136 | previousPage(); 137 | } 138 | } 139 | 140 | function getColourByStatus(status) { 141 | switch(status) { 142 | case STATUS.Errors: 143 | return COLOUR.Errors; 144 | case STATUS.Warnings: 145 | return COLOUR.Warnings; 146 | case STATUS.Resolved: 147 | return COLOUR.Resolved; 148 | } 149 | } 150 | 151 | function getFormattedResults(results) { 152 | var items = ''; 153 | const startIndex = (currentPage - 1) * MAX_PAGE_SIZE; 154 | const endIndex = startIndex + MAX_PAGE_SIZE; 155 | 156 | fromCountHtml.innerText = results.length ? (startIndex + 1) : 0; 157 | toCountHtml.innerText = results.length < endIndex ? results.length : endIndex; 158 | 159 | if (results.length) { 160 | results.forEach((item, index) => { 161 | if (index >= startIndex && index < endIndex) { 162 | items += `
163 |
164 | 165 |
166 |
167 | 168 | 169 | ${item.message} 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 |
${item.name} [${item.line}, ${item.column}]
179 | ${item.source ? `
180 | ${item.source} 181 |
` : ''} 182 |
183 |
`; 184 | } 185 | }); 186 | } else { 187 | items += getPlaceholder(); 188 | } 189 | return items; 190 | } 191 | 192 | function getPlaceholder() { 193 | switch(currentStatus) { 194 | case STATUS.Errors: 195 | return `
196 |
Awesome Job! 🎉
197 |
Your project is clean with no lint errors
198 |
`; 199 | case STATUS.Warnings: 200 | return `
201 |
Thats Great! 🎊
202 |
Your project is great with no lint warnings
203 |
`; 204 | case STATUS.Resolved: 205 | return `
206 |
${(results.errors.length || results.warnings.length) ? 'Nothing Yet Here! 🙂' : 'All Clear Here! 😉'}
207 |
${(results.errors.length || results.warnings.length) ? 'Issues get listed here as they are marked as resolved' : 'Project with no lint issues has nothing to resolve'}
208 |
`; 209 | } 210 | } 211 | 212 | function setCount() { 213 | errorsCountHtml.innerText = results.errors.length; 214 | warningsCountHtml.innerText = results.warnings.length; 215 | resolvedCountHtml.innerText = resolvedCount; 216 | totalCountHtml.innerText = results.errors.length + results.warnings.length; 217 | } 218 | 219 | function setResolvedCount() { 220 | resolvedCount = ([...results.errors, ...results.warnings].filter(item => item.isResolved)).length; 221 | resolvedCountHtml.innerText = resolvedCount; 222 | } 223 | 224 | function toggleResolved(checkboxId) { 225 | var checkBox = document.getElementById(checkboxId); 226 | // If the checkbox is checked, display the output text 227 | const item = [...results.errors, ...results.warnings].find(element => element.id == checkboxId); 228 | if (item && checkBox.checked){ 229 | item.isResolved = true; 230 | } else { 231 | item.isResolved = false; 232 | } 233 | setResolvedCount(); 234 | 235 | if (currentStatus === STATUS.Resolved) { 236 | setResults(); 237 | } 238 | setCheckAll(); 239 | } 240 | 241 | function toggleAllResolved() { 242 | const items = (currentStatus === STATUS.Errors ? results.errors : currentStatus === STATUS.Warnings ? results.warnings : 243 | [...results.errors, ...results.warnings].filter(item => item.isResolved)); 244 | 245 | if (checkAllHtml.checked) { 246 | items.forEach(element => element.isResolved = true); 247 | } else { 248 | items.forEach(element => element.isResolved = false); 249 | } 250 | setResolvedCount(); 251 | setResults(); 252 | setCheckAll(); 253 | } 254 | 255 | 256 | function setCheckAll() { 257 | const items = (currentStatus === STATUS.Errors ? results.errors : currentStatus === STATUS.Warnings ? results.warnings : 258 | [...results.errors, ...results.warnings].filter(item => item.isResolved)); 259 | checkAllHtml.checked = items.length && items.every(element => element.isResolved); 260 | } 261 | 262 | function copyToClipboard() { 263 | document.addEventListener('copy', copyData); 264 | document.execCommand("copy"); 265 | document.removeEventListener('copy', copyData); 266 | 267 | copyToClipboardHtml.addEventListener('mouseenter', (e) => { 268 | copyToClipboardTooltipHtml.innerHTML = 'Copy Results JSON'; 269 | }) 270 | copyToClipboardTooltipHtml.innerHTML = ` 271 | 272 | Copied!`; 273 | } 274 | 275 | function copyData(e) { 276 | const data = JSON.stringify(results, null, 4); 277 | e.clipboardData.setData('text/plain', data); 278 | e.preventDefault(); 279 | } 280 | 281 | function nextPage() { 282 | currentPage++; 283 | setResults(); 284 | } 285 | 286 | function previousPage() { 287 | currentPage--; 288 | setResults(); 289 | } 290 | 291 | function handlePaginationButtons() { 292 | if (currentPage > 1) { 293 | previousHtml.classList.remove('hidden'); 294 | } else { 295 | previousHtml.classList.add('hidden'); 296 | } 297 | 298 | if (currentPage < totalPages) { 299 | nextHtml.classList.remove('hidden'); 300 | } else { 301 | nextHtml.classList.add('hidden'); 302 | } 303 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lint-visualizer", 3 | "version": "1.0.5", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ansi-regex": { 8 | "version": "4.1.0", 9 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 10 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" 11 | }, 12 | "ansi-styles": { 13 | "version": "3.2.1", 14 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 15 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 16 | "requires": { 17 | "color-convert": "^1.9.0" 18 | } 19 | }, 20 | "async": { 21 | "version": "2.6.3", 22 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", 23 | "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", 24 | "requires": { 25 | "lodash": "^4.17.14" 26 | } 27 | }, 28 | "basic-auth": { 29 | "version": "1.1.0", 30 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", 31 | "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=" 32 | }, 33 | "bindings": { 34 | "version": "1.5.0", 35 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 36 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 37 | "requires": { 38 | "file-uri-to-path": "1.0.0" 39 | } 40 | }, 41 | "camelcase": { 42 | "version": "5.3.1", 43 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 44 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 45 | }, 46 | "chalk": { 47 | "version": "2.4.2", 48 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 49 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 50 | "requires": { 51 | "ansi-styles": "^3.2.1", 52 | "escape-string-regexp": "^1.0.5", 53 | "supports-color": "^5.3.0" 54 | } 55 | }, 56 | "cliui": { 57 | "version": "5.0.0", 58 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 59 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 60 | "requires": { 61 | "string-width": "^3.1.0", 62 | "strip-ansi": "^5.2.0", 63 | "wrap-ansi": "^5.1.0" 64 | } 65 | }, 66 | "color-convert": { 67 | "version": "1.9.3", 68 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 69 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 70 | "requires": { 71 | "color-name": "1.1.3" 72 | } 73 | }, 74 | "color-name": { 75 | "version": "1.1.3", 76 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 77 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 78 | }, 79 | "colors": { 80 | "version": "1.4.0", 81 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 82 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" 83 | }, 84 | "corser": { 85 | "version": "2.0.1", 86 | "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", 87 | "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=" 88 | }, 89 | "cross-spawn": { 90 | "version": "6.0.5", 91 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 92 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 93 | "requires": { 94 | "nice-try": "^1.0.4", 95 | "path-key": "^2.0.1", 96 | "semver": "^5.5.0", 97 | "shebang-command": "^1.2.0", 98 | "which": "^1.2.9" 99 | } 100 | }, 101 | "debug": { 102 | "version": "3.2.6", 103 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 104 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 105 | "requires": { 106 | "ms": "^2.1.1" 107 | } 108 | }, 109 | "decamelize": { 110 | "version": "1.2.0", 111 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 112 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 113 | }, 114 | "ecstatic": { 115 | "version": "3.3.2", 116 | "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", 117 | "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", 118 | "requires": { 119 | "he": "^1.1.1", 120 | "mime": "^1.6.0", 121 | "minimist": "^1.1.0", 122 | "url-join": "^2.0.5" 123 | } 124 | }, 125 | "emoji-regex": { 126 | "version": "7.0.3", 127 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 128 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" 129 | }, 130 | "end-of-stream": { 131 | "version": "1.4.4", 132 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 133 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 134 | "requires": { 135 | "once": "^1.4.0" 136 | } 137 | }, 138 | "escape-string-regexp": { 139 | "version": "1.0.5", 140 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 141 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 142 | }, 143 | "eventemitter3": { 144 | "version": "4.0.7", 145 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 146 | "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" 147 | }, 148 | "execa": { 149 | "version": "1.0.0", 150 | "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 151 | "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", 152 | "requires": { 153 | "cross-spawn": "^6.0.0", 154 | "get-stream": "^4.0.0", 155 | "is-stream": "^1.1.0", 156 | "npm-run-path": "^2.0.0", 157 | "p-finally": "^1.0.0", 158 | "signal-exit": "^3.0.0", 159 | "strip-eof": "^1.0.0" 160 | } 161 | }, 162 | "file-uri-to-path": { 163 | "version": "1.0.0", 164 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 165 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 166 | }, 167 | "find-up": { 168 | "version": "3.0.0", 169 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 170 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 171 | "requires": { 172 | "locate-path": "^3.0.0" 173 | } 174 | }, 175 | "follow-redirects": { 176 | "version": "1.13.0", 177 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", 178 | "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" 179 | }, 180 | "get-caller-file": { 181 | "version": "2.0.5", 182 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 183 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 184 | }, 185 | "get-stream": { 186 | "version": "4.1.0", 187 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 188 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 189 | "requires": { 190 | "pump": "^3.0.0" 191 | } 192 | }, 193 | "has-flag": { 194 | "version": "3.0.0", 195 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 196 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 197 | }, 198 | "he": { 199 | "version": "1.2.0", 200 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 201 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" 202 | }, 203 | "hoek": { 204 | "version": "4.2.1", 205 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", 206 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" 207 | }, 208 | "http-proxy": { 209 | "version": "1.18.1", 210 | "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", 211 | "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", 212 | "requires": { 213 | "eventemitter3": "^4.0.0", 214 | "follow-redirects": "^1.0.0", 215 | "requires-port": "^1.0.0" 216 | } 217 | }, 218 | "http-server": { 219 | "version": "0.12.3", 220 | "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", 221 | "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", 222 | "requires": { 223 | "basic-auth": "^1.0.3", 224 | "colors": "^1.4.0", 225 | "corser": "^2.0.1", 226 | "ecstatic": "^3.3.2", 227 | "http-proxy": "^1.18.0", 228 | "minimist": "^1.2.5", 229 | "opener": "^1.5.1", 230 | "portfinder": "^1.0.25", 231 | "secure-compare": "3.0.1", 232 | "union": "~0.5.0" 233 | } 234 | }, 235 | "invert-kv": { 236 | "version": "2.0.0", 237 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", 238 | "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" 239 | }, 240 | "is-fullwidth-code-point": { 241 | "version": "2.0.0", 242 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 243 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 244 | }, 245 | "is-stream": { 246 | "version": "1.1.0", 247 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 248 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 249 | }, 250 | "isemail": { 251 | "version": "3.2.0", 252 | "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", 253 | "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", 254 | "requires": { 255 | "punycode": "2.x.x" 256 | } 257 | }, 258 | "isexe": { 259 | "version": "2.0.0", 260 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 261 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 262 | }, 263 | "joi": { 264 | "version": "13.7.0", 265 | "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", 266 | "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", 267 | "requires": { 268 | "hoek": "5.x.x", 269 | "isemail": "3.x.x", 270 | "topo": "3.x.x" 271 | }, 272 | "dependencies": { 273 | "hoek": { 274 | "version": "5.0.4", 275 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", 276 | "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==" 277 | } 278 | } 279 | }, 280 | "lcid": { 281 | "version": "2.0.0", 282 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", 283 | "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", 284 | "requires": { 285 | "invert-kv": "^2.0.0" 286 | } 287 | }, 288 | "locate-path": { 289 | "version": "3.0.0", 290 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 291 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 292 | "requires": { 293 | "p-locate": "^3.0.0", 294 | "path-exists": "^3.0.0" 295 | } 296 | }, 297 | "lodash": { 298 | "version": "4.17.20", 299 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 300 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" 301 | }, 302 | "map-age-cleaner": { 303 | "version": "0.1.3", 304 | "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 305 | "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 306 | "requires": { 307 | "p-defer": "^1.0.0" 308 | } 309 | }, 310 | "mem": { 311 | "version": "4.3.0", 312 | "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", 313 | "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", 314 | "requires": { 315 | "map-age-cleaner": "^0.1.1", 316 | "mimic-fn": "^2.0.0", 317 | "p-is-promise": "^2.0.0" 318 | } 319 | }, 320 | "mime": { 321 | "version": "1.6.0", 322 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 323 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 324 | }, 325 | "mimic-fn": { 326 | "version": "2.1.0", 327 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 328 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 329 | }, 330 | "minimist": { 331 | "version": "1.2.5", 332 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 333 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 334 | }, 335 | "mkdirp": { 336 | "version": "0.5.5", 337 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 338 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 339 | "requires": { 340 | "minimist": "^1.2.5" 341 | } 342 | }, 343 | "ms": { 344 | "version": "2.1.2", 345 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 346 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 347 | }, 348 | "nan": { 349 | "version": "2.14.1", 350 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", 351 | "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" 352 | }, 353 | "nice-try": { 354 | "version": "1.0.5", 355 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 356 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" 357 | }, 358 | "node-expat": { 359 | "version": "2.3.18", 360 | "resolved": "https://registry.npmjs.org/node-expat/-/node-expat-2.3.18.tgz", 361 | "integrity": "sha512-9dIrDxXePa9HSn+hhlAg1wXkvqOjxefEbMclGxk2cEnq/Y3U7Qo5HNNqeo3fQ4bVmLhcdt3YN1TZy7WMZy4MHw==", 362 | "requires": { 363 | "bindings": "^1.5.0", 364 | "nan": "^2.13.2" 365 | } 366 | }, 367 | "npm-run-path": { 368 | "version": "2.0.2", 369 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 370 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 371 | "requires": { 372 | "path-key": "^2.0.0" 373 | } 374 | }, 375 | "once": { 376 | "version": "1.4.0", 377 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 378 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 379 | "requires": { 380 | "wrappy": "1" 381 | } 382 | }, 383 | "opener": { 384 | "version": "1.5.2", 385 | "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", 386 | "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" 387 | }, 388 | "os-locale": { 389 | "version": "3.1.0", 390 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", 391 | "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", 392 | "requires": { 393 | "execa": "^1.0.0", 394 | "lcid": "^2.0.0", 395 | "mem": "^4.0.0" 396 | } 397 | }, 398 | "p-defer": { 399 | "version": "1.0.0", 400 | "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 401 | "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" 402 | }, 403 | "p-finally": { 404 | "version": "1.0.0", 405 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 406 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 407 | }, 408 | "p-is-promise": { 409 | "version": "2.1.0", 410 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", 411 | "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" 412 | }, 413 | "p-limit": { 414 | "version": "2.3.0", 415 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 416 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 417 | "requires": { 418 | "p-try": "^2.0.0" 419 | } 420 | }, 421 | "p-locate": { 422 | "version": "3.0.0", 423 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 424 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 425 | "requires": { 426 | "p-limit": "^2.0.0" 427 | } 428 | }, 429 | "p-try": { 430 | "version": "2.2.0", 431 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 432 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 433 | }, 434 | "path-exists": { 435 | "version": "3.0.0", 436 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 437 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" 438 | }, 439 | "path-key": { 440 | "version": "2.0.1", 441 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 442 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 443 | }, 444 | "portfinder": { 445 | "version": "1.0.28", 446 | "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", 447 | "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", 448 | "requires": { 449 | "async": "^2.6.2", 450 | "debug": "^3.1.1", 451 | "mkdirp": "^0.5.5" 452 | } 453 | }, 454 | "pump": { 455 | "version": "3.0.0", 456 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 457 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 458 | "requires": { 459 | "end-of-stream": "^1.1.0", 460 | "once": "^1.3.1" 461 | } 462 | }, 463 | "punycode": { 464 | "version": "2.1.1", 465 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 466 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 467 | }, 468 | "qs": { 469 | "version": "6.9.4", 470 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", 471 | "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" 472 | }, 473 | "require-directory": { 474 | "version": "2.1.1", 475 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 476 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 477 | }, 478 | "require-main-filename": { 479 | "version": "2.0.0", 480 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 481 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 482 | }, 483 | "requires-port": { 484 | "version": "1.0.0", 485 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 486 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" 487 | }, 488 | "secure-compare": { 489 | "version": "3.0.1", 490 | "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", 491 | "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=" 492 | }, 493 | "semver": { 494 | "version": "5.7.1", 495 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 496 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 497 | }, 498 | "set-blocking": { 499 | "version": "2.0.0", 500 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 501 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 502 | }, 503 | "shebang-command": { 504 | "version": "1.2.0", 505 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 506 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 507 | "requires": { 508 | "shebang-regex": "^1.0.0" 509 | } 510 | }, 511 | "shebang-regex": { 512 | "version": "1.0.0", 513 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 514 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 515 | }, 516 | "signal-exit": { 517 | "version": "3.0.3", 518 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 519 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 520 | }, 521 | "string-width": { 522 | "version": "3.1.0", 523 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 524 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 525 | "requires": { 526 | "emoji-regex": "^7.0.1", 527 | "is-fullwidth-code-point": "^2.0.0", 528 | "strip-ansi": "^5.1.0" 529 | } 530 | }, 531 | "strip-ansi": { 532 | "version": "5.2.0", 533 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 534 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 535 | "requires": { 536 | "ansi-regex": "^4.1.0" 537 | } 538 | }, 539 | "strip-eof": { 540 | "version": "1.0.0", 541 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 542 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" 543 | }, 544 | "supports-color": { 545 | "version": "5.5.0", 546 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 547 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 548 | "requires": { 549 | "has-flag": "^3.0.0" 550 | } 551 | }, 552 | "topo": { 553 | "version": "3.0.3", 554 | "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", 555 | "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", 556 | "requires": { 557 | "hoek": "6.x.x" 558 | }, 559 | "dependencies": { 560 | "hoek": { 561 | "version": "6.1.3", 562 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", 563 | "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==" 564 | } 565 | } 566 | }, 567 | "union": { 568 | "version": "0.5.0", 569 | "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", 570 | "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", 571 | "requires": { 572 | "qs": "^6.4.0" 573 | } 574 | }, 575 | "url-join": { 576 | "version": "2.0.5", 577 | "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", 578 | "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=" 579 | }, 580 | "which": { 581 | "version": "1.3.1", 582 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 583 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 584 | "requires": { 585 | "isexe": "^2.0.0" 586 | } 587 | }, 588 | "which-module": { 589 | "version": "2.0.0", 590 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 591 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 592 | }, 593 | "wrap-ansi": { 594 | "version": "5.1.0", 595 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 596 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 597 | "requires": { 598 | "ansi-styles": "^3.2.0", 599 | "string-width": "^3.0.0", 600 | "strip-ansi": "^5.0.0" 601 | } 602 | }, 603 | "wrappy": { 604 | "version": "1.0.2", 605 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 606 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 607 | }, 608 | "xml2json": { 609 | "version": "0.12.0", 610 | "resolved": "https://registry.npmjs.org/xml2json/-/xml2json-0.12.0.tgz", 611 | "integrity": "sha512-EPJHRWJnJUYbJlzR4pBhZODwWdi2IaYGtDdteJi0JpZ4OD31IplWALuit8r73dJuM4iHZdDVKY1tLqY2UICejg==", 612 | "requires": { 613 | "hoek": "^4.2.1", 614 | "joi": "^13.1.2", 615 | "node-expat": "^2.3.18" 616 | } 617 | }, 618 | "y18n": { 619 | "version": "4.0.0", 620 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", 621 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" 622 | }, 623 | "yargs": { 624 | "version": "13.2.4", 625 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", 626 | "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", 627 | "requires": { 628 | "cliui": "^5.0.0", 629 | "find-up": "^3.0.0", 630 | "get-caller-file": "^2.0.1", 631 | "os-locale": "^3.1.0", 632 | "require-directory": "^2.1.1", 633 | "require-main-filename": "^2.0.0", 634 | "set-blocking": "^2.0.0", 635 | "string-width": "^3.0.0", 636 | "which-module": "^2.0.0", 637 | "y18n": "^4.0.0", 638 | "yargs-parser": "^13.1.0" 639 | } 640 | }, 641 | "yargs-parser": { 642 | "version": "13.1.2", 643 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", 644 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", 645 | "requires": { 646 | "camelcase": "^5.0.0", 647 | "decamelize": "^1.2.0" 648 | } 649 | } 650 | } 651 | } 652 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lint-visualizer", 3 | "version": "1.0.5", 4 | "description": "Lint Visualizer provides a smart way to view your project's lint errors & warnings as actionable items", 5 | "main": "bin/index.js", 6 | "author": "Chandrahass Tvs", 7 | "license": "MIT", 8 | "bin": { 9 | "lint-visualizer": "./bin/index.js" 10 | }, 11 | "keywords": [ 12 | "ng-lint", 13 | "lint", 14 | "angular", 15 | "tslint", 16 | "eslint", 17 | "visualizer", 18 | "lint-visualizer" 19 | ], 20 | "dependencies": { 21 | "chalk": "^2.4.2", 22 | "http-server": "^0.12.3", 23 | "yargs": "^13.2.4", 24 | "xml2json": "^0.12.0" 25 | }, 26 | "repository": { 27 | "type": "git", 28 | "url": "git+https://github.com/ChandrahassTvs/lint-visualizer.git" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/ChandrahassTvs/lint-visualizer.git/issues" 32 | }, 33 | "homepage": "https://github.com/ChandrahassTvs/lint-visualizer.git#readme" 34 | } 35 | --------------------------------------------------------------------------------