From 5d83a2d29bd61f32f90aace7fdd1ae2c5e2e1a7d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 24 Feb 2025 21:39:52 +0700 Subject: [PATCH] fix md links again --- src/service/template/index.ts | 2 ++ src/utils/__tests__/extractURLs.test.ts | 9 +++++++++ src/utils/__tests__/transformMDLinks.test.ts | 8 ++++++++ src/utils/links.ts | 10 +++++----- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/service/template/index.ts b/src/service/template/index.ts index ed211f8..ea5856a 100644 --- a/src/service/template/index.ts +++ b/src/service/template/index.ts @@ -90,6 +90,8 @@ export class Template< const output = processor.processSync(text).contents.toString(); if (markdown) { + console.log("HERE--->", output, transformMDLinks(output)); + return transformMDLinks(output); } diff --git a/src/utils/__tests__/extractURLs.test.ts b/src/utils/__tests__/extractURLs.test.ts index 6fddfd1..1d78e2e 100644 --- a/src/utils/__tests__/extractURLs.test.ts +++ b/src/utils/__tests__/extractURLs.test.ts @@ -28,6 +28,15 @@ describe("extractURLs", () => { expect(result[0].href).toBe("https://map.vault48.org/test"); }); + it("works with that weird new VK urls without scheme (with backslash)", () => { + const result = extractURLs( + "Trying out links: \\[#alias|map.vault48.org/test|map.vault48.org/test]" + ); + + expect(result.length).toBe(1); + expect(result[0].href).toBe("https://map.vault48.org/test"); + }); + it("deduplicates matching urls", () => { const result = extractURLs( `Trying out links: [#alias|map.vault48.org/test|map.vault48.org/test] map.vault48.org/test https://map.vault48.org/test map.vault48.org/test2 https://map.vault48.org/test3 diff --git a/src/utils/__tests__/transformMDLinks.test.ts b/src/utils/__tests__/transformMDLinks.test.ts index 387cbfe..7c99d5c 100644 --- a/src/utils/__tests__/transformMDLinks.test.ts +++ b/src/utils/__tests__/transformMDLinks.test.ts @@ -25,5 +25,13 @@ describe("transformMDLinks", () => { ).toBe( "Trying out links [1234567890123456789…](https://map.vault48.org/test_abc_def_ghi) 123" ); + + expect( + transformMDLinks( + "Trying out links \\[#alias|12345678901234567890123|map.vault48.org/test_abc_def_ghi] 123" + ) + ).toBe( + "Trying out links [1234567890123456789…](https://map.vault48.org/test_abc_def_ghi) 123" + ); }); }); diff --git a/src/utils/links.ts b/src/utils/links.ts index b2514a2..e6ea985 100644 --- a/src/utils/links.ts +++ b/src/utils/links.ts @@ -3,7 +3,7 @@ import { URL } from "url"; const simpleUrlRegex = /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s\]]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s\]]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s\]]{2,}|www\.[a-zA-Z0-9]+\.[^\s\]]{2,})/gim; /** Yep, that's how VK posts it's links */ -const weirdLongUrlRegex = /\[\#alias\|([^\|]+)\|([^\]]+)\]/gim; +const weirdLongUrlRegex = /(\\?)\[\#alias\|([^\|]+)\|([^\]]+)\]/gim; const fixUrl = (url: string) => url.startsWith("http") || !url ? url : `https://${url}`; @@ -15,7 +15,7 @@ export const extractURLs = (text: string): URL[] => { text .match(weirdLongUrlRegex) ?.forEach((match) => - urls.add(fixUrl(match.replace(weirdLongUrlRegex, "$1"))) + urls.add(fixUrl(match.replace(weirdLongUrlRegex, "$2"))) ); text.match(simpleUrlRegex)?.forEach((match) => urls.add(match)); @@ -39,12 +39,12 @@ const trimTo = (val: string, maxLength: number) => export const transformMDLinks = (value: string) => value .replace(weirdLongUrlRegex, (val, ...args) => { - if (args.length < 2) { + if (args.length < 3) { return val; } - const title = trimTo(args[0] ?? args[1], 20); - const url = fixUrl(args[1]); + const title = trimTo(args[1] ?? args[2], 20); + const url = fixUrl(args[2]); return `[${title}](${url})`; })