@mdzip/editor 1.3.21 → 1.4.4

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.
Files changed (74) hide show
  1. package/README.md +62 -0
  2. package/dist/archive-utils.d.ts.map +1 -1
  3. package/dist/archive-utils.js +16 -2
  4. package/dist/archive-utils.js.map +1 -1
  5. package/dist/asset-cache.d.ts +14 -0
  6. package/dist/asset-cache.d.ts.map +1 -1
  7. package/dist/asset-cache.js +57 -0
  8. package/dist/asset-cache.js.map +1 -1
  9. package/dist/front-matter-extension.d.ts +45 -0
  10. package/dist/front-matter-extension.d.ts.map +1 -0
  11. package/dist/front-matter-extension.js +114 -0
  12. package/dist/front-matter-extension.js.map +1 -0
  13. package/dist/front-matter.d.ts +18 -0
  14. package/dist/front-matter.d.ts.map +1 -0
  15. package/dist/front-matter.js +48 -0
  16. package/dist/front-matter.js.map +1 -0
  17. package/dist/highlight-core.d.ts +3 -0
  18. package/dist/highlight-core.d.ts.map +1 -0
  19. package/dist/highlight-core.js +53 -0
  20. package/dist/highlight-core.js.map +1 -0
  21. package/dist/image-edit.d.ts +26 -0
  22. package/dist/image-edit.d.ts.map +1 -0
  23. package/dist/image-edit.js +195 -0
  24. package/dist/image-edit.js.map +1 -0
  25. package/dist/index.d.ts +4 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +4 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/library-info.d.ts +2 -2
  30. package/dist/library-info.js +2 -2
  31. package/dist/library-info.js.map +1 -1
  32. package/dist/mdz-archive-worker-protocol.d.ts +36 -0
  33. package/dist/mdz-archive-worker-protocol.d.ts.map +1 -0
  34. package/dist/mdz-archive-worker-protocol.js +2 -0
  35. package/dist/mdz-archive-worker-protocol.js.map +1 -0
  36. package/dist/mdz-archive.worker-client.d.ts +30 -0
  37. package/dist/mdz-archive.worker-client.d.ts.map +1 -0
  38. package/dist/mdz-archive.worker-client.js +97 -0
  39. package/dist/mdz-archive.worker-client.js.map +1 -0
  40. package/dist/mdz-archive.worker.d.ts +2 -0
  41. package/dist/mdz-archive.worker.d.ts.map +1 -0
  42. package/dist/mdz-archive.worker.js +8870 -0
  43. package/dist/mdz-archive.worker.js.map +1 -0
  44. package/dist/mermaid.d.ts.map +1 -1
  45. package/dist/mermaid.js +60 -41
  46. package/dist/mermaid.js.map +1 -1
  47. package/dist/metadata.d.ts +1 -1
  48. package/dist/metadata.d.ts.map +1 -1
  49. package/dist/metadata.js +12 -2
  50. package/dist/metadata.js.map +1 -1
  51. package/dist/preview.d.ts +1 -0
  52. package/dist/preview.d.ts.map +1 -1
  53. package/dist/preview.js +1 -0
  54. package/dist/preview.js.map +1 -1
  55. package/dist/rendering.d.ts +114 -0
  56. package/dist/rendering.d.ts.map +1 -1
  57. package/dist/rendering.js +153 -1
  58. package/dist/rendering.js.map +1 -1
  59. package/dist/stats.d.ts +23 -0
  60. package/dist/stats.d.ts.map +1 -0
  61. package/dist/stats.js +31 -0
  62. package/dist/stats.js.map +1 -0
  63. package/dist/view-css.d.ts.map +1 -1
  64. package/dist/view-css.js +112 -0
  65. package/dist/view-css.js.map +1 -1
  66. package/dist/view.d.ts +421 -1
  67. package/dist/view.d.ts.map +1 -1
  68. package/dist/view.js +2219 -410
  69. package/dist/view.js.map +1 -1
  70. package/dist/workspace.d.ts +14 -0
  71. package/dist/workspace.d.ts.map +1 -1
  72. package/dist/workspace.js +53 -41
  73. package/dist/workspace.js.map +1 -1
  74. package/package.json +11 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdz-archive.worker.js","sourceRoot":"","sources":["../src/mdz-archive.worker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAGnE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5F;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CAC9C;AAgED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,mBAAwB,GAAG,4BAA4B,CA6DrG"}
