rapier-markdown-kit 1.2.45 → 1.2.46

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 (41) hide show
  1. package/LICENSE +12 -5
  2. package/README.md +131 -10
  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/assets.d.mts +106 -0
  17. package/dist/kit/index.d.mts +151 -0
  18. package/dist/kit/layout.d.mts +61 -0
  19. package/dist/kit/ledger/carried.d.mts +12 -6
  20. package/dist/kit/ledger/carried.mjs +1 -1
  21. package/dist/kit/ledger/format.mjs +5 -3
  22. package/dist/kit/ledger/text-merge.mjs +33 -0
  23. package/dist/kit/ledger/transport.mjs +61 -2
  24. package/dist/kit/ledger.d.mts +137 -31
  25. package/dist/kit/markdown-it.d.mts +2 -2
  26. package/dist/kit/marks.d.mts +241 -0
  27. package/dist/kit/marks.mjs +39 -1
  28. package/dist/kit/model.d.mts +191 -0
  29. package/dist/kit/render-entry.d.mts +654 -0
  30. package/dist/kit/render.mjs +8 -7
  31. package/dist/kit/typography.d.mts +42 -0
  32. package/dist/kit/will.d.mts +26 -3
  33. package/dist/math/delimiters.mjs +38 -0
  34. package/dist/math/markdown-rules.mjs +103 -0
  35. package/dist/spec/document-fonts.mjs +2 -10
  36. package/dist/spec/md-assets.mjs +1 -0
  37. package/dist/spec/md-comments.mjs +384 -0
  38. package/dist/spec/md-marks.mjs +9 -0
  39. package/dist/spec/md-parser-config.mjs +463 -0
  40. package/dist/spec/md-parser-runtime.mjs +23 -0
  41. 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
@@ -133,6 +133,112 @@ not part of this MIT package.
133
133
  Serialization tests preserve source bytes through HTML export and recovery. Server integration
134
134
  tests also check the exported HTTP response through a browser DOM.
135
135
 
