From 3394bba7408c04a374d6e53414a26d55dc54b951 Mon Sep 17 00:00:00 2001 From: Sebastien Castiel Date: Tue, 31 Jan 2023 11:15:35 -0500 Subject: [PATCH 1/2] fix(docusaurus-utils): Handle CRLF EOL when parsing MDX with imports --- .../src/__tests__/markdownUtils.test.ts | 20 +++++++++++++++++++ .../docusaurus-utils/src/markdownUtils.ts | 4 +++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts b/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts index 579c47e826a0..014709f4df01 100644 --- a/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts @@ -130,6 +130,26 @@ describe('createExcerpt', () => { ); }); + it('creates excerpt for content with imports/exports declarations, with CRLF line endings', () => { + expect( + createExcerpt( + dedent` + import Component from '@site/src/components/Component'; + + export function ItemCol(props) { + return + } + + Lorem **ipsum** dolor sit \`amet\`[^1], consectetur _adipiscing_ elit. [**Vestibulum**](https://wiktionary.org/wiki/vestibulum) ex urna[^note], ~~molestie~~ et sagittis ut, varius ac justo :wink:. + + Nunc porttitor libero nec vulputate venenatis. Nam nec rhoncus mauris. Morbi tempus est et nibh maximus, tempus venenatis arcu lobortis. + `.replace(/\n/g, '\r\n'), + ), + ).toBe( + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ex urna, molestie et sagittis ut, varius ac justo.', + ); + }); + it('creates excerpt for heading specified with anchor-id syntax', () => { expect( createExcerpt(dedent` diff --git a/packages/docusaurus-utils/src/markdownUtils.ts b/packages/docusaurus-utils/src/markdownUtils.ts index 96a7379e846c..074dbe277bc7 100644 --- a/packages/docusaurus-utils/src/markdownUtils.ts +++ b/packages/docusaurus-utils/src/markdownUtils.ts @@ -62,9 +62,11 @@ export function createExcerpt(fileString: string): string | undefined { let lastCodeFence = ''; for (const fileLine of fileLines) { - if (fileLine === '' && inImport) { + // An empty line marks the end of imports + if (!fileLine.trim() && inImport) { inImport = false; } + // Skip empty line. if (!fileLine.trim()) { continue; From a16c8971c2c8c0dad6f8583bc5acc313c2952200 Mon Sep 17 00:00:00 2001 From: Sebastien Castiel Date: Tue, 31 Jan 2023 11:24:15 -0500 Subject: [PATCH 2/2] fix(docusaurus-utils): Better fix --- packages/docusaurus-utils/src/markdownUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/docusaurus-utils/src/markdownUtils.ts b/packages/docusaurus-utils/src/markdownUtils.ts index 074dbe277bc7..f80c4e905260 100644 --- a/packages/docusaurus-utils/src/markdownUtils.ts +++ b/packages/docusaurus-utils/src/markdownUtils.ts @@ -55,8 +55,8 @@ export function createExcerpt(fileString: string): string | undefined { const fileLines = fileString .trimStart() // Remove Markdown alternate title - .replace(/^[^\n]*\n[=]+/g, '') - .split('\n'); + .replace(/^[^\r\n]*\r?\n[=]+/g, '') + .split(/\r?\n/); let inCode = false; let inImport = false; let lastCodeFence = '';