tinybase 4.1.4 → 4.2.0-beta.1

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.
Files changed (62) hide show
  1. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -0
  2. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  4. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  6. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  7. package/lib/cjs/tools.cjs +1 -1
  8. package/lib/cjs/tools.cjs.gz +0 -0
  9. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -0
  10. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  11. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  12. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  13. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  14. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  15. package/lib/cjs-es6/tools.cjs +1 -1
  16. package/lib/cjs-es6/tools.cjs.gz +0 -0
  17. package/lib/debug/persisters/persister-browser.js +13 -8
  18. package/lib/debug/persisters/persister-indexed-db.js +272 -0
  19. package/lib/debug/persisters/persister-remote.js +1 -1
  20. package/lib/debug/persisters/persister-yjs.js +10 -16
  21. package/lib/debug/tools.js +21 -5
  22. package/lib/debug/ui-react-dom.js +12 -7
  23. package/lib/es6/persisters/persister-indexed-db.js +1 -0
  24. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  25. package/lib/es6/persisters/persister-remote.js +1 -1
  26. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  27. package/lib/es6/persisters/persister-yjs.js +1 -1
  28. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  29. package/lib/es6/tools.js +1 -1
  30. package/lib/es6/tools.js.gz +0 -0
  31. package/lib/persisters/persister-indexed-db.js +1 -0
  32. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  33. package/lib/persisters/persister-remote.js +1 -1
  34. package/lib/persisters/persister-remote.js.gz +0 -0
  35. package/lib/persisters/persister-yjs.js +1 -1
  36. package/lib/persisters/persister-yjs.js.gz +0 -0
  37. package/lib/tools.js +1 -1
  38. package/lib/tools.js.gz +0 -0
  39. package/lib/types/persisters/persister-indexed-db.d.ts +75 -0
  40. package/lib/types/persisters/persister-remote.d.ts +2 -2
  41. package/lib/types/persisters.d.ts +1 -0
  42. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +86 -0
  43. package/lib/types/with-schemas/persisters/persister-remote.d.ts +3 -3
  44. package/lib/types/with-schemas/persisters.d.ts +1 -0
  45. package/lib/umd/persisters/persister-indexed-db.js +1 -0
  46. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  47. package/lib/umd/persisters/persister-remote.js +1 -1
  48. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  49. package/lib/umd/persisters/persister-yjs.js +1 -1
  50. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  51. package/lib/umd/tools.js +1 -1
  52. package/lib/umd/tools.js.gz +0 -0
  53. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -0
  54. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  55. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  56. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  57. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  58. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  59. package/lib/umd-es6/tools.js +1 -1
  60. package/lib/umd-es6/tools.js.gz +0 -0
  61. package/package.json +17 -15
  62. package/readme.md +13 -13
