[@types/amphtml-validator] New type definitions (#23923)

* feat(amphtml-validator): add type definitions for amphtml-validator

* feat(amphtml-validator): PR reviews - fix lint rules, consolidate files, remove comments, improve tests
This commit is contained in:
Kevin Tjiåm
2018-02-27 10:14:16 +08:00
committed by Andy
parent 920b679eca
commit 62c721de25
4 changed files with 201 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
import * as ampHtmlValidator from "amphtml-validator";
(async () => {
const validator = await ampHtmlValidator.getInstance();
const result = validator.validateString("<html></html>");
const { status, errors } = result;
if (status === "FAIL" || status === "UNKNOWN") {
const errs = errors.map(err => {
const {
severity,
line,
col,
message,
specUrl,
category,
code,
params
} = err;
return err;
});
}
})();
(() => {
const validator = ampHtmlValidator.newInstance("");
const result = validator.validateString("<html></html>");
const { status, errors } = result;
})();

156
types/amphtml-validator/index.d.ts vendored Normal file
View File

@@ -0,0 +1,156 @@
// Type definitions for amphtml-validator 1.0
// Project: https://github.com/ampproject/amphtml/tree/master/validator/nodejs
// Definitions by: Kevin Tjiam <https://github.com/kevincharm>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3
/// <reference types="node" />
import { Context, Script } from "vm";
export interface ValidationError {
severity: ValidationErrorSeverity;
line: number;
col: number;
message: string;
specUrl: string | null;
category: ErrorCategoryCode;
code: ValidationErrorCode;
params: string[];
}
export interface ValidationResult {
status: ValidationResultStatus;
errors: ValidationError[];
}
export class Validator extends Script {
sandbox: Context;
validateString(stringToValidate: string): ValidationResult;
}
export function getInstance(
validatorJs?: string,
userAgent?: string
): Promise<Validator>;
export function newInstance(validatorJsContents: string): Validator;
/**
* Enums from protobufs
* https://github.com/ampproject/amphtml/blob/master/validator/validator.proto
*/
export type ValidationResultStatus = "UNKNOWN" | "PASS" | "FAIL";
export type ValidationErrorSeverity = "UNKNOWN_SEVERITY" | "ERROR" | "WARNING";
export type ErrorCategoryCode =
| "UNKNOWN"
| "GENERIC"
| "DISALLOWED_HTML_WITH_AMP_EQUIVALENT"
| "DISALLOWED_HTML"
| "AUTHOR_STYLESHEET_PROBLEM"
| "MANDATORY_AMP_TAG_MISSING_OR_INCORRECT"
| "AMP_TAG_PROBLEM"
| "CUSTOM_JAVASCRIPT_DISALLOWED"
| "AMP_LAYOUT_PROBLEM"
| "AMP_HTML_TEMPLATE_PROBLEM"
| "DEPRECATION";
export type ValidationErrorCode =
| "UNKNOWN_CODE"
| "MANDATORY_TAG_MISSING"
| "TAG_REQUIRED_BY_MISSING"
| "WARNING_TAG_REQUIRED_BY_MISSING"
| "WARNING_EXTENSION_UNUSED"
| "EXTENSION_UNUSED"
| "WARNING_EXTENSION_DEPRECATED_VERSION"
| "ATTR_REQUIRED_BUT_MISSING"
| "DISALLOWED_TAG"
| "GENERAL_DISALLOWED_TAG"
| "DISALLOWED_SCRIPT_TAG"
| "DISALLOWED_ATTR"
| "DISALLOWED_STYLE_ATTR"
| "INVALID_ATTR_VALUE"
| "DUPLICATE_ATTRIBUTE"
| "ATTR_VALUE_REQUIRED_BY_LAYOUT"
| "IMPLIED_LAYOUT_INVALID"
| "SPECIFIED_LAYOUT_INVALID"
| "MANDATORY_ATTR_MISSING"
| "MANDATORY_ONEOF_ATTR_MISSING"
| "DUPLICATE_DIMENSION"
| "DUPLICATE_UNIQUE_TAG"
| "DUPLICATE_UNIQUE_TAG_WARNING"
| "WRONG_PARENT_TAG"
| "STYLESHEET_TOO_LONG"
| "MANDATORY_CDATA_MISSING_OR_INCORRECT"
| "CDATA_VIOLATES_BLACKLIST"
| "NON_WHITESPACE_CDATA_ENCOUNTERED"
| "DEPRECATED_ATTR"
| "DEPRECATED_TAG"
| "MANDATORY_PROPERTY_MISSING_FROM_ATTR_VALUE"
| "INVALID_PROPERTY_VALUE_IN_ATTR_VALUE"
| "MISSING_URL"
| "INVALID_URL"
| "INVALID_URL_PROTOCOL"
| "DISALLOWED_DOMAIN"
| "DISALLOWED_RELATIVE_URL"
| "DISALLOWED_PROPERTY_IN_ATTR_VALUE"
| "MUTUALLY_EXCLUSIVE_ATTRS"
| "UNESCAPED_TEMPLATE_IN_ATTR_VALUE"
| "TEMPLATE_PARTIAL_IN_ATTR_VALUE"
| "TEMPLATE_IN_ATTR_NAME"
| "INCONSISTENT_UNITS_FOR_WIDTH_AND_HEIGHT"
| "DISALLOWED_TAG_ANCESTOR"
| "MANDATORY_LAST_CHILD_TAG"
| "MANDATORY_TAG_ANCESTOR"
| "MANDATORY_TAG_ANCESTOR_WITH_HINT"
| "ATTR_DISALLOWED_BY_IMPLIED_LAYOUT"
| "ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT"
| "INCORRECT_NUM_CHILD_TAGS"
| "INCORRECT_MIN_NUM_CHILD_TAGS"
| "DISALLOWED_CHILD_TAG_NAME"
| "DISALLOWED_FIRST_CHILD_TAG_NAME"
| "DISALLOWED_MANUFACTURED_BODY"
| "CHILD_TAG_DOES_NOT_SATISFY_REFERENCE_POINT"
| "MANDATORY_REFERENCE_POINT_MISSING"
| "DUPLICATE_REFERENCE_POINT"
| "TAG_NOT_ALLOWED_TO_HAVE_SIBLINGS"
| "TAG_REFERENCE_POINT_CONFLICT"
| "CHILD_TAG_DOES_NOT_SATISFY_REFERENCE_POINT_SINGULAR"
| "BASE_TAG_MUST_PRECEED_ALL_URLS"
| "MISSING_REQUIRED_EXTENSION"
| "ATTR_MISSING_REQUIRED_EXTENSION"
| "DOCUMENT_TOO_COMPLEX"
| "INVALID_UTF8"
| "CSS_SYNTAX"
| "CSS_SYNTAX_INVALID_AT_RULE"
| "CSS_SYNTAX_STRAY_TRAILING_BACKSLASH"
| "CSS_SYNTAX_UNTERMINATED_COMMENT"
| "CSS_SYNTAX_UNTERMINATED_STRING"
| "CSS_SYNTAX_BAD_URL"
| "CSS_SYNTAX_EOF_IN_PRELUDE_OF_QUALIFIED_RULE"
| "CSS_SYNTAX_INVALID_DECLARATION"
| "CSS_SYNTAX_INCOMPLETE_DECLARATION"
| "CSS_SYNTAX_ERROR_IN_PSEUDO_SELECTOR"
| "CSS_SYNTAX_MISSING_SELECTOR"
| "CSS_SYNTAX_NOT_A_SELECTOR_START"
| "CSS_SYNTAX_UNPARSED_INPUT_REMAINS_IN_SELECTOR"
| "CSS_SYNTAX_MISSING_URL"
| "CSS_SYNTAX_INVALID_URL"
| "CSS_SYNTAX_INVALID_URL_PROTOCOL"
| "CSS_SYNTAX_DISALLOWED_DOMAIN"
| "CSS_SYNTAX_DISALLOWED_RELATIVE_URL"
| "CSS_SYNTAX_INVALID_ATTR_SELECTOR"
| "CSS_SYNTAX_INVALID_PROPERTY"
| "CSS_SYNTAX_INVALID_PROPERTY_NOLIST"
| "CSS_SYNTAX_QUALIFIED_RULE_HAS_NO_DECLARATIONS"
| "CSS_SYNTAX_DISALLOWED_QUALIFIED_RULE_MUST_BE_INSIDE_KEYFRAME"
| "CSS_SYNTAX_DISALLOWED_KEYFRAME_INSIDE_KEYFRAME"
| "CSS_SYNTAX_MALFORMED_MEDIA_QUERY"
| "CSS_SYNTAX_DISALLOWED_MEDIA_TYPE"
| "CSS_SYNTAX_DISALLOWED_MEDIA_FEATURE"
| "CSS_SYNTAX_DISALLOWED_PROPERTY_VALUE"
| "CSS_SYNTAX_DISALLOWED_PROPERTY_VALUE_WITH_HINT"
| "CSS_SYNTAX_PROPERTY_DISALLOWED_WITHIN_AT_RULE"
| "CSS_SYNTAX_PROPERTY_DISALLOWED_TOGETHER_WITH"
| "CSS_SYNTAX_PROPERTY_REQUIRES_QUALIFICATION";

View File

@@ -0,0 +1,16 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": ["es6"],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"baseUrl": "../",
"typeRoots": ["../"],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": ["index.d.ts", "amphtml-validator-tests.ts"]
}

View File

@@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }