in packages/extract-svg-sprite-webpack-plugin/lib/utils/sprite-compiler.js [89:146]
compile(compilation) {
const { spriteClass, spriteConfig } = this.config;
const promises = this.groupBySpriteFileName(compilation).map(spriteData => {
const { filename, symbols } = spriteData;
// eslint-disable-next-line new-cap
const sprite = new spriteClass(spriteConfig, symbols);
return sprite.render()
.then(content => {
const result = { sprite, content, filename };
if (filename && filename.includes('[contenthash')) {
result.filename = interpolateName(
process.cwd(),
filename.replace('[contenthash', '[hash'),
{ content }
);
}
sprite.symbols.forEach(symbol => {
const { config, request: symbolUrl } = symbol;
const position = sprite.calculateSymbolPosition(symbol, 'percent');
symbol.cssModules = symbol.issuers
.map(issuer => compilation.modules.find(m =>
m.type === MINI_EXTRACT_MODULE_TYPE &&
m.issuer.request.includes(issuer.request)))
.filter(Boolean);
symbol.replacements = [
generator.symbolUrl(symbol, {
...config,
filename: result.filename
}),
generator.bgPosLeft(symbolUrl, position),
generator.bgPosTop(symbolUrl, position),
generator.bgSizeWidth(symbolUrl, position),
generator.bgSizeHeight(symbolUrl, position),
config.publicPath && new generator.Replacement(
config.publicPath,
compilation.getPath(config.publicPath)
)
].filter(replacement => replacement && replacement.replaceTo);
});
return new CompiledSprite(result);
});
});
return Promise.all(promises);
}