packages/svg-mixer/lib/utils/generate-sprite-tree.js (32 lines of code) (raw):
const merge = require('merge-options');
const postsvg = require('postsvg');
const { svg: svgNs, xlink: xlinkNs } = require('../../namespaces');
const { moveNamespacesToRoot, moveNodesOutsideSymbol } = require('../transformations');
const defaultConfig = {
attrs: {
[svgNs.name]: svgNs.uri,
[xlinkNs.name]: xlinkNs.uri
},
defs: null,
content: null
};
/**
* @param {Object} [config] {@see defaultConfig}
* @return {Promise<PostSvgTree>}
*/
module.exports = function generateSpriteTree(config = {}) {
const cfg = merge(defaultConfig, config);
const tree = postsvg.Tree.createFromArray([{
tag: 'svg',
attrs: cfg.attrs,
content: [
{
tag: 'defs',
content: cfg.defs || []
},
cfg.content || false
].filter(Boolean)
}]);
return postsvg([
moveNamespacesToRoot(),
moveNodesOutsideSymbol()
])
.process(tree, { skipParse: true })
.then(res => res.tree);
};