You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
4.3 KiB
120 lines
4.3 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
class NormalizedMessage { |
|
constructor(data) { |
|
this.type = data.type; |
|
this.code = data.code; |
|
this.severity = data.severity; |
|
this.content = data.content; |
|
this.file = data.file; |
|
this.line = data.line; |
|
this.character = data.character; |
|
this.stack = data.stack; |
|
} |
|
static createFromJSON(json) { |
|
return new NormalizedMessage(json); |
|
} |
|
static compare(messageA, messageB) { |
|
if (!(messageA instanceof NormalizedMessage)) { |
|
return -1; |
|
} |
|
if (!(messageB instanceof NormalizedMessage)) { |
|
return 1; |
|
} |
|
return (NormalizedMessage.compareTypes(messageA.type, messageB.type) || |
|
NormalizedMessage.compareOptionalStrings(messageA.file, messageB.file) || |
|
NormalizedMessage.compareSeverities(messageA.severity, messageB.severity) || |
|
NormalizedMessage.compareNumbers(messageA.line, messageB.line) || |
|
NormalizedMessage.compareNumbers(messageA.character, messageB.character) || |
|
// code can be string (lint failure) or number (typescript error) - should the following line cater for this in some way? |
|
NormalizedMessage.compareOptionalStrings(messageA.code, messageB.code) || |
|
NormalizedMessage.compareOptionalStrings(messageA.content, messageB.content) || |
|
NormalizedMessage.compareOptionalStrings(messageA.stack, messageB.stack) || |
|
0 /* EqualTo */); |
|
} |
|
static equals(messageA, messageB) { |
|
return this.compare(messageA, messageB) === 0; |
|
} |
|
static deduplicate(messages) { |
|
return messages.sort(NormalizedMessage.compare).filter((message, index) => { |
|
return (index === 0 || !NormalizedMessage.equals(message, messages[index - 1])); |
|
}); |
|
} |
|
static compareTypes(typeA, typeB) { |
|
const priorities = [typeA, typeB].map(type => { |
|
return [ |
|
NormalizedMessage.TYPE_LINT /* 0 */, |
|
NormalizedMessage.TYPE_DIAGNOSTIC /* 1 */ |
|
].indexOf(type); |
|
}); |
|
return priorities[0] - priorities[1]; |
|
} |
|
static compareSeverities(severityA, severityB) { |
|
const priorities = [severityA, severityB].map(type => { |
|
return [ |
|
NormalizedMessage.SEVERITY_WARNING /* 0 */, |
|
NormalizedMessage.SEVERITY_ERROR /* 1 */ |
|
].indexOf(type); |
|
}); |
|
return priorities[0] - priorities[1]; |
|
} |
|
static compareOptionalStrings(stringA, stringB) { |
|
if (stringA === stringB) { |
|
return 0; |
|
} |
|
if (stringA === undefined || stringA === null) { |
|
return -1; |
|
} |
|
if (stringB === undefined || stringB === null) { |
|
return 1; |
|
} |
|
return stringA.toString().localeCompare(stringB.toString()); |
|
} |
|
static compareNumbers(numberA, numberB) { |
|
if (numberA === numberB) { |
|
return 0; |
|
} |
|
if (numberA === undefined || numberA === null) { |
|
return -1; |
|
} |
|
if (numberB === undefined || numberB === null) { |
|
return 1; |
|
} |
|
return numberA - numberB; |
|
} |
|
toJSON() { |
|
return { |
|
type: this.type, |
|
code: this.code, |
|
severity: this.severity, |
|
content: this.content, |
|
file: this.file, |
|
line: this.line, |
|
character: this.character, |
|
stack: this.stack |
|
}; |
|
} |
|
isDiagnosticType() { |
|
return NormalizedMessage.TYPE_DIAGNOSTIC === this.type; |
|
} |
|
isLintType() { |
|
return NormalizedMessage.TYPE_LINT === this.type; |
|
} |
|
getFormattedCode() { |
|
return this.isDiagnosticType() ? 'TS' + this.code : this.code; |
|
} |
|
isErrorSeverity() { |
|
return this.severity === NormalizedMessage.SEVERITY_ERROR; |
|
} |
|
isWarningSeverity() { |
|
return this.severity === NormalizedMessage.SEVERITY_WARNING; |
|
} |
|
} |
|
NormalizedMessage.TYPE_DIAGNOSTIC = 'diagnostic'; |
|
NormalizedMessage.TYPE_LINT = 'lint'; |
|
// severity types |
|
NormalizedMessage.SEVERITY_ERROR = 'error'; |
|
NormalizedMessage.SEVERITY_WARNING = 'warning'; |
|
NormalizedMessage.ERROR_CODE_INTERNAL = 'INTERNAL_ERROR'; |
|
exports.NormalizedMessage = NormalizedMessage; |
|
//# sourceMappingURL=NormalizedMessage.js.map
|