@difizen/mana-observable
Version:
56 lines • 1.62 kB
JavaScript
import { Disposable, Event } from '@difizen/mana-common';
import { Notifier } from "./notifier";
import { observable } from "./observable";
import { getOrigin, Observability } from "./utils";
function tryObservable(target) {
var data = getOrigin(target);
if (!Observability.canBeObservable(data)) {
return data;
}
if (!Observability.marked(data)) {
return observable(data);
}
return data;
}
function watchAll(target, callback) {
var data = getOrigin(target);
if (!Observability.canBeObservable(data)) {
return Disposable.NONE;
}
tryObservable(data);
var event = Notifier.toEvent(data);
if (event === Event.None) {
console.warn('Cannot add watcher for unobservable target', target);
return Disposable.NONE;
}
var props = Object.keys(data);
if (props) {
props.forEach(function (prop) {
return Notifier.find(target, prop);
});
}
return event(callback);
}
function watchProp(target, prop, callback) {
var origin = getOrigin(target);
tryObservable(origin);
var event = Notifier.toEvent(origin, prop);
if (event === Event.None) {
console.warn("Cannot add watcher for unobservable property ".concat(prop.toString()), target);
return Disposable.NONE;
}
return event(callback);
}
export function watch(target, prop, callback) {
var cb;
if (typeof prop === 'function') {
cb = prop;
return watchAll(target, cb);
}
if (typeof prop === 'string' && callback) {
cb = callback;
return watchProp(target, prop, cb);
}
console.warn("Invalid arguments for watch ".concat(prop.toString()), target);
return Disposable.NONE;
}