UNPKG

30s

Version:

A command-line application for 30 seconds of code snippets

55 lines (39 loc) 2.54 kB
#!/usr/bin/env node // ┏━┓┏━┓┏━┓ // ╺━┫┃┃┃┗━┓ // ┗━┛┗━┛┗━┛ // // A CLI for 30 seconds of code snippets. // https://github.com/sQVe/30s "use strict"; 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(); }