1 | // koffee 1.14.0
|
2 |
|
3 | /*
|
4 | 00 00 0000000 000 000 000
|
5 | 000 000 000 000 000 0000 000
|
6 | 000000000 000000000 000 000 0 000
|
7 | 000 0 000 000 000 000 000 0000
|
8 | 000 000 000 000 000 000 000
|
9 | */
|
10 | var app, args, childp, createWindow, electron, highlight, klog, kolor, konrad, konradSend, konradUdp, konradVersion, kstr, noon, p, pkg, post, prefs, quit, ref, setRootDir, slash, startKonrad, udp, valid,
|
11 | slice = [].slice,
|
12 | indexOf = [].indexOf;
|
13 |
|
14 | ref = require('kxk'), app = ref.app, args = ref.args, childp = ref.childp, klog = ref.klog, kolor = ref.kolor, kstr = ref.kstr, noon = ref.noon, post = ref.post, prefs = ref.prefs, slash = ref.slash, udp = ref.udp, valid = ref.valid;
|
15 |
|
16 | pkg = require('../package.json');
|
17 |
|
18 | electron = require('electron');
|
19 |
|
20 | app = new app({
|
21 | dir: __dirname,
|
22 | pkg: pkg,
|
23 | shortcut: 'CmdOrCtrl+F2',
|
24 | index: 'index.html',
|
25 | icon: '../img/app.ico',
|
26 | tray: '../img/menu@2x.png',
|
27 | about: '../img/about.png',
|
28 | onQuit: function() {
|
29 | return quit();
|
30 | },
|
31 | width: 400,
|
32 | height: 400,
|
33 | minWidth: 300,
|
34 | minHeight: 200,
|
35 | args: "show open window on startup true\nprefs show preferences false"
|
36 | });
|
37 |
|
38 | konrad = null;
|
39 |
|
40 | konradVersion = null;
|
41 |
|
42 | konradUdp = new udp({
|
43 | port: 9559
|
44 | });
|
45 |
|
46 | konradSend = function() {
|
47 | var args, msg, s;
|
48 | msg = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
|
49 | s = [msg + ':'].concat(args).join(' ');
|
50 | return konradUdp.send(s);
|
51 | };
|
52 |
|
53 | if (args.verbose) {
|
54 | klog(kolor.white(kolor.bold("\n" + pkg.name, kolor.gray("v" + pkg.version + "\n"))));
|
55 | klog(kolor.yellow(kolor.bold('process')));
|
56 | p = {
|
57 | cwd: process.cwd()
|
58 | };
|
59 | klog(noon.stringify(p, {
|
60 | colors: true
|
61 | }));
|
62 | klog(kolor.yellow.bold('args'));
|
63 | klog(noon.stringify(args, {
|
64 | colors: true
|
65 | }));
|
66 | klog('');
|
67 | }
|
68 |
|
69 | if (args.prefs) {
|
70 | klog(kolor.yellow(kolor.bold('prefs')));
|
71 | klog(kolor.green(kolor.bold(prefs.store.file)));
|
72 | if (slash.fileExists(prefs.store.file)) {
|
73 | klog(noon.stringify(noon.load(prefs.store.file), {
|
74 | colors: true
|
75 | }));
|
76 | }
|
77 | }
|
78 |
|
79 | post.on('Restart konrad', function() {
|
80 | return startKonrad(prefs.get('rootDir'));
|
81 | });
|
82 |
|
83 | startKonrad = function(rootDir) {
|
84 | var path, treekill;
|
85 | prefs.set('rootDir', rootDir);
|
86 | if (konrad != null) {
|
87 | console.log('killing konrad', konrad.pid);
|
88 | treekill = require('tree-kill');
|
89 | treekill(konrad.pid);
|
90 | }
|
91 | path = slash.resolve(__dirname + "/../js/konrad.js");
|
92 | if (indexOf.call(process.env.PATH.split(':'), '/usr/local/bin') < 0) {
|
93 | process.env.PATH = process.env.PATH + ':/usr/local/bin';
|
94 | }
|
95 | if (indexOf.call(process.env.PATH.split(':'), '/opt/homebrew/bin') < 0) {
|
96 | process.env.PATH = process.env.PATH + ':/opt/homebrew/bin';
|
97 | }
|
98 | konrad = childp.spawn('node', ['--trace-warnings', path, '-w', '-v'], {
|
99 | cwd: rootDir,
|
100 | shell: true,
|
101 | env: process.env,
|
102 | detached: false
|
103 | });
|
104 | konrad.on('exit', function(code, signal) {
|
105 | console.log('konrad.on exit', code, signal);
|
106 | return konradSend('exit');
|
107 | });
|
108 | konrad.on('close', function(code, signal) {
|
109 | post.toWins('konradExit', "konrad exit code: " + code);
|
110 | return konradSend('exit');
|
111 | });
|
112 | konrad.stderr.on('data', function(data) {
|
113 | var s;
|
114 | s = kstr.stripAnsi(data.toString());
|
115 | konradSend('error', s);
|
116 | if ((app != null ? app.win : void 0) != null) {
|
117 | return post.toWins('konradError', "konrad error: " + s, kstr.ansi2html(data.toString()));
|
118 | } else {
|
119 | return createWindow('konradError', "konrad error: " + s, kstr.ansi2html(data.toString()));
|
120 | }
|
121 | });
|
122 | return konrad.stdout.on('data', function(data) {
|
123 | var s;
|
124 | s = kstr.stripAnsi(data.toString());
|
125 | if (/\ 👁\ \ /.test(s)) {
|
126 | konradVersion = s.split('👁 ')[1];
|
127 | post.toWins('konradVersion', konradVersion);
|
128 | return konradSend('version', konradVersion);
|
129 | } else if (app.win != null) {
|
130 | if (/ 😡 /.test(s)) {
|
131 | post.toWins('konradError', s, kstr.ansi2html(data.toString()));
|
132 | konradSend('error', s);
|
133 | app.win.show();
|
134 | return app.win.focus();
|
135 | } else {
|
136 | post.toWins('konradOutput', s, kstr.ansi2html(data.toString()));
|
137 | return konradSend('output', s);
|
138 | }
|
139 | } else {
|
140 | if (/ 😡 /.test(s)) {
|
141 | konradSend('error', s);
|
142 | return createWindow('konradError', s, kstr.ansi2html(data.toString()));
|
143 | } else {
|
144 | konradSend('output', s);
|
145 | return highlight();
|
146 | }
|
147 | }
|
148 | });
|
149 | };
|
150 |
|
151 | createWindow = function(msg, s, h) {
|
152 | return app.createWindow(function(w) {
|
153 | return post.toWin(w.id, msg, s, h);
|
154 | });
|
155 | };
|
156 |
|
157 | quit = function() {
|
158 | var treekill;
|
159 | if (konrad != null) {
|
160 | klog('killing konrad', konrad != null ? konrad.pid : void 0);
|
161 | treekill = require('tree-kill');
|
162 | treekill(konrad.pid, function() {
|
163 | return app.exitApp();
|
164 | });
|
165 | konrad = null;
|
166 | return 'delay';
|
167 | }
|
168 | };
|
169 |
|
170 | post.on('Restart', function() {
|
171 | var treekill;
|
172 | klog('on Restart', konrad.pid);
|
173 | treekill = require('tree-kill');
|
174 | return treekill(konrad.pid, function() {
|
175 | klog('spawn', process.argv[0], process.argv.slice(1));
|
176 | childp.spawn(process.argv[0], process.argv.slice(1), {
|
177 | cwd: process.cwd(),
|
178 | encoding: 'utf8',
|
179 | detached: true,
|
180 | shell: true,
|
181 | windowsHide: true
|
182 | });
|
183 | return process.exit(0);
|
184 | });
|
185 | });
|
186 |
|
187 | setRootDir = function() {
|
188 | var opts;
|
189 | opts = {
|
190 | title: 'Open',
|
191 | properties: ['openDirectory']
|
192 | };
|
193 | return electron.dialog.showOpenDialog(opts).then((function(_this) {
|
194 | return function(result) {
|
195 | if (!result.canceled && valid(result.filePaths)) {
|
196 | return startKonrad(result.filePaths[0]);
|
197 | }
|
198 | };
|
199 | })(this));
|
200 | };
|
201 |
|
202 | post.on('setRootDir', setRootDir);
|
203 |
|
204 | post.on('appReady', function() {
|
205 | var rootDir;
|
206 | if (rootDir = prefs.get('rootDir')) {
|
207 | return startKonrad(rootDir);
|
208 | } else {
|
209 | return setRootDir();
|
210 | }
|
211 | });
|
212 |
|
213 | post.on('winReady', function(wID) {
|
214 | if (konradVersion) {
|
215 | return post.toWin(wID, 'konradVersion', konradVersion);
|
216 | }
|
217 | });
|
218 |
|
219 | highlight = function() {
|
220 | var base, unhighlight;
|
221 | if (app.tray == null) {
|
222 | return;
|
223 | }
|
224 | if (slash.win()) {
|
225 | app.tray.setImage(slash.resolve(slash.join(__dirname, '../img/menu.png')));
|
226 | unhighlight = function() {
|
227 | return app.tray.setImage(slash.resolve(slash.join(__dirname, '../img/menu@2x.png')));
|
228 | };
|
229 | return setTimeout(unhighlight, 1000);
|
230 | } else {
|
231 | if (typeof (base = app.tray).setHighlightMode === "function") {
|
232 | base.setHighlightMode('always');
|
233 | }
|
234 | unhighlight = function() {
|
235 | var base1;
|
236 | return typeof (base1 = app.tray).setHighlightMode === "function" ? base1.setHighlightMode('never') : void 0;
|
237 | };
|
238 | return setTimeout(unhighlight, 1000);
|
239 | }
|
240 | };
|
241 |
|
242 | post.on('highlight', highlight);
|
243 |
|
244 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIuLi9jb2ZmZWUiLCJzb3VyY2VzIjpbIm1haW4uY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7QUFBQSxJQUFBLHVNQUFBO0lBQUE7OztBQVFBLE1BQWlGLE9BQUEsQ0FBUSxLQUFSLENBQWpGLEVBQUUsYUFBRixFQUFPLGVBQVAsRUFBYSxtQkFBYixFQUFxQixlQUFyQixFQUEyQixpQkFBM0IsRUFBa0MsZUFBbEMsRUFBd0MsZUFBeEMsRUFBOEMsZUFBOUMsRUFBb0QsaUJBQXBELEVBQTJELGlCQUEzRCxFQUFrRSxhQUFsRSxFQUF1RTs7QUFFdkUsR0FBQSxHQUFXLE9BQUEsQ0FBUSxpQkFBUjs7QUFDWCxRQUFBLEdBQVcsT0FBQSxDQUFRLFVBQVI7O0FBRVgsR0FBQSxHQUFNLElBQUksR0FBSixDQUNGO0lBQUEsR0FBQSxFQUFZLFNBQVo7SUFDQSxHQUFBLEVBQVksR0FEWjtJQUVBLFFBQUEsRUFBWSxjQUZaO0lBR0EsS0FBQSxFQUFZLFlBSFo7SUFJQSxJQUFBLEVBQVksZ0JBSlo7SUFLQSxJQUFBLEVBQVksb0JBTFo7SUFNQSxLQUFBLEVBQVksa0JBTlo7SUFPQSxNQUFBLEVBQVksU0FBQTtlQUFHLElBQUEsQ0FBQTtJQUFILENBUFo7SUFRQSxLQUFBLEVBQVksR0FSWjtJQVNBLE1BQUEsRUFBWSxHQVRaO0lBVUEsUUFBQSxFQUFZLEdBVlo7SUFXQSxTQUFBLEVBQVksR0FYWjtJQVlBLElBQUEsRUFBTSxpRkFaTjtDQURFOztBQWtCTixNQUFBLEdBQWlCOztBQUNqQixhQUFBLEdBQWlCOztBQUVqQixTQUFBLEdBQVksSUFBSSxHQUFKLENBQVE7SUFBQSxJQUFBLEVBQUssSUFBTDtDQUFSOztBQUNaLFVBQUEsR0FBYSxTQUFBO0FBQ1QsUUFBQTtJQURVLG9CQUFLO0lBQ2YsQ0FBQSxHQUFJLENBQUMsR0FBQSxHQUFJLEdBQUwsQ0FBUyxDQUFDLE1BQVYsQ0FBaUIsSUFBakIsQ0FBc0Is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QUFLLENBQUMsSUFBTixDQUFXLFNBQVgsRUFBc0IsaUJBQXRCLENBQWQsQ0FBbEI7UUFDQSxXQUFBLEdBQWMsU0FBQTttQkFBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVQsQ0FBa0IsS0FBSyxDQUFDLE9BQU4sQ0FBYyxLQUFLLENBQUMsSUFBTixDQUFXLFNBQVgsRUFBc0Isb0JBQXRCLENBQWQsQ0FBbEI7UUFBSDtlQUNkLFVBQUEsQ0FBVyxXQUFYLEVBQXdCLElBQXhCLEVBSEo7S0FBQSxNQUFBOztnQkFNWSxDQUFDLGlCQUFrQjs7UUFDM0IsV0FBQSxHQUFjLFNBQUE7QUFBRyxnQkFBQTtvRkFBUSxDQUFDLGlCQUFrQjtRQUE5QjtlQUNkLFVBQUEsQ0FBVyxXQUFYLEVBQXdCLElBQXhCLEVBUko7O0FBSlE7O0FBY1osSUFBSSxDQUFDLEVBQUwsQ0FBUSxXQUFSLEVBQW9CLFNBQXBCIiwic291cmNlc0NvbnRlbnQiOlsiIyMjXG4wMCAgICAgMDAgICAwMDAwMDAwICAgMDAwICAwMDAgICAwMDBcbjAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgIDAwMDAgIDAwMFxuMDAwMDAwMDAwICAwMDAwMDAwMDAgIDAwMCAgMDAwIDAgMDAwXG4wMDAgMCAwMDAgIDAwMCAgIDAwMCAgMDAwICAwMDAgIDAwMDBcbjAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgIDAwMCAgIDAwMFxuIyMjXG5cbnsgYXBwLCBhcmdzLCBjaGlsZHAsIGtsb2csIGtvbG9yLCBrc3RyLCBub29uLCBwb3N0LCBwcmVmcywgc2xhc2gsIHVkcCwgdmFsaWQgfSA9IHJlcXVpcmUgJ2t4aydcblxucGtnICAgICAgPSByZXF1aXJlICcuLi9wYWNrYWdlLmpzb24nXG5lbGVjdHJvbiA9IHJlcXVpcmUgJ2VsZWN0cm9uJ1xuXG5hcHAgPSBuZXcgYXBwXG4gICAgZGlyOiAgICAgICAgX19kaXJuYW1lXG4gICAgcGtnOiAgICAgICAgcGtnXG4gICAgc2hvcnRjdXQ6ICAgJ0NtZE9yQ3RybCtGMidcbiAgICBpbmRleDogICAgICAnaW5kZXguaHRtbCdcbiAgICBpY29uOiAgICAgICAnLi4vaW1nL2FwcC5pY28nXG4gICAgdHJheTogICAgICAgJy4uL2ltZy9tZW51QDJ4LnBuZydcbiAgICBhYm91dDogICAgICAnLi4vaW1nL2Fib3V0LnBuZydcbiAgICBvblF1aXQ6ICAgICAtPiBxdWl0KClcbiAgICB3aWR0aDogICAgICA0MDBcbiAgICBoZWlnaHQ6ICAgICA0MDBcbiAgICBtaW5XaWR0aDogICAzMDBcbiAgICBtaW5IZWlnaHQ6ICAyMDBcbiAgICBhcmdzOiBcIlwiXCJcbiAgICAgICAgc2hvdyAgICAgIG9wZW4gd2luZG93IG9uIHN0YXJ0dXAgIHRydWVcbiAgICAgICAgcHJlZnMgICAgIHNob3cgcHJlZmVyZW5jZXMgICAgICAgIGZhbHNlXG4gICAgICAgIFwiXCJcIlxuXG5rb25yYWQgICAgICAgICA9IG51bGxcbmtvbnJhZFZlcnNpb24gID0gbnVsbFxuXG5rb25yYWRVZHAgPSBuZXcgdWRwIHBvcnQ6OTU1OVxua29ucmFkU2VuZCA9IChtc2csIGFyZ3MuLi4pIC0+IFxuICAgIHMgPSBbbXNnKyc6J10uY29uY2F0KGFyZ3MpLmpvaW4gJyAnXG4gICAgIyBrbG9nICdrb25yYWRTZW5kJyBzXG4gICAga29ucmFkVWRwLnNlbmQgc1xuXG5pZiBhcmdzLnZlcmJvc2VcbiAgICBcbiAgICBrbG9nIGtvbG9yLndoaXRlIGtvbG9yLmJvbGQgXCJcXG4je3BrZy5uYW1lfVwiLCBrb2xvci5ncmF5IFwidiN7cGtnLnZlcnNpb259XFxuXCJcbiAgICBrbG9nIGtvbG9yLnllbGxvdyBrb2xvci5ib2xkICdwcm9jZXNzJ1xuICAgIHAgPSBjd2Q6IHByb2Nlc3MuY3dkKClcbiAgICBrbG9nIG5vb24uc3RyaW5naWZ5IHAsIGNvbG9yczp0cnVlXG4gICAga2xvZyBrb2xvci55ZWxsb3cuYm9sZCAnYXJncydcbiAgICBrbG9nIG5vb24uc3RyaW5naWZ5IGFyZ3MsIGNvbG9yczp0cnVlXG4gICAga2xvZyAnJ1xuXG5pZiBhcmdzLnByZWZzXG4gICAgXG4gICAga2xvZyBrb2xvci55ZWxsb3cga29sb3IuYm9sZCAncHJlZnMnXG4gICAga2xvZyBrb2xvci5ncmVlbiBrb2xvci5ib2xkIHByZWZzLnN0b3JlLmZpbGVcbiAgICBpZiBzbGFzaC5maWxlRXhpc3RzIHByZWZzLnN0b3JlLmZpbGVcbiAgICAgICAga2xvZyBub29uLnN0cmluZ2lmeSBub29uLmxvYWQocHJlZnMuc3RvcmUuZmlsZSksIGNvbG9yczp0cnVlXG5cbiMgMDAwICAgMDAwICAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwMDAwMDAgICAgMDAwMDAwMCAgIDAwMDAwMDBcbiMgMDAwICAwMDAgICAwMDAgICAwMDAgIDAwMDAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMFxuIyAwMDAwMDAwICAgIDAwMCAgIDAwMCAgMDAwIDAgMDAwICAwMDAwMDAwICAgIDAwMDAwMDAwMCAgMDAwICAgMDAwXG4jIDAwMCAgMDAwICAgMDAwICAgMDAwICAwMDAgIDAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDBcbiMgMDAwICAgMDAwICAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMDAwMDBcblxucG9zdC5vbiAnUmVzdGFydCBrb25yYWQnIC0+IHN0YXJ0S29ucmFkIHByZWZzLmdldCAncm9vdERpcidcblxuc3RhcnRLb25yYWQgPSAocm9vdERpcikgLT5cbiAgICBcbiAgICBwcmVmcy5zZXQgJ3Jvb3REaXInIHJvb3REaXJcblxuICAgIGlmIGtvbnJhZD9cbiAgICAgICAgbG9nICdraWxsaW5nIGtvbnJhZCcga29ucmFkLnBpZFxuICAgICAgICB0cmVla2lsbCA9IHJlcXVpcmUgJ3RyZWUta2lsbCdcbiAgICAgICAgdHJlZWtpbGwga29ucmFkLnBpZFxuXG4gICAgcGF0aCA9IHNsYXNoLnJlc29sdmUgXCIje19fZGlybmFtZX0vLi4vanMva29ucmFkLmpzXCJcbiAgICBcbiAgICBpZiAnL3Vzci9sb2NhbC9iaW4nIG5vdCBpbiBwcm9jZXNzLmVudi5QQVRILnNwbGl0ICc6J1xuICAgICAgICBwcm9jZXNzLmVudi5QQVRIID0gcHJvY2Vzcy5lbnYuUEFUSCArICc6L3Vzci9sb2NhbC9iaW4nXG4gICAgICAgIFxuICAgIGlmICcvb3B0L2hvbWVicmV3L2Jpbicgbm90IGluIHByb2Nlc3MuZW52LlBBVEguc3BsaXQgJzonXG4gICAgICAgIHByb2Nlc3MuZW52LlBBVEggPSBwcm9jZXNzLmVudi5QQVRIICsgJzovb3B0L2hvbWVicmV3L2JpbidcblxuICAgIGtvbnJhZCA9IGNoaWxkcC5zcGF3biAnbm9kZScgWyctLXRyYWNlLXdhcm5pbmdzJyBwYXRoLCAnLXcnICctdiddLFxuICAgICAgICBjd2Q6ICAgICAgcm9vdERpclxuICAgICAgICBzaGVsbDogICAgdHJ1ZVxuICAgICAgICBlbnY6ICAgICAgcHJvY2Vzcy5lbnZcbiAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXG4gICAgICAgIFxuICAgIGtvbnJhZC5vbiAnZXhpdCcgKGNvZGUsIHNpZ25hbCkgLT4gXG4gICAgICAgIFxuICAgICAgICBsb2cgJ2tvbnJhZC5vbiBleGl0JyBjb2RlLCBzaWduYWxcbiAgICAgICAga29ucmFkU2VuZCAnZXhpdCdcblxuICAgIGtvbnJhZC5vbiAnY2xvc2UnIChjb2RlLCBzaWduYWwpIC0+XG4gICAgICAgIFxuICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkRXhpdCcgXCJrb25yYWQgZXhpdCBjb2RlOiAje2NvZGV9XCJcbiAgICAgICAga29ucmFkU2VuZCAnZXhpdCdcblxuICAgIGtvbnJhZC5zdGRlcnIub24gJ2RhdGEnIChkYXRhKSAtPlxuICAgICAgICBcbiAgICAgICAgcyA9IGtzdHIuc3RyaXBBbnNpIGRhdGEudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICBrb25yYWRTZW5kICdlcnJvcicgc1xuICAgICAgICBpZiBhcHA/Lndpbj9cbiAgICAgICAgICAgIHBvc3QudG9XaW5zICdrb25yYWRFcnJvcicgXCJrb25yYWQgZXJyb3I6ICN7c31cIiBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3JlYXRlV2luZG93ICdrb25yYWRFcnJvcicgXCJrb25yYWQgZXJyb3I6ICN7c31cIiBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcblxuICAgIGtvbnJhZC5zdGRvdXQub24gJ2RhdGEnIChkYXRhKSAtPlxuICAgICAgICBcbiAgICAgICAgcyA9IGtzdHIuc3RyaXBBbnNpIGRhdGEudG9TdHJpbmcoKVxuICAgICAgICBcbiAgICAgICAgaWYgL1xcIPCfkYFcXCBcXCAvLnRlc3Qgc1xuICAgICAgICAgICAga29ucmFkVmVyc2lvbiA9IHMuc3BsaXQoJ/CfkYEgICcpWzFdXG4gICAgICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkVmVyc2lvbicga29ucmFkVmVyc2lvblxuICAgICAgICAgICAga29ucmFkU2VuZCAndmVyc2lvbicga29ucmFkVmVyc2lvblxuICAgICAgICBlbHNlIGlmIGFwcC53aW4/XG4gICAgICAgICAgICBpZiAvIPCfmKEgLy50ZXN0IHNcbiAgICAgICAgICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkRXJyb3InIHMsIGtzdHIuYW5zaTJodG1sIGRhdGEudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIGtvbnJhZFNlbmQgJ2Vycm9yJyBzXG4gICAgICAgICAgICAgICAgYXBwLndpbi5zaG93KClcbiAgICAgICAgICAgICAgICBhcHAud2luLmZvY3VzKClcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkT3V0cHV0JyBzLCBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICBrb25yYWRTZW5kICdvdXRwdXQnIHNcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgLyDwn5ihIC8udGVzdCBzXG4gICAgICAgICAgICAgICAga29ucmFkU2VuZCAnZXJyb3InIHNcbiAgICAgICAgICAgICAgICBjcmVhdGVXaW5kb3cgJ2tvbnJhZEVycm9yJyBzLCBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBrb25yYWRTZW5kICdvdXRwdXQnIHNcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQoKVxuXG5jcmVhdGVXaW5kb3cgPSAobXNnLCBzLCBoKSAtPlxuICAgIFxuICAgIGFwcC5jcmVhdGVXaW5kb3cgKHcpIC0+XG4gICAgICAgIHBvc3QudG9XaW4gdy5pZCwgbXNnLCBzLCBoXG4gICAgICAgICAgICAgICAgXG4jICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAgIDAwMDAwMDAwMCAgXG4jIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMCAwMCAwMCAgMDAwICAgMDAwICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMCAwMDAwICAgMDAwICAgMDAwICAwMDAgICAgIDAwMCAgICAgXG4jICAwMDAwMCAwMCAgIDAwMDAwMDAgICAwMDAgICAgIDAwMCAgICAgXG5cbnF1aXQgPSAtPlxuXG4gICAgaWYga29ucmFkP1xuICAgICAgICBrbG9nICdraWxsaW5nIGtvbnJhZCcga29ucmFkPy5waWRcbiAgICAgICAgdHJlZWtpbGwgPSByZXF1aXJlICd0cmVlLWtpbGwnXG4gICAgICAgIHRyZWVraWxsIGtvbnJhZC5waWQsIC0+IGFwcC5leGl0QXBwKClcbiAgICAgICAga29ucmFkID0gbnVsbFxuICAgICAgICAnZGVsYXknXG4gICAgICAgIFxucG9zdC5vbiAnUmVzdGFydCcgLT5cbiAgICBcbiAgICBrbG9nICdvbiBSZXN0YXJ0JyBrb25yYWQucGlkXG5cbiAgICB0cmVla2lsbCA9IHJlcXVpcmUgJ3RyZWUta2lsbCdcbiAgICB0cmVla2lsbCBrb25yYWQucGlkLCAtPiBcbiAgICBcbiAgICAgICAga2xvZyAnc3Bhd24nIHByb2Nlc3MuYXJndlswXSwgcHJvY2Vzcy5hcmd2LnNsaWNlKDEpXG4gICAgICAgIGNoaWxkcC5zcGF3biBwcm9jZXNzLmFyZ3ZbMF0sIHByb2Nlc3MuYXJndi5zbGljZSgxKSxcbiAgICAgICAgICAgIGN3ZDogICAgICAgICBwcm9jZXNzLmN3ZCgpXG4gICAgICAgICAgICBlbmNvZGluZzogICAgJ3V0ZjgnXG4gICAgICAgICAgICBkZXRhY2hlZDogICAgdHJ1ZVxuICAgICAgICAgICAgc2hlbGw6ICAgICAgIHRydWVcbiAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlXG4gICAgICAgIHByb2Nlc3MuZXhpdCAwXG4gICAgICAgIFxuIyAgMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwMCAgICAgICAgMDAwMDAwMDAgICAgMDAwMDAwMCAgICAwMDAwMDAwICAgMDAwMDAwMDAwICBcbiMgMDAwICAgICAgIDAwMCAgICAgICAgICAwMDAgICAgICAgICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMDAwMDAgICAwMDAwMDAwICAgICAgMDAwICAgICAgICAgICAwMDAwMDAwICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgICAwMDAgICAgIFxuIyAgICAgIDAwMCAgMDAwICAgICAgICAgIDAwMCAgICAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgICAgMDAwICAgICBcbiMgMDAwMDAwMCAgIDAwMDAwMDAwICAgICAwMDAgICAgICAgICAgIDAwMCAgIDAwMCAgIDAwMDAwMDAgICAgMDAwMDAwMCAgICAgIDAwMCAgICAgXG5cbnNldFJvb3REaXIgPSAtPlxuXG4gICAgb3B0cyA9XG4gICAgICAgIHRpdGxlOiAgICAgICdPcGVuJ1xuICAgICAgICBwcm9wZXJ0aWVzOiBbJ29wZW5EaXJlY3RvcnknXVxuXG4gICAgZWxlY3Ryb24uZGlhbG9nLnNob3dPcGVuRGlhbG9nKG9wdHMpLnRoZW4gKHJlc3VsdCkgPT5cbiAgICAgICAgaWYgbm90IHJlc3VsdC5jYW5jZWxlZCBhbmQgdmFsaWQgcmVzdWx0LmZpbGVQYXRoc1xuICAgICAgICAgICAgc3RhcnRLb25yYWQgcmVzdWx0LmZpbGVQYXRoc1swXVxuXG5wb3N0Lm9uICdzZXRSb290RGlyJyBzZXRSb290RGlyXG5cbiMgIDAwMDAwMDAgICAwMDAwMDAwMCAgIDAwMDAwMDAwICAgICAgICAgMDAwMDAwMDAgICAwMDAwMDAwMCAgIDAwMDAwMDAgICAwMDAwMDAwICAgIDAwMCAgIDAwMCAgXG4jIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgICAgIDAwMCAgIDAwMCAgMDAwICAgICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgMDAwIDAwMCAgIFxuIyAwMDAwMDAwMDAgIDAwMDAwMDAwICAgMDAwMDAwMDAgICAgICAgICAwMDAwMDAwICAgIDAwMDAwMDAgICAwMDAwMDAwMDAgIDAwMCAgIDAwMCAgICAwMDAwMCAgICBcbiMgMDAwICAgMDAwICAwMDAgICAgICAgIDAwMCAgICAgICAgICAgICAgMDAwICAgMDAwICAwMDAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMCAgIDAwMCAgMDAwICAgICAgICAwMDAgICAgICAgICAgICAgIDAwMCAgIDAwMCAgMDAwMDAwMDAgIDAwMCAgIDAwMCAgMDAwMDAwMCAgICAgICAwMDAgICAgIFxuXG5wb3N0Lm9uICdhcHBSZWFkeScgLT5cblxuICAgIGlmIHJvb3REaXIgPSBwcmVmcy5nZXQgJ3Jvb3REaXInXG4gICAgICAgIHN0YXJ0S29ucmFkIHJvb3REaXJcbiAgICBlbHNlXG4gICAgICAgIHNldFJvb3REaXIoKVxuXG4jMDAwICAgMDAwICAwMDAgIDAwMCAgIDAwMCAgICAgICAgMDAwMDAwMDAgICAwMDAwMDAwMCAgIDAwMDAwMDAgICAwMDAwMDAwICAgIDAwMCAgIDAwMCAgXG4jMDAwIDAgMDAwICAwMDAgIDAwMDAgIDAwMCAgICAgICAgMDAwICAgMDAwICAwMDAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgICAwMDAgMDAwICAgXG4jMDAwMDAwMDAwICAwMDAgIDAwMCAwIDAwMCAgICAgICAgMDAwMDAwMCAgICAwMDAwMDAwICAgMDAwMDAwMDAwICAwMDAgICAwMDAgICAgMDAwMDAgICAgXG4jMDAwICAgMDAwICAwMDAgIDAwMCAgMDAwMCAgICAgICAgMDAwICAgMDAwICAwMDAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG4jMDAgICAgIDAwICAwMDAgIDAwMCAgIDAwMCAgICAgICAgMDAwICAgMDAwICAwMDAwMDAwMCAgMDAwICAgMDAwICAwMDAwMDAwICAgICAgIDAwMCAgICAgXG5cbnBvc3Qub24gJ3dpblJlYWR5JyAod0lEKSAtPlxuICAgIFxuICAgIHBvc3QudG9XaW4gd0lELCAna29ucmFkVmVyc2lvbicga29ucmFkVmVyc2lvbiBpZiBrb25yYWRWZXJzaW9uXG5cbiMgMDAwICAgMDAwICAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAgICAgICAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAwMDAwMDAgIFxuIyAwMDAgICAwMDAgIDAwMCAgMDAwICAgICAgICAwMDAgICAwMDAgIDAwMCAgICAgIDAwMCAgMDAwICAgICAgICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMDAwMDAwMCAgMDAwICAwMDAgIDAwMDAgIDAwMDAwMDAwMCAgMDAwICAgICAgMDAwICAwMDAgIDAwMDAgIDAwMDAwMDAwMCAgICAgMDAwICAgICBcbiMgMDAwICAgMDAwICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgICAwMDAgICAgIFxuIyAwMDAgICAwMDAgIDAwMCAgIDAwMDAwMDAgICAwMDAgICAwMDAgIDAwMDAwMDAgIDAwMCAgIDAwMDAwMDAgICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG5cbmhpZ2hsaWdodCA9IC0+XG5cbiAgICByZXR1cm4gaWYgbm90IGFwcC50cmF5PyBcbiAgICBcbiAgICBpZiBzbGFzaC53aW4oKVxuICAgICAgICBhcHAudHJheS5zZXRJbWFnZSBzbGFzaC5yZXNvbHZlIHNsYXNoLmpvaW4gX19kaXJuYW1lLCAnLi4vaW1nL21lbnUucG5nJ1xuICAgICAgICB1bmhpZ2hsaWdodCA9IC0+IGFwcC50cmF5LnNldEltYWdlIHNsYXNoLnJlc29sdmUgc2xhc2guam9pbiBfX2Rpcm5hbWUsICcuLi9pbWcvbWVudUAyeC5wbmcnXG4gICAgICAgIHNldFRpbWVvdXQgdW5oaWdobGlnaHQsIDEwMDBcbiAgICBlbHNlXG4gICAgICAgIFxuICAgICAgICBhcHAudHJheS5zZXRIaWdobGlnaHRNb2RlPyAnYWx3YXlzJ1xuICAgICAgICB1bmhpZ2hsaWdodCA9IC0+IGFwcC50cmF5LnNldEhpZ2hsaWdodE1vZGU/ICduZXZlcidcbiAgICAgICAgc2V0VGltZW91dCB1bmhpZ2hsaWdodCwgMTAwMFxuXG5wb3N0Lm9uICdoaWdobGlnaHQnIGhpZ2hsaWdodFxuXG4iXX0=
|
245 | //# sourceURL=../coffee/main.coffee |
\ | No newline at end of file |