-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathrollup.config.js
46 lines (41 loc) · 1.35 KB
/
rollup.config.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
import {uglify} from 'rollup-plugin-uglify'
import buble from 'rollup-plugin-buble'
import serve from 'rollup-plugin-serve'
import fs from 'fs'
const globals = {'react-dom': 'ReactDOM', react: 'React'} // Do not include react in out package
const plugins = [buble(), uglify(), !process.env.ROLLUP_WATCH || serve('lib')]
export default [{
input: 'lib/core-icons.js',
output: {
file: 'lib/core-icons.min.js',
format: 'umd',
name: 'coreIcons',
sourcemap: true,
intro
},
watch: {include: 'lib/*.(svg|js)'},
plugins
}, {
input: 'lib/core-icons.jsx',
output: {
file: 'jsx/index.js',
format: 'umd',
name: 'CoreIcon',
sourcemap: true,
intro,
globals
},
external: Object.keys(globals),
plugins
}]
function intro () {
const files = fs.readdirSync('./lib').filter((file) => file.slice(-4) === '.svg')
const icons = files.map((file) => {
const code = String(fs.readFileSync(`./lib/${file}`))
const body = code.replace(/^[^>]+>|<[^<]+$/g, '').replace(/\s*([<>])\s*/g, '$1') // Strip white space around tokens
const size = String(code.match(/viewBox="[^"]+/)).split(' ').map(Number)
return `'${file.slice(0, -4)}':['${body}',${size[2]},${size[3]}]` // Generate JS instead of JSON to save bytes
})
fs.writeFileSync('./lib/core-icons.json', JSON.stringify(files))
return `var ICONS = {${icons.join(',')}}`
}