const path = require('path'); const pascalCase = require('pascal-case'); const { stringifyRequest } = require('loader-utils'); const { stringifySymbol, stringify } = require('../../lib/utils'); module.exports = function runtimeGenerator({ symbol, config, context, loaderContext }) { const { spriteModule, symbolModule, runtimeOptions } = config; const compilerContext = loaderContext._compiler.context; const iconModulePath = path.resolve(compilerContext, runtimeOptions.iconModule); const iconModuleRequest = stringify( path.relative(path.dirname(symbol.request.file), iconModulePath) ); const spriteRequest = stringifyRequest({ context }, spriteModule); const symbolRequest = stringifyRequest({ context }, symbolModule); const parentComponentDisplayName = 'SpriteSymbolComponent'; const displayName = `${pascalCase(symbol.id)}${parentComponentDisplayName}`; return ` import React from 'react'; import SpriteSymbol from ${symbolRequest}; import sprite from ${spriteRequest}; import ${parentComponentDisplayName} from ${iconModuleRequest}; const symbol = new SpriteSymbol(${stringifySymbol(symbol)}); sprite.add(symbol); export default class ${displayName} extends React.Component { render() { return <${parentComponentDisplayName} glyph="${symbol.id}" {...this.props} />; } } `; };