feat(sync): add autoSerialize option (#42)

* feat(sync): add `autoSerialize` option

* docs: fix `autoSerialize` note

* docs: fix typo
This commit is contained in:
richard 2025-01-25 14:07:14 -08:00 • committed by GitHub
parent 8eddd182d3
commit b8bb123379
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 55 additions and 49 deletions

View file

@ -24,14 +24,13 @@ type ServerOptions = {
]=]
preserveHistory: boolean?,
--[=[
Whether to convert problematic sparse arrays into dictionaries with
string keys. Defaults to `true`.
When `true`, Charm will apply validation and serialize unsafe arrays
to address remote event argument limitations. Defaults to `true`.
While this is mandatory for safely syncing arrays over vanilla Roblox
remotes, it can be disabled if your network library uses a custom
serialization method (i.e. Zap, ByteNet).
This option should be disabled if your network library uses a custom
serialization method (i.e. Zap, ByteNet) to prevent interference.
]=]
serializeArrays: boolean?,
autoSerialize: boolean?,
}
type ServerSyncer = {
@ -144,7 +143,7 @@ local function server(options: ServerOptions): ServerSyncer
table.insert(payloads, {
type = "patch",
data = patch.diff(snapshots[index - 1], snapshot, options.serializeArrays),
data = patch.diff(snapshots[index - 1], snapshot, options.autoSerialize),
})
end
@ -181,7 +180,7 @@ local function server(options: ServerOptions): ServerSyncer
table.insert(payloads, {
type = "patch",
data = patch.diff(snapshots[index - 1], snapshot, options.serializeArrays),
data = patch.diff(snapshots[index - 1], snapshot, options.autoSerialize),
})
end
@ -218,7 +217,7 @@ local function server(options: ServerOptions): ServerSyncer
local payload: SyncPayload = {
type = "patch",
data = patch.diff(previousSnapshot, currentSnapshot, options.serializeArrays),
data = patch.diff(previousSnapshot, currentSnapshot, options.autoSerialize),
}
previousSnapshot = table.clone(currentSnapshot)
@ -247,7 +246,7 @@ local function server(options: ServerOptions): ServerSyncer
local payload: SyncPayload = {
type = "patch",
data = patch.diff(previousSnapshot, currentSnapshot, options.serializeArrays),
data = patch.diff(previousSnapshot, currentSnapshot, options.autoSerialize),
}
previousSnapshot = table.clone(currentSnapshot)