UNPKG

@nohost/server

Version:

Multi-user & multi-env web debugging proxy based on whistle

71 lines (64 loc) 1.74 kB
const path = require('path'); const os = require('os'); const fs = require('fs'); const fse = require('fs-extra'); const PLUGINS_DIR = path.resolve(os.homedir(), 'whistle-plugins/whistle.nohost'); const WHISTLE_PLUGIN_RE = /^(@[\w-]+\/)?whistle\.[a-z\d_-]+$/; const ACCOUNT_RE = /^[\w.-]{1,24}$/; const getAccount = (argv) => { let account; for (let i = 0, len = argv.length; i < len; i++) { const arg = argv[i]; if (['-a', '-w', '--account'].indexOf(arg) !== -1) { account = argv[i + 1]; argv.splice(i, 2); break; } if (/^--account=/.test(arg)) { account = arg.substring(10); argv.splice(i, 1); break; } } return account && ACCOUNT_RE.test(account) ? account : null; }; const parseArgv = (argv) => { argv = argv.slice(); const account = getAccount(argv); const args = []; const plugins = argv.filter((name) => { if (WHISTLE_PLUGIN_RE.test(name)) { return true; } args.push(name); return false; }); return { account, plugins, args, }; }; exports.parseArgv = parseArgv; const removeDir = (dir) => { if (fs.existsSync(dir)) { // eslint-disable-line fse.removeSync(dir); // eslint-disable-line } }; exports.uninstall = (argv) => { const { account, plugins } = parseArgv(argv); if (!plugins.length) { return; } if (account) { plugins.forEach((name) => { removeDir(path.join(PLUGINS_DIR, account, 'node_modules', name)); removeDir(path.join(PLUGINS_DIR, account, 'lib/node_modules', name)); }); } else { plugins.forEach((name) => { removeDir(path.join(PLUGINS_DIR, 'node_modules', name)); removeDir(path.join(PLUGINS_DIR, 'lib/node_modules', name)); }); } };