@@ -62,101 +62,111 @@ const ICON_EXPORT_TPL = fs.readFileSync(
62
62
const ICON_PACKS = [ 'dls-icons-react' , 'dls-icons-vue' , 'dls-icons-vue-3' ]
63
63
const DATA_PACK = 'dls-icons-data'
64
64
65
- function getPackDir ( name , ...rest ) {
65
+ function getPackDir ( name , ...rest ) {
66
66
return path . resolve ( __dirname , `../packages/${ name } ` , ...rest )
67
67
}
68
68
69
69
const DATA_DIR = getPackDir ( DATA_PACK , 'src' )
70
70
71
- function clearDir ( dir ) {
71
+ function clearDir ( dir ) {
72
72
rimraf . sync ( dir )
73
73
mkdirp . sync ( dir )
74
74
}
75
75
76
- function renderTpl ( tpl , data ) {
77
- for ( let key in data ) {
78
- if ( data . hasOwnProperty ( key ) ) {
76
+ function renderTpl ( tpl , data ) {
77
+ for ( const key in data ) {
78
+ if ( Object . prototype . hasOwnProperty . call ( data , key ) ) {
79
79
tpl = tpl . replace ( new RegExp ( `{${ key } }` , 'g' ) , data [ key ] )
80
80
}
81
81
}
82
82
return tpl
83
83
}
84
84
85
- async function generate ( ) {
85
+ async function generate ( ) {
86
86
clearDir ( SVG_DIR )
87
87
clearDir ( path . join ( DATA_DIR , 'icons' ) )
88
88
89
89
ICON_PACKS . forEach ( ( pack ) => {
90
- let iconsDir = path . join ( getPackDir ( pack ) , 'src/icons' )
90
+ const iconsDir = path . join ( getPackDir ( pack ) , 'src/icons' )
91
91
clearDir ( iconsDir )
92
92
} )
93
93
94
94
Promise . all (
95
95
( await getSVGFiles ( ) ) . map ( async ( { slug, content } ) => {
96
- let file = `${ slug } .svg`
97
- let { el, content : svg , width, height } = await normalizeSVG (
98
- content ,
99
- file
100
- )
96
+ const file = `${ slug } .svg`
97
+ const { el, content : svg } = await normalizeSVG ( content , file )
101
98
102
99
fs . writeFileSync ( path . join ( SVG_DIR , file ) , svg , 'utf8' )
103
100
104
- let name = camelCase ( slug )
105
- let Name = upperFirst ( name )
101
+ const name = camelCase ( slug )
102
+ const Name = upperFirst ( name )
103
+
104
+ const { width, height, ...attributes } = el . attributes
106
105
107
- let iconCode = stringifyObject (
106
+ const iconCode = stringifyObject (
108
107
{
109
- name : `icon- ${ slug } ` ,
108
+ name : `Icon ${ Name } ` ,
110
109
content : el . children . map ( ( child ) => stringify ( child ) ) . join ( '' ) ,
111
- width : Number ( width ) ,
112
- height : Number ( height ) ,
110
+ attributes : {
111
+ ...attributes ,
112
+ width : Number ( width ) ,
113
+ height : Number ( height )
114
+ }
113
115
} ,
114
116
{
115
- indent : ' ' ,
117
+ indent : ' '
116
118
}
117
119
)
118
120
119
- let tplData = {
121
+ const tplData = {
120
122
name,
121
123
Name,
122
- icon : iconCode ,
124
+ icon : iconCode
123
125
}
124
126
125
- let dataModuleCode = renderTpl ( DATA_TPL , tplData )
126
- let iconModuleCode = renderTpl ( ICON_TPL , tplData )
127
+ const dataModuleCode = renderTpl ( DATA_TPL , tplData )
128
+ const iconModuleCode = renderTpl ( ICON_TPL , tplData )
127
129
128
- fs . writeFileSync ( path . join ( DATA_DIR , `icons/${ Name } .js` ) , dataModuleCode , 'utf8' )
130
+ fs . writeFileSync (
131
+ path . join ( DATA_DIR , `icons/${ Name } .js` ) ,
132
+ dataModuleCode ,
133
+ 'utf8'
134
+ )
129
135
130
136
ICON_PACKS . forEach ( ( pack ) => {
131
- let iconsDir = path . join ( getPackDir ( pack ) , 'src/icons' )
132
- fs . writeFileSync ( path . join ( iconsDir , `${ Name } .js` ) , iconModuleCode , 'utf8' )
137
+ const iconsDir = path . join ( getPackDir ( pack ) , 'src/icons' )
138
+ fs . writeFileSync (
139
+ path . join ( iconsDir , `${ Name } .js` ) ,
140
+ iconModuleCode ,
141
+ 'utf8'
142
+ )
133
143
} )
134
144
135
145
return { slug, name, Name, file }
136
146
} )
137
147
) . then ( ( icons ) => {
138
- let dataIndex = icons
148
+ const dataIndex = icons
139
149
. map ( ( data ) => renderTpl ( DATA_EXPORT_TPL , data ) )
140
150
. join ( '' )
141
151
142
152
fs . writeFileSync ( path . join ( DATA_DIR , 'index.js' ) , dataIndex , 'utf8' )
143
153
144
- let iconIndex =
154
+ const iconIndex =
145
155
icons . map ( ( data ) => renderTpl ( ICON_EXPORT_TPL , data ) ) . join ( '' ) +
146
- ` export createIcon from './createIcon'\n`
156
+ ' export createIcon from \ './createIcon\ '\n'
147
157
148
158
ICON_PACKS . concat ( DATA_PACK ) . forEach ( ( pack ) => {
149
- let packDir = getPackDir ( pack )
159
+ const packDir = getPackDir ( pack )
150
160
if ( pack !== DATA_PACK ) {
151
161
fs . writeFileSync ( path . join ( packDir , 'src/index.js' ) , iconIndex , 'utf8' )
152
162
}
153
163
154
- let readmeFile = path . join ( packDir , 'README.md' )
155
- let readmeContent = fs . readFileSync ( readmeFile , 'utf8' )
164
+ const readmeFile = path . join ( packDir , 'README.md' )
165
+ const readmeContent = fs . readFileSync ( readmeFile , 'utf8' )
156
166
157
- let cols = 5
158
- let prefix = pack === DATA_PACK ? 'data' : 'Icon'
159
- let iconTable =
167
+ const cols = 5
168
+ const prefix = pack === DATA_PACK ? 'data' : 'Icon'
169
+ const iconTable =
160
170
'<table><tbody>' +
161
171
Array . from ( { length : Math . ceil ( icons . length / cols ) } )
162
172
. map ( ( _ , i ) => {
@@ -178,7 +188,7 @@ async function generate() {
178
188
fs . writeFileSync (
179
189
readmeFile ,
180
190
commentMark ( readmeContent , {
181
- icons : iconTable ,
191
+ icons : iconTable
182
192
} ) ,
183
193
'utf8'
184
194
)
@@ -188,13 +198,13 @@ async function generate() {
188
198
} )
189
199
}
190
200
191
- function sortFileData ( f1 , f2 ) {
201
+ function sortFileData ( f1 , f2 ) {
192
202
return f1 . slug > f2 . slug ? 1 : - 1
193
203
}
194
204
195
- async function getSVGFiles ( ) {
205
+ async function getSVGFiles ( ) {
196
206
if ( ENDPOINT ) {
197
- let { data } = JSON . parse ( await fetch ( ENDPOINT ) . then ( ( res ) => res . text ( ) ) )
207
+ const { data } = JSON . parse ( await fetch ( ENDPOINT ) . then ( ( res ) => res . text ( ) ) )
198
208
199
209
clearDir ( RAW_DIR )
200
210
@@ -209,43 +219,43 @@ async function getSVGFiles() {
209
219
return data
210
220
. map ( ( { label, svg } ) => ( {
211
221
slug : label . replace ( / _ / g, '-' ) ,
212
- content : svg ,
222
+ content : svg
213
223
} ) )
214
224
. sort ( sortFileData )
215
225
} else {
216
226
return fs
217
227
. readdirSync ( RAW_DIR )
218
228
. filter ( ( file ) => ICON_PATTERN . test ( file ) )
219
229
. map ( ( file ) => {
220
- let slug = file . replace ( ICON_PATTERN , ( _ , $1 ) => $1 )
221
- let content = fs . readFileSync ( path . resolve ( RAW_DIR , file ) , 'utf8' )
230
+ const slug = file . replace ( ICON_PATTERN , ( _ , $1 ) => $1 )
231
+ const content = fs . readFileSync ( path . resolve ( RAW_DIR , file ) , 'utf8' )
222
232
return {
223
233
slug,
224
- content,
234
+ content
225
235
}
226
236
} )
227
237
. sort ( sortFileData )
228
238
}
229
239
}
230
240
231
- async function normalizeSVG ( content , file ) {
241
+ async function normalizeSVG ( content , file ) {
232
242
const shasum = createHash ( 'sha1' )
233
243
shasum . update ( content )
234
244
const id = shasum . digest ( 'hex' ) . substring ( 0 , 5 )
235
245
236
- let { error, data } = await optimize ( content , getSVGOConfig ( { id } ) )
246
+ const { error, data } = await optimize ( content , getSVGOConfig ( { id } ) )
237
247
if ( error ) {
238
248
console . error ( file , error )
239
249
return
240
250
}
241
251
242
- let el = await parse ( data )
252
+ const el = await parse ( data )
243
253
console . log ( `Normalizing ${ file } ...` )
244
- let { attributes } = el
254
+ const { attributes } = el
245
255
let { width, height, viewBox } = attributes
246
256
247
257
if ( ! viewBox && ! ( width && height ) ) {
248
- console . error ( file , ` doesn't contain a valid size declaration.` )
258
+ console . error ( file , ' doesn\ 't contain a valid size declaration.' )
249
259
console . error ( width , height , viewBox )
250
260
} else if ( viewBox ) {
251
261
// has viewBox, override width/height
@@ -258,15 +268,15 @@ async function normalizeSVG(content, file) {
258
268
}
259
269
260
270
walkElement ( el , {
261
- enter ( node ) {
262
- let { attributes } = node
271
+ enter ( node ) {
272
+ const { attributes } = node
263
273
264
274
delete attributes . class
265
275
266
- let ctxFill = ( getContextAttr ( node , 'fill' ) || '' ) . toLowerCase ( )
267
- let ctxStroke = ( getContextAttr ( node , 'stroke' ) || '' ) . toLowerCase ( )
268
- let attrFill = ( attributes . fill || '' ) . toLowerCase ( )
269
- let attrStroke = ( attributes . stroke || '' ) . toLowerCase ( )
276
+ const ctxFill = ( getContextAttr ( node , 'fill' ) || '' ) . toLowerCase ( )
277
+ const ctxStroke = ( getContextAttr ( node , 'stroke' ) || '' ) . toLowerCase ( )
278
+ const attrFill = ( attributes . fill || '' ) . toLowerCase ( )
279
+ const attrStroke = ( attributes . stroke || '' ) . toLowerCase ( )
270
280
271
281
if ( attrFill ) {
272
282
if ( ! ctxFill ) {
@@ -308,18 +318,18 @@ async function normalizeSVG(content, file) {
308
318
}
309
319
}
310
320
}
311
- } ,
321
+ }
312
322
} )
313
323
314
324
return {
315
325
el,
316
326
content : stringify ( el ) ,
317
327
width,
318
- height,
328
+ height
319
329
}
320
330
}
321
331
322
- function walkElement ( el , { enter, leave } ) {
332
+ function walkElement ( el , { enter, leave } ) {
323
333
if ( typeof enter === 'function' ) {
324
334
enter ( el )
325
335
}
@@ -335,7 +345,7 @@ function walkElement(el, { enter, leave }) {
335
345
}
336
346
}
337
347
338
- function getContextAttr ( el , attr ) {
348
+ function getContextAttr ( el , attr ) {
339
349
let node = el . parentNode
340
350
while ( node ) {
341
351
if ( node . attributes && node . attributes [ attr ] ) {
0 commit comments