Skip to content
This repository has been archived by the owner on Feb 1, 2020. It is now read-only.

Commit

Permalink
v0.18
Browse files Browse the repository at this point in the history
  • Loading branch information
Ffloriel committed Jan 5, 2018
1 parent 4ffaa71 commit f42d2b0
Show file tree
Hide file tree
Showing 3 changed files with 225 additions and 203 deletions.
213 changes: 112 additions & 101 deletions lib/purgecss-webpack-plugin.es.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,13 @@ var toConsumableArray = function (arr) {
var entryPaths = function entryPaths(paths) {
var ret = paths || [];

if (typeof ret === 'function') {
ret = ret();
}

// Convert possible string to an array
if (typeof ret === 'string') {
return [ret];
ret = [ret];
}

return ret;
Expand All @@ -123,119 +127,126 @@ var entries = function entries(paths, chunkName) {
};

var assets = function assets() {
var assets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var extensions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
return Object.keys(assets).map(function (name) {
return extensions.indexOf(path.extname(name.indexOf('?') >= 0 ? name.split('?').slice(0, -1).join('') : name)) >= 0 && { name: name, asset: assets[name] };
}).filter(function (a) {
return a;
});
var assets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var extensions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
return Object.keys(assets).map(function (name) {
return extensions.indexOf(path.extname(name.indexOf('?') >= 0 ? name.split('?').slice(0, -1).join('') : name)) >= 0 && { name: name, asset: assets[name] };
}).filter(function (a) {
return a;
});
};

var files = function files(chunk) {
var extensions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var getter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (a) {
return a;
};
return chunk.mapModules(function (module) {
var file = getter(module);
if (!file) return null;
return extensions.indexOf(path.extname(file)) >= 0 && file;
}).filter(function (a) {
return a;
});
var extensions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var getter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (a) {
return a;
};
return chunk.mapModules(function (module) {
var file = getter(module);
if (!file) return null;
return extensions.indexOf(path.extname(file)) >= 0 && file;
}).filter(function (a) {
return a;
});
};

var styleExtensions = ['.css', '.scss', '.styl', '.sass', '.less'];

var PurgecssPlugin = function () {
function PurgecssPlugin(options) {
classCallCheck(this, PurgecssPlugin);
function PurgecssPlugin(options) {
classCallCheck(this, PurgecssPlugin);

this.options = options;
}
this.options = options;
}

createClass(PurgecssPlugin, [{
key: 'apply',
value: function apply(compiler) {
var _this = this;

createClass(PurgecssPlugin, [{
key: 'apply',
value: function apply(compiler) {
var _this = this;

compiler.plugin('this-compilation', function (compilation) {
var entryPaths$$1 = entryPaths(_this.options.paths);

flatten(entryPaths$$1).forEach(function (p) {
if (!fs.existsSync(p)) throw new Error('Path ' + p + ' does not exist.');
});

compilation.plugin('additional-assets', function (cb) {
var assetsFromCompilation = assets(compilation.assets, ['.css']);
// Go through chunks and purge as configured
compilation.chunks.forEach(function (chunk) {
var chunkName = chunk.name,
files$$1 = chunk.files;

var assetsToPurge = assetsFromCompilation.filter(function (asset) {
if (_this.options.only) {
return [].concat(_this.options.only).some(function (only) {
return asset.name.indexOf(only) >= 0;
compiler.plugin('this-compilation', function (compilation) {
var entryPaths$$1 = entryPaths(_this.options.paths);

flatten(entryPaths$$1).forEach(function (p) {
if (!fs.existsSync(p)) throw new Error('Path ' + p + ' does not exist.');
});
} else {
return files$$1.indexOf(asset.name) >= 0;
}
});

assetsToPurge.forEach(function (_ref) {
var name = _ref.name,
asset = _ref.asset;

var filesToSearch = entries(entryPaths$$1, chunkName).concat(files(chunk, _this.options.moduleExtensions || [], function (file) {
return file.resource;
})).filter(function (v) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;

try {
for (var _iterator = styleExtensions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var ext = _step.value;

if (v.endsWith(ext)) return false;
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}

return true;
});

// Compile through Purgecss and attach to output.
// This loses sourcemaps should there be any!
var purgecss = new Purgecss(_extends({}, _this.options, {
content: filesToSearch,
css: [asset.source()],
stdin: true
}));
compilation.assets[name] = new ConcatSource(purgecss.purge()[0].css);
compilation.plugin('additional-assets', function (cb) {
var assetsFromCompilation = assets(compilation.assets, ['.css']);
// Go through chunks and purge as configured
compilation.chunks.forEach(function (chunk) {
var chunkName = chunk.name,
files$$1 = chunk.files;

var assetsToPurge = assetsFromCompilation.filter(function (asset) {
if (_this.options.only) {
return [].concat(_this.options.only).some(function (only) {
return asset.name.indexOf(only) >= 0;
});
} else {
return files$$1.indexOf(asset.name) >= 0;
}
});

assetsToPurge.forEach(function (_ref) {
var name = _ref.name,
asset = _ref.asset;

var filesToSearch = entries(entryPaths$$1, chunkName).concat(files(chunk, _this.options.moduleExtensions || [], function (file) {
return file.resource;
})).filter(function (v) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;

try {
for (var _iterator = styleExtensions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var ext = _step.value;

if (v.endsWith(ext)) return false;
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}

return true;
});

// Compile through Purgecss and attach to output.
// This loses sourcemaps should there be any!
var options = _extends({}, _this.options, {
content: filesToSearch,
css: [asset.source()],
stdin: true
});
if (typeof options.whitelist === 'function') {
options.whitelist = options.whitelist();
}
if (typeof options.whitelistPatterns === 'function') {
options.whitelistPatterns = options.whitelistPatterns();
}
var purgecss = new Purgecss(options);
compilation.assets[name] = new ConcatSource(purgecss.purge()[0].css);
});
});

cb();
});
});
});

cb();
});
});
}
}]);
return PurgecssPlugin;
}
}]);
return PurgecssPlugin;
}();

export default PurgecssPlugin;
Loading

0 comments on commit f42d2b0

Please sign in to comment.