@dogsbay/format-mkdocs 0.2.0-beta.127 → 0.2.0-beta.129

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/dist/importer.js CHANGED
@@ -75,7 +75,9 @@ export async function importMkdocsProject(sourceDir, opts = {}) {
75
75
  const parseOpts = {
76
76
  collapse: false,
77
77
  youtubeEmbed: true,
78
- diagrams: true,
78
+ // `content.diagrams` (false, true, "mermaid-cli" or "pele"); it was always true here, so
79
+ // `content.diagrams: false` did not reach MkDocs sources
80
+ diagrams: opts.diagrams ?? true,
79
81
  };
80
82
  // Detect mkdocstrings autodoc config
81
83
  const mkdocstringsConfig = extractMkdocstringsConfig(config.raw, sourceDir);
package/dist/loader.d.ts CHANGED
@@ -33,7 +33,7 @@ export declare function parseMkdocsMarkdown(source: string, md: MarkdownIt, opti
33
33
  collapse?: boolean;
34
34
  env?: Record<string, unknown>;
35
35
  youtubeEmbed?: boolean;
36
- diagrams?: boolean;
36
+ diagrams?: boolean | "mermaid-cli" | "pele";
37
37
  autodoc?: {
38
38
  sourceRoot: string;
39
39
  globalOptions?: Record<string, unknown>;
package/dist/loader.js CHANGED
@@ -37,9 +37,10 @@ export async function parseMkdocsMarkdown(source, md, options) {
37
37
  if (options?.youtubeEmbed) {
38
38
  liftYouTubeEmbeds(tree);
39
39
  }
40
- // Render diagram code blocks (mermaid etc.) to SVG (opt-in)
40
+ // Render diagram code blocks (mermaid etc.) to SVG (opt-in): mmdc, or Pele
41
+ // (`content.diagrams: pele`, plans/pele-diagrams.md)
41
42
  if (options?.diagrams) {
42
- await renderDiagrams(tree);
43
+ await renderDiagrams(tree, options.diagrams === "pele" ? "pele" : "mermaid-cli");
43
44
  }
44
45
  // Convert api-params HTML comments into structured TreeNodes
45
46
  convertApiParams(tree, md);
@@ -182,14 +183,31 @@ const DIAGRAM_LANGS = new Set(["mermaid"]);
182
183
  * into { type: "diagram", props: { lang: "mermaid", code: "...", svg: "..." } }.
183
184
  * Source code is preserved for round-trip export and search.
184
185
  */
185
- async function renderDiagrams(nodes) {
186
+ async function renderDiagrams(nodes, engine) {
186
187
  let renderMermaidSvg;
188
+ const failed = [];
187
189
  try {
188
- const mod = await import("./renderers/mermaid.js");
189
- renderMermaidSvg = mod.renderMermaidSvg;
190
+ if (engine === "pele") {
191
+ // format-dogsbay-md's Pele renderer: one per page, so a repeated diagram gets its own ids
192
+ const { renderPeleSvg, diagramId } = await import("@dogsbay/format-dogsbay-md");
193
+ const seen = new Map();
194
+ renderMermaidSvg = async (code) => {
195
+ const base = diagramId(code);
196
+ const n = (seen.get(base) ?? 0) + 1;
197
+ seen.set(base, n);
198
+ const r = await renderPeleSvg(code, n === 1 ? base : `${base}-${n}`);
199
+ if ("error" in r)
200
+ failed.push(r.error);
201
+ return "svg" in r ? r.svg : null;
202
+ };
203
+ }
204
+ else {
205
+ const mod = await import("./renderers/mermaid.js");
206
+ renderMermaidSvg = mod.renderMermaidSvg;
207
+ }
190
208
  }
191
209
  catch (e) {
192
- console.warn("[diagrams] could not load mermaid renderer:", e);
210
+ console.warn("[diagrams] could not load the diagram renderer:", e);
193
211
  return;
194
212
  }
195
213
  async function walk(nodes) {
@@ -217,6 +235,9 @@ async function renderDiagrams(nodes) {
217
235
  }
218
236
  }
219
237
  await walk(nodes);
238
+ if (failed.length > 0) {
239
+ console.warn(`[diagrams] Pele could not draw ${failed.length} diagram(s), left as code blocks: ${failed[0].split("\n")[0].slice(0, 160)}`);
240
+ }
220
241
  }
221
242
  /**
222
243
  * Extract heading info for table of contents.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dogsbay/format-mkdocs",
3
- "version": "0.2.0-beta.127",
3
+ "version": "0.2.0-beta.129",
4
4
  "description": "MkDocs format plugin for Dogsbay — import/export MkDocs projects via TreeNode[]",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -38,8 +38,7 @@
38
38
  "markdown-it": "^14.1.0",
39
39
  "tsx": "^4.23.1",
40
40
  "typescript": "^5.9.3",
41
- "vitest": "^4.1.10",
42
- "@dogsbay/format-dogsbay-md": "0.2.0-beta.127"
41
+ "vitest": "^4.1.10"
43
42
  },
44
43
  "license": "MIT",
45
44
  "dependencies": {
@@ -47,9 +46,10 @@
47
46
  "markdown-it-deflist": "^3.0.1",
48
47
  "nunjucks": "^3.2.4",
49
48
  "yaml": "^2.9.0",
50
- "@dogsbay/autodoc-python": "0.2.0-beta.127",
51
- "@dogsbay/types": "0.2.0-beta.127",
52
- "@dogsbay/serialize-core": "0.2.0-beta.127"
49
+ "@dogsbay/autodoc-python": "0.2.0-beta.129",
50
+ "@dogsbay/format-dogsbay-md": "0.2.0-beta.129",
51
+ "@dogsbay/serialize-core": "0.2.0-beta.129",
52
+ "@dogsbay/types": "0.2.0-beta.129"
53
53
  },
54
54
  "repository": {
55
55
  "type": "git",