packages/svg-transform-loader/lib/loader.js (43 lines of code) (raw):

const postsvg = require('postsvg'); const transformPlugin = require('posthtml-transform'); const { getOptions, parseQuery } = require('loader-utils'); const { stringify: stringifyQuery } = require('query-string'); const isEmpty = require('lodash.isempty'); const merge = require('merge-options'); const defaultConfig = { raw: true, transformQuery: null }; function generateLoaderResult(content, raw = true) { return raw ? content : `module.exports = ${JSON.stringify(content)}`; } // eslint-disable-next-line func-names,consistent-return module.exports = function (content, map) { if (this.version === 1 && this.cacheable) { this.cacheable(); } const callback = this.async(); const { raw, transformQuery, ...transformPluginCfg } = merge(defaultConfig, getOptions(this) || {}); const query = this.resourceQuery ? parseQuery(this.resourceQuery) : null; if (!query || isEmpty(query)) { return callback(null, generateLoaderResult(content, raw), map); } if (typeof transformQuery === 'function') { transformQuery(query); } Object.keys(query).forEach(param => { query[param] = decodeURIComponent(query[param]); }); postsvg() .use(transformPlugin(stringifyQuery(query), transformPluginCfg)) .process(content) .then(res => { callback(null, generateLoaderResult(res.svg, raw), map, { ast: res.tree }); }) .catch(callback); };