svgdir2sprite/index.js
2017-04-25 07:01:39 -05:00

50 lines
1.3 KiB
JavaScript

const fs = require('fs');
const async = require('async');
const svgSprite = require('svg2sprite');
const sprite = svgSprite.collection();
const isSVG = (filename) => filename.split('.').pop() === 'svg';
const iconName = (filename) => filename.split('.')[0];
function saveSpritesheet(path, spritesheet) {
if(path.indexOf('.svg') === -1) throw 'Error: Please specify a filename ending with .svg';
fs.writeFile(path, spritesheet, (error) => { if (error) throw error });
}
function readSprite(filename, file) {
sprite.add(iconName(filename), `<svg>${file}</svg>`);
}
function allSpritesRead(pathBuild) {
let spritesheet = sprite.compile();
if (pathBuild) {
saveSpritesheet(pathBuild, spritesheet);
}
return spritesheet;
}
function generate(pathSrc, pathBuild) {
return new Promise((resolve, reject) => {
fs.readdir(pathSrc, (error, filenames) => {
if (error) reject(error);
async.eachSeries(filenames.filter(isSVG), (filename, cb) => {
fs.readFile(pathSrc + filename, (error, fileData) => {
if (error) reject(error);
readSprite(filename, fileData);
cb(fileData);
});
}, (error) => {
if (error) reject(error);
resolve(allSpritesRead(pathBuild));
});
});
});
}
module.exports = generate;