UNPKG

react-magic-state

Version:
46 lines (45 loc) 1.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const symbols = require("../symbols"); const observer_1 = require("../observer"); const changeTracker_1 = require("../changeTracker"); const wrapObservable_1 = require("../wrapObservable"); const canObserve_1 = require("../canObserve"); class BaseHandler { constructor(target) { this._target = target; } get(target, propKey, receiver) { var _a, _b, _c; switch (propKey) { case symbols.observable: return true; case symbols.target: return target; } (_a = observer_1.Observer.active) === null || _a === void 0 ? void 0 : _a.registerAccess(this._target, propKey); const value = Reflect.get(target, propKey, receiver); if (canObserve_1.canObserve(value)) { const propDesc = Reflect.getOwnPropertyDescriptor(target, propKey); if (((_b = propDesc) === null || _b === void 0 ? void 0 : _b.configurable) || ((_c = propDesc) === null || _c === void 0 ? void 0 : _c.enumerable)) { return wrapObservable_1.wrapObservable(value); } } return value; } set(target, propKey, value, receiver) { if (observer_1.Observer.active) { throw new Error(`Attempting to modify property ${propKey.toString()} during observation. Please keep observer functions pure.`); } const previousValue = target[propKey]; try { return Reflect.set(target, propKey, value, receiver); } finally { if (target == this._target && previousValue !== value) { changeTracker_1.changeTracker.registerChange(target, propKey); } } } } exports.BaseHandler = BaseHandler;