Would the following code fulfill a y-protocol compatible sync protocol that does not use a Y.Doc (instead using encoded state):
/**
* Create a sync step 1 message based on the state of the current shared document.
*
* Original code:
*
* export const writeSyncStep1 = (encoder, doc) => {
* encoding.writeVarUint(encoder, messageYjsSyncStep1)
* const sv = Y.encodeStateVector(doc)
* encoding.writeVarUint8Array(encoder, sv)
* }
*
* @param encoder: A YJS encoder
* @param encodedstate: A Y.Doc that has been encoded to bytes
*/
export const writeSyncStep1 = (encoder: encoding.Encoder, encodedstate: Uint8Array) => {
encoding.writeVarUint(encoder, messageYjsSyncStep1);
encoding.writeVarUint8Array(encoder, Y.encodeStateVectorFromUpdate(encodedstate));
};
/**
* Create a sync step 2 message based on the state of the current shared document.
*
* Original code:
*
* export const writeSyncStep2 = (encoder, doc, encodedStateVector) => {
* encoding.writeVarUint(encoder, messageYjsSyncStep2)
* encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))
* }
*
* @param encoder: A YJS encoder
* @param encodedstate: A Y.Doc that has been encoded to bytes
* @param encodedStateVectory: A client document state vector
*/
export const writeSyncStep2 = (encoder: encoding.Encoder, encodedstate: Uint8Array, encodedStateVector: Uint8Array) => {
encoding.writeVarUint(encoder, messageYjsSyncStep2);
encoding.writeVarUint8Array(encoder, Y.diffUpdate(encodedstate, encodedStateVector));
};
/**
* Read SyncStep1 message and reply with SyncStep2.
*
* Original code:
*
* export const readSyncStep1 = (decoder, encoder, doc) =>
* writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))
*
* @param decoder The reply to the received message
* @param encoder The received message
* @param encodedstate: A Y.Doc that has been encoded to bytes
*/
export const readSyncStep1 = (decoder: decoding.Decoder, encoder: encoding.Encoder, encodedstate: Uint8Array) =>
writeSyncStep2(encoder, encodedstate, decoding.readVarUint8Array(decoder));