happy-dom 14.7.0 → 14.7.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.

Potentially problematic release.


This version of happy-dom might be problematic. Click here for more details.

Files changed (217) hide show
  1. package/cjs/PropertySymbol.cjs +6 -1
  2. package/cjs/PropertySymbol.cjs.map +1 -1
  3. package/cjs/PropertySymbol.d.ts +5 -0
  4. package/cjs/PropertySymbol.d.ts.map +1 -1
  5. package/cjs/nodes/character-data/CharacterData.cjs +2 -7
  6. package/cjs/nodes/character-data/CharacterData.cjs.map +1 -1
  7. package/cjs/nodes/character-data/CharacterData.d.ts +2 -5
  8. package/cjs/nodes/character-data/CharacterData.d.ts.map +1 -1
  9. package/cjs/nodes/comment/Comment.cjs +2 -7
  10. package/cjs/nodes/comment/Comment.cjs.map +1 -1
  11. package/cjs/nodes/comment/Comment.d.ts +2 -5
  12. package/cjs/nodes/comment/Comment.d.ts.map +1 -1
  13. package/cjs/nodes/document/Document.cjs +6 -13
  14. package/cjs/nodes/document/Document.cjs.map +1 -1
  15. package/cjs/nodes/document/Document.d.ts +5 -8
  16. package/cjs/nodes/document/Document.d.ts.map +1 -1
  17. package/cjs/nodes/document-fragment/DocumentFragment.cjs +5 -13
  18. package/cjs/nodes/document-fragment/DocumentFragment.cjs.map +1 -1
  19. package/cjs/nodes/document-fragment/DocumentFragment.d.ts +5 -8
  20. package/cjs/nodes/document-fragment/DocumentFragment.d.ts.map +1 -1
  21. package/cjs/nodes/document-type/DocumentType.cjs +2 -7
  22. package/cjs/nodes/document-type/DocumentType.cjs.map +1 -1
  23. package/cjs/nodes/document-type/DocumentType.d.ts +2 -5
  24. package/cjs/nodes/document-type/DocumentType.d.ts.map +1 -1
  25. package/cjs/nodes/element/Element.cjs +5 -13
  26. package/cjs/nodes/element/Element.cjs.map +1 -1
  27. package/cjs/nodes/element/Element.d.ts +5 -8
  28. package/cjs/nodes/element/Element.d.ts.map +1 -1
  29. package/cjs/nodes/html-base-element/HTMLBaseElement.cjs +2 -6
  30. package/cjs/nodes/html-base-element/HTMLBaseElement.cjs.map +1 -1
  31. package/cjs/nodes/html-base-element/HTMLBaseElement.d.ts +3 -5
  32. package/cjs/nodes/html-base-element/HTMLBaseElement.d.ts.map +1 -1
  33. package/cjs/nodes/html-element/HTMLElement.cjs +3 -3
  34. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  35. package/cjs/nodes/html-element/HTMLElement.d.ts +2 -1
  36. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  37. package/cjs/nodes/html-form-element/HTMLFormElement.cjs +3 -7
  38. package/cjs/nodes/html-form-element/HTMLFormElement.cjs.map +1 -1
  39. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts +2 -5
  40. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  41. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +2 -6
  42. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  43. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts +2 -5
  44. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  45. package/cjs/nodes/html-image-element/HTMLImageElement.cjs +2 -7
  46. package/cjs/nodes/html-image-element/HTMLImageElement.cjs.map +1 -1
  47. package/cjs/nodes/html-image-element/HTMLImageElement.d.ts +2 -5
  48. package/cjs/nodes/html-image-element/HTMLImageElement.d.ts.map +1 -1
  49. package/cjs/nodes/html-input-element/HTMLInputElement.cjs +3 -7
  50. package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
  51. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts +2 -5
  52. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  53. package/cjs/nodes/html-label-element/HTMLLabelElement.cjs +2 -6
  54. package/cjs/nodes/html-label-element/HTMLLabelElement.cjs.map +1 -1
  55. package/cjs/nodes/html-label-element/HTMLLabelElement.d.ts +3 -5
  56. package/cjs/nodes/html-label-element/HTMLLabelElement.d.ts.map +1 -1
  57. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs +2 -11
  58. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs.map +1 -1
  59. package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts +2 -9
  60. package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  61. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +3 -7
  62. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
  63. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts +2 -5
  64. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  65. package/cjs/nodes/html-slot-element/HTMLSlotElement.cjs +2 -6
  66. package/cjs/nodes/html-slot-element/HTMLSlotElement.cjs.map +1 -1
  67. package/cjs/nodes/html-slot-element/HTMLSlotElement.d.ts +3 -5
  68. package/cjs/nodes/html-slot-element/HTMLSlotElement.d.ts.map +1 -1
  69. package/cjs/nodes/html-style-element/HTMLStyleElement.cjs +7 -7
  70. package/cjs/nodes/html-style-element/HTMLStyleElement.cjs.map +1 -1
  71. package/cjs/nodes/html-style-element/HTMLStyleElement.d.ts +3 -3
  72. package/cjs/nodes/html-style-element/HTMLStyleElement.d.ts.map +1 -1
  73. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs +6 -7
  74. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs.map +1 -1
  75. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts +6 -5
  76. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  77. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +3 -7
  78. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
  79. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +2 -5
  80. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  81. package/cjs/nodes/node/Node.cjs +54 -7
  82. package/cjs/nodes/node/Node.cjs.map +1 -1
  83. package/cjs/nodes/node/Node.d.ts +37 -0
  84. package/cjs/nodes/node/Node.d.ts.map +1 -1
  85. package/cjs/nodes/shadow-root/ShadowRoot.cjs +2 -7
  86. package/cjs/nodes/shadow-root/ShadowRoot.cjs.map +1 -1
  87. package/cjs/nodes/shadow-root/ShadowRoot.d.ts +2 -5
  88. package/cjs/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  89. package/cjs/nodes/svg-element/SVGSVGElement.cjs +26 -6
  90. package/cjs/nodes/svg-element/SVGSVGElement.cjs.map +1 -1
  91. package/cjs/nodes/svg-element/SVGSVGElement.d.ts +3 -5
  92. package/cjs/nodes/svg-element/SVGSVGElement.d.ts.map +1 -1
  93. package/cjs/nodes/text/Text.cjs +3 -7
  94. package/cjs/nodes/text/Text.cjs.map +1 -1
  95. package/cjs/nodes/text/Text.d.ts +2 -5
  96. package/cjs/nodes/text/Text.d.ts.map +1 -1
  97. package/lib/PropertySymbol.d.ts +5 -0
  98. package/lib/PropertySymbol.d.ts.map +1 -1
  99. package/lib/PropertySymbol.js +5 -0
  100. package/lib/PropertySymbol.js.map +1 -1
  101. package/lib/nodes/character-data/CharacterData.d.ts +2 -5
  102. package/lib/nodes/character-data/CharacterData.d.ts.map +1 -1
  103. package/lib/nodes/character-data/CharacterData.js +3 -9
  104. package/lib/nodes/character-data/CharacterData.js.map +1 -1
  105. package/lib/nodes/comment/Comment.d.ts +2 -5
  106. package/lib/nodes/comment/Comment.d.ts.map +1 -1
  107. package/lib/nodes/comment/Comment.js +3 -9
  108. package/lib/nodes/comment/Comment.js.map +1 -1
  109. package/lib/nodes/document/Document.d.ts +5 -8
  110. package/lib/nodes/document/Document.d.ts.map +1 -1
  111. package/lib/nodes/document/Document.js +6 -13
  112. package/lib/nodes/document/Document.js.map +1 -1
  113. package/lib/nodes/document-fragment/DocumentFragment.d.ts +5 -8
  114. package/lib/nodes/document-fragment/DocumentFragment.d.ts.map +1 -1
  115. package/lib/nodes/document-fragment/DocumentFragment.js +6 -15
  116. package/lib/nodes/document-fragment/DocumentFragment.js.map +1 -1
  117. package/lib/nodes/document-type/DocumentType.d.ts +2 -5
  118. package/lib/nodes/document-type/DocumentType.d.ts.map +1 -1
  119. package/lib/nodes/document-type/DocumentType.js +3 -9
  120. package/lib/nodes/document-type/DocumentType.js.map +1 -1
  121. package/lib/nodes/element/Element.d.ts +5 -8
  122. package/lib/nodes/element/Element.d.ts.map +1 -1
  123. package/lib/nodes/element/Element.js +5 -13
  124. package/lib/nodes/element/Element.js.map +1 -1
  125. package/lib/nodes/html-base-element/HTMLBaseElement.d.ts +3 -5
  126. package/lib/nodes/html-base-element/HTMLBaseElement.d.ts.map +1 -1
  127. package/lib/nodes/html-base-element/HTMLBaseElement.js +2 -6
  128. package/lib/nodes/html-base-element/HTMLBaseElement.js.map +1 -1
  129. package/lib/nodes/html-element/HTMLElement.d.ts +2 -1
  130. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  131. package/lib/nodes/html-element/HTMLElement.js +3 -3
  132. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  133. package/lib/nodes/html-form-element/HTMLFormElement.d.ts +2 -5
  134. package/lib/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  135. package/lib/nodes/html-form-element/HTMLFormElement.js +3 -7
  136. package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
  137. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts +2 -5
  138. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  139. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +2 -6
  140. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  141. package/lib/nodes/html-image-element/HTMLImageElement.d.ts +2 -5
  142. package/lib/nodes/html-image-element/HTMLImageElement.d.ts.map +1 -1
  143. package/lib/nodes/html-image-element/HTMLImageElement.js +3 -9
  144. package/lib/nodes/html-image-element/HTMLImageElement.js.map +1 -1
  145. package/lib/nodes/html-input-element/HTMLInputElement.d.ts +2 -5
  146. package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  147. package/lib/nodes/html-input-element/HTMLInputElement.js +3 -7
  148. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  149. package/lib/nodes/html-label-element/HTMLLabelElement.d.ts +3 -5
  150. package/lib/nodes/html-label-element/HTMLLabelElement.d.ts.map +1 -1
  151. package/lib/nodes/html-label-element/HTMLLabelElement.js +2 -6
  152. package/lib/nodes/html-label-element/HTMLLabelElement.js.map +1 -1
  153. package/lib/nodes/html-media-element/HTMLMediaElement.d.ts +2 -9
  154. package/lib/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  155. package/lib/nodes/html-media-element/HTMLMediaElement.js +3 -13
  156. package/lib/nodes/html-media-element/HTMLMediaElement.js.map +1 -1
  157. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts +2 -5
  158. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  159. package/lib/nodes/html-script-element/HTMLScriptElement.js +3 -7
  160. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  161. package/lib/nodes/html-slot-element/HTMLSlotElement.d.ts +3 -5
  162. package/lib/nodes/html-slot-element/HTMLSlotElement.d.ts.map +1 -1
  163. package/lib/nodes/html-slot-element/HTMLSlotElement.js +2 -6
  164. package/lib/nodes/html-slot-element/HTMLSlotElement.js.map +1 -1
  165. package/lib/nodes/html-style-element/HTMLStyleElement.d.ts +3 -3
  166. package/lib/nodes/html-style-element/HTMLStyleElement.d.ts.map +1 -1
  167. package/lib/nodes/html-style-element/HTMLStyleElement.js +7 -7
  168. package/lib/nodes/html-style-element/HTMLStyleElement.js.map +1 -1
  169. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts +6 -5
  170. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  171. package/lib/nodes/html-template-element/HTMLTemplateElement.js +7 -9
  172. package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
  173. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts +2 -5
  174. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  175. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +3 -7
  176. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  177. package/lib/nodes/node/Node.d.ts +37 -0
  178. package/lib/nodes/node/Node.d.ts.map +1 -1
  179. package/lib/nodes/node/Node.js +54 -7
  180. package/lib/nodes/node/Node.js.map +1 -1
  181. package/lib/nodes/shadow-root/ShadowRoot.d.ts +2 -5
  182. package/lib/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  183. package/lib/nodes/shadow-root/ShadowRoot.js +3 -9
  184. package/lib/nodes/shadow-root/ShadowRoot.js.map +1 -1
  185. package/lib/nodes/svg-element/SVGSVGElement.d.ts +3 -5
  186. package/lib/nodes/svg-element/SVGSVGElement.d.ts.map +1 -1
  187. package/lib/nodes/svg-element/SVGSVGElement.js +3 -6
  188. package/lib/nodes/svg-element/SVGSVGElement.js.map +1 -1
  189. package/lib/nodes/text/Text.d.ts +2 -5
  190. package/lib/nodes/text/Text.d.ts.map +1 -1
  191. package/lib/nodes/text/Text.js +3 -7
  192. package/lib/nodes/text/Text.js.map +1 -1
  193. package/package.json +1 -1
  194. package/src/PropertySymbol.ts +5 -0
  195. package/src/nodes/character-data/CharacterData.ts +3 -6
  196. package/src/nodes/comment/Comment.ts +3 -6
  197. package/src/nodes/document/Document.ts +6 -15
  198. package/src/nodes/document-fragment/DocumentFragment.ts +6 -15
  199. package/src/nodes/document-type/DocumentType.ts +3 -6
  200. package/src/nodes/element/Element.ts +6 -15
  201. package/src/nodes/html-base-element/HTMLBaseElement.ts +3 -6
  202. package/src/nodes/html-element/HTMLElement.ts +5 -2
  203. package/src/nodes/html-form-element/HTMLFormElement.ts +5 -6
  204. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +6 -6
  205. package/src/nodes/html-image-element/HTMLImageElement.ts +3 -6
  206. package/src/nodes/html-input-element/HTMLInputElement.ts +5 -6
  207. package/src/nodes/html-label-element/HTMLLabelElement.ts +5 -6
  208. package/src/nodes/html-media-element/HTMLMediaElement.ts +5 -10
  209. package/src/nodes/html-script-element/HTMLScriptElement.ts +5 -6
  210. package/src/nodes/html-slot-element/HTMLSlotElement.ts +5 -6
  211. package/src/nodes/html-style-element/HTMLStyleElement.ts +6 -6
  212. package/src/nodes/html-template-element/HTMLTemplateElement.ts +10 -7
  213. package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +4 -6
  214. package/src/nodes/node/Node.ts +61 -9
  215. package/src/nodes/shadow-root/ShadowRoot.ts +5 -6
  216. package/src/nodes/svg-element/SVGSVGElement.ts +6 -6
  217. package/src/nodes/text/Text.ts +3 -6
