generated from ehmicky/template-javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.d.ts
More file actions
99 lines (94 loc) · 3.21 KB
/
main.d.ts
File metadata and controls
99 lines (94 loc) · 3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
type ErrorConstructor = new () => Error
/**
* Some `Error` polyfills (such as
* [`es-shims/error-cause`](https://github.com/es-shims/error-cause)) prevent
* extending from it. This fixes it.
8A3E
*
* The second argument must be
* [`new.target`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target).
* This must be called directly inside a class constructor, after
* [`super(message, parameters)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super).
*
* @example
* ```js
* class CustomError extends Error {
* constructor(message, parameters) {
* super(message, parameters)
* ensureCorrectClass(this, new.target)
* }
* }
*
* // Thanks to `ensureCorrectClass()`, this is now always true even when
* // `Error` has been polyfilled
* console.log(new CustomError('message') instanceof CustomError) // true
* ```
*/
export function ensureCorrectClass(
error: Error,
newTarget: ErrorConstructor,
): void
/**
* Ponyfills
* [`error.cause`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause)
* on
* [older Node.js and browsers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause#browser_compatibility).
*
* This must be called inside a class constructor, after
* [`super(message, parameters)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super).
*
* @example
* ```js
* class CustomError extends Error {
* constructor(message, parameters) {
* super(message, parameters)
* ponyfillCause(this, parameters)
* }
* }
*
* try {
* throw new Error('innerMessage')
* } catch (cause) {
* // Works on any platforms thanks to ponyfill
* const error = new CustomError('message', { cause })
* console.log(error.cause.message) // 'innerMessage'
* }
* ```
*/
export function ponyfillCause(error: Error, parameters?: unknown): void
/**
* Error class name
*/
export type ErrorName = `${string}Error`
/**
* Set an `ErrorClass`'s
* [`name`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name).
*
* This must be performed on an error class, not instance. Unlike setting
* `this.name = '...'` inside an error's constructor, this follows the native
* `Error` classes' pattern where `error.name`:
*
* - Ends with the `Error` suffix
* - Matches the
* [constructor's `name`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name)
* - Is
* [inherited](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties)
* - Is
* [non-enumerable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties)
*
* @example
* ```js
* class CustomError extends Error {}
* setErrorName(CustomError, 'CustomError')
*
* console.log(CustomError.name) // 'CustomError'
* console.log(CustomError.prototype.name) // 'CustomError'
*
* const error = new CustomError('message')
* console.log(error.name) // 'CustomError'
* console.log(Object.keys(error).includes('name')) // false
* ```
*/
export function setErrorName(
ErrorClass: ErrorConstructor,
name: ErrorName,
): void