11/**
22 * @typedef {import('mdast').Root } Root
33 * @typedef {import('mdast').Paragraph } Paragraph
4+ * @typedef {import('hast').Element } Element
45 * @typedef {import('vfile').VFile } VFile
56 * @typedef {import('../index.js').Options } Options
67 */
@@ -11,7 +12,6 @@ import test from 'tape'
1112import { isHidden } from 'is-hidden'
1213import { commonmark } from 'commonmark.json'
1314import { toVFile } from 'to-vfile'
14- import { all } from 'mdast-util-to-hast'
1515import { unified } from 'unified'
1616import { remark } from 'remark'
1717import remarkParse from 'remark-parse'
@@ -29,28 +29,17 @@ test('remarkHtml', (t) => {
2929 remark ( ) . use ( remarkHtml ) . freeze ( )
3030 } , 'should not throw if not passed options' )
3131
32- t . throws (
33- ( ) => {
34- remark ( )
35- . use ( remarkHtml )
36- // @ts -expect-error: not a node.
37- . stringify ( { type : 'root' , children : [ { value : 'baz' } ] } )
38- } ,
39- / E x p e c t e d n o d e , g o t ` \[ o b j e c t O b j e c t ] ` / ,
40- 'should throw when not given a node'
41- )
42-
43- let processorDangerous = remark ( ) . use ( remarkHtml , { sanitize : false } )
32+ const processorDangerous1 = remark ( ) . use ( remarkHtml , { sanitize : false } )
4433
4534 t . equal (
4635 // @ts -expect-error: unknown node.
47- processorDangerous . stringify ( { type : 'alpha' } ) ,
36+ processorDangerous1 . stringify ( { type : 'alpha' } ) ,
4837 '<div></div>' ,
4938 'should stringify unknown nodes'
5039 )
5140
5241 t . equal (
53- processorDangerous . stringify ( {
42+ processorDangerous1 . stringify ( {
5443 // @ts -expect-error: unknown node.
5544 type : 'alpha' ,
5645 children : [ { type : 'strong' , children : [ { type : 'text' , value : 'bravo' } ] } ]
@@ -60,7 +49,7 @@ test('remarkHtml', (t) => {
6049 )
6150
6251 t . equal (
63- processorDangerous . stringify ( {
52+ processorDangerous1 . stringify ( {
6453 // @ts -expect-error: unknown node.
6554 type : 'alpha' ,
6655 children : [ { type : 'text' , value : 'bravo' } ] ,
@@ -74,29 +63,37 @@ test('remarkHtml', (t) => {
7463 'should stringify unknown nodes'
7564 )
7665
77- processorDangerous = remark ( ) . use ( remarkHtml , {
66+ const processorDangerous2 = remark ( ) . use ( remarkHtml , {
7867 sanitize : false ,
7968 handlers : {
8069 /** @param {Paragraph } node */
81- paragraph ( h , node ) {
70+ paragraph ( state , node ) {
8271 const head = node . children [ 0 ]
8372
8473 if ( head . type === 'text' ) {
8574 head . value = 'changed'
8675 }
8776
88- return h ( node , 'p' , all ( h , node ) )
77+ /** @type {Element } */
78+ const result = {
79+ type : 'element' ,
80+ tagName : 'p' ,
81+ properties : { } ,
82+ children : state . all ( node )
83+ }
84+ state . patch ( node , result )
85+ return state . applyData ( node , result )
8986 }
9087 }
9188 } )
9289
9390 t . equal (
94- processorDangerous . processSync ( 'paragraph text' ) . toString ( ) ,
91+ processorDangerous2 . processSync ( 'paragraph text' ) . toString ( ) ,
9592 '<p>changed</p>\n' ,
9693 'should allow overriding handlers'
9794 )
9895
99- processorDangerous = remark ( )
96+ const processorDangerous3 = remark ( )
10097 . use (
10198 /** @type {import('unified').Plugin<void[], Root> } */
10299 ( ) => ( ast ) => {
@@ -109,14 +106,14 @@ test('remarkHtml', (t) => {
109106 . use ( remarkHtml , { sanitize : false } )
110107
111108 t . equal (
112- processorDangerous
109+ processorDangerous3
113110 . processSync ( '' )
114111 . toString ( ) ,
115112 '<p><img src="example.jpg" alt="hello" title="overwrite"></p>\n' ,
116113 'should patch and merge attributes'
117114 )
118115
119- processorDangerous = remark ( )
116+ const processorDangerous4 = remark ( )
120117 . use (
121118 /** @type {import('unified').Plugin<void[], Root> } */
122119 ( ) => ( ast ) => {
@@ -127,12 +124,12 @@ test('remarkHtml', (t) => {
127124 . use ( remarkHtml , { sanitize : false } )
128125
129126 t . equal (
130- processorDangerous . processSync ( '**Bold!**' ) . toString ( ) ,
127+ processorDangerous4 . processSync ( '**Bold!**' ) . toString ( ) ,
131128 '<p><b>Bold!</b></p>\n' ,
132129 'should overwrite a tag-name'
133130 )
134131
135- processorDangerous = remark ( )
132+ const processorDangerous5 = remark ( )
136133 . use (
137134 /** @type {import('unified').Plugin<void[], Root> } */
138135 ( ) => ( ast ) => {
@@ -154,12 +151,12 @@ test('remarkHtml', (t) => {
154151 . use ( remarkHtml , { sanitize : false } )
155152
156153 t . equal (
157- processorDangerous . processSync ( '`var`' ) . toString ( ) ,
154+ processorDangerous5 . processSync ( '`var`' ) . toString ( ) ,
158155 '<p><code><span class="token">var</span></code></p>\n' ,
159156 'should overwrite content'
160157 )
161158
162- processorDangerous = remark ( )
159+ const processorDangerous6 = remark ( )
163160 . use (
164161 /** @type {import('unified').Plugin<void[], Root> } */
165162 ( ) => ( ast ) => {
@@ -181,12 +178,12 @@ test('remarkHtml', (t) => {
181178 . use ( remarkHtml , { sanitize : true } )
182179
183180 t . equal (
184- processorDangerous . processSync ( '`var`' ) . toString ( ) ,
181+ processorDangerous6 . processSync ( '`var`' ) . toString ( ) ,
185182 '<p><code>var</code></p>\n' ,
186183 'should not overwrite content in `sanitize` mode'
187184 )
188185
189- processorDangerous = remark ( )
186+ const processorDangerous7 = remark ( )
190187 . use (
191188 /** @type {import('unified').Plugin<void[], Root> } */
192189 ( ) => ( ast ) => {
@@ -198,7 +195,7 @@ test('remarkHtml', (t) => {
198195 . use ( remarkHtml , { sanitize : false } )
199196
200197 t . equal (
201- processorDangerous . processSync ( '```js\nvar\n```\n' ) . toString ( ) ,
198+ processorDangerous7 . processSync ( '```js\nvar\n```\n' ) . toString ( ) ,
202199 '<pre><code class="foo">var\n</code></pre>\n' ,
203200 'should overwrite classes on code'
204201 )
0 commit comments