UNPKG

@ortoo/angular-resource

Version:

Magical CRUD resource management for angular

80 lines 10 kB
import { Subject } from 'rxjs/Subject'; export { Subscription } from 'rxjs/Subscription'; export class EventEmitter { constructor() { this.subjects = new Map(); this.subscriptions = new Map(); } dispose() { this.subjects.forEach((subject) => { subject.unsubscribe(); }); this.subjects.clear(); } addListener(name, handler) { return this.on(name, handler); } emit(fnName, ...data) { let subject = this.getSubject(fnName); subject.next(data); } listen(name, handler) { let subscription = this.getSubject(name).subscribe(handler); this.registerSubscription(name, handler, subscription); return subscription; } off(name, handler) { let subs = this.getSubscriptions(name, handler); subs.forEach(sub => sub.unsubscribe()); } on(name, handler) { let subscription = this.getSubject(name).subscribe(val => { if (Array.isArray(val)) { handler(...val); } else { handler(val); } }); this.registerSubscription(name, handler, subscription); } once(name, handler) { let onceHandler = (value) => { this.off(name, onceHandler); handler(value); }; return this.on(name, onceHandler); } removeListener(name, handler) { return this.off(name, handler); } registerSubscription(name, handler, sub) { let handlerMap = this.subscriptions.get(name); if (!handlerMap) { handlerMap = new Map(); this.subscriptions.set(name, handlerMap); } let subArr = handlerMap.get(handler); if (!subArr) { subArr = []; handlerMap.set(handler, subArr); } subArr.push(sub); } getSubscriptions(name, handler) { let handlerMap = this.subscriptions.get(name); if (!handlerMap) { return []; } return handlerMap.get(handler) || []; } getSubject(fnName) { let subject = this.subjects.get(fnName); if (!subject) { subject = new Subject(); this.subjects.set(fnName, subject); } return subject; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIvQG9ydG9vL2FuZ3VsYXItcmVzb3VyY2UvIiwic291cmNlcyI6WyJlbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFLdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTWpELE1BQU07SUFJSjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBMkMsQ0FBQztJQUMxRSxDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBcUI7WUFDMUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU0sV0FBVyxDQUFDLElBQVksRUFBRSxPQUFnQjtRQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLElBQUksQ0FBQyxNQUFjLEVBQUUsR0FBRyxJQUFXO1FBQ3hDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQVksRUFBRSxPQUFnQjtRQUN6QyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxHQUFHLENBQUMsSUFBWSxFQUFFLE9BQWdCO1FBQ3ZDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEVBQUUsQ0FBQyxJQUFZLEVBQUUsT0FBZ0I7UUFDdEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRztZQUNwRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEIsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxJQUFJLENBQUMsSUFBWSxFQUFFLE9BQWdCO1FBQ3hDLElBQUksV0FBVyxHQUFHLENBQUMsS0FBVTtZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBWSxFQUFFLE9BQWdCO1FBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sb0JBQW9CLENBQUMsSUFBWSxFQUFFLE9BQWdCLEVBQUUsR0FBaUI7UUFDNUUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztZQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNaLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsT0FBZ0I7UUFDckQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxVQUFVLENBQUMsTUFBYztRQUMvQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDYixPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMvU3ViamVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzL1N1YnNjcmlwdGlvbic7XG5cbmRlY2xhcmUgdHlwZSBTdWJzY3JpcHRpb25BcnJheSA9IFN1YnNjcmlwdGlvbltdO1xuXG5leHBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzL1N1YnNjcmlwdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlciB7XG4gICguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIHN1YmplY3RzOiBNYXA8c3RyaW5nLCBTdWJqZWN0PGFueT4+O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIE1hcDxIYW5kbGVyLCBTdWJzY3JpcHRpb25BcnJheT4+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3ViamVjdHMgPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxhbnk+PigpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8SGFuZGxlciwgU3Vic2NyaXB0aW9uQXJyYXk+PigpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5zdWJqZWN0cy5mb3JFYWNoKChzdWJqZWN0OiBTdWJqZWN0PGFueT4pID0+IHtcbiAgICAgIHN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3ViamVjdHMuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRMaXN0ZW5lcihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpIHtcbiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBoYW5kbGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KGZuTmFtZTogc3RyaW5nLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgIGxldCBzdWJqZWN0ID0gdGhpcy5nZXRTdWJqZWN0KGZuTmFtZSk7XG4gICAgc3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgcHVibGljIGxpc3RlbihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpOiBTdWJzY3JpcHRpb24ge1xuICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5nZXRTdWJqZWN0KG5hbWUpLnN1YnNjcmliZShoYW5kbGVyKTtcbiAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihuYW1lLCBoYW5kbGVyLCBzdWJzY3JpcHRpb24pO1xuICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgcHVibGljIG9mZihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpIHtcbiAgICBsZXQgc3VicyA9IHRoaXMuZ2V0U3Vic2NyaXB0aW9ucyhuYW1lLCBoYW5kbGVyKTtcbiAgICBzdWJzLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpIHtcbiAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5nZXRTdWJqZWN0KG5hbWUpLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICBoYW5kbGVyKC4uLnZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyKHZhbCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihuYW1lLCBoYW5kbGVyLCBzdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHVibGljIG9uY2UobmFtZTogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyKSB7XG4gICAgbGV0IG9uY2VIYW5kbGVyID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMub2ZmKG5hbWUsIG9uY2VIYW5kbGVyKTtcbiAgICAgIGhhbmRsZXIodmFsdWUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBvbmNlSGFuZGxlcik7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlTGlzdGVuZXIobmFtZTogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKG5hbWUsIGhhbmRsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlclN1YnNjcmlwdGlvbihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIsIHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgbGV0IGhhbmRsZXJNYXAgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KG5hbWUpO1xuICAgIGlmICghaGFuZGxlck1hcCkge1xuICAgICAgaGFuZGxlck1hcCA9IG5ldyBNYXA8SGFuZGxlciwgU3Vic2NyaXB0aW9uQXJyYXk+KCk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuc2V0KG5hbWUsIGhhbmRsZXJNYXApO1xuICAgIH1cblxuICAgIGxldCBzdWJBcnIgPSBoYW5kbGVyTWFwLmdldChoYW5kbGVyKTtcbiAgICBpZiAoIXN1YkFycikge1xuICAgICAgc3ViQXJyID0gW107XG4gICAgICBoYW5kbGVyTWFwLnNldChoYW5kbGVyLCBzdWJBcnIpO1xuICAgIH1cblxuICAgIHN1YkFyci5wdXNoKHN1Yik7XG4gIH1cblxuICBwcml2YXRlIGdldFN1YnNjcmlwdGlvbnMobmFtZTogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyKTogU3Vic2NyaXB0aW9uQXJyYXkge1xuICAgIGxldCBoYW5kbGVyTWFwID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChuYW1lKTtcbiAgICBpZiAoIWhhbmRsZXJNYXApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlck1hcC5nZXQoaGFuZGxlcikgfHwgW107XG4gIH1cblxuICBwcml2YXRlIGdldFN1YmplY3QoZm5OYW1lOiBzdHJpbmcpOiBTdWJqZWN0PGFueT4ge1xuICAgIGxldCBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0cy5nZXQoZm5OYW1lKTtcbiAgICBpZiAoIXN1YmplY3QpIHtcbiAgICAgIHN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgICB0aGlzLnN1YmplY3RzLnNldChmbk5hbWUsIHN1YmplY3QpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG4gfVxuIl19