/ src / autoproduce.ts
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  }