Skip to content

Commit abcc7a3

Browse files
committed
fix: removed cheerio and dompurify libraries
1 parent bc714a3 commit abcc7a3

File tree

4 files changed

+17
-62
lines changed

4 files changed

+17
-62
lines changed

package.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
"@babel/preset-env": "^7.22.20",
3838
"@commitlint/cli": "^17.7.1",
3939
"@commitlint/config-conventional": "^17.7.0",
40-
"@types/dompurify": "^3.0.5",
4140
"@types/jest": "^26.0.24",
4241
"babel-core": "^4.7.16",
4342
"babel-jest": "^29.7.0",
@@ -79,9 +78,5 @@
7978
"presets": [
8079
"es2015"
8180
]
82-
},
83-
"dependencies": {
84-
"cheerio": "^1.0.0-rc.12",
85-
"dompurify": "^3.1.1"
8681
}
8782
}

src/helper/regex-match.ts

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,11 @@
1+
const FigureTagRegex = /<\s*figure[^>]*>([^]*?)<\s*\/\s*figure>/g;
2+
13
export function containsFigureTag(content: string): boolean {
2-
const openingTag = '<figure';
3-
const closingTag = '</figure>';
4-
const openingIndex = content.indexOf(openingTag);
5-
const closingIndex = content.indexOf(closingTag);
6-
return openingIndex !== -1 && closingIndex !== -1 && closingIndex > openingIndex;
4+
return countFigureTags(content) > 0;
75
}
86

