From e8074e60ec5941e7b447f21a289e59e9a91a9e33 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Wed, 5 Jul 2023 11:22:51 +0530 Subject: [PATCH] fix(build): resolve nested md inclusions properly closes #2584 closes #2586 Co-authored-by: Jeff Tian --- .../markdown-extensions/markdown-extensions.test.ts | 11 ++++++++++- __tests__/e2e/markdown-extensions/nested-include.md | 2 ++ .../markdown-extensions/subfolder/inside-subfolder.md | 3 +++ .../markdown-extensions/subfolder/subsub/subsub.md | 3 +++ .../subfolder/subsub/subsubsub/subsubsub.md | 1 + src/node/markdownToVue.ts | 8 ++++---- 6 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 __tests__/e2e/markdown-extensions/subfolder/inside-subfolder.md create mode 100644 __tests__/e2e/markdown-extensions/subfolder/subsub/subsub.md create mode 100644 __tests__/e2e/markdown-extensions/subfolder/subsub/subsubsub/subsubsub.md diff --git a/__tests__/e2e/markdown-extensions/markdown-extensions.test.ts b/__tests__/e2e/markdown-extensions/markdown-extensions.test.ts index d3c38c0f..750d598e 100644 --- a/__tests__/e2e/markdown-extensions/markdown-extensions.test.ts +++ b/__tests__/e2e/markdown-extensions/markdown-extensions.test.ts @@ -65,7 +65,7 @@ describe('Table of Contents', () => { test('render toc', async () => { const items = page.locator('#table-of-contents + nav ul li') const count = await items.count() - expect(count).toBe(33) + expect(count).toBe(35) }) }) @@ -242,6 +242,15 @@ describe('Markdown File Inclusion', () => { expect(await h1.getAttribute('id')).toBe('foo-1') }) + test('render markdown using nested inclusion inside sub folder', async () => { + const h1 = page.locator('#after-foo + h1') + expect(await h1.getAttribute('id')).toBe('inside-sub-folder') + const h2 = page.locator('#after-foo + h1 + h2') + expect(await h2.getAttribute('id')).toBe('sub-sub') + const h3 = page.locator('#after-foo + h1 + h2 + h3') + expect(await h3.getAttribute('id')).toBe('sub-sub-sub') + }) + test('support selecting range', async () => { const h2 = page.locator('#markdown-file-inclusion-with-range + h2') expect(trim(await h2.textContent())).toBe('Region') diff --git a/__tests__/e2e/markdown-extensions/nested-include.md b/__tests__/e2e/markdown-extensions/nested-include.md index fd6cb58a..eb7eb718 100644 --- a/__tests__/e2e/markdown-extensions/nested-include.md +++ b/__tests__/e2e/markdown-extensions/nested-include.md @@ -1,3 +1,5 @@ ### After Foo + + diff --git a/__tests__/e2e/markdown-extensions/subfolder/inside-subfolder.md b/__tests__/e2e/markdown-extensions/subfolder/inside-subfolder.md new file mode 100644 index 00000000..8477113a --- /dev/null +++ b/__tests__/e2e/markdown-extensions/subfolder/inside-subfolder.md @@ -0,0 +1,3 @@ +# Inside sub folder + + diff --git a/__tests__/e2e/markdown-extensions/subfolder/subsub/subsub.md b/__tests__/e2e/markdown-extensions/subfolder/subsub/subsub.md new file mode 100644 index 00000000..70d0332e --- /dev/null +++ b/__tests__/e2e/markdown-extensions/subfolder/subsub/subsub.md @@ -0,0 +1,3 @@ +## Sub sub + + diff --git a/__tests__/e2e/markdown-extensions/subfolder/subsub/subsubsub/subsubsub.md b/__tests__/e2e/markdown-extensions/subfolder/subsub/subsubsub/subsubsub.md new file mode 100644 index 00000000..9b4e5e69 --- /dev/null +++ b/__tests__/e2e/markdown-extensions/subfolder/subsub/subsubsub/subsubsub.md @@ -0,0 +1 @@ +### Sub sub sub diff --git a/src/node/markdownToVue.ts b/src/node/markdownToVue.ts index 483c3791..f8edcbd4 100644 --- a/src/node/markdownToVue.ts +++ b/src/node/markdownToVue.ts @@ -90,7 +90,7 @@ export async function createMarkdownToVueRenderFn( // resolve includes let includes: string[] = [] - function processIncludes(src: string): string { + function processIncludes(src: string, file: string): string { return src.replace(includesRE, (m: string, m1: string) => { if (!m1.length) return m @@ -100,7 +100,7 @@ export async function createMarkdownToVueRenderFn( try { const includePath = atPresent ? path.join(srcDir, m1.slice(m1[1] === '/' ? 2 : 1)) - : path.join(path.dirname(fileOrig), m1) + : path.join(path.dirname(file), m1) let content = fs.readFileSync(includePath, 'utf-8') if (range) { const [, startLine, endLine] = range @@ -114,14 +114,14 @@ export async function createMarkdownToVueRenderFn( } includes.push(slash(includePath)) // recursively process includes in the content - return processIncludes(content) + return processIncludes(content, includePath) } catch (error) { return m // silently ignore error if file is not present } }) } - src = processIncludes(src) + src = processIncludes(src, fileOrig) // reset env before render const env: MarkdownEnv = {