2019-10-08 02:39:42 +02:00
|
|
|
const path = require('path');
|
2019-09-25 11:02:52 +02:00
|
|
|
const mdx = require('@mdx-js/mdx');
|
2019-10-08 02:39:42 +02:00
|
|
|
const { ScriptTransformer } = require('@jest/transform');
|
|
|
|
const { dedent } = require('ts-dedent');
|
|
|
|
|
2019-09-25 11:02:52 +02:00
|
|
|
const createCompiler = require('./mdx-compiler-plugin');
|
|
|
|
|
|
|
|
const compilers = [createCompiler({})];
|
|
|
|
|
2019-10-08 02:39:42 +02:00
|
|
|
const getNextTransformer = (filename, config) => {
|
|
|
|
const extension = path.extname(filename);
|
|
|
|
const jsFileName = `${filename.slice(0, -extension.length)}.js`;
|
|
|
|
const self = config.transform.find(([pattern]) => new RegExp(pattern).test(filename));
|
|
|
|
const jsTransforms = config.transform.filter(([pattern]) => new RegExp(pattern).test(jsFileName));
|
|
|
|
return new ScriptTransformer({
|
|
|
|
...config,
|
|
|
|
transform: [
|
2020-03-27 20:04:50 +01:00
|
|
|
...config.transform.filter((entry) => entry !== self),
|
2019-10-08 02:39:42 +02:00
|
|
|
...jsTransforms.map(([pattern, ...rest]) => [self[0], ...rest]),
|
|
|
|
],
|
|
|
|
});
|
|
|
|
};
|
2019-09-25 11:02:52 +02:00
|
|
|
|
2019-10-08 02:39:42 +02:00
|
|
|
module.exports = {
|
|
|
|
process(src, filename, config, { instrument }) {
|
|
|
|
const result = dedent`
|
|
|
|
/* @jsx mdx */
|
|
|
|
import React from 'react'
|
|
|
|
import { mdx } from '@mdx-js/react'
|
|
|
|
${mdx.sync(src, { compilers, filepath: filename })}
|
2019-09-25 11:02:52 +02:00
|
|
|
`;
|
2019-10-08 02:39:42 +02:00
|
|
|
return getNextTransformer(filename, config).transformSource(filename, result, instrument);
|
2019-09-25 11:02:52 +02:00
|
|
|
},
|
|
|
|
};
|