9-
export function matchFigureTag(content: string): string[] | null {
10-
const matches: string[] = [];
11-
const openingTag = '<figure';
12-
const closingTag = '</figure>';
13-
let startIndex = content.indexOf(openingTag);
14-
while (startIndex !== -1) {
15-
const endIndex = content.indexOf(closingTag, startIndex);
16-
if (endIndex !== -1 && endIndex > startIndex) {
17-
matches.push(content.substring(startIndex, endIndex + closingTag.length));
18-
startIndex = content.indexOf(openingTag, endIndex + closingTag.length);
19-
} else {
20-
console.error('Malformed figure tag found in content');
21-
break;
22-
}
23-
}
24-
return matches.length > 0 ? matches : null;
7+
export function matchFigureTag(content: string): RegExpMatchArray {
8+
return content.match(FigureTagRegex);
259
}
2610

2711
export function countFigureTags(content: string): number {

src/options/default-node-options.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { Next, RenderOption } from ".";
22
import MarkType from "../nodes/mark-type";
33
import Node from "../nodes/node";
44
import NodeType from "../nodes/node-type";
5-
import * as DOMPurify from 'dompurify';
65

76
export const defaultNodeOption: RenderOption = {
87
[NodeType.DOCUMENT]:(node: Node) => {
@@ -12,19 +11,16 @@ export const defaultNodeOption: RenderOption = {
1211
return `<p${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs['class-name'] ? ` class="${node.attrs['class-name']}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``}>${next(node.children)}</p>`
1312
},
1413
[NodeType.LINK]:(node: Node, next: Next) => {
15-
const sanitizedHref = DOMPurify.sanitize(node.attrs.href || node.attrs.url);
1614
if (node.attrs.target) {
17-
return `<a${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs['class-name'] ? ` class="${node.attrs['class-name']}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} href="${sanitizedHref}" target="${node.attrs.target}">${next(node.children)}</a>`
15+
return `<a${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs.class ? ` class="${node.attrs.class}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} href="${node.attrs.href || node.attrs.url}" target="${node.attrs.target}">${next(node.children)}</a>`
1816
}
19-
return `<a${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs['class-name'] ? ` class="${node.attrs['class-name']}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} href="${sanitizedHref}">${next(node.children)}</a>`
17+
return `<a${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs.class ? ` class="${node.attrs.class}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} href="${node.attrs.href || node.attrs.url}">${next(node.children)}</a>`
2018
},
2119
[NodeType.IMAGE]:(node: Node, next: Next) => {
22-
const sanitizedSrc = DOMPurify.sanitize(node.attrs.src || node.attrs.url);
23-
return `<img${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs['class-name'] ? ` class="${node.attrs['class-name']}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} src="${sanitizedSrc}" />${next(node.children)}`
20+
return `<img${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs.class ? ` class="${node.attrs.class}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} src="${node.attrs.src || node.attrs.url}" />${next(node.children)}`
2421
},
2522
[NodeType.EMBED]:(node: Node, next: Next) => {
26-
const sanitizedSrc = DOMPurify.sanitize(node.attrs.src || node.attrs.url);
27-
return `<iframe${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs['class-name'] ? ` class="${node.attrs['class-name']}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} src="${sanitizedSrc}">${next(node.children)}</iframe>`
23+
return `<iframe${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs.class ? ` class="${node.attrs.class}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} src="${node.attrs.src || node.attrs.url}">${next(node.children)}</iframe>`
2824
},
2925
[NodeType.HEADING_1]:(node: Node, next: Next) => {
3026
return `<h1${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs['class-name'] ? ` class="${node.attrs['class-name']}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``}>${next(node.children)}</h1>`
@@ -104,9 +100,8 @@ export const defaultNodeOption: RenderOption = {
104100
},
105101

106102
['reference']:(node: Node, next: Next) => {
107-
const sanitizedAsset = DOMPurify.sanitize(node.attrs['asset-link']);
108103
if (node.attrs.type === 'asset') {
109-
return `<img${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs['class-name'] ? ` class="${node.attrs['class-name']}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} src="${sanitizedAsset}" />`
104+
return `<img${node.attrs.style ? ` style="${node.attrs.style}"` : ``}${node.attrs.class ? ` class="${node.attrs.class}"` : ``}${node.attrs.id ? ` id="${node.attrs.id}"` : ``} src="${node.attrs['asset-link']}" />`
110105
}
111106
return ``
112107
},

src/options/default-options.ts

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,13 @@ import { RenderOption } from '.';
33
import { Metadata } from '../Models/metadata-model';
44
import { EmbeddedItem } from '../Models/embedded-object';
55
import { EntryNode } from '../Models/json-rte-model';
6-
import * as DOMPurify from 'dompurify';
76

87
export const defaultOptions: RenderOption = {
9-
[StyleType.BLOCK]: (item: EmbeddedItem | EntryNode) => {
10-
const title = DOMPurify.sanitize(item.title || item.uid);
11-
const contentTypeUid = DOMPurify.sanitize(item._content_type_uid || (item.system ? item.system.content_type_uid : ''));
12-
return `<div><p>${title}</p><p>Content type: <span>${contentTypeUid}</span></p></div>`;
13-
},
14-
[StyleType.INLINE]: (item: EmbeddedItem | EntryNode) => {
15-
const title = DOMPurify.sanitize(item.title || item.uid);
16-
return `<span>${title}</span>`;
17-
},
18-
[StyleType.LINK]: (item: EmbeddedItem | EntryNode, metadata: Metadata) => {
19-
const url = DOMPurify.sanitize(item.url || 'undefined');
20-
const text = DOMPurify.sanitize(metadata.text || item.title || item.uid || (item.system ? item.system.uid : ''));
21-
return `<a href="${url}">${text}</a>`;
22-
},
23-
[StyleType.DISPLAY]: (item: EmbeddedItem | EntryNode, metadata: Metadata) => {
24-
const url = DOMPurify.sanitize(item.url || 'undefined');
25-
const alt = DOMPurify.sanitize(metadata.attributes.alt || item.title || item.filename || item.uid
26-
|| (item.system ? item.system.uid : ''));
27-
return `<img src="${url}" alt="${alt}" />`;
28-
},
29-
[StyleType.DOWNLOAD]: (item: EmbeddedItem | EntryNode, metadata: Metadata) => {
30-
const href = DOMPurify.sanitize(item.url || 'undefined');
31-
const text = DOMPurify.sanitize(metadata.text || item.title || item.uid || (item.system ? item.system.content_type_uid : ''));
32-
return `<a href="${href}">${text}</a>`;
33-
},
8+
[StyleType.BLOCK]: (item: EmbeddedItem | EntryNode) =>
9+
`<div><p>${item.title || item.uid}</p><p>Content type: <span>${item._content_type_uid || (item.system ? item.system.content_type_uid : '')}</span></p></div>`,
10+
[StyleType.INLINE]: (item: EmbeddedItem | EntryNode) => `<span>${item.title || item.uid}</span>`,
11+
[StyleType.LINK]: (item: EmbeddedItem | EntryNode, metadata: Metadata) => `<a href="${item.url}">${metadata.text || item.title || item.uid || (item.system ? item.system.uid : '')}</a>`,
12+
[StyleType.DISPLAY]: (item: EmbeddedItem | EntryNode, metadata: Metadata) => `<img src="${item.url}" alt="${metadata.attributes.alt || item.title || item.filename || item.uid
13+
|| (item.system ? item.system.uid : '')}" />`,
14+
[StyleType.DOWNLOAD]: (item: EmbeddedItem | EntryNode, metadata: Metadata) => `<a href="${item.url}">${metadata.text || item.title || item.uid || (item.system ? item.system.content_type_uid : '')}</a>`,
3415
};

0 commit comments

Comments
 (0)