@r_wohl/web-channel-message
Version:
A light weight type-safe library for communicating via the Channel Message Web API
1 lines • 2.74 kB
Source Map (JSON)
{"version":3,"sources":["../src/worker.ts"],"sourcesContent":["/// <reference lib=\"webworker\" />\r\n\r\nimport { ConnectionUpdate, WorkerMessage } from \"./types\";\r\n\r\nconst _self: SharedWorkerGlobalScope = self as any;\r\n\r\nlet connections: Set<MessagePort> = new Set();\r\n\r\n_self.onconnect = function (e) {\r\n\tconst port = e.ports[0];\r\n\r\n\tif (!port) {\r\n\t\tthrow new Error(\"error connecting to message port\");\r\n\t}\r\n\r\n\tconsole.log(\"connections: \", connections);\r\n\r\n\tconnections.add(port);\r\n\r\n\tconnections.forEach((conn) => {\r\n\t\tconst message: ConnectionUpdate = {\r\n\t\t\ttype: \"internal\",\r\n\t\t\tchannelData: {\r\n\t\t\t\tconnections: connections.size,\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\tconn.postMessage(message);\r\n\t});\r\n\r\n\tport.onmessage = function (e) {\r\n\t\tconst message = e.data as WorkerMessage;\r\n\r\n\t\tif (message && message.type === \"close\") {\r\n\t\t\tport.close();\r\n\r\n\t\t\tconsole.log(\"deleting port: \", port);\r\n\r\n\t\t\tconnections.delete(port);\r\n\r\n\t\t\tconnections.forEach((conn) => {\r\n\t\t\t\tconst message: ConnectionUpdate = {\r\n\t\t\t\t\ttype: \"internal\",\r\n\t\t\t\t\tchannelData: {\r\n\t\t\t\t\t\tconnections: connections.size,\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\r\n\t\t\t\tconn.postMessage(message);\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (message && message.action === \"broadcast\") {\r\n\t\t\tconnections.forEach((conn) => {\r\n\t\t\t\tif (conn !== port) {\r\n\t\t\t\t\tconn.postMessage(message);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (message && message.action === \"all\") {\r\n\t\t\tconnections.forEach((conn) => {\r\n\t\t\t\tconn.postMessage(message);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tport.start();\r\n};\r\n"],"mappings":";AAIA,IAAM,QAAiC;AAEvC,IAAI,cAAgC,oBAAI,IAAI;AAE5C,MAAM,YAAY,SAAU,GAAG;AAC9B,QAAM,OAAO,EAAE,MAAM,CAAC;AAEtB,MAAI,CAAC,MAAM;AACV,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACnD;AAEA,UAAQ,IAAI,iBAAiB,WAAW;AAExC,cAAY,IAAI,IAAI;AAEpB,cAAY,QAAQ,CAAC,SAAS;AAC7B,UAAM,UAA4B;AAAA,MACjC,MAAM;AAAA,MACN,aAAa;AAAA,QACZ,aAAa,YAAY;AAAA,MAC1B;AAAA,IACD;AAEA,SAAK,YAAY,OAAO;AAAA,EACzB,CAAC;AAED,OAAK,YAAY,SAAUA,IAAG;AAC7B,UAAM,UAAUA,GAAE;AAElB,QAAI,WAAW,QAAQ,SAAS,SAAS;AACxC,WAAK,MAAM;AAEX,cAAQ,IAAI,mBAAmB,IAAI;AAEnC,kBAAY,OAAO,IAAI;AAEvB,kBAAY,QAAQ,CAAC,SAAS;AAC7B,cAAMC,WAA4B;AAAA,UACjC,MAAM;AAAA,UACN,aAAa;AAAA,YACZ,aAAa,YAAY;AAAA,UAC1B;AAAA,QACD;AAEA,aAAK,YAAYA,QAAO;AAAA,MACzB,CAAC;AAED;AAAA,IACD;AAEA,QAAI,WAAW,QAAQ,WAAW,aAAa;AAC9C,kBAAY,QAAQ,CAAC,SAAS;AAC7B,YAAI,SAAS,MAAM;AAClB,eAAK,YAAY,OAAO;AAAA,QACzB;AAAA,MACD,CAAC;AAAA,IACF;AAEA,QAAI,WAAW,QAAQ,WAAW,OAAO;AACxC,kBAAY,QAAQ,CAAC,SAAS;AAC7B,aAAK,YAAY,OAAO;AAAA,MACzB,CAAC;AAAA,IACF;AAAA,EACD;AAEA,OAAK,MAAM;AACZ;","names":["e","message"]}