diff --git a/types/html-validator/html-validator-tests.ts b/types/html-validator/html-validator-tests.ts index 28c52e3f24..ae27d025d6 100644 --- a/types/html-validator/html-validator-tests.ts +++ b/types/html-validator/html-validator-tests.ts @@ -14,24 +14,34 @@ const testHtml = ` `; validateHtml({ - data: testHtml, - format: 'json' + data: testHtml, + format: 'json', + headers: { + 'Content-Type': 'text/html' + }, }).then((validationResults: validateHtml.ParsedJsonAsValidationResults) => { - if (validationResults.messages.length === 0) { - console.warn(`File "test" contains W3C standard violations or guidelines neglects.`); - return; - } - - validationResults.messages.forEach((violation: validateHtml.ValidationMessageObject) => { - if (violation.type === 'error') { - console.log(`W3C standard violation: ${violation.message}`); + if (validationResults.messages.length === 0) { + console.warn(`File "test" contains W3C standard violations or guidelines neglects.`); + return; } - if (violation.type === 'info') { - console.warn(`W3C guidelines neglect: ${violation.message}`); - } + validationResults.messages.forEach((violation: validateHtml.ValidationMessageObject) => { + switch (violation.type) { + case 'error': + console.log(`W3C standard violation: ${violation.message}`); + break; + case 'info': + console.warn(`W3C guidelines neglect: ${violation.message}`); + break; + case 'non-document-error': + console.log(`W3C Non-Document error: ${violation.message}`); + break; + } - console.log(violation.extract); - console.log(`line: ${violation.lastLine}, column: ${violation.firstColumn}-${violation.lastColumn}\n`); - }); + if (!!(violation as validateHtml.ValidationMessageLocationObject).extract) { + const v = violation as validateHtml.ValidationMessageLocationObject; + console.log(v.extract); + console.log(`line: ${v.lastLine}, column: ${v.firstColumn}-${v.lastColumn}\n`); + } + }); }); diff --git a/types/html-validator/index.d.ts b/types/html-validator/index.d.ts index c6961bdced..328481472e 100644 --- a/types/html-validator/index.d.ts +++ b/types/html-validator/index.d.ts @@ -1,4 +1,4 @@ -// Type definitions for html-validator 4.1 +// Type definitions for html-validator 5.0 // Project: https://github.com/zrrrzzt/html-validator // Definitions by: Takesi Tokugawa // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -42,51 +42,77 @@ declare namespace HtmlValidator { xhtml = 'xhtml', xml = 'xml', gnu = 'gnu', - text = 'text' + text = 'text', } interface OptionsForHtmlFileAsValidationTargetAndObjectAsResult extends OptionsForHtmlFileAsValidationTarget { - format?: 'json'; + format?: 'json'; } interface OptionsForHtmlFileAsValidationTargetAndTextAsResults extends OptionsForHtmlFileAsValidationTarget { - format: 'html' | 'xhtml' | 'xml' | 'gnu' | 'text'; + format: 'html' | 'xhtml' | 'xml' | 'gnu' | 'text'; } interface OptionsForExternalUrlAsValidationTargetAndObjectAsResult extends OptionsForExternalUrlAsValidationTarget { - format?: 'json'; + format?: 'json'; } interface OptionsForExternalUrlAsValidationTargetAndTextAsResults extends OptionsForHtmlFileAsValidationTarget { - format: 'html' | 'xhtml' | 'xml' | 'gnu' | 'text'; + format: 'html' | 'xhtml' | 'xml' | 'gnu' | 'text'; } interface ParsedJsonAsValidationResults { - messages: ValidationMessageObject[]; + messages: ValidationMessageObject[]; } // Could be used to avoid string literals enum ValidationMessageTypes { error = 'error', - info = 'info' + info = 'info', + 'non-document-error' = 'non-document-error', } // Could be used to avoid string literals enum ValidationMessageSubTypes { - warning = 'warning' + fatal = 'fatal', + internal = 'internal', + io = 'io', + schema = 'schema', + warning = 'warning', } - interface ValidationMessageObject { - type: 'error' | 'info'; - subType?: 'warning'; - lastLine: number; - firstColumn: number; - lastColumn: number; - hiliteStart: number; - hiliteLength: number; - message: string; - extract: string; + interface ValidationMessageBasicObject { + message: string; } + + interface ValidationMessageBasicLocationObject { + lastLine: number; + firstColumn: number; + lastColumn: number; + hiliteStart: number; + hiliteLength: number; + extract: string; + } + + interface ValidationMessageBasicErrorObject { + type: 'error'; + subType?: 'fatal'; + } + + interface ValidationMessageBasicInfoObject { + type: 'info'; + subType?: 'warning'; + } + + interface ValidationMessageBasicNonDocumentErrorObject { + type: 'non-document-error'; + subType?: 'internal' | 'io' | 'schema'; + } + + type ValidationMessageSimpleObject = (ValidationMessageBasicErrorObject | ValidationMessageBasicInfoObject | ValidationMessageBasicNonDocumentErrorObject) & ValidationMessageBasicObject; + type ValidationMessageLocationObject = ValidationMessageSimpleObject & ValidationMessageBasicLocationObject; + + type ValidationMessageObject = ValidationMessageSimpleObject | ValidationMessageLocationObject; } export = HtmlValidator;