From a6c21204e657a58c53fd7e12e2bc327a02150cc1 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Mon, 29 Jul 2019 18:14:31 +0800 Subject: [PATCH] CLI: Fix storiesof-to-csf migration w/punctuation --- .../mdx-compiler-plugin.test.js.snap | 10 ++++++++- addons/docs/fixtures/story-definitions.mdx | 4 ++++ .../src/lib/{isReserved.js => utils.js} | 10 +++++++++ lib/codemod/src/lib/utils.test.js | 14 +++++++++++++ .../mdx-to-csf/basic.input.js | 6 +++++- .../mdx-to-csf/basic.output.js | 6 ++++++ .../storiesof-to-csf/basic.input.js | 3 ++- .../storiesof-to-csf/basic.output.js | 6 ++++++ lib/codemod/src/transforms/mdx-to-csf.js | 8 ++----- .../src/transforms/storiesof-to-csf.js | 21 ++++++------------- 10 files changed, 64 insertions(+), 24 deletions(-) rename lib/codemod/src/lib/{isReserved.js => utils.js} (68%) create mode 100644 lib/codemod/src/lib/utils.test.js diff --git a/addons/docs/__snapshots__/mdx-compiler-plugin.test.js.snap b/addons/docs/__snapshots__/mdx-compiler-plugin.test.js.snap index 1f7f247a54a..9e918e0b420 100644 --- a/addons/docs/__snapshots__/mdx-compiler-plugin.test.js.snap +++ b/addons/docs/__snapshots__/mdx-compiler-plugin.test.js.snap @@ -504,6 +504,9 @@ function MDXContent({ components, ...props }) { + + + ); } @@ -519,7 +522,12 @@ helloStory.story = {}; helloStory.story.name = 'hello story'; helloStory.story.parameters = { mdxSource: '' }; -const componentMeta = { title: 'Button', includeStories: ['one', 'helloStory'] }; +export const wPunctuation = () => ; +wPunctuation.story = {}; +wPunctuation.story.name = 'w/punctuation'; +wPunctuation.story.parameters = { mdxSource: '' }; + +const componentMeta = { title: 'Button', includeStories: ['one', 'helloStory', 'wPunctuation'] }; const mdxKind = componentMeta.title || componentMeta.displayName; const WrappedMDXContent = ({ context }) => ( diff --git a/addons/docs/fixtures/story-definitions.mdx b/addons/docs/fixtures/story-definitions.mdx index ee5c355b989..74dc5db7a0d 100644 --- a/addons/docs/fixtures/story-definitions.mdx +++ b/addons/docs/fixtures/story-definitions.mdx @@ -12,3 +12,7 @@ import { Story, Meta } from '@storybook/addon-docs/blocks'; + + + + diff --git a/lib/codemod/src/lib/isReserved.js b/lib/codemod/src/lib/utils.js similarity index 68% rename from lib/codemod/src/lib/isReserved.js rename to lib/codemod/src/lib/utils.js index 99d1b7e9e8e..822774440a2 100644 --- a/lib/codemod/src/lib/isReserved.js +++ b/lib/codemod/src/lib/utils.js @@ -1,3 +1,13 @@ +import camelCase from 'lodash/camelCase'; + const RESERVED = /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|await|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/; export const isReserved = name => RESERVED.exec(name); + +export const sanitizeName = name => { + let key = camelCase(name); + if (isReserved(key)) { + key = `${key}Story`; + } + return key; +}; diff --git a/lib/codemod/src/lib/utils.test.js b/lib/codemod/src/lib/utils.test.js new file mode 100644 index 00000000000..54cc14eabea --- /dev/null +++ b/lib/codemod/src/lib/utils.test.js @@ -0,0 +1,14 @@ +import { sanitizeName } from '@storybook/router/src/utils'; + +it('should sanitize names', () => { + const testCases = [ + ['basic', 'basic'], + ['with space', 'withSpace'], + ['default', 'defaultStory'], + ['w/punctuation', 'wPunctuation'], + ]; + testCases.forEach(testCase => { + const [input, out] = testCase; + expect(sanitizeName(input)).toBe(out); + }); +}); diff --git a/lib/codemod/src/transforms/__testfixtures__/mdx-to-csf/basic.input.js b/lib/codemod/src/transforms/__testfixtures__/mdx-to-csf/basic.input.js index 816062e09b9..fc45a6e5850 100644 --- a/lib/codemod/src/transforms/__testfixtures__/mdx-to-csf/basic.input.js +++ b/lib/codemod/src/transforms/__testfixtures__/mdx-to-csf/basic.input.js @@ -11,4 +11,8 @@ import { Meta, Story } from '@storybook/addon-docs/blocks';
\ No newline at end of file + + + +