{"id":15819483,"url":"https://github.com/xunnamius/error-utils","last_synced_at":"2026-03-12T14:13:24.605Z","repository":{"id":39598438,"uuid":"301281392","full_name":"Xunnamius/error-utils","owner":"Xunnamius","description":"🛑 Create Error subclasses with powerful cross-realm instanceof checks and human-readable names that survive transpilation/minification and show up in stack traces","archived":false,"fork":false,"pushed_at":"2025-08-29T14:04:20.000Z","size":1495,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-29T23:53:12.375Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://npm.im/@-xun/error","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Xunnamius.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-05T03:15:22.000Z","updated_at":"2025-07-10T06:41:53.000Z","dependencies_parsed_at":"2023-12-04T05:23:45.876Z","dependency_job_id":"2c6881cd-3899-4897-bdb3-0a682f17a98d","html_url":"https://github.com/Xunnamius/error-utils","commit_stats":{"total_commits":53,"total_committers":2,"mean_commits":26.5,"dds":"0.018867924528301883","last_synced_commit":"4df5eef9df535a0eac20c06dabe9b8da5383b9a2"},"previous_names":["xunnamius/error-utils","xunnamius/named-app-errors"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/Xunnamius/error-utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Ferror-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Ferror-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Ferror-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Ferror-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Xunnamius","download_url":"https://codeload.github.com/Xunnamius/error-utils/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xunnamius%2Ferror-utils/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273707132,"owners_count":25153702,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app","apperror","application","class","error","errors","extensible","fetcherror","generic","named","notauthorizederror","notfounderror","stack","trace","typed","validationerror"],"created_at":"2024-10-05T06:41:18.950Z","updated_at":"2026-03-12T14:13:24.595Z","avatar_url":"https://github.com/Xunnamius.png","language":"TypeScript","funding_links":["https://github.com/sponsors/Xunnamius"],"categories":[],"sub_categories":[],"readme":"\u003c!-- symbiote-template-region-start 1 --\u003e\n\n\u003cp align=\"center\" width=\"100%\"\u003e\n  \u003cimg width=\"300\" src=\"https://raw.githubusercontent.com/Xunnamius/error-utils/refs/heads/main/logo.png\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\" width=\"100%\"\u003e\n\u003c!-- symbiote-template-region-end --\u003e\nTypeScript error handling DX/UX improvements capable of surviving minification.\n\u003c!-- symbiote-template-region-start 2 --\u003e\n\u003c/p\u003e\n\n\u003chr /\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Black Lives Matter!][x-badge-blm-image]][x-badge-blm-link]\n[![Last commit timestamp][x-badge-lastcommit-image]][x-badge-repo-link]\n[![Codecov][x-badge-codecov-image]][x-badge-codecov-link]\n[![Source license][x-badge-license-image]][x-badge-license-link]\n[![Uses Semantic Release!][x-badge-semanticrelease-image]][x-badge-semanticrelease-link]\n\n[![NPM version][x-badge-npm-image]][x-badge-npm-link]\n[![Monthly Downloads][x-badge-downloads-image]][x-badge-downloads-link]\n\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n# @-xun/error\n\n\u003c!-- symbiote-template-region-end --\u003e\n\nThis tiny library provides so-called \"named errors,\" which are normal [Error][1]\nclasses (compatible with all JS runtimes) with some slight tweaks to improve\noverall handling safety, improve DX for the developers that work with these\nclasses, and improve UX for the users that might encounter them.\n\nMore specifically, this library returns a factory function\n([`makeNamedError`][6]) capable of creating custom [Error][1] subclasses with\npowerful [cross][4]-[package][5] [cross-realm instanceof checks][3] and\nhuman-readable names that both survive transpilation/minification and show up in\nstack traces.\n\n\u003c!-- symbiote-template-region-start 3 --\u003e\n\n---\n\n\u003c!-- remark-ignore-start --\u003e\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Features](#features)\n- [Install](#install)\n- [Usage](#usage)\n- [Appendix](#appendix)\n  - [Published Package Details](#published-package-details)\n  - [License](#license)\n- [Contributing and Support](#contributing-and-support)\n  - [Contributors](#contributors)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- symbiote-template-region-start 4 --\u003e\n\u003c!-- remark-ignore-end --\u003e\n\n\u003cbr /\u003e\n\n## Features\n\n**Works via a [simple wrapper function][2] using normal ES6 class syntax**\n\n```typescript\nmakeNamedError(\n  // Anonymous classes will be transformed into a named class by makeNamedError\n  class extends Error {\n    // ...\n  },\n  'MyCustomError'\n);\n\nmakeNamedError(\n  // However, for improved DX in TypeScript, give your class definitions names\n  class MyCustomSubclassError extends MyCustomError {\n    // ...\n  },\n  'MyCustomSubclassError'\n);\n```\n\n**Makes error name available via prototypical instance and as a static class\nproperty**\n\n```typescript\nconst { MyCustomError } = makeNamedError(/* ... */, 'MyCustomError');\n\nconsole.log(MyCustomError.name) // MyCustomError\nconsole.log((new MyCustomError()).name) // MyCustomError\n```\n\n**Ensures error class names in error messages and other outputs survive\nminification**\n\n```typescript\nconst { MyCoolError } = makeNamedError(/* ... */, 'MyCoolError');\n\nconsole.log(MyCoolError.name) // MyCoolError (every time!)\n```\n\n**Provides built-in type guards that are safer and more powerful than\n`instanceof`**\n\n```typescript\nconst { BigError, isBigError } = makeNamedError(/* ... */, 'BigError');\n\nconsole.log(isBigError(new BigError())) // true\nconsole.log(isBigError(new SomeOtherError())) // false\nconsole.log(isBigError(new Error())) // false\n```\n\nEach class's `.isX()` function is additionally provided as a static class\nproperty:\n\n```typescript\nconst { BigError } = makeNamedError(/* ... */, 'BigError');\n\nconsole.log(BigError.isError(new BigError())); // true\nconsole.log(BigError.isError(new SomeOtherError())); // false\nconsole.log(BigError.isError(new Error())); // false\n```\n\nAll instanceof checks still work as expected (but can be avoided):\n\n```typescript\nconst { BigError } = makeNamedError(/* ... */, 'BigError');\nconst { BiggestError } = makeNamedError(/* ... */, 'BiggestError');\n\nconsole.log(new BigError() instanceof BigError); // true\nconsole.log(new BigError() instanceof Error); // true\nconsole.log(new BiggestError() instanceof BiggestError); // true\nconsole.log(new BiggestError() instanceof Error); // true\n\nconsole.log(new Error() instanceof BigError); // false\n```\n\nUnlike instanceof, the `.isX()`/`.isError()` function is both [cross-realm\nsafe][3] and safe to use in situations where multiple _distinct_ copies of your\nerror classes might exist in the dependency tree (e.g. [dual package\nhazard][4]).\n\nIn case of the latter, where [two different libraries might import two different\nversions of your error classes][5] (a surprisingly common occurrence!), this\npackage takes away the pain:\n\n```typescript\nimport lib1 from 'some-lib-exports-your-error';\nimport lib2 from 'unrelated-lib-also-exports-same-error-but-not-strictly-equal';\n\nconsole.log(new lib1.YourError() instanceof lib2.YourError); // false\nconsole.log(lib2.YourError.isError(new lib1.YourError())); // true\n```\n\n**Supports inheritance** (both ES6 \"extends\" and pre-ES6 prototypical)\n\n```typescript\nconst { AppError } = makeNamedError(\n  class AppError extends Error {\n    panic() {\n      console.log('oh no!');\n      process.exit(123);\n    }\n  },\n  'AppError'\n);\n\nconst { ValidationError } = makeNamedError(\n  // Note how ValidationError extends AppError\n  class ValidationError extends AppError {\n    #validationErrors: string[];\n\n    constructor(issues: string[]) {\n      super();\n      this.#validationErrors = issues;\n    }\n\n    getValidationErrors() {\n      return this.#validationErrors;\n    }\n  },\n  'ValidationError'\n);\n\nconst error = new ValidationError(['validation error 1', 'validation error 2']);\n\nif (ValidationError.isError(error)) {\n  console.log('validation errors:', error.getValidationErrors().join(', '));\n  // validation errors: validation error 1, validation error 2\n}\n\n// Other logic...\n\nif (AppError.isError(error)) {\n  error.panic(); // This will run thanks to polymorphism and inheritance rules\n}\n\n// The program will die before reaching this point thanks to error.panic()\n```\n\n**Comes with kickass TypeScript types out of the box**\n\n```typescript\nimport {\n  makeNamedError,\n  isANamedErrorClass,\n  isANamedErrorInstance\n} from '@-xun/error';\n\nconst { SmallError, isSmallError } = makeNamedError(\n  /* ... */, // All class methods and properties are preserved as expected\n  'SmallError'\n);\n\nconsole.log(isANamedErrorClass(Error)); // false\nconsole.log(isANamedErrorInstance(new Error())); // false\nconsole.log(SmallError.isError(new Error())); // false\nconsole.log(isSmallError(new Error())); // false\n\n// All isX type guard functions will narrow unknown types properly!\n\nconsole.log(isANamedErrorClass(SmallError)); // true\nconsole.log(isANamedErrorInstance(new SmallError())); // true\nconsole.log(SmallError.isError(new SmallError())); // true\nconsole.log(isSmallError(new SmallError())); // true\n```\n\n## Install\n\n\u003c!-- symbiote-template-region-end --\u003e\n\nTo install:\n\n```shell\nnpm install @-xun/error\n```\n\n## Usage\n\nStart using `@-xun/error` in four quick and easy steps.\n\n1. Import:\n\n```typescript\nimport { makeNamedError } from '@-xun/error';\n```\n\n2. Optionally create a \"root\" error class from which the rest of your custom\n   Error subclasses will descend:\n\n```typescript\nexport const { AppError } = makeNamedError(\n  class AppError extends Error {},\n  'AppError'\n);\n```\n\n3. Create and export the rest of your custom Error subclasses as you normally\n   would:\n\n```typescript\nexport const { ValidationError } = makeNamedError(\n  class ValidationError extends AppError {},\n  'ValidationError'\n);\n\nexport const { AuthError } = makeNamedError(\n  class AuthError extends AppError {},\n  'AuthError'\n);\n\nexport const { NotFoundError } = makeNamedError(\n  class NotFoundError extends AppError {},\n  'NotFoundError'\n);\n\n// Improve TypeScript DX by exporting the literal class types too, if you want:\n\n/**\n * Helpful comment for users of your Error subclass goes here.\n */\nexport type ValidationError = InstanceType\u003ctypeof ValidationError\u003e;\n\n/**\n * Helpful comment for users of your Error subclass goes here.\n */\nexport type AuthError = InstanceType\u003ctypeof AuthError\u003e;\n\n/**\n * Helpful comment for users of your Error subclass goes here.\n */\nexport type NotFoundError = InstanceType\u003ctypeof NotFoundError\u003e;\n```\n\n4. Use your custom errors like any other `Error` subclass (because they are):\n\n```typescript\nimport { ValidationError } from './shared/errors.ts';\n\n// ...\n\nif (somethingBadHappened) {\n  throw new ValidationError();\n}\n\n// ...\n```\n\nNeat! 📸\n\n\u003c!-- symbiote-template-region-start 5 --\u003e\n\n## Appendix\n\n\u003c!-- symbiote-template-region-end --\u003e\n\nFurther documentation can be found under [`docs/`][x-repo-docs].\n\n\u003c!-- TODO: additional appendix sections here --\u003e\n\u003c!-- symbiote-template-region-start 6 --\u003e\n\n### Published Package Details\n\nThis is a [CJS2 package][x-pkg-cjs-mojito] with statically-analyzable exports\nbuilt by Babel for use in Node.js versions that are not end-of-life. For\nTypeScript users, this package supports both `\"Node10\"` and `\"Node16\"` module\nresolution strategies.\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- TODO: additional package details here --\u003e\n\u003c!-- symbiote-template-region-start 7 --\u003e\n\n\u003cdetails\u003e\u003csummary\u003eExpand details\u003c/summary\u003e\n\nThat means both CJS2 (via `require(...)`) and ESM (via `import { ... } from ...`\nor `await import(...)`) source will load this package from the same entry points\nwhen using Node. This has several benefits, the foremost being: less code\nshipped/smaller package size, avoiding [dual package\nhazard][x-pkg-dual-package-hazard] entirely, distributables are not\npacked/bundled/uglified, a drastically less complex build process, and CJS\nconsumers aren't shafted.\n\nEach entry point (i.e. `ENTRY`) in [`package.json`'s\n`exports[ENTRY]`][x-repo-package-json] object includes one or more [export\nconditions][x-pkg-exports-conditions]. These entries may or may not include: an\n[`exports[ENTRY].types`][x-pkg-exports-types-key] condition pointing to a type\ndeclaration file for TypeScript and IDEs, a\n[`exports[ENTRY].module`][x-pkg-exports-module-key] condition pointing to\n(usually ESM) source for Webpack/Rollup, a `exports[ENTRY].node` and/or\n`exports[ENTRY].default` condition pointing to (usually CJS2) source for Node.js\n`require`/`import` and for browsers and other environments, and [other\nconditions][x-pkg-exports-conditions] not enumerated here. Check the\n[package.json][x-repo-package-json] file to see which export conditions are\nsupported.\n\nNote that, regardless of the [`{ \"type\": \"...\" }`][x-pkg-type] specified in\n[`package.json`][x-repo-package-json], any JavaScript files written in ESM\nsyntax (including distributables) will always have the `.mjs` extension. Note\nalso that [`package.json`][x-repo-package-json] may include the\n[`sideEffects`][x-pkg-side-effects-key] key, which is almost always `false` for\noptimal [tree shaking][x-pkg-tree-shaking] where appropriate.\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- TODO: additional package details here --\u003e\n\u003c!-- symbiote-template-region-start 8 --\u003e\n\n\u003c/details\u003e\n\n### License\n\n\u003c!-- symbiote-template-region-end --\u003e\n\nSee [LICENSE][x-repo-license].\n\n\u003c!-- TODO: additional license information and/or sections here --\u003e\n\u003c!-- symbiote-template-region-start 9 --\u003e\n\n## Contributing and Support\n\n**[New issues][x-repo-choose-new-issue] and [pull requests][x-repo-pr-compare]\nare always welcome and greatly appreciated! 🤩** Just as well, you can [star 🌟\nthis project][x-badge-repo-link] to let me know you found it useful! ✊🏿 Or [buy\nme a beer][x-repo-sponsor], I'd appreciate it. Thank you!\n\nSee [CONTRIBUTING.md][x-repo-contributing] and [SUPPORT.md][x-repo-support] for\nmore information.\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- TODO: additional contribution/support sections here --\u003e\n\u003c!-- symbiote-template-region-start 10 --\u003e\n\n### Contributors\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- symbiote-template-region-start root-package-only --\u003e\n\u003c!-- remark-ignore-start --\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\u003c!-- remark-ignore-end --\u003e\n\nThanks goes to these wonderful people ([emoji\nkey][x-repo-all-contributors-emojis]):\n\n\u003c!-- remark-ignore-start --\u003e\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://xunn.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/656017?v=4?s=100\" width=\"100px;\" alt=\"Bernard\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBernard\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#infra-Xunnamius\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"https://github.com/Xunnamius/error-utils/commits?author=Xunnamius\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/Xunnamius/error-utils/commits?author=Xunnamius\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#maintenance-Xunnamius\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"https://github.com/Xunnamius/error-utils/commits?author=Xunnamius\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/Xunnamius/error-utils/pulls?q=is%3Apr+reviewed-by%3AXunnamius\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n  \u003ctfoot\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" size=\"13px\" colspan=\"7\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/all-contributors/all-contributors-cli/1b8533af435da9854653492b1327a23a4dbd0a10/assets/logo-small.svg\"\u003e\n          \u003ca href=\"https://all-contributors.js.org/docs/en/bot/usage\"\u003eAdd your contributions\u003c/a\u003e\n        \u003c/img\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tfoot\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\u003c!-- remark-ignore-end --\u003e\n\nThis project follows the [all-contributors][x-repo-all-contributors]\nspecification. Contributions of any kind welcome!\n\n\u003c!-- symbiote-template-region-end --\u003e\n\u003c!-- symbiote-template-region-start workspace-package-only --\u003e\n\u003c!-- (section elided by symbiote) --\u003e\n\u003c!-- symbiote-template-region-end --\u003e\n\n[x-badge-blm-image]: https://xunn.at/badge-blm 'Join the movement!'\n[x-badge-blm-link]: https://xunn.at/donate-blm\n[x-badge-codecov-image]:\n  https://img.shields.io/codecov/c/github/Xunnamius/error-utils/main?style=flat-square\u0026token=HWRIOBAAPW\u0026flag=package.main_root\n  'Is this package well-tested?'\n[x-badge-codecov-link]: https://codecov.io/gh/Xunnamius/error-utils\n[x-badge-downloads-image]:\n  https://img.shields.io/npm/dm/@-xun/error?style=flat-square\n  'Number of times this package has been downloaded per month'\n[x-badge-downloads-link]: https://npmtrends.com/@-xun/error\n[x-badge-lastcommit-image]:\n  https://img.shields.io/github/last-commit/Xunnamius/error-utils?style=flat-square\n  'Latest commit timestamp'\n[x-badge-license-image]:\n  https://img.shields.io/npm/l/@-xun/error?style=flat-square\n  \"This package's source license\"\n[x-badge-license-link]:\n  https://github.com/Xunnamius/error-utils/blob/main/LICENSE\n[x-badge-npm-image]:\n  https://xunn.at/npm-pkg-version/@-xun/error\n  'Install this package using npm or yarn!'\n[x-badge-npm-link]: https://npm.im/@-xun/error\n[x-badge-repo-link]: https://github.com/Xunnamius/error-utils\n[x-badge-semanticrelease-image]:\n  https://xunn.at/badge-semantic-release\n  'This repo practices continuous integration and deployment!'\n[x-badge-semanticrelease-link]:\n  https://github.com/semantic-release/semantic-release\n[x-pkg-cjs-mojito]:\n  https://dev.to/jakobjingleheimer/configuring-commonjs-es-modules-for-nodejs-12ed#publish-only-a-cjs-distribution-with-property-exports\n[x-pkg-dual-package-hazard]:\n  https://nodejs.org/api/packages.html#dual-package-hazard\n[x-pkg-exports-conditions]:\n  https://webpack.js.org/guides/package-exports#reference-syntax\n[x-pkg-exports-module-key]:\n  https://webpack.js.org/guides/package-exports#providing-commonjs-and-esm-version-stateless\n[x-pkg-exports-types-key]:\n  https://devblogs.microsoft.com/typescript/announcing-typescript-4-5-beta#packagejson-exports-imports-and-self-referencing\n[x-pkg-side-effects-key]:\n  https://webpack.js.org/guides/tree-shaking#mark-the-file-as-side-effect-free\n[x-pkg-tree-shaking]: https://webpack.js.org/guides/tree-shaking\n[x-pkg-type]:\n  https://github.com/nodejs/node/blob/8d8e06a345043bec787e904edc9a2f5c5e9c275f/doc/api/packages.md#type\n[x-repo-all-contributors]: https://github.com/all-contributors/all-contributors\n[x-repo-all-contributors-emojis]: https://allcontributors.org/docs/en/emoji-key\n[x-repo-choose-new-issue]:\n  https://github.com/Xunnamius/error-utils/issues/new/choose\n[x-repo-contributing]: /CONTRIBUTING.md\n[x-repo-docs]: docs\n[x-repo-license]: ./LICENSE\n[x-repo-package-json]: package.json\n[x-repo-pr-compare]: https://github.com/Xunnamius/error-utils/compare\n[x-repo-sponsor]: https://github.com/sponsors/Xunnamius\n[x-repo-support]: /.github/SUPPORT.md\n[1]:\n  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n[2]: #usage\n[3]:\n  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof#instanceof_and_multiple_realms\n[4]: https://github.com/GeoffreyBooth/dual-package-hazard\n[5]: https://github.com/isaacs/node-primordials/issues/3#issuecomment-1592383083\n[6]: ./docs/src/functions/makeNamedError.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxunnamius%2Ferror-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxunnamius%2Ferror-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxunnamius%2Ferror-utils/lists"}