appmetrics
Advanced tools
Comparing version 3.0.1 to 3.0.2
@@ -42,3 +42,3 @@ /******************************************************************************* | ||
var AGENTCORE_VERSION = "3.2.1"; | ||
var APPMETRICS_VERSION = "3.0.1"; | ||
var APPMETRICS_VERSION = "3.0.2"; | ||
@@ -116,2 +116,5 @@ var LOG_FILE = path.join(INSTALL_DIR, 'install.log'); | ||
} | ||
if (process.version.indexOf('v8') === 0) { | ||
return '8'; | ||
} | ||
console.log('Unsupported version ' + process.version + '. Trying rebuild.'); | ||
@@ -118,0 +121,0 @@ fail(); |
@@ -49,3 +49,3 @@ { | ||
"shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", | ||
"tarball": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" | ||
"tarball": "https://npm-registry.whitewater.ibm.com/m/minimist/_attachments/minimist-0.0.8.tgz" | ||
}, | ||
@@ -66,4 +66,4 @@ "_from": "minimist@0.0.8", | ||
"_shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", | ||
"_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", | ||
"_resolved": "https://npm-registry.whitewater.ibm.com/m/minimist/_attachments/minimist-0.0.8.tgz", | ||
"readme": "ERROR: No README data found!" | ||
} |
@@ -156,5 +156,3 @@ // Approach: | ||
var self = this | ||
var n = this.minimatch.set.length | ||
this._processing = 0 | ||
this.matches = new Array(n) | ||
@@ -161,0 +159,0 @@ this._emitQueue = [] |
@@ -46,3 +46,3 @@ { | ||
"shasum": "1504ad2523158caa40db4a2787cb01411994ea4f", | ||
"tarball": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" | ||
"tarball": "http://173.192.225.82:8080/f/fs.realpath/_attachments/fs.realpath-1.0.0.tgz" | ||
}, | ||
@@ -60,4 +60,4 @@ "maintainers": [ | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", | ||
"_resolved": "http://173.192.225.82:8080/f/fs.realpath/_attachments/fs.realpath-1.0.0.tgz", | ||
"readme": "ERROR: No README data found!" | ||
} |
@@ -53,3 +53,3 @@ { | ||
"_shasum": "3effc3c50e000531fb720eaff80f0ae8ef23cf59", | ||
"_from": "brace-expansion@>=1.0.0 <2.0.0", | ||
"_from": "brace-expansion@>=1.1.7 <2.0.0", | ||
"_npmVersion": "4.2.0", | ||
@@ -56,0 +56,0 @@ "_nodeVersion": "7.8.0", |
@@ -9,3 +9,3 @@ { | ||
"description": "a glob matcher in javascript", | ||
"version": "3.0.3", | ||
"version": "3.0.4", | ||
"repository": { | ||
@@ -17,4 +17,6 @@ "type": "git", | ||
"scripts": { | ||
"posttest": "standard minimatch.js test/*.js", | ||
"test": "tap test/*.js" | ||
"test": "tap test/*.js --cov", | ||
"preversion": "npm test", | ||
"postversion": "npm publish", | ||
"postpublish": "git push origin --all; git push origin --tags" | ||
}, | ||
@@ -25,7 +27,6 @@ "engines": { | ||
"dependencies": { | ||
"brace-expansion": "^1.0.0" | ||
"brace-expansion": "^1.1.7" | ||
}, | ||
"devDependencies": { | ||
"standard": "^3.7.2", | ||
"tap": "^5.6.0" | ||
"tap": "^10.3.2" | ||
}, | ||
@@ -36,3 +37,3 @@ "license": "ISC", | ||
], | ||
"gitHead": "eed89491bd4a4e6bc463aac0dfb5c29ef0d1dc13", | ||
"gitHead": "e46989a323d5f0aa4781eff5e2e6e7aafa223321", | ||
"bugs": { | ||
@@ -42,7 +43,5 @@ "url": "https://github.com/isaacs/minimatch/issues" | ||
"homepage": "https://github.com/isaacs/minimatch#readme", | ||
"_id": "minimatch@3.0.3", | ||
"_shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774", | ||
"_from": "minimatch@>=3.0.2 <4.0.0", | ||
"_npmVersion": "3.10.6", | ||
"_nodeVersion": "4.4.4", | ||
"_id": "minimatch@3.0.4", | ||
"_npmVersion": "5.0.0-beta.43", | ||
"_nodeVersion": "8.0.0-pre", | ||
"_npmUser": { | ||
@@ -53,4 +52,5 @@ "name": "isaacs", | ||
"dist": { | ||
"shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774", | ||
"tarball": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz" | ||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", | ||
"shasum": "5166e286457f03306064be5497e8dbb0c3d32083", | ||
"tarball": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" | ||
}, | ||
@@ -64,8 +64,10 @@ "maintainers": [ | ||
"_npmOperationalInternal": { | ||
"host": "packages-12-west.internal.npmjs.com", | ||
"tmp": "tmp/minimatch-3.0.3.tgz_1470678322731_0.1892083385027945" | ||
"host": "packages-18-east.internal.npmjs.com", | ||
"tmp": "tmp/minimatch-3.0.4.tgz_1494180669024_0.22628829116001725" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", | ||
"_shasum": "5166e286457f03306064be5497e8dbb0c3d32083", | ||
"_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", | ||
"_from": "minimatch@>=3.0.4 <4.0.0", | ||
"readme": "ERROR: No README data found!" | ||
} |
@@ -9,3 +9,3 @@ { | ||
"description": "a little globber", | ||
"version": "7.1.1", | ||
"version": "7.1.2", | ||
"repository": { | ||
@@ -28,3 +28,3 @@ "type": "git", | ||
"inherits": "2", | ||
"minimatch": "^3.0.2", | ||
"minimatch": "^3.0.4", | ||
"once": "^1.3.0", | ||
@@ -49,3 +49,3 @@ "path-is-absolute": "^1.0.0" | ||
"license": "ISC", | ||
"gitHead": "bc8d43b736a98a9e289fdfceee9266cff35e5742", | ||
"gitHead": "8fa8d561e08c9eed1d286c6a35be2cd8123b2fb7", | ||
"bugs": { | ||
@@ -55,7 +55,5 @@ "url": "https://github.com/isaacs/node-glob/issues" | ||
"homepage": "https://github.com/isaacs/node-glob#readme", | ||
"_id": "glob@7.1.1", | ||
"_shasum": "805211df04faaf1c63a3600306cdf5ade50b2ec8", | ||
"_from": "glob@>=7.0.5 <8.0.0", | ||
"_npmVersion": "3.10.7", | ||
"_nodeVersion": "6.5.0", | ||
"_id": "glob@7.1.2", | ||
"_npmVersion": "5.0.0-beta.56", | ||
"_nodeVersion": "8.0.0-pre", | ||
"_npmUser": { | ||
@@ -66,4 +64,5 @@ "name": "isaacs", | ||
"dist": { | ||
"shasum": "805211df04faaf1c63a3600306cdf5ade50b2ec8", | ||
"tarball": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" | ||
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", | ||
"shasum": "c19c9df9a028702d678612384a6552404c636d15", | ||
"tarball": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" | ||
}, | ||
@@ -77,8 +76,10 @@ "maintainers": [ | ||
"_npmOperationalInternal": { | ||
"host": "packages-16-east.internal.npmjs.com", | ||
"tmp": "tmp/glob-7.1.1.tgz_1475876991562_0.924720095237717" | ||
"host": "s3://npm-registry-packages", | ||
"tmp": "tmp/glob-7.1.2.tgz_1495224925341_0.07115248567424715" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", | ||
"_shasum": "c19c9df9a028702d678612384a6552404c636d15", | ||
"_resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", | ||
"_from": "glob@>=7.0.5 <8.0.0", | ||
"readme": "ERROR: No README data found!" | ||
} |
{ | ||
"name": "appmetrics", | ||
"version": "3.0.1", | ||
"version": "3.0.2", | ||
"engines": { "node": ">=4" }, | ||
@@ -12,2 +12,3 @@ "description": "Node Application Metrics", | ||
"tar": "2.x", | ||
"semver": "^5.3.0", | ||
"jszip": "2.5.x" | ||
@@ -19,4 +20,4 @@ }, | ||
"devDependencies": { | ||
"codecov": "2.x", | ||
"node-gyp": "3.x", | ||
"semver": "^5.3.0", | ||
"tap": "7.x" | ||
@@ -26,2 +27,4 @@ }, | ||
"test": "tap --reporter tap --timeout=120 tests/*tests.js tests/probes/http-outbound-probe-test.js tests/probes/http-probe-test.js tests/headless_test.js", | ||
"travis": "tap --reporter tap --timeout=120 tests/*tests.js tests/probes/http-outbound-probe-test.js tests/probes/http-probe-test.js tests/headless_test.js --coverage", | ||
"posttravis": "./get_code_cov.sh && tap --coverage-report=lcov && codecov --disable=gcov", | ||
"install": "node extract_all_binaries.js || node-gyp rebuild" | ||
@@ -28,0 +31,0 @@ }, |
@@ -22,3 +22,11 @@ /******************************************************************************* | ||
var am = require('../'); | ||
var semver = require('semver'); | ||
var methods; | ||
if (semver.lt(process.version, '8.0.0')) { | ||
methods = ['request']; | ||
} else { | ||
methods = ['request', 'get']; | ||
} | ||
// Probe to instrument outbound http requests | ||
@@ -37,3 +45,3 @@ | ||
aspect.around(target, 'request', | ||
aspect.around(target, methods, | ||
// Before 'http.request' function | ||
@@ -190,1 +198,2 @@ function(obj, methodName, methodArgs, probeData) { | ||
@@ -86,3 +86,3 @@ /******************************************************************************* | ||
loopbackDJProbe.prototype.requestStart = function (probeData, target, method, methodArgs) { | ||
probeData.req = request.startRequest( 'loopback', "query" ); | ||
probeData.req = request.startRequest( 'loopback-datasource-juggler', "query" ); | ||
probeData.req.setContext({loopbackDJProbe: methodArgs[0]}); | ||
@@ -89,0 +89,0 @@ }; |
@@ -44,4 +44,29 @@ /******************************************************************************* | ||
} | ||
that.metricsProbeEnd(probeData, collectionName, method, methodArgs); | ||
var count = undefined; | ||
if (args && args.length > 1) { | ||
var res = args[1]; | ||
if (res) { | ||
if (res.hasOwnProperty('matchedCount')) { | ||
count = res.matchedCount; | ||
} else if (res.hasOwnProperty('modifiedCount')) { | ||
count = res.modifiedCount; | ||
} else if (res.hasOwnProperty('insertedCount')) { | ||
count = res.insertedCount; | ||
} else if (res.hasOwnProperty('upsertedCount')) { | ||
count = res.upsertedCount; | ||
} else if (res.hasOwnProperty('deletedCount')) { | ||
count = res.deletedCount; | ||
} else if (res.hasOwnProperty('length')) { | ||
count = res.length; | ||
} else if (typeof res === "number") { | ||
count = res; | ||
} | ||
if(methodName === 'bulkWrite') { | ||
count = res.modifiedCount + res.insertedCount + res.deletedCount + res.upsertedCount; | ||
} | ||
} | ||
} | ||
that.metricsProbeEnd(probeData, collectionName, method, methodArgs, count); | ||
that.requestProbeEnd(probeData, method, methodArgs); | ||
@@ -71,3 +96,3 @@ } ); | ||
var method = 'find'; | ||
aspect.around( coll, "find", | ||
aspect.around( coll, method, | ||
function(target, methodName, methodArgs, probeData){ | ||
@@ -86,4 +111,12 @@ that.metricsProbeStart(probeData, target, method, methodArgs); | ||
aspect.aroundCallback( args, probeData, function(target, args, probeData){ | ||
that.metricsProbeEnd(probeData, collectionName, method, findArgs); | ||
that.requestProbeEnd(probeData, method, findArgs); | ||
var count = undefined; | ||
if (args && args.length > 1) { | ||
var res = args[1]; | ||
if (res && res.hasOwnProperty('length')) { | ||
count = res.length; | ||
} | ||
} | ||
that.metricsProbeEnd(probeData, collectionName, method, findArgs, count); | ||
that.requestProbeEnd(probeData, method, findArgs); | ||
}); | ||
@@ -95,11 +128,31 @@ }); | ||
that.aspectCollectionMethod(coll, "insert"); | ||
that.aspectCollectionMethod(coll, "save"); | ||
that.aspectCollectionMethod(coll, "update"); | ||
that.aspectCollectionMethod(coll, "remove"); | ||
that.aspectCollectionMethod(coll, "aggregate"); | ||
that.aspectCollectionMethod(coll, "bulkWrite"); | ||
that.aspectCollectionMethod(coll, "count"); | ||
that.aspectCollectionMethod(coll, "createIndex"); | ||
that.aspectCollectionMethod(coll, "createIndexes"); | ||
that.aspectCollectionMethod(coll, "deleteMany"); | ||
that.aspectCollectionMethod(coll, "deleteOne"); | ||
that.aspectCollectionMethod(coll, "distinct") | ||
that.aspectCollectionMethod(coll, "drop"); | ||
that.aspectCollectionMethod(coll, "dropIndex"); | ||
that.aspectCollectionMethod(coll, "dropIndexes"); | ||
that.aspectCollectionMethod(coll, "findOne"); | ||
that.aspectCollectionMethod(coll, "count"); | ||
that.aspectCollectionMethod(coll, "findAndModify"); | ||
that.aspectCollectionMethod(coll, "findAndRemove"); | ||
that.aspectCollectionMethod(coll, "aggregate"); | ||
that.aspectCollectionMethod(coll, "findOneAndDelete"); | ||
that.aspectCollectionMethod(coll, "findOneAndReplace"); | ||
that.aspectCollectionMethod(coll, "findOneAndUpdate"); | ||
that.aspectCollectionMethod(coll, "geoHaystackSearch"); | ||
that.aspectCollectionMethod(coll, "geoNear"); | ||
that.aspectCollectionMethod(coll, "group"); | ||
that.aspectCollectionMethod(coll, "indexes"); | ||
that.aspectCollectionMethod(coll, "indexExists"); | ||
that.aspectCollectionMethod(coll, "indexInformation"); | ||
that.aspectCollectionMethod(coll, "insertMany"); | ||
that.aspectCollectionMethod(coll, "insertOne"); | ||
that.aspectCollectionMethod(coll, "mapReduce"); | ||
that.aspectCollectionMethod(coll, "reIndex"); | ||
that.aspectCollectionMethod(coll, "rename"); | ||
that.aspectCollectionMethod(coll, "replaceOne"); | ||
that.aspectCollectionMethod(coll, "updateMany"); | ||
that.aspectCollectionMethod(coll, "updateOne"); | ||
@@ -120,7 +173,7 @@ return target; | ||
*/ | ||
MongoProbe.prototype.metricsEnd = function(probeData, collectionName, method, methodArgs) { | ||
MongoProbe.prototype.metricsEnd = function(probeData, collectionName, method, methodArgs, count) { | ||
if(probeData && probeData.timer) { | ||
probeData.timer.stop(); | ||
am.emit('mongo', {time: probeData.timer.startTimeMillis, query: JSON.stringify(methodArgs[0]), duration: probeData.timer.timeDelta, | ||
method: method, collection: collectionName}); | ||
method: method, collection: collectionName, count: count}); | ||
} | ||
@@ -127,0 +180,0 @@ }; |
@@ -6,2 +6,4 @@ # Node Application Metrics | ||
[![Build Status](https://travis-ci.org/RuntimeTools/appmetrics.svg?branch=master)](https://travis-ci.org/RuntimeTools/appmetrics) | ||
[![codebeat badge](https://codebeat.co/badges/9e9229c4-dcfa-4a98-a9a2-4770f3a2dd59)](https://codebeat.co/projects/github-com-runtimetools-appmetrics-master) | ||
[![codecov.io](https://codecov.io/github/RuntimeTools/appmetrics/coverage.svg?branch=master)](https://codecov.io/github/RuntimeTools/appmetrics?branch=master) | ||
![Apache 2](https://img.shields.io/badge/license-Apache2-blue.svg?style=flat) | ||
@@ -11,5 +13,5 @@ [![Homepage](https://img.shields.io/badge/homepage-Node%20Application%20Metrics-blue.svg)](https://developer.ibm.com/node/monitoring-post-mortem/application-metrics-node-js/) | ||
Node Application Metrics instruments the Node.js runtime for performance monitoring, providing the monitoring data via an API. | ||
Additionally the data can be visualized in an Eclipse IDE using the [IBM Monitoring and Diagnostics Tools - Health Center][1] client. | ||
Additionally the data can be visualized by using the [Node Application Metrics Dashboard](https://github.com/RuntimeTools/appmetrics-dash). | ||
See https://www.ibm.com/developerworks/java/jdk/tools/healthcenter/ for more details. | ||
The data can also be visualized in Eclipse using the [IBM Monitoring and Diagnostics Tools - Health Center][1] client. Profiling data is available in Health Center, but is not yet available in the Dashboard. See https://www.ibm.com/developerworks/java/jdk/tools/healthcenter/ for more details. | ||
@@ -44,30 +46,20 @@ Node Application Metrics provides the following built-in data collection sources: | ||
Function trace | Tracing of application function calls that occur during a request (disabled by default) | ||
## Performance overhead | ||
## Getting Started | ||
### Prerequisites | ||
Our testing has shown that the performance overhead in terms of processing is minimal, adding less than 0.5 % to the CPU usage of your application. The additional memory required is around 20 MB to gather information about your system and application. | ||
The Node Application Metrics agent supports the following runtime environments: | ||
We gathered this information by monitoring the sample application [Acme Air][3]. We used MongoDB as our datastore and used JMeter to drive load though the program. We have performed this testing with Node.js version 6.10.3 | ||
* **Node.js v7** on: | ||
* 64-bit or 32-bit runtime on Windows (x64 or x86) | ||
* 64-bit or 32-bit runtime on Linux (x64, x86, PPC64LE) | ||
* 64-bit runtime on Mac OS X (x64) | ||
* **Node.js v6** on: | ||
* 64-bit or 32-bit runtime on Windows (x64 or x86) | ||
* 64-bit or 32-bit runtime on Linux (x64, x86, PPC64LE) | ||
* 64-bit runtime on Mac OS X (x64) | ||
* **Node.js v4** on: | ||
* 64-bit or 32-bit runtime on Windows (x64 or x86) | ||
* 64-bit or 32-bit runtime on Linux (x64, x86, PPC64LE) | ||
* 64-bit runtime on Mac OS X (x64) | ||
* **IBM SDK for Node.js 4** on: | ||
* 64-bit or 32-bit runtime on Windows (x64 or x86) | ||
* 64-bit or 32-bit runtime on Linux (x64, x86, PPC32, PPC64, PPC64LE, z31, z64) | ||
* 64-bit or 32-bit runtime on AIX (PPC32, PPC64) | ||
* 64-bit runtime on Mac OS X (x64) | ||
## Getting Started | ||
### Installation | ||
Node Application Metrics can be installed using **npm** either locally or globally. | ||
You can get Node Application Metrics from 3 different places: | ||
* npmjs.org (install by running `npm install appmetrics`. Native libraries are prebuilt) | ||
* Github ([install from source](https://github.com/RuntimeTools/appmetrics/wiki/Install-direct-from-github-source) by cloning the git repository. Requires a compiler) | ||
* [IBM SDK for Node.js](https://developer.ibm.com/node/sdk/) (packaged with the SDK, native libraries are prebuilt) | ||
Using **npm** you can install Node Application Metrics either locally or globally. | ||
**When installed locally** you can access monitoring data via both the API and the Health Center client by modifying your application to use appmetrics (see *[Modifying your application to use the local installation](#modifying-your-application-to-use-the-local-installation)*). | ||
@@ -324,2 +316,9 @@ | ||
* `duration` (Number) the time taken for the LevelDB query to be responded to in ms. | ||
### Event: 'loopback-datasource-juggler' | ||
Emitted when a function is called on the `loopback-datasource-juggler` module | ||
* `data` (Object) the data from the loopback-datasource-juggler event: | ||
* `time` (Number) the time in milliseconds when the event occurred. This can be converted to a Date using `new Date(data.time)` | ||
* `method` (String) the function the juggler has executed | ||
* `duration` (Number) the time taken for the operation to complete. | ||
@@ -440,2 +439,12 @@ ### Event: 'memcached' | ||
### Supported platforms | ||
The Node Application Metrics agent supports the following runtime environments where a Node.js runtime is available: | ||
* **Node.js v4, v6 ,v7 and v8** on: | ||
* 64-bit or 32-bit runtime on Windows (x64 or x86) | ||
* 64-bit or 32-bit runtime on Linux (x64, x86, PPC32, PPC64, PPC64LE, z31, z64) | ||
* 64-bit or 32-bit runtime on AIX (PPC64) | ||
* 64-bit runtime on Mac OS X (x64) | ||
## Troubleshooting | ||
@@ -493,5 +502,6 @@ Find below some possible problem scenarios and corresponding diagnostic steps. Updates to troubleshooting information will be made available on the [appmetrics wiki][3]: [Troubleshooting](https://github.com/RuntimeTools/appmetrics/wiki/Troubleshooting). If these resources do not help you resolve the issue, you can open an issue on the Node Application Metrics [appmetrics issue tracker][5]. | ||
## Version | ||
3.0.1 | ||
3.0.2 | ||
## Release History | ||
`3.0.2` - Probe defect for Node 8 support. | ||
`3.0.1` - Packaging bug fix to allow build from source if binary not present. | ||
@@ -498,0 +508,0 @@ `3.0.0` - Remove express probe. Additional data available in http and request events. Code improvements. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
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
Native code
Supply chain riskContains native code (e.g., compiled binaries or shared libraries). Including native code can obscure malicious behavior.
Found 1 instance in 1 package
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 3 instances 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
Native code
Supply chain riskContains native code (e.g., compiled binaries or shared libraries). Including native code can obscure malicious behavior.
Found 1 instance in 1 package
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 3 instances in 1 package
9550995
538
17539
529
4
66
+ Addedsemver@^5.3.0
+ Addedsemver@5.7.2(transitive)