rapier-markdown-kit 1.2.45 → 1.2.48

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 (52) hide show
  1. package/LICENSE +12 -5
  2. package/README.md +134 -11
  3. package/dist/agent/vendor/BROWSER-ENTITIES.json +36 -0
  4. package/dist/agent/vendor/MARKDOWN-RUNTIME.json +136 -0
  5. package/dist/agent/vendor/MARKDOWNIT.json +582 -0
  6. package/dist/agent/vendor/NOTICE.txt +60 -0
  7. package/dist/agent/vendor/markdown-licenses/entities-LICENSE.txt +11 -0
  8. package/dist/agent/vendor/markdown-licenses/linkify-it-LICENSE.txt +22 -0
  9. package/dist/agent/vendor/markdown-licenses/markdown-it-LICENSE.txt +22 -0
  10. package/dist/agent/vendor/markdown-licenses/mdurl-LICENSE.txt +45 -0
  11. package/dist/agent/vendor/markdown-licenses/punycode.js-LICENSE-MIT.txt +20 -0
  12. package/dist/agent/vendor/markdown-licenses/uc.micro-LICENSE.txt +20 -0
  13. package/dist/agent/vendor/markdown-plugins.json +46 -0
  14. package/dist/agent/vendor/markdown-plugins.mjs +27 -0
  15. package/dist/agent/vendor/markdown-runtime.mjs +13 -0
  16. package/dist/kit/artifact-modules.mjs +19 -0
  17. package/dist/kit/assets.d.mts +106 -0
  18. package/dist/kit/export-fonts.mjs +28 -19
  19. package/dist/kit/index.d.mts +151 -0
  20. package/dist/kit/layout.d.mts +61 -0
  21. package/dist/kit/ledger/carried.d.mts +12 -6
  22. package/dist/kit/ledger/carried.mjs +17 -8
  23. package/dist/kit/ledger/format.mjs +5 -3
  24. package/dist/kit/ledger/source.mjs +31 -2
  25. package/dist/kit/ledger/text-merge.mjs +33 -0
  26. package/dist/kit/ledger/transport.mjs +61 -2
  27. package/dist/kit/ledger.d.mts +137 -31
  28. package/dist/kit/markdown-it.d.mts +2 -2
  29. package/dist/kit/marks.d.mts +241 -0
  30. package/dist/kit/marks.mjs +39 -1
  31. package/dist/kit/model.d.mts +191 -0
  32. package/dist/kit/pdf-source-digest.mjs +10 -0
  33. package/dist/kit/pdf-source.mjs +4 -1
  34. package/dist/kit/pdf-vectors.mjs +3 -2
  35. package/dist/kit/render-entry.d.mts +654 -0
  36. package/dist/kit/render-markdown.mjs +14 -8
  37. package/dist/kit/render-print.mjs +36 -7
  38. package/dist/kit/render.mjs +16 -14
  39. package/dist/kit/typography.d.mts +42 -0
  40. package/dist/kit/will.d.mts +26 -3
  41. package/dist/layout/initial-range.mjs +18 -0
  42. package/dist/layout/typography.mjs +2 -18
  43. package/dist/math/delimiters.mjs +38 -0
  44. package/dist/math/markdown-rules.mjs +103 -0
  45. package/dist/packages/rapier-diff/concerns.mjs +2 -2
  46. package/dist/spec/document-fonts.mjs +62 -16
  47. package/dist/spec/md-assets.mjs +1 -0
  48. package/dist/spec/md-comments.mjs +384 -0
  49. package/dist/spec/md-marks.mjs +9 -0
  50. package/dist/spec/md-parser-config.mjs +463 -0
  51. package/dist/spec/md-parser-runtime.mjs +23 -0
  52. package/package.json +30 -8
package/LICENSE CHANGED
@@ -21,14 +21,18 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
22
 
23
23
  Files under this license carry `SPDX-License-Identifier: MIT` in their first lines: the standard's
24
- grammar, marks and reference style (`spec/md-layout.mjs`, `spec/md-marks.mjs`, `spec/md-source.mjs`, `spec/flowchart.mjs`, `spec/markdown-style.css`), ink geometry
25
- (`spec/ink.mjs`),
24
+ grammar, marks and reference style (`spec/md-layout.mjs`, `spec/md-marks.mjs`, `spec/md-source.mjs`, `spec/flowchart.mjs`, `spec/markdown-style.css`),
25
+ the reusable diagram source, layout and raising helpers (`draw/flowchart-mermaid.mjs`, `draw/flowchart-layout.mjs`,
26
+ `draw/flowchart-raise.mjs`) and diagram-core export facade (`shell/mermaid/api.mjs`),
27
+ ink geometry (`spec/ink.mjs`),
26
28
  the layout model and line planner (`layout/model.mjs`, `layout/line-plan.mjs`, `layout/typography.mjs`, `layout/preparation.mjs`,
27
29
  `layout/prepared-paragraph.mjs`, `layout/hyphenation.mjs`, `layout/paragraph-fit.mjs`), the animated-picture reader and playback
28
30
  the HTML blocks use (`images/gif.mjs`, `images/playback.mjs`),
29
31
  the portable HTML and document metadata helpers (`spec/html-blocks.mjs`, `spec/frontmatter.mjs`,
30
32
  `spec/document-settings.mjs`, `spec/document-fonts.mjs`), the Will grammar (`agent/will.mjs`), the picture appendix reader and writer
