1 | const buildMonorepoIndex = require('./build-monorepo-index');
|
2 | const glob = require('glob');
|
3 | const path = require('path');
|
4 | const fs = require('fs');
|
5 | const publishUtils = require('./utils');
|
6 | const shell = require('shelljs');
|
7 |
|
8 | function buildStorybook(currentPackage, outputDirectory, npmScriptName) {
|
9 | console.log(`=> Building storybook for: ${currentPackage.name}`);
|
10 |
|
11 |
|
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 |
|
22 | function 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 |
|
52 | module.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 | };
|