/
index.test-d.ts
85 lines (76 loc) · 2.39 KB
/
index.test-d.ts
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
import { expectType, expectAssignable, expectError } from "tsd"
import closeWithGrace from "."
import {
Options,
CloseWithGraceCallback,
CloseWithGraceAsyncCallback,
Signals,
} from "."
type CallbackOptions = {
manual?: boolean
err?: Error
signal?: Signals
}
async function asyncManualCallback (options: Pick<CallbackOptions, "manual">) { }
async function asyncErrorCallback (options: Pick<CallbackOptions, "err">) { }
async function asyncSignalCallback (options: Pick<CallbackOptions, "signal">) { }
async function asyncAllCallback (options: CallbackOptions) { }
function ManualCallback (
options: Pick<CallbackOptions, "manual">,
cb: (error?: Error) => void
) {
cb()
return
}
function ErrorCallback (
options: Pick<CallbackOptions, "err">,
cb: (error?: Error) => void
) {
cb()
return
}
function SignalCallback (
options: Pick<CallbackOptions, "signal">,
cb: (error?: Error) => void
) {
cb()
return
}
function AllCallback (options: CallbackOptions, cb: (error?: Error) => void) {
cb()
return
}
function WrongCallback (options: CallbackOptions, cb: (error?: Error) => void) {
cb()
return Promise.resolve()
}
expectAssignable<CloseWithGraceAsyncCallback>(asyncManualCallback)
expectAssignable<CloseWithGraceAsyncCallback>(asyncErrorCallback)
expectAssignable<CloseWithGraceAsyncCallback>(asyncSignalCallback)
expectAssignable<CloseWithGraceAsyncCallback>(asyncAllCallback)
expectError<CloseWithGraceAsyncCallback>(WrongCallback)
expectAssignable<CloseWithGraceCallback>(ManualCallback)
expectAssignable<CloseWithGraceCallback>(ErrorCallback)
expectAssignable<CloseWithGraceCallback>(SignalCallback)
expectAssignable<CloseWithGraceCallback>(AllCallback)
expectAssignable<CloseWithGraceCallback>(WrongCallback)
expectAssignable<Signals>("SIGINT")
expectAssignable<Signals>("SIGTERM")
expectAssignable<Options>({ delay: 10 })
expectAssignable<Options>({ logger: console })
expectAssignable<Options>({ logger: console, delay: 10 })
expectAssignable<Options>({ logger: { error: () => {} } })
expectAssignable<{
close: () => void
uninstall: () => void
}>(closeWithGrace({ delay: 100 }, asyncAllCallback))
expectAssignable<{
close: () => void
uninstall: () => void
}>(closeWithGrace({ delay: 100 }, AllCallback))
closeWithGrace({ delay: 100 }, async function ({ err }) {
expectType<Error | undefined>(err)
})
closeWithGrace(async function ({ err }) {
expectType<Error | undefined>(err)
})