From 10988482fb8021533084155bfb38dce2068f0986 Mon Sep 17 00:00:00 2001 From: Christopher Haws Date: Sun, 12 Jul 2015 12:18:05 -0700 Subject: [PATCH 1/2] Added declaration file and tests for gulp-uglify --- gulp-uglify/gulp-uglify-tests.ts | 24 ++++++ gulp-uglify/gulp-uglify.d.ts | 128 +++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 gulp-uglify/gulp-uglify-tests.ts create mode 100644 gulp-uglify/gulp-uglify.d.ts diff --git a/gulp-uglify/gulp-uglify-tests.ts b/gulp-uglify/gulp-uglify-tests.ts new file mode 100644 index 000000000..e4f1f0d8a --- /dev/null +++ b/gulp-uglify/gulp-uglify-tests.ts @@ -0,0 +1,24 @@ +/// +/// +import gulp = require("gulp"); +import uglify = require("gulp-uglify"); + + +gulp.task('compress', function() { + var tsResult = gulp.src('lib/*.ts') + .pipe(uglify()) + .pipe(gulp.dest('dist')); +}); + +gulp.task('compress2', function() { + var tsResult = gulp.src('lib/*.ts') + .pipe(uglify({ + mangle: false, + preserverComments: "some", + compress: false, + output: { + max_line_len: 300 + } + })) + .pipe(gulp.dest('dist')); +}); \ No newline at end of file diff --git a/gulp-uglify/gulp-uglify.d.ts b/gulp-uglify/gulp-uglify.d.ts new file mode 100644 index 000000000..28ad91b93 --- /dev/null +++ b/gulp-uglify/gulp-uglify.d.ts @@ -0,0 +1,128 @@ +// Type definitions for gulp-uglify +// Project: https://github.com/terinjokes/gulp-uglify +// Definitions by: Christopher Haws +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module "gulp-uglify" { + function GulpUglify(options?: IGulpUglifyOptions): NodeJS.ReadWriteStream; + + interface IGulpUglifyOptions { + /** + * Pass false to skip mangling names. + */ + mangle?: boolean; + + /** + * Pass if you wish to specify additional output options. The defaults are optimized for best compression. + */ + output?: IOutputOptions; + + /** + * Pass an object to specify custom compressor options. Pass false to skip compression completely. + */ + compress?: boolean; + + /** + * A convenience option for options.output.comments. Defaults to preserving no comments. + * all - Preserve all comments in code blocks + * some - Preserve comments that start with a bang (!) or include a Closure Compiler directive (@preserve, @license, @cc_on) + * function - Specify your own comment preservation function. You will be passed the current node and the current comment and are expected to return either true or false. + */ + preserverComments?: string|((node, comment) => boolean); + } + + interface IOutputOptions { + /** + * Start indentation on every line (only when `beautify`) + */ + indent_start?: number; + + /** + * Indentation level (only when `beautify`) + */ + indent_level?: number; + + /** + * Quote all keys in object literals? + */ + quote_keys?: boolean; + + /** + * Add a space after colon signs? + */ + space_colon?: boolean; + + /** + * Output ASCII-safe? (encodes Unicode characters as ASCII) + */ + ascii_only?: boolean; + + /** + * Escape " Date: Sun, 12 Jul 2015 12:30:48 -0700 Subject: [PATCH 2/2] Fixed an issue with implicit any's --- gulp-uglify/gulp-uglify.d.ts | 49 +++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/gulp-uglify/gulp-uglify.d.ts b/gulp-uglify/gulp-uglify.d.ts index 28ad91b93..840b5110b 100644 --- a/gulp-uglify/gulp-uglify.d.ts +++ b/gulp-uglify/gulp-uglify.d.ts @@ -30,7 +30,7 @@ declare module "gulp-uglify" { * some - Preserve comments that start with a bang (!) or include a Closure Compiler directive (@preserve, @license, @cc_on) * function - Specify your own comment preservation function. You will be passed the current node and the current comment and are expected to return either true or false. */ - preserverComments?: string|((node, comment) => boolean); + preserverComments?: string|((node: any, comment: ITokenizer) => boolean); } interface IOutputOptions { @@ -123,6 +123,53 @@ declare module "gulp-uglify" { */ orig? :Object|JSON; } + + interface ITokenizer { + /** + * The type of this token. + * Can be "num", "string", "regexp", "operator", "punc", "atom", "name", "keyword", "comment1" or "comment2". + * "comment1" and "comment2" are for single-line, respectively multi-line comments. + */ + type: string; + + /** + * The name of the file where this token originated from. Useful when compressing multiple files at once to generate the proper source map. + */ + file: string; + + /** + * The "value" of the token. + * That's additional information and depends on the token type: "num", "string" and "regexp" tokens you get their literal value. + * - For "operator" you get the operator. + * - For "punc" it's the punctuation sign (parens, comma, semicolon etc). + * - For "atom", "name" and "keyword" it's the name of the identifier + * - For comments it's the body of the comment (excluding the initial "//" and "/*". + */ + value: string; + + /** + * The line number of this token in the original code. + * 1-based index. + */ + line: number; + + /** + * The column number of this token in the original code. + * 0-based index. + */ + col: number; + + /** + * Short for "newline before", it's a boolean that tells us whether there was a newline before this node in the original source. It helps for automatic semicolon insertion. + * For multi-line comments in particular this will be set to true if there either was a newline before this comment, or * * if this comment contains a newline. + */ + nlb: boolean; + + /** + * This doesn't apply for comment tokens, but for all other token types it will be an array of comment tokens that were found before. + */ + comments_before: string[]; + } export = GulpUglify; } \ No newline at end of file