1
+ {"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA8B,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAG/F,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5F;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CAC9C;AAgED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,mBAAwB,GAAG,4BAA4B,CAoFrG"}
package/dist/mermaid.js CHANGED
@@ -74,10 +74,68 @@ async function withBodyCleanup(doc, run) {
74
74
  export function mdzipMermaidExtension(options = {}) {
75
75
  const load = options.loadMermaid ?? loadDefaultMermaid;
76
76
  let counter = 0;
77
+ // Split so a chunk with no mermaid blocks returns synchronously instead of
78
+ // through a Promise. Every markdown render extension's transformHtml runs
79
+ // for every chunk regardless of content — declaring this whole thing async
80
+ // (as an earlier version did) meant calling it always returned a Promise,
81
+ // even on this trivial no-op path, forcing the *entire* chunk-render
82
+ // pipeline (marked's `chainRenderStage`) onto a microtask chain for every
83
+ // chunk in every document once mermaid is registered, mermaid or not. That
84
+ // extra always-async hop was implicated in a real, visible per-keystroke
85
+ // flash in mdzip-studio: it delayed a reconciled chunk's replacement DOM
86
+ // landing just long enough, on top of everything else already sharing the
87
+ // event loop, to widen the window where the old chunk's DOM was already
88
+ // torn down but the new one hadn't landed yet.
89
+ async function renderMermaidBlocks(template, blocks, context) {
90
+ const doc = requireDocument();
91
+ const mermaid = await load();
92
+ if (context.signal.aborted) {
93
+ return template.innerHTML;
94
+ }
95
+ mermaid.initialize({
96
+ startOnLoad: false,
97
+ securityLevel: 'strict',
98
+ // Render labels as SVG <text> rather than HTML inside <foreignObject>.
99
+ // The bundled sanitizer keeps the SVG but strips foreignObject HTML, so
100
+ // html labels would otherwise vanish — this keeps the emitted SVG
101
+ // self-consistent with the policy without re-allowing HTML in labels.
102
+ htmlLabels: false,
103
+ flowchart: { htmlLabels: false },
104
+ theme: resolveTheme(options.theme ?? 'auto', context.colorScheme),
105
+ // Stops mermaid from injecting its own error diagram into the DOM on
106
+ // failure; this extension renders its own error block instead.
107
+ suppressErrorRendering: true
108
+ });
109
+ for (const code of blocks) {
110
+ const pre = code.parentElement;
111
+ if (!pre) {
112
+ continue;
113
+ }
114
+ const source = code.textContent ?? '';
115
+ const container = doc.createElement('div');
116
+ try {
117
+ const { svg } = await withBodyCleanup(doc, () => mermaid.render(`mdzip-mermaid-${(counter += 1)}`, source));
118
+ container.className = 'mdzip-mermaid';
119
+ container.innerHTML = sanitizeMdzipHtml(svg, [MERMAID_SANITIZE]);
120
+ }
121
+ catch (error) {
122
+ container.className = 'mdzip-mermaid-error';
123
+ container.textContent = mermaidErrorMessage(error);
124
+ }
125
+ pre.replaceWith(container);
126
+ if (context.signal.aborted) {
127
+ return template.innerHTML;
128
+ }
129
+ }
130
+ return template.innerHTML;
131
+ }
77
132
  return {
78
133
  name: 'mermaid',
79
134
  sanitize: MERMAID_SANITIZE,
80
- async transformHtml(html, context) {
135
+ shouldIsolateChunk(token) {
136
+ return token.type === 'code' && token.lang?.trim().toLowerCase() === 'mermaid';
137
+ },
138
+ transformHtml(html, context) {
81
139
  const doc = requireDocument();
82
140
  const template = doc.createElement('template');
83
141
  template.innerHTML = html;
@@ -85,46 +143,7 @@ export function mdzipMermaidExtension(options = {}) {
85
143
  if (blocks.length === 0) {
86
144
  return html;
87
145
  }
88
- const mermaid = await load();
89
- if (context.signal.aborted) {
90
- return html;
91
- }
92
- mermaid.initialize({
93
- startOnLoad: false,
94
- securityLevel: 'strict',
95
- // Render labels as SVG <text> rather than HTML inside <foreignObject>.
96
- // The bundled sanitizer keeps the SVG but strips foreignObject HTML, so
97
- // html labels would otherwise vanish — this keeps the emitted SVG
98
- // self-consistent with the policy without re-allowing HTML in labels.
99
- htmlLabels: false,
100
- flowchart: { htmlLabels: false },
101
- theme: resolveTheme(options.theme ?? 'auto', context.colorScheme),
102
- // Stops mermaid from injecting its own error diagram into the DOM on
103
- // failure; this extension renders its own error block instead.
104
- suppressErrorRendering: true
105
- });
106
- for (const code of blocks) {
107
- const pre = code.parentElement;
108
- if (!pre) {
109
- continue;
110
- }
111
- const source = code.textContent ?? '';
112
- const container = doc.createElement('div');
113
- try {
114
- const { svg } = await withBodyCleanup(doc, () => mermaid.render(`mdzip-mermaid-${(counter += 1)}`, source));
115
- container.className = 'mdzip-mermaid';
116
- container.innerHTML = sanitizeMdzipHtml(svg, [MERMAID_SANITIZE]);
117
- }
118
- catch (error) {
119
- container.className = 'mdzip-mermaid-error';
120
- container.textContent = mermaidErrorMessage(error);
121
- }
122
- pre.replaceWith(container);
123
- if (context.signal.aborted) {
124
- return html;
125
- }
126
- }
127
- return template.innerHTML;
146
+ return renderMermaidBlocks(template, blocks, context);
128
147
  }
129
148
  };
130
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA4BnD,IAAI,qBAAqB,GAAoC,IAAI,CAAC;AAElE,SAAS,kBAAkB;IACzB,6EAA6E;IAC7E,oEAAoE;IACpE,qBAAqB,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAC9C,CAAC,MAAM,EAAE,EAAE,CAAC,CAAE,MAAwC,CAAC,OAAO,IAAI,MAAM,CAAoB,CAC7F,CAAC;IACF,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,YAAY,CAAC,KAAwB,EAAE,WAA6B;IAC3E,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,GAAG,GAAI,UAAsC,CAAC,QAAQ,CAAC;IAC7D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,oEAAoE;AACpE,MAAM,gBAAgB,GAAG;IACvB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,CAAC,OAAO,CAAC;IACvB,YAAY,EAAE,CAAC,OAAO,CAAC;CACf,CAAC;AAEX,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,OAAO,0BAA0B,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,yEAAyE;AACzE,qEAAqE;AACrE,4EAA4E;AAC5E,uEAAuE;AACvE,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,iBAAiB;AACjB,KAAK,UAAU,eAAe,CAAI,GAAa,EAAE,GAAqB;IACpE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAA+B,EAAE;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,CAAC;IACvD,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,2EAA2E;IAC3E,0EAA0E;IAC1E,2EAA2E;IAC3E,0EAA0E;IAC1E,qEAAqE;IACrE,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,wEAAwE;IACxE,+CAA+C;IAC/C,KAAK,UAAU,mBAAmB,CAChC,QAA6B,EAC7B,MAAqB,EACrB,OAAmC;QAEnC,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC,SAAS,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,UAAU,CAAC;YACjB,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,QAAQ;YACvB,uEAAuE;YACvE,wEAAwE;YACxE,kEAAkE;YAClE,sEAAsE;YACtE,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;YAChC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC;YACjE,qEAAqE;YACrE,+DAA+D;YAC/D,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;YAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC5G,SAAS,CAAC,SAAS,GAAG,eAAe,CAAC;gBACtC,SAAS,CAAC,SAAS,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACnE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,CAAC,SAAS,GAAG,qBAAqB,CAAC;gBAC5C,SAAS,CAAC,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACrD,CAAC;YACD,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC3B,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC3B,OAAO,QAAQ,CAAC,SAAS,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,gBAAgB;QAC1B,kBAAkB,CAAC,KAAY;YAC7B,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC;QACjF,CAAC;QACD,aAAa,CAAC,IAAI,EAAE,OAAO;YACzB,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC/C,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAc,6BAA6B,CAAC,CAC9E,CAAC;YACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -2,7 +2,7 @@
2
2
  export declare function firstMarkdownHeading(markdown: string): string | undefined;
3
3
  /** Derive the file base name, without extension, from a path string. */
4
4
  export declare function fileBaseNameFromPath(path: string): string;
5
- /** Resolve a stable title fallback from markdown heading or filename. */
5
+ /** Resolve a stable title fallback from front matter `title:`, markdown heading, or filename. */
6
6
  export declare function suggestedTitleFromMarkdown(markdown: string, fileBaseName: string): string;
7
7
  /** Resolve display title from manifest title with filename fallback. */
8
8
  export declare function displayTitleFromManifest(manifestTitle: string | undefined, fileBaseName: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,yEAAyE;AACzE,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,YAAY,EAAE,MAAM,GACnB,MAAM,CAGR"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE;AAYD,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,iGAAiG;AACjG,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,YAAY,EAAE,MAAM,GACnB,MAAM,CAGR"}
package/dist/metadata.js CHANGED
@@ -1,17 +1,27 @@
1
+ import { parseFrontMatter } from './front-matter.js';
1
2
  /** Extract the first ATX heading, for example `# Title`, from markdown text. */
2
3
  export function firstMarkdownHeading(markdown) {
3
4
  const match = markdown.match(/^\s{0,3}#{1,6}\s+(.+?)\s*#*\s*$/m);
4
5
  return match?.[1]?.trim();
5
6
  }
7
+ /** Extract a non-empty string `title:` from a leading front matter block, if any. */
8
+ function frontMatterTitle(markdown) {
9
+ const title = parseFrontMatter(markdown)?.data.title;
10
+ if (typeof title !== 'string') {
11
+ return undefined;
12
+ }
13
+ const trimmed = title.trim();
14
+ return trimmed || undefined;
15
+ }
6
16
  /** Derive the file base name, without extension, from a path string. */
7
17
  export function fileBaseNameFromPath(path) {
8
18
  const slashIndex = path.lastIndexOf('/');
9
19
  const fileName = slashIndex >= 0 ? path.slice(slashIndex + 1) : path;
10
20
  return fileName.replace(/\.[^.]+$/, '') || 'document';
11
21
  }
12
- /** Resolve a stable title fallback from markdown heading or filename. */
22
+ /** Resolve a stable title fallback from front matter `title:`, markdown heading, or filename. */
13
23
  export function suggestedTitleFromMarkdown(markdown, fileBaseName) {
14
- return firstMarkdownHeading(markdown) || fileBaseName;
24
+ return frontMatterTitle(markdown) || firstMarkdownHeading(markdown) || fileBaseName;
15
25
  }
16
26
  /** Resolve display title from manifest title with filename fallback. */
17
27
  export function displayTitleFromManifest(manifestTitle, fileBaseName) {
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC;AACxD,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,0BAA0B,CAAC,QAAgB,EAAE,YAAoB;IAC/E,OAAO,oBAAoB,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;AACxD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,wBAAwB,CACtC,aAAiC,EACjC,YAAoB;IAEpB,MAAM,OAAO,GAAG,aAAa,EAAE,IAAI,EAAE,CAAC;IACtC,OAAO,OAAO,IAAI,YAAY,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,qFAAqF;AACrF,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC;AACxD,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,0BAA0B,CAAC,QAAgB,EAAE,YAAoB;IAC/E,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;AACtF,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,wBAAwB,CACtC,aAAiC,EACjC,YAAoB;IAEpB,MAAM,OAAO,GAAG,aAAa,EAAE,IAAI,EAAE,CAAC;IACtC,OAAO,OAAO,IAAI,YAAY,CAAC;AACjC,CAAC"}
package/dist/preview.d.ts CHANGED
@@ -2,6 +2,7 @@ export type { MdzWorkspace, MdzWorkspaceAsset } from '@mdzip/core-js';
2
2
  export * from './archive-utils.js';
3
3
  export * from './browser.js';
4
4
  export * from './diff.js';
5
+ export * from './front-matter.js';
5
6
  export * from './metadata.js';
6
7
  export * from './rendering.js';
7
8
  export * from './theme.js';
@@ -1 +1 @@
1
- {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
package/dist/preview.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './archive-utils.js';
2
2
  export * from './browser.js';
3
3
  export * from './diff.js';
4
+ export * from './front-matter.js';
4
5
  export * from './metadata.js';
5
6
  export * from './rendering.js';
6
7
  export * from './theme.js';
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { type Token, type TokensList } from 'marked';
2
+ export type { Token, TokensList };
1
3
  import type { MdzManifest } from '@mdzip/core-js';
2
4
  import type { MdzipPathType, MdzipSourceFormat, MdzipWorkspaceMode, MdzipWorkspaceSnapshot } from './workspace.js';
3
5
  /**
@@ -108,6 +110,19 @@ export interface MdzipMarkdownRenderExtension {
108
110
  transformMarkdown?(markdown: string, context: MdzipMarkdownRenderContext): string | Promise<string>;
109
111
  transformHtml?(html: string, context: MdzipMarkdownRenderContext): string | Promise<string>;
110
112
  mount?(container: HTMLElement, context: MdzipMarkdownRenderContext): void | MdzipRenderHandle | Promise<void | MdzipRenderHandle>;
113
+ /**
114
+ * Marks a top-level block token as expensive enough to isolate into its own
115
+ * chunk for {@link groupTokensIntoChunks}, regardless of the char/token
116
+ * budget — e.g. a mermaid extension claiming its own ` ```mermaid ` fence.
117
+ * Without this, a token this extension will re-render on every mount
118
+ * (diagram layout, not just syntax highlighting) shares a chunk with
119
+ * whatever nearby text the budget happened to group it with; editing any
120
+ * of that unrelated text still invalidates the whole chunk's source key,
121
+ * forcing an expensive re-render the edit had nothing to do with — most
122
+ * visible on a short document that fits within one or two chunks anyway,
123
+ * where *every* edit ends up re-rendering the diagram.
124
+ */
125
+ shouldIsolateChunk?(token: Token): boolean;
111
126
  }
112
127
  /**
113
128
  * Context handed to entry renderers for the currently selected archive entry.
@@ -170,6 +185,8 @@ export declare class MdzipRenderingService {
170
185
  private readonly renderer;
171
186
  private readonly extensions;
172
187
  constructor(renderer?: MdzipMarkdownRenderer, extensions?: readonly MdzipMarkdownRenderExtension[]);
188
+ /** Whether {@link tokenizeMarkdown}/{@link renderChunk} are usable — only with the default marked-based renderer. */
189
+ get supportsChunking(): boolean;
173
190
  /**
174
191
  * Legacy synchronous render. Behavior is unchanged: the configured
175
192
  * renderer's output is returned as-is (the default renderer sanitizes
@@ -189,5 +206,102 @@ export declare class MdzipRenderingService {
189
206
  * extension is registered.
190
207
  */
191
208
  renderMarkdown(markdown: string, context: MdzipMarkdownRenderContext): string | Promise<string>;
209
+ /**
210
+ * Lexes markdown into top-level block tokens without rendering or
211
+ * sanitizing anything, for callers that want to render/mount the result
212
+ * incrementally (see {@link renderChunk}) instead of all at once. Runs
213
+ * `transformMarkdown` extensions first, same as {@link renderMarkdown} —
214
+ * they still see the whole markdown string once; chunking is a
215
+ * post-transform concern.
216
+ *
217
+ * Only supported with {@link defaultSafeMarkdownRenderer}: a host-supplied
218
+ * custom renderer takes a markdown string and returns opaque HTML with no
219
+ * token structure to chunk by.
220
+ */
221
+ tokenizeMarkdown(markdown: string, context: MdzipMarkdownRenderContext): TokensList | Promise<TokensList>;
222
+ /**
223
+ * Renders a subset of tokens from {@link tokenizeMarkdown} through
224
+ * `transformHtml*` and sanitize — the back half of the pipeline documented
225
+ * on {@link MdzipMarkdownRenderExtension}, starting from tokens instead of
226
+ * a markdown string. Always sanitizes (unlike {@link renderMarkdown}, which
227
+ * can skip its pipeline pass when the renderer already sanitized
228
+ * internally): this deliberately calls the underlying `marked` parser
229
+ * directly rather than `defaultSafeMarkdownRenderer.render()`, so that
230
+ * internal sanitize pass never runs and this is the only one that will.
231
+ */
232
+ renderChunk(tokens: readonly Token[], context: MdzipMarkdownRenderContext): string | Promise<string>;
192
233
  }
234
+ export interface MdzipChunkOptions {
235
+ /** Max tokens per chunk, whichever of this or `charBudget` is hit first. Default 40. */
236
+ tokenCap?: number;
237
+ /** Approximate max raw markdown chars per chunk (via each token's `.raw.length`). Default 2000. */
238
+ charBudget?: number;
239
+ /**
240
+ * When a token matches, it's isolated into its own chunk regardless of the
241
+ * budget: any chunk-in-progress is closed first, the matching token forms
242
+ * a chunk by itself, and accumulation resumes fresh after it. Callers
243
+ * combine every registered extension's {@link MdzipMarkdownRenderExtension.shouldIsolateChunk}
244
+ * into one predicate — see that doc comment for why this matters.
245
+ */
246
+ shouldIsolate?: (token: Token) => boolean;
247
+ /**
248
+ * When a token matches, any chunk-in-progress is closed first and the
249
+ * matching token starts a fresh one (unlike `shouldIsolate`, later tokens
250
+ * keep accumulating into that new chunk under the normal budget — the
251
+ * matching token doesn't get a chunk to itself). Used to keep unrelated
252
+ * sections from sharing a chunk: without this, a document short enough to
253
+ * fit several headings' worth of content under the budget lets an edit in
254
+ * one section's prose invalidate a sibling section's untouched heading and
255
+ * content too, tearing them out of the DOM and back in — a real, visible
256
+ * flash for content that never changed.
257
+ */
258
+ shouldStartChunk?: (token: Token) => boolean;
259
+ }
260
+ /**
261
+ * True when a token's raw source embeds an image (Markdown `![]()` syntax or
262
+ * a raw `<img>` tag). Used to isolate the token into its own chunk: without
263
+ * this, a short document can put an image in the same budget-sized chunk as
264
+ * unrelated surrounding prose, so an edit anywhere in that prose tears the
265
+ * image out of the DOM and reinserts it — a real, visible flash, since the
266
+ * browser has to redo layout for a freshly-inserted `<img>` even when its
267
+ * source is a cache hit.
268
+ */
269
+ export declare function tokenEmbedsImage(token: Token): boolean;
270
+ /**
271
+ * True for a heading token — used as {@link MdzipChunkOptions.shouldStartChunk}
272
+ * so a heading always begins a fresh chunk instead of merging with whatever
273
+ * content (and sibling headings) happened to precede it under the size
274
+ * budget. See that option's doc comment for why: it keeps an edit in one
275
+ * section from also tearing down an untouched sibling section.
276
+ */
277
+ export declare function tokenIsHeading(token: Token): boolean;
278
+ /**
279
+ * Groups top-level block tokens from {@link MdzipRenderingService.tokenizeMarkdown}
280
+ * into chunks suitable for incremental rendering — a token-count cap and a
281
+ * char-budget estimate, whichever is hit first, so a document made of many
282
+ * tiny tokens (e.g. a chat export's one-line-paragraph-per-message shape)
283
+ * doesn't end up with one chunk per token. A single token larger than the
284
+ * budget still gets its own chunk on its own (a chunk boundary can never
285
+ * split a token). `shouldIsolate` overrides the budget in one direction —
286
+ * forcing a matching token into its own chunk even when the budget would
287
+ * have happily grouped it with neighbors; `shouldStartChunk` overrides it in
288
+ * the other — forcing a boundary before a matching token even when the
289
+ * budget would have merged it with what came before.
290
+ */
291
+ export declare function groupTokensIntoChunks(tokens: readonly Token[], options?: MdzipChunkOptions): Token[][];
292
+ /**
293
+ * Stable identity key for a chunk: the exact source text `marked` consumed
294
+ * for it (concatenation of each token's `.raw`). Two chunks with the same key
295
+ * are guaranteed to have identical source text, since `.raw` slices tile the
296
+ * whole input contiguously — safe to use as a plain string equality key (no
297
+ * hashing needed; chunks are budget-capped ~2000 chars, and a render involves
298
+ * at most a few dozen of them).
299
+ *
300
+ * Deliberately keys on SOURCE text only, never on rendered output: an
301
+ * extension's `transformHtml` can be side-effecting per call (e.g. the
302
+ * mermaid extension's per-call SVG id counter), so identical keys must never
303
+ * be treated as license to re-run rendering — only as license to skip it and
304
+ * reuse whatever is already mounted for that chunk.
305
+ */
306
+ export declare function chunkSourceKey(chunk: readonly Token[]): string;
193
307
  //# sourceMappingURL=rendering.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rendering.d.ts","sourceRoot":"","sources":["../src/rendering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rendering.d.ts","sourceRoot":"","sources":["../src/rendering.ts"],"names":[],"mappings":"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"}
package/dist/rendering.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import DOMPurify from 'dompurify';
2
- import hljs from 'highlight.js';
2
+ import hljs from './highlight-core.js';
3
3
  import { Marked } from 'marked';
4
4
  // In browsers the dompurify default export is already bound to the global
5
5
  // window. In Node it is an unbound factory, so bind it to a host-provided DOM
@@ -142,6 +142,10 @@ export class MdzipRenderingService {
142
142
  this.renderer = renderer;
143
143
  this.extensions = extensions;
144
144
  }
145
+ /** Whether {@link tokenizeMarkdown}/{@link renderChunk} are usable — only with the default marked-based renderer. */
146
+ get supportsChunking() {
147
+ return this.renderer === defaultSafeMarkdownRenderer;
148
+ }
145
149
  /**
146
150
  * Legacy synchronous render. Behavior is unchanged: the configured
147
151
  * renderer's output is returned as-is (the default renderer sanitizes
@@ -197,6 +201,154 @@ export class MdzipRenderingService {
197
201
  }
198
202
  return value;
199
203
  }
204
+ /**
205
+ * Lexes markdown into top-level block tokens without rendering or
206
+ * sanitizing anything, for callers that want to render/mount the result
207
+ * incrementally (see {@link renderChunk}) instead of all at once. Runs
208
+ * `transformMarkdown` extensions first, same as {@link renderMarkdown} —
209
+ * they still see the whole markdown string once; chunking is a
210
+ * post-transform concern.
211
+ *
212
+ * Only supported with {@link defaultSafeMarkdownRenderer}: a host-supplied
213
+ * custom renderer takes a markdown string and returns opaque HTML with no
214
+ * token structure to chunk by.
215
+ */
216
+ tokenizeMarkdown(markdown, context) {
217
+ if (this.renderer !== defaultSafeMarkdownRenderer) {
218
+ throw new Error('tokenizeMarkdown() only supports the default marked-based renderer; a custom renderer has no token structure to chunk by.');
219
+ }
220
+ let value = markdown;
221
+ for (const ext of this.extensions) {
222
+ if (ext.transformMarkdown) {
223
+ value = chainRenderStage(value, (md) => ext.transformMarkdown(md, context), context.signal);
224
+ }
225
+ }
226
+ if (isThenable(value)) {
227
+ return Promise.resolve(value).then((resolved) => {
228
+ if (context.signal.aborted) {
229
+ throw createAbortError();
230
+ }
231
+ return marked.lexer(resolved);
232
+ });
233
+ }
234
+ return marked.lexer(value);
235
+ }
236
+ /**
237
+ * Renders a subset of tokens from {@link tokenizeMarkdown} through
238
+ * `transformHtml*` and sanitize — the back half of the pipeline documented
239
+ * on {@link MdzipMarkdownRenderExtension}, starting from tokens instead of
240
+ * a markdown string. Always sanitizes (unlike {@link renderMarkdown}, which
241
+ * can skip its pipeline pass when the renderer already sanitized
242
+ * internally): this deliberately calls the underlying `marked` parser
243
+ * directly rather than `defaultSafeMarkdownRenderer.render()`, so that
244
+ * internal sanitize pass never runs and this is the only one that will.
245
+ */
246
+ renderChunk(tokens, context) {
247
+ if (this.renderer !== defaultSafeMarkdownRenderer) {
248
+ throw new Error('renderChunk() only supports the default marked-based renderer; a custom renderer has no token structure to render from.');
249
+ }
250
+ let value = marked.parser(tokens);
251
+ for (const ext of this.extensions) {
252
+ if (ext.transformHtml) {
253
+ value = chainRenderStage(value, (html) => ext.transformHtml(html, context), context.signal);
254
+ }
255
+ }
256
+ const contributions = this.extensions
257
+ .map((ext) => ext.sanitize)
258
+ .filter((contribution) => contribution !== undefined);
259
+ return chainRenderStage(value, (html) => sanitizeMdzipHtml(html, contributions), context.signal);
260
+ }
261
+ }
262
+ const DEFAULT_CHUNK_TOKEN_CAP = 40;
263
+ const DEFAULT_CHUNK_CHAR_BUDGET = 2000;
264
+ const IMAGE_MARKDOWN_PATTERN = /!\[[^\]]*\]\([^)]*\)/;
265
+ const IMAGE_HTML_PATTERN = /<img\b/i;
266
+ /**
267
+ * True when a token's raw source embeds an image (Markdown `![]()` syntax or
268
+ * a raw `<img>` tag). Used to isolate the token into its own chunk: without
269
+ * this, a short document can put an image in the same budget-sized chunk as
270
+ * unrelated surrounding prose, so an edit anywhere in that prose tears the
271
+ * image out of the DOM and reinserts it — a real, visible flash, since the
272
+ * browser has to redo layout for a freshly-inserted `<img>` even when its
273
+ * source is a cache hit.
274
+ */
275
+ export function tokenEmbedsImage(token) {
276
+ const raw = token.raw ?? '';
277
+ return IMAGE_MARKDOWN_PATTERN.test(raw) || IMAGE_HTML_PATTERN.test(raw);
278
+ }
279
+ /**
280
+ * True for a heading token — used as {@link MdzipChunkOptions.shouldStartChunk}
281
+ * so a heading always begins a fresh chunk instead of merging with whatever
282
+ * content (and sibling headings) happened to precede it under the size
283
+ * budget. See that option's doc comment for why: it keeps an edit in one
284
+ * section from also tearing down an untouched sibling section.
285
+ */
286
+ export function tokenIsHeading(token) {
287
+ return token.type === 'heading';
288
+ }
289
+ /**
290
+ * Groups top-level block tokens from {@link MdzipRenderingService.tokenizeMarkdown}
291
+ * into chunks suitable for incremental rendering — a token-count cap and a
292
+ * char-budget estimate, whichever is hit first, so a document made of many
293
+ * tiny tokens (e.g. a chat export's one-line-paragraph-per-message shape)
294
+ * doesn't end up with one chunk per token. A single token larger than the
295
+ * budget still gets its own chunk on its own (a chunk boundary can never
296
+ * split a token). `shouldIsolate` overrides the budget in one direction —
297
+ * forcing a matching token into its own chunk even when the budget would
298
+ * have happily grouped it with neighbors; `shouldStartChunk` overrides it in
299
+ * the other — forcing a boundary before a matching token even when the
300
+ * budget would have merged it with what came before.
301
+ */
302
+ export function groupTokensIntoChunks(tokens, options = {}) {
303
+ const tokenCap = options.tokenCap ?? DEFAULT_CHUNK_TOKEN_CAP;
304
+ const charBudget = options.charBudget ?? DEFAULT_CHUNK_CHAR_BUDGET;
305
+ const chunks = [];
306
+ let current = [];
307
+ let currentChars = 0;
308
+ for (const token of tokens) {
309
+ if (options.shouldIsolate?.(token)) {
310
+ if (current.length > 0) {
311
+ chunks.push(current);
312
+ current = [];
313
+ currentChars = 0;
314
+ }
315
+ chunks.push([token]);
316
+ continue;
317
+ }
318
+ if (options.shouldStartChunk?.(token) && current.length > 0) {
319
+ chunks.push(current);
320
+ current = [];
321
+ currentChars = 0;
322
+ }
323
+ current.push(token);
324
+ currentChars += token.raw?.length ?? 0;
325
+ if (current.length >= tokenCap || currentChars >= charBudget) {
326
+ chunks.push(current);
327
+ current = [];
328
+ currentChars = 0;
329
+ }
330
+ }
331
+ if (current.length > 0) {
332
+ chunks.push(current);
333
+ }
334
+ return chunks;
335
+ }
336
+ /**
337
+ * Stable identity key for a chunk: the exact source text `marked` consumed
338
+ * for it (concatenation of each token's `.raw`). Two chunks with the same key
339
+ * are guaranteed to have identical source text, since `.raw` slices tile the
340
+ * whole input contiguously — safe to use as a plain string equality key (no
341
+ * hashing needed; chunks are budget-capped ~2000 chars, and a render involves
342
+ * at most a few dozen of them).
343
+ *
344
+ * Deliberately keys on SOURCE text only, never on rendered output: an
345
+ * extension's `transformHtml` can be side-effecting per call (e.g. the
346
+ * mermaid extension's per-call SVG id counter), so identical keys must never
347
+ * be treated as license to re-run rendering — only as license to skip it and
348
+ * reuse whatever is already mounted for that chunk.
349
+ */
350
+ export function chunkSourceKey(chunk) {
351
+ return chunk.map((token) => token.raw ?? '').join('');
200
352
  }
201
353
  function rewriteAssetSources(markdown, resolver) {
202
354
  return markdown.replace(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+"([^"]*)")?\)/g, (match, alt, rawPath, title) => {
@@ -1 +1 @@
1
- {"version":3,"file":"rendering.js","sourceRoot":"","sources":["../src/rendering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rendering.js","sourceRoot":"","sources":["../src/rendering.ts"],"names":[],"mappings":"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"}