import EventTarget from"./events/Target.js";import EventType from"./events/EventType.js";import{listen,listenOnce,unlistenByKey}from"./events.js";class Observable extends EventTarget{constructor(){super(),this.on=this.onInternal,this.once=this.onceInternal,this.un=this.unInternal,this.revision_=0}changed(){++this.revision_,this.dispatchEvent(EventType.CHANGE)}getRevision(){return this.revision_}onInternal(t,n){if(Array.isArray(t)){var r=t.length;const s=new Array(r);for(let e=0;e<r;++e)s[e]=listen(this,t[e],n);return s}return listen(this,t,n)}onceInternal(t,n){let r;if(Array.isArray(t)){var s=t.length;r=new Array(s);for(let e=0;e<s;++e)r[e]=listenOnce(this,t[e],n)}else r=listenOnce(this,t,n);return n.ol_key=r}unInternal(n,r){var e=r.ol_key;if(e)unByKey(e);else if(Array.isArray(n))for(let e=0,t=n.length;e<t;++e)this.removeEventListener(n[e],r);else this.removeEventListener(n,r)}}function unByKey(n){if(Array.isArray(n))for(let e=0,t=n.length;e<t;++e)unlistenByKey(n[e]);else unlistenByKey(n)}Observable.prototype.on,Observable.prototype.once,Observable.prototype.un;export default Observable;export{unByKey};