jest-preview
Version:
Preview your Jest tests in a browser
86 lines (81 loc) • 2.36 kB
JavaScript
;
require('fs');
var path = require('path');
require('crypto');
require('child_process');
require('url');
var camelcase = require('camelcase');
var slash = require('slash');
var core = require('@svgr/core');
function getRelativeFilename(filename) {
return slash(filename.split(process.cwd())[1]);
}
function processFile(src, filename) {
const relativeFilenameStringified = JSON.stringify(
getRelativeFilename(filename)
);
if (filename.match(/\.svg$/)) {
const pascalCaseFilename = camelcase(path.parse(filename).name, {
pascalCase: true
});
const componentName = `Svg${pascalCaseFilename}`;
try {
const svgComponent = core.transform.sync(
src,
{
// Do not insert `import * as React from "react";`
jsxRuntime: "automatic"
},
{ componentName }
);
const babel = require("@babel/core");
const result = babel.transformSync(svgComponent, {
plugins: ["@babel/plugin-transform-react-jsx"]
});
const componentCodeWithoutExport = result.code.split("\n").slice(0, -1).join("\n");
return {
// TODO: To render actual SVG to the snapshot
code: `const React = require('react')
${componentCodeWithoutExport}
module.exports = {
__esModule: true,
default: ${relativeFilenameStringified},
ReactComponent: ${componentName}
};`
};
} catch (error) {
return {
code: `const React = require('react');
module.exports = {
__esModule: true,
default: ${relativeFilenameStringified},
ReactComponent: React.forwardRef(function ${componentName}(props, ref) {
return {
$$typeof: Symbol.for('react.element'),
type: 'span',
ref: ref,
key: null,
props: Object.assign({}, props, {
children: ${relativeFilenameStringified}
})
};
}),
};`
};
}
}
return {
code: `module.exports = {
__esModule: true,
default: ${relativeFilenameStringified},
};`
};
}
function processFileCRA(src, filename) {
return processFile(src, filename);
}
function process$1(src, filename) {
return processFileCRA(src, filename);
}
var fileCRA = { process: process$1 };
module.exports = fileCRA;