30s
Version:
A command-line application for 30 seconds of code snippets
55 lines (39 loc) • 2.54 kB
JavaScript
// ┏━┓┏━┓┏━┓
// ╺━┫┃┃┃┗━┓
// ┗━┛┗━┛┗━┛
//
// A CLI for 30 seconds of code snippets.
// https://github.com/sQVe/30s
;
var _commander = _interopRequireDefault(require("commander"));
var _ramda = require("ramda");
var _snippets = _interopRequireDefault(require("../lib/snippets.json"));
var _handler = require("./handler");
var _printer = require("./printer");
var _package = require("../package.json");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const isTest = process.env.NODE_ENV === 'test';
const actions = {
tag: (id, opts) => (0, _printer.printSnippet)(opts, (0, _handler.getSnippetsByTag)(_snippets.default, id)),
view: (id, opts) => (0, _printer.printSnippet)(opts, (0, _handler.getSnippet)(_snippets.default, id)),
search: (query, opts) => (0, _printer.printSnippet)(opts, (0, _handler.searchSnippets)(_snippets.default, query))
};
const addCommand = settings => (0, _ramda.reduce)((acc, [key, ...args]) => acc[key](...args), _commander.default, settings);
const addAction = action => ['action', (input, opts) => {
if (!input) return _commander.default.outputHelp();
return isTest ? // NOTE: Commander.js sadly does not include a way to hook onto given
// actions for integration testing. We solve this by outputting state
// when NODE_ENV is test.
console.log(JSON.stringify([action, input, !!opts.cp, !!opts.json, opts.layout])) : actions[action](input, opts);
}];
const commonOptions = [['option', '-c, --cp', 'copy code to clipboard', false], ['option', '-j, --json', 'output in json format', false], ['option', '-l, --layout <layout>', 'print in specified layout', 'itced']];
_commander.default.version(_package.version);
addCommand([['command', 's [query]'], ['alias', 'search'], ['description', ['fuzzy search snippets by id']], ...commonOptions, addAction('search')]);
addCommand([['command', 't [id]'], ['alias', 'tag'], ['description', ['view snippets by tag']], ...commonOptions, addAction('tag')]);
addCommand([['command', 'v [id]'], ['alias', 'view'], ['description', ['view snippet with id']], ...commonOptions, addAction('view')]);
_commander.default.on('--help', () => console.log(['', 'Examples:', ' v head', ' view head', '', ' s -j flatten', ' search --json flatten', '', ' t -l ic array', ' tag --layout ic array'].join('\n')));
_commander.default.parse(process.argv);
if (process.argv.length <= 2) {
_commander.default.outputHelp();
}