There are three parts to this package:
lib/render
- Render markdownlib/serve
- Serve rendered markdown files (.md
) to the public, serve draft markdown files (.draft.md
) to signed-in userslib/hook
- Watch the directory of markdown files and post to a search index URL when files are added or change
Core API looks like this:
const rootDir = path.normalize(process.env.ROOT_DIR)
const codeBlockSwaps = {}
codeBlockSwaps['youtube'] = (input) => {
return `<iframe width="560" height="315" src="https://www.youtube.com/embed/${input.replace(/^\s+|\s+$/g, '')}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>`
}
markdownServe(app, '*', rootDir, async (input) => {
return markdownRender(input, { codeBlockSwaps })
})
This will render all normal markdown, but will also turn this block into an iframe showing a YouTube video because of the codeBlockSwaps
configuration:
``` youtube
m55wVQx9oJs
```
You can configure where the markdown files are like this:
ROOT_DIR
- The directory containing the markdown files
## Setup
The functionality depends on the set up of lots of other modules so see the example for how this is done.
See ./example
for a full example, including Docker and Docker Compose.
npm run fix
- Upgraded all dependant libraries to their latest versions
- Improved the Docker example
- Renamed the files in the
lib
directory
- Refactored into middleware
- Upgraded express-mustache-overlays and express-mustache-jwt-signin
- Handle SIGTERM
- Introduced a 200ms delay on watched file events before sending them to the search index to allow all filsystem layers to be aware of the changes. Without this, you sometimes see HTML pages without the rendered markdown content being posted to the search index when the volume being changed is mounted in Docker.
- Send
remove
requests to the search index if a file is deleted or moved.
- Upgrade to
express-mustache-overlays
0.3.3 to userenderView()
. - Differentiate between private
.draft.md
pages and public.md
pages when sending them to the search index.
- Added
prepareOptions
tolib/markdown-serve.js
- Example now watches markdown files and publish them to a search index if
SEARCH_INDEX_URL
andSEARCH_AUTHORIZATION
are published.
- Initial release