tapStartToConnectAndRunReporter.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. "use strict";
  2. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  3. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  4. return new (P || (P = Promise))(function (resolve, reject) {
  5. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  6. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  7. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  8. step((generator = generator.apply(thisArg, _arguments || [])).next());
  9. });
  10. };
  11. Object.defineProperty(exports, "__esModule", { value: true });
  12. const pluginHooks_1 = require("./pluginHooks");
  13. const reporter_1 = require("../reporter");
  14. const OperationCanceledError_1 = require("../error/OperationCanceledError");
  15. const tapDoneToAsyncGetIssues_1 = require("./tapDoneToAsyncGetIssues");
  16. const tapAfterCompileToGetIssues_1 = require("./tapAfterCompileToGetIssues");
  17. const interceptDoneToGetWebpackDevServerTap_1 = require("./interceptDoneToGetWebpackDevServerTap");
  18. const ForkTsCheckerWebpackPlugin_1 = require("../ForkTsCheckerWebpackPlugin");
  19. function tapStartToConnectAndRunReporter(compiler, issuesReporter, dependenciesReporter, configuration, state) {
  20. const hooks = pluginHooks_1.getForkTsCheckerWebpackPluginHooks(compiler);
  21. compiler.hooks.run.tap('ForkTsCheckerWebpackPlugin', () => {
  22. if (!state.initialized) {
  23. state.initialized = true;
  24. state.watching = false;
  25. tapAfterCompileToGetIssues_1.tapAfterCompileToGetIssues(compiler, configuration, state);
  26. }
  27. });
  28. compiler.hooks.watchRun.tap('ForkTsCheckerWebpackPlugin', () => __awaiter(this, void 0, void 0, function* () {
  29. if (!state.initialized) {
  30. state.initialized = true;
  31. state.watching = true;
  32. if (configuration.async) {
  33. tapDoneToAsyncGetIssues_1.tapDoneToAsyncGetIssues(compiler, configuration, state);
  34. interceptDoneToGetWebpackDevServerTap_1.interceptDoneToGetWebpackDevServerTap(compiler, configuration, state);
  35. }
  36. else {
  37. tapAfterCompileToGetIssues_1.tapAfterCompileToGetIssues(compiler, configuration, state);
  38. }
  39. }
  40. }));
  41. compiler.hooks.compilation.tap('ForkTsCheckerWebpackPlugin', (compilation) => __awaiter(this, void 0, void 0, function* () {
  42. if (compilation.compiler !== compiler) {
  43. // run only for the compiler that the plugin was registered for
  44. return;
  45. }
  46. let change = {};
  47. if (state.watching) {
  48. change = reporter_1.getFilesChange(compiler);
  49. configuration.logger.infrastructure.info([
  50. 'Calling reporter service for incremental check.',
  51. ` Changed files: ${JSON.stringify(change.changedFiles)}`,
  52. ` Deleted files: ${JSON.stringify(change.deletedFiles)}`,
  53. ].join('\n'));
  54. }
  55. else {
  56. configuration.logger.infrastructure.info('Calling reporter service for single check.');
  57. }
  58. let resolveDependencies;
  59. let rejectDependencies;
  60. let resolveIssues;
  61. let rejectIssues;
  62. state.dependenciesPromise = new Promise((resolve, reject) => {
  63. resolveDependencies = resolve;
  64. rejectDependencies = reject;
  65. });
  66. state.issuesPromise = new Promise((resolve, reject) => {
  67. resolveIssues = resolve;
  68. rejectIssues = reject;
  69. });
  70. const previousIssuesReportPromise = state.issuesReportPromise;
  71. const previousDependenciesReportPromise = state.dependenciesReportPromise;
  72. change = yield hooks.start.promise(change, compilation);
  73. state.issuesReportPromise = ForkTsCheckerWebpackPlugin_1.ForkTsCheckerWebpackPlugin.issuesPool.submit((done) => new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
  74. try {
  75. yield issuesReporter.connect();
  76. const previousReport = yield previousIssuesReportPromise;
  77. if (previousReport) {
  78. yield previousReport.close();
  79. }
  80. const report = yield issuesReporter.getReport(change);
  81. resolve(report);
  82. report.getIssues().then(resolveIssues).catch(rejectIssues).finally(done);
  83. }
  84. catch (error) {
  85. if (error instanceof OperationCanceledError_1.OperationCanceledError) {
  86. hooks.canceled.call(compilation);
  87. }
  88. else {
  89. hooks.error.call(error, compilation);
  90. }
  91. resolve(undefined);
  92. resolveIssues(undefined);
  93. done();
  94. }
  95. })));
  96. state.dependenciesReportPromise = ForkTsCheckerWebpackPlugin_1.ForkTsCheckerWebpackPlugin.dependenciesPool.submit((done) => new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
  97. try {
  98. yield dependenciesReporter.connect();
  99. const previousReport = yield previousDependenciesReportPromise;
  100. if (previousReport) {
  101. yield previousReport.close();
  102. }
  103. const report = yield dependenciesReporter.getReport(change);
  104. resolve(report);
  105. report
  106. .getDependencies()
  107. .then(resolveDependencies)
  108. .catch(rejectDependencies)
  109. .finally(done);
  110. }
  111. catch (error) {
  112. if (error instanceof OperationCanceledError_1.OperationCanceledError) {
  113. hooks.canceled.call(compilation);
  114. }
  115. else {
  116. hooks.error.call(error, compilation);
  117. }
  118. resolve(undefined);
  119. resolveDependencies(undefined);
  120. done();
  121. }
  122. })));
  123. }));
  124. }
  125. exports.tapStartToConnectAndRunReporter = tapStartToConnectAndRunReporter;