@rbxts/tether 1.2.9 → 1.3.1

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.
@@ -1,5 +1,5 @@
1
1
  import { Modding } from "@flamework/core";
2
- import type { SerializerMetadata } from "@rbxts/flamework-binary-serializer";
2
+ import type { SerializerMetadata } from "@rbxts/serio";
3
3
  import type { Any } from "ts-toolbelt";
4
4
  import { type SharedMiddleware } from "./middleware";
5
5
  export declare namespace BuiltinMiddlewares {
@@ -37,8 +37,12 @@ do
37
37
  throwError = true
38
38
  end
39
39
  return function(ctx)
40
- local rawData = ctx.getRawData()
41
- local totalSize = buffer.len(rawData.buffer) + #rawData.blobs * BLOB_SIZE
40
+ local _binding = ctx.getRawData()
41
+ local buf = _binding.buf
42
+ local blobs = _binding.blobs
43
+ local bufferSize = if buf == nil then 0 else buffer.len(buf)
44
+ local blobsSize = if blobs == nil then 0 else #blobs * BLOB_SIZE
45
+ local totalSize = bufferSize + blobsSize
42
46
  if totalSize > maxBytes then
43
47
  return if throwError then error(`[@rbxts/tether]: Message '{ctx.message}' exceeded maximum packet size of {maxBytes} bytes`) else DropRequest
44
48
  end
@@ -84,15 +88,17 @@ do
84
88
  local message = _param.message
85
89
  local data = _param.data
86
90
  local getRawData = _param.getRawData
87
- local rawData = getRawData()
88
- local bufferSize = buffer.len(rawData.buffer)
89
- local blobsSize = #rawData.blobs * BLOB_SIZE
91
+ local _binding = getRawData()
92
+ local buf = _binding.buf
93
+ local blobs = _binding.blobs
94
+ local bufferSize = if buf == nil then 0 else buffer.len(buf)
95
+ local blobsSize = if blobs == nil then 0 else #blobs * BLOB_SIZE
90
96
  local schemaString = if schema ~= nil then " " .. table.concat(string.split(repr(schema[1], {
91
97
  pretty = true,
92
98
  }), "\n"), "\n ") else "unknown"
93
99
  local text = { "\n", horizontalLine, "\n", "Packet sent to ", (if RunService:IsServer() then "client" else "server"), "!\n", " - Message: ", message, "\n", " - Data: ", repr(data, {
94
100
  pretty = true,
95
- }), "\n", " - Raw data:\n", " - Buffer: ", bufferToString(rawData.buffer), "\n", " - Blobs: ", repr(rawData.blobs, {
101
+ }), "\n", " - Raw data:\n", " - Buffer: ", bufferToString(buf), "\n", " - Blobs: ", repr(blobs, {
96
102
  pretty = false,
97
103
  robloxClassName = true,
98
104
  }), "\n", " - Packet size: ", bufferSize + blobsSize, " bytes\n", " - Buffer: ", bufferSize, " bytes\n", " - Blobs: ", blobsSize, " bytes\n", " - Schema: ", schemaString, "\n", horizontalLine, "\n" }
@@ -2,16 +2,16 @@
2
2
  local TS = _G[script]
3
3
  local t = TS.import(script, TS.getModule(script, "@rbxts", "t").lib.ts).t
4
4
  local Networking = TS.import(script, TS.getModule(script, "@flamework", "networking").out).Networking
5
- local createBinarySerializer = TS.import(script, TS.getModule(script, "@rbxts", "flamework-binary-serializer").out).createBinarySerializer
6
5
  local _services = TS.import(script, TS.getModule(script, "@rbxts", "services"))
7
6
  local Players = _services.Players
8
7
  local RunService = _services.RunService
9
8
  local Destroyable = TS.import(script, TS.getModule(script, "@rbxts", "destroyable").out).default
9
+ local Object = TS.import(script, TS.getModule(script, "@rbxts", "object-utils"))
10
+ local createSerializer = TS.import(script, TS.getModule(script, "@rbxts", "serio").out).default
10
11
  local repr = TS.import(script, TS.getModule(script, "@rbxts", "repr").out)
11
12
  local _middleware = TS.import(script, script.Parent, "middleware")
12
13
  local DropRequest = _middleware.DropRequest
13
14
  local MiddlewareProvider = _middleware.MiddlewareProvider
14
- local Object = TS.import(script, TS.getModule(script, "@rbxts", "object-utils"))
15
15
  local remotes = Networking.createEvent("@rbxts/tether:message-emitter@remotes")
16
16
  local noServerListen = "[@rbxts/tether]: Cannot listen to server message from client"
17
17
  local noClientListen = "[@rbxts/tether]: Cannot listen to client message from server"
@@ -262,16 +262,16 @@ do
262
262
  self.serverEvents = remotes:createServer({}, {
263
263
  incomingIds = { "sendServerMessage", "sendUnreliableServerMessage" },
264
264
  incoming = {
265
- sendServerMessage = { { t.interface({
266
- messageBuffer = t.typeof("buffer"),
267
- buffer = t.typeof("buffer"),
268
- blobs = t.array(t.any),
269
- }) }, nil },
270
- sendUnreliableServerMessage = { { t.interface({
271
- messageBuffer = t.typeof("buffer"),
272
- buffer = t.typeof("buffer"),
273
- blobs = t.array(t.any),
274
- }) }, nil },
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
275
  },
276
276
  incomingUnreliable = {
277
277
  sendUnreliableServerMessage = true,
@@ -287,16 +287,16 @@ do
287
287
  self.clientEvents = remotes:createClient({}, {
288
288
  incomingIds = { "sendClientMessage", "sendUnreliableClientMessage" },
289
289
  incoming = {
290
- sendClientMessage = { { t.interface({
291
- messageBuffer = t.typeof("buffer"),
292
- buffer = t.typeof("buffer"),
293
- blobs = t.array(t.any),
294
- }) }, nil },
295
- sendUnreliableClientMessage = { { t.interface({
296
- messageBuffer = t.typeof("buffer"),
297
- buffer = t.typeof("buffer"),
298
- blobs = t.array(t.any),
299
- }) }, nil },
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
300
  },
301
301
  incomingUnreliable = {
302
302
  sendUnreliableClientMessage = true,
@@ -361,31 +361,235 @@ do
361
361
  return self
362
362
  end
363
363
  function MessageEmitter:update()
364
+ local getPacket = function(info)
365
+ return info.packet
366
+ end
367
+ if RunService:IsClient() then
368
+ if #self.serverQueue == 0 then
369
+ return nil
370
+ end
371
+ local _exp = self.serverQueue
372
+ -- ▼ ReadonlyArray.map ▼
373
+ local _newValue = table.create(#_exp)
374
+ local _callback = function(_param)
375
+ local message = _param[1]
376
+ local data = _param[2]
377
+ local unreliable = _param[3]
378
+ local packet = self:getPacket(message, data)
379
+ return {
380
+ packet = packet,
381
+ unreliable = unreliable,
382
+ }
383
+ end
384
+ for _k, _v in _exp do
385
+ _newValue[_k] = _callback(_v, _k - 1, _exp)
386
+ end
387
+ -- ▲ ReadonlyArray.map ▲
388
+ local serverPacketInfos = _newValue
389
+ -- ▼ ReadonlyArray.filter ▼
390
+ local _newValue_1 = {}
391
+ local _callback_1 = function(info)
392
+ return info.unreliable
393
+ end
394
+ local _length = 0
395
+ for _k, _v in serverPacketInfos do
396
+ if _callback_1(_v, _k - 1, serverPacketInfos) == true then
397
+ _length += 1
398
+ _newValue_1[_length] = _v
399
+ end
400
+ end
401
+ -- ▲ ReadonlyArray.filter ▲
402
+ -- ▼ ReadonlyArray.map ▼
403
+ local _newValue_2 = table.create(#_newValue_1)
404
+ for _k, _v in _newValue_1 do
405
+ _newValue_2[_k] = getPacket(_v, _k - 1, _newValue_1)
406
+ end
407
+ -- ▲ ReadonlyArray.map ▲
408
+ local unreliableServerPackets = _newValue_2
409
+ -- ▼ ReadonlyArray.filter ▼
410
+ local _newValue_3 = {}
411
+ local _callback_2 = function(info)
412
+ return not info.unreliable
413
+ end
414
+ local _length_1 = 0
415
+ for _k, _v in serverPacketInfos do
416
+ if _callback_2(_v, _k - 1, serverPacketInfos) == true then
417
+ _length_1 += 1
418
+ _newValue_3[_length_1] = _v
419
+ end
420
+ end
421
+ -- ▲ ReadonlyArray.filter ▲
422
+ -- ▼ ReadonlyArray.map ▼
423
+ local _newValue_4 = table.create(#_newValue_3)
424
+ for _k, _v in _newValue_3 do
425
+ _newValue_4[_k] = getPacket(_v, _k - 1, _newValue_3)
426
+ end
427
+ -- ▲ ReadonlyArray.map ▲
428
+ local serverPackets = _newValue_4
429
+ if not (#unreliableServerPackets == 0) then
430
+ self.clientEvents.sendUnreliableServerMessage(unreliableServerPackets)
431
+ end
432
+ if not (#serverPackets == 0) then
433
+ self.clientEvents.sendServerMessage(serverPackets)
434
+ end
435
+ self.serverQueue = {}
436
+ return nil
437
+ end
438
+ local clientPackets = {}
439
+ local addClientPacket = function(player, packetInfo)
440
+ local _player = player
441
+ local _condition = clientPackets[_player]
442
+ if _condition == nil then
443
+ _condition = {}
444
+ end
445
+ local packetList = _condition
446
+ local _packetInfo = packetInfo
447
+ table.insert(packetList, _packetInfo)
448
+ local _player_1 = player
449
+ clientPackets[_player_1] = packetList
450
+ end
364
451
  for _, _binding in self.clientQueue do
365
452
  local player = _binding[1]
366
453
  local message = _binding[2]
367
454
  local data = _binding[3]
368
455
  local unreliable = _binding[4]
369
- local remote = if unreliable then self.serverEvents.sendUnreliableClientMessage else self.serverEvents.sendClientMessage
370
- remote(player, self:getPacket(message, data))
456
+ local packet = self:getPacket(message, data)
457
+ local info = {
458
+ packet = packet,
459
+ unreliable = unreliable,
460
+ }
461
+ if typeof(player) == "Instance" then
462
+ addClientPacket(player, info)
463
+ else
464
+ for _1, p in player do
465
+ addClientPacket(p, info)
466
+ end
467
+ end
371
468
  end
372
- self.clientQueue = {}
373
- for _, _binding in self.clientBroadcastQueue do
374
- local message = _binding[1]
375
- local data = _binding[2]
376
- local unreliable = _binding[3]
377
- local remote = if unreliable then self.serverEvents.sendUnreliableClientMessage else self.serverEvents.sendClientMessage
378
- remote:broadcast(self:getPacket(message, data))
469
+ if not (#self.clientBroadcastQueue == 0) then
470
+ local _exp = self.clientBroadcastQueue
471
+ -- ReadonlyArray.map
472
+ local _newValue = table.create(#_exp)
473
+ local _callback = function(_param)
474
+ local message = _param[1]
475
+ local data = _param[2]
476
+ local unreliable = _param[3]
477
+ local packet = self:getPacket(message, data)
478
+ return {
479
+ packet = packet,
480
+ unreliable = unreliable,
481
+ }
482
+ end
483
+ for _k, _v in _exp do
484
+ _newValue[_k] = _callback(_v, _k - 1, _exp)
485
+ end
486
+ -- ▲ ReadonlyArray.map ▲
487
+ local clientBroadcastPackets = _newValue
488
+ -- ▼ ReadonlyArray.filter ▼
489
+ local _newValue_1 = {}
490
+ local _callback_1 = function(info)
491
+ return info.unreliable
492
+ end
493
+ local _length = 0
494
+ for _k, _v in clientBroadcastPackets do
495
+ if _callback_1(_v, _k - 1, clientBroadcastPackets) == true then
496
+ _length += 1
497
+ _newValue_1[_length] = _v
498
+ end
499
+ end
500
+ -- ▲ ReadonlyArray.filter ▲
501
+ -- ▼ ReadonlyArray.map ▼
502
+ local _newValue_2 = table.create(#_newValue_1)
503
+ for _k, _v in _newValue_1 do
504
+ _newValue_2[_k] = getPacket(_v, _k - 1, _newValue_1)
505
+ end
506
+ -- ▲ ReadonlyArray.map ▲
507
+ local unreliableBroadcastPackets = _newValue_2
508
+ -- ▼ ReadonlyArray.filter ▼
509
+ local _newValue_3 = {}
510
+ local _callback_2 = function(info)
511
+ return not info.unreliable
512
+ end
513
+ local _length_1 = 0
514
+ for _k, _v in clientBroadcastPackets do
515
+ if _callback_2(_v, _k - 1, clientBroadcastPackets) == true then
516
+ _length_1 += 1
517
+ _newValue_3[_length_1] = _v
518
+ end
519
+ end
520
+ -- ▲ ReadonlyArray.filter ▲
521
+ -- ▼ ReadonlyArray.map ▼
522
+ local _newValue_4 = table.create(#_newValue_3)
523
+ for _k, _v in _newValue_3 do
524
+ _newValue_4[_k] = getPacket(_v, _k - 1, _newValue_3)
525
+ end
526
+ -- ▲ ReadonlyArray.map ▲
527
+ local broadcastPackets = _newValue_4
528
+ if not (#unreliableBroadcastPackets == 0) then
529
+ self.serverEvents.sendUnreliableClientMessage:broadcast(unreliableBroadcastPackets)
530
+ end
531
+ if not (#broadcastPackets == 0) then
532
+ self.serverEvents.sendClientMessage:broadcast(broadcastPackets)
533
+ end
534
+ self.clientBroadcastQueue = {}
379
535
  end
380
- self.clientBroadcastQueue = {}
381
- for _, _binding in self.serverQueue do
382
- local message = _binding[1]
383
- local data = _binding[2]
384
- local unreliable = _binding[3]
385
- local remote = if unreliable then self.clientEvents.sendUnreliableServerMessage else self.clientEvents.sendServerMessage
386
- remote(self:getPacket(message, data))
536
+ if not (#self.clientQueue == 0) then
537
+ for player, packetInfo in clientPackets do
538
+ if #packetInfo == 0 then
539
+ continue
540
+ end
541
+ if #packetInfo == 0 then
542
+ continue
543
+ end
544
+ -- ▼ ReadonlyArray.filter ▼
545
+ local _newValue = {}
546
+ local _callback = function(info)
547
+ return info.unreliable
548
+ end
549
+ local _length = 0
550
+ for _k, _v in packetInfo do
551
+ if _callback(_v, _k - 1, packetInfo) == true then
552
+ _length += 1
553
+ _newValue[_length] = _v
554
+ end
555
+ end
556
+ -- ▲ ReadonlyArray.filter ▲
557
+ -- ▼ ReadonlyArray.map ▼
558
+ local _newValue_1 = table.create(#_newValue)
559
+ for _k, _v in _newValue do
560
+ _newValue_1[_k] = getPacket(_v, _k - 1, _newValue)
561
+ end
562
+ -- ▲ ReadonlyArray.map ▲
563
+ local unreliablePackets = _newValue_1
564
+ -- ▼ ReadonlyArray.filter ▼
565
+ local _newValue_2 = {}
566
+ local _callback_1 = function(info)
567
+ return not info.unreliable
568
+ end
569
+ local _length_1 = 0
570
+ for _k, _v in packetInfo do
571
+ if _callback_1(_v, _k - 1, packetInfo) == true then
572
+ _length_1 += 1
573
+ _newValue_2[_length_1] = _v
574
+ end
575
+ end
576
+ -- ▲ ReadonlyArray.filter ▲
577
+ -- ▼ ReadonlyArray.map ▼
578
+ local _newValue_3 = table.create(#_newValue_2)
579
+ for _k, _v in _newValue_2 do
580
+ _newValue_3[_k] = getPacket(_v, _k - 1, _newValue_2)
581
+ end
582
+ -- ▲ ReadonlyArray.map ▲
583
+ local packets = _newValue_3
584
+ if not (#unreliablePackets == 0) then
585
+ self.serverEvents.sendUnreliableClientMessage(player, unreliablePackets)
586
+ end
587
+ if not (#packets == 0) then
588
+ self.serverEvents.sendClientMessage(player, packets)
589
+ end
590
+ end
591
+ self.clientQueue = {}
387
592
  end
388
- self.serverQueue = {}
389
593
  end
390
594
  function MessageEmitter:runClientMiddlewares(message, data, player)
391
595
  if not self:validateData(message, data) then
@@ -482,13 +686,15 @@ do
482
686
  end
483
687
  return guardPassed
484
688
  end
485
- function MessageEmitter:onRemoteFire(serializedPacket, player)
486
- if buffer.len(serializedPacket.messageBuffer) > 1 then
487
- return warn("[@rbxts/tether]: Rejected message because message buffer was larger than one byte")
689
+ function MessageEmitter:onRemoteFire(serializedPackets, player)
690
+ for _, packet in serializedPackets do
691
+ if buffer.len(packet.messageBuf) > 1 then
692
+ return warn("[@rbxts/tether]: Rejected packet because message buffer was larger than one byte")
693
+ end
694
+ local message = buffer.readu8(packet.messageBuf, 0)
695
+ self:executeEventCallbacks(message, packet, player)
696
+ self:executeFunctions(message, packet)
488
697
  end
489
- local message = buffer.readu8(serializedPacket.messageBuffer, 0)
490
- self:executeEventCallbacks(message, serializedPacket, player)
491
- self:executeFunctions(message, serializedPacket)
492
698
  end
493
699
  function MessageEmitter:executeFunctions(message, serializedPacket)
494
700
  local isServer = RunService:IsServer()
@@ -524,7 +730,7 @@ do
524
730
  local serializer = self:getSerializer(message)
525
731
  local _packet = serializer
526
732
  if _packet ~= nil then
527
- _packet = _packet.deserialize(serializedPacket.buffer, serializedPacket.blobs)
733
+ _packet = _packet.deserialize(serializedPacket)
528
734
  end
529
735
  local packet = _packet
530
736
  self:validateData(message, packet)
@@ -565,17 +771,17 @@ do
565
771
  end
566
772
  function MessageEmitter:getPacket(message, data)
567
773
  local serializer = self:getSerializer(message)
568
- local messageBuffer = buffer.create(1)
569
- buffer.writeu8(messageBuffer, 0, message)
774
+ local messageBuf = buffer.create(1)
775
+ buffer.writeu8(messageBuf, 0, message)
570
776
  if serializer == nil then
571
777
  return {
572
- messageBuffer = messageBuffer,
573
- buffer = buffer.create(0),
778
+ messageBuf = messageBuf,
779
+ buf = buffer.create(0),
574
780
  blobs = {},
575
781
  }
576
782
  end
577
783
  local _object = {
578
- messageBuffer = messageBuffer,
784
+ messageBuf = messageBuf,
579
785
  }
580
786
  for _k, _v in serializer.serialize(data) do
581
787
  _object[_k] = _v
@@ -586,7 +792,7 @@ do
586
792
  self.serializers[message] = self:createMessageSerializer(meta)
587
793
  end
588
794
  function MessageEmitter:createMessageSerializer(meta)
589
- return createBinarySerializer(meta)
795
+ return createSerializer(meta)
590
796
  end
591
797
  function MessageEmitter:getSerializer(message)
592
798
  return self.serializers[message]
package/out/structs.d.ts CHANGED
@@ -1,32 +1,41 @@
1
1
  import { Modding } from "@flamework/core";
2
2
  import type { Networking } from "@flamework/networking";
3
- import type { SerializerMetadata } from "@rbxts/flamework-binary-serializer";
3
+ import type { SerializerMetadata, SerializedData, Transform, Vector, String, u8, u16, u32, i8, i16, i32, f16, f24, f32, f64 } from "@rbxts/serio";
4
4
  export type MessageCallback<T = unknown> = ServerMessageCallback<T> | ClientMessageCallback<T>;
5
5
  export type ClientMessageCallback<T = unknown> = (data: T) => void;
6
6
  export type ClientMessageFunctionCallback<T = unknown, R = unknown> = (data: T) => R;
7
7
  export type ServerMessageCallback<T = unknown> = (player: Player, data: T) => void;
8
8
  export type ServerMessageFunctionCallback<T = unknown, R = unknown> = (player: Player, data: T) => R;
9
9
  export type BaseMessage = number;
10
- export interface SerializedPacket {
11
- readonly messageBuffer: buffer;
12
- readonly buffer: buffer;
13
- readonly blobs: defined[];
10
+ export interface PacketInfo {
11
+ readonly packet: SerializedPacket;
12
+ readonly unreliable: boolean;
14
13
  }
15
- export type MessageEvent = (packet: SerializedPacket) => void;
14
+ export interface SerializedPacket extends SerializedData {
15
+ readonly messageBuf: buffer;
16
+ }
17
+ export type MessageEvent = (packets: SerializedPacket[]) => void;
16
18
  export type UnreliableMessageEvent = Networking.Unreliable<MessageEvent>;
17
19
  export interface ServerEvents {
18
- sendServerMessage: MessageEvent;
19
- sendUnreliableServerMessage: UnreliableMessageEvent;
20
+ readonly sendServerMessage: MessageEvent;
21
+ readonly sendUnreliableServerMessage: UnreliableMessageEvent;
20
22
  }
21
23
  export interface ClientEvents {
22
- sendClientMessage: MessageEvent;
23
- sendUnreliableClientMessage: UnreliableMessageEvent;
24
+ readonly sendClientMessage: MessageEvent;
25
+ readonly sendUnreliableClientMessage: UnreliableMessageEvent;
24
26
  }
27
+ type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
28
+ type ReplaceByMapWithDepth<T, Depth extends number = 11> = [
29
+ Depth
30
+ ] extends [never] ? T : T extends Vector ? Vector3 : T extends Transform ? CFrame : T extends String ? string : T extends u8 | u16 | u32 | i8 | i16 | i32 | f16 | f24 | f32 | f64 ? number : T extends any[] ? ReplaceByMapWithDepth<T[number], Prev[Depth]>[] : T extends object ? {
31
+ [K in keyof T]: ReplaceByMapWithDepth<T[K], Prev[Depth]>;
32
+ } : T;
25
33
  export interface MessageMetadata<MessageData, Kind extends keyof MessageData> {
26
- readonly guard: Modding.Generic<MessageData[Kind], "guard">;
34
+ readonly guard: Modding.Generic<ReplaceByMapWithDepth<MessageData[Kind]>, "guard">;
27
35
  readonly serializerMetadata: MessageData[Kind] extends undefined ? undefined : Modding.Many<SerializerMetadata<MessageData[Kind]>>;
28
36
  }
29
37
  export type Guard<T = unknown> = (value: unknown) => value is T;
30
38
  export type MessageEmitterMetadata<MessageData> = {
31
- [Kind in keyof MessageData]: MessageMetadata<MessageData, Kind>;
39
+ readonly [Kind in keyof MessageData]: MessageMetadata<MessageData, Kind>;
32
40
  };
41
+ export {};
package/out/utility.d.ts CHANGED
@@ -1 +1 @@
1
- export declare function bufferToString(buf: buffer): string;
1
+ export declare function bufferToString(buf?: buffer): string;
package/out/utility.luau CHANGED
@@ -1,27 +1,28 @@
1
1
  -- Compiled with roblox-ts v3.0.0
2
2
  local function bufferToString(buf)
3
3
  local s = { "{ " }
4
- do
5
- local i = 0
6
- local _shouldIncrement = false
7
- while true do
8
- if _shouldIncrement then
9
- i += 1
10
- else
11
- _shouldIncrement = true
12
- end
13
- if not (i < buffer.len(buf)) then
14
- break
15
- end
16
- local byte = buffer.readu8(buf, i)
17
- local _arg0 = tostring(byte)
18
- table.insert(s, _arg0)
19
- if i < buffer.len(buf) - 1 then
20
- table.insert(s, ", ")
4
+ if buf ~= nil then
5
+ do
6
+ local i = 0
7
+ local _shouldIncrement = false
8
+ while true do
9
+ if _shouldIncrement then
10
+ i += 1
11
+ else
12
+ _shouldIncrement = true
13
+ end
14
+ if not (i < buffer.len(buf)) then
15
+ break
16
+ end
17
+ local byte = buffer.readu8(buf, i)
18
+ local _arg0 = tostring(byte)
19
+ table.insert(s, _arg0)
20
+ local _arg0_1 = if i < buffer.len(buf) - 1 then ", " else ""
21
+ table.insert(s, _arg0_1)
21
22
  end
22
23
  end
23
24
  end
24
- table.insert(s, " }")
25
+ table.insert(s, "}")
25
26
  return table.concat(s, "")
26
27
  end
27
28
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rbxts/tether",
3
- "version": "1.2.9",
3
+ "version": "1.3.1",
4
4
  "main": "out/init.lua",
5
5
  "scripts": {
6
6
  "build": "rbxtsc",
@@ -32,15 +32,15 @@
32
32
  "devDependencies": {
33
33
  "@rbxts/compiler-types": "^3.0.0-types.0",
34
34
  "@rbxts/types": "^1.0.835",
35
- "rbxts-transformer-flamework": "^1.2.4",
35
+ "rbxts-transformer-flamework": "^1.3.1",
36
36
  "roblox-ts": "^3.0.0",
37
37
  "typescript": "^5.5.3"
38
38
  },
39
39
  "dependencies": {
40
- "@flamework/core": "^1.2.4",
41
- "@flamework/networking": "^1.2.4",
40
+ "@flamework/core": "^1.3.1",
41
+ "@flamework/networking": "^1.3.1",
42
42
  "@rbxts/destroyable": "^1.0.1",
43
- "@rbxts/flamework-binary-serializer": "^0.6.0",
43
+ "@rbxts/serio": "^1.0.5",
44
44
  "@rbxts/flamework-meta-utils": "^1.0.4",
45
45
  "@rbxts/object-utils": "^1.0.4",
46
46
  "@rbxts/repr": "^1.0.1",