@ortoo/angular-resource
Version:
Magical CRUD resource management for angular
80 lines • 10 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIvQG9ydG9vL2FuZ3VsYXItcmVzb3VyY2UvIiwic291cmNlcyI6WyJlbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFLdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTWpELE1BQU07SUFJSjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBMkMsQ0FBQztJQUMxRSxDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBcUI7WUFDMUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU0sV0FBVyxDQUFDLElBQVksRUFBRSxPQUFnQjtRQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLElBQUksQ0FBQyxNQUFjLEVBQUUsR0FBRyxJQUFXO1FBQ3hDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQVksRUFBRSxPQUFnQjtRQUN6QyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMs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QUFDLENBQUM7WUFDYixPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMvU3ViamVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzL1N1YnNjcmlwdGlvbic7XG5cbmRlY2xhcmUgdHlwZSBTdWJzY3JpcHRpb25BcnJheSA9IFN1YnNjcmlwdGlvbltdO1xuXG5leHBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzL1N1YnNjcmlwdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlciB7XG4gICguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIHN1YmplY3RzOiBNYXA8c3RyaW5nLCBTdWJqZWN0PGFueT4+O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIE1hcDxIYW5kbGVyLCBTdWJzY3JpcHRpb25BcnJheT4+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3ViamVjdHMgPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxhbnk+PigpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8SGFuZGxlciwgU3Vic2NyaXB0aW9uQXJyYXk+PigpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5zdWJqZWN0cy5mb3JFYWNoKChzdWJqZWN0OiBTdWJqZWN0PGFueT4pID0+IHtcbiAgICAgIHN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3ViamVjdHMuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRMaXN0ZW5lcihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpIHtcbiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBoYW5kbGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KGZuTmFtZTogc3RyaW5nLCAuLi5kYXRhOiBhbnlbXSkge1xuICAgIGxldCBzdWJqZWN0ID0gdGhpcy5nZXRTdWJqZWN0KGZuTmFtZSk7XG4gICAgc3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgcHVibGljIGxpc3RlbihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpOiBTdWJzY3JpcHRpb24ge1xuICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5nZXRTdWJqZWN0KG5hbWUpLnN1YnNjcmliZShoYW5kbGVyKTtcbiAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihuYW1lLCBoYW5kbGVyLCBzdWJzY3JpcHRpb24pO1xuICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgcHVibGljIG9mZihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpIHtcbiAgICBsZXQgc3VicyA9IHRoaXMuZ2V0U3Vic2NyaXB0aW9ucyhuYW1lLCBoYW5kbGVyKTtcbiAgICBzdWJzLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpIHtcbiAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5nZXRTdWJqZWN0KG5hbWUpLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICBoYW5kbGVyKC4uLnZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyKHZhbCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihuYW1lLCBoYW5kbGVyLCBzdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHVibGljIG9uY2UobmFtZTogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyKSB7XG4gICAgbGV0IG9uY2VIYW5kbGVyID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMub2ZmKG5hbWUsIG9uY2VIYW5kbGVyKTtcbiAgICAgIGhhbmRsZXIodmFsdWUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBvbmNlSGFuZGxlcik7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlTGlzdGVuZXIobmFtZTogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKG5hbWUsIGhhbmRsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlclN1YnNjcmlwdGlvbihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIsIHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgbGV0IGhhbmRsZXJNYXAgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KG5hbWUpO1xuICAgIGlmICghaGFuZGxlck1hcCkge1xuICAgICAgaGFuZGxlck1hcCA9IG5ldyBNYXA8SGFuZGxlciwgU3Vic2NyaXB0aW9uQXJyYXk+KCk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuc2V0KG5hbWUsIGhhbmRsZXJNYXApO1xuICAgIH1cblxuICAgIGxldCBzdWJBcnIgPSBoYW5kbGVyTWFwLmdldChoYW5kbGVyKTtcbiAgICBpZiAoIXN1YkFycikge1xuICAgICAgc3ViQXJyID0gW107XG4gICAgICBoYW5kbGVyTWFwLnNldChoYW5kbGVyLCBzdWJBcnIpO1xuICAgIH1cblxuICAgIHN1YkFyci5wdXNoKHN1Yik7XG4gIH1cblxuICBwcml2YXRlIGdldFN1YnNjcmlwdGlvbnMobmFtZTogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyKTogU3Vic2NyaXB0aW9uQXJyYXkge1xuICAgIGxldCBoYW5kbGVyTWFwID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChuYW1lKTtcbiAgICBpZiAoIWhhbmRsZXJNYXApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlck1hcC5nZXQoaGFuZGxlcikgfHwgW107XG4gIH1cblxuICBwcml2YXRlIGdldFN1YmplY3QoZm5OYW1lOiBzdHJpbmcpOiBTdWJqZWN0PGFueT4ge1xuICAgIGxldCBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0cy5nZXQoZm5OYW1lKTtcbiAgICBpZiAoIXN1YmplY3QpIHtcbiAgICAgIHN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgICB0aGlzLnN1YmplY3RzLnNldChmbk5hbWUsIHN1YmplY3QpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG4gfVxuIl19