@stream-mdx/worker 0.3.0 → 0.4.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.
@@ -17946,7 +17946,7 @@ function getGroupContents(expression, contentsStartPos) {
17946
17946
  return expression.slice(contentsStartPos, contentsEndPos);
17947
17947
  }
17948
17948
 
17949
- // node_modules/regex/src/subclass.js
17949
+ // ../../node_modules/regex/src/subclass.js
17950
17950
  var emulationGroupMarker = "$E$";
17951
17951
  var RegExpSubclass = class _RegExpSubclass extends RegExp {
17952
17952
  /**
@@ -18059,13 +18059,13 @@ function unmarkEmulationGroups(expression) {
18059
18059
  };
18060
18060
  }
18061
18061
 
18062
- // node_modules/regex/src/utils-internals.js
18062
+ // ../../node_modules/regex/src/utils-internals.js
18063
18063
  var noncapturingDelim = String.raw`\(\?(?:[:=!>A-Za-z\-]|<[=!]|\(DEFINE\))`;
18064
18064
  function spliceStr(str, pos, oldValue, newValue) {
18065
18065
  return str.slice(0, pos) + newValue + str.slice(pos + oldValue.length);
18066
18066
  }
18067
18067
 
18068
- // node_modules/regex/src/atomic.js
18068
+ // ../../node_modules/regex/src/atomic.js
18069
18069
  var atomicPluginToken = new RegExp(String.raw`(?<noncapturingStart>${noncapturingDelim})|(?<capturingStart>\((?:\?<[^>]+>)?)|\\?.`, "gsu");
18070
18070
  function atomic(expression, data2) {
18071
18071
  if (!/\(\?>/.test(expression)) {
@@ -18206,7 +18206,7 @@ function possessive(expression) {
18206
18206
  return expression;
18207
18207
  }
18208
18208
 
18209
- // node_modules/regex-recursion/src/index.js
18209
+ // ../../node_modules/regex-recursion/src/index.js
18210
18210
  var r2 = String.raw;
18211
18211
  var gRToken = r2`\\g<(?<gRNameOrNum>[^>&]+)&R=(?<gRDepth>[^>]+)>`;
18212
18212
  var recursiveToken = r2`\(\?R=(?<rDepth>[^\)]+)\)|${gRToken}`;
@@ -18356,7 +18356,7 @@ function emulationGroupMarkerLength(expression, index2) {
18356
18356
  return match ? match[0].length : 0;
18357
18357
  }
18358
18358
 
18359
- // node_modules/oniguruma-to-es/dist/esm/index.js
18359
+ // ../../node_modules/oniguruma-to-es/dist/esm/index.js
18360
18360
  var cp = String.fromCodePoint;
18361
18361
  var r3 = String.raw;
18362
18362
  var envSupportsFlagGroups = (() => {
@@ -21379,7 +21379,7 @@ function toRegExp(pattern, options) {
21379
21379
  return new RegExp(result.pattern, result.flags);
21380
21380
  }
21381
21381
 
21382
- // node_modules/@shikijs/engine-javascript/dist/shared/engine-javascript.hzpS1_41.mjs
21382
+ // ../../node_modules/@shikijs/engine-javascript/dist/shared/engine-javascript.hzpS1_41.mjs
21383
21383
  var MAX = 4294967295;
21384
21384
  var JavaScriptScanner = class {
21385
21385
  constructor(patterns, options = {}) {
@@ -21472,7 +21472,7 @@ var JavaScriptScanner = class {
21472
21472
  }
21473
21473
  };
21474
21474
 
21475
- // node_modules/@shikijs/engine-javascript/dist/engine-compile.mjs
21475
+ // ../../node_modules/@shikijs/engine-javascript/dist/engine-compile.mjs
21476
21476
  function defaultJavaScriptRegexConstructor(pattern, options) {
21477
21477
  return toRegExp(
21478
21478
  pattern,
@@ -82144,6 +82144,9 @@ var lastStructuralDiffSummary = null;
82144
82144
  var maxEmittedBlockCount = 0;
82145
82145
  var maxDeferredQueueSize = 0;
82146
82146
  var maxStructuralBlockCount = 0;
82147
+ var tocHeadings = [];
82148
+ var tocSignature = "";
82149
+ var headingIdCounts = /* @__PURE__ */ new Map();
82147
82150
  var lastHighCountNoStructural = null;
82148
82151
  var MAX_DEFERRED_PATCHES = 400;
82149
82152
  var deferredPatchQueue = [];
@@ -82579,12 +82582,57 @@ function parseInlineStreaming(content4) {
82579
82582
  status
82580
82583
  };
82581
82584
  }
