-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoptimize.js
52 lines (42 loc) · 1.52 KB
/
optimize.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
50
51
52
import { resolve } from 'node:path'
import { mkdir, readdir } from 'node:fs/promises'
import { optimize } from 'svgo'
import { getArgs, cleanAndMkdir, getIconGroups, read, write, getIconVariants } from './utils.js'
async function main () {
const args = getArgs(process.argv)
if (args.error) return console.error(args.error)
console.log(`Optimize files from ${args.sourceFolder} to ${args.distFolder}...`)
await cleanAndMkdir(args.distFolder)
const groups = await getIconGroups()
await groups.forEach(async group => {
mkdir(`${args.distFolder}/${group}`)
const variants = await getIconVariants(group)
await variants.forEach(async variant => {
const variantPath = `${args.distFolder}/${group}/${variant}`
mkdir(variantPath)
const fileNames = await readdir(`${args.sourceFolder}/${group}/${variant}`)
fileNames.forEach(async (fileName) => {
const filePath = `${args.sourceFolder}/${group}/${variant}/${fileName}`
const svgContent = await read(filePath)
const svgOptimized = optimize(svgContent, {
path: resolve(filePath),
multipass: true,
plugins: [
{
name: 'preset-default',
params: {
overrides: {
removeViewBox: false
}
}
},
'removeDimensions'
]
})
await write(`${variantPath}/${fileName}`, svgOptimized.data)
})
})
})
return console.log('Finished optimizing files.')
}
main()