All files computed.js

0% Statements 0/29
0% Branches 0/12
0% Functions 0/3
0% Lines 0/29

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                                                                                                             
"use strict";
/*
 * @Author: lijianzhang
 * @Date: 2018-03-31 21:33:17
 * @Last Modified by: lijianzhang
 * @Last Modified time: 2018-08-29 23:04:37
 */
exports.__esModule = true;
var observer_1 = require("./observer");
var store_1 = require("./store");
var constant_1 = require("./constant");
function computed(target, key, descriptor) {
    var computedKey = Symbol(key);
    var newGet = descriptor.get;
    function get() {
        var self = this[constant_1.RAW_KEY] || this;
        if (!self[computedKey]) {
            self[computedKey] = {
                observers: new Set(),
                preValue: null,
                newGet: newGet.bind(this),
                observer: null,
                isShouldUpdate: false
            };
        }
        var obj = self[computedKey];
        if (store_1["default"].currentObserver) {
            obj.observers.add(store_1["default"].currentObserver);
            store_1["default"].currentObserver.bindObservers.add(obj.observers);
        }
        if (!obj.observer) {
            obj.observer = new observer_1["default"](function () {
                obj.isShouldUpdate = true;
                if (obj.observers.size === 0) {
                    obj.observer.unSubscribe();
                    obj.observer = null;
                }
                else {
                    store_1["default"].pushQueue(obj.observers);
                }
            }, target.constructor.name + "." + key);
            obj.preValue = obj.observer.collectDep(obj.newGet);
            obj.isShouldUpdate = false;
        }
        else if (obj.isShouldUpdate) {
            obj.preValue = obj.observer.collectDep(obj.newGet);
            obj.isShouldUpdate = false;
        }
        return obj.preValue;
    }
    descriptor.get = get;
    return descriptor;
}
exports["default"] = computed;