-
Notifications
You must be signed in to change notification settings - Fork 22
/
load-tb-classes.js
49 lines (43 loc) · 1.42 KB
/
load-tb-classes.js
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
const fs = require('fs');
const postcss = require('postcss');
const selectorParser = require('postcss-selector-parser');
const path = require("path");
const tbStylesCss = path.resolve(path.join('.', 'node_modules', 'thingsboard', 'src', 'styles.css'));
const distDir = path.resolve(path.join('.', 'dist'));
const tbClassesJson = path.resolve(path.join(distDir, 'tbClasses.json'));
const classes = new Set();
const collectClassesPlugin = (opts = {}) => {
return {
postcssPlugin: 'collect-classes',
Once (root, { result }) {
root.walkRules((rule) => {
selectorParser((selectors) => {
selectors.walkClasses((classNode) => {
classes.add(classNode.value);
});
}).processSync(rule.selector);
});
}
}
}
collectClassesPlugin.postcss = true;
const plugin = (opts = {}) => {
return {
postcssPlugin: 'collect-tb-classes',
async Once (root, { result }) {
const css = fs.readFileSync(tbStylesCss, 'utf8');
await postcss([collectClassesPlugin])
.process(css, {from: tbStylesCss}).then(() => {
const classesArray = Array.from(classes);
if (!fs.existsSync(distDir)) {
fs.mkdirSync(distDir);
}
fs.writeFileSync(tbClassesJson, JSON.stringify(classesArray, null, 2), 'utf8');
}).catch((error) => {
console.error('Error in CSS:', error);
});
}
}
}
plugin.postcss = true;
module.exports = plugin;