136
+ ### A complete prose host
137
+
138
+ 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.
139
+
140
+ <details>
141
+ <summary>Browser host source</summary>
142
+
143
+ ```js
144
+ // SPDX-License-Identifier: MIT
145
+ // A small browser host. Rendering and carrier algorithms come from the installed kit.
146
+ import MarkdownIt from 'markdown-it';
147
+ import createDOMPurify from 'dompurify';
148
+ import {rapierMarkdown} from 'rapier-markdown-kit/markdown-it';
149
+ import {createMarkdownRenderer, createRenderer, createRenderSanitizer, createRenderStyles, createPrintRenderer} from 'rapier-markdown-kit/render';
150
+ import {parseWill} from 'rapier-markdown-kit/will';
151
+
152
+ export function createProseHost({contentCss, validateFont, materializeDocumentFonts, parseAsync} = {}) {
153
+ const md = new MarkdownIt({html: true}).use(rapierMarkdown);
154
+ const purify = createDOMPurify(window);
155
+ const state = {context: 'render'};
156
+ const remote = {allowed: false};
157
+ const reject = feature => { throw Object.assign(new Error('This example host does not provide ' + feature), {code: 'host_capability_unavailable'}); };
158
+ // This example has no front-matter settings or media/provider resolver. Refuse
159
+ // those capabilities before creating an artifact, instead of silently dropping them.
160
+ const admitSource = source => {
161
+ if (/^(?:\uFEFF)?---(?:\r\n|\r|\n)/.test(source)) reject('front-matter settings');
162
+ if (/!\[|<(?:img|video|audio|iframe|svg)\b/i.test(source)) reject('media resources');
163
+ if (/^\s*```(?:mermaid|math)\b/m.test(source)) reject('diagram/math providers');
164
+ return source;
165
+ };
166
+ const cssHasResource = value => /(?:url|image-set|image|paint)\s*\(|@import/i.test(value);
167
+ const sanitizer = createRenderSanitizer({
168
+ CSSStyleSheet, DOMPurify: purify, URL, document, globalThis, location,
169
+ RAPIER_RASTER_DATA_URL_RE: /^data:image\/(png|jpeg|gif|webp|jxl|svg\+xml);base64,([a-z0-9+/=]+)$/i,
170
+ _rapierSanitizeRuntime: state, _rapierRemoteContent: remote,
171
+ _rapierCssDeclaration: () => document.createElement('span').style,
172
+ _rapierDropRemoteDeclarations: style => {
173
+ let removed = false;
174
+ for (const property of [...style]) if (cssHasResource(style.getPropertyValue(property))) {
175
+ style.removeProperty(property); removed = true;
176
+ }
177
+ return removed;
178
+ },
179
+ _rapierRuleDescriptorIsRemote: rule => cssHasResource(rule.cssText),
180
+ });
181
+ sanitizer._rapierInstallDocumentSanitizeHooks();
182
+ const styles = createRenderStyles({
183
+ _rapierArtifactAccent: () => '#2673c9',
184
+ _rapierStyleText: id => {
185
+ if (id === 'rapier-content-style') return contentCss;
186
+ // The host uses system fonts and plain escaped code, with no extra sheets.
187
+ if (id === 'rapier-font-style' || id === 'rapier-highlight-style') return '';
188
+ return reject('stylesheet ' + id);
189
+ },
190
+ });
191
+ let writer;
192
+ const headingsIn = (root, selector) => {
193
+ const result = [...root.querySelectorAll(selector)];
194
+ for (const template of root.querySelectorAll('template')) result.push(...headingsIn(template.content, selector));
195
+ return result;
196
+ };
197
+ const markdown = createMarkdownRenderer({
198
+ md, parseAsync, Node, document, window, globalThis,
199
+ ...sanitizer,
200
+ RAPIER_RENDERED_HEADING_SELECTOR: 'h1,h2,h3,h4,h5,h6',
201
+ _rapierRemoteContent: remote, _rapierProviders: {},
202
+ _rapierRenderedAnchorOriginalIds: new WeakMap(),
203
+ _rapierDormantHeadings: headingsIn,
204
+ // Anchor spelling is the host's policy. The renderer owns assignment and collisions.
205
+ _rapierHeadingSlugBase: text => 'section-' + text.normalize('NFC').toLowerCase().replace(/[^\p{Letter}\p{Number}]+/gu, '-').replace(/^-|-$/g, ''),
206
+ _rapierNextHeadingSlug: (base, used) => {
207
+ let key = base, n = 1;
208
+ while (Object.hasOwn(used, key)) key = base + '-' + ++n;
209
+ used[key] = 0;
210
+ return key;
211
+ },
212
+ _rapierSplitOpeningFrontmatter: source => ({body: admitSource(source)}),
213
+ _rapierPrefixPortableAnchors: (...args) => writer._rapierPrefixPortableAnchors(...args),
214
+ });
215
+ writer = createRenderer({
216
+ md, Node, document, crypto, globalThis, ...sanitizer, ...styles,
217
+ // BOM is file metadata. Preserve every other source code unit, including EOLs.
218
+ RapierTextCodec: {maxDocumentBytes: 8 * 1024 * 1024, normalizeDocument: source => admitSource(source.charCodeAt(0) === 0xfeff ? source.slice(1) : source)},
219
+ // This independent page has no Rapier application return address or edit ledger.
220
+ RapierPageReturnAddress: {PAGE_SEED: ''},
221
+ _rapierArtifactPreference: (name, allowed) => ({theme: 'light', highlights: 'standard', invertImageAlpha: 'false'})[name] || allowed[0],
222
+ _rapierArtifactHighlight: source => sanitizer.escapeRapierHtmlText(source),
223
+ _rapierLanguageClass: code => [...code.classList].find(name => name.startsWith('language-'))?.slice(9) || '',
224
+ _rapierDocumentNameIsAdmissible: name => typeof name === 'string' && !!name && !/[\\/\u0000-\u001f\u007f]/.test(name),
225
+ _rapierPrepareInterchangeContext: async (_options, captured) => ({...captured,
226
+ semanticRoot: await markdown._rapierRenderSemanticRootAsync(captured.canonical, captured.metadata)}),
227
+ _rapierProjectPortableRoot: (...args) => markdown._rapierProjectPortableRoot(...args),
228
+ _rapierPortableHtml: (...args) => markdown._rapierPortableHtml(...args),
229
+ validateFont, materializeDocumentFonts,
230
+ });
231
+ const print = createPrintRenderer({Node, crypto, document, globalThis, _rapierWillParse: parseWill});
232
+ return {md, markdown, writer, print, sanitizer, styles, purify};
233
+ }
234
+ ```
235
+
236
+ </details>
237
+
238
+ 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.
239
+
240
+ 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.
241
+
136
242
  ### Fonts in exported HTML
137
243
 
138
244
  Settings HTML and Share pages use the same offline font policy. The writer reads custom font
@@ -182,7 +288,7 @@ family name share the host's font namespace. Print retains its existing factory
182
288
  | `rapier-markdown-kit/rapier-ledger` | The MIT edit ledger: `openLedger`, replay, authorship, selective Undo, offline `merge`, three-way `mergeText`, and the carried parts. |
183
289
  | `rapier-markdown-kit/pdf` | `attachPdfSource`: attach the exact source to a PDF without rewriting its pages; `readPdfPageCount`. |
184
290
  | `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. |
