Refactor the scripts to work as advertised
- Correct docs generation to always fetch its dependency - Don't try to close a handle that's already been closed by other methods - Allow the release script to actually be testable.
This commit is contained in:
parent
30ad45caa1
commit
22e6d37a26
12 changed files with 483 additions and 241 deletions
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env node
|
||||
"use strict"
|
||||
|
||||
const {promises} = require("fs")
|
||||
const {promises: fs} = require("fs")
|
||||
const path = require("path")
|
||||
const {Glob} = require("glob")
|
||||
const marked = require("marked")
|
||||
|
|
@ -10,8 +10,6 @@ const babelParser = require("@babel/parser")
|
|||
// Peer dependency on `request`
|
||||
const request = require("request-promise-native")
|
||||
|
||||
require("./_command").exec(module, () => lint())
|
||||
|
||||
// lint rules
|
||||
class LintRenderer extends marked.Renderer {
|
||||
constructor(file) {
|
||||
|
|
@ -61,7 +59,8 @@ class LintRenderer extends marked.Renderer {
|
|||
}, (e) => {
|
||||
if (e.statusCode === 404) {
|
||||
this._emit(`broken external link: ${href}`)
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
if (
|
||||
e.error.code === "ERR_TLS_CERT_ALTNAME_INVALID" &&
|
||||
href.startsWith("https://")
|
||||
|
|
@ -75,11 +74,12 @@ class LintRenderer extends marked.Renderer {
|
|||
httpError(e)
|
||||
}
|
||||
}))
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
const exec = (/^([^#?]*\.md)(?:$|\?|#)/).exec(href)
|
||||
if (exec != null) {
|
||||
const resolved = path.resolve(this._dir, exec[1])
|
||||
this._awaiting.push(promises.access(resolved).catch(() => {
|
||||
this._awaiting.push(fs.access(resolved).catch(() => {
|
||||
this._emit(`broken internal link: ${href}`)
|
||||
}))
|
||||
}
|
||||
|
|
@ -100,7 +100,8 @@ class LintRenderer extends marked.Renderer {
|
|||
allowUndeclaredExports: true,
|
||||
plugins: ["dynamicImport"],
|
||||
})
|
||||
} catch (e) {
|
||||
}
|
||||
catch (e) {
|
||||
this._error = e
|
||||
}
|
||||
}
|
||||
|
|
@ -127,7 +128,8 @@ class LintRenderer extends marked.Renderer {
|
|||
"Code block possibly missing `json` language tag",
|
||||
this._block(),
|
||||
)
|
||||
} catch {
|
||||
}
|
||||
catch (_) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
|
@ -157,7 +159,16 @@ class LintRenderer extends marked.Renderer {
|
|||
}
|
||||
}
|
||||
|
||||
function lint() {
|
||||
exports.lintOne = lintOne
|
||||
async function lintOne(file) {
|
||||
const contents = await fs.readFile(file, "utf-8")
|
||||
const renderer = new LintRenderer(file)
|
||||
marked(contents, {renderer})
|
||||
return Promise.all(renderer._awaiting)
|
||||
}
|
||||
|
||||
exports.lintAll = lintAll
|
||||
function lintAll() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const glob = new Glob(path.resolve(__dirname, "../docs/**/*.md"), {
|
||||
ignore: [
|
||||
|
|
@ -170,15 +181,29 @@ function lint() {
|
|||
const awaiting = []
|
||||
|
||||
glob.on("match", (file) => {
|
||||
awaiting.push(promises.readFile(file, "utf-8").then((contents) => {
|
||||
const renderer = new LintRenderer(file)
|
||||
marked(contents, {renderer})
|
||||
return Promise.all(renderer._awaiting)
|
||||
}))
|
||||
awaiting.push(lintOne(file))
|
||||
})
|
||||
|
||||
glob.on("error", reject)
|
||||
glob.on("end", () => resolve(Promise.all(awaiting)))
|
||||
})
|
||||
}
|
||||
module.exports = lint
|
||||
|
||||
/* eslint-disable global-require */
|
||||
if (require.main === module) {
|
||||
require("./_command")({
|
||||
exec: lintAll,
|
||||
watch() {
|
||||
require("chokidar")
|
||||
.watch(path.resolve(__dirname, "../docs/**/*.md"), {
|
||||
ignore: [
|
||||
"**/change-log.md",
|
||||
"**/migration-*.md",
|
||||
"**/node_modules/**",
|
||||
],
|
||||
})
|
||||
.on("add", lintOne)
|
||||
.on("change", lintOne)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue