@rbxts/tether 1.3.13 → 1.3.14
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 +1 -1
- package/out/index.d.ts +1 -1
- package/out/message-emitter.d.ts +0 -2
- package/out/message-emitter.luau +75 -107
- package/out/middleware.d.ts +7 -2
- package/out/middleware.luau +90 -0
- package/out/structs.d.ts +2 -12
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -182,7 +182,7 @@ import type { ServerMiddleware } from "@rbxts/tether";
|
|
|
182
182
|
|
|
183
183
|
export function incrementNumberData(): ServerMiddleware<number> {
|
|
184
184
|
// sets the data to be used by the any subsequent middlewares as well as sent through the remote
|
|
185
|
-
return (
|
|
185
|
+
return (ctx) => ctx.data++;
|
|
186
186
|
}
|
|
187
187
|
```
|
|
188
188
|
|
package/out/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { MessageEmitter } from "./message-emitter";
|
|
2
2
|
export { BuiltinMiddlewares } from "./builtin-middlewares";
|
|
3
|
-
export { DropRequest, type ClientMiddleware, type ServerMiddleware, type SharedMiddleware, type Middleware } from "./middleware";
|
|
3
|
+
export { DropRequest, type ClientMiddleware, type ServerMiddleware, type SharedMiddleware, type Middleware, type MiddlewareContext } from "./middleware";
|
package/out/message-emitter.d.ts
CHANGED
|
@@ -18,8 +18,6 @@ export declare class MessageEmitter<MessageData> extends Destroyable {
|
|
|
18
18
|
private serverQueue;
|
|
19
19
|
private clientBroadcastQueue;
|
|
20
20
|
private clientQueue;
|
|
21
|
-
private serverEvents;
|
|
22
|
-
private clientEvents;
|
|
23
21
|
/** @metadata macro */
|
|
24
22
|
static create<MessageData>(options?: Partial<MessageEmitterOptions>, meta?: Modding.Many<MessageEmitterMetadata<MessageData>>): MessageEmitter<MessageData>;
|
|
25
23
|
private constructor();
|
package/out/message-emitter.luau
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
-- Compiled with roblox-ts v3.0.0
|
|
2
2
|
local TS = _G[script]
|
|
3
|
-
local t = TS.import(script, TS.getModule(script, "@rbxts", "t").lib.ts).t
|
|
4
|
-
local Networking = TS.import(script, TS.getModule(script, "@flamework", "networking").out).Networking
|
|
5
3
|
local _services = TS.import(script, TS.getModule(script, "@rbxts", "services"))
|
|
6
4
|
local Players = _services.Players
|
|
5
|
+
local ReplicatedStorage = _services.ReplicatedStorage
|
|
7
6
|
local RunService = _services.RunService
|
|
8
7
|
local Destroyable = TS.import(script, TS.getModule(script, "@rbxts", "destroyable").out).default
|
|
9
8
|
local Object = TS.import(script, TS.getModule(script, "@rbxts", "object-utils"))
|
|
@@ -12,7 +11,11 @@ local repr = TS.import(script, TS.getModule(script, "@rbxts", "repr").out)
|
|
|
12
11
|
local _middleware = TS.import(script, script.Parent, "middleware")
|
|
13
12
|
local DropRequest = _middleware.DropRequest
|
|
14
13
|
local MiddlewareProvider = _middleware.MiddlewareProvider
|
|
15
|
-
local
|
|
14
|
+
local IS_LUNE = string.sub(_VERSION, 1, 4) == "Lune"
|
|
15
|
+
if setLuneContext == nil then
|
|
16
|
+
setLuneContext = function() end
|
|
17
|
+
end
|
|
18
|
+
setLuneContext("both")
|
|
16
19
|
local noServerListen = "[@rbxts/tether]: Cannot listen to server message from client"
|
|
17
20
|
local noClientListen = "[@rbxts/tether]: Cannot listen to client message from server"
|
|
18
21
|
local metaGenerationFailed = "[@rbxts/tether]: Failed to generate message metadata - make sure you have the Flamework transformer and are using Flamework macro-friendly types in your schemas"
|
|
@@ -23,6 +26,26 @@ local defaultMesssageEmitterOptions = {
|
|
|
23
26
|
batchRemotes = true,
|
|
24
27
|
batchRate = 1 / 24,
|
|
25
28
|
}
|
|
29
|
+
local sendMessage
|
|
30
|
+
do
|
|
31
|
+
local name = "sendMessage"
|
|
32
|
+
local existing = ReplicatedStorage:FindFirstChild(name)
|
|
33
|
+
local remote = (existing or Instance.new("RemoteEvent", ReplicatedStorage))
|
|
34
|
+
if existing == nil then
|
|
35
|
+
remote.Name = name
|
|
36
|
+
end
|
|
37
|
+
sendMessage = remote
|
|
38
|
+
end
|
|
39
|
+
local sendUnreliableMessage
|
|
40
|
+
do
|
|
41
|
+
local name = "unreliableMessage"
|
|
42
|
+
local existing = ReplicatedStorage:FindFirstChild(name)
|
|
43
|
+
local remote = (existing or Instance.new("UnreliableRemoteEvent", ReplicatedStorage))
|
|
44
|
+
if existing == nil then
|
|
45
|
+
remote.Name = name
|
|
46
|
+
end
|
|
47
|
+
sendUnreliableMessage = remote
|
|
48
|
+
end
|
|
26
49
|
local MessageEmitter
|
|
27
50
|
do
|
|
28
51
|
local super = Destroyable
|
|
@@ -255,60 +278,7 @@ do
|
|
|
255
278
|
table.clear(self.clientCallbacks)
|
|
256
279
|
table.clear(self.serverCallbacks)
|
|
257
280
|
table.clear(self.serializers)
|
|
258
|
-
self.serverEvents = nil
|
|
259
|
-
self.clientEvents = nil
|
|
260
281
|
end)
|
|
261
|
-
if RunService:IsServer() then
|
|
262
|
-
self.serverEvents = remotes:createServer({}, {
|
|
263
|
-
incomingIds = { "sendServerMessage", "sendUnreliableServerMessage" },
|
|
264
|
-
incoming = {
|
|
265
|
-
sendServerMessage = { { t.array(t.interface({
|
|
266
|
-
messageBuf = t.typeof("buffer"),
|
|
267
|
-
buf = t.optional(t.typeof("buffer")),
|
|
268
|
-
blobs = t.optional(t.array(t.any)),
|
|
269
|
-
})) }, nil },
|
|
270
|
-
sendUnreliableServerMessage = { { t.array(t.interface({
|
|
271
|
-
messageBuf = t.typeof("buffer"),
|
|
272
|
-
buf = t.optional(t.typeof("buffer")),
|
|
273
|
-
blobs = t.optional(t.array(t.any)),
|
|
274
|
-
})) }, nil },
|
|
275
|
-
},
|
|
276
|
-
incomingUnreliable = {
|
|
277
|
-
sendUnreliableServerMessage = true,
|
|
278
|
-
},
|
|
279
|
-
outgoingIds = { "sendClientMessage", "sendUnreliableClientMessage" },
|
|
280
|
-
outgoingUnreliable = {
|
|
281
|
-
sendUnreliableClientMessage = true,
|
|
282
|
-
},
|
|
283
|
-
namespaceIds = {},
|
|
284
|
-
namespaces = {},
|
|
285
|
-
})
|
|
286
|
-
else
|
|
287
|
-
self.clientEvents = remotes:createClient({}, {
|
|
288
|
-
incomingIds = { "sendClientMessage", "sendUnreliableClientMessage" },
|
|
289
|
-
incoming = {
|
|
290
|
-
sendClientMessage = { { t.array(t.interface({
|
|
291
|
-
messageBuf = t.typeof("buffer"),
|
|
292
|
-
buf = t.optional(t.typeof("buffer")),
|
|
293
|
-
blobs = t.optional(t.array(t.any)),
|
|
294
|
-
})) }, nil },
|
|
295
|
-
sendUnreliableClientMessage = { { t.array(t.interface({
|
|
296
|
-
messageBuf = t.typeof("buffer"),
|
|
297
|
-
buf = t.optional(t.typeof("buffer")),
|
|
298
|
-
blobs = t.optional(t.array(t.any)),
|
|
299
|
-
})) }, nil },
|
|
300
|
-
},
|
|
301
|
-
incomingUnreliable = {
|
|
302
|
-
sendUnreliableClientMessage = true,
|
|
303
|
-
},
|
|
304
|
-
outgoingIds = { "sendServerMessage", "sendUnreliableServerMessage" },
|
|
305
|
-
outgoingUnreliable = {
|
|
306
|
-
sendUnreliableServerMessage = true,
|
|
307
|
-
},
|
|
308
|
-
namespaceIds = {},
|
|
309
|
-
namespaces = {},
|
|
310
|
-
})
|
|
311
|
-
end
|
|
312
282
|
end
|
|
313
283
|
function MessageEmitter:create(options, meta)
|
|
314
284
|
local emitter = MessageEmitter.new(Object.assign({}, defaultMesssageEmitterOptions, options))
|
|
@@ -329,19 +299,26 @@ do
|
|
|
329
299
|
return emitter:initialize()
|
|
330
300
|
end
|
|
331
301
|
function MessageEmitter:initialize()
|
|
302
|
+
setLuneContext("client")
|
|
332
303
|
if RunService:IsClient() then
|
|
333
|
-
self.janitor:Add(
|
|
334
|
-
|
|
304
|
+
self.janitor:Add(sendMessage.OnClientEvent:Connect(function(...)
|
|
305
|
+
local serializedPacket = { ... }
|
|
306
|
+
return self:onRemoteFire(false, serializedPacket)
|
|
335
307
|
end))
|
|
336
|
-
self.janitor:Add(
|
|
337
|
-
|
|
308
|
+
self.janitor:Add(sendUnreliableMessage.OnClientEvent:Connect(function(...)
|
|
309
|
+
local serializedPacket = { ... }
|
|
310
|
+
return self:onRemoteFire(false, serializedPacket)
|
|
338
311
|
end))
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
312
|
+
end
|
|
313
|
+
setLuneContext("server")
|
|
314
|
+
if RunService:IsServer() then
|
|
315
|
+
self.janitor:Add(sendMessage.OnServerEvent:Connect(function(player, ...)
|
|
316
|
+
local serializedPacket = { ... }
|
|
317
|
+
return self:onRemoteFire(true, serializedPacket, player)
|
|
342
318
|
end))
|
|
343
|
-
self.janitor:Add(
|
|
344
|
-
|
|
319
|
+
self.janitor:Add(sendUnreliableMessage.OnServerEvent:Connect(function(player, ...)
|
|
320
|
+
local serializedPacket = { ... }
|
|
321
|
+
return self:onRemoteFire(true, serializedPacket, player)
|
|
345
322
|
end))
|
|
346
323
|
end
|
|
347
324
|
local elapsed = 0
|
|
@@ -353,10 +330,11 @@ do
|
|
|
353
330
|
end
|
|
354
331
|
self.janitor:Add(RunService.Heartbeat:Connect(function(dt)
|
|
355
332
|
elapsed += dt
|
|
356
|
-
if elapsed
|
|
357
|
-
|
|
358
|
-
self:update()
|
|
333
|
+
if elapsed < batchRate then
|
|
334
|
+
return nil
|
|
359
335
|
end
|
|
336
|
+
elapsed -= batchRate
|
|
337
|
+
self:update()
|
|
360
338
|
end))
|
|
361
339
|
return self
|
|
362
340
|
end
|
|
@@ -427,10 +405,10 @@ do
|
|
|
427
405
|
-- ▲ ReadonlyArray.map ▲
|
|
428
406
|
local serverPackets = _newValue_4
|
|
429
407
|
if not (#unreliableServerPackets == 0) then
|
|
430
|
-
|
|
408
|
+
sendUnreliableMessage:FireServer(unpack(unreliableServerPackets))
|
|
431
409
|
end
|
|
432
410
|
if not (#serverPackets == 0) then
|
|
433
|
-
|
|
411
|
+
sendMessage:FireServer(unpack(serverPackets))
|
|
434
412
|
end
|
|
435
413
|
self.serverQueue = {}
|
|
436
414
|
return nil
|
|
@@ -526,10 +504,10 @@ do
|
|
|
526
504
|
-- ▲ ReadonlyArray.map ▲
|
|
527
505
|
local broadcastPackets = _newValue_4
|
|
528
506
|
if not (#unreliableBroadcastPackets == 0) then
|
|
529
|
-
|
|
507
|
+
sendUnreliableMessage:FireAllClients(unpack(unreliableBroadcastPackets))
|
|
530
508
|
end
|
|
531
509
|
if not (#broadcastPackets == 0) then
|
|
532
|
-
|
|
510
|
+
sendMessage:FireAllClients(unpack(broadcastPackets))
|
|
533
511
|
end
|
|
534
512
|
self.clientBroadcastQueue = {}
|
|
535
513
|
end
|
|
@@ -582,10 +560,10 @@ do
|
|
|
582
560
|
-- ▲ ReadonlyArray.map ▲
|
|
583
561
|
local packets = _newValue_3
|
|
584
562
|
if not (#unreliablePackets == 0) then
|
|
585
|
-
|
|
563
|
+
sendUnreliableMessage:FireClient(player, unpack(unreliablePackets))
|
|
586
564
|
end
|
|
587
565
|
if not (#packets == 0) then
|
|
588
|
-
|
|
566
|
+
sendMessage:FireClient(player, unpack(packets))
|
|
589
567
|
end
|
|
590
568
|
end
|
|
591
569
|
self.clientQueue = {}
|
|
@@ -599,38 +577,34 @@ do
|
|
|
599
577
|
local ctx = {
|
|
600
578
|
message = message,
|
|
601
579
|
data = data,
|
|
602
|
-
updateData = function(newData)
|
|
603
|
-
data = newData
|
|
604
|
-
return nil
|
|
605
|
-
end,
|
|
606
580
|
getRawData = function()
|
|
607
581
|
return self:getPacket(message, data)
|
|
608
582
|
end,
|
|
609
583
|
}
|
|
610
584
|
for _, globalMiddleware in self.middleware:getClientGlobal() do
|
|
611
585
|
local result = globalMiddleware(players, ctx)
|
|
612
|
-
if not self:validateData(message, data, "Invalid data after global client middleware") then
|
|
613
|
-
return { false, data }
|
|
586
|
+
if not self:validateData(message, ctx.data, "Invalid data after global client middleware") then
|
|
587
|
+
return { false, ctx.data }
|
|
614
588
|
end
|
|
615
589
|
if result == DropRequest then
|
|
616
590
|
self.middleware:notifyRequestDropped(message, "Global client middleware")
|
|
617
|
-
return { true, data }
|
|
591
|
+
return { true, ctx.data }
|
|
618
592
|
end
|
|
619
593
|
end
|
|
620
594
|
for _, middleware in self.middleware:getClient(message) do
|
|
621
595
|
local result = middleware(players, ctx)
|
|
622
|
-
if not self:validateData(message, data, "Invalid data after client middleware") then
|
|
623
|
-
return { false, data }
|
|
596
|
+
if not self:validateData(message, ctx.data, "Invalid data after client middleware") then
|
|
597
|
+
return { false, ctx.data }
|
|
624
598
|
end
|
|
625
599
|
if result == DropRequest then
|
|
626
600
|
self.middleware:notifyRequestDropped(message, "Client middleware")
|
|
627
|
-
return { true, data }
|
|
601
|
+
return { true, ctx.data }
|
|
628
602
|
end
|
|
629
603
|
end
|
|
630
|
-
if not self:validateData(message, data) then
|
|
631
|
-
return { true, data }
|
|
604
|
+
if not self:validateData(message, ctx.data) then
|
|
605
|
+
return { true, ctx.data }
|
|
632
606
|
end
|
|
633
|
-
return { false, data }
|
|
607
|
+
return { false, ctx.data }
|
|
634
608
|
end
|
|
635
609
|
function MessageEmitter:runServerMiddlewares(message, data)
|
|
636
610
|
if not self:validateData(message, data) then
|
|
@@ -639,38 +613,34 @@ do
|
|
|
639
613
|
local ctx = {
|
|
640
614
|
message = message,
|
|
641
615
|
data = data,
|
|
642
|
-
updateData = function(newData)
|
|
643
|
-
data = newData
|
|
644
|
-
return nil
|
|
645
|
-
end,
|
|
646
616
|
getRawData = function()
|
|
647
617
|
return self:getPacket(message, data)
|
|
648
618
|
end,
|
|
649
619
|
}
|
|
650
620
|
for _, globalMiddleware in self.middleware:getServerGlobal() do
|
|
651
|
-
if not self:validateData(message, data, "Invalid data after global server middleware") then
|
|
652
|
-
return { false, data }
|
|
621
|
+
if not self:validateData(message, ctx.data, "Invalid data after global server middleware") then
|
|
622
|
+
return { false, ctx.data }
|
|
653
623
|
end
|
|
654
624
|
local result = globalMiddleware(ctx)
|
|
655
625
|
if result == DropRequest then
|
|
656
626
|
self.middleware:notifyRequestDropped(message, "Global server middleware")
|
|
657
|
-
return { true, data }
|
|
627
|
+
return { true, ctx.data }
|
|
658
628
|
end
|
|
659
629
|
end
|
|
660
630
|
for _, middleware in self.middleware:getServer(message) do
|
|
661
|
-
if not self:validateData(message, data, "Invalid data after server middleware") then
|
|
662
|
-
return { false, data }
|
|
631
|
+
if not self:validateData(message, ctx.data, "Invalid data after server middleware") then
|
|
632
|
+
return { false, ctx.data }
|
|
663
633
|
end
|
|
664
634
|
local result = middleware(ctx)
|
|
665
635
|
if result == DropRequest then
|
|
666
636
|
self.middleware:notifyRequestDropped(message, "Server middleware")
|
|
667
|
-
return { true, data }
|
|
637
|
+
return { true, ctx.data }
|
|
668
638
|
end
|
|
669
639
|
end
|
|
670
|
-
if not self:validateData(message, data) then
|
|
671
|
-
return { true, data }
|
|
640
|
+
if not self:validateData(message, ctx.data) then
|
|
641
|
+
return { true, ctx.data }
|
|
672
642
|
end
|
|
673
|
-
return { false, data }
|
|
643
|
+
return { false, ctx.data }
|
|
674
644
|
end
|
|
675
645
|
function MessageEmitter:validateData(message, data, requestDropReason)
|
|
676
646
|
if requestDropReason == nil then
|
|
@@ -686,18 +656,17 @@ do
|
|
|
686
656
|
end
|
|
687
657
|
return guardPassed
|
|
688
658
|
end
|
|
689
|
-
function MessageEmitter:onRemoteFire(serializedPackets, player)
|
|
659
|
+
function MessageEmitter:onRemoteFire(isServer, serializedPackets, player)
|
|
690
660
|
for _, packet in serializedPackets do
|
|
691
661
|
if buffer.len(packet.messageBuf) > 1 then
|
|
692
662
|
return warn("[@rbxts/tether]: Rejected packet because message buffer was larger than one byte")
|
|
693
663
|
end
|
|
694
664
|
local message = buffer.readu8(packet.messageBuf, 0)
|
|
695
|
-
self:executeEventCallbacks(message, packet, player)
|
|
696
|
-
self:executeFunctions(message, packet)
|
|
665
|
+
self:executeEventCallbacks(isServer, message, packet, player)
|
|
666
|
+
self:executeFunctions(isServer, message, packet)
|
|
697
667
|
end
|
|
698
668
|
end
|
|
699
|
-
function MessageEmitter:executeFunctions(message, serializedPacket)
|
|
700
|
-
local isServer = RunService:IsServer()
|
|
669
|
+
function MessageEmitter:executeFunctions(isServer, message, serializedPacket)
|
|
701
670
|
local functionsMap = if isServer then self.serverFunctions else self.clientFunctions
|
|
702
671
|
local _message = message
|
|
703
672
|
local functions = functionsMap[_message]
|
|
@@ -709,8 +678,7 @@ do
|
|
|
709
678
|
callback(packet)
|
|
710
679
|
end
|
|
711
680
|
end
|
|
712
|
-
function MessageEmitter:executeEventCallbacks(message, serializedPacket, player)
|
|
713
|
-
local isServer = RunService:IsServer()
|
|
681
|
+
function MessageEmitter:executeEventCallbacks(isServer, message, serializedPacket, player)
|
|
714
682
|
local callbacksMap = if isServer then self.serverCallbacks else self.clientCallbacks
|
|
715
683
|
local _message = message
|
|
716
684
|
local callbacks = callbacksMap[_message]
|
package/out/middleware.d.ts
CHANGED
|
@@ -13,8 +13,7 @@ export type SharedMiddleware<Data = unknown> = (ctx: MiddlewareContext<Data>) =>
|
|
|
13
13
|
export type Middleware<Data = unknown> = ServerMiddleware<Data> & ClientMiddleware<Data> & SharedMiddleware<Data>;
|
|
14
14
|
export interface MiddlewareContext<Data = unknown, Message extends BaseMessage = BaseMessage> {
|
|
15
15
|
readonly message: Message;
|
|
16
|
-
|
|
17
|
-
updateData: (newData: Data) => void;
|
|
16
|
+
data: Data;
|
|
18
17
|
getRawData: () => SerializedPacket;
|
|
19
18
|
}
|
|
20
19
|
type RequestDropCallback = (message: BaseMessage, reason?: string) => void;
|
|
@@ -41,5 +40,11 @@ export declare class MiddlewareProvider<MessageData> {
|
|
|
41
40
|
useClientGlobal(middlewares: ClientMiddleware | readonly ClientMiddleware[], order?: number): this;
|
|
42
41
|
useServerGlobal(middlewares: ServerMiddleware | readonly ServerMiddleware[], order?: number): this;
|
|
43
42
|
useSharedGlobal(middlewares: SharedMiddleware | readonly SharedMiddleware[], order?: number): this;
|
|
43
|
+
deleteSharedGlobal<Kind extends keyof MessageData>(middlewares: SharedMiddleware<MessageData[Kind]> | readonly SharedMiddleware<MessageData[Kind]>[] | SharedMiddleware | readonly SharedMiddleware[]): void;
|
|
44
|
+
deleteClientGlobal<Kind extends keyof MessageData>(middlewares: ClientMiddleware<MessageData[Kind]> | readonly ClientMiddleware<MessageData[Kind]>[] | ClientMiddleware | readonly ClientMiddleware[]): void;
|
|
45
|
+
deleteServerGlobal<Kind extends keyof MessageData>(middlewares: ServerMiddleware<MessageData[Kind]> | readonly ServerMiddleware<MessageData[Kind]>[] | ServerMiddleware | readonly ServerMiddleware[]): void;
|
|
46
|
+
deleteShared<Kind extends keyof MessageData>(message: Kind & BaseMessage, middlewares: SharedMiddleware<MessageData[Kind]> | readonly SharedMiddleware<MessageData[Kind]>[] | SharedMiddleware | readonly SharedMiddleware[]): void;
|
|
47
|
+
deleteClient<Kind extends keyof MessageData>(message: Kind & BaseMessage, middlewares: ClientMiddleware<MessageData[Kind]> | readonly ClientMiddleware<MessageData[Kind]>[] | ClientMiddleware | readonly ClientMiddleware[]): void;
|
|
48
|
+
deleteServer<Kind extends keyof MessageData>(message: Kind & BaseMessage, middlewares: ServerMiddleware<MessageData[Kind]> | readonly ServerMiddleware<MessageData[Kind]>[] | ServerMiddleware | readonly ServerMiddleware[]): void;
|
|
44
49
|
}
|
|
45
50
|
export {};
|
package/out/middleware.luau
CHANGED
|
@@ -162,6 +162,96 @@ do
|
|
|
162
162
|
self:useClientGlobal(client, order)
|
|
163
163
|
return self:useServerGlobal(middlewares, order)
|
|
164
164
|
end
|
|
165
|
+
function MiddlewareProvider:deleteSharedGlobal(middlewares)
|
|
166
|
+
local server = middlewares
|
|
167
|
+
local _middlewares = middlewares
|
|
168
|
+
local _exp = (if type(_middlewares) == "function" then { middlewares } else middlewares)
|
|
169
|
+
-- ▼ ReadonlyArray.map ▼
|
|
170
|
+
local _newValue = table.create(#_exp)
|
|
171
|
+
local _callback = function(middleware)
|
|
172
|
+
return function(_, ctx)
|
|
173
|
+
return middleware(ctx)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
for _k, _v in _exp do
|
|
177
|
+
_newValue[_k] = _callback(_v, _k - 1, _exp)
|
|
178
|
+
end
|
|
179
|
+
-- ▲ ReadonlyArray.map ▲
|
|
180
|
+
local client = _newValue
|
|
181
|
+
self:deleteClientGlobal(client)
|
|
182
|
+
self:deleteServerGlobal(server)
|
|
183
|
+
end
|
|
184
|
+
function MiddlewareProvider:deleteClientGlobal(middlewares)
|
|
185
|
+
local clientMiddlewares = self:getClientGlobal()
|
|
186
|
+
local _middlewares = middlewares
|
|
187
|
+
if type(_middlewares) == "function" then
|
|
188
|
+
local _middlewares_1 = middlewares
|
|
189
|
+
local _arg0 = (table.find(clientMiddlewares, _middlewares_1) or 0) - 1
|
|
190
|
+
table.remove(clientMiddlewares, _arg0 + 1)
|
|
191
|
+
else
|
|
192
|
+
for _, middleware in middlewares do
|
|
193
|
+
self:deleteClientGlobal(middleware)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
function MiddlewareProvider:deleteServerGlobal(middlewares)
|
|
198
|
+
local serverMiddlewares = self:getServerGlobal()
|
|
199
|
+
local _middlewares = middlewares
|
|
200
|
+
if type(_middlewares) == "function" then
|
|
201
|
+
local _middlewares_1 = middlewares
|
|
202
|
+
local _arg0 = (table.find(serverMiddlewares, _middlewares_1) or 0) - 1
|
|
203
|
+
table.remove(serverMiddlewares, _arg0 + 1)
|
|
204
|
+
else
|
|
205
|
+
for _, middleware in middlewares do
|
|
206
|
+
self:deleteServerGlobal(middleware)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
function MiddlewareProvider:deleteShared(message, middlewares)
|
|
211
|
+
local server = middlewares
|
|
212
|
+
local _middlewares = middlewares
|
|
213
|
+
local _exp = (if type(_middlewares) == "function" then { middlewares } else middlewares)
|
|
214
|
+
-- ▼ ReadonlyArray.map ▼
|
|
215
|
+
local _newValue = table.create(#_exp)
|
|
216
|
+
local _callback = function(middleware)
|
|
217
|
+
return function(_, ctx)
|
|
218
|
+
return middleware(ctx)
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
for _k, _v in _exp do
|
|
222
|
+
_newValue[_k] = _callback(_v, _k - 1, _exp)
|
|
223
|
+
end
|
|
224
|
+
-- ▲ ReadonlyArray.map ▲
|
|
225
|
+
local client = _newValue
|
|
226
|
+
self:deleteClient(message, client)
|
|
227
|
+
self:deleteServer(message, server)
|
|
228
|
+
end
|
|
229
|
+
function MiddlewareProvider:deleteClient(message, middlewares)
|
|
230
|
+
local clientMiddlewares = self:getClient(message)
|
|
231
|
+
local _middlewares = middlewares
|
|
232
|
+
if type(_middlewares) == "function" then
|
|
233
|
+
local _middlewares_1 = middlewares
|
|
234
|
+
local _arg0 = (table.find(clientMiddlewares, _middlewares_1) or 0) - 1
|
|
235
|
+
table.remove(clientMiddlewares, _arg0 + 1)
|
|
236
|
+
else
|
|
237
|
+
for _, middleware in middlewares do
|
|
238
|
+
self:deleteClient(message, middleware)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
function MiddlewareProvider:deleteServer(message, middlewares)
|
|
243
|
+
local serverMiddlewares = self:getServer(message)
|
|
244
|
+
local _middlewares = middlewares
|
|
245
|
+
if type(_middlewares) == "function" then
|
|
246
|
+
local _middlewares_1 = middlewares
|
|
247
|
+
local _arg0 = (table.find(serverMiddlewares, _middlewares_1) or 0) - 1
|
|
248
|
+
table.remove(serverMiddlewares, _arg0 + 1)
|
|
249
|
+
else
|
|
250
|
+
for _, middleware in middlewares do
|
|
251
|
+
self:deleteServer(message, middleware)
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
165
255
|
end
|
|
166
256
|
return {
|
|
167
257
|
DropRequest = DropRequest,
|
package/out/structs.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Modding } from "@flamework/core";
|
|
2
|
-
import type { Networking } from "@flamework/networking";
|
|
1
|
+
import type { Modding } from "@flamework/core";
|
|
3
2
|
import type { SerializerMetadata, SerializedData, Transform, Vector, String, u8, u16, u32, i8, i16, i32, f16, f24, f32, f64 } from "@rbxts/serio";
|
|
4
3
|
export type MessageCallback<T = unknown> = ServerMessageCallback<T> | ClientMessageCallback<T>;
|
|
5
4
|
export type ClientMessageCallback<T = unknown> = (data: T) => void;
|
|
@@ -14,16 +13,7 @@ export interface PacketInfo {
|
|
|
14
13
|
export interface SerializedPacket extends SerializedData {
|
|
15
14
|
readonly messageBuf: buffer;
|
|
16
15
|
}
|
|
17
|
-
export type MessageEvent = (packets: SerializedPacket[]) => void;
|
|
18
|
-
export type UnreliableMessageEvent = Networking.Unreliable<MessageEvent>;
|
|
19
|
-
export interface ServerEvents {
|
|
20
|
-
readonly sendServerMessage: MessageEvent;
|
|
21
|
-
readonly sendUnreliableServerMessage: UnreliableMessageEvent;
|
|
22
|
-
}
|
|
23
|
-
export interface ClientEvents {
|
|
24
|
-
readonly sendClientMessage: MessageEvent;
|
|
25
|
-
readonly sendUnreliableClientMessage: UnreliableMessageEvent;
|
|
26
|
-
}
|
|
16
|
+
export type MessageEvent = (...packets: SerializedPacket[]) => void;
|
|
27
17
|
type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
|
|
28
18
|
type ReplaceByMapWithDepth<T, Depth extends number = 11> = [
|
|
29
19
|
Depth
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rbxts/tether",
|
|
3
|
-
"version": "1.3.
|
|
4
|
-
"main": "out/init.
|
|
3
|
+
"version": "1.3.14",
|
|
4
|
+
"main": "out/init.luau",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"prepublishOnly": "npm
|
|
6
|
+
"setup-rokit": "rokit trust lune-org/lune && rokit trust rojo-rbx/rojo && rokit install",
|
|
7
|
+
"build": "npm run setup-rokit && rbxtsc ",
|
|
8
|
+
"prepublishOnly": "npm test && rbxtsc",
|
|
9
|
+
"test": "rbxtsc && npm run build -- -p tests && rojo build tests -o tests/test-environment.rbxl && lune run tests tests/test-environment.rbxl"
|
|
9
10
|
},
|
|
10
11
|
"keywords": [
|
|
11
12
|
"roblox",
|
|
@@ -31,20 +32,19 @@
|
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
34
|
"@rbxts/compiler-types": "^3.0.0-types.0",
|
|
34
|
-
"@rbxts/types": "^1.0.
|
|
35
|
+
"@rbxts/types": "^1.0.856",
|
|
35
36
|
"rbxts-transformer-flamework": "^1.3.1",
|
|
36
37
|
"roblox-ts": "^3.0.0",
|
|
37
|
-
"typescript": "^5.5.3"
|
|
38
|
+
"typescript": "^5.5.3",
|
|
39
|
+
"ts-toolbelt": "^9.6.0"
|
|
38
40
|
},
|
|
39
41
|
"dependencies": {
|
|
40
42
|
"@flamework/core": "^1.3.1",
|
|
41
|
-
"@flamework/networking": "^1.3.1",
|
|
42
43
|
"@rbxts/destroyable": "^1.0.1",
|
|
43
44
|
"@rbxts/flamework-meta-utils": "^1.0.6",
|
|
44
45
|
"@rbxts/object-utils": "^1.0.4",
|
|
45
46
|
"@rbxts/repr": "^1.0.1",
|
|
46
47
|
"@rbxts/serio": "^1.0.18",
|
|
47
|
-
"@rbxts/services": "^1.5.5"
|
|
48
|
-
"ts-toolbelt": "^9.6.0"
|
|
48
|
+
"@rbxts/services": "^1.5.5"
|
|
49
49
|
}
|
|
50
50
|
}
|