@axpecter/lync 1.5.2 → 2.1.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/README.md +499 -357
- package/package.json +2 -2
- package/src/Types.luau +69 -27
- package/src/api/Group.luau +101 -106
- package/src/api/Packet.luau +191 -157
- package/src/api/Query.luau +223 -282
- package/src/api/Scope.luau +46 -57
- package/src/api/Signal.luau +104 -137
- package/src/codec/Base.luau +69 -20
- package/src/codec/composite/Array.luau +189 -201
- package/src/codec/composite/Map.luau +97 -341
- package/src/codec/composite/Optional.luau +27 -23
- package/src/codec/composite/Shared.luau +96 -65
- package/src/codec/composite/Struct.luau +201 -339
- package/src/codec/composite/Tagged.luau +64 -178
- package/src/codec/composite/Tuple.luau +81 -95
- package/src/codec/datatype/Buffer.luau +49 -21
- package/src/codec/datatype/CFrame.luau +207 -30
- package/src/codec/datatype/Color.luau +21 -11
- package/src/codec/datatype/Instance.luau +29 -19
- package/src/codec/datatype/IntVector.luau +33 -21
- package/src/codec/datatype/NumberRange.luau +19 -10
- package/src/codec/datatype/Ray.luau +26 -22
- package/src/codec/datatype/Rect.luau +20 -16
- package/src/codec/datatype/Region.luau +51 -45
- package/src/codec/datatype/Sequence.luau +64 -56
- package/src/codec/datatype/String.luau +89 -56
- package/src/codec/datatype/UDim.luau +40 -22
- package/src/codec/datatype/Vector.luau +181 -17
- package/src/codec/meta/Auto.luau +295 -253
- package/src/codec/meta/Bitfield.luau +104 -148
- package/src/codec/meta/Custom.luau +8 -4
- package/src/codec/meta/Enum.luau +29 -57
- package/src/codec/meta/Float.luau +64 -0
- package/src/codec/meta/Nothing.luau +9 -5
- package/src/codec/meta/Unknown.luau +44 -35
- package/src/codec/primitive/Bool.luau +16 -26
- package/src/codec/primitive/Float16.luau +58 -64
- package/src/codec/primitive/Int.luau +68 -0
- package/src/codec/primitive/Number.luau +21 -43
- package/src/codec/primitive/Varint.luau +67 -46
- package/src/index.d.ts +249 -306
- package/src/init.luau +332 -173
- package/src/internal/Baseline.luau +29 -24
- package/src/internal/Channel.luau +346 -161
- package/src/internal/Middleware.luau +60 -85
- package/src/internal/Pool.luau +19 -30
- package/src/internal/Registry.luau +61 -101
- package/src/transport/Bridge.luau +64 -43
- package/src/transport/Client.luau +60 -117
- package/src/transport/Gate.luau +282 -133
- package/src/transport/Reader.luau +159 -100
- package/src/transport/Server.luau +147 -292
- package/src/api/Namespace.luau +0 -251
- package/src/codec/meta/Quantized.luau +0 -174
package/src/index.d.ts
CHANGED
|
@@ -1,318 +1,261 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="@rbxts/types" />
|
|
2
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
3
|
+
declare namespace Lync {
|
|
4
|
+
// ── Core Types ──────────────────────────────────────────────────
|
|
5
|
+
|
|
6
|
+
interface Codec<T> {
|
|
7
|
+
/** @hidden */ readonly _nominal_codec: T;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface Connection {
|
|
11
|
+
connected: boolean;
|
|
12
|
+
disconnect(): void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface PacketStats {
|
|
16
|
+
bytesSent: number;
|
|
17
|
+
bytesReceived: number;
|
|
18
|
+
fires: number;
|
|
19
|
+
recvFires: number;
|
|
20
|
+
drops: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface PlayerStats {
|
|
24
|
+
bytesSent: number;
|
|
25
|
+
bytesReceived: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// ── Packet ──────────────────────────────────────────────────────
|
|
29
|
+
|
|
30
|
+
interface PacketOptions<T> {
|
|
31
|
+
unreliable?: boolean;
|
|
32
|
+
rateLimit?: { maxPerSecond?: number; burst?: number } | { cooldown: number };
|
|
33
|
+
validate?: (data: T, player: Player) => LuaTuple<[boolean, string?]>;
|
|
34
|
+
maxPayloadBytes?: number;
|
|
35
|
+
timestamp?: "frame" | "offset" | "full";
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface Packet<T> {
|
|
39
|
+
send(this: Packet<T>, data: T, target?: Target): void;
|
|
40
|
+
on(this: Packet<T>, fn: (data: T, sender?: Player, timestamp?: number) => void): Connection;
|
|
41
|
+
once(this: Packet<T>, fn: (data: T, sender?: Player, timestamp?: number) => void): Connection;
|
|
42
|
+
wait(this: Packet<T>): LuaTuple<[T, Player?, number?]>;
|
|
43
|
+
name(this: Packet<T>): string;
|
|
44
|
+
stats(this: Packet<T>): PacketStats;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ── Query ───────────────────────────────────────────────────────
|
|
48
|
+
|
|
49
|
+
interface QueryOptions<Req> {
|
|
50
|
+
timeout?: number;
|
|
51
|
+
rateLimit?: { maxPerSecond?: number; burst?: number };
|
|
52
|
+
validate?: (data: Req, player: Player) => LuaTuple<[boolean, string?]>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface Query<Req, Resp> {
|
|
56
|
+
handle(this: Query<Req, Resp>, fn: (request: Req, player?: Player) => Resp | undefined): Connection;
|
|
57
|
+
request(this: Query<Req, Resp>, data: Req): Resp | undefined;
|
|
58
|
+
request(this: Query<Req, Resp>, data: Req, target: Player): Resp | undefined;
|
|
59
|
+
request(this: Query<Req, Resp>, data: Req, target: Target): Map<Player, Resp | undefined>;
|
|
60
|
+
name(this: Query<Req, Resp>): string;
|
|
61
|
+
stats(this: Query<Req, Resp>): PacketStats;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// ── Group ───────────────────────────────────────────────────────
|
|
65
|
+
|
|
66
|
+
interface Group extends Iterable<Player> {
|
|
67
|
+
add(this: Group, player: Player): boolean;
|
|
68
|
+
remove(this: Group, player: Player): boolean;
|
|
69
|
+
has(this: Group, player: Player): boolean;
|
|
70
|
+
count(this: Group): number;
|
|
71
|
+
destroy(this: Group): void;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ── Scope ───────────────────────────────────────────────────────
|
|
75
|
+
|
|
76
|
+
interface Scope {
|
|
77
|
+
on<T>(this: Scope, source: Packet<T>, fn: (data: T, sender?: Player, timestamp?: number) => void): Connection;
|
|
78
|
+
once<T>(this: Scope, source: Packet<T>, fn: (data: T, sender?: Player, timestamp?: number) => void): Connection;
|
|
79
|
+
add(this: Scope, connection: Connection | RBXScriptConnection): void;
|
|
80
|
+
destroy(this: Scope): void;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// ── Targets ─────────────────────────────────────────────────────
|
|
84
|
+
|
|
85
|
+
type Target = Player | Player[] | Group | AllTarget | ExceptTarget;
|
|
86
|
+
|
|
87
|
+
interface AllTarget {
|
|
88
|
+
/** @hidden */ readonly _lyncAll: true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
interface ExceptTarget {
|
|
92
|
+
/** @hidden */ readonly _lyncExcept: true;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ── Codec Inference ─────────────────────────────────────────────
|
|
96
|
+
|
|
97
|
+
type InferCodec<C> = C extends Codec<infer T> ? T : never;
|
|
98
|
+
|
|
99
|
+
type InferSchema<S extends Record<string, Codec<unknown>>> = {
|
|
100
|
+
[K in keyof S]: InferCodec<S[K]>;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// ── Callable Codecs ─────────────────────────────────────────────
|
|
104
|
+
|
|
105
|
+
interface StringCodec extends Codec<string> {
|
|
106
|
+
(maxLength: number): Codec<string>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
interface Vec2Codec extends Codec<Vector2> {
|
|
110
|
+
(min: number, max: number, precision: number): Codec<Vector2>;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
interface Vec3Codec extends Codec<Vector3> {
|
|
114
|
+
(min: number, max: number, precision: number): Codec<Vector3>;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface CFrameCodec extends Codec<CFrame> {
|
|
118
|
+
(): Codec<CFrame>;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// ── Configure ───────────────────────────────────────────────────
|
|
122
|
+
|
|
123
|
+
interface ConfigureOptions {
|
|
124
|
+
channelMaxSize?: number;
|
|
125
|
+
validationDepth?: number;
|
|
126
|
+
poolSize?: number;
|
|
127
|
+
bandwidthLimit?: { softLimit: number; maxStrikes: number };
|
|
128
|
+
globalRateLimit?: { maxPerSecond: number };
|
|
129
|
+
stats?: boolean;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// ── Drop Sentinel ───────────────────────────────────────────────
|
|
133
|
+
|
|
134
|
+
interface DropSentinel {
|
|
135
|
+
/** @hidden */ readonly _lyncDrop: true;
|
|
136
|
+
}
|
|
131
137
|
}
|
|
132
138
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
export interface QueryConfig<Req, Resp> {
|
|
136
|
-
request: Codec<Req>;
|
|
137
|
-
response: Codec<Resp>;
|
|
138
|
-
timeout?: number;
|
|
139
|
-
rateLimit?: RateLimitConfig;
|
|
140
|
-
validate?: (data: Req, player: Player) => LuaTuple<[boolean, string?]>;
|
|
141
|
-
}
|
|
139
|
+
interface LyncModule {
|
|
140
|
+
// ── Lifecycle ────────────────────────────────────────────────────
|
|
142
141
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
callback: (request: Req, player: Player) => Resp | undefined,
|
|
147
|
-
): Connection;
|
|
148
|
-
request(this: Query<Req, Resp>, data: Req): Resp | undefined;
|
|
149
|
-
requestFrom(this: Query<Req, Resp>, player: Player, data: Req): Resp | undefined;
|
|
150
|
-
requestAll(this: Query<Req, Resp>, data: Req): Map<Player, Resp | undefined>;
|
|
151
|
-
requestList(
|
|
152
|
-
this: Query<Req, Resp>,
|
|
153
|
-
players: Player[],
|
|
154
|
-
data: Req,
|
|
155
|
-
): Map<Player, Resp | undefined>;
|
|
156
|
-
requestGroup(
|
|
157
|
-
this: Query<Req, Resp>,
|
|
158
|
-
group: GroupObject,
|
|
159
|
-
data: Req,
|
|
160
|
-
): Map<Player, Resp | undefined>;
|
|
161
|
-
}
|
|
142
|
+
configure(options: Lync.ConfigureOptions): void;
|
|
143
|
+
start(): void;
|
|
144
|
+
readonly started: boolean;
|
|
162
145
|
|
|
163
|
-
//
|
|
146
|
+
// ── Definitions ─────────────────────────────────────────────────
|
|
164
147
|
|
|
165
|
-
|
|
166
|
-
packets?: Record<string, PacketConfig<unknown>>;
|
|
167
|
-
queries?: Record<string, QueryConfig<unknown, unknown>>;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
type InferPackets<P extends Record<string, PacketConfig<unknown>>> = {
|
|
171
|
-
[K in keyof P]: P[K] extends PacketConfig<infer T> ? Packet<T> : never;
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
type InferQueries<Q extends Record<string, QueryConfig<unknown, unknown>>> = {
|
|
175
|
-
[K in keyof Q]: Q[K] extends QueryConfig<infer Req, infer Resp>
|
|
176
|
-
? Query<Req, Resp>
|
|
177
|
-
: never;
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
export interface Namespace {
|
|
181
|
-
readonly packets: Record<string, Packet<unknown>>;
|
|
182
|
-
readonly queries: Record<string, Query<unknown, unknown>>;
|
|
183
|
-
listenAll(
|
|
184
|
-
this: Namespace,
|
|
185
|
-
callback: (name: string, data: unknown, sender: Player | undefined) => void,
|
|
186
|
-
): Connection;
|
|
187
|
-
onSend(
|
|
188
|
-
this: Namespace,
|
|
189
|
-
handler: (data: unknown, name: string, player: Player | undefined) => unknown | DropSentinel | undefined,
|
|
190
|
-
): () => void;
|
|
191
|
-
onReceive(
|
|
192
|
-
this: Namespace,
|
|
193
|
-
handler: (data: unknown, name: string, player: Player | undefined) => unknown | DropSentinel | undefined,
|
|
194
|
-
): () => void;
|
|
195
|
-
disconnectAll(this: Namespace): void;
|
|
196
|
-
destroy(this: Namespace): void;
|
|
197
|
-
packetNames(this: Namespace): string[];
|
|
198
|
-
queryNames(this: Namespace): string[];
|
|
199
|
-
}
|
|
148
|
+
packet<T>(name: string, codec: Lync.Codec<T>, options?: Lync.PacketOptions<T>): Lync.Packet<T>;
|
|
200
149
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
declare namespace Lync {
|
|
204
|
-
// Lifecycle
|
|
205
|
-
export const VERSION: string;
|
|
206
|
-
export function start(): void;
|
|
207
|
-
|
|
208
|
-
// Definition
|
|
209
|
-
export function definePacket<T>(name: string, config: PacketConfig<T>): Packet<T>;
|
|
210
|
-
export function defineQuery<Req, Resp>(
|
|
150
|
+
query<Req, Resp>(
|
|
211
151
|
name: string,
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
152
|
+
requestCodec: Lync.Codec<Req>,
|
|
153
|
+
responseCodec: Lync.Codec<Resp>,
|
|
154
|
+
options?: Lync.QueryOptions<Req>,
|
|
155
|
+
): Lync.Query<Req, Resp>;
|
|
156
|
+
|
|
157
|
+
group(name: string): Lync.Group;
|
|
158
|
+
scope(): Lync.Scope;
|
|
159
|
+
|
|
160
|
+
// ── Targeting ───────────────────────────────────────────────────
|
|
161
|
+
|
|
162
|
+
readonly all: Lync.AllTarget;
|
|
163
|
+
except(...args: Array<Player | Lync.Group>): Lync.ExceptTarget;
|
|
164
|
+
readonly DROP: Lync.DropSentinel;
|
|
165
|
+
|
|
166
|
+
// ── Middleware ───────────────────────────────────────────────────
|
|
167
|
+
|
|
168
|
+
onSend(fn: (data: unknown, name: string, player?: Player) => unknown): Lync.Connection;
|
|
169
|
+
onReceive(fn: (data: unknown, name: string, player?: Player) => unknown): Lync.Connection;
|
|
170
|
+
onDrop(fn: (player: Player, reason: string, name: string, data?: unknown) => void): Lync.Connection;
|
|
171
|
+
|
|
172
|
+
// ── Runtime Control ─────────────────────────────────────────────
|
|
173
|
+
|
|
174
|
+
flush(): void;
|
|
175
|
+
flushRate(hz: number): void;
|
|
176
|
+
|
|
177
|
+
// ── Stats ───────────────────────────────────────────────────────
|
|
178
|
+
|
|
179
|
+
readonly stats: {
|
|
180
|
+
player(player: Player): Lync.PlayerStats | undefined;
|
|
181
|
+
reset(): void;
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
// ── Debug ───────────────────────────────────────────────────────
|
|
185
|
+
|
|
186
|
+
readonly debug: {
|
|
187
|
+
capture(label?: string): void;
|
|
188
|
+
stop(): void;
|
|
189
|
+
dump(): void;
|
|
190
|
+
pending(): number;
|
|
191
|
+
registrations(): ReadonlyArray<{
|
|
192
|
+
name: string;
|
|
193
|
+
id: number;
|
|
194
|
+
kind: number;
|
|
195
|
+
isUnreliable: boolean;
|
|
196
|
+
}>;
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
// ── Number Codecs ───────────────────────────────────────────────
|
|
200
|
+
|
|
201
|
+
int(min: number, max: number): Lync.Codec<number>;
|
|
202
|
+
float(min: number, max: number, precision: number): Lync.Codec<number>;
|
|
203
|
+
readonly f16: Lync.Codec<number>;
|
|
204
|
+
readonly f32: Lync.Codec<number>;
|
|
205
|
+
readonly f64: Lync.Codec<number>;
|
|
206
|
+
readonly bool: Lync.Codec<boolean>;
|
|
207
|
+
|
|
208
|
+
// ── String & Buffer ─────────────────────────────────────────────
|
|
209
|
+
|
|
210
|
+
readonly string: Lync.StringCodec;
|
|
211
|
+
readonly buff: Lync.Codec<buffer>;
|
|
212
|
+
|
|
213
|
+
// ── Vectors & Spatial ───────────────────────────────────────────
|
|
214
|
+
|
|
215
|
+
readonly vec2: Lync.Vec2Codec;
|
|
216
|
+
readonly vec3: Lync.Vec3Codec;
|
|
217
|
+
readonly cframe: Lync.CFrameCodec;
|
|
218
|
+
readonly ray: Lync.Codec<Ray>;
|
|
219
|
+
readonly rect: Lync.Codec<Rect>;
|
|
220
|
+
readonly region3: Lync.Codec<Region3>;
|
|
221
|
+
readonly region3int16: Lync.Codec<Region3int16>;
|
|
222
|
+
readonly vec2int16: Lync.Codec<Vector2int16>;
|
|
223
|
+
readonly vec3int16: Lync.Codec<Vector3int16>;
|
|
224
|
+
|
|
225
|
+
// ── Roblox Types ────────────────────────────────────────────────
|
|
226
|
+
|
|
227
|
+
readonly color3: Lync.Codec<Color3>;
|
|
228
|
+
readonly inst: Lync.Codec<Instance>;
|
|
229
|
+
readonly udim: Lync.Codec<UDim>;
|
|
230
|
+
readonly udim2: Lync.Codec<UDim2>;
|
|
231
|
+
readonly numberRange: Lync.Codec<NumberRange>;
|
|
232
|
+
readonly numberSequence: Lync.Codec<NumberSequence>;
|
|
233
|
+
readonly colorSequence: Lync.Codec<ColorSequence>;
|
|
234
|
+
|
|
235
|
+
// ── Composites ──────────────────────────────────────────────────
|
|
236
|
+
|
|
237
|
+
struct<S extends Record<string, Lync.Codec<unknown>>>(schema: S): Lync.Codec<Lync.InferSchema<S>>;
|
|
238
|
+
deltaStruct<S extends Record<string, Lync.Codec<unknown>>>(schema: S): Lync.Codec<Lync.InferSchema<S>>;
|
|
239
|
+
array<T>(element: Lync.Codec<T>, maxCount?: number): Lync.Codec<T[]>;
|
|
240
|
+
deltaArray<T>(element: Lync.Codec<T>, maxCount?: number): Lync.Codec<T[]>;
|
|
241
|
+
map<K, V>(keyCodec: Lync.Codec<K>, valueCodec: Lync.Codec<V>, maxCount?: number): Lync.Codec<Map<K, V>>;
|
|
242
|
+
deltaMap<K, V>(keyCodec: Lync.Codec<K>, valueCodec: Lync.Codec<V>, maxCount?: number): Lync.Codec<Map<K, V>>;
|
|
243
|
+
optional<T>(codec: Lync.Codec<T>): Lync.Codec<T | undefined>;
|
|
244
|
+
tuple<T extends Lync.Codec<unknown>[]>(...codecs: T): Lync.Codec<{ [K in keyof T]: Lync.InferCodec<T[K]> }>;
|
|
245
|
+
tagged<Tag extends string, V extends Record<string, Lync.Codec<unknown>>>(
|
|
271
246
|
tagField: Tag,
|
|
272
247
|
variants: V,
|
|
273
|
-
): Codec<
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
): Codec<T>;
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
export const auto: Codec<unknown>;
|
|
284
|
-
|
|
285
|
-
// Hooks
|
|
286
|
-
export function onDrop(
|
|
287
|
-
callback: (player: Player, reason: string, packetName: string, data: unknown) => void,
|
|
288
|
-
): () => void;
|
|
289
|
-
export function onSend(
|
|
290
|
-
handler: (data: unknown, name: string, player: Player | undefined) => unknown | DropSentinel | undefined,
|
|
291
|
-
): () => void;
|
|
292
|
-
export function onReceive(
|
|
293
|
-
handler: (data: unknown, name: string, player: Player | undefined) => unknown | DropSentinel | undefined,
|
|
294
|
-
): () => void;
|
|
295
|
-
|
|
296
|
-
// Target descriptors
|
|
297
|
-
export const all: AllTarget;
|
|
298
|
-
export function except(...players: Player[]): ExceptTarget;
|
|
299
|
-
|
|
300
|
-
// Middleware sentinel
|
|
301
|
-
export const DROP: DropSentinel;
|
|
302
|
-
|
|
303
|
-
// Groups
|
|
304
|
-
export function createGroup(name: string): GroupObject;
|
|
305
|
-
|
|
306
|
-
// Scope
|
|
307
|
-
export function scope(): Scope;
|
|
308
|
-
|
|
309
|
-
// Configuration
|
|
310
|
-
export function setChannelMaxSize(bytes: number): void;
|
|
311
|
-
export function setValidationDepth(depth: number): void;
|
|
312
|
-
export function setPoolSize(count: number): void;
|
|
313
|
-
|
|
314
|
-
// Introspection
|
|
315
|
-
export function queryPendingCount(): number;
|
|
248
|
+
): Lync.Codec<{ [K in keyof V]: Lync.InferSchema<{ [F in Tag]: K }> & Lync.InferCodec<V[K]> }[keyof V]>;
|
|
249
|
+
|
|
250
|
+
// ── Meta ────────────────────────────────────────────────────────
|
|
251
|
+
|
|
252
|
+
enum<T extends string[]>(...values: T): Lync.Codec<T[number]>;
|
|
253
|
+
bitfield(schema: Record<string, { type: "bool" } | { type: "uint"; width: number } | { type: "int"; width: number }>): Lync.Codec<Record<string, boolean | number>>;
|
|
254
|
+
custom<T>(size: number, write: (b: buffer, offset: number, value: T) => void, read: (b: buffer, offset: number) => T): Lync.Codec<T>;
|
|
255
|
+
readonly nothing: Lync.Codec<undefined>;
|
|
256
|
+
readonly unknown: Lync.Codec<unknown>;
|
|
257
|
+
readonly auto: Lync.Codec<unknown>;
|
|
316
258
|
}
|
|
317
259
|
|
|
318
|
-
|
|
260
|
+
declare const Lync: LyncModule;
|
|
261
|
+
export = Lync;
|