html-react-parser 6.0.1 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -13
- package/dist/html-react-parser.js +186 -168
- package/dist/html-react-parser.js.map +1 -1
- package/dist/html-react-parser.min.js +1 -1
- package/dist/html-react-parser.min.js.map +1 -1
- package/lib/dom-to-react.d.ts.map +1 -1
- package/lib/dom-to-react.js +12 -0
- package/lib/dom-to-react.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +2 -1
- package/lib/types.d.ts.map +1 -1
- package/package.json +22 -22
- package/src/dom-to-react.ts +16 -0
- package/src/index.ts +6 -4
- package/src/types.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-to-react.d.ts","sourceRoot":"","sources":["../src/dom-to-react.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dom-to-react.d.ts","sourceRoot":"","sources":["../src/dom-to-react.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAKjC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAetD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,KAAK,EAAE,OAAO,EAAE,EAChB,OAAO,GAAE,sBAA2B,GACnC,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAuHtC"}
|
package/lib/dom-to-react.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
};
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.default = domToReact;
|
|
8
|
+
const domhandler_1 = require("domhandler");
|
|
8
9
|
const react_1 = require("react");
|
|
9
10
|
const attributes_to_props_1 = __importDefault(require("./attributes-to-props"));
|
|
10
11
|
const utilities_1 = require("./utilities");
|
|
@@ -27,6 +28,7 @@ function domToReact(nodes, options = {}) {
|
|
|
27
28
|
const transform = (_a = options.transform) !== null && _a !== void 0 ? _a : utilities_1.returnFirstArg;
|
|
28
29
|
const { cloneElement, createElement, isValidElement } = (_b = options.library) !== null && _b !== void 0 ? _b : React;
|
|
29
30
|
const nodesLength = nodes.length;
|
|
31
|
+
normalizeDOMNodes(nodes);
|
|
30
32
|
for (let index = 0; index < nodesLength; index++) {
|
|
31
33
|
const node = nodes[index];
|
|
32
34
|
// replace with custom React element (if present)
|
|
@@ -110,6 +112,16 @@ function domToReact(nodes, options = {}) {
|
|
|
110
112
|
}
|
|
111
113
|
return reactElements.length === 1 ? reactElements[0] : reactElements;
|
|
112
114
|
}
|
|
115
|
+
function normalizeDOMNodes(nodes) {
|
|
116
|
+
for (const node of nodes) {
|
|
117
|
+
if (node.type === 'tag' ||
|
|
118
|
+
node.type === 'script' ||
|
|
119
|
+
node.type === 'style') {
|
|
120
|
+
Object.setPrototypeOf(node, domhandler_1.Element.prototype);
|
|
121
|
+
normalizeDOMNodes(node.children);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
113
125
|
/**
|
|
114
126
|
* Determines whether DOM element attributes should be transformed to props.
|
|
115
127
|
* Web Components should not have their attributes transformed except for `style`.
|
package/lib/dom-to-react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-to-react.js","sourceRoot":"","sources":["../src/dom-to-react.ts"],"names":[],"mappings":";AAAA,iEAAiE;;;;;
|
|
1
|
+
{"version":3,"file":"dom-to-react.js","sourceRoot":"","sources":["../src/dom-to-react.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AACtD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC3E,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,YAAY,EAAE,sBAAsB,EAAE,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAIpD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,sBAAsB,GAC/B,UAAU,CAAC,OAAO,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AACtD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC3E,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,YAAY,EAAE,sBAAsB,EAAE,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAIpD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,sBAAsB,GAC/B,UAAU,CAAC,OAAO,UAAU,CAAC,CAe/B"}
|
package/lib/index.js
CHANGED
|
@@ -32,6 +32,7 @@ function HTMLReactParser(html, options) {
|
|
|
32
32
|
if (!html) {
|
|
33
33
|
return [];
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
const htmlToDOMOptions = Object.assign(Object.assign({}, ((_a = options === null || options === void 0 ? void 0 : options.htmlparser2) !== null && _a !== void 0 ? _a : domParserOptions)), { trustedTypePolicy: options === null || options === void 0 ? void 0 : options.trustedTypePolicy });
|
|
36
|
+
return (0, dom_to_react_1.default)((0, html_dom_parser_1.default)(html, htmlToDOMOptions), options);
|
|
36
37
|
}
|
|
37
38
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAqBA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAqBA,kCAkBC;AAvCD,sEAAwC;AAUA,oBAVjC,yBAAS,CAUiC;AARjD,gFAAsD;AAQ7C,4BARF,6BAAiB,CAQE;AAP1B,kEAAwC;AAOZ,qBAPrB,sBAAU,CAOqB;AAJtC,yCAA2E;AAAlE,qGAAA,OAAO,OAAA;AAAE,qGAAA,OAAO,OAAA;AAAE,mHAAA,qBAAqB,OAAA;AAAE,kGAAA,IAAI,OAAA;AAMtD,MAAM,gBAAgB,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAW,CAAC;AAErE;;;;;;GAMG;AACH,SAAwB,eAAe,CACrC,IAAY,EACZ,OAAgC;;IAEhC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,gBAAgB,mCACjB,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,mCAAI,gBAAgB,CAAC,KAC7C,iBAAiB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,GAC9C,CAAC;IAEF,OAAO,IAAA,sBAAU,EAAC,IAAA,yBAAS,EAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC"}
|
package/lib/types.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { DomHandlerOptions } from 'domhandler';
|
|
2
|
-
import type { DOMNode } from 'html-dom-parser';
|
|
2
|
+
import type { DOMNode, TrustedTypePolicy } from 'html-dom-parser';
|
|
3
3
|
import type { ParserOptions } from 'htmlparser2';
|
|
4
4
|
import type { JSX, ReactNode } from 'react';
|
|
5
5
|
export interface HTMLReactParserOptions {
|
|
6
6
|
htmlparser2?: ParserOptions & DomHandlerOptions;
|
|
7
|
+
trustedTypePolicy?: TrustedTypePolicy;
|
|
7
8
|
library?: {
|
|
8
9
|
cloneElement: (element: JSX.Element, props?: object, ...children: any[]) => JSX.Element;
|
|
9
10
|
createElement: (type: any, props?: object, ...children: any[]) => JSX.Element;
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC;IAChD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC,OAAO,CAAC,EAAE;QAER,YAAY,EAAE,CACZ,OAAO,EAAE,GAAG,CAAC,OAAO,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,QAAQ,EAAE,GAAG,EAAE,KACf,GAAG,CAAC,OAAO,CAAC;QAEjB,aAAa,EAAE,CACb,IAAI,EAAE,GAAG,EACT,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,QAAQ,EAAE,GAAG,EAAE,KACf,GAAG,CAAC,OAAO,CAAC;QAEjB,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC;QAE1C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAEpB,CAAC;IAEF,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,KAEV,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IAE3D,SAAS,CAAC,EAAE,CACV,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,KAEV,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAExC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "html-react-parser",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.1.1",
|
|
4
4
|
"description": "HTML to React parser.",
|
|
5
5
|
"author": "Mark <mark@remarkablemark.org> (https://remarkabl.org)",
|
|
6
6
|
"funding": [
|
|
@@ -61,47 +61,47 @@
|
|
|
61
61
|
],
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"domhandler": "6.0.1",
|
|
64
|
-
"html-dom-parser": "7.0
|
|
64
|
+
"html-dom-parser": "7.1.0",
|
|
65
65
|
"react-property": "2.0.2",
|
|
66
66
|
"style-to-js": "1.1.21"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@
|
|
70
|
-
"@commitlint/
|
|
71
|
-
"@
|
|
69
|
+
"@arethetypeswrong/cli": "0.18.2",
|
|
70
|
+
"@commitlint/cli": "21.0.1",
|
|
71
|
+
"@commitlint/config-conventional": "21.0.1",
|
|
72
72
|
"@eslint/eslintrc": "3.3.5",
|
|
73
73
|
"@eslint/js": "10.0.1",
|
|
74
74
|
"@rollup/plugin-commonjs": "29.0.2",
|
|
75
75
|
"@rollup/plugin-node-resolve": "16.0.3",
|
|
76
76
|
"@rollup/plugin-terser": "1.0.0",
|
|
77
77
|
"@rollup/plugin-typescript": "12.3.0",
|
|
78
|
-
"@size-limit/preset-big-lib": "12.0
|
|
78
|
+
"@size-limit/preset-big-lib": "12.1.0",
|
|
79
79
|
"@types/benchmark": "2.1.5",
|
|
80
|
-
"@types/node": "25.
|
|
80
|
+
"@types/node": "25.8.0",
|
|
81
81
|
"@types/react": "19.2.14",
|
|
82
82
|
"@types/react-dom": "19.2.3",
|
|
83
|
-
"@vitest/browser": "4.1.
|
|
84
|
-
"@vitest/browser-playwright": "4.1.
|
|
85
|
-
"@vitest/coverage-v8": "4.1.
|
|
83
|
+
"@vitest/browser": "4.1.6",
|
|
84
|
+
"@vitest/browser-playwright": "4.1.6",
|
|
85
|
+
"@vitest/coverage-v8": "4.1.6",
|
|
86
86
|
"benchmark": "2.1.4",
|
|
87
|
-
"eslint": "10.
|
|
87
|
+
"eslint": "10.4.0",
|
|
88
88
|
"eslint-plugin-prettier": "5.5.5",
|
|
89
89
|
"eslint-plugin-simple-import-sort": "13.0.0",
|
|
90
90
|
"eslint-plugin-tsdoc": "0.5.2",
|
|
91
|
-
"globals": "17.
|
|
91
|
+
"globals": "17.6.0",
|
|
92
92
|
"husky": "9.1.7",
|
|
93
|
-
"lint-staged": "
|
|
94
|
-
"playwright": "1.
|
|
93
|
+
"lint-staged": "17.0.4",
|
|
94
|
+
"playwright": "1.60.0",
|
|
95
95
|
"preact": "10.29.1",
|
|
96
|
-
"publint": "0.3.
|
|
97
|
-
"react": "19.2.
|
|
98
|
-
"react-dom": "19.2.
|
|
99
|
-
"rollup": "4.60.
|
|
100
|
-
"size-limit": "12.0
|
|
96
|
+
"publint": "0.3.21",
|
|
97
|
+
"react": "19.2.6",
|
|
98
|
+
"react-dom": "19.2.6",
|
|
99
|
+
"rollup": "4.60.4",
|
|
100
|
+
"size-limit": "12.1.0",
|
|
101
101
|
"ts-node": "10.9.2",
|
|
102
|
-
"typescript": "6.0.
|
|
103
|
-
"typescript-eslint": "8.
|
|
104
|
-
"vitest": "4.1.
|
|
102
|
+
"typescript": "6.0.3",
|
|
103
|
+
"typescript-eslint": "8.59.3",
|
|
104
|
+
"vitest": "4.1.6"
|
|
105
105
|
},
|
|
106
106
|
"peerDependencies": {
|
|
107
107
|
"@types/react": "0.14 || 15 || 16 || 17 || 18 || 19",
|
package/src/dom-to-react.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */
|
|
2
2
|
|
|
3
|
+
import { Element as DomHandlerElement } from 'domhandler';
|
|
3
4
|
import type { DOMNode, Element, Text } from 'html-dom-parser';
|
|
4
5
|
import type { JSX } from 'react';
|
|
5
6
|
import { cloneElement, createElement, isValidElement } from 'react';
|
|
@@ -41,6 +42,8 @@ export default function domToReact(
|
|
|
41
42
|
|
|
42
43
|
const nodesLength = nodes.length;
|
|
43
44
|
|
|
45
|
+
normalizeDOMNodes(nodes);
|
|
46
|
+
|
|
44
47
|
for (let index = 0; index < nodesLength; index++) {
|
|
45
48
|
const node = nodes[index];
|
|
46
49
|
|
|
@@ -150,6 +153,19 @@ export default function domToReact(
|
|
|
150
153
|
return reactElements.length === 1 ? reactElements[0] : reactElements;
|
|
151
154
|
}
|
|
152
155
|
|
|
156
|
+
function normalizeDOMNodes(nodes: DOMNode[]): void {
|
|
157
|
+
for (const node of nodes) {
|
|
158
|
+
if (
|
|
159
|
+
node.type === 'tag' ||
|
|
160
|
+
node.type === 'script' ||
|
|
161
|
+
node.type === 'style'
|
|
162
|
+
) {
|
|
163
|
+
Object.setPrototypeOf(node, DomHandlerElement.prototype);
|
|
164
|
+
normalizeDOMNodes(node.children as DOMNode[]);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
153
169
|
/**
|
|
154
170
|
* Determines whether DOM element attributes should be transformed to props.
|
|
155
171
|
* Web Components should not have their attributes transformed except for `style`.
|
package/src/index.ts
CHANGED
|
@@ -31,8 +31,10 @@ export default function HTMLReactParser(
|
|
|
31
31
|
return [];
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
options,
|
|
37
|
-
|
|
34
|
+
const htmlToDOMOptions = {
|
|
35
|
+
...(options?.htmlparser2 ?? domParserOptions),
|
|
36
|
+
trustedTypePolicy: options?.trustedTypePolicy,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return domToReact(htmlToDOM(html, htmlToDOMOptions), options);
|
|
38
40
|
}
|
package/src/types.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { DomHandlerOptions } from 'domhandler';
|
|
2
|
-
import type { DOMNode } from 'html-dom-parser';
|
|
2
|
+
import type { DOMNode, TrustedTypePolicy } from 'html-dom-parser';
|
|
3
3
|
import type { ParserOptions } from 'htmlparser2';
|
|
4
4
|
import type { JSX, ReactNode } from 'react';
|
|
5
5
|
|
|
6
6
|
export interface HTMLReactParserOptions {
|
|
7
7
|
htmlparser2?: ParserOptions & DomHandlerOptions;
|
|
8
|
+
trustedTypePolicy?: TrustedTypePolicy;
|
|
8
9
|
|
|
9
10
|
library?: {
|
|
10
11
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|