diff --git a/types/xmlserializer/index.d.ts b/types/xmlserializer/index.d.ts new file mode 100644 index 0000000000..384def9ded --- /dev/null +++ b/types/xmlserializer/index.d.ts @@ -0,0 +1,48 @@ +// Type definitions for xmlserializer 0.6 +// Project: https://github.com/cburgmer/xmlserializer#readme +// Definitions by: Eoin O'Brien +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.2 + +/// + +import * as parse5 from 'parse5'; + +export as namespace xmlserializer; + +/** + * Serializes a DOM subtree or DOM document into XML/XHTML. + * + * It understands documents generated by `parse5` and regular browser DOMs (and + * thus can act as a drop-in replacement for `XMLSerializer` which for some + * browsers only serializes true XML documents). + * + * Currently some cases are treated differently to the `XMLSerializer` + * implementation of the browsers: + * + * - Invalid characters (ASCII control characters) that are invalid in XML 1.0 + * are removed on serialization. The browsers silently include those + * characters and on reparsing those documents throw a parser exception. + * - Dashes in comments are escaped to provide valid comments in XHTML. Firefox + * does not do this. + * - The xmlns attribute has higher precedence than the type of the DOM object + * passed to the serializer. + * - Small differences in style: no space in self-closing tag, empty value for + * boolean attributes, quoting of single apostrophes in attribute values. + * + * This behaviour might become optional in the future. + * + * @example + * import * as xmlserializer from 'xmlserializer'; + * import * as parse5 from 'parse5'; + * + * const html2xhtml = (htmlString: string) => { + * const dom = parse5.parse(htmlString); + * return xmlserializer.serializeToString(dom); + * }; + * + * console.log(html2xhtml('
')); + * + * @param node the DOM element to be serialized to XML/XHTML + */ +export function serializeToString(node: parse5.Element): string; diff --git a/types/xmlserializer/package.json b/types/xmlserializer/package.json new file mode 100644 index 0000000000..da7376aaf1 --- /dev/null +++ b/types/xmlserializer/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "dependencies": { + "parse5": "^5.1.0" + } +} diff --git a/types/xmlserializer/tsconfig.json b/types/xmlserializer/tsconfig.json new file mode 100644 index 0000000000..48e2207ddb --- /dev/null +++ b/types/xmlserializer/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "xmlserializer-tests.ts" + ] +} diff --git a/types/xmlserializer/tslint.json b/types/xmlserializer/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/xmlserializer/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } diff --git a/types/xmlserializer/xmlserializer-tests.ts b/types/xmlserializer/xmlserializer-tests.ts new file mode 100644 index 0000000000..2e16f3a52a --- /dev/null +++ b/types/xmlserializer/xmlserializer-tests.ts @@ -0,0 +1,8 @@ +import * as xmlserializer from 'xmlserializer'; +import * as parse5 from 'parse5'; + +const htmlString = '
'; +const dom = parse5.parse(htmlString); + +// $ExpectType string +xmlserializer.serializeToString(dom);