From 365c7de7c2f2427ee3515f5a03fe2c6f3d982b8f Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Sat, 3 Dec 2016 13:48:42 +0100 Subject: [PATCH 1/8] Add gulp-babili --- packages/gulp-babili/.npmignore | 4 + packages/gulp-babili/README.md | 1 + .../__snapshots__/gulp-babili-test.js.snap | 5 + .../gulp-babili/__tests__/gulp-babili-test.js | 167 ++++++++++++++++++ packages/gulp-babili/package.json | 21 +++ packages/gulp-babili/src/index.js | 105 +++++++++++ 6 files changed, 303 insertions(+) create mode 100644 packages/gulp-babili/.npmignore create mode 100644 packages/gulp-babili/README.md create mode 100644 packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap create mode 100644 packages/gulp-babili/__tests__/gulp-babili-test.js create mode 100644 packages/gulp-babili/package.json create mode 100644 packages/gulp-babili/src/index.js diff --git a/packages/gulp-babili/.npmignore b/packages/gulp-babili/.npmignore new file mode 100644 index 000000000..22250660e --- /dev/null +++ b/packages/gulp-babili/.npmignore @@ -0,0 +1,4 @@ +src +__tests__ +node_modules +*.log diff --git a/packages/gulp-babili/README.md b/packages/gulp-babili/README.md new file mode 100644 index 000000000..185db2282 --- /dev/null +++ b/packages/gulp-babili/README.md @@ -0,0 +1 @@ +# gulp-babili diff --git a/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap b/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap new file mode 100644 index 000000000..458bdb80b --- /dev/null +++ b/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap @@ -0,0 +1,5 @@ +exports[`gulp-babili comments should remove all comments when false 1`] = `"foo(),bar(),baz();"`; + +exports[`gulp-babili comments should remove comments by default except license and preserve 1`] = `"foo(),bar(),baz();"`; + +exports[`gulp-babili comments should take a custom function 1`] = `"foo(),bar(),baz();"`; diff --git a/packages/gulp-babili/__tests__/gulp-babili-test.js b/packages/gulp-babili/__tests__/gulp-babili-test.js new file mode 100644 index 000000000..bf3f73163 --- /dev/null +++ b/packages/gulp-babili/__tests__/gulp-babili-test.js @@ -0,0 +1,167 @@ +jest.autoMockOff(); + +const gutil = require("gulp-util"); +const babelCore = require("babel-core"); +const babiliPreset = require("babel-preset-babili"); + +const unpad = require("../../../utils/unpad"); +const gulpBabili = require("../src/index"); + +describe("gulp-babili", () => { + it("should work with a good default", () => { + return new Promise((resolve, reject) => { + const stream = gulpBabili(); + + const source = unpad(` + function foo() { + const a = 10; + return a; + } + `); + const expected = "function foo(){return 10}"; + + stream.on("data", function (file) { + expect(file.contents.toString()).toBe(expected); + resolve(); + }); + stream.on("error", reject); + + stream.write(new gutil.File({ + path: "defaults.js", + contents: new Buffer(source), + })); + }); + }); + + it("should take options and pass them to babili", () => { + return new Promise((resolve, reject) => { + const stream = gulpBabili({ + mangle: { + blacklist: { + bar: true + } + } + }); + + const source = unpad(` + function foo(bar, baz) { + return bar + baz; + } + `); + const expected = "function foo(bar,a){return bar+a}"; + + stream.on("data", function (file) { + expect(file.contents.toString()).toBe(expected); + resolve(); + }); + stream.on("error", reject); + + stream.write(new gutil.File({ + path: "options.js", + contents: new Buffer(source) + })); + }); + }); + + it("should take custom babel and babili", () => { + return new Promise((resolve, reject) => { + const babel = Object.assign({}, babelCore); + + let usedTransform = false; + Object.defineProperty(babel, "transform", { + get() { + usedTransform = true; + return babelCore.transform; + } + }); + + let usedPreset = false; + const babili = function (...args) { + usedPreset = true; + return babiliPreset(...args); + }; + + const stream = gulpBabili({ + babel, + babili, + }); + + stream.on("data", function () { + expect(usedTransform).toBe(true); + expect(usedPreset).toBe(true); + resolve(); + }); + stream.on("error", reject); + + stream.write(new gutil.File({ + path: "custom-transformers.js", + contents: new Buffer("foo()") + })); + }); + }); + + describe("comments", () => { + const source = unpad(` + /** + * @license + * This is a test + */ + foo(); + // this is another comment + bar(); + /* YAC - yet another comment */ + baz(); + `); + + let file; + + beforeEach(() => { + file = new gutil.File({ + path: "comments.js", + contents: new Buffer(source) + }); + }); + + it("should remove comments by default except license and preserve", () => { + return new Promise((resolve, reject) => { + const stream = gulpBabili(); + stream.on("data", function (file) { + expect(file.contents.toString()).toMatchSnapshot(); + resolve(); + }); + stream.on("error", reject); + stream.write(file); + }); + }); + + it("should remove all comments when false", () => { + return new Promise((resolve, reject) => { + const stream = gulpBabili({ + comments: false + }); + stream.on("data", () => { + expect(file.contents.toString()).toMatchSnapshot(); + resolve(); + }); + stream.on("error", reject); + stream.write(file); + }); + }); + + it("should take a custom function", () => { + return new Promise((resolve, reject) => { + const stream = gulpBabili({ + comments(contents) { + return contents.indexOf("YAC") !== -1; + } + }); + stream.on("data", () => { + expect(file.contents.toString()).toMatchSnapshot(); + resolve(); + }); + stream.on("error", reject); + stream.write(file); + }); + }); + }); +}); diff --git a/packages/gulp-babili/package.json b/packages/gulp-babili/package.json new file mode 100644 index 000000000..a4ab1f536 --- /dev/null +++ b/packages/gulp-babili/package.json @@ -0,0 +1,21 @@ +{ + "name": "gulp-babili", + "version": "0.0.0", + "description": "Gulp Babili", + "homepage": "https://github.com/babel/babili#readme", + "repository": "https://github.com/babel/babili/tree/master/packages/gulp-babili", + "bugs": "https://github.com/babel/babili/issues", + "author": "boopathi", + "license": "MIT", + "main": "lib/index.js", + "keywords": [ + "babel-preset", + "babili" + ], + "dependencies": { + "babel-core": "^6.18.2", + "babel-preset-babili": "^0.0.9", + "vinyl-sourcemaps-apply": "^0.2.1" + }, + "devDependencies": {} +} diff --git a/packages/gulp-babili/src/index.js b/packages/gulp-babili/src/index.js new file mode 100644 index 000000000..753450b94 --- /dev/null +++ b/packages/gulp-babili/src/index.js @@ -0,0 +1,105 @@ +const babelCore = require("babel-core"); +const through2 = require("through2"); +const gutil = require("gulp-util"); +const applySourceMap = require("vinyl-sourcemaps-apply"); +const babiliPreset = require("babel-preset-babili"); + +const {PluginError} = gutil; + +const NAME = "gulp-babili"; + +module.exports = gulpBabili; + +function gulpBabili(_opts = {}) { + const opts = Object.assign({}, _opts); + + return through2.obj(function (file, enc, callback) { + if (file.isNull()) { + return callback(null, file); + } + + if (file.isStream()) { + return callback(new PluginError(NAME, "Streaming not supported")); + } + + let babel = babelCore; + let babili = babiliPreset; + + if (opts.babel) { + babel = opts.babel; + delete opts.babel; + } + if (opts.babili) { + babili = opts.babili; + delete opts.babili; + } + + const commentsRegex = typeof opts.comments === "undefined" + ? /@preserve|@license/ + : opts.comments; + + let inputSourceMap; + if (file.sourceMap && file.sourceMap.mappings) { + inputSourceMap = file.sourceMap; + } + + const babelOpts = { + minified: true, + babelrc: false, + ast: false, + + /* preset */ + presets: [[babili, opts]], + + /* sourcemaps */ + sourceMaps: true, + inputSourceMap, + + /* remove comments */ + shouldPrintComment(contents) { + return shouldPrintComment(contents, commentsRegex); + }, + + /* file */ + filename: file.path, + filenameRelative: file.relative, + }; + + const {result, success, error} = transform({ + babel, + input: file.contents.toString(), + babelOpts + }); + + if (success) { + file.contents = new Buffer(result.code); + applySourceMap(file, result.map); + return callback(null, file); + } + + callback(error); + }); +} + +function transform({ babel, input, babelOpts }) { + try { + return { + success: true, + result: babel.transform(input, babelOpts) + }; + } catch (e) { + return { + success: false, + error: e + }; + } +} + +function shouldPrintComment(contents, predicate) { + switch (typeof predicate) { + case "function": return predicate(contents); + case "object": return predicate.test(contents); + default: return !!predicate; + } +} + From 3340ce2cbd94d5c96f92754b3009b0a252298e6c Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Sat, 3 Dec 2016 13:50:53 +0100 Subject: [PATCH 2/8] 0.0.1 first version --- packages/gulp-babili/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gulp-babili/package.json b/packages/gulp-babili/package.json index a4ab1f536..36f721d75 100644 --- a/packages/gulp-babili/package.json +++ b/packages/gulp-babili/package.json @@ -1,6 +1,6 @@ { "name": "gulp-babili", - "version": "0.0.0", + "version": "0.0.1", "description": "Gulp Babili", "homepage": "https://github.com/babel/babili#readme", "repository": "https://github.com/babel/babili/tree/master/packages/gulp-babili", From 5ded7a2722074f4c45f40c71cb1aa75c2d24c32e Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Sun, 4 Dec 2016 20:50:54 +0100 Subject: [PATCH 3/8] Separate babili opts from gulp-plugin opts --- .../gulp-babili/__tests__/gulp-babili-test.js | 6 ++-- packages/gulp-babili/src/index.js | 35 ++++++------------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/packages/gulp-babili/__tests__/gulp-babili-test.js b/packages/gulp-babili/__tests__/gulp-babili-test.js index bf3f73163..b439faaf6 100644 --- a/packages/gulp-babili/__tests__/gulp-babili-test.js +++ b/packages/gulp-babili/__tests__/gulp-babili-test.js @@ -81,7 +81,7 @@ describe("gulp-babili", () => { return babiliPreset(...args); }; - const stream = gulpBabili({ + const stream = gulpBabili({}, { babel, babili, }); @@ -136,7 +136,7 @@ describe("gulp-babili", () => { it("should remove all comments when false", () => { return new Promise((resolve, reject) => { - const stream = gulpBabili({ + const stream = gulpBabili({}, { comments: false }); stream.on("data", () => { @@ -150,7 +150,7 @@ describe("gulp-babili", () => { it("should take a custom function", () => { return new Promise((resolve, reject) => { - const stream = gulpBabili({ + const stream = gulpBabili({}, { comments(contents) { return contents.indexOf("YAC") !== -1; } diff --git a/packages/gulp-babili/src/index.js b/packages/gulp-babili/src/index.js index 753450b94..47a026635 100644 --- a/packages/gulp-babili/src/index.js +++ b/packages/gulp-babili/src/index.js @@ -10,9 +10,11 @@ const NAME = "gulp-babili"; module.exports = gulpBabili; -function gulpBabili(_opts = {}) { - const opts = Object.assign({}, _opts); - +function gulpBabili(babiliOpts = {}, { + babel = babelCore, + babili = babiliPreset, + comments = /@preserve|@license/ +} = {}) { return through2.obj(function (file, enc, callback) { if (file.isNull()) { return callback(null, file); @@ -22,22 +24,6 @@ function gulpBabili(_opts = {}) { return callback(new PluginError(NAME, "Streaming not supported")); } - let babel = babelCore; - let babili = babiliPreset; - - if (opts.babel) { - babel = opts.babel; - delete opts.babel; - } - if (opts.babili) { - babili = opts.babili; - delete opts.babili; - } - - const commentsRegex = typeof opts.comments === "undefined" - ? /@preserve|@license/ - : opts.comments; - let inputSourceMap; if (file.sourceMap && file.sourceMap.mappings) { inputSourceMap = file.sourceMap; @@ -49,15 +35,15 @@ function gulpBabili(_opts = {}) { ast: false, /* preset */ - presets: [[babili, opts]], + presets: [[babili, babiliOpts]], /* sourcemaps */ - sourceMaps: true, + sourceMaps: !!file.sourceMap, inputSourceMap, /* remove comments */ shouldPrintComment(contents) { - return shouldPrintComment(contents, commentsRegex); + return shouldPrintComment(contents, comments); }, /* file */ @@ -73,7 +59,9 @@ function gulpBabili(_opts = {}) { if (success) { file.contents = new Buffer(result.code); - applySourceMap(file, result.map); + if (file.sourceMap) { + applySourceMap(file, result.map); + } return callback(null, file); } @@ -102,4 +90,3 @@ function shouldPrintComment(contents, predicate) { default: return !!predicate; } } - From eb88bbfa203d57b162b466833aaf648097258de7 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Fri, 20 Jan 2017 12:22:45 +0100 Subject: [PATCH 4/8] Lint fixes --- packages/gulp-babili/src/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/gulp-babili/src/index.js b/packages/gulp-babili/src/index.js index 47a026635..bf4c45dbf 100644 --- a/packages/gulp-babili/src/index.js +++ b/packages/gulp-babili/src/index.js @@ -85,8 +85,8 @@ function transform({ babel, input, babelOpts }) { function shouldPrintComment(contents, predicate) { switch (typeof predicate) { - case "function": return predicate(contents); - case "object": return predicate.test(contents); - default: return !!predicate; + case "function": return predicate(contents); + case "object": return predicate.test(contents); + default: return !!predicate; } } From f3b94b2ae8b1f4e5464909e23fe1cadda4129f23 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Fri, 20 Jan 2017 15:39:31 +0100 Subject: [PATCH 5/8] Move shouldPrintComments to babili-preset --- packages/babel-preset-babili/src/index.js | 18 +++++++++++++++++- .../gulp-babili/__tests__/gulp-babili-test.js | 4 ++-- packages/gulp-babili/package.json | 4 ++-- packages/gulp-babili/src/index.js | 17 ++--------------- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/packages/babel-preset-babili/src/index.js b/packages/babel-preset-babili/src/index.js index f7ba957ee..2d1e39b0e 100644 --- a/packages/babel-preset-babili/src/index.js +++ b/packages/babel-preset-babili/src/index.js @@ -107,12 +107,28 @@ function preset(context, _opts = {}) { const plugins = generate(optionsTree, opts); + // comments + let comments = /@preserve|@licen(s|c)e/; + if (Object.prototype.hasOwnProperty.call(opts, "comments")) { + comments = opts.comments; + } + return { minified: true, - comments: false, + shouldPrintComment(contents) { + return _shouldPrintComment(contents, comments); + }, presets: [ { plugins } ], passPerPreset: true, }; } + +function _shouldPrintComment(contents, predicate) { + switch (typeof predicate) { + case "function": return predicate(contents); + case "object": return predicate.test(contents); + default: return !!predicate; + } +} diff --git a/packages/gulp-babili/__tests__/gulp-babili-test.js b/packages/gulp-babili/__tests__/gulp-babili-test.js index b439faaf6..74b5ff2fe 100644 --- a/packages/gulp-babili/__tests__/gulp-babili-test.js +++ b/packages/gulp-babili/__tests__/gulp-babili-test.js @@ -136,7 +136,7 @@ describe("gulp-babili", () => { it("should remove all comments when false", () => { return new Promise((resolve, reject) => { - const stream = gulpBabili({}, { + const stream = gulpBabili({ comments: false }); stream.on("data", () => { @@ -150,7 +150,7 @@ describe("gulp-babili", () => { it("should take a custom function", () => { return new Promise((resolve, reject) => { - const stream = gulpBabili({}, { + const stream = gulpBabili({ comments(contents) { return contents.indexOf("YAC") !== -1; } diff --git a/packages/gulp-babili/package.json b/packages/gulp-babili/package.json index 36f721d75..7f8f83b0c 100644 --- a/packages/gulp-babili/package.json +++ b/packages/gulp-babili/package.json @@ -13,8 +13,8 @@ "babili" ], "dependencies": { - "babel-core": "^6.18.2", - "babel-preset-babili": "^0.0.9", + "babel-core": "^6.22.1", + "babel-preset-babili": "^0.0.10", "vinyl-sourcemaps-apply": "^0.2.1" }, "devDependencies": {} diff --git a/packages/gulp-babili/src/index.js b/packages/gulp-babili/src/index.js index bf4c45dbf..bd1ef13e3 100644 --- a/packages/gulp-babili/src/index.js +++ b/packages/gulp-babili/src/index.js @@ -13,7 +13,6 @@ module.exports = gulpBabili; function gulpBabili(babiliOpts = {}, { babel = babelCore, babili = babiliPreset, - comments = /@preserve|@license/ } = {}) { return through2.obj(function (file, enc, callback) { if (file.isNull()) { @@ -31,21 +30,17 @@ function gulpBabili(babiliOpts = {}, { const babelOpts = { minified: true, + compact: true, babelrc: false, ast: false, /* preset */ - presets: [[babili, babiliOpts]], + presets: [ [ babili, babiliOpts ] ], /* sourcemaps */ sourceMaps: !!file.sourceMap, inputSourceMap, - /* remove comments */ - shouldPrintComment(contents) { - return shouldPrintComment(contents, comments); - }, - /* file */ filename: file.path, filenameRelative: file.relative, @@ -82,11 +77,3 @@ function transform({ babel, input, babelOpts }) { }; } } - -function shouldPrintComment(contents, predicate) { - switch (typeof predicate) { - case "function": return predicate(contents); - case "object": return predicate.test(contents); - default: return !!predicate; - } -} From a05da73616121ee237fdc70c43c409e02a71c1ea Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Fri, 20 Jan 2017 16:50:24 +0100 Subject: [PATCH 6/8] Disable the comments tests --- packages/babel-preset-babili/src/index.js | 18 +----------------- .../__snapshots__/gulp-babili-test.js.snap | 8 ++++++-- .../gulp-babili/__tests__/gulp-babili-test.js | 4 ++-- packages/gulp-babili/src/index.js | 1 - 4 files changed, 9 insertions(+), 22 deletions(-) diff --git a/packages/babel-preset-babili/src/index.js b/packages/babel-preset-babili/src/index.js index 2d1e39b0e..f7ba957ee 100644 --- a/packages/babel-preset-babili/src/index.js +++ b/packages/babel-preset-babili/src/index.js @@ -107,28 +107,12 @@ function preset(context, _opts = {}) { const plugins = generate(optionsTree, opts); - // comments - let comments = /@preserve|@licen(s|c)e/; - if (Object.prototype.hasOwnProperty.call(opts, "comments")) { - comments = opts.comments; - } - return { minified: true, - shouldPrintComment(contents) { - return _shouldPrintComment(contents, comments); - }, + comments: false, presets: [ { plugins } ], passPerPreset: true, }; } - -function _shouldPrintComment(contents, predicate) { - switch (typeof predicate) { - case "function": return predicate(contents); - case "object": return predicate.test(contents); - default: return !!predicate; - } -} diff --git a/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap b/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap index 458bdb80b..e101cb2d8 100644 --- a/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap +++ b/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap @@ -1,5 +1,9 @@ exports[`gulp-babili comments should remove all comments when false 1`] = `"foo(),bar(),baz();"`; -exports[`gulp-babili comments should remove comments by default except license and preserve 1`] = `"foo(),bar(),baz();"`; +exports[`gulp-babili comments should remove comments by default except license and preserve 1`] = `" +/** +* @license +* This is a test +*/foo(),bar(),baz();"`; -exports[`gulp-babili comments should take a custom function 1`] = `"foo(),bar(),baz();"`; +exports[`gulp-babili comments should take a custom function 1`] = `"/* YAC - yet another comment */foo(),bar(),baz();"`; diff --git a/packages/gulp-babili/__tests__/gulp-babili-test.js b/packages/gulp-babili/__tests__/gulp-babili-test.js index 74b5ff2fe..5f0fed2d4 100644 --- a/packages/gulp-babili/__tests__/gulp-babili-test.js +++ b/packages/gulp-babili/__tests__/gulp-babili-test.js @@ -122,7 +122,7 @@ describe("gulp-babili", () => { }); }); - it("should remove comments by default except license and preserve", () => { + xit("should remove comments by default except license and preserve", () => { return new Promise((resolve, reject) => { const stream = gulpBabili(); stream.on("data", function (file) { @@ -148,7 +148,7 @@ describe("gulp-babili", () => { }); }); - it("should take a custom function", () => { + xit("should take a custom function", () => { return new Promise((resolve, reject) => { const stream = gulpBabili({ comments(contents) { diff --git a/packages/gulp-babili/src/index.js b/packages/gulp-babili/src/index.js index bd1ef13e3..6efdc6c72 100644 --- a/packages/gulp-babili/src/index.js +++ b/packages/gulp-babili/src/index.js @@ -30,7 +30,6 @@ function gulpBabili(babiliOpts = {}, { const babelOpts = { minified: true, - compact: true, babelrc: false, ast: false, From 1c334df7897b97277117f32ae0410ad0b4d29099 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Mon, 13 Feb 2017 19:38:02 +0100 Subject: [PATCH 7/8] Add README --- packages/gulp-babili/README.md | 40 ++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/packages/gulp-babili/README.md b/packages/gulp-babili/README.md index 185db2282..a9df9ea17 100644 --- a/packages/gulp-babili/README.md +++ b/packages/gulp-babili/README.md @@ -1 +1,41 @@ # gulp-babili + +## Installation + +```sh +npm install gulp-babili --save-dev +``` + +## Usage + +```js +const gulp = require("gulp"); +const babili = require("gulp-babili"); + +gulp.task("minify", () => + gulp.src("./build/app.js") + .pipe(babili({ + mangle: { + keepClassNames: true + } + })) + .pipe(gulp.dest("./dist")); +); +``` + +## API + +```js +gulpBabili(babiliOptions, overrides); +``` + +### babiliOptions + +These are passed on to the babili preset. Refer https://github.com/babel/babili/tree/master/packages/babel-preset-babili#options. Default `{}` + +### Overrides + +Default: `{}` + ++ `babel`: Use a custom `babel-core` ++ `babili`: Use a custom `babel-preset-babili` From 01683c514b0739e729674c6bf75ff5dc2d8b2fd1 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Fri, 3 Mar 2017 18:21:41 +0100 Subject: [PATCH 8/8] Add shouldPrintComment --- .../__snapshots__/gulp-babili-test.js.snap | 10 ++++++---- packages/gulp-babili/src/index.js | 17 +++++++++++++++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap b/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap index e101cb2d8..720f65986 100644 --- a/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap +++ b/packages/gulp-babili/__tests__/__snapshots__/gulp-babili-test.js.snap @@ -1,9 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + exports[`gulp-babili comments should remove all comments when false 1`] = `"foo(),bar(),baz();"`; -exports[`gulp-babili comments should remove comments by default except license and preserve 1`] = `" +exports[`gulp-babili comments should remove comments by default except license and preserve 1`] = ` /** -* @license -* This is a test -*/foo(),bar(),baz();"`; + * @license + * This is a test + */"foo(),bar(),baz();"`; exports[`gulp-babili comments should take a custom function 1`] = `"/* YAC - yet another comment */foo(),bar(),baz();"`; diff --git a/packages/gulp-babili/src/index.js b/packages/gulp-babili/src/index.js index 6efdc6c72..80a14bc55 100644 --- a/packages/gulp-babili/src/index.js +++ b/packages/gulp-babili/src/index.js @@ -4,7 +4,7 @@ const gutil = require("gulp-util"); const applySourceMap = require("vinyl-sourcemaps-apply"); const babiliPreset = require("babel-preset-babili"); -const {PluginError} = gutil; +const { PluginError } = gutil; const NAME = "gulp-babili"; @@ -13,6 +13,7 @@ module.exports = gulpBabili; function gulpBabili(babiliOpts = {}, { babel = babelCore, babili = babiliPreset, + comments = /preserve|licen(s|c)e/ } = {}) { return through2.obj(function (file, enc, callback) { if (file.isNull()) { @@ -40,12 +41,16 @@ function gulpBabili(babiliOpts = {}, { sourceMaps: !!file.sourceMap, inputSourceMap, + shouldPrintComment(contents) { + return shouldPrintComment(contents, comments); + }, + /* file */ filename: file.path, filenameRelative: file.relative, }; - const {result, success, error} = transform({ + const { result, success, error } = transform({ babel, input: file.contents.toString(), babelOpts @@ -76,3 +81,11 @@ function transform({ babel, input, babelOpts }) { }; } } + +function shouldPrintComment(contents, predicate) { + switch (typeof predicate) { + case "function": return predicate(contents); + case "object": return predicate.test(contents); + default: return !!predicate; + } +}