fileTransform.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. /* eslint-disable max-len */
  2. const path = require('path');
  3. const camelcase = require('camelcase');
  4. module.exports = {
  5. process(_, filename) {
  6. const assetFilename = JSON.stringify(path.basename(filename));
  7. if (filename.match(/\.svg$/)) {
  8. const pascalCaseFilename = camelcase(path.parse(filename).name, {
  9. pascalCase: true,
  10. });
  11. const componentName = `Svg${pascalCaseFilename}`;
  12. return {
  13. code: `const React = require('react');
  14. module.exports = {
  15. __esModule: true,
  16. default: ${assetFilename},
  17. ReactComponent: React.forwardRef(function ${componentName}(props, ref) {
  18. return {
  19. $$typeof: Symbol.for('react.element'),
  20. type: 'svg',
  21. ref: ref,
  22. key: null,
  23. props: Object.assign({}, props, {
  24. children: ${assetFilename}
  25. })
  26. };
  27. }),
  28. };`,
  29. };
  30. }
  31. return {
  32. code: `module.exports = ${assetFilename};`,
  33. };
  34. },
  35. };