adnbn 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/{AbstractBuilder-CKgY_Bta.d.ts → AbstractBuilder-BN4TmNJG.d.ts} +3 -3
  2. package/dist/{AbstractBuilder-Ce5zNRXr.d.mts → AbstractBuilder-C81kWZzQ.d.mts} +3 -3
  3. package/dist/{BaseTransport-C7uEgfUu.d.mts → BaseTransport-DNZ28gFF.d.mts} +1 -1
  4. package/dist/{BaseTransport-BdFTZfP0.d.ts → BaseTransport-Ecy2Kzti.d.ts} +1 -1
  5. package/dist/{Builder-FwJAxWos.d.ts → Builder-BOLvGGqp.d.ts} +2 -2
  6. package/dist/{Builder-rW3fzusy.d.mts → Builder-BP8SDHO1.d.mts} +2 -2
  7. package/dist/{Builder-7pbnGvHK.d.ts → Builder-Bc8US0PY.d.ts} +1 -1
  8. package/dist/{Builder-CCyBD4hF.d.mts → Builder-Df1LUO_f.d.mts} +1 -1
  9. package/dist/{Message-1cYgMdsu.d.mts → Message-Bnritk3D.d.mts} +1 -1
  10. package/dist/{Message-DAhczRx9.d.ts → Message-DFDaS7mV.d.ts} +1 -1
  11. package/dist/{MountBuilder-DjnAmTI0.d.ts → MountBuilder-BTltgVF2.d.mts} +26 -7
  12. package/dist/{MountBuilder-CjvMOcmn.d.mts → MountBuilder-C9Q-7PeI.d.ts} +26 -7
  13. package/dist/{ProxyRelay-Ce-szh9p.d.ts → ProxyRelay-DDOSZE3h.d.ts} +3 -3
  14. package/dist/{ProxyRelay-BOBEhRET.d.mts → ProxyRelay-Uel0ATcx.d.mts} +3 -3
  15. package/dist/{ProxyTransport-BTVUbDxE.d.mts → ProxyTransport-35rU8xqa.d.mts} +3 -3
  16. package/dist/{ProxyTransport-BW63K6SU.d.ts → ProxyTransport-D4jv5SFh.d.ts} +3 -3
  17. package/dist/{RegisterOffscreen-BukckdvS.d.mts → RegisterOffscreen-DT0gN5xN.d.mts} +2 -2
  18. package/dist/{RegisterOffscreen-DmlpLqjW.d.ts → RegisterOffscreen-df3W5HqA.d.ts} +2 -2
  19. package/dist/{RegisterRelay-MEVSR1sP.d.mts → RegisterRelay-DCVZ2_NI.d.mts} +2 -2
  20. package/dist/{RegisterRelay-BaIET78I.d.ts → RegisterRelay-PFT2ac4v.d.ts} +2 -2
  21. package/dist/{TransportMessage-Bk0wg4rF.d.mts → TransportMessage-CIKrv3DG.d.mts} +8 -4
  22. package/dist/{TransportMessage-BqMzXWZR.d.ts → TransportMessage-CsObvTPq.d.ts} +8 -4
  23. package/dist/{background-Zjiqg60g.d.ts → background-CpVjDFHQ.d.ts} +1 -1
  24. package/dist/{background-CyGGjmBx.d.mts → background-cxLBji1Q.d.mts} +1 -1
  25. package/dist/cli/index.cjs +46 -15
  26. package/dist/cli/index.cjs.map +1 -1
  27. package/dist/{command-BFsdm7Bx.d.mts → command-S2dcqx6Q.d.mts} +4 -3
  28. package/dist/{command-3i_5d__K.d.ts → command-TJ2JUrVd.d.ts} +4 -3
  29. package/dist/{content-sdYF4W-A.d.ts → content-B0znLIjr.d.ts} +37 -4
  30. package/dist/{content-BYoXVO6V.d.mts → content-DrrPH4ri.d.mts} +37 -4
  31. package/dist/entry/background/index.d.mts +2 -2
  32. package/dist/entry/background/index.d.ts +2 -2
  33. package/dist/entry/command/index.d.mts +3 -3
  34. package/dist/entry/command/index.d.ts +3 -3
  35. package/dist/entry/content/index.d.mts +2 -2
  36. package/dist/entry/content/index.d.ts +2 -2
  37. package/dist/entry/content/react/index.cjs +104 -18
  38. package/dist/entry/content/react/index.cjs.map +1 -1
  39. package/dist/entry/content/react/index.d.mts +4 -4
  40. package/dist/entry/content/react/index.d.ts +4 -4
  41. package/dist/entry/content/react/index.js +104 -18
  42. package/dist/entry/content/react/index.js.map +1 -1
  43. package/dist/entry/content/vanilla/index.cjs +108 -18
  44. package/dist/entry/content/vanilla/index.cjs.map +1 -1
  45. package/dist/entry/content/vanilla/index.d.mts +4 -4
  46. package/dist/entry/content/vanilla/index.d.ts +4 -4
  47. package/dist/entry/content/vanilla/index.js +108 -18
  48. package/dist/entry/content/vanilla/index.js.map +1 -1
  49. package/dist/entry/offscreen/index.cjs +27 -4
  50. package/dist/entry/offscreen/index.cjs.map +1 -1
  51. package/dist/entry/offscreen/index.d.mts +11 -9
  52. package/dist/entry/offscreen/index.d.ts +11 -9
  53. package/dist/entry/offscreen/index.js +27 -4
  54. package/dist/entry/offscreen/index.js.map +1 -1
  55. package/dist/entry/relay/index.d.mts +9 -8
  56. package/dist/entry/relay/index.d.ts +9 -8
  57. package/dist/entry/service/index.cjs +31 -10
  58. package/dist/entry/service/index.cjs.map +1 -1
  59. package/dist/entry/service/index.d.mts +5 -4
  60. package/dist/entry/service/index.d.ts +5 -4
  61. package/dist/entry/service/index.js +31 -10
  62. package/dist/entry/service/index.js.map +1 -1
  63. package/dist/entry/transport/index.d.mts +8 -7
  64. package/dist/entry/transport/index.d.ts +8 -7
  65. package/dist/entry/view/index.d.mts +2 -2
  66. package/dist/entry/view/index.d.ts +2 -2
  67. package/dist/entry/view/react/index.d.mts +4 -4
  68. package/dist/entry/view/react/index.d.ts +4 -4
  69. package/dist/entry/view/vanilla/index.d.mts +4 -4
  70. package/dist/entry/view/vanilla/index.d.ts +4 -4
  71. package/dist/{helpers-DnV3N7fU.d.mts → helpers-YDFORuZz.d.mts} +2 -2
  72. package/dist/{helpers-DnV3N7fU.d.ts → helpers-YDFORuZz.d.ts} +2 -2
  73. package/dist/index.cjs +11 -1
  74. package/dist/index.cjs.map +1 -1
  75. package/dist/index.d.mts +63 -22
  76. package/dist/index.d.ts +63 -22
  77. package/dist/index.js +11 -2
  78. package/dist/index.js.map +1 -1
  79. package/dist/message/index.cjs.map +1 -1
  80. package/dist/message/index.d.mts +4 -3
  81. package/dist/message/index.d.ts +4 -3
  82. package/dist/message/index.js.map +1 -1
  83. package/dist/message/react/index.cjs.map +1 -1
  84. package/dist/message/react/index.d.mts +1 -1
  85. package/dist/message/react/index.d.ts +1 -1
  86. package/dist/message/react/index.js.map +1 -1
  87. package/dist/{message-55r-wFjc.d.mts → message-jsmkeGHC.d.mts} +5 -1
  88. package/dist/{message-55r-wFjc.d.ts → message-jsmkeGHC.d.ts} +5 -1
  89. package/dist/offscreen/index.cjs +30 -5
  90. package/dist/offscreen/index.cjs.map +1 -1
  91. package/dist/offscreen/index.d.mts +10 -9
  92. package/dist/offscreen/index.d.ts +10 -9
  93. package/dist/offscreen/index.js +30 -5
  94. package/dist/offscreen/index.js.map +1 -1
  95. package/dist/{offscreen-B9GiglgN.d.mts → offscreen-2EP-rRfx.d.mts} +3 -3
  96. package/dist/{offscreen-BG5Abe8V.d.ts → offscreen-aHdkogKj.d.ts} +3 -3
  97. package/dist/relay/index.d.mts +8 -7
  98. package/dist/relay/index.d.ts +8 -7
  99. package/dist/{relay-DymeeDe7.d.ts → relay-DT46Ltms.d.ts} +3 -3
  100. package/dist/{relay-BYeTCwKO.d.mts → relay-vaJ5R2iC.d.mts} +3 -3
  101. package/dist/service/index.cjs +27 -4
  102. package/dist/service/index.cjs.map +1 -1
  103. package/dist/service/index.d.mts +8 -6
  104. package/dist/service/index.d.ts +8 -6
  105. package/dist/service/index.js +27 -4
  106. package/dist/service/index.js.map +1 -1
  107. package/dist/{service-BhJhIk-O.d.ts → service-6FdoYGNC.d.ts} +3 -3
  108. package/dist/{service-DsivypLQ.d.mts → service-C9HbDQPE.d.mts} +3 -3
  109. package/dist/{transport-B_uYwoGi.d.mts → transport-BrbirhXv.d.mts} +3 -2
  110. package/dist/{transport-BPmSUoEU.d.ts → transport-Co9Oxp0-.d.ts} +3 -2
  111. package/dist/{view-QDP2Maev.d.mts → view-Bs26Jcvi.d.mts} +1 -1
  112. package/dist/{view-D4dquvKl.d.ts → view-u9w7nMgw.d.ts} +1 -1
  113. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/message/providers/AbstractMessage.ts","../../src/types/message.ts","../../src/message/MessageManager.ts","../../src/message/handlers/AbstractHandler.ts","../../src/message/handlers/SingleHandler.ts","../../src/message/handlers/MapHandler.ts","../../src/message/handlers/GeneralHandler.ts","../../src/message/providers/Message.ts","../../src/message/index.ts"],"names":["nanoid","onMessage","sendTabMessage","sendMessage"],"mappings":"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","file":"index.cjs","sourcesContent":["import {nanoid} from \"nanoid\";\nimport {\n MessageBody,\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageProvider,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractMessage<T extends MessageDictionary, TOptions>\n implements MessageProvider<T, TOptions>\n{\n public abstract send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n public abstract watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n public abstract watch(map: MessageMapHandler<T>): () => void;\n\n public abstract watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n\n protected buildMessage<K extends MessageType<T>>(type: K, data: MessageData<T, K>): MessageBody<T, K> {\n return {\n id: nanoid(),\n type,\n data,\n timestamp: Date.now(),\n };\n }\n}\n","export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) return;\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n return true;\n }\n }\n}\n","import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n if (type === this.messageType) {\n return this.handler(data, sender);\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n const handler = this.map[type];\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender);\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n return this.generalHandler(type, data, sender);\n }\n}\n","import {sendMessage, sendTabMessage} from \"@adnbn/browser\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n\n if (options) {\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n return sendTabMessage(tabId, message, other);\n }\n\n return sendMessage(message);\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n","import {Message, MessageSendOptions} from \"@message/providers\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport type {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n MessageSendOptions,\n};\n\nexport {Message};\n\nexport interface MessageRegistry extends MessageDictionary {}\n\nexport function sendMessage<K extends MessageType<MessageRegistry>>(\n type: K,\n data: MessageData<MessageRegistry, K>,\n options?: MessageSendOptions\n): Promise<MessageResponse<MessageRegistry, K>> {\n return Message.getInstance<MessageRegistry>().send(type, data, options);\n}\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n type: K,\n handler: MessageTargetHandler<MessageRegistry, K>\n): () => void;\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n handler: MessageGeneralHandler<MessageRegistry, K>\n): () => void;\n\nexport function onMessage(map: MessageMapHandler<MessageRegistry>): () => void;\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n arg1: K | MessageMapHandler<MessageRegistry> | MessageGeneralHandler<MessageRegistry, K>,\n arg2?: MessageTargetHandler<MessageRegistry, K>\n): () => void {\n return Message.getInstance<MessageRegistry>().watch(arg1, arg2);\n}\n"]}
