markdownlint 0.29.0 → 0.31.0

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.
@@ -1,4 +1,4 @@
1
- /*! markdownlint 0.29.0 https://github.com/DavidAnson/markdownlint @license MIT */
1
+ /*! markdownlint 0.31.0 https://github.com/DavidAnson/markdownlint @license MIT */
2
2
  var markdownlint;
3
3
  /******/ (() => { // webpackBootstrap
4
4
  /******/ var __webpack_modules__ = ({
@@ -34,21 +34,19 @@ module.exports = webpackEmptyContext;
34
34
 
35
35
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
36
36
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
37
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
37
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
38
38
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
39
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
39
40
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
40
41
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
42
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
41
43
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
42
44
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
43
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
44
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
45
45
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
46
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
46
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
47
47
  var micromark = __webpack_require__(/*! ./micromark.cjs */ "../helpers/micromark.cjs");
48
-
49
- // Regular expression for matching common newline characters
50
- // See NEWLINES_RE in markdown-it/lib/rules_core/normalize.js
51
- var newLineRe = /\r\n?|\n/g;
48
+ var _require = __webpack_require__(/*! ./shared.js */ "../helpers/shared.js"),
49
+ newLineRe = _require.newLineRe;
52
50
  module.exports.newLineRe = newLineRe;
53
51
 
54
52
  // Regular expression for matching common front matter (YAML and TOML)
@@ -62,17 +60,10 @@ var inlineCommentStartRe =
62
60
  /(<!--\s*markdownlint-(disable|enable|capture|restore|disable-file|enable-file|disable-line|disable-next-line|configure-file))(?:\s|-->)/gi;
63
61
  module.exports.inlineCommentStartRe = inlineCommentStartRe;
64
62
 
65
- // Regular expression for matching HTML elements
66
- var htmlElementRe = /<(([A-Za-z][A-Za-z\d-]*)(?:\s[^`>]*)?)\/?>/g;
67
- module.exports.htmlElementRe = htmlElementRe;
68
-
69
63
  // Regular expressions for range matching
70
64
  module.exports.listItemMarkerRe = /^([\s>]*)(?:[*+-]|\d+[.)])\s+/;
71
65
  module.exports.orderedListItemMarkerRe = /^[\s>]*0*(\d+)[.)]/;
72
66
 
73
- // Regular expression for all instances of emphasis markers
74
- var emphasisMarkersRe = /[_*]/g;
75
-
76
67
  // Regular expression for blockquote prefixes
77
68
  var blockquotePrefixRe = /^[>\s]*/;
78
69
  module.exports.blockquotePrefixRe = blockquotePrefixRe;
@@ -81,6 +72,16 @@ module.exports.blockquotePrefixRe = blockquotePrefixRe;
81
72
  var linkReferenceDefinitionRe = /^ {0,3}\[([^\]]*[^\\])\]:/;
82
73
  module.exports.linkReferenceDefinitionRe = linkReferenceDefinitionRe;
83
74
 
75
+ // Regular expression for identifying an HTML entity at the end of a line
76
+ module.exports.endOfLineHtmlEntityRe =
77
+ // eslint-disable-next-line max-len
78
+ /&(?:#\d+|#[xX][\da-fA-F]+|[a-zA-Z]{2,31}|blk\d{2}|emsp1[34]|frac\d{2}|sup\d|there4);$/;
79
+
80
+ // Regular expression for identifying a GitHub emoji code at the end of a line
81
+ module.exports.endOfLineGemojiCodeRe =
82
+ // eslint-disable-next-line max-len
83
+ /:(?:[abmovx]|[-+]1|100|1234|(?:1st|2nd|3rd)_place_medal|8ball|clock\d{1,4}|e-mail|non-potable_water|o2|t-rex|u5272|u5408|u55b6|u6307|u6708|u6709|u6e80|u7121|u7533|u7981|u7a7a|[a-z]{2,15}2?|[a-z]{1,14}(?:_[a-z\d]{1,16})+):$/;
84
+
84
85
  // All punctuation characters (normal and full-width)
85
86
  var allPunctuation = ".,;:!?。,;:!?";
86
87
  module.exports.allPunctuation = allPunctuation;
@@ -88,25 +89,82 @@ module.exports.allPunctuation = allPunctuation;
88
89
  // All punctuation characters without question mark (normal and full-width)
89
90
  module.exports.allPunctuationNoQuestion = allPunctuation.replace(/[\?\uFF1F]/g, "");
90
91
 
91
- // Returns true iff the input is a number
92
- module.exports.isNumber = function isNumber(obj) {
92
+ /**
93
+ * Returns true iff the input is a Number.
94
+ *
95
+ * @param {Object} obj Object of unknown type.
96
+ * @returns {boolean} True iff obj is a Number.
97
+ */
98
+ function isNumber(obj) {
93
99
  return typeof obj === "number";
94
- };
100
+ }
101
+ module.exports.isNumber = isNumber;
95
102
 
96
- // Returns true iff the input is a string
97
- module.exports.isString = function isString(obj) {
103
+ /**
104
+ * Returns true iff the input is a String.
105
+ *
106
+ * @param {Object} obj Object of unknown type.
107
+ * @returns {boolean} True iff obj is a String.
108
+ */
109
+ function isString(obj) {
98
110
  return typeof obj === "string";
99
- };
111
+ }
112
+ module.exports.isString = isString;
100
113
 
101
- // Returns true iff the input string is empty
102
- module.exports.isEmptyString = function isEmptyString(str) {
114
+ /**
115
+ * Returns true iff the input String is empty.
116
+ *
117
+ * @param {string} str String of unknown length.
118
+ * @returns {boolean} True iff the input String is empty.
119
+ */
120
+ function isEmptyString(str) {
103
121
  return str.length === 0;
104
- };
122
+ }
123
+ module.exports.isEmptyString = isEmptyString;
105
124
 
106
- // Returns true iff the input is an object
107
- module.exports.isObject = function isObject(obj) {
108
- return obj !== null && _typeof(obj) === "object" && !Array.isArray(obj);
109
- };
125
+ /**
126
+ * Returns true iff the input is an Object.
127
+ *
128
+ * @param {Object} obj Object of unknown type.
129
+ * @returns {boolean} True iff obj is an Object.
130
+ */
131
+ function isObject(obj) {
132
+ return !!obj && _typeof(obj) === "object" && !Array.isArray(obj);
133
+ }
134
+ module.exports.isObject = isObject;
135
+
136
+ /**
137
+ * Returns true iff the input is a URL.
138
+ *
139
+ * @param {Object} obj Object of unknown type.
140
+ * @returns {boolean} True iff obj is a URL.
141
+ */
142
+ function isUrl(obj) {
143
+ return !!obj && Object.getPrototypeOf(obj) === URL.prototype;
144
+ }
145
+ module.exports.isUrl = isUrl;
146
+
147
+ /**
148
+ * Clones the input if it is an Array.
149
+ *
150
+ * @param {Object} arr Object of unknown type.
151
+ * @returns {Object} Clone of obj iff obj is an Array.
152
+ */
153
+ function cloneIfArray(arr) {
154
+ return Array.isArray(arr) ? _toConsumableArray(arr) : arr;
155
+ }
156
+ module.exports.cloneIfArray = cloneIfArray;
157
+
158
+ /**
159
+ * Clones the input if it is a URL.
160
+ *
161
+ * @param {Object} url Object of unknown type.
162
+ * @returns {Object} Clone of obj iff obj is a URL.
163
+ */
164
+ function cloneIfUrl(url) {
165
+ return isUrl(url) ? new URL(url) : url;
166
+ }
167
+ module.exports.cloneIfUrl = cloneIfUrl;
110
168
 
111
169
  /**
112
170
  * Returns true iff the input line is blank (contains nothing, whitespace, or
@@ -289,12 +347,18 @@ module.exports.unorderedListStyleFor = function unorderedListStyleFor(token) {
289
347
  }
290
348
  };
291
349
 
350
+ /**
351
+ * @callback TokenCallback
352
+ * @param {MarkdownItToken} token Current token.
353
+ * @returns {void}
354
+ */
355
+
292
356
  /**
293
357
  * Calls the provided function for each matching token.
294
358
  *
295
359
  * @param {Object} params RuleParams instance.
296
360
  * @param {string} type Token type identifier.
297
- * @param {Function} handler Callback function.
361
+ * @param {TokenCallback} handler Callback function.
298
362
  * @returns {void}
299
363
  */
300
364
  function filterTokens(params, type, handler) {
@@ -316,20 +380,18 @@ function filterTokens(params, type, handler) {
316
380
  module.exports.filterTokens = filterTokens;
317
381
 
318
382
  /**
319
- * Returns whether a token is a math block (created by markdown-it-texmath).
320
- *
321
- * @param {Object} token MarkdownItToken instance.
322
- * @returns {boolean} True iff token is a math block.
383
+ * @typedef {Array} LineMetadata
323
384
  */
324
- function isMathBlock(token) {
325
- return (token.tag === "$$" || token.tag === "math") && token.type.startsWith("math_block") && !token.type.endsWith("_end");
326
- }
327
- module.exports.isMathBlock = isMathBlock;
328
385
 
329
- // Get line metadata array
330
- module.exports.getLineMetadata = function getLineMetadata(params) {
386
+ /**
387
+ * Gets a line metadata array.
388
+ *
389
+ * @param {Object} params RuleParams instance.
390
+ * @returns {LineMetadata} Line metadata.
391
+ */
392
+ function getLineMetadata(params) {
331
393
  var lineMetadata = params.lines.map(function (line, index) {
332
- return [line, index, false, 0, false, false, false, false];
394
+ return [line, index, false, 0, false, false, false];
333
395
  });
334
396
  filterTokens(params, "fence", function (token) {
335
397
  lineMetadata[token.map[0]][3] = 1;
@@ -358,43 +420,43 @@ module.exports.getLineMetadata = function getLineMetadata(params) {
358
420
  filterTokens(params, "hr", function (token) {
359
421
  lineMetadata[token.map[0]][6] = true;
360
422
  });
361
- var _iterator2 = _createForOfIteratorHelper(params.parsers.markdownit.tokens.filter(isMathBlock)),
362
- _step2;
363
- try {
364
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
365
- var token = _step2.value;
366
- for (var i = token.map[0]; i < token.map[1]; i++) {
367
- lineMetadata[i][7] = true;
368
- }
369
- }
370
- } catch (err) {
371
- _iterator2.e(err);
372
- } finally {
373
- _iterator2.f();
374
- }
375
423
  return lineMetadata;
376
- };
424
+ }
425
+ module.exports.getLineMetadata = getLineMetadata;
426
+
427
+ /**
428
+ * @callback EachLineCallback
429
+ * @param {string} line Line content.
430
+ * @param {number} lineIndex Line index (0-based).
431
+ * @param {boolean} inCode Iff in a code block.
432
+ * @param {number} onFence + if open, - if closed, 0 otherwise.
433
+ * @param {boolean} inTable Iff in a table.
434
+ * @param {boolean} inItem Iff in a list item.
435
+ * @param {boolean} inBreak Iff in semantic break.
436
+ * @returns {void}
437
+ */
377
438
 
378
439
  /**
379
440
  * Calls the provided function for each line.
380
441
  *
381
- * @param {Object} lineMetadata Line metadata object.
382
- * @param {Function} handler Function taking (line, lineIndex, inCode, onFence,
383
- * inTable, inItem, inBreak, inMath).
442
+ * @param {LineMetadata} lineMetadata Line metadata object.
443
+ * @param {EachLineCallback} handler Function taking (line, lineIndex, inCode,
444
+ * onFence, inTable, inItem, inBreak).
384
445
  * @returns {void}
385
446
  */
386
447
  function forEachLine(lineMetadata, handler) {
387
- var _iterator3 = _createForOfIteratorHelper(lineMetadata),
388
- _step3;
448
+ var _iterator2 = _createForOfIteratorHelper(lineMetadata),
449
+ _step2;
389
450
  try {
390
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
391
- var metadata = _step3.value;
451
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
452
+ var metadata = _step2.value;
453
+ // @ts-ignore
392
454
  handler.apply(void 0, _toConsumableArray(metadata));
393
455
  }
394
456
  } catch (err) {
395
- _iterator3.e(err);
457
+ _iterator2.e(err);
396
458
  } finally {
397
- _iterator3.f();
459
+ _iterator2.f();
398
460
  }
399
461
  }
400
462
  module.exports.forEachLine = forEachLine;
@@ -409,11 +471,11 @@ module.exports.flattenLists = function flattenLists(tokens) {
409
471
  var lastWithMap = {
410
472
  "map": [0, 1]
411
473
  };
412
- var _iterator4 = _createForOfIteratorHelper(tokens),
413
- _step4;
474
+ var _iterator3 = _createForOfIteratorHelper(tokens),
475
+ _step3;
414
476
  try {
415
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
416
- var token = _step4.value;
477
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
478
+ var token = _step3.value;
417
479
  if (token.type === "bullet_list_open" || token.type === "ordered_list_open") {
418
480
  // Save current context and start a new one
419
481
  stack.push(current);
@@ -451,49 +513,21 @@ module.exports.flattenLists = function flattenLists(tokens) {
451
513
  }
452
514
  }
453
515
  } catch (err) {
454
- _iterator4.e(err);
516
+ _iterator3.e(err);
455
517
  } finally {
456
- _iterator4.f();
518
+ _iterator3.f();
457
519
  }
458
520
  return flattenedLists;
459
521
  };
460
522
 
461
- /**
462
- * Calls the provided function for each specified inline child token.
463
- *
464
- * @param {Object} params RuleParams instance.
465
- * @param {string} type Token type identifier.
466
- * @param {Function} handler Callback function.
467
- * @returns {void}
468
- */
469
- function forEachInlineChild(params, type, handler) {
470
- filterTokens(params, "inline", function (token) {
471
- var _iterator5 = _createForOfIteratorHelper(token.children.filter(function (c) {
472
- return c.type === type;
473
- })),
474
- _step5;
475
- try {
476
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
477
- var child = _step5.value;
478
- handler(child, token);
479
- }
480
- } catch (err) {
481
- _iterator5.e(err);
482
- } finally {
483
- _iterator5.f();
484
- }
485
- });
486
- }
487
- module.exports.forEachInlineChild = forEachInlineChild;
488
-
489
523
  // Calls the provided function for each heading's content
490
524
  module.exports.forEachHeading = function forEachHeading(params, handler) {
491
525
  var heading = null;
492
- var _iterator6 = _createForOfIteratorHelper(params.parsers.markdownit.tokens),
493
- _step6;
526
+ var _iterator4 = _createForOfIteratorHelper(params.parsers.markdownit.tokens),
527
+ _step4;
494
528
  try {
495
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
496
- var token = _step6.value;
529
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
530
+ var token = _step4.value;
497
531
  if (token.type === "heading_open") {
498
532
  heading = token;
499
533
  } else if (token.type === "heading_close") {
@@ -503,18 +537,27 @@ module.exports.forEachHeading = function forEachHeading(params, handler) {
503
537
  }
504
538
  }
505
539
  } catch (err) {
506
- _iterator6.e(err);
540
+ _iterator4.e(err);
507
541
  } finally {
508
- _iterator6.f();
542
+ _iterator4.f();
509
543
  }
510
544
  };
511
545
 
546
+ /**
547
+ * @callback InlineCodeSpanCallback
548
+ * @param {string} code Code content.
549
+ * @param {number} lineIndex Line index (0-based).
550
+ * @param {number} columnIndex Column index (0-based).
551
+ * @param {number} ticks Count of backticks.
552
+ * @returns {void}
553
+ */
554
+
512
555
  /**
513
556
  * Calls the provided function for each inline code span's content.
514
557
  *
515
558
  * @param {string} input Markdown content.
516
- * @param {Function} handler Callback function taking (code, lineIndex,
517
- * columnIndex, ticks).
559
+ * @param {InlineCodeSpanCallback} handler Callback function taking (code,
560
+ * lineIndex, columnIndex, ticks).
518
561
  * @returns {void}
519
562
  */
520
563
  function forEachInlineCodeSpan(input, handler) {
@@ -640,19 +683,19 @@ module.exports.codeBlockAndSpanRanges = function (params, lineMetadata) {
640
683
  var tokenLines = params.lines.slice(token.map[0], token.map[1]);
641
684
  forEachInlineCodeSpan(tokenLines.join("\n"), function (code, lineIndex, columnIndex) {
642
685
  var codeLines = code.split(newLineRe);
643
- var _iterator7 = _createForOfIteratorHelper(codeLines.entries()),
644
- _step7;
686
+ var _iterator5 = _createForOfIteratorHelper(codeLines.entries()),
687
+ _step5;
645
688
  try {
646
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
647
- var _step7$value = _slicedToArray(_step7.value, 2),
648
- i = _step7$value[0],
649
- line = _step7$value[1];
689
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
690
+ var _step5$value = _slicedToArray(_step5.value, 2),
691
+ i = _step5$value[0],
692
+ line = _step5$value[1];
650
693
  exclusions.push([token.lineNumber - 1 + lineIndex + i, i ? 0 : columnIndex, line.length]);
651
694
  }
652
695
  } catch (err) {
653
- _iterator7.e(err);
696
+ _iterator5.e(err);
654
697
  } finally {
655
- _iterator7.f();
698
+ _iterator5.f();
656
699
  }
657
700
  });
658
701
  }
@@ -660,51 +703,6 @@ module.exports.codeBlockAndSpanRanges = function (params, lineMetadata) {
660
703
  return exclusions;
661
704
  };
662
705
 
663
- /**
664
- * Returns an array of HTML element ranges.
665
- *
666
- * @param {Object} params RuleParams instance.
667
- * @param {Object} lineMetadata Line metadata object.
668
- * @returns {number[][]} Array of ranges (lineIndex, columnIndex, length).
669
- */
670
- module.exports.htmlElementRanges = function (params, lineMetadata) {
671
- var exclusions = [];
672
- // Match with htmlElementRe
673
- forEachLine(lineMetadata, function (line, lineIndex, inCode) {
674
- var match = null;
675
- // eslint-disable-next-line no-unmodified-loop-condition
676
- while (!inCode && (match = htmlElementRe.exec(line)) !== null) {
677
- exclusions.push([lineIndex, match.index, match[0].length]);
678
- }
679
- });
680
- // Match with html_inline
681
- forEachInlineChild(params, "html_inline", function (token, parent) {
682
- var parentContent = parent.content;
683
- var tokenContent = token.content;
684
- var parentIndex = parentContent.indexOf(tokenContent);
685
- var deltaLines = 0;
686
- var indent = 0;
687
- for (var i = parentIndex - 1; i >= 0; i--) {
688
- if (parentContent[i] === "\n") {
689
- deltaLines++;
690
- } else if (deltaLines === 0) {
691
- indent++;
692
- }
693
- }
694
- var lineIndex = token.lineNumber - 1 + deltaLines;
695
- do {
696
- var index = tokenContent.indexOf("\n");
697
- var length = index === -1 ? tokenContent.length : index;
698
- exclusions.push([lineIndex, indent, length]);
699
- tokenContent = tokenContent.slice(length + 1);
700
- lineIndex++;
701
- indent = 0;
702
- } while (tokenContent.length > 0);
703
- });
704
- // Return results
705
- return exclusions;
706
- };
707
-
708
706
  /**
709
707
  * Determines whether the specified range is within another range.
710
708
  *
@@ -742,155 +740,6 @@ module.exports.frontMatterHasTitle = function frontMatterHasTitle(frontMatterLin
742
740
  });
743
741
  };
744
742
 
745
- /**
746
- * Calls the provided function for each link.
747
- *
748
- * @param {string} line Line of Markdown input.
749
- * @param {Function} handler Function taking (index, link, text, destination).
750
- * @returns {void}
751
- */
752
- function forEachLink(line, handler) {
753
- // Helper to find matching close symbol for link text/destination
754
- var findClosingSymbol = function findClosingSymbol(index) {
755
- var begin = line[index];
756
- var end = begin === "[" ? "]" : ")";
757
- var nesting = 0;
758
- var escaping = false;
759
- var pointy = false;
760
- for (var i = index + 1; i < line.length; i++) {
761
- var current = line[i];
762
- if (current === "\\") {
763
- escaping = !escaping;
764
- } else if (!escaping && current === begin) {
765
- nesting++;
766
- } else if (!escaping && current === end) {
767
- if (nesting > 0) {
768
- nesting--;
769
- } else if (!pointy) {
770
- // Return index after matching close symbol
771
- return i + 1;
772
- }
773
- } else if (i === index + 1 && begin === "(" && current === "<") {
774
- pointy = true;
775
- } else if (!escaping && pointy && current === ">") {
776
- pointy = false;
777
- nesting = 0;
778
- } else {
779
- escaping = false;
780
- }
781
- }
782
- // No match found
783
- return -1;
784
- };
785
- // Scan line for unescaped "[" character
786
- var escaping = false;
787
- for (var i = 0; i < line.length; i++) {
788
- var current = line[i];
789
- if (current === "\\") {
790
- escaping = !escaping;
791
- } else if (!escaping && current === "[") {
792
- // Scan for matching close "]" of link text
793
- var textEnd = findClosingSymbol(i);
794
- if (textEnd !== -1) {
795
- if (line[textEnd] === "(" || line[textEnd] === "[") {
796
- // Scan for matching close ")" or "]" of link destination
797
- var destEnd = findClosingSymbol(textEnd);
798
- if (destEnd !== -1) {
799
- // Call handler with link text and destination
800
- var link = line.slice(i, destEnd);
801
- var text = line.slice(i, textEnd);
802
- var dest = line.slice(textEnd, destEnd);
803
- handler(i, link, text, dest);
804
- i = destEnd;
805
- }
806
- }
807
- if (i < textEnd) {
808
- // Call handler with link text only
809
- var _text = line.slice(i, textEnd);
810
- handler(i, _text, _text);
811
- i = textEnd;
812
- }
813
- }
814
- } else {
815
- escaping = false;
816
- }
817
- }
818
- }
819
- module.exports.forEachLink = forEachLink;
820
-
821
- /**
822
- * Returns a list of emphasis markers in code spans and links.
823
- *
824
- * @param {Object} params RuleParams instance.
825
- * @returns {number[][]} List of markers.
826
- */
827
- function emphasisMarkersInContent(params) {
828
- var lines = params.lines;
829
- var byLine = new Array(lines.length);
830
- // Search links
831
- var _iterator8 = _createForOfIteratorHelper(lines.entries()),
832
- _step8;
833
- try {
834
- var _loop = function _loop() {
835
- var _step8$value = _slicedToArray(_step8.value, 2),
836
- tokenLineIndex = _step8$value[0],
837
- tokenLine = _step8$value[1];
838
- var inLine = [];
839
- forEachLink(tokenLine, function (index, match) {
840
- var markerMatch = null;
841
- while (markerMatch = emphasisMarkersRe.exec(match)) {
842
- inLine.push(index + markerMatch.index);
843
- }
844
- });
845
- byLine[tokenLineIndex] = inLine;
846
- };
847
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
848
- _loop();
849
- }
850
- // Search code spans
851
- } catch (err) {
852
- _iterator8.e(err);
853
- } finally {
854
- _iterator8.f();
855
- }
856
- filterTokens(params, "inline", function (token) {
857
- var children = token.children,
858
- lineNumber = token.lineNumber,
859
- map = token.map;
860
- if (children.some(function (child) {
861
- return child.type === "code_inline";
862
- })) {
863
- var tokenLines = lines.slice(map[0], map[1]);
864
- forEachInlineCodeSpan(tokenLines.join("\n"), function (code, lineIndex, column, tickCount) {
865
- var codeLines = code.split(newLineRe);
866
- var _iterator9 = _createForOfIteratorHelper(codeLines.entries()),
867
- _step9;
868
- try {
869
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
870
- var _step9$value = _slicedToArray(_step9.value, 2),
871
- codeLineIndex = _step9$value[0],
872
- codeLine = _step9$value[1];
873
- var byLineIndex = lineNumber - 1 + lineIndex + codeLineIndex;
874
- var inLine = byLine[byLineIndex];
875
- var codeLineOffset = codeLineIndex ? 0 : column - 1 + tickCount;
876
- var match = null;
877
- while (match = emphasisMarkersRe.exec(codeLine)) {
878
- inLine.push(codeLineOffset + match.index);
879
- }
880
- byLine[byLineIndex] = inLine;
881
- }
882
- } catch (err) {
883
- _iterator9.e(err);
884
- } finally {
885
- _iterator9.f();
886
- }
887
- });
888
- }
889
- });
890
- return byLine;
891
- }
892
- module.exports.emphasisMarkersInContent = emphasisMarkersInContent;
893
-
894
743
  /**
895
744
  * Returns an object with information about reference links and images.
896
745
  *
@@ -913,11 +762,11 @@ function getReferenceLinkImageData(params) {
913
762
  "definitionLabelString", "gfmFootnoteDefinitionLabelString",
914
763
  // references and shortcuts
915
764
  "gfmFootnoteCall", "image", "link"]);
916
- var _iterator10 = _createForOfIteratorHelper(filteredTokens),
917
- _step10;
765
+ var _iterator6 = _createForOfIteratorHelper(filteredTokens),
766
+ _step6;
918
767
  try {
919
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
920
- var token = _step10.value;
768
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
769
+ var token = _step6.value;
921
770
  var labelPrefix = "";
922
771
  // eslint-disable-next-line default-case
923
772
  switch (token.type) {
@@ -984,9 +833,9 @@ function getReferenceLinkImageData(params) {
984
833
  }
985
834
  }
986
835
  } catch (err) {
987
- _iterator10.e(err);
836
+ _iterator6.e(err);
988
837
  } finally {
989
- _iterator10.f();
838
+ _iterator6.f();
990
839
  }
991
840
  return {
992
841
  references: references,
@@ -1010,11 +859,11 @@ function getPreferredLineEnding(input, os) {
1010
859
  var lf = 0;
1011
860
  var crlf = 0;
1012
861
  var endings = input.match(newLineRe) || [];
1013
- var _iterator11 = _createForOfIteratorHelper(endings),
1014
- _step11;
862
+ var _iterator7 = _createForOfIteratorHelper(endings),
863
+ _step7;
1015
864
  try {
1016
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
1017
- var ending = _step11.value;
865
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
866
+ var ending = _step7.value;
1018
867
  // eslint-disable-next-line default-case
1019
868
  switch (ending) {
1020
869
  case "\r":
@@ -1029,9 +878,9 @@ function getPreferredLineEnding(input, os) {
1029
878
  }
1030
879
  }
1031
880
  } catch (err) {
1032
- _iterator11.e(err);
881
+ _iterator7.e(err);
1033
882
  } finally {
1034
- _iterator11.f();
883
+ _iterator7.f();
1035
884
  }
1036
885
  var preferredLineEnding = null;
1037
886
  if (!cr && !lf && !crlf) {
@@ -1114,11 +963,11 @@ function applyFixes(input, errors) {
1114
963
  lastFixInfo = {
1115
964
  "lineNumber": -1
1116
965
  };
1117
- var _iterator12 = _createForOfIteratorHelper(fixInfos),
1118
- _step12;
966
+ var _iterator8 = _createForOfIteratorHelper(fixInfos),
967
+ _step8;
1119
968
  try {
1120
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
1121
- var fixInfo = _step12.value;
969
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
970
+ var fixInfo = _step8.value;
1122
971
  if (fixInfo.lineNumber === lastFixInfo.lineNumber && fixInfo.editColumn === lastFixInfo.editColumn && !fixInfo.insertText && fixInfo.deleteCount > 0 && lastFixInfo.insertText && !lastFixInfo.deleteCount) {
1123
972
  fixInfo.insertText = lastFixInfo.insertText;
1124
973
  lastFixInfo.lineNumber = 0;
@@ -1126,9 +975,9 @@ function applyFixes(input, errors) {
1126
975
  lastFixInfo = fixInfo;
1127
976
  }
1128
977
  } catch (err) {
1129
- _iterator12.e(err);
978
+ _iterator8.e(err);
1130
979
  } finally {
1131
- _iterator12.f();
980
+ _iterator8.f();
1132
981
  }
1133
982
  fixInfos = fixInfos.filter(function (fixInfo) {
1134
983
  return fixInfo.lineNumber;
@@ -1136,11 +985,11 @@ function applyFixes(input, errors) {
1136
985
  // Apply all (remaining/updated) fixes
1137
986
  var lastLineIndex = -1;
1138
987
  var lastEditIndex = -1;
1139
- var _iterator13 = _createForOfIteratorHelper(fixInfos),
1140
- _step13;
988
+ var _iterator9 = _createForOfIteratorHelper(fixInfos),
989
+ _step9;
1141
990
  try {
1142
- for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
1143
- var _fixInfo = _step13.value;
991
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
992
+ var _fixInfo = _step9.value;
1144
993
  var lineNumber = _fixInfo.lineNumber,
1145
994
  editColumn = _fixInfo.editColumn,
1146
995
  deleteCount = _fixInfo.deleteCount;
@@ -1155,9 +1004,9 @@ function applyFixes(input, errors) {
1155
1004
  }
1156
1005
  // Return corrected input
1157
1006
  } catch (err) {
1158
- _iterator13.e(err);
1007
+ _iterator9.e(err);
1159
1008
  } finally {
1160
- _iterator13.f();
1009
+ _iterator9.f();
1161
1010
  }
1162
1011
  return lines.filter(function (line) {
1163
1012
  return line !== null;
@@ -1178,6 +1027,43 @@ function expandTildePath(file, os) {
1178
1027
  }
1179
1028
  module.exports.expandTildePath = expandTildePath;
1180
1029
 
1030
+ // Copied from markdownlint.js to avoid TypeScript compiler import() issue.
1031
+ /**
1032
+ * @typedef {Object} MarkdownItToken
1033
+ * @property {string[][]} attrs HTML attributes.
1034
+ * @property {boolean} block Block-level token.
1035
+ * @property {MarkdownItToken[]} children Child nodes.
1036
+ * @property {string} content Tag contents.
1037
+ * @property {boolean} hidden Ignore element.
1038
+ * @property {string} info Fence info.
1039
+ * @property {number} level Nesting level.
1040
+ * @property {number[]} map Beginning/ending line numbers.
1041
+ * @property {string} markup Markup text.
1042
+ * @property {Object} meta Arbitrary data.
1043
+ * @property {number} nesting Level change.
1044
+ * @property {string} tag HTML tag name.
1045
+ * @property {string} type Token type.
1046
+ * @property {number} lineNumber Line number (1-based).
1047
+ * @property {string} line Line content.
1048
+ */
1049
+
1050
+ /***/ }),
1051
+
1052
+ /***/ "../helpers/shared.js":
1053
+ /*!****************************!*\
1054
+ !*** ../helpers/shared.js ***!
1055
+ \****************************/
1056
+ /***/ ((module) => {
1057
+
1058
+ "use strict";
1059
+ // @ts-check
1060
+
1061
+
1062
+
1063
+ // Regular expression for matching common newline characters
1064
+ // See NEWLINES_RE in markdown-it/lib/rules_core/normalize.js
1065
+ module.exports.newLineRe = /\r\n?|\n/g;
1066
+
1181
1067
  /***/ }),
1182
1068
 
1183
1069
  /***/ "markdown-it":
@@ -1282,24 +1168,30 @@ module.exports = {
1282
1168
 
1283
1169
 
1284
1170
  // @ts-ignore
1285
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
1286
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1287
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
1288
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
1171
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
1172
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1173
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1174
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1175
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
1176
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
1289
1177
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
1290
1178
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1291
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
1179
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
1292
1180
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1293
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
1181
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
1294
1182
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1295
1183
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
1296
1184
  var _require = __webpack_require__(/*! markdownlint-micromark */ "markdownlint-micromark"),
1297
1185
  gfmAutolinkLiteral = _require.gfmAutolinkLiteral,
1298
1186
  gfmFootnote = _require.gfmFootnote,
1299
1187
  gfmTable = _require.gfmTable,
1188
+ math = _require.math,
1300
1189
  parse = _require.parse,
1301
1190
  postprocess = _require.postprocess,
1302
1191
  preprocess = _require.preprocess;
1192
+ var _require2 = __webpack_require__(/*! ./shared.js */ "../helpers/shared.js"),
1193
+ newLineRe = _require2.newLineRe;
1194
+ var flatTokensSymbol = Symbol("flat-tokens");
1303
1195
 
1304
1196
  /**
1305
1197
  * Markdown token.
@@ -1314,26 +1206,42 @@ var _require = __webpack_require__(/*! markdownlint-micromark */ "markdownlint-m
1314
1206
  * @property {Token[]} children Child tokens.
1315
1207
  */
1316
1208
 
1209
+ /**
1210
+ * Returns whether a token is an htmlFlow type containing an HTML comment.
1211
+ *
1212
+ * @param {Token} token Micromark token.
1213
+ * @returns {boolean} True iff token is htmlFlow containing a comment.
1214
+ */
1215
+ function isHtmlFlowComment(token) {
1216
+ var text = token.text,
1217
+ type = token.type;
1218
+ if (type === "htmlFlow" && text.startsWith("<!--") && text.endsWith("-->")) {
1219
+ var comment = text.slice(4, -3);
1220
+ return !comment.startsWith(">") && !comment.startsWith("->") && !comment.endsWith("-") && !comment.includes("--");
1221
+ }
1222
+ return false;
1223
+ }
1224
+
1317
1225
  /**
1318
1226
  * Parses a Markdown document and returns Micromark events.
1319
1227
  *
1320
1228
  * @param {string} markdown Markdown document.
1321
- * @param {Object} [options] Options for micromark.
1322
- * @param {boolean} [refsDefined] Whether to treat references as defined.
1229
+ * @param {Object} [micromarkOptions] Options for micromark.
1230
+ * @param {boolean} [referencesDefined] Treat references as defined.
1323
1231
  * @returns {Object[]} Micromark events.
1324
1232
  */
1325
1233
  function getMicromarkEvents(markdown) {
1326
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1327
- var refsDefined = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
1234
+ var micromarkOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1235
+ var referencesDefined = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
1328
1236
  // Customize options object to add useful extensions
1329
- options.extensions = options.extensions || [];
1330
- options.extensions.push(gfmAutolinkLiteral, gfmFootnote(), gfmTable);
1237
+ micromarkOptions.extensions = micromarkOptions.extensions || [];
1238
+ micromarkOptions.extensions.push(gfmAutolinkLiteral(), gfmFootnote(), gfmTable(), math());
1331
1239
 
1332
1240
  // Use micromark to parse document into Events
1333
1241
  var encoding = undefined;
1334
1242
  var eol = true;
1335
- var parseContext = parse(options);
1336
- if (refsDefined) {
1243
+ var parseContext = parse(micromarkOptions);
1244
+ if (referencesDefined) {
1337
1245
  // Customize ParseContext to treat all references as defined
1338
1246
  parseContext.defined.includes = function (searchElement) {
1339
1247
  return searchElement.length > 0;
@@ -1348,22 +1256,25 @@ function getMicromarkEvents(markdown) {
1348
1256
  * Parses a Markdown document and returns (frozen) tokens.
1349
1257
  *
1350
1258
  * @param {string} markdown Markdown document.
1351
- * @param {Object} [options] Options for micromark.
1352
- * @param {boolean} [refsDefined] Whether to treat references as defined.
1259
+ * @param {Object} micromarkOptions Options for micromark.
1260
+ * @param {boolean} referencesDefined Treat references as defined.
1261
+ * @param {number} lineDelta Offset to apply to start/end line.
1353
1262
  * @returns {Token[]} Micromark tokens (frozen).
1354
1263
  */
1355
- function micromarkParse(markdown) {
1356
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1357
- var refsDefined = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
1264
+ function micromarkParseWithOffset(markdown, micromarkOptions, referencesDefined, lineDelta) {
1358
1265
  // Use micromark to parse document into Events
1359
- var events = getMicromarkEvents(markdown, options, refsDefined);
1266
+ var events = getMicromarkEvents(markdown, micromarkOptions, referencesDefined);
1360
1267
 
1361
1268
  // Create Token objects
1362
1269
  var document = [];
1270
+ var flatTokens = [];
1363
1271
  var current = {
1364
1272
  "children": document
1365
1273
  };
1366
1274
  var history = [current];
1275
+ var reparseOptions = null;
1276
+ var lines = null;
1277
+ var skipHtmlFlowChildren = false;
1367
1278
  var _iterator = _createForOfIteratorHelper(events),
1368
1279
  _step;
1369
1280
  try {
@@ -1381,24 +1292,50 @@ function micromarkParse(markdown) {
1381
1292
  var endColumn = end["column"],
1382
1293
  endLine = end["line"];
1383
1294
  var text = context.sliceSerialize(token);
1384
- if (kind === "enter") {
1295
+ if (kind === "enter" && !skipHtmlFlowChildren) {
1385
1296
  var previous = current;
1386
1297
  history.push(previous);
1387
1298
  current = {
1388
1299
  type: type,
1389
- startLine: startLine,
1300
+ "startLine": startLine + lineDelta,
1390
1301
  startColumn: startColumn,
1391
- endLine: endLine,
1302
+ "endLine": endLine + lineDelta,
1392
1303
  endColumn: endColumn,
1393
1304
  text: text,
1394
1305
  "children": []
1395
1306
  };
1396
1307
  previous.children.push(current);
1397
- } else if (kind === "exit") {
1398
- Object.freeze(current.children);
1399
- Object.freeze(current);
1308
+ flatTokens.push(current);
1400
1309
  // @ts-ignore
1401
- current = history.pop();
1310
+ if (current.type === "htmlFlow" && !isHtmlFlowComment(current)) {
1311
+ skipHtmlFlowChildren = true;
1312
+ if (!reparseOptions || !lines) {
1313
+ reparseOptions = _objectSpread(_objectSpread({}, micromarkOptions), {}, {
1314
+ "extensions": [{
1315
+ "disable": {
1316
+ "null": ["codeIndented", "htmlFlow"]
1317
+ }
1318
+ }]
1319
+ });
1320
+ lines = markdown.split(newLineRe);
1321
+ }
1322
+ var reparseMarkdown = lines.slice(current.startLine - 1, current.endLine).join("\n");
1323
+ var tokens = micromarkParseWithOffset(reparseMarkdown, reparseOptions, referencesDefined, current.startLine - 1);
1324
+ current.children = tokens;
1325
+ // Avoid stack overflow of Array.push(...spread)
1326
+ // eslint-disable-next-line unicorn/prefer-spread
1327
+ flatTokens = flatTokens.concat(tokens[flatTokensSymbol]);
1328
+ }
1329
+ } else if (kind === "exit") {
1330
+ if (type === "htmlFlow") {
1331
+ skipHtmlFlowChildren = false;
1332
+ }
1333
+ if (!skipHtmlFlowChildren) {
1334
+ Object.freeze(current.children);
1335
+ Object.freeze(current);
1336
+ // @ts-ignore
1337
+ current = history.pop();
1338
+ }
1402
1339
  }
1403
1340
  }
1404
1341
 
@@ -1408,48 +1345,72 @@ function micromarkParse(markdown) {
1408
1345
  } finally {
1409
1346
  _iterator.f();
1410
1347
  }
1348
+ Object.defineProperty(document, flatTokensSymbol, {
1349
+ "value": flatTokens
1350
+ });
1411
1351
  Object.freeze(document);
1412
1352
  return document;
1413
1353
  }
1414
1354
 
1415
- // /**
1416
- // * Log the structure of a Micromark token list.
1417
- // *
1418
- // * @param {Token[]} tokens Micromark tokens.
1419
- // * @param {number} depth Tree depth.
1420
- // * @returns {void}
1421
- // */
1422
- // function consoleLogTokens(tokens, depth = 0) {
1423
- // for (const token of tokens) {
1424
- // const { children, text, type } = token;
1425
- // console.log(
1426
- // `${" ".repeat(depth * 2)}${type} ${text.replace(/\n/g, "\\n")}`
1427
- // );
1428
- // if (children.length > 0) {
1429
- // consoleLogTokens(children, depth + 1);
1430
- // }
1431
- // }
1432
- // }
1355
+ /**
1356
+ * Parses a Markdown document and returns (frozen) tokens.
1357
+ *
1358
+ * @param {string} markdown Markdown document.
1359
+ * @param {Object} [micromarkOptions] Options for micromark.
1360
+ * @param {boolean} [referencesDefined] Treat references as defined.
1361
+ * @returns {Token[]} Micromark tokens (frozen).
1362
+ */
1363
+ function micromarkParse(markdown) {
1364
+ var micromarkOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1365
+ var referencesDefined = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
1366
+ return micromarkParseWithOffset(markdown, micromarkOptions, referencesDefined, 0);
1367
+ }
1368
+
1369
+ /**
1370
+ * @callback AllowedPredicate
1371
+ * @param {Token} token Micromark token.
1372
+ * @returns {boolean} True iff allowed.
1373
+ */
1374
+
1375
+ /**
1376
+ * @callback TransformPredicate
1377
+ * @param {Token} token Micromark token.
1378
+ * @returns {Token[]} Child tokens.
1379
+ */
1433
1380
 
1434
1381
  /**
1435
1382
  * Filter a list of Micromark tokens by predicate.
1436
1383
  *
1437
1384
  * @param {Token[]} tokens Micromark tokens.
1438
- * @param {Function} allowed Allowed token predicate.
1439
- * @param {Function} [transformChildren] Transform children predicate.
1385
+ * @param {AllowedPredicate} allowed Allowed token predicate.
1386
+ * @param {TransformPredicate} [transformChildren] Transform predicate.
1440
1387
  * @returns {Token[]} Filtered tokens.
1441
1388
  */
1442
1389
  function filterByPredicate(tokens, allowed, transformChildren) {
1443
1390
  var result = [];
1444
- var pending = _toConsumableArray(tokens);
1445
- var token = null;
1446
- while (token = pending.shift()) {
1447
- if (allowed(token)) {
1448
- result.push(token);
1449
- }
1450
- if (token.children.length > 0) {
1451
- var transformed = transformChildren ? transformChildren(token) : token.children;
1452
- pending.unshift.apply(pending, _toConsumableArray(transformed));
1391
+ var queue = [{
1392
+ "array": tokens,
1393
+ "index": 0
1394
+ }];
1395
+ while (queue.length > 0) {
1396
+ var current = queue[queue.length - 1];
1397
+ var array = current.array,
1398
+ index = current.index;
1399
+ if (index < array.length) {
1400
+ var token = array[current.index++];
1401
+ if (allowed(token)) {
1402
+ result.push(token);
1403
+ }
1404
+ var children = token.children;
1405
+ if (children.length > 0) {
1406
+ var transformed = transformChildren ? transformChildren(token) : children;
1407
+ queue.push({
1408
+ "array": transformed,
1409
+ "index": 0
1410
+ });
1411
+ }
1412
+ } else {
1413
+ queue.pop();
1453
1414
  }
1454
1415
  }
1455
1416
  return result;
@@ -1463,9 +1424,32 @@ function filterByPredicate(tokens, allowed, transformChildren) {
1463
1424
  * @returns {Token[]} Filtered tokens.
1464
1425
  */
1465
1426
  function filterByTypes(tokens, allowed) {
1466
- return filterByPredicate(tokens, function (token) {
1427
+ var predicate = function predicate(token) {
1467
1428
  return allowed.includes(token.type);
1468
- });
1429
+ };
1430
+ var flatTokens = tokens[flatTokensSymbol];
1431
+ if (flatTokens) {
1432
+ return flatTokens.filter(predicate);
1433
+ }
1434
+ return filterByPredicate(tokens, predicate);
1435
+ }
1436
+
1437
+ /**
1438
+ * Gets the heading level of a Micromark heading tokan.
1439
+ *
1440
+ * @param {Token} heading Micromark heading token.
1441
+ * @returns {number} Heading level.
1442
+ */
1443
+ function getHeadingLevel(heading) {
1444
+ var headingSequence = filterByTypes(heading.children, ["atxHeadingSequence", "setextHeadingLineSequence"]);
1445
+ var level = 1;
1446
+ var text = headingSequence[0].text;
1447
+ if (text[0] === "#") {
1448
+ level = Math.min(text.length, 6);
1449
+ } else if (text[0] === "-") {
1450
+ level = 2;
1451
+ }
1452
+ return level;
1469
1453
  }
1470
1454
 
1471
1455
  /**
@@ -1543,6 +1527,7 @@ module.exports = {
1543
1527
  "parse": micromarkParse,
1544
1528
  filterByPredicate: filterByPredicate,
1545
1529
  filterByTypes: filterByTypes,
1530
+ getHeadingLevel: getHeadingLevel,
1546
1531
  getHtmlTagInfo: getHtmlTagInfo,
1547
1532
  getMicromarkEvents: getMicromarkEvents,
1548
1533
  getTokenTextByType: getTokenTextByType,
@@ -1567,7 +1552,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
1567
1552
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1568
1553
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1569
1554
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
1570
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
1555
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
1571
1556
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1572
1557
  var map = new Map();
1573
1558
  module.exports.set = function (keyValuePairs) {
@@ -1587,9 +1572,6 @@ module.exports.codeBlockAndSpanRanges = function () {
1587
1572
  module.exports.flattenedLists = function () {
1588
1573
  return map.get("flattenedLists");
1589
1574
  };
1590
- module.exports.htmlElementRanges = function () {
1591
- return map.get("htmlElementRanges");
1592
- };
1593
1575
  module.exports.lineMetadata = function () {
1594
1576
  return map.get("lineMetadata");
1595
1577
  };
@@ -1613,7 +1595,7 @@ module.exports.referenceLinkImageData = function () {
1613
1595
  module.exports.deprecatedRuleNames = ["MD002", "MD006"];
1614
1596
  module.exports.fixableRuleNames = ["MD004", "MD005", "MD006", "MD007", "MD009", "MD010", "MD011", "MD012", "MD014", "MD018", "MD019", "MD020", "MD021", "MD022", "MD023", "MD026", "MD027", "MD030", "MD031", "MD032", "MD034", "MD037", "MD038", "MD039", "MD044", "MD047", "MD049", "MD050", "MD051", "MD053"];
1615
1597
  module.exports.homepage = "https://github.com/DavidAnson/markdownlint";
1616
- module.exports.version = "0.29.0";
1598
+ module.exports.version = "0.31.0";
1617
1599
 
1618
1600
  /***/ }),
1619
1601
 
@@ -1628,8 +1610,8 @@ module.exports.version = "0.29.0";
1628
1610
 
1629
1611
 
1630
1612
 
1631
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1632
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1613
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1614
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1633
1615
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1634
1616
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
1635
1617
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
@@ -1637,12 +1619,12 @@ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableTo
1637
1619
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1638
1620
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
1639
1621
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
1640
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
1622
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
1641
1623
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
1642
1624
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1643
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
1625
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
1644
1626
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1645
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
1627
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
1646
1628
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1647
1629
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
1648
1630
  var path = __webpack_require__(/*! node:path */ "?9a52");
@@ -1687,22 +1669,22 @@ function validateRuleList(ruleList, synchronous) {
1687
1669
  function newError(property) {
1688
1670
  return new Error("Property '" + property + "' of custom rule at index " + customIndex + " is incorrect.");
1689
1671
  }
1690
- for (var _i2 = 0, _arr2 = ["names", "tags"]; _i2 < _arr2.length; _i2++) {
1691
- var property = _arr2[_i2];
1672
+ for (var _i = 0, _arr = ["names", "tags"]; _i < _arr.length; _i++) {
1673
+ var property = _arr[_i];
1692
1674
  var value = rule[property];
1693
1675
  if (!result && (!value || !Array.isArray(value) || value.length === 0 || !value.every(helpers.isString) || value.some(helpers.isEmptyString))) {
1694
1676
  result = newError(property);
1695
1677
  }
1696
1678
  }
1697
- for (var _i3 = 0, _arr3 = [["description", "string"], ["function", "function"]]; _i3 < _arr3.length; _i3++) {
1698
- var propertyInfo = _arr3[_i3];
1679
+ for (var _i2 = 0, _arr2 = [["description", "string"], ["function", "function"]]; _i2 < _arr2.length; _i2++) {
1680
+ var propertyInfo = _arr2[_i2];
1699
1681
  var _property = propertyInfo[0];
1700
1682
  var _value = rule[_property];
1701
1683
  if (!result && (!_value || _typeof(_value) !== propertyInfo[1])) {
1702
1684
  result = newError(_property);
1703
1685
  }
1704
1686
  }
1705
- if (!result && rule.information && Object.getPrototypeOf(rule.information) !== URL.prototype) {
1687
+ if (!result && rule.information && !helpers.isUrl(rule.information)) {
1706
1688
  result = newError("information");
1707
1689
  }
1708
1690
  if (!result && rule.asynchronous !== undefined && typeof rule.asynchronous !== "boolean") {
@@ -1771,8 +1753,8 @@ function newResults(ruleList) {
1771
1753
  var results = [];
1772
1754
  var keys = Object.keys(lintResults);
1773
1755
  keys.sort();
1774
- for (var _i4 = 0, _keys = keys; _i4 < _keys.length; _i4++) {
1775
- var file = _keys[_i4];
1756
+ for (var _i3 = 0, _keys = keys; _i3 < _keys.length; _i3++) {
1757
+ var file = _keys[_i3];
1776
1758
  var fileResults = lintResults[file];
1777
1759
  if (Array.isArray(fileResults)) {
1778
1760
  var _iterator4 = _createForOfIteratorHelper(fileResults),
@@ -1805,8 +1787,8 @@ function newResults(ruleList) {
1805
1787
  _iterator5.f();
1806
1788
  }
1807
1789
  }
1808
- for (var _i5 = 0, _Object$entries = Object.entries(fileResults); _i5 < _Object$entries.length; _i5++) {
1809
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i5], 2),
1790
+ for (var _i4 = 0, _Object$entries = Object.entries(fileResults); _i4 < _Object$entries.length; _i4++) {
1791
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i4], 2),
1810
1792
  _ruleName = _Object$entries$_i[0],
1811
1793
  ruleResults = _Object$entries$_i[1];
1812
1794
  var _rule = ruleNameToRule[_ruleName.toUpperCase()];
@@ -2088,8 +2070,8 @@ function getEffectiveConfig(ruleList, config, aliasToRuleNames) {
2088
2070
  } finally {
2089
2071
  _iterator15.f();
2090
2072
  }
2091
- for (var _i6 = 0, _Object$keys = Object.keys(config); _i6 < _Object$keys.length; _i6++) {
2092
- var key = _Object$keys[_i6];
2073
+ for (var _i5 = 0, _Object$keys = Object.keys(config); _i5 < _Object$keys.length; _i5++) {
2074
+ var key = _Object$keys[_i5];
2093
2075
  var value = config[key];
2094
2076
  if (value) {
2095
2077
  if (!(value instanceof Object)) {
@@ -2267,7 +2249,7 @@ function getEnabledRulesPerLineNumber(ruleList, lines, frontMatterLines, noInlin
2267
2249
  var disableNextLine = action === "DISABLE-NEXT-LINE";
2268
2250
  if (disableLine || disableNextLine) {
2269
2251
  var nextLineNumber = frontMatterLines.length + lineNumber + (disableNextLine ? 1 : 0);
2270
- enabledRulesPerLineNumber[nextLineNumber] = applyEnableDisable(action, parameter, enabledRulesPerLineNumber[nextLineNumber] || {});
2252
+ enabledRulesPerLineNumber[nextLineNumber] = applyEnableDisable(action, parameter, enabledRulesPerLineNumber[nextLineNumber]);
2271
2253
  }
2272
2254
  }
2273
2255
  // Handle inline comments
@@ -2313,7 +2295,7 @@ function getEnabledRulesPerLineNumber(ruleList, lines, frontMatterLines, noInlin
2313
2295
  * @param {boolean} handleRuleFailures Whether to handle exceptions in rules.
2314
2296
  * @param {boolean} noInlineConfig Whether to allow inline configuration.
2315
2297
  * @param {number} resultVersion Version of the LintResults object to return.
2316
- * @param {Function} callback Callback (err, result) function.
2298
+ * @param {LintContentCallback} callback Callback (err, result) function.
2317
2299
  * @returns {void}
2318
2300
  */
2319
2301
  function lintContent(ruleList, aliasToRuleNames, name, content, md, config, configParsers, frontMatter, handleRuleFailures, noInlineConfig, resultVersion, callback) {
@@ -2354,12 +2336,10 @@ function lintContent(ruleList, aliasToRuleNames, name, content, md, config, conf
2354
2336
  var lineMetadata = helpers.getLineMetadata(paramsBase);
2355
2337
  var codeBlockAndSpanRanges = helpers.codeBlockAndSpanRanges(paramsBase, lineMetadata);
2356
2338
  var flattenedLists = helpers.flattenLists(paramsBase.parsers.markdownit.tokens);
2357
- var htmlElementRanges = helpers.htmlElementRanges(paramsBase, lineMetadata);
2358
2339
  var referenceLinkImageData = helpers.getReferenceLinkImageData(paramsBase);
2359
2340
  cache.set({
2360
2341
  codeBlockAndSpanRanges: codeBlockAndSpanRanges,
2361
2342
  flattenedLists: flattenedLists,
2362
- htmlElementRanges: htmlElementRanges,
2363
2343
  lineMetadata: lineMetadata,
2364
2344
  referenceLinkImageData: referenceLinkImageData
2365
2345
  });
@@ -2391,6 +2371,9 @@ function lintContent(ruleList, aliasToRuleNames, name, content, md, config, conf
2391
2371
  if (errorInfo.context && !helpers.isString(errorInfo.context)) {
2392
2372
  throwError("context");
2393
2373
  }
2374
+ if (errorInfo.information && !helpers.isUrl(errorInfo.information)) {
2375
+ throwError("information");
2376
+ }
2394
2377
  if (errorInfo.range && (!Array.isArray(errorInfo.range) || errorInfo.range.length !== 2 || !helpers.isNumber(errorInfo.range[0]) || errorInfo.range[0] < 1 || !helpers.isNumber(errorInfo.range[1]) || errorInfo.range[1] < 1 || errorInfo.range[0] + errorInfo.range[1] - 1 > lines[errorInfo.lineNumber - 1].length)) {
2395
2378
  throwError("range");
2396
2379
  }
@@ -2426,12 +2409,13 @@ function lintContent(ruleList, aliasToRuleNames, name, content, md, config, conf
2426
2409
  cleanFixInfo.insertText = fixInfo.insertText;
2427
2410
  }
2428
2411
  }
2412
+ var information = errorInfo.information || rule.information;
2429
2413
  results.push({
2430
2414
  lineNumber: lineNumber,
2431
2415
  "ruleName": rule.names[0],
2432
2416
  "ruleNames": rule.names,
2433
2417
  "ruleDescription": rule.description,
2434
- "ruleInformation": rule.information ? rule.information.href : null,
2418
+ "ruleInformation": information ? information.href : null,
2435
2419
  "errorDetail": errorInfo.detail || null,
2436
2420
  "errorContext": errorInfo.context || null,
2437
2421
  "errorRange": errorInfo.range ? _toConsumableArray(errorInfo.range) : null,
@@ -2578,7 +2562,7 @@ function lintContent(ruleList, aliasToRuleNames, name, content, md, config, conf
2578
2562
  * @param {number} resultVersion Version of the LintResults object to return.
2579
2563
  * @param {Object} fs File system implementation.
2580
2564
  * @param {boolean} synchronous Whether to execute synchronously.
2581
- * @param {Function} callback Callback (err, result) function.
2565
+ * @param {LintContentCallback} callback Callback (err, result) function.
2582
2566
  * @returns {void}
2583
2567
  */
2584
2568
  function lintFile(ruleList, aliasToRuleNames, file, md, config, configParsers, frontMatter, handleRuleFailures, noInlineConfig, resultVersion, fs, synchronous, callback) {
@@ -2602,15 +2586,25 @@ function lintFile(ruleList, aliasToRuleNames, file, md, config, configParsers, f
2602
2586
  *
2603
2587
  * @param {Options | null} options Options object.
2604
2588
  * @param {boolean} synchronous Whether to execute synchronously.
2605
- * @param {Function} callback Callback (err, result) function.
2589
+ * @param {LintCallback} callback Callback (err, result) function.
2606
2590
  * @returns {void}
2607
2591
  */
2608
2592
  function lintInput(options, synchronous, callback) {
2609
2593
  // Normalize inputs
2610
2594
  options = options || {};
2611
2595
  callback = callback || function noop() {};
2596
+ var customRuleList = [options.customRules || []].flat().map(function (rule) {
2597
+ return {
2598
+ "names": helpers.cloneIfArray(rule.names),
2599
+ "description": rule.description,
2600
+ "information": helpers.cloneIfUrl(rule.information),
2601
+ "tags": helpers.cloneIfArray(rule.tags),
2602
+ "asynchronous": rule.asynchronous,
2603
+ "function": rule["function"]
2604
+ };
2605
+ });
2612
2606
  // eslint-disable-next-line unicorn/prefer-spread
2613
- var ruleList = rules.concat(options.customRules || []);
2607
+ var ruleList = rules.concat(customRuleList);
2614
2608
  var ruleErr = validateRuleList(ruleList, synchronous);
2615
2609
  if (ruleErr) {
2616
2610
  callback(ruleErr);
@@ -2737,7 +2731,7 @@ function markdownlintPromise(options) {
2737
2731
  * @returns {LintResults} Results object.
2738
2732
  */
2739
2733
  function markdownlintSync(options) {
2740
- var results = {};
2734
+ var results = null;
2741
2735
  lintInput(options, true, function callback(error, res) {
2742
2736
  if (error) {
2743
2737
  throw error;
@@ -2879,6 +2873,7 @@ function readConfig(file, parsers, fs, callback) {
2879
2873
  }
2880
2874
  // Read file
2881
2875
  file = helpers.expandTildePath(file, __webpack_require__(/*! node:os */ "?e6c4"));
2876
+ // eslint-disable-next-line n/prefer-promises/fs
2882
2877
  fs.readFile(file, "utf8", function (err, content) {
2883
2878
  if (err) {
2884
2879
  // @ts-ignore
@@ -3026,6 +3021,7 @@ module.exports = markdownlint;
3026
3021
  * @property {number} lineNumber Line number (1-based).
3027
3022
  * @property {string} [detail] Detail about the error.
3028
3023
  * @property {string} [context] Context for the error.
3024
+ * @property {URL} [information] Link to more information.
3029
3025
  * @property {number[]} [range] Column number (1-based) and length.
3030
3026
  * @property {RuleOnErrorFixInfo} [fixInfo] Fix information.
3031
3027
  */
@@ -3114,12 +3110,21 @@ module.exports = markdownlint;
3114
3110
  * @property {string} [insertText] Text to insert (after deleting).
3115
3111
  */
3116
3112
 
3113
+ /**
3114
+ * Called with the result of linting a string or document.
3115
+ *
3116
+ * @callback LintContentCallback
3117
+ * @param {Error | null} error Error iff failed.
3118
+ * @param {LintError[]} [result] Result iff successful.
3119
+ * @returns {void}
3120
+ */
3121
+
3117
3122
  /**
3118
3123
  * Called with the result of the lint function.
3119
3124
  *
3120
3125
  * @callback LintCallback
3121
- * @param {Error | null} err Error object or null.
3122
- * @param {LintResults} [results] Lint results.
3126
+ * @param {Error | null} error Error object iff failed.
3127
+ * @param {LintResults} [results] Lint results iff succeeded.
3123
3128
  * @returns {void}
3124
3129
  */
3125
3130
 
@@ -3762,7 +3767,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
3762
3767
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3763
3768
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3764
3769
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
3765
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
3770
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
3766
3771
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
3767
3772
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
3768
3773
  addError = _require.addError,
@@ -3956,9 +3961,9 @@ module.exports = {
3956
3961
 
3957
3962
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
3958
3963
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3959
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
3964
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
3960
3965
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
3961
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
3966
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
3962
3967
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3963
3968
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
3964
3969
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
@@ -4069,7 +4074,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
4069
4074
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4070
4075
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4071
4076
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4072
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4077
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4073
4078
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4074
4079
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
4075
4080
  addErrorContext = _require.addErrorContext,
@@ -4116,7 +4121,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
4116
4121
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4117
4122
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4118
4123
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4119
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4124
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4120
4125
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4121
4126
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
4122
4127
  addErrorContext = _require.addErrorContext,
@@ -4176,7 +4181,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
4176
4181
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4177
4182
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4178
4183
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4179
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4184
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4180
4185
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4181
4186
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
4182
4187
  addErrorContext = _require.addErrorContext,
@@ -4235,15 +4240,50 @@ module.exports = {
4235
4240
 
4236
4241
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4237
4242
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4243
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4244
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4245
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
4246
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4247
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4248
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
4249
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4238
4250
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4239
4251
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4240
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4241
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4242
4252
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
4243
4253
  addErrorDetailIf = _require.addErrorDetailIf,
4244
4254
  blockquotePrefixRe = _require.blockquotePrefixRe,
4245
- filterTokens = _require.filterTokens,
4246
4255
  isBlankLine = _require.isBlankLine;
4256
+ var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
4257
+ filterByTypes = _require2.filterByTypes,
4258
+ getHeadingLevel = _require2.getHeadingLevel;
4259
+ var defaultLines = 1;
4260
+ var getLinesFunction = function getLinesFunction(linesParam) {
4261
+ if (Array.isArray(linesParam)) {
4262
+ var linesArray = new Array(6).fill(defaultLines);
4263
+ var _iterator = _createForOfIteratorHelper(_toConsumableArray(linesParam.entries()).slice(0, 6)),
4264
+ _step;
4265
+ try {
4266
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
4267
+ var _step$value = _slicedToArray(_step.value, 2),
4268
+ index = _step$value[0],
4269
+ value = _step$value[1];
4270
+ linesArray[index] = value;
4271
+ }
4272
+ } catch (err) {
4273
+ _iterator.e(err);
4274
+ } finally {
4275
+ _iterator.f();
4276
+ }
4277
+ return function (heading) {
4278
+ return linesArray[getHeadingLevel(heading) - 1];
4279
+ };
4280
+ }
4281
+ // Coerce linesParam to a number
4282
+ var lines = linesParam === undefined ? defaultLines : Number(linesParam);
4283
+ return function () {
4284
+ return lines;
4285
+ };
4286
+ };
4247
4287
  var getBlockQuote = function getBlockQuote(str, count) {
4248
4288
  return (str || "").match(blockquotePrefixRe)[0].trimEnd()
4249
4289
  // eslint-disable-next-line unicorn/prefer-spread
@@ -4254,35 +4294,50 @@ module.exports = {
4254
4294
  "description": "Headings should be surrounded by blank lines",
4255
4295
  "tags": ["headings", "headers", "blank_lines"],
4256
4296
  "function": function MD022(params, onError) {
4257
- var linesAbove = params.config.lines_above;
4258
- linesAbove = Number(linesAbove === undefined ? 1 : linesAbove);
4259
- var linesBelow = params.config.lines_below;
4260
- linesBelow = Number(linesBelow === undefined ? 1 : linesBelow);
4261
- var lines = params.lines;
4262
- filterTokens(params, "heading_open", function (token) {
4263
- var _token$map = _slicedToArray(token.map, 2),
4264
- topIndex = _token$map[0],
4265
- nextIndex = _token$map[1];
4266
- var actualAbove = 0;
4267
- for (var i = 0; i < linesAbove; i++) {
4268
- if (isBlankLine(lines[topIndex - i - 1])) {
4269
- actualAbove++;
4297
+ var getLinesAbove = getLinesFunction(params.config.lines_above);
4298
+ var getLinesBelow = getLinesFunction(params.config.lines_below);
4299
+ var lines = params.lines,
4300
+ parsers = params.parsers;
4301
+ var headings = filterByTypes(parsers.micromark.tokens, ["atxHeading", "setextHeading"]);
4302
+ var _iterator2 = _createForOfIteratorHelper(headings),
4303
+ _step2;
4304
+ try {
4305
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
4306
+ var heading = _step2.value;
4307
+ var startLine = heading.startLine,
4308
+ endLine = heading.endLine;
4309
+ var line = lines[startLine - 1].trim();
4310
+
4311
+ // Check lines above
4312
+ var linesAbove = getLinesAbove(heading);
4313
+ if (linesAbove >= 0) {
4314
+ var actualAbove = 0;
4315
+ for (var i = 0; i < linesAbove && isBlankLine(lines[startLine - 2 - i]); i++) {
4316
+ actualAbove++;
4317
+ }
4318
+ addErrorDetailIf(onError, startLine, linesAbove, actualAbove, "Above", line, null, {
4319
+ "insertText": getBlockQuote(lines[startLine - 2], linesAbove - actualAbove)
4320
+ });
4270
4321
  }
4271
- }
4272
- addErrorDetailIf(onError, topIndex + 1, linesAbove, actualAbove, "Above", lines[topIndex].trim(), null, {
4273
- "insertText": getBlockQuote(lines[topIndex - 1], linesAbove - actualAbove)
4274
- });
4275
- var actualBelow = 0;
4276
- for (var _i2 = 0; _i2 < linesBelow; _i2++) {
4277
- if (isBlankLine(lines[nextIndex + _i2])) {
4278
- actualBelow++;
4322
+
4323
+ // Check lines below
4324
+ var linesBelow = getLinesBelow(heading);
4325
+ if (linesBelow >= 0) {
4326
+ var actualBelow = 0;
4327
+ for (var _i = 0; _i < linesBelow && isBlankLine(lines[endLine + _i]); _i++) {
4328
+ actualBelow++;
4329
+ }
4330
+ addErrorDetailIf(onError, startLine, linesBelow, actualBelow, "Below", line, null, {
4331
+ "lineNumber": endLine + 1,
4332
+ "insertText": getBlockQuote(lines[endLine], linesBelow - actualBelow)
4333
+ });
4279
4334
  }
4280
4335
  }
4281
- addErrorDetailIf(onError, topIndex + 1, linesBelow, actualBelow, "Below", lines[topIndex].trim(), null, {
4282
- "lineNumber": nextIndex + 1,
4283
- "insertText": getBlockQuote(lines[nextIndex], linesBelow - actualBelow)
4284
- });
4285
- });
4336
+ } catch (err) {
4337
+ _iterator2.e(err);
4338
+ } finally {
4339
+ _iterator2.f();
4340
+ }
4286
4341
  }
4287
4342
  };
4288
4343
 
@@ -4303,7 +4358,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
4303
4358
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4304
4359
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4305
4360
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4306
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4361
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4307
4362
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4308
4363
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
4309
4364
  addErrorContext = _require.addErrorContext,
@@ -4434,12 +4489,17 @@ module.exports = {
4434
4489
 
4435
4490
 
4436
4491
 
4492
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4493
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4494
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4437
4495
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
4438
4496
  addError = _require.addError,
4439
4497
  allPunctuationNoQuestion = _require.allPunctuationNoQuestion,
4440
- escapeForRegExp = _require.escapeForRegExp,
4441
- forEachHeading = _require.forEachHeading;
4442
- var endOfLineHtmlEntityRe = /&#?[\da-zA-Z]+;$/;
4498
+ endOfLineGemojiCodeRe = _require.endOfLineGemojiCodeRe,
4499
+ endOfLineHtmlEntityRe = _require.endOfLineHtmlEntityRe,
4500
+ escapeForRegExp = _require.escapeForRegExp;
4501
+ var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
4502
+ filterByTypes = _require2.filterByTypes;
4443
4503
  module.exports = {
4444
4504
  "names": ["MD026", "no-trailing-punctuation"],
4445
4505
  "description": "Trailing punctuation in heading",
@@ -4448,21 +4508,31 @@ module.exports = {
4448
4508
  var punctuation = params.config.punctuation;
4449
4509
  punctuation = String(punctuation === undefined ? allPunctuationNoQuestion : punctuation);
4450
4510
  var trailingPunctuationRe = new RegExp("\\s*[" + escapeForRegExp(punctuation) + "]+$");
4451
- forEachHeading(params, function (heading) {
4452
- var line = heading.line,
4453
- lineNumber = heading.lineNumber;
4454
- var trimmedLine = line.replace(/([^\s#])[\s#]+$/, "$1");
4455
- var match = trailingPunctuationRe.exec(trimmedLine);
4456
- if (match && !endOfLineHtmlEntityRe.test(trimmedLine)) {
4457
- var fullMatch = match[0];
4458
- var column = match.index + 1;
4459
- var length = fullMatch.length;
4460
- addError(onError, lineNumber, "Punctuation: '".concat(fullMatch, "'"), null, [column, length], {
4461
- "editColumn": column,
4462
- "deleteCount": length
4463
- });
4511
+ var headings = filterByTypes(params.parsers.micromark.tokens, ["atxHeadingText", "setextHeadingText"]);
4512
+ var _iterator = _createForOfIteratorHelper(headings),
4513
+ _step;
4514
+ try {
4515
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
4516
+ var heading = _step.value;
4517
+ var endLine = heading.endLine,
4518
+ startColumn = heading.startColumn,
4519
+ text = heading.text;
4520
+ var match = trailingPunctuationRe.exec(text);
4521
+ if (match && !endOfLineHtmlEntityRe.test(text) && !endOfLineGemojiCodeRe.test(text)) {
4522
+ var fullMatch = match[0];
4523
+ var column = startColumn + match.index;
4524
+ var length = fullMatch.length;
4525
+ addError(onError, endLine, "Punctuation: '".concat(fullMatch, "'"), undefined, [column, length], {
4526
+ "editColumn": column,
4527
+ "deleteCount": length
4528
+ });
4529
+ }
4464
4530
  }
4465
- });
4531
+ } catch (err) {
4532
+ _iterator.e(err);
4533
+ } finally {
4534
+ _iterator.f();
4535
+ }
4466
4536
  }
4467
4537
  };
4468
4538
 
@@ -4481,9 +4551,9 @@ module.exports = {
4481
4551
 
4482
4552
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4483
4553
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4484
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4554
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4485
4555
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4486
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4556
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4487
4557
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4488
4558
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4489
4559
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
@@ -4604,9 +4674,9 @@ module.exports = {
4604
4674
 
4605
4675
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4606
4676
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4607
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4677
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4608
4678
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4609
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4679
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4610
4680
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4611
4681
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4612
4682
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
@@ -4709,9 +4779,9 @@ module.exports = {
4709
4779
 
4710
4780
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4711
4781
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4712
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4782
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4713
4783
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4714
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4784
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4715
4785
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4716
4786
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4717
4787
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
@@ -4789,7 +4859,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
4789
4859
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4790
4860
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4791
4861
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4792
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4862
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4793
4863
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4794
4864
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
4795
4865
  addErrorContext = _require.addErrorContext,
@@ -4843,38 +4913,68 @@ var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
4843
4913
  addErrorContext = _require.addErrorContext,
4844
4914
  blockquotePrefixRe = _require.blockquotePrefixRe,
4845
4915
  isBlankLine = _require.isBlankLine;
4846
- var _require2 = __webpack_require__(/*! ./cache */ "../lib/cache.js"),
4847
- flattenedLists = _require2.flattenedLists;
4916
+ var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
4917
+ filterByPredicate = _require2.filterByPredicate;
4918
+ var nonContentTokens = new Set(["blockQuoteMarker", "blockQuotePrefix", "blockQuotePrefixWhitespace", "lineEnding", "lineEndingBlank", "linePrefix", "listItemIndent"]);
4919
+ var isList = function isList(token) {
4920
+ return token.type === "listOrdered" || token.type === "listUnordered";
4921
+ };
4922
+ var addBlankLineError = function addBlankLineError(onError, lines, lineIndex, lineNumber) {
4923
+ var line = lines[lineIndex];
4924
+ var quotePrefix = line.match(blockquotePrefixRe)[0].trimEnd();
4925
+ addErrorContext(onError, lineIndex + 1, line.trim(), null, null, null, {
4926
+ lineNumber: lineNumber,
4927
+ "insertText": "".concat(quotePrefix, "\n")
4928
+ });
4929
+ };
4848
4930
  module.exports = {
4849
4931
  "names": ["MD032", "blanks-around-lists"],
4850
4932
  "description": "Lists should be surrounded by blank lines",
4851
4933
  "tags": ["bullet", "ul", "ol", "blank_lines"],
4852
4934
  "function": function MD032(params, onError) {
4853
- var lines = params.lines;
4854
- var filteredLists = flattenedLists().filter(function (list) {
4855
- return !list.nesting;
4935
+ var lines = params.lines,
4936
+ parsers = params.parsers;
4937
+
4938
+ // For every top-level list...
4939
+ var topLevelLists = filterByPredicate(parsers.micromark.tokens, isList, function (token) {
4940
+ return isList(token) || token.type === "htmlFlow" ? [] : token.children;
4856
4941
  });
4857
- var _iterator = _createForOfIteratorHelper(filteredLists),
4942
+ var _iterator = _createForOfIteratorHelper(topLevelLists),
4858
4943
  _step;
4859
4944
  try {
4860
4945
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
4861
4946
  var list = _step.value;
4862
- var firstIndex = list.open.map[0];
4947
+ // Look for a blank line above the list
4948
+ var firstIndex = list.startLine - 1;
4863
4949
  if (!isBlankLine(lines[firstIndex - 1])) {
4864
- var line = lines[firstIndex];
4865
- var quotePrefix = line.match(blockquotePrefixRe)[0].trimEnd();
4866
- addErrorContext(onError, firstIndex + 1, line.trim(), null, null, null, {
4867
- "insertText": "".concat(quotePrefix, "\n")
4868
- });
4950
+ addBlankLineError(onError, lines, firstIndex);
4951
+ }
4952
+
4953
+ // Find the "visual" end of the list
4954
+ var endLine = list.endLine;
4955
+ var flattenedChildren = filterByPredicate(list.children, function () {
4956
+ return true;
4957
+ });
4958
+ var _iterator2 = _createForOfIteratorHelper(flattenedChildren.reverse()),
4959
+ _step2;
4960
+ try {
4961
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
4962
+ var child = _step2.value;
4963
+ if (!nonContentTokens.has(child.type)) {
4964
+ endLine = child.endLine;
4965
+ break;
4966
+ }
4967
+ }
4968
+
4969
+ // Look for a blank line below the list
4970
+ } catch (err) {
4971
+ _iterator2.e(err);
4972
+ } finally {
4973
+ _iterator2.f();
4869
4974
  }
4870
- var lastIndex = list.lastLineIndex - 1;
4975
+ var lastIndex = endLine - 1;
4871
4976
  if (!isBlankLine(lines[lastIndex + 1])) {
4872
- var _line = lines[lastIndex];
4873
- var _quotePrefix = _line.match(blockquotePrefixRe)[0].trimEnd();
4874
- addErrorContext(onError, lastIndex + 1, _line.trim(), null, null, null, {
4875
- "lineNumber": lastIndex + 2,
4876
- "insertText": "".concat(_quotePrefix, "\n")
4877
- });
4977
+ addBlankLineError(onError, lines, lastIndex, lastIndex + 2);
4878
4978
  }
4879
4979
  }
4880
4980
  } catch (err) {
@@ -4898,69 +4998,41 @@ module.exports = {
4898
4998
 
4899
4999
 
4900
5000
 
4901
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4902
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4903
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5001
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4904
5002
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4905
5003
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4906
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
4907
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4908
5004
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
4909
5005
  addError = _require.addError;
4910
5006
  var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
4911
- filterByTypes = _require2.filterByTypes,
4912
- getHtmlTagInfo = _require2.getHtmlTagInfo,
4913
- parse = _require2.parse;
4914
- var nextLinesRe = /[\r\n][\s\S]*$/;
4915
- module.exports = {
4916
- "names": ["MD033", "no-inline-html"],
4917
- "description": "Inline HTML",
4918
- "tags": ["html"],
4919
- "function": function MD033(params, onError) {
4920
- var allowedElements = params.config.allowed_elements;
4921
- allowedElements = Array.isArray(allowedElements) ? allowedElements : [];
4922
- allowedElements = allowedElements.map(function (element) {
4923
- return element.toLowerCase();
4924
- });
4925
- var pending = [[0, params.parsers.micromark.tokens]];
4926
- var current = null;
4927
- while (current = pending.shift()) {
4928
- var _current = current,
4929
- _current2 = _slicedToArray(_current, 2),
4930
- offset = _current2[0],
4931
- tokens = _current2[1];
4932
- var _iterator = _createForOfIteratorHelper(filterByTypes(tokens, ["htmlFlow", "htmlText"])),
4933
- _step;
4934
- try {
4935
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
4936
- var token = _step.value;
4937
- if (token.type === "htmlText") {
4938
- var htmlTagInfo = getHtmlTagInfo(token);
4939
- if (htmlTagInfo && !htmlTagInfo.close && !allowedElements.includes(htmlTagInfo.name.toLowerCase())) {
4940
- var range = [token.startColumn, token.text.replace(nextLinesRe, "").length];
4941
- addError(onError, token.startLine + offset, "Element: " + htmlTagInfo.name, undefined, range);
4942
- }
4943
- } else {
4944
- // token.type === "htmlFlow"
4945
- // Re-parse without "htmlFlow" to get only "htmlText" tokens
4946
- var options = {
4947
- "extensions": [{
4948
- "disable": {
4949
- "null": ["codeIndented", "htmlFlow"]
4950
- }
4951
- }]
4952
- };
4953
- // Use lines instead of token.text for accurate columns
4954
- var lines = params.lines.slice(token.startLine - 1, token.endLine).join("\n");
4955
- var flowTokens = parse(lines, options);
4956
- pending.push([token.startLine - 1, flowTokens]);
4957
- }
5007
+ filterByTypes = _require2.filterByTypes,
5008
+ getHtmlTagInfo = _require2.getHtmlTagInfo;
5009
+ var nextLinesRe = /[\r\n][\s\S]*$/;
5010
+ module.exports = {
5011
+ "names": ["MD033", "no-inline-html"],
5012
+ "description": "Inline HTML",
5013
+ "tags": ["html"],
5014
+ "function": function MD033(params, onError) {
5015
+ var allowedElements = params.config.allowed_elements;
5016
+ allowedElements = Array.isArray(allowedElements) ? allowedElements : [];
5017
+ allowedElements = allowedElements.map(function (element) {
5018
+ return element.toLowerCase();
5019
+ });
5020
+ var tokens = params.parsers.micromark.tokens;
5021
+ var _iterator = _createForOfIteratorHelper(filterByTypes(tokens, ["htmlText"])),
5022
+ _step;
5023
+ try {
5024
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
5025
+ var token = _step.value;
5026
+ var htmlTagInfo = getHtmlTagInfo(token);
5027
+ if (htmlTagInfo && !htmlTagInfo.close && !allowedElements.includes(htmlTagInfo.name.toLowerCase())) {
5028
+ var range = [token.startColumn, token.text.replace(nextLinesRe, "").length];
5029
+ addError(onError, token.startLine, "Element: " + htmlTagInfo.name, undefined, range);
4958
5030
  }
4959
- } catch (err) {
4960
- _iterator.e(err);
4961
- } finally {
4962
- _iterator.f();
4963
5031
  }
5032
+ } catch (err) {
5033
+ _iterator.e(err);
5034
+ } finally {
5035
+ _iterator.f();
4964
5036
  }
4965
5037
  }
4966
5038
  };
@@ -5184,161 +5256,125 @@ module.exports = {
5184
5256
 
5185
5257
 
5186
5258
 
5187
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
5188
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5259
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
5260
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5261
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
5262
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
5263
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
5189
5264
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
5190
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
5191
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
5192
5265
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5193
5266
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
5194
- addErrorContext = _require.addErrorContext,
5195
- emphasisMarkersInContent = _require.emphasisMarkersInContent,
5196
- forEachLine = _require.forEachLine,
5197
- isBlankLine = _require.isBlankLine,
5198
- withinAnyRange = _require.withinAnyRange;
5199
- var _require2 = __webpack_require__(/*! ./cache */ "../lib/cache.js"),
5200
- htmlElementRanges = _require2.htmlElementRanges,
5201
- lineMetadata = _require2.lineMetadata;
5202
- var emphasisRe = /(^|[^\\]|\\\\)(?:(\*{1,3})|(_{1,3}))/g;
5203
- var embeddedUnderscoreRe = /([A-Za-z\d])(_([A-Za-z\d]))+/g;
5204
- var asteriskListItemMarkerRe = /^([\s>]*)\*(\s+)/;
5205
- var leftSpaceRe = /^\s+/;
5206
- var rightSpaceRe = /\s+$/;
5207
- var tablePipeRe = /\|/;
5208
- var allUnderscoresRe = /_/g;
5267
+ addError = _require.addError;
5268
+ var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
5269
+ filterByPredicate = _require2.filterByPredicate;
5209
5270
  module.exports = {
5210
5271
  "names": ["MD037", "no-space-in-emphasis"],
5211
5272
  "description": "Spaces inside emphasis markers",
5212
5273
  "tags": ["whitespace", "emphasis"],
5213
5274
  "function": function MD037(params, onError) {
5214
- var exclusions = htmlElementRanges();
5215
- // eslint-disable-next-line init-declarations
5216
- var effectiveEmphasisLength,
5217
- emphasisIndex,
5218
- emphasisKind,
5219
- emphasisLength,
5220
- pendingError = null;
5221
- // eslint-disable-next-line jsdoc/require-jsdoc
5222
- function resetRunTracking() {
5223
- emphasisIndex = -1;
5224
- emphasisLength = 0;
5225
- emphasisKind = "";
5226
- effectiveEmphasisLength = 0;
5227
- pendingError = null;
5228
- }
5229
- // eslint-disable-next-line jsdoc/require-jsdoc
5230
- function handleRunEnd(line, lineIndex, contextLength, match, matchIndex, inTable) {
5231
- // Close current run
5232
- var content = line.substring(emphasisIndex, matchIndex);
5233
- if (!emphasisLength) {
5234
- content = content.trimStart();
5235
- }
5236
- if (!match) {
5237
- content = content.trimEnd();
5238
- }
5239
- var leftSpace = leftSpaceRe.test(content);
5240
- var rightSpace = rightSpaceRe.test(content);
5241
- if ((leftSpace || rightSpace) && (!inTable || !tablePipeRe.test(content))) {
5242
- // Report the violation
5243
- var contextStart = emphasisIndex - emphasisLength;
5244
- var contextEnd = matchIndex + contextLength;
5245
- var column = contextStart + 1;
5246
- var length = contextEnd - contextStart;
5247
- if (!withinAnyRange(exclusions, lineIndex, column, length)) {
5248
- var context = line.substring(contextStart, contextEnd);
5249
- var leftMarker = line.substring(contextStart, emphasisIndex);
5250
- var rightMarker = match ? match[2] || match[3] : "";
5251
- var fixedText = "".concat(leftMarker).concat(content.trim()).concat(rightMarker);
5252
- return [onError, lineIndex + 1, context, leftSpace, rightSpace, [column, length], {
5253
- "editColumn": column,
5254
- "deleteCount": length,
5255
- "insertText": fixedText
5256
- }];
5257
- }
5258
- }
5259
- return null;
5275
+ // Initialize variables
5276
+ var lines = params.lines,
5277
+ parsers = params.parsers;
5278
+ var emphasisTokensByMarker = new Map();
5279
+ for (var _i = 0, _arr = ["_", "__", "___", "*", "**", "***"]; _i < _arr.length; _i++) {
5280
+ var marker = _arr[_i];
5281
+ emphasisTokensByMarker.set(marker, []);
5260
5282
  }
5261
- // Initialize
5262
- var ignoreMarkersByLine = emphasisMarkersInContent(params);
5263
- resetRunTracking();
5264
- forEachLine(lineMetadata(), function (line, lineIndex, inCode, onFence, inTable, inItem, onBreak, inMath) {
5265
- var onItemStart = inItem === 1;
5266
- if (inCode || onFence || inTable || onBreak || onItemStart || isBlankLine(line)) {
5267
- // Emphasis resets when leaving a block
5268
- resetRunTracking();
5269
- }
5270
- if (inCode || onFence || onBreak || inMath) {
5271
- // Emphasis has no meaning here
5272
- return;
5273
- }
5274
- var patchedLine = line.replace(embeddedUnderscoreRe, function (match) {
5275
- return match.replace(allUnderscoresRe, " ");
5283
+ var tokens = filterByPredicate(parsers.micromark.tokens, function (token) {
5284
+ return token.children.some(function (child) {
5285
+ return child.type === "data";
5276
5286
  });
5277
- if (onItemStart) {
5278
- // Trim overlapping '*' list item marker
5279
- patchedLine = patchedLine.replace(asteriskListItemMarkerRe, "$1 $2");
5280
- }
5281
- var match = null;
5282
- // Match all emphasis-looking runs in the line...
5283
- while (match = emphasisRe.exec(patchedLine)) {
5284
- var ignoreMarkersForLine = ignoreMarkersByLine[lineIndex];
5285
- var matchIndex = match.index + match[1].length;
5286
- if (ignoreMarkersForLine.includes(matchIndex)) {
5287
- // Ignore emphasis markers inside code spans and links
5288
- continue;
5287
+ });
5288
+ var _iterator = _createForOfIteratorHelper(tokens),
5289
+ _step;
5290
+ try {
5291
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
5292
+ var token = _step.value;
5293
+ // Build lists of bare tokens for each emphasis marker type
5294
+ var _iterator2 = _createForOfIteratorHelper(emphasisTokensByMarker.values()),
5295
+ _step2;
5296
+ try {
5297
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
5298
+ var emphasisTokens = _step2.value;
5299
+ emphasisTokens.length = 0;
5300
+ }
5301
+ } catch (err) {
5302
+ _iterator2.e(err);
5303
+ } finally {
5304
+ _iterator2.f();
5289
5305
  }
5290
- var matchLength = match[0].length - match[1].length;
5291
- var matchKind = (match[2] || match[3])[0];
5292
- if (emphasisIndex === -1) {
5293
- // New run
5294
- emphasisIndex = matchIndex + matchLength;
5295
- emphasisLength = matchLength;
5296
- emphasisKind = matchKind;
5297
- effectiveEmphasisLength = matchLength;
5298
- } else if (matchKind === emphasisKind) {
5299
- // Matching emphasis markers
5300
- if (matchLength === effectiveEmphasisLength) {
5301
- // Ending an existing run, report any pending error
5302
- if (pendingError) {
5303
- // @ts-ignore
5304
- addErrorContext.apply(void 0, _toConsumableArray(pendingError));
5305
- pendingError = null;
5306
- }
5307
- var error = handleRunEnd(line, lineIndex, effectiveEmphasisLength, match, matchIndex, inTable);
5308
- if (error) {
5309
- // @ts-ignore
5310
- addErrorContext.apply(void 0, _toConsumableArray(error));
5306
+ var _iterator3 = _createForOfIteratorHelper(token.children),
5307
+ _step3;
5308
+ try {
5309
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
5310
+ var child = _step3.value;
5311
+ var text = child.text,
5312
+ type = child.type;
5313
+ if (type === "data" && text.length <= 3) {
5314
+ var _emphasisTokens = emphasisTokensByMarker.get(text);
5315
+ if (_emphasisTokens) {
5316
+ _emphasisTokens.push(child);
5317
+ }
5311
5318
  }
5312
- // Reset
5313
- resetRunTracking();
5314
- } else if (matchLength === 3) {
5315
- // Swap internal run length (1->2 or 2->1)
5316
- effectiveEmphasisLength = matchLength - effectiveEmphasisLength;
5317
- } else if (effectiveEmphasisLength === 3) {
5318
- // Downgrade internal run (3->1 or 3->2)
5319
- effectiveEmphasisLength -= matchLength;
5320
- } else {
5321
- // Upgrade to internal run (1->3 or 2->3)
5322
- effectiveEmphasisLength += matchLength;
5323
5319
  }
5324
- // Back up one character so RegExp has a chance to match the
5325
- // next marker (ex: "**star**_underscore_")
5326
- if (emphasisRe.lastIndex > 1) {
5327
- emphasisRe.lastIndex--;
5320
+
5321
+ // Process bare tokens for each emphasis marker type
5322
+ } catch (err) {
5323
+ _iterator3.e(err);
5324
+ } finally {
5325
+ _iterator3.f();
5326
+ }
5327
+ var _iterator4 = _createForOfIteratorHelper(emphasisTokensByMarker.entries()),
5328
+ _step4;
5329
+ try {
5330
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
5331
+ var entry = _step4.value;
5332
+ var _entry = _slicedToArray(entry, 2),
5333
+ _marker = _entry[0],
5334
+ _emphasisTokens2 = _entry[1];
5335
+ for (var i = 0; i + 1 < _emphasisTokens2.length; i += 2) {
5336
+ // Process start token of start/end pair
5337
+ var startToken = _emphasisTokens2[i];
5338
+ var startLine = lines[startToken.startLine - 1];
5339
+ var startSlice = startLine.slice(startToken.endColumn - 1);
5340
+ var startMatch = startSlice.match(/^\s+\S/);
5341
+ if (startMatch) {
5342
+ var _startMatch = _slicedToArray(startMatch, 1),
5343
+ startSpaceCharacter = _startMatch[0];
5344
+ var startContext = "".concat(_marker).concat(startSpaceCharacter);
5345
+ addError(onError, startToken.startLine, undefined, startContext, [startToken.startColumn, startContext.length], {
5346
+ "editColumn": startToken.endColumn,
5347
+ "deleteCount": startSpaceCharacter.length - 1
5348
+ });
5349
+ }
5350
+
5351
+ // Process end token of start/end pair
5352
+ var endToken = _emphasisTokens2[i + 1];
5353
+ var endLine = lines[endToken.startLine - 1];
5354
+ var endSlice = endLine.slice(0, endToken.startColumn - 1);
5355
+ var endMatch = endSlice.match(/\S\s+$/);
5356
+ if (endMatch) {
5357
+ var _endMatch = _slicedToArray(endMatch, 1),
5358
+ endSpaceCharacter = _endMatch[0];
5359
+ var endContext = "".concat(endSpaceCharacter).concat(_marker);
5360
+ addError(onError, endToken.startLine, undefined, endContext, [endToken.endColumn - endContext.length, endContext.length], {
5361
+ "editColumn": endToken.startColumn - (endSpaceCharacter.length - 1),
5362
+ "deleteCount": endSpaceCharacter.length - 1
5363
+ });
5364
+ }
5365
+ }
5328
5366
  }
5329
- } else if (emphasisRe.lastIndex > 1) {
5330
- // Back up one character so RegExp has a chance to match the
5331
- // mis-matched marker (ex: "*text_*")
5332
- emphasisRe.lastIndex--;
5367
+ } catch (err) {
5368
+ _iterator4.e(err);
5369
+ } finally {
5370
+ _iterator4.f();
5333
5371
  }
5334
5372
  }
5335
- if (emphasisIndex !== -1) {
5336
- pendingError = pendingError || handleRunEnd(line, lineIndex, 0, null, line.length, inTable);
5337
- // Adjust for pending run on new line
5338
- emphasisIndex = 0;
5339
- emphasisLength = 0;
5340
- }
5341
- });
5373
+ } catch (err) {
5374
+ _iterator.e(err);
5375
+ } finally {
5376
+ _iterator.f();
5377
+ }
5342
5378
  }
5343
5379
  };
5344
5380
 
@@ -5704,52 +5740,54 @@ module.exports = {
5704
5740
  "tags": ["headings", "headers"],
5705
5741
  "function": function MD043(params, onError) {
5706
5742
  var requiredHeadings = params.config.headings || params.config.headers;
5743
+ if (!Array.isArray(requiredHeadings)) {
5744
+ // Nothing to check; avoid doing any work
5745
+ return;
5746
+ }
5707
5747
  var matchCase = params.config.match_case || false;
5708
- if (Array.isArray(requiredHeadings)) {
5709
- var levels = {};
5710
- for (var _i = 0, _arr = [1, 2, 3, 4, 5, 6]; _i < _arr.length; _i++) {
5711
- var level = _arr[_i];
5712
- levels["h" + level] = "######".substr(-level);
5713
- }
5714
- var i = 0;
5715
- var matchAny = false;
5716
- var hasError = false;
5717
- var anyHeadings = false;
5718
- var getExpected = function getExpected() {
5719
- return requiredHeadings[i++] || "[None]";
5720
- };
5721
- var handleCase = function handleCase(str) {
5722
- return matchCase ? str : str.toLowerCase();
5723
- };
5724
- forEachHeading(params, function (heading, content) {
5725
- if (!hasError) {
5726
- anyHeadings = true;
5727
- var actual = levels[heading.tag] + " " + content;
5728
- var expected = getExpected();
5729
- if (expected === "*") {
5730
- var nextExpected = getExpected();
5731
- if (handleCase(nextExpected) !== handleCase(actual)) {
5732
- matchAny = true;
5733
- i--;
5734
- }
5735
- } else if (expected === "+") {
5748
+ var levels = {};
5749
+ for (var _i = 0, _arr = [1, 2, 3, 4, 5, 6]; _i < _arr.length; _i++) {
5750
+ var level = _arr[_i];
5751
+ levels["h" + level] = "######".substr(-level);
5752
+ }
5753
+ var i = 0;
5754
+ var matchAny = false;
5755
+ var hasError = false;
5756
+ var anyHeadings = false;
5757
+ var getExpected = function getExpected() {
5758
+ return requiredHeadings[i++] || "[None]";
5759
+ };
5760
+ var handleCase = function handleCase(str) {
5761
+ return matchCase ? str : str.toLowerCase();
5762
+ };
5763
+ forEachHeading(params, function (heading, content) {
5764
+ if (!hasError) {
5765
+ anyHeadings = true;
5766
+ var actual = levels[heading.tag] + " " + content;
5767
+ var expected = getExpected();
5768
+ if (expected === "*") {
5769
+ var nextExpected = getExpected();
5770
+ if (handleCase(nextExpected) !== handleCase(actual)) {
5736
5771
  matchAny = true;
5737
- } else if (handleCase(expected) === handleCase(actual)) {
5738
- matchAny = false;
5739
- } else if (matchAny) {
5740
5772
  i--;
5741
- } else {
5742
- addErrorDetailIf(onError, heading.lineNumber, expected, actual);
5743
- hasError = true;
5744
5773
  }
5774
+ } else if (expected === "+") {
5775
+ matchAny = true;
5776
+ } else if (handleCase(expected) === handleCase(actual)) {
5777
+ matchAny = false;
5778
+ } else if (matchAny) {
5779
+ i--;
5780
+ } else {
5781
+ addErrorDetailIf(onError, heading.lineNumber, expected, actual);
5782
+ hasError = true;
5745
5783
  }
5746
- });
5747
- var extraHeadings = requiredHeadings.length - i;
5748
- if (!hasError && (extraHeadings > 1 || extraHeadings === 1 && requiredHeadings[i] !== "*") && (anyHeadings || !requiredHeadings.every(function (heading) {
5749
- return heading === "*";
5750
- }))) {
5751
- addErrorContext(onError, params.lines.length, requiredHeadings[i]);
5752
5784
  }
5785
+ });
5786
+ var extraHeadings = requiredHeadings.length - i;
5787
+ if (!hasError && (extraHeadings > 1 || extraHeadings === 1 && requiredHeadings[i] !== "*") && (anyHeadings || !requiredHeadings.every(function (heading) {
5788
+ return heading === "*";
5789
+ }))) {
5790
+ addErrorContext(onError, params.lines.length, requiredHeadings[i]);
5753
5791
  }
5754
5792
  }
5755
5793
  };
@@ -5767,21 +5805,20 @@ module.exports = {
5767
5805
 
5768
5806
 
5769
5807
 
5770
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
5771
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5772
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
5773
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
5774
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
5775
5808
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
5776
5809
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5777
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
5778
5810
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
5779
5811
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
5812
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
5813
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5814
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
5815
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
5816
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
5817
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
5780
5818
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5781
5819
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
5782
5820
  addErrorDetailIf = _require.addErrorDetailIf,
5783
5821
  escapeForRegExp = _require.escapeForRegExp,
5784
- newLineRe = _require.newLineRe,
5785
5822
  withinAnyRange = _require.withinAnyRange;
5786
5823
  var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
5787
5824
  filterByPredicate = _require2.filterByPredicate,
@@ -5798,70 +5835,47 @@ module.exports = {
5798
5835
  names.sort(function (a, b) {
5799
5836
  return b.length - a.length || a.localeCompare(b);
5800
5837
  });
5838
+ if (names.length === 0) {
5839
+ // Nothing to check; avoid doing any work
5840
+ return;
5841
+ }
5801
5842
  var codeBlocks = params.config.code_blocks;
5802
5843
  var includeCodeBlocks = codeBlocks === undefined ? true : !!codeBlocks;
5803
5844
  var htmlElements = params.config.html_elements;
5804
5845
  var includeHtmlElements = htmlElements === undefined ? true : !!htmlElements;
5805
- var scannedTypes = new Set(["data", "htmlFlowData"]);
5846
+ var scannedTypes = new Set(["data"]);
5806
5847
  if (includeCodeBlocks) {
5807
5848
  scannedTypes.add("codeFlowValue");
5808
5849
  scannedTypes.add("codeTextData");
5809
5850
  }
5810
- var tokenAdjustments = new Map();
5851
+ if (includeHtmlElements) {
5852
+ scannedTypes.add("htmlFlowData");
5853
+ scannedTypes.add("htmlTextData");
5854
+ }
5811
5855
  var contentTokens = filterByPredicate(params.parsers.micromark.tokens, function (token) {
5812
5856
  return scannedTypes.has(token.type);
5813
5857
  }, function (token) {
5814
- var children = token.children;
5815
- var startLine = token.startLine,
5816
- text = token.text;
5817
- if (!includeHtmlElements && token.type === "htmlFlow") {
5818
- if (text.startsWith("<!--")) {
5819
- // Remove comment content
5820
- children = [];
5821
- } else {
5822
- // Re-parse to get htmlText elements for detailed tokenization
5823
- var htmlTextLines = "<md044>\n".concat(text, "\n</md044>").split(newLineRe);
5824
- children = parse(htmlTextLines.join(""));
5825
- var reTokens = _toConsumableArray(children);
5826
- var _iterator = _createForOfIteratorHelper(reTokens),
5827
- _step;
5828
- try {
5829
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
5830
- var reToken = _step.value;
5831
- tokenAdjustments.set(reToken, {
5832
- htmlTextLines: htmlTextLines,
5833
- startLine: startLine
5834
- });
5835
- reTokens.push.apply(reTokens, _toConsumableArray(reToken.children));
5836
- }
5837
- } catch (err) {
5838
- _iterator.e(err);
5839
- } finally {
5840
- _iterator.f();
5841
- }
5842
- }
5843
- }
5844
- return children.filter(function (t) {
5858
+ return token.children.filter(function (t) {
5845
5859
  return !ignoredChildTypes.has(t.type);
5846
5860
  });
5847
5861
  });
5848
5862
  var exclusions = [];
5849
5863
  var autoLinked = new Set();
5850
- var _iterator2 = _createForOfIteratorHelper(names),
5851
- _step2;
5864
+ var _iterator = _createForOfIteratorHelper(names),
5865
+ _step;
5852
5866
  try {
5853
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
5854
- var name = _step2.value;
5867
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
5868
+ var name = _step.value;
5855
5869
  var escapedName = escapeForRegExp(name);
5856
5870
  var startNamePattern = /^\W/.test(name) ? "" : "\\b_*";
5857
5871
  var endNamePattern = /\W$/.test(name) ? "" : "_*\\b";
5858
5872
  var namePattern = "(".concat(startNamePattern, ")(").concat(escapedName, ")").concat(endNamePattern);
5859
5873
  var nameRe = new RegExp(namePattern, "gi");
5860
- var _iterator3 = _createForOfIteratorHelper(contentTokens),
5861
- _step3;
5874
+ var _iterator2 = _createForOfIteratorHelper(contentTokens),
5875
+ _step2;
5862
5876
  try {
5863
5877
  var _loop = function _loop() {
5864
- var token = _step3.value;
5878
+ var token = _step2.value;
5865
5879
  var match = null;
5866
5880
  var _loop2 = function _loop2() {
5867
5881
  var _match = match,
@@ -5881,21 +5895,8 @@ module.exports = {
5881
5895
  autoLinked.add(token);
5882
5896
  }
5883
5897
  if (!withinAnyRange(urlRanges, lineIndex, index, length)) {
5884
- var lineNumber = token.startLine;
5885
- var column = index;
5886
- if (tokenAdjustments.has(token)) {
5887
- var _tokenAdjustments$get = tokenAdjustments.get(token),
5888
- htmlTextLines = _tokenAdjustments$get.htmlTextLines,
5889
- startLine = _tokenAdjustments$get.startLine;
5890
- var lineDelta = 0;
5891
- while (htmlTextLines[lineDelta].length <= column) {
5892
- column -= htmlTextLines[lineDelta].length;
5893
- lineDelta++;
5894
- }
5895
- lineNumber = startLine + lineDelta - 1;
5896
- }
5897
- column++;
5898
- addErrorDetailIf(onError, lineNumber, name, nameMatch, null, null, [column, length], {
5898
+ var column = index + 1;
5899
+ addErrorDetailIf(onError, token.startLine, name, nameMatch, null, null, [column, length], {
5899
5900
  "editColumn": column,
5900
5901
  "deleteCount": length,
5901
5902
  "insertText": name
@@ -5908,19 +5909,19 @@ module.exports = {
5908
5909
  _loop2();
5909
5910
  }
5910
5911
  };
5911
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
5912
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
5912
5913
  _loop();
5913
5914
  }
5914
5915
  } catch (err) {
5915
- _iterator3.e(err);
5916
+ _iterator2.e(err);
5916
5917
  } finally {
5917
- _iterator3.f();
5918
+ _iterator2.f();
5918
5919
  }
5919
5920
  }
5920
5921
  } catch (err) {
5921
- _iterator2.e(err);
5922
+ _iterator.e(err);
5922
5923
  } finally {
5923
- _iterator2.f();
5924
+ _iterator.f();
5924
5925
  }
5925
5926
  }
5926
5927
  };
@@ -5938,19 +5939,37 @@ module.exports = {
5938
5939
 
5939
5940
 
5940
5941
 
5942
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
5943
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
5944
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5941
5945
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
5942
- addError = _require.addError,
5943
- forEachInlineChild = _require.forEachInlineChild;
5946
+ addError = _require.addError;
5947
+ var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
5948
+ filterByTypes = _require2.filterByTypes;
5944
5949
  module.exports = {
5945
5950
  "names": ["MD045", "no-alt-text"],
5946
5951
  "description": "Images should have alternate text (alt text)",
5947
5952
  "tags": ["accessibility", "images"],
5948
5953
  "function": function MD045(params, onError) {
5949
- forEachInlineChild(params, "image", function forToken(token) {
5950
- if (token.content === "") {
5951
- addError(onError, token.lineNumber);
5954
+ var images = filterByTypes(params.parsers.micromark.tokens, ["image"]);
5955
+ var _iterator = _createForOfIteratorHelper(images),
5956
+ _step;
5957
+ try {
5958
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
5959
+ var image = _step.value;
5960
+ var labelTexts = filterByTypes(image.children, ["labelText"]);
5961
+ if (labelTexts.some(function (labelText) {
5962
+ return labelText.text.length === 0;
5963
+ })) {
5964
+ var range = image.startLine === image.endLine ? [image.startColumn, image.endColumn - image.startColumn] : undefined;
5965
+ addError(onError, image.startLine, undefined, undefined, range);
5966
+ }
5952
5967
  }
5953
- });
5968
+ } catch (err) {
5969
+ _iterator.e(err);
5970
+ } finally {
5971
+ _iterator.f();
5972
+ }
5954
5973
  }
5955
5974
  };
5956
5975
 
@@ -6106,14 +6125,18 @@ var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
6106
6125
  addError = _require.addError,
6107
6126
  emphasisOrStrongStyleFor = _require.emphasisOrStrongStyleFor;
6108
6127
  var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
6109
- filterByTypes = _require2.filterByTypes,
6128
+ filterByPredicate = _require2.filterByPredicate,
6110
6129
  tokenIfType = _require2.tokenIfType;
6111
6130
  var intrawordRe = /\w/;
6112
6131
  var impl = function impl(params, onError, type, asterisk, underline) {
6113
6132
  var style = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "consistent";
6114
6133
  var lines = params.lines,
6115
6134
  parsers = params.parsers;
6116
- var emphasisTokens = filterByTypes(parsers.micromark.tokens, [type]);
6135
+ var emphasisTokens = filterByPredicate(parsers.micromark.tokens, function (token) {
6136
+ return token.type === type;
6137
+ }, function (token) {
6138
+ return token.type === "htmlFlow" ? [] : token.children;
6139
+ });
6117
6140
  var _iterator = _createForOfIteratorHelper(emphasisTokens),
6118
6141
  _step;
6119
6142
  try {
@@ -6184,35 +6207,46 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
6184
6207
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
6185
6208
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6186
6209
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6210
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6211
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
6212
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
6187
6213
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6188
6214
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
6189
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
6190
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
6191
6215
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
6192
6216
  addError = _require.addError,
6193
- addErrorDetailIf = _require.addErrorDetailIf,
6194
- escapeForRegExp = _require.escapeForRegExp,
6195
- filterTokens = _require.filterTokens,
6196
- forEachInlineChild = _require.forEachInlineChild,
6197
- forEachHeading = _require.forEachHeading,
6198
- htmlElementRe = _require.htmlElementRe;
6217
+ addErrorDetailIf = _require.addErrorDetailIf;
6218
+ var _require2 = __webpack_require__(/*! ../helpers/micromark.cjs */ "../helpers/micromark.cjs"),
6219
+ filterByPredicate = _require2.filterByPredicate,
6220
+ filterByTypes = _require2.filterByTypes,
6221
+ getHtmlTagInfo = _require2.getHtmlTagInfo;
6199
6222
 
6200
6223
  // Regular expression for identifying HTML anchor names
6201
6224
  var idRe = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]id[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*=[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*["']?((?:(?![\t-\r "'>\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uD800-\uDFFF\uFEFF])[\s\S]|[\uD800-\uDBFF][\uDC00-\uDFFF])+)/i;
6202
6225
  var nameRe = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]name[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*=[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*["']?((?:(?![\t-\r "'>\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uD800-\uDFFF\uFEFF])[\s\S]|[\uD800-\uDBFF][\uDC00-\uDFFF])+)/i;
6226
+ var anchorRe = /\{(#[0-9a-z]+(?:[\x2D_][0-9a-z]+)*)\}/g;
6227
+
6228
+ // Sets for filtering heading tokens during conversion
6229
+ var childrenExclude = new Set(["image", "reference", "resource"]);
6230
+ var tokensInclude = new Set(["codeTextData", "data"]);
6231
+
6232
+ /**
6233
+ * @typedef {import("../helpers/micromark.cjs").Token} Token
6234
+ */
6203
6235
 
6204
6236
  /**
6205
6237
  * Converts a Markdown heading into an HTML fragment according to the rules
6206
6238
  * used by GitHub.
6207
6239
  *
6208
- * @param {Object} inline Inline token for heading.
6240
+ * @param {Token} headingText Heading text token.
6209
6241
  * @returns {string} Fragment string for heading.
6210
6242
  */
6211
- function convertHeadingToHTMLFragment(inline) {
6212
- var inlineText = inline.children.filter(function (token) {
6213
- return token.type !== "html_inline";
6243
+ function convertHeadingToHTMLFragment(headingText) {
6244
+ var inlineText = filterByPredicate(headingText.children, function (token) {
6245
+ return tokensInclude.has(token.type);
6246
+ }, function (token) {
6247
+ return childrenExclude.has(token.type) ? [] : token.children;
6214
6248
  }).map(function (token) {
6215
- return token.content;
6249
+ return token.text;
6216
6250
  }).join("");
6217
6251
  return "#" + encodeURIComponent(inlineText.toLowerCase()
6218
6252
  // RegExp source with Ruby's \p{Word} expanded into its General Categories
@@ -6221,77 +6255,141 @@ function convertHeadingToHTMLFragment(inline) {
6221
6255
  // https://ruby-doc.org/core-3.0.2/Regexp.html
6222
6256
  .replace(/(?:[\0-\x1F!-,\.\/:-@\[-\^`\{-\xA9\xAB-\xB1\xB4\xB6-\xB8\xBB\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u086F\u0888\u088F-\u0897\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2\u09F3\u09FA\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF3-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDC\u0CDF\u0CE4\u0CE5\u0CF0\u0CF4-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D64\u0D65\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u1368\u137D-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16ED\u16F9-\u16FF\u1716-\u171E\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u17EF\u17FA-\u180A\u180E\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1ACF-\u1AFF\u1B4D-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u203E\u2041-\u2053\u2055-\u206F\u2072\u2073\u207A-\u207E\u208A-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A-\u245F\u249C-\u24E9\u2500-\u2775\u2794-\u2BFF\u2CE5-\u2CEA\u2CF4-\u2CFC\u2CFE\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3008-\u3020\u3030\u3036\u3037\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u3191\u3196-\u319F\u31C0-\u31EF\u3200-\u321F\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA828-\uA82B\uA82D-\uA82F\uA836-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE32\uFE35-\uFE4C\uFE50-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF3E\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDD06\uDD34-\uDD3F\uDD79-\uDD89\uDD8C-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC57\uDC77\uDC78\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE5F\uDE7F\uDEA0-\uDEBF\uDEC8\uDEE7-\uDEEA\uDEF0-\uDEFF\uDF36-\uDF3F\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEFC\uDF28-\uDF2F\uDF55-\uDF6F\uDF86-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC51\uDC76-\uDC7E\uDCBB-\uDCC1\uDCC3-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDE0\uDDF5-\uDDFF\uDE12\uDE38-\uDE3D\uDE42-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3C-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC6D-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDEFF\uDF11\uDF3B-\uDF3D\uDF43-\uDF4F\uDF5A-\uDFAF\uDFB1-\uDFBF\uDFD5-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83D\uD83F\uD87B-\uD87D\uD87F\uD889-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC3F\uDC56-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6F\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE97-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD833[\uDC00-\uDEFF\uDF2E\uDF2F\uDF47-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDEBF\uDED4-\uDEDF\uDEF4-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDC2F\uDC6E-\uDC8E\uDC90-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCFA-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCAC\uDCB0\uDCB5-\uDD00\uDD2E\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83C[\uDC00-\uDCFF\uDD0D-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, "").replace(/ /g, "-"));
6223
6257
  }
6258
+
6259
+ /**
6260
+ * Unescapes the text of a String-type micromark Token.
6261
+ *
6262
+ * @param {Token} token String-type micromark Token.
6263
+ * @returns {string} Unescaped token text.
6264
+ */
6265
+ function unescapeStringTokenText(token) {
6266
+ return filterByTypes(token.children, ["characterEscapeValue", "data"]).map(function (child) {
6267
+ return child.text;
6268
+ }).join("");
6269
+ }
6224
6270
  module.exports = {
6225
6271
  "names": ["MD051", "link-fragments"],
6226
6272
  "description": "Link fragments should be valid",
6227
6273
  "tags": ["links"],
6228
6274
  "function": function MD051(params, onError) {
6275
+ var tokens = params.parsers.micromark.tokens;
6229
6276
  var fragments = new Map();
6277
+
6230
6278
  // Process headings
6231
- forEachHeading(params, function (heading, content, inline) {
6232
- var fragment = convertHeadingToHTMLFragment(inline);
6233
- var count = fragments.get(fragment) || 0;
6234
- if (count) {
6235
- fragments.set("".concat(fragment, "-").concat(count), 0);
6236
- }
6237
- fragments.set(fragment, count + 1);
6238
- });
6239
- // Process HTML anchors
6240
- var processHtmlToken = function processHtmlToken(token) {
6241
- var match = null;
6242
- while ((match = htmlElementRe.exec(token.content)) !== null) {
6243
- var _match = match,
6244
- _match2 = _slicedToArray(_match, 3),
6245
- tag = _match2[0],
6246
- element = _match2[2];
6247
- var anchorMatch = idRe.exec(tag) || element.toLowerCase() === "a" && nameRe.exec(tag);
6248
- if (anchorMatch) {
6249
- fragments.set("#".concat(anchorMatch[1]), 0);
6279
+ var headingTexts = filterByTypes(tokens, ["atxHeadingText", "setextHeadingText"]);
6280
+ var _iterator = _createForOfIteratorHelper(headingTexts),
6281
+ _step;
6282
+ try {
6283
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
6284
+ var headingText = _step.value;
6285
+ var fragment = convertHeadingToHTMLFragment(headingText);
6286
+ if (fragment !== "#") {
6287
+ var count = fragments.get(fragment) || 0;
6288
+ if (count) {
6289
+ fragments.set("".concat(fragment, "-").concat(count), 0);
6290
+ }
6291
+ fragments.set(fragment, count + 1);
6292
+ var match = null;
6293
+ while ((match = anchorRe.exec(headingText.text)) !== null) {
6294
+ var _match = match,
6295
+ _match2 = _slicedToArray(_match, 2),
6296
+ anchor = _match2[1];
6297
+ if (!fragments.has(anchor)) {
6298
+ fragments.set(anchor, 1);
6299
+ }
6300
+ }
6250
6301
  }
6251
6302
  }
6252
- };
6253
- filterTokens(params, "html_block", processHtmlToken);
6254
- forEachInlineChild(params, "html_inline", processHtmlToken);
6255
- // Process link fragments
6256
- forEachInlineChild(params, "link_open", function (token) {
6257
- var attrs = token.attrs,
6258
- lineNumber = token.lineNumber,
6259
- line = token.line;
6260
- var href = attrs.find(function (attr) {
6261
- return attr[0] === "href";
6262
- });
6263
- var id = href && href[1];
6264
- if (id && id.length > 1 && id[0] === "#" && !fragments.has(id)) {
6265
- var context = id;
6266
- var range = null;
6267
- var fixInfo = null;
6268
- var match = line.match(new RegExp("\\[.*?\\]\\(".concat(escapeForRegExp(context), "\\)")));
6269
- if (match) {
6270
- var _match3 = _slicedToArray(match, 1);
6271
- context = _match3[0];
6272
- var index = match.index;
6273
- var length = context.length;
6274
- range = [index + 1, length];
6275
- fixInfo = {
6276
- "editColumn": index + (length - id.length),
6277
- "deleteCount": id.length,
6278
- "insertText": null
6279
- };
6303
+
6304
+ // Process HTML anchors
6305
+ } catch (err) {
6306
+ _iterator.e(err);
6307
+ } finally {
6308
+ _iterator.f();
6309
+ }
6310
+ var _iterator2 = _createForOfIteratorHelper(filterByTypes(tokens, ["htmlText"])),
6311
+ _step2;
6312
+ try {
6313
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
6314
+ var token = _step2.value;
6315
+ var htmlTagInfo = getHtmlTagInfo(token);
6316
+ if (htmlTagInfo && !htmlTagInfo.close) {
6317
+ var anchorMatch = idRe.exec(token.text) || htmlTagInfo.name.toLowerCase() === "a" && nameRe.exec(token.text);
6318
+ if (anchorMatch) {
6319
+ fragments.set("#".concat(anchorMatch[1]), 0);
6320
+ }
6280
6321
  }
6281
- var idLower = id.toLowerCase();
6282
- var mixedCaseKey = _toConsumableArray(fragments.keys()).find(function (key) {
6283
- return idLower === key.toLowerCase();
6284
- });
6285
- if (mixedCaseKey) {
6286
- (fixInfo || {}).insertText = mixedCaseKey;
6287
- addErrorDetailIf(onError, lineNumber, mixedCaseKey, id, undefined, context, range, fixInfo);
6288
- } else {
6289
- addError(onError, lineNumber, undefined, context,
6290
- // @ts-ignore
6291
- range);
6322
+ }
6323
+
6324
+ // Process link and definition fragments
6325
+ } catch (err) {
6326
+ _iterator2.e(err);
6327
+ } finally {
6328
+ _iterator2.f();
6329
+ }
6330
+ var parentChilds = [["link", "resourceDestinationString"], ["definition", "definitionDestinationString"]];
6331
+ for (var _i = 0, _parentChilds = parentChilds; _i < _parentChilds.length; _i++) {
6332
+ var _parentChilds$_i = _slicedToArray(_parentChilds[_i], 2),
6333
+ parentType = _parentChilds$_i[0],
6334
+ definitionType = _parentChilds$_i[1];
6335
+ var links = filterByTypes(tokens, [parentType]);
6336
+ var _iterator3 = _createForOfIteratorHelper(links),
6337
+ _step3;
6338
+ try {
6339
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
6340
+ var link = _step3.value;
6341
+ var definitions = filterByTypes(link.children, [definitionType]);
6342
+ var _iterator4 = _createForOfIteratorHelper(definitions),
6343
+ _step4;
6344
+ try {
6345
+ var _loop = function _loop() {
6346
+ var definition = _step4.value;
6347
+ var endColumn = definition.endColumn,
6348
+ startColumn = definition.startColumn;
6349
+ var text = unescapeStringTokenText(definition);
6350
+ if (text.length > 1 && text.startsWith("#") && !fragments.has(text) && !fragments.has("#".concat(encodeURIComponent(text.slice(1))))) {
6351
+ // eslint-disable-next-line no-undef-init
6352
+ var context = undefined;
6353
+ // eslint-disable-next-line no-undef-init
6354
+ var range = undefined;
6355
+ // eslint-disable-next-line no-undef-init
6356
+ var fixInfo = undefined;
6357
+ if (link.startLine === link.endLine) {
6358
+ context = link.text;
6359
+ range = [link.startColumn, link.endColumn - link.startColumn];
6360
+ fixInfo = {
6361
+ "editColumn": startColumn,
6362
+ "deleteCount": endColumn - startColumn
6363
+ };
6364
+ }
6365
+ var textLower = text.toLowerCase();
6366
+ var mixedCaseKey = _toConsumableArray(fragments.keys()).find(function (key) {
6367
+ return textLower === key.toLowerCase();
6368
+ });
6369
+ if (mixedCaseKey) {
6370
+ // @ts-ignore
6371
+ (fixInfo || {}).insertText = mixedCaseKey;
6372
+ addErrorDetailIf(onError, link.startLine, mixedCaseKey, text, undefined, context, range, fixInfo);
6373
+ } else {
6374
+ addError(onError, link.startLine, undefined, context, range);
6375
+ }
6376
+ }
6377
+ };
6378
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
6379
+ _loop();
6380
+ }
6381
+ } catch (err) {
6382
+ _iterator4.e(err);
6383
+ } finally {
6384
+ _iterator4.f();
6385
+ }
6292
6386
  }
6387
+ } catch (err) {
6388
+ _iterator3.e(err);
6389
+ } finally {
6390
+ _iterator3.f();
6293
6391
  }
6294
- });
6392
+ }
6295
6393
  }
6296
6394
  };
6297
6395
 
@@ -6310,10 +6408,14 @@ module.exports = {
6310
6408
 
6311
6409
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6312
6410
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6313
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
6411
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6314
6412
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
6315
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
6413
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
6414
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
6415
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6316
6416
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6417
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6418
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
6317
6419
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
6318
6420
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),
6319
6421
  addError = _require.addError;
@@ -6324,12 +6426,16 @@ module.exports = {
6324
6426
  "description": "Reference links and images should use a label that is defined",
6325
6427
  "tags": ["images", "links"],
6326
6428
  "function": function MD052(params, onError) {
6327
- var lines = params.lines;
6429
+ var config = params.config,
6430
+ lines = params.lines;
6431
+ var shortcutSyntax = config.shortcut_syntax || false;
6328
6432
  var _referenceLinkImageDa = referenceLinkImageData(),
6433
+ definitions = _referenceLinkImageDa.definitions,
6329
6434
  references = _referenceLinkImageDa.references,
6330
- definitions = _referenceLinkImageDa.definitions;
6435
+ shortcuts = _referenceLinkImageDa.shortcuts;
6436
+ var entries = shortcutSyntax ? [].concat(_toConsumableArray(references.entries()), _toConsumableArray(shortcuts.entries())) : references.entries();
6331
6437
  // Look for links/images that use an undefined link reference
6332
- var _iterator = _createForOfIteratorHelper(references.entries()),
6438
+ var _iterator = _createForOfIteratorHelper(entries),
6333
6439
  _step;
6334
6440
  try {
6335
6441
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -6381,9 +6487,9 @@ module.exports = {
6381
6487
 
6382
6488
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6383
6489
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6384
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
6490
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6385
6491
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
6386
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
6492
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
6387
6493
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6388
6494
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
6389
6495
  var _require = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"),