@legendapp/state 3.0.0-alpha.0 → 3.0.0-alpha.2

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 (323) hide show
  1. package/.DS_Store +0 -0
  2. package/CHANGELOG.md +1 -827
  3. package/LICENSE +1 -21
  4. package/README.md +1 -141
  5. package/as/arrayAsRecord.d.mts +5 -0
  6. package/as/arrayAsRecord.d.ts +5 -0
  7. package/as/arrayAsRecord.js +28 -0
  8. package/as/arrayAsRecord.mjs +26 -0
  9. package/as/arrayAsSet.d.mts +5 -0
  10. package/as/arrayAsSet.d.ts +5 -0
  11. package/as/arrayAsSet.js +13 -0
  12. package/as/arrayAsSet.mjs +11 -0
  13. package/as/arrayAsString.d.mts +5 -0
  14. package/as/arrayAsString.d.ts +5 -0
  15. package/as/arrayAsString.js +13 -0
  16. package/as/arrayAsString.mjs +11 -0
  17. package/as/numberAsString.d.mts +5 -0
  18. package/as/numberAsString.d.ts +5 -0
  19. package/as/numberAsString.js +13 -0
  20. package/as/numberAsString.mjs +11 -0
  21. package/as/recordAsArray.d.mts +5 -0
  22. package/as/recordAsArray.d.ts +5 -0
  23. package/as/recordAsArray.js +25 -0
  24. package/as/recordAsArray.mjs +23 -0
  25. package/as/recordAsString.d.mts +5 -0
  26. package/as/recordAsString.d.ts +5 -0
  27. package/as/recordAsString.js +13 -0
  28. package/as/recordAsString.mjs +11 -0
  29. package/as/setAsArray.d.mts +5 -0
  30. package/as/setAsArray.d.ts +5 -0
  31. package/as/setAsArray.js +13 -0
  32. package/as/setAsArray.mjs +11 -0
  33. package/as/setAsString.d.mts +5 -0
  34. package/as/setAsString.d.ts +5 -0
  35. package/as/setAsString.js +13 -0
  36. package/as/setAsString.mjs +11 -0
  37. package/as/stringAsArray.d.mts +5 -0
  38. package/as/stringAsArray.d.ts +5 -0
  39. package/as/stringAsArray.js +13 -0
  40. package/as/stringAsArray.mjs +11 -0
  41. package/as/stringAsNumber.d.mts +5 -0
  42. package/as/stringAsNumber.d.ts +5 -0
  43. package/as/stringAsNumber.js +16 -0
  44. package/as/stringAsNumber.mjs +14 -0
  45. package/as/stringAsRecord.d.mts +5 -0
  46. package/as/stringAsRecord.d.ts +5 -0
  47. package/as/stringAsRecord.js +15 -0
  48. package/as/stringAsRecord.mjs +13 -0
  49. package/as/stringAsSet.d.mts +5 -0
  50. package/as/stringAsSet.d.ts +5 -0
  51. package/as/stringAsSet.js +13 -0
  52. package/as/stringAsSet.mjs +11 -0
  53. package/babel.d.mts +21 -0
  54. package/babel.d.ts +21 -2
  55. package/babel.js +57 -53
  56. package/babel.mjs +65 -0
  57. package/config/enable$GetSet.js +13 -14
  58. package/config/enable$GetSet.mjs +13 -14
  59. package/config/enableReactComponents.d.mts +9 -0
  60. package/config/enableReactComponents.d.ts +4 -2
  61. package/config/enableReactComponents.js +13 -10
  62. package/config/enableReactComponents.mjs +13 -10
  63. package/config/enableReactNativeComponents.d.mts +22 -0
  64. package/config/enableReactNativeComponents.d.ts +6 -4
  65. package/config/enableReactNativeComponents.js +43 -47
  66. package/config/enableReactNativeComponents.mjs +43 -47
  67. package/config/enableReactTracking.d.mts +7 -0
  68. package/config/enableReactTracking.d.ts +3 -2
  69. package/config/enableReactTracking.js +33 -38
  70. package/config/enableReactTracking.mjs +33 -38
  71. package/config/enableReactUse.d.mts +10 -0
  72. package/config/enableReactUse.d.ts +4 -1
  73. package/config/enableReactUse.js +15 -14
  74. package/config/enableReactUse.mjs +15 -14
  75. package/config/{enable$GetSet.d.ts → enable_GetSet.d.mts} +4 -2
  76. package/config/enable_GetSet.d.ts +10 -0
  77. package/config/enable_PeekAssign.d.mts +10 -0
  78. package/config/enable_PeekAssign.d.ts +4 -2
  79. package/config/enable_PeekAssign.js +13 -14
  80. package/config/enable_PeekAssign.mjs +13 -14
  81. package/helpers/pageHash.d.mts +9 -0
  82. package/helpers/pageHash.d.ts +2 -0
  83. package/helpers/pageHash.js +25 -30
  84. package/helpers/pageHash.mjs +25 -30
  85. package/helpers/pageHashParams.d.mts +9 -0
  86. package/helpers/pageHashParams.d.ts +2 -0
  87. package/helpers/pageHashParams.js +34 -37
  88. package/helpers/pageHashParams.mjs +34 -37
  89. package/helpers/time.d.mts +6 -0
  90. package/helpers/time.d.ts +6 -3
  91. package/helpers/time.js +17 -17
  92. package/helpers/time.mjs +17 -17
  93. package/helpers/trackHistory.d.mts +6 -0
  94. package/helpers/trackHistory.d.ts +6 -0
  95. package/helpers/trackHistory.js +21 -0
  96. package/helpers/trackHistory.mjs +19 -0
  97. package/helpers/undoRedo.d.mts +37 -0
  98. package/helpers/undoRedo.d.ts +37 -0
  99. package/helpers/undoRedo.js +68 -0
  100. package/helpers/undoRedo.mjs +66 -0
  101. package/index.d.mts +404 -0
  102. package/index.d.ts +371 -28
  103. package/index.js +2003 -2164
  104. package/index.mjs +2003 -2164
  105. package/package.json +254 -185
  106. package/persist-plugins/async-storage.d.mts +18 -0
  107. package/persist-plugins/async-storage.d.ts +6 -3
  108. package/persist-plugins/async-storage.js +79 -86
  109. package/persist-plugins/async-storage.mjs +79 -86
  110. package/persist-plugins/indexeddb.d.mts +29 -0
  111. package/persist-plugins/indexeddb.d.ts +6 -3
  112. package/persist-plugins/indexeddb.js +331 -348
  113. package/persist-plugins/indexeddb.mjs +331 -348
  114. package/persist-plugins/local-storage.d.mts +23 -0
  115. package/persist-plugins/local-storage.d.ts +8 -5
  116. package/persist-plugins/local-storage.js +74 -76
  117. package/persist-plugins/local-storage.mjs +74 -76
  118. package/persist-plugins/mmkv.d.mts +18 -0
  119. package/persist-plugins/mmkv.d.ts +6 -3
  120. package/persist-plugins/mmkv.js +82 -86
  121. package/persist-plugins/mmkv.mjs +82 -86
  122. package/react-hooks/createObservableHook.d.mts +5 -0
  123. package/react-hooks/createObservableHook.d.ts +4 -1
  124. package/react-hooks/createObservableHook.js +29 -30
  125. package/react-hooks/createObservableHook.mjs +25 -30
  126. package/react-hooks/useHover.d.mts +5 -0
  127. package/react-hooks/useHover.d.ts +5 -3
  128. package/react-hooks/useHover.js +29 -29
  129. package/react-hooks/useHover.mjs +29 -29
  130. package/react-hooks/useMeasure.d.mts +9 -0
  131. package/react-hooks/useMeasure.d.ts +5 -2
  132. package/react-hooks/useMeasure.js +30 -32
  133. package/react-hooks/useMeasure.mjs +30 -32
  134. package/react-hooks/useObservableNextRouter.d.mts +35 -0
  135. package/react-hooks/useObservableNextRouter.d.ts +9 -7
  136. package/react-hooks/useObservableNextRouter.js +64 -77
  137. package/react-hooks/useObservableNextRouter.mjs +60 -77
  138. package/react.d.mts +157 -0
  139. package/react.d.ts +157 -21
  140. package/react.js +458 -749
  141. package/react.mjs +457 -752
  142. package/sync-plugins/crud.d.mts +54 -0
  143. package/sync-plugins/crud.d.ts +12 -10
  144. package/sync-plugins/crud.js +253 -270
  145. package/sync-plugins/crud.mjs +253 -270
  146. package/sync-plugins/fetch.d.mts +21 -0
  147. package/sync-plugins/fetch.d.ts +7 -4
  148. package/sync-plugins/fetch.js +50 -37
  149. package/sync-plugins/fetch.mjs +50 -37
  150. package/sync-plugins/keel.d.mts +108 -0
  151. package/sync-plugins/keel.d.ts +17 -15
  152. package/sync-plugins/keel.js +229 -462
  153. package/sync-plugins/keel.mjs +227 -464
  154. package/sync-plugins/supabase.d.mts +39 -0
  155. package/sync-plugins/supabase.d.ts +16 -14
  156. package/sync-plugins/supabase.js +128 -128
  157. package/sync-plugins/supabase.mjs +128 -128
  158. package/sync-plugins/tanstack-query.d.mts +14 -0
  159. package/sync-plugins/tanstack-query.d.ts +7 -4
  160. package/sync-plugins/tanstack-query.js +51 -57
  161. package/sync-plugins/tanstack-query.mjs +51 -57
  162. package/sync-plugins/tanstack-react-query.d.mts +8 -0
  163. package/sync-plugins/tanstack-react-query.d.ts +6 -1
  164. package/sync-plugins/tanstack-react-query.js +2 -2
  165. package/sync-plugins/tanstack-react-query.mjs +2 -2
  166. package/sync.d.mts +351 -0
  167. package/sync.d.ts +349 -9
  168. package/sync.js +909 -962
  169. package/sync.mjs +919 -972
  170. package/trace.d.mts +9 -0
  171. package/trace.d.ts +9 -4
  172. package/trace.js +72 -62
  173. package/trace.mjs +72 -62
  174. package/types/babel.d.ts +1 -12
  175. package/babel.js.map +0 -1
  176. package/config/enable$GetSet.js.map +0 -1
  177. package/config/enable$GetSet.mjs.map +0 -1
  178. package/config/enableReactComponents.js.map +0 -1
  179. package/config/enableReactComponents.mjs.map +0 -1
  180. package/config/enableReactNativeComponents.js.map +0 -1
  181. package/config/enableReactNativeComponents.mjs.map +0 -1
  182. package/config/enableReactTracking.js.map +0 -1
  183. package/config/enableReactTracking.mjs.map +0 -1
  184. package/config/enableReactUse.js.map +0 -1
  185. package/config/enableReactUse.mjs.map +0 -1
  186. package/config/enable_PeekAssign.js.map +0 -1
  187. package/config/enable_PeekAssign.mjs.map +0 -1
  188. package/helpers/pageHash.js.map +0 -1
  189. package/helpers/pageHash.mjs.map +0 -1
  190. package/helpers/pageHashParams.js.map +0 -1
  191. package/helpers/pageHashParams.mjs.map +0 -1
  192. package/helpers/time.js.map +0 -1
  193. package/helpers/time.mjs.map +0 -1
  194. package/history.d.ts +0 -1
  195. package/history.js +0 -24
  196. package/history.js.map +0 -1
  197. package/history.mjs +0 -22
  198. package/history.mjs.map +0 -1
  199. package/index.js.map +0 -1
  200. package/index.mjs.map +0 -1
  201. package/persist-plugins/async-storage.js.map +0 -1
  202. package/persist-plugins/async-storage.mjs.map +0 -1
  203. package/persist-plugins/indexeddb.js.map +0 -1
  204. package/persist-plugins/indexeddb.mjs.map +0 -1
  205. package/persist-plugins/local-storage.js.map +0 -1
  206. package/persist-plugins/local-storage.mjs.map +0 -1
  207. package/persist-plugins/mmkv.js.map +0 -1
  208. package/persist-plugins/mmkv.mjs.map +0 -1
  209. package/react-hooks/createObservableHook.js.map +0 -1
  210. package/react-hooks/createObservableHook.mjs.map +0 -1
  211. package/react-hooks/useHover.js.map +0 -1
  212. package/react-hooks/useHover.mjs.map +0 -1
  213. package/react-hooks/useMeasure.js.map +0 -1
  214. package/react-hooks/useMeasure.mjs.map +0 -1
  215. package/react-hooks/useObservableNextRouter.js.map +0 -1
  216. package/react-hooks/useObservableNextRouter.mjs.map +0 -1
  217. package/react.js.map +0 -1
  218. package/react.mjs.map +0 -1
  219. package/src/ObservableObject.ts +0 -1350
  220. package/src/ObservablePrimitive.ts +0 -62
  221. package/src/babel/index.ts +0 -83
  222. package/src/batching.ts +0 -357
  223. package/src/computed.ts +0 -18
  224. package/src/config/enable$GetSet.ts +0 -30
  225. package/src/config/enableReactComponents.ts +0 -26
  226. package/src/config/enableReactNativeComponents.ts +0 -102
  227. package/src/config/enableReactTracking.ts +0 -62
  228. package/src/config/enableReactUse.ts +0 -32
  229. package/src/config/enable_PeekAssign.ts +0 -31
  230. package/src/config.ts +0 -47
  231. package/src/createObservable.ts +0 -47
  232. package/src/event.ts +0 -26
  233. package/src/globals.ts +0 -235
  234. package/src/helpers/pageHash.ts +0 -41
  235. package/src/helpers/pageHashParams.ts +0 -55
  236. package/src/helpers/time.ts +0 -30
  237. package/src/helpers.ts +0 -231
  238. package/src/history/trackHistory.ts +0 -29
  239. package/src/history/undoRedo.ts +0 -111
  240. package/src/is.ts +0 -63
  241. package/src/linked.ts +0 -17
  242. package/src/observable.ts +0 -32
  243. package/src/observableInterfaces.ts +0 -151
  244. package/src/observableTypes.ts +0 -232
  245. package/src/observe.ts +0 -89
  246. package/src/old-plugins/firebase.ts +0 -1053
  247. package/src/onChange.ts +0 -146
  248. package/src/persist/configureObservablePersistence.ts +0 -7
  249. package/src/persist/fieldTransformer.ts +0 -149
  250. package/src/persist/observablePersistRemoteFunctionsAdapter.ts +0 -39
  251. package/src/persist/persistObservable.ts +0 -1034
  252. package/src/persist-plugins/async-storage.ts +0 -99
  253. package/src/persist-plugins/indexeddb.ts +0 -432
  254. package/src/persist-plugins/local-storage.ts +0 -86
  255. package/src/persist-plugins/mmkv.ts +0 -91
  256. package/src/proxy.ts +0 -28
  257. package/src/react/Computed.tsx +0 -8
  258. package/src/react/For.tsx +0 -116
  259. package/src/react/Memo.tsx +0 -4
  260. package/src/react/Reactive.tsx +0 -53
  261. package/src/react/Show.tsx +0 -33
  262. package/src/react/Switch.tsx +0 -43
  263. package/src/react/react-globals.ts +0 -3
  264. package/src/react/reactInterfaces.ts +0 -32
  265. package/src/react/reactive-observer.tsx +0 -210
  266. package/src/react/useComputed.ts +0 -36
  267. package/src/react/useEffectOnce.ts +0 -41
  268. package/src/react/useIsMounted.ts +0 -16
  269. package/src/react/useMount.ts +0 -15
  270. package/src/react/useObservable.ts +0 -24
  271. package/src/react/useObservableReducer.ts +0 -52
  272. package/src/react/useObservableState.ts +0 -30
  273. package/src/react/useObserve.ts +0 -54
  274. package/src/react/useObserveEffect.ts +0 -40
  275. package/src/react/usePauseProvider.tsx +0 -16
  276. package/src/react/useSelector.ts +0 -167
  277. package/src/react/useUnmount.ts +0 -8
  278. package/src/react/useWhen.ts +0 -9
  279. package/src/react-hooks/createObservableHook.ts +0 -53
  280. package/src/react-hooks/useHover.ts +0 -40
  281. package/src/react-hooks/useMeasure.ts +0 -48
  282. package/src/react-hooks/useObservableNextRouter.ts +0 -137
  283. package/src/retry.ts +0 -71
  284. package/src/setupTracking.ts +0 -26
  285. package/src/sync/activateSyncedNode.ts +0 -128
  286. package/src/sync/configureObservableSync.ts +0 -7
  287. package/src/sync/persistTypes.ts +0 -216
  288. package/src/sync/syncHelpers.ts +0 -180
  289. package/src/sync/syncObservable.ts +0 -1056
  290. package/src/sync/syncObservableAdapter.ts +0 -31
  291. package/src/sync/syncTypes.ts +0 -189
  292. package/src/sync/synced.ts +0 -21
  293. package/src/sync-plugins/crud.ts +0 -412
  294. package/src/sync-plugins/fetch.ts +0 -80
  295. package/src/sync-plugins/keel.ts +0 -495
  296. package/src/sync-plugins/supabase.ts +0 -249
  297. package/src/sync-plugins/tanstack-query.ts +0 -113
  298. package/src/sync-plugins/tanstack-react-query.ts +0 -12
  299. package/src/trace/traceHelpers.ts +0 -11
  300. package/src/trace/useTraceListeners.ts +0 -34
  301. package/src/trace/useTraceUpdates.ts +0 -24
  302. package/src/trace/useVerifyNotTracking.ts +0 -33
  303. package/src/trace/useVerifyOneRender.ts +0 -10
  304. package/src/trackSelector.ts +0 -52
  305. package/src/tracking.ts +0 -43
  306. package/src/types/babel.d.ts +0 -12
  307. package/src/when.ts +0 -75
  308. package/sync-plugins/crud.js.map +0 -1
  309. package/sync-plugins/crud.mjs.map +0 -1
  310. package/sync-plugins/fetch.js.map +0 -1
  311. package/sync-plugins/fetch.mjs.map +0 -1
  312. package/sync-plugins/keel.js.map +0 -1
  313. package/sync-plugins/keel.mjs.map +0 -1
  314. package/sync-plugins/supabase.js.map +0 -1
  315. package/sync-plugins/supabase.mjs.map +0 -1
  316. package/sync-plugins/tanstack-query.js.map +0 -1
  317. package/sync-plugins/tanstack-query.mjs.map +0 -1
  318. package/sync-plugins/tanstack-react-query.js.map +0 -1
  319. package/sync-plugins/tanstack-react-query.mjs.map +0 -1
  320. package/sync.js.map +0 -1
  321. package/sync.mjs.map +0 -1
  322. package/trace.js.map +0 -1
  323. package/trace.mjs.map +0 -1