1
+ {"version":3,"sources":["../../src/message/providers/AbstractMessage.ts","../../src/types/message.ts","../../src/message/MessageManager.ts","../../src/message/handlers/AbstractHandler.ts","../../src/message/handlers/SingleHandler.ts","../../src/message/handlers/MapHandler.ts","../../src/message/handlers/GeneralHandler.ts","../../src/message/providers/Message.ts","../../src/message/index.ts"],"names":["nanoid","onMessage","sendTabMessage","sendMessage"],"mappings":";;;;;;AAaA,IAA8B,kBAA9B,MAEA;AAAA,EAac,YAAA,CAAuC,MAAS,IAA4C,EAAA;AAClG,IAAO,OAAA;AAAA,MACH,IAAIA,aAAO,EAAA;AAAA,MACX,IAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAI;AAAA,KACxB;AAAA;AAER,CAAA;;;ACpCO,IAAM,gBAAmB,GAAA,cAAA;;;ACWhC,IAAqB,cAAA,GAArB,MAAqB,eAA4C,CAAA;AAAA,EACrD,QAAA,uBAAuC,GAAI,EAAA;AAAA,EAC3C,WAAmC,GAAA,IAAA;AAAA,EAE3C,OAAc,WAA8D,GAAA;AAfhF,IAAA,IAAA,EAAA;AAgBQ,IAAA,OAAQ,UAAW,CAAA,EAAA,GAAA,gBAAA,CAAA,KAAX,UAAiC,CAAA,EAAA,CAAA,GAAA,IAAI,eAAkB,EAAA,CAAA;AAAA;AACnE,EAEA,WAAc,GAAA;AACV,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAK,QAAS,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA;AAC3C,EAEO,IAAI,OAA4B,EAAA;AACnC,IAAK,IAAA,CAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AACzB,IAAA,IAAA,CAAK,cAAe,EAAA;AAAA;AACxB,EAEO,OAAO,OAA4B,EAAA;AACtC,IAAK,IAAA,CAAA,QAAA,CAAS,OAAO,OAAO,CAAA;AAC5B,IAAA,IAAA,CAAK,cAAe,EAAA;AAAA;AACxB,EAEO,KAAQ,GAAA;AACX,IAAK,IAAA,CAAA,QAAA,uBAAe,GAAI,EAAA;AACxB,IAAA,IAAA,CAAK,cAAe,EAAA;AAAA;AACxB,EAEQ,cAAiB,GAAA;AACrB,IAAA,IAAI,KAAK,QAAS,CAAA,IAAA,GAAO,CAAK,IAAA,CAAC,KAAK,WAAa,EAAA;AAC7C,MAAK,IAAA,CAAA,WAAA,GAAcC,iBAAU,CAAA,IAAA,CAAK,QAAQ,CAAA;AAAA,eACnC,IAAK,CAAA,QAAA,CAAS,IAAS,KAAA,CAAA,IAAK,KAAK,WAAa,EAAA;AACrD,MAAA,IAAA,CAAK,WAAY,EAAA;AACjB,MAAA,IAAA,CAAK,WAAc,GAAA,IAAA;AAAA;AACvB;AACJ,EAEQ,QAAA,CACJ,OACA,EAAA,MAAA,EACA,YACc,EAAA;AACd,IAAA,IAAI,CAAC,OAAW,IAAA,OAAO,YAAY,QAAY,IAAA,CAAC,QAAQ,IAAM,EAAA;AAE9D,IAAA,MAAM,UAA0B,EAAC;AAEjC,IAAW,KAAA,MAAA,OAAA,IAAW,KAAK,QAAU,EAAA;AACjC,MAAI,IAAA;AACA,QAAA,MAAM,SAAS,OAAQ,CAAA,GAAA,CAAI,QAAQ,IAAM,EAAA,OAAA,CAAQ,MAAM,MAAM,CAAA;AAC7D,QAAA,IAAI,WAAW,KAAW,CAAA,EAAA;AACtB,UAAA,OAAA,CAAQ,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,MAAM,CAAC,CAAA;AAAA;AACxC,eACK,GAAK,EAAA;AACV,QAAQ,OAAA,CAAA,KAAA,CAAM,0BAA0B,GAAG,CAAA;AAAA;AAC/C;AAGJ,IAAI,IAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACpB,MAAA,MAAM,IAAI,KAAA;AAAA,QACN,CAAA,cAAA,EAAiB,QAAQ,IAAI,CAAA,2EAAA;AAAA,OACjC;AAAA;AAGJ,IAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACtB,MAAQ,OAAA,CAAA,CAAC,CAAE,CAAA,IAAA,CAAK,YAAY,CAAA;AAC5B,MAAO,OAAA,IAAA;AAAA;AACX;AAER,CAAA;;;ACrEA,IAA8B,kBAA9B,MAAwG;AAMxG,CAAA;;;ACLA,IAAqB,aAAA,GAArB,cAAwE,eAAmB,CAAA;AAAA,EACvF,WAAA,CACY,aACA,OACV,EAAA;AACE,IAAM,KAAA,EAAA;AAHE,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA;AAGZ,EAEO,GAAA,CACH,IACA,EAAA,IAAA,EACA,MAC8C,EAAA;AAC9C,IAAI,IAAA,IAAA,KAAS,KAAK,WAAa,EAAA;AAC3B,MAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,IAAA,EAAM,MAAM,CAAA;AAAA;AACpC;AAER,CAAA;;;ACjBA,IAAqB,UAAA,GAArB,cAAqE,eAAmB,CAAA;AAAA,EACpF,YAAoB,GAA2B,EAAA;AAC3C,IAAM,KAAA,EAAA;AADU,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA;AAEpB,EAEO,GAAA,CACH,IACA,EAAA,IAAA,EACA,MAC8C,EAAA;AAC9C,IAAM,MAAA,OAAA,GAAU,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA;AAC7B,IAAA,IAAI,OAAS,EAAA;AACT,MAAI,IAAA,OAAO,YAAY,UAAY,EAAA;AAC/B,QAAO,OAAA,OAAA,CAAQ,MAAM,MAAM,CAAA;AAAA,OACxB,MAAA;AACH,QAAA,MAAM,IAAI,KAAA,CAAM,CAAqB,kBAAA,EAAA,IAAI,CAA4C,0CAAA,CAAA,CAAA;AAAA;AACzF;AACJ;AAER,CAAA;;;ACnBA,IAAqB,cAAA,GAArB,cAAmG,eAAmB,CAAA;AAAA,EAClH,YAAoB,cAA6C,EAAA;AAC7D,IAAM,KAAA,EAAA;AADU,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAAA;AAEpB,EAEO,GAAA,CACH,IACA,EAAA,IAAA,EACA,MAC8C,EAAA;AAC9C,IAAA,OAAO,IAAK,CAAA,cAAA,CAAe,IAAM,EAAA,IAAA,EAAM,MAAM,CAAA;AAAA;AAErD,CAAA;;;ACFqB,IAAA,OAAA,GAArB,MAAqB,QAAA,SAA6C,eAAuC,CAAA;AAAA,EACrG,OAAe,QAA8C,GAAA,IAAA;AAAA,EAE7D,OAAc,WAA2C,GAAA;AACrD,IAAA,OAAQ,IAAK,CAAA,QAAA,KAAL,IAAK,CAAA,QAAA,GAAa,IAAI,QAAW,EAAA,CAAA;AAAA;AAC7C,EAEA,IAAc,OAA6B,GAAA;AACvC,IAAA,OAAO,eAAe,WAAe,EAAA;AAAA;AACzC,EAEO,IAAA,CACH,IACA,EAAA,IAAA,EACA,OAC8B,EAAA;AAC9B,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,YAAa,CAAA,IAAA,EAAM,IAAI,CAAA;AAE5C,IAAA,IAAI,OAAS,EAAA;AACT,MAAI,IAAA,OAAO,YAAY,QAAU,EAAA;AAC7B,QAAO,OAAAC,sBAAA,CAAe,SAAS,OAAO,CAAA;AAAA;AAG1C,MAAA,MAAM,EAAC,KAAA,EAAO,GAAG,KAAA,EAAS,GAAA,OAAA;AAE1B,MAAO,OAAAA,sBAAA,CAAe,KAAO,EAAA,OAAA,EAAS,KAAK,CAAA;AAAA;AAG/C,IAAA,OAAOC,oBAAY,OAAO,CAAA;AAAA;AAC9B,EAEO,KAAA,CACH,MACA,IACU,EAAA;AACV,IAAI,IAAA,OAAA;AAEJ,IAAI,IAAA,OAAO,SAAS,UAAY,EAAA;AAC5B,MAAU,OAAA,GAAA,IAAI,eAAqB,IAAI,CAAA;AAAA,KAChC,MAAA,IAAA,OAAO,IAAS,KAAA,QAAA,IAAY,SAAS,MAAW,EAAA;AACvD,MAAU,OAAA,GAAA,IAAI,WAAc,IAAI,CAAA;AAAA,KACzB,MAAA,IAAA,OAAO,IAAS,KAAA,QAAA,IAAY,IAAM,EAAA;AACzC,MAAU,OAAA,GAAA,IAAI,aAAiB,CAAA,IAAA,EAAM,IAAI,CAAA;AAAA,KACtC,MAAA;AACH,MAAM,MAAA,IAAI,MAAM,qCAAqC,CAAA;AAAA;AAGzD,IAAK,IAAA,CAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAExB,IAAA,OAAO,MAAM,IAAA,CAAK,OAAQ,CAAA,MAAA,CAAO,OAAO,CAAA;AAAA;AAEhD;;;ACxCO,SAASA,YAAAA,CACZ,IACA,EAAA,IAAA,EACA,OAC4C,EAAA;AAC5C,EAAA,OAAO,QAAQ,WAA6B,EAAA,CAAE,IAAK,CAAA,IAAA,EAAM,MAAM,OAAO,CAAA;AAC1E;AAaO,SAASF,UAAAA,CACZ,MACA,IACU,EAAA;AACV,EAAA,OAAO,OAAQ,CAAA,WAAA,EAA+B,CAAA,KAAA,CAAM,MAAM,IAAI,CAAA;AAClE","file":"index.cjs","sourcesContent":["import {nanoid} from \"nanoid\";\nimport {\n MessageBody,\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageProvider,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractMessage<T extends MessageDictionary, TOptions>\n implements MessageProvider<T, TOptions>\n{\n public abstract send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n public abstract watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n public abstract watch(map: MessageMapHandler<T>): () => void;\n\n public abstract watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n\n protected buildMessage<K extends MessageType<T>>(type: K, data: MessageData<T, K>): MessageBody<T, K> {\n return {\n id: nanoid(),\n type,\n data,\n timestamp: Date.now(),\n };\n }\n}\n","export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport const MessageSenderProperty = \"_sender\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n [MessageSenderProperty]?: MessageSender;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) return;\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n return true;\n }\n }\n}\n","import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n if (type === this.messageType) {\n return this.handler(data, sender);\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n const handler = this.map[type];\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender);\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n return this.generalHandler(type, data, sender);\n }\n}\n","import {sendMessage, sendTabMessage} from \"@adnbn/browser\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n\n if (options) {\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n return sendTabMessage(tabId, message, other);\n }\n\n return sendMessage(message);\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n","import {Message, MessageSendOptions} from \"@message/providers\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageResponse,\n MessageSenderAware,\n MessageTargetHandler,\n MessageType,\n MessageSender,\n} from \"@typing/message\";\n\nexport type {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n MessageSendOptions,\n MessageSenderAware,\n MessageSender,\n};\n\nexport {Message};\n\nexport interface MessageRegistry extends MessageDictionary {}\n\nexport function sendMessage<K extends MessageType<MessageRegistry>>(\n type: K,\n data: MessageData<MessageRegistry, K>,\n options?: MessageSendOptions\n): Promise<MessageResponse<MessageRegistry, K>> {\n return Message.getInstance<MessageRegistry>().send(type, data, options);\n}\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n type: K,\n handler: MessageTargetHandler<MessageRegistry, K>\n): () => void;\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n handler: MessageGeneralHandler<MessageRegistry, K>\n): () => void;\n\nexport function onMessage(map: MessageMapHandler<MessageRegistry>): () => void;\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n arg1: K | MessageMapHandler<MessageRegistry> | MessageGeneralHandler<MessageRegistry, K>,\n arg2?: MessageTargetHandler<MessageRegistry, K>\n): () => void {\n return Message.getInstance<MessageRegistry>().watch(arg1, arg2);\n}\n"]}
@@ -1,6 +1,7 @@
1
- import { M as MessageSendOptions } from '../Message-1cYgMdsu.mjs';
2
- export { a as Message } from '../Message-1cYgMdsu.mjs';
3
- import { M as MessageDictionary, a as MessageType, b as MessageData, c as MessageResponse, d as MessageTargetHandler, e as MessageGeneralHandler, f as MessageMapHandler } from '../message-55r-wFjc.mjs';
1
+ import { M as MessageSendOptions } from '../Message-Bnritk3D.mjs';
2
+ export { a as Message } from '../Message-Bnritk3D.mjs';
3
+ import { M as MessageDictionary, a as MessageType, b as MessageData, c as MessageResponse, d as MessageTargetHandler, e as MessageGeneralHandler, f as MessageMapHandler } from '../message-jsmkeGHC.mjs';
4
+ export { h as MessageSender, g as MessageSenderAware } from '../message-jsmkeGHC.mjs';
4
5
 
