33 lines
1 KiB
JavaScript
33 lines
1 KiB
JavaScript
|
const processor = require('posthtml-svg-mode');
|
||
|
const renameId = require('posthtml-rename-id');
|
||
|
const normalizeViewBox = require('./transformations/normalize-viewbox');
|
||
|
const rasterToSVG = require('./transformations/raster-to-svg');
|
||
|
const prefixStyleSelectors = require('./transformations/prefix-style-selectors');
|
||
|
const svgToSymbol = require('./transformations/svg-to-symbol');
|
||
|
|
||
|
/**
|
||
|
* @param {Object} options
|
||
|
* @param {string} [options.id]
|
||
|
* @param {string} options.content
|
||
|
* @param {FileRequest} options.request
|
||
|
* @return {Promise<PostHTMLProcessingResult>}
|
||
|
*/
|
||
|
function symbolFactory(options) {
|
||
|
const { id } = options;
|
||
|
const plugins = [];
|
||
|
|
||
|
// convert raster image to svg
|
||
|
const content = Buffer.isBuffer(options.content)
|
||
|
? rasterToSVG(options.content)
|
||
|
: options.content;
|
||
|
|
||
|
plugins.push(normalizeViewBox());
|
||
|
plugins.push(prefixStyleSelectors(`#${id}`));
|
||
|
plugins.push(renameId(`${id}_[id]`));
|
||
|
plugins.push(svgToSymbol({ id }));
|
||
|
|
||
|
return processor(plugins).process(content);
|
||
|
}
|
||
|
|
||
|
module.exports = symbolFactory;
|