Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

UziTech
Copy link
Member

@UziTech UziTech commented Jul 5, 2025

Marked version: 16.0.0

Description

Add Generic types for parser and renderer output. This allows for parsers that output something other than an html string.

See UziTech/marked-html-renderer#9 for an example on how this can be used to output HTML elements.

Contributor

  • Test(s) exist to ensure functionality and minimize regression (if no tests added, list tests covering this PR); or,
  • no tests required for this PR.
  • If submitting new feature, it has been documented in the appropriate places.

Committer

In most cases, this should be a different person than the contributor.

Copy link

vercel bot commented Jul 5, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
marked-website ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 5, 2025 6:03am

@UziTech UziTech requested review from styfle and calculuschild July 5, 2025 06:04
@UziTech UziTech changed the title fix: add generic types for parser and renderer output feat: add generic types for parser and renderer output Jul 5, 2025
@@ -96,10 +96,10 @@ export class _Parser {
}
case 'text': {
let textToken = token;
let body = this.renderer.text(textToken);
let body = this.renderer.text(textToken) as string;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This as string seems like the types are wrong. Is there a way to improve it so we don't need the assertion 🤔

Copy link
Member Author

@UziTech UziTech Jul 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is needed because the renderer is generic so at this point this.renderer.test() could return any type. We are assuming that the RendererOutput applies to all renderer functions so the user will have to change every function (including this one) if they want to return something other than a string. The correct way to type this would be to have a generic param for every renderer function. I feel like that is a bit overkill.

@@ -17,9 +17,9 @@ export function _getDefaults(): MarkedOptions {
walkTokens: null,
};
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export let _defaults: MarkedOptions<any, any> = _getDefaults();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why any? Is that because we don't want to pass in generic types to _getDefaults()?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we mark this as anything else then _defaults would have to stay that type. But because we can specify different types for some options this has to be any because it can be anything.

@UziTech UziTech merged commit 39a0ee3 into markedjs:master Jul 17, 2025
8 checks passed
github-actions bot pushed a commit that referenced this pull request Jul 17, 2025
# [16.1.0](v16.0.0...v16.1.0) (2025-07-17)

### Features

* add generic types for parser and renderer output ([#3722](#3722)) ([39a0ee3](39a0ee3))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants