tinybase 4.2.0-beta.0 → 4.2.0

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 (97) 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/ui-react-dom-debug.cjs +1 -1
  10. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  11. package/lib/cjs/ui-react-dom.cjs +1 -1
  12. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  13. package/lib/cjs/ui-react.cjs +1 -1
  14. package/lib/cjs/ui-react.cjs.gz +0 -0
  15. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -0
  16. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  17. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  18. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  19. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  20. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  21. package/lib/cjs-es6/tools.cjs +1 -1
  22. package/lib/cjs-es6/tools.cjs.gz +0 -0
  23. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  24. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  25. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  26. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  27. package/lib/cjs-es6/ui-react.cjs +1 -1
  28. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  29. package/lib/debug/persisters/persister-browser.js +13 -8
  30. package/lib/debug/persisters/persister-indexed-db.js +272 -0
  31. package/lib/debug/persisters/persister-remote.js +1 -1
  32. package/lib/debug/persisters/persister-yjs.js +10 -16
  33. package/lib/debug/tools.js +21 -5
  34. package/lib/debug/ui-react-dom.js +187 -126
  35. package/lib/debug/ui-react.js +4 -3
  36. package/lib/es6/persisters/persister-indexed-db.js +1 -0
  37. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  38. package/lib/es6/persisters/persister-remote.js +1 -1
  39. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  40. package/lib/es6/persisters/persister-yjs.js +1 -1
  41. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  42. package/lib/es6/tools.js +1 -1
  43. package/lib/es6/tools.js.gz +0 -0
  44. package/lib/es6/ui-react-dom-debug.js +1 -1
  45. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  46. package/lib/es6/ui-react-dom.js +1 -1
  47. package/lib/es6/ui-react-dom.js.gz +0 -0
  48. package/lib/es6/ui-react.js +1 -1
  49. package/lib/es6/ui-react.js.gz +0 -0
  50. package/lib/persisters/persister-indexed-db.js +1 -0
  51. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  52. package/lib/persisters/persister-remote.js +1 -1
  53. package/lib/persisters/persister-remote.js.gz +0 -0
  54. package/lib/persisters/persister-yjs.js +1 -1
  55. package/lib/persisters/persister-yjs.js.gz +0 -0
  56. package/lib/tools.js +1 -1
  57. package/lib/tools.js.gz +0 -0
  58. package/lib/types/persisters/persister-indexed-db.d.ts +75 -0
  59. package/lib/types/persisters/persister-remote.d.ts +2 -2
  60. package/lib/types/persisters.d.ts +1 -0
  61. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +86 -0
  62. package/lib/types/with-schemas/persisters/persister-remote.d.ts +3 -3
  63. package/lib/types/with-schemas/persisters.d.ts +1 -0
  64. package/lib/ui-react-dom.js +1 -1
  65. package/lib/ui-react-dom.js.gz +0 -0
  66. package/lib/ui-react.js +1 -1
  67. package/lib/ui-react.js.gz +0 -0
  68. package/lib/umd/persisters/persister-indexed-db.js +1 -0
  69. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  70. package/lib/umd/persisters/persister-remote.js +1 -1
  71. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  72. package/lib/umd/persisters/persister-yjs.js +1 -1
  73. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  74. package/lib/umd/tools.js +1 -1
  75. package/lib/umd/tools.js.gz +0 -0
  76. package/lib/umd/ui-react-dom-debug.js +1 -1
  77. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  78. package/lib/umd/ui-react-dom.js +1 -1
  79. package/lib/umd/ui-react-dom.js.gz +0 -0
  80. package/lib/umd/ui-react.js +1 -1
  81. package/lib/umd/ui-react.js.gz +0 -0
  82. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -0
  83. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  84. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  85. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  86. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  87. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  88. package/lib/umd-es6/tools.js +1 -1
  89. package/lib/umd-es6/tools.js.gz +0 -0
  90. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  91. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  92. package/lib/umd-es6/ui-react-dom.js +1 -1
  93. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  94. package/lib/umd-es6/ui-react.js +1 -1
  95. package/lib/umd-es6/ui-react.js.gz +0 -0
  96. package/package.json +29 -27
  97. package/readme.md +13 -13
