Skip to content

Commit 08a6d9e

Browse files
eladkishontargos
authored andcommitted
util: add getSystemErrorMap() impl
PR-URL: #38101Fixes: #37951 Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Darshan Sen <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Juan José Arboleda <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent e6c599b commit 08a6d9e

File tree

4 files changed

+57
-0
lines changed

4 files changed

+57
-0
lines changed

‎doc/api/util.md‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,25 @@ fs.access('file/that/does/not/exist', (err) =>{
376376
});
377377
```
378378

379+
## `util.getSystemErrorMap()`
380+
<!-- YAML
381+
added: REPLACEME
382+
-->
383+
384+
* Returns:{Map}
385+
386+
Returns a Map of all system error codes available from the Node.js API.
387+
The mapping between error codes and error names is platform-dependent.
388+
See [Common System Errors][] for the names of common errors.
389+
390+
```js
391+
fs.access('file/that/does/not/exist', (err) =>{
392+
consterrorMap=util.getSystemErrorMap();
393+
constname=errorMap.get(err.errno);
394+
console.error(name); // ENOENT
395+
});
396+
```
397+
379398
## `util.inherits(constructor, superConstructor)`
380399
<!-- YAML
381400
added: v0.3.0

‎lib/internal/util.js‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ const experimentalWarnings = new Set();
4444

4545
constcolorRegExp=/\u001b\[\d\d?m/g;// eslint-disable-line no-control-regex
4646

47+
letuvBinding;
48+
49+
functionlazyUv(){
50+
uvBinding=uvBinding??internalBinding('uv');
51+
returnuvBinding;
52+
}
53+
4754
functionremoveColors(str){
4855
returnstr.replace(colorRegExp,'');
4956
}
@@ -271,6 +278,10 @@ function getSystemErrorName(err){
271278
returnentry ? entry[0] : `Unknown system error ${err}`;
272279
}
273280

281+
functiongetSystemErrorMap(){
282+
returnlazyUv().getErrorMap();
283+
}
284+
274285
constkCustomPromisifiedSymbol=SymbolFor('nodejs.util.promisify.custom');
275286
constkCustomPromisifyArgsSymbol=Symbol('customPromisifyArgs');
276287

@@ -414,6 +425,7 @@ module.exports ={
414425
emitExperimentalWarning,
415426
filterDuplicateStrings,
416427
getConstructorOf,
428+
getSystemErrorMap,
417429
getSystemErrorName,
418430
isError,
419431
isInsideNodeModules,

‎lib/util.js‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ const types = require('internal/util/types');
5757

5858
const{
5959
deprecate,
60+
getSystemErrorMap,
6061
getSystemErrorName: internalErrorName,
6162
promisify
6263
}=require('internal/util');
@@ -244,6 +245,7 @@ module.exports ={
244245
deprecate,
245246
format,
246247
formatWithOptions,
248+
getSystemErrorMap,
247249
getSystemErrorName,
248250
inherits,
249251
inspect,

‎test/parallel/test-uv-errmap.js‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Flags: --expose-internals
2+
'use strict';
3+
4+
require('../common');
5+
constassert=require('assert');
6+
const{
7+
getSystemErrorMap,
8+
_errnoException
9+
}=require('util');
10+
11+
const{ internalBinding }=require('internal/test/binding');
12+
constuv=internalBinding('uv');
13+
constuvKeys=Object.keys(uv);
14+
15+
consterrMap=getSystemErrorMap();
16+
17+
uvKeys.forEach((key)=>{
18+
if(!key.startsWith('UV_'))
19+
return;
20+
21+
consterr=_errnoException(uv[key]);
22+
constname=uv.errname(uv[key]);
23+
assert.strictEqual(errMap.get(err.errno)[0],name);
24+
});

0 commit comments

Comments
(0)