diff --git a/src/index.js b/src/index.js index 07bc2044..1a82a479 100644 --- a/src/index.js +++ b/src/index.js @@ -67,6 +67,8 @@ export { decodeStateVector, logUpdate, logUpdateV2, + decodeUpdate, + decodeUpdateV2, relativePositionToJSON, isDeleted, isParentOf, diff --git a/src/utils/updates.js b/src/utils/updates.js index fa6add00..d62e58fa 100644 --- a/src/utils/updates.js +++ b/src/utils/updates.js @@ -112,6 +112,31 @@ export const logUpdateV2 = (update, YDecoder = UpdateDecoderV2) => { logging.print('DeleteSet: ', ds) } +/** + * @param {Uint8Array} update + * + */ +export const decodeUpdate = (update) => decodeUpdateV2(update, UpdateDecoderV1) + +/** + * @param {Uint8Array} update + * @param {typeof UpdateDecoderV2 | typeof UpdateDecoderV1} [YDecoder] + * + */ +export const decodeUpdateV2 = (update, YDecoder = UpdateDecoderV2) => { + const structs = [] + const updateDecoder = new UpdateDecoderV1(decoding.createDecoder(update)) + const lazyDecoder = new LazyStructReader(updateDecoder, false) + for (let curr = lazyDecoder.curr; curr !== null; curr = lazyDecoder.next()) { + structs.push(curr) + curr.info + } + return { + 'structs': structs, + 'ds': readDeleteSet(updateDecoder), + } +} + export class LazyStructWriter { /** * @param {UpdateEncoderV1 | UpdateEncoderV2} encoder