Skip to content

Commit

Permalink
use yarn list --pattern to get list of dependencies matching @storybook
Browse files Browse the repository at this point in the history
… and get that data to get viewLayer and addons.
  • Loading branch information
ndelangen committed Sep 23, 2021
1 parent 193fcb0 commit 8208d09
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 48 deletions.
30 changes: 30 additions & 0 deletions bin-src/lib/getInstalledStorybookPackages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import execa from 'execa';

import { viewLayers } from './viewLayers';
import { supportedAddons } from './supportedAddons';

export const getInstalledStorybookInfo = async () => {
const { all } = await execa.command('yarn list --pattern @storybook/ --json', {
env: {},
timeout: 10000,
all: true,
shell: true,
});

const { data } = JSON.parse(all as any);
const trees: { name: string; version: string }[] = data.trees.map((p) => {
const [, name, version] = p.name.match(/(.+)@(.+)/);
return { name, version };
});

const viewLayer = trees.find(({ name }) => viewLayers[name]);
const addons = trees.filter(({ name }) => supportedAddons[name]);

const result = {
viewLayer: viewLayers[viewLayer ? viewLayer.name : ''],
version: viewLayer ? viewLayer.version : undefined,
addons: addons.map((a) => supportedAddons[a.name]),
};

return result;
};
60 changes: 12 additions & 48 deletions bin-src/lib/getStorybookInfo.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,54 +2,11 @@ import fs from 'fs-extra';
import meow from 'meow';
import { parseArgsStringToArgv } from 'string-argv';
import semver from 'semver';
import { getInstalledStorybookInfo } from './getInstalledStorybookPackages';

import noViewLayerPackage from '../ui/messages/errors/noViewLayerPackage';

const viewLayers = {
'@storybook/react': 'react',
'@storybook/vue': 'vue',
'@storybook/vue3': 'vue3',
'@storybook/angular': 'angular',
'@storybook/html': 'html',
'@storybook/web-components': 'web-components',
'@storybook/polymer': 'polymer',
'@storybook/ember': 'ember',
'@storybook/marko': 'marko',
'@storybook/mithril': 'mithril',
'@storybook/riot': 'riot',
'@storybook/svelte': 'svelte',
'@storybook/preact': 'preact',
'@storybook/rax': 'rax',
};

const supportedAddons = {
'@storybook/addon-a11y': 'a11y',
'@storybook/addon-actions': 'actions',
'@storybook/addon-backgrounds': 'backgrounds',
'@storybook/addon-centered': 'centered',
'@storybook/addon-contexts': 'contexts',
'@storybook/addon-cssresources': 'cssresources',
'@storybook/addon-design-assets': 'design-assets',
'@storybook/addon-docs': 'docs',
'@storybook/addon-essentials': 'essentials',
'@storybook/addon-events': 'events',
'@storybook/addon-google-analytics': 'google-analytics',
'@storybook/addon-graphql': 'graphql',
'@storybook/addon-info': 'info',
'@storybook/addon-jest': 'jest',
'@storybook/addon-knobs': 'knobs',
'@storybook/addon-links': 'links',
'@storybook/addon-notes': 'notes',
'@storybook/addon-ondevice-actions': 'ondevice-actions',
'@storybook/addon-ondevice-backgrounds': 'ondevice-backgrounds',
'@storybook/addon-ondevice-knobs': 'ondevice-knobs',
'@storybook/addon-ondevice-notes': 'ondevice-notes',
'@storybook/addon-options': 'options',
'@storybook/addon-queryparams': 'queryparams',
'@storybook/addon-storyshots': 'storyshots',
'@storybook/addon-storysource': 'storysource',
'@storybook/addon-viewport': 'viewport',
};
import { viewLayers } from './viewLayers';
import { supportedAddons } from './supportedAddons';

const resolvePackageJson = (pkg) => {
try {
Expand Down Expand Up @@ -177,6 +134,13 @@ const findConfigFlags = async ({ options, packageJson }) => {
};

export default async function getStorybookInfo(ctx) {
const info = await Promise.all([findAddons(ctx), findConfigFlags(ctx), findViewlayer(ctx)]);
return info.reduce((acc, obj) => Object.assign(acc, obj), {});
let result;
try {
result = await getInstalledStorybookInfo();
} catch (e) {
const info = await Promise.all([findAddons(ctx), findConfigFlags(ctx), findViewlayer(ctx)]);
result = info.reduce((acc, obj) => Object.assign(acc, obj), {});
}

return result;
}
6 changes: 6 additions & 0 deletions bin-src/lib/getStorybookInfo.test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import getStorybookInfo from './getStorybookInfo';

jest.mock('./getInstalledStorybookPackages', () => ({
getInstalledStorybookPackages: () => {
throw new Error('no');
},
}));

jest.useFakeTimers();

const log = { warn: jest.fn(), debug: jest.fn() };
Expand Down
28 changes: 28 additions & 0 deletions bin-src/lib/supportedAddons.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
export const supportedAddons = {
'@storybook/addon-a11y': 'a11y',
'@storybook/addon-actions': 'actions',
'@storybook/addon-backgrounds': 'backgrounds',
'@storybook/addon-centered': 'centered',
'@storybook/addon-contexts': 'contexts',
'@storybook/addon-cssresources': 'cssresources',
'@storybook/addon-design-assets': 'design-assets',
'@storybook/addon-docs': 'docs',
'@storybook/addon-essentials': 'essentials',
'@storybook/addon-events': 'events',
'@storybook/addon-google-analytics': 'google-analytics',
'@storybook/addon-graphql': 'graphql',
'@storybook/addon-info': 'info',
'@storybook/addon-jest': 'jest',
'@storybook/addon-knobs': 'knobs',
'@storybook/addon-links': 'links',
'@storybook/addon-notes': 'notes',
'@storybook/addon-ondevice-actions': 'ondevice-actions',
'@storybook/addon-ondevice-backgrounds': 'ondevice-backgrounds',
'@storybook/addon-ondevice-knobs': 'ondevice-knobs',
'@storybook/addon-ondevice-notes': 'ondevice-notes',
'@storybook/addon-options': 'options',
'@storybook/addon-queryparams': 'queryparams',
'@storybook/addon-storyshots': 'storyshots',
'@storybook/addon-storysource': 'storysource',
'@storybook/addon-viewport': 'viewport',
} as Record<string, string>;
16 changes: 16 additions & 0 deletions bin-src/lib/viewLayers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
export const viewLayers = {
'@storybook/react': 'react',
'@storybook/vue': 'vue',
'@storybook/vue3': 'vue3',
'@storybook/angular': 'angular',
'@storybook/html': 'html',
'@storybook/web-components': 'web-components',
'@storybook/polymer': 'polymer',
'@storybook/ember': 'ember',
'@storybook/marko': 'marko',
'@storybook/mithril': 'mithril',
'@storybook/riot': 'riot',
'@storybook/svelte': 'svelte',
'@storybook/preact': 'preact',
'@storybook/rax': 'rax',
} as Record<string, string>;

0 comments on commit 8208d09

Please # to comment.