Skip to content

Commit 07a9ed5

Browse files
authored
Add marked 12 support (#512)
1 parent 4edce78 commit 07a9ed5

File tree

7 files changed

+52
-22
lines changed

7 files changed

+52
-22
lines changed

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"editor.codeActionsOnSave": {
3-
"source.fixAll": true
3+
"source.fixAll": "explicit"
44
},
55

66
"files.associations": {

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<img alt="License" src="https://img.shields.io/npm/l/ngx-markdown.svg">
1616
</a>
1717
<br>
18-
<img alt="Dependency Status" src="https://img.shields.io/librariesio/release/npm/ngx-markdown/17.1.0">
18+
<img alt="Dependency Status" src="https://img.shields.io/librariesio/release/npm/ngx-markdown/17.2.0">
1919
<a href="https://www.npmjs.com/package/ngx-markdown">
2020
<img alt="Monthly Downloads" src="https://img.shields.io/npm/dm/ngx-markdown.svg">
2121
</a>
@@ -54,7 +54,7 @@ StackBlitz available @ [https://stackblitz.com/edit/ngx-markdown](https://stackb
5454
To add ngx-markdown along with the required marked library to your `package.json` use the following commands.
5555

5656
```bash
57-
npm install ngx-markdown marked@^9.0.0 --save
57+
npm install ngx-markdown marked@^12.0.0 --save
5858
```
5959

6060
### Syntax highlight

lib/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ngx-markdown",
3-
"version": "17.1.1",
3+
"version": "17.2.0",
44
"description": "Angular library that uses marked to parse markdown to html combined with Prism.js for synthax highlights",
55
"homepage": "https://github.com/jfcere/ngx-markdown",
66
"license": "MIT",
@@ -33,7 +33,7 @@
3333
"@angular/common": "^17.0.0",
3434
"@angular/core": "^17.0.0",
3535
"@angular/platform-browser": "^17.0.0",
36-
"marked": "^9.0.0",
36+
"marked": ">= 9.0.0 < 13.0.0",
3737
"rxjs": "^6.5.3 || ^7.4.0",
3838
"zone.js": "~0.14.0"
3939
},

lib/src/markdown.service.spec.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
errorJoyPixelsNotLoaded,
1717
errorKatexNotLoaded,
1818
errorMermaidNotLoaded,
19+
ExtendedRenderer,
1920
MarkdownService,
2021
ParseOptions,
2122
SECURITY_CONTEXT,
@@ -203,6 +204,25 @@ describe('MarkdownService', () => {
203204
expect(parsed).toBe(marked.parse(mockRaw));
204205
});
205206

207+
it('should not pass extended flags to `marked.use` when parsing', () => {
208+
209+
const mockRaw = '### Markdown-x';
210+
const mockRenderer = new MarkedRenderer();
211+
const mockMarkedOptions: MarkedOptions = { renderer: mockRenderer };
212+
213+
const markedUseSpy = spyOn(marked, 'use');
214+
215+
markdownService.options = mockMarkedOptions;
216+
markdownService.parse(mockRaw, { mermaid: true });
217+
218+
const expectedMockRenderer = { ...mockRenderer } as Partial<ExtendedRenderer>;
219+
delete expectedMockRenderer.ɵNgxMarkdownRendererExtendedForExtensions;
220+
delete expectedMockRenderer.ɵNgxMarkdownRendererExtendedForMermaid;
221+
222+
expect(markedUseSpy).toHaveBeenCalledWith(...mockExtensions);
223+
expect(markedUseSpy).toHaveBeenCalledWith({ renderer: expectedMockRenderer });
224+
});
225+
206226
it('should remove leading whitespaces offset while keeping indent', () => {
207227

208228
const mockRaw = [
@@ -403,8 +423,11 @@ describe('MarkdownService', () => {
403423
markdownService.options = mockMarkedOptions;
404424
markdownService.parse(mockRaw);
405425

406-
expect(markedUseSpy).toHaveBeenCalled();
407-
expect(markedUseSpy).toHaveBeenCalledWith({ renderer: mockRenderer });
426+
const expectedMockRenderer = { ...mockRenderer } as Partial<ExtendedRenderer>;
427+
delete expectedMockRenderer.ɵNgxMarkdownRendererExtendedForExtensions;
428+
429+
expect(markedUseSpy).toHaveBeenCalledWith(...mockExtensions);
430+
expect(markedUseSpy).toHaveBeenCalledWith({ renderer: expectedMockRenderer });
408431
});
409432

410433
it('should return empty string when raw is null/undefined/empty', () => {

lib/src/markdown.service.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,11 +319,18 @@ export class MarkdownService {
319319
}
320320

321321
private parseMarked(html: string, markedOptions: MarkedOptions, inline = false): string | Promise<string> {
322-
// remove renderer from markedOptions because if renderer
323-
// is passed to parse method, it will ignore all extensions
324322
if (markedOptions.renderer) {
325-
marked.use({ renderer: markedOptions.renderer });
323+
// clone renderer and remove extended flags otherwise
324+
// marked throws an error thinking it is a renderer prop
325+
const renderer = { ...markedOptions.renderer } as Partial<ExtendedRenderer>;
326+
delete renderer.ɵNgxMarkdownRendererExtendedForExtensions;
327+
delete renderer.ɵNgxMarkdownRendererExtendedForMermaid;
328+
329+
// remove renderer from markedOptions because if renderer is
330+
// passed to marked.parse method, it will ignore all extensions
326331
delete markedOptions.renderer;
332+
333+
marked.use({ renderer });
327334
}
328335

329336
return inline

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ngx-markdown",
3-
"version": "17.1.1",
3+
"version": "17.2.0",
44
"description": "Angular library that uses marked to parse markdown to html combined with Prism.js for synthax highlights",
55
"homepage": "https://github.com/jfcere/ngx-markdown",
66
"license": "MIT",
@@ -64,8 +64,8 @@
6464
"gumshoejs": "^5.1.2",
6565
"hammerjs": "~2.0.8",
6666
"katex": "^0.16.2",
67-
"marked": "^9.1.2",
68-
"marked-gfm-heading-id": "^3.1.0",
67+
"marked": "^12.0.0",
68+
"marked-gfm-heading-id": "^3.1.3",
6969
"mermaid": "^10.6.0",
7070
"ngx-markdown": "file:lib",
7171
"prismjs": "^1.29.0",

yarn.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8100,17 +8100,17 @@ map-visit@^1.0.0:
81008100
dependencies:
81018101
object-visit "^1.0.0"
81028102

8103-
marked-gfm-heading-id@^3.1.0:
8104-
version "3.1.0"
8105-
resolved "https://registry.yarnpkg.com/marked-gfm-heading-id/-/marked-gfm-heading-id-3.1.0.tgz#f414c987a6d1cac4078829089a8cb01e9a07c005"
8106-
integrity sha512-PYgLXDbL64Ga6kCpvVuKVoIVsV6MKUtkOXnR8mIqyjiycAeKNhQxcGpO0mHEogOTzyY8A8TcK49k5VwYMUCCbg==
8103+
marked-gfm-heading-id@^3.1.3:
8104+
version "3.1.3"
8105+
resolved "https://registry.yarnpkg.com/marked-gfm-heading-id/-/marked-gfm-heading-id-3.1.3.tgz#7bcfea85901843baf214b96ccc4ff67581c972a9"
8106+
integrity sha512-A0cRU4PCueX/5m8VE4mT8uTQ36l3xMYRojz3Eqnk4BmUFZ0T+9Xhn2KvHcANP4qbhfOeuMrWJCTQbASIBR5xeg==
81078107
dependencies:
81088108
github-slugger "^2.0.0"
81098109

8110-
marked@^9.1.2:
8111-
version "9.1.5"
8112-
resolved "https://registry.yarnpkg.com/marked/-/marked-9.1.5.tgz#fcada4702ea64a5c05a4ff0e0639628aac8a1e5f"
8113-
integrity sha512-14QG3shv8Kg/xc0Yh6TNkMj90wXH9mmldi5941I2OevfJ/FQAFLEwtwU2/FfgSAOMlWHrEukWSGQf8MiVYNG2A==
8110+
marked@^12.0.0:
8111+
version "12.0.1"
8112+
resolved "https://registry.yarnpkg.com/marked/-/marked-12.0.1.tgz#8ab1eb15560c7cbe3b011074845d7ca6c4d392b0"
8113+
integrity sha512-Y1/V2yafOcOdWQCX0XpAKXzDakPOpn6U0YLxTJs3cww6VxOzZV1BTOOYWLvH3gX38cq+iLwljHHTnMtlDfg01Q==
81148114

81158115
mdast-util-from-markdown@^1.3.0:
81168116
version "1.3.1"
@@ -8772,7 +8772,7 @@ ng-packagr@^17.0.0:
87728772
esbuild "^0.19.0"
87738773

87748774
"ngx-markdown@file:lib":
8775-
version "17.1.1"
8775+
version "17.2.0"
87768776
dependencies:
87778777
tslib "^2.3.0"
87788778
optionalDependencies:

0 commit comments

Comments
 (0)