@@ -1,382 +1,365 @@
1
1
  import { when, isPromise, observable, setAtPath, isPrimitive } from '@legendapp/state';
2
2
 
3
- const MetadataSuffix = '__legend_metadata';
3
+ // src/persist-plugins/indexeddb.ts
4
+ var MetadataSuffix = "__legend_metadata";
5
+ var PrimitiveName = "__legend_primitive";
4
6
  function requestToPromise(request) {
5
- return new Promise((resolve) => (request.onsuccess = () => resolve()));
7
+ return new Promise((resolve) => request.onsuccess = () => resolve());
6
8
  }
7
- class ObservablePersistIndexedDB {
8
- constructor() {
9
- this.tableData = {};
10
- this.tableMetadata = {};
11
- this.tablesAdjusted = new Map();
12
- this.isSaveTaskQueued = false;
13
- this.pendingSaves = new Map();
14
- this.promisesQueued = [];
15
- this.doSave = this.doSave.bind(this);
9
+ var ObservablePersistIndexedDB = class {
10
+ constructor() {
11
+ this.tableData = {};
12
+ this.tableMetadata = {};
13
+ this.tablesAdjusted = /* @__PURE__ */ new Map();
14
+ this.isSaveTaskQueued = false;
15
+ this.pendingSaves = /* @__PURE__ */ new Map();
16
+ this.promisesQueued = [];
17
+ this.doSave = this.doSave.bind(this);
18
+ }
19
+ async initialize(config) {
20
+ if (typeof indexedDB === "undefined")
21
+ return;
22
+ if (process.env.NODE_ENV === "development" && !(config == null ? void 0 : config.indexedDB)) {
23
+ console.error("[legend-state] Must configure ObservablePersistIndexedDB");
16
24
  }
17
- async initialize(config) {
18
- if (typeof indexedDB === 'undefined')
19
- return;
20
- if (process.env.NODE_ENV === 'development' && !(config === null || config === void 0 ? void 0 : config.indexedDB)) {
21
- console.error('[legend-state] Must configure ObservablePersistIndexedDB');
25
+ const { databaseName, version, tableNames } = config.indexedDB;
26
+ const openRequest = indexedDB.open(databaseName, version);
27
+ openRequest.onerror = () => {
28
+ console.error("Error", openRequest.error);
29
+ };
30
+ openRequest.onupgradeneeded = () => {
31
+ const db = openRequest.result;
32
+ const { tableNames: tableNames2 } = config.indexedDB;
33
+ tableNames2.forEach((table) => {
34
+ if (!db.objectStoreNames.contains(table)) {
35
+ db.createObjectStore(table, {
36
+ keyPath: "id"
37
+ });
22
38
  }
23
- const { databaseName, version, tableNames } = config.indexedDB;
24
- const openRequest = indexedDB.open(databaseName, version);
25
- openRequest.onerror = () => {
26
- console.error('Error', openRequest.error);
27
- };
28
- openRequest.onupgradeneeded = () => {
29
- const db = openRequest.result;
30
- const { tableNames } = config.indexedDB;
31
- // Create a table for each name with "id" as the key
32
- tableNames.forEach((table) => {
33
- if (!db.objectStoreNames.contains(table)) {
34
- db.createObjectStore(table, {
35
- keyPath: 'id',
36
- });
37
- }
38
- });
39
- };
40
- return new Promise((resolve) => {
41
- openRequest.onsuccess = async () => {
42
- this.db = openRequest.result;
43
- // Load each table
44
- const objectStoreNames = this.db.objectStoreNames;
45
- const tables = tableNames.filter((table) => objectStoreNames.contains(table));
46
- try {
47
- const transaction = this.db.transaction(tables, 'readonly');
48
- await Promise.all(tables.map((table) => this.initTable(table, transaction)));
49
- }
50
- catch (err) {
51
- console.error('[legend-state] Error loading IndexedDB', err);
52
- }
53
- resolve();
54
- };
55
- });
39
+ });
40
+ };
41
+ return new Promise((resolve) => {
42
+ openRequest.onsuccess = async () => {
43
+ this.db = openRequest.result;
44
+ const objectStoreNames = this.db.objectStoreNames;
45
+ const tables = tableNames.filter((table) => objectStoreNames.contains(table));
46
+ try {
47
+ const transaction = this.db.transaction(tables, "readonly");
48
+ await Promise.all(tables.map((table) => this.initTable(table, transaction)));
49
+ } catch (err) {
50
+ console.error("[legend-state] Error loading IndexedDB", err);
51
+ }
52
+ resolve();
53
+ };
54
+ });
55
+ }
56
+ loadTable(table, config) {
57
+ var _a;
58
+ if (!this.tableData[table]) {
59
+ const transaction = this.db.transaction(table, "readonly");
60
+ return this.initTable(table, transaction).then(() => this.loadTable(table, config));
56
61
  }
57
- loadTable(table, config) {
58
- var _a;
59
- if (!this.tableData[table]) {
60
- const transaction = this.db.transaction(table, 'readonly');
61
- return this.initTable(table, transaction).then(() => this.loadTable(table, config));
62
+ const prefix = (_a = config.indexedDB) == null ? void 0 : _a.prefixID;
63
+ if (prefix) {
64
+ const tableName = prefix ? table + "/" + prefix : table;
65
+ if (this.tablesAdjusted.has(tableName)) {
66
+ const promise = when(this.tablesAdjusted.get(tableName));
67
+ if (isPromise(promise)) {
68
+ return promise;
62
69
  }
63
- const prefix = (_a = config.indexedDB) === null || _a === void 0 ? void 0 : _a.prefixID;
64
- if (prefix) {
65
- const tableName = prefix ? table + '/' + prefix : table;
66
- if (this.tablesAdjusted.has(tableName)) {
67
- const promise = when(this.tablesAdjusted.get(tableName));
68
- if (isPromise(promise)) {
69
- return promise;
70
- }
71
- }
72
- else {
73
- const obsLoaded = observable(false);
74
- this.tablesAdjusted.set(tableName, obsLoaded);
75
- const data = this.getTable(table, {}, config);
76
- let hasPromise = false;
77
- let promises;
78
- if (data) {
79
- const keys = Object.keys(data);
80
- promises = keys.map(async (key) => {
81
- const value = data[key];
82
- if (isPromise(value)) {
83
- hasPromise = true;
84
- return value.then(() => {
85
- data[key] = value;
86
- });
87
- }
88
- else {
89
- data[key] = value;
90
- }
91
- });
92
- }
93
- if (hasPromise) {
94
- return Promise.all(promises).then(() => {
95
- obsLoaded.set(true);
96
- });
97
- }
98
- else {
99
- obsLoaded.set(true);
100
- }
70
+ } else {
71
+ const obsLoaded = observable(false);
72
+ this.tablesAdjusted.set(tableName, obsLoaded);
73
+ const data = this.getTable(table, {}, config);
74
+ let hasPromise = false;
75
+ let promises;
76
+ if (data) {
77
+ const keys = Object.keys(data);
78
+ promises = keys.map(async (key) => {
79
+ const value = data[key];
80
+ if (isPromise(value)) {
81
+ hasPromise = true;
82
+ return value.then(() => {
83
+ data[key] = value;
84
+ });
85
+ } else {
86
+ data[key] = value;
101
87
  }
88
+ });
102
89
  }
103
- }
104
- getTable(table, init, config) {
105
- const configIDB = config.indexedDB;
106
- const prefix = configIDB === null || configIDB === void 0 ? void 0 : configIDB.prefixID;
107
- const data = this.tableData[prefix ? table + '/' + prefix : table];
108
- if (data && (configIDB === null || configIDB === void 0 ? void 0 : configIDB.itemID)) {
109
- return data[configIDB.itemID];
110
- }
111
- else {
112
- return data;
90
+ if (hasPromise) {
91
+ return Promise.all(promises).then(() => {
92
+ obsLoaded.set(true);
93
+ });
94
+ } else {
95
+ obsLoaded.set(true);
113
96
  }
97
+ }
114
98
  }
115
- getMetadata(table, config) {
116
- const { tableName } = this.getMetadataTableName(table, config);
117
- return this.tableMetadata[tableName];
99
+ }
100
+ getTable(table, init, config) {
101
+ const configIDB = config.indexedDB;
102
+ const prefix = configIDB == null ? void 0 : configIDB.prefixID;
103
+ const data = this.tableData[prefix ? table + "/" + prefix : table];
104
+ if (data && (configIDB == null ? void 0 : configIDB.itemID)) {
105
+ return data[configIDB.itemID];
106
+ } else {
107
+ return data;
118
108
  }
119
- async setMetadata(table, metadata, config) {
120
- const { tableName, tableNameBase } = this.getMetadataTableName(table, config);
121
- // Assign new metadata into the table, and make sure it has the id
122
- this.tableMetadata[tableName] = Object.assign(metadata, {
123
- id: tableNameBase + MetadataSuffix,
124
- });
125
- this.tableMetadata[tableName] = metadata;
126
- const store = this.transactionStore(table);
127
- return store.put(metadata);
109
+ }
110
+ getMetadata(table, config) {
111
+ const { tableName } = this.getMetadataTableName(table, config);
112
+ return this.tableMetadata[tableName];
113
+ }
114
+ async setMetadata(table, metadata, config) {
115
+ const { tableName, tableNameBase } = this.getMetadataTableName(table, config);
116
+ this.tableMetadata[tableName] = Object.assign(metadata, {
117
+ id: tableNameBase + MetadataSuffix
118
+ });
119
+ this.tableMetadata[tableName] = metadata;
120
+ const store = this.transactionStore(table);
121
+ return store.put(metadata);
122
+ }
123
+ async deleteMetadata(table, config) {
124
+ const { tableName, tableNameBase } = this.getMetadataTableName(table, config);
125
+ delete this.tableMetadata[tableName];
126
+ const store = this.transactionStore(table);
127
+ const key = tableNameBase + MetadataSuffix;
128
+ store.delete(key);
129
+ }
130
+ async set(table, changes, config) {
131
+ var _a, _b;
132
+ if (typeof indexedDB === "undefined")
133
+ return;
134
+ if (!this.pendingSaves.has(config)) {
135
+ this.pendingSaves.set(config, {});
128
136
  }
129
- async deleteMetadata(table, config) {
130
- const { tableName, tableNameBase } = this.getMetadataTableName(table, config);
131
- delete this.tableMetadata[tableName];
132
- const store = this.transactionStore(table);
133
- const key = tableNameBase + MetadataSuffix;
134
- store.delete(key);
137
+ const pendingSaves = this.pendingSaves.get(config);
138
+ const realTable = table;
139
+ const prefixID = (_a = config.indexedDB) == null ? void 0 : _a.prefixID;
140
+ if (prefixID) {
141
+ table += "/" + prefixID;
135
142
  }
136
- async set(table, changes, config) {
137
- var _a, _b;
138
- if (typeof indexedDB === 'undefined')
139
- return;
140
- if (!this.pendingSaves.has(config)) {
141
- this.pendingSaves.set(config, {});
142
- }
143
- const pendingSaves = this.pendingSaves.get(config);
144
- const realTable = table;
145
- const prefixID = (_a = config.indexedDB) === null || _a === void 0 ? void 0 : _a.prefixID;
146
- if (prefixID) {
147
- table += '/' + prefixID;
148
- }
149
- const prev = this.tableData[table];
150
- const itemID = (_b = config.indexedDB) === null || _b === void 0 ? void 0 : _b.itemID;
151
- if (!pendingSaves[table]) {
152
- pendingSaves[table] = { tableName: realTable, items: new Set() };
143
+ const prev = this.tableData[table];
144
+ const itemID = (_b = config.indexedDB) == null ? void 0 : _b.itemID;
145
+ if (!pendingSaves[table]) {
146
+ pendingSaves[table] = { tableName: realTable, items: /* @__PURE__ */ new Set() };
147
+ }
148
+ const pendingTable = pendingSaves[table];
149
+ for (let i = 0; i < changes.length; i++) {
150
+ let { path, valueAtPath, pathTypes } = changes[i];
151
+ if (itemID) {
152
+ path = [itemID].concat(path);
153
+ pathTypes.splice(0, 0, "object");
154
+ }
155
+ if (path.length > 0) {
156
+ const key = path[0];
157
+ if (!this.tableData[table]) {
158
+ this.tableData[table] = {};
153
159
  }
160
+ this.tableData[table] = setAtPath(this.tableData[table], path, pathTypes, valueAtPath);
161
+ pendingTable.items.add(key);
162
+ } else {
163
+ this.tableData[table] = valueAtPath;
164
+ pendingTable.tablePrev = prev;
165
+ break;
166
+ }
167
+ }
168
+ return new Promise((resolve) => {
169
+ this.promisesQueued.push(resolve);
170
+ if (!this.isSaveTaskQueued) {
171
+ this.isSaveTaskQueued = true;
172
+ queueMicrotask(this.doSave);
173
+ }
174
+ });
175
+ }
176
+ async doSave() {
177
+ this.isSaveTaskQueued = false;
178
+ const promisesQueued = this.promisesQueued;
179
+ this.promisesQueued = [];
180
+ const promises = [];
181
+ let lastPut;
182
+ this.pendingSaves.forEach((pendingSaves, config) => {
183
+ Object.keys(pendingSaves).forEach((table) => {
154
184
  const pendingTable = pendingSaves[table];
155
- // Combine changes into a minimal set of saves
156
- for (let i = 0; i < changes.length; i++) {
157
- // eslint-disable-next-line prefer-const
158
- let { path, valueAtPath, pathTypes } = changes[i];
159
- if (itemID) {
160
- path = [itemID].concat(path);
161
- pathTypes.splice(0, 0, 'object');
162
- }
163
- if (path.length > 0) {
164
- // If change is deep in an object save it to IDB by the first key
165
- const key = path[0];
166
- if (!this.tableData[table]) {
167
- this.tableData[table] = {};
168
- }
169
- this.tableData[table] = setAtPath(this.tableData[table], path, pathTypes, valueAtPath);
170
- pendingTable.items.add(key);
171
- }
172
- else {
173
- // Set the whole table
174
- this.tableData[table] = valueAtPath;
175
- pendingTable.tablePrev = prev;
176
- break;
177
- }
185
+ const { tablePrev, items, tableName } = pendingTable;
186
+ const store = this.transactionStore(tableName);
187
+ const tableValue = this.tableData[table];
188
+ if (tablePrev) {
189
+ promises.push(this._setTable(table, tablePrev, tableValue, store, config));
190
+ } else {
191
+ items.forEach((key) => {
192
+ lastPut = this._setItem(table, key, tableValue[key], store, config);
193
+ });
178
194
  }
179
- return new Promise((resolve) => {
180
- this.promisesQueued.push(resolve);
181
- if (!this.isSaveTaskQueued) {
182
- this.isSaveTaskQueued = true;
183
- queueMicrotask(this.doSave);
184
- }
185
- });
195
+ items.clear();
196
+ delete pendingTable.tablePrev;
197
+ });
198
+ });
199
+ this.pendingSaves.clear();
200
+ if (promises.length) {
201
+ const puts = await Promise.all(promises);
202
+ lastPut = puts[puts.length - 1];
186
203
  }
187
- async doSave() {
188
- this.isSaveTaskQueued = false;
189
- const promisesQueued = this.promisesQueued;
190
- this.promisesQueued = [];
191
- const promises = [];
192
- let lastPut;
193
- this.pendingSaves.forEach((pendingSaves, config) => {
194
- Object.keys(pendingSaves).forEach((table) => {
195
- const pendingTable = pendingSaves[table];
196
- const { tablePrev, items, tableName } = pendingTable;
197
- const store = this.transactionStore(tableName);
198
- const tableValue = this.tableData[table];
199
- if (tablePrev) {
200
- promises.push(this._setTable(table, tablePrev, tableValue, store, config));
201
- }
202
- else {
203
- items.forEach((key) => {
204
- lastPut = this._setItem(table, key, tableValue[key], store, config);
205
- });
206
- }
207
- // Clear pending saves
208
- items.clear();
209
- delete pendingTable.tablePrev;
210
- });
211
- });
212
- this.pendingSaves.clear();
213
- // setTable awaits multiple sets and deletes so we need to await that to get
214
- // the lastPut from it.
215
- if (promises.length) {
216
- const puts = await Promise.all(promises);
217
- lastPut = puts[puts.length - 1];
218
- }
219
- if (lastPut) {
220
- await requestToPromise(lastPut);
221
- }
222
- promisesQueued.forEach((resolve) => resolve());
204
+ if (lastPut) {
205
+ await requestToPromise(lastPut);
223
206
  }
224
- async deleteTable(table, config) {
225
- const configIDB = config.indexedDB;
226
- const prefixID = configIDB === null || configIDB === void 0 ? void 0 : configIDB.prefixID;
227
- const tableName = prefixID ? table + '/' + prefixID : table;
228
- let data = this.tableData[tableName];
229
- const itemID = configIDB === null || configIDB === void 0 ? void 0 : configIDB.itemID;
230
- if (data && (configIDB === null || configIDB === void 0 ? void 0 : configIDB.itemID)) {
231
- const dataTemp = data[itemID];
232
- delete data[itemID];
233
- data = dataTemp;
234
- }
235
- else {
236
- delete this.tableData[tableName];
237
- delete this.tableData[tableName + '_transformed'];
238
- }
239
- if (typeof indexedDB === 'undefined')
240
- return;
241
- this.deleteMetadata(table, config);
242
- if (data) {
243
- const store = this.transactionStore(table);
244
- let result;
245
- if (!prefixID && !itemID) {
246
- result = requestToPromise(store.clear());
247
- }
248
- else {
249
- const keys = Object.keys(data);
250
- result = Promise.all(keys.map((key) => {
251
- if (prefixID) {
252
- key = prefixID + '/' + key;
253
- }
254
- return requestToPromise(store.delete(key));
255
- }));
256
- }
257
- // Clear the table from IDB
258
- return result;
259
- }
207
+ promisesQueued.forEach((resolve) => resolve());
208
+ }
209
+ async deleteTable(table, config) {
210
+ const configIDB = config.indexedDB;
211
+ const prefixID = configIDB == null ? void 0 : configIDB.prefixID;
212
+ const tableName = prefixID ? table + "/" + prefixID : table;
213
+ let data = this.tableData[tableName];
214
+ const itemID = configIDB == null ? void 0 : configIDB.itemID;
215
+ if (data && (configIDB == null ? void 0 : configIDB.itemID)) {
216
+ const dataTemp = data[itemID];
217
+ delete data[itemID];
218
+ data = dataTemp;
219
+ } else {
220
+ delete this.tableData[tableName];
221
+ delete this.tableData[tableName + "_transformed"];
260
222
  }
261
- // Private
262
- getMetadataTableName(table, config) {
263
- const configIDB = config.indexedDB;
264
- let name = '';
265
- if (configIDB) {
266
- const { prefixID, itemID } = configIDB;
267
- if (itemID) {
268
- name = itemID;
269
- }
223
+ if (typeof indexedDB === "undefined")
224
+ return;
225
+ this.deleteMetadata(table, config);
226
+ if (data) {
227
+ const store = this.transactionStore(table);
228
+ let result;
229
+ if (!prefixID && !itemID) {
230
+ result = requestToPromise(store.clear());
231
+ } else {
232
+ const keys = Object.keys(data);
233
+ result = Promise.all(
234
+ keys.map((key) => {
270
235
  if (prefixID) {
271
- name = prefixID + (name ? '/' + name : '');
236
+ key = prefixID + "/" + key;
272
237
  }
273
- }
274
- return { tableNameBase: name, tableName: name ? table + '/' + name : table };
238
+ return requestToPromise(store.delete(key));
239
+ })
240
+ );
241
+ }
242
+ return result;
275
243
  }
276
- initTable(table, transaction) {
277
- const store = transaction.objectStore(table);
278
- const allRequest = store.getAll();
279
- if (!this.tableData[table]) {
280
- this.tableData[table] = {};
281
- }
282
- return new Promise((resolve) => {
283
- allRequest.onsuccess = () => {
284
- const arr = allRequest.result;
285
- let metadata;
286
- if (!this.tableData[table]) {
287
- this.tableData[table] = {};
288
- }
289
- for (let i = 0; i < arr.length; i++) {
290
- const val = arr[i];
291
- // In case id is a number convert it to a string
292
- if (!val.id.includes) {
293
- val.id = val.id + '';
294
- }
295
- if (val.id.endsWith(MetadataSuffix)) {
296
- const id = val.id.replace(MetadataSuffix, '');
297
- // Save this as metadata
298
- delete val.id;
299
- metadata = val;
300
- const tableName = id ? table + '/' + id : table;
301
- this.tableMetadata[tableName] = metadata;
302
- }
303
- else {
304
- let tableName = table;
305
- if (val.id.includes('/')) {
306
- const [prefix, id] = val.id.split('/');
307
- tableName += '/' + prefix;
308
- val.id = id;
309
- }
310
- if (!this.tableData[tableName]) {
311
- this.tableData[tableName] = {};
312
- }
313
- this.tableData[tableName][val.id] = val;
314
- }
315
- }
316
- resolve();
317
- };
318
- });
244
+ }
245
+ // Private
246
+ getMetadataTableName(table, config) {
247
+ const configIDB = config.indexedDB;
248
+ let name = "";
249
+ if (configIDB) {
250
+ const { prefixID, itemID } = configIDB;
251
+ if (itemID) {
252
+ name = itemID;
253
+ }
254
+ if (prefixID) {
255
+ name = prefixID + (name ? "/" + name : "");
256
+ }
319
257
  }
320
- transactionStore(table) {
321
- const transaction = this.db.transaction(table, 'readwrite');
322
- return transaction.objectStore(table);
258
+ return { tableNameBase: name, tableName: name ? table + "/" + name : table };
259
+ }
260
+ initTable(table, transaction) {
261
+ const store = transaction.objectStore(table);
262
+ const allRequest = store.getAll();
263
+ if (!this.tableData[table]) {
264
+ this.tableData[table] = {};
323
265
  }
324
- _setItem(table, key, value, store, config) {
325
- var _a;
326
- if (!value) {
327
- if (this.tableData[table]) {
328
- delete this.tableData[table][key];
329
- }
330
- return store.delete(key);
266
+ return new Promise((resolve) => {
267
+ allRequest.onsuccess = () => {
268
+ const arr = allRequest.result;
269
+ let metadata;
270
+ if (!this.tableData[table]) {
271
+ this.tableData[table] = {};
331
272
  }
332
- else {
333
- if (isPrimitive(value))
334
- return;
335
- if (value.id === undefined) {
336
- // If value does not have its own ID, assign it the key from the Record
337
- value.id = key;
273
+ for (let i = 0; i < arr.length; i++) {
274
+ const val = arr[i];
275
+ if (!val.id.includes) {
276
+ val.id = val.id + "";
277
+ }
278
+ if (val.id.endsWith(MetadataSuffix)) {
279
+ const id = val.id.replace(MetadataSuffix, "");
280
+ delete val.id;
281
+ metadata = val;
282
+ const tableName = id ? table + "/" + id : table;
283
+ this.tableMetadata[tableName] = metadata;
284
+ } else {
285
+ let tableName = table;
286
+ if (val.id.includes("/")) {
287
+ const [prefix, id2] = val.id.split("/");
288
+ tableName += "/" + prefix;
289
+ val.id = id2;
338
290
  }
339
- if (config) {
340
- if (!this.tableData[table]) {
341
- this.tableData[table] = {};
342
- }
343
- this.tableData[table][key] = value;
344
- const prefixID = (_a = config.indexedDB) === null || _a === void 0 ? void 0 : _a.prefixID;
345
- if (prefixID) {
346
- {
347
- value = Object.assign({}, value, {
348
- id: prefixID + '/' + value.id,
349
- });
350
- }
351
- }
291
+ const id = val.id;
292
+ const outValue = val[PrimitiveName] !== void 0 ? val[PrimitiveName] : val;
293
+ if (!this.tableData[tableName]) {
294
+ this.tableData[tableName] = {};
352
295
  }
353
- return store.put(value);
296
+ this.tableData[tableName][id] = outValue;
297
+ }
354
298
  }
355
- }
356
- async _setTable(table, prev, value, store, config) {
357
- const keys = Object.keys(value);
358
- let lastSet;
359
- // Do a set for each key in the object
360
- const sets = await Promise.all(keys.map((key) => {
361
- const val = value[key];
362
- return this._setItem(table, key, val, store, config);
363
- }));
364
- lastSet = sets[sets.length - 1];
365
- // Delete keys that are no longer in the object
366
- if (prev) {
367
- const keysOld = Object.keys(prev);
368
- const deletes = (await Promise.all(keysOld.map((key) => {
369
- if (value[key] === undefined) {
370
- return this._setItem(table, key, null, store, config);
371
- }
372
- }))).filter((a) => !!a);
373
- if (deletes.length > 0) {
374
- lastSet = deletes[deletes.length - 1];
375
- }
299
+ resolve();
300
+ };
301
+ });
302
+ }
303
+ transactionStore(table) {
304
+ const transaction = this.db.transaction(table, "readwrite");
305
+ return transaction.objectStore(table);
306
+ }
307
+ _setItem(table, key, value, store, config) {
308
+ var _a;
309
+ if (!value) {
310
+ if (this.tableData[table]) {
311
+ delete this.tableData[table][key];
312
+ }
313
+ return store.delete(key);
314
+ } else {
315
+ if (isPrimitive(value)) {
316
+ value = { [PrimitiveName]: value };
317
+ }
318
+ if (value.id === void 0) {
319
+ value.id = key;
320
+ }
321
+ if (config) {
322
+ if (!this.tableData[table]) {
323
+ this.tableData[table] = {};
376
324
  }
377
- return lastSet;
325
+ this.tableData[table][key] = value;
326
+ const prefixID = (_a = config.indexedDB) == null ? void 0 : _a.prefixID;
327
+ if (prefixID) {
328
+ {
329
+ value = Object.assign({}, value, {
330
+ id: prefixID + "/" + value.id
331
+ });
332
+ }
333
+ }
334
+ }
335
+ return store.put(value);
378
336
  }
379
- }
337
+ }
338
+ async _setTable(table, prev, value, store, config) {
339
+ const keys = Object.keys(value);
340
+ let lastSet;
341
+ const sets = await Promise.all(
342
+ keys.map((key) => {
343
+ const val = value[key];
344
+ return this._setItem(table, key, val, store, config);
345
+ })
346
+ );
347
+ lastSet = sets[sets.length - 1];
348
+ if (prev) {
349
+ const keysOld = Object.keys(prev);
350
+ const deletes = (await Promise.all(
351
+ keysOld.map((key) => {
352
+ if (value[key] === void 0) {
353
+ return this._setItem(table, key, null, store, config);
354
+ }
355
+ })
356
+ )).filter((a) => !!a);
357
+ if (deletes.length > 0) {
358
+ lastSet = deletes[deletes.length - 1];
359
+ }
360
+ }
361
+ return lastSet;
362
+ }
363
+ };
380
364
 
381
365
  export { ObservablePersistIndexedDB };
382
- //# sourceMappingURL=indexeddb.mjs.map