Universal API for creating Node.js errors
This package provides a universal API for creating Node.js errors.
This package is designed to help developers build ponyfills, as well as more verbose tools like
mlly, by providing a set of utilities and constructor functions for creating Node.js errors.
This package is ESM only.
In Node.js (version 18+) with yarn:
yarn add @flex-development/errnodeSee Git - Protocols | Yarn for details regarding installing from Git.
In Deno with esm.sh:
import{ERR_MODULE_NOT_FOUND}from'https://esm.sh/@flex-development/errnode'In browsers with esm.sh:
<scripttype="module">import{ERR_MODULE_NOT_FOUND}from'https://esm.sh/@flex-development/errnode'</script>Say we have the file example.mjs:
import{ERR_INVALID_ARG_TYPE,isNodeError}from'@flex-development/errnode'/** * Ensure `value` is a string. * * @see {@linkcode ErrInvalidArgType} * * @param {unknown} value * Value supplied by user * @param {string} name * Name of invalid argument or property * @return {value is string} * `true` if `value` is a string * @throws {import('@flex-development/errnode').ErrInvalidArgType} * If `value` is not a string */functionvalidateString(value,name){if(typeofvalue==='string')returntruethrownewERR_INVALID_ARG_TYPE(name,'string',value)}try{validateString(null,'path')}catch(e){console.log('isNodeError:',isNodeError(e))console.log('TypeError:',einstanceofTypeError,'\n')throwe}...running node example.mjs yields:
isNodeError: true
TypeError: true
file:///node_modules/@flex-development/errnode/dist/internal/stack-trace.mjs:9
Error.captureStackTrace(error);
^
TypeError: The 'path' argument must be of type string. Received null
at __node_internal_captureLargerStackTrace (file:///node_modules/@flex-development/errnode/dist/internal/stack-trace.mjs:9:9)
at new NodeError (file:///node_modules/@flex-development/errnode/dist/e.mjs:50:45)
at validateString (file:///example.mjs:19:9)
at file:///example.mjs:23:3
at ModuleJob.run (node:internal/modules/esm/module_job:234:25)
at async ModuleLoader.import (node:internal/modules/esm/loader:473:24)
at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:123:5) {
code: 'ERR_INVALID_ARG_TYPE'
}This package exports the following identifiers:
EcodesdetermineSpecificTypeerrorsERR_ARG_NOT_ITERABLEERR_ENCODING_NOT_SUPPORTEDERR_IMPORT_ASSERTION_TYPE_FAILEDERR_IMPORT_ASSERTION_TYPE_MISSINGERR_IMPORT_ASSERTION_TYPE_UNSUPPORTEDERR_IMPORT_ATTRIBUTE_MISSINGERR_IMPORT_ATTRIBUTE_TYPE_INCOMPATIBLEERR_IMPORT_ATTRIBUTE_UNSUPPORTEDERR_INCOMPATIBLE_OPTION_PAIRERR_INVALID_ARG_TYPEERR_INVALID_ARG_VALUEERR_INVALID_FILE_URL_HOSTERR_INVALID_FILE_URL_PATHERR_INVALID_MODULE_SPECIFIERERR_INVALID_PACKAGE_CONFIGERR_INVALID_PACKAGE_TARGETERR_INVALID_RETURN_VALUEERR_INVALID_THISERR_INVALID_TUPLEERR_INVALID_URL_SCHEMEERR_INVALID_URLERR_METHOD_NOT_IMPLEMENTEDERR_MISSING_ARGSERR_MISSING_OPTIONERR_MODULE_NOT_FOUNDERR_NETWORK_IMPORT_DISALLOWEDERR_NO_CRYPTOERR_NO_ICUERR_OPERATION_FAILEDERR_PACKAGE_IMPORT_NOT_DEFINEDERR_PACKAGE_PATH_NOT_EXPORTEDERR_UNHANDLED_ERRORERR_UNKNOWN_BUILTIN_MODULEERR_UNKNOWN_ENCODINGERR_UNKNOWN_FILE_EXTENSIONERR_UNKNOWN_MODULE_FORMATERR_UNSUPPORTED_DIR_IMPORTERR_UNSUPPORTED_ESM_URL_SCHEMEERR_UNSUPPORTED_RESOLVE_REQUEST
formatListhideStackFramesisNodeErrorsyscodes
There is no default export.
Constructor functions representing Node.js error codes. Constructor arguments are used to build error messages.
Errors (and their types) can be imported individually:
import{ERR_INVALID_MODULE_SPECIFIER,ERR_INVALID_PACKAGE_CONFIG,ERR_INVALID_PACKAGE_TARGET,ERR_MODULE_NOT_FOUND,ERR_PACKAGE_IMPORT_NOT_DEFINED,ERR_PACKAGE_PATH_NOT_EXPORTED,ERR_UNSUPPORTED_DIR_IMPORT,typeErrInvalidModuleSpecifier,typeErrInvalidModuleSpecifierArgs,typeErrInvalidModuleSpecifierConstructor,typeErrInvalidPackageConfig,typeErrInvalidPackageConfigArgs,typeErrInvalidPackageConfigConstructor,typeErrInvalidPackageTarget,typeErrInvalidPackageTargetArgs,typeErrInvalidPackageTargetConstructor,typeErrModuleNotFound,typeErrModuleNotFoundArgs,typeErrModuleNotFoundConstructor,typeErrPackageImportNotDefined,typeErrPackageImportNotDefinedArgs,typeErrPackageImportNotDefinedConstructor,typeErrPackagePathNotExported,typeErrPackagePathNotExportedArgs,typeErrPackagePathNotExportedConstructor,typeErrUnsupportedDirImport,typeErrUnsupportedDirImportConstructor}from'@flex-development/errnode'...or all at once using the errors export:
import{errors}from'@flex-development/errnode'See the source code for documentation.
Note: This package does not export a constructor for every error. Submit a feature request (or pull request if
you're up for the challenge 😉) to add a constructor.
E can be used instead, however.
Create a Node.js error constructor.
Constructor arguments are passed to format if the error message is a string, or message itself if it is
a function. Message functions are also called with the new Node.js error instance as this.
functionE<TextendsNodeErrorConstructor>(code: T['prototype']['code'],Base: ErrorConstructor,message: MessageFn<T['prototype'],Parameters<T>>|string): TfunctionE<TextendsNodeError,Argsextendsany[]=any[]>(code: T['code'],Base: ErrorConstructor,message: MessageFn<T,Args>): NodeErrorConstructor<T,Args>code(Code) — error codeBase(ErrorConstructor) — base classmessage(MessageFn|string) — error message string or function
(NodeErrorConstructor) NodeError constructor.
Node.js error codes.
See NODE_VERSIONS for a list of supported Node.js versions.
Determine the specific type of a value for type-mismatch errors.
value(unknown) — value to check
(string) specific type of value.
Create a list string in the form 'A and B' or 'A, B, ..., and Z.
list(string | readonly string[]) — list to formattype('and' | 'or' | null | undefined, optional) — list transition type to insert before last element- default:
'and'
- default:
(string) formatted list.
Remove unnecessary frames from Node.js core errors.
T(Fn) — function to wrap
fn(T) — function to wrap
(T) the wrapped function.
Check if value is a NodeError.
value(unknown) — value to check
(value is NodeError) true if value is NodeError, false otherwise.
System error codes.
See NODE_VERSIONS for a list of supported Node.js versions.
This package is fully typed with TypeScript.
Union of registered codes that can occur where a node error code is expected (TypeScript type).
To register new codes, augment NodeErrorMap. They will be added to this union automatically.
typeCode=Extract<keyofNodeErrorMap,string>Node.js exception object (TypeScript interface).
T(SystemCode, optional) — system error code- default:
SystemCode
- default:
Error
code(T) — system error codeerrno(number) — libuv error numbermessage(string) — error message, always prefixed bysyscallandcodepath?(string | undefined) — relevant invalid pathnamesyscall(string) — failed syscall description
Build an error message.
T(NodeError, optional) — node error- default:
NodeError
- default:
Args(readonly any[], optional) — message arguments- default:
any[]
- default:
this(T) — node error object...args(Args) — message arguments
(string) error message.
Node.js error constructor (TypeScript interface).
T(NodeError, optional) — node error- default:
NodeError
- default:
Args(readonly any[], optional) — message arguments- default:
any[]
- default:
new (...args: Args): T(...args: Args): T
prototype(T) — node.js error prototype
Registry of Node.js error codes (TypeScript interface).
When developing utilities that use more codes, augment NodeErrorMap to register those codes:
declare module '@flex-development/errnode'{interfaceNodeErrorMap{ERR_CUSTOM: true}}Node.js error object (TypeScript interface).
T(Code, optional) — error code- default:
Code
- default:
Error
code(T) — error codetoString(() => string) — get a string representation of the error
A value with a toString method (TypeScript interface).
toString(() => string) — get a string representation of the value
Union of registered codes that can occur where a system error code is expected (TypeScript type).
To register new codes, augment SystemErrorMap. They will be added to this union automatically.
typeSystemCode=Extract<keyofSystemErrorMap,string>Registry of system error codes (TypeScript interface).
When developing utilities that use more codes, augment SystemErrorMap to register those codes:
declare module '@flex-development/errnode'{interfaceSystemErrorMap{ECUSTOM: true}}See CONTRIBUTING.md.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.