1
1
'use strict' ;
2
2
3
3
const path = require ( 'path' ) ;
4
+ const camelcase = require ( 'camelcase' ) ;
4
5
5
6
// This is a custom Jest transformer turning file imports into filenames.
6
7
// http://facebook.github.io/jest/docs/en/webpack.html
@@ -10,19 +11,27 @@ module.exports = {
10
11
const assetFilename = JSON . stringify ( path . basename ( filename ) ) ;
11
12
12
13
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 } ` ;
13
20
return `const React = require('react');
14
21
module.exports = {
15
22
__esModule: true,
16
23
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
+ }),
26
35
};` ;
27
36
}
28
37
0 commit comments