forked from Henry-Pulver/rollup-plugin-tailwindcss
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
52 lines (42 loc) · 1.47 KB
/
index.js
File metadata and controls
52 lines (42 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
const { readFileSync } = require('fs');
const { extname } = require('path');
const postcss = require('postcss');
const postcssrc = require('postcss-load-config');
const { PurgeCSS } = require('purgecss');
const { createFilter } = require('rollup-pluginutils');
module.exports = function tailwind(options = {}) {
const filter = createFilter(options.input);
const ctx = { env: process.env.ROLLUP_WATCH ? 'development' : 'production' };
let css;
return {
name: 'tailwind',
async transform(_, id) {
if (!filter(id)) return;
const code = readFileSync(id);
const { plugins, options } = await postcssrc(ctx);
({ css } = await postcss(plugins).process(code, {
...options,
from: undefined,
}));
},
async generateBundle(opts, bundle) {
if (!css) return;
let source = css;
if (options.purge) {
const result = await new PurgeCSS().purge({
css: [{ raw: css }],
content: Object.values(bundle)
.filter(chunkOrAsset => chunkOrAsset.type === 'chunk')
.map(({ code, fileName }) => ({
raw: code,
extension: extname(fileName).substring(1),
})),
defaultExtractor: content => content.match(/[\w-/:]+(?<!:)/g) || [],
whitelist: ['html', 'body'],
});
source = result.reduce((acc, purge) => acc + purge.css, '');
}
this.emitFile({ type: 'asset', source, name: 'global.css' });
},
};
};