53 - garden-astro - Add link resolver

Create a link resolver script and hook with Github fetch integration & dev.ts script. It uses gray-matter to read each of the entries and check if each markdown link points to other web pages (after filter non-published pages), then overwrite the link with working slugs.

  • Link to other published page should work
  • Link to homepage should work on website (not working on Obsidian since it does not link to a file)
  • Link to other websites should still work since it starts with http

#offstream I also added Prettier & ESLint, then took some time to add “View Source” button, to achieve that I have to create another script to add filepath: key to frontmatter

import fs from "node:fs"
import { remark } from "remark"
import { visit } from "unist-util-visit"
import remarkFrontmatter from "remark-frontmatter"

export const addFilepath = (filePath: string) => {
  const markdown = fs.readFileSync(filePath, "utf-8")

  const processor = remark()
    .use(remarkFrontmatter)
    .use(() => (tree, file) => {
      visit(tree, "root", (node) => {
        visit(node, "yaml", (yamlNode) => {
          yamlNode.value += `\nfilepath: ${filePath}`
        })
      })
    })

  const result = processor.processSync(markdown)

  fs.writeFileSync(filePath, String(result), {
    encoding: "utf-8",
  })
}