add readme
This commit is contained in:
parent
5848b471ec
commit
0a6fb0e954
4 changed files with 67 additions and 7 deletions
58
README.md
58
README.md
|
|
@ -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.
|
||||||
|
|
|
||||||
3
bun.lock
3
bun.lock
|
|
@ -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=="],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
10
index.ts
10
index.ts
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
"typescript": "^5"
|
"typescript": "^5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"beautiful-mermaid": "^1.1.3"
|
"beautiful-mermaid": "^1.1.3",
|
||||||
|
"zod": "^4.3.6"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue