fileTransform.js 1013 B

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