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), `${file}`); } 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;