mithril-vndb/scripts/_lint-docs/lint-relative-link.js
Claudia Meadows 0d095d1373
Rewrite docs linter
1. I want to set the stage to deal with #2898 properly.
2. `request` was deprecated years ago. Decided that it's better to just
   move to native Node.js APIs in its place.
3. `glob` was outdated, and it's easier to just toss it than to upgrade
   across a major version.
4. I switched to using Marked's "lexer" directly so I'm not fussing
   with the complexity of renderers. This of course necessitated a more
   complex file processor as its "lexer" is really an AST parser.

I also decided to go a few steps further:
- Drop the cache to simplify everything. I might reverse this later,
  but just caching URLs per-page should be enough to prevent the world
  from crashing down.
- Drop some more dependencies, so I don't have to come back to this
  later nearly as quickly.
- Upgrade to a more modern language version in the scripts.
- Update Marked. It was super outdated.
- Add line and column numbers to the warnings. That took quite a bit of
  work, thanks to a missing Marked feature plus a bug in Marked.
2024-09-23 04:54:17 -07:00

22 lines
426 B
JavaScript

"use strict"
const fs = require("fs")
const path = require("path")
/** @param {(message?: string) => void} callback */
function checkLocal(base, href, callback) {
const exec = (/^([^#?]*\.md)(?:$|\?|#)/).exec(href)
if (exec !== null) {
fs.access(path.join(base, exec[1]), (err) => {
if (err) {
callback(`Broken internal link: ${href}`)
} else {
callback()
}
})
}
}
module.exports = {
checkLocal,
}