diff --git a/clean-css/clean-css-tests.ts b/clean-css/clean-css-tests.ts
new file mode 100644
index 000000000..ffbb3d127
--- /dev/null
+++ b/clean-css/clean-css-tests.ts
@@ -0,0 +1,55 @@
+///
+
+import * as CleanCSS from 'clean-css';
+
+var source = 'a{font-weight:bold;}';
+var minified = new CleanCSS().minify(source).styles;
+
+var source = '@import url(http://path/to/remote/styles);';
+new CleanCSS().minify(source, function (error, minified) {
+ console.log(minified.styles);
+});
+
+const pathToOutputDirectory = 'path';
+
+new CleanCSS({ sourceMap: true, target: pathToOutputDirectory })
+ .minify(source, function (error, minified) {
+ // access minified.sourceMap for SourceMapGenerator object
+ // see https://github.com/mozilla/source-map/#sourcemapgenerator for more details
+ // see https://github.com/jakubpawlowicz/clean-css/blob/master/bin/cleancss#L114 on how it's used in clean-css' CLI
+ console.log(minified.sourceMap);
+});
+
+const inputSourceMapAsString = 'input';
+new CleanCSS({ sourceMap: inputSourceMapAsString, target: pathToOutputDirectory })
+ .minify(source, function (error, minified) {
+ // access minified.sourceMap to access SourceMapGenerator object
+ // see https://github.com/mozilla/source-map/#sourcemapgenerator for more details
+ // see https://github.com/jakubpawlowicz/clean-css/blob/master/bin/cleancss#L114 on how it's used in clean-css' CLI
+ console.log(minified.sourceMap);
+});
+
+new CleanCSS({ sourceMap: true, target: pathToOutputDirectory }).minify({
+ 'path/to/source/1': {
+ styles: '...styles...',
+ sourceMap: '...source-map...'
+ },
+ 'path/to/source/2': {
+ styles: '...styles...',
+ sourceMap: '...source-map...'
+ }
+}, function (error, minified) {
+ // access minified.sourceMap as above
+ console.log(minified.sourceMap);
+});
+
+new CleanCSS().minify(['path/to/file/one', 'path/to/file/two']);
+
+new CleanCSS().minify({
+ 'path/to/file/one': {
+ styles: 'contents of file one'
+ },
+ 'path/to/file/two': {
+ styles: 'contents of file two'
+ }
+});
diff --git a/clean-css/clean-css.d.ts b/clean-css/clean-css.d.ts
new file mode 100644
index 000000000..25bb2471a
--- /dev/null
+++ b/clean-css/clean-css.d.ts
@@ -0,0 +1,109 @@
+// Type definitions for clean-css v3.4.9
+// Project: https://github.com/jakubpawlowicz/clean-css
+// Definitions by: Tanguy Krotoff
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module 'clean-css' {
+ namespace CleanCSS {
+ interface Options {
+ // Set to false to disable advanced optimizations - selector & property merging, reduction, etc.
+ advanced?: boolean;
+
+ // Set to false to disable aggressive merging of properties.
+ aggressiveMerging?: boolean;
+
+ // Turns on benchmarking mode measuring time spent on cleaning up (run npm run bench to see example)
+ benchmark?: boolean;
+
+ // Enables compatibility mode
+ compatibility?: Object;
+
+ // Set to true to get minification statistics under stats property (see test/custom-test.js for examples)
+ debug?: boolean;
+
+ // A hash of options for @import inliner, see test/protocol-imports-test.js for examples, or this comment for a proxy use case.
+ inliner?: Object;
+
+ // Whether to keep line breaks (default is false)
+ keepBreaks?: boolean;
+
+ // * for keeping all (default), 1 for keeping first one only, 0 for removing all
+ keepSpecialComments?: string | number;
+
+ // Whether to merge @media at-rules (default is true)
+ mediaMerging?: boolean;
+
+ // Whether to process @import rules
+ processImport?: boolean;
+
+ // A list of @import rules, can be ['all'] (default), ['local'], ['remote'], or a blacklisted path e.g. ['!fonts.googleapis.com']
+ processImportFrom?: Array;
+
+ // Set to false to skip URL rebasing
+ rebase?: boolean;
+
+ // Path to resolve relative @import rules and URLs
+ relativeTo?: string;
+
+ // Set to false to disable restructuring in advanced optimizations
+ restructuring?: boolean;
+
+ // Path to resolve absolute @import rules and rebase relative URLs
+ root?: string;
+
+ // Rounding precision; defaults to 2; -1 disables rounding
+ roundingPrecision?: number;
+
+ // Set to true to enable semantic merging mode which assumes BEM-like content (default is false as it's highly likely this will break your stylesheets - use with caution!)
+ semanticMerging?: boolean;
+
+ // Set to false to skip shorthand compacting (default is true unless sourceMap is set when it's false)
+ shorthandCompacting?: boolean;
+
+ // Exposes source map under sourceMap property, e.g. new CleanCSS().minify(source).sourceMap (default is false) If input styles are a product of CSS preprocessor (Less, Sass) an input source map can be passed as a string.
+ sourceMap?: boolean | string;
+
+ // Set to true to inline sources inside a source map's sourcesContent field (defaults to false) It is also required to process inlined sources from input source maps.
+ sourceMapInlineSources?: boolean;
+
+ // Path to a folder or an output file to which rebase all URLs
+ target?: string;
+ }
+
+ interface Output {
+ // Optimized output CSS as a string
+ styles: string;
+
+ // Output source map (if requested with sourceMap option)
+ sourceMap: string;
+
+ // A list of errors raised
+ errors: Array;
+
+ // A list of warnings raised
+ warnings: Array;
+
+ // A hash of statistic information (if requested with debug option)
+ stats: {
+ // Original content size (after import inlining)
+ originalSize: number;
+
+ // Optimized content size
+ minifiedSize: number;
+
+ // Time spent on optimizations
+ timeSpent: number;
+
+ // A ratio of output size to input size (e.g. 25% if content was reduced from 100 bytes to 75 bytes)
+ efficiency: number;
+ };
+ }
+ }
+
+ class CleanCSS {
+ constructor(options?: CleanCSS.Options);
+ minify(sources: string | Array | Object, callback?: (error: any, minified: CleanCSS.Output) => void): CleanCSS.Output;
+ }
+
+ export = CleanCSS;
+}