cudoc-markdown-it 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,10 @@
1
1
  # cudoc-markdown-it
2
2
 
3
+ > **A VitePress or Eleventy site does not install this package.** It is the markdown-it layer inside `cudoc-vitepress` and `cudoc-eleventy`, which depend on it and set it up, so follow the [VitePress](https://github.com/cudoment/cudoc/tree/main/docs/vitepress.md) or [Eleventy](https://github.com/cudoment/cudoc/tree/main/docs/eleventy.md) guide instead. Use it directly in one case only: connecting cudoc to another markdown-it host that has no adapter yet. Otherwise start from [your site generator](https://github.com/cudoment/cudoc#pick-your-site-generator).
4
+
3
5
  Connect cudoc Markdown syntax, document collection and embedding to a markdown-it pipeline.
4
6
 
5
- This separate package is a pipeline adapter, not a second implementation of cudoc's rules. Shared document semantics live in `@cudoment/cudoc`. It is the markdown-it counterpart of `cudoc-remark`: the VitePress and Eleventy adapters depend on it, so the two hosts share one token conversion, one embed expansion and one collection path. Use it directly only when writing an adapter for another markdown-it host.
7
+ This separate package is a pipeline adapter, not a second implementation of cudoc's rules. Shared document semantics live in `@cudoment/cudoc`. It is the markdown-it counterpart of `cudoc-remark`: the VitePress and Eleventy adapters depend on it, so the two hosts share one token conversion, one embed expansion and one collection path.
6
8
 
7
9
  ESM · Node.js 20+
8
10
 
@@ -25,13 +27,13 @@ export default function cudocMyHost(md, options = {}) {
25
27
  export const createDocumentCompiler = (md) => createHostCompiler(md, host)
26
28
  ```
27
29
 
28
- The plugin converts the actual token stream and never parses the Markdown a second time. It reads the host's own anchor, link and container tokens, then copies the resolved heading ids and titles back onto the host tokens so native heading and TOC behavior is preserved. `MarkdownItHost` names everything a host does differently: its own tokens, the document id in its markdown-it env, whether it resolves links in renderer rules, and whether it strips front matter outside markdown-it.
30
+ The plugin converts the actual token stream and never parses the Markdown a second time. It reads the host's own anchor, link and container tokens, then copies the resolved heading ids and titles back onto the host tokens so native heading and TOC behavior is preserved. The host still renders its own code blocks, HTML blocks and every token cudoc does not map, such as a table of contents or a code group, so its highlighting and plugins keep working. Diagnostics raised while the site renders go to an `onDiagnostic` option, a warning on stderr by default. `MarkdownItHost` names everything a host does differently: its own tokens, the document id in its markdown-it env, whether it resolves links in renderer rules, and whether it strips front matter outside markdown-it.
29
31
 
30
32
  Choose `host`, `cudoc` or `both` independently for `headingAnchor`, `badge`, `tableCellList`, `callout` and `link`. The representative callout is `> [!NOTE] Title`. Authors do not register cudoc React components in the recommended setup. Syntax-only rendering needs no stored JSON; cross-document embedding requires document collection.
31
33
 
32
34
  - [VitePress guide](https://github.com/cudoment/cudoc/tree/main/docs/vitepress.md) · [Eleventy guide](https://github.com/cudoment/cudoc/tree/main/docs/eleventy.md)
33
35
  - [Markdown syntax](https://github.com/cudoment/cudoc/tree/main/docs/syntax.md)
34
36
  - [Embedding](https://github.com/cudoment/cudoc/tree/main/docs/embedding.md)
35
- - [Standalone HTML alongside a host](https://github.com/cudoment/cudoc/tree/main/docs/html.md#export-alongside-an-existing-site)
37
+ - [Standalone HTML alongside a host](https://github.com/cudoment/cudoc/tree/main/docs/export.md#export-alongside-an-existing-site)
36
38
  - [API reference](https://github.com/cudoment/cudoc/tree/main/docs/api-reference/adapters.md#markdown-it)
37
39
  - [Runnable examples](https://github.com/cudoment/cudoc/tree/main/examples/README.md)
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AAGzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAQ/C,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,cAAc,GACnB,gBAAgB,CA0ClB"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AAIzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAS/C,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,cAAc,GACnB,gBAAgB,CA+DlB"}
package/dist/compiler.js CHANGED
@@ -5,6 +5,7 @@
5
5
  * and a source replacement go through the actual host compiler rather than a
6
6
  * second parser that could disagree with it.
7
7
  */
8
+ import { markdownItText } from "./text.js";
8
9
  export function createHostCompiler(md, host) {
9
10
  return (source, context) => {
10
11
  if (context.options.format === "mdx")
@@ -21,24 +22,46 @@ export function createHostCompiler(md, host) {
21
22
  if (!captured)
22
23
  throw new Error(`${host.adapter}: install the plugin on the supplied renderer`);
23
24
  const tree = structuredClone(captured.tree);
24
- const offset = source.indexOf(captured.source);
25
+ // The body the renderer saw is what follows the front matter, as
26
+ // markdown-it read it. Searching for it instead would find an earlier
27
+ // copy of the same text, such as a front-matter field that repeats the
28
+ // first paragraph.
29
+ const read = markdownItText(source);
30
+ const offset = read.text.endsWith(captured.source)
31
+ ? read.text.length - captured.source.length
32
+ : read.text.indexOf(captured.source);
25
33
  if (offset < 0)
26
34
  throw new Error(`${host.adapter}: cannot map processed Markdown back to source`);
27
- const lines = source.slice(0, offset).split("\n").length - 1;
35
+ const lines = read.text.slice(0, offset).split("\n").length - 1;
36
+ // Offsets go back to the file's own text, `\r\n` and all, which is what
37
+ // the source snapshot slices; lines are the same in both.
38
+ const shift = (position) => {
39
+ for (const point of [position.start, position.end]) {
40
+ if (point.offset !== undefined)
41
+ point.offset = read.toSource(point.offset + offset);
42
+ point.line += lines;
43
+ }
44
+ };
28
45
  const adjust = (node) => {
29
46
  if (node.position)
30
- for (const point of [node.position.start, node.position.end]) {
31
- if (point.offset !== undefined)
32
- point.offset += offset;
33
- point.line += lines;
34
- }
47
+ shift(node.position);
35
48
  node.children?.forEach(adjust);
36
49
  };
37
50
  adjust(tree);
51
+ // A diagnostic's position was measured in the same body, so it moves the
52
+ // same way; without this the line printed for a document with front
53
+ // matter would be short by the front matter's height.
54
+ const diagnostics = captured.diagnostics.map((diagnostic) => {
55
+ if (!diagnostic.position)
56
+ return diagnostic;
57
+ const position = structuredClone(diagnostic.position);
58
+ shift(position);
59
+ return { ...diagnostic, position };
60
+ });
38
61
  return {
39
62
  tree,
40
63
  frontmatter: split?.data ?? env.frontmatter ?? {},
41
- diagnostics: captured.diagnostics,
64
+ diagnostics,
42
65
  };
43
66
  };
44
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,UAAU,kBAAkB,CAChC,EAAc,EACd,IAAoB;IAEpB,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACzB,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;YAClC,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,OAAO,oEAAoE,CACpF,CAAA;QACH,2EAA2E;QAC3E,4EAA4E;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAA;QACxC,MAAM,GAAG,GAA4B;YACnC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;YAC9B,YAAY,EAAE,IAAI;SACnB,CAAA;QACD,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,GAAG,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAA6B,CAAA;QAClD,IAAI,CAAC,QAAQ;YACX,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,OAAO,+CAA+C,CAC/D,CAAA;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC9C,IAAI,MAAM,GAAG,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,OAAO,gDAAgD,CAChE,CAAA;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,CAAC,IAAkB,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,QAAQ;gBACf,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;wBAAE,KAAK,CAAC,MAAM,IAAI,MAAM,CAAA;oBACtD,KAAK,CAAC,IAAI,IAAI,KAAK,CAAA;gBACrB,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAChC,CAAC,CAAA;QACD,MAAM,CAAC,IAA+B,CAAC,CAAA;QACvC,OAAO;YACL,IAAI;YACJ,WAAW,EACT,KAAK,EAAE,IAAI,IAAK,GAAG,CAAC,WAAuC,IAAI,EAAE;YACnE,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export type { TokenConversion } from "./tokens.js";
3
3
  export { installHostPlugin } from "./plugin.js";
4
4
  export { createHostCompiler } from "./compiler.js";
5
5
  export { resolveHostOptions } from "./options.js";
6
+ export { markdownItText } from "./text.js";
6
7
  export type { HostPluginOptions } from "./options.js";
7
8
  export type { MarkdownItHost, TokenNode, TokenContext } from "./host.js";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -2,4 +2,5 @@ export { tokensToAst } from "./tokens.js";
2
2
  export { installHostPlugin } from "./plugin.js";
3
3
  export { createHostCompiler } from "./compiler.js";
4
4
  export { resolveHostOptions } from "./options.js";
5
+ export { markdownItText } from "./text.js";
5
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA"}
package/dist/options.d.ts CHANGED
@@ -7,15 +7,22 @@
7
7
  * a markdown-it core rule is much harder to place.
8
8
  */
9
9
  import type { Root } from "mdast";
10
- import { type DocumentOptions } from "@cudoment/cudoc/document";
10
+ import { type DocumentDiagnostic, type DocumentOptions } from "@cudoment/cudoc/document";
11
11
  import type { Library } from "@cudoment/cudoc/node/library";
12
- export type HostPluginOptions = Omit<DocumentOptions, "host" | "format"> & {
12
+ export type HostPluginOptions = Omit<DocumentOptions, "host" | "format" | "components"> & {
13
13
  /** Called with the document tree built from the actual host token stream. */
14
14
  onDocument?: (tree: Root, source: string, env: Record<string, unknown>) => void;
15
15
  /** Collected documents, required before any embed can be expanded. */
16
16
  library?: Library;
17
17
  /** Where `prepareEmbeds` wrote its results; defaults to `.cudoc/documents`. */
18
18
  outDir?: string;
19
+ /**
20
+ * Receives each diagnostic normalization reports while the site renders a
21
+ * page — an unregistered callout type, two headings sharing an id. Defaults
22
+ * to a warning on stderr naming the document and line. Collection reports
23
+ * its own, so nothing is passed here while collecting.
24
+ */
25
+ onDiagnostic?: (diagnostic: DocumentDiagnostic, documentId: string) => void;
19
26
  };
20
27
  /**
21
28
  * Validates the options and resolves the syntax modes once.
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAE3D,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG;IACzE,6EAA6E;IAC7E,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACzB,IAAI,CAAA;IACT,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAaD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,SAAS,iBAAiB,EAC1B,SAAS,MAAM,KACd,iBAYF,CAAA"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAM3D,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,eAAe,EACf,MAAM,GAAG,QAAQ,GAAG,YAAY,CACjC,GAAG;IACF,6EAA6E;IAC7E,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACzB,IAAI,CAAA;IACT,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5E,CAAA;AAeD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,SAAS,iBAAiB,EAC1B,SAAS,MAAM,KACd,iBAiCF,CAAA"}
package/dist/options.js CHANGED
@@ -6,16 +6,19 @@
6
6
  * loads rather than at the first document, because an error raised from inside
7
7
  * a markdown-it core rule is much harder to place.
8
8
  */
9
- import { resolveSyntax } from "@cudoment/cudoc/document";
9
+ import { resolveSyntax, } from "@cudoment/cudoc/document";
10
+ import { resolveTableColumnLayoutOptions, resolveTableColumnWidthOptions, } from "@cudoment/cudoc/transforms/table-column-layout";
10
11
  const KNOWN_KEYS = new Set([
11
12
  "syntax",
12
13
  "calloutTypes",
13
- "components",
14
14
  "tableColumnLayout",
15
+ "tableColumnWidths",
16
+ "ignoreDiagnostics",
15
17
  "headingIds",
16
18
  "onDocument",
17
19
  "library",
18
20
  "outDir",
21
+ "onDiagnostic",
19
22
  ]);
20
23
  /**
21
24
  * Validates the options and resolves the syntax modes once.
@@ -27,12 +30,27 @@ const KNOWN_KEYS = new Set([
27
30
  export const resolveHostOptions = (options, adapter) => {
28
31
  if (typeof options !== "object" || options === null)
29
32
  throw new TypeError(`${adapter}: options must be an object`);
33
+ if ("components" in options)
34
+ throw new TypeError(`${adapter}: components maps MDX elements, which markdown-it never produces; there is nothing for it to map`);
30
35
  for (const key of Object.keys(options))
31
36
  if (!KNOWN_KEYS.has(key))
32
37
  throw new TypeError(`${adapter}: unknown option "${key}"`);
33
38
  if (options.headingIds && options.headingIds !== "host")
34
39
  throw new TypeError(`${adapter}: headingIds must be "host"; the host slugger assigns ids`);
35
40
  resolveSyntax(options.syntax);
41
+ // The table rules are checked the way the remark adapters check them, so
42
+ // a mistyped rule fails here rather than inside the first page's render.
43
+ for (const [key, resolve] of [
44
+ ["tableColumnLayout", resolveTableColumnLayoutOptions],
45
+ ["tableColumnWidths", resolveTableColumnWidthOptions],
46
+ ]) {
47
+ const rules = options[key];
48
+ if (rules === undefined)
49
+ continue;
50
+ if (!Array.isArray(rules))
51
+ throw new TypeError(`${adapter}: ${key} must be an array of rules`);
52
+ rules.forEach((rule, index) => resolve(rule, `${key}[${index}]`));
53
+ }
36
54
  return options;
37
55
  };
38
56
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAA;AAgB9E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS;IACjC,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,QAAQ;CAC6B,CAAC,CAAA;AAExC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAA0B,EAC1B,OAAe,EACI,EAAE;IACrB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QACjD,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,6BAA6B,CAAC,CAAA;IAC9D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,qBAAqB,GAAG,GAAG,CAAC,CAAA;IAC9D,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,KAAK,MAAM;QACrD,MAAM,IAAI,SAAS,CACjB,GAAG,OAAO,2DAA2D,CACtE,CAAA;IACH,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7B,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,aAAa,GAGd,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,gDAAgD,CAAA;AAyBvD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS;IACjC,QAAQ;IACR,cAAc;IACd,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,cAAc;CACuB,CAAC,CAAA;AAExC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAA0B,EAC1B,OAAe,EACI,EAAE;IACrB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QACjD,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,6BAA6B,CAAC,CAAA;IAC9D,IAAI,YAAY,IAAI,OAAO;QACzB,MAAM,IAAI,SAAS,CACjB,GAAG,OAAO,kGAAkG,CAC7G,CAAA;IACH,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,qBAAqB,GAAG,GAAG,CAAC,CAAA;IAC9D,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,KAAK,MAAM;QACrD,MAAM,IAAI,SAAS,CACjB,GAAG,OAAO,2DAA2D,CACtE,CAAA;IACH,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7B,yEAAyE;IACzE,yEAAyE;IACzE,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI;QAC3B,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;QACtD,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC7C,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACvB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,KAAK,GAAG,4BAA4B,CAAC,CAAA;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC3B,OAAqD,CACpD,IAAI,EACJ,GAAG,GAAG,IAAI,KAAK,GAAG,CACnB,CACF,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
package/dist/plugin.d.ts CHANGED
@@ -7,8 +7,12 @@
7
7
  *
8
8
  * The rule runs in `md.core`, after the host's own core passes, so native
9
9
  * anchors, links and containers are already tokens by the time cudoc reads
10
- * them. cudoc then renders the document itself and hands the HTML back through
11
- * the renderer, which is what keeps one document from being rendered twice.
10
+ * them. The page is then rendered in two layers. The host renders the token
11
+ * stream as it always does — its render-time work, such as VitePress lifting
12
+ * `<script setup>` out of the page or collecting links, happens once — and
13
+ * cudoc renders the normalized document, putting the host's own output back
14
+ * for every code block and HTML block it did not change, so line
15
+ * highlighting, copy buttons and snippet imports survive.
12
16
  */
13
17
  import type MarkdownIt from "markdown-it";
14
18
  import { type HostPluginOptions } from "./options.js";
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AAkBzC,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAS/C;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,cAAc,GACnB,IAAI,CA0IN"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AAmBzC,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAiC/C;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,cAAc,GACnB,IAAI,CAmWN"}
package/dist/plugin.js CHANGED
@@ -7,20 +7,35 @@
7
7
  *
8
8
  * The rule runs in `md.core`, after the host's own core passes, so native
9
9
  * anchors, links and containers are already tokens by the time cudoc reads
10
- * them. cudoc then renders the document itself and hands the HTML back through
11
- * the renderer, which is what keeps one document from being rendered twice.
10
+ * them. The page is then rendered in two layers. The host renders the token
11
+ * stream as it always does — its render-time work, such as VitePress lifting
12
+ * `<script setup>` out of the page or collecting links, happens once — and
13
+ * cudoc renders the normalized document, putting the host's own output back
14
+ * for every code block and HTML block it did not change, so line
15
+ * highlighting, copy buttons and snippet imports survive.
12
16
  */
13
17
  import { normalizeDocument, nodeText, } from "@cudoment/cudoc/document";
14
18
  import { renderDocument } from "@cudoment/cudoc/render";
19
+ import { expandPreparedEmbeds } from "@cudoment/cudoc/node/prepare-embeds";
15
20
  import { resolveEmbed, parseEmbedSpec, } from "@cudoment/cudoc/node/resolve-embed";
16
- import { readPreparedEmbeds, embedKey, } from "@cudoment/cudoc/node/prepare-embeds";
17
21
  import { tokensToAst } from "./tokens.js";
18
22
  import { resolveHostOptions } from "./options.js";
23
+ import { markdownItText } from "./text.js";
19
24
  /** Clones a token deeply enough that rendering it cannot touch the original. */
20
25
  const cloneToken = (token) => Object.assign(Object.create(Object.getPrototypeOf(token)), token, {
21
26
  attrs: token.attrs?.map((pair) => [...pair]) ?? null,
22
27
  children: token.children?.map(cloneToken) ?? null,
23
28
  });
29
+ /** The fences cudoc turns into something else: embeds and page breaks. */
30
+ const CUDOC_FENCES = ["cudoc-embed", "cudoc-pagebreak"];
31
+ /** The block types whose host rendering is put back into cudoc's HTML. */
32
+ const HOST_BLOCKS = ["fence", "code_block", "html_block"];
33
+ /**
34
+ * The HTML a markdown-it front-matter fence, or nothing, would leave before
35
+ * the Markdown body: what a stored source may have ahead of the text the
36
+ * renderer was given.
37
+ */
38
+ const FRONT_MATTER = /^(?:---|\+\+\+)[^\n]*\n(?:[\s\S]*?\n)?(?:---|\+\+\+)[ \t]*\r?\n?\s*$/;
24
39
  /**
25
40
  * Installs the shared pipeline on a configured markdown-it instance.
26
41
  *
@@ -30,18 +45,59 @@ const cloneToken = (token) => Object.assign(Object.create(Object.getPrototypeOf(
30
45
  */
31
46
  export function installHostPlugin(md, options, host) {
32
47
  resolveHostOptions(options, host.adapter);
33
- const conversion = { adapter: host.adapter, token: host.token };
48
+ const pending = new WeakMap();
49
+ const report = options.onDiagnostic ??
50
+ ((diagnostic, documentId) => console.warn(`${host.adapter}: ${documentId}:${diagnostic.position?.start.line ?? 1}: ${diagnostic.code}: ${diagnostic.message}`));
51
+ /**
52
+ * Renders tokens the conversion has no mapping for — a table of contents,
53
+ * a code group, math, footnotes — through the host's own rules, handed the
54
+ * whole token list so a rule that reads its neighbours still finds them.
55
+ */
56
+ const renderHosted = (env) => (list, start, end, inline) => {
57
+ // Links rendered here are rendered again with the page; a host that
58
+ // records them (VitePress checks them for dead links) sees them once.
59
+ const scoped = { ...env, links: [] };
60
+ if (inline)
61
+ return md.renderer.renderInline(list.slice(start, end + 1), md.options, scoped);
62
+ let html = "";
63
+ for (let i = start; i <= end; i++) {
64
+ const token = list[i];
65
+ const rule = md.renderer.rules[token.type];
66
+ html +=
67
+ token.type === "inline"
68
+ ? md.renderer.renderInline(token.children ?? [], md.options, scoped)
69
+ : rule
70
+ ? rule(list, i, md.options, scoped, md.renderer)
71
+ : md.renderer.renderToken(list, i, md.options);
72
+ }
73
+ return html;
74
+ };
75
+ // The fences cudoc replaces are never shown as code: collection renders a
76
+ // page only to run the rules, and a page cudoc composes puts an embed's
77
+ // content or a page break where the fence was. Handing them to the host
78
+ // would only have its highlighter warn about a language it does not know.
34
79
  const nativeFence = md.renderer.rules.fence;
35
- md.renderer.rules.fence = (tokens, index, renderOptions, env, self) => tokens[index].info.trim() === "cudoc-embed" &&
36
- env.cudocRendered !== undefined
80
+ md.renderer.rules.fence = (tokens, index, renderOptions, env, self) => CUDOC_FENCES.includes(tokens[index].info.trim()) &&
81
+ (pending.has(env) || env?.cudocCollect)
37
82
  ? ""
38
83
  : nativeFence
39
84
  ? nativeFence(tokens, index, renderOptions, env, self)
40
85
  : self.renderToken(tokens, index, renderOptions);
41
86
  const nativeRender = md.renderer.render.bind(md.renderer);
42
87
  md.renderer.render = (tokens, renderOptions, env) => {
43
- const nativeHtml = nativeRender(tokens, renderOptions, env);
44
- return env.cudocRendered ?? nativeHtml;
88
+ const document = env ? pending.get(env) : undefined;
89
+ if (!document)
90
+ return nativeRender(tokens, renderOptions, env);
91
+ let html;
92
+ try {
93
+ html = composeHtml(md.renderer, document, () => nativeRender(tokens, renderOptions, env), renderOptions, env);
94
+ }
95
+ finally {
96
+ // Only now: the host's own pass reads it to leave cudoc's fences out.
97
+ pending.delete(env);
98
+ }
99
+ env.cudocRendered = html;
100
+ return html;
45
101
  };
46
102
  md.core.ruler.push("cudoc", (state) => {
47
103
  let tokens = state.tokens;
@@ -54,7 +110,50 @@ export function installHostPlugin(md, options, host) {
54
110
  links: [],
55
111
  });
56
112
  }
113
+ const collecting = Boolean(state.env.cudocCollect);
114
+ const origins = new Map();
115
+ const renderNow = renderHosted(state.env);
116
+ const deferred = new Map();
117
+ const conversion = {
118
+ adapter: host.adapter,
119
+ token: host.token,
120
+ // A block the host renders is rendered once the ids and titles cudoc
121
+ // settles are on the host's heading tokens, so a table of contents
122
+ // built from them links to the headings the page shows. It is rendered
123
+ // from the host's own tokens, which are what those settle onto.
124
+ render: (list, start, end, inline) => {
125
+ if (inline)
126
+ return renderNow(list, start, end, inline);
127
+ const marker = `\u0000cudoc-hosted-${deferred.size}\u0000`;
128
+ deferred.set(marker, () => renderNow(list === tokens ? state.tokens : list, start, end, false));
129
+ return marker;
130
+ },
131
+ origins,
132
+ };
57
133
  const tree = tokensToAst(tokens, state.src, options, conversion);
134
+ // The host slugged every heading before this rule without knowing the
135
+ // ids cudoc settles from `(#id)`. Its ids are held aside until those are
136
+ // known, so the duplicate check sees only ids written in the document,
137
+ // and each then goes back numbered past any id already taken, the way the
138
+ // host's slugger numbers past its own.
139
+ const hostIds = new Map();
140
+ const holdHostIds = (node) => {
141
+ const properties = node.data?.hProperties;
142
+ if (node.type === "heading" &&
143
+ node.position &&
144
+ node.data?.cudoc?.explicitId !== true &&
145
+ typeof properties?.id === "string") {
146
+ hostIds.set(node.position.start.line, properties.id);
147
+ delete properties.id;
148
+ }
149
+ node.children?.forEach(holdHostIds);
150
+ };
151
+ holdHostIds(tree);
152
+ // The clones exist only to read final link attributes; the host renders
153
+ // its own tokens, so that is what each block is traced back to.
154
+ if (tokens !== state.tokens)
155
+ for (const [node, token] of origins)
156
+ origins.set(node, state.tokens[tokens.indexOf(token)] ?? token);
58
157
  const diagnostics = normalizeDocument(tree, state.src, { ...options, host: host.host, format: "md", headingIds: "host" }, (source) => {
59
158
  const inline = [];
60
159
  const env = { ...state.env, links: [] };
@@ -64,9 +163,71 @@ export function installHostPlugin(md, options, host) {
64
163
  token.type = "text";
65
164
  if (host.resolveInlineAttributes)
66
165
  md.renderer.renderInline(inline, md.options, env);
67
- return tokensToAst(inline, source, options, conversion)
68
- .children;
166
+ return tokensToAst(inline, source, options, {
167
+ ...conversion,
168
+ render: renderHosted(env),
169
+ }).children;
69
170
  });
171
+ const headings = [];
172
+ const collectAll = (node) => {
173
+ if (node.type === "heading")
174
+ headings.push(node);
175
+ node.children?.forEach(collectAll);
176
+ };
177
+ collectAll(tree);
178
+ const taken = new Set(headings
179
+ .map((node) => node.data?.hProperties?.id)
180
+ .filter((id) => typeof id === "string"));
181
+ for (const node of headings) {
182
+ if (typeof node.data?.hProperties?.id === "string" || !node.position)
183
+ continue;
184
+ const base = hostIds.get(node.position.start.line);
185
+ if (!base)
186
+ continue;
187
+ let id = base;
188
+ for (let n = 1; taken.has(id); n++)
189
+ id = `${base}-${n}`;
190
+ taken.add(id);
191
+ node.data = {
192
+ ...node.data,
193
+ hProperties: { ...node.data?.hProperties, id },
194
+ };
195
+ }
196
+ const documentId = () => {
197
+ try {
198
+ return host.documentId(state.env);
199
+ }
200
+ catch {
201
+ return "document";
202
+ }
203
+ };
204
+ // Collection prints what it compiled; the site build reports here, once
205
+ // per render, the way the remark hosts report through the file. The host
206
+ // hands over the page without its front matter, so the line is counted
207
+ // from the collected file when the library holds it.
208
+ if (!collecting && diagnostics.length) {
209
+ const id = documentId();
210
+ const collected = options.library
211
+ ? documentIndexOf(options.library).get(id)?.source.text
212
+ : undefined;
213
+ // Compared as markdown-it reads it, line endings and all.
214
+ const text = collected && markdownItText(collected).text;
215
+ const offset = text && text.endsWith(state.src)
216
+ ? (text.slice(0, text.length - state.src.length).match(/\n/g) ?? [])
217
+ .length
218
+ : 0;
219
+ const shift = (point) => point ? { ...point, line: point.line + offset } : point;
220
+ for (const diagnostic of diagnostics)
221
+ report(offset && diagnostic.position
222
+ ? {
223
+ ...diagnostic,
224
+ position: {
225
+ start: shift(diagnostic.position.start),
226
+ end: shift(diagnostic.position.end),
227
+ },
228
+ }
229
+ : diagnostic, id);
230
+ }
70
231
  const updateHeading = (node) => {
71
232
  if (node.type === "heading")
72
233
  for (const child of node.children ?? []) {
@@ -95,8 +256,11 @@ export function installHostPlugin(md, options, host) {
95
256
  const heading = headingMap.get((token.map?.[0] ?? -1) + 1);
96
257
  if (!heading)
97
258
  return;
98
- token.attrSet("id", String(heading.data?.hProperties?.id));
259
+ const id = heading.data?.hProperties?.id;
260
+ if (typeof id === "string")
261
+ token.attrSet("id", id);
99
262
  const inline = state.tokens[index + 1];
263
+ const written = inline.content;
100
264
  const title = heading.children
101
265
  ?.filter((n) => !["badge", "permalink"].includes(n.data?.cudoc?.kind ?? ""))
102
266
  .map(nodeText)
@@ -106,48 +270,167 @@ export function installHostPlugin(md, options, host) {
106
270
  const label = new state.Token("text", "", 0);
107
271
  label.content = title;
108
272
  inline.children = [label];
273
+ // A permalink labelled from the heading as written would read out the
274
+ // anchor marker too: "Permalink to Other (#intro)".
275
+ for (const child of heading.children ?? []) {
276
+ const properties = child.data?.hProperties;
277
+ const aria = properties?.["aria-label"];
278
+ if (child.data?.cudoc?.kind === "permalink" &&
279
+ typeof aria === "string" &&
280
+ written &&
281
+ written !== title)
282
+ properties["aria-label"] = aria.split(written).join(title);
283
+ }
109
284
  });
285
+ const fill = (node) => {
286
+ if (node.type === "html" && typeof node.value === "string") {
287
+ const render = deferred.get(node.value);
288
+ if (render)
289
+ node.value = render();
290
+ }
291
+ node.children?.forEach(fill);
292
+ };
293
+ fill(tree);
110
294
  state.env.cudoc = {
111
295
  tree: structuredClone(tree),
112
296
  source: state.src,
113
297
  diagnostics,
114
298
  };
115
299
  options.onDocument?.(structuredClone(tree), state.src, state.env);
116
- let index = 0;
117
- const expand = (node) => {
118
- if (!node.children)
119
- return;
120
- node.children = node.children.flatMap((child) => {
121
- if (child.type === "code" && child.lang === "cudoc-embed") {
122
- if (!options.library)
123
- throw new Error(`${host.adapter}: build documents and provide library before rendering embeds`);
124
- const documentId = host.documentId(state.env);
125
- const snapshot = options.library.documents.find((d) => d.id === documentId);
126
- if (snapshot && !snapshot.source.text.endsWith(state.src))
127
- throw new Error(`${host.adapter}: stale collected source ${documentId}; recollect documents`);
128
- if (!options.library.compiler) {
129
- const prepared = readPreparedEmbeds(options.outDir ?? ".cudoc/documents", documentId, snapshot?.source.text ?? state.src);
130
- const result = prepared.blocks[embedKey(documentId, child.value, ++index)];
131
- if (!result)
132
- throw new Error(`${host.adapter}: missing prepared embed in ${documentId}`);
133
- return structuredClone(result.children);
134
- }
135
- return resolveEmbed(options.library, parseEmbedSpec(child.value), {
136
- documentId,
137
- prefix: `embed-${++index}`,
138
- }).children;
139
- }
140
- expand(child);
141
- return [child];
142
- });
143
- };
144
- if (!state.env.cudocCollect)
300
+ // Collection keeps the fences: the library records what a document
301
+ // embeds, and the host renders nothing that is kept.
302
+ if (collecting)
303
+ return;
304
+ const hasEmbeds = [...origins.keys()].some((node) => node.type === "code" && node.lang === "cudoc-embed");
305
+ if (hasEmbeds)
306
+ expandEmbeds(tree, state.src, state.env);
307
+ pending.set(state.env, { tree, origins, Token: state.Token });
308
+ });
309
+ /**
310
+ * Splices every embed in the page into its tree: resolved on the spot from
311
+ * a library that still has its compiler, or read from the blocks
312
+ * `prepareEmbeds` wrote for a library loaded from disk.
313
+ */
314
+ const expandEmbeds = (tree, src, env) => {
315
+ const library = options.library;
316
+ if (!library)
317
+ throw new Error(`${host.adapter}: build documents and provide library before rendering embeds`);
318
+ const documentId = host.documentId(env);
319
+ const snapshot = documentIndexOf(library).get(documentId);
320
+ // The renderer is given the page without whatever the host strips first,
321
+ // so the collected source may carry front matter ahead of it and nothing
322
+ // else. Text removed or added anywhere means the library is behind.
323
+ if (snapshot) {
324
+ // As markdown-it reads it, so a file written with `\r\n` matches. The
325
+ // host strips a byte order mark with the front matter; the collected
326
+ // text keeps it.
327
+ const { text } = markdownItText(snapshot.source.text);
328
+ const ahead = text
329
+ .slice(0, text.length - src.length)
330
+ .replace(/^\uFEFF/, "");
331
+ if (!text.endsWith(src) ||
332
+ (ahead.trim() !== "" && !FRONT_MATTER.test(ahead)))
333
+ throw new Error(Array.isArray(env.includes) && env.includes.length
334
+ ? `${host.adapter}: ${documentId} includes other files with <!--@include-->, which collection does not expand, so its embeds cannot be matched; move the embed out of a page that includes`
335
+ : `${host.adapter}: stale collected source ${documentId}; recollect documents`);
336
+ }
337
+ if (library.compiler) {
338
+ let index = 0;
339
+ const expand = (node) => {
340
+ if (!node.children)
341
+ return;
342
+ node.children = node.children.flatMap((child) => {
343
+ if (child.type === "code" && child.lang === "cudoc-embed")
344
+ return resolveEmbed(library, parseEmbedSpec(child.value), {
345
+ documentId,
346
+ prefix: `embed-${++index}`,
347
+ }).children;
348
+ expand(child);
349
+ return [child];
350
+ });
351
+ };
145
352
  expand(tree);
146
- state.env.cudocRendered = renderDocument(tree, {
147
- highlight: (code, lang) => lang === "cudoc-embed"
148
- ? ""
149
- : (md.options.highlight?.(code, lang ?? "", "") ?? ""),
353
+ return;
354
+ }
355
+ expandPreparedEmbeds(tree, {
356
+ outDir: options.outDir ?? ".cudoc/documents",
357
+ documentId,
358
+ source: snapshot?.source.text ?? src,
150
359
  });
151
- });
360
+ };
361
+ }
362
+ const indexes = new WeakMap();
363
+ /** The library's documents by id, built once per library. */
364
+ const documentIndexOf = (library) => {
365
+ let index = indexes.get(library.documents);
366
+ if (!index) {
367
+ index = new Map(library.documents.map((d) => [d.id, d]));
368
+ indexes.set(library.documents, index);
369
+ }
370
+ return index;
371
+ };
372
+ /**
373
+ * The page's HTML: cudoc's rendering of the normalized document, with the
374
+ * host's own output for every block it left alone.
375
+ *
376
+ * The host renders the whole token stream first, as it would without cudoc,
377
+ * and the output of each code and HTML block is recorded as it goes. A code
378
+ * block that came from another document through an embed has no host token,
379
+ * so one is made for it and handed to the host's fence rule, and it looks like
380
+ * the page's own. An HTML block the host rendered to nothing — VitePress's
381
+ * `<script setup>` and `<style>`, which it lifts into the component — stays
382
+ * nothing.
383
+ */
384
+ function composeHtml(renderer, document, renderNative, renderOptions, env) {
385
+ const recorded = new Map();
386
+ const rules = renderer.rules;
387
+ const saved = HOST_BLOCKS.map((type) => [type, rules[type]]);
388
+ for (const [type, rule] of saved)
389
+ rules[type] = (tokens, index, options, ruleEnv, self) => {
390
+ const html = rule
391
+ ? rule(tokens, index, options, ruleEnv, self)
392
+ : self.renderToken(tokens, index, options);
393
+ recorded.set(tokens[index], html);
394
+ return html;
395
+ };
396
+ try {
397
+ renderNative();
398
+ }
399
+ finally {
400
+ for (const [type, rule] of saved)
401
+ rules[type] = rule;
402
+ }
403
+ const hostHtml = (node) => {
404
+ const origin = document.origins.get(node);
405
+ if (origin)
406
+ return recorded.get(origin);
407
+ if (node.type !== "code")
408
+ return undefined;
409
+ const token = new document.Token("fence", "code", 0);
410
+ token.info = [node.lang, node.meta].filter(Boolean).join(" ");
411
+ token.content = `${node.value ?? ""}\n`;
412
+ token.markup = "```";
413
+ token.block = true;
414
+ const fence = rules.fence;
415
+ return fence
416
+ ? fence([token], 0, renderOptions, env, renderer)
417
+ : renderer.renderToken([token], 0, renderOptions);
418
+ };
419
+ const substitute = (node) => {
420
+ if (!node.children)
421
+ return;
422
+ node.children = node.children.flatMap((child) => {
423
+ if (child.type === "code" || document.origins.has(child)) {
424
+ const html = hostHtml(child);
425
+ if (html === undefined)
426
+ return [child];
427
+ return html ? [{ type: "html", value: html }] : [];
428
+ }
429
+ substitute(child);
430
+ return [child];
431
+ });
432
+ };
433
+ substitute(document.tree);
434
+ return renderDocument(document.tree);
152
435
  }
153
436
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/dist/text.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The text markdown-it reads from a source, and a map from offsets in it back
3
+ * to the source's. Before it parses, markdown-it turns every `\r\n` and lone
4
+ * `\r` into `\n` and every NUL into U+FFFD, so its offsets count in that
5
+ * text; they differ from the source's only after a `\r\n` it made one
6
+ * character of.
7
+ */
8
+ export declare function markdownItText(source: string): {
9
+ text: string;
10
+ toSource: (offset: number) => number;
11
+ };
12
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;CACrC,CAuBA"}
package/dist/text.js ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The text markdown-it reads from a source, and a map from offsets in it back
3
+ * to the source's. Before it parses, markdown-it turns every `\r\n` and lone
4
+ * `\r` into `\n` and every NUL into U+FFFD, so its offsets count in that
5
+ * text; they differ from the source's only after a `\r\n` it made one
6
+ * character of.
7
+ */
8
+ export function markdownItText(source) {
9
+ // Where each `\n` that was a `\r\n` stands in the text markdown-it reads.
10
+ const joined = [];
11
+ for (let at = source.indexOf("\r\n"); at !== -1; at = source.indexOf("\r\n", at + 2))
12
+ joined.push(at - joined.length);
13
+ const text = source.replace(/\r\n?/g, "\n").replace(/\0/g, "\uFFFD");
14
+ return {
15
+ text,
16
+ toSource: (offset) => {
17
+ let low = 0;
18
+ let high = joined.length;
19
+ while (low < high) {
20
+ const middle = (low + high) >> 1;
21
+ if (joined[middle] < offset)
22
+ low = middle + 1;
23
+ else
24
+ high = middle;
25
+ }
26
+ return offset + low;
27
+ },
28
+ };
29
+ }
30
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAI3C,0EAA0E;IAC1E,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KACE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAC/B,EAAE,KAAK,CAAC,CAAC,EACT,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QAEnC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACpE,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YACnB,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;YACxB,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;gBAChC,IAAI,MAAM,CAAC,MAAM,CAAE,GAAG,MAAM;oBAAE,GAAG,GAAG,MAAM,GAAG,CAAC,CAAA;;oBACzC,IAAI,GAAG,MAAM,CAAA;YACpB,CAAC;YACD,OAAO,MAAM,GAAG,GAAG,CAAA;QACrB,CAAC;KACF,CAAA;AACH,CAAC"}
package/dist/tokens.d.ts CHANGED
@@ -7,13 +7,29 @@
7
7
  */
8
8
  import type Token from "markdown-it/lib/token.mjs";
9
9
  import type { Root } from "mdast";
10
- import { type DocumentOptions } from "@cudoment/cudoc/document";
10
+ import { type DocumentNode, type DocumentOptions } from "@cudoment/cudoc/document";
11
11
  import type { TokenNode } from "./host.js";
12
12
  export type TokenConversion = {
13
13
  /** Adapter package name used when a token has no mapping. */
14
14
  adapter?: string;
15
15
  /** Converts a token contributed by the host's own markdown-it plugins. */
16
16
  token?: TokenNode;
17
+ /**
18
+ * Renders tokens nothing here maps — a table of contents, math, footnotes —
19
+ * the host's own way. `start` and `end` are the first and last index of the
20
+ * token, or of an open token and its matching close, in `tokens`; `inline`
21
+ * says whether they are an inline token's children. A container that is not
22
+ * a callout, such as a code group, is the exception: its open and its close
23
+ * token are rendered each on its own, and what lies between is converted as
24
+ * usual. The HTML is kept as an `html` node, so the host's rendering
25
+ * survives. Without it, such a token is an error.
26
+ */
27
+ render?: (tokens: Token[], start: number, end: number, inline: boolean) => string;
28
+ /**
29
+ * Filled with the block token each `code` and `html` node was converted
30
+ * from, so a renderer can put the host's own output for that token back.
31
+ */
32
+ origins?: Map<DocumentNode, Token>;
17
33
  };
18
34
  /** Converts the actual markdown-it tokens; it does not parse Markdown again. */
19
35
  export declare function tokensToAst(tokens: Token[], source: string, options?: DocumentOptions, conversion?: TokenConversion): Root;
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,2BAA2B,CAAA;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAE1C,MAAM,MAAM,eAAe,GAAG;IAC5B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAoBD,gFAAgF;AAChF,wBAAgB,WAAW,CACzB,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,EAC7B,UAAU,GAAE,eAAoB,GAC/B,IAAI,CA6MN"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,2BAA2B,CAAA;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAE1C,MAAM,MAAM,eAAe,GAAG;IAC5B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,CACP,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,OAAO,KACZ,MAAM,CAAA;IACX;;;OAGG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;CACnC,CAAA;AAuED,gFAAgF;AAChF,wBAAgB,WAAW,CACzB,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,EAC7B,UAAU,GAAE,eAAoB,GAC/B,IAAI,CAoRN"}
package/dist/tokens.js CHANGED
@@ -6,6 +6,31 @@
6
6
  * contributed by a host's own plugins go through the host's `token` hook first.
7
7
  */
8
8
  import { makeCallout, resolveSyntax, isHost, } from "@cudoment/cudoc/document";
9
+ /**
10
+ * Container names that mean a callout: the five cudoc types, and the host
11
+ * names `canonicalCalloutType` maps onto them. A container the site
12
+ * registered under any other name — VitePress's `raw` and `code-group`, or
13
+ * one of the site's own — opens and closes the way the host plugin that
14
+ * registered it renders, around content converted like the rest of the page.
15
+ */
16
+ const CONTAINER_CALLOUTS = new Set([
17
+ "note",
18
+ "tip",
19
+ "important",
20
+ "warning",
21
+ "caution",
22
+ "info",
23
+ "default",
24
+ "danger",
25
+ "error",
26
+ "warn",
27
+ ]);
28
+ /**
29
+ * Whether a heading line names its id the host's way, `{#id}` at the end,
30
+ * outside code spans: `` ## Write `{#id}` here `` documents the syntax rather
31
+ * than using it.
32
+ */
33
+ const namesExplicitId = (line) => /\{#[^}]+\}\s*$/.test(line.replace(/(`+)[\s\S]*?\1/g, ""));
9
34
  /** The block and inline tokens every markdown-it host produces alike. */
10
35
  const NESTING_TYPES = {
11
36
  paragraph_open: "paragraph",
@@ -23,9 +48,30 @@ const NESTING_TYPES = {
23
48
  s_open: "delete",
24
49
  link_open: "link",
25
50
  };
51
+ /**
52
+ * An image label as plain text, which is what its alt text is: the text of
53
+ * every inline in it, code and entities included, an inner image by its own
54
+ * label, a soft line break as a newline and a hard one as nothing, which is
55
+ * how mdast reads a `break` node. markdown-it's own renderer drops code
56
+ * and entities from alt text; the remark hosts keep them, and the stored tree
57
+ * reads the same on both lineages.
58
+ */
59
+ const labelText = (tokens) => tokens
60
+ .map((token) => ["text", "text_special", "code_inline", "html_inline", "emoji"].includes(token.type)
61
+ ? token.content
62
+ : token.type === "image"
63
+ ? labelText(token.children ?? [])
64
+ : token.type === "softbreak"
65
+ ? "\n"
66
+ : "")
67
+ .join("");
26
68
  /** Converts the actual markdown-it tokens; it does not parse Markdown again. */
27
69
  export function tokensToAst(tokens, source, options = {}, conversion = {}) {
28
70
  const adapter = conversion.adapter ?? "cudoc-markdown-it";
71
+ const calloutTypes = new Set([
72
+ ...CONTAINER_CALLOUTS,
73
+ ...(options.calloutTypes ?? []).map((type) => type.toLowerCase()),
74
+ ]);
29
75
  const root = { type: "root", children: [] };
30
76
  const stack = [root];
31
77
  const offsets = [0];
@@ -50,10 +96,57 @@ export function tokensToAst(tokens, source, options = {}, conversion = {}) {
50
96
  const add = (node) => {
51
97
  parent().children.push(node);
52
98
  };
99
+ /** The index of the token that closes the one at `start`. */
100
+ const closing = (list, start) => {
101
+ if (list[start].nesting !== 1)
102
+ return start;
103
+ let depth = 0;
104
+ for (let i = start; i < list.length; i++) {
105
+ depth += list[i].nesting;
106
+ if (depth === 0)
107
+ return i;
108
+ }
109
+ return list.length - 1;
110
+ };
111
+ /** The close token of each open container the host renders, innermost last. */
112
+ const hostContainers = [];
113
+ const hosted = (list, start, end, inline) => add({
114
+ type: "html",
115
+ value: conversion.render(list, start, end, inline),
116
+ ...(inline ? {} : { position: position(list[start]) }),
117
+ });
118
+ const walk = (list, inline) => {
119
+ for (let i = 0; i < list.length; i++) {
120
+ const token = list[i];
121
+ if (token.nesting === -1 && hostContainers.at(-1) === token.type) {
122
+ hostContainers.pop();
123
+ hosted(list, i, i, inline);
124
+ continue;
125
+ }
126
+ if (consume(token))
127
+ continue;
128
+ if (!conversion.render)
129
+ throw new Error(`${adapter}: unsupported token ${token.type}; provide a token adapter before exporting`);
130
+ // A container the site registered opens and closes the host's way, and
131
+ // what it holds is converted like the rest of the page, so a heading
132
+ // anchor or an embed inside it is still one.
133
+ if (!inline &&
134
+ token.nesting === 1 &&
135
+ token.type.startsWith("container_")) {
136
+ hostContainers.push(token.type.replace(/_open$/, "_close"));
137
+ hosted(list, i, i, inline);
138
+ continue;
139
+ }
140
+ const end = closing(list, i);
141
+ hosted(list, i, end, inline);
142
+ i = end;
143
+ }
144
+ };
145
+ /** Converts one token, or returns false for a token nothing here maps. */
53
146
  const consume = (token) => {
54
147
  if (token.nesting === -1) {
55
148
  stack.pop();
56
- return;
149
+ return true;
57
150
  }
58
151
  if (token.type === "inline") {
59
152
  if (parent().type === "tableCell") {
@@ -73,13 +166,13 @@ export function tokensToAst(tokens, source, options = {}, conversion = {}) {
73
166
  },
74
167
  };
75
168
  }
76
- token.children?.forEach(consume);
77
- return;
169
+ walk(token.children ?? [], true);
170
+ return true;
78
171
  }
79
172
  const attrs = Object.fromEntries(token.attrs ?? []);
80
173
  const common = {
81
174
  position: position(token),
82
- ...(token.attrs?.length ? { data: { hProperties: attrs } } : {}),
175
+ ...(token.attrs?.length ? { data: { hProperties: { ...attrs } } } : {}),
83
176
  };
84
177
  const hosted = conversion.token?.(token, {
85
178
  source,
@@ -92,13 +185,16 @@ export function tokensToAst(tokens, source, options = {}, conversion = {}) {
92
185
  node = hosted;
93
186
  else if (["text", "text_special"].includes(token.type))
94
187
  node = { type: "text", value: token.content };
188
+ // markdown-it-emoji, which VitePress enables: the token holds the emoji.
189
+ else if (token.type === "emoji")
190
+ node = { type: "text", value: token.content };
95
191
  else if (token.type === "softbreak")
96
192
  node = { type: "text", value: "\n" };
97
193
  else if (token.type === "hardbreak")
98
194
  node = { type: "break" };
99
195
  else if (token.type === "code_inline")
100
196
  node = { type: "inlineCode", value: token.content };
101
- else if (["fence", "code_block"].includes(token.type))
197
+ else if (["fence", "code_block"].includes(token.type)) {
102
198
  node = {
103
199
  type: "code",
104
200
  value: token.content.replace(/\n$/, ""),
@@ -106,16 +202,32 @@ export function tokensToAst(tokens, source, options = {}, conversion = {}) {
106
202
  meta: token.info.split(/\s+/).slice(1).join(" "),
107
203
  ...common,
108
204
  };
109
- else if (token.type === "image")
205
+ conversion.origins?.set(node, token);
206
+ }
207
+ else if (token.type === "image") {
110
208
  node = {
111
209
  type: "image",
112
210
  url: String(attrs.src ?? ""),
113
- alt: token.content,
211
+ alt: labelText(token.children ?? []),
114
212
  title: attrs.title ?? null,
115
213
  ...common,
116
214
  };
117
- else if (["html_inline", "html_block"].includes(token.type))
215
+ // markdown-it keeps the alt among the attributes as a placeholder its
216
+ // renderer fills from the label, empty until then; as a hast property
217
+ // it would win over the node's own alt.
218
+ const properties = node.data?.hProperties;
219
+ if (properties) {
220
+ delete properties.alt;
221
+ if (!Object.keys(properties).length)
222
+ delete node.data;
223
+ }
224
+ }
225
+ else if (token.type === "html_inline")
226
+ node = { type: "html", value: token.content, ...common };
227
+ else if (token.type === "html_block") {
118
228
  node = { type: "html", value: token.content, ...common };
229
+ conversion.origins?.set(node, token);
230
+ }
119
231
  else if (token.type === "hr")
120
232
  node = { type: "thematicBreak", ...common };
121
233
  else if (token.type === "github_alert_open") {
@@ -126,7 +238,10 @@ export function tokensToAst(tokens, source, options = {}, conversion = {}) {
126
238
  const repeatsType = label.toLowerCase() === String(token.meta.type ?? "").toLowerCase();
127
239
  node = makeCallout(token.meta.type, label && !repeatsType ? [{ type: "text", value: label }] : [], [], position(token));
128
240
  }
129
- else if (token.type.startsWith("container_") && token.nesting === 1) {
241
+ else if (token.type.startsWith("container_") &&
242
+ token.nesting === 1 &&
243
+ (token.type === "container_details_open" ||
244
+ calloutTypes.has(token.type.slice(10, -5).toLowerCase()))) {
130
245
  const type = token.type.slice(10, -5);
131
246
  const title = token.info.trim().slice(type.length).trim();
132
247
  node =
@@ -158,10 +273,10 @@ export function tokensToAst(tokens, source, options = {}, conversion = {}) {
158
273
  else {
159
274
  if (["thead_open", "tbody_open"].includes(token.type)) {
160
275
  stack.push(parent());
161
- return;
276
+ return true;
162
277
  }
163
278
  if (!NESTING_TYPES[token.type])
164
- throw new Error(`${adapter}: unsupported token ${token.type}; provide a token adapter before exporting`);
279
+ return false;
165
280
  node = { type: NESTING_TYPES[token.type], children: [], ...common };
166
281
  if (node.type === "heading") {
167
282
  node.depth = Number(token.tag.slice(1));
@@ -169,12 +284,15 @@ export function tokensToAst(tokens, source, options = {}, conversion = {}) {
169
284
  ...node.data,
170
285
  cudoc: {
171
286
  kind: "heading",
172
- explicitId: /\{#[^}]+\}/.test(source.slice(node.position?.start.offset, node.position?.end.offset)),
287
+ explicitId: namesExplicitId(source
288
+ .slice(node.position?.start.offset, node.position?.end.offset)
289
+ .trimEnd()),
173
290
  },
174
291
  };
175
292
  }
176
293
  if (node.type === "link") {
177
294
  node.url = String(attrs.href ?? "");
295
+ node.title = attrs.title ?? null;
178
296
  // A host's heading permalink is marked here, before normalization, so
179
297
  // every transform that reads a heading's own text can exclude it. Its
180
298
  // href is corrected afterwards, once the heading id is resolved.
@@ -208,8 +326,9 @@ export function tokensToAst(tokens, source, options = {}, conversion = {}) {
208
326
  add(node);
209
327
  if (token.nesting === 1)
210
328
  stack.push(node);
329
+ return true;
211
330
  };
212
- tokens.forEach(consume);
331
+ walk(tokens, false);
213
332
  return root;
214
333
  }
215
334
  //# sourceMappingURL=tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cudoc-markdown-it",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Shared markdown-it pipeline for cudoc host adapters",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -8,7 +8,7 @@
8
8
  "url": "git+https://github.com/cudoment/cudoc.git",
9
9
  "directory": "packages/cudoc-markdown-it"
10
10
  },
11
- "homepage": "https://github.com/cudoment/cudoc/tree/main/packages/cudoc-markdown-it#readme",
11
+ "homepage": "https://github.com/cudoment/cudoc#readme",
12
12
  "bugs": {
13
13
  "url": "https://github.com/cudoment/cudoc/issues"
14
14
  },
@@ -26,7 +26,8 @@
26
26
  ".": {
27
27
  "types": "./dist/index.d.ts",
28
28
  "default": "./dist/index.js"
29
- }
29
+ },
30
+ "./package.json": "./package.json"
30
31
  },
31
32
  "files": [
32
33
  "dist",
@@ -41,10 +42,13 @@
41
42
  "clean": "rm -rf dist *.tsbuildinfo"
42
43
  },
43
44
  "dependencies": {
44
- "@cudoment/cudoc": "0.4.0"
45
+ "@types/mdast": "^4.0.4",
46
+ "@types/unist": "^3.0.3",
47
+ "@cudoment/cudoc": "0.6.0"
45
48
  },
46
49
  "peerDependencies": {
47
- "markdown-it": "^14.1.0"
50
+ "markdown-it": "^14.1.0",
51
+ "@types/markdown-it": "^14.1.0"
48
52
  },
49
53
  "devDependencies": {
50
54
  "@types/markdown-it": "^14.2.0"
@@ -52,5 +56,10 @@
52
56
  "author": "cudoment",
53
57
  "engines": {
54
58
  "node": ">=20"
59
+ },
60
+ "peerDependenciesMeta": {
61
+ "@types/markdown-it": {
62
+ "optional": true
63
+ }
55
64
  }
56
65
  }