@@ -82,8 +82,8 @@ export default class HTMLStyleElement extends HTMLElement {
82
82
  /**
83
83
  * @override
84
84
  */
85
- public override appendChild(node: Node): Node {
86
- const returnValue = super.appendChild(node);
85
+ public override [PropertySymbol.appendChild](node: Node): Node {
86
+ const returnValue = super[PropertySymbol.appendChild](node);
87
87
  if (this[PropertySymbol.sheet]) {
88
88
  this[PropertySymbol.sheet].replaceSync(this.textContent);
89
89
  }
@@ -93,8 +93,8 @@ export default class HTMLStyleElement extends HTMLElement {
93
93
  /**
94
94
  * @override
95
95
  */
96
- public override removeChild(node: Node): Node {
97
- const returnValue = super.removeChild(node);
96
+ public override [PropertySymbol.removeChild](node: Node): Node {
97
+ const returnValue = super[PropertySymbol.removeChild](node);
98
98
  if (this[PropertySymbol.sheet]) {
99
99
  this[PropertySymbol.sheet].replaceSync(this.textContent);
100
100
  }
@@ -104,8 +104,8 @@ export default class HTMLStyleElement extends HTMLElement {
104
104
  /**
105
105
  * @override
106
106
  */
107
- public override insertBefore(newNode: Node, referenceNode: Node | null): Node {
108
- const returnValue = super.insertBefore(newNode, referenceNode);
107
+ public override [PropertySymbol.insertBefore](newNode: Node, referenceNode: Node | null): Node {
108
+ const returnValue = super[PropertySymbol.insertBefore](newNode, referenceNode);
109
109
  if (this[PropertySymbol.sheet]) {
110
110
  this[PropertySymbol.sheet].replaceSync(this.textContent);
111
111
  }
@@ -12,6 +12,9 @@ import XMLParser from '../../xml-parser/XMLParser.js';
12
12
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLTemplateElement.
13
13
  */
14
14
  export default class HTMLTemplateElement extends HTMLElement {
15
+ // Public properties
16
+ public cloneNode: (deep?: boolean) => HTMLTemplateElement;
17
+
15
18
  // Internal properties
16
19
  public [PropertySymbol.content]: DocumentFragment =
17
20
  this[PropertySymbol.ownerDocument].createDocumentFragment();
@@ -80,37 +83,37 @@ export default class HTMLTemplateElement extends HTMLElement {
80
83
  /**
81
84
  * @override
82
85
  */
83
- public appendChild(node: Node): Node {
86
+ public override [PropertySymbol.appendChild](node: Node): Node {
84
87
  return this[PropertySymbol.content].appendChild(node);
85
88
  }
86
89
 
87
90
  /**
88
91
  * @override
89
92
  */
90
- public removeChild(node: Node): Node {
93
+ public override [PropertySymbol.removeChild](node: Node): Node {
91
94
  return this[PropertySymbol.content].removeChild(node);
92
95
  }
93
96
 
94
97
  /**
95
98
  * @override
96
99
  */
97
- public insertBefore(newNode: Node, referenceNode: Node): Node {
100
+ public override [PropertySymbol.insertBefore](newNode: Node, referenceNode: Node): Node {
98
101
  return this[PropertySymbol.content].insertBefore(newNode, referenceNode);
99
102
  }
100
103
 
101
104
  /**
102
105
  * @override
103
106
  */
104
- public replaceChild(newChild: Node, oldChild: Node): Node {
107
+ public override [PropertySymbol.replaceChild](newChild: Node, oldChild: Node): Node {
105
108
  return this[PropertySymbol.content].replaceChild(newChild, oldChild);
106
109
  }
107
110
 
108
111
  /**
109
112
  * @override
110
113
  */
111
- public cloneNode(deep = false): HTMLTemplateElement {
112
- const clone = <HTMLTemplateElement>super.cloneNode(deep);
113
- clone[PropertySymbol.content] = this[PropertySymbol.content].cloneNode(deep);
114
+ public override [PropertySymbol.cloneNode](deep = false): HTMLTemplateElement {
115
+ const clone = <HTMLTemplateElement>super[PropertySymbol.cloneNode](deep);
116
+ clone[PropertySymbol.content] = <DocumentFragment>this[PropertySymbol.content].cloneNode(deep);
114
117
  return clone;
115
118
  }
116
119
  }
@@ -21,6 +21,8 @@ import HTMLTextAreaElementNamedNodeMap from './HTMLTextAreaElementNamedNodeMap.j
21
21
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.
22
22
  */
23
23
  export default class HTMLTextAreaElement extends HTMLElement {
24
+ // Public properties
25
+ public cloneNode: (deep?: boolean) => HTMLTextAreaElement;
24
26
  public readonly type = 'textarea';
25
27
 
26
28
  // Events
@@ -566,14 +568,10 @@ export default class HTMLTextAreaElement extends HTMLElement {
566
568
  }
567
569
 
568
570
  /**
569
- * Clones a node.
570
- *
571
571
  * @override
572
- * @param [deep=false] "true" to clone deep.
573
- * @returns Cloned node.
574
572
  */
575
- public cloneNode(deep = false): HTMLTextAreaElement {
576
- const clone = <HTMLTextAreaElement>super.cloneNode(deep);
573
+ public override [PropertySymbol.cloneNode](deep = false): HTMLTextAreaElement {
574
+ const clone = <HTMLTextAreaElement>super[PropertySymbol.cloneNode](deep);
577
575
 
578
576
  clone[PropertySymbol.value] = this[PropertySymbol.value];
579
577
  clone.#selectionStart = this.#selectionStart;
@@ -328,6 +328,63 @@ export default class Node extends EventTarget {
328
328
  * @returns Cloned node.
329
329
  */
330
330
  public cloneNode(deep = false): Node {
331
+ return this[PropertySymbol.cloneNode](deep);
332
+ }
333
+
334
+ /**
335
+ * Append a child node to childNodes.
336
+ *
337
+ * @param node Node to append.
338
+ * @returns Appended node.
339
+ */
340
+ public appendChild(node: Node): Node {
341
+ return this[PropertySymbol.appendChild](node);
342
+ }
343
+
344
+ /**
345
+ * Remove Child element from childNodes array.
346
+ *
347
+ * @param node Node to remove.
348
+ * @returns Removed node.
349
+ */
350
+ public removeChild(node: Node): Node {
351
+ return this[PropertySymbol.removeChild](node);
352
+ }
353
+
354
+ /**
355
+ * Inserts a node before another.
356
+ *
357
+ * @param newNode Node to insert.
358
+ * @param referenceNode Node to insert before.
359
+ * @returns Inserted node.
360
+ */
361
+ public insertBefore(newNode: Node, referenceNode: Node | null): Node {
362
+ if (arguments.length < 2) {
363
+ throw new TypeError(
364
+ `Failed to execute 'insertBefore' on 'Node': 2 arguments required, but only ${arguments.length} present.`
365
+ );
366
+ }
367
+ return this[PropertySymbol.insertBefore](newNode, referenceNode);
368
+ }
369
+
370
+ /**
371
+ * Replaces a node with another.
372
+ *
373
+ * @param newChild New child.
374
+ * @param oldChild Old child.
375
+ * @returns Replaced node.
376
+ */
377
+ public replaceChild(newChild: Node, oldChild: Node): Node {
378
+ return this[PropertySymbol.replaceChild](newChild, oldChild);
379
+ }
380
+
381
+ /**
382
+ * Clones a node.
383
+ *
384
+ * @param [deep=false] "true" to clone deep.
385
+ * @returns Cloned node.
386
+ */
387
+ public [PropertySymbol.cloneNode](deep = false): Node {
331
388
  const clone = NodeFactory.createNode<Node>(
332
389
  this[PropertySymbol.ownerDocument],
333
390
  <typeof Node>this.constructor
@@ -357,7 +414,7 @@ export default class Node extends EventTarget {
357
414
  * @param node Node to append.
358
415
  * @returns Appended node.
359
416
  */
360
- public appendChild(node: Node): Node {
417
+ public [PropertySymbol.appendChild](node: Node): Node {
361
418
  return NodeUtility.appendChild(this, node);
362
419
  }
363
420
 
@@ -367,7 +424,7 @@ export default class Node extends EventTarget {
367
424
  * @param node Node to remove.
368
425
  * @returns Removed node.
369
426
  */
370
- public removeChild(node: Node): Node {
427
+ public [PropertySymbol.removeChild](node: Node): Node {
371
428
  return NodeUtility.removeChild(this, node);
372
429
  }
373
430
 
@@ -378,12 +435,7 @@ export default class Node extends EventTarget {
378
435
  * @param referenceNode Node to insert before.
379
436
  * @returns Inserted node.
380
437
  */
381
- public insertBefore(newNode: Node, referenceNode: Node | null): Node {
382
- if (arguments.length < 2) {
383
- throw new TypeError(
384
- `Failed to execute 'insertBefore' on 'Node': 2 arguments required, but only ${arguments.length} present.`
385
- );
386
- }
438
+ public [PropertySymbol.insertBefore](newNode: Node, referenceNode: Node | null): Node {
387
439
  return NodeUtility.insertBefore(this, newNode, referenceNode);
388
440
  }
389
441
 
@@ -394,7 +446,7 @@ export default class Node extends EventTarget {
394
446
  * @param oldChild Old child.
395
447
  * @returns Replaced node.
396
448
  */
397
- public replaceChild(newChild: Node, oldChild: Node): Node {
449
+ public [PropertySymbol.replaceChild](newChild: Node, oldChild: Node): Node {
398
450
  this.insertBefore(newChild, oldChild);
399
451
  this.removeChild(oldChild);
400
452
 
@@ -12,6 +12,9 @@ import SVGElement from '../svg-element/SVGElement.js';
12
12
  * ShadowRoot.
13
13
  */
14
14
  export default class ShadowRoot extends DocumentFragment {
15
+ // Public properties
16
+ public cloneNode: (deep?: boolean) => ShadowRoot;
17
+
15
18
  // Events
16
19
  public onslotchange: (event: Event) => void | null = null;
17
20
 
@@ -113,14 +116,10 @@ export default class ShadowRoot extends DocumentFragment {
113
116
  }
114
117
 
115
118
  /**
116
- * Clones a node.
117
- *
118
119
  * @override
119
- * @param [deep=false] "true" to clone deep.
120
- * @returns Cloned node.
121
120
  */
122
- public cloneNode(deep = false): ShadowRoot {
123
- const clone = <ShadowRoot>super.cloneNode(deep);
121
+ public override [PropertySymbol.cloneNode](deep = false): ShadowRoot {
122
+ const clone = <ShadowRoot>super[PropertySymbol.cloneNode](deep);
124
123
  clone[PropertySymbol.mode] = this.mode;
125
124
  return clone;
126
125
  }
@@ -8,11 +8,15 @@ import SVGTransform from './SVGTransform.js';
8
8
  import SVGAnimatedRect from './SVGAnimatedRect.js';
9
9
  import Node from '../node/Node.js';
10
10
  import Event from '../../event/Event.js';
11
+ import * as PropertySymbol from '../../PropertySymbol.js';
11
12
 
12
13
  /**
13
14
  * SVGSVGElement.
14
15
  */
15
16
  export default class SVGSVGElement extends SVGGraphicsElement {
17
+ // Public properties
18
+ public cloneNode: (deep?: boolean) => SVGSVGElement;
19
+
16
20
  // Events
17
21
  public onafterprint: (event: Event) => void | null = null;
18
22
  public onbeforeprint: (event: Event) => void | null = null;
@@ -326,13 +330,9 @@ export default class SVGSVGElement extends SVGGraphicsElement {
326
330
  }
327
331
 
328
332
  /**
329
- * Clones a node.
330
- *
331
333
  * @override
332
- * @param [deep=false] "true" to clone deep.
333
- * @returns Cloned node.
334
334
  */
335
- public cloneNode(deep = false): SVGSVGElement {
336
- return <SVGSVGElement>super.cloneNode(deep);
335
+ public override [PropertySymbol.cloneNode](deep = false): SVGSVGElement {
336
+ return <SVGSVGElement>super[PropertySymbol.cloneNode](deep);
337
337
  }
338
338
  }
@@ -10,6 +10,7 @@ import NodeTypeEnum from '../node/NodeTypeEnum.js';
10
10
  * Text node.
11
11
  */
12
12
  export default class Text extends CharacterData {
13
+ public cloneNode: (deep?: boolean) => Text;
13
14
  public override [PropertySymbol.nodeType] = NodeTypeEnum.textNode;
14
15
 
15
16
  /**
@@ -79,14 +80,10 @@ export default class Text extends CharacterData {
79
80
  }
80
81
 
81
82
  /**
82
- * Clones a node.
83
- *
84
83
  * @override
85
- * @param [deep=false] "true" to clone deep.
86
- * @returns Cloned node.
87
84
  */
88
- public cloneNode(deep = false): Text {
89
- return <Text>super.cloneNode(deep);
85
+ public override [PropertySymbol.cloneNode](deep = false): Text {
86
+ return <Text>super[PropertySymbol.cloneNode](deep);
90
87
  }
91
88
 
92
89
  /**