simple-keyboard/config/jest/fileTransform.js

41 lines
1.2 KiB
JavaScript
Raw Normal View History

2018-04-21 04:34:02 +08:00
'use strict';
const path = require('path');
2019-08-18 04:05:07 +08:00
const camelcase = require('camelcase');
2018-04-21 04:34:02 +08:00
// This is a custom Jest transformer turning file imports into filenames.
2018-11-10 00:06:46 +08:00
// http://facebook.github.io/jest/docs/en/webpack.html
2018-04-21 04:34:02 +08:00
module.exports = {
process(src, filename) {
2018-11-10 00:06:46 +08:00
const assetFilename = JSON.stringify(path.basename(filename));
if (filename.match(/\.svg$/)) {
2019-08-18 04:05:07 +08:00
// Based on how SVGR generates a component name:
// https://github.com/smooth-code/svgr/blob/01b194cf967347d43d4cbe6b434404731b87cf27/packages/core/src/state.js#L6
const pascalCaseFileName = camelcase(path.parse(filename).name, {
pascalCase: true,
});
const componentName = `Svg${pascalCaseFileName}`;
2019-04-28 10:19:34 +08:00
return `const React = require('react');
module.exports = {
2018-11-10 00:06:46 +08:00
__esModule: true,
default: ${assetFilename},
2019-08-18 04:05:07 +08:00
ReactComponent: React.forwardRef(function ${componentName}(props, ref) {
return {
$$typeof: Symbol.for('react.element'),
type: 'svg',
ref: ref,
key: null,
props: Object.assign({}, props, {
children: ${assetFilename}
})
};
}),
2018-11-10 00:06:46 +08:00
};`;
}
return `module.exports = ${assetFilename};`;
2018-04-21 04:34:02 +08:00
},
};