@readme/markdown 14.11.2 → 14.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/339.node.js CHANGED
@@ -1012,7 +1012,7 @@ var _arrayPush = __webpack_require__(9);
1012
1012
  // EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js
1013
1013
  var _Symbol = __webpack_require__(8066);
1014
1014
  // EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules
1015
- var isArguments = __webpack_require__(1419);
1015
+ var isArguments = __webpack_require__(3800);
1016
1016
  // EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
1017
1017
  var isArray = __webpack_require__(9990);
1018
1018
  ;// ./node_modules/lodash-es/_isFlattenable.js
@@ -2482,7 +2482,7 @@ var getSymbolsIn = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0_
2482
2482
  /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
2483
2483
  /* harmony export */ });
2484
2484
  /* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2689);
2485
- /* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1419);
2485
+ /* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3800);
2486
2486
  /* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9990);
2487
2487
  /* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8912);
2488
2488
  /* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3627);
package/dist/486.node.js CHANGED
@@ -12552,7 +12552,7 @@ function baseTimes(n, iteratee) {
12552
12552
  /* harmony default export */ const _baseTimes = (baseTimes);
12553
12553
 
12554
12554
  // EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules
12555
- var isArguments = __webpack_require__(1419);
12555
+ var isArguments = __webpack_require__(3800);
12556
12556
  // EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
12557
12557
  var isArray = __webpack_require__(9990);
12558
12558
  // EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules
@@ -14118,7 +14118,7 @@ function identity(value) {
14118
14118
 
14119
14119
  /***/ }),
14120
14120
 
14121
- /***/ 1419:
14121
+ /***/ 3800:
14122
14122
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
14123
14123
 
14124
14124
  "use strict";
@@ -14407,7 +14407,7 @@ var isBuffer = nativeIsBuffer || lodash_es_stubFalse;
14407
14407
  /* harmony export */ });
14408
14408
  /* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(6279);
14409
14409
  /* harmony import */ var _getTag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1424);
14410
- /* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1419);
14410
+ /* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3800);
14411
14411
  /* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9990);
14412
14412
  /* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1585);
14413
14413
  /* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1719);
@@ -15032,7 +15032,7 @@ var _copyArray = __webpack_require__(1810);
15032
15032
  // EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules
15033
15033
  var _initCloneObject = __webpack_require__(2247);
15034
15034
  // EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules
15035
- var isArguments = __webpack_require__(1419);
15035
+ var isArguments = __webpack_require__(3800);
15036
15036
  // EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
15037
15037
  var isArray = __webpack_require__(9990);
15038
15038
  // EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js
@@ -0,0 +1,2 @@
1
+ import type { Extension as FromMarkdownExtension } from 'mdast-util-from-markdown';
2
+ export declare function htmlBlockComponentFromMarkdown(): FromMarkdownExtension;
@@ -0,0 +1 @@
1
+ export { htmlBlockComponent } from './syntax';
@@ -0,0 +1,8 @@
1
+ import type { Extension } from 'micromark-util-types';
2
+ declare module 'micromark-util-types' {
3
+ interface TokenTypeMap {
4
+ htmlBlockComponent: 'htmlBlockComponent';
5
+ htmlBlockComponentData: 'htmlBlockComponentData';
6
+ }
7
+ }
8
+ export declare function htmlBlockComponent(): Extension;
package/dist/main.js CHANGED
@@ -75795,6 +75795,32 @@ const applyInserts = (html, inserts) => {
75795
75795
  return { value: out + html.slice(cursor), inserts: sorted };
75796
75796
  };
75797
75797
 
75798
+ ;// ./processor/transform/mdxish/tables/escape-stray-less-than.ts
75799
+
75800
+
75801
+ // A `<` only starts a JSX/HTML construct when followed by a tag-name start
75802
+ // (letter, `_`, `$`), a closer `/`, a fragment `>`, or a comment/declaration
75803
+ // `!`. Anything else (whitespace, EOL, a digit, …) is a literal `<` that acorn
75804
+ // rejects with "before name, expected a character that can start a name".
75805
+ const STRAY_LESS_THAN_RE = /<(?![a-zA-Z_$/>!])/g;
75806
+ /**
75807
+ * Escapes stray `<` characters that don't begin a valid tag so the strict mdxjs
75808
+ * parse treats them as literal text instead of throwing (`word <`, `a <1>`).
75809
+ *
75810
+ * Runs against the masked source so `<` inside code spans, legacy `<<var>>`
75811
+ * syntax, or already-escaped `\<` are left untouched.
75812
+ */
75813
+ const escapeStrayLessThan = (html) => {
75814
+ const masked = maskNonTagRegions(html);
75815
+ const inserts = [];
75816
+ STRAY_LESS_THAN_RE.lastIndex = 0;
75817
+ let match;
75818
+ while ((match = STRAY_LESS_THAN_RE.exec(masked)) !== null) {
75819
+ inserts.push({ offset: match.index, text: '\\' });
75820
+ }
75821
+ return applyInserts(html, inserts);
75822
+ };
75823
+
75798
75824
  ;// ./processor/transform/mdxish/tables/normalize-tag-spacing.ts
