add readme

This commit is contained in:
Travis Shears 2026-03-20 12:35:44 +01:00
parent 5848b471ec
commit 0a6fb0e954
Signed by: travisshears
GPG key ID: CB9BF1910F3F7469
4 changed files with 67 additions and 7 deletions

View file

@ -1,15 +1,65 @@
# mermaid-diagram-creator # mermaid-diagram-creator
To install dependencies: A CLI tool to convert Mermaid diagram files (.mmd) to SVG format.
## Features
- Convert Mermaid diagram text files to SVG
- Easy command-line interface
- Fast rendering with `beautiful-mermaid`
- Input validation with Zod
## Installation
### 1. Set up the project
```bash ```bash
bun install bun install
``` ```
To run: ### 2. Create symlink to your user bin directory
```bash ```bash
bun run index.ts ln -s /Users/my_user_name/project_dir/mermaid-diagram-creator/bin/mmd-to-svg ~/.local/bin/mmd-to-svg
``` ```
This project was created using `bun init` in bun v1.2.21. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime. ## Usage
```bash
mmd-to-svg <input.mmd> <output.svg>
```
### Hot Reloading
Using [entr](https://github.com/eradman/entr)
```bash
echo docs/diagrams/create_thing.mmd | entr mmd-to-svg ./docs/diagrams/create_thing.mmd ./docs/diagrams/create.svg
```
### Example
```bash
mmd-to-svg example.mmd diagram.svg
```
This will read the Mermaid diagram from `example.mmd` and output the rendered SVG to `diagram.svg`.
### Example diagram file (example.mmd)
```mermaid
graph TD
A[Start] --> B{Decision}
B -->|Yes| C[Action]
B -->|No| D[End]
```
## Development
Run directly:
```bash
bun index.ts example.mmd output.svg
```
Built with [Bun](https://bun.com) - a fast all-in-one JavaScript runtime.

View file

@ -5,6 +5,7 @@
"name": "mermaid-diagram-creator", "name": "mermaid-diagram-creator",
"dependencies": { "dependencies": {
"beautiful-mermaid": "^1.1.3", "beautiful-mermaid": "^1.1.3",
"zod": "^4.3.6",
}, },
"devDependencies": { "devDependencies": {
"@types/bun": "latest", "@types/bun": "latest",
@ -30,5 +31,7 @@
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
"undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="],
"zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="],
} }
} }

View file

@ -1,3 +1,4 @@
import { z } from "zod";
import { renderMermaidSVG } from "beautiful-mermaid"; import { renderMermaidSVG } from "beautiful-mermaid";
const args = process.argv.slice(2); const args = process.argv.slice(2);
@ -8,7 +9,10 @@ if (args.length < 2) {
process.exit(1); process.exit(1);
} }
const [inputPath, outputPath] = args; const argsSchema = z.tuple([z.string(), z.string()]);
const parsed = argsSchema.parse(args);
const [inputPath, outputPath] = parsed;
try { try {
// Read the .mmd file // Read the .mmd file
@ -25,7 +29,9 @@ try {
if (error instanceof Error && "code" in error && error.code === "ENOENT") { if (error instanceof Error && "code" in error && error.code === "ENOENT") {
console.error(`✗ Input file not found: ${inputPath}`); console.error(`✗ Input file not found: ${inputPath}`);
} else { } else {
console.error(`✗ Error: ${error instanceof Error ? error.message : String(error)}`); console.error(
`✗ Error: ${error instanceof Error ? error.message : String(error)}`,
);
} }
process.exit(1); process.exit(1);
} }

View file

@ -10,6 +10,7 @@
"typescript": "^5" "typescript": "^5"
}, },
"dependencies": { "dependencies": {
"beautiful-mermaid": "^1.1.3" "beautiful-mermaid": "^1.1.3",
"zod": "^4.3.6"
} }
} }