diff --git a/packages/docusaurus-utils/src/__tests__/index.test.ts b/packages/docusaurus-utils/src/__tests__/index.test.ts index 44411a921a4b..b9627f215608 100644 --- a/packages/docusaurus-utils/src/__tests__/index.test.ts +++ b/packages/docusaurus-utils/src/__tests__/index.test.ts @@ -374,12 +374,16 @@ describe('load utils', () => { output: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ex urna, molestie et sagittis ut, varius ac justo.', }, - // Content with imports declarations and Markdown markup, as well as Emoji + // Content with imports/exports declarations and Markdown markup, as well as Emoji { input: ` import Component from '@site/src/components/Component'; import Component from '@site/src/components/Component' + export function ItemCol(props) { return } + + export function ItemCol(props) { return }; + Lorem **ipsum** dolor sit \`amet\`[^1], consectetur _adipiscing_ elit. [**Vestibulum**](https://wiktionary.org/wiki/vestibulum) ex urna[^bignote], ~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. diff --git a/packages/docusaurus-utils/src/index.ts b/packages/docusaurus-utils/src/index.ts index ef693a4bbbdf..6de875d4c37e 100644 --- a/packages/docusaurus-utils/src/index.ts +++ b/packages/docusaurus-utils/src/index.ts @@ -188,21 +188,21 @@ export function getSubFolder(file: string, refDir: string): string | null { return match && match[1]; } -// Regex for an import statement. -const importRegexString = '^(.*import){1}(.+){0,1}\\s[\'"](.+)[\'"];?'; - export function createExcerpt(fileString: string): string | undefined { - let fileContent = fileString.trimLeft(); + const fileLines = fileString.trimLeft().split('\n'); - if (RegExp(importRegexString).test(fileContent)) { - fileContent = fileContent - .replace(RegExp(importRegexString, 'gm'), '') - .trimLeft(); - } + /* eslint-disable no-continue */ + for (const fileLine of fileLines) { + // Skip empty line. + if (!fileLine.trim()) { + continue; + } - const fileLines = fileContent.split('\n'); + // Skip import/export declaration. + if (/^.*import\s.*from.*;?|export\s.*{.*};?/.test(fileLine)) { + continue; + } - for (const fileLine of fileLines) { const cleanedLine = fileLine // Remove HTML tags. .replace(/<[^>]*>/g, '')