heroku-cli-util
Advanced tools
Comparing version 5.4.6 to 5.4.7
@@ -67,2 +67,3 @@ 'use strict'; | ||
function errorHandler(options) { | ||
options = options || {}; | ||
function exit () { | ||
@@ -75,19 +76,22 @@ if (options.exit !== false) { | ||
if (cli.raiseErrors) { throw err; } | ||
options = options || {}; | ||
if (err !== '') { error(err); } | ||
if (options.logPath) { | ||
if (err.stack) { | ||
log(err.stack, options.logPath); | ||
if (options.debug) { | ||
console.error(err.stack); | ||
try { | ||
if (err !== '') { error(err); } | ||
if (options.logPath) { | ||
if (err.stack) { | ||
log(err.stack, options.logPath); | ||
if (options.debug) { | ||
console.error(err.stack); | ||
} | ||
} | ||
if (err.body) { | ||
log(JSON.stringify(err.body), options.logPath); | ||
} | ||
} | ||
if (err.body) { | ||
log(JSON.stringify(err.body), options.logPath); | ||
} | ||
//error(`See ${options.logPath} for more info.`); | ||
if (options.dev) exit(); | ||
else if (options.rollbar) options.rollbar.error(err).then(exit, exit); | ||
else exit(); | ||
} catch (err) { | ||
console.error(err.stack); | ||
process.exit(-1); | ||
} | ||
if (options.dev) exit(); | ||
else if (options.rollbar) options.rollbar.error(err).then(exit, exit); | ||
else exit(); | ||
}; | ||
@@ -94,0 +98,0 @@ } |
@@ -30,3 +30,3 @@ 'use strict'; | ||
let input = ''; | ||
process.stdin.on('data', function (c) { | ||
let fn = function (c) { | ||
switch(c) { | ||
@@ -39,2 +39,3 @@ case "\u0004": // Ctrl-d | ||
stop(); | ||
process.stdin.removeListener('data', fn); | ||
fulfill(input); | ||
@@ -46,2 +47,3 @@ return; | ||
stop(); | ||
process.stdin.removeListener('data', fn); | ||
return; | ||
@@ -55,3 +57,4 @@ default: | ||
} | ||
}); | ||
}; | ||
process.stdin.on('data', fn); | ||
}); | ||
@@ -58,0 +61,0 @@ } |
@@ -39,3 +39,3 @@ 'use strict'; | ||
function build(_styles) { | ||
var builder = function builder() { | ||
var builder = function () { | ||
return applyStyle.apply(builder, arguments); | ||
@@ -48,3 +48,3 @@ }; | ||
// no way to create a function with a different prototype. | ||
/*eslint no-proto: 0 */ | ||
/* eslint-disable no-proto */ | ||
builder.__proto__ = proto; | ||
@@ -51,0 +51,0 @@ |
{ | ||
"name": "chalk", | ||
"version": "1.1.0", | ||
"version": "1.1.1", | ||
"description": "Terminal string styling done right. Much color.", | ||
@@ -28,3 +28,3 @@ "license": "MIT", | ||
"scripts": { | ||
"test": "mocha", | ||
"test": "xo && mocha", | ||
"bench": "matcha benchmark.js", | ||
@@ -74,25 +74,32 @@ "coverage": "nyc npm test && nyc report", | ||
"resolve-from": "^1.0.0", | ||
"semver": "^4.3.3" | ||
"semver": "^4.3.3", | ||
"xo": "*" | ||
}, | ||
"gitHead": "e9bb6e6000b1c5d4508afabfdc85dd70f582f515", | ||
"xo": { | ||
"envs": [ | ||
"node", | ||
"mocha" | ||
] | ||
}, | ||
"gitHead": "8b554e254e89c85c1fd04dcc444beeb15824e1a5", | ||
"bugs": { | ||
"url": "https://github.com/chalk/chalk/issues" | ||
}, | ||
"homepage": "https://github.com/chalk/chalk", | ||
"_id": "chalk@1.1.0", | ||
"_shasum": "09b453cec497a75520e4a60ae48214a8700e0921", | ||
"homepage": "https://github.com/chalk/chalk#readme", | ||
"_id": "chalk@1.1.1", | ||
"_shasum": "509afb67066e7499f7eb3535c77445772ae2d019", | ||
"_from": "chalk@>=1.1.0 <2.0.0", | ||
"_npmVersion": "2.10.1", | ||
"_nodeVersion": "0.12.4", | ||
"_npmVersion": "2.13.5", | ||
"_nodeVersion": "0.12.7", | ||
"_npmUser": { | ||
"name": "jbnicolai", | ||
"email": "jappelman@xebia.com" | ||
"name": "sindresorhus", | ||
"email": "sindresorhus@gmail.com" | ||
}, | ||
"dist": { | ||
"shasum": "09b453cec497a75520e4a60ae48214a8700e0921", | ||
"tarball": "http://registry.npmjs.org/chalk/-/chalk-1.1.0.tgz" | ||
"shasum": "509afb67066e7499f7eb3535c77445772ae2d019", | ||
"tarball": "http://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.0.tgz", | ||
"_resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", | ||
"readme": "ERROR: No README data found!" | ||
} |
@@ -33,3 +33,3 @@ <h1 align="center"> | ||
- Actively maintained | ||
- [Used by ~4000 modules](https://www.npmjs.com/browse/depended/chalk) as of May 24, 2015 | ||
- [Used by ~4500 modules](https://www.npmjs.com/browse/depended/chalk) as of July 15, 2015 | ||
@@ -193,3 +193,3 @@ | ||
Chalk does not support support anything other than the base eight colors, which guarantees it will work on all terminals and systems. Some terminals, specifically `xterm` compliant ones, will support the full range of 8-bit colors. For this the lower level [ansi-256-colors](https://github.com/jbnicolai/ansi-256-colors) package can be used. | ||
Chalk does not support anything other than the base eight colors, which guarantees it will work on all terminals and systems. Some terminals, specifically `xterm` compliant ones, will support the full range of 8-bit colors. For this the lower level [ansi-256-colors](https://github.com/jbnicolai/ansi-256-colors) package can be used. | ||
@@ -210,2 +210,3 @@ | ||
- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes | ||
- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes | ||
@@ -212,0 +213,0 @@ |
'use strict'; | ||
var Request = require('./request'); | ||
var extend = require('util')._extend; | ||
@@ -26,4 +25,11 @@ module.exports = Heroku; | ||
this.options = this.options || {}; | ||
if (options.headers) { | ||
options.headers = extend(this.options.headers || {}, options.headers); | ||
// merge headers | ||
if (options.headers && this.options.headers) { | ||
for (key in this.options.headers) { | ||
if (this.options.headers.hasOwnProperty(key)) { | ||
if (!options.headers.hasOwnProperty(key)) { | ||
options[key] = this.options.headers[key]; | ||
} | ||
} | ||
} | ||
} | ||
@@ -30,0 +36,0 @@ for (key in this.options) { |
@@ -81,2 +81,11 @@ 'use strict'; | ||
// remove null|undefined headers | ||
for (var k in headers) { | ||
if (headers.hasOwnProperty(k)) { | ||
if (headers[k] === null || headers[k] === undefined) { | ||
delete headers[k]; | ||
} | ||
} | ||
} | ||
var requestOptions = { | ||
@@ -181,3 +190,4 @@ agent: this.agent, | ||
if (this.options.body) { | ||
var body = JSON.stringify(this.options.body); | ||
var body = this.options.body; | ||
if (this.options.json !== false) { body = JSON.stringify(body); } | ||
if (this.debug) { | ||
@@ -184,0 +194,0 @@ console.error('--> ' + body); |
@@ -112,7 +112,7 @@ { | ||
"shasum": "cbd160da9f75b14c3cc63578d4f396784bf3014e", | ||
"tarball": "http://heroku-npm.herokuapp.com/inflection/-/inflection-1.3.8.tgz" | ||
"tarball": "http://d1wpeoceq2hoqd.cloudfront.net/inflection/-/inflection-1.3.8.tgz" | ||
}, | ||
"directories": {}, | ||
"_resolved": "https://heroku-npm.herokuapp.com/inflection/-/inflection-1.3.8.tgz", | ||
"_resolved": "https://d1wpeoceq2hoqd.cloudfront.net/inflection/-/inflection-1.3.8.tgz", | ||
"readme": "ERROR: No README data found!" | ||
} |
@@ -36,3 +36,3 @@ { | ||
"shasum": "18e8a36859fc9d2f1a53b48dee138543c020de5e", | ||
"tarball": "http://heroku-npm.herokuapp.com/path-proxy/-/path-proxy-1.0.0.tgz" | ||
"tarball": "http://d1wpeoceq2hoqd.cloudfront.net/path-proxy/-/path-proxy-1.0.0.tgz" | ||
}, | ||
@@ -53,3 +53,3 @@ "_from": "path-proxy@>=1.0.0 <2.0.0", | ||
"_shasum": "18e8a36859fc9d2f1a53b48dee138543c020de5e", | ||
"_resolved": "https://heroku-npm.herokuapp.com/path-proxy/-/path-proxy-1.0.0.tgz" | ||
"_resolved": "https://d1wpeoceq2hoqd.cloudfront.net/path-proxy/-/path-proxy-1.0.0.tgz" | ||
} |
@@ -116,6 +116,6 @@ { | ||
"shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e", | ||
"tarball": "http://localhost:3000/q/-/q-1.4.1.tgz" | ||
"tarball": "http://d1wpeoceq2hoqd.cloudfront.net/q/-/q-1.4.1.tgz" | ||
}, | ||
"_resolved": "http://localhost:3000/q/-/q-1.4.1.tgz", | ||
"_resolved": "https://d1wpeoceq2hoqd.cloudfront.net/q/-/q-1.4.1.tgz", | ||
"readme": "ERROR: No README data found!" | ||
} |
@@ -84,3 +84,3 @@ 'use strict' | ||
// We are over limit so we'll add it to the queue. | ||
self.requests.push({host: options.host, port: options.port, request: req}) | ||
self.requests.push({host: host, port: port, request: req}) | ||
return | ||
@@ -90,20 +90,14 @@ } | ||
// If we are under maxSockets create a new one. | ||
self.createConnection({host: options.host, port: options.port, request: req}) | ||
} | ||
TunnelingAgent.prototype.createConnection = function createConnection(pending) { | ||
var self = this | ||
self.createSocket(pending, function(socket) { | ||
self.createSocket({host: options.host, port: options.port, request: req}, function(socket) { | ||
socket.on('free', onFree) | ||
socket.on('close', onCloseOrRemove) | ||
socket.on('agentRemove', onCloseOrRemove) | ||
pending.request.onSocket(socket) | ||
req.onSocket(socket) | ||
function onFree() { | ||
self.emit('free', socket, pending.host, pending.port) | ||
self.emit('free', socket, options.host, options.port) | ||
} | ||
function onCloseOrRemove(err) { | ||
self.removeSocket(socket) | ||
self.removeSocket() | ||
socket.removeListener('free', onFree) | ||
@@ -193,3 +187,5 @@ socket.removeListener('close', onCloseOrRemove) | ||
// needs to be created to take over in the pool for the one that closed. | ||
this.createConnection(pending) | ||
this.createSocket(pending, function(socket) { | ||
pending.request.onSocket(socket) | ||
}) | ||
} | ||
@@ -207,3 +203,2 @@ } | ||
)) | ||
self.sockets[self.sockets.indexOf(socket)] = secureSocket | ||
cb(secureSocket) | ||
@@ -210,0 +205,0 @@ }) |
@@ -9,3 +9,3 @@ { | ||
"description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.", | ||
"version": "0.4.1", | ||
"version": "0.4.0", | ||
"repository": { | ||
@@ -21,21 +21,17 @@ "url": "git+https://github.com/mikeal/tunnel-agent.git" | ||
}, | ||
"gitHead": "912a7a6d00e10ec76baf9c9369de280fa5badef3", | ||
"bugs": { | ||
"url": "https://github.com/mikeal/tunnel-agent/issues" | ||
}, | ||
"homepage": "https://github.com/mikeal/tunnel-agent#readme", | ||
"_id": "tunnel-agent@0.4.1", | ||
"scripts": {}, | ||
"_shasum": "bbeecff4d679ce753db9462761a88dfcec3c5ab3", | ||
"_from": "tunnel-agent@>=0.4.0 <0.5.0", | ||
"_npmVersion": "2.11.2", | ||
"_nodeVersion": "0.12.5", | ||
"homepage": "https://github.com/mikeal/tunnel-agent", | ||
"_id": "tunnel-agent@0.4.0", | ||
"dist": { | ||
"shasum": "b1184e312ffbcf70b3b4c78e8c219de7ebb1c550", | ||
"tarball": "http://heroku-npm.herokuapp.com/tunnel-agent/-/tunnel-agent-0.4.0.tgz" | ||
}, | ||
"_from": "tunnel-agent@*", | ||
"_npmVersion": "1.3.21", | ||
"_npmUser": { | ||
"name": "simov", | ||
"email": "simeonvelichkov@gmail.com" | ||
"name": "mikeal", | ||
"email": "mikeal.rogers@gmail.com" | ||
}, | ||
"dist": { | ||
"shasum": "bbeecff4d679ce753db9462761a88dfcec3c5ab3", | ||
"tarball": "http://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.1.tgz" | ||
}, | ||
"maintainers": [ | ||
@@ -45,19 +41,8 @@ { | ||
"email": "mikeal.rogers@gmail.com" | ||
}, | ||
{ | ||
"name": "nylen", | ||
"email": "jnylen@gmail.com" | ||
}, | ||
{ | ||
"name": "fredkschott", | ||
"email": "fkschott@gmail.com" | ||
}, | ||
{ | ||
"name": "simov", | ||
"email": "simeonvelichkov@gmail.com" | ||
} | ||
], | ||
"directories": {}, | ||
"_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.1.tgz", | ||
"_shasum": "b1184e312ffbcf70b3b4c78e8c219de7ebb1c550", | ||
"_resolved": "https://heroku-npm.herokuapp.com/tunnel-agent/-/tunnel-agent-0.4.0.tgz", | ||
"readme": "ERROR: No README data found!" | ||
} |
{ | ||
"name": "heroku-client", | ||
"description": "A wrapper for the Heroku v3 API", | ||
"version": "2.1.0", | ||
"author": { | ||
"name": "Jonathan Clem" | ||
}, | ||
"version": "2.2.0", | ||
"author": "Jonathan Clem", | ||
"bugs": { | ||
@@ -12,14 +10,6 @@ "url": "https://github.com/heroku/node-heroku-client/issues" | ||
"contributors": [ | ||
{ | ||
"name": "Jonathan Clem" | ||
}, | ||
{ | ||
"name": "Ray McDermott" | ||
}, | ||
{ | ||
"name": "Bob Zoller" | ||
}, | ||
{ | ||
"name": "Sehrope Sarkuni" | ||
} | ||
"Jonathan Clem", | ||
"Ray McDermott", | ||
"Bob Zoller", | ||
"Sehrope Sarkuni" | ||
], | ||
@@ -64,14 +54,7 @@ "dependencies": { | ||
"type": "git", | ||
"url": "git+https://github.com/heroku/node-heroku-client.git" | ||
"url": "https://github.com/heroku/node-heroku-client" | ||
}, | ||
"scripts": { | ||
"test": "jasmine-node spec && jshint lib spec" | ||
}, | ||
"readme": "# heroku-client [![Build Status](https://travis-ci.org/heroku/node-heroku-client.png?branch=master)](https://travis-ci.org/heroku/node-heroku-client)\n\nA wrapper around the [v3 Heroku API][platform-api-reference].\n\n- [Install](#install)\n- [Documentation](#documentation)\n- [Usage](#usage)\n - [Generic Requests](#generic-requests)\n - [Promises](#promises)\n - [Generators](#generators)\n - [HTTP Proxies](#http-proxies)\n- [Caching](#caching)\n - [Custom caching](#custom-caching)\n- [Contributing](#contributing)\n - [Updating resources](#updating-resources)\n - [Generating documentation](#generating-documentation)\n - [Running tests](#running-tests)\n\n## Install\n\n```sh\n$ npm install heroku-client --save\n```\n\n## Documentation\n\nDocs are auto-generated and live in the\n[docs directory](https://github.com/heroku/node-heroku-client/tree/master/docs).\n\n## Usage\n\n`heroku-client` works by providing functions that return proxy objects for\ninteracting with different resources through the Heroku API.\n\nTo begin, require the Heroku module and create a client, passing in an API\ntoken:\n\n```javascript\nvar Heroku = require('heroku-client'),\n heroku = new Heroku({ token: process.env.HEROKU_API_TOKEN });\n```\n\nThe simplest example is listing a user's apps. First, we call `heroku.apps()`,\nwhich returns a proxy object to the /apps endpoint, then we call `list()` to\nactually perform the API call:\n\n```javascript\nheroku.apps().list(function (err, apps) {\n // `apps` is a parsed JSON response from the API\n});\n```\n\nThe advantage of using proxy objects is that they are reusable. Let's get the\ninfo for the user's app \"my-app\", get the dynos for the app, and\nremove a collaborator:\n\n```javascript\nvar app = heroku.apps('my-app');\n\napp.info(function (err, app) {\n // Details about the `app`\n});\n\napp.dynos().list(function (err, dynos) {\n // List of the app's `dynos`\n});\n\napp.collaborators('user@example.com').delete(function (err, collaborator) {\n // The `collaborator` has been removed unless `err`\n});\n```\n\nRequests that require a body are easy, as well. Let's add a collaborator to\nthe user's app \"another-app\":\n\n```javascript\nvar app = heroku.apps('another-app'),\n user = { email: 'new-user@example.com' };\n\napp.collaborators().create({ user: user }, function (err, collaborator) {\n // `collaborator` is the newly added collaborator unless `err`\n});\n```\n\n### Generic Requests\n\nheroku-client has `get`, `post`, `patch`, and `delete` functions which can make\nrequests with the specified HTTP method to any endpoint:\n\n```javascript\nheroku.get('/apps', function (err, apps) {\n});\n\n// Request body is optional on both `post` and `patch`\nheroku.post('/apps', function (err, app) {\n});\n\nheroku.post('/apps', { name: 'my-new-app' }, function (err, app) {\n});\n\nheroku.patch('/apps/my-app', { name: 'my-renamed-app' }, function (err, app) {\n});\n\nheroku.delete('/apps/my-old-app', function (err, app) {\n});\n```\n\nThere is also an even more generic `request` function that can accept many more\noptions:\n\n```javascript\nheroku.request({\n method: 'GET',\n path: '/apps',\n headers: {\n 'Foo': 'Bar'\n },\n parseJSON: false\n}, function (err, responseBody) {\n});\n```\n\n### Promises\n\nheroku-client works with Node-style callbacks, but also implements promises with\nthe [Q][q] library.\n\n```javascript\nvar q = require('q');\n\n// Fetches dynos for all of my apps.\nheroku.apps().list().then(function (apps) {\n\n return q.all(apps.map(function (app) {\n return heroku.apps(app.name).dynos().list();\n }));\n\n}).then(function (dynos) {\n\n console.log(dynos);\n\n});\n```\n\n### Generators\n\nIt's easy to get heroku-client working with [generators][generators]. In this\nexample, I'll use the [co][co] library to wrap a function that will get the list\nof all of my apps, and then get the dynos for each of those apps:\n\n```javascript\nlet co = require('co');\nlet heroku = require('heroku-client');\nlet hk = heroku.createClient({ token: process.env.HEROKU_API_KEY });\n\nlet main = function* () {\n let apps = yield hk.apps().list();\n let dynos = yield apps.map(getDynos);\n\n console.log(dynos);\n\n function getDynos(app) {\n return hk.apps(app.name).dynos().list();\n }\n};\n\nco(main)();\n```\n\nAs long as you're using Node >= 0.11, you can run this script with:\n\n```sh\n$ node --harmony --use-strict file.js\n```\n\nHooray, no callbacks or promises in sight!\n\n### HTTP Proxies\n\nIf you'd like to make requests through an HTTP proxy, set the\n`HEROKU_HTTP_PROXY_HOST` environment variable with your proxy host, and\n`HEROKU_HTTP_PROXY_PORT` with the desired port (defaults to 8080). heroku-client\nwill then make requests through this proxy instead of directly to\napi.heroku.com.\n\n## Caching\n\nheroku-client can optionally perform caching of API requests.\n\nheroku-client will cache any response from the Heroku API that comes with an\n`ETag` header, and each response is cached individually (i.e. even though the\nclient might make multiple calls for a user's apps and then aggregate them into\na single JSON array, each required API call is individually cached). For each\nAPI request it performs, heroku-client sends an `If-None-Match` header if there\nis a cached response for the API request. If API returns a 304 response code,\nheroku-client returns the cached response. Otherwise, it writes the new API\nresponse to the cache and returns that.\n\nTo tell heroku-client to perform caching, add a config object to the options\nwith store and encryptor objects. These can be instances of memjs and\nsimple-encryptor, respectively.\n\n```js\nvar Heroku = require('heroku-client');\nvar memjs = require('memjs').Client.create();\nvar encryptor = require('simple-encryptor')(SECRET_CACHE_KEY);\nvar hk = new Heroku({\n cache: { store: memjs, encryptor: encryptor }\n});\n```\n\n### Custom caching\n\nAlternatively you can specify a custom cache implementation. Your custom implementation must define `get(key, cb(err, value))` and `set(key, value)` functions.\n\nHere's a sample implementation that uses Redis to cache API responses for 5-minutes each:\n\n```javascript\nvar redis = require('redis');\nvar client = redis.createClient();\nvar cacheTtlSecs = 5 * 60; // 5 minutes\n\nvar redisStore = {\n get: function(key, cb) {\n // Namespace the keys:\n var redisKey = 'heroku:api:' + key;\n client.GET(redisKey, cb);\n },\n\n set: function(key, value) {\n // Namespace the keys:\n var redisKey = 'heroku:api:' + key;\n client.SETEX(redisKey, cacheTtlSecs, value, function(err) {\n // ignore errors on set\n });\n }\n};\n\nvar encryptor = require('simple-encryptor')(SECRET_CACHE_KEY);\nvar Heroku = require('heroku-client');\nvar hk = new Heroku({\n cache: {store: redisStore, encryptor: encryptor}\n});\n```\n\n## Contributing\n\n### Updating resources\n\nTo fetch the latest schema, generate documentation, and run the tests:\n\n```sh\n$ bin/update\n```\n\nInspect your changes, and\n[bump the version number accordingly](http://semver.org/) when cutting a\nrelease.\n\n### Generating documentation\n\nDocumentation for heroku-client is auto-generated from\n[the API schema](https://github.com/heroku/node-heroku-client/blob/master/lib/schema.js).\n\nDocs are generated like so:\n\n```bash\n$ bin/docs\n```\n\nGenerating docs also runs a cursory test, ensuring that every documented\nfunction *is* a function that can be called.\n\n### Running tests\n\nheroku-client uses [jasmine-node][jasmine-node] for tests:\n\n```bash\n$ npm test\n```\n\n[platform-api-reference]: https://devcenter.heroku.com/articles/platform-api-reference\n[q]: https://github.com/kriskowal/q\n[memjs]: https://github.com/alevy/memjs\n[bin_secret]: https://github.com/heroku/node-heroku-client/blob/master/bin/secret\n[memcachier]: https://www.memcachier.com\n[jasmine-node]: https://github.com/mhevery/jasmine-node\n[generators]: https://github.com/JustinDrake/node-es6-examples#generators\n[co]: https://github.com/visionmedia/co\n", | ||
"readmeFilename": "README.md", | ||
"gitHead": "7be4d59227942f82ec7509abc5f6169bf8f40d83", | ||
"homepage": "https://github.com/heroku/node-heroku-client#readme", | ||
"_id": "heroku-client@2.1.0", | ||
"_shasum": "f39fd0949bb83da5410622acb090e915ce8b9410", | ||
"_from": "heroku-client@>=2.1.0 <3.0.0" | ||
} | ||
} |
{ | ||
"name": "heroku-cli-util", | ||
"version": "5.4.6", | ||
"version": "5.4.7", | ||
"description": "Set of helpful CLI utilities", | ||
@@ -25,6 +25,6 @@ "main": "index.js", | ||
"dependencies": { | ||
"chalk": "^1.1.0", | ||
"co": "^4.5.4", | ||
"heroku-client": "^2.1.0", | ||
"inflection": "^1.7.1" | ||
"chalk": "1.1.1", | ||
"co": "4.6.0", | ||
"heroku-client": "2.2.0", | ||
"inflection": "1.7.1" | ||
}, | ||
@@ -31,0 +31,0 @@ "bundledDependencies": [ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
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
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 2 instances in 1 package
Copyleft License
License(Experimental) Copyleft license information was found.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 3 instances in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 19 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
Non-permissive License
License(Experimental) A license not known to be considered permissive was found.
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
11138538
1432
224334
3
70
181
51
Updatedchalk@1.1.1
Updatedco@4.6.0
Updatedheroku-client@2.2.0
Updatedinflection@1.7.1