1 |
|
2 | const { copySync, readFileSync, writeFileSync } = require('fs-extra');
|
3 | const { resolve, dirname, join } = require('path');
|
4 | const { parse: parseCSS, stringify: stringifyCSS } = require('css');
|
5 |
|
6 |
|
7 | const stylesDir = resolve(__dirname, '../dist/styles');
|
8 | const pfDir = dirname(require.resolve('@patternfly/patternfly/patternfly.css'));
|
9 |
|
10 | const unusedSelectorRegEx = /(\.fas?|\.sr-only)/;
|
11 | const unusedKeyFramesRegEx = /fa-/;
|
12 | const unusedFontFamilyRegEx = /Font Awesome 5 Free/;
|
13 | const ununsedFontFilesRegExt = /(fa-|\.html$|\.css$)/;
|
14 |
|
15 |
|
16 | copySync(join(pfDir, 'assets/images'), join(stylesDir, 'assets/images'));
|
17 | copySync(join(pfDir, 'assets/pficon'), join(stylesDir, 'assets/pficon'));
|
18 | copySync(join(pfDir, 'assets/fonts'), join(stylesDir, 'assets/fonts'), {
|
19 | filter(src) {
|
20 | return !ununsedFontFilesRegExt.test(src);
|
21 | }
|
22 | });
|
23 |
|
24 |
|
25 | const baseCssFiles = {
|
26 | 'base.css': 'patternfly-base.css',
|
27 | 'base-no-reset.css': 'patternfly-base-no-reset.css'
|
28 | };
|
29 |
|
30 | for (const [targetCss, baseCss] of Object.entries(baseCssFiles)) {
|
31 | const css = readFileSync(join(pfDir, baseCss), 'utf8');
|
32 | const ast = parseCSS(css);
|
33 |
|
34 |
|
35 | ast.stylesheet.rules = ast.stylesheet.rules.filter(rule => {
|
36 | switch (rule.type) {
|
37 | case 'rule':
|
38 | return !rule.selectors.some(sel => unusedSelectorRegEx.test(sel));
|
39 | case 'keyframes':
|
40 | return !unusedKeyFramesRegEx.test(rule.name);
|
41 | case 'charset':
|
42 | case 'comment':
|
43 | return false;
|
44 | case 'font-face':
|
45 |
|
46 | const fontFamilyDecl = rule.declarations.find(decl => decl.property === 'font-family');
|
47 | return !unusedFontFamilyRegEx.test(fontFamilyDecl.value);
|
48 | default:
|
49 | return true;
|
50 | }
|
51 | });
|
52 |
|
53 | writeFileSync(join(stylesDir, targetCss), stringifyCSS(ast));
|
54 | }
|