diff --git a/package-lock.json b/package-lock.json index 0ee8f072c..9b8ab9706 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "lodash": "^4.17.21", "marked": "^5.1.0", "marked-katex-extension": "^3.0.0", + "marked-linkify-it": "^3.1.0", "md5": "^2.3.0", "plausible-tracker": "^0.3.8", "sinon": "^15.2.0", @@ -828,6 +829,11 @@ "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.0.tgz", "integrity": "sha512-hz+S3nV6Mym5xPbT9fnO8dDhBFQguMYpY0Ipxv06JMi1ORgnEM4M1ymWDUhUNer3ElLmT583opRo4RzxKmh9jw==" }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, "node_modules/@types/lodash": { "version": "4.14.195", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", @@ -2987,6 +2993,14 @@ "node": ">=10" } }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, "node_modules/local-pkg": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", @@ -3090,6 +3104,18 @@ "marked": "^4 || ^5" } }, + "node_modules/marked-linkify-it": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/marked-linkify-it/-/marked-linkify-it-3.1.0.tgz", + "integrity": "sha512-F7OcF+zvbPemwYTNW8n0C9rEhKMuWsmgTvBwblwDvMRgoK3VV5Ls+mlUzrMOCI8P3ThVq1/KVRV7MBmTWvx2lw==", + "dependencies": { + "@types/linkify-it": "^3.0.2", + "linkify-it": "^4.0.1" + }, + "peerDependencies": { + "marked": "^4 || ^5" + } + }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -4421,6 +4447,11 @@ "node": ">=14.17" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "node_modules/ufo": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz", diff --git a/package.json b/package.json index a241c48d7..3980bd88d 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "lodash": "^4.17.21", "marked": "^5.1.0", "marked-katex-extension": "^3.0.0", + "marked-linkify-it": "^3.1.0", "md5": "^2.3.0", "plausible-tracker": "^0.3.8", "sinon": "^15.2.0", diff --git a/src/lib/markdown.ts b/src/lib/markdown.ts index 455d8e286..faeb7e828 100644 --- a/src/lib/markdown.ts +++ b/src/lib/markdown.ts @@ -2,6 +2,7 @@ import type { marked } from "marked"; import dompurify from "dompurify"; import katexMarkedExtension from "marked-katex-extension"; +import markedLinkifyIt from "marked-linkify-it"; import { Marked, Renderer as BaseRenderer } from "marked"; import emojis from "@app/lib/emojis"; @@ -142,6 +143,7 @@ export class Renderer extends BaseRenderer { const markedInstance = new Marked( katexMarkedExtension({ throwOnError: false }), + markedLinkifyIt(), { extensions: [ emojisMarkedExtension, diff --git a/src/views/projects/ProjectMeta.svelte b/src/views/projects/ProjectMeta.svelte index 4719b7e67..d8b58cba3 100644 --- a/src/views/projects/ProjectMeta.svelte +++ b/src/views/projects/ProjectMeta.svelte @@ -1,9 +1,11 @@