1 | import path, { dirname, join } from 'path';
|
2 | import { logger } from '@storybook/node-logger';
|
3 | import { serverRequire } from '@storybook/core-common';
|
4 |
|
5 | const requireMain = configDir => {
|
6 | var _serverRequire;
|
7 |
|
8 | const absoluteConfigDir = path.isAbsolute(configDir) ? configDir : path.join(process.cwd(), configDir);
|
9 | const mainFile = path.join(absoluteConfigDir, 'main');
|
10 | return (_serverRequire = serverRequire(mainFile)) !== null && _serverRequire !== void 0 ? _serverRequire : {};
|
11 | };
|
12 |
|
13 | export function addons(options = {}) {
|
14 | const checkInstalled = (addon, main) => {
|
15 | var _main$addons;
|
16 |
|
17 | const existingAddon = (_main$addons = main.addons) === null || _main$addons === void 0 ? void 0 : _main$addons.find(entry => {
|
18 | const name = typeof entry === 'string' ? entry : entry.name;
|
19 | return name === null || name === void 0 ? void 0 : name.startsWith(addon);
|
20 | });
|
21 |
|
22 | if (existingAddon) {
|
23 | logger.info(`Found existing addon ${JSON.stringify(existingAddon)}, skipping.`);
|
24 | }
|
25 |
|
26 | return !!existingAddon;
|
27 | };
|
28 |
|
29 | const main = requireMain(options.configDir);
|
30 | return ['docs', 'controls', 'actions', 'backgrounds', 'viewport', 'toolbars', 'measure', 'outline'].filter(key => options[key] !== false).map(key => `@storybook/addon-${key}`).filter(addon => !checkInstalled(addon, main))
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 | .map(addon => {
|
38 | try {
|
39 | return dirname(require.resolve(join(addon, 'package.json')));
|
40 | } catch (err) {}
|
41 |
|
42 | return require.resolve(addon);
|
43 | });
|
44 | } |
\ | No newline at end of file |