Skip to content

Instantly share code, notes, and snippets.

@code-brewer
Last active October 27, 2019 13:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save code-brewer/10f2c07c73a6af76bf2090c650b88d89 to your computer and use it in GitHub Desktop.
Save code-brewer/10f2c07c73a6af76bf2090c650b88d89 to your computer and use it in GitHub Desktop.
rxjs_v6.x_cdn_sample_demo1 // source https://jsbin.com/nemotum
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title> sample_demo1 </title>
<!-- <script src="https://npmcdn.com/@reactivex/rxjs@5.0.0-beta.3/dist/global/Rx.umd.js"></script> -->
<script src="https://unpkg.com/rxjs/bundles/rxjs.umd.min.js"> </script>
</head>
<body>
<button id="stop">Stop</button>
<script id="jsbin-javascript">
"use strict";
var iif = rxjs.iif, of = rxjs.of, interval = rxjs.interval, pipe = rxjs.pipe, zip = rxjs.zip, from = rxjs.from, fromEvent = rxjs.fromEvent;
var _a = rxjs.operators, map = _a.map, delay = _a.delay, tap = _a.tap, mergeMap = _a.mergeMap, skipWhile = _a.skipWhile, sample = _a.sample, take = _a.take;
var now = function () {
var _now = new Date();
return "[Second: " + _now.getSeconds() + ":" + _now.getMilliseconds() + "]";
};
var stopBtn = document.querySelector("#stop");
var btnClick$ = fromEvent(stopBtn, 'click');
console.log("==== start ====");
console.log("btn: " + stopBtn.id);
var subscribe0 = interval(1000)
.pipe(mergeMap(function (v) {
return iif(function () { return !!(v % 2); }, of(v));
}))
.subscribe(console.log);
//emit every 1s
var source = interval(1000);
//skip emitted values from source while value is less than 5
var example = source.pipe(skipWhile(function (val) { return val < 5; }));
//output: 5...6...7...8........
var subscribe1 = example.subscribe(function (val) { return console.log("remain: " + val); });
// WYH: `sample`is the main session:
var source2 = zip(
//emit 'Joe', 'Frank' and 'Bob' in sequence
from(['Joe', 'Frank', 'Bob']),
//emit value every 2s
interval(2000));
//sample last emitted value from source every 2.5s
// const example2 = source2.pipe(tap(v=> console.log("source2 v: " + v)), sample(interval(2500)));
var example2 = source2.pipe(tap(function (v) { return console.log("tap source2 v: " + v); }), sample(interval(2500)));
//WYH note: above zip() can only emit 3 item, so tap() can print all three item
// but when third sample point (@7.5s), source2 has complete and sample nothing
//output: ["Joe", 0]...["Frank", 1]...........
var subscribe2 = example2.subscribe(function (val) { return console.log("sample: " + val); });
btnClick$.subscribe(function (e) {
console.log("stop button clicked~");
subscribe0.unsubscribe();
subscribe1.unsubscribe();
subscribe2.unsubscribe();
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNiaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqc2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQVMsa0JBQUcsRUFBRSxZQUFFLEVBQUUsd0JBQVEsRUFBRSxnQkFBSSxFQUFFLGNBQUcsRUFBRSxnQkFBSSxFQUFFLDBCQUFTLENBQVU7QUFFaEUsSUFBQSxtQkFBOEUsRUFBdEUsWUFBRyxFQUFFLGdCQUFLLEVBQUUsWUFBRyxFQUFFLHNCQUFRLEVBQUUsd0JBQVMsRUFBRSxrQkFBTSxFQUFFLGNBQUksQ0FBcUI7QUFFL0UsSUFBSSxHQUFHLEdBQUc7SUFDUixJQUFJLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFBO0lBQ3JCLE1BQU0sQ0FBQyxjQUFZLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBSSxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQUcsQ0FBQTtBQUNuRSxDQUFDLENBQUE7QUFFRCxJQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQy9DLElBQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFHN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0FBRzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUduQyxJQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0tBQzlCLElBQUksQ0FDSCxRQUFRLENBQUMsVUFBQSxDQUFDO0lBQ1IsT0FBQSxHQUFHLENBQ0QsY0FBTSxPQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBVCxDQUFTLEVBQ2YsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUVOO0FBSkQsQ0FJQyxDQUNGLENBRUY7S0FDQSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRzFCLGVBQWU7QUFDZixJQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsNERBQTREO0FBQzVELElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxHQUFHLENBQUMsRUFBUCxDQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELCtCQUErQjtBQUMvQixJQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLEVBQTdCLENBQTZCLENBQUMsQ0FBQztBQUczRSxvQ0FBb0M7QUFFcEMsSUFBTSxPQUFPLEdBQUcsR0FBRztBQUNqQiwyQ0FBMkM7QUFDM0MsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QixxQkFBcUI7QUFDckIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUVmLENBQUM7QUFDRixrREFBa0Q7QUFDbEQsa0dBQWtHO0FBQ2xHLElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQzNCLEdBQUcsQ0FBQyxVQUFBLENBQUMsSUFBRyxPQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEVBQWxDLENBQWtDLENBQUMsRUFDM0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFMUIsK0VBQStFO0FBQy9FLGdGQUFnRjtBQUVoRiw4Q0FBOEM7QUFDOUMsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxFQUE3QixDQUE2QixDQUFDLENBQUM7QUFHNUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFBLENBQUM7SUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25DLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QixVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekIsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzdCLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyAgaWlmLCBvZiwgaW50ZXJ2YWwsIHBpcGUsIHppcCwgZnJvbSwgZnJvbUV2ZW50IH0gPSByeGpzO1xuXG5jb25zdCB7IG1hcCwgZGVsYXksIHRhcCwgbWVyZ2VNYXAsIHNraXBXaGlsZSwgc2FtcGxlLCB0YWtlICB9ID0gcnhqcy5vcGVyYXRvcnM7XG5cbmxldCBub3cgPSAoKSA9PiB7XG4gIGxldCBfbm93ID0gbmV3IERhdGUoKVxuICByZXR1cm4gYFtTZWNvbmQ6ICR7X25vdy5nZXRTZWNvbmRzKCl9OiR7X25vdy5nZXRNaWxsaXNlY29uZHMoKX1dYFxufVxuXG5jb25zdCBzdG9wQnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNzdG9wXCIpXG5jb25zdCBidG5DbGljayQgPSBmcm9tRXZlbnQoc3RvcEJ0biwgJ2NsaWNrJylcblxuXG5jb25zb2xlLmxvZyhcIj09PT0gc3RhcnQgPT09PVwiKVxuXG5cbmNvbnNvbGUubG9nKFwiYnRuOiBcIiArICBzdG9wQnRuLmlkKTtcblxuXG5jb25zdCBzdWJzY3JpYmUwID0gaW50ZXJ2YWwoMTAwMClcbiAgLnBpcGUoXG4gICAgbWVyZ2VNYXAodiA9PlxuICAgICAgaWlmKFxuICAgICAgICAoKSA9PiAhISh2ICUgMiksXG4gICAgICAgIG9mKHYpXG4gICAgICAgIC8vIGlmIG5vdCBzdXBwbGllZCBkZWZhdWx0cyB0byBFTVBUWVxuICAgICAgKVxuICAgIClcbiAgICAvLyBvdXRwdXQ6IDEsMyw1Li4uXG4gIClcbiAgLnN1YnNjcmliZShjb25zb2xlLmxvZyk7XG5cblxuLy9lbWl0IGV2ZXJ5IDFzXG5jb25zdCBzb3VyY2UgPSBpbnRlcnZhbCgxMDAwKTtcbi8vc2tpcCBlbWl0dGVkIHZhbHVlcyBmcm9tIHNvdXJjZSB3aGlsZSB2YWx1ZSBpcyBsZXNzIHRoYW4gNVxuY29uc3QgZXhhbXBsZSA9IHNvdXJjZS5waXBlKHNraXBXaGlsZSh2YWwgPT4gdmFsIDwgNSkpO1xuLy9vdXRwdXQ6IDUuLi42Li4uNy4uLjguLi4uLi4uLlxuY29uc3Qgc3Vic2NyaWJlMSA9IGV4YW1wbGUuc3Vic2NyaWJlKHZhbCA9PiBjb25zb2xlLmxvZyhcInJlbWFpbjogXCIgKyB2YWwpKTtcblxuXG4vLyBXWUg6IGBzYW1wbGVgaXMgdGhlIG1haW4gc2Vzc2lvbjpcblxuY29uc3Qgc291cmNlMiA9IHppcChcbiAgLy9lbWl0ICdKb2UnLCAnRnJhbmsnIGFuZCAnQm9iJyBpbiBzZXF1ZW5jZVxuICBmcm9tKFsnSm9lJywgJ0ZyYW5rJywgJ0JvYiddKSxcbiAgLy9lbWl0IHZhbHVlIGV2ZXJ5IDJzXG4gIGludGVydmFsKDIwMDApXG4gIC8vICAgaW50ZXJ2YWwoMjAwMCkucGlwZSh0YWtlKDEpKVxuKTtcbi8vc2FtcGxlIGxhc3QgZW1pdHRlZCB2YWx1ZSBmcm9tIHNvdXJjZSBldmVyeSAyLjVzXG4vLyBjb25zdCBleGFtcGxlMiA9IHNvdXJjZTIucGlwZSh0YXAodj0+IGNvbnNvbGUubG9nKFwic291cmNlMiB2OiBcIiArIHYpKSwgc2FtcGxlKGludGVydmFsKDI1MDApKSk7XG5jb25zdCBleGFtcGxlMiA9IHNvdXJjZTIucGlwZShcbiAgdGFwKHY9PiBjb25zb2xlLmxvZyhcInRhcCBzb3VyY2UyIHY6IFwiICsgdikpLCBcbiAgc2FtcGxlKGludGVydmFsKDI1MDApKSk7XG5cbi8vV1lIIG5vdGU6IGFib3ZlIHppcCgpIGNhbiBvbmx5IGVtaXQgMyBpdGVtLCBzbyB0YXAoKSBjYW4gcHJpbnQgYWxsIHRocmVlIGl0ZW1cbi8vICBidXQgd2hlbiB0aGlyZCBzYW1wbGUgcG9pbnQgKEA3LjVzKSwgc291cmNlMiBoYXMgY29tcGxldGUgYW5kIHNhbXBsZSBub3RoaW5nXG5cbi8vb3V0cHV0OiBbXCJKb2VcIiwgMF0uLi5bXCJGcmFua1wiLCAxXS4uLi4uLi4uLi4uXG5jb25zdCBzdWJzY3JpYmUyID0gZXhhbXBsZTIuc3Vic2NyaWJlKHZhbCA9PiBjb25zb2xlLmxvZyhcInNhbXBsZTogXCIgKyB2YWwpKTtcblxuXG5idG5DbGljayQuc3Vic2NyaWJlKGU9PiB7XG4gICAgY29uc29sZS5sb2coXCJzdG9wIGJ1dHRvbiBjbGlja2VkflwiKVxuICAgIHN1YnNjcmliZTAudW5zdWJzY3JpYmUoKTtcbiAgICBzdWJzY3JpYmUxLnVuc3Vic2NyaWJlKCk7XG4gICAgc3Vic2NyaWJlMi51bnN1YnNjcmliZSgpOyAgXG59KSJdfQ==
</script>
<script id="jsbin-source-javascript" type="text/javascript">const { iif, of, interval, pipe, zip, from, fromEvent } = rxjs;
const { map, delay, tap, mergeMap, skipWhile, sample, take } = rxjs.operators;
let now = () => {
let _now = new Date()
return `[Second: ${_now.getSeconds()}:${_now.getMilliseconds()}]`
}
const stopBtn = document.querySelector("#stop")
const btnClick$ = fromEvent(stopBtn, 'click')
console.log("==== start ====")
console.log("btn: " + stopBtn.id);
const subscribe0 = interval(1000)
.pipe(
mergeMap(v =>
iif(
() => !!(v % 2),
of(v)
// if not supplied defaults to EMPTY
)
)
// output: 1,3,5...
)
.subscribe(console.log);
//emit every 1s
const source = interval(1000);
//skip emitted values from source while value is less than 5
const example = source.pipe(skipWhile(val => val < 5));
//output: 5...6...7...8........
const subscribe1 = example.subscribe(val => console.log("remain: " + val));
// WYH: `sample`is the main session:
const source2 = zip(
//emit 'Joe', 'Frank' and 'Bob' in sequence
from(['Joe', 'Frank', 'Bob']),
//emit value every 2s
interval(2000)
// interval(2000).pipe(take(1))
);
//sample last emitted value from source every 2.5s
// const example2 = source2.pipe(tap(v=> console.log("source2 v: " + v)), sample(interval(2500)));
const example2 = source2.pipe(
tap(v=> console.log("tap source2 v: " + v)),
sample(interval(2500)));
//WYH note: above zip() can only emit 3 item, so tap() can print all three item
// but when third sample point (@7.5s), source2 has complete and sample nothing
//output: ["Joe", 0]...["Frank", 1]...........
const subscribe2 = example2.subscribe(val => console.log("sample: " + val));
btnClick$.subscribe(e=> {
console.log("stop button clicked~")
subscribe0.unsubscribe();
subscribe1.unsubscribe();
subscribe2.unsubscribe();
})
</script></body>
</html>
"use strict";
var iif = rxjs.iif, of = rxjs.of, interval = rxjs.interval, pipe = rxjs.pipe, zip = rxjs.zip, from = rxjs.from, fromEvent = rxjs.fromEvent;
var _a = rxjs.operators, map = _a.map, delay = _a.delay, tap = _a.tap, mergeMap = _a.mergeMap, skipWhile = _a.skipWhile, sample = _a.sample, take = _a.take;
var now = function () {
var _now = new Date();
return "[Second: " + _now.getSeconds() + ":" + _now.getMilliseconds() + "]";
};
var stopBtn = document.querySelector("#stop");
var btnClick$ = fromEvent(stopBtn, 'click');
console.log("==== start ====");
console.log("btn: " + stopBtn.id);
var subscribe0 = interval(1000)
.pipe(mergeMap(function (v) {
return iif(function () { return !!(v % 2); }, of(v));
}))
.subscribe(console.log);
//emit every 1s
var source = interval(1000);
//skip emitted values from source while value is less than 5
var example = source.pipe(skipWhile(function (val) { return val < 5; }));
//output: 5...6...7...8........
var subscribe1 = example.subscribe(function (val) { return console.log("remain: " + val); });
// WYH: `sample`is the main session:
var source2 = zip(
//emit 'Joe', 'Frank' and 'Bob' in sequence
from(['Joe', 'Frank', 'Bob']),
//emit value every 2s
interval(2000));
//sample last emitted value from source every 2.5s
// const example2 = source2.pipe(tap(v=> console.log("source2 v: " + v)), sample(interval(2500)));
var example2 = source2.pipe(tap(function (v) { return console.log("tap source2 v: " + v); }), sample(interval(2500)));
//WYH note: above zip() can only emit 3 item, so tap() can print all three item
// but when third sample point (@7.5s), source2 has complete and sample nothing
//output: ["Joe", 0]...["Frank", 1]...........
var subscribe2 = example2.subscribe(function (val) { return console.log("sample: " + val); });
btnClick$.subscribe(function (e) {
console.log("stop button clicked~");
subscribe0.unsubscribe();
subscribe1.unsubscribe();
subscribe2.unsubscribe();
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNiaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqc2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQVMsa0JBQUcsRUFBRSxZQUFFLEVBQUUsd0JBQVEsRUFBRSxnQkFBSSxFQUFFLGNBQUcsRUFBRSxnQkFBSSxFQUFFLDBCQUFTLENBQVU7QUFFaEUsSUFBQSxtQkFBOEUsRUFBdEUsWUFBRyxFQUFFLGdCQUFLLEVBQUUsWUFBRyxFQUFFLHNCQUFRLEVBQUUsd0JBQVMsRUFBRSxrQkFBTSxFQUFFLGNBQUksQ0FBcUI7QUFFL0UsSUFBSSxHQUFHLEdBQUc7SUFDUixJQUFJLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFBO0lBQ3JCLE1BQU0sQ0FBQyxjQUFZLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBSSxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQUcsQ0FBQTtBQUNuRSxDQUFDLENBQUE7QUFFRCxJQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQy9DLElBQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFHN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0FBRzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUduQyxJQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0tBQzlCLElBQUksQ0FDSCxRQUFRLENBQUMsVUFBQSxDQUFDO0lBQ1IsT0FBQSxHQUFHLENBQ0QsY0FBTSxPQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBVCxDQUFTLEVBQ2YsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUVOO0FBSkQsQ0FJQyxDQUNGLENBRUY7S0FDQSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRzFCLGVBQWU7QUFDZixJQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsNERBQTREO0FBQzVELElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxHQUFHLENBQUMsRUFBUCxDQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELCtCQUErQjtBQUMvQixJQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLEVBQTdCLENBQTZCLENBQUMsQ0FBQztBQUczRSxvQ0FBb0M7QUFFcEMsSUFBTSxPQUFPLEdBQUcsR0FBRztBQUNqQiwyQ0FBMkM7QUFDM0MsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QixxQkFBcUI7QUFDckIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUVmLENBQUM7QUFDRixrREFBa0Q7QUFDbEQsa0dBQWtHO0FBQ2xHLElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQzNCLEdBQUcsQ0FBQyxVQUFBLENBQUMsSUFBRyxPQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEVBQWxDLENBQWtDLENBQUMsRUFDM0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFMUIsK0VBQStFO0FBQy9FLGdGQUFnRjtBQUVoRiw4Q0FBOEM7QUFDOUMsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxFQUE3QixDQUE2QixDQUFDLENBQUM7QUFHNUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFBLENBQUM7SUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25DLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QixVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekIsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzdCLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyAgaWlmLCBvZiwgaW50ZXJ2YWwsIHBpcGUsIHppcCwgZnJvbSwgZnJvbUV2ZW50IH0gPSByeGpzO1xuXG5jb25zdCB7IG1hcCwgZGVsYXksIHRhcCwgbWVyZ2VNYXAsIHNraXBXaGlsZSwgc2FtcGxlLCB0YWtlICB9ID0gcnhqcy5vcGVyYXRvcnM7XG5cbmxldCBub3cgPSAoKSA9PiB7XG4gIGxldCBfbm93ID0gbmV3IERhdGUoKVxuICByZXR1cm4gYFtTZWNvbmQ6ICR7X25vdy5nZXRTZWNvbmRzKCl9OiR7X25vdy5nZXRNaWxsaXNlY29uZHMoKX1dYFxufVxuXG5jb25zdCBzdG9wQnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNzdG9wXCIpXG5jb25zdCBidG5DbGljayQgPSBmcm9tRXZlbnQoc3RvcEJ0biwgJ2NsaWNrJylcblxuXG5jb25zb2xlLmxvZyhcIj09PT0gc3RhcnQgPT09PVwiKVxuXG5cbmNvbnNvbGUubG9nKFwiYnRuOiBcIiArICBzdG9wQnRuLmlkKTtcblxuXG5jb25zdCBzdWJzY3JpYmUwID0gaW50ZXJ2YWwoMTAwMClcbiAgLnBpcGUoXG4gICAgbWVyZ2VNYXAodiA9PlxuICAgICAgaWlmKFxuICAgICAgICAoKSA9PiAhISh2ICUgMiksXG4gICAgICAgIG9mKHYpXG4gICAgICAgIC8vIGlmIG5vdCBzdXBwbGllZCBkZWZhdWx0cyB0byBFTVBUWVxuICAgICAgKVxuICAgIClcbiAgICAvLyBvdXRwdXQ6IDEsMyw1Li4uXG4gIClcbiAgLnN1YnNjcmliZShjb25zb2xlLmxvZyk7XG5cblxuLy9lbWl0IGV2ZXJ5IDFzXG5jb25zdCBzb3VyY2UgPSBpbnRlcnZhbCgxMDAwKTtcbi8vc2tpcCBlbWl0dGVkIHZhbHVlcyBmcm9tIHNvdXJjZSB3aGlsZSB2YWx1ZSBpcyBsZXNzIHRoYW4gNVxuY29uc3QgZXhhbXBsZSA9IHNvdXJjZS5waXBlKHNraXBXaGlsZSh2YWwgPT4gdmFsIDwgNSkpO1xuLy9vdXRwdXQ6IDUuLi42Li4uNy4uLjguLi4uLi4uLlxuY29uc3Qgc3Vic2NyaWJlMSA9IGV4YW1wbGUuc3Vic2NyaWJlKHZhbCA9PiBjb25zb2xlLmxvZyhcInJlbWFpbjogXCIgKyB2YWwpKTtcblxuXG4vLyBXWUg6IGBzYW1wbGVgaXMgdGhlIG1haW4gc2Vzc2lvbjpcblxuY29uc3Qgc291cmNlMiA9IHppcChcbiAgLy9lbWl0ICdKb2UnLCAnRnJhbmsnIGFuZCAnQm9iJyBpbiBzZXF1ZW5jZVxuICBmcm9tKFsnSm9lJywgJ0ZyYW5rJywgJ0JvYiddKSxcbiAgLy9lbWl0IHZhbHVlIGV2ZXJ5IDJzXG4gIGludGVydmFsKDIwMDApXG4gIC8vICAgaW50ZXJ2YWwoMjAwMCkucGlwZSh0YWtlKDEpKVxuKTtcbi8vc2FtcGxlIGxhc3QgZW1pdHRlZCB2YWx1ZSBmcm9tIHNvdXJjZSBldmVyeSAyLjVzXG4vLyBjb25zdCBleGFtcGxlMiA9IHNvdXJjZTIucGlwZSh0YXAodj0+IGNvbnNvbGUubG9nKFwic291cmNlMiB2OiBcIiArIHYpKSwgc2FtcGxlKGludGVydmFsKDI1MDApKSk7XG5jb25zdCBleGFtcGxlMiA9IHNvdXJjZTIucGlwZShcbiAgdGFwKHY9PiBjb25zb2xlLmxvZyhcInRhcCBzb3VyY2UyIHY6IFwiICsgdikpLCBcbiAgc2FtcGxlKGludGVydmFsKDI1MDApKSk7XG5cbi8vV1lIIG5vdGU6IGFib3ZlIHppcCgpIGNhbiBvbmx5IGVtaXQgMyBpdGVtLCBzbyB0YXAoKSBjYW4gcHJpbnQgYWxsIHRocmVlIGl0ZW1cbi8vICBidXQgd2hlbiB0aGlyZCBzYW1wbGUgcG9pbnQgKEA3LjVzKSwgc291cmNlMiBoYXMgY29tcGxldGUgYW5kIHNhbXBsZSBub3RoaW5nXG5cbi8vb3V0cHV0OiBbXCJKb2VcIiwgMF0uLi5bXCJGcmFua1wiLCAxXS4uLi4uLi4uLi4uXG5jb25zdCBzdWJzY3JpYmUyID0gZXhhbXBsZTIuc3Vic2NyaWJlKHZhbCA9PiBjb25zb2xlLmxvZyhcInNhbXBsZTogXCIgKyB2YWwpKTtcblxuXG5idG5DbGljayQuc3Vic2NyaWJlKGU9PiB7XG4gICAgY29uc29sZS5sb2coXCJzdG9wIGJ1dHRvbiBjbGlja2VkflwiKVxuICAgIHN1YnNjcmliZTAudW5zdWJzY3JpYmUoKTtcbiAgICBzdWJzY3JpYmUxLnVuc3Vic2NyaWJlKCk7XG4gICAgc3Vic2NyaWJlMi51bnN1YnNjcmliZSgpOyAgXG59KSJdfQ==
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment