From f215d38ed0a336b9e22326ab91458edd60eefc54 Mon Sep 17 00:00:00 2001 From: Tom Herni Date: Thu, 23 Jul 2026 14:21:59 +0200 Subject: [PATCH] chore: update the Marked dependency --- package-lock.json | 10 +++---- package.json | 2 +- src/build/posts/parse-markdown.ts | 48 +++++++++++-------------------- 3 files changed, 23 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc71bf6..7bb0c46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "js-yaml": "^4.1.0", "lightningcss": "^1.32.0", "lint-staged": "^17.0.7", - "marked": "^11.1.0", + "marked": "^18.0.7", "prettier": "^3.8.4", "prismjs": "^1.29.0", "quote-quote": "^1.3.0", @@ -3207,16 +3207,16 @@ } }, "node_modules/marked": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-11.2.0.tgz", - "integrity": "sha512-HR0m3bvu0jAPYiIvLUUQtdg1g6D247//lvcekpHO1WMvbwDlwSkZAX9Lw4F4YHE1T0HaaNve0tuAWuV1UJ6vtw==", + "version": "18.0.7", + "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.7.tgz", + "integrity": "sha512-iDVQ5ldaiKXn6b2JroX5kgRfmwgqolW7NpaEzTl1k/2Zh1njIEN9yniyLV/mOvWwtsE8OGgkjsCYvijuPk1dtA==", "dev": true, "license": "MIT", "bin": { "marked": "bin/marked.js" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/mathml-tag-names": { diff --git a/package.json b/package.json index de8cd63..675ba08 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "js-yaml": "^4.1.0", "lightningcss": "^1.32.0", "lint-staged": "^17.0.7", - "marked": "^11.1.0", + "marked": "^18.0.7", "prettier": "^3.8.4", "prismjs": "^1.29.0", "quote-quote": "^1.3.0", diff --git a/src/build/posts/parse-markdown.ts b/src/build/posts/parse-markdown.ts index ccd0148..cc34246 100644 --- a/src/build/posts/parse-markdown.ts +++ b/src/build/posts/parse-markdown.ts @@ -14,7 +14,7 @@ export function parseMarkdown(content: string): string { addHeadingAnchor(renderer); secureExternalLinks(renderer); - const parsed = marked(content, { renderer }); + const parsed = marked.parse(content, { renderer }); // Safeguard in case an async plugin ever makes it return a Promise. if (typeof parsed !== 'string') { @@ -24,52 +24,38 @@ export function parseMarkdown(content: string): string { } function addSyntaxHighlighting(renderer: Renderer): void { - renderer.code = (code, infostring) => { - if (!infostring) { - return `
${encode(code)}
`; + renderer.code = ({ text, lang }) => { + if (!lang) { + return `
${encode(text)}
`; } - const language = prism.languages[infostring]; - + const language = prism.languages[lang]; if (!language) { throw new Error( - `Language not supported by Prism: ${infostring}. It may needs to be imported.`, + `Language "${lang}" is not supported by Prism; it may need to be imported.`, ); } - const highlightedCode = prism.highlight(code, language, infostring); - return `
${highlightedCode}
`; + const highlighted = prism.highlight(text, language, lang); + return `
${highlighted}
`; }; } function addHeadingAnchor(renderer: Renderer): void { - const originalHeadingRenderer = renderer.heading; - - renderer.heading = (text, level, raw) => { - const html = originalHeadingRenderer.call(renderer, text, level, raw); - + renderer.heading = ({ text, depth }) => { // Don't add anchors to the smaller headings. - if (level > 3) { - return html; + if (depth > 3) { + return `${text}`; } - - const headingId = slugify(raw); - return html - .replace(/ `${match} id="${headingId}"`) - .replace( - /<\/h(\d)>/, - (match) => `#${match}`, - ); + const id = slugify(text); + return `${text}#\n`; }; } function secureExternalLinks(renderer: Renderer): void { - const originalLinkRenderer = renderer.link; - - renderer.link = (href, ...args) => { - const html = originalLinkRenderer.call(renderer, href, ...args); - return href && !href.startsWith(BUILD.baseUrl) - ? html.replace(' { + return href.startsWith(BUILD.baseUrl) + ? `${text}` + : `${text}`; }; }