mirror of
https://github.com/storybookjs/storybook.git
synced 2025-03-19 05:02:40 +08:00
implement support for jsx/tsx preview files
This commit is contained in:
parent
3d6b1fc21e
commit
2fe47b63fa
@ -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;
|
||||
|
@ -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);
|
||||
});
|
@ -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 => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user