31
- (`spec/md-assets.mjs`), the two shared-page reference readers (`tools/read-shared-page.mjs`,
33
+ (`spec/md-assets.mjs`), the portable comment and canonical parser support owners
34
+ (`spec/md-comments.mjs`, `spec/md-parser-config.mjs`, `spec/md-parser-runtime.mjs`),
35
+ the neutral math boundary and parser adapters (`math/delimiters.mjs`, `math/markdown-rules.mjs`), the two shared-page reference readers (`tools/read-shared-page.mjs`,
32
36
  `tools/read-shared-page.py`), and the host helper `packages/rapier-embed/embed.mjs` with its
33
37
  contract owner `packages/rapier-embed/contract.mjs`. The vendored Pretext (`agent/vendor/pretext`) and micromark carry their
34
38
  own MIT notices. The edit-ledger module (`kit/rapier-ledger.mjs`, `kit/ledger/*.mjs`) and
@@ -39,11 +43,14 @@ AGPL-3.0-only. The page wrapper (`skills/rapier-html/wrap.mjs`, `skills/rapier-h
39
43
  `skills/rapier-html/return-address.mjs`) and its carrier-staging helper
40
44
  (`skills/rapier-html/package-files.mjs`) are MIT. The kit's MIT-marked facades,
41
45
  `kit/render-entry.mjs`, `kit/render*.mjs`, `kit/export-fonts.mjs`, `kit/print-capitals.mjs`,
42
- `kit/pdf-vectors.mjs`, `kit/pdf-glyphs.mjs`, `kit/stage.mjs` and MIT-marked conformance
46
+ `kit/pdf-vectors.mjs`, `kit/pdf-glyphs.mjs`, `kit/stage.mjs`, `kit/markdown-vendor.mjs` and MIT-marked conformance
43
47
  modules are covered too. These names describe the Rapier-owned files carrying the
44
48
  MIT notice, not a grant over the editor or third-party code. Other Rapier-owned
45
49
  files retain their stated license; the editor is AGPL-3.0-only (see `LICENSE`).
46
- Third-party components retain their own copyright and license notices.
50
+ Third-party components retain their own copyright and license notices. The published Markdown parser,
51
+ its plugins and their dependencies retain their original MIT, ISC and BSD-2-Clause notices in `agent/vendor/NOTICE.txt` and
52
+ `agent/vendor/markdown-licenses/`; this inventory does not replace them. The Feather callout paths
53
+ in the canonical configuration retain the Feather copyright and MIT notice there.
47
54
 
48
55
  The portable font helpers read document definitions and accept explicit host validation and
49
56
  subsetting functions. The application binding (`editor/export-fonts.mjs`), captured-font
package/README.md CHANGED
@@ -27,7 +27,7 @@ offline file, run `npx rapier-html notes.md`.
27
27
  The kit supplies the portable source and history Rapier's agent tools use.
28
28
 
29
29
  ```sh
30
- npm install rapier-markdown-kit
30
+ npm install rapier-markdown-kit markdown-it@15
31
31
  ```
32
32
 
33
33
  Render a document with [markdown-it](https://github.com/markdown-it/markdown-it), then style it with
@@ -50,7 +50,7 @@ const edited = replaceLedgerText(base, 'Draft, revised\n', {actor: {kind: 'human
50
50
  console.log(merge(edited, base).text, authorship(edited).runs);
51
51
  ```
52
52
 
53
- TypeScript declarations ship for `markdown-it`, `parsed`, `will`, `rapier-ledger`, `ledger/carried` and `pdf`.
53
+ TypeScript declarations ship for the root and every JavaScript subpath. NodeNext and bundler resolution use the same public exports. DOM host APIs use TypeScript’s `DOM` library; pure history and Will consumers can import their own subpaths. The Markdown rendering examples install `markdown-it` explicitly; the kit itself has no npm dependencies.
54
54
 
55
55
  ```js
56
56
  import {parseLayout} from 'rapier-markdown-kit/layout'; // the md-layout comment a picture carries
@@ -81,7 +81,9 @@ editor's own seam: each needs a `host` that supplies its DOM, Markdown, picture,
81
81
  `createRenderStyles`, `createRenderSanitizer` and `createPrintRenderer`, plus the explicit font helpers
82
82
  `exportFontCss`, `requireDocumentFonts`, `fontRequests`, `waitForFonts` and `waitForFontRequests`. These are the
83
83
  functions used by the editor and exported pages. Each factory takes explicit host dependencies
84
- in its first argument. `style.css` is the
84
+ in its first argument. Refined print paragraphs use the host's retained `RapierArtifactLayoutDependencies`
85
+ (the same factory graph used by standalone HTML). They initialize in the print document so its own font set
86
+ owns every measurement. Missing factories or a blocked initialization refuse the export. `style.css` is the
85
87
  MIT `spec/markdown-style.css`, including the numbered-list, checkbox, callout, table,
86
88
  footnote and picture-layout treatment.
87
89
 
@@ -133,6 +135,112 @@ not part of this MIT package.
133
135
  Serialization tests preserve source bytes through HTML export and recovery. Server integration
134
136
  tests also check the exported HTTP response through a browser DOM.
135
137
 
138
+ ### A complete prose host
139
+
140
+ For a small browser integration, save the following as `prose-host.mjs` and bundle it with your application. Install its explicit host dependencies with `npm install markdown-it@15.0.3 dompurify@3.4.16`. This host handles prose, headings, lists, tables and fenced code. It refuses front matter, media and diagram providers that it does not supply; the factories’ larger host contracts remain available in their declarations.
141
+
142
+ <details>
143
+ <summary>Browser host source</summary>
144
+
145
+ ```js
146
+ // SPDX-License-Identifier: MIT
147
+ // A small browser host. Rendering and carrier algorithms come from the installed kit.
148
+ import MarkdownIt from 'markdown-it';
149
+ import createDOMPurify from 'dompurify';
150
+ import {rapierMarkdown} from 'rapier-markdown-kit/markdown-it';
151
+ import {createMarkdownRenderer, createRenderer, createRenderSanitizer, createRenderStyles, createPrintRenderer} from 'rapier-markdown-kit/render';
152
+ import {parseWill} from 'rapier-markdown-kit/will';
153
+
154
+ export function createProseHost({contentCss, validateFont, materializeDocumentFonts, parseAsync} = {}) {
155
+ const md = new MarkdownIt({html: true}).use(rapierMarkdown);
156
+ const purify = createDOMPurify(window);
157
+ const state = {context: 'render'};
158
+ const remote = {allowed: false};
159
+ const reject = feature => { throw Object.assign(new Error('This example host does not provide ' + feature), {code: 'host_capability_unavailable'}); };
160
+ // This example has no front-matter settings or media/provider resolver. Refuse
161
+ // those capabilities before creating an artifact, instead of silently dropping them.
162
+ const admitSource = source => {
163
+ if (/^(?:\uFEFF)?---(?:\r\n|\r|\n)/.test(source)) reject('front-matter settings');
164
+ if (/!\[|<(?:img|video|audio|iframe|svg)\b/i.test(source)) reject('media resources');
165
+ if (/^\s*```(?:mermaid|math)\b/m.test(source)) reject('diagram/math providers');
166
+ return source;
167
+ };
168
+ const cssHasResource = value => /(?:url|image-set|image|paint)\s*\(|@import/i.test(value);
169
+ const sanitizer = createRenderSanitizer({
170
+ CSSStyleSheet, DOMPurify: purify, URL, document, globalThis, location,
171
+ RAPIER_RASTER_DATA_URL_RE: /^data:image\/(png|jpeg|gif|webp|jxl|svg\+xml);base64,([a-z0-9+/=]+)$/i,
172
+ _rapierSanitizeRuntime: state, _rapierRemoteContent: remote,
173
+ _rapierCssDeclaration: () => document.createElement('span').style,
174
+ _rapierDropRemoteDeclarations: style => {
175
+ let removed = false;
176
+ for (const property of [...style]) if (cssHasResource(style.getPropertyValue(property))) {
177
+ style.removeProperty(property); removed = true;
178
+ }
179
+ return removed;
180
+ },
181
+ _rapierRuleDescriptorIsRemote: rule => cssHasResource(rule.cssText),
182
+ });
183
+ sanitizer._rapierInstallDocumentSanitizeHooks();
184
+ const styles = createRenderStyles({
185
+ _rapierArtifactAccent: () => '#2673c9',
186
+ _rapierStyleText: id => {
187
+ if (id === 'rapier-content-style') return contentCss;
188
+ // The host uses system fonts and plain escaped code, with no extra sheets.
189
+ if (id === 'rapier-font-style' || id === 'rapier-highlight-style') return '';
190
+ return reject('stylesheet ' + id);
191
+ },
192
+ });
193
+ let writer;
194
+ const headingsIn = (root, selector) => {
195
+ const result = [...root.querySelectorAll(selector)];
196
+ for (const template of root.querySelectorAll('template')) result.push(...headingsIn(template.content, selector));
197
+ return result;
198
+ };
199
+ const markdown = createMarkdownRenderer({
200
+ md, parseAsync, Node, document, window, globalThis,
201
+ ...sanitizer,
202
+ RAPIER_RENDERED_HEADING_SELECTOR: 'h1,h2,h3,h4,h5,h6',
203
+ _rapierRemoteContent: remote, _rapierProviders: {},
204
+ _rapierRenderedAnchorOriginalIds: new WeakMap(),
205
+ _rapierDormantHeadings: headingsIn,
206
+ // Anchor spelling is the host's policy. The renderer owns assignment and collisions.
207
+ _rapierHeadingSlugBase: text => 'section-' + text.normalize('NFC').toLowerCase().replace(/[^\p{Letter}\p{Number}]+/gu, '-').replace(/^-|-$/g, ''),
208
+ _rapierNextHeadingSlug: (base, used) => {
209
+ let key = base, n = 1;
210
+ while (Object.hasOwn(used, key)) key = base + '-' + ++n;
211
+ used[key] = 0;
212
+ return key;
213
+ },
214
+ _rapierSplitOpeningFrontmatter: source => ({body: admitSource(source)}),
215
+ _rapierPrefixPortableAnchors: (...args) => writer._rapierPrefixPortableAnchors(...args),
216
+ });
217
+ writer = createRenderer({
218
+ md, Node, document, crypto, globalThis, ...sanitizer, ...styles,
219
+ // BOM is file metadata. Preserve every other source code unit, including EOLs.
220
+ RapierTextCodec: {maxDocumentBytes: 8 * 1024 * 1024, normalizeDocument: source => admitSource(source.charCodeAt(0) === 0xfeff ? source.slice(1) : source)},
221
+ // This independent page has no Rapier application return address or edit ledger.
222
+ RapierPageReturnAddress: {PAGE_SEED: ''},
223
+ _rapierArtifactPreference: (name, allowed) => ({theme: 'light', highlights: 'standard', invertImageAlpha: 'false'})[name] || allowed[0],
224
+ _rapierArtifactHighlight: source => sanitizer.escapeRapierHtmlText(source),
225
+ _rapierLanguageClass: code => [...code.classList].find(name => name.startsWith('language-'))?.slice(9) || '',
226
+ _rapierDocumentNameIsAdmissible: name => typeof name === 'string' && !!name && !/[\\/\u0000-\u001f\u007f]/.test(name),
227
+ _rapierPrepareInterchangeContext: async (_options, captured) => ({...captured,
228
+ semanticRoot: await markdown._rapierRenderSemanticRootAsync(captured.canonical, captured.metadata)}),
229
+ _rapierProjectPortableRoot: (...args) => markdown._rapierProjectPortableRoot(...args),
230
+ _rapierPortableHtml: (...args) => markdown._rapierPortableHtml(...args),
231
+ validateFont, materializeDocumentFonts,
232
+ });
233
+ const print = createPrintRenderer({Node, crypto, document, globalThis, _rapierWillParse: parseWill});
234
+ return {md, markdown, writer, print, sanitizer, styles, purify};
235
+ }
236
+ ```
237
+
238
+ </details>
239
+
240
+ Use your bundler or static server to load the installed `style.css` text as `contentCss`, then call `createProseHost({contentCss})`. Its `markdown.render(source, {docKind: 'markdown'})` produces a fragment; `await writer.render(source, {filename: 'report.md'})` produces a complete offline page carrying the exact source. Keep one bound host per document realm: the Markdown factory registers an original-file listener and currently has no disposal method. The font and print operations have their own cleanup contracts.
241
+
242
+ The example is MIT. The host dependencies keep their licenses: markdown-it is MIT, and DOMPurify is Apache-2.0 OR MPL-2.0. Neither is an implicit dependency of the kit.
243
+
136
244
  ### Fonts in exported HTML
137
245
 
138
246
  Settings HTML and Share pages use the same offline font policy. The writer reads custom font
@@ -182,7 +290,7 @@ family name share the host's font namespace. Print retains its existing factory
182
290
  | `rapier-markdown-kit/rapier-ledger` | The MIT edit ledger: `openLedger`, replay, authorship, selective Undo, offline `merge`, three-way `mergeText`, and the carried parts. |
183
291
  | `rapier-markdown-kit/pdf` | `attachPdfSource`: attach the exact source to a PDF without rewriting its pages; `readPdfPageCount`. |
184
292
  | `rapier-markdown-kit/ledger/carried` | Checked optional parts for pages and saved Markdown. |
185
- | `rapier-markdown-kit` | Named exports from the layout, marks, model, typography, Will, assets and render modules, plus the `ledger` namespace. |
293
+ | `rapier-markdown-kit` | Named exports from layout, marks, model, Will, assets and render, plus the `ledger` namespace. Import `createTypography` from `/typography`; the root does not export that ambiguous name. |
186
294
 
187
295
  The canonical inline form is ordinary HTML inside Markdown. CSS support varies; the host's font metrics still
188
296
  determine line layout (below).
@@ -259,22 +367,32 @@ prefix. It never adds a source hyphen. Explicit authored `hyphenate-character` s
259
367
  measured punctuation extends only into available unclipped margins, by at most half an em. Refinement adds no
260
368
  letter tracking; authored supported letter spacing remains part of its shaping contract.
261
369
 
370
+ Here `root` is your rendered document element in a browser. Keep the event handlers and scheduled work with that element’s lifetime.
371
+
262
372
  ```js
263
373
  import {createTypography} from 'rapier-markdown-kit/typography';
264
374
 
265
375
  const refinement = createTypography();
266
376
  await document.fonts.ready;
377
+ let active = true, frame = 0;
267
378
  function update() {
268
- if (refinement.apply(root).pending) requestAnimationFrame(update);
379
+ cancelAnimationFrame(frame); frame = 0;
380
+ if (active && refinement.apply(root).pending) frame = requestAnimationFrame(update);
269
381
  }
270
382
  update();
271
- for (const event of ['copy', 'cut']) document.addEventListener(event, () => {
272
- if (refinement.clearSelection(root)) requestAnimationFrame(update);
273
- }, true);
383
+ function afterClipboard() {
384
+ if (active && refinement.clearSelection(root)) {
385
+ cancelAnimationFrame(frame); frame = requestAnimationFrame(update);
386
+ }
387
+ }
388
+ for (const event of ['copy', 'cut']) document.addEventListener(event, afterClipboard, true);
274
389
  // On a width change, call update() again. Source/style/font changes are revalidated.
275
390
  // Before native editing or consuming this disposable DOM projection:
276
391
  refinement.clear(root);
277
392
  // When retiring the root:
393
+ active = false;
394
+ cancelAnimationFrame(frame);
395
+ for (const event of ['copy', 'cut']) document.removeEventListener(event, afterClipboard, true);
278
396
  refinement.retire(root);
279
397
  ```
280
398
 
@@ -537,8 +655,11 @@ retain native wrapping. Fonts and codecs remain explicit host capabilities as de
537
655
  one, read the saved descriptor with `parseProfile`, or sample the picture with your own image
538
656
  library. `polygonProfile` and `rasterTiltProfile` are plain geometry.
539
657
 
540
- The appendix parser takes a markdown-it-compatible parser factory from the caller
541
- (`parseAssets(source, factory)`, or once through `configureParser`); no parser is bundled.
658
+ The appendix API accepts a markdown-it-compatible parser factory from the caller
659
+ (`parseAssets(source, factory)`, or once through `configureParser`). Comment-aware edit history
660
+ also carries Rapier's pinned Markdown parser and canonical configuration. A fresh synchronous
661
+ ledger reader initializes that parser when needed, so accepted comment history can reopen in a
662
+ worker or standalone package. A parser already configured by the host is reused.
542
663
 
543
664
  ## Conformance
544
665
 
@@ -559,7 +680,9 @@ MIT, the full text in `LICENSE`; Rapier-owned modules and the stylesheet keep th
559
680
  notice and pinned source inventory are in `dist/agent/vendor/pretext/`. The selected upstream is main
560
681
  `0d102a5cd933611e86a7e60bda7b4baa5995c6b0`: Pretext 1.0.0 plus the commits of main through pull request #525. Its upstream license includes
561
682
  Chromium/WebKit BSD, Unicode and ICU notices for derived code and generated data; those notices travel with the kit
562
- and the exported wrapping runtime. The history projection uses the MIT diff core;
683
+ and the exported wrapping runtime. The pinned Markdown parser and its plugins retain their original MIT, ISC and BSD-2-Clause notices in
684
+ `dist/agent/vendor/NOTICE.txt` and `dist/agent/vendor/markdown-licenses/`; the package adds no npm dependencies.
685
+ The history projection uses the MIT diff core;
563
686
  its full grant is in `dist/packages/rapier-diff/LICENSE`. The Rapier editor is AGPL-3.0-only and
564
687
  none of it is in this package. The kit carries Rapier's release number, written from the one
565
688
  value the editor's release reads.
@@ -0,0 +1,36 @@
1
+ {
2
+ "description": "The page and Node use the same native ES2022 build of unchanged markdown-it 15.0.3 release source (MARKDOWNIT.json). tools/entities-vendor.mjs re-encodes its 2,125 HTML entity names as a compact list with the strict decoder its callers require, then minifies with the pinned options. The normal Rapier core rule in agent/markdown-spec.mjs owns auto-link token expansion; the vendor has no parser rule changes. Each vendor pins upstream and derived bytes; a changed source or derivation requires grammar and entity equivalence before repinning.",
3
+ "vendors": [
4
+ {
5
+ "id": "lib-markdownit",
6
+ "upstream": {
7
+ "name": "markdown-it-15.0.3.es2022.umd.js",
8
+ "bytes": 144327,
9
+ "sha256": "ab352b33693b8a4c88c0c0a977f12b30df9aa42bc163f73e59397939e397182a"
10
+ },
11
+ "entities": {
12
+ "names": 2125,
13
+ "legacy": 106
14
+ },
15
+ "derived": {
16
+ "name": "markdown-it-15.0.3.es2022.umd.rapier.min.js",
17
+ "bytes": 94470,
18
+ "sha256": "09d16498c075e83b0ba986dab07e83f0850f601f6f7551bd4aaf79d3167f7bc4"
19
+ }
20
+ }
21
+ ],
22
+ "tool": {
23
+ "name": "terser",
24
+ "version": "5.51.2",
25
+ "options": {
26
+ "ecma": 2022,
27
+ "compress": {
28
+ "passes": 2
29
+ },
30
+ "mangle": true,
31
+ "format": {
32
+ "comments": "/^!|@license|copyright/i"
33
+ }
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,136 @@
1
+ {
2
+ "format": "rapier-markdown-vendor/1",
3
+ "description": "Existing pinned parser and plugins; upstream bytes and license texts unchanged.",
4
+ "runtime": {
5
+ "path": "agent/vendor/markdown-runtime.mjs",
6
+ "prefix": "// MIT; exact embedded Rapier vendor source (tools/entities-vendor.mjs --write). See NOTICE.txt.\n// One lazy constructor serves named browser/worker imports and the default Node facade.\nlet owned = null;\nexport function markdownItConstructor() {\n if (!owned) {\nconst exports = {}; const module = {exports};\n",
7
+ "suffix": "\n owned = module.exports;\n }\n return owned;\n}\n",
8
+ "bodyBytes": 94470,
9
+ "bodySha256": "09d16498c075e83b0ba986dab07e83f0850f601f6f7551bd4aaf79d3167f7bc4"
10
+ },
11
+ "files": [
12
+ {
13
+ "path": "agent/vendor/markdown-runtime.mjs",
14
+ "bytes": 94829,
15
+ "sha256": "147b86b69ee4d0b1237a793b09300342e8c14d149c9e84bb0bea5ed2fa431998"
16
+ },
17
+ {
18
+ "path": "agent/vendor/markdown-plugins.mjs",
19
+ "bytes": 24196,
20
+ "sha256": "0081e0e557379cdf908b652124e82e2456e965af365a65464a610b867d350008"
21
+ },
22
+ {
23
+ "path": "agent/vendor/MARKDOWNIT.json",
24
+ "bytes": 18685,
25
+ "sha256": "2c42169e3233c6cb2b7e31cdefa83dde78e4ba05ed995805e749070db8c76ff4"
26
+ },
27
+ {
28
+ "path": "agent/vendor/BROWSER-ENTITIES.json",
29
+ "bytes": 1344,
30
+ "sha256": "9b2b9db3a8bfc2a90c54a703da8cd08c65eed62de85dc16fc334f59ed95347b8"
31
+ },
32
+ {
33
+ "path": "agent/vendor/markdown-plugins.json",
34
+ "bytes": 1585,
35
+ "sha256": "c52a02dd0946e150d4023199ccbd9f1afa93b008797ee5b2c325d9fcd249d4ee"
36
+ },
37
+ {
38
+ "path": "agent/vendor/NOTICE.txt",
39
+ "bytes": 2774,
40
+ "sha256": "05a252057f4eed3ba3b4149d404294f3a9bfb059f9bfde14d57128005acbe8ca"
41
+ },
42
+ {
43
+ "path": "agent/vendor/markdown-licenses/markdown-it-LICENSE.txt",
44
+ "bytes": 1073,
45
+ "sha256": "792c48c5a849a15fdf9e37e8bcf9e6d1dd13b32b46c642a748a0a46a9919d473"
46
+ },
47
+ {
48
+ "path": "agent/vendor/markdown-licenses/entities-LICENSE.txt",
49
+ "bytes": 1260,
50
+ "sha256": "cb992345949ccd6e8394b2cd6c465f7b897c864f845937dbf64e8997f389e164"
51
+ },
52
+ {
53
+ "path": "agent/vendor/markdown-licenses/linkify-it-LICENSE.txt",
54
+ "bytes": 1058,
55
+ "sha256": "95e3f7f0e81e9b4940cdfaa1956aaff5e4dfd2fb1565041e7c78eb9a606f23e3"
56
+ },
57
+ {
58
+ "path": "agent/vendor/markdown-licenses/mdurl-LICENSE.txt",
59
+ "bytes": 2303,
60
+ "sha256": "6b6a356c4337e2446841f30f3cdf7e7023af8c5260b5e347c0f987b9f6aa2644"
61
+ },
62
+ {
63
+ "path": "agent/vendor/markdown-licenses/uc.micro-LICENSE.txt",
64
+ "bytes": 1077,
65
+ "sha256": "483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a"
66
+ },
67
+ {
68
+ "path": "agent/vendor/markdown-licenses/punycode.js-LICENSE-MIT.txt",
69
+ "bytes": 1077,
70
+ "sha256": "483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a"
71
+ }
72
+ ],
73
+ "licenses": [
74
+ {
75
+ "path": "agent/vendor/markdown-licenses/markdown-it-LICENSE.txt",
76
+ "source": {
77
+ "scope": "source",
78
+ "path": "LICENSE",
79
+ "bytes": 1073,
80
+ "sha256": "792c48c5a849a15fdf9e37e8bcf9e6d1dd13b32b46c642a748a0a46a9919d473"
81
+ }
82
+ },
83
+ {
84
+ "path": "agent/vendor/markdown-licenses/entities-LICENSE.txt",
85
+ "source": {
86
+ "scope": "dependencies",
87
+ "path": "entities/LICENSE",
88
+ "bytes": 1260,
89
+ "sha256": "cb992345949ccd6e8394b2cd6c465f7b897c864f845937dbf64e8997f389e164"
90
+ }
91
+ },
92
+ {
93
+ "path": "agent/vendor/markdown-licenses/linkify-it-LICENSE.txt",
94
+ "source": {
95
+ "scope": "dependencies",
96
+ "path": "linkify-it/LICENSE",
97
+ "bytes": 1058,
98
+ "sha256": "95e3f7f0e81e9b4940cdfaa1956aaff5e4dfd2fb1565041e7c78eb9a606f23e3"
99
+ }
100
+ },
101
+ {
102
+ "path": "agent/vendor/markdown-licenses/mdurl-LICENSE.txt",
103
+ "source": {
104
+ "scope": "dependencies",
105
+ "path": "mdurl/LICENSE",
106
+ "bytes": 2303,
107
+ "sha256": "6b6a356c4337e2446841f30f3cdf7e7023af8c5260b5e347c0f987b9f6aa2644"
108
+ }
109
+ },
110
+ {
111
+ "path": "agent/vendor/markdown-licenses/uc.micro-LICENSE.txt",
112
+ "source": {
113
+ "scope": "dependencies",
114
+ "path": "uc.micro/LICENSE.txt",
115
+ "bytes": 1077,
116
+ "sha256": "483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a"
117
+ }
118
+ },
119
+ {
120
+ "path": "agent/vendor/markdown-licenses/punycode.js-LICENSE-MIT.txt",
121
+ "source": {
122
+ "scope": "dependencies",
123
+ "path": "punycode.js/LICENSE-MIT.txt",
124
+ "bytes": 1077,
125
+ "sha256": "483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a"
126
+ }
127
+ }
128
+ ],
129
+ "plugins": {
130
+ "path": "agent/vendor/markdown-plugins.mjs",
131
+ "prefix": "// Exact pinned plugin bodies; the caller supplies their runtime context. See NOTICE.txt and markdown-plugins.json.\nexport function createMarkdownPlugins(Math) {\nif (!Math || typeof Math.ceil !== 'function' || typeof Math.random !== 'function') throw new TypeError('Markdown plugins need a Math context.');\nconst root = {};\n{\nconst globalThis = root, window = root, global = root, self = root;\nconst exports = undefined, module = undefined, define = undefined;\n",
132
+ "suffix": "\n}\nreturn Object.freeze(root);\n}\n",
133
+ "bodyBytes": 23702,
134
+ "bodySha256": "78e105dbba1e97275141f92253b776a8261c18e20b78f3bf40a6d22873f6b100"
135
+ }
136
+ }