/
emitter.types.ts
70 lines (61 loc) · 2.85 KB
/
emitter.types.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
import { ExtractRouteParams, NegativeTypes } from "@hyper-fetch/core";
import { SocketAdapterInstance, ExtractEmitterOptionsType, ExtractSocketExtraType } from "adapter";
import { Emitter } from "emitter";
import {
ExtractEmitterAdapterType,
ExtractEmitterHasDataType,
ExtractEmitterHasParamsType,
ExtractEmitterEndpointType,
ExtractEmitterPayloadType,
} from "types";
export type EmitterInstance = Emitter<any, any, any, SocketAdapterInstance, any, any, any>;
export type EmitterOptionsType<Endpoint extends string, AdapterType extends SocketAdapterInstance> = {
endpoint: Endpoint;
timeout?: number;
options?: ExtractEmitterOptionsType<AdapterType>;
};
export type EmitterAcknowledgeType<Response, AdapterType extends SocketAdapterInstance> = (
response:
| { error: Error; data: null; extra: null }
| { error: null; data: Response; extra: ExtractSocketExtraType<AdapterType> },
) => void;
// Emit
export type EmitDataType<Payload, HasData extends boolean> = HasData extends false
? {
data: Payload;
}
: { data?: never };
export type EmitParamsType<Params, HasData extends boolean> = HasData extends false
? Params extends NegativeTypes
? { params?: never }
: {
params: Params;
}
: { params?: never };
export type EmitRestType<Emitter extends EmitterInstance> = {
options?: Partial<EmitterOptionsType<ExtractEmitterEndpointType<Emitter>, ExtractEmitterAdapterType<Emitter>>>;
ack?: EmitterAcknowledgeType<ExtractEmitterPayloadType<Emitter>, ExtractEmitterAdapterType<Emitter>>;
};
export type EmitType<Emitter extends EmitterInstance> = ExtractEmitterHasDataType<Emitter> extends false
? (
options: EmitDataType<ExtractEmitterPayloadType<Emitter>, ExtractEmitterHasParamsType<Emitter>> &
EmitParamsType<ExtractRouteParams<ExtractEmitterEndpointType<Emitter>>, ExtractEmitterHasParamsType<Emitter>> &
EmitRestType<Emitter>,
) => string
: ExtractRouteParams<ExtractEmitterEndpointType<Emitter>> extends NegativeTypes
? (
options?: EmitDataType<ExtractEmitterPayloadType<Emitter>, ExtractEmitterHasParamsType<Emitter>> &
EmitParamsType<ExtractRouteParams<ExtractEmitterEndpointType<Emitter>>, ExtractEmitterHasParamsType<Emitter>> &
EmitRestType<Emitter>,
) => string
: ExtractEmitterHasParamsType<Emitter> extends false
? (
options: EmitDataType<ExtractEmitterPayloadType<Emitter>, ExtractEmitterHasParamsType<Emitter>> &
EmitParamsType<ExtractRouteParams<ExtractEmitterEndpointType<Emitter>>, ExtractEmitterHasParamsType<Emitter>> &
EmitRestType<Emitter>,
) => string
: (
options?: EmitDataType<ExtractEmitterPayloadType<Emitter>, ExtractEmitterHasParamsType<Emitter>> &
EmitParamsType<ExtractRouteParams<ExtractEmitterEndpointType<Emitter>>, ExtractEmitterHasParamsType<Emitter>> &
EmitRestType<Emitter>,
) => string;