Skip to content

Commit 850c8cd

Browse files
committed
Improve types and validation
1 parent 8198bca commit 850c8cd

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

src/main.test-d.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ ModernError.subclass('TestError', {
2525
// @ts-expect-error
2626
BaseError.beautiful(error, true)
2727
expectNotAssignable<Options>(true)
28+
2829
ModernError.subclass('TestError', {
2930
plugins: [modernErrorsBeautiful],
3031
// @ts-expect-error
@@ -34,6 +35,24 @@ ModernError.subclass('TestError', {
3435
BaseError.beautiful(error, { unknown: true })
3536
expectNotAssignable<Options>({ unknown: true })
3637

38+
ModernError.subclass('TestError', {
39+
plugins: [modernErrorsBeautiful],
40+
// @ts-expect-error
41+
beautiful: { classes: {} },
42+
})
43+
// @ts-expect-error
44+
BaseError.beautiful(error, { classes: {} })
45+
expectNotAssignable<Options>({ classes: {} })
46+
47+
ModernError.subclass('TestError', {
48+
plugins: [modernErrorsBeautiful],
49+
// @ts-expect-error
50+
beautiful: { custom: 'pretty' },
51+
})
52+
// @ts-expect-error
53+
BaseError.beautiful(error, { custom: 'pretty' })
54+
expectNotAssignable<Options>({ custom: 'pretty' })
55+
3756
ModernError.subclass('TestError', {
3857
plugins: [modernErrorsBeautiful],
3958
beautiful: { stack: true },

src/main.test.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ const innerError = new DatabaseError('inner')
2020
const outerError = new ExitCodeError('test', { errors: [innerError] })
2121

2222
each(
23-
[true, { stack: 'true' }, { unknown: true }, { classes: {} }],
23+
[
24+
true,
25+
{ stack: 'true' },
26+
{ unknown: true },
27+
{ classes: {} },
28+
{ custom: 'pretty' },
29+
],
2430
({ title }, options) => {
2531
test(`Options are validated | ${title}`, (t) => {
2632
// @ts-expect-error Type checking should fail due to invalid options

src/main.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
1-
import beautifulError, { validateOptions, type Options } from 'beautiful-error'
1+
import beautifulError, {
2+
validateOptions,
3+
type Options as BeautifulErrorOptions,
4+
} from 'beautiful-error'
25
import type { Info, Plugin } from 'modern-errors'
36

47
/**
58
* Options of `modern-errors-beautiful`
69
*/
7-
export type { Options }
10+
export type Options = Omit<BeautifulErrorOptions, 'classes' | 'custom'>
811

912
// `error.beautiful()` is called with `errorString` as argument by
1013
// `beautiful-error`. We ignore that argument and prevent it from being
1114
// considered an invalid options object.
1215
const isOptions = (options: unknown) => typeof options !== 'string'
1316

1417
const getOptions = (options: Options = {}) => {
15-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
1618
validateOptions(options)
1719

1820
if (options.classes !== undefined) {
19-
throw new TypeError('"classes" must not be defined.')
21+
throw new TypeError('The "classes" option must not be defined.')
22+
}
23+
24+
if (options.custom !== undefined) {
25+
throw new TypeError('The "custom" option must not be defined.')
2026
}
2127

2228
return options

0 commit comments

Comments
 (0)