compile()

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);
  }