@ariestools/threads 8.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 (209) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +946 -0
  3. package/dist/browser/common.d.ts +22 -0
  4. package/dist/browser/common.d.ts.map +1 -0
  5. package/dist/browser/index-browser.d.ts +9 -0
  6. package/dist/browser/index-browser.d.ts.map +1 -0
  7. package/dist/browser/index-browser.mjs +844 -0
  8. package/dist/browser/index-browser.mjs.map +7 -0
  9. package/dist/browser/index-node.d.ts +9 -0
  10. package/dist/browser/index-node.d.ts.map +1 -0
  11. package/dist/browser/isObservable.d.ts +2 -0
  12. package/dist/browser/isObservable.d.ts.map +1 -0
  13. package/dist/browser/master/get-bundle-url.browser.d.ts +4 -0
  14. package/dist/browser/master/get-bundle-url.browser.d.ts.map +1 -0
  15. package/dist/browser/master/implementation.browser.d.ts +14 -0
  16. package/dist/browser/master/implementation.browser.d.ts.map +1 -0
  17. package/dist/browser/master/implementation.browser.mjs +90 -0
  18. package/dist/browser/master/implementation.browser.mjs.map +7 -0
  19. package/dist/browser/master/implementation.node.d.ts +14 -0
  20. package/dist/browser/master/implementation.node.d.ts.map +1 -0
  21. package/dist/browser/master/index-browser.d.ts +13 -0
  22. package/dist/browser/master/index-browser.d.ts.map +1 -0
  23. package/dist/browser/master/index-browser.mjs +813 -0
  24. package/dist/browser/master/index-browser.mjs.map +7 -0
  25. package/dist/browser/master/index-node.d.ts +13 -0
  26. package/dist/browser/master/index-node.d.ts.map +1 -0
  27. package/dist/browser/master/invocation-proxy.d.ts +16 -0
  28. package/dist/browser/master/invocation-proxy.d.ts.map +1 -0
  29. package/dist/browser/master/pool-browser.d.ts +93 -0
  30. package/dist/browser/master/pool-browser.d.ts.map +1 -0
  31. package/dist/browser/master/pool-browser.mjs +308 -0
  32. package/dist/browser/master/pool-browser.mjs.map +7 -0
  33. package/dist/browser/master/pool-node.d.ts +93 -0
  34. package/dist/browser/master/pool-node.d.ts.map +1 -0
  35. package/dist/browser/master/pool-types.d.ts +68 -0
  36. package/dist/browser/master/pool-types.d.ts.map +1 -0
  37. package/dist/browser/master/register.d.ts +2 -0
  38. package/dist/browser/master/register.d.ts.map +1 -0
  39. package/dist/browser/master/spawn.d.ts +22 -0
  40. package/dist/browser/master/spawn.d.ts.map +1 -0
  41. package/dist/browser/master/thread.d.ts +14 -0
  42. package/dist/browser/master/thread.d.ts.map +1 -0
  43. package/dist/browser/observable-promise.d.ts +41 -0
  44. package/dist/browser/observable-promise.d.ts.map +1 -0
  45. package/dist/browser/observable.d.ts +24 -0
  46. package/dist/browser/observable.d.ts.map +1 -0
  47. package/dist/browser/promise.d.ts +6 -0
  48. package/dist/browser/promise.d.ts.map +1 -0
  49. package/dist/browser/serializers.d.ts +27 -0
  50. package/dist/browser/serializers.d.ts.map +1 -0
  51. package/dist/browser/symbols.d.ts +11 -0
  52. package/dist/browser/symbols.d.ts.map +1 -0
  53. package/dist/browser/transferable.d.ts +49 -0
  54. package/dist/browser/transferable.d.ts.map +1 -0
  55. package/dist/browser/types/master.d.ts +111 -0
  56. package/dist/browser/types/master.d.ts.map +1 -0
  57. package/dist/browser/types/messages.d.ts +71 -0
  58. package/dist/browser/types/messages.d.ts.map +1 -0
  59. package/dist/browser/types/worker.d.ts +13 -0
  60. package/dist/browser/types/worker.d.ts.map +1 -0
  61. package/dist/browser/worker/WorkerGlobalScope.d.ts +7 -0
  62. package/dist/browser/worker/WorkerGlobalScope.d.ts.map +1 -0
  63. package/dist/browser/worker/expose.d.ts +10 -0
  64. package/dist/browser/worker/expose.d.ts.map +1 -0
  65. package/dist/browser/worker/worker.browser.d.ts +20 -0
  66. package/dist/browser/worker/worker.browser.d.ts.map +1 -0
  67. package/dist/browser/worker/worker.browser.mjs +300 -0
  68. package/dist/browser/worker/worker.browser.mjs.map +7 -0
  69. package/dist/browser/worker/worker.node.d.ts +34 -0
  70. package/dist/browser/worker/worker.node.d.ts.map +1 -0
  71. package/dist/neutral/common.d.ts +22 -0
  72. package/dist/neutral/common.d.ts.map +1 -0
  73. package/dist/neutral/index-browser.d.ts +9 -0
  74. package/dist/neutral/index-browser.d.ts.map +1 -0
  75. package/dist/neutral/index-node.d.ts +9 -0
  76. package/dist/neutral/index-node.d.ts.map +1 -0
  77. package/dist/neutral/isObservable.d.ts +2 -0
  78. package/dist/neutral/isObservable.d.ts.map +1 -0
  79. package/dist/neutral/master/get-bundle-url.browser.d.ts +4 -0
  80. package/dist/neutral/master/get-bundle-url.browser.d.ts.map +1 -0
  81. package/dist/neutral/master/implementation.browser.d.ts +14 -0
  82. package/dist/neutral/master/implementation.browser.d.ts.map +1 -0
  83. package/dist/neutral/master/implementation.node.d.ts +14 -0
  84. package/dist/neutral/master/implementation.node.d.ts.map +1 -0
  85. package/dist/neutral/master/index-browser.d.ts +13 -0
  86. package/dist/neutral/master/index-browser.d.ts.map +1 -0
  87. package/dist/neutral/master/index-node.d.ts +13 -0
  88. package/dist/neutral/master/index-node.d.ts.map +1 -0
  89. package/dist/neutral/master/invocation-proxy.d.ts +16 -0
  90. package/dist/neutral/master/invocation-proxy.d.ts.map +1 -0
  91. package/dist/neutral/master/pool-browser.d.ts +93 -0
  92. package/dist/neutral/master/pool-browser.d.ts.map +1 -0
  93. package/dist/neutral/master/pool-node.d.ts +93 -0
  94. package/dist/neutral/master/pool-node.d.ts.map +1 -0
  95. package/dist/neutral/master/pool-types.d.ts +68 -0
  96. package/dist/neutral/master/pool-types.d.ts.map +1 -0
  97. package/dist/neutral/master/register.d.ts +2 -0
  98. package/dist/neutral/master/register.d.ts.map +1 -0
  99. package/dist/neutral/master/spawn.d.ts +22 -0
  100. package/dist/neutral/master/spawn.d.ts.map +1 -0
  101. package/dist/neutral/master/spawn.mjs +424 -0
  102. package/dist/neutral/master/spawn.mjs.map +7 -0
  103. package/dist/neutral/master/thread.d.ts +14 -0
  104. package/dist/neutral/master/thread.d.ts.map +1 -0
  105. package/dist/neutral/master/thread.mjs +24 -0
  106. package/dist/neutral/master/thread.mjs.map +7 -0
  107. package/dist/neutral/observable-promise.d.ts +41 -0
  108. package/dist/neutral/observable-promise.d.ts.map +1 -0
  109. package/dist/neutral/observable-promise.mjs +142 -0
  110. package/dist/neutral/observable-promise.mjs.map +7 -0
  111. package/dist/neutral/observable.d.ts +24 -0
  112. package/dist/neutral/observable.d.ts.map +1 -0
  113. package/dist/neutral/observable.mjs +32 -0
  114. package/dist/neutral/observable.mjs.map +7 -0
  115. package/dist/neutral/promise.d.ts +6 -0
  116. package/dist/neutral/promise.d.ts.map +1 -0
  117. package/dist/neutral/serializers.d.ts +27 -0
  118. package/dist/neutral/serializers.d.ts.map +1 -0
  119. package/dist/neutral/symbols.d.ts +11 -0
  120. package/dist/neutral/symbols.d.ts.map +1 -0
  121. package/dist/neutral/transferable.d.ts +49 -0
  122. package/dist/neutral/transferable.d.ts.map +1 -0
  123. package/dist/neutral/types/master.d.ts +111 -0
  124. package/dist/neutral/types/master.d.ts.map +1 -0
  125. package/dist/neutral/types/messages.d.ts +71 -0
  126. package/dist/neutral/types/messages.d.ts.map +1 -0
  127. package/dist/neutral/types/messages.mjs +19 -0
  128. package/dist/neutral/types/messages.mjs.map +7 -0
  129. package/dist/neutral/types/worker.d.ts +13 -0
  130. package/dist/neutral/types/worker.d.ts.map +1 -0
  131. package/dist/neutral/worker/WorkerGlobalScope.d.ts +7 -0
  132. package/dist/neutral/worker/WorkerGlobalScope.d.ts.map +1 -0
  133. package/dist/neutral/worker/expose.d.ts +10 -0
  134. package/dist/neutral/worker/expose.d.ts.map +1 -0
  135. package/dist/neutral/worker/worker.browser.d.ts +20 -0
  136. package/dist/neutral/worker/worker.browser.d.ts.map +1 -0
  137. package/dist/neutral/worker/worker.node.d.ts +34 -0
  138. package/dist/neutral/worker/worker.node.d.ts.map +1 -0
  139. package/dist/node/common.d.ts +22 -0
  140. package/dist/node/common.d.ts.map +1 -0
  141. package/dist/node/index-browser.d.ts +9 -0
  142. package/dist/node/index-browser.d.ts.map +1 -0
  143. package/dist/node/index-node.d.ts +9 -0
  144. package/dist/node/index-node.d.ts.map +1 -0
  145. package/dist/node/index-node.mjs +839 -0
  146. package/dist/node/index-node.mjs.map +7 -0
  147. package/dist/node/isObservable.d.ts +2 -0
  148. package/dist/node/isObservable.d.ts.map +1 -0
  149. package/dist/node/master/get-bundle-url.browser.d.ts +4 -0
  150. package/dist/node/master/get-bundle-url.browser.d.ts.map +1 -0
  151. package/dist/node/master/implementation.browser.d.ts +14 -0
  152. package/dist/node/master/implementation.browser.d.ts.map +1 -0
  153. package/dist/node/master/implementation.node.d.ts +14 -0
  154. package/dist/node/master/implementation.node.d.ts.map +1 -0
  155. package/dist/node/master/implementation.node.mjs +82 -0
  156. package/dist/node/master/implementation.node.mjs.map +7 -0
  157. package/dist/node/master/index-browser.d.ts +13 -0
  158. package/dist/node/master/index-browser.d.ts.map +1 -0
  159. package/dist/node/master/index-node.d.ts +13 -0
  160. package/dist/node/master/index-node.d.ts.map +1 -0
  161. package/dist/node/master/index-node.mjs +808 -0
  162. package/dist/node/master/index-node.mjs.map +7 -0
  163. package/dist/node/master/invocation-proxy.d.ts +16 -0
  164. package/dist/node/master/invocation-proxy.d.ts.map +1 -0
  165. package/dist/node/master/pool-browser.d.ts +93 -0
  166. package/dist/node/master/pool-browser.d.ts.map +1 -0
  167. package/dist/node/master/pool-node.d.ts +93 -0
  168. package/dist/node/master/pool-node.d.ts.map +1 -0
  169. package/dist/node/master/pool-node.mjs +309 -0
  170. package/dist/node/master/pool-node.mjs.map +7 -0
  171. package/dist/node/master/pool-types.d.ts +68 -0
  172. package/dist/node/master/pool-types.d.ts.map +1 -0
  173. package/dist/node/master/register.d.ts +2 -0
  174. package/dist/node/master/register.d.ts.map +1 -0
  175. package/dist/node/master/register.mjs +87 -0
  176. package/dist/node/master/register.mjs.map +7 -0
  177. package/dist/node/master/spawn.d.ts +22 -0
  178. package/dist/node/master/spawn.d.ts.map +1 -0
  179. package/dist/node/master/thread.d.ts +14 -0
  180. package/dist/node/master/thread.d.ts.map +1 -0
  181. package/dist/node/observable-promise.d.ts +41 -0
  182. package/dist/node/observable-promise.d.ts.map +1 -0
  183. package/dist/node/observable.d.ts +24 -0
  184. package/dist/node/observable.d.ts.map +1 -0
  185. package/dist/node/promise.d.ts +6 -0
  186. package/dist/node/promise.d.ts.map +1 -0
  187. package/dist/node/serializers.d.ts +27 -0
  188. package/dist/node/serializers.d.ts.map +1 -0
  189. package/dist/node/symbols.d.ts +11 -0
  190. package/dist/node/symbols.d.ts.map +1 -0
  191. package/dist/node/transferable.d.ts +49 -0
  192. package/dist/node/transferable.d.ts.map +1 -0
  193. package/dist/node/types/master.d.ts +111 -0
  194. package/dist/node/types/master.d.ts.map +1 -0
  195. package/dist/node/types/messages.d.ts +71 -0
  196. package/dist/node/types/messages.d.ts.map +1 -0
  197. package/dist/node/types/worker.d.ts +13 -0
  198. package/dist/node/types/worker.d.ts.map +1 -0
  199. package/dist/node/worker/WorkerGlobalScope.d.ts +7 -0
  200. package/dist/node/worker/WorkerGlobalScope.d.ts.map +1 -0
  201. package/dist/node/worker/expose.d.ts +10 -0
  202. package/dist/node/worker/expose.d.ts.map +1 -0
  203. package/dist/node/worker/worker.browser.d.ts +20 -0
  204. package/dist/node/worker/worker.browser.d.ts.map +1 -0
  205. package/dist/node/worker/worker.node.d.ts +34 -0
  206. package/dist/node/worker/worker.node.d.ts.map +1 -0
  207. package/dist/node/worker/worker.node.mjs +313 -0
  208. package/dist/node/worker/worker.node.mjs.map +7 -0
  209. package/package.json +147 -0
