forked from marijnh/Eloquent-JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcheck_links.js
More file actions
28 lines (24 loc) · 736 Bytes
/
check_links.js
File metadata and controls
28 lines (24 loc) · 736 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
let {readdirSync, readFileSync} = require("fs")
let files = Object.create(null)
for (let name of readdirSync(".")) {
let m = /^\d\d_(.*?)\.md$/.exec(name)
if (m) files[m[1]] = readFileSync(name, "utf8")
}
files.fast = files.hints = ""
let fail = 0
function error(file, msg) {
console.error(file + ": " + msg)
fail = 1
}
let link = /\]\(([\w_]+)(?:#([\w_]+))?\)/g, m
for (let file in files) {
while (m = link.exec(files[file])) {
let [_, file, anchor] = m
let target = files[file]
if (target == null)
error(file, "Unknown target file: " + file)
else if (anchor && target.indexOf("{{id " + anchor + "}}") == -1)
error(file, "Non-existing anchor: " + file + "#" + anchor)
}
}
process.exit(fail)