packages/okam-core/src/extend/data/observable/base.js
function makeComputedObservable(ctx) {
    let computedInfo = ctx.$rawComputed || {};
    if (typeof computedInfo === 'function') {
        ctx.$rawComputed = computedInfo = computedInfo();
    }

    let observer = new ComputedObserver(ctx, computedInfo);
    let ctxProps = {};
    Object.keys(computedInfo).forEach(k => {
        ctxProps[k] = {
            get: observer.getGetter(k),
            set: observer.getSetter(k),
            enumerable: true
        };
    });
    Object.defineProperties(ctx, ctxProps);
    return observer;
}
function makeComputedObservable(ctx) {
    let computedInfo = ctx.$rawComputed || {};
    if (typeof computedInfo === 'function') {
        ctx.$rawComputed = computedInfo = computedInfo();
    }

    let observer = new ComputedObserver(ctx, computedInfo);
    let ctxProps = {};
    Object.keys(computedInfo).forEach(k => {
        ctxProps[k] = {
            get: observer.getGetter(k),
            set: observer.getSetter(k),
            enumerable: true
        };
    });
    Object.defineProperties(ctx, ctxProps);
    return observer;
}
Make computed props observable

@inner
@param {Object} ctx the component instance context
@return {Observer} the observer