stardust-parallel-js 1.0.9 β†’ 1.1.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.
package/README.md CHANGED
@@ -3,40 +3,38 @@
3
3
  [![npm version](https://img.shields.io/npm/v/stardust-parallel-js.svg)](https://www.npmjs.com/package/stardust-parallel-js)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/stardust-parallel-js.svg)](https://www.npmjs.com/package/stardust-parallel-js)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
6
- [![Coverage](https://img.shields.io/badge/coverage-77%25-yellowgreen.svg)](https://github.com/b1411/parallel.js)
6
+ [![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/b1411/5e96225d1a326e23a38edc41799b1ead/raw/coverage.json)](https://github.com/b1411/parallel.js)
7
7
  [![Node.js Version](https://img.shields.io/node/v/stardust-parallel-js.svg)](https://nodejs.org)
8
8
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue.svg)](https://www.typescriptlang.org/)
9
9
  [![Bundle Size](https://img.shields.io/bundlephobia/minzip/stardust-parallel-js)](https://bundlephobia.com/package/stardust-parallel-js)
10
10
  [![GitHub stars](https://img.shields.io/github/stars/b1411/parallel.js.svg?style=social)](https://github.com/b1411/parallel.js)
11
11
 
12
- > πŸ“– **Other languages:** [Русский](./README.ru.md)
13
-
14
- **Speed up your Node.js applications up to 3x** with a simple API for parallel task execution!
12
+ > **Other languages:** [Русский](./README.ru.md)
15
13
 
16
14
  A library for parallel execution of JavaScript/TypeScript functions using Worker Threads in Node.js.
17
15
 
18
- ## πŸš€ Performance
16
+ ## Performance
19
17
 
20
- Real benchmarks on 4-core CPU:
18
+ Benchmarks on 4-core CPU:
21
19
 
22
20
  | Task | Sequential | Parallel (4 workers) | Speedup |
23
21
  |------|-----------|---------------------|---------|
24
- | **Fibonacci(35-42) computation** | 5113 ms | 2606 ms | **1.96x** πŸ”₯ |
25
- | **Processing 50 items** | 936 ms | 344 ms | **2.72x** ⚑ |
22
+ | **Fibonacci(35-42) computation** | 5113 ms | 2606 ms | **1.96x** |
23
+ | **Processing 50 items** | 936 ms | 344 ms | **2.72x** |
26
24
 
27
- > πŸ’‘ **Result**: up to **63% performance improvement** on CPU-intensive tasks!
25
+ > Performance improvement: up to 63% on CPU-intensive tasks.
28
26
 
29
- ## ✨ Features
27
+ ## Features
30
28
 
31
- - πŸš€ **Up to 3x faster** - real speedup on multi-core processors
32
- - πŸ’‘ **Simple API** - start using in 2 minutes
33
- - πŸ”„ **Thread pool** - efficient resource management
34
- - ⚑ **Single threads** - for one-off tasks
35
- - πŸ“¦ **TypeScript** - full support out of the box
36
- - πŸ›‘οΈ **Reliability** - automatic recovery of crashed threads
37
- - 🎯 **Simplicity** - works like regular `map()`, but parallel
29
+ - Real speedup on multi-core processors
30
+ - Simple API for parallel task execution
31
+ - Thread pool for efficient resource management
32
+ - Single thread support for one-off tasks
33
+ - Full TypeScript support
34
+ - Automatic recovery of crashed threads
35
+ - Array processing similar to `map()`, but parallel
38
36
 
39
- ## πŸ“¦ Installation
37
+ ## Installation
40
38
 
41
39
  ```bash
42
40
  npm install stardust-parallel-js
@@ -46,27 +44,25 @@ pnpm install stardust-parallel-js
46
44
  yarn add stardust-parallel-js
47
45
  ```
48
46
 
49
- ## 🎯 Quick Start
47
+ ## Quick Start
50
48
 
51
- **In 30 seconds** you can speed up array processing by 2-3x:
49
+ Basic usage example:
52
50
 
53
51
  ```typescript
54
52
  import { ThreadPool } from 'stardust-parallel-js';
55
53
 
56
54
  const pool = new ThreadPool(4);
57
55
 
58
- // Regular code - slow 🐌
56
+ // Sequential execution
59
57
  const results = data.map(item => heavyComputation(item));
60
58
 
61
- // With stardust-parallel-js - fast! ⚑
59
+ // Parallel execution
62
60
  const results = await pool.map(data, item => heavyComputation(item));
63
61
 
64
62
  await pool.terminate();
65
63
  ```
66
64
 
67
- **That's it!** Your code now runs in parallel on all CPU cores.
68
-
69
- ## πŸ“š Usage
65
+ ## Usage
70
66
 
71
67
  ### ThreadPool - Thread pool (recommended)
72
68
 
@@ -78,12 +74,12 @@ import { ThreadPool } from 'stardust-parallel-js';
78
74
  // Create a pool of 4 threads (matching CPU cores)
79
75
  const pool = new ThreadPool(4);
80
76
 
81
- // 🎯 Process array - like regular map(), but parallel!
77
+ // Process array in parallel
82
78
  const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
83
79
  const squares = await pool.map(numbers, (n: number) => n * n);
84
80
  console.log(squares); // [1, 4, 9, 16, 25, 36, 49, 64]
85
81
 
86
- // πŸ’ͺ CPU-intensive computations
82
+ // CPU-intensive computations
87
83
  const result = await pool.execute(
88
84
  (n: number) => {
89
85
  let sum = 0;
@@ -120,7 +116,7 @@ const thread2 = new Thread(x => x * 2, [21]);
120
116
  console.log(await thread2.join()); // 42
121
117
  ```
122
118
 
123
- ## πŸ’‘ Real-World Examples
119
+ ## Examples
124
120
 
125
121
  ### Image Processing
126
122
 
@@ -171,9 +167,9 @@ const results = await pool.map([35, 36, 37, 38, 39, 40], n => {
171
167
  await pool.terminate();
172
168
  ```
173
169
 
174
- ## πŸ“Š Benchmarks
170
+ ## Benchmarks
175
171
 
176
- Run yourself and see the performance:
172
+ Run benchmarks:
177
173
 
178
174
  ```bash
179
175
  npm run build
@@ -181,7 +177,7 @@ npx tsx benchmarks/cpu-intensive.ts
181
177
  npx tsx benchmarks/data-processing.ts
182
178
  ```
183
179
 
184
- ## πŸŽ“ API Reference
180
+ ## API Reference
185
181
 
186
182
  ### ThreadPool
187
183
 
@@ -233,31 +229,31 @@ Waits for execution to complete and returns the result. Automatically terminates
233
229
  const result = await thread.join();
234
230
  ```
235
231
 
236
- ## ⚠️ Important Notes
232
+ ## Important Notes
237
233
 
238
- - πŸ”’ Functions execute in an isolated context (separate Worker Thread)
239
- - πŸ“¦ Arguments and results must be serializable
240
- - 🚫 Closures don't work - functions have no access to external variables
241
- - βœ… Regular and arrow functions are supported
242
- - βœ… `require()` is available inside functions for using Node.js modules
243
- - ⚑ Best suited for CPU-intensive tasks (calculations, data processing)
244
- - πŸ’‘ For I/O operations (reading files, network) use async/await instead of threads
234
+ - Functions execute in an isolated context (separate Worker Thread)
235
+ - Arguments and results must be serializable
236
+ - Closures don't work - functions have no access to external variables
237
+ - Regular and arrow functions are supported
238
+ - `require()` is available inside functions for using Node.js modules
239
+ - Best suited for CPU-intensive tasks (calculations, data processing)
240
+ - For I/O operations (reading files, network) use async/await instead of threads
245
241
 
246
- ## 🎯 When to Use?
242
+ ## When to Use
247
243
 
248
- **βœ… Use stardust-parallel-js when:**
244
+ **Use stardust-parallel-js when:**
249
245
  - Processing large data arrays
250
246
  - Performing complex calculations
251
247
  - Parsing or transforming data
252
248
  - Processing images/video
253
249
  - Need to utilize all CPU cores
254
250
 
255
- **❌ Don't use when:**
251
+ **Don't use when:**
256
252
  - Simple operations (faster to execute sequentially)
257
253
  - I/O operations (files, network, DB) - they're already asynchronous
258
254
  - Working with DOM (Node.js only)
259
255
 
260
- ## πŸ“ˆ How to Choose Pool Size?
256
+ ## Choosing Pool Size
261
257
 
262
258
  ```typescript
263
259
  import os from 'os';
@@ -272,16 +268,16 @@ const pool = new ThreadPool(os.cpus().length - 1); // leave 1 core for system
272
268
  const pool = new ThreadPool(os.cpus().length * 2);
273
269
  ```
274
270
 
275
- ## 🀝 Comparison with Alternatives
271
+ ## Comparison with Alternatives
276
272
 
277
273
  | Solution | Simplicity | Performance | TypeScript | Size |
278
274
  |----------|-----------|-------------|------------|------|
279
- | **stardust-parallel-js** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | βœ… Full | 9.3kB |
280
- | worker_threads | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⚠️ Partial | Built-in |
281
- | cluster | ⭐⭐ | ⭐⭐⭐ | ⚠️ Partial | Built-in |
282
- | child_process | ⭐ | ⭐⭐ | ❌ No | Built-in |
275
+ | **stardust-parallel-js** | High | High | Full | 9.3kB |
276
+ | worker_threads | Medium | High | Partial | Built-in |
277
+ | cluster | Medium | Medium | Partial | Built-in |
278
+ | child_process | Low | Low | No | Built-in |
283
279
 
284
- ## πŸš€ Roadmap
280
+ ## Roadmap
285
281
 
286
282
  - [ ] Support for transferable objects for large data
287
283
  - [ ] Automatic selection of optimal pool size
@@ -289,17 +285,15 @@ const pool = new ThreadPool(os.cpus().length * 2);
289
285
  - [ ] Monitoring and statistics
290
286
  - [ ] Support for async functions in threads
291
287
 
292
- ## πŸ’¬ Feedback
293
-
294
- Found a bug? Have an idea? [Create an issue](https://github.com/b1411/parallel.js)!
288
+ ## Feedback
295
289
 
296
- ⭐ If the library helped you - give it a star on [GitHub](https://github.com/b1411/parallel.js)!
290
+ Found a bug or have an idea? [Create an issue](https://github.com/b1411/parallel.js).
297
291
 
298
- ## πŸ“¦ Requirements
292
+ ## Requirements
299
293
 
300
294
  - Node.js >= 14.0.0 (with Worker Threads support)
301
295
 
302
- ## πŸ“„ License
296
+ ## License
303
297
 
304
298
  MIT Β© [b1411](https://github.com/b1411)
305
299
 
@@ -308,3 +302,5 @@ MIT Β© [b1411](https://github.com/b1411)
308
302
  <p align="center">
309
303
  Made with ❀️ for the Node.js community
310
304
  </p>
305
+
306
+
package/README.ru.md CHANGED
@@ -3,38 +3,38 @@
3
3
  [![npm version](https://img.shields.io/npm/v/stardust-parallel-js.svg)](https://www.npmjs.com/package/stardust-parallel-js)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/stardust-parallel-js.svg)](https://www.npmjs.com/package/stardust-parallel-js)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
6
- [![Coverage](https://img.shields.io/badge/coverage-77%25-yellowgreen.svg)](https://github.com/b1411/parallel.js)
6
+ [![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/b1411/5e96225d1a326e23a38edc41799b1ead/raw/coverage.json)](https://github.com/b1411/parallel.js)
7
7
  [![Node.js Version](https://img.shields.io/node/v/stardust-parallel-js.svg)](https://nodejs.org)
8
8
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue.svg)](https://www.typescriptlang.org/)
9
9
  [![Bundle Size](https://img.shields.io/bundlephobia/minzip/stardust-parallel-js)](https://bundlephobia.com/package/stardust-parallel-js)
10
10
  [![GitHub stars](https://img.shields.io/github/stars/b1411/parallel.js.svg?style=social)](https://github.com/b1411/parallel.js)
11
11
 
12
- > πŸ“– **Π”Ρ€ΡƒΠ³ΠΈΠ΅ языки:** [English](./README.md)
12
+ > **Π”Ρ€ΡƒΠ³ΠΈΠ΅ языки:** [English](./README.md)
13
13
 
14
- **Π£ΡΠΊΠΎΡ€ΡŒΡ‚Π΅ свои Node.js прилоТСния Π΄ΠΎ 3x** с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простого API для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Π·Π°Π΄Π°Ρ‡!
14
+ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния JavaScript/TypeScript Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с использованиСм Worker Threads Π² Node.js.
15
15
 
16
- ## πŸš€ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
16
+ ## ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
17
17
 
18
- Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ Π½Π° 4-ядСрном CPU:
18
+ Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ Π½Π° 4-ядСрном CPU:
19
19
 
20
20
  | Π—Π°Π΄Π°Ρ‡Π° | ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ | ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ (4 ΠΏΠΎΡ‚ΠΎΠΊΠ°) | УскорСниС |
21
21
  |--------|----------------|------------------------|-----------|
22
- | **ВычислСниС Fibonacci(35-42)** | 5113 мс | 2606 мс | **1.96x** πŸ”₯ |
23
- | **ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° 50 элСмСнтов** | 936 мс | 344 мс | **2.72x** ⚑ |
22
+ | **ВычислСниС Fibonacci(35-42)** | 5113 мс | 2606 мс | **1.96x** |
23
+ | **ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° 50 элСмСнтов** | 936 мс | 344 мс | **2.72x** |
24
24
 
25
- > πŸ’‘ **Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚**: Π΄ΠΎ **63% ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ** ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° CPU-интСнсивных Π·Π°Π΄Π°Ρ‡Π°Ρ…!
25
+ > Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: Π΄ΠΎ 63% Π½Π° CPU-интСнсивных Π·Π°Π΄Π°Ρ‡Π°Ρ….
26
26
 
27
- ## ✨ ВозмоТности
27
+ ## ВозмоТности
28
28
 
29
- - πŸš€ **Π”ΠΎ 3x быстрСС** - Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ускорСниС Π½Π° многоядСрных процСссорах
30
- - πŸ’‘ **ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ API** - Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° 2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹
31
- - πŸ”„ **ΠŸΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²** - эффСктивноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами
32
- - ⚑ **ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ** - для Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡
33
- - πŸ“¦ **TypeScript** - полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ
34
- - πŸ›‘οΈ **ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ** - автоматичСскоС восстановлСниС ΡƒΠΏΠ°Π²ΡˆΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
35
- - 🎯 **ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π°** - Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ `map()`, Π½ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ
29
+ - РСальноС ускорСниС Π½Π° многоядСрных процСссорах
30
+ - ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ API для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Π·Π°Π΄Π°Ρ‡
31
+ - ΠŸΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для эффСктивного управлСния рСсурсами
32
+ - ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡
33
+ - Полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° TypeScript
34
+ - АвтоматичСскоС восстановлСниС ΡƒΠΏΠ°Π²ΡˆΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
35
+ - ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массивов Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ `map()`, Π½ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ
36
36
 
37
- ## πŸ“¦ Установка
37
+ ## Установка
38
38
 
39
39
  ```bash
40
40
  npm install stardust-parallel-js
@@ -44,27 +44,25 @@ pnpm install stardust-parallel-js
44
44
  yarn add stardust-parallel-js
45
45
  ```
46
46
 
47
- ## 🎯 Быстрый старт
47
+ ## Быстрый старт
48
48
 
49
- **Π—Π° 30 сСкунд** Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ массивов Π² 2-3 Ρ€Π°Π·Π°:
49
+ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ использования:
50
50
 
51
51
  ```typescript
52
52
  import { ThreadPool } from 'stardust-parallel-js';
53
53
 
54
54
  const pool = new ThreadPool(4);
55
55
 
56
- // ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ - ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ 🐌
56
+ // ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
57
57
  const results = data.map(item => heavyComputation(item));
58
58
 
59
- // Π‘ stardust-parallel-js - быстро! ⚑
59
+ // ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
60
60
  const results = await pool.map(data, item => heavyComputation(item));
61
61
 
62
62
  await pool.terminate();
63
63
  ```
64
64
 
65
- **Π’ΠΎΡ‚ ΠΈ всё!** Π’Π°Ρˆ ΠΊΠΎΠ΄ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π½Π° всСх ядрах процСссора.
66
-
67
- ## πŸ“š ИспользованиС
65
+ ## ИспользованиС
68
66
 
69
67
  ### ThreadPool - ΠŸΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (рСкомСндуСтся)
70
68
 
@@ -76,12 +74,12 @@ import { ThreadPool } from 'stardust-parallel-js';
76
74
  // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡƒΠ» ΠΈΠ· 4 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (ΠΏΠΎ числу ядСр CPU)
77
75
  const pool = new ThreadPool(4);
78
76
 
79
- // 🎯 ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массива - ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ map(), Π½ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ!
77
+ // ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массива ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ
80
78
  const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
81
79
  const squares = await pool.map(numbers, (n: number) => n * n);
82
80
  console.log(squares); // [1, 4, 9, 16, 25, 36, 49, 64]
83
81
 
84
- // πŸ’ͺ CPU-интСнсивныС вычислСния
82
+ // CPU-интСнсивныС вычислСния
85
83
  const result = await pool.execute(
86
84
  (n: number) => {
87
85
  let sum = 0;
@@ -118,7 +116,7 @@ const thread2 = new Thread(x => x * 2, [21]);
118
116
  console.log(await thread2.join()); // 42
119
117
  ```
120
118
 
121
- ## πŸ’‘ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ
119
+ ## ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹
122
120
 
123
121
  ### ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
124
122
 
@@ -169,9 +167,9 @@ const results = await pool.map([35, 36, 37, 38, 39, 40], n => {
169
167
  await pool.terminate();
170
168
  ```
171
169
 
172
- ## πŸ“Š Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ
170
+ ## Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ
173
171
 
174
- ЗапуститС сами ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:
172
+ Запуск Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²:
175
173
 
176
174
  ```bash
177
175
  npm run build
@@ -179,7 +177,7 @@ npx tsx benchmarks/cpu-intensive.ts
179
177
  npx tsx benchmarks/data-processing.ts
180
178
  ```
181
179
 
182
- ## πŸŽ“ API Reference
180
+ ## API Reference
183
181
 
184
182
  ### ThreadPool
185
183
 
@@ -234,31 +232,31 @@ const thread = new Thread((x: number) => x * x, [5]);
234
232
  const result = await thread.join();
235
233
  ```
236
234
 
237
- ## ⚠️ Π’Π°ΠΆΠ½Ρ‹Π΅ замСчания
235
+ ## Π’Π°ΠΆΠ½Ρ‹Π΅ замСчания
238
236
 
239
- - πŸ”’ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ контСкстС (ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Worker Thread)
240
- - πŸ“¦ АргумСнты ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сСриализуСмыми
241
- - 🚫 Замыкания Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ доступа ΠΊ внСшним ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ
242
- - βœ… ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΈ стрСлочныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
243
- - βœ… `require()` доступСн Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для использования Node.js ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ
244
- - ⚑ Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для CPU-интСнсивных Π·Π°Π΄Π°Ρ‡ (вычислСния, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…)
245
- - πŸ’‘ Для I/O ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ², ΡΠ΅Ρ‚ΡŒ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ async/await вмСсто ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
237
+ - Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ контСкстС (ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Worker Thread)
238
+ - АргумСнты ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сСриализуСмыми
239
+ - Замыкания Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ доступа ΠΊ внСшним ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ
240
+ - ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΈ стрСлочныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
241
+ - `require()` доступСн Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для использования Node.js ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ
242
+ - Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для CPU-интСнсивных Π·Π°Π΄Π°Ρ‡ (вычислСния, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…)
243
+ - Для I/O ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ², ΡΠ΅Ρ‚ΡŒ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ async/await вмСсто ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
246
244
 
247
- ## 🎯 Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?
245
+ ## Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
248
246
 
249
- **βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ stardust-parallel-js ΠΊΠΎΠ³Π΄Π°:**
247
+ **Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ stardust-parallel-js ΠΊΠΎΠ³Π΄Π°:**
250
248
  - ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ большиС массивы Π΄Π°Π½Π½Ρ‹Ρ…
251
249
  - ВыполняСтС слоТныС вычислСния
252
250
  - ΠŸΠ°Ρ€ΡΠΈΡ‚Π΅ ΠΈΠ»ΠΈ трансформируСтС Π΄Π°Π½Π½Ρ‹Π΅
253
251
  - ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ изобраТСния/Π²ΠΈΠ΄Π΅ΠΎ
254
252
  - НуТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС ядра CPU
255
253
 
256
- **❌ НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ³Π΄Π°:**
254
+ **НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ³Π΄Π°:**
257
255
  - ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (быстрСС Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)
258
256
  - I/O ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Ρ„Π°ΠΉΠ»Ρ‹, ΡΠ΅Ρ‚ΡŒ, Π‘Π”) - ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ асинхронныС
259
257
  - Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с DOM (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Node.js)
260
258
 
261
- ## πŸ“ˆ Как Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡƒΠ»Π°?
259
+ ## Π’Ρ‹Π±ΠΎΡ€ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡƒΠ»Π°
262
260
 
263
261
  ```typescript
264
262
  import os from 'os';
@@ -273,16 +271,16 @@ const pool = new ThreadPool(os.cpus().length - 1); // ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ 1 ядр
273
271
  const pool = new ThreadPool(os.cpus().length * 2);
274
272
  ```
275
273
 
276
- ## 🀝 Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ
274
+ ## Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ
277
275
 
278
276
  | РСшСниС | ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° | ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ | TypeScript | Π Π°Π·ΠΌΠ΅Ρ€ |
279
277
  |---------|----------|-------------------|------------|--------|
280
- | **stardust-parallel-js** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | βœ… Полная | 9.3kB |
281
- | worker_threads | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⚠️ Частичная | ВстроСно |
282
- | cluster | ⭐⭐ | ⭐⭐⭐ | ⚠️ Частичная | ВстроСно |
283
- | child_process | ⭐ | ⭐⭐ | ❌ НСт | ВстроСно |
278
+ | **stardust-parallel-js** | Высокая | Высокая | Полная | 9.3kB |
279
+ | worker_threads | БрСдняя | Высокая | Частичная | ВстроСно |
280
+ | cluster | БрСдняя | БрСдняя | Частичная | ВстроСно |
281
+ | child_process | Низкая | Низкая | НСт | ВстроСно |
284
282
 
285
- ## πŸš€ Roadmap
283
+ ## Roadmap
286
284
 
287
285
  - [ ] ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° transferable objects для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…
288
286
  - [ ] АвтоматичСский Π²Ρ‹Π±ΠΎΡ€ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡƒΠ»Π°
@@ -290,17 +288,15 @@ const pool = new ThreadPool(os.cpus().length * 2);
290
288
  - [ ] ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ статистика
291
289
  - [ ] ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° async Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…
292
290
 
293
- ## πŸ’¬ ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ связь
294
-
295
- Нашли Π±Π°Π³? Π•ΡΡ‚ΡŒ идСя? [Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ issue](https://github.com/b1411/parallel.js)!
291
+ ## ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ связь
296
292
 
297
- ⭐ Если Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ - ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π·Π²Π΅Π·Π΄Ρƒ Π½Π° [GitHub](https://github.com/b1411/parallel.js)!
293
+ Нашли Π±Π°Π³ ΠΈΠ»ΠΈ Π΅ΡΡ‚ΡŒ идСя? [Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ issue](https://github.com/b1411/parallel.js).
298
294
 
299
- ## πŸ“¦ ВрСбования
295
+ ## ВрСбования
300
296
 
301
297
  - Node.js >= 14.0.0 (с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Worker Threads)
302
298
 
303
- ## πŸ“„ ЛицСнзия
299
+ ## ЛицСнзия
304
300
 
305
301
  MIT Β© [b1411](https://github.com/b1411)
306
302
 
@@ -309,3 +305,5 @@ MIT Β© [b1411](https://github.com/b1411)
309
305
  <p align="center">
310
306
  Π‘Π΄Π΅Π»Π°Π½ΠΎ с ❀️ для Node.js сообщСства
311
307
  </p>
308
+
309
+
@@ -1 +1 @@
1
- {"version":3,"file":"Thread.d.ts","sourceRoot":"","sources":["../../src/primitives/Thread.ts"],"names":[],"mappings":"AAGA,cAAM,MAAM,CAAC,CAAC,EAAE,KAAK,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAa;gBAEhB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,GAAE,KAA8B;IAwBrE,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;CAQ3B;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
1
+ {"version":3,"file":"Thread.d.ts","sourceRoot":"","sources":["../../src/primitives/Thread.ts"],"names":[],"mappings":"AAGA,cAAM,MAAM,CAAC,CAAC,EAAE,KAAK,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE;IAC/C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,OAAO,CAAa;gBAEhB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,GAAE,KAA8B;IA0BrE,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;CAQ3B;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Worker } from "node:worker_threads";
1
+ import { extractTransferables } from "../utils/extractTransferables.js";
2
2
  import { createWorker } from "../utils/workerFactory.js";
3
3
  class Thread {
4
4
  worker;
@@ -6,7 +6,7 @@ class Thread {
6
6
  constructor(fn, args = []) {
7
7
  this.worker = createWorker();
8
8
  this.promise = new Promise((resolve, reject) => {
9
- this.worker.on('message', (res) => {
9
+ this.worker.worker.on('message', (res) => {
10
10
  if (res.success) {
11
11
  resolve(res.result);
12
12
  }
@@ -14,16 +14,17 @@ class Thread {
14
14
  reject(new Error(res.error));
15
15
  }
16
16
  });
17
- this.worker.on('error', (err) => {
17
+ this.worker.worker.on('error', (err) => {
18
18
  reject(err);
19
19
  });
20
- this.worker.on('exit', (code) => {
20
+ this.worker.worker.on('exit', (code) => {
21
21
  if (code !== 0) {
22
22
  reject(new Error(`Worker stopped with exit code ${code}`));
23
23
  }
24
24
  });
25
25
  });
26
- this.worker.postMessage({ fn: fn.toString(), args });
26
+ const transferables = extractTransferables(args);
27
+ this.worker.run(fn, args, transferables);
27
28
  }
28
29
  async join() {
29
30
  try {
@@ -31,7 +32,7 @@ class Thread {
31
32
  return result;
32
33
  }
33
34
  finally {
34
- this.worker.terminate();
35
+ this.worker.worker.terminate();
35
36
  }
36
37
  }
37
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Thread.js","sourceRoot":"","sources":["../../src/primitives/Thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,MAAM;IACA,MAAM,CAAS;IACf,OAAO,CAAa;IAE5B,YAAY,EAAyB,EAAE,OAAc,EAAsB;QACvE,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QAE7B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAqD,EAAE,EAAE;gBAChF,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,MAAW,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC5B,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC5B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;YAClC,OAAO,MAAM,CAAC;QAClB,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;CACJ;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
1
+ {"version":3,"file":"Thread.js","sourceRoot":"","sources":["../../src/primitives/Thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,MAAM;IACA,MAAM,CAAkC;IACxC,OAAO,CAAa;IAE5B,YAAY,EAAyB,EAAE,OAAc,EAAsB;QACvE,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QAE7B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAqD,EAAE,EAAE;gBACvF,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,MAAW,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACnC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACnC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;YAClC,OAAO,MAAM,CAAC;QAClB,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnC,CAAC;IACL,CAAC;CACJ;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadPool.d.ts","sourceRoot":"","sources":["../../src/primitives/ThreadPool.ts"],"names":[],"mappings":"AAWA,qBAAa,UAAU;IAMP,OAAO,CAAC,IAAI;IALxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,WAAW,CAAoC;gBAEnC,IAAI,EAAE,MAAM;IAIhC,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IAUd,OAAO,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EAC1C,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,EAC/B,IAAI,GAAE,KAA8B,GACrC,OAAO,CAAC,OAAO,CAAC;IAab,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAM7D,QAAQ;;;;;;IASF,SAAS;CASlB"}
1
+ {"version":3,"file":"ThreadPool.d.ts","sourceRoot":"","sources":["../../src/primitives/ThreadPool.ts"],"names":[],"mappings":"AAaA,qBAAa,UAAU;IAMP,OAAO,CAAC,IAAI;IALxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,WAAW,CAAoC;gBAEnC,IAAI,EAAE,MAAM;IAIhC,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IAUd,OAAO,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EAC1C,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,EAC/B,IAAI,GAAE,KAA8B,GACrC,OAAO,CAAC,OAAO,CAAC;IAcb,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAM7D,QAAQ;;;;;;IASF,SAAS;CASlB"}
@@ -1,6 +1,7 @@
1
1
  import { Worker } from "node:worker_threads";
2
2
  import { createWorker } from "../utils/workerFactory.js";
3
3
  import { Queue } from "@datastructures-js/queue";
4
+ import { extractTransferables } from "../utils/extractTransferables.js";
4
5
  export class ThreadPool {
5
6
  size;
6
7
  workers = [];
@@ -14,9 +15,9 @@ export class ThreadPool {
14
15
  initWorkers() {
15
16
  for (let i = 0; i < this.size; i++) {
16
17
  const worker = createWorker();
17
- this.setupWorkerHandlers(worker);
18
- this.workers.push(worker);
19
- this.availableWorkers.push(worker);
18
+ this.setupWorkerHandlers(worker.worker);
19
+ this.workers.push(worker.worker);
20
+ this.availableWorkers.push(worker.worker);
20
21
  }
21
22
  }
22
23
  setupWorkerHandlers(worker) {
@@ -48,9 +49,9 @@ export class ThreadPool {
48
49
  this.availableWorkers = this.availableWorkers.filter(worker => worker !== crashedWorker);
49
50
  crashedWorker.terminate();
50
51
  const newWorker = createWorker();
51
- this.setupWorkerHandlers(newWorker);
52
- this.workers.push(newWorker);
53
- this.availableWorkers.push(newWorker);
52
+ this.setupWorkerHandlers(newWorker.worker);
53
+ this.workers.push(newWorker.worker);
54
+ this.availableWorkers.push(newWorker.worker);
54
55
  this.processQueue();
55
56
  }
56
57
  processQueue() {
@@ -58,7 +59,7 @@ export class ThreadPool {
58
59
  const worker = this.availableWorkers.pop();
59
60
  const task = this.taskQueue.dequeue();
60
61
  this.workerTasks.set(worker, task);
61
- worker.postMessage({ fn: task.fn.toString(), args: task.args });
62
+ worker.postMessage({ fn: task.fn.toString(), args: task.args }, task.transferables || []);
62
63
  }
63
64
  }
64
65
  async execute(fn, args = []) {
@@ -66,6 +67,7 @@ export class ThreadPool {
66
67
  const task = {
67
68
  fn: fn.toString(),
68
69
  args,
70
+ transferables: extractTransferables(args),
69
71
  resolve: resolve,
70
72
  reject
71
73
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadPool.js","sourceRoot":"","sources":["../../src/primitives/ThreadPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AASjD,MAAM,OAAO,UAAU;IAMC;IALZ,OAAO,GAAa,EAAE,CAAC;IACvB,gBAAgB,GAAa,EAAE,CAAC;IAChC,SAAS,GAAG,IAAI,KAAK,EAAiB,CAAC;IACvC,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEvD,YAAoB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEO,WAAW;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,MAAc;QACtC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAA2D,EAAE,EAAE;YACjF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,aAAa,CAAC,aAAqB;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;QACzF,aAAa,CAAC,SAAS,EAAE,CAAC;QAE1B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEO,YAAY;QAChB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAY,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAmB,CAAC;YAEvD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACnC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CACT,EAA+B,EAC/B,OAAc,EAAsB;QAEpC,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,IAAI,GAAkB;gBACxB,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;gBACjB,IAAI;gBACJ,OAAO,EAAE,OAAmC;gBAC5C,MAAM;aACT,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,GAAG,CAAO,KAAU,EAAE,EAAkB;QAC1C,OAAO,OAAO,CAAC,GAAG,CACd,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CACtC,CAAC;IACtB,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;YAC9C,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM;YAC/D,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;SACrC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,OAAO,CAAC,GAAG,CACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CACvC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,EAAiB,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACJ"}
1
+ {"version":3,"file":"ThreadPool.js","sourceRoot":"","sources":["../../src/primitives/ThreadPool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Transferable } from "node:worker_threads";
2
+ export declare const extractTransferables: <TArgs>(args: TArgs) => Transferable[];
3
+ //# sourceMappingURL=extractTransferables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractTransferables.d.ts","sourceRoot":"","sources":["../../src/utils/extractTransferables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,eAAO,MAAM,oBAAoB,GAAI,KAAK,EAAE,MAAM,KAAK,KAAG,YAAY,EAqBrE,CAAA"}
@@ -0,0 +1,24 @@
1
+ export const extractTransferables = (args) => {
2
+ const transferables = [];
3
+ const extract = (obj) => {
4
+ if (!obj)
5
+ return;
6
+ if (obj instanceof ArrayBuffer) {
7
+ transferables.push(obj);
8
+ }
9
+ else if (ArrayBuffer.isView(obj)) {
10
+ if (obj.buffer instanceof ArrayBuffer) {
11
+ transferables.push(obj.buffer);
12
+ }
13
+ }
14
+ else if (Array.isArray(obj)) {
15
+ obj.forEach(extract);
16
+ }
17
+ else if (typeof obj === 'object') {
18
+ Object.values(obj).forEach(extract);
19
+ }
20
+ };
21
+ extract(args);
22
+ return transferables;
23
+ };
24
+ //# sourceMappingURL=extractTransferables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractTransferables.js","sourceRoot":"","sources":["../../src/utils/extractTransferables.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAQ,IAAW,EAAkB,EAAE;IACvE,MAAM,aAAa,GAAmB,EAAE,CAAC;IAEzC,MAAM,OAAO,GAAG,CAAC,GAAY,EAAQ,EAAE;QACnC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,GAAG,CAAC,MAAM,YAAY,WAAW,EAAE,CAAC;gBACpC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,aAAa,CAAC;AACzB,CAAC,CAAA"}
@@ -1,3 +1,6 @@
1
- import { Worker } from "node:worker_threads";
2
- export declare function createWorker(): Worker;
1
+ import { Worker, type Transferable } from "node:worker_threads";
2
+ export declare function createWorker(): {
3
+ worker: Worker;
4
+ run<R, TArgs extends unknown[] = unknown[]>(fn: (...args: TArgs) => R, args?: TArgs, transferables?: Transferable[]): void;
5
+ };
3
6
  //# sourceMappingURL=workerFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workerFactory.d.ts","sourceRoot":"","sources":["../../src/utils/workerFactory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA6C7C,wBAAgB,YAAY,WAG3B"}
1
+ {"version":3,"file":"workerFactory.d.ts","sourceRoot":"","sources":["../../src/utils/workerFactory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA6ChE,wBAAgB,YAAY;;QAIhB,CAAC,EAAE,KAAK,SAAS,OAAO,EAAE,kBAAkB,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,SAAQ,KAAK,kBAA2C,YAAY,EAAE;EAIlJ"}
@@ -49,6 +49,11 @@ const workerCode = `
49
49
  `;
50
50
  export function createWorker() {
51
51
  const worker = new Worker(workerCode, { eval: true });
52
- return worker;
52
+ return {
53
+ worker,
54
+ run(fn, args = [], transferables) {
55
+ worker.postMessage({ fn: fn.toString(), args }, transferables || []);
56
+ }
57
+ };
53
58
  }
54
59
  //# sourceMappingURL=workerFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workerFactory.js","sourceRoot":"","sources":["../../src/utils/workerFactory.ts"],"names":[],"mappings":"AAAA;;;;;EAKE;AAEF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAyCV,CAAC;AAEV,MAAM,UAAU,YAAY;IACxB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"workerFactory.js","sourceRoot":"","sources":["../../src/utils/workerFactory.ts"],"names":[],"mappings":"AAAA;;;;;EAKE;AAEF,OAAO,EAAE,MAAM,EAAqB,MAAM,qBAAqB,CAAC;AAEhE,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAyCV,CAAC;AAEV,MAAM,UAAU,YAAY;IACxB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,OAAO;QACH,MAAM;QACN,GAAG,CAAyC,EAAyB,EAAE,OAAc,EAAsB,EAAE,aAA8B;YACvI,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;KACJ,CAAA;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stardust-parallel-js",
3
- "version": "1.0.9",
3
+ "version": "1.1.0",
4
4
  "description": "Simple parallel execution library for Node.js using Worker Threads. Execute CPU-intensive tasks with thread pools and isolated workers. Supports both regular and arrow functions.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -16,11 +16,6 @@
16
16
  "node": ">=14.0.0"
17
17
  },
18
18
  "type": "module",
19
- "scripts": {
20
- "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
21
- "test:coverage": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage",
22
- "build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json"
23
- },
24
19
  "keywords": [
25
20
  "parallel",
26
21
  "worker",
@@ -37,11 +32,12 @@
37
32
  ],
38
33
  "author": "b1411",
39
34
  "license": "MIT",
40
- "packageManager": "pnpm@10.23.0",
41
35
  "devDependencies": {
42
36
  "@eslint/js": "^9.39.2",
43
37
  "@types/jest": "^30.0.0",
44
38
  "@types/node": "^25.0.8",
39
+ "coveralls": "^3.1.1",
40
+ "dotenv": "^17.2.3",
45
41
  "eslint": "^9.39.2",
46
42
  "jest": "^30.2.0",
47
43
  "ts-jest": "^29.4.6",
@@ -52,5 +48,12 @@
52
48
  },
53
49
  "dependencies": {
54
50
  "@datastructures-js/queue": "^4.3.0"
51
+ },
52
+ "scripts": {
53
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
54
+ "test:coverage": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage",
55
+ "build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
56
+ "update-badge": "node scripts/update-coverage-badge.mjs",
57
+ "test:badge": "npm run test:coverage && npm run update-badge"
55
58
  }
56
- }
59
+ }