symbol-factory.js 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. const processor = require('posthtml-svg-mode');
  2. const renameId = require('posthtml-rename-id');
  3. const normalizeViewBox = require('./transformations/normalize-viewbox');
  4. const rasterToSVG = require('./transformations/raster-to-svg');
  5. const prefixStyleSelectors = require('./transformations/prefix-style-selectors');
  6. const svgToSymbol = require('./transformations/svg-to-symbol');
  7. /**
  8. * @param {Object} options
  9. * @param {string} [options.id]
  10. * @param {string} options.content
  11. * @param {FileRequest} options.request
  12. * @return {Promise<PostHTMLProcessingResult>}
  13. */
  14. function symbolFactory(options) {
  15. const { id } = options;
  16. const plugins = [];
  17. // convert raster image to svg
  18. const content = Buffer.isBuffer(options.content)
  19. ? rasterToSVG(options.content)
  20. : options.content;
  21. plugins.push(normalizeViewBox());
  22. plugins.push(prefixStyleSelectors(`#${id}`));
  23. plugins.push(renameId(`${id}_[id]`));
  24. plugins.push(svgToSymbol({ id }));
  25. return processor(plugins).process(content);
  26. }
  27. module.exports = symbolFactory;