diff --git a/.changeset/config.json b/.changeset/config.json index e59bc66f8..f38b47ab5 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -7,8 +7,5 @@ "access": "restricted", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": [], - "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { - "onlyUpdatePeerDependentsWhenOutOfRange": true - } + "ignore": [] } diff --git a/.changeset/curvy-turtles-flow.md b/.changeset/curvy-turtles-flow.md new file mode 100644 index 000000000..945f1f21a --- /dev/null +++ b/.changeset/curvy-turtles-flow.md @@ -0,0 +1,5 @@ +--- +"@evolu/common": patch +--- + +Fix number protobuf serialization diff --git a/packages/evolu-common/protobuf/Protobuf.proto b/packages/evolu-common/protobuf/Protobuf.proto index c51cd2d36..daa3360e8 100644 --- a/packages/evolu-common/protobuf/Protobuf.proto +++ b/packages/evolu-common/protobuf/Protobuf.proto @@ -25,7 +25,7 @@ message MessageContent { string column = 3; oneof value { string stringValue = 4; - int32 numberValue = 5; + string numberValue = 5; bytes bytesValue = 6; string jsonValue = 7; }; diff --git a/packages/evolu-common/src/Protobuf.ts b/packages/evolu-common/src/Protobuf.ts index e760af444..0282bf6e8 100644 --- a/packages/evolu-common/src/Protobuf.ts +++ b/packages/evolu-common/src/Protobuf.ts @@ -49,8 +49,8 @@ export interface MessageContent { } | { oneofKind: "numberValue"; - /** @generated from protobuf field: int32 numberValue = 5; */ - numberValue: number; + /** @generated from protobuf field: string numberValue = 5; */ + numberValue: string; } | { oneofKind: "bytesValue"; @@ -132,7 +132,7 @@ class MessageContent$Type extends MessageType { name: "numberValue", kind: "scalar", oneof: "value", - T: 5 /*ScalarType.INT32*/, + T: 9 /*ScalarType.STRING*/, }, { no: 6, diff --git a/packages/evolu-common/src/SyncWorker.ts b/packages/evolu-common/src/SyncWorker.ts index 5b8819c76..71720c499 100644 --- a/packages/evolu-common/src/SyncWorker.ts +++ b/packages/evolu-common/src/SyncWorker.ts @@ -1,3 +1,4 @@ +import * as S from "@effect/schema/Schema"; import { concatBytes } from "@noble/ciphers/utils"; import { BinaryReader, BinaryWriter } from "@protobuf-ts/runtime"; import { @@ -153,7 +154,10 @@ const valueToProtobuf = (value: Value): MessageContent["value"] => { case "string": return { oneofKind: "stringValue", stringValue: value }; case "number": - return { oneofKind: "numberValue", numberValue: value }; + return { + oneofKind: "numberValue", + numberValue: S.encodeSync(S.NumberFromString)(value), + }; } if (value == null) return { oneofKind: undefined }; if (Predicate.isUint8Array(value)) @@ -164,7 +168,7 @@ const valueToProtobuf = (value: Value): MessageContent["value"] => { const valueFromProtobuf = (value: MessageContent["value"]): Value => { switch (value.oneofKind) { case "numberValue": - return value.numberValue; + return S.decodeSync(S.NumberFromString)(value.numberValue); case "stringValue": return value.stringValue; case "bytesValue":