From 7b01c5286d9202a8ba87d529ad317883197e527d Mon Sep 17 00:00:00 2001 From: Joseph R Miles Date: Mon, 3 Jul 2023 07:47:43 -0700 Subject: [PATCH] chore: reproduction test for #53 --- package-lock.json | 21 +++++++++++++++++++-- package.json | 1 + src/index.spec.ts | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a5b604..bbb16a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zustand-middleware-yjs", - "version": "1.3.0-rc.1", + "version": "1.3.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "zustand-middleware-yjs", - "version": "1.3.0-rc.1", + "version": "1.3.1", "license": "MIT", "dependencies": { "yjs": "^13.5.11", @@ -25,6 +25,7 @@ "@types/ws": "^7.4.7", "eslint": "^7.30.0", "husky": "^7.0.1", + "immer": "^10.0.2", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "react-test-renderer": "^17.0.2", @@ -4878,6 +4879,16 @@ "dev": true, "optional": true }, + "node_modules/immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "devOptional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -16352,6 +16363,12 @@ "dev": true, "optional": true }, + "immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "devOptional": true + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", diff --git a/package.json b/package.json index 861ddb4..f95f212 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "@types/ws": "^7.4.7", "eslint": "^7.30.0", "husky": "^7.0.1", + "immer": "^10.0.2", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "react-test-renderer": "^17.0.2", diff --git a/src/index.spec.ts b/src/index.spec.ts index b8aacf1..0cf107c 100644 --- a/src/index.spec.ts +++ b/src/index.spec.ts @@ -5,6 +5,7 @@ import { act, renderHook, } from "@testing-library/react-hooks"; import { createStore as createVanilla, } from "zustand/vanilla"; import { create, } from "zustand"; +import { immer, } from "zustand/middleware/immer"; import * as Y from "yjs"; import { WebsocketProvider, } from "y-websocket"; @@ -907,3 +908,35 @@ describe("Yjs middleware in React", () => expect(result2.current.count).toBe(1); // Actual issue }); }); + +describe("Yjs middleware composed with Immer middleware", () => +{ + describe("When modifying objects", () => + { + it("Does not crash with non-extensible error on local update.", () => + { + type Store = + { + names: string[], + addName: (name: string) => void + }; + + const store = createVanilla()(immer(yjs( + new Y.Doc(), + "hello", + (set) => + ({ + "names": [], + "addName": (name: string) => + set((state) => + state.names.push(name)), + }) + ))); + + expect(() => + { + store.getState().addName("Alice"); + }).not.toThrow(); + }); + }); +}); \ No newline at end of file