All files observer.js

0% Statements 0/42
0% Branches 0/6
0% Functions 0/11
0% Lines 0/41

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62                                                                                                                           
"use strict";
exports.__esModule = true;
/*
 * @Author: lijianzhang
 * @Date: 2018-08-29 22:41:33
 * @Last Modified by: lijianzhang
 * @Last Modified time: 2018-08-30 01:45:07
 */
var store_1 = require("./store");
var id = 0;
var Observer = /** @class */ (function () {
    function Observer(cb, name) {
        this.bindObservers = new Set();
        id += 1;
        this.id = id;
        this.callback = cb;
        this.name = name;
    }
    Observer.prototype.collectDep = function (fn) {
        this.beginCollectDep();
        var res = fn();
        this.endCollectDep();
        return res;
    };
    Observer.prototype.beginCollectDep = function () {
        this.clearBinds();
        store_1["default"].currentObservers.push(this);
    };
    Observer.prototype.endCollectDep = function () {
        var index = store_1["default"].currentObservers.indexOf(this);
        store_1["default"].currentObservers.splice(index, 1);
    };
    Observer.prototype.clearBinds = function () {
        var _this = this;
        this.bindObservers.forEach(function (observers) {
            observers["delete"](_this);
        });
        this.bindObservers.clear();
    };
    Observer.prototype.unSubscribe = function () {
        this.clearBinds();
        this.callback = null;
    };
    Observer.prototype.run = function () {
        if (this.callback)
            this.callback(this);
    };
    return Observer;
}());
exports["default"] = Observer;
function observe(fn, name) {
    if (name === void 0) { name = 'observe'; }
    if (!fn)
        throw new Error('you need set callBack');
    var ob = new Observer(function (observer) {
        observer.collectDep(fn);
    }, name);
    ob.run();
    return ob;
}
exports.observe = observe;