karma-coverage
Advanced tools
Comparing version 0.3.1 to 0.4.0
@@ -1,19 +0,19 @@ | ||
var coverageMap = {}; | ||
var coverageMap = {} | ||
function addCoverage(coverageObj){ | ||
coverageMap[coverageObj.path] = coverageObj; | ||
function addCoverage (coverageObj) { | ||
coverageMap[coverageObj.path] = coverageObj | ||
} | ||
function getCoverageMap(){ | ||
return coverageMap; | ||
function getCoverageMap () { | ||
return coverageMap | ||
} | ||
function resetCoverage(){ | ||
coverageMap = {}; | ||
function resetCoverage () { | ||
coverageMap = {} | ||
} | ||
module.exports = { | ||
add: addCoverage, | ||
get: getCoverageMap, | ||
reset: resetCoverage | ||
}; | ||
add: addCoverage, | ||
get: getCoverageMap, | ||
reset: resetCoverage | ||
} |
module.exports = { | ||
'preprocessor:coverage': ['factory', require('./preprocessor')], | ||
'reporter:coverage': ['type', require('./reporter')] | ||
}; | ||
} |
@@ -1,88 +0,89 @@ | ||
var istanbul = require('istanbul'), | ||
minimatch = require('minimatch'), | ||
globalSourceCache = require('./sourceCache'), | ||
extend = require('util')._extend, | ||
coverageMap = require('./coverageMap'); | ||
var istanbul = require('istanbul'), | ||
minimatch = require('minimatch'), | ||
globalSourceCache = require('./sourceCache'), | ||
extend = require('util')._extend, | ||
coverageMap = require('./coverageMap') | ||
var createCoveragePreprocessor = function(logger, basePath, reporters, coverageReporter) { | ||
var log = logger.create('preprocessor.coverage'); | ||
var instrumenterOverrides = (coverageReporter && coverageReporter.instrumenter) || {}; | ||
var instrumenters = extend({istanbul: istanbul}, (coverageReporter && coverageReporter.instrumenters)); | ||
var sourceCache = globalSourceCache.getByBasePath(basePath); | ||
var includeAllSources = coverageReporter && coverageReporter.includeAllSources === true; | ||
var instrumentersOptions = Object.keys(instrumenters).reduce(function getInstumenterOptions(memo, instrumenterName){ | ||
memo[instrumenterName] = (coverageReporter && coverageReporter.instrumenterOptions && coverageReporter.instrumenterOptions[instrumenterName]) || {}; | ||
return memo; | ||
}, {}); | ||
var createCoveragePreprocessor = function (logger, basePath, reporters, coverageReporter) { | ||
var log = logger.create('preprocessor.coverage') | ||
var instrumenterOverrides = (coverageReporter && coverageReporter.instrumenter) || {} | ||
var instrumenters = extend({istanbul: istanbul}, (coverageReporter && coverageReporter.instrumenters)) | ||
var sourceCache = globalSourceCache.getByBasePath(basePath) | ||
var includeAllSources = coverageReporter && coverageReporter.includeAllSources === true | ||
var instrumentersOptions = Object.keys(instrumenters).reduce(function getInstumenterOptions (memo, instrumenterName) { | ||
memo[instrumenterName] = (coverageReporter && coverageReporter.instrumenterOptions && coverageReporter.instrumenterOptions[instrumenterName]) || {} | ||
return memo | ||
}, {}) | ||
// if coverage reporter is not used, do not preprocess the files | ||
if (reporters.indexOf('coverage') === -1) { | ||
return function(content, _, done) { | ||
done(content); | ||
}; | ||
return function (content, _, done) { | ||
done(content) | ||
} | ||
} | ||
// check instrumenter override requests | ||
function checkInstrumenters() { | ||
var literal; | ||
function checkInstrumenters () { | ||
var literal | ||
for (var pattern in instrumenterOverrides) { | ||
literal = String(instrumenterOverrides[pattern]); | ||
literal = String(instrumenterOverrides[pattern]) | ||
if (Object.keys(instrumenters).indexOf(literal) < 0) { | ||
log.error('Unknown instrumenter: %s', literal); | ||
return false; | ||
log.error('Unknown instrumenter: %s', literal) | ||
return false | ||
} | ||
} | ||
return true; | ||
return true | ||
} | ||
if (!checkInstrumenters()) { | ||
return function(content, _, done) { | ||
return done(1); | ||
}; | ||
return function (content, _, done) { | ||
return done(1) | ||
} | ||
} | ||
return function(content, file, done) { | ||
log.debug('Processing "%s".', file.originalPath); | ||
return function (content, file, done) { | ||
log.debug('Processing "%s".', file.originalPath) | ||
var jsPath = file.originalPath.replace(basePath + '/', './'); | ||
var jsPath = file.originalPath.replace(basePath + '/', './') | ||
// default instrumenters | ||
var instrumenterLiteral = 'istanbul'; | ||
var instrumenterLiteral = 'istanbul' | ||
for (var pattern in instrumenterOverrides) { | ||
if (minimatch(file.originalPath, pattern, {dot: true})) { | ||
instrumenterLiteral = String(instrumenterOverrides[pattern]); | ||
instrumenterLiteral = String(instrumenterOverrides[pattern]) | ||
} | ||
} | ||
var instrumenter = new instrumenters[instrumenterLiteral].Instrumenter(instrumentersOptions[instrumenterLiteral] || {}); | ||
var instrumenter = new instrumenters[instrumenterLiteral].Instrumenter(instrumentersOptions[instrumenterLiteral] || {}) | ||
instrumenter.instrument(content, jsPath, function(err, instrumentedCode) { | ||
instrumenter.instrument(content, jsPath, function (err, instrumentedCode) { | ||
if (err) { | ||
log.error('%s\n at %s', err.message, file.originalPath); | ||
log.error('%s\n at %s', err.message, file.originalPath) | ||
} | ||
// remember the actual immediate instrumented JS for given original path | ||
sourceCache[jsPath] = content; | ||
sourceCache[jsPath] = content | ||
if (includeAllSources) { | ||
var coverageObjRegex = /\{.*"path".*"fnMap".*"statementMap".*"branchMap".*\}/g; | ||
var coverageObjMatch = coverageObjRegex.exec(instrumentedCode); | ||
var coverageObjRegex = /\{.*"path".*"fnMap".*"statementMap".*"branchMap".*\}/g | ||
var coverageObjMatch = coverageObjRegex.exec(instrumentedCode) | ||
if (coverageObjMatch !== null) { | ||
var coverageObj = JSON.parse(coverageObjMatch[0]); | ||
coverageMap.add(coverageObj); | ||
var coverageObj = JSON.parse(coverageObjMatch[0]) | ||
coverageMap.add(coverageObj) | ||
} | ||
} | ||
done(instrumentedCode); | ||
}); | ||
}; | ||
}; | ||
done(instrumentedCode) | ||
}) | ||
} | ||
} | ||
createCoveragePreprocessor.$inject = ['logger', | ||
'config.basePath', | ||
'config.reporters', | ||
'config.coverageReporter']; | ||
createCoveragePreprocessor.$inject = [ | ||
'logger', | ||
'config.basePath', | ||
'config.reporters', | ||
'config.coverageReporter' | ||
] | ||
module.exports = createCoveragePreprocessor; | ||
module.exports = createCoveragePreprocessor |
@@ -1,67 +0,71 @@ | ||
var path = require('path'); | ||
var fs = require('fs'); | ||
var util = require('util'); | ||
var istanbul = require('istanbul'); | ||
var dateformat = require('dateformat'); | ||
var globalSourceCache = require('./sourceCache'); | ||
var coverageMap = require('./coverageMap'); | ||
var path = require('path') | ||
var util = require('util') | ||
var istanbul = require('istanbul') | ||
var globalSourceCache = require('./sourceCache') | ||
var coverageMap = require('./coverageMap') | ||
var Store = istanbul.Store | ||
var Store = istanbul.Store; | ||
var SourceCacheStore = function (opts) { | ||
Store.call(this, opts) | ||
opts = opts || {} | ||
this.sourceCache = opts.sourceCache | ||
} | ||
SourceCacheStore.TYPE = 'sourceCacheLookup' | ||
util.inherits(SourceCacheStore, Store) | ||
var SourceCacheStore = function(opts) { | ||
Store.call(this, opts); | ||
opts = opts || {}; | ||
this.sourceCache = opts.sourceCache; | ||
}; | ||
SourceCacheStore.TYPE = 'sourceCacheLookup'; | ||
util.inherits(SourceCacheStore, Store); | ||
Store.mix(SourceCacheStore, { | ||
keys : function() { | ||
throw 'not implemented'; | ||
keys: function () { | ||
throw new Error('Not implemented') | ||
}, | ||
get : function(key) { | ||
return this.sourceCache[key]; | ||
get: function (key) { | ||
return this.sourceCache[key] | ||
}, | ||
hasKey : function(key) { | ||
return this.sourceCache.hasOwnProperty(key); | ||
hasKey: function (key) { | ||
return this.sourceCache.hasOwnProperty(key) | ||
}, | ||
set : function(key, contents) { | ||
throw 'not applicable'; | ||
set: function (key, contents) { | ||
throw new Error('Not applicable') | ||
} | ||
}); | ||
}) | ||
// TODO(vojta): inject only what required (config.basePath, config.coverageReporter) | ||
var CoverageReporter = function(rootConfig, helper, logger) { | ||
var log = logger.create('coverage'); | ||
var config = rootConfig.coverageReporter || {}; | ||
var basePath = rootConfig.basePath; | ||
var reporters = config.reporters; | ||
var sourceCache = globalSourceCache.getByBasePath(basePath); | ||
var includeAllSources = config.includeAllSources === true; | ||
var CoverageReporter = function (rootConfig, helper, logger) { | ||
var _ = helper._ | ||
var log = logger.create('coverage') | ||
var config = rootConfig.coverageReporter || {} | ||
var basePath = rootConfig.basePath | ||
var reporters = config.reporters | ||
var sourceCache = globalSourceCache.getByBasePath(basePath) | ||
var includeAllSources = config.includeAllSources === true | ||
if (config.watermarks) { | ||
config.watermarks = helper.merge({}, istanbul.config.defaultConfig().reporting.watermarks, config.watermarks) | ||
} | ||
if (!helper.isDefined(reporters)) { | ||
reporters = [config]; | ||
reporters = [config] | ||
} | ||
this.adapters = []; | ||
var collectors; | ||
var pendingFileWritings = 0; | ||
var fileWritingFinished = function() {}; | ||
this.adapters = [] | ||
var collectors | ||
var pendingFileWritings = 0 | ||
var fileWritingFinished = function () {} | ||
function writeReport(reporter, collector) { | ||
function writeReport (reporter, collector) { | ||
try { | ||
reporter.writeReport(collector, true); | ||
reporter.writeReport(collector, true) | ||
} catch (e) { | ||
log.error(e); | ||
log.error(e) | ||
} | ||
if (!--pendingFileWritings) { | ||
// cleanup collectors | ||
Object.keys(collectors).forEach(function(key) { | ||
collectors[key].dispose(); | ||
}); | ||
fileWritingFinished(); | ||
--pendingFileWritings | ||
} | ||
function disposeCollectors () { | ||
if (pendingFileWritings <= 0) { | ||
Object.keys(collectors).forEach(function (key) { | ||
collectors[key].dispose() | ||
}) | ||
fileWritingFinished() | ||
} | ||
@@ -80,95 +84,100 @@ } | ||
*/ | ||
function generateOutputDir(browserName, dir, subdir) { | ||
dir = dir || 'coverage'; | ||
subdir = subdir || browserName; | ||
function generateOutputDir (browserName, dir, subdir) { | ||
dir = dir || 'coverage' | ||
subdir = subdir || browserName | ||
if (typeof subdir === 'function') { | ||
subdir = subdir(browserName); | ||
subdir = subdir(browserName) | ||
} | ||
return path.join(dir, subdir); | ||
return path.join(dir, subdir) | ||
} | ||
this.onRunStart = function(browsers) { | ||
collectors = Object.create(null); | ||
this.onRunStart = function (browsers) { | ||
collectors = Object.create(null) | ||
// TODO(vojta): remove once we don't care about Karma 0.10 | ||
if (browsers) { | ||
browsers.forEach(this.onBrowserStart.bind(this)); | ||
browsers.forEach(this.onBrowserStart.bind(this)) | ||
} | ||
}; | ||
} | ||
this.onBrowserStart = function(browser) { | ||
collectors[browser.id] = new istanbul.Collector(); | ||
if(includeAllSources){ | ||
collectors[browser.id].add(coverageMap.get()); | ||
this.onBrowserStart = function (browser) { | ||
collectors[browser.id] = new istanbul.Collector() | ||
if (includeAllSources) { | ||
collectors[browser.id].add(coverageMap.get()) | ||
} | ||
}; | ||
} | ||
this.onBrowserComplete = function(browser, result) { | ||
var collector = collectors[browser.id]; | ||
this.onBrowserComplete = function (browser, result) { | ||
var collector = collectors[browser.id] | ||
if (!collector) { | ||
return; | ||
return | ||
} | ||
if (result && result.coverage) { | ||
collector.add(result.coverage); | ||
collector.add(result.coverage) | ||
} | ||
}; | ||
} | ||
this.onSpecComplete = function(browser, result) { | ||
this.onSpecComplete = function (browser, result) { | ||
if (result.coverage) { | ||
collectors[browser.id].add(result.coverage); | ||
collectors[browser.id].add(result.coverage) | ||
} | ||
}; | ||
} | ||
this.onRunComplete = function(browsers) { | ||
reporters.forEach(function(reporterConfig) { | ||
browsers.forEach(function(browser) { | ||
var collector = collectors[browser.id]; | ||
this.onRunComplete = function (browsers) { | ||
reporters.forEach(function (reporterConfig) { | ||
browsers.forEach(function (browser) { | ||
var collector = collectors[browser.id] | ||
if (collector) { | ||
pendingFileWritings++; | ||
pendingFileWritings++ | ||
var outputDir = helper.normalizeWinPath(path.resolve(basePath, generateOutputDir(browser.name, | ||
reporterConfig.dir || config.dir, | ||
reporterConfig.subdir || config.subdir))); | ||
var mainDir = reporterConfig.dir || config.dir | ||
var subDir = reporterConfig.subdir || config.subdir | ||
var simpleOutputDir = generateOutputDir(browser.name, mainDir, subDir) | ||
var resolvedOutputDir = path.resolve(basePath, simpleOutputDir) | ||
var options = helper.merge({}, reporterConfig, { | ||
dir : outputDir, | ||
sourceStore : new SourceCacheStore({ | ||
var outputDir = helper.normalizeWinPath(resolvedOutputDir) | ||
var options = helper.merge({ | ||
sourceStore: _.isEmpty(sourceCache) ? null : new SourceCacheStore({ | ||
sourceCache: sourceCache | ||
}) | ||
}); | ||
var reporter = istanbul.Report.create(reporterConfig.type || 'html', options); | ||
}, config, reporterConfig, { | ||
dir: outputDir | ||
}) | ||
var reporter = istanbul.Report.create(reporterConfig.type || 'html', options) | ||
// If reporting to console, skip directory creation | ||
if (reporterConfig.type && reporterConfig.type.match(/^(text|text-summary)$/) && typeof reporterConfig.file === 'undefined') { | ||
writeReport(reporter, collector); | ||
return; | ||
writeReport(reporter, collector) | ||
return | ||
} | ||
helper.mkdirIfNotExists(outputDir, function() { | ||
log.debug('Writing coverage to %s', outputDir); | ||
writeReport(reporter, collector); | ||
}); | ||
helper.mkdirIfNotExists(outputDir, function () { | ||
log.debug('Writing coverage to %s', outputDir) | ||
writeReport(reporter, collector) | ||
disposeCollectors() | ||
}) | ||
} | ||
}); | ||
}); | ||
}; | ||
}) | ||
}) | ||
this.onExit = function(done) { | ||
disposeCollectors() | ||
} | ||
this.onExit = function (done) { | ||
if (pendingFileWritings) { | ||
fileWritingFinished = done; | ||
fileWritingFinished = done | ||
} else { | ||
done(); | ||
done() | ||
} | ||
}; | ||
}; | ||
} | ||
} | ||
CoverageReporter.$inject = ['config', 'helper', 'logger']; | ||
CoverageReporter.$inject = ['config', 'helper', 'logger'] | ||
// PUBLISH | ||
module.exports = CoverageReporter; | ||
module.exports = CoverageReporter |
@@ -0,6 +1,5 @@ | ||
var cacheByBasePath = {} | ||
var cacheByBasePath = {}; | ||
exports.getByBasePath = function (basePath) { | ||
return cacheByBasePath[basePath] ? cacheByBasePath[basePath] : (cacheByBasePath[basePath] = {}); | ||
}; | ||
return cacheByBasePath[basePath] ? cacheByBasePath[basePath] : (cacheByBasePath[basePath] = {}) | ||
} |
{ | ||
"name": "karma-coverage", | ||
"version": "0.3.1", | ||
"version": "0.4.0", | ||
"description": "A Karma plugin. Generate code coverage.", | ||
@@ -22,32 +22,59 @@ "main": "lib/index.js", | ||
"dependencies": { | ||
"istanbul": "~0.3.0", | ||
"dateformat": "~1.0.6", | ||
"minimatch": "~0.3.0" | ||
"istanbul": "^0.3.0", | ||
"dateformat": "^1.0.6", | ||
"minimatch": "^2.0.8" | ||
}, | ||
"peerDependencies": { | ||
"karma": ">=0.9" | ||
}, | ||
"license": "MIT", | ||
"devDependencies": { | ||
"chai": "~1.7.2", | ||
"grunt": "~0.4.1", | ||
"grunt-auto-release": "~0.0.1", | ||
"grunt-bump": "~0.0.7", | ||
"grunt-contrib-jshint": "~0.6.0", | ||
"grunt-npm": "~0.0.2", | ||
"grunt-simple-mocha": "~0.4.0", | ||
"karma": "~0.12.0", | ||
"lodash": "^2.4.1", | ||
"chai": "^2.3.0", | ||
"eslint": "^0.22.1", | ||
"eslint-config-standard": "^2.0.1", | ||
"eslint-plugin-react": "^2.5.0", | ||
"grunt": "^0.4.1", | ||
"grunt-bump": "^0.3.1", | ||
"grunt-conventional-changelog": "^1.2.2", | ||
"grunt-eslint": "^14.0.0", | ||
"grunt-npm": "^0.0.2", | ||
"grunt-simple-mocha": "^0.4.0", | ||
"karma": "^0.12.0", | ||
"load-grunt-tasks": "^3.2.0", | ||
"lodash": "^3.9.3", | ||
"mocks": "0.0.11", | ||
"sinon": "~1.7.3", | ||
"sinon-chai": "~2.4.0" | ||
"sinon": "^1.14.1", | ||
"sinon-chai": "^2.8.0" | ||
}, | ||
"contributors": [ | ||
"Friedel Ziegelmayer <friedel.ziegelmayer@gmail.com>", | ||
"Aymeric Beaumet <aymeric@beaumet.me>", | ||
"Friedel Ziegelmayer <dignifiedquire@gmail.com>", | ||
"Tim Kang <timkang@ucla.edu>", | ||
"Maksim Ryzhikov <rv.maksim@gmail.com>", | ||
"Allen Bierbaum <abierbaum@gmail.com>", | ||
"Matt Winchester <m_winche@yahoo.com>", | ||
"Douglas Duteil <douglasduteil@gmail.com>", | ||
"Wei Kin Huang <weikin.huang04@gmail.com>", | ||
"Michael Stramel <m.stramel89@gmail.com>", | ||
"Nick Malaguti <nmalaguti@palantir.com>", | ||
"Nick Matantsev <nick.matantsev@gmail.com>", | ||
"Petar Manev <petar.manev2010@gmail.com>", | ||
"Robin Böhm <robinboehm@googlemail.com>", | ||
"Ron Derksen <ron.derksen@informaat.nl>", | ||
"Sahat Yalkabov <sakhat@gmail.com>", | ||
"Tanjo, Hiroyuki <expheno@gmail.com>", | ||
"Taylor Hakes <taylor@taylorhakes.com>", | ||
"Timo Tijhof <krinklemail@gmail.com>", | ||
"Tom Kirkpatrick <tom@systemseed.com>", | ||
"Vincent Lemeunier <vincent.lemeunier+git@gmail.com>", | ||
"Yusuke Suzuki <utatane.tea@gmail.com>", | ||
"aprooks <alexander.prooks@gmail.com>", | ||
"piecyk <piecyk@gmail.com>", | ||
"Chris Gladd <chris.m.gladd@gmail.com>", | ||
"Dmitry Petrov <dpetroff@gmail.com>", | ||
"Greg Varsanyi <gvarsanyi@gmail.com>", | ||
"Joseph Connolly <joec@avinetworks.com>", | ||
"Joshua Appelman <jappelman@xebia.com>", | ||
"Julie <ju.ralph@gmail.com>", | ||
"Friedel Ziegelmayer <dignifiedquire@gmail.com>", | ||
"Petar Manev <petar.manev2010@gmail.com>" | ||
"Kyle Welsby <kyle@mekyle.com>", | ||
"Maciej Rzepiński <maciej.rzepinski@gmail.com>", | ||
"Mark Ethan Trostler <mark@zzo.com>" | ||
] | ||
} |
@@ -1,3 +0,8 @@ | ||
# karma-coverage [![Build Status](https://travis-ci.org/karma-runner/karma-coverage.svg?branch=master)](https://travis-ci.org/karma-runner/karma-coverage) | ||
# karma-coverage | ||
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/karma-runner/karma-coverage) | ||
[![npm version](https://img.shields.io/npm/v/karma-coverage.svg?style=flat-square)](https://www.npmjs.com/package/karma-coverage) [![npm downloads](https://img.shields.io/npm/dm/karma-coverage.svg?style=flat-square)](https://www.npmjs.com/package/karma-coverage) | ||
[![Build Status](https://img.shields.io/travis/karma-runner/karma-coverage/master.svg?style=flat-square)](https://travis-ci.org/karma-runner/karma-coverage) [![Dependency Status](https://img.shields.io/david/karma-runner/karma-coverage.svg?style=flat-square)](https://david-dm.org/karma-runner/karma-coverage) [![devDependency Status](https://img.shields.io/david/dev/karma-runner/karma-coverage.svg?style=flat-square)](https://david-dm.org/karma-runner/karma-coverage#info=devDependencies) | ||
> Generate code coverage using [Istanbul]. | ||
@@ -7,15 +12,7 @@ | ||
The easiest way is to keep `karma-coverage` as a devDependency in your `package.json`. | ||
```json | ||
{ | ||
"devDependencies": { | ||
"karma": "~0.10", | ||
"karma-coverage": "~0.1" | ||
} | ||
} | ||
``` | ||
The easiest way is to install `karma-coverage` as a `devDependency`, | ||
by running | ||
You can simple do it by: | ||
```bash | ||
npm install karma-coverage --save-dev | ||
npm install karma karma-coverage --save-dev | ||
``` | ||
@@ -227,2 +224,16 @@ | ||
#### sourceStore | ||
**Type:** istanbul.Store | ||
You can opt to specify a source store allowing for external coverage collectors access to the instrumented code. | ||
```javascript | ||
coverageReporter: { | ||
type : 'text', | ||
dir : 'coverage/', | ||
file : 'coverage.txt', | ||
sourceStore : require('istanbul').Store.create('fslookup') | ||
} | ||
``` | ||
#### multiple reporters | ||
@@ -289,2 +300,2 @@ You can use multiple reporters, by providing array of options. | ||
[homepage]: http://karma-runner.github.com | ||
[Istanbul]: https://github.com/yahoo/istanbul | ||
[Istanbul]: https://github.com/gotwarlost/istanbul |
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
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
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
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
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
28370
3
10
300
299
0
16
2
- Removed@colors/colors@1.5.0(transitive)
- Removed@socket.io/component-emitter@3.1.2(transitive)
- Removed@types/cookie@0.4.1(transitive)
- Removed@types/cors@2.8.17(transitive)
- Removed@types/node@22.7.9(transitive)
- Removedaccepts@1.3.8(transitive)
- Removedansi-regex@5.0.1(transitive)
- Removedansi-styles@4.3.0(transitive)
- Removedanymatch@3.1.3(transitive)
- Removedbase64id@2.0.0(transitive)
- Removedbinary-extensions@2.3.0(transitive)
- Removedbody-parser@1.20.3(transitive)
- Removedbraces@3.0.3(transitive)
- Removedbytes@3.1.2(transitive)
- Removedcall-bind@1.0.7(transitive)
- Removedchokidar@3.6.0(transitive)
- Removedcliui@7.0.4(transitive)
- Removedcolor-convert@2.0.1(transitive)
- Removedcolor-name@1.1.4(transitive)
- Removedconnect@3.7.0(transitive)
- Removedcontent-type@1.0.5(transitive)
- Removedcookie@0.7.2(transitive)
- Removedcors@2.8.5(transitive)
- Removedcustom-event@1.0.1(transitive)
- Removeddate-format@4.0.14(transitive)
- Removeddebug@2.6.94.3.7(transitive)
- Removeddefine-data-property@1.1.4(transitive)
- Removeddepd@2.0.0(transitive)
- Removeddestroy@1.2.0(transitive)
- Removeddi@0.0.1(transitive)
- Removeddom-serialize@2.2.1(transitive)
- Removedee-first@1.1.1(transitive)
- Removedemoji-regex@8.0.0(transitive)
- Removedencodeurl@1.0.2(transitive)
- Removedengine.io@6.6.2(transitive)
- Removedengine.io-parser@5.2.3(transitive)
- Removedent@2.2.1(transitive)
- Removedes-define-property@1.0.0(transitive)
- Removedes-errors@1.3.0(transitive)
- Removedescalade@3.2.0(transitive)
- Removedescape-html@1.0.3(transitive)
- Removedeventemitter3@4.0.7(transitive)
- Removedextend@3.0.2(transitive)
- Removedfill-range@7.1.1(transitive)
- Removedfinalhandler@1.1.2(transitive)
- Removedflatted@3.3.1(transitive)
- Removedfollow-redirects@1.15.9(transitive)
- Removedfs-extra@8.1.0(transitive)
- Removedfs.realpath@1.0.0(transitive)
- Removedfsevents@2.3.3(transitive)
- Removedget-caller-file@2.0.5(transitive)
- Removedget-intrinsic@1.2.4(transitive)
- Removedglob@7.2.3(transitive)
- Removedglob-parent@5.1.2(transitive)
- Removedgopd@1.0.1(transitive)
- Removedhas-property-descriptors@1.0.2(transitive)
- Removedhas-proto@1.0.3(transitive)
- Removedhas-symbols@1.0.3(transitive)
- Removedhttp-errors@2.0.0(transitive)
- Removedhttp-proxy@1.18.1(transitive)
- Removediconv-lite@0.4.24(transitive)
- Removedis-binary-path@2.1.0(transitive)
- Removedis-extglob@2.1.1(transitive)
- Removedis-fullwidth-code-point@3.0.0(transitive)
- Removedis-glob@4.0.3(transitive)
- Removedis-number@7.0.0(transitive)
- Removedisbinaryfile@4.0.10(transitive)
- Removedjsonfile@4.0.0(transitive)
- Removedkarma@6.4.4(transitive)
- Removedlodash@4.17.21(transitive)
- Removedlog4js@6.9.1(transitive)
- Removedlru-cache@2.7.3(transitive)
- Removedmedia-typer@0.3.0(transitive)
- Removedmime@2.6.0(transitive)
- Removedmime-db@1.52.0(transitive)
- Removedmime-types@2.1.35(transitive)
- Removedminimatch@0.3.03.1.2(transitive)
- Removedms@2.0.02.1.3(transitive)
- Removednegotiator@0.6.3(transitive)
- Removednormalize-path@3.0.0(transitive)
- Removedobject-inspect@1.13.2(transitive)
- Removedon-finished@2.3.02.4.1(transitive)
- Removedparseurl@1.3.3(transitive)
- Removedpicomatch@2.3.1(transitive)
- Removedpunycode@1.4.1(transitive)
- Removedqjobs@1.2.0(transitive)
- Removedqs@6.13.0(transitive)
- Removedrange-parser@1.2.1(transitive)
- Removedraw-body@2.5.2(transitive)
- Removedreaddirp@3.6.0(transitive)
- Removedrequire-directory@2.1.1(transitive)
- Removedrequires-port@1.0.0(transitive)
- Removedrfdc@1.4.1(transitive)
- Removedrimraf@3.0.2(transitive)
- Removedsafer-buffer@2.1.2(transitive)
- Removedset-function-length@1.2.2(transitive)
- Removedsetprototypeof@1.2.0(transitive)
- Removedside-channel@1.0.6(transitive)
- Removedsigmund@1.0.1(transitive)
- Removedsocket.io@4.8.0(transitive)
- Removedsocket.io-adapter@2.5.5(transitive)
- Removedsocket.io-parser@4.2.4(transitive)
- Removedstatuses@1.5.02.0.1(transitive)
- Removedstreamroller@3.1.5(transitive)
- Removedstring-width@4.2.3(transitive)
- Removedstrip-ansi@6.0.1(transitive)
- Removedtmp@0.2.3(transitive)
- Removedto-regex-range@5.0.1(transitive)
- Removedtoidentifier@1.0.1(transitive)
- Removedtype-is@1.6.18(transitive)
- Removedua-parser-js@0.7.39(transitive)
- Removedundici-types@6.19.8(transitive)
- Removeduniversalify@0.1.2(transitive)
- Removedunpipe@1.0.0(transitive)
- Removedutils-merge@1.0.1(transitive)
- Removedvary@1.1.2(transitive)
- Removedvoid-elements@2.0.1(transitive)
- Removedwrap-ansi@7.0.0(transitive)
- Removedws@8.17.1(transitive)
- Removedy18n@5.0.8(transitive)
- Removedyargs@16.2.0(transitive)
- Removedyargs-parser@20.2.9(transitive)
Updateddateformat@^1.0.6
Updatedistanbul@^0.3.0
Updatedminimatch@^2.0.8