@@ -26,9 +26,8 @@ export function fromMarkdown(value, encoding, options) {
26
26
}
27
27
28
28
// Note this compiler only understand complete buffering, not streaming.
29
- function compiler ( options ) {
30
- var settings = options || { }
31
- var config = configure (
29
+ function compiler ( options = { } ) {
30
+ const config = configure (
32
31
{
33
32
transforms : [ ] ,
34
33
canContainEols : [
@@ -132,23 +131,19 @@ function compiler(options) {
132
131
thematicBreak : closer ( )
133
132
}
134
133
} ,
135
- settings . mdastExtensions || [ ]
134
+ options . mdastExtensions || [ ]
136
135
)
137
136
138
- var data = { }
137
+ const data = { }
139
138
140
139
return compile
141
140
142
141
function compile ( events ) {
143
- var tree = { type : 'root' , children : [ ] }
144
- var stack = [ tree ]
145
- var tokenStack = [ ]
146
- var listStack = [ ]
147
- var index = - 1
148
- var handler
149
- var listStart
150
-
151
- var context = {
142
+ let tree = { type : 'root' , children : [ ] }
143
+ const stack = [ tree ]
144
+ const tokenStack = [ ]
145
+ const listStack = [ ]
146
+ const context = {
152
147
stack,
153
148
tokenStack,
154
149
config,
@@ -159,6 +154,7 @@ function compiler(options) {
159
154
setData,
160
155
getData
161
156
}
157
+ let index = - 1
162
158
163
159
while ( ++ index < events . length ) {
164
160
// We preprocess lists to add `listItem` tokens, and to infer whether
@@ -170,16 +166,15 @@ function compiler(options) {
170
166
if ( events [ index ] [ 0 ] === 'enter' ) {
171
167
listStack . push ( index )
172
168
} else {
173
- listStart = listStack . pop ( index )
174
- index = prepareList ( events , listStart , index )
169
+ index = prepareList ( events , listStack . pop ( index ) , index )
175
170
}
176
171
}
177
172
}
178
173
179
174
index = - 1
180
175
181
176
while ( ++ index < events . length ) {
182
- handler = config [ events [ index ] [ 0 ] ]
177
+ const handler = config [ events [ index ] [ 0 ] ]
183
178
184
179
if ( own . call ( handler , events [ index ] [ 1 ] . type ) ) {
185
180
handler [ events [ index ] [ 1 ] . type ] . call (
@@ -192,7 +187,7 @@ function compiler(options) {
192
187
}
193
188
}
194
189
195
- if ( tokenStack . length ) {
190
+ if ( tokenStack . length > 0 ) {
196
191
throw new Error (
197
192
'Cannot close document, a token (`' +
198
193
tokenStack [ tokenStack . length - 1 ] . type +
@@ -208,10 +203,10 @@ function compiler(options) {
208
203
// Figure out `root` position.
209
204
tree . position = {
210
205
start : point (
211
- events . length ? events [ 0 ] [ 1 ] . start : { line : 1 , column : 1 , offset : 0 }
206
+ events . length > 0 ? events [ 0 ] [ 1 ] . start : { line : 1 , column : 1 , offset : 0 }
212
207
) ,
213
208
end : point (
214
- events . length
209
+ events . length > 0
215
210
? events [ events . length - 2 ] [ 1 ] . end
216
211
: { line : 1 , column : 1 , offset : 0 }
217
212
)
@@ -226,19 +221,16 @@ function compiler(options) {
226
221
}
227
222
228
223
function prepareList ( events , start , length ) {
229
- var index = start - 1
230
- var containerBalance = - 1
231
- var listSpread = false
232
- var listItem
233
- var tailIndex
234
- var lineIndex
235
- var tailEvent
236
- var event
237
- var firstBlankLineIndex
238
- var atMarker
224
+ let index = start - 1
225
+ let containerBalance = - 1
226
+ let listSpread = false
227
+ let listItem
228
+ let lineIndex
229
+ let firstBlankLineIndex
230
+ let atMarker
239
231
240
232
while ( ++ index <= length ) {
241
- event = events [ index ]
233
+ const event = events [ index ]
242
234
243
235
if (
244
236
event [ 1 ] . type === types . listUnordered ||
@@ -287,11 +279,11 @@ function compiler(options) {
287
279
event [ 1 ] . type === types . listOrdered ) )
288
280
) {
289
281
if ( listItem ) {
290
- tailIndex = index
282
+ let tailIndex = index
291
283
lineIndex = undefined
292
284
293
285
while ( tailIndex -- ) {
294
- tailEvent = events [ tailIndex ]
286
+ const tailEvent = events [ tailIndex ]
295
287
296
288
if (
297
289
tailEvent [ 1 ] . type === types . lineEnding ||
@@ -399,8 +391,8 @@ function compiler(options) {
399
391
}
400
392
401
393
function exit ( token ) {
402
- var node = this . stack . pop ( )
403
- var open = this . tokenStack . pop ( )
394
+ const node = this . stack . pop ( )
395
+ const open = this . tokenStack . pop ( )
404
396
405
397
if ( ! open ) {
406
398
throw new Error (
@@ -442,7 +434,7 @@ function compiler(options) {
442
434
443
435
function onenterlistitemvalue ( token ) {
444
436
if ( getData ( 'expectingFirstListItemValue' ) ) {
445
- this . stack [ this . stack . length - 2 ] . start = parseInt (
437
+ this . stack [ this . stack . length - 2 ] . start = Number . parseInt (
446
438
this . sliceSerialize ( token ) ,
447
439
constants . numericBaseDecimal
448
440
)
@@ -451,12 +443,12 @@ function compiler(options) {
451
443
}
452
444
453
445
function onexitcodefencedfenceinfo ( ) {
454
- var data = this . resume ( )
446
+ const data = this . resume ( )
455
447
this . stack [ this . stack . length - 1 ] . lang = data
456
448
}
457
449
458
450
function onexitcodefencedfencemeta ( ) {
459
- var data = this . resume ( )
451
+ const data = this . resume ( )
460
452
this . stack [ this . stack . length - 1 ] . meta = data
461
453
}
462
454
@@ -468,7 +460,7 @@ function compiler(options) {
468
460
}
469
461
470
462
function onexitcodefenced ( ) {
471
- var data = this . resume ( )
463
+ const data = this . resume ( )
472
464
473
465
this . stack [ this . stack . length - 1 ] . value = data . replace (
474
466
/ ^ ( \r ? \n | \r ) | ( \r ? \n | \r ) $ / g,
@@ -479,26 +471,26 @@ function compiler(options) {
479
471
}
480
472
481
473
function onexitcodeindented ( ) {
482
- var data = this . resume ( )
474
+ const data = this . resume ( )
483
475
this . stack [ this . stack . length - 1 ] . value = data . replace ( / ( \r ? \n | \r ) $ / g, '' )
484
476
}
485
477
486
478
function onexitdefinitionlabelstring ( token ) {
487
479
// Discard label, use the source content instead.
488
- var label = this . resume ( )
480
+ const label = this . resume ( )
489
481
this . stack [ this . stack . length - 1 ] . label = label
490
482
this . stack [ this . stack . length - 1 ] . identifier = normalizeIdentifier (
491
483
this . sliceSerialize ( token )
492
484
) . toLowerCase ( )
493
485
}
494
486
495
487
function onexitdefinitiontitlestring ( ) {
496
- var data = this . resume ( )
488
+ const data = this . resume ( )
497
489
this . stack [ this . stack . length - 1 ] . title = data
498
490
}
499
491
500
492
function onexitdefinitiondestinationstring ( ) {
501
- var data = this . resume ( )
493
+ const data = this . resume ( )
502
494
this . stack [ this . stack . length - 1 ] . url = data
503
495
}
504
496
@@ -523,8 +515,8 @@ function compiler(options) {
523
515
}
524
516
525
517
function onenterdata ( token ) {
526
- var siblings = this . stack [ this . stack . length - 1 ] . children
527
- var tail = siblings [ siblings . length - 1 ]
518
+ const siblings = this . stack [ this . stack . length - 1 ] . children
519
+ let tail = siblings [ siblings . length - 1 ]
528
520
529
521
if ( ! tail || tail . type !== 'text' ) {
530
522
// Add a new text node.
@@ -537,13 +529,13 @@ function compiler(options) {
537
529
}
538
530
539
531
function onexitdata ( token ) {
540
- var tail = this . stack . pop ( )
532
+ const tail = this . stack . pop ( )
541
533
tail . value += this . sliceSerialize ( token )
542
534
tail . position . end = point ( token . end )
543
535
}
544
536
545
537
function onexitlineending ( token ) {
546
- var context = this . stack [ this . stack . length - 1 ]
538
+ const context = this . stack [ this . stack . length - 1 ]
547
539
548
540
// If we’re at a hard break, include the line ending in there.
549
541
if ( getData ( 'atHardBreak' ) ) {
@@ -556,7 +548,7 @@ function compiler(options) {
556
548
557
549
if (
558
550
! getData ( 'setextHeadingSlurpLineEnding' ) &&
559
- config . canContainEols . indexOf ( context . type ) > - 1
551
+ config . canContainEols . includes ( context . type )
560
552
) {
561
553
onenterdata . call ( this , token )
562
554
onexitdata . call ( this , token )
@@ -568,22 +560,22 @@ function compiler(options) {
568
560
}
569
561
570
562
function onexithtmlflow ( ) {
571
- var data = this . resume ( )
563
+ const data = this . resume ( )
572
564
this . stack [ this . stack . length - 1 ] . value = data
573
565
}
574
566
575
567
function onexithtmltext ( ) {
576
- var data = this . resume ( )
568
+ const data = this . resume ( )
577
569
this . stack [ this . stack . length - 1 ] . value = data
578
570
}
579
571
580
572
function onexitcodetext ( ) {
581
- var data = this . resume ( )
573
+ const data = this . resume ( )
582
574
this . stack [ this . stack . length - 1 ] . value = data
583
575
}
584
576
585
577
function onexitlink ( ) {
586
- var context = this . stack [ this . stack . length - 1 ]
578
+ const context = this . stack [ this . stack . length - 1 ]
587
579
588
580
// To do: clean.
589
581
if ( getData ( 'inReference' ) ) {
@@ -601,7 +593,7 @@ function compiler(options) {
601
593
}
602
594
603
595
function onexitimage ( ) {
604
- var context = this . stack [ this . stack . length - 1 ]
596
+ const context = this . stack [ this . stack . length - 1 ]
605
597
606
598
// To do: clean.
607
599
if ( getData ( 'inReference' ) ) {
@@ -625,8 +617,8 @@ function compiler(options) {
625
617
}
626
618
627
619
function onexitlabel ( ) {
628
- var fragment = this . stack [ this . stack . length - 1 ]
629
- var value = this . resume ( )
620
+ const fragment = this . stack [ this . stack . length - 1 ]
621
+ const value = this . resume ( )
630
622
631
623
this . stack [ this . stack . length - 1 ] . label = value
632
624
@@ -641,12 +633,12 @@ function compiler(options) {
641
633
}
642
634
643
635
function onexitresourcedestinationstring ( ) {
644
- var data = this . resume ( )
636
+ const data = this . resume ( )
645
637
this . stack [ this . stack . length - 1 ] . url = data
646
638
}
647
639
648
640
function onexitresourcetitlestring ( ) {
649
- var data = this . resume ( )
641
+ const data = this . resume ( )
650
642
this . stack [ this . stack . length - 1 ] . title = data
651
643
}
652
644
@@ -659,7 +651,7 @@ function compiler(options) {
659
651
}
660
652
661
653
function onexitreferencestring ( token ) {
662
- var label = this . resume ( )
654
+ const label = this . resume ( )
663
655
this . stack [ this . stack . length - 1 ] . label = label
664
656
this . stack [ this . stack . length - 1 ] . identifier = normalizeIdentifier (
665
657
this . sliceSerialize ( token )
@@ -672,10 +664,9 @@ function compiler(options) {
672
664
}
673
665
674
666
function onexitcharacterreferencevalue ( token ) {
675
- var data = this . sliceSerialize ( token )
676
- var type = getData ( 'characterReferenceType' )
677
- var value
678
- var tail
667
+ const data = this . sliceSerialize ( token )
668
+ const type = getData ( 'characterReferenceType' )
669
+ let value
679
670
680
671
if ( type ) {
681
672
value = parseNumericCharacterReference (
@@ -689,7 +680,7 @@ function compiler(options) {
689
680
value = decodeEntity ( data )
690
681
}
691
682
692
- tail = this . stack . pop ( )
683
+ const tail = this . stack . pop ( )
693
684
tail . value += value
694
685
tail . position . end = point ( token . end )
695
686
}
@@ -792,7 +783,7 @@ function compiler(options) {
792
783
}
793
784
794
785
function configure ( config , extensions ) {
795
- var index = - 1
786
+ let index = - 1
796
787
797
788
while ( ++ index < extensions . length ) {
798
789
extension ( config , extensions [ index ] )
@@ -802,16 +793,17 @@ function configure(config, extensions) {
802
793
}
803
794
804
795
function extension ( config , extension ) {
805
- var key
806
- var left
796
+ let key
807
797
808
798
for ( key in extension ) {
809
- left = own . call ( config , key ) ? config [ key ] : ( config [ key ] = { } )
799
+ if ( own . call ( extension , key ) ) {
800
+ const left = own . call ( config , key ) ? config [ key ] : ( config [ key ] = { } )
810
801
811
- if ( key === 'canContainEols' || key === 'transforms' ) {
812
- config [ key ] = [ ] . concat ( left , extension [ key ] )
813
- } else {
814
- Object . assign ( left , extension [ key ] )
802
+ if ( key === 'canContainEols' || key === 'transforms' ) {
803
+ config [ key ] = [ ] . concat ( left , extension [ key ] )
804
+ } else {
805
+ Object . assign ( left , extension [ key ] )
806
+ }
815
807
}
816
808
}
817
809
}
0 commit comments