82585
+ function slugifyHeading(text12) {
82586
+ const normalized = text12.trim().toLowerCase().replace(/[\u0000-\u001f]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").replace(/-{2,}/g, "-");
82587
+ return normalized;
82588
+ }
82589
+ function buildTocHeadings(blocksInput) {
82590
+ const headings = [];
82591
+ for (const block of blocksInput) {
82592
+ if (block.type !== "heading") continue;
82593
+ const meta2 = block.payload.meta ?? {};
82594
+ const rawHeading = typeof block.payload.raw === "string" ? block.payload.raw : "";
82595
+ const headingText = typeof meta2.headingText === "string" && meta2.headingText.trim().length > 0 ? meta2.headingText : removeHeadingMarkers(rawHeading).trim();
82596
+ const levelFromMeta = typeof meta2.headingLevel === "number" ? meta2.headingLevel : 1;
82597
+ const level = Math.min(Math.max(levelFromMeta, 1), 6);
82598
+ const id = typeof meta2.headingId === "string" && meta2.headingId.trim().length > 0 ? meta2.headingId : slugifyHeading(headingText) || "heading";
82599
+ headings.push({
82600
+ id,
82601
+ text: headingText,
82602
+ level,
82603
+ blockId: block.id
82604
+ });
82605
+ }
82606
+ return headings;
82607
+ }
82608
+ function tocSignatureFor(headings) {
82609
+ if (headings.length === 0) return "";
82610
+ return headings.map((heading4) => `${heading4.id}:${heading4.level}:${heading4.text}`).join("|");
82611
+ }
82612
+ function maybeBuildTocPatch(blocksInput) {
82613
+ const nextHeadings = buildTocHeadings(blocksInput);
82614
+ const nextSignature = tocSignatureFor(nextHeadings);
82615
+ tocHeadings = nextHeadings;
82616
+ if (nextSignature === tocSignature) {
82617
+ return null;
82618
+ }
82619
+ tocSignature = nextSignature;
82620
+ return {
82621
+ op: "setProps",
82622
+ at: { blockId: PATCH_ROOT_ID },
82623
+ props: {
82624
+ tocHeadings: nextHeadings
82625
+ }
82626
+ };
82627
+ }
82582
82628
  async function initialize(initialContent = "", prewarmLangs = [], docPlugins, mdxOptions) {
82583
82629
  performanceTimer = new PerformanceTimer();
82584
82630
  blocks = [];
82585
82631
  lastTree = null;
82586
82632
  currentContent = "";
82587
82633
  deferredPatchQueue = [];
82634
+ tocHeadings = [];
82635
+ tocSignature = "";
82588
82636
  resetIncrementalHighlightState();
82589
82637
  lazyTokenizationStates.clear();
82590
82638
  lazyTokenizationQueue.clear();
@@ -82753,6 +82801,7 @@ async function appendAndReparse(appendedText, metrics) {
82753
82801
  }
82754
82802
  async function extractBlocks(tree, content4, options = {}) {
82755
82803
  try {
82804
+ headingIdCounts = /* @__PURE__ */ new Map();
82756
82805
  const blocks2 = [];
82757
82806
  const cursor = tree.cursor();
82758
82807
  if (cursor.firstChild()) {
@@ -82845,10 +82894,15 @@ async function enrichBlock(block) {
82845
82894
  const rawHeading = typeof block.payload.raw === "string" ? block.payload.raw : "";
82846
82895
  const normalizedHeading = removeHeadingMarkers(rawHeading);
82847
82896
  const headingLevel = Math.min(Math.max(rawHeading.match(/^#{1,6}/)?.[0].length ?? 1, 1), 6);
82897
+ const baseSlug = slugifyHeading(normalizedHeading) || "heading";
82898
+ const nextCount = (headingIdCounts.get(baseSlug) ?? 0) + 1;
82899
+ headingIdCounts.set(baseSlug, nextCount);
82900
+ const headingId = nextCount > 1 ? `${baseSlug}-${nextCount}` : baseSlug;
82848
82901
  block.payload.meta = {
82849
82902
  ...block.payload.meta ?? {},
82850
82903
  headingLevel,
82851
- headingText: normalizedHeading
82904
+ headingText: normalizedHeading,
82905
+ headingId
82852
82906
  };
82853
82907
  if (block.isFinalized) {
82854
82908
  block.payload.raw = normalizedHeading;
@@ -83913,6 +83967,7 @@ async function enrichCodeBlock(block) {
83913
83967
  resetIncrementalHighlightState(block.id);
83914
83968
  block.payload.highlightedHtml = void 0;
83915
83969
  const nextMeta2 = { ...baseMeta, ...meta2, lang: resolvedLanguage };
83970
+ nextMeta2.code = codeBody;
83916
83971
  if ("highlightedLines" in nextMeta2) {
83917
83972
  delete nextMeta2.highlightedLines;
83918
83973
  }
@@ -84014,6 +84069,7 @@ async function enrichCodeBlock(block) {
84014
84069
  block.payload.highlightedHtml = void 0;
84015
84070
  const effectiveLang2 = wantsHtml ? resolvedLanguage : resolvedTokenLanguage;
84016
84071
  const nextMeta2 = { ...baseMeta, ...meta2, lang: effectiveLang2 };
84072
+ nextMeta2.code = codeBody;
84017
84073
  if (wantsHtml) {
84018
84074
  nextMeta2.highlightedLines = state.highlightedLines;
84019
84075
  } else if ("highlightedLines" in nextMeta2) {
@@ -84065,6 +84121,7 @@ async function enrichCodeBlock(block) {
84065
84121
  const state = getOrInitLazyState(block.id, signature, codeLines.length, resolvedLanguage, resolvedTokenLanguage, diffEnabled);
84066
84122
  const effectiveLang2 = wantsHtml ? resolvedLanguage : resolvedTokenLanguage;
84067
84123
  const nextMeta2 = { ...baseMeta, ...meta2, lang: effectiveLang2 };
84124
+ nextMeta2.code = codeBody;
84068
84125
  nextMeta2.lazyTokenization = true;
84069
84126
  nextMeta2.lazyTokenizedUntil = state.processedLines;
84070
84127
  if (wantsHtml) {
@@ -84178,6 +84235,7 @@ async function enrichCodeBlock(block) {
84178
84235
  }
84179
84236
  const effectiveLang = wantsHtml ? resolvedLanguage : resolvedTokenLanguage;
84180
84237
  const nextMeta = { ...baseMeta, ...meta2, lang: effectiveLang };
84238
+ nextMeta.code = codeBody;
84181
84239
  if ("highlightedLines" in nextMeta) {
84182
84240
  delete nextMeta.highlightedLines;
84183
84241
  }
@@ -84546,6 +84604,7 @@ async function blockToNodeSnapshot(block) {
84546
84604
  }
84547
84605
  async function emitDocumentPatch(currentBlocks) {
84548
84606
  const patches = [];
84607
+ const tocPatch = maybeBuildTocPatch(currentBlocks);
84549
84608
  for (let index2 = 0; index2 < currentBlocks.length; index2++) {
84550
84609
  const block = currentBlocks[index2];
84551
84610
  if (!block) continue;
@@ -84556,6 +84615,9 @@ async function emitDocumentPatch(currentBlocks) {
84556
84615
  node: await blockToNodeSnapshot(block)
84557
84616
  });
84558
84617
  }
84618
+ if (tocPatch) {
84619
+ patches.push(tocPatch);
84620
+ }
84559
84621
  if (patches.length > 0) {
84560
84622
  postMessage({
84561
84623
  type: "PATCH",
@@ -84566,6 +84628,7 @@ async function emitDocumentPatch(currentBlocks) {
84566
84628
  }
84567
84629
  async function emitBlockDiffPatches(previousBlocks, nextBlocks, changedRanges, metrics) {
84568
84630
  const patches = [];
84631
+ const tocPatch = maybeBuildTocPatch(nextBlocks);
84569
84632
  if (previousBlocks === nextBlocks) return;
84570
84633
  let prefix = 0;
84571
84634
  const maxPrefix = Math.min(previousBlocks.length, nextBlocks.length);
@@ -84613,6 +84676,9 @@ async function emitBlockDiffPatches(previousBlocks, nextBlocks, changedRanges, m
84613
84676
  const { patches: contentPatches, changedBlockCount } = await diffBlockContent(previousBlocks, nextBlocks, changedRanges, metrics);
84614
84677
  metrics?.markDiffEnd();
84615
84678
  const combined = patches.concat(contentPatches);
84679
+ if (tocPatch) {
84680
+ combined.push(tocPatch);
84681
+ }
84616
84682
  let paragraphLimit = null;
84617
84683
  if (workerCredits < 0.9) {
84618
84684
  const dynamicBase = workerCredits < 0.5 ? 48 : 96;
@@ -85212,6 +85278,9 @@ async function finalizeAllBlocks() {
85212
85278
  }
85213
85279
  workerCredits = previousCredits;
85214
85280
  }
85281
+ postMessage({
85282
+ type: "FINALIZED"
85283
+ });
85215
85284
  if (getActiveMetricsCollector() === metricsCollector) {
85216
85285
  setActiveMetricsCollector(null);
85217
85286
  }
@@ -85357,6 +85426,14 @@ async function processWorkerMessage(msg) {
85357
85426
  });
85358
85427
  return;
85359
85428
  }
85429
+ case "DUMP_BLOCKS": {
85430
+ postMessage({
85431
+ type: "DUMP_BLOCKS",
85432
+ blocks,
85433
+ tocHeadings
85434
+ });
85435
+ return;
85436
+ }
85360
85437
  case "TOKENIZE_RANGE": {
85361
85438
  const priority = msg.priority === "prefetch" ? "prefetch" : "visible";
85362
85439
  enqueueLazyTokenization({