UNPKG

@difizen/mana-observable

Version:

56 lines 1.62 kB
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; }