@rightcapital/assert 4.0.1-feature-remove-exceptions.2528.1.0 → 4.0.1-feature-assert-capture-stack-trace.2570.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +15 -11
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +37 -11
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAyB,IAAI,oBAAoB;CAClD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAyB,IAAI,oBAAoB;CAClD;AA6BD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAItE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CASjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EACnC,KAAK,EAAE,CAAC,EACR,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EACnC,OAAO,CAAC,EAAE,MAAM,GACf,CAAC,CAKH;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,MAAM,GACf,WAAW,CAAC,CAAC,CAAC,CAUhB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,SAA6B,GAAG,KAAK,CAE7E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAOtE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAoB,GAAG,KAAK,CAEhE"}
|
package/lib/index.js
CHANGED
|
@@ -26,14 +26,16 @@ export class AssertionError extends Error {
|
|
|
26
26
|
/**
|
|
27
27
|
* Throws an AssertionError with a message prefixed by the assertion name.
|
|
28
28
|
*/
|
|
29
|
-
function throwError(name, message) {
|
|
30
|
-
|
|
29
|
+
function throwError(name, message, caller) {
|
|
30
|
+
const error = new AssertionError(`${name}: ${message}`);
|
|
31
|
+
Error.captureStackTrace?.(error, caller);
|
|
32
|
+
throw error;
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
35
|
* Throws an AssertionError for an unexpected value.
|
|
34
36
|
*/
|
|
35
|
-
function throwUnexpectedValueError(name, value, message
|
|
36
|
-
throwError(name, message);
|
|
37
|
+
function throwUnexpectedValueError(name, value, message, caller) {
|
|
38
|
+
throwError(name, message ?? `Unexpected ${String(value)}`, caller);
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
39
41
|
* Basic assertion: verifies that a value or expression is `true`, otherwise throws an exception.
|
|
@@ -54,7 +56,7 @@ function throwUnexpectedValueError(name, value, message = `Unexpected ${String(v
|
|
|
54
56
|
*/
|
|
55
57
|
export function assert(value, message) {
|
|
56
58
|
if (value !== true) {
|
|
57
|
-
throwUnexpectedValueError('assert', value, message);
|
|
59
|
+
throwUnexpectedValueError('assert', value, message, assert);
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
/**
|
|
@@ -76,7 +78,7 @@ export function assert(value, message) {
|
|
|
76
78
|
*/
|
|
77
79
|
export function assertNonNullable(value, message) {
|
|
78
80
|
if (value === null || value === undefined) {
|
|
79
|
-
throwUnexpectedValueError('assertNonNullable', value, message);
|
|
81
|
+
throwUnexpectedValueError('assertNonNullable', value, message, assertNonNullable);
|
|
80
82
|
}
|
|
81
83
|
}
|
|
82
84
|
/**
|
|
@@ -105,7 +107,9 @@ export function assertNonNullable(value, message) {
|
|
|
105
107
|
* ```
|
|
106
108
|
*/
|
|
107
109
|
export function ensure(value, predicate, message) {
|
|
108
|
-
|
|
110
|
+
if (!predicate(value)) {
|
|
111
|
+
throwUnexpectedValueError('ensure', value, message, ensure);
|
|
112
|
+
}
|
|
109
113
|
return value;
|
|
110
114
|
}
|
|
111
115
|
/**
|
|
@@ -130,7 +134,7 @@ export function ensure(value, predicate, message) {
|
|
|
130
134
|
*/
|
|
131
135
|
export function ensureNonNullable(value, message) {
|
|
132
136
|
if (value === null || value === undefined) {
|
|
133
|
-
throwUnexpectedValueError('ensureNonNullable', value, message);
|
|
137
|
+
throwUnexpectedValueError('ensureNonNullable', value, message, ensureNonNullable);
|
|
134
138
|
}
|
|
135
139
|
return value;
|
|
136
140
|
}
|
|
@@ -157,7 +161,7 @@ export function ensureNonNullable(value, message) {
|
|
|
157
161
|
* ```
|
|
158
162
|
*/
|
|
159
163
|
export function assertUnreachable(message = 'Reached unreachable code') {
|
|
160
|
-
throwError('assertUnreachable', message);
|
|
164
|
+
throwError('assertUnreachable', message, assertUnreachable);
|
|
161
165
|
}
|
|
162
166
|
/**
|
|
163
167
|
* Used for exhaustiveness checking of union types. Ensures switch or if-else statements cover all possible types.
|
|
@@ -193,7 +197,7 @@ export function assertUnreachable(message = 'Reached unreachable code') {
|
|
|
193
197
|
* ```
|
|
194
198
|
*/
|
|
195
199
|
export function assertExhaustive(value, message) {
|
|
196
|
-
throwUnexpectedValueError('assertExhaustive', value, message);
|
|
200
|
+
throwUnexpectedValueError('assertExhaustive', value, message, assertExhaustive);
|
|
197
201
|
}
|
|
198
202
|
/**
|
|
199
203
|
* Marks methods or code paths that are intentionally not implemented yet.
|
|
@@ -210,6 +214,6 @@ export function assertExhaustive(value, message) {
|
|
|
210
214
|
* ```
|
|
211
215
|
*/
|
|
212
216
|
export function unimplemented(message = 'Not implemented') {
|
|
213
|
-
throwError('unimplemented', message);
|
|
217
|
+
throwError('unimplemented', message, unimplemented);
|
|
214
218
|
}
|
|
215
219
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACd,IAAI,GAAG,gBAAgB,CAAC;CAClD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACd,IAAI,GAAG,gBAAgB,CAAC;CAClD;AAQD;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,MAAc;IAC/D,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACvD,KAAoC,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzE,MAAM,KAAK,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,IAAY,EACZ,KAAc,EACd,OAA2B,EAC3B,MAAc;IAEd,UAAU,CAAC,IAAI,EAAE,OAAO,IAAI,cAAc,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,MAAM,CAAC,KAAc,EAAE,OAAgB;IACrD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,yBAAyB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAQ,EACR,OAAgB;IAEhB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,yBAAyB,CACvB,mBAAmB,EACnB,KAAK,EACL,OAAO,EACP,iBAAiB,CAClB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,MAAM,CACpB,KAAQ,EACR,SAAmC,EACnC,OAAgB;IAEhB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,yBAAyB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAQ,EACR,OAAgB;IAEhB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,yBAAyB,CACvB,mBAAmB,EACnB,KAAK,EACL,OAAO,EACP,iBAAiB,CAClB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAG,0BAA0B;IACpE,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY,EAAE,OAAgB;IAC7D,yBAAyB,CACvB,kBAAkB,EAClB,KAAK,EACL,OAAO,EACP,gBAAgB,CACjB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,OAAO,GAAG,iBAAiB;IACvD,UAAU,CAAC,eAAe,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AACtD,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -25,11 +25,19 @@ export class AssertionError extends Error {
|
|
|
25
25
|
public override readonly name = 'AssertionError';
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
type Caller = (...args: never[]) => unknown;
|
|
29
|
+
|
|
30
|
+
interface ErrorWithCaptureStackTrace {
|
|
31
|
+
captureStackTrace?(object: object, constructor?: Caller): void;
|
|
32
|
+
}
|
|
33
|
+
|
|
28
34
|
/**
|
|
29
35
|
* Throws an AssertionError with a message prefixed by the assertion name.
|
|
30
36
|
*/
|
|
31
|
-
function throwError(name: string, message: string): never {
|
|
32
|
-
|
|
37
|
+
function throwError(name: string, message: string, caller: Caller): never {
|
|
38
|
+
const error = new AssertionError(`${name}: ${message}`);
|
|
39
|
+
(Error as ErrorWithCaptureStackTrace).captureStackTrace?.(error, caller);
|
|
40
|
+
throw error;
|
|
33
41
|
}
|
|
34
42
|
|
|
35
43
|
/**
|
|
@@ -38,9 +46,10 @@ function throwError(name: string, message: string): never {
|
|
|
38
46
|
function throwUnexpectedValueError(
|
|
39
47
|
name: string,
|
|
40
48
|
value: unknown,
|
|
41
|
-
message
|
|
49
|
+
message: string | undefined,
|
|
50
|
+
caller: Caller,
|
|
42
51
|
): never {
|
|
43
|
-
throwError(name, message);
|
|
52
|
+
throwError(name, message ?? `Unexpected ${String(value)}`, caller);
|
|
44
53
|
}
|
|
45
54
|
|
|
46
55
|
/**
|
|
@@ -62,7 +71,7 @@ function throwUnexpectedValueError(
|
|
|
62
71
|
*/
|
|
63
72
|
export function assert(value: boolean, message?: string): asserts value {
|
|
64
73
|
if (value !== true) {
|
|
65
|
-
throwUnexpectedValueError('assert', value, message);
|
|
74
|
+
throwUnexpectedValueError('assert', value, message, assert);
|
|
66
75
|
}
|
|
67
76
|
}
|
|
68
77
|
|
|
@@ -88,7 +97,12 @@ export function assertNonNullable<T>(
|
|
|
88
97
|
message?: string,
|
|
89
98
|
): asserts value is NonNullable<T> {
|
|
90
99
|
if (value === null || value === undefined) {
|
|
91
|
-
throwUnexpectedValueError(
|
|
100
|
+
throwUnexpectedValueError(
|
|
101
|
+
'assertNonNullable',
|
|
102
|
+
value,
|
|
103
|
+
message,
|
|
104
|
+
assertNonNullable,
|
|
105
|
+
);
|
|
92
106
|
}
|
|
93
107
|
}
|
|
94
108
|
|
|
@@ -122,7 +136,9 @@ export function ensure<T, S extends T>(
|
|
|
122
136
|
predicate: (value: T) => value is S,
|
|
123
137
|
message?: string,
|
|
124
138
|
): S {
|
|
125
|
-
|
|
139
|
+
if (!predicate(value)) {
|
|
140
|
+
throwUnexpectedValueError('ensure', value, message, ensure);
|
|
141
|
+
}
|
|
126
142
|
return value;
|
|
127
143
|
}
|
|
128
144
|
|
|
@@ -151,7 +167,12 @@ export function ensureNonNullable<T>(
|
|
|
151
167
|
message?: string,
|
|
152
168
|
): NonNullable<T> {
|
|
153
169
|
if (value === null || value === undefined) {
|
|
154
|
-
throwUnexpectedValueError(
|
|
170
|
+
throwUnexpectedValueError(
|
|
171
|
+
'ensureNonNullable',
|
|
172
|
+
value,
|
|
173
|
+
message,
|
|
174
|
+
ensureNonNullable,
|
|
175
|
+
);
|
|
155
176
|
}
|
|
156
177
|
return value;
|
|
157
178
|
}
|
|
@@ -179,7 +200,7 @@ export function ensureNonNullable<T>(
|
|
|
179
200
|
* ```
|
|
180
201
|
*/
|
|
181
202
|
export function assertUnreachable(message = 'Reached unreachable code'): never {
|
|
182
|
-
throwError('assertUnreachable', message);
|
|
203
|
+
throwError('assertUnreachable', message, assertUnreachable);
|
|
183
204
|
}
|
|
184
205
|
|
|
185
206
|
/**
|
|
@@ -216,7 +237,12 @@ export function assertUnreachable(message = 'Reached unreachable code'): never {
|
|
|
216
237
|
* ```
|
|
217
238
|
*/
|
|
218
239
|
export function assertExhaustive(value: never, message?: string): never {
|
|
219
|
-
throwUnexpectedValueError(
|
|
240
|
+
throwUnexpectedValueError(
|
|
241
|
+
'assertExhaustive',
|
|
242
|
+
value,
|
|
243
|
+
message,
|
|
244
|
+
assertExhaustive,
|
|
245
|
+
);
|
|
220
246
|
}
|
|
221
247
|
|
|
222
248
|
/**
|
|
@@ -234,5 +260,5 @@ export function assertExhaustive(value: never, message?: string): never {
|
|
|
234
260
|
* ```
|
|
235
261
|
*/
|
|
236
262
|
export function unimplemented(message = 'Not implemented'): never {
|
|
237
|
-
throwError('unimplemented', message);
|
|
263
|
+
throwError('unimplemented', message, unimplemented);
|
|
238
264
|
}
|