Skip to content

Commit 0122afc

Browse files
committed
feat(cli): enhance worker handling for single-threaded execution
1 parent 813055b commit 0122afc

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

packages/cli/index.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ if (process.argv.includes('--threads')) {
7474

7575
let projects: Project[] = [];
7676
let spinner = clack.spinner();
77+
let lastSpinnerUpdate = Date.now();
7778
let hasFix = false;
7879
let allFilesNum = 0;
7980
let processed = 0;
@@ -139,9 +140,13 @@ if (process.argv.includes('--threads')) {
139140
process.exit(1);
140141
}
141142

142-
await Promise.all(new Array(threads).fill(0).map(() => {
143-
return startWorker();
144-
}));
143+
if (threads === 1) {
144+
await startWorker(worker.createLocal() as any);
145+
} else {
146+
await Promise.all(new Array(threads).fill(0).map(() => {
147+
return startWorker(worker.create());
148+
}));
149+
}
145150

146151
spinner.stop(
147152
darkGray(
@@ -172,7 +177,7 @@ if (process.argv.includes('--threads')) {
172177
clack.outro(summary);
173178
process.exit(errors ? 1 : 0);
174179

175-
async function startWorker(linterWorker = worker.create()) {
180+
async function startWorker(linterWorker: ReturnType<typeof worker.create>) {
176181
const unfinishedProjects = projects.filter(project => project.currentFileIndex < project.fileNames.length);
177182
if (!unfinishedProjects.length) {
178183
return;
@@ -209,6 +214,11 @@ if (process.argv.includes('--threads')) {
209214

210215
addProcessFile(fileName);
211216

217+
if (Date.now() - lastSpinnerUpdate > 100) {
218+
lastSpinnerUpdate = Date.now();
219+
await new Promise(resolve => setTimeout(resolve, 0));
220+
}
221+
212222
let fileCache = project.cache[fileName];
213223
if (fileCache) {
214224
if (fileCache[0] !== fileMtime) {

packages/cli/lib/worker.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,26 @@ const languageServiceHost: ts.LanguageServiceHost = {
4545
};
4646
const languageService = ts.createLanguageService(languageServiceHost);
4747

48+
export function createLocal() {
49+
return {
50+
setup(...args: Parameters<typeof setup>) {
51+
return setup(...args);
52+
},
53+
lint(...args: Parameters<typeof lint>) {
54+
return lint(...args)[0];
55+
},
56+
lintAndFix(...args: Parameters<typeof lintAndFix>) {
57+
return lintAndFix(...args)[0];
58+
},
59+
hasCodeFixes(...args: Parameters<typeof hasCodeFixes>) {
60+
return hasCodeFixes(...args);
61+
},
62+
hasRules(...args: Parameters<typeof hasRules>) {
63+
return hasRules(...args)[0];
64+
},
65+
};
66+
}
67+
4868
export function create() {
4969
const worker = new worker_threads.Worker(__filename);
5070
return {

0 commit comments

Comments
 (0)