@@ -0,0 +1,272 @@
1
+ const T = 't';
2
+ const V = 'v';
3
+
4
+ const arrayMap = (array, cb) => array.map(cb);
5
+ const arrayLength = (array) => array.length;
6
+ const arrayPush = (array, ...values) => array.push(...values);
7
+ const arrayShift = (array) => array.shift();
8
+
9
+ const promise = Promise;
10
+ const startInterval = setInterval;
11
+ const stopInterval = clearInterval;
12
+ const isInstanceOf = (thing, cls) => thing instanceof cls;
13
+ const isUndefined = (thing) => thing == void 0;
14
+ const ifNotUndefined = (value, then, otherwise) =>
15
+ isUndefined(value) ? otherwise?.() : then(value);
16
+ const promiseNew = (resolver) => new promise(resolver);
17
+ const promiseAll = async (promises) => promise.all(promises);
18
+
19
+ const object = Object;
20
+ const objIds = object.keys;
21
+ const objFreeze = object.freeze;
22
+ const isObject = (obj) =>
23
+ isInstanceOf(obj, object) && obj.constructor == object;
24
+ const objNew = (entries = []) => object.fromEntries(entries);
25
+ const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
26
+ const objHas = (obj, id) => !isUndefined(objGet(obj, id));
27
+ const objMap = (obj, cb) =>
28
+ arrayMap(object.entries(obj), ([id, value]) => cb(value, id));
29
+ const objSize = (obj) => arrayLength(objIds(obj));
30
+ const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
31
+
32
+ const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
33
+ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
34
+
35
+ const mapNew = (entries) => new Map(entries);
36
+ const mapGet = (map, key) => map?.get(key);
37
+ const mapSet = (map, key, value) =>
38
+ isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
39
+ const mapEnsure = (map, key, getDefaultValue) => {
40
+ if (!collHas(map, key)) {
41
+ mapSet(map, key, getDefaultValue());
42
+ }
43
+ return mapGet(map, key);
44
+ };
45
+
46
+ const scheduleRunning = mapNew();
47
+ const scheduleActions = mapNew();
48
+ const createCustomPersister = (
49
+ store,
50
+ getPersisted,
51
+ setPersisted,
52
+ addPersisterListener,
53
+ delPersisterListener,
54
+ onIgnoredError,
55
+ scheduleId = [],
56
+ ) => {
57
+ let listenerId;
58
+ let loadSave = 0;
59
+ let loads = 0;
60
+ let saves = 0;
61
+ let listening = 0;
62
+ let action;
63
+ let listeningHandle;
64
+ mapEnsure(scheduleRunning, scheduleId, () => 0);
65
+ mapEnsure(scheduleActions, scheduleId, () => []);
66
+ const run = async () => {
67
+ /* istanbul ignore else */
68
+ if (!mapGet(scheduleRunning, scheduleId)) {
69
+ mapSet(scheduleRunning, scheduleId, 1);
70
+ while (
71
+ !isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
72
+ ) {
73
+ try {
74
+ await action();
75
+ } catch (error) {
76
+ /* istanbul ignore next */
77
+ onIgnoredError?.(error);
78
+ }
79
+ }
80
+ mapSet(scheduleRunning, scheduleId, 0);
81
+ }
82
+ };
83
+ const loadLock = async (actions) => {
84
+ /* istanbul ignore else */
85
+ if (loadSave != 2) {
86
+ loadSave = 1;
87
+ {
88
+ loads++;
89
+ }
90
+ await persister.schedule(async () => {
91
+ await actions();
92
+ loadSave = 0;
93
+ });
94
+ }
95
+ return persister;
96
+ };
97
+ const persister = {
98
+ load: async (initialTables, initialValues) =>
99
+ await loadLock(async () => {
100
+ try {
101
+ store.setContent(await getPersisted());
102
+ } catch {
103
+ store.setContent([initialTables, initialValues]);
104
+ }
105
+ }),
106
+ startAutoLoad: async (initialTables = {}, initialValues = {}) => {
107
+ persister.stopAutoLoad();
108
+ await persister.load(initialTables, initialValues);
109
+ listening = 1;
110
+ listeningHandle = addPersisterListener(
111
+ async (getContent, getTransactionChanges) => {
112
+ if (getTransactionChanges) {
113
+ const transactionChanges = getTransactionChanges();
114
+ await loadLock(async () =>
115
+ store.setTransactionChanges(transactionChanges),
116
+ );
117
+ } else {
118
+ await loadLock(async () => {
119
+ try {
120
+ store.setContent(getContent?.() ?? (await getPersisted()));
121
+ } catch (error) {
122
+ onIgnoredError?.(error);
123
+ }
124
+ });
125
+ }
126
+ },
127
+ );
128
+ return persister;
129
+ },
130
+ stopAutoLoad: () => {
131
+ if (listening) {
132
+ delPersisterListener(listeningHandle);
133
+ listeningHandle = void 0;
134
+ listening = 0;
135
+ }
136
+ return persister;
137
+ },
138
+ save: async (getTransactionChanges) => {
139
+ /* istanbul ignore else */
140
+ if (loadSave != 1) {
141
+ loadSave = 2;
142
+ {
143
+ saves++;
144
+ }
145
+ await persister.schedule(async () => {
146
+ try {
147
+ await setPersisted(store.getContent, getTransactionChanges);
148
+ } catch (error) {
149
+ /* istanbul ignore next */
150
+ onIgnoredError?.(error);
151
+ }
152
+ loadSave = 0;
153
+ });
154
+ }
155
+ return persister;
156
+ },
157
+ startAutoSave: async () => {
158
+ await persister.stopAutoSave().save();
159
+ listenerId = store.addDidFinishTransactionListener(
160
+ (_store, getTransactionChanges) => {
161
+ const [tableChanges, valueChanges] = getTransactionChanges();
162
+ if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
163
+ persister.save(() => [tableChanges, valueChanges]);
164
+ }
165
+ },
166
+ );
167
+ return persister;
168
+ },
169
+ stopAutoSave: () => {
170
+ ifNotUndefined(listenerId, store.delListener);
171
+ return persister;
172
+ },
173
+ schedule: async (...actions) => {
174
+ arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
175
+ await run();
176
+ return persister;
177
+ },
178
+ getStore: () => store,
179
+ destroy: () => persister.stopAutoLoad().stopAutoSave(),
180
+ getStats: () => ({loads, saves}),
181
+ };
182
+ return objFreeze(persister);
183
+ };
184
+
185
+ const WINDOW = globalThis.window;
186
+ const OBJECT_STORE_NAMES = [T, V];
187
+ const KEY_PATH = {keyPath: 'k'};
188
+ const objectStoreMatch = async (objectStore, obj) => {
189
+ const actions = objMap(obj, (v, k) =>
190
+ execObjectStore(objectStore, 'put', {k, v}),
191
+ );
192
+ arrayMap(await execObjectStore(objectStore, 'getAllKeys'), (id) =>
193
+ objHas(obj, id)
194
+ ? 0
195
+ : arrayPush(actions, execObjectStore(objectStore, 'delete', id)),
196
+ );
197
+ await promiseAll(actions);
198
+ };
199
+ const execObjectStore = async (objectStore, func, arg) =>
200
+ promiseNew((resolve, reject) => {
201
+ const request = objectStore[func](arg);
202
+ request.onsuccess = () => resolve(request.result);
203
+ request.onerror = () => reject(`objectStore.${func} error`);
204
+ });
205
+ const createIndexedDbPersister = (
206
+ store,
207
+ dbName,
208
+ autoLoadIntervalSeconds = 1,
209
+ onIgnoredError,
210
+ ) => {
211
+ const forObjectStores = async (forObjectStore, args = [], create = 0) =>
212
+ promiseNew((resolve, reject) => {
213
+ const request = WINDOW.indexedDB.open(dbName, 1);
214
+ request.onupgradeneeded = () =>
215
+ create &&
216
+ arrayMap(OBJECT_STORE_NAMES, (objectStoreName) =>
217
+ request.result.createObjectStore(objectStoreName, KEY_PATH),
218
+ );
219
+ request.onsuccess = async () => {
220
+ try {
221
+ const transaction = request.result.transaction(
222
+ OBJECT_STORE_NAMES,
223
+ 'readwrite',
224
+ );
225
+ const result = await promiseAll(
226
+ arrayMap(
227
+ OBJECT_STORE_NAMES,
228
+ async (objectStoreName, index) =>
229
+ await forObjectStore(
230
+ transaction.objectStore(objectStoreName),
231
+ args[index],
232
+ ),
233
+ ),
234
+ );
235
+ request.result.close();
236
+ resolve(result);
237
+ } catch (e) {
238
+ reject(e);
239
+ }
240
+ };
241
+ request.onerror = () => reject('indexedDB.open error');
242
+ });
243
+ const getPersisted = async () =>
244
+ await forObjectStores(async (objectStore) =>
245
+ objNew(
246
+ arrayMap(await execObjectStore(objectStore, 'getAll'), ({k, v}) => [
247
+ k,
248
+ v,
249
+ ]),
250
+ ),
251
+ );
252
+ const setPersisted = async (getContent) =>
253
+ await forObjectStores(
254
+ async (objectStore, content) =>
255
+ await objectStoreMatch(objectStore, content),
256
+ getContent(),
257
+ 1,
258
+ );
259
+ const addPersisterListener = (listener) =>
260
+ startInterval(listener, autoLoadIntervalSeconds * 1e3);
261
+ const delPersisterListener = (interval) => stopInterval(interval);
262
+ return createCustomPersister(
263
+ store,
264
+ getPersisted,
265
+ setPersisted,
266
+ addPersisterListener,
267
+ delPersisterListener,
268
+ onIgnoredError,
269
+ );
270
+ };
271
+
272
+ export {createIndexedDbPersister, objectStoreMatch};
@@ -181,7 +181,7 @@ const createRemotePersister = (
181
181
  store,
182
182
  loadUrl,
183
183
  saveUrl,
184
- autoLoadIntervalSeconds,
184
+ autoLoadIntervalSeconds = 5,
185
185
  onIgnoredError,
186
186
  ) => {
187
187
  let lastEtag;
@@ -1,6 +1,8 @@
1
1
  import {Map as Map$1} from 'yjs';
2
2
 
3
3
  const TINYBASE = 'tinybase';
4
+ const T = 't';
5
+ const V = 'v';
4
6
 
5
7
  const arrayForEach = (array, cb) => array.forEach(cb);
6
8
  const arrayMap = (array, cb) => array.map(cb);
@@ -189,28 +191,17 @@ const createCustomPersister = (
189
191
  return objFreeze(persister);
190
192
  };
191
193
 
192
- const tablesKey = 't';
193
- const valuesKey = 'v';
194
194
  const DELETE = 'delete';
195
- const ensureYContent = (yContent) => {
196
- if (!yContent.size) {
197
- yContent.set(tablesKey, new Map$1());
198
- yContent.set(valuesKey, new Map$1());
199
- }
200
- };
201
- const getYContent = (yContent) => [
202
- yContent.get(tablesKey),
203
- yContent.get(valuesKey),
204
- ];
195
+ const getYContent = (yContent) => [yContent.get(T), yContent.get(V)];
205
196
  const getTransactionChangesFromYDoc = (yContent, events) => {
206
197
  if (arrayLength(events) == 1 && arrayIsEmpty(events[0].path)) {
207
- return [yContent.get('t').toJSON(), yContent.get('v').toJSON()];
198
+ return [yContent.get(T).toJSON(), yContent.get(V).toJSON()];
208
199
  }
209
200
  const [yTables, yValues] = getYContent(yContent);
210
201
  const tables = {};
211
202
  const values = {};
212
203
  arrayForEach(events, ({path, changes: {keys}}) =>
213
- arrayShift(path) == tablesKey
204
+ arrayShift(path) == T
214
205
  ? ifNotUndefined(
215
206
  arrayShift(path),
216
207
  (yTableId) => {
@@ -257,7 +248,10 @@ const setTransactionChangesToYDoc = (
257
248
  getContent,
258
249
  getTransactionChanges,
259
250
  ) => {
260
- ensureYContent(yContent);
251
+ if (!yContent.size) {
252
+ yContent.set(T, new Map$1());
253
+ yContent.set(V, new Map$1());
254
+ }
261
255
  const [yTables, yValues] = getYContent(yContent);
262
256
  const transactionChangesDidFail = () => {
263
257
  transactionChangesFailed = 1;
@@ -349,7 +343,7 @@ const createYjsPersister = (
349
343
  const yContent = yDoc.getMap(yMapName);
350
344
  const getPersisted = async () =>
351
345
  yContent.size
352
- ? [yContent.get(tablesKey).toJSON(), yContent.get(valuesKey).toJSON()]
346
+ ? [yContent.get(T).toJSON(), yContent.get(V).toJSON()]
353
347
  : void 0;
354
348
  const setPersisted = async (getContent, getTransactionChanges) =>
355
349
  yDoc.transact(() =>
@@ -23,12 +23,14 @@ const VALUE = 'Value';
23
23
  const VALUES = VALUE + 's';
24
24
  const VALUE_IDS = VALUE + IDS;
25
25
 
26
+ const promise = Promise;
26
27
  const isFiniteNumber = isFinite;
27
28
  const isInstanceOf = (thing, cls) => thing instanceof cls;
28
29
  const isUndefined = (thing) => thing == void 0;
29
30
  const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
30
31
  const isString = (thing) => getTypeOf(thing) == STRING;
31
32
  const isArray = (thing) => Array.isArray(thing);
33
+ const promiseAll = async (promises) => promise.all(promises);
32
34
 
33
35
  const getCellOrValueType = (cell) => {
34
36
  const type = getTypeOf(cell);
@@ -2832,6 +2834,8 @@ const getStoreApi = (tablesSchema, valuesSchema, module) => {
2832
2834
 
2833
2835
  const jsonParse = JSON.parse;
2834
2836
 
2837
+ const PRETTIER = 'prettier/';
2838
+ const PRETTIER_PLUGINS = PRETTIER + 'plugins/';
2835
2839
  const prettierConfig = {
2836
2840
  parser: 'typescript',
2837
2841
  singleQuote: true,
@@ -2932,15 +2936,27 @@ const createTools = getCreateFunction((store) => {
2932
2936
  getStoreApi(getStoreTablesSchema(), getStoreValuesSchema(), module);
2933
2937
  const getPrettyStoreApi = async (module) => {
2934
2938
  const extensions = ['d.ts', 'ts', 'd.ts', 'tsx'];
2939
+ const plugins = [];
2935
2940
  let format;
2936
2941
  try {
2937
- format = (await import('prettier')).format;
2942
+ format = (await import(PRETTIER + 'standalone')).format;
2943
+ arrayPush(
2944
+ plugins,
2945
+ await import(PRETTIER_PLUGINS + 'estree'),
2946
+ await import(PRETTIER_PLUGINS + 'typescript'),
2947
+ );
2938
2948
  } catch (e) {
2939
- format = (str) => str;
2949
+ format = async (str) => str;
2940
2950
  }
2941
- return arrayMap(getStoreApi$1(module), (file, f) =>
2942
- formatJsDoc(
2943
- format(file, {...prettierConfig, filepath: `_.${extensions[f]}`}),
2951
+ return await promiseAll(
2952
+ arrayMap(getStoreApi$1(module), async (file, f) =>
2953
+ formatJsDoc(
2954
+ await format(file, {
2955
+ ...prettierConfig,
2956
+ plugins,
2957
+ filepath: `_.${extensions[f]}`,
2958
+ }),
2959
+ ),
2944
2960
  ),
2945
2961
  );
2946
2962
  };
@@ -1699,21 +1699,26 @@ const createCustomPersister = (
1699
1699
 
1700
1700
  const STORAGE = 'storage';
1701
1701
  const WINDOW = globalThis.window;
1702
- const getStoragePersister = (store, storageName, storage, onIgnoredError) => {
1702
+ const createStoragePersister = (
1703
+ store,
1704
+ storageName,
1705
+ storage,
1706
+ onIgnoredError,
1707
+ ) => {
1703
1708
  const getPersisted = async () => jsonParse(storage.getItem(storageName));
1704
1709
  const setPersisted = async (getContent) =>
1705
1710
  storage.setItem(storageName, jsonString(getContent()));
1706
1711
  const addPersisterListener = (listener) => {
1707
- const storeListener = (event) => {
1712
+ const storageListener = (event) => {
1708
1713
  if (event.storageArea === storage && event.key === storageName) {
1709
1714
  listener(() => jsonParse(event.newValue));
1710
1715
  }
1711
1716
  };
1712
- WINDOW.addEventListener(STORAGE, storeListener);
1713
- return storeListener;
1717
+ WINDOW.addEventListener(STORAGE, storageListener);
1718
+ return storageListener;
1714
1719
  };
1715
- const delPersisterListener = (storeListener) =>
1716
- WINDOW.removeEventListener(STORAGE, storeListener);
1720
+ const delPersisterListener = (storageListener) =>
1721
+ WINDOW.removeEventListener(STORAGE, storageListener);
1717
1722
  return createCustomPersister(
1718
1723
  store,
1719
1724
  getPersisted,
@@ -1724,7 +1729,7 @@ const getStoragePersister = (store, storageName, storage, onIgnoredError) => {
1724
1729
  );
1725
1730
  };
1726
1731
  const createSessionPersister = (store, storageName, onIgnoredError) =>
1727
- getStoragePersister(store, storageName, sessionStorage, onIgnoredError);
1732
+ createStoragePersister(store, storageName, sessionStorage, onIgnoredError);
1728
1733
 
1729
1734
  const setNew = (entryOrEntries) =>
1730
1735
  new Set(
@@ -0,0 +1 @@
1
+ const e=(e,t)=>e.map(t),t=(e,...t)=>e.push(...t),n=Promise,o=setInterval,l=clearInterval,r=e=>null==e,u=(e,t,n)=>r(e)?null==n?void 0:n():t(e),i=e=>new n(e),d=e=>{return t=function*(){return n.all(e)},new Promise(((e,n)=>{var o=e=>{try{r(t.next(e))}catch(e){n(e)}},l=e=>{try{r(t.throw(e))}catch(e){n(e)}},r=t=>t.done?e(t.value):Promise.resolve(t.value).then(o,l);r((t=t.apply(void 0,null)).next())}));var t},c=Object,s=c.keys,a=c.freeze,v=e=>(e=>e instanceof c&&e.constructor==c)(e)&&0==(e=>s(e).length)(e),y=e=>new Map(e),f=(e,t)=>null==e?void 0:e.get(t),h=(e,t,n)=>{return r(n)?(l=t,null==(o=e)||o.delete(l),e):null==e?void 0:e.set(t,n);var o,l},p=(e,t,n)=>{var o,l,r;return l=t,null!=(r=null==(o=e)?void 0:o.has(l))&&r||h(e,t,n()),f(e,t)};var w=(e,t,n)=>new Promise(((o,l)=>{var r=e=>{try{i(n.next(e))}catch(e){l(e)}},u=e=>{try{i(n.throw(e))}catch(e){l(e)}},i=e=>e.done?o(e.value):Promise.resolve(e.value).then(r,u);i((n=n.apply(e,t)).next())}));const g=y(),A=y();var m=(e,t,n)=>new Promise(((o,l)=>{var r=e=>{try{i(n.next(e))}catch(e){l(e)}},u=e=>{try{i(n.throw(e))}catch(e){l(e)}},i=e=>e.done?o(e.value):Promise.resolve(e.value).then(r,u);i((n=n.apply(e,t)).next())}));const x=globalThis.window,S=["t","v"],P={keyPath:"k"},L=(n,o)=>m(void 0,null,(function*(){const l=((t,o)=>e(c.entries(t),(([e,t])=>b(n,"put",{k:e,v:t}))))(o);e(yield b(n,"getAllKeys"),(e=>((e,t)=>!r(((e,t)=>u(e,(e=>e[t])))(e,t)))(o,e)?0:t(l,b(n,"delete",e)))),yield d(l)})),b=(e,t,n)=>m(void 0,null,(function*(){return i(((o,l)=>{const r=e[t](n);r.onsuccess=()=>o(r.result),r.onerror=()=>l(`objectStore.${t} error`)}))})),k=(n,s,y=1,k)=>{const C=(t,...n)=>m(void 0,[t,...n],(function*(t,n=[],o=0){return i(((l,r)=>{const u=x.indexedDB.open(s,1);u.onupgradeneeded=()=>o&&e(S,(e=>u.result.createObjectStore(e,P))),u.onsuccess=()=>m(void 0,null,(function*(){try{const o=u.result.transaction(S,"readwrite"),r=yield d(e(S,((e,l)=>m(void 0,null,(function*(){return yield t(o.objectStore(e),n[l])})))));u.result.close(),l(r)}catch(e){r(e)}})),u.onerror=()=>r("indexedDB.open error")}))}));return((e,n,o,l,i,d,c=[])=>{let s,y,m,x=0,S=0;p(g,c,(()=>0)),p(A,c,(()=>[]));const P=e=>w(void 0,null,(function*(){return 2!=x&&(x=1,yield L.schedule((()=>w(void 0,null,(function*(){yield e(),x=0}))))),L})),L={load:(t,o)=>w(void 0,null,(function*(){return yield P((()=>w(void 0,null,(function*(){try{e.setContent(yield n())}catch(n){e.setContent([t,o])}}))))})),startAutoLoad:(...t)=>w(void 0,[...t],(function*(t={},o={}){return L.stopAutoLoad(),yield L.load(t,o),S=1,m=l(((t,o)=>w(void 0,null,(function*(){if(o){const t=o();yield P((()=>w(void 0,null,(function*(){return e.setTransactionChanges(t)}))))}else yield P((()=>w(void 0,null,(function*(){var o;try{e.setContent(null!=(o=null==t?void 0:t())?o:yield n())}catch(e){null==d||d(e)}}))))})))),L})),stopAutoLoad:()=>(S&&(i(m),m=void 0,S=0),L),save:t=>w(void 0,null,(function*(){return 1!=x&&(x=2,yield L.schedule((()=>w(void 0,null,(function*(){try{yield o(e.getContent,t)}catch(e){null==d||d(e)}x=0}))))),L})),startAutoSave:()=>w(void 0,null,(function*(){return yield L.stopAutoSave().save(),s=e.addDidFinishTransactionListener(((e,t)=>{const[n,o]=t();v(n)&&v(o)||L.save((()=>[n,o]))})),L})),stopAutoSave:()=>(u(s,e.delListener),L),schedule:(...e)=>w(void 0,null,(function*(){return t(f(A,c),...e),yield w(void 0,null,(function*(){if(!f(g,c)){for(h(g,c,1);!r((e=f(A,c),y=e.shift()));)try{yield y()}catch(e){null==d||d(e)}h(g,c,0)}var e})),L})),getStore:()=>e,destroy:()=>L.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return a(L)})(n,(()=>m(void 0,null,(function*(){return yield C((t=>m(void 0,null,(function*(){return((e=[])=>c.fromEntries(e))(e(yield b(t,"getAll"),(({k:e,v:t})=>[e,t])))}))))}))),(e=>m(void 0,null,(function*(){return yield C(((e,t)=>m(void 0,null,(function*(){return yield L(e,t)}))),e(),1)}))),(e=>o(e,1e3*y)),(e=>l(e)),k)};export{k as createIndexedDbPersister,L as objectStoreMatch};
@@ -1 +1 @@
1
- const t=setInterval,e=clearInterval,n=(t,e)=>t instanceof e,o=t=>null==t,l=Object,r=l.keys,i=l.freeze,u=t=>(t=>n(t,l)&&t.constructor==l)(t)&&0==(t=>r(t).length)(t),d=JSON.parse,a=t=>new Map(t),s=(t,e)=>null==t?void 0:t.get(e),c=(t,e,n)=>{return o(n)?(r=e,null==(l=t)||l.delete(r),t):null==t?void 0:t.set(e,n);var l,r},v=(t,e,n)=>{var o,l,r;return l=e,null!=(r=null==(o=t)?void 0:o.has(l))&&r||c(t,e,n()),s(t,e)};var y=(t,e,n)=>new Promise(((o,l)=>{var r=t=>{try{u(n.next(t))}catch(t){l(t)}},i=t=>{try{u(n.throw(t))}catch(t){l(t)}},u=t=>t.done?o(t.value):Promise.resolve(t.value).then(r,i);u((n=n.apply(t,e)).next())}));const h=a(),f=a();var p=(t,e,n)=>new Promise(((o,l)=>{var r=t=>{try{u(n.next(t))}catch(t){l(t)}},i=t=>{try{u(n.throw(t))}catch(t){l(t)}},u=t=>t.done?o(t.value):Promise.resolve(t.value).then(r,i);u((n=n.apply(t,e)).next())}));const g=t=>t.headers.get("ETag"),A=(r,a,A,S,m)=>{let x;return((t,e,n,l,r,d,a=[])=>{let p,g,A,S=0,m=0;v(h,a,(()=>0)),v(f,a,(()=>[]));const x=t=>y(void 0,null,(function*(){return 2!=S&&(S=1,yield C.schedule((()=>y(void 0,null,(function*(){yield t(),S=0}))))),C})),C={load:(n,o)=>y(void 0,null,(function*(){return yield x((()=>y(void 0,null,(function*(){try{t.setContent(yield e())}catch(e){t.setContent([n,o])}}))))})),startAutoLoad:(...n)=>y(void 0,[...n],(function*(n={},o={}){return C.stopAutoLoad(),yield C.load(n,o),m=1,A=l(((n,o)=>y(void 0,null,(function*(){if(o){const e=o();yield x((()=>y(void 0,null,(function*(){return t.setTransactionChanges(e)}))))}else yield x((()=>y(void 0,null,(function*(){var o;try{t.setContent(null!=(o=null==n?void 0:n())?o:yield e())}catch(t){null==d||d(t)}}))))})))),C})),stopAutoLoad:()=>(m&&(r(A),A=void 0,m=0),C),save:e=>y(void 0,null,(function*(){return 1!=S&&(S=2,yield C.schedule((()=>y(void 0,null,(function*(){try{yield n(t.getContent,e)}catch(t){null==d||d(t)}S=0}))))),C})),startAutoSave:()=>y(void 0,null,(function*(){return yield C.stopAutoSave().save(),p=t.addDidFinishTransactionListener(((t,e)=>{const[n,o]=e();u(n)&&u(o)||C.save((()=>[n,o]))})),C})),stopAutoSave:()=>{var e,n;return e=p,n=t.delListener,!!o(e)||n(e),C},schedule:(...t)=>y(void 0,null,(function*(){return((t,...e)=>{t.push(...e)})(s(f,a),...t),yield y(void 0,null,(function*(){if(!s(h,a)){for(c(h,a,1);!o((t=s(f,a),g=t.shift()));)try{yield g()}catch(t){null==d||d(t)}c(h,a,0)}var t})),C})),getStore:()=>t,destroy:()=>C.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return i(C)})(r,(()=>p(void 0,null,(function*(){const t=yield fetch(a);return x=g(t),d(yield t.text())}))),(t=>p(void 0,null,(function*(){return yield fetch(A,{method:"POST",headers:{"Content-Type":"application/json"},body:(e=t(),JSON.stringify(e,((t,e)=>n(e,Map)?l.fromEntries([...e]):e)))});var e}))),(e=>t((()=>p(void 0,null,(function*(){const t=yield fetch(a,{method:"HEAD"}),n=g(t);o(x)||o(n)||n==x||(x=n,e())}))),1e3*S)),(t=>e(t)),m)};export{A as createRemotePersister};
1
+ const t=setInterval,e=clearInterval,n=(t,e)=>t instanceof e,o=t=>null==t,l=Object,r=l.keys,i=l.freeze,u=t=>(t=>n(t,l)&&t.constructor==l)(t)&&0==(t=>r(t).length)(t),d=JSON.parse,a=t=>new Map(t),s=(t,e)=>null==t?void 0:t.get(e),c=(t,e,n)=>{return o(n)?(r=e,null==(l=t)||l.delete(r),t):null==t?void 0:t.set(e,n);var l,r},v=(t,e,n)=>{var o,l,r;return l=e,null!=(r=null==(o=t)?void 0:o.has(l))&&r||c(t,e,n()),s(t,e)};var y=(t,e,n)=>new Promise(((o,l)=>{var r=t=>{try{u(n.next(t))}catch(t){l(t)}},i=t=>{try{u(n.throw(t))}catch(t){l(t)}},u=t=>t.done?o(t.value):Promise.resolve(t.value).then(r,i);u((n=n.apply(t,e)).next())}));const h=a(),f=a();var p=(t,e,n)=>new Promise(((o,l)=>{var r=t=>{try{u(n.next(t))}catch(t){l(t)}},i=t=>{try{u(n.throw(t))}catch(t){l(t)}},u=t=>t.done?o(t.value):Promise.resolve(t.value).then(r,i);u((n=n.apply(t,e)).next())}));const g=t=>t.headers.get("ETag"),A=(r,a,A,S=5,m)=>{let x;return((t,e,n,l,r,d,a=[])=>{let p,g,A,S=0,m=0;v(h,a,(()=>0)),v(f,a,(()=>[]));const x=t=>y(void 0,null,(function*(){return 2!=S&&(S=1,yield C.schedule((()=>y(void 0,null,(function*(){yield t(),S=0}))))),C})),C={load:(n,o)=>y(void 0,null,(function*(){return yield x((()=>y(void 0,null,(function*(){try{t.setContent(yield e())}catch(e){t.setContent([n,o])}}))))})),startAutoLoad:(...n)=>y(void 0,[...n],(function*(n={},o={}){return C.stopAutoLoad(),yield C.load(n,o),m=1,A=l(((n,o)=>y(void 0,null,(function*(){if(o){const e=o();yield x((()=>y(void 0,null,(function*(){return t.setTransactionChanges(e)}))))}else yield x((()=>y(void 0,null,(function*(){var o;try{t.setContent(null!=(o=null==n?void 0:n())?o:yield e())}catch(t){null==d||d(t)}}))))})))),C})),stopAutoLoad:()=>(m&&(r(A),A=void 0,m=0),C),save:e=>y(void 0,null,(function*(){return 1!=S&&(S=2,yield C.schedule((()=>y(void 0,null,(function*(){try{yield n(t.getContent,e)}catch(t){null==d||d(t)}S=0}))))),C})),startAutoSave:()=>y(void 0,null,(function*(){return yield C.stopAutoSave().save(),p=t.addDidFinishTransactionListener(((t,e)=>{const[n,o]=e();u(n)&&u(o)||C.save((()=>[n,o]))})),C})),stopAutoSave:()=>{var e,n;return e=p,n=t.delListener,!!o(e)||n(e),C},schedule:(...t)=>y(void 0,null,(function*(){return((t,...e)=>{t.push(...e)})(s(f,a),...t),yield y(void 0,null,(function*(){if(!s(h,a)){for(c(h,a,1);!o((t=s(f,a),g=t.shift()));)try{yield g()}catch(t){null==d||d(t)}c(h,a,0)}var t})),C})),getStore:()=>t,destroy:()=>C.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return i(C)})(r,(()=>p(void 0,null,(function*(){const t=yield fetch(a);return x=g(t),d(yield t.text())}))),(t=>p(void 0,null,(function*(){return yield fetch(A,{method:"POST",headers:{"Content-Type":"application/json"},body:(e=t(),JSON.stringify(e,((t,e)=>n(e,Map)?l.fromEntries([...e]):e)))});var e}))),(e=>t((()=>p(void 0,null,(function*(){const t=yield fetch(a,{method:"HEAD"}),n=g(t);o(x)||o(n)||n==x||(x=n,e())}))),1e3*S)),(t=>e(t)),m)};export{A as createRemotePersister};
@@ -1 +1 @@
1
- import{Map as t}from"yjs";const e=t=>t.length,n=t=>t.shift(),o=t=>null==t,l=(t,e,n)=>o(t)?null==n?void 0:n():e(t),r=Object,u=r.keys,i=r.freeze,s=(t=[])=>r.fromEntries(t),a=(t,e)=>!o(((t,e)=>l(t,(t=>t[e])))(t,e)),d=(t,e)=>((t,e)=>t.map(e))(r.entries(t),(([t,n])=>e(n,t))),c=t=>(t=>t instanceof r&&t.constructor==r)(t)&&0==(t=>e(u(t)))(t),v=(t,e,n)=>(a(t,e)||(t[e]=n()),t[e]),f=t=>new Map(t),y=(t,e)=>null==t?void 0:t.get(e),h=(t,e)=>((t,e)=>null==t?void 0:t.forEach(e))(t,((t,n)=>e(n,t))),g=(t,e,n)=>{return o(n)?(r=e,null==(l=t)||l.delete(r),t):null==t?void 0:t.set(e,n);var l,r},p=(t,e,n)=>{var o,l,r;return l=e,null!=(r=null==(o=t)?void 0:o.has(l))&&r||g(t,e,n()),y(t,e)};var S=(t,e,n)=>new Promise(((o,l)=>{var r=t=>{try{i(n.next(t))}catch(t){l(t)}},u=t=>{try{i(n.throw(t))}catch(t){l(t)}},i=t=>t.done?o(t.value):Promise.resolve(t.value).then(r,u);i((n=n.apply(t,e)).next())}));const m=f(),w=f();var A=(t,e,n)=>new Promise(((o,l)=>{var r=t=>{try{i(n.next(t))}catch(t){l(t)}},u=t=>{try{i(n.throw(t))}catch(t){l(t)}},i=t=>t.done?o(t.value):Promise.resolve(t.value).then(r,u);i((n=n.apply(t,e)).next())}));const O="t",J="delete",L=t=>[t.get(O),t.get("v")],N=(e,n,l,r)=>{var u;const i=o(n)?e:null!=(u=e.get(n))?u:e.set(n,new t);let s;return d(l,((t,e)=>{r(i,e,t)&&(s=1)})),i.forEach(((t,e)=>{a(l,e)||(i.delete(e),s=1)})),o(n)||i.size||e.delete(n),s},x=(r,u,a="tinybase",f)=>{const x=u.getMap(a);return((t,e,r,u,s,a,d=[])=>{let v,f,h,A=0,O=0;p(m,d,(()=>0)),p(w,d,(()=>[]));const J=t=>S(void 0,null,(function*(){return 2!=A&&(A=1,yield L.schedule((()=>S(void 0,null,(function*(){yield t(),A=0}))))),L})),L={load:(n,o)=>S(void 0,null,(function*(){return yield J((()=>S(void 0,null,(function*(){try{t.setContent(yield e())}catch(e){t.setContent([n,o])}}))))})),startAutoLoad:(...n)=>S(void 0,[...n],(function*(n={},o={}){return L.stopAutoLoad(),yield L.load(n,o),O=1,h=u(((n,o)=>S(void 0,null,(function*(){if(o){const e=o();yield J((()=>S(void 0,null,(function*(){return t.setTransactionChanges(e)}))))}else yield J((()=>S(void 0,null,(function*(){var o;try{t.setContent(null!=(o=null==n?void 0:n())?o:yield e())}catch(t){null==a||a(t)}}))))})))),L})),stopAutoLoad:()=>(O&&(s(h),h=void 0,O=0),L),save:e=>S(void 0,null,(function*(){return 1!=A&&(A=2,yield L.schedule((()=>S(void 0,null,(function*(){try{yield r(t.getContent,e)}catch(t){null==a||a(t)}A=0}))))),L})),startAutoSave:()=>S(void 0,null,(function*(){return yield L.stopAutoSave().save(),v=t.addDidFinishTransactionListener(((t,e)=>{const[n,o]=e();c(n)&&c(o)||L.save((()=>[n,o]))})),L})),stopAutoSave:()=>(l(v,t.delListener),L),schedule:(...t)=>S(void 0,null,(function*(){return((t,...e)=>{t.push(...e)})(y(w,d),...t),yield S(void 0,null,(function*(){if(!y(m,d)){for(g(m,d,1);!o(f=n(y(w,d)));)try{yield f()}catch(t){null==a||a(t)}g(m,d,0)}})),L})),getStore:()=>t,destroy:()=>L.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return i(L)})(r,(()=>A(void 0,null,(function*(){return x.size?[x.get(O).toJSON(),x.get("v").toJSON()]:void 0}))),((e,n)=>A(void 0,null,(function*(){return u.transact((()=>((e,n,r)=>{(e=>{e.size||(e.set(O,new t),e.set("v",new t))})(e);const[u,i]=L(e),s=()=>{a=1};let a=1;if(l(null==r?void 0:r(),(([t,e])=>{a=0,d(t,((t,e)=>a?0:o(t)?u.delete(e):l(u.get(e),(e=>d(t,((t,n)=>a?0:o(t)?e.delete(n):l(e.get(n),(e=>d(t,((t,n)=>o(t)?e.delete(n):e.set(n,t)))),s)))),s))),d(e,((t,e)=>a?0:o(t)?i.delete(e):i.set(e,t)))})),a){const[t,e]=n();N(u,void 0,t,((t,e,n)=>N(u,e,n,((t,e,n)=>N(t,e,n,((t,e,n)=>{if(t.get(e)!==n)return t.set(e,n),1})))))),N(i,void 0,e,((t,e,n)=>{i.get(e)!==n&&i.set(e,n)}))}})(x,e,n)))}))),(t=>{const o=o=>t(void 0,(()=>((t,o)=>{if(1==e(o)&&(r=o[0].path,0==e(r)))return[t.get("t").toJSON(),t.get("v").toJSON()];var r;const[u,i]=L(t),a={},d={};return((t,e)=>{t.forEach((({path:t,changes:{keys:e}})=>n(t)==O?l(n(t),(o=>{const r=v(a,o,s),i=u.get(o);l(n(t),(t=>{const n=v(r,t,s),o=i.get(t);h(e,((t,{action:e})=>n[t]=e==J?null:o.get(t)))}),(()=>h(e,((t,{action:e})=>{var n;return r[t]=e==J?null:null==(n=i.get(t))?void 0:n.toJSON()}))))}),(()=>h(e,((t,{action:e})=>{var n;return a[t]=e==J?null:null==(n=u.get(t))?void 0:n.toJSON()})))):h(e,((t,{action:e})=>d[t]=e==J?null:i.get(t)))))})(o),[a,d]})(x,o)));return x.observeDeep(o),o}),(t=>{x.unobserveDeep(t)}),f)};export{x as createYjsPersister};
1
+ import{Map as t}from"yjs";const e="t",n="v",o=t=>t.length,l=t=>t.shift(),r=t=>null==t,u=(t,e,n)=>r(t)?null==n?void 0:n():e(t),i=Object,s=i.keys,a=i.freeze,d=(t=[])=>i.fromEntries(t),c=(t,e)=>!r(((t,e)=>u(t,(t=>t[e])))(t,e)),v=(t,e)=>((t,e)=>t.map(e))(i.entries(t),(([t,n])=>e(n,t))),f=t=>(t=>t instanceof i&&t.constructor==i)(t)&&0==(t=>o(s(t)))(t),y=(t,e,n)=>(c(t,e)||(t[e]=n()),t[e]),h=t=>new Map(t),g=(t,e)=>null==t?void 0:t.get(e),p=(t,e)=>((t,e)=>null==t?void 0:t.forEach(e))(t,((t,n)=>e(n,t))),S=(t,e,n)=>{return r(n)?(l=e,null==(o=t)||o.delete(l),t):null==t?void 0:t.set(e,n);var o,l},m=(t,e,n)=>{var o,l,r;return l=e,null!=(r=null==(o=t)?void 0:o.has(l))&&r||S(t,e,n()),g(t,e)};var w=(t,e,n)=>new Promise(((o,l)=>{var r=t=>{try{i(n.next(t))}catch(t){l(t)}},u=t=>{try{i(n.throw(t))}catch(t){l(t)}},i=t=>t.done?o(t.value):Promise.resolve(t.value).then(r,u);i((n=n.apply(t,e)).next())}));const A=h(),O=h();var J=(t,e,n)=>new Promise(((o,l)=>{var r=t=>{try{i(n.next(t))}catch(t){l(t)}},u=t=>{try{i(n.throw(t))}catch(t){l(t)}},i=t=>t.done?o(t.value):Promise.resolve(t.value).then(r,u);i((n=n.apply(t,e)).next())}));const L="delete",N=t=>[t.get(e),t.get(n)],x=(e,n,o,l)=>{var u;const i=r(n)?e:null!=(u=e.get(n))?u:e.set(n,new t);let s;return v(o,((t,e)=>{l(i,e,t)&&(s=1)})),i.forEach(((t,e)=>{c(o,e)||(i.delete(e),s=1)})),r(n)||i.size||e.delete(n),s},C=(i,s,c="tinybase",h)=>{const C=s.getMap(c);return((t,e,n,o,i,s,d=[])=>{let c,v,y,h=0,p=0;m(A,d,(()=>0)),m(O,d,(()=>[]));const J=t=>w(void 0,null,(function*(){return 2!=h&&(h=1,yield L.schedule((()=>w(void 0,null,(function*(){yield t(),h=0}))))),L})),L={load:(n,o)=>w(void 0,null,(function*(){return yield J((()=>w(void 0,null,(function*(){try{t.setContent(yield e())}catch(e){t.setContent([n,o])}}))))})),startAutoLoad:(...n)=>w(void 0,[...n],(function*(n={},l={}){return L.stopAutoLoad(),yield L.load(n,l),p=1,y=o(((n,o)=>w(void 0,null,(function*(){if(o){const e=o();yield J((()=>w(void 0,null,(function*(){return t.setTransactionChanges(e)}))))}else yield J((()=>w(void 0,null,(function*(){var o;try{t.setContent(null!=(o=null==n?void 0:n())?o:yield e())}catch(t){null==s||s(t)}}))))})))),L})),stopAutoLoad:()=>(p&&(i(y),y=void 0,p=0),L),save:e=>w(void 0,null,(function*(){return 1!=h&&(h=2,yield L.schedule((()=>w(void 0,null,(function*(){try{yield n(t.getContent,e)}catch(t){null==s||s(t)}h=0}))))),L})),startAutoSave:()=>w(void 0,null,(function*(){return yield L.stopAutoSave().save(),c=t.addDidFinishTransactionListener(((t,e)=>{const[n,o]=e();f(n)&&f(o)||L.save((()=>[n,o]))})),L})),stopAutoSave:()=>(u(c,t.delListener),L),schedule:(...t)=>w(void 0,null,(function*(){return((t,...e)=>{t.push(...e)})(g(O,d),...t),yield w(void 0,null,(function*(){if(!g(A,d)){for(S(A,d,1);!r(v=l(g(O,d)));)try{yield v()}catch(t){null==s||s(t)}S(A,d,0)}})),L})),getStore:()=>t,destroy:()=>L.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return a(L)})(i,(()=>J(void 0,null,(function*(){return C.size?[C.get(e).toJSON(),C.get(n).toJSON()]:void 0}))),((o,l)=>J(void 0,null,(function*(){return s.transact((()=>((o,l,i)=>{o.size||(o.set(e,new t),o.set(n,new t));const[s,a]=N(o),d=()=>{c=1};let c=1;if(u(null==i?void 0:i(),(([t,e])=>{c=0,v(t,((t,e)=>c?0:r(t)?s.delete(e):u(s.get(e),(e=>v(t,((t,n)=>c?0:r(t)?e.delete(n):u(e.get(n),(e=>v(t,((t,n)=>r(t)?e.delete(n):e.set(n,t)))),d)))),d))),v(e,((t,e)=>c?0:r(t)?a.delete(e):a.set(e,t)))})),c){const[t,e]=l();x(s,void 0,t,((t,e,n)=>x(s,e,n,((t,e,n)=>x(t,e,n,((t,e,n)=>{if(t.get(e)!==n)return t.set(e,n),1})))))),x(a,void 0,e,((t,e,n)=>{a.get(e)!==n&&a.set(e,n)}))}})(C,o,l)))}))),(t=>{const r=r=>t(void 0,(()=>((t,r)=>{if(1==o(r)&&(i=r[0].path,0==o(i)))return[t.get(e).toJSON(),t.get(n).toJSON()];var i;const[s,a]=N(t),c={},v={};return((t,n)=>{t.forEach((({path:t,changes:{keys:n}})=>l(t)==e?u(l(t),(e=>{const o=y(c,e,d),r=s.get(e);u(l(t),(t=>{const e=y(o,t,d),l=r.get(t);p(n,((t,{action:n})=>e[t]=n==L?null:l.get(t)))}),(()=>p(n,((t,{action:e})=>{var n;return o[t]=e==L?null:null==(n=r.get(t))?void 0:n.toJSON()}))))}),(()=>p(n,((t,{action:e})=>{var n;return c[t]=e==L?null:null==(n=s.get(t))?void 0:n.toJSON()})))):p(n,((t,{action:e})=>v[t]=e==L?null:a.get(t)))))})(r),[c,v]})(C,r)));return C.observeDeep(r),r}),(t=>{C.unobserveDeep(t)}),h)};export{C as createYjsPersister};