| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | const { isAbsolute, join } = require('path');const { stringifyRequest } = require('loader-utils');const {  stringify,  stringifySymbol,  generateImport,  generateExport,  generateSpritePlaceholder} = require('./utils');/** * @param {Object} params * @param {SpriteSymbol} params.symbol - Sprite symbol instance {@see https://git.io/v9k8g} * @param {SVGSpriteLoaderConfig} params.config - Parsed loader config * @param {string} params.context - Context folder of current processing module * @param {Object} params.loaderContext {@see https://webpack.js.org/api/loaders/#the-loader-context} * @return {string} */function runtimeGenerator(params) {  const { symbol, config, context, loaderContext } = params;  const { extract, esModule, spriteModule, symbolModule, runtimeCompat, publicPath } = config;  let runtime;  if (extract) {    const spritePlaceholder = generateSpritePlaceholder(symbol.request.file);    const path = stringify(publicPath) || '__webpack_public_path__';    const data = `{      id: ${stringify(symbol.useId)},      viewBox: ${stringify(symbol.viewBox)},      url: ${path} + ${stringify(spritePlaceholder)},      toString: function () {        return this.url;      }    }`;    runtime = generateExport(data, esModule);  } else {    const spriteModuleAbsPath = isAbsolute(spriteModule) ? spriteModule : join(context, spriteModule);    const symbolModuleAbsPath = isAbsolute(symbolModule) ? symbolModule : join(context, symbolModule);    const spriteModuleImport = stringifyRequest(loaderContext, spriteModuleAbsPath);    const symbolModuleImport = stringifyRequest(loaderContext, symbolModuleAbsPath);    runtime = [      generateImport('SpriteSymbol', symbolModuleImport, esModule),      generateImport('sprite', spriteModuleImport, esModule),      `var symbol = new SpriteSymbol(${stringifySymbol(symbol)})`,      'var result = sprite.add(symbol)',      generateExport(runtimeCompat ? '"#" + symbol.id' : 'symbol', esModule)    ].join(';\n');  }  return runtime;}module.exports = runtimeGenerator;
 |