@pluv/types 0.17.3 → 0.19.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/.turbo/turbo-build.log +15 -15
- package/CHANGELOG.md +98 -0
- package/dist/index.d.mts +33 -30
- package/dist/index.d.ts +33 -30
- package/package.json +4 -4
- package/src/general.ts +22 -29
- package/src/index.ts +9 -10
- package/src/pluv.ts +55 -88
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
|
|
2
|
-
> @pluv/types@0.
|
|
2
|
+
> @pluv/types@0.19.0 build /home/runner/work/pluv/pluv/packages/types
|
|
3
3
|
> tsup src/index.ts --format esm,cjs --dts
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
CLI Building entry: src/index.ts
|
|
6
|
+
CLI Using tsconfig: tsconfig.json
|
|
7
|
+
CLI tsup v8.1.0
|
|
8
|
+
CLI Target: es6
|
|
9
|
+
ESM Build start
|
|
10
|
+
CJS Build start
|
|
11
|
+
CJS dist/index.js 754.00 B
|
|
12
|
+
CJS ⚡️ Build success in 30ms
|
|
13
|
+
ESM dist/index.mjs 0 B
|
|
14
|
+
ESM ⚡️ Build success in 30ms
|
|
15
|
+
DTS Build start
|
|
16
|
+
DTS ⚡️ Build success in 846ms
|
|
17
|
+
DTS dist/index.d.mts 7.35 KB
|
|
18
|
+
DTS dist/index.d.ts 7.35 KB
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,103 @@
|
|
|
1
1
|
# @pluv/types
|
|
2
2
|
|
|
3
|
+
## 0.19.0
|
|
4
|
+
|
|
5
|
+
## 0.18.0
|
|
6
|
+
|
|
7
|
+
### Minor Changes
|
|
8
|
+
|
|
9
|
+
- 99b5ca9: ## Breaking Changes
|
|
10
|
+
|
|
11
|
+
- `@pluv/io` has been updated to introduce `PluvProcedure`, `PluvRouter` and `PluvServer`. This change is intended to improve the ergonomics of declaring events and simplifying inferences of event types.
|
|
12
|
+
|
|
13
|
+
### Before:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
// backend/io.ts
|
|
17
|
+
|
|
18
|
+
import { createIO } from "@pluv/io";
|
|
19
|
+
import { createPluvHandler, platformNode } from "@pluv/platform-node";
|
|
20
|
+
import { z } from "zod";
|
|
21
|
+
|
|
22
|
+
export const io = createIO({
|
|
23
|
+
platform: platformNode(),
|
|
24
|
+
})
|
|
25
|
+
.event("SEND_MESSAGE", {
|
|
26
|
+
input: z.object({ message: z.string() }),
|
|
27
|
+
resolver: ({ message }) => ({ RECEIVE_MESSAGE: { message } }),
|
|
28
|
+
})
|
|
29
|
+
.event("DOUBLE_VALUE", {
|
|
30
|
+
input: z.object({ value: z.number() }),
|
|
31
|
+
resolver: ({ value }) => ({ VALUE_DOUBLED: { value: value * 2 } }),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const Pluv = createPluvHandler({
|
|
35
|
+
io,
|
|
36
|
+
/* ... */
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
// frontend/pluv.ts
|
|
42
|
+
|
|
43
|
+
import { createClient } from "@pluv/react";
|
|
44
|
+
import type { io } from "../backend/io";
|
|
45
|
+
|
|
46
|
+
const client = createClient<typeof io>({
|
|
47
|
+
/* ... */
|
|
48
|
+
});
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Now:
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
import { createIO } from "@pluv/io";
|
|
55
|
+
import { createPluvHandler, platformNode } from "@pluv/platform-node";
|
|
56
|
+
import { z } from "zod";
|
|
57
|
+
|
|
58
|
+
const io = createIO({
|
|
59
|
+
platform: platformNode(),
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const router = io.router({
|
|
63
|
+
SEND_MESSAGE: io.procedure
|
|
64
|
+
.input(z.object({ message: z.string() }))
|
|
65
|
+
.broadcast(({ message }) => ({
|
|
66
|
+
RECEIVE_MESSAGE: { message },
|
|
67
|
+
})),
|
|
68
|
+
DOUBLE_VALUE: io.procedure
|
|
69
|
+
.input(z.object({ value: z.number() }))
|
|
70
|
+
.broadcast(({ value }) => ({
|
|
71
|
+
VALUE_DOUBLED: { value: value * 2 },
|
|
72
|
+
})),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
export const ioServer = io.server({ router });
|
|
76
|
+
|
|
77
|
+
const Pluv = createPluvHandler({
|
|
78
|
+
io: ioServer, // <- This uses the PluvServer now
|
|
79
|
+
/* ... */
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
// frontend/pluv.ts
|
|
85
|
+
|
|
86
|
+
import { createClient } from "@pluv/react";
|
|
87
|
+
import type { ioServer } from "../backend/io";
|
|
88
|
+
|
|
89
|
+
// This users the PluvServer type now
|
|
90
|
+
const client = createClient<typeof ioServer>({
|
|
91
|
+
/* ... */
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
- `PluvRouter` instances can also be merged via the `mergeRouters` method, which effectively performs an `Object.assign` of the events object and returns a new `PluvRouter` with the correct types:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
const router = io.mergeRouters(router1, router2);
|
|
99
|
+
```
|
|
100
|
+
|
|
3
101
|
## 0.17.3
|
|
4
102
|
|
|
5
103
|
## 0.17.2
|
package/dist/index.d.mts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
type Constructable = {
|
|
2
2
|
new (...args: any[]): any;
|
|
3
3
|
};
|
|
4
|
-
type Maybe<T> = T |
|
|
4
|
+
type Maybe<T> = T | Nil;
|
|
5
5
|
type MaybePromise<T> = Promise<T> | T;
|
|
6
6
|
type MaybeReadonlyArray<T> = T[] | readonly T[];
|
|
7
|
+
type Nil = null | undefined;
|
|
7
8
|
type OptionalPropertyNames<T> = {
|
|
8
9
|
[K in keyof T]-?: {} extends {
|
|
9
10
|
[P in K]: T[K];
|
|
@@ -12,14 +13,11 @@ type OptionalPropertyNames<T> = {
|
|
|
12
13
|
type SpreadProperties<L, R, K extends keyof L & keyof R> = {
|
|
13
14
|
[P in K]: L[P] | Exclude<R[P], undefined>;
|
|
14
15
|
};
|
|
15
|
-
type Id<T> = T extends infer U ? U extends Constructable ? U : {
|
|
16
|
+
type Id<T> = T extends Nil ? T : T extends infer U ? U extends Constructable ? U : {
|
|
16
17
|
[K in keyof U]: U[K];
|
|
17
18
|
} : never;
|
|
18
19
|
type SpreadTwo<L, R> = Id<Pick<L, Exclude<keyof L, keyof R>> & Pick<R, Exclude<keyof R, OptionalPropertyNames<R>>> & Pick<R, Exclude<OptionalPropertyNames<R>, keyof L>> & SpreadProperties<L, R, OptionalPropertyNames<R> & keyof L>>;
|
|
19
|
-
type Spread<A extends readonly [...any]> = A extends [
|
|
20
|
-
infer L,
|
|
21
|
-
...infer R
|
|
22
|
-
] ? SpreadTwo<L, Spread<R>> : unknown;
|
|
20
|
+
type Spread<A extends readonly [...any]> = A extends [infer L, ...infer R] ? SpreadTwo<L, Spread<R>> : unknown;
|
|
23
21
|
type DeepPartial<T> = {
|
|
24
22
|
[P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : DeepPartial<T[P]>;
|
|
25
23
|
};
|
|
@@ -35,6 +33,7 @@ type Json = JsonPrimitive | Json[] | readonly Json[] | {
|
|
|
35
33
|
[key: string]: Json;
|
|
36
34
|
};
|
|
37
35
|
type JsonObject = Record<string, Json>;
|
|
36
|
+
type UnionToIntersection<U> = (U extends any ? (arg: U) => any : never) extends (arg: infer I) => void ? I : never;
|
|
38
37
|
|
|
39
38
|
type BaseUser = {
|
|
40
39
|
id: string;
|
|
@@ -67,13 +66,13 @@ interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any, an
|
|
|
67
66
|
connectionId: string;
|
|
68
67
|
presence: JsonObject | null;
|
|
69
68
|
room: string | null;
|
|
70
|
-
user: InferIOAuthorizeUser<TAuthorize
|
|
69
|
+
user: Id<InferIOAuthorizeUser<TAuthorize>>;
|
|
71
70
|
};
|
|
72
71
|
};
|
|
73
72
|
};
|
|
74
73
|
$USER_JOINED: {
|
|
75
74
|
connectionId: string;
|
|
76
|
-
user: NonNullable<InferIOAuthorizeUser<TAuthorize
|
|
75
|
+
user: NonNullable<Id<InferIOAuthorizeUser<TAuthorize>>>;
|
|
77
76
|
presence: JsonObject;
|
|
78
77
|
};
|
|
79
78
|
}
|
|
@@ -107,17 +106,9 @@ type EventRecord<TEvent extends string, TData extends JsonObject> = {
|
|
|
107
106
|
[key in `${TEvent}`]: TData;
|
|
108
107
|
};
|
|
109
108
|
type GetEventMessage<T extends EventRecord<string, any>, TEvent extends keyof T> = TEvent extends string ? EventMessage<TEvent, T[TEvent]> : never;
|
|
110
|
-
type InferEventMessage<TEvents extends EventRecord<string, any> = EventRecord<string, any>, TEvent extends keyof TEvents = keyof TEvents> = {
|
|
111
|
-
[P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
|
|
112
|
-
}[TEvent];
|
|
113
109
|
type InferIOAuthorize<TIO extends IOLike> = TIO extends IOLike<infer IAuthorize> ? IAuthorize : never;
|
|
114
110
|
type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any, any>> = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
|
|
115
111
|
type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any, any>> = TAuthorize extends IOAuthorize<infer IUser, infer IRequired> ? IRequired extends true ? IUser : IUser | null : never;
|
|
116
|
-
type InferIOInput<TIO extends IOLike> = TIO extends IOLike<any, infer IInput> ? IInput : never;
|
|
117
|
-
type InferIOOutput<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutputBroadcast, infer IOutputSelf, infer IOutputSync> ? Spread<[IOutputBroadcast, IOutputSelf, IOutputSync]> : never;
|
|
118
|
-
type InferIOOutputBroadcast<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutput> ? IOutput : never;
|
|
119
|
-
type InferIOOutputSelf<TIO extends IOLike> = TIO extends IOLike<any, any, any, infer IOutput> ? IOutput : never;
|
|
120
|
-
type InferIOOutputSync<TIO extends IOLike> = TIO extends IOLike<any, any, any, any, infer IOutput> ? IOutput : never;
|
|
121
112
|
type InputZodLike<TData extends JsonObject> = {
|
|
122
113
|
_input: TData;
|
|
123
114
|
parse: (data: unknown) => TData;
|
|
@@ -137,20 +128,32 @@ interface IOAuthorizeOptionalEventMessage<TIO extends IOLike> {
|
|
|
137
128
|
user: InferIOAuthorizeUser<InferIOAuthorize<TIO>> | null;
|
|
138
129
|
}
|
|
139
130
|
type IOAuthorizeRequiredEventMessage<TIO extends IOLike> = NonNilProps<IOAuthorizeOptionalEventMessage<TIO>, "connectionId" | "user">;
|
|
140
|
-
type
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
resolver: ((data: TInput[P], ...args: any[]) => MaybePromise<TOutputBroadcast | void>) | {
|
|
148
|
-
broadcast?: (data: TInput[P], ...args: any[]) => MaybePromise<TOutputBroadcast | void>;
|
|
149
|
-
self?: (data: TInput[P], ...args: any[]) => MaybePromise<TOutputSelf | void>;
|
|
150
|
-
sync?: (data: TInput[P], ...args: any[]) => MaybePromise<TOutputSync | void>;
|
|
151
|
-
};
|
|
152
|
-
} : never;
|
|
131
|
+
type ProcedureLike<TInput extends JsonObject = {}, TOutput extends EventRecord<string, any> = {}> = {
|
|
132
|
+
config: {
|
|
133
|
+
broadcast?: ((data: TInput, ...args: any[]) => MaybePromise<Partial<TOutput> | void>) | null;
|
|
134
|
+
input?: InputZodLike<TInput> | null;
|
|
135
|
+
resolver: (data: TInput, ...args: any[]) => MaybePromise<TOutput>;
|
|
136
|
+
self?: ((data: TInput, ...args: any[]) => MaybePromise<Partial<TOutput> | void>) | null;
|
|
137
|
+
sync?: ((data: TInput, ...args: any[]) => MaybePromise<Partial<TOutput> | void>) | null;
|
|
153
138
|
};
|
|
139
|
+
};
|
|
140
|
+
interface IORouterLike<TEvents extends Record<string, ProcedureLike<any, any>> = {}> {
|
|
141
|
+
_events: TEvents;
|
|
154
142
|
}
|
|
143
|
+
interface IOLike<TAuthorize extends IOAuthorize<any, any, any> = IOAuthorize<any, any, any>, TEvents extends Record<string, ProcedureLike<any, any>> = {}> extends IORouterLike<TEvents> {
|
|
144
|
+
_authorize: TAuthorize | null;
|
|
145
|
+
}
|
|
146
|
+
type InferIOInput<TRouter extends IORouterLike<any>> = TRouter extends IORouterLike<infer IEvents> ? {
|
|
147
|
+
[P in keyof IEvents]: IEvents[P] extends ProcedureLike<infer IInput, any> ? IInput : never;
|
|
148
|
+
} : never;
|
|
149
|
+
type InferIOOutput<TRouter extends IORouterLike<any>> = TRouter extends IORouterLike<infer IEvents> ? UnionToIntersection<{
|
|
150
|
+
[P in keyof IEvents]: IEvents[P] extends ProcedureLike<any, infer IOutput> ? IOutput : never;
|
|
151
|
+
}[keyof IEvents]> : never;
|
|
152
|
+
type InferEventMessage<TEvents extends EventRecord<string, any> = EventRecord<string, any>, TEvent extends keyof TEvents = keyof TEvents> = {
|
|
153
|
+
[P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
|
|
154
|
+
}[TEvent];
|
|
155
|
+
type IOEventMessage<TIO extends IOLike<any>, TEvent extends keyof InferIOOutput<TIO> = keyof InferIOOutput<TIO>> = Id<{
|
|
156
|
+
room: string;
|
|
157
|
+
} & InferEventMessage<InferIOOutput<TIO>, TEvent> & (InferEventMessage<InferIOOutput<TIO>, TEvent>["type"] extends "$ERROR" ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeEventMessage<TIO>)>;
|
|
155
158
|
|
|
156
|
-
export type { BaseClientEventRecord, BaseClientMessage, BaseIOAuthorize, BaseIOAuthorizeEventRecord, BaseIOEventRecord, BaseUser, Constructable, DeepPartial, DeepWriteable, EventMessage, EventRecord, GetEventMessage, IOAuthorize, IOAuthorizeEventMessage, IOAuthorizeOptionalEventMessage, IOAuthorizeRequiredEventMessage, IOEventMessage, IOLike, Id, InferEventMessage, InferIOAuthorize, InferIOAuthorizeRequired, InferIOAuthorizeUser, InferIOInput, InferIOOutput,
|
|
159
|
+
export type { BaseClientEventRecord, BaseClientMessage, BaseIOAuthorize, BaseIOAuthorizeEventRecord, BaseIOEventRecord, BaseUser, Constructable, DeepPartial, DeepWriteable, EventMessage, EventRecord, GetEventMessage, IOAuthorize, IOAuthorizeEventMessage, IOAuthorizeOptionalEventMessage, IOAuthorizeRequiredEventMessage, IOEventMessage, IOLike, IORouterLike, Id, InferEventMessage, InferIOAuthorize, InferIOAuthorizeRequired, InferIOAuthorizeUser, InferIOInput, InferIOOutput, InputZodLike, Json, JsonObject, JsonPrimitive, Maybe, MaybePromise, MaybeReadonlyArray, NonNilProps, OptionalProps, ProcedureLike, Spread, SpreadProperties };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
type Constructable = {
|
|
2
2
|
new (...args: any[]): any;
|
|
3
3
|
};
|
|
4
|
-
type Maybe<T> = T |
|
|
4
|
+
type Maybe<T> = T | Nil;
|
|
5
5
|
type MaybePromise<T> = Promise<T> | T;
|
|
6
6
|
type MaybeReadonlyArray<T> = T[] | readonly T[];
|
|
7
|
+
type Nil = null | undefined;
|
|
7
8
|
type OptionalPropertyNames<T> = {
|
|
8
9
|
[K in keyof T]-?: {} extends {
|
|
9
10
|
[P in K]: T[K];
|
|
@@ -12,14 +13,11 @@ type OptionalPropertyNames<T> = {
|
|
|
12
13
|
type SpreadProperties<L, R, K extends keyof L & keyof R> = {
|
|
13
14
|
[P in K]: L[P] | Exclude<R[P], undefined>;
|
|
14
15
|
};
|
|
15
|
-
type Id<T> = T extends infer U ? U extends Constructable ? U : {
|
|
16
|
+
type Id<T> = T extends Nil ? T : T extends infer U ? U extends Constructable ? U : {
|
|
16
17
|
[K in keyof U]: U[K];
|
|
17
18
|
} : never;
|
|
18
19
|
type SpreadTwo<L, R> = Id<Pick<L, Exclude<keyof L, keyof R>> & Pick<R, Exclude<keyof R, OptionalPropertyNames<R>>> & Pick<R, Exclude<OptionalPropertyNames<R>, keyof L>> & SpreadProperties<L, R, OptionalPropertyNames<R> & keyof L>>;
|
|
19
|
-
type Spread<A extends readonly [...any]> = A extends [
|
|
20
|
-
infer L,
|
|
21
|
-
...infer R
|
|
22
|
-
] ? SpreadTwo<L, Spread<R>> : unknown;
|
|
20
|
+
type Spread<A extends readonly [...any]> = A extends [infer L, ...infer R] ? SpreadTwo<L, Spread<R>> : unknown;
|
|
23
21
|
type DeepPartial<T> = {
|
|
24
22
|
[P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : DeepPartial<T[P]>;
|
|
25
23
|
};
|
|
@@ -35,6 +33,7 @@ type Json = JsonPrimitive | Json[] | readonly Json[] | {
|
|
|
35
33
|
[key: string]: Json;
|
|
36
34
|
};
|
|
37
35
|
type JsonObject = Record<string, Json>;
|
|
36
|
+
type UnionToIntersection<U> = (U extends any ? (arg: U) => any : never) extends (arg: infer I) => void ? I : never;
|
|
38
37
|
|
|
39
38
|
type BaseUser = {
|
|
40
39
|
id: string;
|
|
@@ -67,13 +66,13 @@ interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any, an
|
|
|
67
66
|
connectionId: string;
|
|
68
67
|
presence: JsonObject | null;
|
|
69
68
|
room: string | null;
|
|
70
|
-
user: InferIOAuthorizeUser<TAuthorize
|
|
69
|
+
user: Id<InferIOAuthorizeUser<TAuthorize>>;
|
|
71
70
|
};
|
|
72
71
|
};
|
|
73
72
|
};
|
|
74
73
|
$USER_JOINED: {
|
|
75
74
|
connectionId: string;
|
|
76
|
-
user: NonNullable<InferIOAuthorizeUser<TAuthorize
|
|
75
|
+
user: NonNullable<Id<InferIOAuthorizeUser<TAuthorize>>>;
|
|
77
76
|
presence: JsonObject;
|
|
78
77
|
};
|
|
79
78
|
}
|
|
@@ -107,17 +106,9 @@ type EventRecord<TEvent extends string, TData extends JsonObject> = {
|
|
|
107
106
|
[key in `${TEvent}`]: TData;
|
|
108
107
|
};
|
|
109
108
|
type GetEventMessage<T extends EventRecord<string, any>, TEvent extends keyof T> = TEvent extends string ? EventMessage<TEvent, T[TEvent]> : never;
|
|
110
|
-
type InferEventMessage<TEvents extends EventRecord<string, any> = EventRecord<string, any>, TEvent extends keyof TEvents = keyof TEvents> = {
|
|
111
|
-
[P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
|
|
112
|
-
}[TEvent];
|
|
113
109
|
type InferIOAuthorize<TIO extends IOLike> = TIO extends IOLike<infer IAuthorize> ? IAuthorize : never;
|
|
114
110
|
type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any, any>> = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
|
|
115
111
|
type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any, any>> = TAuthorize extends IOAuthorize<infer IUser, infer IRequired> ? IRequired extends true ? IUser : IUser | null : never;
|
|
116
|
-
type InferIOInput<TIO extends IOLike> = TIO extends IOLike<any, infer IInput> ? IInput : never;
|
|
117
|
-
type InferIOOutput<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutputBroadcast, infer IOutputSelf, infer IOutputSync> ? Spread<[IOutputBroadcast, IOutputSelf, IOutputSync]> : never;
|
|
118
|
-
type InferIOOutputBroadcast<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutput> ? IOutput : never;
|
|
119
|
-
type InferIOOutputSelf<TIO extends IOLike> = TIO extends IOLike<any, any, any, infer IOutput> ? IOutput : never;
|
|
120
|
-
type InferIOOutputSync<TIO extends IOLike> = TIO extends IOLike<any, any, any, any, infer IOutput> ? IOutput : never;
|
|
121
112
|
type InputZodLike<TData extends JsonObject> = {
|
|
122
113
|
_input: TData;
|
|
123
114
|
parse: (data: unknown) => TData;
|
|
@@ -137,20 +128,32 @@ interface IOAuthorizeOptionalEventMessage<TIO extends IOLike> {
|
|
|
137
128
|
user: InferIOAuthorizeUser<InferIOAuthorize<TIO>> | null;
|
|
138
129
|
}
|
|
139
130
|
type IOAuthorizeRequiredEventMessage<TIO extends IOLike> = NonNilProps<IOAuthorizeOptionalEventMessage<TIO>, "connectionId" | "user">;
|
|
140
|
-
type
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
resolver: ((data: TInput[P], ...args: any[]) => MaybePromise<TOutputBroadcast | void>) | {
|
|
148
|
-
broadcast?: (data: TInput[P], ...args: any[]) => MaybePromise<TOutputBroadcast | void>;
|
|
149
|
-
self?: (data: TInput[P], ...args: any[]) => MaybePromise<TOutputSelf | void>;
|
|
150
|
-
sync?: (data: TInput[P], ...args: any[]) => MaybePromise<TOutputSync | void>;
|
|
151
|
-
};
|
|
152
|
-
} : never;
|
|
131
|
+
type ProcedureLike<TInput extends JsonObject = {}, TOutput extends EventRecord<string, any> = {}> = {
|
|
132
|
+
config: {
|
|
133
|
+
broadcast?: ((data: TInput, ...args: any[]) => MaybePromise<Partial<TOutput> | void>) | null;
|
|
134
|
+
input?: InputZodLike<TInput> | null;
|
|
135
|
+
resolver: (data: TInput, ...args: any[]) => MaybePromise<TOutput>;
|
|
136
|
+
self?: ((data: TInput, ...args: any[]) => MaybePromise<Partial<TOutput> | void>) | null;
|
|
137
|
+
sync?: ((data: TInput, ...args: any[]) => MaybePromise<Partial<TOutput> | void>) | null;
|
|
153
138
|
};
|
|
139
|
+
};
|
|
140
|
+
interface IORouterLike<TEvents extends Record<string, ProcedureLike<any, any>> = {}> {
|
|
141
|
+
_events: TEvents;
|
|
154
142
|
}
|
|
143
|
+
interface IOLike<TAuthorize extends IOAuthorize<any, any, any> = IOAuthorize<any, any, any>, TEvents extends Record<string, ProcedureLike<any, any>> = {}> extends IORouterLike<TEvents> {
|
|
144
|
+
_authorize: TAuthorize | null;
|
|
145
|
+
}
|
|
146
|
+
type InferIOInput<TRouter extends IORouterLike<any>> = TRouter extends IORouterLike<infer IEvents> ? {
|
|
147
|
+
[P in keyof IEvents]: IEvents[P] extends ProcedureLike<infer IInput, any> ? IInput : never;
|
|
148
|
+
} : never;
|
|
149
|
+
type InferIOOutput<TRouter extends IORouterLike<any>> = TRouter extends IORouterLike<infer IEvents> ? UnionToIntersection<{
|
|
150
|
+
[P in keyof IEvents]: IEvents[P] extends ProcedureLike<any, infer IOutput> ? IOutput : never;
|
|
151
|
+
}[keyof IEvents]> : never;
|
|
152
|
+
type InferEventMessage<TEvents extends EventRecord<string, any> = EventRecord<string, any>, TEvent extends keyof TEvents = keyof TEvents> = {
|
|
153
|
+
[P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
|
|
154
|
+
}[TEvent];
|
|
155
|
+
type IOEventMessage<TIO extends IOLike<any>, TEvent extends keyof InferIOOutput<TIO> = keyof InferIOOutput<TIO>> = Id<{
|
|
156
|
+
room: string;
|
|
157
|
+
} & InferEventMessage<InferIOOutput<TIO>, TEvent> & (InferEventMessage<InferIOOutput<TIO>, TEvent>["type"] extends "$ERROR" ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeEventMessage<TIO>)>;
|
|
155
158
|
|
|
156
|
-
export type { BaseClientEventRecord, BaseClientMessage, BaseIOAuthorize, BaseIOAuthorizeEventRecord, BaseIOEventRecord, BaseUser, Constructable, DeepPartial, DeepWriteable, EventMessage, EventRecord, GetEventMessage, IOAuthorize, IOAuthorizeEventMessage, IOAuthorizeOptionalEventMessage, IOAuthorizeRequiredEventMessage, IOEventMessage, IOLike, Id, InferEventMessage, InferIOAuthorize, InferIOAuthorizeRequired, InferIOAuthorizeUser, InferIOInput, InferIOOutput,
|
|
159
|
+
export type { BaseClientEventRecord, BaseClientMessage, BaseIOAuthorize, BaseIOAuthorizeEventRecord, BaseIOEventRecord, BaseUser, Constructable, DeepPartial, DeepWriteable, EventMessage, EventRecord, GetEventMessage, IOAuthorize, IOAuthorizeEventMessage, IOAuthorizeOptionalEventMessage, IOAuthorizeRequiredEventMessage, IOEventMessage, IOLike, IORouterLike, Id, InferEventMessage, InferIOAuthorize, InferIOAuthorizeRequired, InferIOAuthorizeUser, InferIOInput, InferIOOutput, InputZodLike, Json, JsonObject, JsonPrimitive, Maybe, MaybePromise, MaybeReadonlyArray, NonNilProps, OptionalProps, ProcedureLike, Spread, SpreadProperties };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pluv/types",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "@pluv/io shared types",
|
|
5
5
|
"author": "leedavidcs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"access": "public"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"tsup": "^8.0
|
|
19
|
+
"tsup": "^8.1.0",
|
|
20
20
|
"typescript": "^5.4.5",
|
|
21
|
-
"@pluv/tsconfig": "^0.
|
|
22
|
-
"eslint-config-pluv": "^0.
|
|
21
|
+
"@pluv/tsconfig": "^0.19.0",
|
|
22
|
+
"eslint-config-pluv": "^0.19.0"
|
|
23
23
|
},
|
|
24
24
|
"scripts": {
|
|
25
25
|
"build": "tsup src/index.ts --format esm,cjs --dts",
|
package/src/general.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export type Constructable = { new (...args: any[]): any };
|
|
2
2
|
|
|
3
|
-
export type Maybe<T> = T |
|
|
3
|
+
export type Maybe<T> = T | Nil;
|
|
4
4
|
export type MaybePromise<T> = Promise<T> | T;
|
|
5
5
|
export type MaybeReadonlyArray<T> = T[] | readonly T[];
|
|
6
|
+
export type Nil = null | undefined;
|
|
6
7
|
|
|
7
8
|
type OptionalPropertyNames<T> = {
|
|
8
9
|
[K in keyof T]-?: {} extends { [P in K]: T[K] } ? K : never;
|
|
@@ -12,11 +13,15 @@ export type SpreadProperties<L, R, K extends keyof L & keyof R> = {
|
|
|
12
13
|
[P in K]: L[P] | Exclude<R[P], undefined>;
|
|
13
14
|
};
|
|
14
15
|
|
|
15
|
-
export type Id<T> = T extends
|
|
16
|
-
?
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
export type Id<T> = T extends Nil
|
|
17
|
+
? T
|
|
18
|
+
: T extends infer U
|
|
19
|
+
? U extends Constructable
|
|
20
|
+
? U
|
|
21
|
+
: { [K in keyof U]: U[K] }
|
|
22
|
+
: never;
|
|
23
|
+
|
|
24
|
+
export type Primitive = string | number | boolean | null | undefined;
|
|
20
25
|
|
|
21
26
|
type SpreadTwo<L, R> = Id<
|
|
22
27
|
Pick<L, Exclude<keyof L, keyof R>> &
|
|
@@ -25,12 +30,7 @@ type SpreadTwo<L, R> = Id<
|
|
|
25
30
|
SpreadProperties<L, R, OptionalPropertyNames<R> & keyof L>
|
|
26
31
|
>;
|
|
27
32
|
|
|
28
|
-
export type Spread<A extends readonly [...any]> = A extends [
|
|
29
|
-
infer L,
|
|
30
|
-
...infer R,
|
|
31
|
-
]
|
|
32
|
-
? SpreadTwo<L, Spread<R>>
|
|
33
|
-
: unknown;
|
|
33
|
+
export type Spread<A extends readonly [...any]> = A extends [infer L, ...infer R] ? SpreadTwo<L, Spread<R>> : unknown;
|
|
34
34
|
|
|
35
35
|
export type DeepPartial<T> = {
|
|
36
36
|
[P in keyof T]?: T[P] extends Array<infer U>
|
|
@@ -44,28 +44,21 @@ export type DeepWriteable<T> = {
|
|
|
44
44
|
-readonly [P in keyof T]: DeepWriteable<T[P]>;
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
-
export type OptionalProps<
|
|
48
|
-
T
|
|
49
|
-
K extends keyof T = keyof T,
|
|
50
|
-
> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
47
|
+
export type OptionalProps<T extends Record<string, any>, K extends keyof T = keyof T> = Omit<T, K> &
|
|
48
|
+
Partial<Pick<T, K>>;
|
|
51
49
|
|
|
52
|
-
export type NonNilProps<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
> = Omit<T, K> & { [P in K]-?: NonNullable<T[P]> };
|
|
50
|
+
export type NonNilProps<T extends Record<string, any>, K extends keyof T = keyof T> = Omit<T, K> & {
|
|
51
|
+
[P in K]-?: NonNullable<T[P]>;
|
|
52
|
+
};
|
|
56
53
|
|
|
57
54
|
export type JsonPrimitive = string | number | boolean | null;
|
|
58
55
|
|
|
59
|
-
export type Json =
|
|
60
|
-
| JsonPrimitive
|
|
61
|
-
| Json[]
|
|
62
|
-
| readonly Json[]
|
|
63
|
-
| { [key: string]: Json };
|
|
56
|
+
export type Json = JsonPrimitive | Json[] | readonly Json[] | { [key: string]: Json };
|
|
64
57
|
|
|
65
58
|
export type JsonObject = Record<string, Json>;
|
|
66
59
|
|
|
67
|
-
export type StringLiteral<T> = T extends string
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
export type StringLiteral<T> = T extends string ? (string extends T ? never : T) : never;
|
|
61
|
+
|
|
62
|
+
export type UnionToIntersection<U> = (U extends any ? (arg: U) => any : never) extends (arg: infer I) => void
|
|
63
|
+
? I
|
|
71
64
|
: never;
|
package/src/index.ts
CHANGED
|
@@ -15,29 +15,28 @@ export type {
|
|
|
15
15
|
SpreadProperties,
|
|
16
16
|
} from "./general";
|
|
17
17
|
export type {
|
|
18
|
-
BaseUser,
|
|
19
18
|
BaseClientEventRecord,
|
|
20
19
|
BaseClientMessage,
|
|
21
20
|
BaseIOAuthorize,
|
|
22
21
|
BaseIOAuthorizeEventRecord,
|
|
23
22
|
BaseIOEventRecord,
|
|
23
|
+
BaseUser,
|
|
24
24
|
EventMessage,
|
|
25
25
|
EventRecord,
|
|
26
26
|
GetEventMessage,
|
|
27
|
+
IOAuthorize,
|
|
28
|
+
IOAuthorizeEventMessage,
|
|
29
|
+
IOAuthorizeOptionalEventMessage,
|
|
30
|
+
IOAuthorizeRequiredEventMessage,
|
|
31
|
+
IOEventMessage,
|
|
32
|
+
IOLike,
|
|
33
|
+
IORouterLike,
|
|
27
34
|
InferEventMessage,
|
|
28
35
|
InferIOAuthorize,
|
|
29
36
|
InferIOAuthorizeRequired,
|
|
30
37
|
InferIOAuthorizeUser,
|
|
31
38
|
InferIOInput,
|
|
32
39
|
InferIOOutput,
|
|
33
|
-
InferIOOutputBroadcast,
|
|
34
|
-
InferIOOutputSelf,
|
|
35
|
-
InferIOOutputSync,
|
|
36
40
|
InputZodLike,
|
|
37
|
-
|
|
38
|
-
IOAuthorize,
|
|
39
|
-
IOAuthorizeEventMessage,
|
|
40
|
-
IOAuthorizeOptionalEventMessage,
|
|
41
|
-
IOAuthorizeRequiredEventMessage,
|
|
42
|
-
IOLike,
|
|
41
|
+
ProcedureLike,
|
|
43
42
|
} from "./pluv";
|
package/src/pluv.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Id, JsonObject, MaybePromise, NonNilProps,
|
|
1
|
+
import type { Id, JsonObject, MaybePromise, NonNilProps, UnionToIntersection } from "./general";
|
|
2
2
|
|
|
3
3
|
export type BaseUser = {
|
|
4
4
|
id: string;
|
|
@@ -28,22 +28,20 @@ export interface BaseIOAuthorize {
|
|
|
28
28
|
user: InputZodLike<BaseUser>;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
export interface BaseIOAuthorizeEventRecord<
|
|
32
|
-
TAuthorize extends IOAuthorize<any, any, any>,
|
|
33
|
-
> {
|
|
31
|
+
export interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any, any>> {
|
|
34
32
|
$OTHERS_RECEIVED: {
|
|
35
33
|
others: {
|
|
36
34
|
[connectionId: string]: {
|
|
37
35
|
connectionId: string;
|
|
38
36
|
presence: JsonObject | null;
|
|
39
37
|
room: string | null;
|
|
40
|
-
user: InferIOAuthorizeUser<TAuthorize
|
|
38
|
+
user: Id<InferIOAuthorizeUser<TAuthorize>>;
|
|
41
39
|
};
|
|
42
40
|
};
|
|
43
41
|
};
|
|
44
42
|
$USER_JOINED: {
|
|
45
43
|
connectionId: string;
|
|
46
|
-
user: NonNullable<InferIOAuthorizeUser<TAuthorize
|
|
44
|
+
user: NonNullable<Id<InferIOAuthorizeUser<TAuthorize>>>;
|
|
47
45
|
presence: JsonObject;
|
|
48
46
|
};
|
|
49
47
|
}
|
|
@@ -72,10 +70,7 @@ export type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any, any>> =
|
|
|
72
70
|
};
|
|
73
71
|
};
|
|
74
72
|
|
|
75
|
-
export interface EventMessage<
|
|
76
|
-
TEvent extends string,
|
|
77
|
-
TData extends JsonObject = {},
|
|
78
|
-
> {
|
|
73
|
+
export interface EventMessage<TEvent extends string, TData extends JsonObject = {}> {
|
|
79
74
|
data: TData;
|
|
80
75
|
type: TEvent;
|
|
81
76
|
}
|
|
@@ -84,57 +79,22 @@ export type EventRecord<TEvent extends string, TData extends JsonObject> = {
|
|
|
84
79
|
[key in `${TEvent}`]: TData;
|
|
85
80
|
};
|
|
86
81
|
|
|
87
|
-
export type GetEventMessage<
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
> = TEvent extends string ? EventMessage<TEvent, T[TEvent]> : never;
|
|
82
|
+
export type GetEventMessage<T extends EventRecord<string, any>, TEvent extends keyof T> = TEvent extends string
|
|
83
|
+
? EventMessage<TEvent, T[TEvent]>
|
|
84
|
+
: never;
|
|
91
85
|
|
|
92
|
-
export type
|
|
93
|
-
TEvents extends EventRecord<string, any> = EventRecord<string, any>,
|
|
94
|
-
TEvent extends keyof TEvents = keyof TEvents,
|
|
95
|
-
> = {
|
|
96
|
-
[P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
|
|
97
|
-
}[TEvent];
|
|
98
|
-
|
|
99
|
-
export type InferIOAuthorize<TIO extends IOLike> =
|
|
100
|
-
TIO extends IOLike<infer IAuthorize> ? IAuthorize : never;
|
|
86
|
+
export type InferIOAuthorize<TIO extends IOLike> = TIO extends IOLike<infer IAuthorize> ? IAuthorize : never;
|
|
101
87
|
|
|
102
|
-
export type InferIOAuthorizeRequired<
|
|
103
|
-
TAuthorize extends IOAuthorize<any,
|
|
104
|
-
> = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
|
|
88
|
+
export type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any, any>> =
|
|
89
|
+
TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
|
|
105
90
|
|
|
106
|
-
export type InferIOAuthorizeUser<
|
|
107
|
-
TAuthorize extends IOAuthorize<any, any, any>,
|
|
108
|
-
> =
|
|
91
|
+
export type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any, any>> =
|
|
109
92
|
TAuthorize extends IOAuthorize<infer IUser, infer IRequired>
|
|
110
93
|
? IRequired extends true
|
|
111
94
|
? IUser
|
|
112
95
|
: IUser | null
|
|
113
96
|
: never;
|
|
114
97
|
|
|
115
|
-
export type InferIOInput<TIO extends IOLike> =
|
|
116
|
-
TIO extends IOLike<any, infer IInput> ? IInput : never;
|
|
117
|
-
|
|
118
|
-
export type InferIOOutput<TIO extends IOLike> =
|
|
119
|
-
TIO extends IOLike<
|
|
120
|
-
any,
|
|
121
|
-
any,
|
|
122
|
-
infer IOutputBroadcast,
|
|
123
|
-
infer IOutputSelf,
|
|
124
|
-
infer IOutputSync
|
|
125
|
-
>
|
|
126
|
-
? Spread<[IOutputBroadcast, IOutputSelf, IOutputSync]>
|
|
127
|
-
: never;
|
|
128
|
-
|
|
129
|
-
export type InferIOOutputBroadcast<TIO extends IOLike> =
|
|
130
|
-
TIO extends IOLike<any, any, infer IOutput> ? IOutput : never;
|
|
131
|
-
|
|
132
|
-
export type InferIOOutputSelf<TIO extends IOLike> =
|
|
133
|
-
TIO extends IOLike<any, any, any, infer IOutput> ? IOutput : never;
|
|
134
|
-
|
|
135
|
-
export type InferIOOutputSync<TIO extends IOLike> =
|
|
136
|
-
TIO extends IOLike<any, any, any, any, infer IOutput> ? IOutput : never;
|
|
137
|
-
|
|
138
98
|
export type InputZodLike<TData extends JsonObject> = {
|
|
139
99
|
_input: TData;
|
|
140
100
|
parse: (data: unknown) => TData;
|
|
@@ -171,8 +131,50 @@ export type IOAuthorizeRequiredEventMessage<TIO extends IOLike> = NonNilProps<
|
|
|
171
131
|
"connectionId" | "user"
|
|
172
132
|
>;
|
|
173
133
|
|
|
134
|
+
export type ProcedureLike<TInput extends JsonObject = {}, TOutput extends EventRecord<string, any> = {}> = {
|
|
135
|
+
config: {
|
|
136
|
+
broadcast?: ((data: TInput, ...args: any[]) => MaybePromise<Partial<TOutput> | void>) | null;
|
|
137
|
+
input?: InputZodLike<TInput> | null;
|
|
138
|
+
resolver: (data: TInput, ...args: any[]) => MaybePromise<TOutput>;
|
|
139
|
+
self?: ((data: TInput, ...args: any[]) => MaybePromise<Partial<TOutput> | void>) | null;
|
|
140
|
+
sync?: ((data: TInput, ...args: any[]) => MaybePromise<Partial<TOutput> | void>) | null;
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
export interface IORouterLike<TEvents extends Record<string, ProcedureLike<any, any>> = {}> {
|
|
145
|
+
_events: TEvents;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export interface IOLike<
|
|
149
|
+
TAuthorize extends IOAuthorize<any, any, any> = IOAuthorize<any, any, any>,
|
|
150
|
+
TEvents extends Record<string, ProcedureLike<any, any>> = {},
|
|
151
|
+
> extends IORouterLike<TEvents> {
|
|
152
|
+
_authorize: TAuthorize | null;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export type InferIOInput<TRouter extends IORouterLike<any>> =
|
|
156
|
+
TRouter extends IORouterLike<infer IEvents>
|
|
157
|
+
? { [P in keyof IEvents]: IEvents[P] extends ProcedureLike<infer IInput, any> ? IInput : never }
|
|
158
|
+
: never;
|
|
159
|
+
|
|
160
|
+
export type InferIOOutput<TRouter extends IORouterLike<any>> =
|
|
161
|
+
TRouter extends IORouterLike<infer IEvents>
|
|
162
|
+
? UnionToIntersection<
|
|
163
|
+
{
|
|
164
|
+
[P in keyof IEvents]: IEvents[P] extends ProcedureLike<any, infer IOutput> ? IOutput : never;
|
|
165
|
+
}[keyof IEvents]
|
|
166
|
+
>
|
|
167
|
+
: never;
|
|
168
|
+
|
|
169
|
+
export type InferEventMessage<
|
|
170
|
+
TEvents extends EventRecord<string, any> = EventRecord<string, any>,
|
|
171
|
+
TEvent extends keyof TEvents = keyof TEvents,
|
|
172
|
+
> = {
|
|
173
|
+
[P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
|
|
174
|
+
}[TEvent];
|
|
175
|
+
|
|
174
176
|
export type IOEventMessage<
|
|
175
|
-
TIO extends IOLike
|
|
177
|
+
TIO extends IOLike<any>,
|
|
176
178
|
TEvent extends keyof InferIOOutput<TIO> = keyof InferIOOutput<TIO>,
|
|
177
179
|
> = Id<
|
|
178
180
|
{ room: string } & InferEventMessage<InferIOOutput<TIO>, TEvent> &
|
|
@@ -180,38 +182,3 @@ export type IOEventMessage<
|
|
|
180
182
|
? IOAuthorizeOptionalEventMessage<TIO>
|
|
181
183
|
: IOAuthorizeEventMessage<TIO>)
|
|
182
184
|
>;
|
|
183
|
-
|
|
184
|
-
export interface IOLike<
|
|
185
|
-
TAuthorize extends IOAuthorize<any, any, any> = IOAuthorize<any, any, any>,
|
|
186
|
-
TInput extends EventRecord<string, any> = {},
|
|
187
|
-
TOutputBroadcast extends EventRecord<string, any> = {},
|
|
188
|
-
TOutputSelf extends EventRecord<string, any> = {},
|
|
189
|
-
TOutputSync extends EventRecord<string, any> = {},
|
|
190
|
-
> {
|
|
191
|
-
_authorize: TAuthorize | null;
|
|
192
|
-
_events: {
|
|
193
|
-
[P in keyof TInput]: P extends string
|
|
194
|
-
? {
|
|
195
|
-
resolver:
|
|
196
|
-
| ((
|
|
197
|
-
data: TInput[P],
|
|
198
|
-
...args: any[]
|
|
199
|
-
) => MaybePromise<TOutputBroadcast | void>)
|
|
200
|
-
| {
|
|
201
|
-
broadcast?: (
|
|
202
|
-
data: TInput[P],
|
|
203
|
-
...args: any[]
|
|
204
|
-
) => MaybePromise<TOutputBroadcast | void>;
|
|
205
|
-
self?: (
|
|
206
|
-
data: TInput[P],
|
|
207
|
-
...args: any[]
|
|
208
|
-
) => MaybePromise<TOutputSelf | void>;
|
|
209
|
-
sync?: (
|
|
210
|
-
data: TInput[P],
|
|
211
|
-
...args: any[]
|
|
212
|
-
) => MaybePromise<TOutputSync | void>;
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
: never;
|
|
216
|
-
};
|
|
217
|
-
}
|