Product
md-docs is a cli tool which generates a static website by resolving files recursivly from a source folder.
See the test set for more information.
This script copies every file and directory from the docs directory into the dist directory and transforms every *.md
file into a html file while adding the following features:
- Every *.md is transformed in a static web page;
- Every *.email.md is transformed in a static document web page;
- Every *.message.md is transformed in a static document web page and PDF;
- Every index.md is added to the menu;
- Every heading is automatically converted into a container;
- Every
*.model.yml
anchor is automatically converted into a model viewer; - Every
*.bpmn
anchor is automatically converted into a BPMN.io viewer; - Every
*openapi.yaml
anchor is automatically converted into a HTML documentation page; - Every
*.feature
anchor is automatically converted into a feature details list; - Every
*.dashboard.yaml
anchor is automatically converted into a BDD dashboard; - Every
*.user-task.yaml
anchor is automatically converted into a user-interface; - Every
*.puml
filer is automatically converted into an SVG image file; - Every
*.drawio
file is automatically into an SVG image file; - Every
*.java
, *.cs
, *.ts
, *.js
, *.json
, *.py
, *.yml
, *.yml
anchor is automatically converted in a code block; - Every markdown anchor is automatically converted into an HTML link;
- Every markdown anchor which starts with a
_
is automatically added to the markdown file; - Every git branch is added to the git menu;
- Test executions are automatically parsed in feature files;
- Unsorted list with items which reference the files above are automatically converted in tab panels;
- Images are wrapped in figures;
- Images can be aligned by adding align=center or align=left or align=right to the URL;
- Markdown is transformed into HTML using markdow-it, the following plugins are installed:
All links are relative, so you do not need a web server.
Architecture
The application is written in node js and implements a plug in architecture. It uses Awilix under the hood for dependency resolving. Plugins can be used by extending App and adding or replacing service registrations.
There are several plugin strategies:
- add or change the file parsers;
- add or change the HTML parsers;
- add or change the anchor parsers;
- change components;
- change component render functions;
const App = require('md-docs-cli/app');
module.exports = class MyApp extends App {
constructor(options) {
super(options);
}
_getServices(options) {
const services = super(options);
services['newFileParser'] = asClass(NewFileParser).singleton();
services.fileParsers.push('newFileParser');
services['newHtmlParser'] = asClass(NewHtmlParser).singleton();
services.htmlParsers.push('newHtmlParser');
services['newAnchorParser'] = asClass(NewAnchorParser).singleton();
services.anchorParsers.push('newAnchorParser');
services.pageComponent = asClass(MyPageComponent).singleton();
services.pageComponentRenderFn = asValue((data) => '<html />');
return services;
}
}
To get started
npm install @biz-dev-ops/md-docs -g
mkdir ../documentation
cd documentation
mkdir docs
echo "# It works!" > docs/index.md
md-docs
google-chrome dist/index.html
Pupteer
Pupeteer requires a chromium browser to operate. By default pupeteer will try to install a chromium browser. Create the folowing environment variables if you want to use your own chrome / chromium browser:
- PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
- PUPPETEER_EXECUTABLE_PATH={path to chrome / chromium executable}
Java
md-docs depends on java to render UML diagrams. Make sure that the java is installed and that the bin folder is added to path environment variable.
Options
branches only
md-docs -b
Custom theme
You can override all assets files by adding the same files to docs folder: docs/assets/style/custom-theme.css can then be overwritten by a custom theme implementation.
Skip branches
md-docs -s branch1 branch2
To debug
Set the environment to development. All intermediate steps are saved as files in the dist directory.
export NODE_ENV=development