diff --git a/package.json b/package.json index 676b08a83f..254c66f500 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", - "@types/marked": "^4.3.2", "@types/pluralize": "0.0.33", "boxen": "^7.1.1", "chokidar": "^3.5.3", @@ -89,7 +88,7 @@ "dependencies": { "colors": "1.4.0", "finalhandler": "^1.2.0", - "marked": "^4.3.0", + "marked": "^11.1.1", "puppeteer": "^21.7.0", "sade": "^1.8.1", "serve-static": "^1.15.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bcf6fbe351..d54e9abeca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ dependencies: specifier: ^1.2.0 version: 1.2.0 marked: - specifier: ^4.3.0 - version: 4.3.0 + specifier: ^11.1.1 + version: 11.1.1 puppeteer: specifier: ^21.7.0 version: 21.7.0(typescript@5.3.3) @@ -37,9 +37,6 @@ devDependencies: '@rollup/plugin-terser': specifier: ^0.4.4 version: 0.4.4(rollup@4.9.4) - '@types/marked': - specifier: ^4.3.2 - version: 4.3.2 '@types/pluralize': specifier: 0.0.33 version: 0.0.33 @@ -563,10 +560,6 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/marked@4.3.2: - resolution: {integrity: sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==} - dev: true - /@types/node@20.10.5: resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} dependencies: @@ -2842,9 +2835,9 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /marked@4.3.0: - resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} - engines: {node: '>= 12'} + /marked@11.1.1: + resolution: {integrity: sha512-EgxRjgK9axsQuUa/oKMx5DEY8oXpKJfk61rT5iY3aRlgU6QJtUcxU5OAymdhCvWvhYcd9FKmO5eQoX8m9VGJXg==} + engines: {node: '>= 18'} hasBin: true dev: false diff --git a/src/core/markdown.js b/src/core/markdown.js index c12bee1c45..89d750dbcf 100644 --- a/src/core/markdown.js +++ b/src/core/markdown.js @@ -7,16 +7,18 @@ * property of the configuration object to "markdown." * * We use marked for parsing Markdown: - * https://github.com/chjj/marked + * https://github.com/markedjs/marked * */ import { getElementIndentation, reindent } from "./utils.js"; import { marked } from "./import-maps.js"; + export const name = "core/markdown"; const gtEntity = />/gm; const ampEntity = /&/gm; + class Renderer extends marked.Renderer { code(code, infoString, isEscaped) { const { language, ...metaData } = Renderer.parseInfoString(infoString); @@ -26,7 +28,9 @@ class Renderer extends marked.Renderer { return `
${code}
`; } - const html = super.code(code, language, isEscaped); + const html = super + .code(code, language, isEscaped) + .replace(`class="language-`, `class="`); const { example, illegalExample } = metaData; if (!example && !illegalExample) return html; @@ -72,21 +76,19 @@ class Renderer extends marked.Renderer { return { language, ...metaData }; } - heading(text, level, raw, slugger) { + heading(text, level, raw) { const headingWithIdRegex = /(.+)\s+{#([\w-]+)}$/; if (headingWithIdRegex.test(text)) { const [, textContent, id] = text.match(headingWithIdRegex); return `${textContent}`; } - return super.heading(text, level, raw, slugger); + return super.heading(text, level, raw); } } +/** @type {import('marked').MarkedOptions} */ const config = { - sanitize: false, gfm: true, - headerIds: false, - langPrefix: "", renderer: new Renderer(), }; diff --git a/tests/spec/core/markdown-spec.js b/tests/spec/core/markdown-spec.js index c720877dd7..4ddf553002 100644 --- a/tests/spec/core/markdown-spec.js +++ b/tests/spec/core/markdown-spec.js @@ -315,9 +315,7 @@ describe("Core - Markdown", () => { expect(webidlBlock.querySelector(".respec-button-copy-paste")).toBeTruthy(); expect(jsBlock.firstElementChild.localName).toBe("code"); - expect( - jsBlock.querySelector("code.hljs").classList.contains("js") - ).toBeTruthy(); + expect(jsBlock.querySelector("code.hljs").classList).toContain("js"); expect(jsBlock.querySelector("code.hljs span")).not.toBeNull(); expect(jsBlock.querySelector(".respec-button-copy-paste")).toBeNull();