UNPKG

svg-jsx-loader

Version:

WebPack loader that converts SVG files into React Components

49 lines (37 loc) 1.36 kB
'use strict'; var loaderUtils = require('loader-utils'); var svgtojsx = require('svg-to-jsx'); var fs = require('fs'); var path = require('path'); var assign = require('object-assign'); var utils = require('./utils'); function getTemplate(options) { var type = options.es6 ? 'es6.' + (options.memo ? 'memo' : 'pure') : 'es5'; var templateFilename = path.resolve(__dirname, 'templates', type) + '.js.tpl'; return fs.readFileSync(templateFilename).toString('utf8'); } function buildComponent(svg, options) { var template = getTemplate(options); return template .replace(/{SVG}/g, svg) .replace(/{DISPLAYNAME}/g, JSON.stringify(options.displayName)) .replace(/{CLASSNAME}/g, options.displayName); } module.exports = function svgJsxLoader(source) { this.cacheable(); var callback = this.async(); var options = loaderUtils.parseQuery(this.query); var fileName = path.basename(this.resourcePath, '.svg'); var displayName = utils.camelCase(fileName); options = assign({}, { passProps: true, root: null, refs: null, displayName: displayName }, options); svgtojsx(source, options, function(error, result) { if (error) return callback(error); var component = buildComponent(result, options); callback(null, component); }); };