doiuse
Advanced tools
Comparing version 4.1.0 to 4.2.0
# Changelog | ||
## Unreleased | ||
... | ||
## 4.2.0 | ||
2018-09-27 | ||
* Detect use of 'initial', 'unset', and 'revert' keywords [\#93](https://github.com/anandthakker/doiuse/pull/93) | ||
* Improve css-sel2 detection performance [\#88](https://github.com/anandthakker/doiuse/pull/88) | ||
* Remove lodash dependency [\#94](https://github.com/anandthakker/doiuse/pull/94) | ||
* Upgrade browserslist (4.1.1), caniuse-lite (1.0.30000887) | ||
## 4.1.0 | ||
2018-03-23 | ||
* Upgrade browserslist (3.1.1) and caniuse-lite (1.0.30000810) [\#85](https://github.com/anandthakker/doiuse/pull/85) | ||
@@ -8,5 +22,7 @@ * Update font-unicode-range [\#80](https://github.com/anandthakker/doiuse/pull/80) | ||
* Upgrade browserslist (3.2.1) and caniuse-lite (1.0.30000819) | ||
* Drop node 4 support | ||
## 4.0.0 | ||
2017-10-09 | ||
* **Breaking:** No longer throws an error for unrecognised node types [\#75](https://github.com/anandthakker/doiuse/pull/75) | ||
@@ -16,2 +32,3 @@ | ||
2017-08-24 | ||
* Fix config not found due to missing parameter | ||
@@ -21,2 +38,3 @@ | ||
2017-05-15 | ||
* Remove Node.js 0.12 support | ||
@@ -31,2 +49,3 @@ * Use PostCSS 6 | ||
2015-10-16 | ||
* Use PostCSS 'warn' API, add feature id in reported results | ||
@@ -36,2 +55,3 @@ | ||
2015-10-13 | ||
* **Breaking:** Add option to ignore rules | ||
@@ -38,0 +58,0 @@ * clean up README, add Gulp example |
32
cli.js
#!/usr/bin/env node | ||
var FILE_NOT_FOUND = 'ENOENT' | ||
const FILE_NOT_FOUND = 'ENOENT' | ||
var fs = require('fs') | ||
var ldjson = require('ldjson-stream') | ||
var through = require('through2') | ||
var browserslist = require('browserslist') | ||
var path = require('path') | ||
var _ = require('lodash') | ||
const fs = require('fs') | ||
const ldjson = require('ldjson-stream') | ||
const through = require('through2') | ||
const browserslist = require('browserslist') | ||
const path = require('path') | ||
var formatBrowserName = require('./lib/util').formatBrowserName | ||
var doiuse = require('./stream') | ||
const formatBrowserName = require('./lib/util').formatBrowserName | ||
const doiuse = require('./stream') | ||
var yargs = require('yargs') | ||
const yargs = require('yargs') | ||
.usage('Lint your CSS for browser support.') | ||
@@ -57,11 +56,13 @@ .example('cat FILE | $0 -b "ios >= 6"', '') | ||
// Config file reading | ||
// Config file reading | ||
if (argv.config) { | ||
try { | ||
var fileData = fs.readFileSync(path.resolve(argv.config), 'utf8') | ||
var config = JSON.parse(fileData) | ||
_.forEach(_.keys(config), function (key) { | ||
const fileData = fs.readFileSync(path.resolve(argv.config), 'utf8') | ||
const config = JSON.parse(fileData) | ||
Object.keys(config).forEach(key => { | ||
var value = config[key] | ||
if (key === 'browsers') { | ||
if (_.isArray(value)) value = value.join(',') | ||
if (value instanceof Array) value = value.join(',') | ||
} | ||
@@ -79,2 +80,3 @@ | ||
argv.ignore = argv.ignore.split(',').map(function (s) { return s.trim() }) | ||
// Informational output | ||
@@ -81,0 +83,0 @@ if (argv.l) { argv.v = ++argv.verbose } |
@@ -7,7 +7,12 @@ var list = require('postcss/lib/list') | ||
} | ||
function matchOutsideOfBrackets (pat) { | ||
if (pat instanceof RegExp) { | ||
pat = pat.source | ||
function matchOutsideOfBrackets(pat) { | ||
if (!(pat instanceof RegExp)) { | ||
throw new TypeError('matchOutsideOfBrackets expects a RegExp') | ||
} | ||
return new RegExp('^(' + pats.brackets + '?' + pats.nobrackets + '*)*' + pat) | ||
var fullPat = new RegExp( | ||
'^(' + pats.brackets + '?' + pats.nobrackets + '*)*' + pat.source | ||
) | ||
return function match(str) { | ||
return pat.test(str) && fullPat.test(str) | ||
} | ||
} | ||
@@ -395,3 +400,15 @@ | ||
values: ['image-set'] | ||
}, | ||
'css-initial-value': { | ||
properties: [''], | ||
values: ['initial'] | ||
}, | ||
'css-unset-value': { | ||
properties: [''], | ||
values: ['unset'] | ||
}, | ||
'css-revert-value': { | ||
properties: [''], | ||
values: ['revert'] | ||
} | ||
} |
@@ -1,20 +0,24 @@ | ||
// Generated by CoffeeScript 2.0.0-beta8 | ||
var browserslist = require('browserslist'); | ||
var _ = require('lodash'); | ||
module.exports = class BrowserSelection { | ||
const browserslist = require('browserslist'); | ||
class BrowserSelection { | ||
constructor(query, from) { | ||
this.browsersRequest = query; | ||
this._list = browserslist(this.browsersRequest, from ? { path: from } : {}).map(s => s.split(' ')); | ||
this._list = browserslist(this.browsersRequest, from ? { path: from } : {}).map(browser => browser.split(' ')); | ||
} | ||
test(browser, version) { | ||
version = version.split('-'); | ||
if (version.length === 1) version.push(version[0]); | ||
return _.find(this._list, ([b, v]) => { | ||
return b === browser && v >= version[0] && v <= version[1]; | ||
}); | ||
const versions = version.split('-'); | ||
if (versions.length === 1) { | ||
versions.push(versions[0]); | ||
} | ||
return this._list.find(([b, v]) => b === browser && v >= versions[0] && v <= versions[1]); | ||
} | ||
list() { | ||
return this._list.slice(); | ||
} | ||
}; | ||
} | ||
module.exports = BrowserSelection; |
@@ -1,3 +0,2 @@ | ||
var _ = require('lodash'); | ||
var features = require('../data/features'); | ||
const features = require('../data/features'); | ||
@@ -15,3 +14,3 @@ const PLUGIN_OPTION_COMMENT = 'doiuse-'; | ||
return function find(searchfor) { | ||
if (searchfor instanceof RegExp) return searchfor.test(str);else if (_.isFunction(searchfor)) return searchfor(str);else return str && str.indexOf(searchfor) >= 0; | ||
if (searchfor instanceof RegExp) return searchfor.test(str);else if (typeof searchfor === 'function') return searchfor(str);else return str && str.indexOf(searchfor) >= 0; | ||
}; | ||
@@ -46,5 +45,12 @@ } | ||
*/ | ||
module.exports = class Detector { | ||
class Detector { | ||
constructor(featureList) { | ||
this.features = _.pick(features, featureList); | ||
this.features = featureList.reduce((result, feature) => { | ||
if (features[feature]) { | ||
result[feature] = features[feature]; | ||
} | ||
return result; | ||
}, {}); | ||
this.ignore = []; | ||
@@ -96,3 +102,3 @@ } | ||
if (_.startsWith(text, PLUGIN_OPTION_COMMENT)) { | ||
if (text.startsWith(PLUGIN_OPTION_COMMENT)) { | ||
const option = text.split(' ', 1)[0]; | ||
@@ -104,5 +110,9 @@ const value = text.replace(option, '').trim(); | ||
if (value === '') { | ||
this.ignore = _.keysIn(this.features); | ||
this.ignore = Object.keys(this.features); | ||
} else { | ||
this.ignore = _.uniq([...this.ignore, ...value.split(',').map(feat => feat.trim())]); | ||
value.split(',').map(feat => feat.trim()).forEach(feat => { | ||
if (this.ignore.indexOf(feat) < 0) { | ||
this.ignore.push(feat); | ||
} | ||
}); | ||
} | ||
@@ -114,3 +124,4 @@ break; | ||
} else { | ||
this.ignore = _.without(this.ignore, ...value.split(',').map(feat => feat.trim())); | ||
const without = value.split(',').map(feat => feat.trim()); | ||
this.ignore = this.ignore.filter(i => without.indexOf(i) < 0); | ||
} | ||
@@ -147,2 +158,4 @@ break; | ||
} | ||
}; | ||
} | ||
module.exports = Detector; |
@@ -1,15 +0,16 @@ | ||
let _ = require('lodash'); | ||
let missingSupport = require('./missing-support'); | ||
let Detector = require('./detect-feature-use'); | ||
let Multimatch = require('multimatch'); | ||
const multimatch = require('multimatch'); | ||
const missingSupport = require('./missing-support'); | ||
const Detector = require('./detect-feature-use'); | ||
function doiuse(options) { | ||
let { browsers: browserQuery, onFeatureUsage, ignore: ignoreOptions, ignoreFiles } = options; | ||
const { browsers: browserQuery, onFeatureUsage, ignore: ignoreOptions, ignoreFiles } = options; | ||
return { | ||
info(opts = {}) { | ||
let { browsers, features } = missingSupport(browserQuery, opts.from); | ||
const { browsers, features } = missingSupport(browserQuery, opts.from); | ||
return { | ||
browsers: browsers, | ||
features: features | ||
browsers, | ||
features | ||
}; | ||
@@ -23,4 +24,6 @@ }, | ||
} | ||
let { features } = missingSupport(browserQuery, from); | ||
let detector = new Detector(_.keys(features)); | ||
let detector = new Detector(Object.keys(features)); | ||
return detector.process(css, function ({ feature, usage, ignore }) { | ||
@@ -30,2 +33,3 @@ if (ignore && ignore.indexOf(feature) !== -1) { | ||
} | ||
if (ignoreOptions && ignoreOptions.indexOf(feature) !== -1) { | ||
@@ -35,3 +39,3 @@ return; | ||
if (ignoreFiles && Multimatch(usage.source.input.from, ignoreFiles).length > 0) { | ||
if (ignoreFiles && multimatch(usage.source.input.from, ignoreFiles).length > 0) { | ||
return; | ||
@@ -38,0 +42,0 @@ } |
@@ -1,43 +0,43 @@ | ||
let features = require('../data/features'); | ||
let BrowserSelection = require('./browsers'); | ||
let _ = require('lodash'); | ||
let formatBrowserName = require('./util').formatBrowserName; | ||
const caniuse = require('caniuse-lite'); | ||
let caniuse = require('caniuse-lite'); | ||
const features = require('../data/features'); | ||
const BrowserSelection = require('./browsers'); | ||
const formatBrowserName = require('./util').formatBrowserName; | ||
function filterStats(browsers, stats) { | ||
return _.reduce(stats, function (resultStats, versionData, browser) { | ||
// filter only versions of selected browsers that don't fully support this feature | ||
const feature = _.reduce(versionData, function (result, support, ver) { | ||
const selected = browsers.test(browser, ver); | ||
if (selected) { | ||
// check if browser is NOT fully (i.e., don't have 'y' in their stats) supported | ||
if (!/(^|\s)y($|\s)/.test(support)) { | ||
// when it's not partially supported ('a'), it's missing | ||
const testprop = /(^|\s)a($|\s)/.test(support) ? 'partial' : 'missing'; | ||
if (!result[testprop]) { | ||
result[testprop] = {}; | ||
} | ||
result[testprop][selected[1]] = support; | ||
const filterStats = (browsers, stats) => Object.keys(stats).reduce((result, browser) => { | ||
const versions = stats[browser]; | ||
const feature = Object.keys(versions).reduce((feat, version) => { | ||
const support = versions[version]; | ||
const selected = browsers.test(browser, version); | ||
if (selected) { | ||
// check if browser is NOT fully (i.e., don't have 'y' in their stats) supported | ||
if (!/(^|\s)y($|\s)/.test(support)) { | ||
// when it's not partially supported ('a'), it's missing | ||
const type = /(^|\s)a($|\s)/.test(support) ? 'partial' : 'missing'; | ||
if (!feat[type]) { | ||
feat[type] = {}; | ||
} | ||
feat[type][selected[1]] = support; | ||
} | ||
return result; | ||
}, { missing: {}, partial: {} }); | ||
} | ||
if (_.keys(feature.missing).length !== 0) { | ||
resultStats.missing[browser] = feature.missing; | ||
} | ||
if (_.keys(feature.partial).length !== 0) { | ||
resultStats.partial[browser] = feature.partial; | ||
} | ||
return resultStats; | ||
return feat; | ||
}, { missing: {}, partial: {} }); | ||
} | ||
function lackingBrowsers(browserStats) { | ||
return _.reduce(browserStats, function (res, versions, browser) { | ||
res.push(formatBrowserName(browser, _.keys(versions))); | ||
return res; | ||
}, []).join(', '); | ||
} | ||
if (Object.keys(feature.missing).length !== 0) { | ||
result.missing[browser] = feature.missing; | ||
} | ||
if (Object.keys(feature.partial).length !== 0) { | ||
result.partial[browser] = feature.partial; | ||
} | ||
return result; | ||
}, { missing: {}, partial: {} }); | ||
const lackingBrowsers = browserStats => Object.keys(browserStats).map(browser => formatBrowserName(browser, Object.keys(browserStats[browser]))).join(', '); | ||
/** | ||
@@ -73,3 +73,3 @@ * Get data on CSS features not supported by the given autoprefixer-like | ||
*/ | ||
function missing(browserRequest, from) { | ||
function missingSupport(browserRequest, from) { | ||
const browsers = new BrowserSelection(browserRequest, from); | ||
@@ -109,2 +109,2 @@ let result = {}; | ||
module.exports = missing; | ||
module.exports = missingSupport; |
{ | ||
"name": "doiuse", | ||
"version": "4.1.0", | ||
"version": "4.2.0", | ||
"description": "Lint CSS for browser support against caniuse database", | ||
@@ -27,4 +27,4 @@ "main": "lib/doiuse.js", | ||
"dependencies": { | ||
"browserslist": "^3.2.1", | ||
"caniuse-lite": "^1.0.30000819", | ||
"browserslist": "^4.1.1", | ||
"caniuse-lite": "^1.0.30000887", | ||
"css-rule-stream": "^1.1.0", | ||
@@ -34,16 +34,15 @@ "duplexer2": "0.0.2", | ||
"ldjson-stream": "^1.2.1", | ||
"lodash": "^4.0.0", | ||
"multimatch": "^2.0.0", | ||
"postcss": "^6.0.1", | ||
"source-map": "^0.5.6", | ||
"through2": "^0.6.3", | ||
"yargs": "^8.0.1" | ||
"postcss": "^7.0.4", | ||
"source-map": "^0.7.3", | ||
"through2": "^2.0.3", | ||
"yargs": "^12.0.2" | ||
}, | ||
"devDependencies": { | ||
"babel-cli": "^6.26.0", | ||
"eslint": "^4.19.1", | ||
"mock-fs": "^4.3.0", | ||
"postcss-import": "^10.0.0", | ||
"standard": "^11.0.1", | ||
"tape": "^4.0.0" | ||
"eslint": "^5.6.0", | ||
"mock-fs": "^4.7.0", | ||
"postcss-import": "^12.0.0", | ||
"standard": "^12.0.1", | ||
"tape": "^4.9.1" | ||
}, | ||
@@ -50,0 +49,0 @@ "standard": { |
[![Build Status](https://travis-ci.org/anandthakker/doiuse.svg?branch=master)](https://travis-ci.org/anandthakker/doiuse) | ||
doiuse | ||
====== | ||
# doiuse | ||
Lint CSS for browser support against caniuse database. | ||
Lint CSS for browser support against [Can I use](http://caniuse.com) database. | ||
# Install | ||
## Install | ||
@@ -14,16 +13,6 @@ ```sh | ||
# Developing | ||
```sh | ||
git clone git@github.com:anandthakker/doiuse.git | ||
cd doiuse | ||
npm install | ||
npm run babel | ||
``` | ||
## Usage Examples | ||
That last step transpiles the ES6 from src/ to ES5 in lib/. Already happens as a `pretest` step for `npm test`. | ||
### Command Line | ||
# Usage Examples | ||
## Command Line | ||
```bash | ||
@@ -35,3 +24,2 @@ doiuse --browsers "ie >= 9, > 1%, last 2 versions" main.css | ||
**Sample output:** | ||
@@ -53,4 +41,4 @@ ``` | ||
### JS | ||
## JS | ||
```javascript | ||
@@ -70,3 +58,3 @@ var postcss = require('postcss'); | ||
## Gulp | ||
### Gulp | ||
@@ -94,3 +82,4 @@ ```javascript | ||
# How it works | ||
## How it works | ||
In particular, the approach to detecting features usage is currently quite naive. | ||
@@ -105,5 +94,6 @@ | ||
# API Details: | ||
## API Details | ||
## As a transform stream | ||
### As a transform stream | ||
```javascript | ||
@@ -121,4 +111,4 @@ var doiuse = require('doiuse/stream'); | ||
### As a postcss plugin | ||
## As a postcss plugin | ||
`postcss(doiuse(opts)).process(css)`, where `opts` is: | ||
@@ -138,7 +128,7 @@ ```javascript | ||
{ | ||
message: '<input source>: line <l>, col <c> - CSS3 Gradients not supported by: IE (8)' | ||
feature: 'css-gradients', //slug identifying a caniuse-db feature | ||
featureData:{ | ||
message: '<input source>: line <l>, col <c> - CSS3 Gradients not supported by: IE (8)', | ||
feature: 'css-gradients', // slug identifying a caniuse-db feature | ||
featureData: { | ||
title: 'CSS Gradients', | ||
missing: "IE (8)" // string of browsers missing support for this feature. | ||
missing: "IE (8)", // string of browsers missing support for this feature. | ||
missingData: { | ||
@@ -153,24 +143,33 @@ // map of browser -> version -> (lack of)support code | ||
``` | ||
Called once for each usage of each css feature not supported by the selected | ||
browsers. | ||
## Ignoring file-specific rules: | ||
Called once for each usage of each css feature not supported by the selected browsers. | ||
### Ignoring file-specific rules | ||
For disabling some checks you can use just-in-place comments | ||
##### `/* doiuse-disable */` | ||
Disables checks of _all [features](#features-list)_ | ||
##### `/* doiuse-disable feature */` | ||
Disables checks of _specified [feature(s)](#features-list)_ (can be comma separated list) | ||
##### `/* doiuse-enable */` | ||
Re-enables checks of _all [features](#features-list)_ | ||
##### `/* doiuse-enable feature */` | ||
Enables checks of _specified [feature(s)](#features-list)_ (can be comma separated list) | ||
- for following lines in file | ||
# [Contributing](CONTRIBUTING.md) | ||
## [Contributing](CONTRIBUTING.md) | ||
doiuse is an [OPEN Open Source](http://openopensource.org/) Project. This means that: | ||
doiuse is an [OPEN Open Source](http://openopensource.org/) Project. | ||
Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. | ||
This means that individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. | ||
# License | ||
## License | ||
@@ -177,0 +176,0 @@ MIT |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
84556
11
915
0
170
+ Addedbrowserslist@4.23.0(transitive)
+ Addedcamelcase@5.3.1(transitive)
+ Addedcliui@4.1.0(transitive)
+ Addedcross-spawn@6.0.5(transitive)
+ Addedend-of-stream@1.4.4(transitive)
+ Addedescalade@3.1.2(transitive)
+ Addedexeca@1.0.0(transitive)
+ Addedfind-up@3.0.0(transitive)
+ Addedget-stream@4.1.0(transitive)
+ Addedinvert-kv@2.0.0(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedlcid@2.0.0(transitive)
+ Addedlocate-path@3.0.0(transitive)
+ Addedmap-age-cleaner@0.1.3(transitive)
+ Addedmem@4.3.0(transitive)
+ Addedmimic-fn@2.1.0(transitive)
+ Addednice-try@1.0.5(transitive)
+ Addednode-releases@2.0.14(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedos-locale@3.1.0(transitive)
+ Addedp-defer@1.0.0(transitive)
+ Addedp-is-promise@2.1.0(transitive)
+ Addedp-limit@2.3.0(transitive)
+ Addedp-locate@3.0.0(transitive)
+ Addedp-try@2.2.0(transitive)
+ Addedpicocolors@0.2.11.0.1(transitive)
+ Addedpostcss@7.0.39(transitive)
+ Addedprocess-nextick-args@2.0.1(transitive)
+ Addedpump@3.0.0(transitive)
+ Addedreadable-stream@2.3.8(transitive)
+ Addedsafe-buffer@5.1.2(transitive)
+ Addedsource-map@0.7.4(transitive)
+ Addedstring_decoder@1.1.1(transitive)
+ Addedthrough2@2.0.5(transitive)
+ Addedupdate-browserslist-db@1.0.16(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addedwrappy@1.0.2(transitive)
+ Addedy18n@4.0.3(transitive)
+ Addedyargs@12.0.5(transitive)
+ Addedyargs-parser@11.1.1(transitive)
- Removedlodash@^4.0.0
- Removedansi-styles@3.2.1(transitive)
- Removedbrowserslist@3.2.8(transitive)
- Removedcamelcase@4.1.0(transitive)
- Removedchalk@2.4.2(transitive)
- Removedcliui@3.2.0(transitive)
- Removedcolor-convert@1.9.3(transitive)
- Removedcolor-name@1.1.3(transitive)
- Removedcross-spawn@5.1.0(transitive)
- Removederror-ex@1.3.2(transitive)
- Removedescape-string-regexp@1.0.5(transitive)
- Removedexeca@0.7.0(transitive)
- Removedfind-up@2.1.0(transitive)
- Removedfunction-bind@1.1.2(transitive)
- Removedget-stream@3.0.0(transitive)
- Removedgraceful-fs@4.2.11(transitive)
- Removedhas-flag@3.0.0(transitive)
- Removedhasown@2.0.2(transitive)
- Removedhosted-git-info@2.8.9(transitive)
- Removedinvert-kv@1.0.0(transitive)
- Removedis-arrayish@0.2.1(transitive)
- Removedis-core-module@2.13.1(transitive)
- Removedlcid@1.0.0(transitive)
- Removedload-json-file@2.0.0(transitive)
- Removedlocate-path@2.0.0(transitive)
- Removedlodash@4.17.21(transitive)
- Removedlru-cache@4.1.5(transitive)
- Removedmem@1.1.0(transitive)
- Removedmimic-fn@1.2.0(transitive)
- Removednormalize-package-data@2.5.0(transitive)
- Removedos-locale@2.1.0(transitive)
- Removedp-limit@1.3.0(transitive)
- Removedp-locate@2.0.0(transitive)
- Removedp-try@1.0.0(transitive)
- Removedparse-json@2.2.0(transitive)
- Removedpath-parse@1.0.7(transitive)
- Removedpath-type@2.0.0(transitive)
- Removedpify@2.3.0(transitive)
- Removedpostcss@6.0.23(transitive)
- Removedpseudomap@1.0.2(transitive)
- Removedread-pkg@2.0.0(transitive)
- Removedread-pkg-up@2.0.0(transitive)
- Removedresolve@1.22.8(transitive)
- Removedsource-map@0.5.7(transitive)
- Removedspdx-correct@3.2.0(transitive)
- Removedspdx-exceptions@2.5.0(transitive)
- Removedspdx-expression-parse@3.0.1(transitive)
- Removedspdx-license-ids@3.0.17(transitive)
- Removedstrip-bom@3.0.0(transitive)
- Removedsupports-color@5.5.0(transitive)
- Removedsupports-preserve-symlinks-flag@1.0.0(transitive)
- Removedvalidate-npm-package-license@3.0.4(transitive)
- Removedy18n@3.2.2(transitive)
- Removedyallist@2.1.2(transitive)
- Removedyargs@8.0.2(transitive)
- Removedyargs-parser@7.0.0(transitive)
Updatedbrowserslist@^4.1.1
Updatedcaniuse-lite@^1.0.30000887
Updatedpostcss@^7.0.4
Updatedsource-map@^0.7.3
Updatedthrough2@^2.0.3
Updatedyargs@^12.0.2