123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- "use strict";
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.tapStartToRunWorkers = void 0;
- const node_abort_controller_1 = require("node-abort-controller");
- const files_change_1 = require("../files-change");
- const infrastructure_logger_1 = require("../infrastructure-logger");
- const plugin_hooks_1 = require("../plugin-hooks");
- const plugin_pools_1 = require("../plugin-pools");
- const intercept_done_to_get_dev_server_tap_1 = require("./intercept-done-to-get-dev-server-tap");
- const tap_after_compile_to_get_issues_1 = require("./tap-after-compile-to-get-issues");
- const tap_done_to_async_get_issues_1 = require("./tap-done-to-async-get-issues");
- function tapStartToRunWorkers(compiler, getIssuesWorker, getDependenciesWorker, config, state) {
- const hooks = (0, plugin_hooks_1.getPluginHooks)(compiler);
- const { log, debug } = (0, infrastructure_logger_1.getInfrastructureLogger)(compiler);
- compiler.hooks.run.tap('ForkTsCheckerWebpackPlugin', () => {
- if (!state.initialized) {
- debug('Initializing plugin for single run (not async).');
- state.initialized = true;
- state.watching = false;
- (0, tap_after_compile_to_get_issues_1.tapAfterCompileToGetIssues)(compiler, config, state);
- }
- });
- compiler.hooks.watchRun.tap('ForkTsCheckerWebpackPlugin', () => __awaiter(this, void 0, void 0, function* () {
- if (!state.initialized) {
- state.initialized = true;
- state.watching = true;
- if (config.async) {
- debug('Initializing plugin for watch run (async).');
- (0, tap_done_to_async_get_issues_1.tapDoneToAsyncGetIssues)(compiler, config, state);
- (0, intercept_done_to_get_dev_server_tap_1.interceptDoneToGetDevServerTap)(compiler, config, state);
- }
- else {
- debug('Initializing plugin for watch run (not async).');
- (0, tap_after_compile_to_get_issues_1.tapAfterCompileToGetIssues)(compiler, config, state);
- }
- }
- }));
- compiler.hooks.compilation.tap('ForkTsCheckerWebpackPlugin', (compilation) => __awaiter(this, void 0, void 0, function* () {
- if (compilation.compiler !== compiler) {
- // run only for the compiler that the plugin was registered for
- return;
- }
- // get current iteration number
- const iteration = ++state.iteration;
- // abort previous iteration
- if (state.abortController) {
- debug(`Aborting iteration ${iteration - 1}.`);
- state.abortController.abort();
- }
- // create new abort controller for the new iteration
- const abortController = new node_abort_controller_1.AbortController();
- state.abortController = abortController;
- let filesChange = {};
- if (state.watching) {
- filesChange = (0, files_change_1.consumeFilesChange)(compiler);
- log([
- 'Calling reporter service for incremental check.',
- ` Changed files: ${JSON.stringify(filesChange.changedFiles)}`,
- ` Deleted files: ${JSON.stringify(filesChange.deletedFiles)}`,
- ].join('\n'));
- }
- else {
- log('Calling reporter service for single check.');
- }
- filesChange = yield hooks.start.promise(filesChange, compilation);
- let aggregatedFilesChange = filesChange;
- if (state.aggregatedFilesChange) {
- aggregatedFilesChange = (0, files_change_1.aggregateFilesChanges)([aggregatedFilesChange, filesChange]);
- debug([
- `Aggregating with previous files change, iteration ${iteration}.`,
- ` Changed files: ${JSON.stringify(aggregatedFilesChange.changedFiles)}`,
- ` Deleted files: ${JSON.stringify(aggregatedFilesChange.deletedFiles)}`,
- ].join('\n'));
- }
- state.aggregatedFilesChange = aggregatedFilesChange;
- // submit one at a time for a single compiler
- state.issuesPromise = (state.issuesPromise || Promise.resolve())
- // resolve to undefined on error
- .catch(() => undefined)
- .then(() => {
- // early return
- if (abortController.signal.aborted) {
- return undefined;
- }
- debug(`Submitting the getIssuesWorker to the pool, iteration ${iteration}.`);
- return plugin_pools_1.issuesPool.submit(() => __awaiter(this, void 0, void 0, function* () {
- try {
- debug(`Running the getIssuesWorker, iteration ${iteration}.`);
- const issues = yield getIssuesWorker(aggregatedFilesChange, state.watching);
- if (state.aggregatedFilesChange === aggregatedFilesChange) {
- state.aggregatedFilesChange = undefined;
- }
- if (state.abortController === abortController) {
- state.abortController = undefined;
- }
- return issues;
- }
- catch (error) {
- hooks.error.call(error, compilation);
- return undefined;
- }
- finally {
- debug(`The getIssuesWorker finished its job, iteration ${iteration}.`);
- }
- }), abortController.signal);
- });
- debug(`Submitting the getDependenciesWorker to the pool, iteration ${iteration}.`);
- state.dependenciesPromise = plugin_pools_1.dependenciesPool.submit(() => __awaiter(this, void 0, void 0, function* () {
- try {
- debug(`Running the getDependenciesWorker, iteration ${iteration}.`);
- return yield getDependenciesWorker(filesChange);
- }
- catch (error) {
- hooks.error.call(error, compilation);
- return undefined;
- }
- finally {
- debug(`The getDependenciesWorker finished its job, iteration ${iteration}.`);
- }
- })); // don't pass abortController.signal because getDependencies() is blocking
- }));
- }
- exports.tapStartToRunWorkers = tapStartToRunWorkers;
|