ForkTsCheckerWebpackPlugin.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. const schema_utils_1 = __importDefault(require("schema-utils"));
  7. const cosmiconfig_1 = require("cosmiconfig");
  8. const deepmerge_1 = __importDefault(require("deepmerge"));
  9. const ForkTsCheckerWebpackPluginOptions_json_1 = __importDefault(require("./ForkTsCheckerWebpackPluginOptions.json"));
  10. const ForkTsCheckerWebpackPluginConfiguration_1 = require("./ForkTsCheckerWebpackPluginConfiguration");
  11. const ForkTsCheckerWebpackPluginState_1 = require("./ForkTsCheckerWebpackPluginState");
  12. const reporter_1 = require("./reporter");
  13. const TypeScriptSupport_1 = require("./typescript-reporter/TypeScriptSupport");
  14. const TypeScriptReporterRpcClient_1 = require("./typescript-reporter/reporter/TypeScriptReporterRpcClient");
  15. const assertEsLintSupport_1 = require("./eslint-reporter/assertEsLintSupport");
  16. const EsLintReporterRpcClient_1 = require("./eslint-reporter/reporter/EsLintReporterRpcClient");
  17. const tapStartToConnectAndRunReporter_1 = require("./hooks/tapStartToConnectAndRunReporter");
  18. const tapStopToDisconnectReporter_1 = require("./hooks/tapStopToDisconnectReporter");
  19. const tapAfterCompileToAddDependencies_1 = require("./hooks/tapAfterCompileToAddDependencies");
  20. const tapErrorToLogMessage_1 = require("./hooks/tapErrorToLogMessage");
  21. const pluginHooks_1 = require("./hooks/pluginHooks");
  22. const tapAfterEnvironmentToPatchWatching_1 = require("./hooks/tapAfterEnvironmentToPatchWatching");
  23. const pool_1 = require("./utils/async/pool");
  24. const os_1 = __importDefault(require("os"));
  25. class ForkTsCheckerWebpackPlugin {
  26. constructor(options = {}) {
  27. const explorerSync = cosmiconfig_1.cosmiconfigSync('fork-ts-checker');
  28. const { config: externalOptions } = explorerSync.search() || {};
  29. // first validate options directly passed to the constructor
  30. const configuration = { name: 'ForkTsCheckerWebpackPlugin' };
  31. schema_utils_1.default(ForkTsCheckerWebpackPluginOptions_json_1.default, options, configuration);
  32. this.options = deepmerge_1.default(externalOptions || {}, options || {});
  33. // then validate merged options
  34. schema_utils_1.default(ForkTsCheckerWebpackPluginOptions_json_1.default, this.options, configuration);
  35. }
  36. /**
  37. * @deprecated Use ForkTsCheckerWebpackPlugin.issuesPool instead
  38. */
  39. static get pool() {
  40. // for backward compatibility
  41. return ForkTsCheckerWebpackPlugin.issuesPool;
  42. }
  43. static getCompilerHooks(compiler) {
  44. return pluginHooks_1.getForkTsCheckerWebpackPluginHooks(compiler);
  45. }
  46. apply(compiler) {
  47. const configuration = ForkTsCheckerWebpackPluginConfiguration_1.createForkTsCheckerWebpackPluginConfiguration(compiler, this.options);
  48. const state = ForkTsCheckerWebpackPluginState_1.createForkTsCheckerWebpackPluginState();
  49. const issuesReporters = [];
  50. const dependenciesReporters = [];
  51. if (configuration.typescript.enabled) {
  52. TypeScriptSupport_1.assertTypeScriptSupport(configuration.typescript);
  53. issuesReporters.push(TypeScriptReporterRpcClient_1.createTypeScriptReporterRpcClient(configuration.typescript));
  54. dependenciesReporters.push(TypeScriptReporterRpcClient_1.createTypeScriptReporterRpcClient(configuration.typescript));
  55. }
  56. if (configuration.eslint.enabled) {
  57. assertEsLintSupport_1.assertEsLintSupport(configuration.eslint);
  58. issuesReporters.push(EsLintReporterRpcClient_1.createEsLintReporterRpcClient(configuration.eslint));
  59. dependenciesReporters.push(EsLintReporterRpcClient_1.createEsLintReporterRpcClient(configuration.eslint));
  60. }
  61. if (issuesReporters.length) {
  62. const issuesReporter = reporter_1.createAggregatedReporter(reporter_1.composeReporterRpcClients(issuesReporters));
  63. const dependenciesReporter = reporter_1.createAggregatedReporter(reporter_1.composeReporterRpcClients(dependenciesReporters));
  64. tapAfterEnvironmentToPatchWatching_1.tapAfterEnvironmentToPatchWatching(compiler, state);
  65. tapStartToConnectAndRunReporter_1.tapStartToConnectAndRunReporter(compiler, issuesReporter, dependenciesReporter, configuration, state);
  66. tapAfterCompileToAddDependencies_1.tapAfterCompileToAddDependencies(compiler, configuration, state);
  67. tapStopToDisconnectReporter_1.tapStopToDisconnectReporter(compiler, issuesReporter, dependenciesReporter, state);
  68. tapErrorToLogMessage_1.tapErrorToLogMessage(compiler, configuration);
  69. }
  70. else {
  71. throw new Error(`ForkTsCheckerWebpackPlugin is configured to not use any issue reporter. It's probably a configuration issue.`);
  72. }
  73. }
  74. }
  75. exports.ForkTsCheckerWebpackPlugin = ForkTsCheckerWebpackPlugin;
  76. /**
  77. * Current version of the plugin
  78. */
  79. ForkTsCheckerWebpackPlugin.version = '6.5.3'; // will be replaced by the @semantic-release/exec
  80. /**
  81. * Default pools for the plugin concurrency limit
  82. */
  83. ForkTsCheckerWebpackPlugin.issuesPool = pool_1.createPool(Math.max(1, os_1.default.cpus().length));
  84. ForkTsCheckerWebpackPlugin.dependenciesPool = pool_1.createPool(Math.max(1, os_1.default.cpus().length));