package-menu-cli
Advanced tools
Comparing version 1.0.5 to 1.1.0
11
cli.js
@@ -12,4 +12,5 @@ #!/usr/bin/env node | ||
Options | ||
--sort, -s Sort Scripts (default: false) | ||
--version Show Package Menu Version | ||
--help, -h Shows Help (this screen) | ||
--sort, -s Sort Scripts (default: false) | ||
--version, -V Show Package Menu Version | ||
@@ -20,3 +21,5 @@ Examples | ||
alias: { | ||
s: 'sort' | ||
s: 'sort', | ||
h: 'help', | ||
V: 'version' | ||
} | ||
@@ -28,5 +31,5 @@ }); | ||
packageMenu.build(cli.flags) | ||
const menu = packageMenu.print('', cli.flags) | ||
// foo(cli.input[0], cli.flags); |
{ | ||
"name": "package-menu-cli", | ||
"version": "1.0.5", | ||
"version": "1.1.0", | ||
"description": "Displays menu of scripts from folder package.json", | ||
@@ -12,3 +12,4 @@ "main": "cli.js", | ||
"test": "mocha", | ||
"menu": "node ./cli.js" | ||
"menu": "node ./cli.js", | ||
"all": "npm run eslint && npm run test" | ||
}, | ||
@@ -15,0 +16,0 @@ "keywords": [ |
const chalk = require('chalk'); | ||
const Table = require('cli-table2'); // INFO: https://www.npmjs.com/package/cli-table2 | ||
const fs = require('fs'); | ||
function buildMenu(opts = {}) { | ||
const filename = process.env.PWD + '/package.json'; | ||
const pkgInfo = require(filename); | ||
function buildMenu(pkgInfo = {}, opts = {}) { | ||
if (!pkgInfo.hasOwnProperty('scripts')) { | ||
return {err: true, messasge: 'package.json does not contain any scripts'}; | ||
} | ||
// instantiate | ||
@@ -15,3 +15,3 @@ let table = new Table({ | ||
let scripts = pkgInfo.scripts; | ||
const scripts = pkgInfo.scripts; | ||
const scriptNames = Object.keys(scripts); | ||
@@ -26,26 +26,48 @@ if (opts.sort) { | ||
}); | ||
return table; | ||
} | ||
function printMenu(filename = '', options = {}) { | ||
const pkgInfo = getPackageInfo(filename); | ||
console.log(chalk.cyan.bold(pkgInfo.name) + ': ' + chalk.white.bold(pkgInfo.version)); | ||
console.log(''); | ||
console.log(chalk.white.cyan(pkgInfo.name) + ': ' + chalk.white.bold(pkgInfo.version)); | ||
console.log(''); | ||
console.log(chalk.yellow( | ||
`Example: Run any script using script name | ||
$ npm run <name> | ||
` | ||
` | ||
)); | ||
console.log(table.toString()); | ||
return scripts; | ||
const table = buildMenu(pkgInfo, options); | ||
return table.toString(); | ||
} | ||
function getPackageInfo(filename = '') { | ||
let packageMenu = { | ||
build: (options) => { | ||
return buildMenu(options); | ||
if (filename.length === 0) { | ||
filename = process.env.PWD + '/package.json'; | ||
} | ||
if (!fs.existsSync(filename)) { | ||
const err = {error: -43, msg:`Error: Unable to locate ${chalk.red.bold(filename)}`}; | ||
return err; | ||
} | ||
const pkgInfo = require(filename); | ||
return pkgInfo; | ||
} | ||
let packageMenu = { | ||
getPackageInfo: (filename) => { | ||
return getPackageInfo(filename); | ||
}, | ||
build: (pkgInfo, options) => { | ||
return buildMenu(pkgInfo, options); | ||
}, | ||
print: (filename = '', options = {}) => { | ||
console.log(printMenu(filename, options)); | ||
} | ||
} | ||
module.exports = packageMenu; |
@@ -1,8 +0,32 @@ | ||
var chai = require('chai'); | ||
var expect = chai.expect; | ||
var chai = require('chai'); | ||
var expect = chai.expect; | ||
var assert = chai.assert; | ||
var packageMenu = require('../src/packageMenu.js'); | ||
describe('==> Package Name CLI', () => { | ||
it('should pass', function () { | ||
expect(true).to.be.true; | ||
let pkgInfo; | ||
let menuData; | ||
it('should fail when unable to locate `package.json`', function () { | ||
pkgInfo = packageMenu.getPackageInfo('badFilename'); | ||
expect(pkgInfo).to.include.keys('error'); | ||
}); | ||
it('should return package information for supplied filename', function () { | ||
pkgInfo = {'scripts': {}}; | ||
expect(pkgInfo).to.include.keys('scripts'); | ||
}); | ||
it('should return table of scripts', function () { | ||
menuData = packageMenu.build(packageMenu.getPackageInfo()); | ||
expect(menuData).to.be.instanceof(Array); | ||
}); | ||
it('should properly sort result [uses --sort flag]', function () { | ||
menuData = packageMenu.build(packageMenu.getPackageInfo(),{sort: true}); | ||
// console.log(menuData); | ||
expect(menuData[0][0]).to.equal('all'); // first element from this project is `all` | ||
}); | ||
}); |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
9133
108
4