11'use strict' ;
22
33const path = require ( 'path' ) ;
4+ const camelcase = require ( 'camelcase' ) ;
45
56// This is a custom Jest transformer turning file imports into filenames.
67// http://facebook.github.io/jest/docs/en/webpack.html
@@ -10,19 +11,27 @@ module.exports = {
1011 const assetFilename = JSON . stringify ( path . basename ( filename ) ) ;
1112
1213 if ( filename . match ( / \. s v g $ / ) ) {
14+ // Based on how SVGR generates a component name:
15+ // https://github.com/smooth-code/svgr/blob/01b194cf967347d43d4cbe6b434404731b87cf27/packages/core/src/state.js#L6
16+ const pascalCaseFileName = camelcase ( path . parse ( filename ) . name , {
17+ pascalCase : true ,
18+ } ) ;
19+ const componentName = `Svg${ pascalCaseFileName } ` ;
1320 return `const React = require('react');
1421 module.exports = {
1522 __esModule: true,
1623 default: ${ assetFilename } ,
17- ReactComponent: React.forwardRef((props, ref) => ({
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- })),
24+ ReactComponent: React.forwardRef(function ${ componentName } (props, ref) {
25+ return {
26+ $$typeof: Symbol.for('react.element'),
27+ type: 'svg',
28+ ref: ref,
29+ key: null,
30+ props: Object.assign({}, props, {
31+ children: ${ assetFilename }
32+ })
33+ };
34+ }),
2635 };` ;
2736 }
2837
0 commit comments