Skip to content

Commit

Permalink
fix(v2): optimize markdown parser regex (fix facebook#4726) (facebook…
Browse files Browse the repository at this point in the history
…#4729)

* fix(v2): optimize markdown parser regex

* Change test description

Co-authored-by: Nam Hoang Le <[email protected]>
  • Loading branch information
nam-hle and nhle-mgmtp authored May 5, 2021
1 parent e641cab commit 8c39826
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 deletions.
51 changes: 51 additions & 0 deletions packages/docusaurus-utils/src/__tests__/markdownParser.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,57 @@ describe('parseMarkdownContentTitle', () => {
contentTitle: undefined,
});
});

test('Should parse markdown h1 title placed after multiple import declarations', () => {
const markdown = dedent`
import Component1 from '@site/src/components/Component1';
import Component2 from '@site/src/components/Component2';
import Component3 from '@site/src/components/Component3';
import Component4 from '@site/src/components/Component4';
import Component5 from '@site/src/components/Component5';
import Component6 from '@site/src/components/Component6';
import Component7 from '@site/src/components/Component7';
import Component8 from '@site/src/components/Component8';
import Component9 from '@site/src/components/Component9';
import Component10 from '@site/src/components/Component10';
import Component11 from '@site/src/components/Component11';
import Component12 from '@site/src/components/Component12';
import Component13 from '@site/src/components/Component13';
import Component14 from '@site/src/components/Component14';
import Component15 from '@site/src/components/Component15';
# Markdown Title
Lorem Ipsum
`;

expect(parseMarkdownContentTitle(markdown)).toEqual({
content: dedent`
import Component1 from '@site/src/components/Component1';
import Component2 from '@site/src/components/Component2';
import Component3 from '@site/src/components/Component3';
import Component4 from '@site/src/components/Component4';
import Component5 from '@site/src/components/Component5';
import Component6 from '@site/src/components/Component6';
import Component7 from '@site/src/components/Component7';
import Component8 from '@site/src/components/Component8';
import Component9 from '@site/src/components/Component9';
import Component10 from '@site/src/components/Component10';
import Component11 from '@site/src/components/Component11';
import Component12 from '@site/src/components/Component12';
import Component13 from '@site/src/components/Component13';
import Component14 from '@site/src/components/Component14';
import Component15 from '@site/src/components/Component15';
Lorem Ipsum
`,
contentTitle: 'Markdown Title',
});
});
});

describe('parseMarkdownString', () => {
Expand Down
4 changes: 2 additions & 2 deletions packages/docusaurus-utils/src/markdownParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,10 @@ export function parseMarkdownContentTitle(

const content = contentUntrimmed.trim();

const regularTitleMatch = /^(?:import\s.*(from.*)?;?|\n)*?(?<pattern>#\s*(?<title>[^#\n{]*)+[ \t]*(?<suffix>({#*[\w-]+})|#)?\n*?)/g.exec(
const regularTitleMatch = /^(?:import\s+\S+(\s+from\s+\S+)?;?|\n)*?(?<pattern>#\s*(?<title>[^#\n{]*)+[ \t]*(?<suffix>({#*[\w-]+})|#)?\n*?)/g.exec(
content,
);
const alternateTitleMatch = /^(?:import\s.*(from.*)?;?|\n)*?(?<pattern>\s*(?<title>[^\n]*)\s*\n[=]+)/g.exec(
const alternateTitleMatch = /^(?:import\s+\S+(\s+from\s+\S+)?;?|\n)*?(?<pattern>\s*(?<title>[^\n]*)\s*\n[=]+)/g.exec(
content,
);

Expand Down

0 comments on commit 8c39826

Please sign in to comment.