tinybase 5.0.0-beta.7 → 5.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/mergeable-store.cjs +1 -1
- package/lib/cjs/mergeable-store.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-browser.cjs +1 -1
- package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
- package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
- package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
- package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-file.cjs +1 -1
- package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
- package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-libsql.cjs +1 -1
- package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-powersync.cjs +1 -1
- package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-remote.cjs +1 -1
- package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs/persisters.cjs +1 -1
- package/lib/cjs/persisters.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -1
- package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -1
- package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
- package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -1
- package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
- package/lib/cjs/synchronizers.cjs +1 -1
- package/lib/cjs/synchronizers.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/cjs/ui-react.cjs +1 -1
- package/lib/cjs/ui-react.cjs.gz +0 -0
- package/lib/cjs-es6/mergeable-store.cjs +1 -1
- package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs-es6/persisters.cjs +1 -1
- package/lib/cjs-es6/persisters.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -1
- package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -1
- package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -1
- package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
- package/lib/cjs-es6/synchronizers.cjs +1 -1
- package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
- package/lib/cjs-es6/tinybase.cjs +1 -1
- package/lib/cjs-es6/tinybase.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
- package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react.cjs +1 -1
- package/lib/cjs-es6/ui-react.cjs.gz +0 -0
- package/lib/debug/mergeable-store.js +6 -0
- package/lib/debug/persisters/persister-automerge.js +15 -6
- package/lib/debug/persisters/persister-browser.js +15 -6
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +15 -6
- package/lib/debug/persisters/persister-electric-sql.js +15 -6
- package/lib/debug/persisters/persister-expo-sqlite-next.js +15 -6
- package/lib/debug/persisters/persister-expo-sqlite.js +15 -6
- package/lib/debug/persisters/persister-file.js +15 -6
- package/lib/debug/persisters/persister-indexed-db.js +15 -6
- package/lib/debug/persisters/persister-libsql.js +15 -6
- package/lib/debug/persisters/persister-partykit-client.js +15 -6
- package/lib/debug/persisters/persister-powersync.js +15 -6
- package/lib/debug/persisters/persister-remote.js +15 -6
- package/lib/debug/persisters/persister-sqlite-wasm.js +15 -6
- package/lib/debug/persisters/persister-sqlite3.js +15 -6
- package/lib/debug/persisters/persister-yjs.js +15 -6
- package/lib/debug/persisters.js +15 -6
- package/lib/debug/synchronizers/synchronizer-local.js +27 -18
- package/lib/debug/synchronizers/synchronizer-ws-client.js +45 -33
- package/lib/debug/synchronizers/synchronizer-ws-server.js +65 -26
- package/lib/debug/synchronizers.js +27 -18
- package/lib/debug/tinybase.js +33 -18
- package/lib/debug/ui-react-dom.js +22 -10
- package/lib/debug/ui-react.js +54 -5
- package/lib/es6/mergeable-store.js +1 -1
- package/lib/es6/mergeable-store.js.gz +0 -0
- package/lib/es6/persisters/persister-automerge.js +1 -1
- package/lib/es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/es6/persisters/persister-browser.js +1 -1
- package/lib/es6/persisters/persister-browser.js.gz +0 -0
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-electric-sql.js +1 -1
- package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
- package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/es6/persisters/persister-file.js +1 -1
- package/lib/es6/persisters/persister-file.js.gz +0 -0
- package/lib/es6/persisters/persister-indexed-db.js +1 -1
- package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/es6/persisters/persister-libsql.js +1 -1
- package/lib/es6/persisters/persister-libsql.js.gz +0 -0
- package/lib/es6/persisters/persister-partykit-client.js +1 -1
- package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/es6/persisters/persister-powersync.js +1 -1
- package/lib/es6/persisters/persister-powersync.js.gz +0 -0
- package/lib/es6/persisters/persister-remote.js +1 -1
- package/lib/es6/persisters/persister-remote.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite3.js +1 -1
- package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/es6/persisters/persister-yjs.js +1 -1
- package/lib/es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/es6/persisters.js +1 -1
- package/lib/es6/persisters.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-local.js +1 -1
- package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -1
- package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -1
- package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/es6/synchronizers.js +1 -1
- package/lib/es6/synchronizers.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/es6/ui-react-dom-debug.js +1 -1
- package/lib/es6/ui-react-dom-debug.js.gz +0 -0
- package/lib/es6/ui-react.js +1 -1
- package/lib/es6/ui-react.js.gz +0 -0
- package/lib/mergeable-store.js +1 -1
- package/lib/mergeable-store.js.gz +0 -0
- package/lib/persisters/persister-automerge.js +1 -1
- package/lib/persisters/persister-automerge.js.gz +0 -0
- package/lib/persisters/persister-browser.js +1 -1
- package/lib/persisters/persister-browser.js.gz +0 -0
- package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-electric-sql.js +1 -1
- package/lib/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/persisters/persister-expo-sqlite.js +1 -1
- package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/persisters/persister-file.js +1 -1
- package/lib/persisters/persister-file.js.gz +0 -0
- package/lib/persisters/persister-indexed-db.js +1 -1
- package/lib/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/persisters/persister-libsql.js +1 -1
- package/lib/persisters/persister-libsql.js.gz +0 -0
- package/lib/persisters/persister-partykit-client.js +1 -1
- package/lib/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/persisters/persister-powersync.js +1 -1
- package/lib/persisters/persister-powersync.js.gz +0 -0
- package/lib/persisters/persister-remote.js +1 -1
- package/lib/persisters/persister-remote.js.gz +0 -0
- package/lib/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-sqlite3.js +1 -1
- package/lib/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/persisters/persister-yjs.js +1 -1
- package/lib/persisters/persister-yjs.js.gz +0 -0
- package/lib/persisters.js +1 -1
- package/lib/persisters.js.gz +0 -0
- package/lib/synchronizers/synchronizer-local.js +1 -1
- package/lib/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/synchronizers/synchronizer-ws-client.js +1 -1
- package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/synchronizers/synchronizer-ws-server.js +1 -1
- package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/synchronizers.js +1 -1
- package/lib/synchronizers.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/types/mergeable-store.d.ts +7 -1
- package/lib/types/persisters.d.ts +10 -14
- package/lib/types/synchronizers/synchronizer-ws-client.d.ts +10 -5
- package/lib/types/synchronizers/synchronizer-ws-server.d.ts +12 -0
- package/lib/types/synchronizers.d.ts +3 -2
- package/lib/types/ui-react.d.ts +151 -1
- package/lib/types/with-schemas/mergeable-store.d.ts +7 -0
- package/lib/types/with-schemas/persisters.d.ts +11 -23
- package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +15 -6
- package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +12 -0
- package/lib/types/with-schemas/synchronizers.d.ts +4 -4
- package/lib/types/with-schemas/ui-react.d.ts +169 -1
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- package/lib/umd/mergeable-store.js +1 -1
- package/lib/umd/mergeable-store.js.gz +0 -0
- package/lib/umd/persisters/persister-automerge.js +1 -1
- package/lib/umd/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd/persisters/persister-browser.js +1 -1
- package/lib/umd/persisters/persister-browser.js.gz +0 -0
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-electric-sql.js +1 -1
- package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
- package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd/persisters/persister-file.js +1 -1
- package/lib/umd/persisters/persister-file.js.gz +0 -0
- package/lib/umd/persisters/persister-indexed-db.js +1 -1
- package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/umd/persisters/persister-libsql.js +1 -1
- package/lib/umd/persisters/persister-libsql.js.gz +0 -0
- package/lib/umd/persisters/persister-partykit-client.js +1 -1
- package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd/persisters/persister-powersync.js +1 -1
- package/lib/umd/persisters/persister-powersync.js.gz +0 -0
- package/lib/umd/persisters/persister-remote.js +1 -1
- package/lib/umd/persisters/persister-remote.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite3.js +1 -1
- package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd/persisters/persister-yjs.js +1 -1
- package/lib/umd/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd/persisters.js +1 -1
- package/lib/umd/persisters.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-local.js +1 -1
- package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -1
- package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -1
- package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/umd/synchronizers.js +1 -1
- package/lib/umd/synchronizers.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/ui-react-dom-debug.js +1 -1
- package/lib/umd/ui-react-dom-debug.js.gz +0 -0
- package/lib/umd/ui-react.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- package/lib/umd-es6/mergeable-store.js +1 -1
- package/lib/umd-es6/mergeable-store.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-automerge.js +1 -1
- package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-browser.js +1 -1
- package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
- package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
- package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
- package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-file.js +1 -1
- package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
- package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-libsql.js +1 -1
- package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-powersync.js +1 -1
- package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-remote.js +1 -1
- package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
- package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-yjs.js +1 -1
- package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd-es6/persisters.js +1 -1
- package/lib/umd-es6/persisters.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -1
- package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -1
- package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
- package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -1
- package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
- package/lib/umd-es6/synchronizers.js +1 -1
- package/lib/umd-es6/synchronizers.js.gz +0 -0
- package/lib/umd-es6/tinybase.js +1 -1
- package/lib/umd-es6/tinybase.js.gz +0 -0
- package/lib/umd-es6/ui-react-dom-debug.js +1 -1
- package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
- package/lib/umd-es6/ui-react.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +1 -1
- package/readme.md +2 -2
|
@@ -76,6 +76,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
76
76
|
store.getTransactionChanges,
|
|
77
77
|
([changedTables, changedValues]) =>
|
|
78
78
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
79
|
+
store.setContent,
|
|
79
80
|
]
|
|
80
81
|
: [
|
|
81
82
|
1,
|
|
@@ -83,6 +84,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
83
84
|
store.getTransactionMergeableChanges,
|
|
84
85
|
([, [[, changedTables], [, changedValues]]]) =>
|
|
85
86
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
87
|
+
store.setDefaultContent,
|
|
86
88
|
];
|
|
87
89
|
const createCustomPersister = (
|
|
88
90
|
store,
|
|
@@ -103,8 +105,13 @@ const createCustomPersister = (
|
|
|
103
105
|
let autoSaveListenerId;
|
|
104
106
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
105
107
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
106
|
-
const [
|
|
107
|
-
|
|
108
|
+
const [
|
|
109
|
+
isMergeableStore,
|
|
110
|
+
getContent,
|
|
111
|
+
getChanges,
|
|
112
|
+
hasChanges,
|
|
113
|
+
setDefaultContent,
|
|
114
|
+
] = getStoreFunctions(supportsMergeableStore, store);
|
|
108
115
|
const run = async () => {
|
|
109
116
|
/* istanbul ignore else */
|
|
110
117
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -146,17 +153,19 @@ const createCustomPersister = (
|
|
|
146
153
|
: store.setContent)(contentOrChanges);
|
|
147
154
|
};
|
|
148
155
|
const persister = {
|
|
149
|
-
load: async (
|
|
156
|
+
load: async (initialContent) =>
|
|
150
157
|
await loadLock(async () => {
|
|
151
158
|
try {
|
|
152
159
|
setContentOrChanges(await getPersisted());
|
|
153
160
|
} catch (error) {
|
|
154
161
|
onIgnoredError?.(error);
|
|
155
|
-
|
|
162
|
+
if (initialContent) {
|
|
163
|
+
setDefaultContent(initialContent);
|
|
164
|
+
}
|
|
156
165
|
}
|
|
157
166
|
}),
|
|
158
|
-
startAutoLoad: async (
|
|
159
|
-
await persister.stopAutoLoad().load(
|
|
167
|
+
startAutoLoad: async (initialContent) => {
|
|
168
|
+
await persister.stopAutoLoad().load(initialContent);
|
|
160
169
|
autoLoadHandle = addPersisterListener(
|
|
161
170
|
async (getContent2, getChanges2) => {
|
|
162
171
|
const changes = getChanges2?.();
|
package/lib/debug/persisters.js
CHANGED
|
@@ -54,6 +54,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
54
54
|
store.getTransactionChanges,
|
|
55
55
|
([changedTables, changedValues]) =>
|
|
56
56
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
57
|
+
store.setContent,
|
|
57
58
|
]
|
|
58
59
|
: [
|
|
59
60
|
1,
|
|
@@ -61,6 +62,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
61
62
|
store.getTransactionMergeableChanges,
|
|
62
63
|
([, [[, changedTables], [, changedValues]]]) =>
|
|
63
64
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
65
|
+
store.setDefaultContent,
|
|
64
66
|
];
|
|
65
67
|
const createCustomPersister = (
|
|
66
68
|
store,
|
|
@@ -81,8 +83,13 @@ const createCustomPersister = (
|
|
|
81
83
|
let autoSaveListenerId;
|
|
82
84
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
83
85
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
84
|
-
const [
|
|
85
|
-
|
|
86
|
+
const [
|
|
87
|
+
isMergeableStore,
|
|
88
|
+
getContent,
|
|
89
|
+
getChanges,
|
|
90
|
+
hasChanges,
|
|
91
|
+
setDefaultContent,
|
|
92
|
+
] = getStoreFunctions(supportsMergeableStore, store);
|
|
86
93
|
const run = async () => {
|
|
87
94
|
/* istanbul ignore else */
|
|
88
95
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -124,17 +131,19 @@ const createCustomPersister = (
|
|
|
124
131
|
: store.setContent)(contentOrChanges);
|
|
125
132
|
};
|
|
126
133
|
const persister = {
|
|
127
|
-
load: async (
|
|
134
|
+
load: async (initialContent) =>
|
|
128
135
|
await loadLock(async () => {
|
|
129
136
|
try {
|
|
130
137
|
setContentOrChanges(await getPersisted());
|
|
131
138
|
} catch (error) {
|
|
132
139
|
onIgnoredError?.(error);
|
|
133
|
-
|
|
140
|
+
if (initialContent) {
|
|
141
|
+
setDefaultContent(initialContent);
|
|
142
|
+
}
|
|
134
143
|
}
|
|
135
144
|
}),
|
|
136
|
-
startAutoLoad: async (
|
|
137
|
-
await persister.stopAutoLoad().load(
|
|
145
|
+
startAutoLoad: async (initialContent) => {
|
|
146
|
+
await persister.stopAutoLoad().load(initialContent);
|
|
138
147
|
autoLoadHandle = addPersisterListener(
|
|
139
148
|
async (getContent2, getChanges2) => {
|
|
140
149
|
const changes = getChanges2?.();
|
|
@@ -62,6 +62,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
62
62
|
store.getTransactionChanges,
|
|
63
63
|
([changedTables, changedValues]) =>
|
|
64
64
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
65
|
+
store.setContent,
|
|
65
66
|
]
|
|
66
67
|
: [
|
|
67
68
|
1,
|
|
@@ -69,6 +70,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
69
70
|
store.getTransactionMergeableChanges,
|
|
70
71
|
([, [[, changedTables], [, changedValues]]]) =>
|
|
71
72
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
73
|
+
store.setDefaultContent,
|
|
72
74
|
];
|
|
73
75
|
const createCustomPersister = (
|
|
74
76
|
store,
|
|
@@ -89,8 +91,13 @@ const createCustomPersister = (
|
|
|
89
91
|
let autoSaveListenerId;
|
|
90
92
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
91
93
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
92
|
-
const [
|
|
93
|
-
|
|
94
|
+
const [
|
|
95
|
+
isMergeableStore,
|
|
96
|
+
getContent,
|
|
97
|
+
getChanges,
|
|
98
|
+
hasChanges,
|
|
99
|
+
setDefaultContent,
|
|
100
|
+
] = getStoreFunctions(supportsMergeableStore, store);
|
|
94
101
|
const run = async () => {
|
|
95
102
|
/* istanbul ignore else */
|
|
96
103
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -132,17 +139,19 @@ const createCustomPersister = (
|
|
|
132
139
|
: store.setContent)(contentOrChanges);
|
|
133
140
|
};
|
|
134
141
|
const persister = {
|
|
135
|
-
load: async (
|
|
142
|
+
load: async (initialContent) =>
|
|
136
143
|
await loadLock(async () => {
|
|
137
144
|
try {
|
|
138
145
|
setContentOrChanges(await getPersisted());
|
|
139
146
|
} catch (error) {
|
|
140
147
|
onIgnoredError?.(error);
|
|
141
|
-
|
|
148
|
+
if (initialContent) {
|
|
149
|
+
setDefaultContent(initialContent);
|
|
150
|
+
}
|
|
142
151
|
}
|
|
143
152
|
}),
|
|
144
|
-
startAutoLoad: async (
|
|
145
|
-
await persister.stopAutoLoad().load(
|
|
153
|
+
startAutoLoad: async (initialContent) => {
|
|
154
|
+
await persister.stopAutoLoad().load(initialContent);
|
|
146
155
|
autoLoadHandle = addPersisterListener(
|
|
147
156
|
async (getContent2, getChanges2) => {
|
|
148
157
|
const changes = getChanges2?.();
|
|
@@ -310,9 +319,10 @@ const createCustomSynchronizer = (
|
|
|
310
319
|
store,
|
|
311
320
|
send,
|
|
312
321
|
onReceive,
|
|
313
|
-
|
|
314
|
-
requestTimeoutSeconds
|
|
322
|
+
destroyImpl,
|
|
323
|
+
requestTimeoutSeconds,
|
|
315
324
|
onIgnoredError,
|
|
325
|
+
extra = {},
|
|
316
326
|
) => {
|
|
317
327
|
let persisterListener;
|
|
318
328
|
let sends = 0;
|
|
@@ -444,6 +454,14 @@ const createCustomSynchronizer = (
|
|
|
444
454
|
};
|
|
445
455
|
const addPersisterListener = (listener) => (persisterListener = listener);
|
|
446
456
|
const delPersisterListener = () => (persisterListener = void 0);
|
|
457
|
+
const startSync = async (initialContent) =>
|
|
458
|
+
await (await persister.startAutoLoad(initialContent)).startAutoSave();
|
|
459
|
+
const stopSync = () => persister.stopAutoLoad().stopAutoSave();
|
|
460
|
+
const destroy = () => {
|
|
461
|
+
destroyImpl();
|
|
462
|
+
return persister.stopSync();
|
|
463
|
+
};
|
|
464
|
+
const getSynchronizerStats = () => ({sends, receives});
|
|
447
465
|
const persister = createCustomPersister(
|
|
448
466
|
store,
|
|
449
467
|
getPersisted,
|
|
@@ -452,16 +470,7 @@ const createCustomSynchronizer = (
|
|
|
452
470
|
delPersisterListener,
|
|
453
471
|
onIgnoredError,
|
|
454
472
|
true,
|
|
455
|
-
{
|
|
456
|
-
startSync: async () =>
|
|
457
|
-
await (await persister.startAutoLoad()).startAutoSave(),
|
|
458
|
-
stopSync: () => persister.stopAutoLoad().stopAutoSave(),
|
|
459
|
-
destroy: () => {
|
|
460
|
-
destroy();
|
|
461
|
-
return persister.stopSync();
|
|
462
|
-
},
|
|
463
|
-
getSynchronizerStats: () => ({sends, receives}),
|
|
464
|
-
},
|
|
473
|
+
{startSync, stopSync, destroy, getSynchronizerStats, ...extra},
|
|
465
474
|
);
|
|
466
475
|
return persister;
|
|
467
476
|
};
|
|
@@ -70,6 +70,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
70
70
|
store.getTransactionChanges,
|
|
71
71
|
([changedTables, changedValues]) =>
|
|
72
72
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
73
|
+
store.setContent,
|
|
73
74
|
]
|
|
74
75
|
: [
|
|
75
76
|
1,
|
|
@@ -77,6 +78,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
77
78
|
store.getTransactionMergeableChanges,
|
|
78
79
|
([, [[, changedTables], [, changedValues]]]) =>
|
|
79
80
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
81
|
+
store.setDefaultContent,
|
|
80
82
|
];
|
|
81
83
|
const createCustomPersister = (
|
|
82
84
|
store,
|
|
@@ -97,8 +99,13 @@ const createCustomPersister = (
|
|
|
97
99
|
let autoSaveListenerId;
|
|
98
100
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
99
101
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
100
|
-
const [
|
|
101
|
-
|
|
102
|
+
const [
|
|
103
|
+
isMergeableStore,
|
|
104
|
+
getContent,
|
|
105
|
+
getChanges,
|
|
106
|
+
hasChanges,
|
|
107
|
+
setDefaultContent,
|
|
108
|
+
] = getStoreFunctions(supportsMergeableStore, store);
|
|
102
109
|
const run = async () => {
|
|
103
110
|
/* istanbul ignore else */
|
|
104
111
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -140,17 +147,19 @@ const createCustomPersister = (
|
|
|
140
147
|
: store.setContent)(contentOrChanges);
|
|
141
148
|
};
|
|
142
149
|
const persister = {
|
|
143
|
-
load: async (
|
|
150
|
+
load: async (initialContent) =>
|
|
144
151
|
await loadLock(async () => {
|
|
145
152
|
try {
|
|
146
153
|
setContentOrChanges(await getPersisted());
|
|
147
154
|
} catch (error) {
|
|
148
155
|
onIgnoredError?.(error);
|
|
149
|
-
|
|
156
|
+
if (initialContent) {
|
|
157
|
+
setDefaultContent(initialContent);
|
|
158
|
+
}
|
|
150
159
|
}
|
|
151
160
|
}),
|
|
152
|
-
startAutoLoad: async (
|
|
153
|
-
await persister.stopAutoLoad().load(
|
|
161
|
+
startAutoLoad: async (initialContent) => {
|
|
162
|
+
await persister.stopAutoLoad().load(initialContent);
|
|
154
163
|
autoLoadHandle = addPersisterListener(
|
|
155
164
|
async (getContent2, getChanges2) => {
|
|
156
165
|
const changes = getChanges2?.();
|
|
@@ -318,9 +327,10 @@ const createCustomSynchronizer = (
|
|
|
318
327
|
store,
|
|
319
328
|
send,
|
|
320
329
|
onReceive,
|
|
321
|
-
|
|
322
|
-
requestTimeoutSeconds
|
|
330
|
+
destroyImpl,
|
|
331
|
+
requestTimeoutSeconds,
|
|
323
332
|
onIgnoredError,
|
|
333
|
+
extra = {},
|
|
324
334
|
) => {
|
|
325
335
|
let persisterListener;
|
|
326
336
|
let sends = 0;
|
|
@@ -452,6 +462,14 @@ const createCustomSynchronizer = (
|
|
|
452
462
|
};
|
|
453
463
|
const addPersisterListener = (listener) => (persisterListener = listener);
|
|
454
464
|
const delPersisterListener = () => (persisterListener = void 0);
|
|
465
|
+
const startSync = async (initialContent) =>
|
|
466
|
+
await (await persister.startAutoLoad(initialContent)).startAutoSave();
|
|
467
|
+
const stopSync = () => persister.stopAutoLoad().stopAutoSave();
|
|
468
|
+
const destroy = () => {
|
|
469
|
+
destroyImpl();
|
|
470
|
+
return persister.stopSync();
|
|
471
|
+
};
|
|
472
|
+
const getSynchronizerStats = () => ({sends, receives});
|
|
455
473
|
const persister = createCustomPersister(
|
|
456
474
|
store,
|
|
457
475
|
getPersisted,
|
|
@@ -460,16 +478,7 @@ const createCustomSynchronizer = (
|
|
|
460
478
|
delPersisterListener,
|
|
461
479
|
onIgnoredError,
|
|
462
480
|
true,
|
|
463
|
-
{
|
|
464
|
-
startSync: async () =>
|
|
465
|
-
await (await persister.startAutoLoad()).startAutoSave(),
|
|
466
|
-
stopSync: () => persister.stopAutoLoad().stopAutoSave(),
|
|
467
|
-
destroy: () => {
|
|
468
|
-
destroy();
|
|
469
|
-
return persister.stopSync();
|
|
470
|
-
},
|
|
471
|
-
getSynchronizerStats: () => ({sends, receives}),
|
|
472
|
-
},
|
|
481
|
+
{startSync, stopSync, destroy, getSynchronizerStats, ...extra},
|
|
473
482
|
);
|
|
474
483
|
return persister;
|
|
475
484
|
};
|
|
@@ -477,22 +486,12 @@ const createCustomSynchronizer = (
|
|
|
477
486
|
const createWsSynchronizer = async (
|
|
478
487
|
store,
|
|
479
488
|
webSocket,
|
|
480
|
-
requestTimeoutSeconds,
|
|
489
|
+
requestTimeoutSeconds = 1,
|
|
481
490
|
onIgnoredError,
|
|
482
491
|
) => {
|
|
483
492
|
let currentReceive;
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
const payload = data.toString(UTF8);
|
|
487
|
-
const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
|
|
488
|
-
if (splitAt !== -1) {
|
|
489
|
-
currentReceive(
|
|
490
|
-
slice(payload, 0, splitAt),
|
|
491
|
-
...jsonParse(slice(payload, splitAt + 1)),
|
|
492
|
-
);
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
});
|
|
493
|
+
const addEventListener = (event, handler) =>
|
|
494
|
+
webSocket.addEventListener(event, handler);
|
|
496
495
|
const onReceive = (receive) => {
|
|
497
496
|
currentReceive = receive;
|
|
498
497
|
};
|
|
@@ -511,11 +510,24 @@ const createWsSynchronizer = async (
|
|
|
511
510
|
destroy,
|
|
512
511
|
requestTimeoutSeconds,
|
|
513
512
|
onIgnoredError,
|
|
513
|
+
{getWebSocket: () => webSocket},
|
|
514
514
|
);
|
|
515
|
+
addEventListener('message', ({data}) => {
|
|
516
|
+
if (!isUndefined(currentReceive)) {
|
|
517
|
+
const payload = data.toString(UTF8);
|
|
518
|
+
const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
|
|
519
|
+
if (splitAt !== -1) {
|
|
520
|
+
currentReceive(
|
|
521
|
+
slice(data, 0, splitAt),
|
|
522
|
+
...jsonParse(slice(data, splitAt + 1)),
|
|
523
|
+
);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
});
|
|
515
527
|
return promiseNew((resolve, reject) => {
|
|
516
528
|
if (webSocket.readyState != webSocket.OPEN) {
|
|
517
|
-
|
|
518
|
-
|
|
529
|
+
addEventListener('error', reject);
|
|
530
|
+
addEventListener('open', () => resolve(synchronizer));
|
|
519
531
|
} else {
|
|
520
532
|
resolve(synchronizer);
|
|
521
533
|
}
|
|
@@ -2,54 +2,93 @@ const EMPTY_STRING = '';
|
|
|
2
2
|
const UTF8 = 'utf8';
|
|
3
3
|
|
|
4
4
|
const isUndefined = (thing) => thing == void 0;
|
|
5
|
+
const ifNotUndefined = (value, then, otherwise) =>
|
|
6
|
+
isUndefined(value) ? otherwise?.() : then(value);
|
|
5
7
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
6
8
|
|
|
9
|
+
const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
|
|
10
|
+
|
|
11
|
+
const collSizeN = (collSizer) => (coll) =>
|
|
12
|
+
arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
|
|
13
|
+
const collSize = (coll) => coll?.size ?? 0;
|
|
14
|
+
const collSize2 = collSizeN(collSize);
|
|
15
|
+
const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
|
|
16
|
+
const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
17
|
+
const collValues = (coll) => [...(coll?.values() ?? [])];
|
|
7
18
|
const collClear = (coll) => coll.clear();
|
|
8
19
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
9
20
|
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
10
21
|
|
|
11
22
|
const mapNew = (entries) => new Map(entries);
|
|
23
|
+
const mapKeys = (map) => [...(map?.keys() ?? [])];
|
|
12
24
|
const mapGet = (map, key) => map?.get(key);
|
|
13
25
|
const mapForEach = (map, cb) =>
|
|
14
26
|
collForEach(map, (value, key) => cb(key, value));
|
|
15
27
|
const mapSet = (map, key, value) =>
|
|
16
28
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
29
|
+
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
30
|
+
if (!collHas(map, key)) {
|
|
31
|
+
mapSet(map, key, getDefaultValue());
|
|
32
|
+
} else {
|
|
33
|
+
hadExistingValue?.(mapGet(map, key));
|
|
34
|
+
}
|
|
35
|
+
return mapGet(map, key);
|
|
36
|
+
};
|
|
17
37
|
|
|
18
38
|
const MESSAGE_SEPARATOR = '\n';
|
|
19
39
|
|
|
40
|
+
const PATH_REGEX = /\/([^?]*)/;
|
|
20
41
|
const createWsServer = (webSocketServer) => {
|
|
21
|
-
const
|
|
22
|
-
webSocketServer.on('connection', (webSocket, request) =>
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
const clientsByPath = mapNew();
|
|
43
|
+
webSocketServer.on('connection', (webSocket, request) =>
|
|
44
|
+
ifNotUndefined(request.url?.match(PATH_REGEX), ([path]) =>
|
|
45
|
+
ifNotUndefined(request.headers['sec-websocket-key'], (clientId) => {
|
|
46
|
+
const clients = mapEnsure(clientsByPath, path, mapNew);
|
|
47
|
+
mapSet(clients, clientId, webSocket);
|
|
48
|
+
webSocket.on('message', (data) => {
|
|
49
|
+
const payload = data.toString(UTF8);
|
|
50
|
+
const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
|
|
51
|
+
if (splitAt !== -1) {
|
|
52
|
+
const toClientId = slice(payload, 0, splitAt);
|
|
53
|
+
const message = slice(payload, splitAt + 1);
|
|
54
|
+
toClientId === EMPTY_STRING
|
|
55
|
+
? mapForEach(clients, (otherClientId, otherWebSocket) =>
|
|
56
|
+
otherClientId != clientId
|
|
57
|
+
? otherWebSocket.send(
|
|
58
|
+
clientId + MESSAGE_SEPARATOR + message,
|
|
59
|
+
)
|
|
60
|
+
: 0,
|
|
61
|
+
)
|
|
62
|
+
: mapGet(clients, toClientId)?.send(
|
|
63
|
+
clientId + MESSAGE_SEPARATOR + message,
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
webSocket.on('close', () => {
|
|
68
|
+
collDel(clients, clientId);
|
|
69
|
+
if (collIsEmpty(clients)) {
|
|
70
|
+
collDel(clientsByPath, path);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}),
|
|
74
|
+
),
|
|
75
|
+
);
|
|
46
76
|
const getWebSocketServer = () => webSocketServer;
|
|
77
|
+
const getPaths = () => mapKeys(clientsByPath);
|
|
78
|
+
const getClientIds = (path) => mapKeys(mapGet(clientsByPath, path));
|
|
79
|
+
const getStats = () => ({
|
|
80
|
+
paths: collSize(clientsByPath),
|
|
81
|
+
clients: collSize2(clientsByPath),
|
|
82
|
+
});
|
|
47
83
|
const destroy = () => {
|
|
48
84
|
webSocketServer.close();
|
|
49
|
-
collClear(
|
|
85
|
+
collClear(clientsByPath);
|
|
50
86
|
};
|
|
51
87
|
return {
|
|
52
88
|
getWebSocketServer,
|
|
89
|
+
getPaths,
|
|
90
|
+
getClientIds,
|
|
91
|
+
getStats,
|
|
53
92
|
destroy,
|
|
54
93
|
};
|
|
55
94
|
};
|
|
@@ -59,6 +59,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
59
59
|
store.getTransactionChanges,
|
|
60
60
|
([changedTables, changedValues]) =>
|
|
61
61
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
62
|
+
store.setContent,
|
|
62
63
|
]
|
|
63
64
|
: [
|
|
64
65
|
1,
|
|
@@ -66,6 +67,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
|
|
|
66
67
|
store.getTransactionMergeableChanges,
|
|
67
68
|
([, [[, changedTables], [, changedValues]]]) =>
|
|
68
69
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
70
|
+
store.setDefaultContent,
|
|
69
71
|
];
|
|
70
72
|
const createCustomPersister = (
|
|
71
73
|
store,
|
|
@@ -86,8 +88,13 @@ const createCustomPersister = (
|
|
|
86
88
|
let autoSaveListenerId;
|
|
87
89
|
mapEnsure(scheduleRunning, scheduleId, () => 0);
|
|
88
90
|
mapEnsure(scheduleActions, scheduleId, () => []);
|
|
89
|
-
const [
|
|
90
|
-
|
|
91
|
+
const [
|
|
92
|
+
isMergeableStore,
|
|
93
|
+
getContent,
|
|
94
|
+
getChanges,
|
|
95
|
+
hasChanges,
|
|
96
|
+
setDefaultContent,
|
|
97
|
+
] = getStoreFunctions(supportsMergeableStore, store);
|
|
91
98
|
const run = async () => {
|
|
92
99
|
/* istanbul ignore else */
|
|
93
100
|
if (!mapGet(scheduleRunning, scheduleId)) {
|
|
@@ -129,17 +136,19 @@ const createCustomPersister = (
|
|
|
129
136
|
: store.setContent)(contentOrChanges);
|
|
130
137
|
};
|
|
131
138
|
const persister = {
|
|
132
|
-
load: async (
|
|
139
|
+
load: async (initialContent) =>
|
|
133
140
|
await loadLock(async () => {
|
|
134
141
|
try {
|
|
135
142
|
setContentOrChanges(await getPersisted());
|
|
136
143
|
} catch (error) {
|
|
137
144
|
onIgnoredError?.(error);
|
|
138
|
-
|
|
145
|
+
if (initialContent) {
|
|
146
|
+
setDefaultContent(initialContent);
|
|
147
|
+
}
|
|
139
148
|
}
|
|
140
149
|
}),
|
|
141
|
-
startAutoLoad: async (
|
|
142
|
-
await persister.stopAutoLoad().load(
|
|
150
|
+
startAutoLoad: async (initialContent) => {
|
|
151
|
+
await persister.stopAutoLoad().load(initialContent);
|
|
143
152
|
autoLoadHandle = addPersisterListener(
|
|
144
153
|
async (getContent2, getChanges2) => {
|
|
145
154
|
const changes = getChanges2?.();
|
|
@@ -307,9 +316,10 @@ const createCustomSynchronizer = (
|
|
|
307
316
|
store,
|
|
308
317
|
send,
|
|
309
318
|
onReceive,
|
|
310
|
-
|
|
311
|
-
requestTimeoutSeconds
|
|
319
|
+
destroyImpl,
|
|
320
|
+
requestTimeoutSeconds,
|
|
312
321
|
onIgnoredError,
|
|
322
|
+
extra = {},
|
|
313
323
|
) => {
|
|
314
324
|
let persisterListener;
|
|
315
325
|
let sends = 0;
|
|
@@ -441,6 +451,14 @@ const createCustomSynchronizer = (
|
|
|
441
451
|
};
|
|
442
452
|
const addPersisterListener = (listener) => (persisterListener = listener);
|
|
443
453
|
const delPersisterListener = () => (persisterListener = void 0);
|
|
454
|
+
const startSync = async (initialContent) =>
|
|
455
|
+
await (await persister.startAutoLoad(initialContent)).startAutoSave();
|
|
456
|
+
const stopSync = () => persister.stopAutoLoad().stopAutoSave();
|
|
457
|
+
const destroy = () => {
|
|
458
|
+
destroyImpl();
|
|
459
|
+
return persister.stopSync();
|
|
460
|
+
};
|
|
461
|
+
const getSynchronizerStats = () => ({sends, receives});
|
|
444
462
|
const persister = createCustomPersister(
|
|
445
463
|
store,
|
|
446
464
|
getPersisted,
|
|
@@ -449,16 +467,7 @@ const createCustomSynchronizer = (
|
|
|
449
467
|
delPersisterListener,
|
|
450
468
|
onIgnoredError,
|
|
451
469
|
true,
|
|
452
|
-
{
|
|
453
|
-
startSync: async () =>
|
|
454
|
-
await (await persister.startAutoLoad()).startAutoSave(),
|
|
455
|
-
stopSync: () => persister.stopAutoLoad().stopAutoSave(),
|
|
456
|
-
destroy: () => {
|
|
457
|
-
destroy();
|
|
458
|
-
return persister.stopSync();
|
|
459
|
-
},
|
|
460
|
-
getSynchronizerStats: () => ({sends, receives}),
|
|
461
|
-
},
|
|
470
|
+
{startSync, stopSync, destroy, getSynchronizerStats, ...extra},
|
|
462
471
|
);
|
|
463
472
|
return persister;
|
|
464
473
|
};
|