Skip to content

Commit 2ad5e01

Browse files
committed
code review
1 parent 9396905 commit 2ad5e01

File tree

3 files changed

+23
-35
lines changed

3 files changed

+23
-35
lines changed

src/generators.mjs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
import { allGenerators } from './generators/index.mjs';
4-
import { WorkerPool } from './threading.mjs';
4+
import WorkerPool from './threading/index.mjs';
55

66
/**
77
* @typedef {{ ast: GeneratorMetadata<ApiDocMetadataEntry, ApiDocMetadataEntry>}} AstGenerator The AST "generator" is a facade for the AST tree and it isn't really a generator
@@ -46,11 +46,7 @@ const createGenerator = markdownInput => {
4646
// but it ensures all dependencies are resolved, and that multiple bottom-level generators
4747
// can reuse the already parsed content from the top-level/dependency generators
4848
for (const generatorName of generators) {
49-
const {
50-
dependsOn,
51-
generate,
52-
parallizable = true,
53-
} = allGenerators[generatorName];
49+
const { dependsOn, generate } = allGenerators[generatorName];
5450

5551
// If the generator dependency has not yet been resolved, we resolve
5652
// the dependency first before running the current generator
@@ -68,7 +64,7 @@ const createGenerator = markdownInput => {
6864

6965
// Adds the current generator execution Promise to the cache
7066
cachedGenerators[generatorName] =
71-
threads < 2 || !parallizable
67+
threads < 2
7268
? generate(dependencyOutput, extra) // Run in main thread
7369
: threadPool.run(generatorName, dependencyOutput, threads, extra); // Offload to worker thread
7470
}
Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,9 @@
1-
import {
2-
Worker,
3-
isMainThread,
4-
parentPort,
5-
workerData,
6-
} from 'node:worker_threads';
7-
import { allGenerators } from './generators/index.mjs';
8-
9-
// If inside a worker thread, perform the generator logic here
10-
if (!isMainThread) {
11-
const { name, dependencyOutput, extra } = workerData;
12-
const generator = allGenerators[name];
13-
14-
// Execute the generator and send the result or error back to the parent thread
15-
generator
16-
.generate(dependencyOutput, extra)
17-
.then(result => parentPort.postMessage(result))
18-
.catch(error => parentPort.postMessage({ error }));
19-
}
1+
import { Worker } from 'node:worker_threads';
202

213
/**
224
* WorkerPool class to manage a pool of worker threads
235
*/
24-
export class WorkerPool {
6+
export default class WorkerPool {
257
/** @private {number} - Number of active threads */
268
activeThreads = 0;
279
/** @private {Array<Function>} - Queue of pending tasks */
@@ -44,20 +26,19 @@ export class WorkerPool {
4426
this.activeThreads++;
4527

4628
// Create and start the worker thread
47-
const worker = new Worker(new URL(import.meta.url), {
48-
workerData: { name, dependencyOutput, extra },
49-
});
29+
const worker = new Worker(
30+
new URL(import.meta.resolve('./worker.mjs')),
31+
{
32+
workerData: { name, dependencyOutput, extra },
33+
}
34+
);
5035

5136
// Handle worker thread messages (result or error)
5237
worker.on('message', result => {
5338
this.activeThreads--;
5439
this.processQueue(threads);
5540

56-
if (result?.error) {
57-
reject(result.error);
58-
} else {
59-
resolve(result);
60-
}
41+
(result?.error ? reject : resolve)(result);
6142
});
6243

6344
// Handle worker thread errors

src/threading/worker.mjs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { parentPort, workerData } from 'node:worker_threads';
2+
import { allGenerators } from '../generators/index.mjs';
3+
4+
const { name, dependencyOutput, extra } = workerData;
5+
const generator = allGenerators[name];
6+
7+
// Execute the generator and send the result or error back to the parent thread
8+
generator
9+
.generate(dependencyOutput, extra)
10+
.then(result => parentPort.postMessage(result))
11+
.catch(error => parentPort.postMessage({ error }));

0 commit comments

Comments
 (0)