UNPKG

@klodianimeri/channeljs

Version:

Javascript channel like communication.

1 lines 3.37 kB
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["if (typeof Promise.withResolvers === \"undefined\") {\r\n Promise.withResolvers = <T>() => {\r\n let resolve!: (value: T | PromiseLike<T>) => void;\r\n let reject!: (reason?: unknown) => void;\r\n const promise = new Promise<T>((res, rej) => {\r\n resolve = res;\r\n reject = rej;\r\n });\r\n return { promise, resolve, reject };\r\n };\r\n}\r\n\r\nexport class Channel<T = any> {\r\n #items: Set<Array<PromiseWithResolvers<IteratorResult<T>>>> = new Set<Array<PromiseWithResolvers<IteratorResult<T>>>>();\r\n\r\n send(data: T) {\r\n for (const items of this.#items) {\r\n items.push(Promise.withResolvers<IteratorResult<T>>());\r\n items[items.length - 2].resolve({ done: false, value: data });\r\n }\r\n }\r\n\r\n close() {\r\n for (const items of this.#items) {\r\n items[items.length - 1].resolve({ done: true, value: undefined });\r\n this.#items.delete(items);\r\n }\r\n }\r\n\r\n [Symbol.asyncIterator]() {\r\n let items: Array<PromiseWithResolvers<any>> = new Array<PromiseWithResolvers<any>>(Promise.withResolvers<IteratorResult<T>>());\r\n let channel = this;\r\n channel.#items.add(items);\r\n\r\n return {\r\n async next(): Promise<IteratorResult<T>> {\r\n if (items.length > 1) items.shift();\r\n return items[0].promise;\r\n },\r\n return(value?: any): Promise<IteratorReturnResult<T>> {\r\n channel.#items.delete(items);\r\n return Promise.resolve({ done: true, value: value });\r\n }\r\n };\r\n }\r\n}"],"names":["Promise","withResolvers","resolve","reject","promise","res","rej","_items","_classPrivateFieldLooseKey","Channel","Object","defineProperty","this","writable","value","Set","_proto","prototype","send","data","_step","_iterator","_createForOfIteratorHelperLoose","_classPrivateFieldLooseBase","done","items","push","length","close","_iterator2","_step2","undefined","Symbol","asyncIterator","Array","channel","add","next","shift","e","return"],"mappings":"29BAAqC,IAA1BA,QAAQC,gBACfD,QAAQC,cAAgB,WACpB,IAAIC,EACAC,EAKJ,MAAO,CAAEC,QAJO,IAAIJ,QAAW,SAACK,EAAKC,GACjCJ,EAAUG,EACVF,EAASG,CACb,GACkBJ,QAAAA,EAASC,OAAAA,EAC/B,GACH,IAAAI,eAAAC,EAED,sCAAoB,WAAA,SAAAC,IAAAC,OAAAC,eAAAC,KAAAL,EAAAM,CAAAA,YAAAC,MAC8C,IAAIC,UAAqDC,EAAAP,EAAAQ,iBAAAD,EAEvHE,KAAA,SAAKC,GACD,QAAwBC,EAAxBC,EAAAC,EAAAC,EAAoBX,KAAIL,GAAAA,MAAAa,EAAAC,KAAAG,MAAS,CAAtB,IAAAC,EAAKL,EAAAN,MACZW,EAAMC,KAAK1B,QAAQC,iBACnBwB,EAAMA,EAAME,OAAS,GAAGzB,QAAQ,CAAEsB,MAAM,EAAOV,MAAOK,GAC1D,CACJ,EAACH,EAEDY,MAAA,WACI,IAAAC,IAAwBC,EAAxBD,EAAAP,EAAAC,EAAoBX,KAAIL,GAAAA,MAAAuB,EAAAD,KAAAL,MAAS,CAAA,IAAtBC,EAAKK,EAAAhB,MACZW,EAAMA,EAAME,OAAS,GAAGzB,QAAQ,CAAEsB,MAAM,EAAMV,WAAOiB,IACrDR,EAAAX,KAAIL,GAAAA,GAAc,OAACkB,EACvB,CACJ,EAACT,EAEAgB,OAAOC,eAAR,WACI,IAAIR,EAA0C,IAAIS,MAAiClC,QAAQC,iBACvFkC,EAAUvB,KAGd,OAFAW,EAAAY,EAAO5B,GAAAA,GAAQ6B,IAAIX,GAEZ,CACGY,KAAA,WAAI,IAEN,OADIZ,EAAME,OAAS,GAAGF,EAAMa,QAC5BtC,QAAAE,QAAOuB,EAAM,GAAGrB,QACpB,CAAC,MAAAmC,GAAAvC,OAAAA,QAAAG,OAAAoC,EACD,CAAA,EAAAC,OAAA,SAAO1B,GAEH,OADAS,EAAAY,EAAO5B,GAAAA,UAAekB,GACfzB,QAAQE,QAAQ,CAAEsB,MAAM,EAAMV,MAAOA,GAChD,EAER,EAACL,CAAA,CAhCe"}