75799
75825
 
75800
75826
 
@@ -76294,6 +76320,7 @@ const repairUnclosedTags = (html) => {
76294
76320
 
76295
76321
 
76296
76322
 
76323
+
76297
76324
 
76298
76325
 
76299
76326
  const isTableCell = (node) => isMDXElement(node) && ['th', 'td'].includes(node.name);
@@ -76580,11 +76607,14 @@ const mdxishTables = () => tree => {
76580
76607
  // - normalizeTagSpacing: a line mixing text and an opening tag
76581
76608
  // (e.g. `text <div> \n <div> text`)
76582
76609
  // - repairExpressionEscapes: backslash escapes inside a `{…}` expression
76610
+ // - escapeStrayLessThan: a `<` that doesn't begin a valid tag
76611
+ // (e.g. `word <`, `a <1>`)
76583
76612
  // These repairs are created after seeing real customer content that has failed to parse
76584
76613
  const repairs = [
76585
76614
  repairUnclosedTags,
76586
76615
  normalizeTagSpacing,
76587
76616
  repairExpressionEscapes,
76617
+ escapeStrayLessThan,
76588
76618
  ];
76589
76619
  // Stops at the first repair that yields a parseable tree
76590
76620
  repairs.some(repair => {
@@ -98743,6 +98773,21 @@ function isActualHtmlTag(tagName, originalExcerpt) {
98743
98773
  return true;
98744
98774
  return false;
98745
98775
  }
98776
+ /**
98777
+ * Re-parsing a component's text child treats it as a standalone document, so
98778
+ * content that happens to start with the literal word `export`/`import`
98779
+ * (e.g. link text like "export Lorem Ipsum") sits at true column 1 and
98780
+ * gets mistaken for an MDX ESM statement, which then fails to parse as JS.
98781
+ * Fall back to `undefined` rather than letting one such child crash the page.
98782
+ */
98783
+ function tryProcessMarkdown(processMarkdown, content) {
98784
+ try {
98785
+ return processMarkdown(content);
98786
+ }
98787
+ catch {
98788
+ return undefined;
98789
+ }
98790
+ }
98746
98791
  /** Parse and replace text children with processed markdown */
98747
98792
  function parseTextChildren(node, processMarkdown, components) {
98748
98793
  if (!node.children?.length)
@@ -98757,7 +98802,9 @@ function parseTextChildren(node, processMarkdown, components) {
98757
98802
  node.properties = { ...node.properties, children: child.value };
98758
98803
  return [];
98759
98804
  }
98760
- const hast = processMarkdown(child.value.trim());
98805
+ const hast = tryProcessMarkdown(processMarkdown, child.value.trim());
98806
+ if (!hast)
98807
+ return [child];
98761
98808
  const children = (hast.children ?? []).filter(isElementContentNode);
98762
98809
  // For inline components, preserve plain text instead of wrapping in <p>
98763
98810
  if (INLINE_COMPONENT_TAGS_LOWER.has(node.tagName.toLowerCase()) && isSingleParagraphTextNode(children)) {
@@ -98831,8 +98878,9 @@ const rehypeMdxishComponents = ({ components, processMarkdown }) => {
98831
98878
  // rehypeRaw strips children from <img> (void element), so we must
98832
98879
  // re-process the caption here, after rehypeRaw.
98833
98880
  if (node.tagName === 'img' && typeof node.properties?.caption === 'string' && !node.children?.length) {
98834
- const captionHast = processMarkdown(node.properties.caption);
98835
- node.children = (captionHast.children ?? []).filter(isElementContentNode);
98881
+ const caption = node.properties.caption;
98882
+ const captionHast = tryProcessMarkdown(processMarkdown, caption);
98883
+ node.children = captionHast ? (captionHast.children ?? []).filter(isElementContentNode) : [{ type: 'text', value: caption }];
98836
98884
  }
98837
98885
  // Skip runtime components and standard HTML tags
98838
98886
  if (RUNTIME_COMPONENT_TAGS.has(node.tagName))
@@ -106383,6 +106431,332 @@ const mdxishTags_tags = (doc) => {
106383
106431
  };
106384
106432
  /* harmony default export */ const mdxishTags = (mdxishTags_tags);
106385
106433
 
106434
+ ;// ./lib/mdast-util/html-block-component/index.ts
106435
+ const html_block_component_contextMap = new WeakMap();
106436
+ function findHtmlBlockComponentToken() {
106437
+ const events = this.tokenStack;
106438
+ for (let i = events.length - 1; i >= 0; i -= 1) {
106439
+ if (events[i][0].type === 'htmlBlockComponent')
106440
+ return events[i][0];
106441
+ }
106442
+ return undefined;
106443
+ }
106444
+ function enterHtmlBlockComponent(token) {
106445
+ html_block_component_contextMap.set(token, { chunks: [], lastEndLine: token.start.line });
106446
+ this.enter({ type: 'html', value: '' }, token);
106447
+ }
106448
+ function exitHtmlBlockComponentData(token) {
106449
+ const componentToken = findHtmlBlockComponentToken.call(this);
106450
+ if (!componentToken)
106451
+ return;
106452
+ const ctx = html_block_component_contextMap.get(componentToken);
106453
+ if (ctx) {
106454
+ const gap = token.start.line - ctx.lastEndLine;
106455
+ if (ctx.chunks.length > 0 && gap > 0) {
106456
+ ctx.chunks.push('\n'.repeat(gap));
106457
+ }
106458
+ ctx.chunks.push(this.sliceSerialize(token));
106459
+ ctx.lastEndLine = token.end.line;
106460
+ }
106461
+ }
106462
+ function exitHtmlBlockComponent(token) {
106463
+ const ctx = html_block_component_contextMap.get(token);
106464
+ const node = this.stack[this.stack.length - 1];
106465
+ if (ctx) {
106466
+ node.value = ctx.chunks.join('');
106467
+ html_block_component_contextMap.delete(token);
106468
+ }
106469
+ this.exit(token);
106470
+ }
106471
+ function htmlBlockComponentFromMarkdown() {
106472
+ return {
106473
+ enter: {
106474
+ htmlBlockComponent: enterHtmlBlockComponent,
106475
+ },
106476
+ exit: {
106477
+ htmlBlockComponentData: exitHtmlBlockComponentData,
106478
+ htmlBlockComponent: exitHtmlBlockComponent,
106479
+ },
106480
+ };
106481
+ }
106482
+
106483
+ ;// ./lib/micromark/html-block-component/syntax.ts
106484
+
106485
+
106486
+ const TAG_SUFFIX = [
106487
+ codes.uppercaseT,
106488
+ codes.uppercaseM,
106489
+ codes.uppercaseL,
106490
+ codes.uppercaseB,
106491
+ codes.lowercaseL,
106492
+ codes.lowercaseO,
106493
+ codes.lowercaseC,
106494
+ codes.lowercaseK,
106495
+ ];
106496
+ // ---------------------------------------------------------------------------
106497
+ // Shared tokenizer factory
106498
+ // ---------------------------------------------------------------------------
106499
+ /**
106500
+ * Creates a tokenize function for `<HTMLBlock>...</HTMLBlock>`.
106501
+ *
106502
+ * - **flow** (block-level): supports multiline content via line continuations,
106503
+ * consumes trailing whitespace after the closing tag.
106504
+ * - **text** (inline): single-line only, exits immediately after the closing tag.
106505
+ */
106506
+ function syntax_createTokenize(mode) {
106507
+ return function tokenize(effects, ok, nok) {
106508
+ let depth = 1;
106509
+ function matchChars(chars, onMatch, onFail) {
106510
+ if (chars.length === 0)
106511
+ return onMatch;
106512
+ const next = (code) => {
106513
+ if (code === chars[0]) {
106514
+ effects.consume(code);
106515
+ return matchChars(chars.slice(1), onMatch, onFail);
106516
+ }
106517
+ return onFail(code);
106518
+ };
106519
+ return next;
106520
+ }
106521
+ function matchTagName(onMatch, onFail) {
106522
+ const next = (code) => {
106523
+ if (code === codes.uppercaseH) {
106524
+ effects.consume(code);
106525
+ return matchChars(TAG_SUFFIX, onMatch, onFail);
106526
+ }
106527
+ return onFail(code);
106528
+ };
106529
+ return next;
106530
+ }
106531
+ return start;
106532
+ function start(code) {
106533
+ if (code !== codes.lessThan)
106534
+ return nok(code);
106535
+ effects.enter('htmlBlockComponent');
106536
+ effects.enter('htmlBlockComponentData');
106537
+ effects.consume(code);
106538
+ return matchTagName(afterTagName, nok);
106539
+ }
106540
+ function afterTagName(code) {
106541
+ if (code === codes.greaterThan) {
106542
+ effects.consume(code);
106543
+ return body;
106544
+ }
106545
+ if (code === codes.space || code === codes.horizontalTab) {
106546
+ effects.consume(code);
106547
+ return inAttributes;
106548
+ }
106549
+ if (mode === 'flow' && markdownLineEnding(code)) {
106550
+ effects.exit('htmlBlockComponentData');
106551
+ return attributeContinuationStart(code);
106552
+ }
106553
+ if (code === codes.slash) {
106554
+ effects.consume(code);
106555
+ return selfClose;
106556
+ }
106557
+ return nok(code);
106558
+ }
106559
+ function inAttributes(code) {
106560
+ if (code === codes.greaterThan) {
106561
+ effects.consume(code);
106562
+ return body;
106563
+ }
106564
+ if (code === null) {
106565
+ return nok(code);
106566
+ }
106567
+ if (markdownLineEnding(code)) {
106568
+ if (mode === 'text')
106569
+ return nok(code);
106570
+ effects.exit('htmlBlockComponentData');
106571
+ return attributeContinuationStart(code);
106572
+ }
106573
+ effects.consume(code);
106574
+ return inAttributes;
106575
+ }
106576
+ function attributeContinuationStart(code) {
106577
+ return effects.check(html_block_component_syntax_nonLazyContinuationStart, attributeContinuationNonLazy, continuationAfter)(code);
106578
+ }
106579
+ function attributeContinuationNonLazy(code) {
106580
+ effects.enter(types_types.lineEnding);
106581
+ effects.consume(code);
106582
+ effects.exit(types_types.lineEnding);
106583
+ return attributeContinuationBefore;
106584
+ }
106585
+ function attributeContinuationBefore(code) {
106586
+ if (code === null || markdownLineEnding(code)) {
106587
+ return attributeContinuationStart(code);
106588
+ }
106589
+ effects.enter('htmlBlockComponentData');
106590
+ return inAttributes(code);
106591
+ }
106592
+ function selfClose(code) {
106593
+ if (code === codes.greaterThan) {
106594
+ effects.consume(code);
106595
+ return mode === 'flow' ? afterClose : done(code);
106596
+ }
106597
+ return nok(code);
106598
+ }
106599
+ function body(code) {
106600
+ if (code === null)
106601
+ return nok(code);
106602
+ if (markdownLineEnding(code)) {
106603
+ if (mode === 'text') {
106604
+ // Text constructs operate on paragraph content which spans lines
106605
+ effects.consume(code);
106606
+ return body;
106607
+ }
106608
+ effects.exit('htmlBlockComponentData');
106609
+ return continuationStart(code);
106610
+ }
106611
+ if (code === codes.lessThan) {
106612
+ effects.consume(code);
106613
+ return closeSlash;
106614
+ }
106615
+ effects.consume(code);
106616
+ return body;
106617
+ }
106618
+ function closeSlash(code) {
106619
+ if (code === codes.slash) {
106620
+ effects.consume(code);
106621
+ return matchTagName(closeGt, body);
106622
+ }
106623
+ return matchTagName(openAfterTagName, body)(code);
106624
+ }
106625
+ function openAfterTagName(code) {
106626
+ if (code === codes.greaterThan || code === codes.space || code === codes.horizontalTab) {
106627
+ depth += 1;
106628
+ effects.consume(code);
106629
+ return body;
106630
+ }
106631
+ return body(code);
106632
+ }
106633
+ function closeGt(code) {
106634
+ if (code === codes.greaterThan) {
106635
+ depth -= 1;
106636
+ effects.consume(code);
106637
+ if (depth === 0) {
106638
+ return mode === 'flow' ? afterClose : done(code);
106639
+ }
106640
+ return body;
106641
+ }
106642
+ return body(code);
106643
+ }
106644
+ // -- flow-only states ---------------------------------------------------
106645
+ function afterClose(code) {
106646
+ if (code === null || markdownLineEnding(code)) {
106647
+ return done(code);
106648
+ }
106649
+ if (code === codes.space || code === codes.horizontalTab) {
106650
+ effects.consume(code);
106651
+ return afterClose;
106652
+ }
106653
+ // Reject so the block re-parses as a paragraph, deferring to the
106654
+ // text tokenizer which preserves trailing content in the same line.
106655
+ return nok(code);
106656
+ }
106657
+ // -- flow-only: line continuation ---------------------------------------
106658
+ function continuationStart(code) {
106659
+ return effects.check(html_block_component_syntax_nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);
106660
+ }
106661
+ function continuationStartNonLazy(code) {
106662
+ effects.enter(types_types.lineEnding);
106663
+ effects.consume(code);
106664
+ effects.exit(types_types.lineEnding);
106665
+ return continuationBefore;
106666
+ }
106667
+ function continuationBefore(code) {
106668
+ if (code === null || markdownLineEnding(code)) {
106669
+ return continuationStart(code);
106670
+ }
106671
+ effects.enter('htmlBlockComponentData');
106672
+ return body(code);
106673
+ }
106674
+ function continuationAfter(code) {
106675
+ if (code === null)
106676
+ return nok(code);
106677
+ effects.exit('htmlBlockComponent');
106678
+ return ok(code);
106679
+ }
106680
+ // -- shared exit --------------------------------------------------------
106681
+ function done(_code) {
106682
+ effects.exit('htmlBlockComponentData');
106683
+ effects.exit('htmlBlockComponent');
106684
+ return ok(_code);
106685
+ }
106686
+ };
106687
+ }
106688
+ // ---------------------------------------------------------------------------
106689
+ // Flow construct (block-level)
106690
+ // ---------------------------------------------------------------------------
106691
+ const html_block_component_syntax_nonLazyContinuationStart = {
106692
+ tokenize: html_block_component_syntax_tokenizeNonLazyContinuationStart,
106693
+ partial: true,
106694
+ };
106695
+ function resolveToHtmlBlockComponent(events) {
106696
+ let index = events.length;
106697
+ while (index > 0) {
106698
+ index -= 1;
106699
+ if (events[index][0] === 'enter' && events[index][1].type === 'htmlBlockComponent') {
106700
+ break;
106701
+ }
106702
+ }
106703
+ if (index > 1 && events[index - 2][1].type === types_types.linePrefix) {
106704
+ events[index][1].start = events[index - 2][1].start;
106705
+ events[index + 1][1].start = events[index - 2][1].start;
106706
+ events.splice(index - 2, 2);
106707
+ }
106708
+ return events;
106709
+ }
106710
+ const htmlBlockComponentFlowConstruct = {
106711
+ name: 'htmlBlockComponent',
106712
+ tokenize: syntax_createTokenize('flow'),
106713
+ resolveTo: resolveToHtmlBlockComponent,
106714
+ concrete: true,
106715
+ };
106716
+ function html_block_component_syntax_tokenizeNonLazyContinuationStart(effects, ok, nok) {
106717
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
106718
+ const self = this;
106719
+ return start;
106720
+ function start(code) {
106721
+ if (markdownLineEnding(code)) {
106722
+ effects.enter(types_types.lineEnding);
106723
+ effects.consume(code);
106724
+ effects.exit(types_types.lineEnding);
106725
+ return after;
106726
+ }
106727
+ return nok(code);
106728
+ }
106729
+ function after(code) {
106730
+ if (self.parser.lazy[self.now().line]) {
106731
+ return nok(code);
106732
+ }
106733
+ return ok(code);
106734
+ }
106735
+ }
106736
+ // ---------------------------------------------------------------------------
106737
+ // Text construct (inline)
106738
+ // ---------------------------------------------------------------------------
106739
+ const htmlBlockComponentTextConstruct = {
106740
+ name: 'htmlBlockComponent',
106741
+ tokenize: syntax_createTokenize('text'),
106742
+ };
106743
+ // ---------------------------------------------------------------------------
106744
+ // Extension
106745
+ // ---------------------------------------------------------------------------
106746
+ function htmlBlockComponent() {
106747
+ return {
106748
+ flow: {
106749
+ [codes.lessThan]: [htmlBlockComponentFlowConstruct],
106750
+ },
106751
+ text: {
106752
+ [codes.lessThan]: [htmlBlockComponentTextConstruct],
106753
+ },
106754
+ };
106755
+ }
106756
+
106757
+ ;// ./lib/micromark/html-block-component/index.ts
106758
+
106759
+
106386
106760
  ;// ./lib/utils/extractMagicBlocks.ts
106387
106761
  /**
106388
106762
  * The content matching in this regex captures everything between `[block:TYPE]`
@@ -106449,19 +106823,22 @@ function restoreMagicBlocks(replaced, blocks) {
106449
106823
 
106450
106824
 
106451
106825
 
106826
+
106827
+
106452
106828
  /**
106453
106829
  * Removes Markdown and MDX comments.
106454
106830
  */
106455
106831
  async function stripComments(doc, { mdx, mdxish } = {}) {
106456
106832
  const { replaced, blocks } = extractMagicBlocks(doc);
106457
106833
  const processor = unified();
106458
- // we still require these two extensions because:
106834
+ // we still require these extensions because:
106459
106835
  // 1. we can rely on remarkMdx to parse MDXish
106460
106836
  // 2. we need to parse JSX comments into mdxTextExpression nodes so that the transformers can pick them up
106837
+ // 3. we need to claim <HTMLBlock> before htmlFlow intercepts its inner HTML tags
106461
106838
  if (mdxish) {
106462
106839
  processor
106463
- .data('micromarkExtensions', [jsxTable(), mdxExpression({ allowEmpty: true })])
106464
- .data('fromMarkdownExtensions', [jsxTableFromMarkdown(), mdxExpressionFromMarkdown()])
106840
+ .data('micromarkExtensions', [htmlBlockComponent(), jsxTable(), mdxExpression({ allowEmpty: true })])
106841
+ .data('fromMarkdownExtensions', [htmlBlockComponentFromMarkdown(), jsxTableFromMarkdown(), mdxExpressionFromMarkdown()])
106465
106842
  .data('toMarkdownExtensions', [mdxExpressionToMarkdown()]);
106466
106843
  }
106467
106844
  processor