UNPKG

react-obsidian

Version:

Dependency injection framework for React and React Native applications

51 lines 1.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ColdMediatorObservable = void 0; const MediatorObservable_1 = require("../mediator/MediatorObservable"); const reflect_1 = require("../../utils/reflect"); class ColdMediatorObservable extends MediatorObservable_1.MediatorObservable { constructor(obj, handler = new PropertyAccessTrackingProxy()) { super(new Proxy(obj, handler)); this.handler = handler; } set value(_) { throw new Error('Cannot set value of ColdMediatorObservable, use setValue(value, key) instead'); } get value() { return super.value; } setValue(key, value) { if (this.handler.hasAccessedProperty(key)) { this.handler.suspendTracking(); super.value = { ...this.value, [key]: value }; this.handler.resumeTracking(); } } addSource(source, onNext) { source.subscribe(onNext); return this; } } exports.ColdMediatorObservable = ColdMediatorObservable; class PropertyAccessTrackingProxy { constructor() { this.accessedProperties = new Set(); this.trackingSuspended = false; } get(target, p, receiver) { if (!this.trackingSuspended) { this.accessedProperties.add(p); } return reflect_1.Reflect.get(target, p, receiver); } hasAccessedProperty(key) { return this.accessedProperties.has(key); } suspendTracking() { this.trackingSuspended = true; } resumeTracking() { this.trackingSuspended = false; } } //# sourceMappingURL=ColdMediatorObservable.js.map