From b0497b0682bd431b82b4d203d7a4ef7fd578f8f9 Mon Sep 17 00:00:00 2001 From: Jon Palmer <328224+jonspalmer@users.noreply.github.com> Date: Tue, 27 Jul 2021 21:52:51 -0400 Subject: [PATCH] Add more patterns for CSF3 glob processing --- .../utils/__tests__/normalize-stories.test.ts | 25 +++++++++++++++++-- .../src/utils/normalize-stories.ts | 14 +++++++++-- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/lib/core-common/src/utils/__tests__/normalize-stories.test.ts b/lib/core-common/src/utils/__tests__/normalize-stories.test.ts index 7c9a6c7f7c1..836933de24b 100644 --- a/lib/core-common/src/utils/__tests__/normalize-stories.test.ts +++ b/lib/core-common/src/utils/__tests__/normalize-stories.test.ts @@ -12,10 +12,31 @@ jest.mock('fs', () => ({ })); describe('normalizeStoriesEntry', () => { - it('glob', () => { + it('directory/files glob', () => { expect(normalizeStoriesEntry('../**/*.stories.mdx', '')).toMatchInlineSnapshot(` { - "glob": "../**/*.stories.mdx" + "glob": "../**/*.stories.mdx", + "specifier": { + "directory": "..", + "titlePrefix": "", + "files": "*.stories.mdx" + } + } + `); + }); + + it('too many stars glob', () => { + expect(normalizeStoriesEntry('../**/foo/**/*.stories.mdx', '')).toMatchInlineSnapshot(` + { + "glob": "../**/foo/**/*.stories.mdx" + } + `); + }); + + it('intermediate directory glob', () => { + expect(normalizeStoriesEntry('../**/foo/*.stories.mdx', '')).toMatchInlineSnapshot(` + { + "glob": "../**/foo/*.stories.mdx" } `); }); diff --git a/lib/core-common/src/utils/normalize-stories.ts b/lib/core-common/src/utils/normalize-stories.ts index 5c0c3ec4e78..9f6ad6ccfe2 100644 --- a/lib/core-common/src/utils/normalize-stories.ts +++ b/lib/core-common/src/utils/normalize-stories.ts @@ -4,6 +4,9 @@ import type { StoriesEntry, NormalizedStoriesEntry } from '../types'; const DEFAULT_FILES = '*.stories.@(mdx|tsx|ts|jsx|js)'; const DEFAULT_TITLE_PREFIX = ''; +// Escaping regexes for glob regexes is fun +// Mathing things like '../**/*.stories.mdx' +const GLOB_REGEX = /^(?[^*]*)\/\*\*\/(?\*\..*)/; const isDirectory = (configDir: string, entry: string) => { try { @@ -24,10 +27,17 @@ export const normalizeStoriesEntry = ( if (typeof entry === 'string') { if (!entry.includes('**') && isDirectory(configDir, entry)) { directory = entry; - titlePrefix = DEFAULT_TITLE_PREFIX; files = DEFAULT_FILES; + titlePrefix = DEFAULT_TITLE_PREFIX; } else { - glob = entry; + const match = entry.match(GLOB_REGEX); + if (match) { + directory = match.groups.directory; + files = match.groups.files; + titlePrefix = DEFAULT_TITLE_PREFIX; + } else { + glob = entry; + } } } else { directory = entry.directory;