Merge branch '21572-user-packages'
[arvados.git] / services / workbench2 / config / jest / fileTransform.js
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 'use strict';
6
7 const path = require('path');
8 const camelcase = require('camelcase');
9
10 // This is a custom Jest transformer turning file imports into filenames.
11 // http://facebook.github.io/jest/docs/en/webpack.html
12
13 module.exports = {
14   process(src, filename) {
15     const assetFilename = JSON.stringify(path.basename(filename));
16
17     if (filename.match(/\.svg$/)) {
18       // Based on how SVGR generates a component name:
19       // https://github.com/smooth-code/svgr/blob/01b194cf967347d43d4cbe6b434404731b87cf27/packages/core/src/state.js#L6
20       const pascalCaseFilename = camelcase(path.parse(filename).name, {
21         pascalCase: true,
22       });
23       const componentName = `Svg${pascalCaseFilename}`;
24       return `const React = require('react');
25       module.exports = {
26         __esModule: true,
27         default: ${assetFilename},
28         ReactComponent: React.forwardRef(function ${componentName}(props, ref) {
29           return {
30             $$typeof: Symbol.for('react.element'),
31             type: 'svg',
32             ref: ref,
33             key: null,
34             props: Object.assign({}, props, {
35               children: ${assetFilename}
36             })
37           };
38         }),
39       };`;
40     }
41
42     return `module.exports = ${assetFilename};`;
43   },
44 };