291
+ | `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
292
 
187
293
  The canonical inline form is ordinary HTML inside Markdown. CSS support varies; the host's font metrics still
188
294
  determine line layout (below).
@@ -259,22 +365,32 @@ prefix. It never adds a source hyphen. Explicit authored `hyphenate-character` s
259
365
  measured punctuation extends only into available unclipped margins, by at most half an em. Refinement adds no
260
366
  letter tracking; authored supported letter spacing remains part of its shaping contract.
261
367
 
368
+ Here `root` is your rendered document element in a browser. Keep the event handlers and scheduled work with that element’s lifetime.
369
+
262
370
  ```js
263
371
  import {createTypography} from 'rapier-markdown-kit/typography';
264
372
 
265
373
  const refinement = createTypography();
266
374
  await document.fonts.ready;
375
+ let active = true, frame = 0;
267
376
  function update() {
268
- if (refinement.apply(root).pending) requestAnimationFrame(update);
377
+ cancelAnimationFrame(frame); frame = 0;
378
+ if (active && refinement.apply(root).pending) frame = requestAnimationFrame(update);
269
379
  }
270
380
  update();
271
- for (const event of ['copy', 'cut']) document.addEventListener(event, () => {
272
- if (refinement.clearSelection(root)) requestAnimationFrame(update);
273
- }, true);
381
+ function afterClipboard() {
382
+ if (active && refinement.clearSelection(root)) {
383
+ cancelAnimationFrame(frame); frame = requestAnimationFrame(update);
384
+ }
385
+ }
386
+ for (const event of ['copy', 'cut']) document.addEventListener(event, afterClipboard, true);
274
387
  // On a width change, call update() again. Source/style/font changes are revalidated.
275
388
  // Before native editing or consuming this disposable DOM projection:
276
389
  refinement.clear(root);
277
390
  // When retiring the root:
391
+ active = false;
392
+ cancelAnimationFrame(frame);
393
+ for (const event of ['copy', 'cut']) document.removeEventListener(event, afterClipboard, true);
278
394
  refinement.retire(root);
279
395
  ```
280
396
 
@@ -537,8 +653,11 @@ retain native wrapping. Fonts and codecs remain explicit host capabilities as de
537
653
  one, read the saved descriptor with `parseProfile`, or sample the picture with your own image
538
654
  library. `polygonProfile` and `rasterTiltProfile` are plain geometry.
539
655
 
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.
656
+ The appendix API accepts a markdown-it-compatible parser factory from the caller
657
+ (`parseAssets(source, factory)`, or once through `configureParser`). Comment-aware edit history
658
+ also carries Rapier's pinned Markdown parser and canonical configuration. A fresh synchronous
659
+ ledger reader initializes that parser when needed, so accepted comment history can reopen in a
660
+ worker or standalone package. A parser already configured by the host is reused.
542
661
 
543
662
  ## Conformance
544
663
 
@@ -559,7 +678,9 @@ MIT, the full text in `LICENSE`; Rapier-owned modules and the stylesheet keep th
559
678
  notice and pinned source inventory are in `dist/agent/vendor/pretext/`. The selected upstream is main
560
679
  `0d102a5cd933611e86a7e60bda7b4baa5995c6b0`: Pretext 1.0.0 plus the commits of main through pull request #525. Its upstream license includes
561
680
  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;
681
+ and the exported wrapping runtime. The pinned Markdown parser and its plugins retain their original MIT, ISC and BSD-2-Clause notices in
682
+ `dist/agent/vendor/NOTICE.txt` and `dist/agent/vendor/markdown-licenses/`; the package adds no npm dependencies.
683
+ The history projection uses the MIT diff core;
563
684
  its full grant is in `dist/packages/rapier-diff/LICENSE`. The Rapier editor is AGPL-3.0-only and
564
685
  none of it is in this package. The kit carries Rapier's release number, written from the one
565
686
  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
+ }