From 3190aa6fe6e1c354294b26d96a284eb53fd8f41e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 20 Jun 2025 18:28:08 +0300 Subject: [PATCH] feat(import/markdown): start parsing wikilinks --- apps/server/src/services/import/markdown.spec.ts | 6 ++++++ apps/server/src/services/import/markdown.ts | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/server/src/services/import/markdown.spec.ts b/apps/server/src/services/import/markdown.spec.ts index 8768d3252..3aa67bd9d 100644 --- a/apps/server/src/services/import/markdown.spec.ts +++ b/apps/server/src/services/import/markdown.spec.ts @@ -281,4 +281,10 @@ $$`; expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); }); + it("supports wikilink with root-relative path", () => { + const input = `oh no my banana I bought on [[journal/monday]] has gone off! I’m taking it back to the [[other/shop]] for a refund`; + const expected = `

oh no my banana I bought on journal/monday has gone off! I’m taking it back to the other/shop for a refund

`; + expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); + }); + }); diff --git a/apps/server/src/services/import/markdown.ts b/apps/server/src/services/import/markdown.ts index 498127397..c945143fa 100644 --- a/apps/server/src/services/import/markdown.ts +++ b/apps/server/src/services/import/markdown.ts @@ -23,7 +23,9 @@ class CustomMarkdownRenderer extends Renderer { } override paragraph(data: Tokens.Paragraph): string { - return super.paragraph(data).trimEnd(); + let text = super.paragraph(data).trimEnd(); + text = processWikiLinks(text); + return text; } override code({ text, lang }: Tokens.Code): string { @@ -212,6 +214,11 @@ function restoreFromMap(text: string, map: Map): string { return text.replace(new RegExp(pattern, 'g'), match => map.get(match) ?? match); } +function processWikiLinks(paragraph: string) { + paragraph = paragraph.replaceAll(/\[\[([^\[\]]+)\]\]/g, `$1`); + return paragraph; +} + const renderer = new CustomMarkdownRenderer({ async: false }); export default {