UNPKG

2.69 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.link = void 0;
7
8require("core-js/modules/es.promise.js");
9
10var _fsExtra = _interopRequireDefault(require("fs-extra"));
11
12var _path = _interopRequireDefault(require("path"));
13
14var _crossSpawn = require("cross-spawn");
15
16var _nodeLogger = require("@storybook/node-logger");
17
18var _scripts = require("./repro-generators/scripts");
19
20function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
22const link = async ({
23 target,
24 local
25}) => {
26 const storybookDir = process.cwd();
27
28 try {
29 const packageJson = JSON.parse(_fsExtra.default.readFileSync('package.json', 'utf8'));
30 if (packageJson.name !== '@storybook/root') throw new Error();
31 } catch {
32 throw new Error('Expected to run link from the root of the storybook monorepo');
33 }
34
35 let reproDir = target;
36
37 let reproName = _path.default.basename(target);
38
39 if (!local) {
40 const reprosDir = _path.default.join(storybookDir, '../storybook-repros');
41
42 _nodeLogger.logger.info(`Ensuring directory ${reprosDir}`);
43
44 _fsExtra.default.ensureDirSync(reprosDir);
45
46 _nodeLogger.logger.info(`Cloning ${target}`);
47
48 await (0, _scripts.exec)(`git clone ${target}`, {
49 cwd: reprosDir
50 }); // Extract a repro name from url given as input (take the last part of the path and remove the extension)
51
52 reproName = _path.default.basename(target, _path.default.extname(target));
53 reproDir = _path.default.join(reprosDir, reproName);
54 }
55
56 const version = (0, _crossSpawn.sync)('yarn', ['--version'], {
57 cwd: reproDir,
58 stdio: 'pipe'
59 }).stdout.toString();
60
61 if (!/^[23]\./.test(version)) {
62 _nodeLogger.logger.warn(`🚨 Expected yarn 2 or 3 in ${reproDir}!`);
63
64 _nodeLogger.logger.warn('');
65
66 _nodeLogger.logger.warn('Please set it up with `yarn set version berry`,');
67
68 _nodeLogger.logger.warn(`then link '${reproDir}' with the '--local' flag.`);
69
70 return;
71 }
72
73 _nodeLogger.logger.info(`Linking ${reproDir}`);
74
75 await (0, _scripts.exec)(`yarn link --all ${storybookDir}`, {
76 cwd: reproDir
77 });
78
79 _nodeLogger.logger.info(`Installing ${reproName}`);
80
81 await (0, _scripts.exec)(`yarn install`, {
82 cwd: reproDir
83 }); // ⚠️ TODO: Fix peer deps in `@storybook/preset-create-react-app`
84
85 _nodeLogger.logger.info(`Magic stuff related to @storybook/preset-create-react-app, we need to fix peerDependencies`);
86
87 await (0, _scripts.exec)(`yarn add -D webpack-hot-middleware`, {
88 cwd: reproDir
89 });
90
91 _nodeLogger.logger.info(`Running ${reproName} storybook`);
92
93 await (0, _scripts.exec)(`yarn run storybook`, {
94 cwd: reproDir
95 });
96};
97
98exports.link = link;
\No newline at end of file