tinybase 5.0.0-beta.1 → 5.0.0-beta.3
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 -0
- 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-partykit-client.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
- package/lib/cjs/persisters/persister-partykit-server.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/store.cjs +1 -1
- package/lib/cjs/store.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs/tools.cjs +1 -1
- package/lib/cjs/tools.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-dom.cjs +1 -1
- package/lib/cjs/ui-react-dom.cjs.gz +0 -0
- package/lib/cjs-es6/mergeable-store.cjs +1 -0
- 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-partykit-client.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
- package/lib/cjs-es6/persisters/persister-partykit-server.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/store.cjs +1 -1
- package/lib/cjs-es6/store.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/tools.cjs +1 -1
- package/lib/cjs-es6/tools.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-dom.cjs +1 -1
- package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
- package/lib/debug/mergeable-store.js +1863 -0
- package/lib/debug/persisters/persister-automerge.js +54 -53
- package/lib/debug/persisters/persister-browser.js +28 -18
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +80 -57
- package/lib/debug/persisters/persister-electric-sql.js +80 -57
- package/lib/debug/persisters/persister-expo-sqlite-next.js +80 -57
- package/lib/debug/persisters/persister-expo-sqlite.js +80 -57
- package/lib/debug/persisters/persister-file.js +27 -18
- package/lib/debug/persisters/persister-indexed-db.js +34 -23
- package/lib/debug/persisters/persister-partykit-client.js +26 -23
- package/lib/debug/persisters/persister-partykit-server.js +11 -21
- package/lib/debug/persisters/persister-remote.js +28 -18
- package/lib/debug/persisters/persister-sqlite-wasm.js +80 -57
- package/lib/debug/persisters/persister-sqlite3.js +80 -57
- package/lib/debug/persisters/persister-yjs.js +50 -48
- package/lib/debug/persisters.js +27 -18
- package/lib/debug/queries.js +2 -2
- package/lib/debug/store.js +63 -71
- package/lib/debug/tinybase.js +354 -90
- package/lib/debug/tools.js +13 -15
- package/lib/debug/ui-react-dom.js +115 -119
- package/lib/es6/mergeable-store.js +1 -0
- 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-partykit-client.js +1 -1
- package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/es6/persisters/persister-partykit-server.js +1 -1
- package/lib/es6/persisters/persister-partykit-server.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/store.js +1 -1
- package/lib/es6/store.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/es6/tools.js +1 -1
- package/lib/es6/tools.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-dom.js +1 -1
- package/lib/es6/ui-react-dom.js.gz +0 -0
- package/lib/mergeable-store.js +1 -0
- 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-partykit-client.js +1 -1
- package/lib/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/persisters/persister-partykit-server.js +1 -1
- package/lib/persisters/persister-partykit-server.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/store.js +1 -1
- package/lib/store.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/tools.js +1 -1
- package/lib/tools.js.gz +0 -0
- package/lib/types/mergeable-store.d.ts +79 -0
- package/lib/types/persisters/persister-automerge.d.ts +8 -7
- package/lib/types/persisters/persister-browser.d.ts +2 -0
- package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +1 -0
- package/lib/types/persisters/persister-electric-sql.d.ts +1 -0
- package/lib/types/persisters/persister-expo-sqlite-next.d.ts +1 -0
- package/lib/types/persisters/persister-expo-sqlite.d.ts +1 -0
- package/lib/types/persisters/persister-file.d.ts +1 -0
- package/lib/types/persisters/persister-indexed-db.d.ts +1 -0
- package/lib/types/persisters/persister-partykit-client.d.ts +1 -0
- package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
- package/lib/types/persisters/persister-remote.d.ts +1 -0
- package/lib/types/persisters/persister-sqlite-wasm.d.ts +1 -0
- package/lib/types/persisters/persister-sqlite3.d.ts +1 -0
- package/lib/types/persisters/persister-yjs.d.ts +1 -0
- package/lib/types/persisters.d.ts +50 -30
- package/lib/types/store.d.ts +241 -186
- package/lib/types/tinybase.d.ts +1 -0
- package/lib/types/tools.d.ts +2 -2
- package/lib/types/ui-react.d.ts +1 -0
- package/lib/types/with-schemas/internal/store.d.ts +4 -0
- package/lib/types/with-schemas/mergeable-store.d.ts +112 -0
- package/lib/types/with-schemas/persisters/persister-automerge.d.ts +8 -7
- package/lib/types/with-schemas/persisters/persister-browser.d.ts +2 -0
- package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-file.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
- package/lib/types/with-schemas/persisters/persister-remote.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +1 -0
- package/lib/types/with-schemas/persisters/persister-yjs.d.ts +1 -0
- package/lib/types/with-schemas/persisters.d.ts +81 -45
- package/lib/types/with-schemas/store.d.ts +364 -273
- package/lib/types/with-schemas/tinybase.d.ts +1 -0
- package/lib/types/with-schemas/tools.d.ts +2 -2
- package/lib/ui-react-dom.js +1 -1
- package/lib/ui-react-dom.js.gz +0 -0
- package/lib/umd/mergeable-store.js +1 -0
- 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-partykit-client.js +1 -1
- package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd/persisters/persister-partykit-server.js +1 -1
- package/lib/umd/persisters/persister-partykit-server.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/store.js +1 -1
- package/lib/umd/store.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/tools.js +1 -1
- package/lib/umd/tools.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-dom.js +1 -1
- package/lib/umd/ui-react-dom.js.gz +0 -0
- package/lib/umd-es6/mergeable-store.js +1 -0
- 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-partykit-client.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
- package/lib/umd-es6/persisters/persister-partykit-server.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/store.js +1 -1
- package/lib/umd-es6/store.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/tools.js +1 -1
- package/lib/umd-es6/tools.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-dom.js +1 -1
- package/lib/umd-es6/ui-react-dom.js.gz +0 -0
- package/package.json +39 -35
- package/readme.md +2 -2
package/lib/debug/store.js
CHANGED
|
@@ -63,13 +63,12 @@ const isObject = (obj) =>
|
|
|
63
63
|
/* istanbul ignore next */
|
|
64
64
|
() => true,
|
|
65
65
|
);
|
|
66
|
-
const
|
|
67
|
-
const objHas = (obj, id) => !isUndefined(objGet(obj, id));
|
|
66
|
+
const objHas = (obj, id) => id in obj;
|
|
68
67
|
const objDel = (obj, id) => {
|
|
69
68
|
delete obj[id];
|
|
70
69
|
return obj;
|
|
71
70
|
};
|
|
72
|
-
const
|
|
71
|
+
const objToArray = (obj, cb) =>
|
|
73
72
|
arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
|
|
74
73
|
const objSize = (obj) => size(objIds(obj));
|
|
75
74
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
@@ -103,7 +102,7 @@ const mapEnsure = (map, key, getDefaultValue) => {
|
|
|
103
102
|
return mapGet(map, key);
|
|
104
103
|
};
|
|
105
104
|
const mapMatch = (map, obj, set, del = mapSet) => {
|
|
106
|
-
|
|
105
|
+
objToArray(obj, (value, id) => set(map, id, value));
|
|
107
106
|
mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
|
|
108
107
|
return map;
|
|
109
108
|
};
|
|
@@ -281,7 +280,7 @@ const validate = (obj, validateChild, onInvalidObj) => {
|
|
|
281
280
|
onInvalidObj?.();
|
|
282
281
|
return false;
|
|
283
282
|
}
|
|
284
|
-
|
|
283
|
+
objToArray(obj, (child, id2) => {
|
|
285
284
|
if (!validateChild(child, id2)) {
|
|
286
285
|
objDel(obj, id2);
|
|
287
286
|
}
|
|
@@ -302,6 +301,7 @@ const createStore = () => {
|
|
|
302
301
|
let hadTables = false;
|
|
303
302
|
let hadValues = false;
|
|
304
303
|
let transactions = 0;
|
|
304
|
+
let postTransactionListener;
|
|
305
305
|
const changedTableIds = mapNew();
|
|
306
306
|
const changedTableCellIds = mapNew();
|
|
307
307
|
const changedRowCount = mapNew();
|
|
@@ -943,44 +943,6 @@ const createStore = () => {
|
|
|
943
943
|
transaction(() => actions(...arrayMap(args, id)));
|
|
944
944
|
return store;
|
|
945
945
|
};
|
|
946
|
-
const getTransactionChanges = () => [
|
|
947
|
-
mapToObj(
|
|
948
|
-
changedCells,
|
|
949
|
-
(table, tableId) =>
|
|
950
|
-
mapGet(changedTableIds, tableId) === -1
|
|
951
|
-
? null
|
|
952
|
-
: mapToObj(
|
|
953
|
-
table,
|
|
954
|
-
(row, rowId) =>
|
|
955
|
-
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
956
|
-
? null
|
|
957
|
-
: mapToObj(
|
|
958
|
-
row,
|
|
959
|
-
([, newCell]) => newCell ?? null,
|
|
960
|
-
(_, changedCell) => pairIsEqual(changedCell),
|
|
961
|
-
),
|
|
962
|
-
objIsEmpty,
|
|
963
|
-
),
|
|
964
|
-
objIsEmpty,
|
|
965
|
-
),
|
|
966
|
-
mapToObj(
|
|
967
|
-
changedValues,
|
|
968
|
-
([, newValue]) => newValue ?? null,
|
|
969
|
-
(_, changedValue) => pairIsEqual(changedValue),
|
|
970
|
-
),
|
|
971
|
-
];
|
|
972
|
-
const getTransactionLog = () => ({
|
|
973
|
-
cellsTouched,
|
|
974
|
-
valuesTouched,
|
|
975
|
-
changedCells: mapToObj3(changedCells, pairClone, pairIsEqual),
|
|
976
|
-
invalidCells: mapToObj3(invalidCells),
|
|
977
|
-
changedValues: mapToObj(changedValues, pairClone, pairIsEqual),
|
|
978
|
-
invalidValues: mapToObj(invalidValues),
|
|
979
|
-
changedTableIds: mapToObj(changedTableIds),
|
|
980
|
-
changedRowIds: mapToObj2(changedRowIds),
|
|
981
|
-
changedCellIds: mapToObj3(changedCellIds),
|
|
982
|
-
changedValueIds: mapToObj(changedValueIds),
|
|
983
|
-
});
|
|
984
946
|
const getContent = () => [getTables(), getValues()];
|
|
985
947
|
const getTables = () => mapToObj3(tablesMap);
|
|
986
948
|
const getTableIds = () => mapKeys(tablesMap);
|
|
@@ -1073,7 +1035,7 @@ const createStore = () => {
|
|
|
1073
1035
|
(tableId2, rowId2) => {
|
|
1074
1036
|
if (validateRow(tableId2, rowId2, partialRow, 1)) {
|
|
1075
1037
|
const table = getOrCreateTable(tableId2);
|
|
1076
|
-
|
|
1038
|
+
objToArray(partialRow, (cell, cellId) =>
|
|
1077
1039
|
setCellIntoDefaultRow(tableId2, table, rowId2, cellId, cell),
|
|
1078
1040
|
);
|
|
1079
1041
|
}
|
|
@@ -1111,7 +1073,7 @@ const createStore = () => {
|
|
|
1111
1073
|
const setPartialValues = (partialValues) =>
|
|
1112
1074
|
fluentTransaction(() =>
|
|
1113
1075
|
validateValues(partialValues, 1)
|
|
1114
|
-
?
|
|
1076
|
+
? objToArray(partialValues, (value, valueId) =>
|
|
1115
1077
|
setValidValue(valueId, value),
|
|
1116
1078
|
)
|
|
1117
1079
|
: 0,
|
|
@@ -1128,20 +1090,20 @@ const createStore = () => {
|
|
|
1128
1090
|
),
|
|
1129
1091
|
valueId,
|
|
1130
1092
|
);
|
|
1131
|
-
const
|
|
1093
|
+
const applyChanges = (changes) =>
|
|
1132
1094
|
fluentTransaction(() => {
|
|
1133
|
-
|
|
1095
|
+
objToArray(changes[0], (table, tableId) =>
|
|
1134
1096
|
isUndefined(table)
|
|
1135
1097
|
? delTable(tableId)
|
|
1136
|
-
:
|
|
1098
|
+
: objToArray(table, (row, rowId) =>
|
|
1137
1099
|
isUndefined(row)
|
|
1138
1100
|
? delRow(tableId, rowId)
|
|
1139
|
-
:
|
|
1101
|
+
: objToArray(row, (cell, cellId) =>
|
|
1140
1102
|
setOrDelCell(store, tableId, rowId, cellId, cell),
|
|
1141
1103
|
),
|
|
1142
1104
|
),
|
|
1143
1105
|
);
|
|
1144
|
-
|
|
1106
|
+
objToArray(changes[1], (value, valueId) =>
|
|
1145
1107
|
setOrDelValue(store, valueId, value),
|
|
1146
1108
|
);
|
|
1147
1109
|
});
|
|
@@ -1268,15 +1230,48 @@ const createStore = () => {
|
|
|
1268
1230
|
transactions++;
|
|
1269
1231
|
}
|
|
1270
1232
|
if (transactions == 1) {
|
|
1271
|
-
callListeners(
|
|
1272
|
-
startTransactionListeners,
|
|
1273
|
-
void 0,
|
|
1274
|
-
getTransactionChanges,
|
|
1275
|
-
getTransactionLog,
|
|
1276
|
-
);
|
|
1233
|
+
callListeners(startTransactionListeners, void 0);
|
|
1277
1234
|
}
|
|
1278
1235
|
return store;
|
|
1279
1236
|
};
|
|
1237
|
+
const getTransactionChanges = () => [
|
|
1238
|
+
mapToObj(
|
|
1239
|
+
changedCells,
|
|
1240
|
+
(table, tableId) =>
|
|
1241
|
+
mapGet(changedTableIds, tableId) === -1
|
|
1242
|
+
? void 0
|
|
1243
|
+
: mapToObj(
|
|
1244
|
+
table,
|
|
1245
|
+
(row, rowId) =>
|
|
1246
|
+
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1247
|
+
? void 0
|
|
1248
|
+
: mapToObj(
|
|
1249
|
+
row,
|
|
1250
|
+
([, newCell]) => newCell,
|
|
1251
|
+
(_, changedCell) => pairIsEqual(changedCell),
|
|
1252
|
+
),
|
|
1253
|
+
objIsEmpty,
|
|
1254
|
+
),
|
|
1255
|
+
objIsEmpty,
|
|
1256
|
+
),
|
|
1257
|
+
mapToObj(
|
|
1258
|
+
changedValues,
|
|
1259
|
+
([, newValue]) => newValue,
|
|
1260
|
+
(_, changedValue) => pairIsEqual(changedValue),
|
|
1261
|
+
),
|
|
1262
|
+
];
|
|
1263
|
+
const getTransactionLog = () => [
|
|
1264
|
+
cellsTouched,
|
|
1265
|
+
valuesTouched,
|
|
1266
|
+
mapToObj3(changedCells, pairClone, pairIsEqual),
|
|
1267
|
+
mapToObj3(invalidCells),
|
|
1268
|
+
mapToObj(changedValues, pairClone, pairIsEqual),
|
|
1269
|
+
mapToObj(invalidValues),
|
|
1270
|
+
mapToObj(changedTableIds),
|
|
1271
|
+
mapToObj2(changedRowIds),
|
|
1272
|
+
mapToObj3(changedCellIds),
|
|
1273
|
+
mapToObj(changedValueIds),
|
|
1274
|
+
];
|
|
1280
1275
|
const finishTransaction = (doRollback) => {
|
|
1281
1276
|
if (transactions > 0) {
|
|
1282
1277
|
transactions--;
|
|
@@ -1292,7 +1287,7 @@ const createStore = () => {
|
|
|
1292
1287
|
if (valuesTouched) {
|
|
1293
1288
|
callValuesListenersForChanges(1);
|
|
1294
1289
|
}
|
|
1295
|
-
if (doRollback?.(
|
|
1290
|
+
if (doRollback?.(store)) {
|
|
1296
1291
|
collForEach(changedCells, (table, tableId) =>
|
|
1297
1292
|
collForEach(table, (row, rowId) =>
|
|
1298
1293
|
collForEach(row, ([oldCell], cellId) =>
|
|
@@ -1305,12 +1300,7 @@ const createStore = () => {
|
|
|
1305
1300
|
);
|
|
1306
1301
|
cellsTouched = valuesTouched = false;
|
|
1307
1302
|
}
|
|
1308
|
-
callListeners(
|
|
1309
|
-
finishTransactionListeners[0],
|
|
1310
|
-
void 0,
|
|
1311
|
-
getTransactionChanges,
|
|
1312
|
-
getTransactionLog,
|
|
1313
|
-
);
|
|
1303
|
+
callListeners(finishTransactionListeners[0], void 0);
|
|
1314
1304
|
transactions = -1;
|
|
1315
1305
|
callInvalidCellListeners(0);
|
|
1316
1306
|
if (cellsTouched) {
|
|
@@ -1320,12 +1310,8 @@ const createStore = () => {
|
|
|
1320
1310
|
if (valuesTouched) {
|
|
1321
1311
|
callValuesListenersForChanges(0);
|
|
1322
1312
|
}
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
void 0,
|
|
1326
|
-
getTransactionChanges,
|
|
1327
|
-
getTransactionLog,
|
|
1328
|
-
);
|
|
1313
|
+
postTransactionListener?.(store);
|
|
1314
|
+
callListeners(finishTransactionListeners[1], void 0);
|
|
1329
1315
|
transactions = 0;
|
|
1330
1316
|
cellsTouched = valuesTouched = false;
|
|
1331
1317
|
hadTables = hasTables();
|
|
@@ -1452,6 +1438,9 @@ const createStore = () => {
|
|
|
1452
1438
|
collSize2(startTransactionListeners) +
|
|
1453
1439
|
pairCollSize2(finishTransactionListeners),
|
|
1454
1440
|
});
|
|
1441
|
+
const addPostTransactionListener = (listener) => {
|
|
1442
|
+
postTransactionListener = listener;
|
|
1443
|
+
};
|
|
1455
1444
|
const store = {
|
|
1456
1445
|
getContent,
|
|
1457
1446
|
getTables,
|
|
@@ -1492,7 +1481,7 @@ const createStore = () => {
|
|
|
1492
1481
|
setValues,
|
|
1493
1482
|
setPartialValues,
|
|
1494
1483
|
setValue,
|
|
1495
|
-
|
|
1484
|
+
applyChanges,
|
|
1496
1485
|
setTablesJson,
|
|
1497
1486
|
setValuesJson,
|
|
1498
1487
|
setJson,
|
|
@@ -1510,6 +1499,8 @@ const createStore = () => {
|
|
|
1510
1499
|
delSchema,
|
|
1511
1500
|
transaction,
|
|
1512
1501
|
startTransaction,
|
|
1502
|
+
getTransactionChanges,
|
|
1503
|
+
getTransactionLog,
|
|
1513
1504
|
finishTransaction,
|
|
1514
1505
|
forEachTable,
|
|
1515
1506
|
forEachTableCell,
|
|
@@ -1527,8 +1518,9 @@ const createStore = () => {
|
|
|
1527
1518
|
createStore,
|
|
1528
1519
|
addListener,
|
|
1529
1520
|
callListeners,
|
|
1521
|
+
addPostTransactionListener,
|
|
1530
1522
|
};
|
|
1531
|
-
|
|
1523
|
+
objToArray(
|
|
1532
1524
|
{
|
|
1533
1525
|
[HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
|
|
1534
1526
|
[TABLES]: [0, tablesListeners],
|