@wulechuan/meaningful-error-messages
Version:
To build some colorful and meaningful error message strings easily a little bit.
165 lines (112 loc) • 4.73 kB
Markdown
# Wulechuan's Builder for Colorful and Meaningful Error Messages
## Multilingual Editions of this Article
- [简体中文版文档](./ReadMe.zh-hans-CN.md)
## NPM Page
<dl>
<dt>Package Name</dt>
<dd>
[/meaningful-error-messages](https://www.npmjs.com/package/@wulechuan/meaningful-error-messages)
</dd>
<dt>Author</dt>
<dd><p>wulechuan (南昌吴乐川)</p></dd>
</dl>
## Introduction
This tools provide a factory function, which in turn can create some more functions for print colorful and meaningful error messages easily, a little bit.
## Usage
Try any of these:
- ```bash
npm run test1
```
- ```bash
npm run test2
```
- ```bash
npm run test3
```
- ```bash
npm run test4
```
### Examples
The `./tests/_shared.js` is a good example, I think.
The full(almost) codes of the file is copied below.
```js
const chalk = require('chalk')
/* ****************************************** focus here ****************************************** */
/**/ /**/
/**/ const createErrorMessageBuildersFor = require('/meaningful-error-messages') /**/
/**/ /**/
/**/ const { /**/
/**/ buildErrorMessage, /**/
/**/ buildErrorMessageSaysThatSomethingMustBe, /**/
/**/ } = createErrorMessageBuildersFor('-hero/splendid-package-that-fails') /**/
/**/ /**/
/* ************************************************************************************************ */
function aFunctionThatDoesNothingCorrect(options) {
const errorContext = 'aFunctionThatDoesNothingCorrect'
if (!options || typeof options !== 'object') {
throw new TypeError(buildErrorMessageSaysThatSomethingMustBe(
'object', // The expected type
options, // The actual value
'arguments.options', // The accessing path of the value, for printing meaningful details
errorContext // The optional message that describs the current context
))
}
const {
a,
b,
anArrayProperty,
} = options
if (a && b) {
throw new TypeError(buildErrorMessage(
[ // Each memeber of this array occupies a single line in the console
// line 1
`Of the "${chalk.rgb(255, 255, 255)('options')}",`,
// line 2
`${
chalk.green('both')
} "${
chalk.yellow('a')
}" and "${
chalk.yellow('b')
}" are provided.`,
// line 3
'Please do provide one but either one only.',
]
))
} else if (!a && !b) {
throw new TypeError(buildErrorMessage(
[ // Each memeber of this array occupies a single line in the console
// line 1
`Of the "${chalk.rgb(255, 255, 255)('options')}",`,
// line 2
`${
chalk.blue('neither')
} "${
chalk.yellow('a')
}" ${
chalk.blue('nor')
} "${
chalk.yellow('b')
}" is provided.`,
// line 3
'Please do provide one but either one only.',
]
))
}
if (anArrayProperty && !Array.isArray(anArrayProperty)) {
throw new TypeError(buildErrorMessageSaysThatSomethingMustBe(
'an array or undefined', // The expected type
anArrayProperty, // The actual value
'options.anArrayProperty', // The accessing path of the value, for printing meaningful details
errorContext // The optional message that describs the current context
))
}
}
```
## TODOS
Nothing at present.
## License
WTFPL
> NOTE:
>
> I'm not an expert about license types. So I temporarily use WTFPL. But I guess this type of license might conflict with the ones used by those npm packages I'm utilizing.