1 | // koffee 1.14.0
|
2 |
|
3 | /*
|
4 | 000 000 0000000 000 000 00000000 0000000 0000000
|
5 | 000 000 000 000 0000 000 000 000 000 000 000 000
|
6 | 0000000 000 000 000 0 000 0000000 000000000 000 000
|
7 | 000 000 000 000 000 0000 000 000 000 000 000 000
|
8 | 000 000 0000000 000 000 000 000 000 000 0000000
|
9 | */
|
10 | var _, actions, argDir, args, build, cmd, config, dirty, dotGit, fs, gitcount, gitup, j, klog, kolor, len, noon, opt, optall, pkg, pretty, ref, ref1, runcmd, should, slash, status, walk, watch, wlk;
|
11 |
|
12 | ref = require('kxk'), _ = ref._, args = ref.args, fs = ref.fs, klog = ref.klog, kolor = ref.kolor, noon = ref.noon, slash = ref.slash, watch = ref.watch;
|
13 |
|
14 | argDir = require('./argdir');
|
15 |
|
16 | build = require('./build');
|
17 |
|
18 | config = require('./config');
|
19 |
|
20 | pretty = require('./pretty');
|
21 |
|
22 | runcmd = require('./runcmd');
|
23 |
|
24 | should = require('./should');
|
25 |
|
26 | status = require('./status');
|
27 |
|
28 | watch = require('./watch');
|
29 |
|
30 | walk = require('./walk');
|
31 |
|
32 | pkg = require(__dirname + "/../package");
|
33 |
|
34 | args = args.init("arguments depend on options **\nrun build dirty or missing targets in dir false\nrebuild rebuild all targets in dir false -R\nwatch watch directory for changes false\ninfo show build status of dir false\nbump bump package.* version [major|minor|patch] false\nbuild make package false -m\ndiff show git diff of file/dir false\nstatus show git status of file/dir false\nfetch fetch and show git status of file/dir false\ncommit add, commit and push [msg] false\nupdate update npm packages false\npublish bump, commit & publish to npm [msg] false\ntest run tests false\nverbose log more false\nquiet log nothing false\ndebug log debug false -D\nlogtime log with time true", {
|
35 | pkg: pkg
|
36 | });
|
37 |
|
38 | actions = ['bump', 'build', 'commit', 'publish', 'update', 'test', 'watch', 'run', 'rebuild', 'info', 'status', 'fetch', 'diff'];
|
39 |
|
40 | if (!actions.map(function(a) {
|
41 | return args[a];
|
42 | }).reduce(function(acc, val) {
|
43 | return acc || val;
|
44 | })) {
|
45 | args.run = true;
|
46 | }
|
47 |
|
48 | opt = noon.parse("coffee . ext js . map true . replace .. /coffee/ /js/ .. ^coffee/ js/ \nkoffee . ext js . map true . replace .. /coffee/ /js/ .. ^coffee/ js/ \nnoon . ext json\njson . ext noon . filter .. package.json$\nstyl . ext css . replace .. /style/ /css/ .. /styl/ /js/css/\npug . ext html . replace .. /pug/ /js/");
|
49 |
|
50 | opt.ignore = [/.*\.konrad\.noon$/, /.*menu\.noon$/];
|
51 |
|
52 | wlk = {
|
53 | ignore: [/node_modules$/, /bower_components$/, /\/img$/, /\/\..+$/, /\.git$/, /\.app$/, /.*-x64$/, /.*-ia32$/, /\/?inno$/, /\/?js$/]
|
54 | };
|
55 |
|
56 | dirty = function(sourceFile, targetFile) {
|
57 | var ss, ts;
|
58 | if (!fs.existsSync(targetFile)) {
|
59 | return true;
|
60 | }
|
61 | ss = fs.statSync(sourceFile);
|
62 | ts = fs.statSync(targetFile);
|
63 | return ss.mtime.getTime() > ts.mtime.getTime();
|
64 | };
|
65 |
|
66 | if (args.info) {
|
67 | console.log(kolor.gray('○● info'));
|
68 | walk(wlk, opt, function(sourceFile, targetFile) {
|
69 | if (args.verbose) {
|
70 | console.log("source: " + sourceFile + " target: " + targetFile);
|
71 | }
|
72 | if (dirty(sourceFile, targetFile)) {
|
73 | return console.log(pretty.filePath(_.padEnd(slash.relative(sourceFile, argDir()), 40), kolor.yellow), kolor.red.dim(" ► "), pretty.filePath(slash.relative(targetFile, argDir()), kolor.red));
|
74 | } else if (args.verbose) {
|
75 | return console.log(pretty.filePath(_.padEnd(slash.relative(sourceFile, argDir()), 40), kolor.magenta), kolor.green.dim(" ► "), pretty.filePath(slash.relative(targetFile, argDir()), kolor.green));
|
76 | }
|
77 | });
|
78 | }
|
79 |
|
80 | if (args.diff) {
|
81 | args.status = true;
|
82 | }
|
83 |
|
84 | if (args.status || args.fetch) {
|
85 | optall = _.defaults(opt, {
|
86 | all: true
|
87 | });
|
88 | gitcount = 0;
|
89 | walk(wlk, optall, function(sourceFile, targetFile) {
|
90 | var i, j, len, ref1;
|
91 | if (!targetFile) {
|
92 | if (slash.basename(sourceFile) === '.git') {
|
93 | if (args.fetch) {
|
94 | status.gitFetch(sourceFile);
|
95 | } else {
|
96 | status.gitStatus(sourceFile);
|
97 | }
|
98 | gitcount += 1;
|
99 | }
|
100 | if (slash.dirExists(sourceFile)) {
|
101 | ref1 = opt.ignore;
|
102 | for (j = 0, len = ref1.length; j < len; j++) {
|
103 | i = ref1[j];
|
104 | if ((i != null ? i.test : void 0) != null) {
|
105 | if (i.test(sourceFile)) {
|
106 | return false;
|
107 | }
|
108 | } else {
|
109 | klog('ignore?', i);
|
110 | }
|
111 | }
|
112 | }
|
113 | }
|
114 | return true;
|
115 | });
|
116 | if (!gitcount) {
|
117 | gitup = slash.parse(argDir());
|
118 | while (gitup.base) {
|
119 | dotGit = slash.join(gitup.dir, '.git');
|
120 | if (fs.existsSync(dotGit)) {
|
121 | if (args.fetch) {
|
122 | status.gitFetch(dotGit);
|
123 | } else {
|
124 | status.gitStatus(dotGit);
|
125 | }
|
126 | break;
|
127 | }
|
128 | gitup = slash.parse(gitup.dir);
|
129 | }
|
130 | }
|
131 | }
|
132 |
|
133 | if (args.run || args.rebuild) {
|
134 | if (!args.quiet) {
|
135 | console.log('🔧🔧 ' + kolor.gray(args.rebuild && 'rebuild' || 'run'));
|
136 | }
|
137 | walk(wlk, opt, function(sourceFile, targetFile) {
|
138 | var isDirty, src, tgt;
|
139 | if (targetFile) {
|
140 | isDirty = dirty(sourceFile, targetFile);
|
141 | if (args.rebuild || isDirty) {
|
142 | src = pretty.filePath(_.padEnd(slash.relative(sourceFile, argDir()), 40), isDirty && kolor.red || kolor.yellow);
|
143 | tgt = pretty.filePath(slash.relative(targetFile, argDir()), kolor.green);
|
144 | if (!args.quiet) {
|
145 | console.log(src, "🔧 ", tgt);
|
146 | }
|
147 | return build(sourceFile, opt, function(sourceFile, targetFile) {
|
148 | var o;
|
149 | if (!targetFile) {
|
150 | process.exit(1);
|
151 | }
|
152 | o = config.obj(targetFile, opt);
|
153 | if (should('browserify', o, targetFile)) {
|
154 | console.log(pretty.filePath(_.padEnd(slash.relative(o.browserify.main, argDir()), 40), kolor.yellow), "🔧 ", pretty.filePath(slash.relative(o.browserify.out, argDir()), kolor.blue));
|
155 | return runcmd('browserify', o.browserify.main + " " + o.browserify.out, config.path('browserify', slash.resolve(targetFile), opt));
|
156 | }
|
157 | });
|
158 | }
|
159 | }
|
160 | });
|
161 | }
|
162 |
|
163 | ref1 = ['update', 'bump', 'build', 'commit', 'publish', 'test'];
|
164 | for (j = 0, len = ref1.length; j < len; j++) {
|
165 | cmd = ref1[j];
|
166 | if (args[cmd]) {
|
167 | if (!runcmd(cmd, args["arguments"].join(' '), process.cwd())) {
|
168 | process.exit(1);
|
169 | break;
|
170 | }
|
171 | if (args.verbose) {
|
172 | console.log(kolor.gray('🔧 done'));
|
173 | }
|
174 | if (args["arguments"] && (cmd === 'commit' || cmd === 'bump' || cmd === 'build')) {
|
175 | break;
|
176 | }
|
177 | }
|
178 | }
|
179 |
|
180 | if (args.watch) {
|
181 | watch(wlk, opt);
|
182 | } else if (cmd === 'build') {
|
183 | process.exit(0);
|
184 | }
|
185 |
|
186 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia29ucmFkLmpzIiwic291cmNlUm9vdCI6Ii4uL2NvZmZlZSIsInNvdXJjZXMiOlsia29ucmFkLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7O0FBQUEsSUFBQTs7QUFRQSxNQUFtRCxPQUFBLENBQVEsS0FBUixDQUFuRCxFQUFFLFNBQUYsRUFBSyxlQUFMLEVBQVcsV0FBWCxFQUFlLGVBQWYsRUFBcUIsaUJBQXJCLEVBQTRCLGVBQTVCLEVBQWtDLGlCQUFsQyxFQUF5Qzs7QUFFekMsTUFBQSxHQUFTLE9BQUEsQ0FBUSxVQUFSOztBQUNULEtBQUEsR0FBUyxPQUFBLENBQVEsU0FBUjs7QUFDVCxNQUFBLEdBQVMsT0FBQSxDQUFRLFVBQVI7O0FBQ1QsTUFBQSxHQUFTLE9BQUEsQ0FBUSxVQUFSOztBQUNULE1BQUEsR0FBUyxPQUFBLENBQVEsVUFBUjs7QUFDVCxNQUFBLEdBQVMsT0FBQSxDQUFRLFVBQVI7O0FBQ1QsTUFBQSxHQUFTLE9BQUEsQ0FBUSxVQUFSOztBQUNULEtBQUEsR0FBUyxPQUFBLENBQVEsU0FBUjs7QUFDVCxJQUFBLEdBQVMsT0FBQSxDQUFRLFFBQVI7O0FBQ1QsR0FBQSxHQUFTLE9BQUEsQ0FBVyxTQUFELEdBQVcsYUFBckI7O0FBRVQsSUFBQSxHQUFPLElBQUksQ0FBQyxJQUFMLENBQVUsc25DQUFWLEVBbUJFO0lBQUEsR0FBQSxFQUFJLEdBQUo7Q0FuQkY7O0FBcUJQLE9BQUEsR0FBVSxDQUFDLE1BQUQsRUFBUSxPQUFSLEVBQWdCLFFBQWhCLEVBQXlCLFNBQXpCLEVBQW1DLFFBQW5DLEVBQTRDLE1BQTVDLEVBQW1ELE9BQW5ELEVBQTJELEtBQTNELEVBQWlFLFNBQWpFLEVBQTJFLE1BQTNFLEVBQWtGLFFBQWxGLEVBQTJGLE9BQTNGLEVBQW1HLE1BQW5HOztBQUVWLElBQUcsQ0FBSSxPQUFPLENBQUMsR0FBUixDQUFZLFNBQUMsQ0FBRDtXQUFPLElBQUssQ0FBQSxDQUFBO0FBQVosQ0FBWixDQUEyQixDQUFD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QUFKLElBQW1CLENBQUEsR0FBQSxLQUFRLFFBQVIsSUFBQSxHQUFBLEtBQWlCLE1BQWpCLElBQUEsR0FBQSxLQUF3QixPQUF4QixDQUF0QjtBQUNJLGtCQURKO1NBUko7O0FBRko7O0FBYUEsSUFBRyxJQUFJLENBQUMsS0FBUjtJQUNJLEtBQUEsQ0FBTSxHQUFOLEVBQVcsR0FBWCxFQURKO0NBQUEsTUFFSyxJQUFHLEdBQUEsS0FBUSxPQUFYO0lBQ0QsT0FBTyxDQUFDLElBQVIsQ0FBYSxDQUFiLEVBREMiLCJzb3VyY2VzQ29udGVudCI6WyIjIyNcbjAwMCAgIDAwMCAgIDAwMDAwMDAgICAwMDAgICAwMDAgIDAwMDAwMDAwICAgIDAwMDAwMDAgICAwMDAwMDAwXG4wMDAgIDAwMCAgIDAwMCAgIDAwMCAgMDAwMCAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwXG4wMDAwMDAwICAgIDAwMCAgIDAwMCAgMDAwIDAgMDAwICAwMDAwMDAwICAgIDAwMDAwMDAwMCAgMDAwICAgMDAwXG4wMDAgIDAwMCAgIDAwMCAgIDAwMCAgMDAwICAwMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwXG4wMDAgICAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwMDAwMFxuIyMjXG5cbnsgXywgYXJncywgZnMsIGtsb2csIGtvbG9yLCBub29uLCBzbGFzaCwgd2F0Y2ggfSA9IHJlcXVpcmUgJ2t4aydcblxuYXJnRGlyID0gcmVxdWlyZSAnLi9hcmdkaXInXG5idWlsZCAgPSByZXF1aXJlICcuL2J1aWxkJ1xuY29uZmlnID0gcmVxdWlyZSAnLi9jb25maWcnXG5wcmV0dHkgPSByZXF1aXJlICcuL3ByZXR0eSdcbnJ1bmNtZCA9IHJlcXVpcmUgJy4vcnVuY21kJyBcbnNob3VsZCA9IHJlcXVpcmUgJy4vc2hvdWxkJ1xuc3RhdHVzID0gcmVxdWlyZSAnLi9zdGF0dXMnXG53YXRjaCAgPSByZXF1aXJlICcuL3dhdGNoJ1xud2FsayAgID0gcmVxdWlyZSAnLi93YWxrJ1xucGtnICAgID0gcmVxdWlyZSBcIiN7X19kaXJuYW1lfS8uLi9wYWNrYWdlXCJcblxuYXJncyA9IGFyZ3MuaW5pdCBcIlwiXCJcbiAgICBhcmd1bWVudHMgIGRlcGVuZCBvbiBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqXG4gICAgcnVuICAgICAgICBidWlsZCBkaXJ0eSBvciBtaXNzaW5nIHRhcmdldHMgaW4gZGlyICAgICAgICBmYWxzZVxuICAgIHJlYnVpbGQgICAgcmVidWlsZCBhbGwgdGFyZ2V0cyBpbiBkaXIgICAgICAgICAgICAgICAgICAgZmFsc2UgIC1SXG4gICAgd2F0Y2ggICAgICB3YXRjaCBkaXJlY3RvcnkgZm9yIGNoYW5nZXMgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgIGluZm8gICAgICAgc2hvdyBidWlsZCBzdGF0dXMgb2YgZGlyICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICBidW1wICAgICAgIGJ1bXAgcGFja2FnZS4qIHZlcnNpb24gW21ham9yfG1pbm9yfHBhdGNoXSAgIGZhbHNlXG4gICAgYnVpbGQgICAgICBtYWtlIHBhY2thZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAgLW1cbiAgICBkaWZmICAgICAgIHNob3cgZ2l0IGRpZmYgb2YgZmlsZS9kaXIgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgc3RhdHVzICAgICBzaG93IGdpdCBzdGF0dXMgb2YgZmlsZS9kaXIgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgIGZldGNoICAgICAgZmV0Y2ggYW5kIHNob3cgZ2l0IHN0YXR1cyBvZiBmaWxlL2RpciAgICAgICAgZmFsc2VcbiAgICBjb21taXQgICAgIGFkZCwgY29tbWl0IGFuZCBwdXNoIFttc2ddICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgdXBkYXRlICAgICB1cGRhdGUgbnBtIHBhY2thZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgIHB1Ymxpc2ggICAgYnVtcCwgY29tbWl0ICYgcHVibGlzaCB0byBucG0gW21zZ10gICAgICAgICAgZmFsc2VcbiAgICB0ZXN0ICAgICAgIHJ1biB0ZXN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgdmVyYm9zZSAgICBsb2cgbW9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgIHF1aWV0ICAgICAgbG9nIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICBkZWJ1ZyAgICAgIGxvZyBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlICAtRFxuICAgIGxvZ3RpbWUgICAgbG9nIHdpdGggdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgIFwiXCJcIiwgcGtnOnBrZ1xuXG5hY3Rpb25zID0gWydidW1wJyAnYnVpbGQnICdjb21taXQnICdwdWJsaXNoJyAndXBkYXRlJyAndGVzdCcgJ3dhdGNoJyAncnVuJyAncmVidWlsZCcgJ2luZm8nICdzdGF0dXMnICdmZXRjaCcgJ2RpZmYnXVxuXG5pZiBub3QgYWN0aW9ucy5tYXAoKGEpIC0+IGFyZ3NbYV0pLnJlZHVjZSgoYWNjLHZhbCkgLT4gYWNjIG9yIHZhbClcbiAgICBhcmdzLnJ1biA9IHRydWUgIyBtYWtlcyBydW4gdGhlIGRlZmF1bHQgYWN0aW9uIGlmIG5vIG90aGVyIGFjdGlvbiBpcyBzZXRcbiAgICBcbiMgMDAwMDAwMCAgICAwMDAwMDAwMCAgMDAwMDAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAgICAgICAwMDAwMDAwMDAgICAwMDAwMDAwXG4jIDAwMCAgIDAwMCAgMDAwICAgICAgIDAwMCAgICAgICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgICAgICAgMDAwICAgICAwMDBcbiMgMDAwICAgMDAwICAwMDAwMDAwICAgMDAwMDAwICAgIDAwMDAwMDAwMCAgMDAwICAgMDAwICAwMDAgICAgICAgICAwMDAgICAgIDAwMDAwMDBcbiMgMDAwICAgMDAwICAwMDAgICAgICAgMDAwICAgICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAgICAgICAwMDAgICAgICAgICAgMDAwXG4jIDAwMDAwMDAgICAgMDAwMDAwMDAgIDAwMCAgICAgICAwMDAgICAwMDAgICAwMDAwMDAwICAgMDAwMDAwMCAgICAgMDAwICAgICAwMDAwMDAwXG5cbm9wdCA9IG5vb24ucGFyc2UgXCJcIlwiXG5jb2ZmZWUgIC4gZXh0IGpzICAgLiBtYXAgdHJ1ZSAuIHJlcGxhY2UgLi4gL2NvZmZlZS8gL2pzLyAuLiBeY29mZmVlLyBqcy8gXG5rb2ZmZWUgIC4gZXh0IGpzICAgLiBtYXAgdHJ1ZSAuIHJlcGxhY2UgLi4gL2NvZmZlZS8gL2pzLyAuLiBeY29mZmVlLyBqcy8gXG5ub29uICAgIC4gZXh0IGpzb25cbmpzb24gICAgLiBleHQgbm9vbiAuIGZpbHRlciAgLi4gcGFja2FnZS5qc29uJFxuc3R5bCAgICAuIGV4dCBjc3MgIC4gcmVwbGFjZSAuLiAvc3R5bGUvIC9jc3MvIC4uIC9zdHlsLyAvanMvY3NzL1xucHVnICAgICAuIGV4dCBodG1sIC4gcmVwbGFjZSAuLiAvcHVnLyAvanMvXG5cIlwiXCJcblxuIyAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAgMDAwMDAwMCAgIDAwMDAwMDAwICAgMDAwMDAwMDBcbiMgMDAwICAwMDAgICAgICAgIDAwMDAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMFxuIyAwMDAgIDAwMCAgMDAwMCAgMDAwIDAgMDAwICAwMDAgICAwMDAgIDAwMDAwMDAgICAgMDAwMDAwMFxuIyAwMDAgIDAwMCAgIDAwMCAgMDAwICAwMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwXG4jIDAwMCAgIDAwMDAwMDAgICAwMDAgICAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAwMDAwMFxuXG5vcHQuaWdub3JlID0gW1xuICAgIC8uKlxcLmtvbnJhZFxcLm5vb24kL1xuICAgIC8uKm1lbnVcXC5ub29uJC9cbl1cblxud2xrID1cbiAgICBpZ25vcmU6IFtcbiAgICAgICAgL25vZGVfbW9kdWxlcyQvXG4gICAgICAgIC9ib3dlcl9jb21wb25lbnRzJC9cbiAgICAgICAgL1xcL2ltZyQvXG4gICAgICAgIC9cXC9cXC4uKyQvXG4gICAgICAgIC9cXC5naXQkL1xuICAgICAgICAvXFwuYXBwJC9cbiAgICAgICAgLy4qLXg2NCQvXG4gICAgICAgIC8uKi1pYTMyJC9cbiAgICAgICAgL1xcLz9pbm5vJC9cbiAgICAgICAgL1xcLz9qcyQvXG4gICAgXVxuXG4jIDAwMDAwMDAgICAgMDAwICAwMDAwMDAwMCAgIDAwMDAwMDAwMCAgMDAwICAgMDAwXG4jIDAwMCAgIDAwMCAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgIDAwMCAwMDBcbiMgMDAwICAgMDAwICAwMDAgIDAwMDAwMDAgICAgICAgMDAwICAgICAgIDAwMDAwXG4jIDAwMCAgIDAwMCAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgICAgMDAwXG4jIDAwMDAwMDAgICAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgICAgMDAwXG5cbmRpcnR5ID0gKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpIC0+XG4gICAgXG4gICAgaWYgbm90IGZzLmV4aXN0c1N5bmMgdGFyZ2V0RmlsZSB0aGVuIHJldHVybiB0cnVlXG4gICAgc3MgPSBmcy5zdGF0U3luYyBzb3VyY2VGaWxlXG4gICAgdHMgPSBmcy5zdGF0U3luYyB0YXJnZXRGaWxlXG4gICAgc3MubXRpbWUuZ2V0VGltZSgpID4gdHMubXRpbWUuZ2V0VGltZSgpXG5cbiMgMDAwICAwMDAgICAwMDAgIDAwMDAwMDAwICAgMDAwMDAwMFxuIyAwMDAgIDAwMDAgIDAwMCAgMDAwICAgICAgIDAwMCAgIDAwMFxuIyAwMDAgIDAwMCAwIDAwMCAgMDAwMDAwICAgIDAwMCAgIDAwMFxuIyAwMDAgIDAwMCAgMDAwMCAgMDAwICAgICAgIDAwMCAgIDAwMFxuIyAwMDAgIDAwMCAgIDAwMCAgMDAwICAgICAgICAwMDAwMDAwXG5cbmlmIGFyZ3MuaW5mb1xuXG4gICAgbG9nIGtvbG9yLmdyYXkgJ+KXi+KXjyBpbmZvJ1xuXG4gICAgd2FsayB3bGssIG9wdCwgKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpIC0+XG5cbiAgICAgICAgbG9nIFwic291cmNlOiAje3NvdXJjZUZpbGV9IHRhcmdldDogI3t0YXJnZXRGaWxlfVwiIGlmIGFyZ3MudmVyYm9zZVxuICAgICAgICBpZiBkaXJ0eSBzb3VyY2VGaWxlLCB0YXJnZXRGaWxlXG4gICAgICAgICAgICBsb2cgcHJldHR5LmZpbGVQYXRoKF8ucGFkRW5kKHNsYXNoLnJlbGF0aXZlKHNvdXJjZUZpbGUsIGFyZ0RpcigpKSwgNDApLCBrb2xvci55ZWxsb3cpLCBrb2xvci5yZWQuZGltKFwiIOKWuiBcIiksIHByZXR0eS5maWxlUGF0aChzbGFzaC5yZWxhdGl2ZSh0YXJnZXRGaWxlLCBhcmdEaXIoKSksIGtvbG9yLnJlZClcbiAgICAgICAgZWxzZSBpZiBhcmdzLnZlcmJvc2VcbiAgICAgICAgICAgIGxvZyBwcmV0dHkuZmlsZVBhdGgoXy5wYWRFbmQoc2xhc2gucmVsYXRpdmUoc291cmNlRmlsZSwgYXJnRGlyKCkpLCA0MCksIGtvbG9yLm1hZ2VudGEpLCBrb2xvci5ncmVlbi5kaW0oXCIg4pa6IFwiKSwgcHJldHR5LmZpbGVQYXRoKHNsYXNoLnJlbGF0aXZlKHRhcmdldEZpbGUsIGFyZ0RpcigpKSwga29sb3IuZ3JlZW4pXG5cbmlmIGFyZ3MuZGlmZlxuICAgIFxuICAgIGFyZ3Muc3RhdHVzID0gdHJ1ZVxuXG4jIGtsb2cgYXJnc1xuICAgIFxuaWYgYXJncy5zdGF0dXMgb3IgYXJncy5mZXRjaFxuICAgIFxuICAgIG9wdGFsbCA9IF8uZGVmYXVsdHMgb3B0LCBhbGw6IHRydWVcbiAgICBnaXRjb3VudCA9IDBcblxuICAgIHdhbGsgd2xrLCBvcHRhbGwsIChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlKSAtPlxuXG4gICAgICAgIGlmIG5vdCB0YXJnZXRGaWxlXG5cbiAgICAgICAgICAgIGlmIHNsYXNoLmJhc2VuYW1lKHNvdXJjZUZpbGUpID09ICcuZ2l0J1xuICAgICAgICAgICAgICAgIGlmIGFyZ3MuZmV0Y2hcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmdpdEZldGNoIHNvdXJjZUZpbGVcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5naXRTdGF0dXMgc291cmNlRmlsZVxuICAgICAgICAgICAgICAgIGdpdGNvdW50ICs9IDFcblxuICAgICAgICAgICAgaWYgc2xhc2guZGlyRXhpc3RzIHNvdXJjZUZpbGVcbiAgICAgICAgICAgICAgICBmb3IgaSBpbiBvcHQuaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGlmIGk/LnRlc3Q/XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBpLnRlc3Qgc291cmNlRmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBrbG9nICdpZ25vcmU/JyBpXG4gICAgICAgIHRydWVcblxuICAgIGlmIG5vdCBnaXRjb3VudFxuICAgICAgICBnaXR1cCA9IHNsYXNoLnBhcnNlIGFyZ0RpcigpXG4gICAgICAgIHdoaWxlIGdpdHVwLmJhc2VcbiAgICAgICAgICAgIGRvdEdpdCA9IHNsYXNoLmpvaW4gZ2l0dXAuZGlyLCAnLmdpdCdcbiAgICAgICAgICAgIGlmIGZzLmV4aXN0c1N5bmMgZG90R2l0XG4gICAgICAgICAgICAgICAgaWYgYXJncy5mZXRjaFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZ2l0RmV0Y2ggZG90R2l0XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZ2l0U3RhdHVzIGRvdEdpdFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBnaXR1cCA9IHNsYXNoLnBhcnNlIGdpdHVwLmRpclxuICAgICAgICAgICAgXG4jIDAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAgICAwMDBcbiMgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMDAgIDAwMFxuIyAwMDAwMDAwICAgIDAwMCAgIDAwMCAgMDAwIDAgMDAwXG4jIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgIDAwMDBcbiMgMDAwICAgMDAwICAgMDAwMDAwMCAgIDAwMCAgIDAwMFxuXG5pZiBhcmdzLnJ1biBvciBhcmdzLnJlYnVpbGRcblxuICAgIGlmIG5vdCBhcmdzLnF1aWV0XG4gICAgICAgIGxvZyAn8J+Up/CflKcgJyArIGtvbG9yLmdyYXkoYXJncy5yZWJ1aWxkIGFuZCAncmVidWlsZCcgb3IgJ3J1bicpXG4gICAgXG4gICAgd2FsayB3bGssIG9wdCwgKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpIC0+XG4gICAgICAgIGlmIHRhcmdldEZpbGVcbiAgICAgICAgICAgIGlzRGlydHkgPSBkaXJ0eSBzb3VyY2VGaWxlLCB0YXJnZXRGaWxlXG4gICAgICAgICAgICBpZiBhcmdzLnJlYnVpbGQgb3IgaXNEaXJ0eVxuICAgICAgICAgICAgICAgIHNyYyA9IHByZXR0eS5maWxlUGF0aChfLnBhZEVuZChzbGFzaC5yZWxhdGl2ZShzb3VyY2VGaWxlLCBhcmdEaXIoKSksIDQwKSwgaXNEaXJ0eSBhbmQga29sb3IucmVkIG9yIGtvbG9yLnllbGxvdylcbiAgICAgICAgICAgICAgICB0Z3QgPSBwcmV0dHkuZmlsZVBhdGgoc2xhc2gucmVsYXRpdmUodGFyZ2V0RmlsZSwgYXJnRGlyKCkpLCBrb2xvci5ncmVlbilcbiAgICAgICAgICAgICAgICBpZiBub3QgYXJncy5xdWlldFxuICAgICAgICAgICAgICAgICAgICBsb2cgc3JjLCBcIvCflKcgIFwiLCB0Z3RcbiAgICAgICAgICAgICAgICBidWlsZCBzb3VyY2VGaWxlLCBvcHQsIChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlKSAtPlxuICAgICAgICAgICAgICAgICAgICBpZiBub3QgdGFyZ2V0RmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0IDFcbiAgICAgICAgICAgICAgICAgICAgbyA9IGNvbmZpZy5vYmogdGFyZ2V0RmlsZSwgb3B0XG4gICAgICAgICAgICAgICAgICAgIGlmIHNob3VsZCAnYnJvd3NlcmlmeScsIG8sIHRhcmdldEZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIHByZXR0eS5maWxlUGF0aChfLnBhZEVuZChzbGFzaC5yZWxhdGl2ZShvLmJyb3dzZXJpZnkubWFpbiwgYXJnRGlyKCkpLCA0MCksIGtvbG9yLnllbGxvdyksIFwi8J+UpyAgXCIsIHByZXR0eS5maWxlUGF0aChzbGFzaC5yZWxhdGl2ZShvLmJyb3dzZXJpZnkub3V0LCBhcmdEaXIoKSksIGtvbG9yLmJsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5jbWQgJ2Jyb3dzZXJpZnknIFwiI3tvLmJyb3dzZXJpZnkubWFpbn0gI3tvLmJyb3dzZXJpZnkub3V0fVwiIGNvbmZpZy5wYXRoICdicm93c2VyaWZ5Jywgc2xhc2gucmVzb2x2ZSh0YXJnZXRGaWxlKSwgb3B0XG5cbmZvciBjbWQgaW4gWyd1cGRhdGUnICdidW1wJyAnYnVpbGQnICdjb21taXQnICdwdWJsaXNoJyAndGVzdCddXG5cbiAgICBpZiBhcmdzW2NtZF1cblxuICAgICAgICBpZiBub3QgcnVuY21kIGNtZCwgYXJncy5hcmd1bWVudHMuam9pbignICcpLCBwcm9jZXNzLmN3ZCgpXG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQgMVxuICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICBsb2cga29sb3IuZ3JheSAn8J+UpyAgZG9uZScgaWYgYXJncy52ZXJib3NlXG5cbiAgICAgICAgaWYgYXJncy5hcmd1bWVudHMgYW5kIGNtZCBpbiBbJ2NvbW1pdCcgJ2J1bXAnICdidWlsZCddXG4gICAgICAgICAgICBicmVha1xuXG5pZiBhcmdzLndhdGNoXG4gICAgd2F0Y2ggd2xrLCBvcHRcbmVsc2UgaWYgY21kIGluIFsnYnVpbGQnXVxuICAgIHByb2Nlc3MuZXhpdCAwXG4gICAgIl19
|
187 | //# sourceURL=../coffee/konrad.coffee |
\ | No newline at end of file |