-
Notifications
You must be signed in to change notification settings - Fork 51
/
Copy pathsvg-optimizer.js
49 lines (41 loc) · 1.39 KB
/
svg-optimizer.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
'use strict';
/* global require module */
var Plugin = require('broccoli-caching-writer');
var mapSeries = require('promise-map-series');
var walkSync = require('walk-sync');
var mkdirp = require('mkdirp');
var path = require('path');
var SVGO = require('svgo');
var fs = require('fs');
SVGOptimizer.prototype = Object.create(Plugin.prototype);
SVGOptimizer.prototype.constructor = SVGOptimizer;
function SVGOptimizer(inputNodes, options) {
options = options || {};
this.svgoConfig = options.svgoConfig;
Plugin.call(this, inputNodes, {
annotation: options.annotation,
cacheInclude: [/\.svg/],
});
}
SVGOptimizer.prototype.build = function () {
var svgo = new SVGO(this.svgoConfig);
var destDir = this.outputPath;
return mapSeries(this.inputPaths, function (srcDir) {
var paths = walkSync(srcDir);
return mapSeries(paths, function (relativePath) {
if (/\/$/.test(relativePath)) {
mkdirp.sync(destDir + '/' + relativePath);
return;
}
if (/\.svg$/.test(relativePath)) {
var srcPath = path.join(srcDir, relativePath);
var destPath = path.join(destDir, relativePath);
var rawSVG = fs.readFileSync(srcPath, { encoding: 'utf8' });
return svgo.optimize(rawSVG).then(function (result) {
fs.writeFileSync(destPath, result.data, { encoding: 'utf8' });
});
}
});
});
};
module.exports = SVGOptimizer;