summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authortpoisseau <theotime.poisseau@gmail.com>2019-10-24 12:14:45 +0200
committerMichaël Zasso <targos@protonmail.com>2019-10-27 10:08:22 +0100
commitf035f557d772d59434027b49746bd4d67796a6e4 (patch)
tree2b06855e983616a171a36b2179a423f68f1f3a4f /tools
parent72346bd8d43477273419049ab68a5c6611480a92 (diff)
downloadandroid-node-v8-f035f557d772d59434027b49746bd4d67796a6e4.tar.gz
android-node-v8-f035f557d772d59434027b49746bd4d67796a6e4.tar.bz2
android-node-v8-f035f557d772d59434027b49746bd4d67796a6e4.zip
tools: doc: improve async workflow of generate.js
Use fs.promises for read and write file Use unified().process wich is async instead processSync html and json are write in parallel errors are logged and exit process with `1` code Fixes: https://github.com/nodejs/node/issues/30090 PR-URL: https://github.com/nodejs/node/pull/30106 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/doc/generate.js89
-rw-r--r--tools/doc/package.json2
2 files changed, 58 insertions, 33 deletions
diff --git a/tools/doc/generate.js b/tools/doc/generate.js
index 7be5f3f73f..cd85d53657 100644
--- a/tools/doc/generate.js
+++ b/tools/doc/generate.js
@@ -21,7 +21,7 @@
'use strict';
-const fs = require('fs');
+const { promises: fs } = require('fs');
const path = require('path');
const unified = require('unified');
const markdown = require('remark-parse');
@@ -41,36 +41,35 @@ let nodeVersion = null;
let outputDir = null;
let apilinks = {};
-args.forEach((arg) => {
- if (!arg.startsWith('--')) {
- filename = arg;
- } else if (arg.startsWith('--node-version=')) {
- nodeVersion = arg.replace(/^--node-version=/, '');
- } else if (arg.startsWith('--output-directory=')) {
- outputDir = arg.replace(/^--output-directory=/, '');
- } else if (arg.startsWith('--apilinks=')) {
- const linkFile = arg.replace(/^--apilinks=/, '');
- const data = fs.readFileSync(linkFile, 'utf8');
- if (!data.trim()) {
- throw new Error(`${linkFile} is empty`);
+async function main() {
+ for (const arg of args) {
+ if (!arg.startsWith('--')) {
+ filename = arg;
+ } else if (arg.startsWith('--node-version=')) {
+ nodeVersion = arg.replace(/^--node-version=/, '');
+ } else if (arg.startsWith('--output-directory=')) {
+ outputDir = arg.replace(/^--output-directory=/, '');
+ } else if (arg.startsWith('--apilinks=')) {
+ const linkFile = arg.replace(/^--apilinks=/, '');
+ const data = await fs.readFile(linkFile, 'utf8');
+ if (!data.trim()) {
+ throw new Error(`${linkFile} is empty`);
+ }
+ apilinks = JSON.parse(data);
}
- apilinks = JSON.parse(data);
}
-});
-nodeVersion = nodeVersion || process.version;
-
-if (!filename) {
- throw new Error('No input file specified');
-} else if (!outputDir) {
- throw new Error('No output directory specified');
-}
+ nodeVersion = nodeVersion || process.version;
+ if (!filename) {
+ throw new Error('No input file specified');
+ } else if (!outputDir) {
+ throw new Error('No output directory specified');
+ }
-fs.readFile(filename, 'utf8', async (er, input) => {
- if (er) throw er;
+ const input = await fs.readFile(filename, 'utf8');
- const content = unified()
+ const content = await unified()
.use(markdown)
.use(html.preprocessText)
.use(json.jsonAPI, { filename })
@@ -80,14 +79,40 @@ fs.readFile(filename, 'utf8', async (er, input) => {
.use(remark2rehype, { allowDangerousHTML: true })
.use(raw)
.use(htmlStringify)
- .processSync(input);
-
- const basename = path.basename(filename, '.md');
+ .process(input);
const myHtml = await html.toHTML({ input, content, filename, nodeVersion });
+ const basename = path.basename(filename, '.md');
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));
-});
+
+ return Promise.allSettled([
+ fs.writeFile(htmlTarget, myHtml),
+ fs.writeFile(jsonTarget, JSON.stringify(content.json, null, 2)),
+ ]);
+}
+
+main()
+ .then((tasks) => {
+ // Filter rejected tasks
+ const errors = tasks.filter(({ status }) => status === 'rejected')
+ .map(({ reason }) => reason);
+
+ // Log errors
+ for (const error of errors) {
+ console.error(error);
+ }
+
+ // Exit process with code 1 if some errors
+ if (errors.length > 0) {
+ return process.exit(1);
+ }
+
+ // Else with code 0
+ process.exit(0);
+ })
+ .catch((error) => {
+ console.error(error);
+
+ process.exit(1);
+ });
diff --git a/tools/doc/package.json b/tools/doc/package.json
index 1d2953b023..11f6c76c91 100644
--- a/tools/doc/package.json
+++ b/tools/doc/package.json
@@ -4,7 +4,7 @@
"description": "Internal tool for generating Node.js API docs",
"version": "0.0.0",
"engines": {
- "node": ">=6"
+ "node": ">=12.10.0"
},
"dependencies": {
"rehype-raw": "^2.0.0",