package/README.md ADDED
@@ -0,0 +1,946 @@
1
+ [![logo][]](https://xylabs.com)
2
+
3
+ # @ariestools/threads
4
+
5
+ [![npm][npm-badge]][npm-link]
6
+ [![license][license-badge]][license-link]
7
+
8
+ > Web workers & worker threads as simple as a function call
9
+
10
+ ## Install
11
+
12
+ Using npm:
13
+
14
+ ```sh
15
+ npm install {{name}}
16
+ ```
17
+
18
+ Using yarn:
19
+
20
+ ```sh
21
+ yarn add {{name}}
22
+ ```
23
+
24
+ Using pnpm:
25
+
26
+ ```sh
27
+ pnpm add {{name}}
28
+ ```
29
+
30
+ Using bun:
31
+
32
+ ```sh
33
+ bun add {{name}}
34
+ ```
35
+
36
+
37
+ ## License
38
+
39
+ See the [LICENSE](LICENSE) file for license rights and limitations (LGPL-3.0-only).
40
+
41
+ ## Reference
42
+
43
+ ### packages
44
+
45
+ ### threads
46
+
47
+ ### .temp-typedoc
48
+
49
+ ### index-browser
50
+
51
+ ### functions
52
+
53
+ ### <a id="Transfer"></a>Transfer
54
+
55
+ [**@ariestools/threads**](#../../README)
56
+
57
+ ***
58
+
59
+ ## Call Signature
60
+
61
+ ```ts
62
+ function Transfer(transferable): TransferDescriptor;
63
+ ```
64
+
65
+ Mark a transferable object as such, so it will no be serialized and
66
+ deserialized on messaging with the main thread, but to transfer
67
+ ownership of it to the receiving thread.
68
+
69
+ Only works with array buffers, message ports and few more special
70
+ types of objects, but it's much faster than serializing and
71
+ deserializing them.
72
+
73
+ Note:
74
+ The transferable object cannot be accessed by this thread again
75
+ unless the receiving thread transfers it back again!
76
+
77
+ ### Parameters
78
+
79
+ ### transferable
80
+
81
+ `Transferable`
82
+
83
+ Array buffer, message port or similar.
84
+
85
+ ### Returns
86
+
87
+ [`TransferDescriptor`](#../interfaces/TransferDescriptor)
88
+
89
+ ### See
90
+
91
+ <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>
92
+
93
+ ## Call Signature
94
+
95
+ ```ts
96
+ function Transfer<T>(payload, transferables): TransferDescriptor;
97
+ ```
98
+
99
+ Mark transferable objects within an arbitrary object or array as
100
+ being a transferable object. They will then not be serialized
101
+ and deserialized on messaging with the main thread, but ownership
102
+ of them will be tranferred to the receiving thread.
103
+
104
+ Only array buffers, message ports and few more special types of
105
+ objects can be transferred, but it's much faster than serializing and
106
+ deserializing them.
107
+
108
+ Note:
109
+ The transferable object cannot be accessed by this thread again
110
+ unless the receiving thread transfers it back again!
111
+
112
+ ### Type Parameters
113
+
114
+ ### T
115
+
116
+ `T`
117
+
118
+ ### Parameters
119
+
120
+ ### payload
121
+
122
+ `T`
123
+
124
+ ### transferables
125
+
126
+ `Transferable`[]
127
+
128
+ ### Returns
129
+
130
+ [`TransferDescriptor`](#../interfaces/TransferDescriptor)
131
+
132
+ ### See
133
+
134
+ <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>
135
+
136
+ ### <a id="isWorkerRuntime"></a>isWorkerRuntime
137
+
138
+ [**@ariestools/threads**](#../../README)
139
+
140
+ ***
141
+
142
+ ```ts
143
+ function isWorkerRuntime(): boolean;
144
+ ```
145
+
146
+ Check whether the current code is running inside a web worker context.
147
+
148
+ ## Returns
149
+
150
+ `boolean`
151
+
152
+ True if running in a worker, false otherwise.
153
+
154
+ ### <a id="registerSerializer"></a>registerSerializer
155
+
156
+ [**@ariestools/threads**](#../../README)
157
+
158
+ ***
159
+
160
+ ```ts
161
+ function registerSerializer(serializer): void;
162
+ ```
163
+
164
+ Register a custom serializer to extend the default serialization behavior for worker messages.
165
+
166
+ ## Parameters
167
+
168
+ ### serializer
169
+
170
+ [`SerializerImplementation`](#../interfaces/SerializerImplementation)\<[`JsonSerializable`](#../type-aliases/JsonSerializable)\>
171
+
172
+ The serializer implementation to register.
173
+
174
+ ## Returns
175
+
176
+ `void`
177
+
178
+ ### <a id="spawn"></a>spawn
179
+
180
+ [**@ariestools/threads**](#../../README)
181
+
182
+ ***
183
+
184
+ ```ts
185
+ function spawn<Exposed>(worker, options?): Promise<ExposedAs<Exposed>>;
186
+ ```
187
+
188
+ Spawn a new thread. Takes a fresh worker instance, wraps it in a thin
189
+ abstraction layer to provide the transparent API and verifies that
190
+ the worker has initialized successfully.
191
+
192
+ ## Type Parameters
193
+
194
+ ### Exposed
195
+
196
+ `Exposed` *extends* `WorkerFunction` \| `WorkerModule`\<`any`\> = `ArbitraryWorkerInterface`
197
+
198
+ ## Parameters
199
+
200
+ ### worker
201
+
202
+ `Worker`
203
+
204
+ Instance of `Worker`. Either a web worker or `worker_threads` worker.
205
+
206
+ ### options?
207
+
208
+ ### timeout?
209
+
210
+ `number`
211
+
212
+ Init message timeout. Default: 10000 or set by environment variable.
213
+
214
+ ## Returns
215
+
216
+ `Promise`\<[`ExposedAs`](#../type-aliases/ExposedAs)\<`Exposed`\>\>
217
+
218
+ ### interfaces
219
+
220
+ ### <a id="Pool"></a>Pool
221
+
222
+ [**@ariestools/threads**](#../../README)
223
+
224
+ ***
225
+
226
+ Thread pool managing a set of worker threads.
227
+ Use it to queue tasks that are run on those threads with limited
228
+ concurrency.
229
+
230
+ ## Type Parameters
231
+
232
+ ### ThreadType
233
+
234
+ `ThreadType` *extends* [`Thread`](#../type-aliases/Thread)
235
+
236
+ ## Methods
237
+
238
+ ### completed()
239
+
240
+ ```ts
241
+ completed(allowResolvingImmediately?): Promise<any>;
242
+ ```
243
+
244
+ Returns a promise that resolves once the task queue is emptied.
245
+ Promise will be rejected if any task fails.
246
+
247
+ ### Parameters
248
+
249
+ #### allowResolvingImmediately?
250
+
251
+ `boolean`
252
+
253
+ Set to `true` to resolve immediately if task queue is currently empty.
254
+
255
+ ### Returns
256
+
257
+ `Promise`\<`any`\>
258
+
259
+ ***
260
+
261
+ ### settled()
262
+
263
+ ```ts
264
+ settled(allowResolvingImmediately?): Promise<Error[]>;
265
+ ```
266
+
267
+ Returns a promise that resolves once the task queue is emptied.
268
+ Failing tasks will not cause the promise to be rejected.
269
+
270
+ ### Parameters
271
+
272
+ #### allowResolvingImmediately?
273
+
274
+ `boolean`
275
+
276
+ Set to `true` to resolve immediately if task queue is currently empty.
277
+
278
+ ### Returns
279
+
280
+ `Promise`\<`Error`[]\>
281
+
282
+ ***
283
+
284
+ ### events()
285
+
286
+ ```ts
287
+ events(): Observable<PoolEvent<ThreadType>>;
288
+ ```
289
+
290
+ Returns an observable that yields pool events.
291
+
292
+ ### Returns
293
+
294
+ `Observable`\<`PoolEvent`\<`ThreadType`\>\>
295
+
296
+ ***
297
+
298
+ ### queue()
299
+
300
+ ```ts
301
+ queue<Return>(task): QueuedTask<ThreadType, Return>;
302
+ ```
303
+
304
+ Queue a task and return a promise that resolves once the task has been dequeued,
305
+ started and finished.
306
+
307
+ ### Type Parameters
308
+
309
+ #### Return
310
+
311
+ `Return`
312
+
313
+ ### Parameters
314
+
315
+ #### task
316
+
317
+ `TaskRunFunction`\<`ThreadType`, `Return`\>
318
+
319
+ An async function that takes a thread instance and invokes it.
320
+
321
+ ### Returns
322
+
323
+ [`QueuedTask`](#QueuedTask)\<`ThreadType`, `Return`\>
324
+
325
+ ***
326
+
327
+ ### terminate()
328
+
329
+ ```ts
330
+ terminate(force?): Promise<void>;
331
+ ```
332
+
333
+ Terminate all pool threads.
334
+
335
+ ### Parameters
336
+
337
+ #### force?
338
+
339
+ `boolean`
340
+
341
+ Set to `true` to kill the thread even if it cannot be stopped gracefully.
342
+
343
+ ### Returns
344
+
345
+ `Promise`\<`void`\>
346
+
347
+ ### <a id="QueuedTask"></a>QueuedTask
348
+
349
+ [**@ariestools/threads**](#../../README)
350
+
351
+ ***
352
+
353
+ Task that has been `pool.queued()`-ed.
354
+
355
+ ## Type Parameters
356
+
357
+ ### ThreadType
358
+
359
+ `ThreadType` *extends* [`Thread`](#../type-aliases/Thread)
360
+
361
+ ### Return
362
+
363
+ `Return`
364
+
365
+ ## Properties
366
+
367
+ ### then
368
+
369
+ ```ts
370
+ then: <TResult1, TResult2>(onfulfilled?, onrejected?) => Promise<TResult1 | TResult2>;
371
+ ```
372
+
373
+ `QueuedTask` is thenable, so you can `await` it.
374
+ Resolves when the task has successfully been executed. Rejects if the task fails.
375
+
376
+ Attaches callbacks for the resolution and/or rejection of the Promise.
377
+
378
+ ### Type Parameters
379
+
380
+ #### TResult1
381
+
382
+ `TResult1` = `Return`
383
+
384
+ #### TResult2
385
+
386
+ `TResult2` = `never`
387
+
388
+ ### Parameters
389
+
390
+ #### onfulfilled?
391
+
392
+ ((`value`) => `TResult1` \| `PromiseLike`\<`TResult1`\>) \| `null`
393
+
394
+ The callback to execute when the Promise is resolved.
395
+
396
+ #### onrejected?
397
+
398
+ ((`reason`) => `TResult2` \| `PromiseLike`\<`TResult2`\>) \| `null`
399
+
400
+ The callback to execute when the Promise is rejected.
401
+
402
+ ### Returns
403
+
404
+ `Promise`\<`TResult1` \| `TResult2`\>
405
+
406
+ A Promise for the completion of which ever callback is executed.
407
+
408
+ ## Methods
409
+
410
+ ### cancel()
411
+
412
+ ```ts
413
+ cancel(): void;
414
+ ```
415
+
416
+ Queued tasks can be cancelled until the pool starts running them on a worker thread.
417
+
418
+ ### Returns
419
+
420
+ `void`
421
+
422
+ ### <a id="Serializer"></a>Serializer
423
+
424
+ [**@ariestools/threads**](#../../README)
425
+
426
+ ***
427
+
428
+ A serializer that can convert between a message format and an input type.
429
+
430
+ ## Type Parameters
431
+
432
+ ### Msg
433
+
434
+ `Msg` = [`JsonSerializable`](#../type-aliases/JsonSerializable)
435
+
436
+ ### Input
437
+
438
+ `Input` = `any`
439
+
440
+ ## Methods
441
+
442
+ ### deserialize()
443
+
444
+ ```ts
445
+ deserialize(message): Input;
446
+ ```
447
+
448
+ ### Parameters
449
+
450
+ #### message
451
+
452
+ `Msg`
453
+
454
+ ### Returns
455
+
456
+ `Input`
457
+
458
+ ***
459
+
460
+ ### serialize()
461
+
462
+ ```ts
463
+ serialize(input): Msg;
464
+ ```
465
+
466
+ ### Parameters
467
+
468
+ #### input
469
+
470
+ `Input`
471
+
472
+ ### Returns
473
+
474
+ `Msg`
475
+
476
+ ### <a id="SerializerImplementation"></a>SerializerImplementation
477
+
478
+ [**@ariestools/threads**](#../../README)
479
+
480
+ ***
481
+
482
+ A serializer implementation that receives a fallback (default) serializer for chaining.
483
+
484
+ ## Type Parameters
485
+
486
+ ### Msg
487
+
488
+ `Msg` = [`JsonSerializable`](#../type-aliases/JsonSerializable)
489
+
490
+ ### Input
491
+
492
+ `Input` = `any`
493
+
494
+ ## Methods
495
+
496
+ ### deserialize()
497
+
498
+ ```ts
499
+ deserialize(message, defaultDeserialize): Input;
500
+ ```
501
+
502
+ ### Parameters
503
+
504
+ #### message
505
+
506
+ `Msg`
507
+
508
+ #### defaultDeserialize
509
+
510
+ (`msg`) => `Input`
511
+
512
+ ### Returns
513
+
514
+ `Input`
515
+
516
+ ***
517
+
518
+ ### serialize()
519
+
520
+ ```ts
521
+ serialize(input, defaultSerialize): Msg;
522
+ ```
523
+
524
+ ### Parameters
525
+
526
+ #### input
527
+
528
+ `Input`
529
+
530
+ #### defaultSerialize
531
+
532
+ (`inp`) => `Msg`
533
+
534
+ ### Returns
535
+
536
+ `Msg`
537
+
538
+ ### <a id="TransferDescriptor"></a>TransferDescriptor
539
+
540
+ [**@ariestools/threads**](#../../README)
541
+
542
+ ***
543
+
544
+ Descriptor wrapping a value with its associated transferable objects for zero-copy messaging.
545
+
546
+ ## Type Parameters
547
+
548
+ ### T
549
+
550
+ `T` = `any`
551
+
552
+ ## Properties
553
+
554
+ ### \[$transferable\]
555
+
556
+ ```ts
557
+ [$transferable]: true;
558
+ ```
559
+
560
+ ***
561
+
562
+ ### send
563
+
564
+ ```ts
565
+ send: T;
566
+ ```
567
+
568
+ ***
569
+
570
+ ### transferables
571
+
572
+ ```ts
573
+ transferables: Transferable[];
574
+ ```
575
+
576
+ ### namespaces
577
+
578
+ ### Pool
579
+
580
+ ### type-aliases
581
+
582
+ ### <a id="Event"></a>Event
583
+
584
+ [**@ariestools/threads**](#../../../../README)
585
+
586
+ ***
587
+
588
+ ```ts
589
+ type Event<ThreadType> = PoolEvent<ThreadType>;
590
+ ```
591
+
592
+ ## Type Parameters
593
+
594
+ ### ThreadType
595
+
596
+ `ThreadType` *extends* [`Thread`](#../../../type-aliases/Thread) = `any`
597
+
598
+ ### <a id="EventType"></a>EventType
599
+
600
+ [**@ariestools/threads**](#../../../../README)
601
+
602
+ ***
603
+
604
+ ```ts
605
+ type EventType = PoolEventType;
606
+ ```
607
+
608
+ ### type-aliases
609
+
610
+ ### <a id="BlobWorker"></a>BlobWorker
611
+
612
+ [**@ariestools/threads**](#../../README)
613
+
614
+ ***
615
+
616
+ ```ts
617
+ type BlobWorker = typeof BlobWorkerClass;
618
+ ```
619
+
620
+ Separate class to spawn workers from source code blobs or strings.
621
+
622
+ ### <a id="ExposedAs"></a>ExposedAs
623
+
624
+ [**@ariestools/threads**](#../../README)
625
+
626
+ ***
627
+
628
+ ```ts
629
+ type ExposedAs<Exposed> = Exposed extends ArbitraryWorkerInterface ? ArbitraryThreadType : Exposed extends WorkerFunction ? FunctionThread<Parameters<Exposed>, StripAsync<ReturnType<Exposed>>> : Exposed extends WorkerModule<any> ? ModuleThread<Exposed> : never;
630
+ ```
631
+
632
+ Maps a worker's exposed API type to its corresponding thread type (`FunctionThread` or `ModuleThread`).
633
+
634
+ ## Type Parameters
635
+
636
+ ### Exposed
637
+
638
+ `Exposed` *extends* `WorkerFunction` \| `WorkerModule`\<`any`\>
639
+
640
+ ### <a id="FunctionThread"></a>FunctionThread
641
+
642
+ [**@ariestools/threads**](#../../README)
643
+
644
+ ***
645
+
646
+ ```ts
647
+ type FunctionThread<Args, ReturnType> = ProxyableFunction<Args, ReturnType> & PrivateThreadProps;
648
+ ```
649
+
650
+ A thread wrapping a single exposed function.
651
+
652
+ ## Type Parameters
653
+
654
+ ### Args
655
+
656
+ `Args` *extends* `any`[] = `any`[]
657
+
658
+ ### ReturnType
659
+
660
+ `ReturnType` = `any`
661
+
662
+ ### <a id="JsonSerializable"></a>JsonSerializable
663
+
664
+ [**@ariestools/threads**](#../../README)
665
+
666
+ ***
667
+
668
+ ```ts
669
+ type JsonSerializable =
670
+ | JsonSerializablePrimitive
671
+ | JsonSerializablePrimitive[]
672
+ | JsonSerializableObject
673
+ | JsonSerializableObject[];
674
+ ```
675
+
676
+ A JSON-compatible value that can be serialized for worker message passing.
677
+
678
+ ### <a id="ModuleThread"></a>ModuleThread
679
+
680
+ [**@ariestools/threads**](#../../README)
681
+
682
+ ***
683
+
684
+ ```ts
685
+ type ModuleThread<Methods> = ModuleProxy<Methods> & PrivateThreadProps;
686
+ ```
687
+
688
+ A thread wrapping an exposed module of functions.
689
+
690
+ ## Type Parameters
691
+
692
+ ### Methods
693
+
694
+ `Methods` *extends* `ModuleMethods` = `any`
695
+
696
+ ### <a id="Thread"></a>Thread
697
+
698
+ [**@ariestools/threads**](#../../README)
699
+
700
+ ***
701
+
702
+ ```ts
703
+ type Thread = ThreadType;
704
+ ```
705
+
706
+ Re-exported Thread type from the master types module.
707
+
708
+ ### <a id="Worker"></a>Worker
709
+
710
+ [**@ariestools/threads**](#../../README)
711
+
712
+ ***
713
+
714
+ ```ts
715
+ type Worker = WorkerType;
716
+ ```
717
+
718
+ Worker implementation. Either web worker or a node.js Worker class.
719
+
720
+ ### variables
721
+
722
+ ### <a id="BlobWorker"></a>BlobWorker
723
+
724
+ [**@ariestools/threads**](#../../README)
725
+
726
+ ***
727
+
728
+ ```ts
729
+ BlobWorker: typeof BlobWorker;
730
+ ```
731
+
732
+ Separate class to spawn workers from source code blobs or strings.
733
+
734
+ ### <a id="DefaultSerializer"></a>DefaultSerializer
735
+
736
+ [**@ariestools/threads**](#../../README)
737
+
738
+ ***
739
+
740
+ ```ts
741
+ const DefaultSerializer: Serializer<JsonSerializable>;
742
+ ```
743
+
744
+ Default serializer that handles Error instances and passes other values through.
745
+
746
+ ### <a id="Pool"></a>Pool
747
+
748
+ [**@ariestools/threads**](#../../README)
749
+
750
+ ***
751
+
752
+ ```ts
753
+ Pool: <ThreadType>(spawnWorker, optionsOrSize?) => WorkerPool<ThreadType> & object;
754
+ ```
755
+
756
+ Thread pool constructor. Creates a new pool and spawns its worker threads.
757
+
758
+ ## Type Declaration
759
+
760
+ ### EventType
761
+
762
+ ```ts
763
+ EventType: typeof PoolEventType;
764
+ ```
765
+
766
+ ### <a id="Thread"></a>Thread
767
+
768
+ [**@ariestools/threads**](#../../README)
769
+
770
+ ***
771
+
772
+ ```ts
773
+ Thread: object;
774
+ ```
775
+
776
+ Thread utility functions. Use them to manage or inspect a `spawn()`-ed thread.
777
+
778
+ ## Type Declaration
779
+
780
+ ### errors()
781
+
782
+ ```ts
783
+ errors<ThreadT>(thread): Observable<Error>;
784
+ ```
785
+
786
+ Return an observable that can be used to subscribe to all errors happening in the thread.
787
+
788
+ ### Type Parameters
789
+
790
+ #### ThreadT
791
+
792
+ `ThreadT` *extends* `Thread`
793
+
794
+ ### Parameters
795
+
796
+ #### thread
797
+
798
+ `ThreadT`
799
+
800
+ ### Returns
801
+
802
+ `Observable`\<`Error`\>
803
+
804
+ ### events()
805
+
806
+ ```ts
807
+ events<ThreadT>(thread): Observable<WorkerEvent>;
808
+ ```
809
+
810
+ Return an observable that can be used to subscribe to internal events happening in the thread. Useful for debugging.
811
+
812
+ ### Type Parameters
813
+
814
+ #### ThreadT
815
+
816
+ `ThreadT` *extends* `Thread`
817
+
818
+ ### Parameters
819
+
820
+ #### thread
821
+
822
+ `ThreadT`
823
+
824
+ ### Returns
825
+
826
+ `Observable`\<`WorkerEvent`\>
827
+
828
+ ### terminate()
829
+
830
+ ```ts
831
+ terminate<ThreadT>(thread): Promise<void>;
832
+ ```
833
+
834
+ Terminate a thread. Remember to terminate every thread when you are done using it.
835
+
836
+ ### Type Parameters
837
+
838
+ #### ThreadT
839
+
840
+ `ThreadT` *extends* `Thread`
841
+
842
+ ### Parameters
843
+
844
+ #### thread
845
+
846
+ `ThreadT`
847
+
848
+ ### Returns
849
+
850
+ `Promise`\<`void`\>
851
+
852
+ ### <a id="Worker"></a>Worker
853
+
854
+ [**@ariestools/threads**](#../../README)
855
+
856
+ ***
857
+
858
+ ```ts
859
+ Worker: typeof WorkerImplementation;
860
+ ```
861
+
862
+ Worker implementation. Either web worker or a node.js Worker class.
863
+
864
+ ### index-node
865
+
866
+ ### functions
867
+
868
+ ### <a id="isWorkerRuntime"></a>isWorkerRuntime
869
+
870
+ [**@ariestools/threads**](#../../README)
871
+
872
+ ***
873
+
874
+ ```ts
875
+ function isWorkerRuntime(): boolean;
876
+ ```
877
+
878
+ Check whether the current code is running inside a Node.js worker thread.
879
+
880
+ ## Returns
881
+
882
+ `boolean`
883
+
884
+ True if running in a worker thread (not the main thread), false otherwise.
885
+
886
+ ### type-aliases
887
+
888
+ ### <a id="BlobWorker"></a>BlobWorker
889
+
890
+ [**@ariestools/threads**](#../../README)
891
+
892
+ ***
893
+
894
+ ```ts
895
+ type BlobWorker = typeof BlobWorkerClass;
896
+ ```
897
+
898
+ Separate class to spawn workers from source code blobs or strings.
899
+
900
+ ### <a id="Worker"></a>Worker
901
+
902
+ [**@ariestools/threads**](#../../README)
903
+
904
+ ***
905
+
906
+ ```ts
907
+ type Worker = WorkerType;
908
+ ```
909
+
910
+ Worker implementation. Either web worker or a node.js Worker class.
911
+
912
+ ### variables
913
+
914
+ ### <a id="BlobWorker"></a>BlobWorker
915
+
916
+ [**@ariestools/threads**](#../../README)
917
+
918
+ ***
919
+
920
+ ```ts
921
+ BlobWorker: typeof BlobWorker;
922
+ ```
923
+
924
+ Separate class to spawn workers from source code blobs or strings.
925
+
926
+ ### <a id="Worker"></a>Worker
927
+
928
+ [**@ariestools/threads**](#../../README)
929
+
930
+ ***
931
+
932
+ ```ts
933
+ Worker: typeof WorkerImplementation;
934
+ ```
935
+
936
+ Worker implementation. Either web worker or a node.js Worker class.
937
+
938
+ ## Credits
939
+
940
+ [Made with 🔥 and ❄️ by XY Labs](https://xylabs.com)
941
+
942
+ [npm-badge]: https://img.shields.io/npm/v/@ariestools/threads.svg
943
+ [npm-link]: https://www.npmjs.com/package/@ariestools/threads
944
+ [license-badge]: https://img.shields.io/npm/l/@ariestools/threads.svg
945
+ [license-link]: https://github.com/xylabs/sdk-js/blob/main/LICENSE
946
+ [logo]: https://cdn.xy.company/img/brand/XYPersistentCompany_Logo_Icon_Colored.svg