@awesome-nodes/mvvm
Version:
Application development framework using the *model* *view* *view-model* design pattern.
66 lines (49 loc) • 10.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.EventDelegate = exports.EVENT_EMITTER_TOKEN = void 0;
var _injectionFactory = require("@awesome-nodes/injection-factory");
var _object = require("@awesome-nodes/object");
class EventDelegate {
get eventEmitter() {
return this._eventEmitter;
}
constructor(_producer) {
this._producer = _producer;
this._subscriptions = new Map();
this._eventEmitter = new EVENT_EMITTER_TOKEN.value();
}
subscribe(observer, thisArg) {
let next;
let error;
let complete;
if (typeof observer == 'function') next = observer;else ({
next,
error,
complete
} = observer);
if (this._subscriptions.get(next)) this.unsubscribe(next);
const subscription = this._eventEmitter.subscribe(delegate => {
delegate(thisArg ? next.bind(thisArg) : next);
}, error && thisArg ? error.bind(thisArg) : error, complete && thisArg ? complete.bind(thisArg) : complete);
subscription.add(() => {
this._subscriptions.delete(next);
});
this._subscriptions.set(next, subscription);
return subscription;
}
unsubscribe(observer) {
const subscription = this._subscriptions.get(typeof observer == 'function' ? observer : observer.next);
if (subscription && subscription.closed === false) subscription.unsubscribe();
}
invoke(ea = _object.EventArgs.empty) {
this._eventEmitter.emit((delagate, thisArg) => {
(thisArg ? delagate.bind(thisArg) : delagate)(this._producer, ea);
});
}
}
exports.EventDelegate = EventDelegate;
const EVENT_EMITTER_TOKEN = _injectionFactory.InjectionScope.get(EventDelegate, null).addToken('event-emitter');
exports.EVENT_EMITTER_TOKEN = EVENT_EMITTER_TOKEN;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tdnZtL21vZGVsL0V2ZW50RGVsZWdhdGUudHMiXSwibmFtZXMiOlsiRXZlbnREZWxlZ2F0ZSIsImV2ZW50RW1pdHRlciIsIl9ldmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIl9wcm9kdWNlciIsIl9zdWJzY3JpcHRpb25zIiwiTWFwIiwiRVZFTlRfRU1JVFRFUl9UT0tFTiIsInZhbHVlIiwic3Vic2NyaWJlIiwib2JzZXJ2ZXIiLCJ0aGlzQXJnIiwibmV4dCIsImVycm9yIiwiY29tcGxldGUiLCJnZXQiLCJ1bnN1YnNjcmliZSIsInN1YnNjcmlwdGlvbiIsImRlbGVnYXRlIiwiYmluZCIsImFkZCIsImRlbGV0ZSIsInNldCIsImNsb3NlZCIsImludm9rZSIsImVhIiwiRXZlbnRBcmdzIiwiZW1wdHkiLCJlbWl0IiwiZGVsYWdhdGUiLCJJbmplY3Rpb25TY29wZSIsImFkZFRva2VuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBQ0E7O0FBOEJPLE1BQU1BLGFBQU4sQ0FFUDtBQVMyQixNQUFaQyxZQUFZLEdBQ3ZCO0FBQ0ksV0FBTyxLQUFLQyxhQUFaO0FBQ0g7O0FBTU1DLEVBQUFBLFdBQVcsQ0FBV0MsU0FBWCxFQUNsQjtBQUFBLFNBRDZCQSxTQUM3QixHQUQ2QkEsU0FDN0I7QUFBQSxTQWxCaUJDLGNBa0JqQixHQWxCbUMsSUFBSUMsR0FBSixFQWtCbkM7QUFBQSxTQWpCbUJKLGFBaUJuQixHQWpCbUMsSUFBSUssbUJBQW1CLENBQUNDLEtBQXhCLEVBaUJuQztBQUFFOztBQVFLQyxFQUFBQSxTQUFTLENBQ1pDLFFBRFksRUFFWkMsT0FGWSxFQUdoQjtBQUNJLFFBQUlDLElBQUo7QUFDQSxRQUFJQyxLQUFKO0FBQ0EsUUFBSUMsUUFBSjtBQUVBLFFBQUksT0FBT0osUUFBUCxJQUFtQixVQUF2QixFQUNJRSxJQUFJLEdBQUdGLFFBQVAsQ0FESixLQUdJLENBQUM7QUFBRUUsTUFBQUEsSUFBRjtBQUFRQyxNQUFBQSxLQUFSO0FBQWVDLE1BQUFBO0FBQWYsUUFBNEJKLFFBQTdCO0FBRUosUUFBSSxLQUFLTCxjQUFMLENBQW9CVSxHQUFwQixDQUF3QkgsSUFBeEIsQ0FBSixFQUNJLEtBQUtJLFdBQUwsQ0FBaUJKLElBQWpCOztBQUVKLFVBQU1LLFlBQVksR0FBRyxLQUFLZixhQUFMLENBQW1CTyxTQUFuQixDQUNoQlMsUUFBRCxJQUNBO0FBQ0lBLE1BQUFBLFFBQVEsQ0FBQ1AsT0FBTyxHQUFHQyxJQUFJLENBQUNPLElBQUwsQ0FBVVIsT0FBVixDQUFILEdBQXdCQyxJQUFoQyxDQUFSO0FBQ0gsS0FKZ0IsRUFLakJDLEtBQUssSUFBSUYsT0FBVCxHQUFtQkUsS0FBSyxDQUFDTSxJQUFOLENBQVdSLE9BQVgsQ0FBbkIsR0FBeUNFLEtBTHhCLEVBTWpCQyxRQUFRLElBQUlILE9BQVosR0FBc0JHLFFBQVEsQ0FBQ0ssSUFBVCxDQUFjUixPQUFkLENBQXRCLEdBQStDRyxRQU45QixDQUFyQjs7QUFRQUcsSUFBQUEsWUFBWSxDQUFDRyxHQUFiLENBQWlCLE1BQ2pCO0FBQ0ksV0FBS2YsY0FBTCxDQUFvQmdCLE1BQXBCLENBQTJCVCxJQUEzQjtBQUNILEtBSEQ7O0FBSUEsU0FBS1AsY0FBTCxDQUFvQmlCLEdBQXBCLENBQXdCVixJQUF4QixFQUE4QkssWUFBOUI7O0FBRUEsV0FBT0EsWUFBUDtBQUNIOztBQUVNRCxFQUFBQSxXQUFXLENBQUNOLFFBQUQsRUFDbEI7QUFDSSxVQUFNTyxZQUFZLEdBQUcsS0FBS1osY0FBTCxDQUFvQlUsR0FBcEIsQ0FBd0IsT0FBT0wsUUFBUCxJQUFtQixVQUFuQixHQUFnQ0EsUUFBaEMsR0FBMkNBLFFBQVEsQ0FBQ0UsSUFBNUUsQ0FBckI7O0FBRUEsUUFBSUssWUFBWSxJQUFJQSxZQUFZLENBQUNNLE1BQWIsS0FBd0IsS0FBNUMsRUFDSU4sWUFBWSxDQUFDRCxXQUFiO0FBQ1A7O0FBRU1RLEVBQUFBLE1BQU0sQ0FBQ0MsRUFBYyxHQUFHQyxrQkFBVUMsS0FBNUIsRUFDYjtBQUNJLFNBQUt6QixhQUFMLENBQW1CMEIsSUFBbkIsQ0FBd0IsQ0FBQ0MsUUFBRCxFQUF3Q2xCLE9BQXhDLEtBQ3hCO0FBQ0ksT0FBQ0EsT0FBTyxHQUFHa0IsUUFBUSxDQUFDVixJQUFULENBQWNSLE9BQWQsQ0FBSCxHQUE0QmtCLFFBQXBDLEVBQThDLEtBQUt6QixTQUFuRCxFQUE4RHFCLEVBQTlEO0FBQ0gsS0FIRDtBQUlIOztBQTFFTDs7OztBQTZFTyxNQUFNbEIsbUJBQWtELEdBQUd1QixpQ0FDN0RmLEdBRDZELENBQ3pEZixhQUR5RCxFQUMxQyxJQUQwQyxFQUNwQytCLFFBRG9DLENBQzNCLGVBRDJCLENBQTNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG5pbXBvcnQgeyBJbmplY3Rpb25TY29wZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYXdlc29tZS1ub2Rlcy9pbmplY3Rpb24tZmFjdG9yeSc7XG5pbXBvcnQgeyBFdmVudEFyZ3MsIElFdmVudCwgSUV2ZW50RGVsZWdhdGUgfSBmcm9tICdAYXdlc29tZS1ub2Rlcy9vYmplY3QnO1xuaW1wb3J0IHsgSURlbGVnYXRlIH0gZnJvbSAnQGF3ZXNvbWUtbm9kZXMvb2JqZWN0L21vZGVsJztcbmltcG9ydCB7IE9iamVjdE1vZGVsIH0gZnJvbSAnbXZ2bS9tb2RlbC9PYmplY3RNb2RlbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudE9ic2VydmVyPFRTZW5kZXIgZXh0ZW5kcyBPYmplY3RNb2RlbCwgVEV2ZW50QXJncyBleHRlbmRzIEV2ZW50QXJncyA9IEV2ZW50QXJncz5cbntcbiAgICBuZXh0OiBJRXZlbnQ8VFNlbmRlciwgVEV2ZW50QXJncz47XG4gICAgZXJyb3I/OiAoZXJyOiB1bmtub3duKSA9PiB2b2lkO1xuICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXZlbnRFbWl0dGVyPFRTZW5kZXIgZXh0ZW5kcyBPYmplY3RNb2RlbCA9IE9iamVjdE1vZGVsLCBURXZlbnRBcmdzIGV4dGVuZHMgRXZlbnRBcmdzID0gRXZlbnRBcmdzPlxue1xuICAgIC8vdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWZsYWctYXJnc1xuICAgIG5ldyhhc3luYz86IGJvb2xlYW4pOiB0aGlzO1xuXG4gICAgZW1pdChkZWxlZ2F0ZTogSUV2ZW50RGVsZWdhdGU8VFNlbmRlciwgVEV2ZW50QXJncz4pOiB2b2lkO1xuXG4gICAgc3Vic2NyaWJlKFxuICAgICAgICBuZXh0PzogKHZhbHVlOiBJRXZlbnREZWxlZ2F0ZTxUU2VuZGVyLCBURXZlbnRBcmdzPikgPT4gdm9pZCxcbiAgICAgICAgZXJyb3I/OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQsXG4gICAgICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZCk6IFN1YnNjcmlwdGlvbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2ltcGxlIGV2ZW50IGRlbGVnYXRlIHVzZWQgdG8gZW5jYXBzdWxhdGUgYW55IHdlYiBmcm9udGVuZCBmcmFtZXdvcmsgZXZlbnQgZW1pdHRlciBvYmplY3QuXG4gKiBAdGVtcGxhdGUgVFNlbmRlciwgVEV2ZW50QXJnc1xuICovXG5leHBvcnQgY2xhc3MgRXZlbnREZWxlZ2F0ZTxUU2VuZGVyIGV4dGVuZHMgT2JqZWN0TW9kZWwsIFRFdmVudEFyZ3MgZXh0ZW5kcyBFdmVudEFyZ3MgPSBFdmVudEFyZ3M+XG4gICAgaW1wbGVtZW50cyBJRGVsZWdhdGU8VFNlbmRlciwgVEV2ZW50QXJncz5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zICA9IG5ldyBNYXA8SUV2ZW50PFRTZW5kZXIsIFRFdmVudEFyZ3M+LCBTdWJzY3JpcHRpb24+KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9ldmVudEVtaXR0ZXIgPSBuZXcgRVZFTlRfRU1JVFRFUl9UT0tFTi52YWx1ZSgpIGFzIHVua25vd24gYXMgSUV2ZW50RW1pdHRlcjxUU2VuZGVyLCBURXZlbnRBcmdzPjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdlbiBmcmFtZXdvcmsgRXZlbnRFbWl0dGVyIHVzZWQgb25seSB3aXRoaW4gYW5ndWxhciBjb21wb25lbnRzLlxuICAgICAqIEBhY2Nlc3MgQW55IGFjY2VzcyBmcm9tIGEgdmlldy1tb2RlbCwgbW9kZWwgb3Igc2VydmljZSBpcyBub3RcbiAgICAgKiBwZXJtaXR0ZWQgYmVjYXVzZSBpdCBjb3VwbGVzIGFuZ3VsYXIgY29kZSB0byB0aGUgb2JqZWN0IG1vZGVsLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXZlbnRFbWl0dGVyKCk6IElFdmVudEVtaXR0ZXI8VFNlbmRlciwgVEV2ZW50QXJncz5cbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudEVtaXR0ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhpcyBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7VFNlbmRlcn0gX3Byb2R1Y2VyIFRoZSBldmVudCBwcm9kdWNlciB0byBiZSB1c2VkIGFzIGB0aGlzQXJnYCBmb3IgdGhlIGNvbW1hbmQgaGFuZGxlciBpbnZvY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3Byb2R1Y2VyOiBUU2VuZGVyKVxuICAgIHt9XG5cbiAgICAvKipcbiAgICAgKiBTdWJzY3JpYmVzIHRvIHRoZSB1bmRlcmx5aW5nIEV2ZW50RW1pdHRlciBvYnNlcnZhYmxlIGFuZCBkZWxlZ2F0ZXMgZXZlbnRcbiAgICAgKiBzdWJzY3JpcHRpb24gdG8gY29tbWVuZCBwYXR0ZXJuIHN0eWxlIGhhbmRsZXIgZnVuY3Rpb25zLlxuICAgICAqIEBwYXJhbSBvYnNlcnZlciBUaGUgbmV4dCBvYnNlcnZlciBmdW5jdGlvbiBvciBhbiBldmVudCBvYnNlcnZlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gdGhpc0FyZyBJZiBwcm92aWRlZCwgYWxsIG9ic2VydmVyIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCBvbiBleGNlcHQgdGhlIGVycm9yIG9ic2VydmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdWJzY3JpYmUoXG4gICAgICAgIG9ic2VydmVyOiBJRXZlbnQ8VFNlbmRlciwgVEV2ZW50QXJncz4gfCBJRXZlbnRPYnNlcnZlcjxUU2VuZGVyLCBURXZlbnRBcmdzPixcbiAgICAgICAgdGhpc0FyZz86IG9iamVjdCk6IFN1YnNjcmlwdGlvblxuICAgIHtcbiAgICAgICAgbGV0IG5leHQ6IElFdmVudDxUU2VuZGVyLCBURXZlbnRBcmdzPjtcbiAgICAgICAgbGV0IGVycm9yOiAoKGVycjogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBjb21wbGV0ZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIG5leHQgPSBvYnNlcnZlcjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgKHsgbmV4dCwgZXJyb3IsIGNvbXBsZXRlIH0gPSBvYnNlcnZlcik7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbnMuZ2V0KG5leHQpKVxuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZShuZXh0KTtcblxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9ldmVudEVtaXR0ZXIuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGRlbGVnYXRlOiBJRXZlbnREZWxlZ2F0ZTxUU2VuZGVyLCBURXZlbnRBcmdzPikgPT5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkZWxlZ2F0ZSh0aGlzQXJnID8gbmV4dC5iaW5kKHRoaXNBcmcpIDogbmV4dCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3IgJiYgdGhpc0FyZyA/IGVycm9yLmJpbmQodGhpc0FyZykgOiBlcnJvcixcbiAgICAgICAgICAgIGNvbXBsZXRlICYmIHRoaXNBcmcgPyBjb21wbGV0ZS5iaW5kKHRoaXNBcmcpIDogY29tcGxldGUsXG4gICAgICAgICk7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5kZWxldGUobmV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnNldChuZXh0LCBzdWJzY3JpcHRpb24pO1xuXG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcHVibGljIHVuc3Vic2NyaWJlKG9ic2VydmVyOiBJRXZlbnQ8VFNlbmRlciwgVEV2ZW50QXJncz4gfCBJRXZlbnRPYnNlcnZlcjxUU2VuZGVyLCBURXZlbnRBcmdzPik6IHZvaWRcbiAgICB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YnNjcmlwdGlvbnMuZ2V0KHR5cGVvZiBvYnNlcnZlciA9PSAnZnVuY3Rpb24nID8gb2JzZXJ2ZXIgOiBvYnNlcnZlci5uZXh0KTtcbiAgICAgICAgLy9ub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb25KUyBzdWJzY3JpcHRpb24uY2xvc2VkIGlzIHVuZGVmaW5lZCBpZiBub3QgcmFpc2VkXG4gICAgICAgIGlmIChzdWJzY3JpcHRpb24gJiYgc3Vic2NyaXB0aW9uLmNsb3NlZCA9PT0gZmFsc2UpXG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW52b2tlKGVhOiBURXZlbnRBcmdzID0gRXZlbnRBcmdzLmVtcHR5IGFzIFRFdmVudEFyZ3MpOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLl9ldmVudEVtaXR0ZXIuZW1pdCgoZGVsYWdhdGU6IElFdmVudDxUU2VuZGVyLCBURXZlbnRBcmdzPiwgdGhpc0FyZz86IG9iamVjdCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgKHRoaXNBcmcgPyBkZWxhZ2F0ZS5iaW5kKHRoaXNBcmcpIDogZGVsYWdhdGUpKHRoaXMuX3Byb2R1Y2VyLCBlYSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVWRU5UX0VNSVRURVJfVE9LRU46IEluamVjdGlvblRva2VuPElFdmVudEVtaXR0ZXI+ID0gSW5qZWN0aW9uU2NvcGVcbiAgICAuZ2V0KEV2ZW50RGVsZWdhdGUsIG51bGwpLmFkZFRva2VuKCdldmVudC1lbWl0dGVyJyk7XG4iXX0=