@@ -82,8 +82,9 @@ const isArray = (thing) => Array.isArray(thing);
82
82
  const test = (regex, subject) => regex.test(subject);
83
83
 
84
84
  const {
85
- createElement,
85
+ PureComponent,
86
86
  Fragment,
87
+ createElement,
87
88
  useCallback: useCallback$1,
88
89
  useLayoutEffect,
89
90
  useRef,
@@ -194,84 +195,89 @@ const EDIT_SVG = PRE + `<path d='${PENCIL}' />` + POST;
194
195
  const DONE_SVG = PRE + `<path d='${PENCIL}M20 20l60 60' />` + POST;
195
196
 
196
197
  const SCROLLBAR = '*::-webkit-scrollbar';
197
- const APP_STYLESHEET = arrayJoin(
198
- objMap(
199
- {
200
- '': 'all:initial;font-family:sans-serif;font-size:0.75rem;position:fixed;z-index:999999',
201
- '*': 'all:revert',
202
- '*::before': 'all:revert',
203
- '*::after': 'all:revert',
204
- [SCROLLBAR]: 'width:0.5rem;height:0.5rem;',
205
- [SCROLLBAR + '-track']: 'background:#111',
206
- [SCROLLBAR + '-thumb']: 'background:#999;border:1px solid #111',
207
- [SCROLLBAR + '-thumb:hover']: 'background:#fff',
208
- [SCROLLBAR + '-corner']: 'background:#111',
209
- img: 'width:1rem;height:1rem;background:#111;border:0;vertical-align:text-bottom',
210
- // Nub
211
- '>img': 'padding:0.25rem;bottom:0;right:0;position:fixed;' + LOGO_SVG,
212
- ...objNew(
213
- arrayMap(['bottom:0;left:0', 'top:0;right:0'], (css, p) => [
214
- `>img[data-position='${p}']`,
215
- css,
216
- ]),
217
- ),
218
- // Panel
219
- main: 'display:flex;flex-direction:column;background:#111d;color:#fff;position:fixed;',
220
- ...objNew(
221
- arrayMap(
222
- [
223
- 'bottom:0;left:0;width:35vw;height:100vh',
224
- 'top:0;right:0;width:100vw;height:30vh',
225
- 'bottom:0;left:0;width:100vw;height:30vh',
226
- 'top:0;right:0;width:35vw;height:100vh',
227
- 'top:0;right:0;width:100vw;height:100vh',
228
- ],
229
- (css, p) => [`main[data-position='${p}']`, css],
198
+ const APP_STYLESHEET = `#${UNIQUE_ID}{
199
+ all:initial;font-family:sans-serif;font-size:0.75rem;position:fixed;z-index:999999;
200
+ ${arrayJoin(
201
+ objMap(
202
+ {
203
+ '*': 'all:revert',
204
+ '*::before': 'all:revert',
205
+ '*::after': 'all:revert',
206
+ [SCROLLBAR]: 'width:0.5rem;height:0.5rem;',
207
+ [SCROLLBAR + '-track']: 'background:#111',
208
+ [SCROLLBAR + '-thumb']: 'background:#999;border:1px solid #111',
209
+ [SCROLLBAR + '-thumb:hover']: 'background:#fff',
210
+ [SCROLLBAR + '-corner']: 'background:#111',
211
+ img: 'width:1rem;height:1rem;background:#111;border:0;vertical-align:text-bottom',
212
+ // Nub
213
+ '>img': 'padding:0.25rem;bottom:0;right:0;position:fixed;' + LOGO_SVG,
214
+ ...objNew(
215
+ arrayMap(['bottom:0;left:0', 'top:0;right:0'], (css, p) => [
216
+ `>img[data-position='${p}']`,
217
+ css,
218
+ ]),
230
219
  ),
231
- ),
232
- // Header
233
- header: 'display:flex;padding:0.25rem;background:#000;align-items:center',
234
- 'header>img:nth-of-type(1)': LOGO_SVG,
235
- 'header>img:nth-of-type(6)': CLOSE_SVG,
236
- ...objNew(
237
- arrayMap(POSITIONS_SVG, (SVG, p) => [
238
- `header>img[data-id='${p}']`,
239
- SVG,
240
- ]),
241
- ),
242
- 'header>span':
243
- 'flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-left:0.25rem',
244
- // Body
245
- article: 'padding:0.25rem 0.25rem 0.25rem 0.5rem;overflow:auto;flex:1',
246
- details: 'margin-left:0.75rem;width:fit-content;',
247
- 'details img': 'display:none',
248
- 'details[open]>summary img':
249
- 'display:unset;background:none;margin-left:0.25rem',
250
- 'details[open]>summary img.edit': EDIT_SVG,
251
- 'details[open]>summary img.done': DONE_SVG,
252
- summary:
253
- 'margin-left:-0.75rem;line-height:1.25rem;user-select:none;width:fit-content',
254
- // tables
255
- table: 'border-collapse:collapse;table-layout:fixed;margin-bottom:0.5rem',
256
- 'table input':
257
- 'background:#111;color:unset;padding:0 0.25rem;border:0;font-size:unset;vertical-align:top;margin:0',
258
- 'table input[type="number"]': 'width:4rem',
259
- 'table tbody button':
260
- 'font-size:0;background:#fff;border-radius:50%;margin:0 0.125rem 0 0;width:0.85rem;color:#111',
261
- 'table button:first-letter': 'font-size:0.75rem',
262
- thead: 'background:#222',
263
- 'th:nth-of-type(1)': 'min-width:2rem;',
264
- 'th.sorted': 'background:#000',
265
- 'table caption': 'text-align:left;white-space:nowrap;line-height:1.25rem',
266
- button: 'width:1.5rem;border:none;background:none;color:#fff;padding:0',
267
- 'button[disabled]': 'color:#777',
268
- 'button.next': 'margin-right:0.5rem',
269
- [`th,#${UNIQUE_ID} td`]:
270
- 'overflow:hidden;text-overflow:ellipsis;padding:0.25rem 0.5rem;max-width:12rem;white-space:nowrap;border-width:1px 0;border-style:solid;border-color:#777;text-align:left',
271
- },
272
- (style, selector) => (style ? `#${UNIQUE_ID} ${selector}{${style}}` : ''),
273
- ),
274
- );
220
+ // Panel
221
+ main: 'display:flex;flex-direction:column;background:#111d;color:#fff;position:fixed;',
222
+ ...objNew(
223
+ arrayMap(
224
+ [
225
+ 'bottom:0;left:0;width:35vw;height:100vh',
226
+ 'top:0;right:0;width:100vw;height:30vh',
227
+ 'bottom:0;left:0;width:100vw;height:30vh',
228
+ 'top:0;right:0;width:35vw;height:100vh',
229
+ 'top:0;right:0;width:100vw;height:100vh',
230
+ ],
231
+ (css, p) => [`main[data-position='${p}']`, css],
232
+ ),
233
+ ),
234
+ // Header
235
+ header:
236
+ 'display:flex;padding:0.25rem;background:#000;align-items:center',
237
+ 'header>img:nth-of-type(1)': LOGO_SVG,
238
+ 'header>img:nth-of-type(6)': CLOSE_SVG,
239
+ ...objNew(
240
+ arrayMap(POSITIONS_SVG, (SVG, p) => [
241
+ `header>img[data-id='${p}']`,
242
+ SVG,
243
+ ]),
244
+ ),
245
+ 'header>span':
246
+ 'flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-left:0.25rem',
247
+ // Body
248
+ article: 'padding:0.25rem 0.25rem 0.25rem 0.5rem;overflow:auto;flex:1',
249
+ details: 'margin-left:0.75rem;width:fit-content;',
250
+ 'details img': 'display:none',
251
+ 'details[open]>summary img':
252
+ 'display:unset;background:none;margin-left:0.25rem',
253
+ 'details[open]>summary img.edit': EDIT_SVG,
254
+ 'details[open]>summary img.done': DONE_SVG,
255
+ summary:
256
+ 'margin-left:-0.75rem;line-height:1.25rem;user-select:none;width:fit-content',
257
+ // tables
258
+ table:
259
+ 'border-collapse:collapse;table-layout:fixed;margin-bottom:0.5rem',
260
+ 'table input':
261
+ 'background:#111;color:unset;padding:0 0.25rem;border:0;font-size:unset;vertical-align:top;margin:0',
262
+ 'table input[type="number"]': 'width:4rem',
263
+ 'table tbody button':
264
+ 'font-size:0;background:#fff;border-radius:50%;margin:0 0.125rem 0 0;width:0.85rem;color:#111',
265
+ 'table button:first-letter': 'font-size:0.75rem',
266
+ thead: 'background:#222',
267
+ 'th:nth-of-type(1)': 'min-width:2rem;',
268
+ 'th.sorted': 'background:#000',
269
+ 'table caption':
270
+ 'text-align:left;white-space:nowrap;line-height:1.25rem',
271
+ button: 'width:1.5rem;border:none;background:none;color:#fff;padding:0',
272
+ 'button[disabled]': 'color:#777',
273
+ 'button.next': 'margin-right:0.5rem',
274
+ [`th,td`]:
275
+ 'overflow:hidden;text-overflow:ellipsis;padding:0.25rem 0.5rem;max-width:12rem;white-space:nowrap;border-width:1px 0;border-style:solid;border-color:#777;text-align:left',
276
+ 'span.warn': 'margin:0.25rem;color:#d81b60',
277
+ },
278
+ (style, selector) => (style ? `& ${selector}{${style}}` : ''),
279
+ ),
280
+ )}`;
275
281
 
276
282
  const Nub = ({s}) => {
277
283
  const position = useValue(POSITION_VALUE, s) ?? 1;
@@ -1335,48 +1341,94 @@ const Body = ({s}) => {
1335
1341
  },
1336
1342
  [s],
1337
1343
  );
1338
- return /* @__PURE__ */ createElement(
1339
- 'article',
1340
- {ref: articleRef, onScroll: handleScroll},
1341
- /* @__PURE__ */ createElement(StoreView, {s}),
1342
- arrayMap(useStoreIds(), (storeId) =>
1343
- /* @__PURE__ */ createElement(StoreView, {storeId, key: storeId, s}),
1344
- ),
1345
- /* @__PURE__ */ createElement(MetricsView, {s}),
1346
- arrayMap(useMetricsIds(), (metricsId) =>
1347
- /* @__PURE__ */ createElement(MetricsView, {
1348
- metricsId,
1349
- key: metricsId,
1350
- s,
1351
- }),
1352
- ),
1353
- /* @__PURE__ */ createElement(IndexesView, {s}),
1354
- arrayMap(useIndexesIds(), (indexesId) =>
1355
- /* @__PURE__ */ createElement(IndexesView, {
1356
- indexesId,
1357
- key: indexesId,
1358
- s,
1359
- }),
1360
- ),
1361
- /* @__PURE__ */ createElement(RelationshipsView, {s}),
1362
- arrayMap(useRelationshipsIds(), (relationshipsId) =>
1363
- /* @__PURE__ */ createElement(RelationshipsView, {
1364
- relationshipsId,
1365
- key: relationshipsId,
1366
- s,
1367
- }),
1368
- ),
1369
- /* @__PURE__ */ createElement(QueriesView, {s}),
1370
- arrayMap(useQueriesIds(), (queriesId) =>
1371
- /* @__PURE__ */ createElement(QueriesView, {
1372
- queriesId,
1373
- key: queriesId,
1374
- s,
1375
- }),
1376
- ),
1377
- );
1344
+ const store = useStore();
1345
+ const storeIds = useStoreIds();
1346
+ const metrics = useMetrics();
1347
+ const metricsIds = useMetricsIds();
1348
+ const indexes = useIndexes();
1349
+ const indexesIds = useIndexesIds();
1350
+ const relationships = useRelationships();
1351
+ const relationshipsIds = useRelationshipsIds();
1352
+ const queries = useQueries();
1353
+ const queriesIds = useQueriesIds();
1354
+ return isUndefined(store) &&
1355
+ arrayIsEmpty(storeIds) &&
1356
+ isUndefined(metrics) &&
1357
+ arrayIsEmpty(metricsIds) &&
1358
+ isUndefined(indexes) &&
1359
+ arrayIsEmpty(indexesIds) &&
1360
+ isUndefined(relationships) &&
1361
+ arrayIsEmpty(relationshipsIds) &&
1362
+ isUndefined(queries) &&
1363
+ arrayIsEmpty(queriesIds)
1364
+ ? /* @__PURE__ */ createElement(
1365
+ 'span',
1366
+ {className: 'warn'},
1367
+ 'There are no Stores or other objects to inspect. Make sure you placed the StoreInspector inside a Provider component.',
1368
+ )
1369
+ : /* @__PURE__ */ createElement(
1370
+ 'article',
1371
+ {ref: articleRef, onScroll: handleScroll},
1372
+ /* @__PURE__ */ createElement(StoreView, {s}),
1373
+ arrayMap(storeIds, (storeId) =>
1374
+ /* @__PURE__ */ createElement(StoreView, {storeId, key: storeId, s}),
1375
+ ),
1376
+ /* @__PURE__ */ createElement(MetricsView, {s}),
1377
+ arrayMap(metricsIds, (metricsId) =>
1378
+ /* @__PURE__ */ createElement(MetricsView, {
1379
+ metricsId,
1380
+ key: metricsId,
1381
+ s,
1382
+ }),
1383
+ ),
1384
+ /* @__PURE__ */ createElement(IndexesView, {s}),
1385
+ arrayMap(indexesIds, (indexesId) =>
1386
+ /* @__PURE__ */ createElement(IndexesView, {
1387
+ indexesId,
1388
+ key: indexesId,
1389
+ s,
1390
+ }),
1391
+ ),
1392
+ /* @__PURE__ */ createElement(RelationshipsView, {s}),
1393
+ arrayMap(relationshipsIds, (relationshipsId) =>
1394
+ /* @__PURE__ */ createElement(RelationshipsView, {
1395
+ relationshipsId,
1396
+ key: relationshipsId,
1397
+ s,
1398
+ }),
1399
+ ),
1400
+ /* @__PURE__ */ createElement(QueriesView, {s}),
1401
+ arrayMap(queriesIds, (queriesId) =>
1402
+ /* @__PURE__ */ createElement(QueriesView, {
1403
+ queriesId,
1404
+ key: queriesId,
1405
+ s,
1406
+ }),
1407
+ ),
1408
+ );
1378
1409
  };
1379
1410
 
1411
+ class ErrorBoundary extends PureComponent {
1412
+ constructor(props) {
1413
+ super(props);
1414
+ this.state = {e: 0};
1415
+ }
1416
+ static getDerivedStateFromError = () => ({e: 1});
1417
+ // eslint-disable-next-line react/no-arrow-function-lifecycle
1418
+ componentDidCatch = (error, info) =>
1419
+ // eslint-disable-next-line no-console
1420
+ console.error(error, info.componentStack);
1421
+ render() {
1422
+ return this.state.e
1423
+ ? /* @__PURE__ */ createElement(
1424
+ 'span',
1425
+ {className: 'warn'},
1426
+ 'Inspector error: please see console for details.',
1427
+ )
1428
+ : this.props.children;
1429
+ }
1430
+ }
1431
+
1380
1432
  const Header = ({s}) => {
1381
1433
  const position = useValue(POSITION_VALUE, s) ?? 1;
1382
1434
  const handleClose = useSetValueCallback(OPEN_VALUE, () => false, [], s);
@@ -1415,7 +1467,11 @@ const Panel = ({s}) => {
1415
1467
  'main',
1416
1468
  {'data-position': position},
1417
1469
  /* @__PURE__ */ createElement(Header, {s}),
1418
- /* @__PURE__ */ createElement(Body, {s}),
1470
+ /* @__PURE__ */ createElement(
1471
+ ErrorBoundary,
1472
+ null,
1473
+ /* @__PURE__ */ createElement(Body, {s}),
1474
+ ),
1419
1475
  )
1420
1476
  : null;
1421
1477
  };
@@ -1643,21 +1699,26 @@ const createCustomPersister = (
1643
1699
 
1644
1700
  const STORAGE = 'storage';
1645
1701
  const WINDOW = globalThis.window;
1646
- const getStoragePersister = (store, storageName, storage, onIgnoredError) => {
1702
+ const createStoragePersister = (
1703
+ store,
1704
+ storageName,
1705
+ storage,
1706
+ onIgnoredError,
1707
+ ) => {
1647
1708
  const getPersisted = async () => jsonParse(storage.getItem(storageName));
1648
1709
  const setPersisted = async (getContent) =>
1649
1710
  storage.setItem(storageName, jsonString(getContent()));
1650
1711
  const addPersisterListener = (listener) => {
1651
- const storeListener = (event) => {
1712
+ const storageListener = (event) => {
1652
1713
  if (event.storageArea === storage && event.key === storageName) {
1653
1714
  listener(() => jsonParse(event.newValue));
1654
1715
  }
1655
1716
  };
1656
- WINDOW.addEventListener(STORAGE, storeListener);
1657
- return storeListener;
1717
+ WINDOW.addEventListener(STORAGE, storageListener);
1718
+ return storageListener;
1658
1719
  };
1659
- const delPersisterListener = (storeListener) =>
1660
- WINDOW.removeEventListener(STORAGE, storeListener);
1720
+ const delPersisterListener = (storageListener) =>
1721
+ WINDOW.removeEventListener(STORAGE, storageListener);
1661
1722
  return createCustomPersister(
1662
1723
  store,
1663
1724
  getPersisted,
@@ -1668,7 +1729,7 @@ const getStoragePersister = (store, storageName, storage, onIgnoredError) => {
1668
1729
  );
1669
1730
  };
1670
1731
  const createSessionPersister = (store, storageName, onIgnoredError) =>
1671
- getStoragePersister(store, storageName, sessionStorage, onIgnoredError);
1732
+ createStoragePersister(store, storageName, sessionStorage, onIgnoredError);
1672
1733
 
1673
1734
  const setNew = (entryOrEntries) =>
1674
1735
  new Set(
@@ -43,7 +43,7 @@ const useThing = (id, offset) => {
43
43
  return isUndefined(id)
44
44
  ? contextValue[offset]
45
45
  : isString(id)
46
- ? objGet(contextValue[offset + 1], id)
46
+ ? objGet(contextValue[offset + 1] ?? {}, id)
47
47
  : id;
48
48
  };
49
49
  const useThingOrThingById = (thingOrThingId, offset) => {
@@ -52,7 +52,7 @@ const useThingOrThingById = (thingOrThingId, offset) => {
52
52
  ? thing
53
53
  : thingOrThingId;
54
54
  };
55
- const useThingIds = (offset) => objIds(useContext(Context)[offset]);
55
+ const useThingIds = (offset) => objIds(useContext(Context)[offset] ?? {});
56
56
  const useStore = (id) => useThing(id, 0);
57
57
  const useStoreOrStoreById = (storeOrStoreId) =>
58
58
  useThingOrThingById(storeOrStoreId, 0);
@@ -1077,8 +1077,9 @@ const useCreatePersister = (
1077
1077
  };
1078
1078
 
1079
1079
  const {
1080
- createElement,
1080
+ PureComponent,
1081
1081
  Fragment,
1082
+ createElement,
1082
1083
  useCallback,
1083
1084
  useLayoutEffect,
1084
1085
  useRef,
@@ -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};