Skip to content

Commit

Permalink
telemetry: improve addon extraction logic
Browse files Browse the repository at this point in the history
  • Loading branch information
yannbf committed Aug 4, 2022
1 parent 67102c8 commit 9f6ed23
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 5 deletions.
60 changes: 60 additions & 0 deletions code/lib/telemetry/src/storybook-metadata.test.ts
Expand Up @@ -121,6 +121,66 @@ describe('await computeStorybookMetadata', () => {
`);
});

test('should handle special addon names', async () => {
const result = await computeStorybookMetadata({
packageJson: {
...packageJsonMock,
devDependencies: {
'@storybook/preset-create-react-app': 'x.x.x',
'@storybook/addon-knobs': 'x.x.x',
'@storybook/addon-ends-with-js': 'x.x.x',
'storybook-addon-deprecated': 'x.x.x',
'storybook-addon-ends-with-js': 'x.x.x',
},
},
mainConfig: {
...mainJsMock,
addons: [
'@storybook/preset-create-react-app',
'storybook-addon-deprecated/register',
'storybook-addon-ends-with-js/register.js',
'@storybook/addon-knobs/preset',
'@storybook/addon-ends-with-js/preset.js',
'@storybook/addon-postcss/dist/index.js',
'../local-addon/register.js',
'../../',
'C:\\Users\\foo\\bar\\register.js',
'/Users/foo/bar/register.js',
'\\Users/foo/bar/register.js',
],
},
});

expect(result.addons).toMatchInlineSnapshot(`
Object {
"@storybook/addon-ends-with-js": Object {
"options": undefined,
"version": "x.x.x",
},
"@storybook/addon-knobs": Object {
"options": undefined,
"version": "x.x.x",
},
"@storybook/addon-postcss": Object {
"options": undefined,
"version": "x.x.x",
},
"@storybook/preset-create-react-app": Object {
"options": undefined,
"version": "x.x.x",
},
"storybook-addon-deprecated": Object {
"options": undefined,
"version": "x.x.x",
},
"storybook-addon-ends-with-js": Object {
"options": undefined,
"version": "x.x.x",
},
}
`);
});

test('should return user specified features', async () => {
const features = {
interactionsDebugger: true,
Expand Down
36 changes: 31 additions & 5 deletions code/lib/telemetry/src/storybook-metadata.ts
Expand Up @@ -125,19 +125,45 @@ export const computeStorybookMetadata = async ({
metadata.features = mainConfig.features;
}

const filterLocalAddons = (addon: string | { name: string }) => {
const isLocalAddon = (addon: string) =>
addon.startsWith('.') ||
addon.startsWith('/') ||
addon.startsWith('C:') ||
addon.startsWith('\\');
if (typeof addon === 'string' && !isLocalAddon(addon)) {
return true;
}
if (typeof addon === 'object' && !isLocalAddon(addon.name)) {
return true;
}

return false;
};

const sanitizeAddonName = (name: string) => {
return name
.replace(/\/dist\/.*/, '')
.replace(/\.[mc]?[tj]?s[x]?$/, '')
.replace(/\/register$/, '')
.replace(/\/manager$/, '')
.replace(/\/preset$/, '');
};

const addons: Record<string, StorybookAddon> = {};
if (mainConfig.addons) {
mainConfig.addons.forEach((addon) => {
let result;
mainConfig.addons.filter(filterLocalAddons).forEach((addon) => {
let addonName;
let options;

if (typeof addon === 'string') {
result = addon.replace('/register', '').replace('/preset', '');
addonName = sanitizeAddonName(addon);
} else {
options = addon.options;
result = addon.name;
addonName = sanitizeAddonName(addon.name);
}

addons[result] = {
addons[addonName] = {
options,
version: undefined,
};
Expand Down

0 comments on commit 9f6ed23

Please sign in to comment.