workflow-cmd
Version:
Command line interface for workflow.
139 lines (117 loc) • 3.17 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var shell = _interopDefault(require('shelljs'));
var child_process = require('child_process');
var os = _interopDefault(require('os'));
var path = require('path');
var spawn = _interopDefault(require('cross-spawn'));
function args(args) {
const parsedArgs = {
named: {},
positional: []
};
const argsLength = args.length;
for (let i = 2; i < argsLength; i++) {
const arg = args[i];
if (arg[0] === '-') {
const name = getArgName(arg);
if (args[i + 1] === undefined) {
parsedArgs.named[name] = true;
} else {
parsedArgs.named[name] = args[i + 1];
}
i++;
} else {
parsedArgs.positional.push(arg);
}
}
return parsedArgs;
}
function getArgName(arg) {
let sliceIndex;
const isWordArg = arg[1] === '-';
if (isWordArg) {
if (arg.length === 3) throw new Error(`expected ${arg} to be a word arg`);
sliceIndex = 2;
} else {
sliceIndex = 1;
}
return arg.slice(sliceIndex, arg.length);
}
/* eslint-disable import/prefer-default-export */
function which(cmd) {
return shell.exec(`which ${cmd}`, { silent: true, async: false });
}
/* eslint-env node */
const platform = process.platform;
function isRunningI3() {
try {
child_process.execSync("i3-msg 'exec echo 1'", { stdio: 'ignore' });
return true;
} catch (e) {
return false;
}
}
function isRunningWmctrl() {
return which('wmctrl').code === 0;
}
const wm = (() => {
switch (platform) {
case 'win32':
case 'darwin':
return 'default';
case 'linux':
{
if (isRunningI3()) {
return 'i3';
} else if (isRunningWmctrl()) {
return 'wmctrl';
}
return 'unknown';
}
}
return 'unknown';
})();
const dev = process.env.WORKFLOW_DEV_MODE === 'true';
const homedir = process.env.WORKFLOW_HOME;
const devhomedir = process.env.WORKFLOW_DEV_HOME;
const { config } = args(process.argv).named;
let configPath;
let baseFolder;
(() => {
if (dev) {
if (devhomedir) {
baseFolder = devhomedir;
configPath = path.join(devhomedir, 'config.js');
} else {
baseFolder = path.join(__dirname, '..', '..', 'workflow-template', 'config.js');
configPath = path.join(baseFolder, 'config.js');
}
} else {
if (config) {
baseFolder = path.dirname(config);
configPath = config;
} else if (homedir) {
baseFolder = homedir;
configPath = path.join(baseFolder, 'config.js');
} else {
configPath = path.join(os.homedir(), '.workflow', 'config.js');
baseFolder = `${os.homedir()}/.workflow`;
}
}
})();
/* eslint-env node */
if (dev) {
console.log('Running in dev mode');
console.log(`From: ${baseFolder}`);
}
function cli(node, cmd, args) {
var env = Object.create(process.env);
env.NODE_PATH = `${baseFolder}/node_modules`;
spawn(path.join(__dirname, '..', 'index.js'), args, {
stdio: 'inherit',
env: env
});
}
exports.cli = cli;