1
1
/**
2
2
* @typedef {import('mdast').Root } Root
3
3
* @typedef {import('mdast').Paragraph } Paragraph
4
+ * @typedef {import('hast').Element } Element
4
5
* @typedef {import('vfile').VFile } VFile
5
6
* @typedef {import('../index.js').Options } Options
6
7
*/
@@ -11,7 +12,6 @@ import test from 'tape'
11
12
import { isHidden } from 'is-hidden'
12
13
import { commonmark } from 'commonmark.json'
13
14
import { toVFile } from 'to-vfile'
14
- import { all } from 'mdast-util-to-hast'
15
15
import { unified } from 'unified'
16
16
import { remark } from 'remark'
17
17
import remarkParse from 'remark-parse'
@@ -29,28 +29,17 @@ test('remarkHtml', (t) => {
29
29
remark ( ) . use ( remarkHtml ) . freeze ( )
30
30
} , 'should not throw if not passed options' )
31
31
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 } )
44
33
45
34
t . equal (
46
35
// @ts -expect-error: unknown node.
47
- processorDangerous . stringify ( { type : 'alpha' } ) ,
36
+ processorDangerous1 . stringify ( { type : 'alpha' } ) ,
48
37
'<div></div>' ,
49
38
'should stringify unknown nodes'
50
39
)
51
40
52
41
t . equal (
53
- processorDangerous . stringify ( {
42
+ processorDangerous1 . stringify ( {
54
43
// @ts -expect-error: unknown node.
55
44
type : 'alpha' ,
56
45
children : [ { type : 'strong' , children : [ { type : 'text' , value : 'bravo' } ] } ]
@@ -60,7 +49,7 @@ test('remarkHtml', (t) => {
60
49
)
61
50
62
51
t . equal (
63
- processorDangerous . stringify ( {
52
+ processorDangerous1 . stringify ( {
64
53
// @ts -expect-error: unknown node.
65
54
type : 'alpha' ,
66
55
children : [ { type : 'text' , value : 'bravo' } ] ,
@@ -74,29 +63,37 @@ test('remarkHtml', (t) => {
74
63
'should stringify unknown nodes'
75
64
)
76
65
77
- processorDangerous = remark ( ) . use ( remarkHtml , {
66
+ const processorDangerous2 = remark ( ) . use ( remarkHtml , {
78
67
sanitize : false ,
79
68
handlers : {
80
69
/** @param {Paragraph } node */
81
- paragraph ( h , node ) {
70
+ paragraph ( state , node ) {
82
71
const head = node . children [ 0 ]
83
72
84
73
if ( head . type === 'text' ) {
85
74
head . value = 'changed'
86
75
}
87
76
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 )
89
86
}
90
87
}
91
88
} )
92
89
93
90
t . equal (
94
- processorDangerous . processSync ( 'paragraph text' ) . toString ( ) ,
91
+ processorDangerous2 . processSync ( 'paragraph text' ) . toString ( ) ,
95
92
'<p>changed</p>\n' ,
96
93
'should allow overriding handlers'
97
94
)
98
95
99
- processorDangerous = remark ( )
96
+ const processorDangerous3 = remark ( )
100
97
. use (
101
98
/** @type {import('unified').Plugin<void[], Root> } */
102
99
( ) => ( ast ) => {
@@ -109,14 +106,14 @@ test('remarkHtml', (t) => {
109
106
. use ( remarkHtml , { sanitize : false } )
110
107
111
108
t . equal (
112
- processorDangerous
109
+ processorDangerous3
113
110
. processSync ( '' )
114
111
. toString ( ) ,
115
112
'<p><img src="example.jpg" alt="hello" title="overwrite"></p>\n' ,
116
113
'should patch and merge attributes'
117
114
)
118
115
119
- processorDangerous = remark ( )
116
+ const processorDangerous4 = remark ( )
120
117
. use (
121
118
/** @type {import('unified').Plugin<void[], Root> } */
122
119
( ) => ( ast ) => {
@@ -127,12 +124,12 @@ test('remarkHtml', (t) => {
127
124
. use ( remarkHtml , { sanitize : false } )
128
125
129
126
t . equal (
130
- processorDangerous . processSync ( '**Bold!**' ) . toString ( ) ,
127
+ processorDangerous4 . processSync ( '**Bold!**' ) . toString ( ) ,
131
128
'<p><b>Bold!</b></p>\n' ,
132
129
'should overwrite a tag-name'
133
130
)
134
131
135
- processorDangerous = remark ( )
132
+ const processorDangerous5 = remark ( )
136
133
. use (
137
134
/** @type {import('unified').Plugin<void[], Root> } */
138
135
( ) => ( ast ) => {
@@ -154,12 +151,12 @@ test('remarkHtml', (t) => {
154
151
. use ( remarkHtml , { sanitize : false } )
155
152
156
153
t . equal (
157
- processorDangerous . processSync ( '`var`' ) . toString ( ) ,
154
+ processorDangerous5 . processSync ( '`var`' ) . toString ( ) ,
158
155
'<p><code><span class="token">var</span></code></p>\n' ,
159
156
'should overwrite content'
160
157
)
161
158
162
- processorDangerous = remark ( )
159
+ const processorDangerous6 = remark ( )
163
160
. use (
164
161
/** @type {import('unified').Plugin<void[], Root> } */
165
162
( ) => ( ast ) => {
@@ -181,12 +178,12 @@ test('remarkHtml', (t) => {
181
178
. use ( remarkHtml , { sanitize : true } )
182
179
183
180
t . equal (
184
- processorDangerous . processSync ( '`var`' ) . toString ( ) ,
181
+ processorDangerous6 . processSync ( '`var`' ) . toString ( ) ,
185
182
'<p><code>var</code></p>\n' ,
186
183
'should not overwrite content in `sanitize` mode'
187
184
)
188
185
189
- processorDangerous = remark ( )
186
+ const processorDangerous7 = remark ( )
190
187
. use (
191
188
/** @type {import('unified').Plugin<void[], Root> } */
192
189
( ) => ( ast ) => {
@@ -198,7 +195,7 @@ test('remarkHtml', (t) => {
198
195
. use ( remarkHtml , { sanitize : false } )
199
196
200
197
t . equal (
201
- processorDangerous . processSync ( '```js\nvar\n```\n' ) . toString ( ) ,
198
+ processorDangerous7 . processSync ( '```js\nvar\n```\n' ) . toString ( ) ,
202
199
'<pre><code class="foo">var\n</code></pre>\n' ,
203
200
'should overwrite classes on code'
204
201
)
0 commit comments