implement support for jsx/tsx preview files

This commit is contained in:
David Golightly 2020-02-12 13:41:28 -08:00
parent 3d6b1fc21e
commit 2fe47b63fa
3 changed files with 37 additions and 18 deletions

View File

@ -14,10 +14,14 @@ function __setMockFiles(newMockFiles) {
// file list set via __setMockFiles
const readFileSync = (filePath = '') => mockFiles[filePath];
const existsSync = filePath => !!mockFiles[filePath];
const lstatSync = filePath => ({
isFile: () => !!mockFiles[filePath],
});
// eslint-disable-next-line no-underscore-dangle
fs.__setMockFiles = __setMockFiles;
fs.readFileSync = readFileSync;
fs.existsSync = existsSync;
fs.lstatSync = lstatSync;
module.exports = fs;

View File

@ -0,0 +1,26 @@
import { getPreviewFile } from './configure';
// eslint-disable-next-line global-require, jest/no-mocks-import
jest.mock('fs', () => require('../../../../../__mocks__/fs'));
const setupFiles = (files: Record<string, string>) => {
// eslint-disable-next-line no-underscore-dangle, global-require
require('fs').__setMockFiles(files);
};
it.each`
filepath
${'preview.ts'}
${'preview.tsx'}
${'preview.js'}
${'preview.jsx'}
`('resolves a valid preview file from $filepath', ({ filepath }) => {
setupFiles({ [`test/${filepath}`]: 'true' });
expect(getPreviewFile('test/')).toEqual(`test/${filepath}`);
});
it('returns false when none of the paths exist', () => {
setupFiles(Object.create(null));
expect(getPreviewFile('test/')).toEqual(false);
});

View File

@ -21,26 +21,15 @@ interface Output {
files: string[];
}
const getPreviewFile = (configDir: string): string | false => {
const preview = path.join(configDir, 'preview.js');
const previewTS = path.join(configDir, 'preview.ts');
const config = path.join(configDir, 'config.js');
const configTS = path.join(configDir, 'config.ts');
const supportedExtensions = ['ts', 'tsx', 'js', 'jsx'];
const supportedFilenames = ['preview', 'config'];
if (isFile(previewTS)) {
return previewTS;
}
if (isFile(preview)) {
return preview;
}
if (isFile(configTS)) {
return configTS;
}
if (isFile(config)) {
return config;
}
export const getPreviewFile = (configDir: string): string | false => {
const allFilenames = supportedFilenames
.flatMap(filename => supportedExtensions.map(ext => `${filename}.${ext}`))
.map(filename => path.join(configDir, filename));
return false;
return allFilenames.find(isFile) || false;
};
const getMainFile = (configDir: string): string | false => {