safe-mdx 0.0.2 → 0.0.3
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/dist/index.js +1 -17
- package/dist/index.js.map +1 -1
- package/dist/safe-mdx.d.ts.map +1 -1
- package/dist/safe-mdx.js +43 -76
- package/dist/safe-mdx.js.map +1 -1
- package/dist/safe-mdx.test.js +280 -154
- package/dist/safe-mdx.test.js.map +1 -1
- package/package.json +11 -3
- package/src/safe-mdx.test.tsx +262 -127
- package/src/safe-mdx.tsx +7 -2
package/src/safe-mdx.test.tsx
CHANGED
|
@@ -38,6 +38,133 @@ test('basic', () => {
|
|
|
38
38
|
}
|
|
39
39
|
`)
|
|
40
40
|
})
|
|
41
|
+
test('table', () => {
|
|
42
|
+
expect(
|
|
43
|
+
render(dedent`
|
|
44
|
+
# Hello
|
|
45
|
+
|
|
46
|
+
| Tables | Are | Cool |
|
|
47
|
+
| ------------- |:-------------:| -----:|
|
|
48
|
+
| col 3 is | right-aligned | $1600 |
|
|
49
|
+
| col 2 is | centered | $12 |
|
|
50
|
+
`),
|
|
51
|
+
).toMatchInlineSnapshot(`
|
|
52
|
+
{
|
|
53
|
+
"errors": [],
|
|
54
|
+
"result": <React.Fragment>
|
|
55
|
+
<h1>
|
|
56
|
+
Hello
|
|
57
|
+
</h1>
|
|
58
|
+
<table>
|
|
59
|
+
<thead>
|
|
60
|
+
<tr
|
|
61
|
+
className=""
|
|
62
|
+
>
|
|
63
|
+
<td
|
|
64
|
+
className=""
|
|
65
|
+
>
|
|
66
|
+
Tables
|
|
67
|
+
</td>
|
|
68
|
+
<td
|
|
69
|
+
className=""
|
|
70
|
+
>
|
|
71
|
+
Are
|
|
72
|
+
</td>
|
|
73
|
+
<td
|
|
74
|
+
className=""
|
|
75
|
+
>
|
|
76
|
+
Cool
|
|
77
|
+
</td>
|
|
78
|
+
</tr>
|
|
79
|
+
</thead>
|
|
80
|
+
<tbody>
|
|
81
|
+
<tr
|
|
82
|
+
className=""
|
|
83
|
+
>
|
|
84
|
+
<td
|
|
85
|
+
className=""
|
|
86
|
+
>
|
|
87
|
+
col 3 is
|
|
88
|
+
</td>
|
|
89
|
+
<td
|
|
90
|
+
className=""
|
|
91
|
+
>
|
|
92
|
+
right-aligned
|
|
93
|
+
</td>
|
|
94
|
+
<td
|
|
95
|
+
className=""
|
|
96
|
+
>
|
|
97
|
+
$1600
|
|
98
|
+
</td>
|
|
99
|
+
</tr>
|
|
100
|
+
<tr
|
|
101
|
+
className=""
|
|
102
|
+
>
|
|
103
|
+
<td
|
|
104
|
+
className=""
|
|
105
|
+
>
|
|
106
|
+
col 2 is
|
|
107
|
+
</td>
|
|
108
|
+
<td
|
|
109
|
+
className=""
|
|
110
|
+
>
|
|
111
|
+
centered
|
|
112
|
+
</td>
|
|
113
|
+
<td
|
|
114
|
+
className=""
|
|
115
|
+
>
|
|
116
|
+
$12
|
|
117
|
+
</td>
|
|
118
|
+
</tr>
|
|
119
|
+
</tbody>
|
|
120
|
+
</table>
|
|
121
|
+
</React.Fragment>,
|
|
122
|
+
}
|
|
123
|
+
`)
|
|
124
|
+
})
|
|
125
|
+
test('table, only head', () => {
|
|
126
|
+
expect(
|
|
127
|
+
render(dedent`
|
|
128
|
+
# Hello
|
|
129
|
+
|
|
130
|
+
| Tables | Are | Cool |
|
|
131
|
+
| ------------- |:-------------:| -----:|
|
|
132
|
+
|
|
133
|
+
`),
|
|
134
|
+
).toMatchInlineSnapshot(`
|
|
135
|
+
{
|
|
136
|
+
"errors": [],
|
|
137
|
+
"result": <React.Fragment>
|
|
138
|
+
<h1>
|
|
139
|
+
Hello
|
|
140
|
+
</h1>
|
|
141
|
+
<table>
|
|
142
|
+
<thead>
|
|
143
|
+
<tr
|
|
144
|
+
className=""
|
|
145
|
+
>
|
|
146
|
+
<td
|
|
147
|
+
className=""
|
|
148
|
+
>
|
|
149
|
+
Tables
|
|
150
|
+
</td>
|
|
151
|
+
<td
|
|
152
|
+
className=""
|
|
153
|
+
>
|
|
154
|
+
Are
|
|
155
|
+
</td>
|
|
156
|
+
<td
|
|
157
|
+
className=""
|
|
158
|
+
>
|
|
159
|
+
Cool
|
|
160
|
+
</td>
|
|
161
|
+
</tr>
|
|
162
|
+
</thead>
|
|
163
|
+
</table>
|
|
164
|
+
</React.Fragment>,
|
|
165
|
+
}
|
|
166
|
+
`)
|
|
167
|
+
})
|
|
41
168
|
|
|
42
169
|
test('inline jsx', () => {
|
|
43
170
|
expect(
|
|
@@ -145,10 +272,10 @@ test('props parsing', () => {
|
|
|
145
272
|
<Heading
|
|
146
273
|
backTick="some \${expr} value"
|
|
147
274
|
boolean={false}
|
|
148
|
-
doublequote="a
|
|
275
|
+
doublequote="a " string"
|
|
149
276
|
null={null}
|
|
150
277
|
num={2}
|
|
151
|
-
quote="a
|
|
278
|
+
quote="a " string"
|
|
152
279
|
someJson={
|
|
153
280
|
{
|
|
154
281
|
"a": 1,
|
|
@@ -1215,150 +1342,158 @@ test('kitchen sink', () => {
|
|
|
1215
1342
|
Colons can be used to align columns.
|
|
1216
1343
|
</p>
|
|
1217
1344
|
<table>
|
|
1218
|
-
<
|
|
1219
|
-
|
|
1220
|
-
>
|
|
1221
|
-
<td
|
|
1222
|
-
className=""
|
|
1223
|
-
>
|
|
1224
|
-
Tables
|
|
1225
|
-
</td>
|
|
1226
|
-
<td
|
|
1227
|
-
className=""
|
|
1228
|
-
>
|
|
1229
|
-
Are
|
|
1230
|
-
</td>
|
|
1231
|
-
<td
|
|
1232
|
-
className=""
|
|
1233
|
-
>
|
|
1234
|
-
Cool
|
|
1235
|
-
</td>
|
|
1236
|
-
</tr>
|
|
1237
|
-
<tr
|
|
1238
|
-
className=""
|
|
1239
|
-
>
|
|
1240
|
-
<td
|
|
1345
|
+
<thead>
|
|
1346
|
+
<tr
|
|
1241
1347
|
className=""
|
|
1242
1348
|
>
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1349
|
+
<td
|
|
1350
|
+
className=""
|
|
1351
|
+
>
|
|
1352
|
+
Tables
|
|
1353
|
+
</td>
|
|
1354
|
+
<td
|
|
1355
|
+
className=""
|
|
1356
|
+
>
|
|
1357
|
+
Are
|
|
1358
|
+
</td>
|
|
1359
|
+
<td
|
|
1360
|
+
className=""
|
|
1361
|
+
>
|
|
1362
|
+
Cool
|
|
1363
|
+
</td>
|
|
1364
|
+
</tr>
|
|
1365
|
+
</thead>
|
|
1366
|
+
<tbody>
|
|
1367
|
+
<tr
|
|
1246
1368
|
className=""
|
|
1247
1369
|
>
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1370
|
+
<td
|
|
1371
|
+
className=""
|
|
1372
|
+
>
|
|
1373
|
+
col 3 is
|
|
1374
|
+
</td>
|
|
1375
|
+
<td
|
|
1376
|
+
className=""
|
|
1377
|
+
>
|
|
1378
|
+
right-aligned
|
|
1379
|
+
</td>
|
|
1380
|
+
<td
|
|
1381
|
+
className=""
|
|
1382
|
+
>
|
|
1383
|
+
$1600
|
|
1384
|
+
</td>
|
|
1385
|
+
</tr>
|
|
1386
|
+
<tr
|
|
1251
1387
|
className=""
|
|
1252
1388
|
>
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1389
|
+
<td
|
|
1390
|
+
className=""
|
|
1391
|
+
>
|
|
1392
|
+
col 2 is
|
|
1393
|
+
</td>
|
|
1394
|
+
<td
|
|
1395
|
+
className=""
|
|
1396
|
+
>
|
|
1397
|
+
centered
|
|
1398
|
+
</td>
|
|
1399
|
+
<td
|
|
1400
|
+
className=""
|
|
1401
|
+
>
|
|
1402
|
+
$12
|
|
1403
|
+
</td>
|
|
1404
|
+
</tr>
|
|
1405
|
+
<tr
|
|
1260
1406
|
className=""
|
|
1261
1407
|
>
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
className=""
|
|
1280
|
-
>
|
|
1281
|
-
zebra stripes
|
|
1282
|
-
</td>
|
|
1283
|
-
<td
|
|
1284
|
-
className=""
|
|
1285
|
-
>
|
|
1286
|
-
are neat
|
|
1287
|
-
</td>
|
|
1288
|
-
<td
|
|
1289
|
-
className=""
|
|
1290
|
-
>
|
|
1291
|
-
$1
|
|
1292
|
-
</td>
|
|
1293
|
-
</tr>
|
|
1408
|
+
<td
|
|
1409
|
+
className=""
|
|
1410
|
+
>
|
|
1411
|
+
zebra stripes
|
|
1412
|
+
</td>
|
|
1413
|
+
<td
|
|
1414
|
+
className=""
|
|
1415
|
+
>
|
|
1416
|
+
are neat
|
|
1417
|
+
</td>
|
|
1418
|
+
<td
|
|
1419
|
+
className=""
|
|
1420
|
+
>
|
|
1421
|
+
$1
|
|
1422
|
+
</td>
|
|
1423
|
+
</tr>
|
|
1424
|
+
</tbody>
|
|
1294
1425
|
</table>
|
|
1295
1426
|
<p>
|
|
1296
1427
|
There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown.
|
|
1297
1428
|
</p>
|
|
1298
1429
|
<table>
|
|
1299
|
-
<
|
|
1300
|
-
|
|
1301
|
-
>
|
|
1302
|
-
<td
|
|
1303
|
-
className=""
|
|
1304
|
-
>
|
|
1305
|
-
Markdown
|
|
1306
|
-
</td>
|
|
1307
|
-
<td
|
|
1308
|
-
className=""
|
|
1309
|
-
>
|
|
1310
|
-
Less
|
|
1311
|
-
</td>
|
|
1312
|
-
<td
|
|
1313
|
-
className=""
|
|
1314
|
-
>
|
|
1315
|
-
Pretty
|
|
1316
|
-
</td>
|
|
1317
|
-
</tr>
|
|
1318
|
-
<tr
|
|
1319
|
-
className=""
|
|
1320
|
-
>
|
|
1321
|
-
<td
|
|
1322
|
-
className=""
|
|
1323
|
-
>
|
|
1324
|
-
<em>
|
|
1325
|
-
Still
|
|
1326
|
-
</em>
|
|
1327
|
-
</td>
|
|
1328
|
-
<td
|
|
1329
|
-
className=""
|
|
1330
|
-
>
|
|
1331
|
-
<code>
|
|
1332
|
-
renders
|
|
1333
|
-
</code>
|
|
1334
|
-
</td>
|
|
1335
|
-
<td
|
|
1336
|
-
className=""
|
|
1337
|
-
>
|
|
1338
|
-
<strong>
|
|
1339
|
-
nicely
|
|
1340
|
-
</strong>
|
|
1341
|
-
</td>
|
|
1342
|
-
</tr>
|
|
1343
|
-
<tr
|
|
1344
|
-
className=""
|
|
1345
|
-
>
|
|
1346
|
-
<td
|
|
1430
|
+
<thead>
|
|
1431
|
+
<tr
|
|
1347
1432
|
className=""
|
|
1348
1433
|
>
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1434
|
+
<td
|
|
1435
|
+
className=""
|
|
1436
|
+
>
|
|
1437
|
+
Markdown
|
|
1438
|
+
</td>
|
|
1439
|
+
<td
|
|
1440
|
+
className=""
|
|
1441
|
+
>
|
|
1442
|
+
Less
|
|
1443
|
+
</td>
|
|
1444
|
+
<td
|
|
1445
|
+
className=""
|
|
1446
|
+
>
|
|
1447
|
+
Pretty
|
|
1448
|
+
</td>
|
|
1449
|
+
</tr>
|
|
1450
|
+
</thead>
|
|
1451
|
+
<tbody>
|
|
1452
|
+
<tr
|
|
1352
1453
|
className=""
|
|
1353
1454
|
>
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1455
|
+
<td
|
|
1456
|
+
className=""
|
|
1457
|
+
>
|
|
1458
|
+
<em>
|
|
1459
|
+
Still
|
|
1460
|
+
</em>
|
|
1461
|
+
</td>
|
|
1462
|
+
<td
|
|
1463
|
+
className=""
|
|
1464
|
+
>
|
|
1465
|
+
<code>
|
|
1466
|
+
renders
|
|
1467
|
+
</code>
|
|
1468
|
+
</td>
|
|
1469
|
+
<td
|
|
1470
|
+
className=""
|
|
1471
|
+
>
|
|
1472
|
+
<strong>
|
|
1473
|
+
nicely
|
|
1474
|
+
</strong>
|
|
1475
|
+
</td>
|
|
1476
|
+
</tr>
|
|
1477
|
+
<tr
|
|
1357
1478
|
className=""
|
|
1358
1479
|
>
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1480
|
+
<td
|
|
1481
|
+
className=""
|
|
1482
|
+
>
|
|
1483
|
+
1
|
|
1484
|
+
</td>
|
|
1485
|
+
<td
|
|
1486
|
+
className=""
|
|
1487
|
+
>
|
|
1488
|
+
2
|
|
1489
|
+
</td>
|
|
1490
|
+
<td
|
|
1491
|
+
className=""
|
|
1492
|
+
>
|
|
1493
|
+
3
|
|
1494
|
+
</td>
|
|
1495
|
+
</tr>
|
|
1496
|
+
</tbody>
|
|
1362
1497
|
</table>
|
|
1363
1498
|
<a
|
|
1364
1499
|
name="blockquotes"
|
package/src/safe-mdx.tsx
CHANGED
|
@@ -319,9 +319,14 @@ export class MdastToJsx {
|
|
|
319
319
|
return <Fragment>{this.mapMdastChildren(node)}</Fragment>
|
|
320
320
|
}
|
|
321
321
|
case 'table': {
|
|
322
|
-
const
|
|
322
|
+
const [head, ...body] = React.Children.toArray(
|
|
323
|
+
this.mapMdastChildren(node),
|
|
324
|
+
)
|
|
323
325
|
return (
|
|
324
|
-
<this.c.table>
|
|
326
|
+
<this.c.table>
|
|
327
|
+
{head && <this.c.thead>{head}</this.c.thead>}
|
|
328
|
+
{!!body?.length && <this.c.tbody>{body}</this.c.tbody>}
|
|
329
|
+
</this.c.table>
|
|
325
330
|
)
|
|
326
331
|
}
|
|
327
332
|
case 'tableRow': {
|