Best Python code snippet using fMBT_python
kefir.js
Source:kefir.js  
...343  mixin = extend({344    _init: function(args) {},345    _free: function() {},346    _handleValue: function(x, isCurrent) {347      this._send(VALUE, x, isCurrent);348    },349    _handleError: function(x, isCurrent) {350      this._send(ERROR, x, isCurrent);351    },352    _handleEnd: function(__, isCurrent) {353      this._send(END, null, isCurrent);354    },355    _handleAny: function(event) {356      switch (event.type) {357        case VALUE: this._handleValue(event.value, event.current); break;358        case ERROR: this._handleError(event.value, event.current); break;359        case END: this._handleEnd(event.value, event.current); break;360      }361    },362    _onActivation: function() {363      this._source.onAny(this._$handleAny);364    },365    _onDeactivation: function() {366      this._source.offAny(this._$handleAny);367    }368  }, mixin || {});369  function buildClass(BaseClass) {370    function AnonymousObservable(source, args) {371      BaseClass.call(this);372      this._source = source;373      this._name = source._name + '.' + name;374      this._init(args);375      var $ = this;376      this._$handleAny = function(event) {377        $._handleAny(event);378      };379    }380    inherit(AnonymousObservable, BaseClass, {381      _clear: function() {382        BaseClass.prototype._clear.call(this);383        this._source = null;384        this._$handleAny = null;385        this._free();386      }387    }, mixin);388    return AnonymousObservable;389  }390  var AnonymousStream = buildClass(Stream);391  var AnonymousProperty = buildClass(Property);392  if (options.streamMethod) {393    Stream.prototype[name] = options.streamMethod(AnonymousStream, AnonymousProperty);394  }395  if (options.propertyMethod) {396    Property.prototype[name] = options.propertyMethod(AnonymousStream, AnonymousProperty);397  }398}399function withTwoSources(name, mixin /*, options*/) {400  mixin = extend({401    _init: function(args) {},402    _free: function() {},403    _handlePrimaryValue: function(x, isCurrent) {404      this._send(VALUE, x, isCurrent);405    },406    _handlePrimaryError: function(x, isCurrent) {407      this._send(ERROR, x, isCurrent);408    },409    _handlePrimaryEnd: function(__, isCurrent) {410      this._send(END, null, isCurrent);411    },412    _handleSecondaryValue: function(x, isCurrent) {413      this._lastSecondary = x;414    },415    _handleSecondaryError: function(x, isCurrent) {416      this._send(ERROR, x, isCurrent);417    },418    _handleSecondaryEnd: function(__, isCurrent) {},419    _handlePrimaryAny: function(event) {420      switch (event.type) {421        case VALUE:422          this._handlePrimaryValue(event.value, event.current);423          break;424        case ERROR:425          this._handlePrimaryError(event.value, event.current);426          break;427        case END:428          this._handlePrimaryEnd(event.value, event.current);429          break;430      }431    },432    _handleSecondaryAny: function(event) {433      switch (event.type) {434        case VALUE:435          this._handleSecondaryValue(event.value, event.current);436          break;437        case ERROR:438          this._handleSecondaryError(event.value, event.current);439          break;440        case END:441          this._handleSecondaryEnd(event.value, event.current);442          this._removeSecondary();443          break;444      }445    },446    _removeSecondary: function() {447      if (this._secondary !== null) {448        this._secondary.offAny(this._$handleSecondaryAny);449        this._$handleSecondaryAny = null;450        this._secondary = null;451      }452    },453    _onActivation: function() {454      if (this._secondary !== null) {455        this._secondary.onAny(this._$handleSecondaryAny);456      }457      if (this._alive) {458        this._primary.onAny(this._$handlePrimaryAny);459      }460    },461    _onDeactivation: function() {462      if (this._secondary !== null) {463        this._secondary.offAny(this._$handleSecondaryAny);464      }465      this._primary.offAny(this._$handlePrimaryAny);466    }467  }, mixin || {});468  function buildClass(BaseClass) {469    function AnonymousObservable(primary, secondary, args) {470      BaseClass.call(this);471      this._primary = primary;472      this._secondary = secondary;473      this._name = primary._name + '.' + name;474      this._lastSecondary = NOTHING;475      var $ = this;476      this._$handleSecondaryAny = function(event) {477        $._handleSecondaryAny(event);478      };479      this._$handlePrimaryAny = function(event) {480        $._handlePrimaryAny(event);481      };482      this._init(args);483    }484    inherit(AnonymousObservable, BaseClass, {485      _clear: function() {486        BaseClass.prototype._clear.call(this);487        this._primary = null;488        this._secondary = null;489        this._lastSecondary = null;490        this._$handleSecondaryAny = null;491        this._$handlePrimaryAny = null;492        this._free();493      }494    }, mixin);495    return AnonymousObservable;496  }497  var AnonymousStream = buildClass(Stream);498  var AnonymousProperty = buildClass(Property);499  Stream.prototype[name] = function(secondary) {500    return new AnonymousStream(this, secondary, rest(arguments, 1, []));501  };502  Property.prototype[name] = function(secondary) {503    return new AnonymousProperty(this, secondary, rest(arguments, 1, []));504  };505}506// Dispatcher507function callSubscriber(sType, sFn, event) {508  if (sType === ANY) {509    sFn(event);510  } else if (sType === event.type) {511    if (sType === VALUE || sType === ERROR) {512      sFn(event.value);513    } else {514      sFn();515    }516  }517}518function Dispatcher() {519  this._items = [];520}521extend(Dispatcher.prototype, {522  add: function(type, fn) {523    this._items = concat(this._items, [{524      type: type,525      fn: fn526    }]);527    return this._items.length;528  },529  remove: function(type, fn) {530    this._items = removeByPred(this._items, function(fnData) {531      return fnData.type === type && fnData.fn === fn;532    });533    return this._items.length;534  },535  dispatch: function(event) {536    var items = this._items;537    for (var i = 0; i < items.length; i++) {538      callSubscriber(items[i].type, items[i].fn, event);539    }540  }541});542// Events543function Event(type, value, current) {544  return {type: type, value: value, current: !!current};545}546var CURRENT_END = Event(END, undefined, true);547// Observable548function Observable() {549  this._dispatcher = new Dispatcher();550  this._active = false;551  this._alive = true;552}553Kefir.Observable = Observable;554extend(Observable.prototype, {555  _name: 'observable',556  _onActivation: function() {},557  _onDeactivation: function() {},558  _setActive: function(active) {559    if (this._active !== active) {560      this._active = active;561      if (active) {562        this._onActivation();563      } else {564        this._onDeactivation();565      }566    }567  },568  _clear: function() {569    this._setActive(false);570    this._alive = false;571    this._dispatcher = null;572  },573  _send: function(type, x, isCurrent) {574    if (this._alive) {575      this._dispatcher.dispatch(Event(type, x, isCurrent));576      if (type === END) {577        this._clear();578      }579    }580  },581  _on: function(type, fn) {582    if (this._alive) {583      this._dispatcher.add(type, fn);584      this._setActive(true);585    } else {586      callSubscriber(type, fn, CURRENT_END);587    }588    return this;589  },590  _off: function(type, fn) {591    if (this._alive) {592      var count = this._dispatcher.remove(type, fn);593      if (count === 0) {594        this._setActive(false);595      }596    }597    return this;598  },599  onValue: function(fn) {600    return this._on(VALUE, fn);601  },602  onError: function(fn) {603    return this._on(ERROR, fn);604  },605  onEnd: function(fn) {606    return this._on(END, fn);607  },608  onAny: function(fn) {609    return this._on(ANY, fn);610  },611  offValue: function(fn) {612    return this._off(VALUE, fn);613  },614  offError: function(fn) {615    return this._off(ERROR, fn);616  },617  offEnd: function(fn) {618    return this._off(END, fn);619  },620  offAny: function(fn) {621    return this._off(ANY, fn);622  }623});624// extend() can't handle `toString` in IE8625Observable.prototype.toString = function() {626  return '[' + this._name + ']';627};628// Stream629function Stream() {630  Observable.call(this);631}632Kefir.Stream = Stream;633inherit(Stream, Observable, {634  _name: 'stream'635});636// Property637function Property() {638  Observable.call(this);639  this._current = NOTHING;640  this._currentError = NOTHING;641}642Kefir.Property = Property;643inherit(Property, Observable, {644  _name: 'property',645  _send: function(type, x, isCurrent) {646    if (this._alive) {647      if (!isCurrent) {648        this._dispatcher.dispatch(Event(type, x));649      }650      if (type === VALUE) {651        this._current = x;652      }653      if (type === ERROR) {654        this._currentError = x;655      }656      if (type === END) {657        this._clear();658      }659    }660  },661  _on: function(type, fn) {662    if (this._alive) {663      this._dispatcher.add(type, fn);664      this._setActive(true);665    }666    if (this._current !== NOTHING) {667      callSubscriber(type, fn, Event(VALUE, this._current, true));668    }669    if (this._currentError !== NOTHING) {670      callSubscriber(type, fn, Event(ERROR, this._currentError, true));671    }672    if (!this._alive) {673      callSubscriber(type, fn, CURRENT_END);674    }675    return this;676  }677});678// Log679Observable.prototype.log = function(name) {680  name = name || this.toString();681  var handler = function(event) {682    var typeStr = '<' + event.type + (event.current ? ':current' : '') + '>';683    if (event.type === VALUE || event.type === ERROR) {684      console.log(name, typeStr, event.value);685    } else {686      console.log(name, typeStr);687    }688  };689  if (!this.__logHandlers) {690    this.__logHandlers = [];691  }692  this.__logHandlers.push({name: name, handler: handler});693  this.onAny(handler);694  return this;695};696Observable.prototype.offLog = function(name) {697  name = name || this.toString();698  if (this.__logHandlers) {699    var handlerIndex = findByPred(this.__logHandlers, function(obj) {700      return obj.name === name;701    });702    if (handlerIndex !== -1) {703      var handler = this.__logHandlers[handlerIndex].handler;704      this.__logHandlers.splice(handlerIndex, 1);705      this.offAny(handler);706    }707  }708  return this;709};710// Kefir.withInterval()711withInterval('withInterval', {712  _init: function(args) {713    this._fn = args[0];714    var $ = this;715    this._emitter = {716      emit: function(x) {717        $._send(VALUE, x);718      },719      error: function(x) {720        $._send(ERROR, x);721      },722      end: function() {723        $._send(END);724      },725      emitEvent: function(e) {726        $._send(e.type, e.value);727      }728    };729  },730  _free: function() {731    this._fn = null;732    this._emitter = null;733  },734  _onTick: function() {735    this._fn(this._emitter);736  }737});738// Kefir.fromPoll()739withInterval('fromPoll', {740  _init: function(args) {741    this._fn = args[0];742  },743  _free: function() {744    this._fn = null;745  },746  _onTick: function() {747    this._send(VALUE, this._fn());748  }749});750// Kefir.interval()751withInterval('interval', {752  _init: function(args) {753    this._x = args[0];754  },755  _free: function() {756    this._x = null;757  },758  _onTick: function() {759    this._send(VALUE, this._x);760  }761});762// Kefir.sequentially()763withInterval('sequentially', {764  _init: function(args) {765    this._xs = cloneArray(args[0]);766    if (this._xs.length === 0) {767      this._send(END);768    }769  },770  _free: function() {771    this._xs = null;772  },773  _onTick: function() {774    switch (this._xs.length) {775      case 1:776        this._send(VALUE, this._xs[0]);777        this._send(END);778        break;779      default:780        this._send(VALUE, this._xs.shift());781    }782  }783});784// Kefir.repeatedly()785withInterval('repeatedly', {786  _init: function(args) {787    this._xs = cloneArray(args[0]);788    this._i = -1;789  },790  _onTick: function() {791    if (this._xs.length > 0) {792      this._i = (this._i + 1) % this._xs.length;793      this._send(VALUE, this._xs[this._i]);794    }795  }796});797Kefir.repeatedly = deprecated(798  'Kefir.repeatedly()',799  'Kefir.repeat(() => Kefir.sequentially(...)})',800  Kefir.repeatedly801);802// Kefir.later()803withInterval('later', {804  _init: function(args) {805    this._x = args[0];806  },807  _free: function() {808    this._x = null;809  },810  _onTick: function() {811    this._send(VALUE, this._x);812    this._send(END);813  }814});815function _AbstractPool(options) {816  Stream.call(this);817  this._queueLim = get(options, 'queueLim', 0);818  this._concurLim = get(options, 'concurLim', -1);819  this._drop = get(options, 'drop', 'new');820  if (this._concurLim === 0) {821    throw new Error('options.concurLim can\'t be 0');822  }823  var $ = this;824  this._$handleSubAny = function(event) {825    $._handleSubAny(event);826  };827  this._queue = [];828  this._curSources = [];829  this._activating = false;830  this._bindedEndHandlers = [];831}832inherit(_AbstractPool, Stream, {833  _name: 'abstractPool',834  _add: function(obj, toObs) {835    toObs = toObs || id;836    if (this._concurLim === -1 || this._curSources.length < this._concurLim) {837      this._addToCur(toObs(obj));838    } else {839      if (this._queueLim === -1 || this._queue.length < this._queueLim) {840        this._addToQueue(toObs(obj));841      } else if (this._drop === 'old') {842        this._removeOldest();843        this._add(toObs(obj));844      }845    }846  },847  _addAll: function(obss) {848    var $ = this;849    forEach(obss, function(obs) {850      $._add(obs);851    });852  },853  _remove: function(obs) {854    if (this._removeCur(obs) === -1) {855      this._removeQueue(obs);856    }857  },858  _addToQueue: function(obs) {859    this._queue = concat(this._queue, [obs]);860  },861  _addToCur: function(obs) {862    this._curSources = concat(this._curSources, [obs]);863    if (this._active) {864      this._subscribe(obs);865    }866  },867  _subscribe: function(obs) {868    var $ = this;869    var onEnd = function() {870      $._removeCur(obs);871    };872    this._bindedEndHandlers.push({obs: obs, handler: onEnd});873    obs.onAny(this._$handleSubAny);874    obs.onEnd(onEnd);875  },876  _unsubscribe: function(obs) {877    obs.offAny(this._$handleSubAny);878    var onEndI = findByPred(this._bindedEndHandlers, function(obj) {879      return obj.obs === obs;880    });881    if (onEndI !== -1) {882      var onEnd = this._bindedEndHandlers[onEndI].handler;883      this._bindedEndHandlers.splice(onEndI, 1);884      obs.offEnd(onEnd);885    }886  },887  _handleSubAny: function(event) {888    if (event.type === VALUE || event.type === ERROR) {889      this._send(event.type, event.value, event.current && this._activating);890    }891  },892  _removeQueue: function(obs) {893    var index = find(this._queue, obs);894    this._queue = remove(this._queue, index);895    return index;896  },897  _removeCur: function(obs) {898    if (this._active) {899      this._unsubscribe(obs);900    }901    var index = find(this._curSources, obs);902    this._curSources = remove(this._curSources, index);903    if (index !== -1) {904      if (this._queue.length !== 0) {905        this._pullQueue();906      } else if (this._curSources.length === 0) {907        this._onEmpty();908      }909    }910    return index;911  },912  _removeOldest: function() {913    this._removeCur(this._curSources[0]);914  },915  _pullQueue: function() {916    if (this._queue.length !== 0) {917      this._queue = cloneArray(this._queue);918      this._addToCur(this._queue.shift());919    }920  },921  _onActivation: function() {922    var sources = this._curSources923      , i;924    this._activating = true;925    for (i = 0; i < sources.length; i++) {926      if (this._active) {927        this._subscribe(sources[i]);928      }929    }930    this._activating = false;931  },932  _onDeactivation: function() {933    var sources = this._curSources934      , i;935    for (i = 0; i < sources.length; i++) {936      this._unsubscribe(sources[i]);937    }938  },939  _isEmpty: function() {940    return this._curSources.length === 0;941  },942  _onEmpty: function() {},943  _clear: function() {944    Stream.prototype._clear.call(this);945    this._queue = null;946    this._curSources = null;947    this._$handleSubAny = null;948    this._bindedEndHandlers = null;949  }950});951// .merge()952var MergeLike = {953  _onEmpty: function() {954    if (this._initialised) {955      this._send(END, null, this._activating);956    }957  }958};959function Merge(sources) {960  _AbstractPool.call(this);961  if (sources.length === 0) {962    this._send(END);963  } else {964    this._addAll(sources);965  }966  this._initialised = true;967}968inherit(Merge, _AbstractPool, extend({_name: 'merge'}, MergeLike));969Kefir.merge = function(obss) {970  return new Merge(obss);971};972Observable.prototype.merge = function(other) {973  return Kefir.merge([this, other]);974};975// .concat()976function Concat(sources) {977  _AbstractPool.call(this, {concurLim: 1, queueLim: -1});978  if (sources.length === 0) {979    this._send(END);980  } else {981    this._addAll(sources);982  }983  this._initialised = true;984}985inherit(Concat, _AbstractPool, extend({_name: 'concat'}, MergeLike));986Kefir.concat = function(obss) {987  return new Concat(obss);988};989Observable.prototype.concat = function(other) {990  return Kefir.concat([this, other]);991};992// .pool()993function Pool() {994  _AbstractPool.call(this);995}996Kefir.Pool = Pool;997inherit(Pool, _AbstractPool, {998  _name: 'pool',999  plug: function(obs) {1000    this._add(obs);1001    return this;1002  },1003  unplug: function(obs) {1004    this._remove(obs);1005    return this;1006  }1007});1008Kefir.pool = function() {1009  return new Pool();1010};1011// .bus()1012function Bus() {1013  _AbstractPool.call(this);1014}1015Kefir.Bus = Bus;1016inherit(Bus, _AbstractPool, {1017  _name: 'bus',1018  plug: function(obs) {1019    this._add(obs);1020    return this;1021  },1022  unplug: function(obs) {1023    this._remove(obs);1024    return this;1025  },1026  emit: function(x) {1027    this._send(VALUE, x);1028    return this;1029  },1030  error: function(x) {1031    this._send(ERROR, x);1032    return this;1033  },1034  end: function() {1035    this._send(END);1036    return this;1037  },1038  emitEvent: function(event) {1039    this._send(event.type, event.value);1040  }1041});1042Kefir.bus = function() {1043  return new Bus();1044};1045// .flatMap()1046function FlatMap(source, fn, options) {1047  _AbstractPool.call(this, options);1048  this._source = source;1049  this._fn = fn || id;1050  this._mainEnded = false;1051  this._lastCurrent = null;1052  var $ = this;1053  this._$handleMainSource = function(event) {1054    $._handleMainSource(event);1055  };1056}1057inherit(FlatMap, _AbstractPool, {1058  _onActivation: function() {1059    _AbstractPool.prototype._onActivation.call(this);1060    if (this._active) {1061      this._activating = true;1062      this._source.onAny(this._$handleMainSource);1063      this._activating = false;1064    }1065  },1066  _onDeactivation: function() {1067    _AbstractPool.prototype._onDeactivation.call(this);1068    this._source.offAny(this._$handleMainSource);1069  },1070  _handleMainSource: function(event) {1071    if (event.type === VALUE) {1072      if (!event.current || this._lastCurrent !== event.value) {1073        this._add(event.value, this._fn);1074      }1075      this._lastCurrent = event.value;1076    }1077    if (event.type === ERROR) {1078      this._send(ERROR, event.value, event.current);1079    }1080    if (event.type === END) {1081      if (this._isEmpty()) {1082        this._send(END, null, event.current);1083      } else {1084        this._mainEnded = true;1085      }1086    }1087  },1088  _onEmpty: function() {1089    if (this._mainEnded) {1090      this._send(END);1091    }1092  },1093  _clear: function() {1094    _AbstractPool.prototype._clear.call(this);1095    this._source = null;1096    this._lastCurrent = null;1097    this._$handleMainSource = null;1098  }1099});1100Observable.prototype.flatMap = function(fn) {1101  return new FlatMap(this, fn)1102    .setName(this, 'flatMap');1103};1104Observable.prototype.flatMapLatest = function(fn) {1105  return new FlatMap(this, fn, {concurLim: 1, drop: 'old'})1106    .setName(this, 'flatMapLatest');1107};1108Observable.prototype.flatMapFirst = function(fn) {1109  return new FlatMap(this, fn, {concurLim: 1})1110    .setName(this, 'flatMapFirst');1111};1112Observable.prototype.flatMapConcat = function(fn) {1113  return new FlatMap(this, fn, {queueLim: -1, concurLim: 1})1114    .setName(this, 'flatMapConcat');1115};1116Observable.prototype.flatMapConcurLimit = function(fn, limit) {1117  var result;1118  if (limit === 0) {1119    result = Kefir.never();1120  } else {1121    if (limit < 0) {1122      limit = -1;1123    }1124    result = new FlatMap(this, fn, {queueLim: -1, concurLim: limit});1125  }1126  return result.setName(this, 'flatMapConcurLimit');1127};1128// .zip()1129function Zip(sources, combinator) {1130  Stream.call(this);1131  if (sources.length === 0) {1132    this._send(END);1133  } else {1134    this._buffers = map(sources, function(source) {1135      return isArray(source) ? cloneArray(source) : [];1136    });1137    this._sources = map(sources, function(source) {1138      return isArray(source) ? Kefir.never() : source;1139    });1140    this._combinator = combinator ? spread(combinator, this._sources.length) : id;1141    this._aliveCount = 0;1142    this._bindedHandlers = Array(this._sources.length);1143    for (var i = 0; i < this._sources.length; i++) {1144      this._bindedHandlers[i] = this._bindHandleAny(i);1145    }1146  }1147}1148inherit(Zip, Stream, {1149  _name: 'zip',1150  _onActivation: function() {1151    var i, length = this._sources.length;1152    this._drainArrays();1153    this._aliveCount = length;1154    for (i = 0; i < length; i++) {1155      if (this._active) {1156        this._sources[i].onAny(this._bindedHandlers[i]);1157      }1158    }1159  },1160  _onDeactivation: function() {1161    for (var i = 0; i < this._sources.length; i++) {1162      this._sources[i].offAny(this._bindedHandlers[i]);1163    }1164  },1165  _emit: function(isCurrent) {1166    var values = new Array(this._buffers.length);1167    for (var i = 0; i < this._buffers.length; i++) {1168      values[i] = this._buffers[i].shift();1169    }1170    this._send(VALUE, this._combinator(values), isCurrent);1171  },1172  _isFull: function() {1173    for (var i = 0; i < this._buffers.length; i++) {1174      if (this._buffers[i].length === 0) {1175        return false;1176      }1177    }1178    return true;1179  },1180  _emitIfFull: function(isCurrent) {1181    if (this._isFull()) {1182      this._emit(isCurrent);1183    }1184  },1185  _drainArrays: function() {1186    while (this._isFull()) {1187      this._emit(true);1188    }1189  },1190  _bindHandleAny: function(i) {1191    var $ = this;1192    return function(event) {1193      $._handleAny(i, event);1194    };1195  },1196  _handleAny: function(i, event) {1197    if (event.type === VALUE) {1198      this._buffers[i].push(event.value);1199      this._emitIfFull(event.current);1200    }1201    if (event.type === ERROR) {1202      this._send(ERROR, event.value, event.current);1203    }1204    if (event.type === END) {1205      this._aliveCount--;1206      if (this._aliveCount === 0) {1207        this._send(END, null, event.current);1208      }1209    }1210  },1211  _clear: function() {1212    Stream.prototype._clear.call(this);1213    this._sources = null;1214    this._buffers = null;1215    this._combinator = null;1216    this._bindedHandlers = null;1217  }1218});1219Kefir.zip = function(sources, combinator) {1220  return new Zip(sources, combinator);1221};1222Observable.prototype.zip = function(other, combinator) {1223  return new Zip([this, other], combinator);1224};1225// .combine()1226function Combine(active, passive, combinator) {1227  Stream.call(this);1228  if (active.length === 0) {1229    this._send(END);1230  } else {1231    this._activeCount = active.length;1232    this._sources = concat(active, passive);1233    this._combinator = combinator ? spread(combinator, this._sources.length) : id;1234    this._aliveCount = 0;1235    this._currents = new Array(this._sources.length);1236    fillArray(this._currents, NOTHING);1237    this._activating = false;1238    this._emitAfterActivation = false;1239    this._endAfterActivation = false;1240    this._bindedHandlers = Array(this._sources.length);1241    for (var i = 0; i < this._sources.length; i++) {1242      this._bindedHandlers[i] = this._bindHandleAny(i);1243    }1244  }1245}1246inherit(Combine, Stream, {1247  _name: 'combine',1248  _onActivation: function() {1249    var length = this._sources.length,1250        i;1251    this._aliveCount = this._activeCount;1252    this._activating = true;1253    for (i = 0; i < length; i++) {1254      this._sources[i].onAny(this._bindedHandlers[i]);1255    }1256    this._activating = false;1257    if (this._emitAfterActivation) {1258      this._emitAfterActivation = false;1259      this._emitIfFull(true);1260    }1261    if (this._endAfterActivation) {1262      this._send(END, null, true);1263    }1264  },1265  _onDeactivation: function() {1266    var length = this._sources.length,1267        i;1268    for (i = 0; i < length; i++) {1269      this._sources[i].offAny(this._bindedHandlers[i]);1270    }1271  },1272  _emitIfFull: function(isCurrent) {1273    if (!contains(this._currents, NOTHING)) {1274      var combined = cloneArray(this._currents);1275      combined = this._combinator(combined);1276      this._send(VALUE, combined, isCurrent);1277    }1278  },1279  _bindHandleAny: function(i) {1280    var $ = this;1281    return function(event) {1282      $._handleAny(i, event);1283    };1284  },1285  _handleAny: function(i, event) {1286    if (event.type === VALUE) {1287      this._currents[i] = event.value;1288      if (i < this._activeCount) {1289        if (this._activating) {1290          this._emitAfterActivation = true;1291        } else {1292          this._emitIfFull(event.current);1293        }1294      }1295    }1296    if (event.type === ERROR) {1297      this._send(ERROR, event.value, event.current);1298    }1299    if (event.type === END) {1300      if (i < this._activeCount) {1301        this._aliveCount--;1302        if (this._aliveCount === 0) {1303          if (this._activating) {1304            this._endAfterActivation = true;1305          } else {1306            this._send(END, null, event.current);1307          }1308        }1309      }1310    }1311  },1312  _clear: function() {1313    Stream.prototype._clear.call(this);1314    this._sources = null;1315    this._currents = null;1316    this._combinator = null;1317    this._bindedHandlers = null;1318  }1319});1320Kefir.combine = function(active, passive, combinator) {1321  if (isFn(passive)) {1322    combinator = passive;1323    passive = null;1324  }1325  return new Combine(active, passive || [], combinator);1326};1327Observable.prototype.combine = function(other, combinator) {1328  return Kefir.combine([this, other], combinator);1329};1330// .sampledBy()1331Kefir.sampledBy = deprecated(1332  'Kefir.sampledBy()',1333  'Kefir.combine(active, passive, combinator)',1334  function(passive, active, combinator) {1335    // we need to flip `passive` and `active` in combinator function1336    var _combinator = combinator;1337    if (passive.length > 0) {1338      var passiveLength = passive.length;1339      _combinator = function() {1340        var args = circleShift(arguments, passiveLength);1341        return combinator ? apply(combinator, null, args) : args;1342      };1343    }1344    return new Combine(active, passive, _combinator).setName('sampledBy');1345  }1346);1347Observable.prototype.sampledBy = function(other, combinator) {1348  var _combinator;1349  if (combinator) {1350    _combinator = function(active, passive) {1351      return combinator(passive, active);1352    };1353  }1354  return new Combine([other], [this], _combinator || id2).setName(this, 'sampledBy');1355};1356function produceStream(StreamClass, PropertyClass) {1357  return function() {1358    return new StreamClass(this, arguments);1359  };1360}1361function produceProperty(StreamClass, PropertyClass) {1362  return function() {1363    return new PropertyClass(this, arguments);1364  };1365}1366// .toProperty()1367withOneSource('toProperty', {1368  _init: function(args) {1369    if (args.length > 0) {1370      this._send(VALUE, args[0]);1371    }1372  }1373}, {propertyMethod: produceProperty, streamMethod: produceProperty});1374// .changes()1375withOneSource('changes', {1376  _handleValue: function(x, isCurrent) {1377    if (!isCurrent) {1378      this._send(VALUE, x);1379    }1380  },1381  _handleError: function(x, isCurrent) {1382    if (!isCurrent) {1383      this._send(ERROR, x);1384    }1385  }1386}, {1387  streamMethod: function() {1388    return function() {1389      return this;1390    };1391  },1392  propertyMethod: produceStream1393});1394// .withHandler()1395withOneSource('withHandler', {1396  _init: function(args) {1397    this._handler = args[0];1398    this._forcedCurrent = false;1399    var $ = this;1400    this._emitter = {1401      emit: function(x) {1402        $._send(VALUE, x, $._forcedCurrent);1403      },1404      error: function(x) {1405        $._send(ERROR, x, $._forcedCurrent);1406      },1407      end: function() {1408        $._send(END, null, $._forcedCurrent);1409      },1410      emitEvent: function(e) {1411        $._send(e.type, e.value, $._forcedCurrent);1412      }1413    };1414  },1415  _free: function() {1416    this._handler = null;1417    this._emitter = null;1418  },1419  _handleAny: function(event) {1420    this._forcedCurrent = event.current;1421    this._handler(this._emitter, event);1422    this._forcedCurrent = false;1423  }1424});1425// .flatten(fn)1426withOneSource('flatten', {1427  _init: function(args) {1428    this._fn = args[0] ? args[0] : id;1429  },1430  _free: function() {1431    this._fn = null;1432  },1433  _handleValue: function(x, isCurrent) {1434    var xs = this._fn(x);1435    for (var i = 0; i < xs.length; i++) {1436      this._send(VALUE, xs[i], isCurrent);1437    }1438  }1439});1440// .transduce(transducer)1441var TRANSFORM_METHODS_OLD = {1442  step: 'step',1443  result: 'result'1444};1445var TRANSFORM_METHODS_NEW = {1446  step: '@@transducer/step',1447  result: '@@transducer/result'1448};1449function xformForObs(obs) {1450  function step(res, input) {1451    obs._send(VALUE, input, obs._forcedCurrent);1452    return null;1453  }1454  function result(res) {1455    obs._send(END, null, obs._forcedCurrent);1456    return null;1457  }1458  return {1459    step: step,1460    result: result,1461    '@@transducer/step': step,1462    '@@transducer/result': result1463  };1464}1465withOneSource('transduce', {1466  _init: function(args) {1467    var xf = args[0](xformForObs(this));1468    if (isFn(xf[TRANSFORM_METHODS_NEW.step]) && isFn(xf[TRANSFORM_METHODS_NEW.result])) {1469      this._transformMethods = TRANSFORM_METHODS_NEW;1470    } else if (isFn(xf[TRANSFORM_METHODS_OLD.step]) && isFn(xf[TRANSFORM_METHODS_OLD.result])) {1471      this._transformMethods = TRANSFORM_METHODS_OLD;1472    } else {1473      throw new Error('Unsuported transducers protocol');1474    }1475    this._xform = xf;1476  },1477  _free: function() {1478    this._xform = null;1479    this._transformMethods = null;1480  },1481  _handleValue: function(x, isCurrent) {1482    this._forcedCurrent = isCurrent;1483    if (this._xform[this._transformMethods.step](null, x) !== null) {1484      this._xform[this._transformMethods.result](null);1485    }1486    this._forcedCurrent = false;1487  },1488  _handleEnd: function(__, isCurrent) {1489    this._forcedCurrent = isCurrent;1490    this._xform[this._transformMethods.result](null);1491    this._forcedCurrent = false;1492  }1493});1494// .map(fn)1495withOneSource('map', {1496  _init: function(args) {1497    this._fn = args[0] || id;1498  },1499  _free: function() {1500    this._fn = null;1501  },1502  _handleValue: function(x, isCurrent) {1503    this._send(VALUE, this._fn(x), isCurrent);1504  }1505});1506// .mapErrors(fn)1507withOneSource('mapErrors', {1508  _init: function(args) {1509    this._fn = args[0] || id;1510  },1511  _free: function() {1512    this._fn = null;1513  },1514  _handleError: function(x, isCurrent) {1515    this._send(ERROR, this._fn(x), isCurrent);1516  }1517});1518// .errorsToValues(fn)1519function defaultErrorsToValuesHandler(x) {1520  return {1521    convert: true,1522    value: x1523  };1524}1525withOneSource('errorsToValues', {1526  _init: function(args) {1527    this._fn = args[0] || defaultErrorsToValuesHandler;1528  },1529  _free: function() {1530    this._fn = null;1531  },1532  _handleError: function(x, isCurrent) {1533    var result = this._fn(x);1534    var type = result.convert ? VALUE : ERROR;1535    var newX = result.convert ? result.value : x;1536    this._send(type, newX, isCurrent);1537  }1538});1539// .valuesToErrors(fn)1540function defaultValuesToErrorsHandler(x) {1541  return {1542    convert: true,1543    error: x1544  };1545}1546withOneSource('valuesToErrors', {1547  _init: function(args) {1548    this._fn = args[0] || defaultValuesToErrorsHandler;1549  },1550  _free: function() {1551    this._fn = null;1552  },1553  _handleValue: function(x, isCurrent) {1554    var result = this._fn(x);1555    var type = result.convert ? ERROR : VALUE;1556    var newX = result.convert ? result.error : x;1557    this._send(type, newX, isCurrent);1558  }1559});1560// .filter(fn)1561withOneSource('filter', {1562  _init: function(args) {1563    this._fn = args[0] || id;1564  },1565  _free: function() {1566    this._fn = null;1567  },1568  _handleValue: function(x, isCurrent) {1569    if (this._fn(x)) {1570      this._send(VALUE, x, isCurrent);1571    }1572  }1573});1574// .filterErrors(fn)1575withOneSource('filterErrors', {1576  _init: function(args) {1577    this._fn = args[0] || id;1578  },1579  _free: function() {1580    this._fn = null;1581  },1582  _handleError: function(x, isCurrent) {1583    if (this._fn(x)) {1584      this._send(ERROR, x, isCurrent);1585    }1586  }1587});1588// .takeWhile(fn)1589withOneSource('takeWhile', {1590  _init: function(args) {1591    this._fn = args[0] || id;1592  },1593  _free: function() {1594    this._fn = null;1595  },1596  _handleValue: function(x, isCurrent) {1597    if (this._fn(x)) {1598      this._send(VALUE, x, isCurrent);1599    } else {1600      this._send(END, null, isCurrent);1601    }1602  }1603});1604// .take(n)1605withOneSource('take', {1606  _init: function(args) {1607    this._n = args[0];1608    if (this._n <= 0) {1609      this._send(END);1610    }1611  },1612  _handleValue: function(x, isCurrent) {1613    this._n--;1614    this._send(VALUE, x, isCurrent);1615    if (this._n === 0) {1616      this._send(END, null, isCurrent);1617    }1618  }1619});1620// .skip(n)1621withOneSource('skip', {1622  _init: function(args) {1623    this._n = Math.max(0, args[0]);1624  },1625  _handleValue: function(x, isCurrent) {1626    if (this._n === 0) {1627      this._send(VALUE, x, isCurrent);1628    } else {1629      this._n--;1630    }1631  }1632});1633// .skipDuplicates([fn])1634withOneSource('skipDuplicates', {1635  _init: function(args) {1636    this._fn = args[0] || strictEqual;1637    this._prev = NOTHING;1638  },1639  _free: function() {1640    this._fn = null;1641    this._prev = null;1642  },1643  _handleValue: function(x, isCurrent) {1644    if (this._prev === NOTHING || !this._fn(this._prev, x)) {1645      this._prev = x;1646      this._send(VALUE, x, isCurrent);1647    }1648  }1649});1650// .skipWhile(fn)1651withOneSource('skipWhile', {1652  _init: function(args) {1653    this._fn = args[0] || id;1654    this._skip = true;1655  },1656  _free: function() {1657    this._fn = null;1658  },1659  _handleValue: function(x, isCurrent) {1660    if (!this._skip) {1661      this._send(VALUE, x, isCurrent);1662      return;1663    }1664    if (!this._fn(x)) {1665      this._skip = false;1666      this._fn = null;1667      this._send(VALUE, x, isCurrent);1668    }1669  }1670});1671// .diff(fn, seed)1672withOneSource('diff', {1673  _init: function(args) {1674    this._fn = args[0] || defaultDiff;1675    this._prev = args.length > 1 ? args[1] : NOTHING;1676  },1677  _free: function() {1678    this._prev = null;1679    this._fn = null;1680  },1681  _handleValue: function(x, isCurrent) {1682    if (this._prev !== NOTHING) {1683      this._send(VALUE, this._fn(this._prev, x), isCurrent);1684    }1685    this._prev = x;1686  }1687});1688// .scan(fn, seed)1689withOneSource('scan', {1690  _init: function(args) {1691    this._fn = args[0];1692    if (args.length > 1) {1693      this._send(VALUE, args[1], true);1694    }1695  },1696  _free: function() {1697    this._fn = null;1698  },1699  _handleValue: function(x, isCurrent) {1700    if (this._current !== NOTHING) {1701      x = this._fn(this._current, x);1702    }1703    this._send(VALUE, x, isCurrent);1704  }1705}, {streamMethod: produceProperty});1706// .reduce(fn, seed)1707withOneSource('reduce', {1708  _init: function(args) {1709    this._fn = args[0];1710    this._result = args.length > 1 ? args[1] : NOTHING;1711  },1712  _free: function() {1713    this._fn = null;1714    this._result = null;1715  },1716  _handleValue: function(x) {1717    this._result = (this._result === NOTHING) ? x : this._fn(this._result, x);1718  },1719  _handleEnd: function(__, isCurrent) {1720    if (this._result !== NOTHING) {1721      this._send(VALUE, this._result, isCurrent);1722    }1723    this._send(END, null, isCurrent);1724  }1725});1726// .mapEnd(fn)1727withOneSource('mapEnd', {1728  _init: function(args) {1729    this._fn = args[0];1730  },1731  _free: function() {1732    this._fn = null;1733  },1734  _handleEnd: function(__, isCurrent) {1735    this._send(VALUE, this._fn(), isCurrent);1736    this._send(END, null, isCurrent);1737  }1738});1739// .skipValue()1740withOneSource('skipValues', {1741  _handleValue: function() {}1742});1743// .skipError()1744withOneSource('skipErrors', {1745  _handleError: function() {}1746});1747// .skipEnd()1748withOneSource('skipEnd', {1749  _handleEnd: function() {}1750});1751// .endOnError()1752withOneSource('endOnError', {1753  _handleError: function(x, isCurrent) {1754    this._send(ERROR, x, isCurrent);1755    this._send(END, null, isCurrent);1756  }1757});1758// .slidingWindow(max[, min])1759withOneSource('slidingWindow', {1760  _init: function(args) {1761    this._max = args[0];1762    this._min = args[1] || 0;1763    this._buff = [];1764  },1765  _free: function() {1766    this._buff = null;1767  },1768  _handleValue: function(x, isCurrent) {1769    this._buff = slide(this._buff, x, this._max);1770    if (this._buff.length >= this._min) {1771      this._send(VALUE, this._buff, isCurrent);1772    }1773  }1774});1775// .bufferWhile([predicate], [options])1776withOneSource('bufferWhile', {1777  _init: function(args) {1778    this._fn = args[0] || id;1779    this._flushOnEnd = get(args[1], 'flushOnEnd', true);1780    this._buff = [];1781  },1782  _free: function() {1783    this._buff = null;1784  },1785  _flush: function(isCurrent) {1786    if (this._buff !== null && this._buff.length !== 0) {1787      this._send(VALUE, this._buff, isCurrent);1788      this._buff = [];1789    }1790  },1791  _handleValue: function(x, isCurrent) {1792    this._buff.push(x);1793    if (!this._fn(x)) {1794      this._flush(isCurrent);1795    }1796  },1797  _handleEnd: function(x, isCurrent) {1798    if (this._flushOnEnd) {1799      this._flush(isCurrent);1800    }1801    this._send(END, null, isCurrent);1802  }1803});1804// .debounce(wait, {immediate})1805withOneSource('debounce', {1806  _init: function(args) {1807    this._wait = Math.max(0, args[0]);1808    this._immediate = get(args[1], 'immediate', false);1809    this._lastAttempt = 0;1810    this._timeoutId = null;1811    this._laterValue = null;1812    this._endLater = false;1813    var $ = this;1814    this._$later = function() {1815      $._later();1816    };1817  },1818  _free: function() {1819    this._laterValue = null;1820    this._$later = null;1821  },1822  _handleValue: function(x, isCurrent) {1823    if (isCurrent) {1824      this._send(VALUE, x, isCurrent);1825    } else {1826      this._lastAttempt = now();1827      if (this._immediate && !this._timeoutId) {1828        this._send(VALUE, x);1829      }1830      if (!this._timeoutId) {1831        this._timeoutId = setTimeout(this._$later, this._wait);1832      }1833      if (!this._immediate) {1834        this._laterValue = x;1835      }1836    }1837  },1838  _handleEnd: function(__, isCurrent) {1839    if (isCurrent) {1840      this._send(END, null, isCurrent);1841    } else {1842      if (this._timeoutId && !this._immediate) {1843        this._endLater = true;1844      } else {1845        this._send(END);1846      }1847    }1848  },1849  _later: function() {1850    var last = now() - this._lastAttempt;1851    if (last < this._wait && last >= 0) {1852      this._timeoutId = setTimeout(this._$later, this._wait - last);1853    } else {1854      this._timeoutId = null;1855      if (!this._immediate) {1856        this._send(VALUE, this._laterValue);1857        this._laterValue = null;1858      }1859      if (this._endLater) {1860        this._send(END);1861      }1862    }1863  }1864});1865// .throttle(wait, {leading, trailing})1866withOneSource('throttle', {1867  _init: function(args) {1868    this._wait = Math.max(0, args[0]);1869    this._leading = get(args[1], 'leading', true);1870    this._trailing = get(args[1], 'trailing', true);1871    this._trailingValue = null;1872    this._timeoutId = null;1873    this._endLater = false;1874    this._lastCallTime = 0;1875    var $ = this;1876    this._$trailingCall = function() {1877      $._trailingCall();1878    };1879  },1880  _free: function() {1881    this._trailingValue = null;1882    this._$trailingCall = null;1883  },1884  _handleValue: function(x, isCurrent) {1885    if (isCurrent) {1886      this._send(VALUE, x, isCurrent);1887    } else {1888      var curTime = now();1889      if (this._lastCallTime === 0 && !this._leading) {1890        this._lastCallTime = curTime;1891      }1892      var remaining = this._wait - (curTime - this._lastCallTime);1893      if (remaining <= 0) {1894        this._cancelTraling();1895        this._lastCallTime = curTime;1896        this._send(VALUE, x);1897      } else if (this._trailing) {1898        this._cancelTraling();1899        this._trailingValue = x;1900        this._timeoutId = setTimeout(this._$trailingCall, remaining);1901      }1902    }1903  },1904  _handleEnd: function(__, isCurrent) {1905    if (isCurrent) {1906      this._send(END, null, isCurrent);1907    } else {1908      if (this._timeoutId) {1909        this._endLater = true;1910      } else {1911        this._send(END);1912      }1913    }1914  },1915  _cancelTraling: function() {1916    if (this._timeoutId !== null) {1917      clearTimeout(this._timeoutId);1918      this._timeoutId = null;1919    }1920  },1921  _trailingCall: function() {1922    this._send(VALUE, this._trailingValue);1923    this._timeoutId = null;1924    this._trailingValue = null;1925    this._lastCallTime = !this._leading ? 0 : now();1926    if (this._endLater) {1927      this._send(END);1928    }1929  }1930});1931// .delay()1932withOneSource('delay', {1933  _init: function(args) {1934    this._wait = Math.max(0, args[0]);1935    this._buff = [];1936    var $ = this;1937    this._$shiftBuff = function() {1938      $._send(VALUE, $._buff.shift());1939    };1940  },1941  _free: function() {1942    this._buff = null;1943    this._$shiftBuff = null;1944  },1945  _handleValue: function(x, isCurrent) {1946    if (isCurrent) {1947      this._send(VALUE, x, isCurrent);1948    } else {1949      this._buff.push(x);1950      setTimeout(this._$shiftBuff, this._wait);1951    }1952  },1953  _handleEnd: function(__, isCurrent) {1954    if (isCurrent) {1955      this._send(END, null, isCurrent);1956    } else {1957      var $ = this;1958      setTimeout(function() {1959        $._send(END);1960      }, this._wait);1961    }1962  }1963});1964// Kefir.fromBinder(fn)1965function FromBinder(fn) {1966  Stream.call(this);1967  this._fn = fn;1968  this._unsubscribe = null;1969}1970inherit(FromBinder, Stream, {1971  _name: 'fromBinder',1972  _onActivation: function() {1973    var $ = this1974      , isCurrent = true1975      , emitter = {1976        emit: function(x) {1977          $._send(VALUE, x, isCurrent);1978        },1979        error: function(x) {1980          $._send(ERROR, x, isCurrent);1981        },1982        end: function() {1983          $._send(END, null, isCurrent);1984        },1985        emitEvent: function(e) {1986          $._send(e.type, e.value, isCurrent);1987        }1988      };1989    this._unsubscribe = this._fn(emitter) || null;1990    // fix https://github.com/pozadi/kefir/issues/351991    if (!this._active && this._unsubscribe !== null) {1992      this._unsubscribe();1993      this._unsubscribe = null;1994    }1995    isCurrent = false;1996  },1997  _onDeactivation: function() {1998    if (this._unsubscribe !== null) {1999      this._unsubscribe();2000      this._unsubscribe = null;2001    }2002  },2003  _clear: function() {2004    Stream.prototype._clear.call(this);2005    this._fn = null;2006  }2007});2008Kefir.fromBinder = function(fn) {2009  return new FromBinder(fn);2010};2011// Kefir.emitter()2012function Emitter() {2013  Stream.call(this);2014}2015inherit(Emitter, Stream, {2016  _name: 'emitter',2017  emit: function(x) {2018    this._send(VALUE, x);2019    return this;2020  },2021  error: function(x) {2022    this._send(ERROR, x);2023    return this;2024  },2025  end: function() {2026    this._send(END);2027    return this;2028  },2029  emitEvent: function(event) {2030    this._send(event.type, event.value);2031  }2032});2033Kefir.emitter = function() {2034  return new Emitter();2035};2036Kefir.Emitter = Emitter;2037// Kefir.never()2038var neverObj = new Stream();2039neverObj._send(END);2040neverObj._name = 'never';2041Kefir.never = function() {2042  return neverObj;2043};2044// Kefir.constant(x)2045function Constant(x) {2046  Property.call(this);2047  this._send(VALUE, x);2048  this._send(END);2049}2050inherit(Constant, Property, {2051  _name: 'constant'2052});2053Kefir.constant = function(x) {2054  return new Constant(x);2055};2056// Kefir.constantError(x)2057function ConstantError(x) {2058  Property.call(this);2059  this._send(ERROR, x);2060  this._send(END);2061}2062inherit(ConstantError, Property, {2063  _name: 'constantError'2064});2065Kefir.constantError = function(x) {2066  return new ConstantError(x);2067};2068// Kefir.repeat(generator)2069function Repeat(generator) {2070  Stream.call(this);2071  this._generator = generator;2072  this._source = null;2073  this._inLoop = false;2074  this._activating = false;2075  this._iteration = 0;2076  var $ = this;2077  this._$handleAny = function(event) {2078    $._handleAny(event);2079  };2080}2081inherit(Repeat, Stream, {2082  _name: 'repeat',2083  _handleAny: function(event) {2084    if (event.type === END) {2085      this._source = null;2086      this._startLoop();2087    } else {2088      this._send(event.type, event.value, this._activating);2089    }2090  },2091  _startLoop: function() {2092    if (!this._inLoop) {2093      this._inLoop = true;2094      while (this._source === null && this._alive && this._active) {2095        this._source = this._generator(this._iteration++);2096        if (this._source) {2097          this._source.onAny(this._$handleAny);2098        } else {2099          this._send(END);2100        }2101      }2102      this._inLoop = false;2103    }2104  },2105  _onActivation: function() {2106    this._activating = true;2107    if (this._source) {2108      this._source.onAny(this._$handleAny);2109    } else {2110      this._startLoop();2111    }2112    this._activating = false;2113  },2114  _onDeactivation: function() {2115    if (this._source) {2116      this._source.offAny(this._$handleAny);2117    }2118  },2119  _clear: function() {2120    Stream.prototype._clear.call(this);2121    this._generator = null;2122    this._source = null;2123    this._$handleAny = null;2124  }2125});2126Kefir.repeat = function(generator) {2127  return new Repeat(generator);2128};2129// .setName2130Observable.prototype.setName = function(sourceObs, selfName /* or just selfName */) {2131  this._name = selfName ? sourceObs._name + '.' + selfName : sourceObs;2132  return this;2133};2134// .mapTo2135Observable.prototype.mapTo = deprecated(2136  '.mapTo()',2137  '.map(() => value)',2138  function(value) {2139    return this.map(function() {2140      return value;2141    }).setName(this, 'mapTo');2142  }2143);2144// .pluck2145Observable.prototype.pluck = deprecated(2146  '.pluck()',2147  '.map((v) => v.prop)',2148  function(propertyName) {2149    return this.map(function(x) {2150      return x[propertyName];2151    }).setName(this, 'pluck');2152  }2153);2154// .invoke2155Observable.prototype.invoke = deprecated(2156  '.invoke()',2157  '.map((v) => v.method())',2158  function(methodName /*, arg1, arg2... */) {2159    var args = rest(arguments, 1);2160    return this.map(args ?2161      function(x) {2162        return apply(x[methodName], x, args);2163      } :2164      function(x) {2165        return x[methodName]();2166      }2167    ).setName(this, 'invoke');2168  }2169);2170// .timestamp2171Observable.prototype.timestamp = deprecated(2172  '.timestamp()',2173  '.map((v) => {value: v, time: (new Date).getTime()})',2174  function() {2175    return this.map(function(x) {2176      return {value: x, time: now()};2177    }).setName(this, 'timestamp');2178  }2179);2180// .tap2181Observable.prototype.tap = deprecated(2182  '.tap()',2183  '.map((v) => {fn(v); return v})',2184  function(fn) {2185    return this.map(function(x) {2186      fn(x);2187      return x;2188    }).setName(this, 'tap');2189  }2190);2191// .and2192Kefir.and = deprecated(2193  'Kefir.and()',2194  'Kefir.combine([a, b], (a, b) => a && b)',2195  function(observables) {2196    return Kefir.combine(observables, and).setName('and');2197  }2198);2199Observable.prototype.and = deprecated(2200  '.and()',2201  '.combine(other, (a, b) => a && b)',2202  function(other) {2203    return this.combine(other, and).setName('and');2204  }2205);2206// .or2207Kefir.or = deprecated(2208  'Kefir.or()',2209  'Kefir.combine([a, b], (a, b) => a || b)',2210  function(observables) {2211    return Kefir.combine(observables, or).setName('or');2212  }2213);2214Observable.prototype.or = deprecated(2215  '.or()',2216  '.combine(other, (a, b) => a || b)',2217  function(other) {2218    return this.combine(other, or).setName('or');2219  }2220);2221// .not2222Observable.prototype.not = deprecated(2223  '.not()',2224  '.map(v => !v)',2225  function() {2226    return this.map(not).setName(this, 'not');2227  }2228);2229// .awaiting2230Observable.prototype.awaiting = function(other) {2231  return Kefir.merge([2232    this.mapTo(true),2233    other.mapTo(false)2234  ]).skipDuplicates().toProperty(false).setName(this, 'awaiting');2235};2236// .fromCallback2237Kefir.fromCallback = function(callbackConsumer) {2238  var called = false;2239  return Kefir.fromBinder(function(emitter) {2240    if (!called) {2241      callbackConsumer(function(x) {2242        emitter.emit(x);2243        emitter.end();2244      });2245      called = true;2246    }2247  }).setName('fromCallback');2248};2249// .fromNodeCallback2250Kefir.fromNodeCallback = function(callbackConsumer) {2251  var called = false;2252  return Kefir.fromBinder(function(emitter) {2253    if (!called) {2254      callbackConsumer(function(error, x) {2255        if (error) {2256          emitter.error(error);2257        } else {2258          emitter.emit(x);2259        }2260        emitter.end();2261      });2262      called = true;2263    }2264  }).setName('fromNodeCallback');2265};2266// .fromPromise2267Kefir.fromPromise = function(promise) {2268  var called = false;2269  return Kefir.fromBinder(function(emitter) {2270    if (!called) {2271      var onValue = function(x) {2272        emitter.emit(x);2273        emitter.end();2274      };2275      var onError = function(x) {2276        emitter.error(x);2277        emitter.end();2278      };2279      var _promise = promise.then(onValue, onError);2280      // prevent promise/A+ libraries like Q to swallow exceptions2281      if (_promise && isFn(_promise.done)) {2282        _promise.done();2283      }2284      called = true;2285    }2286  }).toProperty().setName('fromPromise');2287};2288// .fromSubUnsub2289Kefir.fromSubUnsub = function(sub, unsub, transformer) {2290  return Kefir.fromBinder(function(emitter) {2291    var handler = transformer ? function() {2292      emitter.emit(apply(transformer, this, arguments));2293    } : emitter.emit;2294    sub(handler);2295    return function() {2296      unsub(handler);2297    };2298  });2299};2300// .fromEvent2301var subUnsubPairs = [2302  ['addEventListener', 'removeEventListener'],2303  ['addListener', 'removeListener'],2304  ['on', 'off']2305];2306Kefir.fromEvent = function(target, eventName, transformer) {2307  var pair, sub, unsub;2308  for (var i = 0; i < subUnsubPairs.length; i++) {2309    pair = subUnsubPairs[i];2310    if (isFn(target[pair[0]]) && isFn(target[pair[1]])) {2311      sub = pair[0];2312      unsub = pair[1];2313      break;2314    }2315  }2316  if (sub === undefined) {2317    throw new Error('target don\'t support any of ' +2318      'addEventListener/removeEventListener, addListener/removeListener, on/off method pair');2319  }2320  return Kefir.fromSubUnsub(2321    function(handler) {2322      target[sub](eventName, handler);2323    },2324    function(handler) {2325      target[unsub](eventName, handler);2326    },2327    transformer2328  ).setName('fromEvent');2329};2330var withTwoSourcesAndBufferMixin = {2331  _init: function(args) {2332    this._buff = [];2333    this._flushOnEnd = get(args[0], 'flushOnEnd', true);2334  },2335  _free: function() {2336    this._buff = null;2337  },2338  _flush: function(isCurrent) {2339    if (this._buff !== null && this._buff.length !== 0) {2340      this._send(VALUE, this._buff, isCurrent);2341      this._buff = [];2342    }2343  },2344  _handlePrimaryEnd: function(__, isCurrent) {2345    if (this._flushOnEnd) {2346      this._flush(isCurrent);2347    }2348    this._send(END, null, isCurrent);2349  }2350};2351withTwoSources('bufferBy', extend({2352  _onActivation: function() {2353    this._primary.onAny(this._$handlePrimaryAny);2354    if (this._alive && this._secondary !== null) {2355      this._secondary.onAny(this._$handleSecondaryAny);2356    }2357  },2358  _handlePrimaryValue: function(x, isCurrent) {2359    this._buff.push(x);2360  },2361  _handleSecondaryValue: function(x, isCurrent) {2362    this._flush(isCurrent);2363  },2364  _handleSecondaryEnd: function(x, isCurrent) {2365    if (!this._flushOnEnd) {2366      this._send(END, null, isCurrent);2367    }2368  }2369}, withTwoSourcesAndBufferMixin));2370withTwoSources('bufferWhileBy', extend({2371  _handlePrimaryValue: function(x, isCurrent) {2372    this._buff.push(x);2373    if (this._lastSecondary !== NOTHING && !this._lastSecondary) {2374      this._flush(isCurrent);2375    }2376  },2377  _handleSecondaryEnd: function(x, isCurrent) {2378    if (!this._flushOnEnd && (this._lastSecondary === NOTHING || this._lastSecondary)) {2379      this._send(END, null, isCurrent);2380    }2381  }2382}, withTwoSourcesAndBufferMixin));2383withTwoSources('filterBy', {2384  _handlePrimaryValue: function(x, isCurrent) {2385    if (this._lastSecondary !== NOTHING && this._lastSecondary) {2386      this._send(VALUE, x, isCurrent);2387    }2388  },2389  _handleSecondaryEnd: function(__, isCurrent) {2390    if (this._lastSecondary === NOTHING || !this._lastSecondary) {2391      this._send(END, null, isCurrent);2392    }2393  }2394});2395withTwoSources('skipUntilBy', {2396  _handlePrimaryValue: function(x, isCurrent) {2397    if (this._lastSecondary !== NOTHING) {2398      this._send(VALUE, x, isCurrent);2399    }2400  },2401  _handleSecondaryEnd: function(__, isCurrent) {2402    if (this._lastSecondary === NOTHING) {2403      this._send(END, null, isCurrent);2404    }2405  }2406});2407withTwoSources('takeUntilBy', {2408  _handleSecondaryValue: function(x, isCurrent) {2409    this._send(END, null, isCurrent);2410  }2411});2412withTwoSources('takeWhileBy', {2413  _handlePrimaryValue: function(x, isCurrent) {2414    if (this._lastSecondary !== NOTHING) {2415      this._send(VALUE, x, isCurrent);2416    }2417  },2418  _handleSecondaryValue: function(x, isCurrent) {2419    this._lastSecondary = x;2420    if (!this._lastSecondary) {2421      this._send(END, null, isCurrent);2422    }2423  },2424  _handleSecondaryEnd: function(__, isCurrent) {2425    if (this._lastSecondary === NOTHING) {2426      this._send(END, null, isCurrent);2427    }2428  }2429});2430withTwoSources('skipWhileBy', {2431  _init: function() {2432    this._hasFalseyFromSecondary = false;2433  },2434  _handlePrimaryValue: function(x, isCurrent) {2435    if (this._hasFalseyFromSecondary) {2436      this._send(VALUE, x, isCurrent);2437    }2438  },2439  _handleSecondaryValue: function(x, isCurrent) {2440    this._hasFalseyFromSecondary = this._hasFalseyFromSecondary || !x;2441  },2442  _handleSecondaryEnd: function(__, isCurrent) {2443    if (!this._hasFalseyFromSecondary) {2444      this._send(END, null, isCurrent);2445    }2446  }2447});2448  if (typeof define === 'function' && define.amd) {2449    define([], function() {2450      return Kefir;2451    });2452    global.Kefir = Kefir;2453  } else if (typeof module === "object" && typeof exports === "object") {2454    module.exports = Kefir;2455    Kefir.Kefir = Kefir;2456  } else {2457    global.Kefir = Kefir;2458  }...client.unit.js
Source:client.unit.js  
...37      sandbox.stub(client, '_deserializeResponseArguments').returns(38        [null, ['contact']]39      );40      var args = {};41      client._send('getConnectedContacts', args, function(err, result) {42        if (err) {43          return done(err);44        }45        expect(request.post.args[0][0]).to.equal('http://localhost:8080');46        expect(request.post.args[0][1]).to.deep.equal({47          auth: {48            username: 'user',49            password: 'pass'50          },51          json: {52            id: '445c33c0-527a-4bcc-af73-d58758d6eaa7',53            method: 'getConnectedContacts',54            params: {}55          },56          timeout: 9000057        });58        expect(result).to.deep.equal(['contact']);59        done();60      });61    });62    it('will handle error from request', function(done) {63      sandbox.stub(request, 'post').callsArgWith(2, new Error('test'));64      var client = complex.createClient();65      var args = {};66      client._send('getConnectedContacts', args, function(err) {67        expect(err).to.be.instanceOf(Error);68        done();69      });70    });71    it('will give error if status code != 200', function(done) {72      var res = { statusCode: 500 };73      var body = { error: { message: 'rabbits are afk'} };74      sandbox.stub(request, 'post').callsArgWith(2, null, res, body);75      var client = complex.createClient();76      var args = {};77      client._send('getConnectedContacts', args, function(err) {78        expect(err).to.be.instanceOf(Error);79        expect(err.message).to.equal('rabbits are afk');80        done();81      });82    });83    it('status code != 200 (with error as body)', function(done) {84      var res = { statusCode: 500 };85      var body = { message: 'rabbits are afk'};86      sandbox.stub(request, 'post').callsArgWith(2, null, res, body);87      var client = complex.createClient();88      var args = {};89      client._send('getConnectedContacts', args, function(err) {90        expect(err).to.be.instanceOf(Error);91        expect(err.message).to.equal('rabbits are afk');92        done();93      });94    });95    it('status code != 200 (missing body)', function(done) {96      var res = { statusCode: 500 };97      var body = {};98      sandbox.stub(request, 'post').callsArgWith(2, null, res, body);99      var client = complex.createClient();100      var args = {};101      client._send('getConnectedContacts', args, function(err) {102        expect(err).to.be.instanceOf(Error);103        expect(err.message).to.equal('Failed to complete work, reason unknown');104        done();105      });106    });107  });108  describe('#_deserializeResponseArguments', function() {109    it('getStorageOffer', function() {110      var client = complex.createClient();111      var method = 'getStorageOffer';112      var args = [113        null,114        {115          address: '127.0.0.1',...backend.js
Source:backend.js  
...24        }25      });26    };27    var _register = function(email, password, event_id, callback){28      _send(29        '/login/register',30        {31          email: email,32          password: password,33          lang: Pard.Options.language(),34          event_id: event_id35        },36        callback37      );38    };39    var _login = function(email, password, callback){40      _send(41        '/login/login',42        {43          email: email,44          password: password45        },46        callback47      );48    };49    var _passwordRecovery = function(email, callback){50      _send(51        '/login/forgotten_password',52        {53          email: email54        },55        callback56      );57    };58    var _logout = function(callback){59      _send(60        '/login/logout',61        {},62        callback63      );64    };65    var _modifyPassword = function(password, callback){66      _send(67        '/users/modify_password',68        {69          password: password70        },71        callback72      );73    };74    var _modifyLang = function(lang, callback){75      _send(76        '/modify_lang',77        {78          lang: lang79        },80        callback81      );82    };83    var _createProfile = function(form, callback){84      console.log(form)85      _send(86        '/users/create_profile',87        form,88        callback89      );90    };91    var _modifyProfile = function(form, callback){92      _send(93        '/users/modify_profile',94        form,95        callback96      );97    };98    var _sendArtistProposal = function(form, callback){99      _send(100        '/users/send_artist_proposal',101        form,102        callback103      );104    };105    var _sendSpaceProposal = function(form, callback){106      _send(107        '/users/send_space_proposal',108        form,109        callback110      );111    };112    var _sendArtistOwnProposal = function(form, callback){113      _send(114        '/users/send_artist_own_proposal',115        form,116        callback117      );118    };119    var _sendSpaceOwnProposal = function(form, callback){120      _send(121        '/users/send_space_own_proposal',122        form,123        callback124      );125    };126    var _createProduction = function(form, callback){127      _send(128        '/users/create_production',129        form,130        callback131      );132    };133    var _modifyProduction = function(form, callback){134      _send(135        '/users/modify_production',136        form,137        callback138      );139    };140    var _createPerformances = function(form, callback){141      _send(142        '/users/create_performances',143        form,144        callback145      );146    };147    var _modifyPerformances = function(form, callback){148      _send(149        '/users/modify_performances',150        form,151        callback152      );153    };154    var _deletePerformances = function(form, callback){155      _send(156        '/users/delete_performances',157        form,158        callback159      );160    };161    var _searchProfiles = function(tags, shown, event_id, callback){162      _send(163        '/search/results',164        {165          query: tags,166          shown: shown,167          event_id: event_id,168          lang: Pard.Options.language()169        },170        callback171      );172    };173    var _searchProgram = function(event_id, tags, filters, date, time, callback){174      _send(175        '/search/results_program',176        {177          event_id: event_id,178          query: tags,179          filters: filters,180          date: date,181          time: time,182          lang: Pard.Options.language()183        },184        callback185      );186    };187    var _searchProgramNow = function(event_id, callback){188      _send(189        '/search/program_now',190        {191          event_id: event_id192        },193        callback194      );195    };196    var _deleteArtistProposal = function(proposal_id, event_id, callback){197      _send(198        '/users/delete_artist_proposal',199        {200          proposal_id: proposal_id,201          event_id: event_id202        },203        callback204      );205    };206    var _deleteSpaceProposal = function(proposal_id, event_id, callback){207      _send(208        '/users/delete_space_proposal',209        {210          proposal_id: proposal_id,211          event_id: event_id212        },213        callback214      );215    };216    var _deleteProduction = function(production_id, callback){217      _send(218        '/users/delete_production',219        {220          production_id: production_id221        },222        callback223      );224    };225    var _deleteProfile = function(profile_id, callback){226      _send(227        '/users/delete_profile',228        {229          profile_id: profile_id230        },231        callback232      );233    };234    var _deleteUser = function(callback){235      _send(236        '/users/delete_user',237        {},238        callback239      );240    };241    var _amendArtistProposal = function(proposal_id, event_id, call_id, amend, callback){242      _send(243        '/users/amend_artist_proposal',244        {245          proposal_id: proposal_id,246          event_id: event_id,247          call_id: call_id,248          amend: amend249        },250        callback251      );252    };253    var _amendSpaceProposal = function(proposal_id, event_id, call_id, amend, callback){254      _send(255        '/users/amend_space_proposal',256        {257          proposal_id: proposal_id,258          event_id: event_id,259          call_id: call_id,260          amend: amend261        },262        callback263      );264    };265    var _modifyArtistProposal = function(form, callback){266      _send(267        '/users/modify_artist_proposal',268        form,269        callback270      );271    };272    var _modifySpaceProposal = function(form, callback){273      _send(274        '/users/modify_space_proposal',275        form,276        callback277      );278    };279    var _addWhitelist = function(event_id, name_email, email, callback){280      _send(281        '/users/add_whitelist',282        {283          event_id: event_id,284          name_email: name_email,285          email: email286        },287        callback288      );289    };290    var _deleteWhitelist = function(event_id, email, callback){291      _send(292        '/users/delete_whitelist',293        {294          event_id: event_id,295          email: email296        },297        callback298      );299    };300    var _saveProgram = function(event_id, program, order, callback){301      _send(302        '/users/save_program',303        {304          event_id: event_id,305          program: program,306          order: order307        },308        callback309      );310    };311    var _getCallForms = function(call_id, callback){312      _send(313        '/forms',314        {315          call_id: call_id,316          lang: Pard.Options.language()317        },318        callback319      );320    };321    var _listProfiles = function(callback){322      _send(323        '/users/list_profiles',324        {},325        callback326      );327    }328    var _events = function(callback){329      _send(330        '/events',331        {},332        callback333      );334    }335    var _feedback = function(name, email, message, callback){336      _send(337        '/feedback',338        {339          name: name,340          email: email,341          message: message342        },343        callback344      ); 345    }346    var _techSupport = function(name, email, subject, profile, browser, message, callback){347      _send(348        '/techSupport',349        {350          name: name,351          email: email,352          subject: subject,353          profile: profile,354          browser: browser,355          message: message356        },357        callback358      ); 359    }360    var _business = function(form, callback){361      _send(362        '/business',363        form,364        callback365      ); 366    }367    var _header = function(callback){368     _send(369        '/users/header',370        {},371        callback372      ); 373    }374    var _saveOrder = function(event_id, order, callback){375     _send(376        '/users/space_order',377        {378          event_id: event_id,379          order: order380        },381        callback382      ); 383    }384    var _publish = function(event_id, callback){385     _send(386        '/users/publish',387        {388          event_id: event_id389        },390        callback391      ); 392    }393    var _eventManager = function(event_id, callback){394     _send(395        '/users/event_manager',396        {397          event_id: event_id,398          lang: Pard.Options.language()399        },400        callback401      ); 402    }403    var _checkName = function(name, callback){404      _send(405        '/users/check_name',406        {407          name: name408        },409        callback410      ); 411    }412    var _checkSlug = function(slug, callback){413      _send(414        '/users/check_slug',415        {416          slug: slug417        },418        callback419      ); 420    }421    var _createSlug = function(slug, event_id, callback){422      _send(423        '/users/create_slug',424        {425          slug: slug,426          event_id: event_id427        },428        callback429      ); 430    }431    return {432      register: _register,433      login: _login,434      passwordRecovery: _passwordRecovery,435      logout: _logout,436      modifyPassword: _modifyPassword,...authentication.service.js
Source:authentication.service.js  
...27        service.askResetTpass = askResetTpass;28        service.SERVER = SERVER;29        return service;30        function Askcode(params) {31            return _send("askWithdrawalAddressVerify",params);32        }33        // calls a function to validate JSON token34        function Ask(request_type,number) {35            if(number){36                return _send("ask", {37                    request_type: request_type,38                    bank_id:number39                });40            }else{41                return _send("ask", {request_type: request_type});42            }43        }44        //æ¾åå¯ç è·åéªè¯ç 45        function askVerification(params) {46            return _send("ask",params);47        }48        function AskWithdrawal() {49            return service.Ask('WITHD');50        }51        function AskLock() {52            return service.Ask('LOCK');53        }54        function AskEmail(email) {55            return _send("ask", {56                request_type: 'ADMAI',57                email: email58            });59        }60        function AskTPass(tpass) {61            return _send("askSetTpass", {});62        }63        function ASKLOGINPass(params) {64            return _send("askLoginVerification", params);65        }66        function askLoginPhoneVer(params) {67            return _send("askLoginPhoneVerification", params);68        }69        function answerLoginVerification(emailList) {70            return _send("answerLoginVerification", emailList);71        }72        function askResetTpass() {73            return _send("askResetTpass", {});74        }75        function AskChangeEmail() {76            return _send("ask", {77                request_type: 'CHMAI'78            });79        }80        function AskPhone(phone) {81            return _send("ask", {82                request_type: 'ADPHO',83                phone: phone84            });85        }86        function AskChangePhone() {87            return _send("ask", {88                request_type: 'CHPHO'89            });90        }91        function AskResetPasswordEmail(email){92            return _send("ask", {93                request_type: 'FORGO',94                email: email95            });96        }97        function AskResetPasswordPhone(phone){98            return _send("ask", {99                request_type: 'FORGO',100                phone: phone101            });102        }103        function Answer(params) {104            return _send("answer", params);105        }106        function answerVerification(params) {107            return _send("answerVerification", params);108        }109        // function get/returns token, and test if successful110        // method: get111        // params: username, password, etc112        function _send(method, params) {113            var headers={};114            if(typeof params !== 'undefined') {115				if($translate.use() == 'zh_TW') {116					params.language='zh'117				}else {118					params.language='en'119				}120                // params.language=121            } else{122                params='';123            }124            if($rootScope.globals && $rootScope.globals.token){125                headers={ 'x-access-token': $rootScope.globals.token};126            }...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
