-
-
Notifications
You must be signed in to change notification settings - Fork 16
/
utils.js
83 lines (78 loc) · 2.32 KB
/
utils.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
const SVGO = require('svgo');
const scale = (num, inMin, inMax, outMin, outMax) => {
return Math.round(((num - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin);
};
const svgo = new SVGO({
plugins: [
{ cleanupAttrs: true },
{ inlineStyles: false },
{ removeDoctype: false },
{ removeXMLProcInst: false },
{ removeComments: false },
{ removeMetadata: false },
{ removeTitle: false },
{ removeDesc: false },
{ removeUselessDefs: false },
{ removeXMLNS: false },
{ removeEditorsNSData: false },
{ removeEmptyAttrs: false },
{ removeHiddenElems: false },
{ removeEmptyText: false },
{ removeEmptyContainers: false },
{ removeViewBox: false },
{ cleanupEnableBackground: false },
{ minifyStyles: false },
{ convertStyleToAttrs: false },
{ convertColors: false },
{ convertPathData: false },
{ convertTransform: true },
{ removeUnknownsAndDefaults: true },
{ removeNonInheritableGroupAttrs: true },
{ removeUselessStrokeAndFill: true },
{ removeUnusedNS: true },
{ prefixIds: false },
{ cleanupIDs: false },
{ cleanupNumericValues: true },
{ cleanupListOfValues: true },
{ moveElemsAttrsToGroup: false },
{ moveGroupAttrsToElems: true },
{ collapseGroups: true },
{ removeRasterImages: true },
{ mergePaths: true },
{ convertShapeToPath: false },
{ convertEllipseToCircle: false },
{ sortAttrs: true },
{ sortDefsChildren: true },
{ removeDimensions: false },
{ removeAttrs: false },
{ removeAttributesBySelector: false },
{ removeElementsByAttr: false },
{ addClassesToSVGElement: false },
{ addAttributesToSVGElement: false },
{ removeOffCanvasPaths: true },
{ removeStyleElement: true },
{ removeScriptElement: true },
{ reusePaths: false },
],
js2svg: {
pretty: true,
},
});
const compressSVG = async (svg) => {
return (await svgo.optimize(svg)).data;
};
const jsonArrayToCSV = (json) => {
const replacer = (key, value) => (value === null ? '' : value);
const header = Object.keys(json[0]);
let csv = json.map((row) =>
header.map((fieldName) => JSON.stringify(row[fieldName], replacer)).join(',')
);
csv.unshift(header.join(','));
csv = csv.join('\r\n');
return csv;
};
module.exports = {
scale,
compressSVG,
jsonArrayToCSV,
};