mirror of
https://github.com/tabler/tabler-icons.git
synced 2025-01-17 12:48:26 +01:00
113 lines
2.8 KiB
JavaScript
113 lines
2.8 KiB
JavaScript
import fs from 'fs-extra'
|
|
import path from 'path'
|
|
import { PACKAGES_DIR, readSvgs } from './helpers.mjs'
|
|
import { stringify } from 'svgson'
|
|
import prettier from 'prettier'
|
|
|
|
import bundleSize from '@atomico/rollup-plugin-sizes'
|
|
import { visualizer } from 'rollup-plugin-visualizer'
|
|
import license from 'rollup-plugin-license'
|
|
import esbuild from 'rollup-plugin-esbuild'
|
|
|
|
/**
|
|
* Build icons
|
|
*
|
|
* @param name
|
|
* @param componentTemplate
|
|
* @param indexIconTemplate
|
|
* @param typeDefinitionsTemplate
|
|
* @param indexTypeTemplate
|
|
* @param extension
|
|
* @param pretty
|
|
*/
|
|
export const buildIcons = ({
|
|
name,
|
|
componentTemplate,
|
|
indexItemTemplate,
|
|
typeDefinitionsTemplate,
|
|
indexTypeTemplate,
|
|
extension = 'js',
|
|
pretty = true,
|
|
key = true,
|
|
pascalCase = false
|
|
}) => {
|
|
const DIST_DIR = path.resolve(PACKAGES_DIR, name),
|
|
svgFiles = readSvgs()
|
|
|
|
let index = []
|
|
let typings = []
|
|
|
|
svgFiles.forEach((svgFile, i) => {
|
|
const children = svgFile.obj.children
|
|
.map(({
|
|
name,
|
|
attributes
|
|
}, i) => {
|
|
if (key) {
|
|
attributes.key = `svg-${i}`
|
|
}
|
|
|
|
if(pascalCase) {
|
|
attributes.strokeWidth = attributes['stroke-width']
|
|
delete attributes['stroke-width']
|
|
}
|
|
|
|
return [name, attributes]
|
|
})
|
|
.filter((i) => {
|
|
const [name, attributes] = i
|
|
return !attributes.d || attributes.d !== 'M0 0h24v24H0z'
|
|
})
|
|
|
|
// process.stdout.write(`Building ${i}/${svgFiles.length}: ${svgFile.name.padEnd(42)}\r`)
|
|
|
|
let component = componentTemplate({
|
|
name: svgFile.name,
|
|
namePascal: svgFile.namePascal,
|
|
children,
|
|
stringify,
|
|
svg: svgFile
|
|
})
|
|
|
|
const output = pretty ? prettier.format(component, {
|
|
singleQuote: true,
|
|
trailingComma: 'all',
|
|
parser: 'babel'
|
|
}) : component
|
|
|
|
let filePath = path.resolve(DIST_DIR, 'src/icons', `${svgFile.namePascal}.${extension}`)
|
|
fs.writeFileSync(filePath, output, 'utf-8')
|
|
|
|
index.push(indexItemTemplate({
|
|
name: svgFile.name,
|
|
namePascal: svgFile.namePascal
|
|
}))
|
|
|
|
typings.push(indexTypeTemplate({
|
|
name: svgFile.name,
|
|
namePascal: svgFile.namePascal
|
|
}))
|
|
})
|
|
|
|
fs.writeFileSync(path.resolve(DIST_DIR, `./src/icons.js`), index.join('\n'), 'utf-8')
|
|
|
|
fs.ensureDirSync(path.resolve(DIST_DIR, `./dist/`))
|
|
fs.writeFileSync(path.resolve(DIST_DIR, `./dist/tabler-${name}.d.ts`), typeDefinitionsTemplate() + '\n' + typings.join('\n'), 'utf-8')
|
|
}
|
|
|
|
export const getRollupPlugins = (pkg, minify) => {
|
|
return [
|
|
esbuild({
|
|
minify
|
|
}),
|
|
license({
|
|
banner: `${pkg.name} v${pkg.version} - ${pkg.license}`
|
|
}),
|
|
bundleSize(),
|
|
visualizer({
|
|
sourcemap: false,
|
|
filename: `stats/${pkg.name}${minify ? '-min' : ''}.html`
|
|
})
|
|
].filter(Boolean)
|
|
}
|