diff options
Diffstat (limited to 'index.ts')
-rw-r--r-- | index.ts | 38 |
1 files changed, 24 insertions, 14 deletions
@@ -18,6 +18,27 @@ function splitPostHeader(postData: string): [string, string] { await fs.rm("build", { recursive: true }); await fs.mkdir("build"); +declare interface PostMetadata { + name: string; + unlisted?: boolean; + tags?: Array<string>; + description?: string; +} + +const baseTemplate = await fs.readFile("template.html", { encoding: "utf-8" }); + +function makeHtmlForPost(postMetadata: PostMetadata, markdown: string): string { + const converter = new showdown.Converter(); + const htmlPostBody = converter.makeHtml(markdown); + const variables = { + postBody: htmlPostBody, + title: postMetadata.name, + }; + return baseTemplate.replace( + /%([a-zA-Z]+)%/g, + (_, match) => variables[match] ?? `Missing variable: ${match}`, + ); +} for (let postPath of posts) { const totalPostPath = `posts/${postPath}`; @@ -27,19 +48,8 @@ for (let postPath of posts) { } const postText = await fs.readFile(totalPostPath, { encoding: "utf-8" }); const [postHeader, postBody] = splitPostHeader(postText); - const postMetadata = yaml.parse(postHeader); - const converter = new showdown.Converter(); - const htmlBody = converter.makeHtml(postBody); - - const primitiveHtmlDocument = ` -<html> - <head> - <title>${postMetadata.name}</title> - </head> - <body> - ${htmlBody} - </body> -</html>`; + const postMetadata = yaml.parse(postHeader) as PostMetadata; + const postHtml = makeHtmlForPost(postMetadata, postBody); const targetPath = `build/${postPath.replace(".md", ".html")}`; - fs.writeFile(targetPath, primitiveHtmlDocument, { encoding: "utf-8" }); + fs.writeFile(targetPath, postHtml, { encoding: "utf-8" }); } |