FilesChange.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 substract_1 = __importDefault(require("../utils/array/substract"));
  7. const unique_1 = __importDefault(require("../utils/array/unique"));
  8. // we ignore package.json file because of https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/issues/674
  9. const IGNORED_FILES = ['package.json'];
  10. const isIgnoredFile = (file) => IGNORED_FILES.some((ignoredFile) => file.endsWith(`/${ignoredFile}`) || file.endsWith(`\\${ignoredFile}`));
  11. const compilerFilesChangeMap = new WeakMap();
  12. function getFilesChange(compiler) {
  13. const { changedFiles = [], deletedFiles = [] } = compilerFilesChangeMap.get(compiler) || {
  14. changedFiles: [],
  15. deletedFiles: [],
  16. };
  17. return {
  18. changedFiles: changedFiles.filter((changedFile) => !isIgnoredFile(changedFile)),
  19. deletedFiles: deletedFiles.filter((deletedFile) => !isIgnoredFile(deletedFile)),
  20. };
  21. }
  22. exports.getFilesChange = getFilesChange;
  23. function updateFilesChange(compiler, change) {
  24. compilerFilesChangeMap.set(compiler, aggregateFilesChanges([getFilesChange(compiler), change]));
  25. }
  26. exports.updateFilesChange = updateFilesChange;
  27. function clearFilesChange(compiler) {
  28. compilerFilesChangeMap.delete(compiler);
  29. }
  30. exports.clearFilesChange = clearFilesChange;
  31. /**
  32. * Computes aggregated files change based on the subsequent files changes.
  33. *
  34. * @param changes List of subsequent files changes
  35. * @returns Files change that represents all subsequent changes as a one event
  36. */
  37. function aggregateFilesChanges(changes) {
  38. let changedFiles = [];
  39. let deletedFiles = [];
  40. for (const change of changes) {
  41. changedFiles = unique_1.default(substract_1.default(changedFiles, change.deletedFiles).concat(change.changedFiles || []));
  42. deletedFiles = unique_1.default(substract_1.default(deletedFiles, change.changedFiles).concat(change.deletedFiles || []));
  43. }
  44. return {
  45. changedFiles,
  46. deletedFiles,
  47. };
  48. }
  49. exports.aggregateFilesChanges = aggregateFilesChanges;