1
1
#!/usr/bin/env node
2
2
import imageminZopfli from 'imagemin-zopfli' ;
3
+ import { loadSVGFromString , Canvas , Rect , util } from 'fabric/node' ;
3
4
import { optimize } from 'svgo' ;
4
- import { fabric } from 'fabric' ;
5
5
import { readFile , writeFile } from 'node:fs/promises' ;
6
+ import { argv , exit } from 'node:process' ;
6
7
7
- function exit ( err ) {
8
+ function doExit ( err ) {
8
9
if ( err ) console . error ( err ) ;
9
- process . exit ( err ? 1 : 0 ) ;
10
- }
11
-
12
- function loadSvg ( svg ) {
13
- return new Promise ( ( resolve ) => {
14
- fabric . loadSVGFromString ( svg , ( objects , options ) => {
15
- resolve ( { objects, options} ) ;
16
- } ) ;
17
- } ) ;
10
+ exit ( err ? 1 : 0 ) ;
18
11
}
19
12
20
13
async function generate ( svg , path , { size, bg} ) {
@@ -27,22 +20,22 @@ async function generate(svg, path, {size, bg}) {
27
20
'removeDimensions' ,
28
21
{
29
22
name : 'addAttributesToSVGElement' ,
30
- params : { attributes : [ { width : size } , { height : size } ] }
23
+ params : { attributes : [ { width : size } , { height : size } ] } ,
31
24
} ,
32
25
] ,
33
26
} ) ;
34
27
await writeFile ( outputFile , data ) ;
35
28
return ;
36
29
}
37
30
38
- const { objects, options} = await loadSvg ( svg ) ;
39
- const canvas = new fabric . Canvas ( ) ;
31
+ const { objects, options} = await loadSVGFromString ( svg ) ;
32
+ const canvas = new Canvas ( ) ;
40
33
canvas . setDimensions ( { width : size , height : size } ) ;
41
34
const ctx = canvas . getContext ( '2d' ) ;
42
35
ctx . scale ( options . width ? ( size / options . width ) : 1 , options . height ? ( size / options . height ) : 1 ) ;
43
36
44
37
if ( bg ) {
45
- canvas . add ( new fabric . Rect ( {
38
+ canvas . add ( new Rect ( {
46
39
left : 0 ,
47
40
top : 0 ,
48
41
height : size * ( 1 / ( size / options . height ) ) ,
@@ -51,7 +44,7 @@ async function generate(svg, path, {size, bg}) {
51
44
} ) ) ;
52
45
}
53
46
54
- canvas . add ( fabric . util . groupSVGElements ( objects , options ) ) ;
47
+ canvas . add ( util . groupSVGElements ( objects , options ) ) ;
55
48
canvas . renderAll ( ) ;
56
49
57
50
let png = Buffer . from ( [ ] ) ;
@@ -64,7 +57,7 @@ async function generate(svg, path, {size, bg}) {
64
57
}
65
58
66
59
async function main ( ) {
67
- const gitea = process . argv . slice ( 2 ) . includes ( 'gitea' ) ;
60
+ const gitea = argv . slice ( 2 ) . includes ( 'gitea' ) ;
68
61
const logoSvg = await readFile ( new URL ( '../assets/logo.svg' , import . meta. url ) , 'utf8' ) ;
69
62
const faviconSvg = await readFile ( new URL ( '../assets/favicon.svg' , import . meta. url ) , 'utf8' ) ;
70
63
@@ -79,4 +72,8 @@ async function main() {
79
72
] ) ;
80
73
}
81
74
82
- main ( ) . then ( exit ) . catch ( exit ) ;
75
+ try {
76
+ doExit ( await main ( ) ) ;
77
+ } catch ( err ) {
78
+ doExit ( err ) ;
79
+ }
0 commit comments