Document the blog.js file but also just remove index() since it just called load.

main
Zed A. Shaw 2 years ago
parent 233aae8662
commit 85faefc5c1
  1. 32
      lib/blog.js
  2. 2
      rendered/pages/blog/index.svelte

@ -1,3 +1,10 @@
/*
* Implements a simple markdown blog loader that's used primarily in the
* `rendered/pages/blog` example. It supports generating an RSS/Atom/JSON
* feed of pages, loading an index of .md pages, and render markdown with
* the headers. It uses the `lib/docgen.js:render_with_code` to do the
* main markdown processing.
*/
import path from "path"; import path from "path";
import glob from "fast-glob"; import glob from "fast-glob";
import assert from "assert"; import assert from "assert";
@ -7,10 +14,18 @@ import { Feed } from "feed";
// have to use the client config to avoid pino crashing rollup with json errors // have to use the client config to avoid pino crashing rollup with json errors
import { base_host } from "../client/config.js"; import { base_host } from "../client/config.js";
// caches the posts so we don't load them repeatedly during runs
const POSTS = {}; const POSTS = {};
// this keeps POSTS alive, for some reason it disappears during processing // this keeps POSTS alive, for some reason it disappears during processing
process.POSTS = POSTS; process.POSTS = POSTS;
/*
Takes a directory of `.md` files and returns all of them rendered
to HTML+Metadata using `lib/docgen.js:render_with_code`.
+ `source string` -- Source directory to read.
*/
export const load = (source) => { export const load = (source) => {
assert(source !== undefined, "source for markdown processing can't be undefined"); assert(source !== undefined, "source for markdown processing can't be undefined");
// just a dumb cache to avoid reading the files over and over // just a dumb cache to avoid reading the files over and over
@ -45,6 +60,16 @@ export const load = (source) => {
} }
} }
/*
Renders the `/public/feed.rss`, `/public/feed.atom`, and `/public/feed.json` files
based on the `index_config` and posts from `load`. The `index_config` is a `.json`
file that describes the blog. The current configuration can be
found in `renderd/feed_config.json`.
+ `index_config string` -- The path to the `feed_config.json` file.
+ `posts Array` -- List of posts.
*/
export const render_feed = (index_config, posts) => { export const render_feed = (index_config, posts) => {
const index = JSON.parse(fs.readFileSync(index_config)); const index = JSON.parse(fs.readFileSync(index_config));
const feed = new Feed(index); const feed = new Feed(index);
@ -69,9 +94,4 @@ export const render_feed = (index_config, posts) => {
fs.writeFileSync('../public/feed.atom', feed.atom1()); fs.writeFileSync('../public/feed.atom', feed.atom1());
} }
export const index = (source) => { export default { load, render_feed };
assert(source !== undefined, "source must be defined");
return load(source);
}
export default { load, index, render_feed };

@ -4,7 +4,7 @@
import Icon from '$/client/components/Icon.svelte'; import Icon from '$/client/components/Icon.svelte';
import markdown from "$/lib/blog.js"; import markdown from "$/lib/blog.js";
const posts = markdown.index("rendered/posts"); const posts = markdown.load("rendered/posts");
markdown.render_feed("./feed_index.json", posts); markdown.render_feed("./feed_index.json", posts);

Loading…
Cancel
Save