UNPKG

2.14 kBJavaScriptView Raw
1const buildMonorepoIndex = require('./build-monorepo-index');
2const glob = require('glob');
3const path = require('path');
4const fs = require('fs');
5const publishUtils = require('./utils');
6const shell = require('shelljs');
7
8function buildStorybook(currentPackage, outputDirectory, npmScriptName) {
9 console.log(`=> Building storybook for: ${currentPackage.name}`);
10
11 // clear and re-create the out directory
12 shell.rm('-rf', outputDirectory);
13 shell.mkdir(outputDirectory);
14
15 if (currentPackage.scripts[npmScriptName]) {
16 publishUtils.exec(`npm run ${npmScriptName} -- -o ${outputDirectory}`);
17 } else {
18 publishUtils.exec(`build-storybook -o ${outputDirectory}`);
19 }
20}
21
22function buildSubPackage(origDir, dir, outputDirectory, npmScriptName) {
23 shell.cd(dir);
24
25 if (!fs.existsSync('package.json')) {
26 return;
27 }
28
29 const subPackage = JSON.parse(
30 fs.readFileSync(path.resolve('package.json'), 'utf8')
31 );
32
33 if (
34 !fs.existsSync('.storybook') &&
35 (!subPackage.scripts || !subPackage.scripts[npmScriptName])
36 ) {
37 return;
38 }
39
40 buildStorybook(subPackage, outputDirectory, npmScriptName);
41
42 const builtStorybook = path.join(dir, outputDirectory, '*');
43 const outputPath = path.join(origDir, outputDirectory, subPackage.name);
44
45 shell.mkdir('-p', outputPath);
46 shell.cp('-r', builtStorybook, outputPath);
47 shell.rm('-rf', builtStorybook);
48
49 return subPackage;
50}
51
52module.exports = function(
53 skipBuild,
54 outputDirectory,
55 packageJson,
56 packagesDirectory,
57 npmScriptName,
58 monorepoIndexGenerator
59) {
60 if (skipBuild) {
61 return;
62 }
63
64 if (packagesDirectory) {
65 const origDir = process.cwd();
66
67 const packages = glob
68 .sync(path.join(origDir, packagesDirectory, '**/package.json'), {
69 ignore: '**/node_modules/**'
70 })
71 .map(path.dirname)
72 .map(subPackage =>
73 buildSubPackage(origDir, subPackage, outputDirectory, npmScriptName)
74 )
75 .filter(subPackage => subPackage);
76
77 shell.cd(origDir);
78
79 buildMonorepoIndex(packages, monorepoIndexGenerator, outputDirectory);
80 } else {
81 buildStorybook(packageJson, outputDirectory, npmScriptName);
82 }
83};