karma-coverage
Advanced tools
Comparing version 2.0.1 to 2.0.2
@@ -0,1 +1,9 @@ | ||
## [2.0.2](https://github.com/karma-runner/karma-coverage/compare/v2.0.1...v2.0.2) (2020-04-13) | ||
### Bug Fixes | ||
* **reporter:** update calls to match new API in istanbul-lib-report fix [#398](https://github.com/karma-runner/karma-coverage/issues/398) ([#403](https://github.com/karma-runner/karma-coverage/issues/403)) ([4962a70](https://github.com/karma-runner/karma-coverage/commit/4962a70026efbbd77e9fa7b6bfd6be29047c1082)) | ||
* remove information about old istanbul lib ([#404](https://github.com/karma-runner/karma-coverage/issues/404)) ([5cf931a](https://github.com/karma-runner/karma-coverage/commit/5cf931afe331cfcebf7cf934ec52de933344091d)) | ||
<a name="2.0.1"></a> | ||
@@ -2,0 +10,0 @@ ## [2.0.1](https://github.com/karma-runner/karma-coverage/compare/v2.0.0...v2.0.1) (2019-08-20) |
@@ -11,4 +11,4 @@ module.exports = function (grunt) { | ||
src: [ | ||
'test/mocha-globals.coffee', | ||
'test/*.spec.coffee' | ||
'test/mocha-globals.js', | ||
'test/*.spec.js' | ||
] | ||
@@ -62,9 +62,2 @@ } | ||
} | ||
}, | ||
eslint: { | ||
target: [ | ||
'lib/*.js', | ||
'gruntfile.js', | ||
'karma.conf.js' | ||
] | ||
} | ||
@@ -75,4 +68,3 @@ }) | ||
grunt.registerTask('test', ['simplemocha', 'karma']) | ||
grunt.registerTask('default', ['eslint', 'test']) | ||
grunt.registerTask('default', ['simplemocha', 'karma']) | ||
@@ -79,0 +71,0 @@ grunt.registerTask('release', 'Bump the version and publish to NPM.', function (type) { |
@@ -1,25 +0,29 @@ | ||
function InMemoryReport (opt) { | ||
this.opt = opt | ||
} | ||
const { ReportBase } = require('istanbul-lib-report') | ||
InMemoryReport.prototype.onStart = function (root, context) { | ||
this.data = {} | ||
} | ||
class InMemoryReport extends ReportBase { | ||
constructor (opt) { | ||
super(opt) | ||
this.opt = opt | ||
} | ||
InMemoryReport.prototype.onDetail = function (node) { | ||
const fc = node.getFileCoverage() | ||
const key = fc.path | ||
this.data[key] = fc.toJSON() | ||
} | ||
onStart () { | ||
this.data = {} | ||
} | ||
InMemoryReport.prototype.onEnd = function () { | ||
if (!this.opt.emitter || !this.opt.emitter.emit) { | ||
console.error('Could not raise "coverage_complete" event, missing emitter because it was not supplied during initialization of the reporter') | ||
} else { | ||
onDetail (node) { | ||
const fc = node.getFileCoverage() | ||
const key = fc.path | ||
this.data[key] = fc.toJSON() | ||
} | ||
onEnd () { | ||
if (!this.opt || !this.opt.emitter || !this.opt.emitter.emit) { | ||
console.error('Could not raise "coverage_complete" event, missing emitter because it was not supplied during initialization of the reporter') | ||
return | ||
} | ||
this.opt.emitter.emit('coverage_complete', this.opt.browser, this.data) | ||
} | ||
} | ||
InMemoryReport.TYPE = 'in-memory' | ||
module.exports = InMemoryReport |
@@ -9,10 +9,7 @@ // Coverage Preprocessor | ||
var { createInstrumenter } = require('istanbul-lib-instrument') | ||
var minimatch = require('minimatch') | ||
var path = require('path') | ||
var _ = require('lodash') | ||
var SourceMapConsumer = require('source-map').SourceMapConsumer | ||
var SourceMapGenerator = require('source-map').SourceMapGenerator | ||
var globalSourceMapStore = require('./source-map-store') | ||
var globalCoverageMap = require('./coverage-map') | ||
const { createInstrumenter } = require('istanbul-lib-instrument') | ||
const minimatch = require('minimatch') | ||
const path = require('path') | ||
const globalSourceMapStore = require('./source-map-store') | ||
const globalCoverageMap = require('./coverage-map') | ||
@@ -22,7 +19,7 @@ // Regexes | ||
var coverageObjRegex = /\{.*"path".*"fnMap".*"statementMap".*"branchMap".*\}/g | ||
const coverageObjRegex = /\{.*"path".*"fnMap".*"statementMap".*"branchMap".*\}/g | ||
// Preprocessor creator function | ||
function createCoveragePreprocessor (logger, helper, basePath, reporters, coverageReporter) { | ||
var log = logger.create('preprocessor.coverage') | ||
function createCoveragePreprocessor (logger, basePath, reporters = [], coverageReporter = {}) { | ||
const log = logger.create('preprocessor.coverage') | ||
@@ -53,3 +50,3 @@ // Options | ||
} | ||
if (!_.isFunction(Obj)) { | ||
if (typeof Obj !== 'function') { | ||
// Object doesn't have old instrumenter variable and isn't a | ||
@@ -67,26 +64,20 @@ // constructor, so we can't use it to create an instrumenter | ||
var instrumenterOverrides = {} | ||
var instrumenters = { istanbul: createInstrumenter } | ||
var includeAllSources = false | ||
var useJSExtensionForCoffeeScript = false | ||
const instrumenters = { istanbul: createInstrumenter } | ||
const instrumenterOverrides = coverageReporter.instrumenter || {} | ||
const { includeAllSources = false, useJSExtensionForCoffeeScript = false } = coverageReporter | ||
if (coverageReporter) { | ||
instrumenterOverrides = coverageReporter.instrumenter | ||
_.forEach(coverageReporter.instrumenters, function (instrumenter, literal) { | ||
var creatorFunction = getCreatorFunction(instrumenter) | ||
if (creatorFunction) { | ||
instrumenters[literal] = creatorFunction | ||
} | ||
}) | ||
includeAllSources = coverageReporter.includeAllSources === true | ||
useJSExtensionForCoffeeScript = coverageReporter.useJSExtensionForCoffeeScript === true | ||
} | ||
Object.entries(coverageReporter.instrumenters || {}).forEach(([literal, instrumenter]) => { | ||
const creatorFunction = getCreatorFunction(instrumenter) | ||
if (creatorFunction) { | ||
instrumenters[literal] = creatorFunction | ||
} | ||
}) | ||
var sourceMapStore = globalSourceMapStore.get(basePath) | ||
const sourceMapStore = globalSourceMapStore.get(basePath) | ||
var instrumentersOptions = _.reduce(instrumenters, function getInstrumenterOptions (memo, instrument, name) { | ||
memo[name] = {} | ||
const instrumentersOptions = Object.keys(instrumenters).reduce((memo, key) => { | ||
memo[key] = {} | ||
if (coverageReporter && coverageReporter.instrumenterOptions) { | ||
memo[name] = coverageReporter.instrumenterOptions[name] | ||
if (coverageReporter.instrumenterOptions) { | ||
memo[key] = coverageReporter.instrumenterOptions[key] | ||
} | ||
@@ -98,3 +89,4 @@ | ||
// if coverage reporter is not used, do not preprocess the files | ||
if (!_.includes(reporters, 'coverage')) { | ||
if (!reporters.includes('coverage')) { | ||
log.info('coverage not included in reporters %s', reporters) | ||
return function (content, _, done) { | ||
@@ -104,15 +96,17 @@ done(content) | ||
} | ||
log.debug('coverage included in reporters %s', reporters) | ||
// check instrumenter override requests | ||
function checkInstrumenters () { | ||
return _.reduce(instrumenterOverrides, function (acc, literal, pattern) { | ||
if (!_.includes(_.keys(instrumenters), String(literal))) { | ||
const keys = Object.keys(instrumenters) | ||
return Object.values(instrumenterOverrides).some(literal => { | ||
const notIncluded = !keys.includes(String(literal)) | ||
if (notIncluded) { | ||
log.error('Unknown instrumenter: %s', literal) | ||
return false | ||
} | ||
return acc | ||
}, true) | ||
return notIncluded | ||
}) | ||
} | ||
if (!checkInstrumenters()) { | ||
if (checkInstrumenters()) { | ||
return function (content, _, done) { | ||
@@ -126,16 +120,15 @@ return done(1) | ||
var jsPath = path.resolve(file.originalPath) | ||
// default instrumenters | ||
var instrumenterLiteral = 'istanbul' | ||
_.forEach(instrumenterOverrides, function (literal, pattern) { | ||
const jsPath = path.resolve(file.originalPath) | ||
// 'istanbul' is default instrumenters | ||
const instrumenterLiteral = Object.keys(instrumenterOverrides).reduce((res, pattern) => { | ||
if (minimatch(file.originalPath, pattern, { dot: true })) { | ||
instrumenterLiteral = String(literal) | ||
return instrumenterOverrides[pattern] | ||
} | ||
}) | ||
return res | ||
}, 'istanbul') | ||
var instrumenterCreator = instrumenters[instrumenterLiteral] | ||
var constructOptions = instrumentersOptions[instrumenterLiteral] || {} | ||
var options = Object.assign({}, constructOptions) | ||
var codeGenerationOptions = null | ||
const instrumenterCreator = instrumenters[instrumenterLiteral] | ||
const constructOptions = instrumentersOptions[instrumenterLiteral] || {} | ||
let options = Object.assign({}, constructOptions) | ||
let codeGenerationOptions = null | ||
options.autoWrap = options.autoWrap || !options.noAutoWrap | ||
@@ -158,3 +151,3 @@ | ||
var instrumenter = instrumenterCreator(options) | ||
const instrumenter = instrumenterCreator(options) | ||
instrumenter.instrument(content, jsPath, function (err, instrumentedCode) { | ||
@@ -165,16 +158,18 @@ if (err) { | ||
} else { | ||
if (file.sourceMap && instrumenter.lastSourceMap()) { | ||
// Register the incoming sourceMap for transformation during reporting (if it exists) | ||
if (file.sourceMap) { | ||
sourceMapStore.registerMap(jsPath, file.sourceMap) | ||
} | ||
// Add merged source map (if it merged correctly) | ||
const lastSourceMap = instrumenter.lastSourceMap() | ||
if (lastSourceMap) { | ||
log.debug('Adding source map to instrumented file for "%s".', file.originalPath) | ||
var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(instrumenter.lastSourceMap().toString())) | ||
generator.applySourceMap(new SourceMapConsumer(file.sourceMap)) | ||
file.sourceMap = JSON.parse(generator.toString()) | ||
file.sourceMap = lastSourceMap | ||
instrumentedCode += '\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,' | ||
instrumentedCode += Buffer.from(JSON.stringify(file.sourceMap)).toString('base64') + '\n' | ||
instrumentedCode += Buffer.from(JSON.stringify(lastSourceMap)).toString('base64') + '\n' | ||
} | ||
// Register the sourceMap for transformation during reporting | ||
sourceMapStore.registerMap(jsPath, file.sourceMap) | ||
if (includeAllSources) { | ||
var coverageObj | ||
let coverageObj | ||
// Check if the file coverage object is exposed from the instrumenter directly | ||
@@ -189,3 +184,3 @@ if (instrumenter.lastFileCoverage) { | ||
coverageObjRegex.lastIndex = 0 | ||
var coverageObjMatch = coverageObjRegex.exec(instrumentedCode) | ||
const coverageObjMatch = coverageObjRegex.exec(instrumentedCode) | ||
if (coverageObjMatch !== null) { | ||
@@ -205,3 +200,3 @@ coverageObj = JSON.parse(coverageObjMatch[0]) | ||
} | ||
}) | ||
}, file.sourceMap) | ||
} | ||
@@ -212,3 +207,2 @@ } | ||
'logger', | ||
'helper', | ||
'config.basePath', | ||
@@ -215,0 +209,0 @@ 'config.reporters', |
@@ -17,3 +17,2 @@ // Coverage Reporter | ||
var minimatch = require('minimatch') | ||
var _ = require('lodash') | ||
@@ -23,11 +22,4 @@ var globalSourceMapStore = require('./source-map-store') | ||
var reports = require('./report-creator') | ||
const hasOwnProperty = Object.prototype.hasOwnProperty | ||
function isAbsolute (file) { | ||
if (path.isAbsolute) { | ||
return path.isAbsolute(file) | ||
} | ||
return path.resolve(file) === path.normalize(file) | ||
} | ||
// TODO(vojta): inject only what required (config.basePath, config.coverageReporter) | ||
@@ -63,3 +55,3 @@ var CoverageReporter = function (rootConfig, helper, logger, emitter) { | ||
// Exclude keys will always be relative, but covObj keys can be absolute or relative | ||
var excludeKey = isAbsolute(key) ? path.relative(basePath, key) : key | ||
var excludeKey = path.isAbsolute(key) ? path.relative(basePath, key) : key | ||
// Also normalize for files that start with `./`, etc. | ||
@@ -180,13 +172,16 @@ excludeKey = path.normalize(excludeKey) | ||
// Generate the output directory from the `coverageReporter.dir` and | ||
// Generate the output path from the `coverageReporter.dir` and | ||
// `coverageReporter.subdir` options. | ||
function generateOutputDir (browserName, dir, subdir) { | ||
dir = dir || 'coverage' | ||
subdir = subdir || browserName | ||
if (_.isFunction(subdir)) { | ||
function generateOutputPath (basePath, browserName, dir = 'coverage', subdir) { | ||
if (subdir && typeof subdir === 'function') { | ||
subdir = subdir(browserName) | ||
} | ||
if (browserName) { | ||
browserName = browserName.replace(':', '') | ||
} | ||
return path.join(dir, subdir) | ||
let outPutPath = path.join(dir, subdir || browserName) | ||
outPutPath = path.resolve(basePath, outPutPath) | ||
return helper.normalizeWinPath(outPutPath) | ||
} | ||
@@ -230,9 +225,8 @@ | ||
this.onRunComplete = function (browsers, results) { | ||
var checkedCoverage = {} | ||
this.onRunComplete = async function (browsers, results) { | ||
const checkedCoverage = {} | ||
reporters.forEach(function (reporterConfig) { | ||
browsers.forEach(function (browser) { | ||
var coverageMap = coverageMaps[browser.id] | ||
for (const reporterConfig of reporters) { | ||
await Promise.all(browsers.map(async (browser) => { | ||
const coverageMap = coverageMaps[browser.id] | ||
if (!coverageMap) { | ||
@@ -242,47 +236,41 @@ return | ||
var mainDir = reporterConfig.dir || config.dir | ||
var subDir = reporterConfig.subdir || config.subdir | ||
var browserName = browser.name.replace(':', '') | ||
var simpleOutputDir = generateOutputDir(browserName, mainDir, subDir) | ||
var resolvedOutputDir = path.resolve(basePath, simpleOutputDir) | ||
const mainDir = reporterConfig.dir || config.dir | ||
const subDir = reporterConfig.subdir || config.subdir | ||
const outputPath = generateOutputPath(basePath, browser.name, mainDir, subDir) | ||
const remappedCoverageMap = await sourceMapStore.transformCoverage(coverageMap) | ||
var outputDir = helper.normalizeWinPath(resolvedOutputDir) | ||
var options = helper.merge(config, reporterConfig, { | ||
dir: outputDir, | ||
const options = helper.merge(config, reporterConfig, { | ||
dir: outputPath, | ||
subdir: '', | ||
browser: browser, | ||
emitter: emitter | ||
emitter: emitter, | ||
coverageMap: remappedCoverageMap | ||
}) | ||
var remappedCoverageMap = sourceMapStore.transformCoverage(coverageMap).map | ||
// If config.check is defined, check coverage levels for each browser | ||
if (config.hasOwnProperty('check') && !checkedCoverage[browser.id]) { | ||
if (hasOwnProperty.call(config, 'check') && !checkedCoverage[browser.id]) { | ||
checkedCoverage[browser.id] = true | ||
var coverageFailed = checkCoverage(browser, remappedCoverageMap) | ||
if (coverageFailed) { | ||
if (results) { | ||
results.exitCode = 1 | ||
} | ||
if (coverageFailed && results) { | ||
results.exitCode = 1 | ||
} | ||
} | ||
var context = istanbulLibReport.createContext(options) | ||
var tree = istanbulLibReport.summarizers.pkg(remappedCoverageMap) | ||
var report = reports.create(reporterConfig.type || 'html', options) | ||
const context = istanbulLibReport.createContext(options) | ||
const report = reports.create(reporterConfig.type || 'html', options) | ||
// // If reporting to console or in-memory skip directory creation | ||
var toDisk = !reporterConfig.type || !reporterConfig.type.match(/^(text|text-summary|in-memory)$/) | ||
var hasNoFile = _.isUndefined(reporterConfig.file) | ||
const toDisk = !reporterConfig.type || !reporterConfig.type.match(/^(text|text-summary|in-memory)$/) | ||
if (!toDisk && hasNoFile) { | ||
tree.visit(report, context) | ||
if (!toDisk && reporterConfig.file === undefined) { | ||
report.execute(context) | ||
return | ||
} | ||
helper.mkdirIfNotExists(outputDir, function () { | ||
log.debug('Writing coverage to %s', outputDir) | ||
tree.visit(report, context) | ||
helper.mkdirIfNotExists(outputPath, function () { | ||
log.debug('Writing coverage to %s', outputPath) | ||
report.execute(context) | ||
}) | ||
}) | ||
}) | ||
})) | ||
} | ||
} | ||
@@ -289,0 +277,0 @@ |
{ | ||
"name": "karma-coverage", | ||
"version": "2.0.1", | ||
"version": "2.0.2", | ||
"description": "A Karma plugin. Generate code coverage.", | ||
"main": "lib/index.js", | ||
"scripts": { | ||
"test": "grunt test" | ||
"lint": "eslint **/*.js", | ||
"test": "grunt" | ||
}, | ||
@@ -22,21 +23,24 @@ "repository": { | ||
"dependencies": { | ||
"dateformat": "^1.0.6", | ||
"istanbul": "^0.4.0", | ||
"istanbul-lib-coverage": "^2.0.5", | ||
"istanbul-lib-instrument": "^3.3.0", | ||
"istanbul-lib-report": "^2.0.8", | ||
"istanbul-lib-source-maps": "^3.0.6", | ||
"istanbul-reports": "^2.2.4", | ||
"lodash": "^4.17.11", | ||
"minimatch": "^3.0.0", | ||
"source-map": "^0.5.1" | ||
"istanbul-lib-coverage": "^3.0.0", | ||
"istanbul-lib-instrument": "^4.0.1", | ||
"istanbul-lib-report": "^3.0.0", | ||
"istanbul-lib-source-maps": "^4.0.0", | ||
"istanbul-reports": "^3.0.0", | ||
"minimatch": "^3.0.4" | ||
}, | ||
"license": "MIT", | ||
"devDependencies": { | ||
"@commitlint/cli": "^8.3.5", | ||
"@commitlint/travis-cli": "^8.3.5", | ||
"@commitlint/config-conventional": "^8.3.4", | ||
"@semantic-release/changelog": "5.0.1", | ||
"@semantic-release/git": "9.0.0", | ||
"@semantic-release/npm": "7.0.5", | ||
"chai": "^4.2.0", | ||
"eslint": "^2.2.0", | ||
"eslint-config-standard": "^5.1.0", | ||
"eslint-plugin-promise": "^1.1.0", | ||
"eslint-plugin-react": "^4.1.0", | ||
"eslint-plugin-standard": "^1.1.0", | ||
"eslint": "^6.5.1", | ||
"eslint-config-standard": "^14.1.0", | ||
"eslint-plugin-import": "^2.18.2", | ||
"eslint-plugin-node": "^10.0.0", | ||
"eslint-plugin-promise": "^4.2.1", | ||
"eslint-plugin-standard": "^4.0.1", | ||
"grunt": "^1.0.3", | ||
@@ -47,6 +51,6 @@ "grunt-bump": "^0.8.0", | ||
"grunt-conventional-github-releaser": "^1.0.0", | ||
"grunt-eslint": "^21.0.0", | ||
"grunt-karma": "^3.0.2", | ||
"grunt-npm": "^0.0.2", | ||
"grunt-simple-mocha": "^0.4.1", | ||
"husky": "^4.2.3", | ||
"ibrik": "^2.0.0", | ||
@@ -58,6 +62,7 @@ "karma": "^4.2.0", | ||
"karma-requirejs": "1.x || ^0.2.2", | ||
"load-grunt-tasks": "^4.0.0", | ||
"load-grunt-tasks": "^5.1.0", | ||
"mocha": "^6.0.2", | ||
"mocks": "0.0.15", | ||
"requirejs": "^2.1.20", | ||
"semantic-release": "17.0.4", | ||
"sinon": "^7.2.7", | ||
@@ -67,4 +72,14 @@ "sinon-chai": "^3.3.0" | ||
"engines": { | ||
"node": ">=8.0.0" | ||
"node": ">=10.0.0" | ||
}, | ||
"commitlint": { | ||
"extends": [ | ||
"@commitlint/config-conventional" | ||
] | ||
}, | ||
"husky": { | ||
"hooks": { | ||
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS" | ||
} | ||
}, | ||
"contributors": [ | ||
@@ -71,0 +86,0 @@ "dignifiedquire <dignifiedquire@gmail.com>", |
@@ -122,2 +122,2 @@ # karma-coverage | ||
[homepage]: http://karma-runner.github.com | ||
[Istanbul]: https://github.com/gotwarlost/istanbul | ||
[Istanbul]: https://istanbul.js.org |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
6
0
592
57706
35
+ Added@ampproject/remapping@2.3.0(transitive)
+ Added@babel/compat-data@7.25.9(transitive)
+ Added@babel/core@7.25.9(transitive)
+ Added@babel/helper-compilation-targets@7.25.9(transitive)
+ Added@babel/helper-module-imports@7.25.9(transitive)
+ Added@babel/helper-module-transforms@7.25.9(transitive)
+ Added@babel/helper-simple-access@7.25.9(transitive)
+ Added@babel/helper-validator-option@7.25.9(transitive)
+ Added@babel/helpers@7.25.9(transitive)
+ Added@istanbuljs/schema@0.1.3(transitive)
+ Addedbrowserslist@4.24.2(transitive)
+ Addedcaniuse-lite@1.0.30001669(transitive)
+ Addedconvert-source-map@2.0.0(transitive)
+ Addedelectron-to-chromium@1.5.42(transitive)
+ Addedescalade@3.2.0(transitive)
+ Addedgensync@1.0.0-beta.2(transitive)
+ Addedhas-flag@4.0.0(transitive)
+ Addedistanbul-lib-coverage@3.2.2(transitive)
+ Addedistanbul-lib-instrument@4.0.3(transitive)
+ Addedistanbul-lib-report@3.0.1(transitive)
+ Addedistanbul-lib-source-maps@4.0.1(transitive)
+ Addedistanbul-reports@3.1.7(transitive)
+ Addedjson5@2.2.3(transitive)
+ Addedlru-cache@5.1.1(transitive)
+ Addedmake-dir@4.0.0(transitive)
+ Addednode-releases@2.0.18(transitive)
+ Addedsemver@7.6.3(transitive)
+ Addedsupports-color@7.2.0(transitive)
+ Addedupdate-browserslist-db@1.1.1(transitive)
+ Addedyallist@3.1.1(transitive)
- Removeddateformat@^1.0.6
- Removedistanbul@^0.4.0
- Removedlodash@^4.17.11
- Removedsource-map@^0.5.1
- Removedabbrev@1.0.9(transitive)
- Removedamdefine@1.0.1(transitive)
- Removedargparse@1.0.10(transitive)
- Removedarray-find-index@1.0.2(transitive)
- Removedasync@1.5.2(transitive)
- Removedcamelcase@2.1.1(transitive)
- Removedcamelcase-keys@2.1.0(transitive)
- Removedcurrently-unhandled@0.4.1(transitive)
- Removeddateformat@1.0.12(transitive)
- Removeddecamelize@1.2.0(transitive)
- Removeddeep-is@0.1.4(transitive)
- Removederror-ex@1.3.2(transitive)
- Removedescodegen@1.8.1(transitive)
- Removedesprima@2.7.34.0.1(transitive)
- Removedestraverse@1.9.3(transitive)
- Removedesutils@2.0.3(transitive)
- Removedfast-levenshtein@2.0.6(transitive)
- Removedfind-up@1.1.2(transitive)
- Removedfs.realpath@1.0.0(transitive)
- Removedfunction-bind@1.1.2(transitive)
- Removedget-stdin@4.0.1(transitive)
- Removedglob@5.0.157.2.3(transitive)
- Removedgraceful-fs@4.2.11(transitive)
- Removedhandlebars@4.7.8(transitive)
- Removedhas-flag@1.0.0(transitive)
- Removedhasown@2.0.2(transitive)
- Removedhosted-git-info@2.8.9(transitive)
- Removedindent-string@2.1.0(transitive)
- Removedinflight@1.0.6(transitive)
- Removedinherits@2.0.4(transitive)
- Removedis-arrayish@0.2.1(transitive)
- Removedis-core-module@2.15.1(transitive)
- Removedis-finite@1.1.0(transitive)
- Removedis-utf8@0.2.1(transitive)
- Removedisexe@2.0.0(transitive)
- Removedistanbul@0.4.5(transitive)
- Removedistanbul-lib-coverage@2.0.5(transitive)
- Removedistanbul-lib-instrument@3.3.0(transitive)
- Removedistanbul-lib-report@2.0.8(transitive)
- Removedistanbul-lib-source-maps@3.0.6(transitive)
- Removedistanbul-reports@2.2.7(transitive)
- Removedjs-yaml@3.14.1(transitive)
- Removedlevn@0.3.0(transitive)
- Removedload-json-file@1.1.0(transitive)
- Removedlodash@4.17.21(transitive)
- Removedloud-rejection@1.6.0(transitive)
- Removedmake-dir@2.1.0(transitive)
- Removedmap-obj@1.0.1(transitive)
- Removedmeow@3.7.0(transitive)
- Removedminimist@1.2.8(transitive)
- Removedmkdirp@0.5.6(transitive)
- Removedneo-async@2.6.2(transitive)
- Removednopt@3.0.6(transitive)
- Removednormalize-package-data@2.5.0(transitive)
- Removedobject-assign@4.1.1(transitive)
- Removedonce@1.4.0(transitive)
- Removedoptionator@0.8.3(transitive)
- Removedparse-json@2.2.0(transitive)
- Removedpath-exists@2.1.0(transitive)
- Removedpath-is-absolute@1.0.1(transitive)
- Removedpath-parse@1.0.7(transitive)
- Removedpath-type@1.1.0(transitive)
- Removedpify@2.3.04.0.1(transitive)
- Removedpinkie@2.0.4(transitive)
- Removedpinkie-promise@2.0.1(transitive)
- Removedprelude-ls@1.1.2(transitive)
- Removedread-pkg@1.1.0(transitive)
- Removedread-pkg-up@1.0.1(transitive)
- Removedredent@1.0.0(transitive)
- Removedrepeating@2.0.1(transitive)
- Removedresolve@1.1.71.22.8(transitive)
- Removedrimraf@2.7.1(transitive)
- Removedsemver@5.7.2(transitive)
- Removedsignal-exit@3.0.7(transitive)
- Removedsource-map@0.2.00.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.20(transitive)
- Removedsprintf-js@1.0.3(transitive)
- Removedstrip-bom@2.0.0(transitive)
- Removedstrip-indent@1.0.1(transitive)
- Removedsupports-color@3.2.36.1.0(transitive)
- Removedsupports-preserve-symlinks-flag@1.0.0(transitive)
- Removedtrim-newlines@1.0.0(transitive)
- Removedtype-check@0.3.2(transitive)
- Removeduglify-js@3.19.3(transitive)
- Removedvalidate-npm-package-license@3.0.4(transitive)
- Removedwhich@1.3.1(transitive)
- Removedword-wrap@1.2.5(transitive)
- Removedwordwrap@1.0.0(transitive)
- Removedwrappy@1.0.2(transitive)
Updatedistanbul-lib-coverage@^3.0.0
Updatedistanbul-lib-report@^3.0.0
Updatedistanbul-reports@^3.0.0
Updatedminimatch@^3.0.4