Issue.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const IssueSeverity_1 = require("./IssueSeverity");
  4. const IssueLocation_1 = require("./IssueLocation");
  5. function isIssue(value) {
  6. return (!!value &&
  7. typeof value === 'object' &&
  8. !!value.origin &&
  9. IssueSeverity_1.isIssueSeverity(value.severity) &&
  10. !!value.code &&
  11. !!value.message);
  12. }
  13. exports.isIssue = isIssue;
  14. function compareStrings(stringA, stringB) {
  15. if (stringA === stringB) {
  16. return 0;
  17. }
  18. if (stringA === undefined || stringA === null) {
  19. return -1;
  20. }
  21. if (stringB === undefined || stringB === null) {
  22. return 1;
  23. }
  24. return stringA.toString().localeCompare(stringB.toString());
  25. }
  26. function compareIssues(issueA, issueB) {
  27. return (IssueSeverity_1.compareIssueSeverities(issueA.severity, issueB.severity) ||
  28. compareStrings(issueA.origin, issueB.origin) ||
  29. compareStrings(issueA.file, issueB.file) ||
  30. IssueLocation_1.compareIssueLocations(issueA.location, issueB.location) ||
  31. compareStrings(issueA.code, issueB.code) ||
  32. compareStrings(issueA.message, issueB.message) ||
  33. 0 /* EqualTo */);
  34. }
  35. function equalsIssues(issueA, issueB) {
  36. return compareIssues(issueA, issueB) === 0;
  37. }
  38. function deduplicateAndSortIssues(issues) {
  39. const sortedIssues = issues.filter(isIssue).sort(compareIssues);
  40. return sortedIssues.filter((issue, index) => index === 0 || !equalsIssues(issue, sortedIssues[index - 1]));
  41. }
  42. exports.deduplicateAndSortIssues = deduplicateAndSortIssues;