markedjs / marked

A markdown parser and compiler. Built for speed.
https://marked.js.org
Other
32.32k stars 3.36k forks source link

Renderer extension documentation seems incorrect? #3338

Closed nicojs closed 1 week ago

nicojs commented 2 weeks ago

Marked version:

13.0.0

Describe the bug

When implementing a renderer plugin the types seem to be incorrect. They are specified to be of type Tokens.Thing, but they seem to be strings in practise. See animated gif below:

marked-types

To Reproduce

mkdir tmp
cd tmp
npm init --yes
npm i marked
touch main.js
// @ts-check
import { marked } from "marked";
marked.use({
  renderer: {
    code(code) {
      return `<pre><code class="language-">${code}</code></pre>`;
    },
    html(token) {
        return token.raw;
    }
  },
});

console.log(
  marked(`
    # hello world

    \`\`\`js
    console.log('hello world');
    \`\`\`

<test>

test

</test>
`)
);

Expected behavior

Correct type inference

UziTech commented 2 weeks ago

The new rendering style requires useNewRenderer: true so old extensions can opt in.

marked.use({
  useNewRenderer: true,
  renderer: {
    code(token) {
      return `<pre><code class="language-">${token.text}</code></pre>`;
    },
    html(token) {
        return token.raw;
    }
  },
});