@pluv/types 0.0.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/.eslintrc.js +4 -0
- package/.turbo/turbo-build.log +17 -0
- package/dist/index.d.ts +140 -0
- package/dist/index.js +18 -0
- package/dist/index.mjs +0 -0
- package/package.json +21 -0
- package/src/general.ts +71 -0
- package/src/index.ts +40 -0
- package/src/pluv.ts +180 -0
- package/tsconfig.json +5 -0
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
> @pluv/types@0.0.0 build /home/runner/work/pluv/pluv/packages/types
|
|
3
|
+
> tsup src/index.ts --format esm,cjs --dts
|
|
4
|
+
|
|
5
|
+
[34mCLI[39m Building entry: src/index.ts
|
|
6
|
+
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
|
+
[34mCLI[39m tsup v6.5.0
|
|
8
|
+
[34mCLI[39m Target: es6
|
|
9
|
+
[34mESM[39m Build start
|
|
10
|
+
[34mCJS[39m Build start
|
|
11
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m0 B[39m
|
|
12
|
+
[32mESM[39m ⚡️ Build success in 30ms
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m754.00 B[39m
|
|
14
|
+
[32mCJS[39m ⚡️ Build success in 32ms
|
|
15
|
+
[34mDTS[39m Build start
|
|
16
|
+
[32mDTS[39m ⚡️ Build success in 754ms
|
|
17
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m6.15 KB[39m
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
type Constructable = {
|
|
2
|
+
new (...args: any[]): any;
|
|
3
|
+
};
|
|
4
|
+
type Maybe<T> = T | null | undefined;
|
|
5
|
+
type MaybePromise<T> = Promise<T> | T;
|
|
6
|
+
type MaybeReadonlyArray<T> = T[] | readonly T[];
|
|
7
|
+
type OptionalPropertyNames<T> = {
|
|
8
|
+
[K in keyof T]-?: {} extends {
|
|
9
|
+
[P in K]: T[K];
|
|
10
|
+
} ? K : never;
|
|
11
|
+
}[keyof T];
|
|
12
|
+
type SpreadProperties<L, R, K extends keyof L & keyof R> = {
|
|
13
|
+
[P in K]: L[P] | Exclude<R[P], undefined>;
|
|
14
|
+
};
|
|
15
|
+
type Id<T> = T extends infer U ? U extends Constructable ? U : {
|
|
16
|
+
[K in keyof U]: U[K];
|
|
17
|
+
} : never;
|
|
18
|
+
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;
|
|
23
|
+
type DeepPartial<T> = {
|
|
24
|
+
[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
|
+
};
|
|
26
|
+
type DeepWriteable<T> = {
|
|
27
|
+
-readonly [P in keyof T]: DeepWriteable<T[P]>;
|
|
28
|
+
};
|
|
29
|
+
type OptionalProps<T extends Record<string, any>, K extends keyof T = keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
30
|
+
type NonNilProps<T extends Record<string, any>, K extends keyof T = keyof T> = Omit<T, K> & {
|
|
31
|
+
[P in K]-?: NonNullable<T[P]>;
|
|
32
|
+
};
|
|
33
|
+
type JsonPrimitive = string | number | boolean | null;
|
|
34
|
+
type Json = JsonPrimitive | Json[] | readonly Json[] | {
|
|
35
|
+
[key: string]: Json;
|
|
36
|
+
};
|
|
37
|
+
type JsonObject = Record<string, Json>;
|
|
38
|
+
|
|
39
|
+
type BaseUser = {
|
|
40
|
+
id: string;
|
|
41
|
+
};
|
|
42
|
+
interface BaseClientEventRecord {
|
|
43
|
+
$GET_OTHERS: {};
|
|
44
|
+
$PING: {};
|
|
45
|
+
$UPDATE_PRESENCE: {
|
|
46
|
+
presence: JsonObject;
|
|
47
|
+
};
|
|
48
|
+
$UPDATE_STORAGE: {
|
|
49
|
+
origin: string | null;
|
|
50
|
+
update: string;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
type BaseClientMessage = InferEventMessage<BaseClientEventRecord>;
|
|
54
|
+
interface BaseIOAuthorize {
|
|
55
|
+
required: false;
|
|
56
|
+
secret: string;
|
|
57
|
+
user: InputZodLike<BaseUser>;
|
|
58
|
+
}
|
|
59
|
+
interface BaseIOAuthorizeEventRecord<TAuthorize extends IOAuthorize<any, any>> {
|
|
60
|
+
$OTHERS_RECEIVED: {
|
|
61
|
+
others: {
|
|
62
|
+
[connectionId: string]: {
|
|
63
|
+
connectionId: string;
|
|
64
|
+
presence: JsonObject | null;
|
|
65
|
+
room: string | null;
|
|
66
|
+
user: InferIOAuthorizeUser<TAuthorize>;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
$USER_JOINED: {
|
|
71
|
+
connectionId: string;
|
|
72
|
+
user: NonNullable<InferIOAuthorizeUser<TAuthorize>>;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any>> = BaseIOAuthorizeEventRecord<TAuthorize> & {
|
|
76
|
+
$ERROR: {
|
|
77
|
+
message: string;
|
|
78
|
+
stack?: string | null;
|
|
79
|
+
};
|
|
80
|
+
$EXIT: {
|
|
81
|
+
sessionId: string;
|
|
82
|
+
};
|
|
83
|
+
$PONG: {};
|
|
84
|
+
$PRESENCE_UPDATED: {
|
|
85
|
+
presence: JsonObject;
|
|
86
|
+
};
|
|
87
|
+
$REGISTERED: {
|
|
88
|
+
sessionId: string;
|
|
89
|
+
};
|
|
90
|
+
$STORAGE_RECEIVED: {
|
|
91
|
+
state: string;
|
|
92
|
+
};
|
|
93
|
+
$STORAGE_UPDATED: {
|
|
94
|
+
state: string;
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
interface EventMessage<TEvent extends string, TData extends JsonObject = {}> {
|
|
98
|
+
data: TData;
|
|
99
|
+
type: TEvent;
|
|
100
|
+
}
|
|
101
|
+
type EventRecord<TEvent extends string, TData extends JsonObject> = {
|
|
102
|
+
[key in `${TEvent}`]: TData;
|
|
103
|
+
};
|
|
104
|
+
type GetEventMessage<T extends EventRecord<string, any>, TEvent extends keyof T> = TEvent extends string ? EventMessage<TEvent, T[TEvent]> : never;
|
|
105
|
+
type InferEventMessage<TEvents extends EventRecord<string, any> = EventRecord<string, any>, TEvent extends keyof TEvents = keyof TEvents> = {
|
|
106
|
+
[P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
|
|
107
|
+
}[TEvent];
|
|
108
|
+
type InferIOAuthorize<TIO extends IOLike> = TIO extends IOLike<infer IAuthorize> ? IAuthorize : never;
|
|
109
|
+
type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any>> = TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
|
|
110
|
+
type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any>> = TAuthorize extends IOAuthorize<infer IUser, infer IRequired> ? IRequired extends true ? IUser : IUser | null : never;
|
|
111
|
+
type InferIOInput<TIO extends IOLike> = TIO extends IOLike<any, infer IInput> ? IInput : never;
|
|
112
|
+
type InferIOOutput<TIO extends IOLike> = TIO extends IOLike<any, any, infer IOutput> ? IOutput : never;
|
|
113
|
+
type InputZodLike<TData extends JsonObject> = {
|
|
114
|
+
_input: TData;
|
|
115
|
+
parse: (data: unknown) => TData;
|
|
116
|
+
};
|
|
117
|
+
interface IOAuthorize<TUser extends BaseUser = any, TRequired extends boolean = false> {
|
|
118
|
+
required: TRequired;
|
|
119
|
+
secret: string;
|
|
120
|
+
user: InputZodLike<TUser>;
|
|
121
|
+
}
|
|
122
|
+
type IOAuthorizeEventMessage<TIO extends IOLike> = InferIOAuthorizeRequired<InferIOAuthorize<TIO>> extends false ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeRequiredEventMessage<TIO>;
|
|
123
|
+
interface IOAuthorizeOptionalEventMessage<TIO extends IOLike> {
|
|
124
|
+
connectionId: string | null;
|
|
125
|
+
user: InferIOAuthorizeUser<InferIOAuthorize<TIO>> | null;
|
|
126
|
+
}
|
|
127
|
+
type IOAuthorizeRequiredEventMessage<TIO extends IOLike> = NonNilProps<IOAuthorizeOptionalEventMessage<TIO>, "connectionId" | "user">;
|
|
128
|
+
type IOEventMessage<TIO extends IOLike, TEvent extends keyof InferIOOutput<TIO> = keyof InferIOOutput<TIO>> = Id<{
|
|
129
|
+
room: string;
|
|
130
|
+
} & InferEventMessage<InferIOOutput<TIO>, TEvent> & (InferEventMessage<InferIOOutput<TIO>, TEvent>["type"] extends "$ERROR" ? IOAuthorizeOptionalEventMessage<TIO> : IOAuthorizeEventMessage<TIO>)>;
|
|
131
|
+
interface IOLike<TAuthorize extends IOAuthorize<any, any> = IOAuthorize<any, any>, TInput extends EventRecord<string, any> = {}, TOutput extends EventRecord<string, any> = {}> {
|
|
132
|
+
_authorize: TAuthorize | null;
|
|
133
|
+
_events: {
|
|
134
|
+
[P in keyof TInput]: P extends string ? {
|
|
135
|
+
resolver: (data: TInput[P], ...args: any[]) => MaybePromise<TOutput | void>;
|
|
136
|
+
} : never;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export { 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, InputZodLike, Json, JsonObject, JsonPrimitive, Maybe, MaybePromise, MaybeReadonlyArray, NonNilProps, OptionalProps, Spread, SpreadProperties };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
|
|
16
|
+
// src/index.ts
|
|
17
|
+
var src_exports = {};
|
|
18
|
+
module.exports = __toCommonJS(src_exports);
|
package/dist/index.mjs
ADDED
|
File without changes
|
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pluv/types",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"main": "./dist/index.js",
|
|
5
|
+
"types": "./dist/index.d.ts",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"devDependencies": {
|
|
10
|
+
"@pluv/tsconfig": "^0.0.0",
|
|
11
|
+
"eslint-config-pluv": "^0.0.0",
|
|
12
|
+
"tsup": "^6.5.0",
|
|
13
|
+
"typescript": "^4.9.4"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsup src/index.ts --format esm,cjs --dts",
|
|
17
|
+
"dev": "tsup src/index.ts --format esm,cjs --watch --dts",
|
|
18
|
+
"lint": "eslint src/**/*.ts* --fix",
|
|
19
|
+
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
20
|
+
}
|
|
21
|
+
}
|
package/src/general.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export type Constructable = { new (...args: any[]): any };
|
|
2
|
+
|
|
3
|
+
export type Maybe<T> = T | null | undefined;
|
|
4
|
+
export type MaybePromise<T> = Promise<T> | T;
|
|
5
|
+
export type MaybeReadonlyArray<T> = T[] | readonly T[];
|
|
6
|
+
|
|
7
|
+
type OptionalPropertyNames<T> = {
|
|
8
|
+
[K in keyof T]-?: {} extends { [P in K]: T[K] } ? K : never;
|
|
9
|
+
}[keyof T];
|
|
10
|
+
|
|
11
|
+
export type SpreadProperties<L, R, K extends keyof L & keyof R> = {
|
|
12
|
+
[P in K]: L[P] | Exclude<R[P], undefined>;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type Id<T> = T extends infer U
|
|
16
|
+
? U extends Constructable
|
|
17
|
+
? U
|
|
18
|
+
: { [K in keyof U]: U[K] }
|
|
19
|
+
: never;
|
|
20
|
+
|
|
21
|
+
type SpreadTwo<L, R> = Id<
|
|
22
|
+
Pick<L, Exclude<keyof L, keyof R>> &
|
|
23
|
+
Pick<R, Exclude<keyof R, OptionalPropertyNames<R>>> &
|
|
24
|
+
Pick<R, Exclude<OptionalPropertyNames<R>, keyof L>> &
|
|
25
|
+
SpreadProperties<L, R, OptionalPropertyNames<R> & keyof L>
|
|
26
|
+
>;
|
|
27
|
+
|
|
28
|
+
export type Spread<A extends readonly [...any]> = A extends [
|
|
29
|
+
infer L,
|
|
30
|
+
...infer R
|
|
31
|
+
]
|
|
32
|
+
? SpreadTwo<L, Spread<R>>
|
|
33
|
+
: unknown;
|
|
34
|
+
|
|
35
|
+
export type DeepPartial<T> = {
|
|
36
|
+
[P in keyof T]?: T[P] extends Array<infer U>
|
|
37
|
+
? Array<DeepPartial<U>>
|
|
38
|
+
: T[P] extends ReadonlyArray<infer U>
|
|
39
|
+
? ReadonlyArray<DeepPartial<U>>
|
|
40
|
+
: DeepPartial<T[P]>;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export type DeepWriteable<T> = {
|
|
44
|
+
-readonly [P in keyof T]: DeepWriteable<T[P]>;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type OptionalProps<
|
|
48
|
+
T extends Record<string, any>,
|
|
49
|
+
K extends keyof T = keyof T
|
|
50
|
+
> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
51
|
+
|
|
52
|
+
export type NonNilProps<
|
|
53
|
+
T extends Record<string, any>,
|
|
54
|
+
K extends keyof T = keyof T
|
|
55
|
+
> = Omit<T, K> & { [P in K]-?: NonNullable<T[P]> };
|
|
56
|
+
|
|
57
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
58
|
+
|
|
59
|
+
export type Json =
|
|
60
|
+
| JsonPrimitive
|
|
61
|
+
| Json[]
|
|
62
|
+
| readonly Json[]
|
|
63
|
+
| { [key: string]: Json };
|
|
64
|
+
|
|
65
|
+
export type JsonObject = Record<string, Json>;
|
|
66
|
+
|
|
67
|
+
export type StringLiteral<T> = T extends string
|
|
68
|
+
? string extends T
|
|
69
|
+
? never
|
|
70
|
+
: T
|
|
71
|
+
: never;
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
Constructable,
|
|
3
|
+
DeepPartial,
|
|
4
|
+
DeepWriteable,
|
|
5
|
+
Id,
|
|
6
|
+
Json,
|
|
7
|
+
JsonObject,
|
|
8
|
+
JsonPrimitive,
|
|
9
|
+
Maybe,
|
|
10
|
+
MaybePromise,
|
|
11
|
+
MaybeReadonlyArray,
|
|
12
|
+
NonNilProps,
|
|
13
|
+
OptionalProps,
|
|
14
|
+
Spread,
|
|
15
|
+
SpreadProperties,
|
|
16
|
+
} from "./general";
|
|
17
|
+
export type {
|
|
18
|
+
BaseUser,
|
|
19
|
+
BaseClientEventRecord,
|
|
20
|
+
BaseClientMessage,
|
|
21
|
+
BaseIOAuthorize,
|
|
22
|
+
BaseIOAuthorizeEventRecord,
|
|
23
|
+
BaseIOEventRecord,
|
|
24
|
+
EventMessage,
|
|
25
|
+
EventRecord,
|
|
26
|
+
GetEventMessage,
|
|
27
|
+
InferEventMessage,
|
|
28
|
+
InferIOAuthorize,
|
|
29
|
+
InferIOAuthorizeRequired,
|
|
30
|
+
InferIOAuthorizeUser,
|
|
31
|
+
InferIOInput,
|
|
32
|
+
InferIOOutput,
|
|
33
|
+
InputZodLike,
|
|
34
|
+
IOEventMessage,
|
|
35
|
+
IOAuthorize,
|
|
36
|
+
IOAuthorizeEventMessage,
|
|
37
|
+
IOAuthorizeOptionalEventMessage,
|
|
38
|
+
IOAuthorizeRequiredEventMessage,
|
|
39
|
+
IOLike,
|
|
40
|
+
} from "./pluv";
|
package/src/pluv.ts
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { Id, JsonObject, MaybePromise, NonNilProps } from "./general";
|
|
2
|
+
|
|
3
|
+
export type BaseUser = {
|
|
4
|
+
id: string;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export interface BaseClientEventRecord {
|
|
8
|
+
$GET_OTHERS: {};
|
|
9
|
+
$PING: {};
|
|
10
|
+
$UPDATE_PRESENCE: {
|
|
11
|
+
presence: JsonObject;
|
|
12
|
+
};
|
|
13
|
+
$UPDATE_STORAGE: {
|
|
14
|
+
origin: string | null;
|
|
15
|
+
update: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type BaseClientMessage = InferEventMessage<BaseClientEventRecord>;
|
|
20
|
+
|
|
21
|
+
export interface BaseIOAuthorize {
|
|
22
|
+
required: false;
|
|
23
|
+
secret: string;
|
|
24
|
+
user: InputZodLike<BaseUser>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface BaseIOAuthorizeEventRecord<
|
|
28
|
+
TAuthorize extends IOAuthorize<any, any>
|
|
29
|
+
> {
|
|
30
|
+
$OTHERS_RECEIVED: {
|
|
31
|
+
others: {
|
|
32
|
+
[connectionId: string]: {
|
|
33
|
+
connectionId: string;
|
|
34
|
+
presence: JsonObject | null;
|
|
35
|
+
room: string | null;
|
|
36
|
+
user: InferIOAuthorizeUser<TAuthorize>;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
$USER_JOINED: {
|
|
41
|
+
connectionId: string;
|
|
42
|
+
user: NonNullable<InferIOAuthorizeUser<TAuthorize>>;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type BaseIOEventRecord<TAuthorize extends IOAuthorize<any, any>> =
|
|
47
|
+
BaseIOAuthorizeEventRecord<TAuthorize> & {
|
|
48
|
+
$ERROR: {
|
|
49
|
+
message: string;
|
|
50
|
+
stack?: string | null;
|
|
51
|
+
};
|
|
52
|
+
$EXIT: {
|
|
53
|
+
sessionId: string;
|
|
54
|
+
};
|
|
55
|
+
$PONG: {};
|
|
56
|
+
$PRESENCE_UPDATED: {
|
|
57
|
+
presence: JsonObject;
|
|
58
|
+
};
|
|
59
|
+
$REGISTERED: {
|
|
60
|
+
sessionId: string;
|
|
61
|
+
};
|
|
62
|
+
$STORAGE_RECEIVED: {
|
|
63
|
+
state: string;
|
|
64
|
+
};
|
|
65
|
+
$STORAGE_UPDATED: {
|
|
66
|
+
state: string;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export interface EventMessage<
|
|
71
|
+
TEvent extends string,
|
|
72
|
+
TData extends JsonObject = {}
|
|
73
|
+
> {
|
|
74
|
+
data: TData;
|
|
75
|
+
type: TEvent;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export type EventRecord<TEvent extends string, TData extends JsonObject> = {
|
|
79
|
+
[key in `${TEvent}`]: TData;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export type GetEventMessage<
|
|
83
|
+
T extends EventRecord<string, any>,
|
|
84
|
+
TEvent extends keyof T
|
|
85
|
+
> = TEvent extends string ? EventMessage<TEvent, T[TEvent]> : never;
|
|
86
|
+
|
|
87
|
+
export type InferEventMessage<
|
|
88
|
+
TEvents extends EventRecord<string, any> = EventRecord<string, any>,
|
|
89
|
+
TEvent extends keyof TEvents = keyof TEvents
|
|
90
|
+
> = {
|
|
91
|
+
[P in TEvent]: P extends string ? Id<EventMessage<P, TEvents[P]>> : never;
|
|
92
|
+
}[TEvent];
|
|
93
|
+
|
|
94
|
+
export type InferIOAuthorize<TIO extends IOLike> = TIO extends IOLike<
|
|
95
|
+
infer IAuthorize
|
|
96
|
+
>
|
|
97
|
+
? IAuthorize
|
|
98
|
+
: never;
|
|
99
|
+
|
|
100
|
+
export type InferIOAuthorizeRequired<TAuthorize extends IOAuthorize<any, any>> =
|
|
101
|
+
TAuthorize extends IOAuthorize<any, infer IRequired> ? IRequired : never;
|
|
102
|
+
|
|
103
|
+
export type InferIOAuthorizeUser<TAuthorize extends IOAuthorize<any, any>> =
|
|
104
|
+
TAuthorize extends IOAuthorize<infer IUser, infer IRequired>
|
|
105
|
+
? IRequired extends true
|
|
106
|
+
? IUser
|
|
107
|
+
: IUser | null
|
|
108
|
+
: never;
|
|
109
|
+
|
|
110
|
+
export type InferIOInput<TIO extends IOLike> = TIO extends IOLike<
|
|
111
|
+
any,
|
|
112
|
+
infer IInput
|
|
113
|
+
>
|
|
114
|
+
? IInput
|
|
115
|
+
: never;
|
|
116
|
+
|
|
117
|
+
export type InferIOOutput<TIO extends IOLike> = TIO extends IOLike<
|
|
118
|
+
any,
|
|
119
|
+
any,
|
|
120
|
+
infer IOutput
|
|
121
|
+
>
|
|
122
|
+
? IOutput
|
|
123
|
+
: never;
|
|
124
|
+
|
|
125
|
+
export type InputZodLike<TData extends JsonObject> = {
|
|
126
|
+
_input: TData;
|
|
127
|
+
parse: (data: unknown) => TData;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export interface IOAuthorize<
|
|
131
|
+
TUser extends BaseUser = any,
|
|
132
|
+
TRequired extends boolean = false
|
|
133
|
+
> {
|
|
134
|
+
required: TRequired;
|
|
135
|
+
secret: string;
|
|
136
|
+
user: InputZodLike<TUser>;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export type IOAuthorizeEventMessage<TIO extends IOLike> =
|
|
140
|
+
InferIOAuthorizeRequired<InferIOAuthorize<TIO>> extends false
|
|
141
|
+
? IOAuthorizeOptionalEventMessage<TIO>
|
|
142
|
+
: IOAuthorizeRequiredEventMessage<TIO>;
|
|
143
|
+
|
|
144
|
+
export interface IOAuthorizeOptionalEventMessage<TIO extends IOLike> {
|
|
145
|
+
connectionId: string | null;
|
|
146
|
+
user: InferIOAuthorizeUser<InferIOAuthorize<TIO>> | null;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export type IOAuthorizeRequiredEventMessage<TIO extends IOLike> = NonNilProps<
|
|
150
|
+
IOAuthorizeOptionalEventMessage<TIO>,
|
|
151
|
+
"connectionId" | "user"
|
|
152
|
+
>;
|
|
153
|
+
|
|
154
|
+
export type IOEventMessage<
|
|
155
|
+
TIO extends IOLike,
|
|
156
|
+
TEvent extends keyof InferIOOutput<TIO> = keyof InferIOOutput<TIO>
|
|
157
|
+
> = Id<
|
|
158
|
+
{ room: string } & InferEventMessage<InferIOOutput<TIO>, TEvent> &
|
|
159
|
+
(InferEventMessage<InferIOOutput<TIO>, TEvent>["type"] extends "$ERROR"
|
|
160
|
+
? IOAuthorizeOptionalEventMessage<TIO>
|
|
161
|
+
: IOAuthorizeEventMessage<TIO>)
|
|
162
|
+
>;
|
|
163
|
+
|
|
164
|
+
export interface IOLike<
|
|
165
|
+
TAuthorize extends IOAuthorize<any, any> = IOAuthorize<any, any>,
|
|
166
|
+
TInput extends EventRecord<string, any> = {},
|
|
167
|
+
TOutput extends EventRecord<string, any> = {}
|
|
168
|
+
> {
|
|
169
|
+
_authorize: TAuthorize | null;
|
|
170
|
+
_events: {
|
|
171
|
+
[P in keyof TInput]: P extends string
|
|
172
|
+
? {
|
|
173
|
+
resolver: (
|
|
174
|
+
data: TInput[P],
|
|
175
|
+
...args: any[]
|
|
176
|
+
) => MaybePromise<TOutput | void>;
|
|
177
|
+
}
|
|
178
|
+
: never;
|
|
179
|
+
};
|
|
180
|
+
}
|