2021-04-08 12:41:57 +02:00
import fastGlob from 'fast-glob' ;
2021-08-17 07:32:48 +02:00
import { optimize } from 'svgo' ;
2021-04-08 12:41:57 +02:00
import { resolve , parse , dirname } from 'path' ;
2021-04-15 13:02:34 +02:00
import fs from 'fs' ;
2021-04-08 12:41:57 +02:00
import { fileURLToPath } from 'url' ;
2020-07-12 11:10:56 +02:00
2021-04-15 13:02:34 +02:00
const { readFile , writeFile , mkdir } = fs . promises ;
2021-04-08 12:41:57 +02:00
const _ _dirname = dirname ( fileURLToPath ( import . meta . url ) ) ;
2020-07-12 11:10:56 +02:00
const glob = ( pattern ) => fastGlob . sync ( pattern , { cwd : resolve ( _ _dirname ) , absolute : true } ) ;
const outputDir = resolve ( _ _dirname , '../public/img/svg' ) ;
function exit ( err ) {
if ( err ) console . error ( err ) ;
process . exit ( err ? 1 : 0 ) ;
}
2020-12-05 11:09:09 +01:00
async function processFile ( file , { prefix , fullName } = { } ) {
let name ;
if ( fullName ) {
name = fullName ;
} else {
name = parse ( file ) . name ;
if ( prefix ) name = ` ${ prefix } - ${ name } ` ;
if ( prefix === 'octicon' ) name = name . replace ( /-[0-9]+$/ , '' ) ; // chop of '-16' on octicons
}
2020-07-12 11:10:56 +02:00
2021-03-22 05:04:19 +01:00
const { data } = optimize ( await readFile ( file , 'utf8' ) , {
2021-08-17 07:32:48 +02:00
plugins : [
{ name : 'preset-default' } ,
{ name : 'removeXMLNS' } ,
{ name : 'removeDimensions' } ,
2021-09-09 09:06:54 +02:00
{ name : 'prefixIds' , params : { prefix : ( ) => name } } ,
2021-08-17 07:32:48 +02:00
{ name : 'addClassesToSVGElement' , params : { classNames : [ 'svg' , name ] } } ,
{ name : 'addAttributesToSVGElement' , params : { attributes : [ { 'width' : '16' } , { 'height' : '16' } , { 'aria-hidden' : 'true' } ] } } ,
] ,
2020-07-12 11:10:56 +02:00
} ) ;
await writeFile ( resolve ( outputDir , ` ${ name } .svg ` ) , data ) ;
}
2020-12-05 11:09:09 +01:00
function processFiles ( pattern , opts ) {
return glob ( pattern ) . map ( ( file ) => processFile ( file , opts ) ) ;
}
2020-07-12 11:10:56 +02:00
async function main ( ) {
try {
await mkdir ( outputDir ) ;
} catch { }
2020-12-05 11:09:09 +01:00
await Promise . all ( [
... processFiles ( '../node_modules/@primer/octicons/build/svg/*-16.svg' , { prefix : 'octicon' } ) ,
... processFiles ( '../web_src/svg/*.svg' ) ,
2021-01-27 11:15:39 -05:00
... processFiles ( '../public/img/gitea.svg' , { fullName : 'gitea-gitea' } ) ,
2020-12-05 11:09:09 +01:00
] ) ;
2020-07-12 11:10:56 +02:00
}
2021-12-03 22:43:14 -08:00
main ( ) . then ( exit ) . catch ( exit ) ;
2020-07-12 11:10:56 +02:00