autoproduce.ts
1 import type {Patch} from "@automerge/automerge-repo/slim" 2 import {apply, fromAutomerge} from "cabbages" 3 4 /** 5 * convert automerge patches to solid producer operations 6 * @param patches the patches fresh from a 7 * [DocHandleChangePayload](https://automerge.org/automerge-repo/interfaces/_automerge_automerge_repo.DocHandleChangePayload.html) 8 * @returns a callback for an immer-like function. e.g. 9 * [produce](https://docs.solidjs.com/reference/store-utilities/produce) for 10 * [Solid 11 * Stores](https://docs.solidjs.com/reference/store-utilities/create-store) 12 */ 13 export default function autoproduce<T>(patches: Patch[]) { 14 return (doc: T) => { 15 for (let patch of patches) { 16 const [path, range, val] = fromAutomerge(patch) 17 apply(path, doc, range, val) 18 } 19 } 20 }