@thalesrc/hermes 0.0.0

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 (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +538 -0
  3. package/broadcast/default-channel-name.cjs +4 -0
  4. package/broadcast/default-channel-name.d.ts +1 -0
  5. package/broadcast/default-channel-name.js +3 -0
  6. package/broadcast/default-channel-name.js.map +1 -0
  7. package/broadcast/index.cjs +13 -0
  8. package/broadcast/index.d.ts +5 -0
  9. package/broadcast/index.js +7 -0
  10. package/broadcast/index.js.map +1 -0
  11. package/broadcast/message-client.cjs +26 -0
  12. package/broadcast/message-client.d.ts +12 -0
  13. package/broadcast/message-client.js +24 -0
  14. package/broadcast/message-client.js.map +1 -0
  15. package/broadcast/message-host.cjs +28 -0
  16. package/broadcast/message-host.d.ts +9 -0
  17. package/broadcast/message-host.js +26 -0
  18. package/broadcast/message-host.js.map +1 -0
  19. package/broadcast/message-service.cjs +13 -0
  20. package/broadcast/message-service.d.ts +8 -0
  21. package/broadcast/message-service.js +11 -0
  22. package/broadcast/message-service.js.map +1 -0
  23. package/chrome/default-connection-name.cjs +4 -0
  24. package/chrome/default-connection-name.d.ts +1 -0
  25. package/chrome/default-connection-name.js +3 -0
  26. package/chrome/default-connection-name.js.map +1 -0
  27. package/chrome/index.cjs +11 -0
  28. package/chrome/index.d.ts +4 -0
  29. package/chrome/index.js +6 -0
  30. package/chrome/index.js.map +1 -0
  31. package/chrome/message-client.cjs +41 -0
  32. package/chrome/message-client.d.ts +15 -0
  33. package/chrome/message-client.js +39 -0
  34. package/chrome/message-client.js.map +1 -0
  35. package/chrome/message-host.cjs +43 -0
  36. package/chrome/message-host.d.ts +9 -0
  37. package/chrome/message-host.js +41 -0
  38. package/chrome/message-host.js.map +1 -0
  39. package/iframe/channel-path-splitter.cjs +4 -0
  40. package/iframe/channel-path-splitter.d.ts +1 -0
  41. package/iframe/channel-path-splitter.js +3 -0
  42. package/iframe/channel-path-splitter.js.map +1 -0
  43. package/iframe/default-channel-name.cjs +4 -0
  44. package/iframe/default-channel-name.d.ts +1 -0
  45. package/iframe/default-channel-name.js +3 -0
  46. package/iframe/default-channel-name.js.map +1 -0
  47. package/iframe/iframe.type.cjs +2 -0
  48. package/iframe/iframe.type.d.ts +1 -0
  49. package/iframe/iframe.type.js +3 -0
  50. package/iframe/iframe.type.js.map +1 -0
  51. package/iframe/index.cjs +13 -0
  52. package/iframe/index.d.ts +6 -0
  53. package/iframe/index.js +7 -0
  54. package/iframe/index.js.map +1 -0
  55. package/iframe/message-client.cjs +50 -0
  56. package/iframe/message-client.d.ts +14 -0
  57. package/iframe/message-client.js +48 -0
  58. package/iframe/message-client.js.map +1 -0
  59. package/iframe/message-host.cjs +63 -0
  60. package/iframe/message-host.d.ts +11 -0
  61. package/iframe/message-host.js +61 -0
  62. package/iframe/message-host.js.map +1 -0
  63. package/iframe/message-service.cjs +13 -0
  64. package/iframe/message-service.d.ts +9 -0
  65. package/iframe/message-service.js +11 -0
  66. package/iframe/message-service.js.map +1 -0
  67. package/iframe/source-id-splitter.cjs +4 -0
  68. package/iframe/source-id-splitter.d.ts +1 -0
  69. package/iframe/source-id-splitter.js +3 -0
  70. package/iframe/source-id-splitter.js.map +1 -0
  71. package/iframe/upcoming-message.cjs +2 -0
  72. package/iframe/upcoming-message.d.ts +4 -0
  73. package/iframe/upcoming-message.js +3 -0
  74. package/iframe/upcoming-message.js.map +1 -0
  75. package/index.cjs +13 -0
  76. package/index.d.ts +7 -0
  77. package/index.js +7 -0
  78. package/index.js.map +1 -0
  79. package/listen.decorator.cjs +20 -0
  80. package/listen.decorator.d.ts +6 -0
  81. package/listen.decorator.js +19 -0
  82. package/listen.decorator.js.map +1 -0
  83. package/listener-storage.type.cjs +2 -0
  84. package/listener-storage.type.d.ts +2 -0
  85. package/listener-storage.type.js +3 -0
  86. package/listener-storage.type.js.map +1 -0
  87. package/message-client.cjs +10 -0
  88. package/message-client.d.ts +23 -0
  89. package/message-client.js +8 -0
  90. package/message-client.js.map +1 -0
  91. package/message-host.cjs +58 -0
  92. package/message-host.d.ts +26 -0
  93. package/message-host.js +56 -0
  94. package/message-host.js.map +1 -0
  95. package/message-response.type.cjs +2 -0
  96. package/message-response.type.d.ts +14 -0
  97. package/message-response.type.js +3 -0
  98. package/message-response.type.js.map +1 -0
  99. package/message.interface.cjs +2 -0
  100. package/message.interface.d.ts +6 -0
  101. package/message.interface.js +3 -0
  102. package/message.interface.js.map +1 -0
  103. package/package.json +158 -0
  104. package/request.decorator.cjs +20 -0
  105. package/request.decorator.d.ts +1 -0
  106. package/request.decorator.js +19 -0
  107. package/request.decorator.js.map +1 -0
  108. package/selectors.cjs +10 -0
  109. package/selectors.d.ts +7 -0
  110. package/selectors.js +9 -0
  111. package/selectors.js.map +1 -0
  112. package/worker/index.cjs +13 -0
  113. package/worker/index.d.ts +5 -0
  114. package/worker/index.js +7 -0
  115. package/worker/index.js.map +1 -0
  116. package/worker/message-client.cjs +174 -0
  117. package/worker/message-client.d.ts +117 -0
  118. package/worker/message-client.js +172 -0
  119. package/worker/message-client.js.map +1 -0
  120. package/worker/message-host.cjs +41 -0
  121. package/worker/message-host.d.ts +9 -0
  122. package/worker/message-host.js +39 -0
  123. package/worker/message-host.js.map +1 -0
  124. package/worker/message-service.cjs +12 -0
  125. package/worker/message-service.d.ts +8 -0
  126. package/worker/message-service.js +10 -0
  127. package/worker/message-service.js.map +1 -0
@@ -0,0 +1,172 @@
1
+ import { uniqueId } from "@thalesrc/js-utils/unique-id";
2
+ import { noop } from "@thalesrc/js-utils/function/noop";
3
+ import { promisify } from '@thalesrc/js-utils/promise/promisify';
4
+ import { Subject } from "rxjs";
5
+ import { MessageClient } from "../message-client";
6
+ import { GET_NEW_ID, RESPONSES$, SEND } from "../selectors";
7
+ /**
8
+ * WorkerMessageClient
9
+ *
10
+ * Client implementation for Web Worker communication. Sends messages to and receives
11
+ * responses from Web Workers using the Worker postMessage API.
12
+ *
13
+ * This class can be used in two contexts:
14
+ * - **Main thread**: Provide a Worker instance to communicate with that specific worker
15
+ * - **Worker thread**: Omit the worker parameter to communicate with the main thread via self
16
+ *
17
+ * The worker parameter supports multiple types for flexibility:
18
+ * - Direct Worker instance
19
+ * - Promise that resolves to a Worker (for async worker initialization)
20
+ * - Function that returns a Worker (for lazy initialization)
21
+ * - Function that returns a Promise<Worker> (for async lazy initialization)
22
+ *
23
+ * The `initialize()` method allows dynamic worker management, enabling you to switch
24
+ * workers at runtime or re-establish connections after errors.
25
+ *
26
+ * @example
27
+ * // In main thread - communicate with a specific worker
28
+ * const worker = new Worker('./worker.js');
29
+ * const client = new WorkerMessageClient(worker);
30
+ *
31
+ * @example
32
+ * // In worker thread - communicate with main thread
33
+ * const client = new WorkerMessageClient();
34
+ *
35
+ * @example
36
+ * // With async worker initialization
37
+ * const workerPromise = import('./worker.js').then(m => new m.MyWorker());
38
+ * const client = new WorkerMessageClient(workerPromise);
39
+ *
40
+ * @example
41
+ * // With lazy initialization
42
+ * const client = new WorkerMessageClient(() =>
43
+ * document.querySelector('[data-worker]') ? new Worker('./worker.js') : undefined
44
+ * );
45
+ *
46
+ * @example
47
+ * // Re-initialize with a different worker
48
+ * const client = new WorkerMessageClient();
49
+ * // Later, switch to a different worker
50
+ * client.initialize(new Worker('./different-worker.js'));
51
+ */
52
+ export class WorkerMessageClient extends MessageClient {
53
+ /**
54
+ * Promise resolving to the Worker instance or undefined if running in worker context
55
+ * @private
56
+ */
57
+ #worker = Promise.resolve(undefined);
58
+ /**
59
+ * Unique identifier for this client instance to prevent ID collisions
60
+ * @private
61
+ */
62
+ #instanceId = Date.now();
63
+ /**
64
+ * Observable stream of message responses from the worker or main thread
65
+ */
66
+ [RESPONSES$] = new Subject();
67
+ /**
68
+ * Creates a new WorkerMessageClient instance
69
+ *
70
+ * @param worker - Optional worker configuration:
71
+ * - Worker: Direct worker instance (main thread)
72
+ * - Promise<Worker>: Promise resolving to worker (async initialization)
73
+ * - () => Worker: Function returning worker (lazy initialization)
74
+ * - () => Promise<Worker>: Function returning promise (async lazy initialization)
75
+ * - undefined: Omit for worker thread context (uses self)
76
+ */
77
+ constructor(worker) {
78
+ super();
79
+ this.initialize(worker);
80
+ }
81
+ /**
82
+ * Initializes or re-initializes the worker connection.
83
+ *
84
+ * This method sets up message listeners for the provided worker. If a worker
85
+ * was previously initialized, it cleans up the old connection before establishing
86
+ * the new one. This allows for dynamic worker management, such as:
87
+ * - Switching between different workers at runtime
88
+ * - Re-establishing connections after worker errors
89
+ * - Lazy initialization when the worker is conditionally needed
90
+ *
91
+ * @param worker - Optional worker configuration:
92
+ * - Worker: Direct worker instance (main thread)
93
+ * - Promise<Worker>: Promise resolving to worker (async initialization)
94
+ * - () => Worker: Function returning worker (lazy initialization)
95
+ * - () => Promise<Worker>: Function returning promise (async lazy initialization)
96
+ * - undefined: Omit for worker thread context (uses self)
97
+ *
98
+ * @example
99
+ * // Switch to a different worker dynamically
100
+ * const client = new WorkerMessageClient(oldWorker);
101
+ * client.initialize(newWorker); // Cleans up old listener, sets up new one
102
+ *
103
+ * @example
104
+ * // Re-initialize after worker error
105
+ * worker.onerror = () => {
106
+ * client.initialize(new Worker('./worker.js'));
107
+ * };
108
+ */
109
+ initialize(worker) {
110
+ // Deinitialize previous worker if any
111
+ this.#worker.then(prevWorker => {
112
+ if (prevWorker) {
113
+ prevWorker.removeEventListener('message', this.#handler);
114
+ }
115
+ else {
116
+ removeEventListener('message', this.#handler);
117
+ }
118
+ }).catch(noop);
119
+ // Resolve worker parameter: execute function if provided, otherwise use value directly
120
+ const _worker = typeof worker === 'function' ? worker() : worker;
121
+ // Ensure worker is wrapped in a promise for consistent async handling
122
+ this.#worker = promisify(_worker);
123
+ // Set up message listener once worker is resolved
124
+ this.#worker.then(worker => {
125
+ if (worker) {
126
+ // Main thread context: listen to specific worker
127
+ worker.addEventListener('message', this.#handler);
128
+ }
129
+ else {
130
+ // Worker thread context: listen to messages from main thread
131
+ addEventListener('message', this.#handler);
132
+ }
133
+ }).catch(noop);
134
+ }
135
+ /**
136
+ * Sends a message to the worker or main thread
137
+ *
138
+ * @param message - The message to send
139
+ * @template T - Type of the message body
140
+ * @internal Used by @Request decorator
141
+ */
142
+ [SEND](message) {
143
+ this.#worker.then(worker => {
144
+ if (worker) {
145
+ // Main thread: send to worker
146
+ worker.postMessage(message);
147
+ }
148
+ else {
149
+ // Worker thread: send to main thread
150
+ postMessage(message);
151
+ }
152
+ }).catch(noop);
153
+ }
154
+ /**
155
+ * Handles incoming messages and forwards them to the responses stream
156
+ * @private
157
+ */
158
+ #handler = (event) => {
159
+ this[RESPONSES$].next(event.data);
160
+ };
161
+ /**
162
+ * Generates a unique message ID for tracking request-response pairs
163
+ *
164
+ * @returns Unique message identifier
165
+ * @internal Used by @Request decorator
166
+ */
167
+ [GET_NEW_ID]() {
168
+ return uniqueId('hermes-worker-message-' + this.#instanceId);
169
+ }
170
+ }
171
+
172
+ //# sourceMappingURL=message-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../libs/hermes/src/worker/message-client.ts"],"names":[],"mappings":"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","file":"message-client.js","sourcesContent":["import { uniqueId } from \"@thalesrc/js-utils/unique-id\";\nimport { noop } from \"@thalesrc/js-utils/function/noop\";\nimport { promisify } from '@thalesrc/js-utils/promise/promisify';\nimport { Subject } from \"rxjs\";\nimport { MessageClient } from \"../message-client\";\nimport { MessageResponse } from \"../message-response.type\";\nimport { Message } from \"../message.interface\";\nimport { GET_NEW_ID, RESPONSES$, SEND } from \"../selectors\";\n\ntype ClientWorkerType = Worker | undefined;\ntype ClientWorkerPromise = Promise<ClientWorkerType>;\ntype ClientWorkerFactory = () => ClientWorkerType | ClientWorkerPromise;\ntype ClientWorkerArg = ClientWorkerType | ClientWorkerPromise | ClientWorkerFactory;\n\n/**\n * WorkerMessageClient\n *\n * Client implementation for Web Worker communication. Sends messages to and receives\n * responses from Web Workers using the Worker postMessage API.\n *\n * This class can be used in two contexts:\n * - **Main thread**: Provide a Worker instance to communicate with that specific worker\n * - **Worker thread**: Omit the worker parameter to communicate with the main thread via self\n *\n * The worker parameter supports multiple types for flexibility:\n * - Direct Worker instance\n * - Promise that resolves to a Worker (for async worker initialization)\n * - Function that returns a Worker (for lazy initialization)\n * - Function that returns a Promise<Worker> (for async lazy initialization)\n *\n * The `initialize()` method allows dynamic worker management, enabling you to switch\n * workers at runtime or re-establish connections after errors.\n *\n * @example\n * // In main thread - communicate with a specific worker\n * const worker = new Worker('./worker.js');\n * const client = new WorkerMessageClient(worker);\n *\n * @example\n * // In worker thread - communicate with main thread\n * const client = new WorkerMessageClient();\n *\n * @example\n * // With async worker initialization\n * const workerPromise = import('./worker.js').then(m => new m.MyWorker());\n * const client = new WorkerMessageClient(workerPromise);\n *\n * @example\n * // With lazy initialization\n * const client = new WorkerMessageClient(() =>\n * document.querySelector('[data-worker]') ? new Worker('./worker.js') : undefined\n * );\n *\n * @example\n * // Re-initialize with a different worker\n * const client = new WorkerMessageClient();\n * // Later, switch to a different worker\n * client.initialize(new Worker('./different-worker.js'));\n */\nexport class WorkerMessageClient extends MessageClient {\n /**\n * Promise resolving to the Worker instance or undefined if running in worker context\n * @private\n */\n #worker: ClientWorkerPromise = Promise.resolve(undefined);\n\n /**\n * Unique identifier for this client instance to prevent ID collisions\n * @private\n */\n #instanceId = Date.now();\n\n /**\n * Observable stream of message responses from the worker or main thread\n */\n public [RESPONSES$] = new Subject<MessageResponse>();\n\n /**\n * Creates a new WorkerMessageClient instance\n *\n * @param worker - Optional worker configuration:\n * - Worker: Direct worker instance (main thread)\n * - Promise<Worker>: Promise resolving to worker (async initialization)\n * - () => Worker: Function returning worker (lazy initialization)\n * - () => Promise<Worker>: Function returning promise (async lazy initialization)\n * - undefined: Omit for worker thread context (uses self)\n */\n constructor(worker?: ClientWorkerArg) {\n super();\n\n this.initialize(worker);\n }\n\n /**\n * Initializes or re-initializes the worker connection.\n *\n * This method sets up message listeners for the provided worker. If a worker\n * was previously initialized, it cleans up the old connection before establishing\n * the new one. This allows for dynamic worker management, such as:\n * - Switching between different workers at runtime\n * - Re-establishing connections after worker errors\n * - Lazy initialization when the worker is conditionally needed\n *\n * @param worker - Optional worker configuration:\n * - Worker: Direct worker instance (main thread)\n * - Promise<Worker>: Promise resolving to worker (async initialization)\n * - () => Worker: Function returning worker (lazy initialization)\n * - () => Promise<Worker>: Function returning promise (async lazy initialization)\n * - undefined: Omit for worker thread context (uses self)\n *\n * @example\n * // Switch to a different worker dynamically\n * const client = new WorkerMessageClient(oldWorker);\n * client.initialize(newWorker); // Cleans up old listener, sets up new one\n *\n * @example\n * // Re-initialize after worker error\n * worker.onerror = () => {\n * client.initialize(new Worker('./worker.js'));\n * };\n */\n initialize(worker?: ClientWorkerArg) {\n // Deinitialize previous worker if any\n this.#worker.then(prevWorker => {\n if (prevWorker) {\n prevWorker.removeEventListener('message', this.#handler);\n } else {\n removeEventListener('message', this.#handler);\n }\n }).catch(noop);\n\n // Resolve worker parameter: execute function if provided, otherwise use value directly\n const _worker: ClientWorkerType | ClientWorkerPromise | undefined = typeof worker === 'function' ? worker() : worker;\n // Ensure worker is wrapped in a promise for consistent async handling\n this.#worker = promisify(_worker);\n\n // Set up message listener once worker is resolved\n this.#worker.then(worker => {\n if (worker) {\n // Main thread context: listen to specific worker\n worker.addEventListener('message', this.#handler);\n } else {\n // Worker thread context: listen to messages from main thread\n addEventListener('message', this.#handler);\n }\n }).catch(noop);\n }\n\n /**\n * Sends a message to the worker or main thread\n *\n * @param message - The message to send\n * @template T - Type of the message body\n * @internal Used by @Request decorator\n */\n public [SEND]<T>(message: Message<T>) {\n this.#worker.then(worker => {\n if (worker) {\n // Main thread: send to worker\n worker.postMessage(message);\n } else {\n // Worker thread: send to main thread\n (postMessage as any)(message);\n }\n }).catch(noop);\n }\n\n /**\n * Handles incoming messages and forwards them to the responses stream\n * @private\n */\n #handler = (event: MessageEvent<MessageResponse>) => {\n this[RESPONSES$].next(event.data);\n }\n\n /**\n * Generates a unique message ID for tracking request-response pairs\n *\n * @returns Unique message identifier\n * @internal Used by @Request decorator\n */\n protected [GET_NEW_ID](): string {\n return uniqueId('hermes-worker-message-' + this.#instanceId) as string;\n }\n}\n"]}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkerMessageHost = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const message_host_1 = require("../message-host");
6
+ const selectors_1 = require("../selectors");
7
+ class WorkerMessageHost extends message_host_1.MessageHost {
8
+ #requests$ = new rxjs_1.Subject();
9
+ #worker;
10
+ constructor(worker) {
11
+ super();
12
+ if (worker) {
13
+ this.#worker = worker;
14
+ worker.addEventListener('message', this.#handler);
15
+ }
16
+ else {
17
+ addEventListener('message', this.#handler);
18
+ }
19
+ this[selectors_1.LISTEN](this.#requests$);
20
+ }
21
+ [selectors_1.RESPONSE](message) {
22
+ if (this.#worker) {
23
+ this.#worker.postMessage(message);
24
+ }
25
+ else {
26
+ postMessage(message);
27
+ }
28
+ }
29
+ terminate() {
30
+ if (this.#worker) {
31
+ this.#worker.removeEventListener('message', this.#handler);
32
+ }
33
+ else {
34
+ removeEventListener('message', this.#handler);
35
+ }
36
+ }
37
+ #handler = (event) => {
38
+ this.#requests$.next(event.data);
39
+ };
40
+ }
41
+ exports.WorkerMessageHost = WorkerMessageHost;
@@ -0,0 +1,9 @@
1
+ import { MessageHost } from "../message-host";
2
+ import { MessageResponse } from "../message-response.type";
3
+ import { RESPONSE } from "../selectors";
4
+ export declare class WorkerMessageHost extends MessageHost {
5
+ #private;
6
+ constructor(worker?: Worker);
7
+ protected [RESPONSE](message: MessageResponse): void;
8
+ terminate(): void;
9
+ }
@@ -0,0 +1,39 @@
1
+ import { Subject } from "rxjs";
2
+ import { MessageHost } from "../message-host";
3
+ import { LISTEN, RESPONSE } from "../selectors";
4
+ export class WorkerMessageHost extends MessageHost {
5
+ #requests$ = new Subject();
6
+ #worker;
7
+ constructor(worker) {
8
+ super();
9
+ if (worker) {
10
+ this.#worker = worker;
11
+ worker.addEventListener('message', this.#handler);
12
+ }
13
+ else {
14
+ addEventListener('message', this.#handler);
15
+ }
16
+ this[LISTEN](this.#requests$);
17
+ }
18
+ [RESPONSE](message) {
19
+ if (this.#worker) {
20
+ this.#worker.postMessage(message);
21
+ }
22
+ else {
23
+ postMessage(message);
24
+ }
25
+ }
26
+ terminate() {
27
+ if (this.#worker) {
28
+ this.#worker.removeEventListener('message', this.#handler);
29
+ }
30
+ else {
31
+ removeEventListener('message', this.#handler);
32
+ }
33
+ }
34
+ #handler = (event) => {
35
+ this.#requests$.next(event.data);
36
+ };
37
+ }
38
+
39
+ //# sourceMappingURL=message-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../libs/hermes/src/worker/message-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAChD,UAAU,GAAG,IAAI,OAAO,EAAW,CAAC;IACpC,OAAO,CAAqB;IAE5B,YAAY,MAAe;QACzB,KAAK,EAAE,CAAC;QAER,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAES,CAAC,QAAQ,CAAC,CAAC,OAAwB;QAC3C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACL,WAAmB,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAEM,SAAS;QACd,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,QAAQ,GAAG,CAAC,KAA4B,EAAE,EAAE;QAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAA;CACF","file":"message-host.js","sourcesContent":["import { Subject } from \"rxjs\";\nimport { MessageHost } from \"../message-host\";\nimport { MessageResponse } from \"../message-response.type\";\nimport { Message } from \"../message.interface\";\nimport { LISTEN, RESPONSE } from \"../selectors\";\n\ninterface MessageEvent<T> {\n data: T;\n}\n\nexport class WorkerMessageHost extends MessageHost {\n #requests$ = new Subject<Message>();\n #worker: Worker | undefined;\n\n constructor(worker?: Worker) {\n super();\n\n if (worker) {\n this.#worker = worker;\n worker.addEventListener('message', this.#handler);\n } else {\n addEventListener('message', this.#handler);\n }\n\n this[LISTEN](this.#requests$);\n }\n\n protected [RESPONSE](message: MessageResponse) {\n if (this.#worker) {\n this.#worker.postMessage(message);\n } else {\n (postMessage as any)(message);\n }\n }\n\n public terminate() {\n if (this.#worker) {\n this.#worker.removeEventListener('message', this.#handler);\n } else {\n removeEventListener('message', this.#handler);\n }\n }\n\n #handler = (event: MessageEvent<Message>) => {\n this.#requests$.next(event.data);\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkerMessageService = void 0;
4
+ const mixin_1 = require("@thalesrc/js-utils/class/mixin");
5
+ const message_client_1 = require("./message-client");
6
+ const message_host_1 = require("./message-host");
7
+ class WorkerMessageService extends (0, mixin_1.mixin)(message_host_1.WorkerMessageHost, message_client_1.WorkerMessageClient) {
8
+ constructor(worker) {
9
+ super([worker], [worker]);
10
+ }
11
+ }
12
+ exports.WorkerMessageService = WorkerMessageService;
@@ -0,0 +1,8 @@
1
+ import { WorkerMessageClient } from "./message-client";
2
+ declare const WorkerMessageService_base: new (args_0: [worker?: Worker | undefined], args_1: [worker?: (Worker | undefined) | Promise<Worker | undefined> | (() => (Worker | undefined) | Promise<Worker | undefined>)]) => {
3
+ terminate: () => void;
4
+ } & WorkerMessageClient;
5
+ export declare class WorkerMessageService extends WorkerMessageService_base {
6
+ constructor(worker?: Worker);
7
+ }
8
+ export {};
@@ -0,0 +1,10 @@
1
+ import { mixin } from "@thalesrc/js-utils/class/mixin";
2
+ import { WorkerMessageClient } from "./message-client";
3
+ import { WorkerMessageHost } from "./message-host";
4
+ export class WorkerMessageService extends mixin(WorkerMessageHost, WorkerMessageClient) {
5
+ constructor(worker) {
6
+ super([worker], [worker]);
7
+ }
8
+ }
9
+
10
+ //# sourceMappingURL=message-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../libs/hermes/src/worker/message-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,OAAO,oBAAqB,SAAQ,KAAK,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;IACrF,YAAY,MAAe;QACzB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5B,CAAC;CACF","file":"message-service.js","sourcesContent":["import { mixin } from \"@thalesrc/js-utils/class/mixin\";\nimport { WorkerMessageClient } from \"./message-client\";\nimport { WorkerMessageHost } from \"./message-host\";\n\nexport class WorkerMessageService extends mixin(WorkerMessageHost, WorkerMessageClient) {\n constructor(worker?: Worker) {\n super([worker], [worker]);\n }\n}\n"]}