File tree Expand file tree Collapse file tree 4 files changed +57
-0
lines changed Expand file tree Collapse file tree 4 files changed +57
-0
lines changed Original file line number Diff line number Diff 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+ const errorMap = util .getSystemErrorMap ();
393+ const name = errorMap .get (err .errno );
394+ console .error (name); // ENOENT
395+ });
396+ ```
397+
379398## ` util.inherits(constructor, superConstructor) `
380399<!-- YAML
381400added: v0.3.0
Original file line number Diff line number Diff line change @@ -53,6 +53,13 @@ const experimentalWarnings = new SafeSet();
5353
5454const colorRegExp = / \u001b \[ \d \d ? m / g; // eslint-disable-line no-control-regex
5555
56+ let uvBinding ;
57+
58+ function lazyUv ( ) {
59+ uvBinding ??= internalBinding ( 'uv' ) ;
60+ return uvBinding ;
61+ }
62+
5663function removeColors ( str ) {
5764 return StringPrototypeReplace ( str , colorRegExp , '' ) ;
5865}
@@ -286,6 +293,10 @@ function getSystemErrorName(err) {
286293 return entry ? entry [ 0 ] : `Unknown system error ${ err } ` ;
287294}
288295
296+ function getSystemErrorMap ( ) {
297+ return lazyUv ( ) . getErrorMap ( ) ;
298+ }
299+
289300const kCustomPromisifiedSymbol = SymbolFor ( 'nodejs.util.promisify.custom' ) ;
290301const kCustomPromisifyArgsSymbol = Symbol ( 'customPromisifyArgs' ) ;
291302
@@ -442,6 +453,7 @@ module.exports = {
442453 emitExperimentalWarning,
443454 filterDuplicateStrings,
444455 getConstructorOf,
456+ getSystemErrorMap,
445457 getSystemErrorName,
446458 isError,
447459 isInsideNodeModules,
Original file line number Diff line number Diff line change @@ -67,6 +67,7 @@ const types = require('internal/util/types');
6767
6868const {
6969 deprecate,
70+ getSystemErrorMap,
7071 getSystemErrorName : internalErrorName ,
7172 promisify
7273} = require ( 'internal/util' ) ;
@@ -256,6 +257,7 @@ module.exports = {
256257 deprecate,
257258 format,
258259 formatWithOptions,
260+ getSystemErrorMap,
259261 getSystemErrorName,
260262 inherits,
261263 inspect,
Original file line number Diff line number Diff line change 1+ // Flags: --expose-internals
2+ 'use strict' ;
3+
4+ require ( '../common' ) ;
5+ const assert = require ( 'assert' ) ;
6+ const {
7+ getSystemErrorMap,
8+ _errnoException
9+ } = require ( 'util' ) ;
10+
11+ const { internalBinding } = require ( 'internal/test/binding' ) ;
12+ const uv = internalBinding ( 'uv' ) ;
13+ const uvKeys = Object . keys ( uv ) ;
14+
15+ const errMap = getSystemErrorMap ( ) ;
16+
17+ uvKeys . forEach ( ( key ) => {
18+ if ( ! key . startsWith ( 'UV_' ) )
19+ return ;
20+
21+ const err = _errnoException ( uv [ key ] ) ;
22+ const name = uv . errname ( uv [ key ] ) ;
23+ assert . strictEqual ( errMap . get ( err . errno ) [ 0 ] , name ) ;
24+ } ) ;
You can’t perform that action at this time.
0 commit comments