module.exports = function()

in packages/extract-svg-sprite-webpack-plugin/lib/loader.js [12:68]


module.exports = function (content, sourcemap, meta = {}) {
  const callback = this.async();
  const loader = this;
  const context = loader.rootContext || loader.options.context;
  const plugin = helpers.getPluginFromLoaderContext(loader);

  const config = configure(
    merge({}, plugin.config, getLoaderOptions(loader) || {})
  );

  const errors = validate(schemas.loader, config);
  if (errors.length) {
    const err = new Error(`${packageName}: ${errors.join('\n')}`);
    return callback(err, content, sourcemap, meta);
  }

  const request = loader.resourcePath + loader.resourceQuery;

  const symbolId = typeof config.symbolId === 'function'
    ? config.symbolId(loader.resourcePath, loader.resourceQuery)
    : interpolateName(loader, config.symbolId, { content, context });

  const img = new mixer.Image(request, meta.ast || content);
  const symbol = new config.symbolClass(symbolId, img);

  symbol.config = config;
  symbol.module = loader._module;
  symbol.key = `${loader._module.request}___${loader._module.issuer.request}`;

  /*
    Ugly crunch to prevent false-positive warning when using extract-text-webpack-plugin
    TODO remove this when drop webpack 3 support
   */
  const isExtractTextPluginCompilation =
    loader._compiler.name &&
    loader._compiler.name.startsWith('extract-text-webpack-plugin');

  const allSymbols = Array.from(plugin.compiler.symbols.values());
  const idAlreadyExists = allSymbols.some(s => s.id === symbol.id);

  if (idAlreadyExists && !isExtractTextPluginCompilation) {
    const warningText = [
      `Symbol with id "${symbol.id}" already exists.`,
      'It happens when you require SVGs with the same file name from different folders.',
      'Set "symbolId" option to more specific, e.g. "[path]-[name]-[hash]"'
    ].join(' ');

    loader.emitWarning(new Error(warningText));
  }

  plugin.compiler.addSymbol(symbol);
  plugin.prevResult = null;

  const runtime = new config.runtimeGenerator(symbol, config).generate();

  callback(null, runtime, sourcemap, meta);
};