From 49f5c563a3cfeb1eadc554b890f8cd72cfd50a8f Mon Sep 17 00:00:00 2001 From: Koy Zhuang Date: Mon, 22 Jul 2024 17:25:44 +0800 Subject: [PATCH] chore: upgrade marked from 12.0.2 to 13.0.2 (#2467) --- package-lock.json | 8 +++---- package.json | 2 +- src/core/render/compiler.js | 11 +++++---- src/core/render/compiler/code.js | 8 +++---- src/core/render/compiler/image.js | 2 +- src/core/render/compiler/link.js | 3 ++- src/core/render/compiler/paragraph.js | 3 ++- src/core/render/compiler/taskList.js | 11 ++++++++- src/core/render/compiler/taskListItem.js | 30 +++++++++++++++++++++++- 9 files changed, 59 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9da1be264..c0aa74fc7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,7 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "lint-staged": "^15.2.2", - "marked": "^12.0.2", + "marked": "^13.0.2", "npm-run-all": "^4.1.5", "postcss-cli": "^11.0.0", "postcss-import": "^16.1.0", @@ -11030,9 +11030,9 @@ } }, "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.2.tgz", + "integrity": "sha512-J6CPjP8pS5sgrRqxVRvkCIkZ6MFdRIjDkwUwgJ9nL2fbmM6qGQeB2C16hi8Cc9BOzj6xXzy0jyi0iPIfnMHYzA==", "dev": true, "bin": { "marked": "bin/marked.js" diff --git a/package.json b/package.json index 91b865f23..6202ae5e9 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "lint-staged": "^15.2.2", - "marked": "^12.0.2", + "marked": "^13.0.2", "npm-run-all": "^4.1.5", "postcss-cli": "^11.0.0", "postcss-import": "^16.1.0", diff --git a/src/core/render/compiler.js b/src/core/render/compiler.js index 3d4388e61..443356213 100644 --- a/src/core/render/compiler.js +++ b/src/core/render/compiler.js @@ -205,13 +205,14 @@ export class Compiler { /** * Render anchor tag * @link https://github.com/markedjs/marked#overriding-renderer-methods - * @param {String} text Text content - * @param {Number} level Type of heading (h tag) + * @param {String} tokens the content tokens + * @param {Number} depth Type of heading (h tag) * @returns {String} Heading element */ - origin.heading = renderer.heading = function (text, level) { + origin.heading = renderer.heading = function ({ tokens, depth }) { + const text = this.parser.parseInline(tokens); let { str, config } = getAndRemoveConfig(text); - const nextToc = { level, title: str }; + const nextToc = { depth, title: str }; const { content, ignoreAllSubs, ignoreSubHeading } = getAndRemoveDocsifyIgnoreConfig(str); @@ -229,7 +230,7 @@ export class Compiler { // elements after navigation. This is preferred over focusing on the link // within the heading because it matches the focus behavior of screen // readers when navigating page content. - return `${str}`; + return `${str}`; }; origin.code = highlightCodeCompiler({ renderer }); diff --git a/src/core/render/compiler/code.js b/src/core/render/compiler/code.js index 59ae5f6f4..92f0ab55f 100644 --- a/src/core/render/compiler/code.js +++ b/src/core/render/compiler/code.js @@ -3,13 +3,13 @@ import Prism from 'prismjs'; import 'prismjs/components/prism-markup-templating.js'; export const highlightCodeCompiler = ({ renderer }) => - (renderer.code = function (code, lang = 'markup') { + (renderer.code = function ({ text, lang = 'markup' }) { const langOrMarkup = Prism.languages[lang] || Prism.languages.markup; - const text = Prism.highlight( - code.replace(/@DOCSIFY_QM@/g, '`'), + const code = Prism.highlight( + text.replace(/@DOCSIFY_QM@/g, '`'), langOrMarkup, lang, ); - return /* html */ `
${text}
`; + return /* html */ `
${code}
`; }); diff --git a/src/core/render/compiler/image.js b/src/core/render/compiler/image.js index 89003537f..4c8ea9089 100644 --- a/src/core/render/compiler/image.js +++ b/src/core/render/compiler/image.js @@ -2,7 +2,7 @@ import { getAndRemoveConfig } from '../utils.js'; import { isAbsolutePath, getPath, getParentPath } from '../../router/util.js'; export const imageCompiler = ({ renderer, contentBase, router }) => - (renderer.image = (href, title, text) => { + (renderer.image = ({ href, title, text }) => { let url = href; const attrs = []; diff --git a/src/core/render/compiler/link.js b/src/core/render/compiler/link.js index 4c1c26e20..c7a3559eb 100644 --- a/src/core/render/compiler/link.js +++ b/src/core/render/compiler/link.js @@ -8,8 +8,9 @@ export const linkCompiler = ({ linkRel, compilerClass, }) => - (renderer.link = (href, title = '', text) => { + (renderer.link = function ({ href, title = '', tokens }) { const attrs = []; + const text = this.parser.parseInline(tokens) || ''; const { str, config } = getAndRemoveConfig(title); linkTarget = config.target || linkTarget; linkRel = diff --git a/src/core/render/compiler/paragraph.js b/src/core/render/compiler/paragraph.js index 2560f3e14..3df4e3165 100644 --- a/src/core/render/compiler/paragraph.js +++ b/src/core/render/compiler/paragraph.js @@ -1,7 +1,8 @@ import { helper as helperTpl } from '../tpl.js'; export const paragraphCompiler = ({ renderer }) => - (renderer.paragraph = text => { + (renderer.paragraph = function ({ tokens }) { + const text = this.parser.parseInline(tokens); let result; if (text.startsWith('!>')) { diff --git a/src/core/render/compiler/taskList.js b/src/core/render/compiler/taskList.js index acb7a5372..f4bcdaf8d 100644 --- a/src/core/render/compiler/taskList.js +++ b/src/core/render/compiler/taskList.js @@ -1,5 +1,14 @@ export const taskListCompiler = ({ renderer }) => - (renderer.list = (body, ordered, start) => { + (renderer.list = function (token) { + const ordered = token.ordered; + const start = token.start; + + let body = ''; + for (let j = 0; j < token.items.length; j++) { + const item = token.items[j]; + body += this.listitem?.(item); + } + const isTaskList = /
  • /.test( body.split('class="task-list"')[0], ); diff --git a/src/core/render/compiler/taskListItem.js b/src/core/render/compiler/taskListItem.js index e4b2512ff..5978db764 100644 --- a/src/core/render/compiler/taskListItem.js +++ b/src/core/render/compiler/taskListItem.js @@ -1,5 +1,33 @@ export const taskListItemCompiler = ({ renderer }) => - (renderer.listitem = text => { + (renderer.listitem = function (item) { + let text = ''; + if (item.task) { + const checkbox = this.checkbox?.({ checked: !!item.checked }); + if (item.loose) { + if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') { + item.tokens[0].text = checkbox + ' ' + item.tokens[0].text; + if ( + item.tokens[0].tokens && + item.tokens[0].tokens.length > 0 && + item.tokens[0].tokens[0].type === 'text' + ) { + item.tokens[0].tokens[0].text = + checkbox + ' ' + item.tokens[0].tokens[0].text; + } + } else { + item.tokens.unshift({ + type: 'text', + raw: checkbox + ' ', + text: checkbox + ' ', + }); + } + } else { + text += checkbox + ' '; + } + } + + text += this.parser?.parse(item.tokens, !!item.loose); + const isTaskItem = /^(]*>)/.test(text); const html = isTaskItem ? /* html */ `
  • `