Skip to content

Commit 7d9ab71

Browse files
authored
fix: check docs links existance before linking (#17)
Fixes: #16
1 parent 5edac5c commit 7d9ab71

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

common.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ class Linker {
2020
#dirs = []
2121
#baseDir
2222
#docsDir
23-
constructor ({ baseDir, docsDir }) {
23+
#validateDocsLink
24+
constructor ({ baseDir, docsDir, validateDocsLink }) {
2425
this.#baseDir = baseDir
2526
this.#docsDir = docsDir
27+
this.#validateDocsLink = validateDocsLink ?? (() => true)
2628
}
2729

2830
async getLinks (allDirectories, readDir) {
@@ -38,7 +40,7 @@ class Linker {
3840
})
3941
.filter(Boolean)
4042

41-
this.#makeDocsLinks(allDirs.map((d) => d.raw))
43+
await this.#makeDocsLinks(allDirs.map((d) => d.raw))
4244

4345
this.#dirs = allDirs.filter((d) => semver.satisfies(d, '~0.10 || ~0.12 || >= 1.0')).map((d) => d.raw)
4446
this.#dirs.sort((d1, d2) => semver.compare(d1, d2))
@@ -70,15 +72,17 @@ class Linker {
7072
return this.#links
7173
}
7274

73-
#makeDocsLinks (versions) {
75+
async #makeDocsLinks (versions) {
7476
if (!this.#docsDir) {
7577
return
7678
}
7779

7880
for (const version of versions) {
7981
const src = path.join(this.#baseDir, version, 'docs')
8082
const dst = path.join(this.#docsDir, version)
81-
this.#links.set(dst, src)
83+
if (await this.#validateDocsLink(src)) {
84+
this.#links.set(dst, src)
85+
}
8286
}
8387
}
8488

latest-linker.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,16 @@ if (process.argv.length < 3) {
1212
}
1313

1414
const dir = path.resolve(process.argv[2])
15-
const docsDir = process.argv[3] && path.resolve(process.argv[3]);
15+
const docsDir = process.argv[3] && path.resolve(process.argv[3])
16+
17+
async function validateDocsLink (src) {
18+
try {
19+
const stat = await fs.stat(src)
20+
return stat.isDirectory()
21+
} catch {
22+
return false
23+
}
24+
}
1625

1726
(async function main () {
1827
/* c8 ignore next 3 */
@@ -26,7 +35,7 @@ const docsDir = process.argv[3] && path.resolve(process.argv[3]);
2635
}
2736

2837
const allDirs = (await fs.readdir(dir, { withFileTypes: true })).filter((d) => d.isDirectory()).map((d) => d.name)
29-
const linker = new Linker({ baseDir: dir, docsDir })
38+
const linker = new Linker({ baseDir: dir, docsDir, validateDocsLink })
3039
const links = await linker.getLinks(allDirs, fs.readdir)
3140
for (const [dest, src] of links) {
3241
await fs.unlink(dest).catch(() => {})

0 commit comments

Comments
 (0)