@rbxts/tether 1.3.0 → 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"
@@ -263,14 +263,14 @@ do
263
263
  incomingIds = { "sendServerMessage", "sendUnreliableServerMessage" },
264
264
  incoming = {
265
265
  sendServerMessage = { { t.array(t.interface({
266
- messageBuffer = t.typeof("buffer"),
267
- buffer = t.typeof("buffer"),
268
- blobs = t.array(t.any),
266
+ messageBuf = t.typeof("buffer"),
267
+ buf = t.optional(t.typeof("buffer")),
268
+ blobs = t.optional(t.array(t.any)),
269
269
  })) }, nil },
270
270
  sendUnreliableServerMessage = { { t.array(t.interface({
271
- messageBuffer = t.typeof("buffer"),
272
- buffer = t.typeof("buffer"),
273
- blobs = t.array(t.any),
271
+ messageBuf = t.typeof("buffer"),
272
+ buf = t.optional(t.typeof("buffer")),
273
+ blobs = t.optional(t.array(t.any)),
274
274
  })) }, nil },
275
275
  },
276
276
  incomingUnreliable = {
@@ -288,14 +288,14 @@ do
288
288
  incomingIds = { "sendClientMessage", "sendUnreliableClientMessage" },
289
289
  incoming = {
290
290
  sendClientMessage = { { t.array(t.interface({
291
- messageBuffer = t.typeof("buffer"),
292
- buffer = t.typeof("buffer"),
293
- blobs = t.array(t.any),
291
+ messageBuf = t.typeof("buffer"),
292
+ buf = t.optional(t.typeof("buffer")),
293
+ blobs = t.optional(t.array(t.any)),
294
294
  })) }, nil },
295
295
  sendUnreliableClientMessage = { { t.array(t.interface({
296
- messageBuffer = t.typeof("buffer"),
297
- buffer = t.typeof("buffer"),
298
- blobs = t.array(t.any),
296
+ messageBuf = t.typeof("buffer"),
297
+ buf = t.optional(t.typeof("buffer")),
298
+ blobs = t.optional(t.array(t.any)),
299
299
  })) }, nil },
300
300
  },
301
301
  incomingUnreliable = {
@@ -688,10 +688,10 @@ do
688
688
  end
689
689
  function MessageEmitter:onRemoteFire(serializedPackets, player)
690
690
  for _, packet in serializedPackets do
691
- if buffer.len(packet.messageBuffer) > 1 then
691
+ if buffer.len(packet.messageBuf) > 1 then
692
692
  return warn("[@rbxts/tether]: Rejected packet because message buffer was larger than one byte")
693
693
  end
694
- local message = buffer.readu8(packet.messageBuffer, 0)
694
+ local message = buffer.readu8(packet.messageBuf, 0)
695
695
  self:executeEventCallbacks(message, packet, player)
696
696
  self:executeFunctions(message, packet)
697
697
  end
@@ -730,7 +730,7 @@ do
730
730
  local serializer = self:getSerializer(message)
731
731
  local _packet = serializer
732
732
  if _packet ~= nil then
733
- _packet = _packet.deserialize(serializedPacket.buffer, serializedPacket.blobs)
733
+ _packet = _packet.deserialize(serializedPacket)
734
734
  end
735
735
  local packet = _packet
736
736
  self:validateData(message, packet)
@@ -771,17 +771,17 @@ do
771
771
  end
772
772
  function MessageEmitter:getPacket(message, data)
773
773
  local serializer = self:getSerializer(message)
774
- local messageBuffer = buffer.create(1)
775
- buffer.writeu8(messageBuffer, 0, message)
774
+ local messageBuf = buffer.create(1)
775
+ buffer.writeu8(messageBuf, 0, message)
776
776
  if serializer == nil then
777
777
  return {
778
- messageBuffer = messageBuffer,
779
- buffer = buffer.create(0),
778
+ messageBuf = messageBuf,
779
+ buf = buffer.create(0),
780
780
  blobs = {},
781
781
  }
782
782
  end
783
783
  local _object = {
784
- messageBuffer = messageBuffer,
784
+ messageBuf = messageBuf,
785
785
  }
786
786
  for _k, _v in serializer.serialize(data) do
787
787
  _object[_k] = _v
@@ -792,7 +792,7 @@ do
792
792
  self.serializers[message] = self:createMessageSerializer(meta)
793
793
  end
794
794
  function MessageEmitter:createMessageSerializer(meta)
795
- return createBinarySerializer(meta)
795
+ return createSerializer(meta)
796
796
  end
797
797
  function MessageEmitter:getSerializer(message)
798
798
  return self.serializers[message]
package/out/structs.d.ts CHANGED
@@ -1,6 +1,6 @@
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;
@@ -11,10 +11,8 @@ export interface PacketInfo {
11
11
  readonly packet: SerializedPacket;
12
12
  readonly unreliable: boolean;
13
13
  }
14
- export interface SerializedPacket {
15
- readonly messageBuffer: buffer;
16
- readonly buffer: buffer;
17
- readonly blobs: defined[];
14
+ export interface SerializedPacket extends SerializedData {
15
+ readonly messageBuf: buffer;
18
16
  }
19
17
  export type MessageEvent = (packets: SerializedPacket[]) => void;
20
18
  export type UnreliableMessageEvent = Networking.Unreliable<MessageEvent>;
@@ -26,11 +24,18 @@ export interface ClientEvents {
26
24
  readonly sendClientMessage: MessageEvent;
27
25
  readonly sendUnreliableClientMessage: UnreliableMessageEvent;
28
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;
29
33
  export interface MessageMetadata<MessageData, Kind extends keyof MessageData> {
30
- readonly guard: Modding.Generic<MessageData[Kind], "guard">;
34
+ readonly guard: Modding.Generic<ReplaceByMapWithDepth<MessageData[Kind]>, "guard">;
31
35
  readonly serializerMetadata: MessageData[Kind] extends undefined ? undefined : Modding.Many<SerializerMetadata<MessageData[Kind]>>;
32
36
  }
33
37
  export type Guard<T = unknown> = (value: unknown) => value is T;
34
38
  export type MessageEmitterMetadata<MessageData> = {
35
39
  readonly [Kind in keyof MessageData]: MessageMetadata<MessageData, Kind>;
36
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.3.0",
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",