diff --git a/libxslt/libxslt-tests.ts b/libxslt/libxslt-tests.ts
new file mode 100644
index 00000000000000..544269b11e3579
--- /dev/null
+++ b/libxslt/libxslt-tests.ts
@@ -0,0 +1,102 @@
+///
+///
+
+import * as libxslt from 'libxslt';
+import * as libxmljs from 'libxmljs';
+
+const document: libxmljs.XMLDocument = libxslt.libxmljs.parseXmlString('');
+
+let stylesheet: libxslt.Stylesheet;
+
+stylesheet = libxslt.parse('');
+
+stylesheet = libxslt.parse(document);
+
+libxslt.parse('', (err, result) => {
+ if (err == null) {
+ stylesheet = result;
+ }
+});
+
+libxslt.parse(document, (err, result) => {
+ if (err == null) {
+ stylesheet = result;
+ }
+});
+
+libxslt.parseFile('/path/to/file', (err, result) => {
+ if (err == null) {
+ stylesheet = result;
+ }
+});
+
+let applyOptions: libxslt.ApplyOptions = {};
+
+applyOptions = {
+ outputFormat: 'string',
+ noWrapParams: true
+};
+
+let transformedString: string;
+
+let transformedDocument: libxmljs.XMLDocument;
+
+transformedString = stylesheet.apply('');
+
+transformedString = stylesheet.apply('', {});
+
+let applyResult = stylesheet.apply('', {}, applyOptions);
+
+if (typeof applyResult === 'string') {
+ transformedString = applyResult;
+} else {
+ transformedDocument = applyResult;
+}
+
+stylesheet.apply('', {}, applyOptions, (err, result) => {
+ if (err != null) {
+ return;
+ }
+
+ if (typeof result === 'string') {
+ transformedString = result;
+ } else {
+ transformedDocument = result;
+ }
+});
+
+transformedDocument = stylesheet.apply(document);
+
+transformedDocument = stylesheet.apply(document, {});
+
+applyResult = stylesheet.apply(document, {}, applyOptions);
+
+if (typeof applyResult === 'string') {
+ transformedString = applyResult;
+} else {
+ transformedDocument = applyResult;
+}
+
+stylesheet.apply(document, {}, applyOptions, (err, result) => {
+ if (err != null) {
+ return;
+ }
+
+ if (typeof result === 'string') {
+ transformedString = result;
+ } else {
+ transformedDocument = result;
+ }
+});
+
+stylesheet.applyToFile('/path/to/file', {}, applyOptions, (err, result) => {
+ if (err == null) {
+ transformedString = result;
+ }
+});
+
+stylesheet.applyToFile('/path/to/file', (err, result) => {
+ if (err == null) {
+ transformedString = result;
+ }
+});
diff --git a/libxslt/libxslt.d.ts b/libxslt/libxslt.d.ts
new file mode 100644
index 00000000000000..0cfd4e1bcdc409
--- /dev/null
+++ b/libxslt/libxslt.d.ts
@@ -0,0 +1,61 @@
+// Type definitions for node-libxslt
+// Project: https://github.com/albanm/node-libxslt
+// Definitions by: Alejandro Sánchez
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+declare module 'libxslt' {
+ import * as xmljs from 'libxmljs';
+
+ export const libxmljs: typeof xmljs;
+
+ type OutputFormat = 'document' | 'string';
+
+ export interface ApplyOptions {
+ outputFormat?: OutputFormat;
+ noWrapParams?: boolean;
+ }
+
+ type ApplyResult = string | xmljs.XMLDocument;
+
+ type ApplyCallback = (err: Error, result: ApplyResult) => void;
+
+ type ApplyStringCallback = (err: Error, result: string) => void;
+
+ type ApplyDocumentCallback = (err: Error, result: xmljs.XMLDocument) => void;
+
+ export interface Stylesheet {
+ apply(source: string, params?: Object): string;
+
+ apply(source: string, params: Object, options: ApplyOptions): ApplyResult;
+
+ apply(source: string, params: Object, options: ApplyOptions, callback: ApplyCallback): void;
+
+ apply(source: string, callback: ApplyStringCallback): void;
+
+ apply(source: xmljs.XMLDocument, params?: Object): xmljs.XMLDocument;
+
+ apply(source: xmljs.XMLDocument, params: Object, options: ApplyOptions): ApplyResult;
+
+ apply(source: xmljs.XMLDocument, params: Object, options: ApplyOptions, callback: ApplyCallback): void;
+
+ apply(source: xmljs.XMLDocument, callback: ApplyDocumentCallback): void;
+
+ applyToFile(sourcePath: string, params: Object, options: ApplyOptions, callback: ApplyStringCallback): void;
+
+ applyToFile(sourcePath: string, callback: ApplyStringCallback): void;
+ }
+
+ type ParseCallback = (err: Error, stylesheet: Stylesheet) => void;
+
+ export function parse(source: string): Stylesheet;
+
+ export function parse(source: string, callback: ParseCallback): void;
+
+ export function parse(source: xmljs.XMLDocument): Stylesheet;
+
+ export function parse(source: xmljs.XMLDocument, callback: ParseCallback): void;
+
+ export function parseFile(sourcePath: string, callback: ParseCallback): void;
+}