in packages/extract-svg-sprite-webpack-plugin/lib/css-loader.js [15:86]
module.exports = function (content, sourcemap, meta = {}) {
const loader = this;
const callback = this.async();
// Reuse AST from postcss if available
const ast = meta && meta.ast && meta.ast.type === 'postcss'
? meta.ast.root
: postcss.parse(content, { from: loader.resourcePath + loader.resourceQuery });
const resolvePromises = findBgDecls(ast).map(({ decl, helper }) => {
helper.rawRequest = helper.URIS[0].toString();
return new Promise((resolve, reject) => {
loader.resolve(
loader.context,
urlToRequest(helper.rawRequest, loader.context),
(err, result) => (err ? reject(err) : resolve(result))
);
})
.then(resovled => (helper.resolved = resovled))
.then(() => ({ decl, helper }));
});
const plugin = helpers.getPluginFromLoaderContext(loader);
const ruleMatcher = new RuleSet(loader._compiler.options.module.rules);
Promise.all(resolvePromises).then(data => {
data.forEach(({ decl, helper }) => {
const url = helper.URIS[0];
const request = helper.resolved;
const matchedRules = ruleMatcher.exec({
resource: url.path(),
resourceQuery: url.query(),
issuer: loader._module.issuer,
compiler: loader._compiler
});
const svgLoaderRule = matchedRules.find(r => r.value.loader === LOADER_PATH);
if (!svgLoaderRule) {
return;
}
const svgLoaderOpts = svgLoaderRule ? svgLoaderRule.value.options : {};
const { spriteType, selector } = merge({}, plugin.config, svgLoaderOpts);
const transformOpts = {
decl,
spriteUrl: url.toString(),
spriteType,
selector,
position: {
bgPosition: {
left: generator.bgPosLeft(request).token,
top: generator.bgPosTop(request).token
},
bgSize: {
width: generator.bgSizeWidth(request).token,
height: generator.bgSizeHeight(request).token
}
}
};
transformDecl(transformOpts);
});
const result = ast.toString();
callback(null, result, sourcemap, meta);
}).catch(callback);
};