{"id":19951406,"url":"https://github.com/grimen/js-mybad","last_synced_at":"2025-03-01T14:43:49.076Z","repository":{"id":34448721,"uuid":"170752438","full_name":"grimen/js-mybad","owner":"grimen","description":"My friendly error base class - for JavaScript/Node.","archived":false,"fork":false,"pushed_at":"2023-01-07T04:07:23.000Z","size":869,"stargazers_count":0,"open_issues_count":11,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-12T22:41:16.947Z","etag":null,"topics":["baseclass","color","colors","debug","detailed","error","errors","inspector","meta","pretty","stacktrace"],"latest_commit_sha":null,"homepage":"https://npmjs.com/package/@grimen/mybad","language":"JavaScript","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/grimen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"MIT-LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-14T20:18:29.000Z","updated_at":"2021-05-05T03:03:14.000Z","dependencies_parsed_at":"2023-01-15T07:15:31.985Z","dependency_job_id":null,"html_url":"https://github.com/grimen/js-mybad","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimen%2Fjs-mybad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimen%2Fjs-mybad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimen%2Fjs-mybad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grimen%2Fjs-mybad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grimen","download_url":"https://codeload.github.com/grimen/js-mybad/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241381520,"owners_count":19953749,"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","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":["baseclass","color","colors","debug","detailed","error","errors","inspector","meta","pretty","stacktrace"],"created_at":"2024-11-13T01:07:55.000Z","updated_at":"2025-03-01T14:43:49.042Z","avatar_url":"https://github.com/grimen.png","language":"JavaScript","readme":"\n# `js-mybad` [![NPM version](https://badge.fury.io/js/%40grimen%2Fmybad.svg)](https://badge.fury.io/js/%40grimen%2Fmybad) [![Build Status](https://travis-ci.com/grimen/js-mybad.svg?token=sspjPRWbecBSpceU8Jyn\u0026branch=master)](https://travis-ci.com/grimen/js-mybad) [![Coverage Status](https://codecov.io/gh/grimen/js-mybad/branch/master/graph/badge.svg)](https://codecov.io/gh/grimen/js-mybad)\n\n*My friendly error base class - for Node/JavaScript.*\n\n\n## Introduction\n\nOne in general always needs a application/library specific error base class, but the native errors are very limited in what meta/debugging information they can hold at time they are raised. For better debugging and error reporting/inspection this error base class allows to attach some additonal error context information that can be used to better understand the issue - without having to create custom error formatters, or run debugger.\n\n\n## Install\n\nInstall using **npm**:\n\n```bash\n$ npm install @grimen/mybad\n```\n\nInstall using **yarn**:\n\n```bash\n$ yarn add @grimen/mybad\n```\n\n\n## Use\n\nVery basic **[example](https://github.com/grimen/js-mybad/tree/master/examples/basic.js)**:\n\n```javascript\nconst mybad = require('@grimen/mybad')\n\nclass ToMuchError extends mybad.Error {}\n\nfunction printMoney(stash) {\n    try {\n        if (typeof stash === 'string' \u0026\u0026 stash.length \u003e 13) {\n            throw new RangeError(`Too much money to print: ${stash}`)\n        }\n\n        console.log(`PRINT ${stash.join('')}`)\n\n    } catch (error) {\n        throw new ToMuchError(error, {\n            message: 'Out of money printing ink...',\n            id: Date.now(), // well, should maybe be unique...\n            key: 'too_much',\n            code: 400,\n            details: {\n                stash,\n            },\n        })\n    }\n}\n\nlet amount = ''\n\nconst range = (to) =\u003e {\n    return [...Array(to).keys()]\n}\n\nfor (let dollar of range(42)) {\n    amount += '$'\n\n    try {\n        printMoney(amount)\n\n    } catch (error) {\n        process.env.ERROR_VERBOSE = false\n        process.env.ERROR_COLORS = false\n\n        console.log()\n        console.log('========================================================')\n        console.log('     error.toString({verbose: false})')\n        console.log('-----------------------------------------------------')\n        console.log()\n        console.log(error.toString({verbose: false}))\n        console.log()\n\n        console.log()\n        console.log('========================================================')\n        console.log('     error.toString({verbose: true})')\n        console.log('-----------------------------------------------------')\n        console.log()\n        console.log(error.toString({verbose: true}))\n        console.log()\n\n        console.log()\n        console.log('========================================================')\n        console.log('     error.toJSON()')\n        console.log('-----------------------------------------------------')\n        console.log()\n        console.log(error.toString({verbose: true}))\n        console.log()\n\n        throw error\n    }\n}\n\n```\n\nRun this with optional environment variables `COLORS` / `ERROR_COLORS` and/or `VERBOSE` / `ERROR_VERBOSE` set too truthy or falsy values, so see various error info formatting in terminal. Also `(NO_COLOR)[https://no-color.org]` is respected.\n\nSomething like this (imagine some colorized formatting):\n\n```bash\nPRINT $\nPRINT $$\nPRINT $$$\nPRINT $$$$\nPRINT $$$$$\nPRINT $$$$$$\nPRINT $$$$$$$\nPRINT $$$$$$$$\nPRINT $$$$$$$$$\nPRINT $$$$$$$$$$\nPRINT $$$$$$$$$$$\nPRINT $$$$$$$$$$$$\nPRINT $$$$$$$$$$$$$\n\n\n========================================================\n     error.toString({verbose: false})\n-----------------------------------------------------\n\nOut of money printing ink...\n\n\n========================================================\n     error.toString({verbose: true})\n-----------------------------------------------------\n\nOut of money printing ink... { stash: '$$$$$$$$$$$$$$' }\n\n\n========================================================\n     error.toJSON()\n-----------------------------------------------------\n\n{\n  type: 'ToMuchError',\n  id: 1618487081556,\n  code: 400,\n  key: 'too_much',\n  message: 'Out of money printing ink...',\n  details: { stash: '$$$$$$$$$$$$$$' },\n  stack: [\n    {\n      file: '/Users/jonas/Dev/Private/js-mybad/examples/basic.js',\n      function: 'printMoney',\n      line: 23,\n      column: 19,\n      source: undefined\n    },\n    {\n      file: '/Users/jonas/Dev/Private/js-mybad/examples/basic.js',\n      function: 'Object.\u003canonymous\u003e',\n      line: 57,\n      column: 9,\n      source: undefined\n    },\n    {\n      file: 'internal/modules/cjs/loader.js',\n      function: 'Module._compile',\n      line: 1063,\n      column: 30,\n      source: undefined\n    },\n    {\n      file: 'internal/modules/cjs/loader.js',\n      function: 'Object.Module._extensions..js',\n      line: 1092,\n      column: 10,\n      source: undefined\n    },\n    {\n      file: 'internal/modules/cjs/loader.js',\n      function: 'Module.load',\n      line: 928,\n      column: 32,\n      source: undefined\n    },\n    {\n      file: 'internal/modules/cjs/loader.js',\n      function: 'Function.Module._load',\n      line: 769,\n      column: 14,\n      source: undefined\n    },\n    {\n      file: 'internal/modules/run_main.js',\n      function: 'Function.executeUserEntryPoint [as runMain]',\n      line: 72,\n      column: 12,\n      source: undefined\n    },\n    {\n      file: '17',\n      function: 'internal/main/run_main_module.js',\n      line: 47,\n      column: undefined,\n      source: undefined\n    }\n  ]\n}\n```\n\n\n## Test\n\nClone down source code:\n\n```sh\n$ make install\n```\n\nRun **colorful tests** using **jest**:\n\n```sh\n$ make test\n```\n\n\n## Related\n\n- [**`python-mybad`**](https://github.com/grimen/python-mybad) - *\"My friendly error base class - for Python\"*\n\n\n## About\n\nThis project was mainly initiated - in lack of solid existing alternatives - to be used at our work at **[Markable.ai](https://markable.ai)** to have common code conventions between various programming environments where **Node.js** (for I/O heavy operations) is heavily used.\n\n\n## License\n\nReleased under the MIT license.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrimen%2Fjs-mybad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrimen%2Fjs-mybad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrimen%2Fjs-mybad/lists"}