5
6
  interface MessageRegistry extends MessageDictionary {
6
7
  }
@@ -1,6 +1,7 @@
1
- import { M as MessageSendOptions } from '../Message-DAhczRx9.js';
2
- export { a as Message } from '../Message-DAhczRx9.js';
3
- import { M as MessageDictionary, a as MessageType, b as MessageData, c as MessageResponse, d as MessageTargetHandler, e as MessageGeneralHandler, f as MessageMapHandler } from '../message-55r-wFjc.js';
1
+ import { M as MessageSendOptions } from '../Message-DFDaS7mV.js';
2
+ export { a as Message } from '../Message-DFDaS7mV.js';
3
+ import { M as MessageDictionary, a as MessageType, b as MessageData, c as MessageResponse, d as MessageTargetHandler, e as MessageGeneralHandler, f as MessageMapHandler } from '../message-jsmkeGHC.js';
4
+ export { h as MessageSender, g as MessageSenderAware } from '../message-jsmkeGHC.js';
4
5
 
5
6
  interface MessageRegistry extends MessageDictionary {
6
7
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/message/providers/AbstractMessage.ts","../../src/types/message.ts","../../src/message/MessageManager.ts","../../src/message/handlers/AbstractHandler.ts","../../src/message/handlers/SingleHandler.ts","../../src/message/handlers/MapHandler.ts","../../src/message/handlers/GeneralHandler.ts","../../src/message/providers/Message.ts","../../src/message/index.ts"],"names":["sendMessage","onMessage"],"mappings":"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","file":"index.js","sourcesContent":["import {nanoid} from \"nanoid\";\nimport {\n MessageBody,\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageProvider,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractMessage<T extends MessageDictionary, TOptions>\n implements MessageProvider<T, TOptions>\n{\n public abstract send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n public abstract watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n public abstract watch(map: MessageMapHandler<T>): () => void;\n\n public abstract watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n\n protected buildMessage<K extends MessageType<T>>(type: K, data: MessageData<T, K>): MessageBody<T, K> {\n return {\n id: nanoid(),\n type,\n data,\n timestamp: Date.now(),\n };\n }\n}\n","export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) return;\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n return true;\n }\n }\n}\n","import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n if (type === this.messageType) {\n return this.handler(data, sender);\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n const handler = this.map[type];\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender);\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n return this.generalHandler(type, data, sender);\n }\n}\n","import {sendMessage, sendTabMessage} from \"@adnbn/browser\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n\n if (options) {\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n return sendTabMessage(tabId, message, other);\n }\n\n return sendMessage(message);\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n","import {Message, MessageSendOptions} from \"@message/providers\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport type {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n MessageSendOptions,\n};\n\nexport {Message};\n\nexport interface MessageRegistry extends MessageDictionary {}\n\nexport function sendMessage<K extends MessageType<MessageRegistry>>(\n type: K,\n data: MessageData<MessageRegistry, K>,\n options?: MessageSendOptions\n): Promise<MessageResponse<MessageRegistry, K>> {\n return Message.getInstance<MessageRegistry>().send(type, data, options);\n}\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n type: K,\n handler: MessageTargetHandler<MessageRegistry, K>\n): () => void;\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n handler: MessageGeneralHandler<MessageRegistry, K>\n): () => void;\n\nexport function onMessage(map: MessageMapHandler<MessageRegistry>): () => void;\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n arg1: K | MessageMapHandler<MessageRegistry> | MessageGeneralHandler<MessageRegistry, K>,\n arg2?: MessageTargetHandler<MessageRegistry, K>\n): () => void {\n return Message.getInstance<MessageRegistry>().watch(arg1, arg2);\n}\n"]}
1
+ {"version":3,"sources":["../../src/message/providers/AbstractMessage.ts","../../src/types/message.ts","../../src/message/MessageManager.ts","../../src/message/handlers/AbstractHandler.ts","../../src/message/handlers/SingleHandler.ts","../../src/message/handlers/MapHandler.ts","../../src/message/handlers/GeneralHandler.ts","../../src/message/providers/Message.ts","../../src/message/index.ts"],"names":["sendMessage","onMessage"],"mappings":"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","file":"index.js","sourcesContent":["import {nanoid} from \"nanoid\";\nimport {\n MessageBody,\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageProvider,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractMessage<T extends MessageDictionary, TOptions>\n implements MessageProvider<T, TOptions>\n{\n public abstract send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n public abstract watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n public abstract watch(map: MessageMapHandler<T>): () => void;\n\n public abstract watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n\n protected buildMessage<K extends MessageType<T>>(type: K, data: MessageData<T, K>): MessageBody<T, K> {\n return {\n id: nanoid(),\n type,\n data,\n timestamp: Date.now(),\n };\n }\n}\n","export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport const MessageSenderProperty = \"_sender\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n [MessageSenderProperty]?: MessageSender;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) return;\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n return true;\n }\n }\n}\n","import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n if (type === this.messageType) {\n return this.handler(data, sender);\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n const handler = this.map[type];\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender);\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n return this.generalHandler(type, data, sender);\n }\n}\n","import {sendMessage, sendTabMessage} from \"@adnbn/browser\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n\n if (options) {\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n return sendTabMessage(tabId, message, other);\n }\n\n return sendMessage(message);\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n","import {Message, MessageSendOptions} from \"@message/providers\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageResponse,\n MessageSenderAware,\n MessageTargetHandler,\n MessageType,\n MessageSender,\n} from \"@typing/message\";\n\nexport type {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n MessageSendOptions,\n MessageSenderAware,\n MessageSender,\n};\n\nexport {Message};\n\nexport interface MessageRegistry extends MessageDictionary {}\n\nexport function sendMessage<K extends MessageType<MessageRegistry>>(\n type: K,\n data: MessageData<MessageRegistry, K>,\n options?: MessageSendOptions\n): Promise<MessageResponse<MessageRegistry, K>> {\n return Message.getInstance<MessageRegistry>().send(type, data, options);\n}\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n type: K,\n handler: MessageTargetHandler<MessageRegistry, K>\n): () => void;\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n handler: MessageGeneralHandler<MessageRegistry, K>\n): () => void;\n\nexport function onMessage(map: MessageMapHandler<MessageRegistry>): () => void;\n\nexport function onMessage<K extends MessageType<MessageRegistry>>(\n arg1: K | MessageMapHandler<MessageRegistry> | MessageGeneralHandler<MessageRegistry, K>,\n arg2?: MessageTargetHandler<MessageRegistry, K>\n): () => void {\n return Message.getInstance<MessageRegistry>().watch(arg1, arg2);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/message/providers/AbstractMessage.ts","../../../src/types/message.ts","../../../src/message/MessageManager.ts","../../../src/message/handlers/AbstractHandler.ts","../../../src/message/handlers/SingleHandler.ts","../../../src/message/handlers/MapHandler.ts","../../../src/message/handlers/GeneralHandler.ts","../../../src/message/providers/Message.ts","../../../src/message/react/useMessageHandler.ts"],"names":["nanoid","onMessage","sendTabMessage","sendMessage","useRef","useEffect"],"mappings":"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","file":"index.cjs","sourcesContent":["import {nanoid} from \"nanoid\";\nimport {\n MessageBody,\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageProvider,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractMessage<T extends MessageDictionary, TOptions>\n implements MessageProvider<T, TOptions>\n{\n public abstract send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n public abstract watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n public abstract watch(map: MessageMapHandler<T>): () => void;\n\n public abstract watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n\n protected buildMessage<K extends MessageType<T>>(type: K, data: MessageData<T, K>): MessageBody<T, K> {\n return {\n id: nanoid(),\n type,\n data,\n timestamp: Date.now(),\n };\n }\n}\n","export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) return;\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n return true;\n }\n }\n}\n","import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n if (type === this.messageType) {\n return this.handler(data, sender);\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n const handler = this.map[type];\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender);\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n return this.generalHandler(type, data, sender);\n }\n}\n","import {sendMessage, sendTabMessage} from \"@adnbn/browser\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n\n if (options) {\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n return sendTabMessage(tabId, message, other);\n }\n\n return sendMessage(message);\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n","import {useEffect, useRef} from \"react\";\nimport {MessageDictionary, MessageTargetHandler, MessageType} from \"@typing/message\";\n\nimport {Message} from \"../providers\";\n\nexport default <K extends MessageType<T>, T extends MessageDictionary = MessageDictionary>(\n type: K,\n handler: MessageTargetHandler<T, K>\n): void => {\n const messageRef = useRef(new Message<T>());\n\n useEffect(() => {\n const unsubscribe = messageRef.current.watch(type, handler);\n\n return () => unsubscribe();\n }, [type, handler]);\n};\n"]}
1
+ {"version":3,"sources":["../../../src/message/providers/AbstractMessage.ts","../../../src/types/message.ts","../../../src/message/MessageManager.ts","../../../src/message/handlers/AbstractHandler.ts","../../../src/message/handlers/SingleHandler.ts","../../../src/message/handlers/MapHandler.ts","../../../src/message/handlers/GeneralHandler.ts","../../../src/message/providers/Message.ts","../../../src/message/react/useMessageHandler.ts"],"names":["nanoid","onMessage","sendTabMessage","sendMessage","useRef","useEffect"],"mappings":"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","file":"index.cjs","sourcesContent":["import {nanoid} from \"nanoid\";\nimport {\n MessageBody,\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageProvider,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractMessage<T extends MessageDictionary, TOptions>\n implements MessageProvider<T, TOptions>\n{\n public abstract send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n public abstract watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n public abstract watch(map: MessageMapHandler<T>): () => void;\n\n public abstract watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n\n protected buildMessage<K extends MessageType<T>>(type: K, data: MessageData<T, K>): MessageBody<T, K> {\n return {\n id: nanoid(),\n type,\n data,\n timestamp: Date.now(),\n };\n }\n}\n","export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport const MessageSenderProperty = \"_sender\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n [MessageSenderProperty]?: MessageSender;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) return;\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n return true;\n }\n }\n}\n","import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n if (type === this.messageType) {\n return this.handler(data, sender);\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n const handler = this.map[type];\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender);\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n return this.generalHandler(type, data, sender);\n }\n}\n","import {sendMessage, sendTabMessage} from \"@adnbn/browser\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n\n if (options) {\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n return sendTabMessage(tabId, message, other);\n }\n\n return sendMessage(message);\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n","import {useEffect, useRef} from \"react\";\nimport {MessageDictionary, MessageTargetHandler, MessageType} from \"@typing/message\";\n\nimport {Message} from \"../providers\";\n\nexport default <K extends MessageType<T>, T extends MessageDictionary = MessageDictionary>(\n type: K,\n handler: MessageTargetHandler<T, K>\n): void => {\n const messageRef = useRef(new Message<T>());\n\n useEffect(() => {\n const unsubscribe = messageRef.current.watch(type, handler);\n\n return () => unsubscribe();\n }, [type, handler]);\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { a as MessageType, M as MessageDictionary, d as MessageTargetHandler } from '../../message-55r-wFjc.mjs';
1
+ import { a as MessageType, M as MessageDictionary, d as MessageTargetHandler } from '../../message-jsmkeGHC.mjs';
2
2
 
3
3
  declare const _default: <K extends MessageType<T>, T extends MessageDictionary = MessageDictionary>(type: K, handler: MessageTargetHandler<T, K>) => void;
4
4
 
@@ -1,4 +1,4 @@
1
- import { a as MessageType, M as MessageDictionary, d as MessageTargetHandler } from '../../message-55r-wFjc.js';
1
+ import { a as MessageType, M as MessageDictionary, d as MessageTargetHandler } from '../../message-jsmkeGHC.js';
2
2
 
3
3
  declare const _default: <K extends MessageType<T>, T extends MessageDictionary = MessageDictionary>(type: K, handler: MessageTargetHandler<T, K>) => void;
4
4
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/message/providers/AbstractMessage.ts","../../../src/types/message.ts","../../../src/message/MessageManager.ts","../../../src/message/handlers/AbstractHandler.ts","../../../src/message/handlers/SingleHandler.ts","../../../src/message/handlers/MapHandler.ts","../../../src/message/handlers/GeneralHandler.ts","../../../src/message/providers/Message.ts","../../../src/message/react/useMessageHandler.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {nanoid} from \"nanoid\";\nimport {\n MessageBody,\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageProvider,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractMessage<T extends MessageDictionary, TOptions>\n implements MessageProvider<T, TOptions>\n{\n public abstract send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n public abstract watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n public abstract watch(map: MessageMapHandler<T>): () => void;\n\n public abstract watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n\n protected buildMessage<K extends MessageType<T>>(type: K, data: MessageData<T, K>): MessageBody<T, K> {\n return {\n id: nanoid(),\n type,\n data,\n timestamp: Date.now(),\n };\n }\n}\n","export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) return;\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n return true;\n }\n }\n}\n","import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n if (type === this.messageType) {\n return this.handler(data, sender);\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n const handler = this.map[type];\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender);\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n return this.generalHandler(type, data, sender);\n }\n}\n","import {sendMessage, sendTabMessage} from \"@adnbn/browser\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n\n if (options) {\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n return sendTabMessage(tabId, message, other);\n }\n\n return sendMessage(message);\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n","import {useEffect, useRef} from \"react\";\nimport {MessageDictionary, MessageTargetHandler, MessageType} from \"@typing/message\";\n\nimport {Message} from \"../providers\";\n\nexport default <K extends MessageType<T>, T extends MessageDictionary = MessageDictionary>(\n type: K,\n handler: MessageTargetHandler<T, K>\n): void => {\n const messageRef = useRef(new Message<T>());\n\n useEffect(() => {\n const unsubscribe = messageRef.current.watch(type, handler);\n\n return () => unsubscribe();\n }, [type, handler]);\n};\n"]}
1
+ {"version":3,"sources":["../../../src/message/providers/AbstractMessage.ts","../../../src/types/message.ts","../../../src/message/MessageManager.ts","../../../src/message/handlers/AbstractHandler.ts","../../../src/message/handlers/SingleHandler.ts","../../../src/message/handlers/MapHandler.ts","../../../src/message/handlers/GeneralHandler.ts","../../../src/message/providers/Message.ts","../../../src/message/react/useMessageHandler.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {nanoid} from \"nanoid\";\nimport {\n MessageBody,\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageMapHandler,\n MessageProvider,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractMessage<T extends MessageDictionary, TOptions>\n implements MessageProvider<T, TOptions>\n{\n public abstract send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n public abstract watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n public abstract watch(map: MessageMapHandler<T>): () => void;\n\n public abstract watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n\n protected buildMessage<K extends MessageType<T>>(type: K, data: MessageData<T, K>): MessageBody<T, K> {\n return {\n id: nanoid(),\n type,\n data,\n timestamp: Date.now(),\n };\n }\n}\n","export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport const MessageSenderProperty = \"_sender\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n [MessageSenderProperty]?: MessageSender;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) return;\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n return true;\n }\n }\n}\n","import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n if (type === this.messageType) {\n return this.handler(data, sender);\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n const handler = this.map[type];\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender);\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n","import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n return this.generalHandler(type, data, sender);\n }\n}\n","import {sendMessage, sendTabMessage} from \"@adnbn/browser\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResponse,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n\n if (options) {\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n return sendTabMessage(tabId, message, other);\n }\n\n return sendMessage(message);\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n","import {useEffect, useRef} from \"react\";\nimport {MessageDictionary, MessageTargetHandler, MessageType} from \"@typing/message\";\n\nimport {Message} from \"../providers\";\n\nexport default <K extends MessageType<T>, T extends MessageDictionary = MessageDictionary>(\n type: K,\n handler: MessageTargetHandler<T, K>\n): void => {\n const messageRef = useRef(new Message<T>());\n\n useEffect(() => {\n const unsubscribe = messageRef.current.watch(type, handler);\n\n return () => unsubscribe();\n }, [type, handler]);\n};\n"]}
@@ -1,7 +1,11 @@
1
+ declare const MessageSenderProperty = "_sender";
1
2
  type MessageSender = chrome.runtime.MessageSender;
