diff --git a/demo/markdownlint-browser.js b/demo/markdownlint-browser.js index eb433239..72769a85 100644 --- a/demo/markdownlint-browser.js +++ b/demo/markdownlint-browser.js @@ -1137,6 +1137,7 @@ var _require = __webpack_require__(/*! markdownlint-micromark */ "markdownlint-m preprocess = _require.preprocess; var _require2 = __webpack_require__(/*! ./shared.js */ "../helpers/shared.js"), newLineRe = _require2.newLineRe; +var flatTokensSymbol = Symbol("flat-tokens"); /** * Markdown token. @@ -1197,6 +1198,7 @@ function micromarkParseWithOffset(markdown, micromarkOptions, referencesDefined, // Create Token objects var document = []; + var flatTokens = []; var current = { "children": document }; @@ -1247,6 +1249,7 @@ function micromarkParseWithOffset(markdown, micromarkOptions, referencesDefined, current.htmlFlowChildren = micromarkParseWithOffset(reparseMarkdown, reparseOptions, referencesDefined, current.startLine - 1); } previous.children.push(current); + flatTokens.push(current); } else if (kind === "exit") { Object.freeze(current.children); Object.freeze(current); @@ -1261,6 +1264,9 @@ function micromarkParseWithOffset(markdown, micromarkOptions, referencesDefined, } finally { _iterator.f(); } + Object.defineProperty(document, flatTokensSymbol, { + "value": flatTokens + }); Object.freeze(document); return document; } @@ -1311,9 +1317,14 @@ function filterByPredicate(tokens, allowed, transformChildren) { * @returns {Token[]} Filtered tokens. */ function filterByTypes(tokens, allowed) { - return filterByPredicate(tokens, function (token) { + var predicate = function predicate(token) { return allowed.includes(token.type); - }); + }; + var flatTokens = tokens[flatTokensSymbol]; + if (flatTokens) { + return flatTokens.filter(predicate); + } + return filterByPredicate(tokens, predicate); } /** diff --git a/helpers/micromark.cjs b/helpers/micromark.cjs index fbfec44d..bcdde432 100644 --- a/helpers/micromark.cjs +++ b/helpers/micromark.cjs @@ -10,6 +10,8 @@ const { } = require("markdownlint-micromark"); const { newLineRe } = require("./shared.js"); +const flatTokensSymbol = Symbol("flat-tokens"); + /** * Markdown token. * @@ -82,6 +84,7 @@ function micromarkParseWithOffset( // Create Token objects const document = []; + const flatTokens = []; let current = { "children": document }; @@ -131,6 +134,7 @@ function micromarkParseWithOffset( ); } previous.children.push(current); + flatTokens.push(current); } else if (kind === "exit") { Object.freeze(current.children); Object.freeze(current); @@ -140,6 +144,7 @@ function micromarkParseWithOffset( } // Return document + Object.defineProperty(document, flatTokensSymbol, { "value": flatTokens }); Object.freeze(document); return document; } @@ -198,10 +203,12 @@ function filterByPredicate(tokens, allowed, transformChildren) { * @returns {Token[]} Filtered tokens. */ function filterByTypes(tokens, allowed) { - return filterByPredicate( - tokens, - (token) => allowed.includes(token.type) - ); + const predicate = (token) => allowed.includes(token.type); + const flatTokens = tokens[flatTokensSymbol]; + if (flatTokens) { + return flatTokens.filter(predicate); + } + return filterByPredicate(tokens, predicate); } /**