From 282d605185cac8538ea76dc5a19e4faba43bad31 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Thu, 16 Jan 2020 12:35:45 +0800 Subject: [PATCH 1/2] Core: Fix addon/preset detection for local addons --- lib/core/src/server/presets.js | 11 ++++++++++- lib/core/src/server/presets.test.js | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/core/src/server/presets.js b/lib/core/src/server/presets.js index cbd531c32cfb..863e6f1817a3 100644 --- a/lib/core/src/server/presets.js +++ b/lib/core/src/server/presets.js @@ -7,6 +7,8 @@ const isObject = val => val != null && typeof val === 'object' && Array.isArray( const isFunction = val => typeof val === 'function'; // Copied out of parse-package-name +// '@storybook/addon-actions/register' => ( name: '@storybook/addon-actions', path: '/register ) +// './addon-actions/register' => ( name: './addon-actions/register', path: './addon-actions/register' ) const RE_SCOPED = /^(@[^/]+\/[^/@]+)(?:\/([^@]+))?(?:@([\s\S]+))?/; const RE_NORMAL = /^([^/@]+)(?:\/([^@]+))?(?:@([\s\S]+))?/; function parsePackageName(input) { @@ -38,6 +40,8 @@ const resolvePresetFunction = (input, presetOptions, storybookOptions) => { return []; }; +const isLocalFileImport = packageName => /^[./]/.test(packageName); + /** * Parse an addon into either a managerEntry or a preset. Throw on invalid input. * @@ -55,7 +59,12 @@ const resolvePresetFunction = (input, presetOptions, storybookOptions) => { * => { type: 'presets', item: { name: '@storybook/addon-docs/preset', options } } */ export const resolveAddonName = name => { - const { path } = parsePackageName(name); + let path; + if (isLocalFileImport(name)) { + path = name; + } else { + ({ path } = parsePackageName(name)); + } // when user provides full path, we don't need to do anything if (path) { diff --git a/lib/core/src/server/presets.test.js b/lib/core/src/server/presets.test.js index 84df049c634a..b1c61d44a003 100644 --- a/lib/core/src/server/presets.test.js +++ b/lib/core/src/server/presets.test.js @@ -389,6 +389,8 @@ describe('splitAddons', () => { '@storybook/addon-actions/register', 'storybook-addon-readme/register', 'addon-foo/register.js', + './local-addon-relative/register', + '/local-addon-absolute/register', ]; expect(splitAddons(addons)).toEqual({ managerEntries: addons, @@ -401,6 +403,8 @@ describe('splitAddons', () => { '@storybook/addon-essentials', '@storybook/addon-docs/presets', 'addon-bar/presets.js', + './local-addon-relative/presets', + '/local-addon-absolute/presets', ]; expect(splitAddons(addons)).toEqual({ managerEntries: [], From d6dbcb4026527388930436f6bc91647943478c5b Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Thu, 16 Jan 2020 12:45:46 +0800 Subject: [PATCH 2/2] Core: Fix presets register_panel for addon-notes --- lib/core/src/server/presets.js | 4 ++-- lib/core/src/server/presets.test.js | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/core/src/server/presets.js b/lib/core/src/server/presets.js index 863e6f1817a3..2029437e07d9 100644 --- a/lib/core/src/server/presets.js +++ b/lib/core/src/server/presets.js @@ -70,8 +70,8 @@ export const resolveAddonName = name => { if (path) { return { name, - // Accept `register`, `register.js`, `require.resolve('foo/register') cases - type: path.match(/register(.js)?$/) ? 'managerEntries' : 'presets', + // Accept `register`, `register.js`, `require.resolve('foo/register'), `register_panel` + type: path.match(/register(_panel)?(.js)?$/) ? 'managerEntries' : 'presets', }; } diff --git a/lib/core/src/server/presets.test.js b/lib/core/src/server/presets.test.js index b1c61d44a003..85d2c44851d8 100644 --- a/lib/core/src/server/presets.test.js +++ b/lib/core/src/server/presets.test.js @@ -389,8 +389,7 @@ describe('splitAddons', () => { '@storybook/addon-actions/register', 'storybook-addon-readme/register', 'addon-foo/register.js', - './local-addon-relative/register', - '/local-addon-absolute/register', + '@storybook/addon-notes/register_panel', ]; expect(splitAddons(addons)).toEqual({ managerEntries: addons,