UNPKG

rkeys

Version:

A platform for creating tablet/HTML5 virtual-keyboard apps to send keystrokes to remote X11

176 lines (175 loc) 5.19 kB
// Generated by LiveScript 1.3.0 (function(){ var Fs, Path, _, Yaml, Sh, U, Args, cache, transformCommand, me, join$ = [].join, slice$ = [].slice, replace$ = ''.replace, split$ = ''.split; Fs = require('fs'); Path = require('path'); _ = require('lodash'); Yaml = require('js-yaml'); Sh = require('shelljs/global'); U = require('util'); Args = require('../args'); cache = { fpaths: [] }; transformCommand = curry$(function(fn, cmd){ if (_.isArray(cmd)) { return _.map(cmd, fn); } else { return fn(cmd); } }); module.exports = me = { applyAliases: transformCommand(applyAliases), getCommand: function(id){ return cache.commands[id]; }, getSidechains: function(){ return cache.sidechains; } }; loadAll(); function applyAliases(it){ return _.reduce(cache.aliases, function(s, v, k){ return s.replace(k, v); }, it); } function buildCache(cfgs){ var as, cs, ss, i$, len$, cfg, id, c, val, isSidechain, chain, cid, cmd; cache.aliases = as = {}; cache.commands = cs = {}; cache.sidechains = ss = {}; for (i$ = 0, len$ = cfgs.length; i$ < len$; ++i$) { cfg = cfgs[i$]; for (id in cfg) { c = cfg[id]; if (/^alias /.test(c)) { as[id] = c.slice(6); delete cfg[id]; } } } for (i$ = 0, len$ = cfgs.length; i$ < len$; ++i$) { cfg = cfgs[i$]; for (id in cfg) { val = cfg[id]; if (isSidechain = /^\/.*\/$/.test(id)) { chain = []; if (!_.isObject(val)) { throw new Error("Invalid sidechain: expecting a series of key value pairs at " + id + ": " + val); } for (cid in val) { cmd = val[cid]; if (!/^\/.*\/$/.test(cid)) { throw new Error("Invalid sidechain key: " + cid + " should be a regular expression surrounded\nby / in " + val); } _.remove(chain, fn$); chain.push({ id: cid, cmd: me.applyAliases(cmd), rx: getRxById(cid) }); } ss[id] = { chain: chain, rx: getRxById(id) }; } else { cs[id] = me.applyAliases(val); } } } log2(U.inspect(cache, { depth: null })); function getRxById(id){ return new RegExp(join$.call(slice$.call(id, 1, -2 + 1 || 9e9), '')); } return getRxById; function fn$(it){ return it.id === cid; } } function loadAll(){ var i$, ref$, len$, p, dirs, d, results$ = []; for (i$ = 0, len$ = (ref$ = cache.fpaths).length; i$ < len$; ++i$) { p = ref$[i$]; Fs.unwatchFile(p); } dirs = [__dirname].concat(Args.dirs); cache.fpaths = _.flatten((function(){ var i$, ref$, len$, results$ = []; for (i$ = 0, len$ = (ref$ = dirs).length; i$ < len$; ++i$) { d = ref$[i$]; results$.push(ls([d + "/*.yaml", d + "/*.yml"])); } return results$; }())); buildCache((function(){ var i$, ref$, len$, results$ = []; for (i$ = 0, len$ = (ref$ = cache.fpaths).length; i$ < len$; ++i$) { p = ref$[i$]; results$.push(loadFile(p)); } return results$; }())); for (i$ = 0, len$ = (ref$ = cache.fpaths).length; i$ < len$; ++i$) { p = ref$[i$]; results$.push(Fs.watchFile(p, loadAll)); } return results$; } function loadFile(path){ var cfg, dir, k, v, i$, ref$, paths, len$, pInc, p, ps, j$, len1$; log("load commands from " + path); if (!test('-e', path)) { return log("MISSING " + path); } cfg = Yaml.safeLoad(Fs.readFileSync(path)); dir = Path.dirname(path); for (k in cfg) { v = cfg[k]; if (k === 'include') { log("include " + v); delete cfg.include; for (i$ = 0, len$ = (ref$ = paths = (replace$.call(v, ',', '')).split(' ')).length; i$ < len$; ++i$) { pInc = ref$[i$]; p = Path.resolve(dir, pInc); ps = test('-d', p) ? ls([p + "/*.yaml", p + "/*.yml"]) : [p]; for (j$ = 0, len1$ = ps.length; j$ < len1$; ++j$) { p = ps[j$]; cfg = _.extend(cfg, loadFile(p)); } } } } return _.mapValues(cfg, transformCommand(function(it){ var i$, ref$, arr, len$, i, s; if (_.isObject(it)) { return it; } for (i$ = 0, len$ = (ref$ = arr = split$.call(it, ' ')).length; i$ < len$; ++i$) { i = i$; s = ref$[i$]; if (/^\.{1,2}\//.test(s)) { arr[i] = Path.resolve(dir, s); } } return join$.call(arr, ' '); })); } function curry$(f, bound){ var context, _curry = function(args) { return f.length > 1 ? function(){ var params = args ? args.concat() : []; context = bound ? context || this : this; return params.push.apply(params, arguments) < f.length && arguments.length ? _curry.call(context, params) : f.apply(context, params); } : f; }; return _curry(); } }).call(this);