-
Notifications
You must be signed in to change notification settings - Fork 64
Expand file tree
/
Copy pathgenerateHarmonyComponent.ts
More file actions
64 lines (52 loc) · 2.12 KB
/
generateHarmonyComponent.ts
File metadata and controls
64 lines (52 loc) · 2.12 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
53
54
55
56
57
58
59
60
61
62
63
import fs from 'fs';
import path, { basename } from 'path';
import mkdirp from 'mkdirp';
import glob from 'glob';
import colors from 'colors';
import { XmlData } from './fetchXml';
import { Config } from './getConfig';
import { getTemplate } from './getTemplate';
import { generateCase } from "./utils"
import {
replaceIsRpx,
replaceNames,
replaceSize,
} from './replace';
// import { whitespace } from './whitespace';
export const generateHarmonyComponent = (data: XmlData, config: Config) => {
const svgTemplates: string[] = [];
const names: string[] = [];
const saveDir = path.resolve(config.save_dir);
const fileName = basename(config.save_dir) || 'iconfont';
mkdirp.sync(saveDir);
glob.sync(path.join(saveDir, '*')).forEach((file) => fs.unlinkSync(file));
data.svg.symbol.forEach((item) => {
const iconId = item.$.id;
const iconIdAfterTrim = config.trim_icon_prefix
? iconId.replace(
new RegExp(`^${config.trim_icon_prefix}(.+?)$`),
(_, value) => value.replace(/^[-_.=+#@!~*]+(.+?)$/, '$1')
)
: iconId;
names.push(iconIdAfterTrim);
svgTemplates.push(
`<!--${iconIdAfterTrim}-->\n<view has:if="{{name === '${iconIdAfterTrim}'}}" style="background-image: url({{quot}}data:image/svg+xml, ${generateCase(item, {
hexToRgb: true
})}{{quot}});` +
' width: {{svgSize}}px; height: {{svgSize}}px; " class="icon" />'
);
console.log(`${colors.green('√')} Generated icon "${colors.yellow(iconId)}"`);
});
fs.writeFileSync(path.join(saveDir, fileName + '.css'), getTemplate('harmony.css'));
fs.writeFileSync(
path.join(saveDir, fileName + '.hxml'),
svgTemplates.join('\n\n')
);
let jsFile = getTemplate('harmony.js');
jsFile = replaceSize(jsFile, config.default_icon_size);
jsFile = replaceNames(jsFile, names);
jsFile = replaceIsRpx(jsFile, config.use_rpx);
fs.writeFileSync(path.join(saveDir, fileName + '.js'), jsFile);
fs.writeFileSync(path.join(saveDir, fileName + '.json'), getTemplate('harmony.json'));
console.log(`\n${colors.green('√')} All icons have been putted into dir: ${colors.green(config.save_dir)}\n`);
};