|
| 1 | +/* eslint-disable no-console */ |
1 | 2 | const { lstatSync, readdirSync, writeFileSync } = require('fs'); |
2 | 3 | const path = require('path'); |
| 4 | +const rimraf = require('rimraf'); |
3 | 5 |
|
4 | | -const srcPath = path.join(__dirname, '../src'); |
5 | 6 |
|
6 | | -const isComponentDirectory = (source) => { |
7 | | - const ignoredDirectories = ['utils', 'Docs']; |
8 | | - return lstatSync(source).isDirectory() && !ignoredDirectories.some(ignored => source.includes(ignored)); |
9 | | -}; |
| 7 | +console.info('Trying to clean/remove all visual stories. 🗑 '); |
10 | 8 |
|
11 | | -const componentDirs = readdirSync(srcPath).map(name => path.join(srcPath, name)).filter(isComponentDirectory).map(directory => { |
12 | | - return { |
13 | | - path: `${directory}/__stories__/`, |
14 | | - fileNames: readdirSync(`${directory}/__stories__/`) |
15 | | - }; |
16 | | -}); |
| 9 | +rimraf('**/*.visual.js', (rimRafError) => { |
| 10 | + if (rimRafError) { |
| 11 | + console.error('Unable to clean all visual stories!! ❌', rimRafError); |
| 12 | + } else { |
| 13 | + console.info('Removed all visual stories. 🗑 ✅'); |
| 14 | + } |
17 | 15 |
|
18 | | -// For every component directory. |
19 | | -componentDirs.map((directory) => { |
20 | | - // Loop through its files. |
21 | | - directory.fileNames.map((fileName) => { |
22 | | - // get only stories.js files |
23 | | - if (fileName.includes('.stories.js')) { |
24 | | - // Grab the component name |
25 | | - const componentName = fileName.substr(0, fileName.indexOf('.')); |
26 | | - // TODO: reenable storyshots for examples using hooks in storybook@6 |
27 | | - // https://github.com/storybookjs/storybook/releases/tag/v6.0.0-alpha.43 |
28 | | - if (componentName === 'Calendar' |
29 | | - || componentName === 'Dialog') { |
30 | | - return; |
31 | | - } |
| 16 | + console.info('Trying to build all visual stories. 🏗'); |
32 | 17 |
|
33 | | - const fileContents = ` |
34 | | -import React from 'react'; |
35 | | -import * as stories from './${componentName}.stories'; |
| 18 | + const srcPath = path.join(__dirname, '../src'); |
36 | 19 |
|
37 | | -export default { |
38 | | - title: 'Visual' |
39 | | -}; |
| 20 | + const isComponentDirectory = (source) => { |
| 21 | + const ignoredDirectories = ['utils', 'Docs']; |
| 22 | + return lstatSync(source).isDirectory() && !ignoredDirectories.some(ignored => source.includes(ignored)); |
| 23 | + }; |
40 | 24 |
|
41 | | -export const ${componentName} = () => { |
42 | | - let storyNames = Object.keys(stories).filter(story => { |
43 | | - return story !== 'default' && story !== 'dev'; |
| 25 | + const componentDirs = readdirSync(srcPath).map(name => path.join(srcPath, name)).filter(isComponentDirectory).map(directory => { |
| 26 | + return { |
| 27 | + path: `${directory}/__stories__/`, |
| 28 | + fileNames: readdirSync(`${directory}/__stories__/`) |
| 29 | + }; |
44 | 30 | }); |
45 | 31 |
|
46 | | - return (<>{storyNames.map((item, index) => <div key={index}>{stories[item]()}</div>)}</>); |
47 | | -}; |
48 | | -${componentName}.parameters = { |
49 | | - docs: { disable: true } |
50 | | -}; |
51 | | -`; |
52 | | - // write the visual story file into the directory. |
53 | | - let visualPath = path.join(directory.path, `${componentName}.visual.js`); |
54 | | - writeFileSync(visualPath, fileContents); |
55 | | - } |
| 32 | + // For every component directory. |
| 33 | + componentDirs.map((directory) => { |
| 34 | + // Loop through its files. |
| 35 | + directory.fileNames.map((fileName) => { |
| 36 | + // get only stories.js files |
| 37 | + if (fileName.includes('.stories.js')) { |
| 38 | + // Grab the component name |
| 39 | + const componentName = fileName.substr(0, fileName.indexOf('.')); |
| 40 | + // TODO: reenable storyshots for examples using hooks in storybook@6 |
| 41 | + // https://github.com/storybookjs/storybook/releases/tag/v6.0.0-alpha.43 |
| 42 | + if (componentName === 'Calendar' |
| 43 | + || componentName === 'Dialog') { |
| 44 | + return; |
| 45 | + } |
| 46 | + |
| 47 | + const fileContents = ` |
| 48 | + import React from 'react'; |
| 49 | + import * as stories from './${componentName}.stories'; |
| 50 | +
|
| 51 | + export default { |
| 52 | + title: 'Visual' |
| 53 | + }; |
| 54 | +
|
| 55 | + export const ${componentName} = () => { |
| 56 | + let storyNames = Object.keys(stories).filter(story => { |
| 57 | + return story !== 'default' && story !== 'dev'; |
| 58 | + }); |
| 59 | +
|
| 60 | + return (<>{storyNames.map((item, index) => <div key={index}>{stories[item]()}</div>)}</>); |
| 61 | + }; |
| 62 | + ${componentName}.parameters = { |
| 63 | + docs: { disable: true } |
| 64 | + }; |
| 65 | + `; |
| 66 | + // write the visual story file into the directory. |
| 67 | + let visualPath = path.join(directory.path, `${componentName}.visual.js`); |
| 68 | + writeFileSync(visualPath, fileContents); |
| 69 | + } |
| 70 | + }); |
56 | 71 | }); |
| 72 | + |
57 | 73 | }); |
0 commit comments