From 67eb71f5c20b87f0796a492152381390d1f694fa Mon Sep 17 00:00:00 2001 From: Patrick Hulce Date: Sun, 16 Apr 2017 21:36:49 -0700 Subject: [PATCH] feat: passthrough nukecss options --- lib/handlers/css-handler.js | 6 ++---- lib/handlers/handler.js | 7 +++++++ lib/handlers/js-handler.js | 3 +-- lib/index.js | 1 + test/fixtures/webpack.config.js | 3 +++ test/fixtures/whitelisted/entry.extracted.css | 4 ++++ test/index.test.js | 4 ++++ 7 files changed, 22 insertions(+), 6 deletions(-) diff --git a/lib/handlers/css-handler.js b/lib/handlers/css-handler.js index a1bd04e..93a896f 100644 --- a/lib/handlers/css-handler.js +++ b/lib/handlers/css-handler.js @@ -1,5 +1,3 @@ -const _ = require('lodash') -const nukecss = require('nukecss') const RawSource = require('webpack-sources').RawSource const SourceMapSource = require('webpack-sources').SourceMapSource @@ -16,11 +14,11 @@ class CssHandler extends Handler { nukeCssOpts.sourceMap = { from: name, to: name, - inline: _.get(this._options, 'sourceMap.inline', false), + inline: false, } } - const nuked = nukecss(sourceContent, input, nukeCssOpts) + const nuked = this.nuke(sourceContent, input, nukeCssOpts) return this._options.sourceMap && nuked.map ? new SourceMapSource(nuked.css, name, nuked.map, input, inputSourceMap) : new RawSource(nuked.css || nuked) diff --git a/lib/handlers/handler.js b/lib/handlers/handler.js index d44627b..9f5287b 100644 --- a/lib/handlers/handler.js +++ b/lib/handlers/handler.js @@ -1,7 +1,14 @@ +const nukecss = require('nukecss') + class Handler { constructor(options = {}) { this._options = options } + + nuke(sources, css, options) { + options = Object.assign({}, this._options.nukecssOptions, options) + return nukecss(sources, css, options) + } } module.exports = Handler diff --git a/lib/handlers/js-handler.js b/lib/handlers/js-handler.js index 4bfd12c..eca06ce 100644 --- a/lib/handlers/js-handler.js +++ b/lib/handlers/js-handler.js @@ -2,7 +2,6 @@ const assert = require('assert') const _ = require('lodash') const esprima = require('esprima') -const nukecss = require('nukecss') const debug = require('debug')('nukecss-webpack:js-handler') const ReplaceSource = require('webpack-sources').ReplaceSource @@ -119,7 +118,7 @@ class JsHandler extends Handler { const startIndex = allCode.indexOf(code) const endIndex = startIndex + code.length try { - const replacement = JsHandler.replaceCss(code, css => nukecss(sourceContent, css)) + const replacement = JsHandler.replaceCss(code, css => this.nuke(sourceContent, css)) replacementAsset.replace(startIndex, endIndex, replacement) } catch (err) { // eslint-disable-next-line no-console diff --git a/lib/index.js b/lib/index.js index ab07755..45a508e 100644 --- a/lib/index.js +++ b/lib/index.js @@ -25,6 +25,7 @@ class NukeCssPlugin { sourceMap: false, sourceWhitelist: [], sourceBlacklist: [], + nukecssOptions: {}, }, options) this._handlers = { diff --git a/test/fixtures/webpack.config.js b/test/fixtures/webpack.config.js index 224a775..a63656c 100644 --- a/test/fixtures/webpack.config.js +++ b/test/fixtures/webpack.config.js @@ -23,6 +23,9 @@ module.exports = { sourceMap: true, sourceWhitelist: ['whitelisted/'], sourceBlacklist: ['blacklisted.js'], + nukecssOptions: { + whitelist: ['unused-but-whitelisted'] + } }), new webpack.optimize.UglifyJsPlugin({sourceMap: true}), ] diff --git a/test/fixtures/whitelisted/entry.extracted.css b/test/fixtures/whitelisted/entry.extracted.css index 4883db9..695ed99 100644 --- a/test/fixtures/whitelisted/entry.extracted.css +++ b/test/fixtures/whitelisted/entry.extracted.css @@ -41,6 +41,10 @@ a:hover { content: 'fa'; } +.unused-but-whitelisted { + content: 'fa'; +} + .html-found { color: white; } diff --git a/test/index.test.js b/test/index.test.js index 9c1ff8f..82fbc53 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -89,4 +89,8 @@ describe('NukeCssPlugin', () => { expect(fileStats['out.css'].content).to.contain('.html-found') expect(fileStats['out.css'].content).to.not.contain('.html-ignored') }) + + it('should use nukecss options specified', () => { + expect(fileStats['out.css'].content).to.contain('.unused-but-whitelisted') + }) })