svgdir2sprite/index.js
2018-02-22 19:44:18 -06: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 new Error('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