Doctool may swallow errors due to unhandled async functions

Basically, this code is not good:

fs.readFile(filename, 'utf8', async (er, input) => {
if (er) throw er;
const content = unified()
.use(markdown)
.use(html.preprocessText)
.use(json.jsonAPI, { filename })
.use(html.firstHeader)
.use(html.preprocessElements, { filename })
.use(html.buildToc, { filename, apilinks })
.use(remark2rehype, { allowDangerousHTML: true })
.use(raw)
.use(htmlStringify)
.processSync(input);
const basename = path.basename(filename, '.md');
const myHtml = await html.toHTML({ input, content, filename, nodeVersion });
const htmlTarget = path.join(outputDir, `${basename}.html`);
fs.writeFileSync(htmlTarget, myHtml);
const jsonTarget = path.join(outputDir, `${basename}.json`);
fs.writeFileSync(jsonTarget, JSON.stringify(content.json, null, 2));
});

Issues with that:

  • Async function set as a callback (unhandled)
  • sync I/O calls inside an async function
  • unified is synchronously invoked still

This is all the direct result of f4f856b, which is the result of something else. In hindsight, I wish I payed a bit more attention in my review of that.

Unfortunately my focus is elsewhere, so someone else should probably try to clean this up.