Skip to content

feat: add generic types for parser and renderer output#3722

Merged
UziTech merged 4 commits into
markedjs:masterfrom
UziTech:generic-parser
Jul 17, 2025
Merged

feat: add generic types for parser and renderer output#3722
UziTech merged 4 commits into
markedjs:masterfrom
UziTech:generic-parser

Conversation

@UziTech
Copy link
Copy Markdown
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.

@vercel
Copy link
Copy Markdown

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 calculuschild and styfle 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
Comment thread src/Parser.ts
case 'text': {
let textToken = token;
let body = this.renderer.text(textToken);
let body = this.renderer.text(textToken) as string;
Copy link
Copy Markdown
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
Copy Markdown
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.

Comment thread src/defaults.ts
};
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export let _defaults: MarkedOptions<any, any> = _getDefaults();
Copy link
Copy Markdown
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
Copy Markdown
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))
vaernion pushed a commit to Arbeidstilsynet/brevgen2 that referenced this pull request Dec 3, 2025
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| [marked](https://marked.js.org) ([source](https://github.com/markedjs/marked)) | [`15.0.12` -> `16.2.0`](https://renovatebot.com/diffs/npm/marked/15.0.12/16.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/marked/16.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/marked/15.0.12/16.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>markedjs/marked (marked)</summary>

### [`v16.2.0`](https://github.com/markedjs/marked/releases/tag/v16.2.0)

[Compare Source](markedjs/marked@v16.1.2...v16.2.0)

##### Features

- add def token in tokens and renderer ([#&#8203;3745](markedjs/marked#3745)) ([0769124](markedjs/marked@0769124))

### [`v16.1.2`](https://github.com/markedjs/marked/releases/tag/v16.1.2)

[Compare Source](markedjs/marked@v16.1.1...v16.1.2)

##### Bug Fixes

- fix multiline list item adds extra newline to raw ([#&#8203;3735](markedjs/marked#3735)) ([e76453e](markedjs/marked@e76453e))

### [`v16.1.1`](https://github.com/markedjs/marked/releases/tag/v16.1.1)

[Compare Source](markedjs/marked@v16.1.0...v16.1.1)

##### Bug Fixes

- fix stong and em tokens in angle brackets ([#&#8203;3731](markedjs/marked#3731)) ([ad8535c](markedjs/marked@ad8535c))

### [`v16.1.0`](https://github.com/markedjs/marked/releases/tag/v16.1.0)

[Compare Source](markedjs/marked@v16.0.0...v16.1.0)

##### Features

- add generic types for parser and renderer output ([#&#8203;3722](markedjs/marked#3722)) ([39a0ee3](markedjs/marked@39a0ee3))

### [`v16.0.0`](https://github.com/markedjs/marked/releases/tag/v16.0.0)

[Compare Source](markedjs/marked@v15.0.12...v16.0.0)

##### Bug Fixes

- remove cjs build & update min node to 20 ([#&#8203;3687](markedjs/marked#3687)) ([0a35d8f](markedjs/marked@0a35d8f))

##### BREAKING CHANGES

- minify ./lib/marked.esm.js and ./lib/marked.umd.js
- remove ./marked.min.js use ./lib/marked.umd.js instead
- remove ./lib/marked.cjs
- update minimum supported node version to 20 to support `require('marked.esm.js')`. see https://nodejs.org/docs/latest-v20.x/api/modules.html#loading-ecmascript-modules-using-require

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (...
@UziTech UziTech deleted the generic-parser branch March 6, 2026 23:01
Logiclayer1111 pushed a commit to Logiclayer1111/marked that referenced this pull request Apr 20, 2026
# [16.1.0](markedjs/marked@v16.0.0...v16.1.0) (2025-07-17)

### Features

* add generic types for parser and renderer output ([#3722](markedjs/marked#3722)) ([8e2bbf6](markedjs/marked@8e2bbf6))
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