2
3
  interface MessageDictionary {
3
4
  [key: string]: (data: any) => any;
4
5
  }
6
+ interface MessageSenderAware {
7
+ [MessageSenderProperty]?: MessageSender;
8
+ }
5
9
  type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;
6
10
  type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];
7
11
  type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;
@@ -26,4 +30,4 @@ interface MessageHandler<T extends MessageDictionary> {
26
30
  run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined;
27
31
  }
28
32
 
29
- export type { MessageDictionary as M, MessageType as a, MessageData as b, MessageResponse as c, MessageTargetHandler as d, MessageGeneralHandler as e, MessageMapHandler as f, MessageProvider as g, MessageBody as h, MessageHandler as i };
33
+ export type { MessageDictionary as M, MessageType as a, MessageData as b, MessageResponse as c, MessageTargetHandler as d, MessageGeneralHandler as e, MessageMapHandler as f, MessageSenderAware as g, MessageSender as h, MessageProvider as i, MessageBody as j, MessageHandler as k };
@@ -1,7 +1,11 @@
1
+ declare const MessageSenderProperty = "_sender";
1
2
  type MessageSender = chrome.runtime.MessageSender;
2
3
  interface MessageDictionary {
3
4
  [key: string]: (data: any) => any;
4
5
  }
6
+ interface MessageSenderAware {
7
+ [MessageSenderProperty]?: MessageSender;
8
+ }
5
9
  type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;
6
10
  type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];
7
11
  type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;
@@ -26,4 +30,4 @@ interface MessageHandler<T extends MessageDictionary> {
26
30
  run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined;
27
31
  }
28
32
 
29
- export type { MessageDictionary as M, MessageType as a, MessageData as b, MessageResponse as c, MessageTargetHandler as d, MessageGeneralHandler as e, MessageMapHandler as f, MessageProvider as g, MessageBody as h, MessageHandler as i };
33
+ export type { MessageDictionary as M, MessageType as a, MessageData as b, MessageResponse as c, MessageTargetHandler as d, MessageGeneralHandler as e, MessageMapHandler as f, MessageSenderAware as g, MessageSender as h, MessageProvider as i, MessageBody as j, MessageHandler as k };
@@ -391,6 +391,7 @@ var AbstractMessage = class {
391
391
  // src/types/message.ts
392
392
  var MessageGlobalKey = "adnbnMessage";
393
393
  var MessageTypeSeparator = ":";
394
+ var MessageSenderProperty = "_sender";
394
395
 
395
396
  // src/message/MessageManager.ts
396
397
  var MessageManager = class _MessageManager {
@@ -590,6 +591,7 @@ var ProxyOffscreen_default = class extends ProxyTransport_default {
590
591
  this.message = new OffscreenMessage(name);
591
592
  }
592
593
  message;
594
+ url;
593
595
  manager() {
594
596
  return OffscreenManager.getInstance();
595
597
  }
@@ -600,11 +602,12 @@ var ProxyOffscreen_default = class extends ProxyTransport_default {
600
602
  };
601
603
  if (!browser.isManifestVersion3() || getBrowser() === "firefox" /* Firefox */) {
602
604
  await OffscreenBridge.createOffscreen(parameters);
603
- } else {
605
+ } else if (this.url !== parameters.url) {
604
606
  if (await browser.hasOffscreen()) {
605
607
  await browser.closeOffscreen();
606
608
  }
607
609
  await browser.createOffscreen(parameters);
610
+ this.url = parameters.url;
608
611
  }
609
612
  return this.message.send({ path, args });
610
613
  }
@@ -628,23 +631,45 @@ var RegisterTransport_default = class extends BaseTransport_default {
628
631
  }
629
632
  const instance = this.init(...args);
630
633
  this.manager().add(this.name, instance);
631
- this.message().watch(async ({ path, args: args2 }) => {
634
+ this.message().watch(async ({ path, args: args2 }, sender) => {
632
635
  try {
636
+ this.injectSender(instance, sender);
633
637
  const property = path == null ? instance : get__default.default(instance, path);
634
638
  if (property === void 0) {
635
639
  throw new Error(`Property not found at path "${path}" in "${this.name}"`);
636
640
  }
641
+ let result;
637
642
  if (typeof property === "function") {
638
- return await property.apply(instance, args2);
643
+ result = await property.apply(instance, args2);
644
+ } else {
645
+ result = property;
639
646
  }
640
- return property;
647
+ this.clearSender(instance);
648
+ return result;
641
649
  } catch (error) {
642
- console.error("register() error", error);
650
+ console.error(`Error during message handler registration for transport "${this.name}"`, error);
651
+ this.clearSender(instance);
643
652
  throw error;
644
653
  }
645
654
  });
646
655
  return instance;
647
656
  }
657
+ injectSender(instance, sender) {
658
+ if (!Object.getOwnPropertyDescriptor(instance, MessageSenderProperty)) {
659
+ Object.defineProperty(instance, MessageSenderProperty, {
660
+ configurable: true,
661
+ enumerable: false,
662
+ writable: true,
663
+ value: void 0
664
+ });
665
+ }
666
+ instance[MessageSenderProperty] = sender;
667
+ }
668
+ clearSender(instance) {
669
+ if (Object.getOwnPropertyDescriptor(instance, MessageSenderProperty)) {
670
+ instance[MessageSenderProperty] = void 0;
671
+ }
672
+ }
648
673
  };
649
674
 
650
675
  // src/offscreen/providers/RegisterOffscreen.ts