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