112 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # make-error [](http://travis-ci.org/JsCommunity/make-error)
 | ||
|  | 
 | ||
|  | > Make your own error types!
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Features
 | ||
|  | 
 | ||
|  | - Compatible Node & browsers | ||
|  | - `instanceof` support | ||
|  | - `error.name` & `error.stack` support | ||
|  | - compatible with [CSP](https://en.wikipedia.org/wiki/Content_Security_Policy) (i.e. no `eval()`) | ||
|  | 
 | ||
|  | ## Installation
 | ||
|  | 
 | ||
|  | ### Node & [Browserify](http://browserify.org/)/[Webpack](https://webpack.js.org/)
 | ||
|  | 
 | ||
|  | Installation of the [npm package](https://npmjs.org/package/make-error): | ||
|  | 
 | ||
|  | ``` | ||
|  | > npm install --save make-error
 | ||
|  | ``` | ||
|  | 
 | ||
|  | Then require the package: | ||
|  | 
 | ||
|  | ```javascript | ||
|  | var makeError = require('make-error'); | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Browser
 | ||
|  | 
 | ||
|  | You can directly use the build provided at [unpkg.com](https://unpkg.com): | ||
|  | 
 | ||
|  | ```html | ||
|  | <script src="https://unpkg.com/make-error@1/dist/make-error.js"></script> | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Usage
 | ||
|  | 
 | ||
|  | ### Basic named error
 | ||
|  | 
 | ||
|  | ```javascript | ||
|  | var CustomError = makeError('CustomError') | ||
|  | 
 | ||
|  | // Parameters are forwarded to the super class (here Error). | ||
|  | throw new CustomError('a message') | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Advanced error class
 | ||
|  | 
 | ||
|  | ```javascript | ||
|  | function CustomError (customValue) { | ||
|  |   CustomError.super.call(this, 'custom error message') | ||
|  | 
 | ||
|  |   this.customValue = customValue | ||
|  | } | ||
|  | makeError(CustomError) | ||
|  | 
 | ||
|  | // Feel free to extend the prototype. | ||
|  | CustomError.prototype.myMethod = function CustomError$myMethod () { | ||
|  |   console.log('CustomError.myMethod (%s, %s)', this.code, this.message) | ||
|  | } | ||
|  | 
 | ||
|  | //----- | ||
|  | 
 | ||
|  | try { | ||
|  |   throw new CustomError(42) | ||
|  | } catch (error) { | ||
|  |   error.myMethod() | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Specialized error
 | ||
|  | 
 | ||
|  | ```javascript | ||
|  | var SpecializedError = makeError('SpecializedError', CustomError); | ||
|  | 
 | ||
|  | throw new SpecializedError(42); | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Inheritance
 | ||
|  | 
 | ||
|  | > Best for ES2015+.
 | ||
|  | 
 | ||
|  | ```javascript | ||
|  | import {BaseError} from 'make-error' | ||
|  | 
 | ||
|  | class CustomError extends BaseError { | ||
|  |   constructor () { | ||
|  |     super('custom error message') | ||
|  |   } | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Related
 | ||
|  | 
 | ||
|  | - [make-error-cause](https://www.npmjs.com/package/make-error-cause): Make your own error types, with a cause! | ||
|  | 
 | ||
|  | ## Contributions
 | ||
|  | 
 | ||
|  | Contributions are *very* welcomed, either on the documentation or on | ||
|  | the code. | ||
|  | 
 | ||
|  | You may: | ||
|  | 
 | ||
|  | - report any [issue](https://github.com/JsCommunity/make-error/issues) | ||
|  |   you've encountered; | ||
|  | - fork and create a pull request. | ||
|  | 
 | ||
|  | ## License
 | ||
|  | 
 | ||
|  | ISC © [Julien Fontanet](http://julien.isonoe.net) |