UNPKG

4 kBJavaScriptView Raw
1'use strict';
2
3var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
4
5var _fs = require('fs');
6
7var _fs2 = _interopRequireDefault(_fs);
8
9var _purifyCss = require('purify-css');
10
11var _purifyCss2 = _interopRequireDefault(_purifyCss);
12
13var _webpackSources = require('webpack-sources');
14
15var _parse = require('./parse');
16
17var parse = _interopRequireWildcard(_parse);
18
19var _search = require('./search');
20
21var search = _interopRequireWildcard(_search);
22
23var _validateOptions = require('./validate-options');
24
25var _validateOptions2 = _interopRequireDefault(_validateOptions);
26
27var _schema = require('./schema');
28
29var _schema2 = _interopRequireDefault(_schema);
30
31function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
32
33function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
35function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
36
37module.exports = function PurifyPlugin(options) {
38 return {
39 apply: function apply(compiler) {
40 var validation = (0, _validateOptions2.default)((0, _schema2.default)({
41 entry: compiler.options.entry
42 }), options);
43
44 if (!validation.isValid) {
45 throw new Error(validation.error);
46 }
47
48 compiler.plugin('this-compilation', function (compilation) {
49 var entryPaths = parse.entryPaths(options.paths);
50
51 parse.flatten(entryPaths).forEach(function (p) {
52 if (!_fs2.default.existsSync(p)) throw new Error('Path ' + p + ' does not exist.');
53 });
54
55 // Output debug information through a callback pattern
56 // to avoid unnecessary processing
57 var output = options.verbose ? function (messageCb) {
58 var _console;
59
60 return (_console = console).info.apply(_console, _toConsumableArray(messageCb()));
61 } : function () {};
62
63 compilation.plugin('additional-assets', function (cb) {
64 // Go through chunks and purify as configured
65 compilation.chunks.forEach(function (_ref) {
66 var chunkName = _ref.name,
67 files = _ref.files,
68 modules = _ref.modules;
69
70 var assetsToPurify = search.assets(compilation.assets, options.styleExtensions).filter(function (asset) {
71 return files.indexOf(asset.name) >= 0;
72 });
73
74 output(function () {
75 return ['Assets to purify:', assetsToPurify.map(function (_ref2) {
76 var name = _ref2.name;
77 return name;
78 }).join(', ')];
79 });
80
81 assetsToPurify.forEach(function (_ref3) {
82 var name = _ref3.name,
83 asset = _ref3.asset;
84
85 var filesToSearch = parse.entries(entryPaths, chunkName).concat(search.files(modules, options.moduleExtensions || [], function (file) {
86 return file.resource;
87 }));
88
89 output(function () {
90 return ['Files to search for used rules:', filesToSearch.join(', ')];
91 });
92
93 // Compile through Purify and attach to output.
94 // This loses sourcemaps should there be any!
95 compilation.assets[name] = new _webpackSources.ConcatSource((0, _purifyCss2.default)(filesToSearch, asset.source(), _extends({
96 info: options.verbose,
97 minify: options.minimize
98 }, options.purifyOptions)));
99 });
100 });
101
102 cb();
103 });
104 });
105 }
106 };
107};
\No newline at end of file