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
unifiedis 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.