Skip to content

Commit f7dfdcf

Browse files
authored
feat: migrate from reporters to workers (#691)
Use simple functions and modules to simplify worker code
1 parent a0ad06f commit f7dfdcf

File tree

105 files changed

+2187
-3123
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+2187
-3123
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
*.log
33

44
# Package artifacts
5-
lib
5+
/lib
66

77
# Package archive used by e2e tests
88
fork-ts-checker-webpack-plugin-0.0.0-semantic-release.tgz

src/ForkTsCheckerWebpackPlugin.ts

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import * as path from 'path';
2+
13
import { cosmiconfigSync } from 'cosmiconfig';
24
import merge from 'deepmerge';
35
import type { JSONSchema7 } from 'json-schema';
@@ -15,10 +17,12 @@ import { dependenciesPool, issuesPool } from './hooks/pluginPools';
1517
import { tapAfterCompileToAddDependencies } from './hooks/tapAfterCompileToAddDependencies';
1618
import { tapAfterEnvironmentToPatchWatching } from './hooks/tapAfterEnvironmentToPatchWatching';
1719
import { tapErrorToLogMessage } from './hooks/tapErrorToLogMessage';
18-
import { tapStartToConnectAndRunReporter } from './hooks/tapStartToConnectAndRunReporter';
19-
import { tapStopToDisconnectReporter } from './hooks/tapStopToDisconnectReporter';
20-
import { createTypeScriptReporterRpcClient } from './typescript-reporter/reporter/TypeScriptReporterRpcClient';
21-
import { assertTypeScriptSupport } from './typescript-reporter/TypeScriptSupport';
20+
import { tapStartToRunWorkers } from './hooks/tapStartToRunWorkers';
21+
import { tapStopToTerminateWorkers } from './hooks/tapStopToTerminateWorkers';
22+
import { assertTypeScriptSupport } from './typescript/TypeScriptSupport';
23+
import type { GetDependenciesWorker } from './typescript/worker/get-dependencies-worker';
24+
import type { GetIssuesWorker } from './typescript/worker/get-issues-worker';
25+
import { createRpcWorker } from './utils/rpc';
2226

2327
class ForkTsCheckerWebpackPlugin {
2428
/**
@@ -61,19 +65,20 @@ class ForkTsCheckerWebpackPlugin {
6165
const state = createForkTsCheckerWebpackPluginState();
6266

6367
assertTypeScriptSupport(configuration.typescript);
64-
const issuesReporter = createTypeScriptReporterRpcClient(configuration.typescript);
65-
const dependenciesReporter = createTypeScriptReporterRpcClient(configuration.typescript);
68+
const getIssuesWorker = createRpcWorker<GetIssuesWorker>(
69+
path.resolve(__dirname, './typescript/worker/get-issues-worker.js'),
70+
configuration.typescript,
71+
configuration.typescript.memoryLimit
72+
);
73+
const getDependenciesWorker = createRpcWorker<GetDependenciesWorker>(
74+
path.resolve(__dirname, './typescript/worker/get-dependencies-worker.js'),
75+
configuration.typescript
76+
);
6677

6778
tapAfterEnvironmentToPatchWatching(compiler, state);
68-
tapStartToConnectAndRunReporter(
69-
compiler,
70-
issuesReporter,
71-
dependenciesReporter,
72-
configuration,
73-
state
74-
);
79+
tapStartToRunWorkers(compiler, getIssuesWorker, getDependenciesWorker, configuration, state);
7580
tapAfterCompileToAddDependencies(compiler, configuration, state);
76-
tapStopToDisconnectReporter(compiler, issuesReporter, dependenciesReporter, state);
81+
tapStopToTerminateWorkers(compiler, getIssuesWorker, getDependenciesWorker, state);
7782
tapErrorToLogMessage(compiler, configuration);
7883
}
7984
}

src/ForkTsCheckerWebpackPluginConfiguration.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import type { IssueConfiguration } from './issue/IssueConfiguration';
77
import { createIssueConfiguration } from './issue/IssueConfiguration';
88
import type { LoggerConfiguration } from './logger/LoggerConfiguration';
99
import { createLoggerConfiguration } from './logger/LoggerConfiguration';
10-
import type { TypeScriptReporterConfiguration } from './typescript-reporter/TypeScriptReporterConfiguration';
11-
import { createTypeScriptReporterConfiguration } from './typescript-reporter/TypeScriptReporterConfiguration';
10+
import type { TypeScriptReporterConfiguration } from './typescript/TypeScriptReporterConfiguration';
11+
import { createTypeScriptReporterConfiguration } from './typescript/TypeScriptReporterConfiguration';
1212

1313
interface ForkTsCheckerWebpackPluginConfiguration {
1414
async: boolean;

src/ForkTsCheckerWebpackPluginOptions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { FormatterOptions } from './formatter';
22
import type { IssueOptions } from './issue/IssueOptions';
33
import type LoggerOptions from './logger/LoggerOptions';
4-
import type { TypeScriptReporterOptions } from './typescript-reporter/TypeScriptReporterOptions';
4+
import type { TypeScriptReporterOptions } from './typescript/TypeScriptReporterOptions';
55

66
interface ForkTsCheckerWebpackPluginOptions {
77
async?: boolean;

src/ForkTsCheckerWebpackPluginState.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,26 @@
11
import type { FullTap } from 'tapable';
22

3+
import type { FilesMatch } from './files-match';
34
import type { Issue } from './issue';
4-
import type { FilesMatch, Report } from './reporter';
55

66
interface ForkTsCheckerWebpackPluginState {
7-
issuesReportPromise: Promise<Report | undefined>;
8-
dependenciesReportPromise: Promise<Report | undefined>;
97
issuesPromise: Promise<Issue[] | undefined>;
108
dependenciesPromise: Promise<FilesMatch | undefined>;
119
lastDependencies: FilesMatch | undefined;
1210
watching: boolean;
1311
initialized: boolean;
12+
iteration: number;
1413
webpackDevServerDoneTap: FullTap | undefined;
1514
}
1615

1716
function createForkTsCheckerWebpackPluginState(): ForkTsCheckerWebpackPluginState {
1817
return {
19-
issuesReportPromise: Promise.resolve(undefined),
20-
dependenciesReportPromise: Promise.resolve(undefined),
2118
issuesPromise: Promise.resolve(undefined),
2219
dependenciesPromise: Promise.resolve(undefined),
2320
lastDependencies: undefined,
2421
watching: false,
2522
initialized: false,
23+
iteration: 0,
2624
webpackDevServerDoneTap: undefined,
2725
};
2826
}

src/error/OperationCanceledError.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/reporter/FilesChange.ts renamed to src/files-change.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
import type { Compiler } from 'webpack';
1+
import type * as webpack from 'webpack';
22

3-
import subtract from '../utils/array/substract';
4-
import unique from '../utils/array/unique';
3+
import subtract from './utils/array/substract';
4+
import unique from './utils/array/unique';
55

66
interface FilesChange {
77
changedFiles?: string[];
88
deletedFiles?: string[];
99
}
1010

11-
const compilerFilesChangeMap = new WeakMap<Compiler, FilesChange>();
11+
const compilerFilesChangeMap = new WeakMap<webpack.Compiler, FilesChange>();
1212

13-
function getFilesChange(compiler: Compiler): FilesChange {
13+
function getFilesChange(compiler: webpack.Compiler): FilesChange {
1414
return compilerFilesChangeMap.get(compiler) || { changedFiles: [], deletedFiles: [] };
1515
}
1616

17-
function updateFilesChange(compiler: Compiler, change: FilesChange): void {
17+
function updateFilesChange(compiler: webpack.Compiler, change: FilesChange): void {
1818
compilerFilesChangeMap.set(compiler, aggregateFilesChanges([getFilesChange(compiler), change]));
1919
}
2020

21-
function clearFilesChange(compiler: Compiler): void {
21+
function clearFilesChange(compiler: webpack.Compiler): void {
2222
compilerFilesChangeMap.delete(compiler);
2323
}
2424

File renamed without changes.

src/hooks/interceptDoneToGetWebpackDevServerTap.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ import type webpack from 'webpack';
22

33
import type { ForkTsCheckerWebpackPluginConfiguration } from '../ForkTsCheckerWebpackPluginConfiguration';
44
import type { ForkTsCheckerWebpackPluginState } from '../ForkTsCheckerWebpackPluginState';
5+
import { getInfrastructureLogger } from '../infrastructure-logger';
56

67
function interceptDoneToGetWebpackDevServerTap(
78
compiler: webpack.Compiler,
89
configuration: ForkTsCheckerWebpackPluginConfiguration,
910
state: ForkTsCheckerWebpackPluginState
1011
) {
12+
const { debug } = getInfrastructureLogger(compiler);
13+
1114
// inspired by https://github.com/ypresto/fork-ts-checker-async-overlay-webpack-plugin
1215
compiler.hooks.done.intercept({
1316
register: (tap) => {
@@ -16,6 +19,7 @@ function interceptDoneToGetWebpackDevServerTap(
1619
tap.type === 'sync' &&
1720
configuration.logger.devServer
1821
) {
22+
debug('Intercepting webpack-dev-server tap.');
1923
state.webpackDevServerDoneTap = tap;
2024
}
2125
return tap;

src/hooks/pluginHooks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { SyncHook, SyncWaterfallHook, AsyncSeriesWaterfallHook } from 'tapable';
22
import type * as webpack from 'webpack';
33

4+
import type { FilesChange } from '../files-change';
45
import type { Issue } from '../issue';
5-
import type { FilesChange } from '../reporter';
66

77
const compilerHookMap = new WeakMap<
88
webpack.Compiler | webpack.MultiCompiler,

0 commit comments

Comments
 (0)