diff --git a/doc/api/errors.md b/doc/api/errors.md
index 72e61c49bb970a..f34b53e0110598 100644
--- a/doc/api/errors.md
+++ b/doc/api/errors.md
@@ -1848,6 +1848,204 @@ Creation of a [`zlib`][] object failed due to incorrect configuration.
A module file could not be resolved while attempting a [`require()`][] or
`import` operation.
+## Legacy Node.js Error Codes
+
+> Stability: 0 - Deprecated. These error codes are either inconsistent, or have
+> been removed.
+
+
+### ERR_HTTP2_FRAME_ERROR
+
+
+Used when a failure occurs sending an individual frame on the HTTP/2
+session.
+
+
+### ERR_HTTP2_HEADERS_OBJECT
+
+
+Used when an HTTP/2 Headers Object is expected.
+
+
+### ERR_HTTP2_HEADER_REQUIRED
+
+
+Used when a required header is missing in an HTTP/2 message.
+
+
+### ERR_HTTP2_INFO_HEADERS_AFTER_RESPOND
+
+
+HTTP/2 informational headers must only be sent *prior* to calling the
+`Http2Stream.prototype.respond()` method.
+
+
+### ERR_HTTP2_STREAM_CLOSED
+
+
+Used when an action has been performed on an HTTP/2 Stream that has already
+been closed.
+
+
+### ERR_HTTP_INVALID_CHAR
+
+
+Used when an invalid character is found in an HTTP response status message
+(reason phrase).
+
+
+### ERR_NAPI_CONS_PROTOTYPE_OBJECT
+
+
+Used by the `N-API` when `Constructor.prototype` is not an object.
+
+
+### ERR_OUTOFMEMORY
+
+
+Used generically to identify that an operation caused an out of memory
+condition.
+
+
+### ERR_PARSE_HISTORY_DATA
+
+
+The `repl` module was unable to parse data from the REPL history file.
+
+
+### ERR_STREAM_READ_NOT_IMPLEMENTED
+
+
+Used when an attempt is made to use a readable stream that has not implemented
+[`readable._read()`][].
+
+
+### ERR_TLS_RENEGOTIATION_FAILED
+
+
+Used when a TLS renegotiation request has failed in a non-specific way.
+
+
+### ERR_UNKNOWN_BUILTIN_MODULE
+
+
+The `'ERR_UNKNOWN_BUILTIN_MODULE'` error code is used to identify a specific
+kind of internal Node.js error that should not typically be triggered by user
+code. Instances of this error point to an internal bug within the Node.js
+binary itself.
+
+
+### ERR_VALUE_OUT_OF_RANGE
+
+
+Used when a given value is out of the accepted range.
+
+
+### ERR_ZLIB_BINDING_CLOSED
+
+
+Used when an attempt is made to use a `zlib` object after it has already been
+closed.
+
+### Other error codes
+
+These errors have never been released, but had been present on master between
+releases.
+
+
+#### ERR_FS_WATCHER_ALREADY_STARTED
+
+An attempt was made to start a watcher returned by `fs.watch()` that has
+already been started.
+
+
+#### ERR_FS_WATCHER_NOT_STARTED
+
+An attempt was made to initiate operations on a watcher returned by
+`fs.watch()` that has not yet been started.
+
+
+#### ERR_HTTP2_ALREADY_SHUTDOWN
+
+Occurs with multiple attempts to shutdown an HTTP/2 session.
+
+
+#### ERR_HTTP2_ERROR
+
+A non-specific HTTP/2 error has occurred.
+
+
+#### ERR_INVALID_REPL_HISTORY
+
+Used in the `repl` in case the old history file is used and an error occurred
+while trying to read and parse it.
+
+
+#### ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK
+
+Used when an [ES6 module][] loader hook specifies `format: 'dynamic'` but does
+not provide a `dynamicInstantiate` hook.
+
+
+#### ERR_STREAM_HAS_STRINGDECODER
+
+Used to prevent an abort if a string decoder was set on the Socket.
+
+```js
+const Socket = require('net').Socket;
+const instance = new Socket();
+
+instance.setEncoding('utf8');
+```
+
+
+#### ERR_STRING_TOO_LARGE
+
+An attempt has been made to create a string larger than the maximum allowed
+size.
+
[`--force-fips`]: cli.html#cli_force_fips
[`'uncaughtException'`]: process.html#process_event_uncaughtexception
[`child_process`]: child_process.html
@@ -1875,6 +2073,7 @@ A module file could not be resolved while attempting a [`require()`][] or
[`new URLSearchParams(iterable)`]: url.html#url_constructor_new_urlsearchparams_iterable
[`process.send()`]: process.html#process_process_send_message_sendhandle_options_callback
[`process.setUncaughtExceptionCaptureCallback()`]: process.html#process_process_setuncaughtexceptioncapturecallback_fn
+[`readable._read()`]: stream.html#stream_readable_read_size_1
[`require()`]: modules.html#modules_require
[`require('crypto').setEngine()`]: crypto.html#crypto_crypto_setengine_engine_flags
[`server.listen()`]: net.html#net_server_listen
diff --git a/tools/doc/common.js b/tools/doc/common.js
index 4dfadd353d9ec8..7d8aefb65d84fd 100644
--- a/tools/doc/common.js
+++ b/tools/doc/common.js
@@ -34,6 +34,10 @@ function extractAndParseYAML(text) {
meta.deprecated = arrify(meta.deprecated);
}
+ if (meta.removed) {
+ meta.removed = arrify(meta.removed);
+ }
+
meta.changes = meta.changes || [];
return meta;
diff --git a/tools/doc/html.js b/tools/doc/html.js
index d65a4b323aef36..f1ac9e144e61e1 100644
--- a/tools/doc/html.js
+++ b/tools/doc/html.js
@@ -264,6 +264,7 @@ function parseYAML(text) {
const added = { description: '' };
const deprecated = { description: '' };
+ const removed = { description: '' };
if (meta.added) {
added.version = meta.added.join(', ');
@@ -276,9 +277,15 @@ function parseYAML(text) {
`Deprecated since: ${deprecated.version}`;
}
+ if (meta.removed) {
+ removed.version = meta.removed.join(', ');
+ removed.description = `Removed in: ${removed.version}`;
+ }
+
if (meta.changes.length > 0) {
if (added.description) meta.changes.push(added);
if (deprecated.description) meta.changes.push(deprecated);
+ if (removed.description) meta.changes.push(removed);
meta.changes.sort((a, b) => versionSort(a.version, b.version));
@@ -299,7 +306,8 @@ function parseYAML(text) {
result += '\n\n';
} else {
- result += `${added.description}${deprecated.description}\n`;
+ result += `${added.description}${deprecated.description}` +
+ `${removed.description}\n`;
}
if (meta.napiVersion) {