UNPKG

@difizen/mana-observable

Version:

62 lines (61 loc) 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.watch = watch; var _manaCommon = require("@difizen/mana-common"); var _notifier = require("./notifier"); var _observable = require("./observable"); var _utils = require("./utils"); function tryObservable(target) { var data = (0, _utils.getOrigin)(target); if (!_utils.Observability.canBeObservable(data)) { return data; } if (!_utils.Observability.marked(data)) { return (0, _observable.observable)(data); } return data; } function watchAll(target, callback) { var data = (0, _utils.getOrigin)(target); if (!_utils.Observability.canBeObservable(data)) { return _manaCommon.Disposable.NONE; } tryObservable(data); var event = _notifier.Notifier.toEvent(data); if (event === _manaCommon.Event.None) { console.warn('Cannot add watcher for unobservable target', target); return _manaCommon.Disposable.NONE; } var props = Object.keys(data); if (props) { props.forEach(function (prop) { return _notifier.Notifier.find(target, prop); }); } return event(callback); } function watchProp(target, prop, callback) { var origin = (0, _utils.getOrigin)(target); tryObservable(origin); var event = _notifier.Notifier.toEvent(origin, prop); if (event === _manaCommon.Event.None) { console.warn("Cannot add watcher for unobservable property ".concat(prop.toString()), target); return _manaCommon.Disposable.NONE; } return event(callback); } 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 _manaCommon.Disposable.NONE; }