@verdant-web/store 2.7.6 → 2.7.7-next.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 (716) hide show
  1. package/dist/bundle/index.js +9 -9
  2. package/dist/bundle/index.js.map +4 -4
  3. package/dist/cjs/AckInfoStore.d.ts +10 -0
  4. package/dist/cjs/AckInfoStore.js +26 -0
  5. package/dist/cjs/AckInfoStore.js.map +1 -0
  6. package/dist/cjs/BackoffScheduler.d.ts +19 -19
  7. package/dist/cjs/BackoffScheduler.js +44 -44
  8. package/dist/cjs/BaselinesStore.d.ts +10 -0
  9. package/dist/cjs/BaselinesStore.js +36 -0
  10. package/dist/cjs/BaselinesStore.js.map +1 -0
  11. package/dist/cjs/DocumentManager.d.ts +31 -28
  12. package/dist/cjs/DocumentManager.js +44 -44
  13. package/dist/cjs/Entity.d.ts +96 -0
  14. package/dist/cjs/Entity.js +345 -0
  15. package/dist/cjs/Entity.js.map +1 -0
  16. package/dist/cjs/EntityStore.d.ts +36 -0
  17. package/dist/cjs/EntityStore.js +172 -0
  18. package/dist/cjs/EntityStore.js.map +1 -0
  19. package/dist/cjs/FakeWeakRef.d.ts +11 -11
  20. package/dist/cjs/FakeWeakRef.js +18 -18
  21. package/dist/cjs/IDBService.d.ts +9 -9
  22. package/dist/cjs/IDBService.js +63 -63
  23. package/dist/cjs/LocalHistoryStore.d.ts +15 -0
  24. package/dist/cjs/LocalHistoryStore.js +53 -0
  25. package/dist/cjs/LocalHistoryStore.js.map +1 -0
  26. package/dist/cjs/LocalReplicaStore.d.ts +13 -0
  27. package/dist/cjs/LocalReplicaStore.js +49 -0
  28. package/dist/cjs/LocalReplicaStore.js.map +1 -0
  29. package/dist/cjs/MessageCreator.d.ts +19 -0
  30. package/dist/cjs/MessageCreator.js +104 -0
  31. package/dist/cjs/MessageCreator.js.map +1 -0
  32. package/dist/cjs/Metadata.d.ts +91 -0
  33. package/dist/cjs/Metadata.js +250 -0
  34. package/dist/cjs/Metadata.js.map +1 -0
  35. package/dist/cjs/OperationsStore.d.ts +38 -0
  36. package/dist/cjs/OperationsStore.js +146 -0
  37. package/dist/cjs/OperationsStore.js.map +1 -0
  38. package/dist/cjs/PresenceManager.d.ts +30 -0
  39. package/dist/cjs/PresenceManager.js +89 -0
  40. package/dist/cjs/PresenceManager.js.map +1 -0
  41. package/dist/cjs/Query.d.ts +26 -0
  42. package/dist/cjs/Query.js +86 -0
  43. package/dist/cjs/Query.js.map +1 -0
  44. package/dist/cjs/QueryMaker.d.ts +18 -0
  45. package/dist/cjs/QueryMaker.js +98 -0
  46. package/dist/cjs/QueryMaker.js.map +1 -0
  47. package/dist/cjs/QueryStore.d.ts +38 -0
  48. package/dist/cjs/QueryStore.js +146 -0
  49. package/dist/cjs/QueryStore.js.map +1 -0
  50. package/dist/cjs/SchemaStore.d.ts +9 -0
  51. package/dist/cjs/SchemaStore.js +35 -0
  52. package/dist/cjs/SchemaStore.js.map +1 -0
  53. package/dist/cjs/Storage.d.ts +147 -0
  54. package/dist/cjs/Storage.js +346 -0
  55. package/dist/cjs/Storage.js.map +1 -0
  56. package/dist/cjs/Sync.d.ts +117 -0
  57. package/dist/cjs/Sync.js +561 -0
  58. package/dist/cjs/Sync.js.map +1 -0
  59. package/dist/cjs/SyncHarness.d.ts +45 -0
  60. package/dist/cjs/SyncHarness.js +110 -0
  61. package/dist/cjs/SyncHarness.js.map +1 -0
  62. package/dist/cjs/UndoHistory.d.ts +16 -16
  63. package/dist/cjs/UndoHistory.js +50 -50
  64. package/dist/cjs/__tests__/batching.test.d.ts +1 -1
  65. package/dist/cjs/__tests__/batching.test.js +44 -44
  66. package/dist/cjs/__tests__/documents.test.d.ts +1 -1
  67. package/dist/cjs/__tests__/documents.test.js +415 -415
  68. package/dist/cjs/__tests__/fixtures/testStorage.d.ts +123 -122
  69. package/dist/cjs/__tests__/fixtures/testStorage.js +117 -115
  70. package/dist/cjs/__tests__/fixtures/testStorage.js.map +1 -1
  71. package/dist/cjs/__tests__/legacyOids.test.d.ts +1 -1
  72. package/dist/cjs/__tests__/legacyOids.test.js +309 -123
  73. package/dist/cjs/__tests__/legacyOids.test.js.map +1 -1
  74. package/dist/cjs/__tests__/mutations.test.d.ts +1 -1
  75. package/dist/cjs/__tests__/mutations.test.js +41 -41
  76. package/dist/cjs/__tests__/queries.test.d.ts +1 -1
  77. package/dist/cjs/__tests__/queries.test.js +318 -318
  78. package/dist/cjs/__tests__/setup/indexedDB.d.ts +1 -1
  79. package/dist/cjs/__tests__/setup/indexedDB.js +3 -3
  80. package/dist/cjs/__tests__/undo.test.d.ts +1 -1
  81. package/dist/cjs/__tests__/undo.test.js +86 -86
  82. package/dist/cjs/client/Client.d.ts +98 -99
  83. package/dist/cjs/client/Client.js +227 -227
  84. package/dist/cjs/client/ClientDescriptor.d.ts +76 -74
  85. package/dist/cjs/client/ClientDescriptor.js +197 -194
  86. package/dist/cjs/client/ClientDescriptor.js.map +1 -1
  87. package/dist/cjs/client/constants.d.ts +1 -0
  88. package/dist/cjs/client/constants.js +5 -0
  89. package/dist/cjs/client/constants.js.map +1 -0
  90. package/dist/cjs/constants.d.ts +1 -1
  91. package/dist/cjs/constants.js +4 -4
  92. package/dist/cjs/context.d.ts +29 -29
  93. package/dist/cjs/context.js +2 -2
  94. package/dist/cjs/entities/DocumentFamiliyCache.d.ts +90 -90
  95. package/dist/cjs/entities/DocumentFamiliyCache.js +282 -282
  96. package/dist/cjs/entities/Entity.d.ts +206 -206
  97. package/dist/cjs/entities/Entity.js +520 -520
  98. package/dist/cjs/entities/EntityStore.d.ts +85 -85
  99. package/dist/cjs/entities/EntityStore.js +479 -479
  100. package/dist/cjs/files/EntityFile.d.ts +31 -31
  101. package/dist/cjs/files/EntityFile.js +76 -76
  102. package/dist/cjs/files/FileManager.d.ts +42 -42
  103. package/dist/cjs/files/FileManager.js +152 -152
  104. package/dist/cjs/files/FileStorage.d.ts +28 -28
  105. package/dist/cjs/files/FileStorage.js +104 -104
  106. package/dist/cjs/files/utils.d.ts +8 -8
  107. package/dist/cjs/files/utils.js +55 -55
  108. package/dist/cjs/files/utils.test.d.ts +1 -1
  109. package/dist/cjs/files/utils.test.js +80 -80
  110. package/dist/cjs/idb.d.ts +11 -11
  111. package/dist/cjs/idb.js +111 -111
  112. package/dist/cjs/index.d.ts +21 -21
  113. package/dist/cjs/index.js +23 -23
  114. package/dist/cjs/indexes.d.ts +3 -0
  115. package/dist/cjs/indexes.js +20 -0
  116. package/dist/cjs/indexes.js.map +1 -0
  117. package/dist/cjs/metadata/AckInfoStore.d.ts +10 -10
  118. package/dist/cjs/metadata/AckInfoStore.js +25 -25
  119. package/dist/cjs/metadata/BaselinesStore.d.ts +33 -33
  120. package/dist/cjs/metadata/BaselinesStore.js +89 -89
  121. package/dist/cjs/metadata/LocalHistoryStore.d.ts +15 -0
  122. package/dist/cjs/metadata/LocalHistoryStore.js +53 -0
  123. package/dist/cjs/metadata/LocalHistoryStore.js.map +1 -0
  124. package/dist/cjs/metadata/LocalReplicaStore.d.ts +17 -17
  125. package/dist/cjs/metadata/LocalReplicaStore.js +47 -47
  126. package/dist/cjs/metadata/MessageCreator.d.ts +19 -19
  127. package/dist/cjs/metadata/MessageCreator.js +127 -127
  128. package/dist/cjs/metadata/Metadata.d.ts +112 -112
  129. package/dist/cjs/metadata/Metadata.js +352 -352
  130. package/dist/cjs/metadata/OperationsStore.d.ts +53 -53
  131. package/dist/cjs/metadata/OperationsStore.js +152 -152
  132. package/dist/cjs/metadata/SchemaStore.d.ts +9 -9
  133. package/dist/cjs/metadata/SchemaStore.js +38 -38
  134. package/dist/cjs/metadata/openMetadataDatabase.d.ts +19 -17
  135. package/dist/cjs/metadata/openMetadataDatabase.js +219 -158
  136. package/dist/cjs/metadata/openMetadataDatabase.js.map +1 -1
  137. package/dist/cjs/migration/db.d.ts +8 -8
  138. package/dist/cjs/migration/db.js +111 -111
  139. package/dist/cjs/migration/errors.d.ts +5 -5
  140. package/dist/cjs/migration/errors.js +11 -11
  141. package/dist/cjs/migration/openDatabase.d.ts +20 -20
  142. package/dist/cjs/migration/openDatabase.js +428 -428
  143. package/dist/cjs/migration/paths.d.ts +6 -6
  144. package/dist/cjs/migration/paths.js +52 -52
  145. package/dist/cjs/migration/paths.test.d.ts +1 -1
  146. package/dist/cjs/migration/paths.test.js +90 -90
  147. package/dist/cjs/openDocumentDatabase.d.ts +12 -0
  148. package/dist/cjs/openDocumentDatabase.js +432 -0
  149. package/dist/cjs/openDocumentDatabase.js.map +1 -0
  150. package/dist/cjs/queries/BaseQuery.d.ts +53 -53
  151. package/dist/cjs/queries/BaseQuery.js +135 -135
  152. package/dist/cjs/queries/CollectionQueries.d.ts +55 -55
  153. package/dist/cjs/queries/CollectionQueries.js +91 -91
  154. package/dist/cjs/queries/FindAllQuery.d.ts +12 -12
  155. package/dist/cjs/queries/FindAllQuery.js +42 -42
  156. package/dist/cjs/queries/FindInfiniteQuery.d.ts +19 -19
  157. package/dist/cjs/queries/FindInfiniteQuery.js +69 -69
  158. package/dist/cjs/queries/FindOneQuery.d.ts +12 -12
  159. package/dist/cjs/queries/FindOneQuery.js +42 -42
  160. package/dist/cjs/queries/FindPageQuery.d.ts +24 -24
  161. package/dist/cjs/queries/FindPageQuery.js +76 -76
  162. package/dist/cjs/queries/GetQuery.d.ts +10 -10
  163. package/dist/cjs/queries/GetQuery.js +29 -29
  164. package/dist/cjs/queries/LiveQuery.d.ts +28 -0
  165. package/dist/cjs/queries/LiveQuery.js +96 -0
  166. package/dist/cjs/queries/LiveQuery.js.map +1 -0
  167. package/dist/cjs/queries/LiveQueryMaker.d.ts +15 -0
  168. package/dist/cjs/queries/LiveQueryMaker.js +42 -0
  169. package/dist/cjs/queries/LiveQueryMaker.js.map +1 -0
  170. package/dist/cjs/queries/LiveQueryStore.d.ts +33 -0
  171. package/dist/cjs/queries/LiveQueryStore.js +85 -0
  172. package/dist/cjs/queries/LiveQueryStore.js.map +1 -0
  173. package/dist/cjs/queries/Query.d.ts +18 -0
  174. package/dist/cjs/queries/Query.js +36 -0
  175. package/dist/cjs/queries/Query.js.map +1 -0
  176. package/dist/cjs/queries/QueryCache.d.ts +16 -16
  177. package/dist/cjs/queries/QueryCache.js +41 -41
  178. package/dist/cjs/queries/QueryMaker.d.ts +14 -0
  179. package/dist/cjs/queries/QueryMaker.js +42 -0
  180. package/dist/cjs/queries/QueryMaker.js.map +1 -0
  181. package/dist/cjs/queries/QueryStore.d.ts +35 -0
  182. package/dist/cjs/queries/QueryStore.js +130 -0
  183. package/dist/cjs/queries/QueryStore.js.map +1 -0
  184. package/dist/cjs/queries/dbQueries.d.ts +22 -22
  185. package/dist/cjs/queries/dbQueries.js +125 -125
  186. package/dist/cjs/queries/keys.d.ts +10 -10
  187. package/dist/cjs/queries/keys.js +33 -33
  188. package/dist/cjs/queries/ranges.d.ts +2 -2
  189. package/dist/cjs/queries/ranges.js +69 -69
  190. package/dist/cjs/queries/types.d.ts +6 -6
  191. package/dist/cjs/queries/types.js +2 -2
  192. package/dist/cjs/queries/utils.d.ts +3 -3
  193. package/dist/cjs/queries/utils.js +24 -24
  194. package/dist/cjs/queries2/BaseQuery.d.ts +39 -0
  195. package/dist/cjs/queries2/BaseQuery.js +99 -0
  196. package/dist/cjs/queries2/BaseQuery.js.map +1 -0
  197. package/dist/cjs/queries2/CollectionQueries.d.ts +55 -0
  198. package/dist/cjs/queries2/CollectionQueries.js +83 -0
  199. package/dist/cjs/queries2/CollectionQueries.js.map +1 -0
  200. package/dist/cjs/queries2/FindAllQuery.d.ts +11 -0
  201. package/dist/cjs/queries2/FindAllQuery.js +34 -0
  202. package/dist/cjs/queries2/FindAllQuery.js.map +1 -0
  203. package/dist/cjs/queries2/FindInfiniteQuery.d.ts +18 -0
  204. package/dist/cjs/queries2/FindInfiniteQuery.js +61 -0
  205. package/dist/cjs/queries2/FindInfiniteQuery.js.map +1 -0
  206. package/dist/cjs/queries2/FindOneQuery.d.ts +11 -0
  207. package/dist/cjs/queries2/FindOneQuery.js +34 -0
  208. package/dist/cjs/queries2/FindOneQuery.js.map +1 -0
  209. package/dist/cjs/queries2/FindPageQuery.d.ts +23 -0
  210. package/dist/cjs/queries2/FindPageQuery.js +68 -0
  211. package/dist/cjs/queries2/FindPageQuery.js.map +1 -0
  212. package/dist/cjs/queries2/GetQuery.d.ts +10 -0
  213. package/dist/cjs/queries2/GetQuery.js +30 -0
  214. package/dist/cjs/queries2/GetQuery.js.map +1 -0
  215. package/dist/cjs/queries2/QueryCache.d.ts +16 -0
  216. package/dist/cjs/queries2/QueryCache.js +40 -0
  217. package/dist/cjs/queries2/QueryCache.js.map +1 -0
  218. package/dist/cjs/queries2/dbQueries.d.ts +22 -0
  219. package/dist/cjs/queries2/dbQueries.js +126 -0
  220. package/dist/cjs/queries2/dbQueries.js.map +1 -0
  221. package/dist/cjs/queries2/keys.d.ts +10 -0
  222. package/dist/cjs/queries2/keys.js +34 -0
  223. package/dist/cjs/queries2/keys.js.map +1 -0
  224. package/dist/cjs/queries2/ranges.d.ts +2 -0
  225. package/dist/cjs/queries2/ranges.js +70 -0
  226. package/dist/cjs/queries2/ranges.js.map +1 -0
  227. package/dist/cjs/queries2/types.d.ts +6 -0
  228. package/dist/cjs/queries2/types.js +3 -0
  229. package/dist/cjs/queries2/types.js.map +1 -0
  230. package/dist/cjs/queries2/utils.d.ts +1 -0
  231. package/dist/cjs/queries2/utils.js +20 -0
  232. package/dist/cjs/queries2/utils.js.map +1 -0
  233. package/dist/cjs/reactives/DocumentFamiliyCache.d.ts +47 -0
  234. package/dist/cjs/reactives/DocumentFamiliyCache.js +211 -0
  235. package/dist/cjs/reactives/DocumentFamiliyCache.js.map +1 -0
  236. package/dist/cjs/reactives/Entity.d.ts +191 -0
  237. package/dist/cjs/reactives/Entity.js +463 -0
  238. package/dist/cjs/reactives/Entity.js.map +1 -0
  239. package/dist/cjs/reactives/EntityStore.d.ts +84 -0
  240. package/dist/cjs/reactives/EntityStore.js +422 -0
  241. package/dist/cjs/reactives/EntityStore.js.map +1 -0
  242. package/dist/cjs/reactives/FakeWeakRef.d.ts +11 -0
  243. package/dist/cjs/reactives/FakeWeakRef.js +19 -0
  244. package/dist/cjs/reactives/FakeWeakRef.js.map +1 -0
  245. package/dist/cjs/sync/FileSync.d.ts +23 -23
  246. package/dist/cjs/sync/FileSync.js +84 -84
  247. package/dist/cjs/sync/Heartbeat.d.ts +25 -25
  248. package/dist/cjs/sync/Heartbeat.js +63 -63
  249. package/dist/cjs/sync/PresenceManager.d.ts +43 -43
  250. package/dist/cjs/sync/PresenceManager.js +119 -119
  251. package/dist/cjs/sync/PushPullSync.d.ts +36 -36
  252. package/dist/cjs/sync/PushPullSync.js +143 -143
  253. package/dist/cjs/sync/ServerSyncEndpointProvider.d.ts +27 -27
  254. package/dist/cjs/sync/ServerSyncEndpointProvider.js +64 -64
  255. package/dist/cjs/sync/Sync.d.ts +146 -146
  256. package/dist/cjs/sync/Sync.js +270 -270
  257. package/dist/cjs/sync/Sync.js.map +1 -1
  258. package/dist/cjs/sync/WebSocketSync.d.ts +41 -41
  259. package/dist/cjs/sync/WebSocketSync.js +190 -190
  260. package/dist/cjs/types.d.ts +12 -12
  261. package/dist/cjs/types.js +2 -2
  262. package/dist/cjs/utils/Disposable.d.ts +6 -6
  263. package/dist/cjs/utils/Disposable.js +18 -18
  264. package/dist/cjs/utils/Resolvable.d.ts +8 -8
  265. package/dist/cjs/utils/Resolvable.js +22 -22
  266. package/dist/cjs/v2/AckInfoStore.d.ts +10 -0
  267. package/dist/cjs/v2/AckInfoStore.js +26 -0
  268. package/dist/cjs/v2/AckInfoStore.js.map +1 -0
  269. package/dist/cjs/v2/BaselinesStore.d.ts +10 -0
  270. package/dist/cjs/v2/BaselinesStore.js +36 -0
  271. package/dist/cjs/v2/BaselinesStore.js.map +1 -0
  272. package/dist/cjs/v2/DocumentManager.d.ts +19 -0
  273. package/dist/cjs/v2/DocumentManager.js +47 -0
  274. package/dist/cjs/v2/DocumentManager.js.map +1 -0
  275. package/dist/cjs/v2/Entity.d.ts +87 -0
  276. package/dist/cjs/v2/Entity.js +305 -0
  277. package/dist/cjs/v2/Entity.js.map +1 -0
  278. package/dist/cjs/v2/EntityStore.d.ts +37 -0
  279. package/dist/cjs/v2/EntityStore.js +165 -0
  280. package/dist/cjs/v2/EntityStore.js.map +1 -0
  281. package/dist/cjs/v2/IDBService.d.ts +7 -0
  282. package/dist/cjs/v2/IDBService.js +26 -0
  283. package/dist/cjs/v2/IDBService.js.map +1 -0
  284. package/dist/cjs/v2/LocalHistoryStore.d.ts +15 -0
  285. package/dist/cjs/v2/LocalHistoryStore.js +53 -0
  286. package/dist/cjs/v2/LocalHistoryStore.js.map +1 -0
  287. package/dist/cjs/v2/LocalReplicaStore.d.ts +14 -0
  288. package/dist/cjs/v2/LocalReplicaStore.js +49 -0
  289. package/dist/cjs/v2/LocalReplicaStore.js.map +1 -0
  290. package/dist/cjs/v2/MessageCreator.d.ts +19 -0
  291. package/dist/cjs/v2/MessageCreator.js +99 -0
  292. package/dist/cjs/v2/MessageCreator.js.map +1 -0
  293. package/dist/cjs/v2/Metadata.d.ts +90 -0
  294. package/dist/cjs/v2/Metadata.js +251 -0
  295. package/dist/cjs/v2/Metadata.js.map +1 -0
  296. package/dist/cjs/v2/OperationsStore.d.ts +38 -0
  297. package/dist/cjs/v2/OperationsStore.js +146 -0
  298. package/dist/cjs/v2/OperationsStore.js.map +1 -0
  299. package/dist/cjs/v2/PresenceManager.d.ts +24 -0
  300. package/dist/cjs/v2/PresenceManager.js +73 -0
  301. package/dist/cjs/v2/PresenceManager.js.map +1 -0
  302. package/dist/cjs/v2/Query.d.ts +24 -0
  303. package/dist/cjs/v2/Query.js +79 -0
  304. package/dist/cjs/v2/Query.js.map +1 -0
  305. package/dist/cjs/v2/QueryMaker.d.ts +16 -0
  306. package/dist/cjs/v2/QueryMaker.js +84 -0
  307. package/dist/cjs/v2/QueryMaker.js.map +1 -0
  308. package/dist/cjs/v2/QueryStore.d.ts +26 -0
  309. package/dist/cjs/v2/QueryStore.js +136 -0
  310. package/dist/cjs/v2/QueryStore.js.map +1 -0
  311. package/dist/cjs/v2/SchemaStore.d.ts +9 -0
  312. package/dist/cjs/v2/SchemaStore.js +35 -0
  313. package/dist/cjs/v2/SchemaStore.js.map +1 -0
  314. package/dist/cjs/v2/Storage.d.ts +80 -0
  315. package/dist/cjs/v2/Storage.js +154 -0
  316. package/dist/cjs/v2/Storage.js.map +1 -0
  317. package/dist/cjs/v2/Sync.d.ts +42 -0
  318. package/dist/cjs/v2/Sync.js +98 -0
  319. package/dist/cjs/v2/Sync.js.map +1 -0
  320. package/dist/cjs/v2/SyncHarness.d.ts +45 -0
  321. package/dist/cjs/v2/SyncHarness.js +110 -0
  322. package/dist/cjs/v2/SyncHarness.js.map +1 -0
  323. package/dist/cjs/v2/__tests__/documents.test.d.ts +1 -0
  324. package/dist/cjs/v2/__tests__/documents.test.js +185 -0
  325. package/dist/cjs/v2/__tests__/documents.test.js.map +1 -0
  326. package/dist/cjs/v2/__tests__/fixtures/testStorage.d.ts +189 -0
  327. package/dist/cjs/v2/__tests__/fixtures/testStorage.js +93 -0
  328. package/dist/cjs/v2/__tests__/fixtures/testStorage.js.map +1 -0
  329. package/dist/cjs/v2/__tests__/queries.test.d.ts +1 -0
  330. package/dist/cjs/v2/__tests__/queries.test.js +92 -0
  331. package/dist/cjs/v2/__tests__/queries.test.js.map +1 -0
  332. package/dist/cjs/v2/__tests__/setup/indexedDB.d.ts +1 -0
  333. package/dist/cjs/v2/__tests__/setup/indexedDB.js +4 -0
  334. package/dist/cjs/v2/__tests__/setup/indexedDB.js.map +1 -0
  335. package/dist/cjs/v2/constants.d.ts +1 -0
  336. package/dist/cjs/v2/constants.js +5 -0
  337. package/dist/cjs/v2/constants.js.map +1 -0
  338. package/dist/cjs/v2/idb.d.ts +6 -0
  339. package/dist/cjs/v2/idb.js +71 -0
  340. package/dist/cjs/v2/idb.js.map +1 -0
  341. package/dist/cjs/v2/index.d.ts +6 -0
  342. package/dist/cjs/v2/index.js +14 -0
  343. package/dist/cjs/v2/index.js.map +1 -0
  344. package/dist/cjs/v2/indexes.d.ts +3 -0
  345. package/dist/cjs/v2/indexes.js +20 -0
  346. package/dist/cjs/v2/indexes.js.map +1 -0
  347. package/dist/cjs/v2/openDocumentDatabase.d.ts +9 -0
  348. package/dist/cjs/v2/openDocumentDatabase.js +100 -0
  349. package/dist/cjs/v2/openDocumentDatabase.js.map +1 -0
  350. package/dist/cjs/v2/types.d.ts +3 -0
  351. package/dist/cjs/v2/types.js +3 -0
  352. package/dist/cjs/v2/types.js.map +1 -0
  353. package/dist/cjs/vanilla.d.ts +1 -1
  354. package/dist/cjs/vanilla.js +27 -27
  355. package/dist/esm/AckInfoStore.d.ts +10 -0
  356. package/dist/esm/AckInfoStore.js +22 -0
  357. package/dist/esm/AckInfoStore.js.map +1 -0
  358. package/dist/esm/BackoffScheduler.d.ts +19 -19
  359. package/dist/esm/BackoffScheduler.js +39 -39
  360. package/dist/esm/BaselinesStore.d.ts +10 -0
  361. package/dist/esm/BaselinesStore.js +32 -0
  362. package/dist/esm/BaselinesStore.js.map +1 -0
  363. package/dist/esm/DocumentManager.d.ts +28 -28
  364. package/dist/esm/DocumentManager.js +40 -40
  365. package/dist/esm/Entity.d.ts +96 -0
  366. package/dist/esm/Entity.js +337 -0
  367. package/dist/esm/Entity.js.map +1 -0
  368. package/dist/esm/EntityStore.d.ts +36 -0
  369. package/dist/esm/EntityStore.js +168 -0
  370. package/dist/esm/EntityStore.js.map +1 -0
  371. package/dist/esm/FakeWeakRef.d.ts +11 -11
  372. package/dist/esm/FakeWeakRef.js +14 -14
  373. package/dist/esm/IDBService.d.ts +9 -9
  374. package/dist/esm/IDBService.js +59 -59
  375. package/dist/esm/LocalHistoryStore.d.ts +15 -0
  376. package/dist/esm/LocalHistoryStore.js +49 -0
  377. package/dist/esm/LocalHistoryStore.js.map +1 -0
  378. package/dist/esm/LocalReplicaStore.d.ts +13 -0
  379. package/dist/esm/LocalReplicaStore.js +42 -0
  380. package/dist/esm/LocalReplicaStore.js.map +1 -0
  381. package/dist/esm/MessageCreator.d.ts +19 -0
  382. package/dist/esm/MessageCreator.js +97 -0
  383. package/dist/esm/MessageCreator.js.map +1 -0
  384. package/dist/esm/Metadata.d.ts +91 -0
  385. package/dist/esm/Metadata.js +245 -0
  386. package/dist/esm/Metadata.js.map +1 -0
  387. package/dist/esm/OperationsStore.d.ts +38 -0
  388. package/dist/esm/OperationsStore.js +142 -0
  389. package/dist/esm/OperationsStore.js.map +1 -0
  390. package/dist/esm/PresenceManager.d.ts +30 -0
  391. package/dist/esm/PresenceManager.js +85 -0
  392. package/dist/esm/PresenceManager.js.map +1 -0
  393. package/dist/esm/Query.d.ts +26 -0
  394. package/dist/esm/Query.js +82 -0
  395. package/dist/esm/Query.js.map +1 -0
  396. package/dist/esm/QueryMaker.d.ts +18 -0
  397. package/dist/esm/QueryMaker.js +94 -0
  398. package/dist/esm/QueryMaker.js.map +1 -0
  399. package/dist/esm/QueryStore.d.ts +38 -0
  400. package/dist/esm/QueryStore.js +142 -0
  401. package/dist/esm/QueryStore.js.map +1 -0
  402. package/dist/esm/SchemaStore.d.ts +9 -0
  403. package/dist/esm/SchemaStore.js +31 -0
  404. package/dist/esm/SchemaStore.js.map +1 -0
  405. package/dist/esm/Storage.d.ts +147 -0
  406. package/dist/esm/Storage.js +341 -0
  407. package/dist/esm/Storage.js.map +1 -0
  408. package/dist/esm/Sync.d.ts +117 -0
  409. package/dist/esm/Sync.js +553 -0
  410. package/dist/esm/Sync.js.map +1 -0
  411. package/dist/esm/SyncHarness.d.ts +45 -0
  412. package/dist/esm/SyncHarness.js +105 -0
  413. package/dist/esm/SyncHarness.js.map +1 -0
  414. package/dist/esm/UndoHistory.d.ts +16 -16
  415. package/dist/esm/UndoHistory.js +46 -46
  416. package/dist/esm/__tests__/batching.test.d.ts +1 -1
  417. package/dist/esm/__tests__/batching.test.js +42 -42
  418. package/dist/esm/__tests__/documents.test.d.ts +1 -1
  419. package/dist/esm/__tests__/documents.test.js +413 -413
  420. package/dist/esm/__tests__/fixtures/testStorage.d.ts +123 -122
  421. package/dist/esm/__tests__/fixtures/testStorage.js +113 -111
  422. package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
  423. package/dist/esm/__tests__/legacyOids.test.d.ts +1 -1
  424. package/dist/esm/__tests__/legacyOids.test.js +307 -121
  425. package/dist/esm/__tests__/legacyOids.test.js.map +1 -1
  426. package/dist/esm/__tests__/mutations.test.d.ts +1 -1
  427. package/dist/esm/__tests__/mutations.test.js +39 -39
  428. package/dist/esm/__tests__/queries.test.d.ts +1 -1
  429. package/dist/esm/__tests__/queries.test.js +316 -316
  430. package/dist/esm/__tests__/setup/indexedDB.d.ts +1 -1
  431. package/dist/esm/__tests__/setup/indexedDB.js +1 -1
  432. package/dist/esm/__tests__/undo.test.d.ts +1 -1
  433. package/dist/esm/__tests__/undo.test.js +84 -84
  434. package/dist/esm/client/Client.d.ts +99 -99
  435. package/dist/esm/client/Client.js +223 -223
  436. package/dist/esm/client/ClientDescriptor.d.ts +76 -74
  437. package/dist/esm/client/ClientDescriptor.js +193 -190
  438. package/dist/esm/client/ClientDescriptor.js.map +1 -1
  439. package/dist/esm/client/constants.d.ts +1 -0
  440. package/dist/esm/client/constants.js +2 -0
  441. package/dist/esm/client/constants.js.map +1 -0
  442. package/dist/esm/constants.d.ts +1 -1
  443. package/dist/esm/constants.js +1 -1
  444. package/dist/esm/context.d.ts +29 -29
  445. package/dist/esm/context.js +1 -1
  446. package/dist/esm/entities/DocumentFamiliyCache.d.ts +90 -90
  447. package/dist/esm/entities/DocumentFamiliyCache.js +278 -278
  448. package/dist/esm/entities/Entity.d.ts +206 -206
  449. package/dist/esm/entities/Entity.js +515 -515
  450. package/dist/esm/entities/EntityStore.d.ts +85 -85
  451. package/dist/esm/entities/EntityStore.js +475 -475
  452. package/dist/esm/files/EntityFile.d.ts +31 -31
  453. package/dist/esm/files/EntityFile.js +72 -72
  454. package/dist/esm/files/FileManager.d.ts +42 -42
  455. package/dist/esm/files/FileManager.js +148 -148
  456. package/dist/esm/files/FileStorage.d.ts +28 -28
  457. package/dist/esm/files/FileStorage.js +99 -99
  458. package/dist/esm/files/utils.d.ts +8 -8
  459. package/dist/esm/files/utils.js +46 -46
  460. package/dist/esm/files/utils.test.d.ts +1 -1
  461. package/dist/esm/files/utils.test.js +78 -78
  462. package/dist/esm/idb.d.ts +11 -11
  463. package/dist/esm/idb.js +100 -100
  464. package/dist/esm/index.d.ts +21 -21
  465. package/dist/esm/index.js +12 -12
  466. package/dist/esm/indexes.d.ts +3 -0
  467. package/dist/esm/indexes.js +15 -0
  468. package/dist/esm/indexes.js.map +1 -0
  469. package/dist/esm/metadata/AckInfoStore.d.ts +10 -10
  470. package/dist/esm/metadata/AckInfoStore.js +21 -21
  471. package/dist/esm/metadata/BaselinesStore.d.ts +33 -33
  472. package/dist/esm/metadata/BaselinesStore.js +85 -85
  473. package/dist/esm/metadata/LocalHistoryStore.d.ts +15 -0
  474. package/dist/esm/metadata/LocalHistoryStore.js +49 -0
  475. package/dist/esm/metadata/LocalHistoryStore.js.map +1 -0
  476. package/dist/esm/metadata/LocalReplicaStore.d.ts +17 -17
  477. package/dist/esm/metadata/LocalReplicaStore.js +40 -40
  478. package/dist/esm/metadata/MessageCreator.d.ts +19 -19
  479. package/dist/esm/metadata/MessageCreator.js +123 -123
  480. package/dist/esm/metadata/Metadata.d.ts +112 -112
  481. package/dist/esm/metadata/Metadata.js +348 -348
  482. package/dist/esm/metadata/OperationsStore.d.ts +53 -53
  483. package/dist/esm/metadata/OperationsStore.js +148 -148
  484. package/dist/esm/metadata/SchemaStore.d.ts +9 -9
  485. package/dist/esm/metadata/SchemaStore.js +34 -34
  486. package/dist/esm/metadata/openMetadataDatabase.d.ts +19 -17
  487. package/dist/esm/metadata/openMetadataDatabase.js +214 -153
  488. package/dist/esm/metadata/openMetadataDatabase.js.map +1 -1
  489. package/dist/esm/migration/db.d.ts +8 -8
  490. package/dist/esm/migration/db.js +103 -103
  491. package/dist/esm/migration/errors.d.ts +5 -5
  492. package/dist/esm/migration/errors.js +7 -7
  493. package/dist/esm/migration/openDatabase.d.ts +20 -20
  494. package/dist/esm/migration/openDatabase.js +423 -423
  495. package/dist/esm/migration/paths.d.ts +6 -6
  496. package/dist/esm/migration/paths.js +48 -48
  497. package/dist/esm/migration/paths.test.d.ts +1 -1
  498. package/dist/esm/migration/paths.test.js +88 -88
  499. package/dist/esm/openDocumentDatabase.d.ts +12 -0
  500. package/dist/esm/openDocumentDatabase.js +428 -0
  501. package/dist/esm/openDocumentDatabase.js.map +1 -0
  502. package/dist/esm/queries/BaseQuery.d.ts +53 -53
  503. package/dist/esm/queries/BaseQuery.js +131 -131
  504. package/dist/esm/queries/CollectionQueries.d.ts +55 -55
  505. package/dist/esm/queries/CollectionQueries.js +87 -87
  506. package/dist/esm/queries/FindAllQuery.d.ts +12 -12
  507. package/dist/esm/queries/FindAllQuery.js +38 -38
  508. package/dist/esm/queries/FindInfiniteQuery.d.ts +19 -19
  509. package/dist/esm/queries/FindInfiniteQuery.js +65 -65
  510. package/dist/esm/queries/FindOneQuery.d.ts +12 -12
  511. package/dist/esm/queries/FindOneQuery.js +38 -38
  512. package/dist/esm/queries/FindPageQuery.d.ts +24 -24
  513. package/dist/esm/queries/FindPageQuery.js +72 -72
  514. package/dist/esm/queries/GetQuery.d.ts +10 -10
  515. package/dist/esm/queries/GetQuery.js +25 -25
  516. package/dist/esm/queries/LiveQuery.d.ts +28 -0
  517. package/dist/esm/queries/LiveQuery.js +92 -0
  518. package/dist/esm/queries/LiveQuery.js.map +1 -0
  519. package/dist/esm/queries/LiveQueryMaker.d.ts +15 -0
  520. package/dist/esm/queries/LiveQueryMaker.js +38 -0
  521. package/dist/esm/queries/LiveQueryMaker.js.map +1 -0
  522. package/dist/esm/queries/LiveQueryStore.d.ts +33 -0
  523. package/dist/esm/queries/LiveQueryStore.js +81 -0
  524. package/dist/esm/queries/LiveQueryStore.js.map +1 -0
  525. package/dist/esm/queries/Query.d.ts +18 -0
  526. package/dist/esm/queries/Query.js +32 -0
  527. package/dist/esm/queries/Query.js.map +1 -0
  528. package/dist/esm/queries/QueryCache.d.ts +16 -16
  529. package/dist/esm/queries/QueryCache.js +37 -37
  530. package/dist/esm/queries/QueryMaker.d.ts +14 -0
  531. package/dist/esm/queries/QueryMaker.js +38 -0
  532. package/dist/esm/queries/QueryMaker.js.map +1 -0
  533. package/dist/esm/queries/QueryStore.d.ts +35 -0
  534. package/dist/esm/queries/QueryStore.js +126 -0
  535. package/dist/esm/queries/QueryStore.js.map +1 -0
  536. package/dist/esm/queries/dbQueries.d.ts +22 -22
  537. package/dist/esm/queries/dbQueries.js +119 -119
  538. package/dist/esm/queries/keys.d.ts +10 -10
  539. package/dist/esm/queries/keys.js +29 -29
  540. package/dist/esm/queries/ranges.d.ts +2 -2
  541. package/dist/esm/queries/ranges.js +65 -65
  542. package/dist/esm/queries/types.d.ts +6 -6
  543. package/dist/esm/queries/types.js +1 -1
  544. package/dist/esm/queries/utils.d.ts +3 -3
  545. package/dist/esm/queries/utils.js +19 -19
  546. package/dist/esm/queries2/BaseQuery.d.ts +39 -0
  547. package/dist/esm/queries2/BaseQuery.js +95 -0
  548. package/dist/esm/queries2/BaseQuery.js.map +1 -0
  549. package/dist/esm/queries2/CollectionQueries.d.ts +55 -0
  550. package/dist/esm/queries2/CollectionQueries.js +79 -0
  551. package/dist/esm/queries2/CollectionQueries.js.map +1 -0
  552. package/dist/esm/queries2/FindAllQuery.d.ts +11 -0
  553. package/dist/esm/queries2/FindAllQuery.js +30 -0
  554. package/dist/esm/queries2/FindAllQuery.js.map +1 -0
  555. package/dist/esm/queries2/FindInfiniteQuery.d.ts +18 -0
  556. package/dist/esm/queries2/FindInfiniteQuery.js +57 -0
  557. package/dist/esm/queries2/FindInfiniteQuery.js.map +1 -0
  558. package/dist/esm/queries2/FindOneQuery.d.ts +11 -0
  559. package/dist/esm/queries2/FindOneQuery.js +30 -0
  560. package/dist/esm/queries2/FindOneQuery.js.map +1 -0
  561. package/dist/esm/queries2/FindPageQuery.d.ts +23 -0
  562. package/dist/esm/queries2/FindPageQuery.js +64 -0
  563. package/dist/esm/queries2/FindPageQuery.js.map +1 -0
  564. package/dist/esm/queries2/GetQuery.d.ts +10 -0
  565. package/dist/esm/queries2/GetQuery.js +26 -0
  566. package/dist/esm/queries2/GetQuery.js.map +1 -0
  567. package/dist/esm/queries2/QueryCache.d.ts +16 -0
  568. package/dist/esm/queries2/QueryCache.js +36 -0
  569. package/dist/esm/queries2/QueryCache.js.map +1 -0
  570. package/dist/esm/queries2/dbQueries.d.ts +22 -0
  571. package/dist/esm/queries2/dbQueries.js +120 -0
  572. package/dist/esm/queries2/dbQueries.js.map +1 -0
  573. package/dist/esm/queries2/keys.d.ts +10 -0
  574. package/dist/esm/queries2/keys.js +30 -0
  575. package/dist/esm/queries2/keys.js.map +1 -0
  576. package/dist/esm/queries2/ranges.d.ts +2 -0
  577. package/dist/esm/queries2/ranges.js +66 -0
  578. package/dist/esm/queries2/ranges.js.map +1 -0
  579. package/dist/esm/queries2/types.d.ts +6 -0
  580. package/dist/esm/queries2/types.js +2 -0
  581. package/dist/esm/queries2/types.js.map +1 -0
  582. package/dist/esm/queries2/utils.d.ts +1 -0
  583. package/dist/esm/queries2/utils.js +16 -0
  584. package/dist/esm/queries2/utils.js.map +1 -0
  585. package/dist/esm/reactives/DocumentFamiliyCache.d.ts +47 -0
  586. package/dist/esm/reactives/DocumentFamiliyCache.js +207 -0
  587. package/dist/esm/reactives/DocumentFamiliyCache.js.map +1 -0
  588. package/dist/esm/reactives/Entity.d.ts +191 -0
  589. package/dist/esm/reactives/Entity.js +458 -0
  590. package/dist/esm/reactives/Entity.js.map +1 -0
  591. package/dist/esm/reactives/EntityStore.d.ts +84 -0
  592. package/dist/esm/reactives/EntityStore.js +418 -0
  593. package/dist/esm/reactives/EntityStore.js.map +1 -0
  594. package/dist/esm/reactives/FakeWeakRef.d.ts +11 -0
  595. package/dist/esm/reactives/FakeWeakRef.js +15 -0
  596. package/dist/esm/reactives/FakeWeakRef.js.map +1 -0
  597. package/dist/esm/sync/FileSync.d.ts +23 -23
  598. package/dist/esm/sync/FileSync.js +80 -80
  599. package/dist/esm/sync/Heartbeat.d.ts +25 -25
  600. package/dist/esm/sync/Heartbeat.js +59 -59
  601. package/dist/esm/sync/PresenceManager.d.ts +43 -43
  602. package/dist/esm/sync/PresenceManager.js +115 -115
  603. package/dist/esm/sync/PushPullSync.d.ts +36 -36
  604. package/dist/esm/sync/PushPullSync.js +139 -139
  605. package/dist/esm/sync/ServerSyncEndpointProvider.d.ts +27 -27
  606. package/dist/esm/sync/ServerSyncEndpointProvider.js +57 -57
  607. package/dist/esm/sync/Sync.d.ts +146 -146
  608. package/dist/esm/sync/Sync.js +265 -265
  609. package/dist/esm/sync/Sync.js.map +1 -1
  610. package/dist/esm/sync/{WebSocketSync.d.ts → WebsocketSync.d.ts} +41 -41
  611. package/dist/esm/sync/{WebSocketSync.js → WebsocketSync.js} +186 -186
  612. package/dist/esm/types.d.ts +12 -12
  613. package/dist/esm/types.js +1 -1
  614. package/dist/esm/utils/Disposable.d.ts +6 -6
  615. package/dist/esm/utils/Disposable.js +14 -14
  616. package/dist/esm/utils/Resolvable.d.ts +8 -8
  617. package/dist/esm/utils/Resolvable.js +18 -18
  618. package/dist/esm/v2/AckInfoStore.d.ts +10 -0
  619. package/dist/esm/v2/AckInfoStore.js +22 -0
  620. package/dist/esm/v2/AckInfoStore.js.map +1 -0
  621. package/dist/esm/v2/BaselinesStore.d.ts +10 -0
  622. package/dist/esm/v2/BaselinesStore.js +32 -0
  623. package/dist/esm/v2/BaselinesStore.js.map +1 -0
  624. package/dist/esm/v2/DocumentManager.d.ts +19 -0
  625. package/dist/esm/v2/DocumentManager.js +43 -0
  626. package/dist/esm/v2/DocumentManager.js.map +1 -0
  627. package/dist/esm/v2/Entity.d.ts +91 -0
  628. package/dist/esm/v2/Entity.js +305 -0
  629. package/dist/esm/v2/Entity.js.map +1 -0
  630. package/dist/esm/v2/EntityStore.d.ts +37 -0
  631. package/dist/esm/v2/EntityStore.js +166 -0
  632. package/dist/esm/v2/EntityStore.js.map +1 -0
  633. package/dist/esm/v2/IDBService.d.ts +7 -0
  634. package/dist/esm/v2/IDBService.js +22 -0
  635. package/dist/esm/v2/IDBService.js.map +1 -0
  636. package/dist/esm/v2/LocalHistoryStore.d.ts +15 -0
  637. package/dist/esm/v2/LocalHistoryStore.js +49 -0
  638. package/dist/esm/v2/LocalHistoryStore.js.map +1 -0
  639. package/dist/esm/v2/LocalReplicaStore.d.ts +14 -0
  640. package/dist/esm/v2/LocalReplicaStore.js +42 -0
  641. package/dist/esm/v2/LocalReplicaStore.js.map +1 -0
  642. package/dist/esm/v2/MessageCreator.d.ts +19 -0
  643. package/dist/esm/v2/MessageCreator.js +92 -0
  644. package/dist/esm/v2/MessageCreator.js.map +1 -0
  645. package/dist/esm/v2/Metadata.d.ts +90 -0
  646. package/dist/esm/v2/Metadata.js +246 -0
  647. package/dist/esm/v2/Metadata.js.map +1 -0
  648. package/dist/esm/v2/OperationsStore.d.ts +38 -0
  649. package/dist/esm/v2/OperationsStore.js +142 -0
  650. package/dist/esm/v2/OperationsStore.js.map +1 -0
  651. package/dist/esm/v2/PresenceManager.d.ts +24 -0
  652. package/dist/esm/v2/PresenceManager.js +69 -0
  653. package/dist/esm/v2/PresenceManager.js.map +1 -0
  654. package/dist/esm/v2/Query.d.ts +24 -0
  655. package/dist/esm/v2/Query.js +75 -0
  656. package/dist/esm/v2/Query.js.map +1 -0
  657. package/dist/esm/v2/QueryMaker.d.ts +16 -0
  658. package/dist/esm/v2/QueryMaker.js +80 -0
  659. package/dist/esm/v2/QueryMaker.js.map +1 -0
  660. package/dist/esm/v2/QueryStore.d.ts +26 -0
  661. package/dist/esm/v2/QueryStore.js +132 -0
  662. package/dist/esm/v2/QueryStore.js.map +1 -0
  663. package/dist/esm/v2/SchemaStore.d.ts +9 -0
  664. package/dist/esm/v2/SchemaStore.js +31 -0
  665. package/dist/esm/v2/SchemaStore.js.map +1 -0
  666. package/dist/esm/v2/Storage.d.ts +80 -0
  667. package/dist/esm/v2/Storage.js +149 -0
  668. package/dist/esm/v2/Storage.js.map +1 -0
  669. package/dist/esm/v2/Sync.d.ts +42 -0
  670. package/dist/esm/v2/Sync.js +94 -0
  671. package/dist/esm/v2/Sync.js.map +1 -0
  672. package/dist/esm/v2/SyncHarness.d.ts +45 -0
  673. package/dist/esm/v2/SyncHarness.js +105 -0
  674. package/dist/esm/v2/SyncHarness.js.map +1 -0
  675. package/dist/esm/v2/__tests__/documents.test.d.ts +1 -0
  676. package/dist/esm/v2/__tests__/documents.test.js +208 -0
  677. package/dist/esm/v2/__tests__/documents.test.js.map +1 -0
  678. package/dist/esm/v2/__tests__/fixtures/testStorage.d.ts +223 -0
  679. package/dist/esm/v2/__tests__/fixtures/testStorage.js +106 -0
  680. package/dist/esm/v2/__tests__/fixtures/testStorage.js.map +1 -0
  681. package/dist/esm/v2/__tests__/queries.test.d.ts +1 -0
  682. package/dist/esm/v2/__tests__/queries.test.js +90 -0
  683. package/dist/esm/v2/__tests__/queries.test.js.map +1 -0
  684. package/dist/esm/v2/__tests__/setup/indexedDB.d.ts +1 -0
  685. package/dist/esm/v2/__tests__/setup/indexedDB.js +2 -0
  686. package/dist/esm/v2/__tests__/setup/indexedDB.js.map +1 -0
  687. package/dist/esm/v2/constants.d.ts +1 -0
  688. package/dist/esm/v2/constants.js +2 -0
  689. package/dist/esm/v2/constants.js.map +1 -0
  690. package/dist/esm/v2/idb.d.ts +6 -0
  691. package/dist/esm/v2/idb.js +65 -0
  692. package/dist/esm/v2/idb.js.map +1 -0
  693. package/dist/esm/v2/index.d.ts +6 -0
  694. package/dist/esm/v2/index.js +5 -0
  695. package/dist/esm/v2/index.js.map +1 -0
  696. package/dist/esm/v2/indexes.d.ts +3 -0
  697. package/dist/esm/v2/indexes.js +15 -0
  698. package/dist/esm/v2/indexes.js.map +1 -0
  699. package/dist/esm/v2/openDocumentDatabase.d.ts +9 -0
  700. package/dist/esm/v2/openDocumentDatabase.js +96 -0
  701. package/dist/esm/v2/openDocumentDatabase.js.map +1 -0
  702. package/dist/esm/v2/types.d.ts +3 -0
  703. package/dist/esm/v2/types.js +2 -0
  704. package/dist/esm/v2/types.js.map +1 -0
  705. package/dist/esm/vanilla.d.ts +1 -1
  706. package/dist/esm/vanilla.js +2 -2
  707. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  708. package/dist/tsconfig.tsbuildinfo +1 -1
  709. package/package.json +2 -2
  710. package/src/__tests__/fixtures/testStorage.ts +8 -1
  711. package/src/__tests__/legacyOids.test.ts +240 -49
  712. package/src/client/ClientDescriptor.ts +6 -0
  713. package/src/client/constants.ts +1 -0
  714. package/src/metadata/openMetadataDatabase.ts +65 -2
  715. package/src/sync/Sync.ts +1 -0
  716. /package/dist/esm/sync/{WebSocketSync.js.map → WebsocketSync.js.map} +0 -0
@@ -1,17 +1,17 @@
1
- "use strict";var ar=Object.create;var vn=Object.defineProperty;var cr=Object.getOwnPropertyDescriptor;var lr=Object.getOwnPropertyNames;var dr=Object.getPrototypeOf,ur=Object.prototype.hasOwnProperty;var $e=(i,t)=>()=>(t||i((t={exports:{}}).exports,t),t.exports),fr=(i,t)=>{for(var e in t)vn(i,e,{get:t[e],enumerable:!0})},pr=(i,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of lr(t))!ur.call(i,r)&&r!==e&&vn(i,r,{get:()=>t[r],enumerable:!(n=cr(t,r))||n.enumerable});return i};var dt=(i,t,e)=>(e=i!=null?ar(dr(i)):{},pr(t||!i||!i.__esModule?vn(e,"default",{value:i,enumerable:!0}):e,i));var Sn=$e((Ps,oi)=>{oi.exports=function(t,e){var n="000000000"+t;return n.substr(n.length-e)}});var ci=$e((_s,ai)=>{var hr=Sn(),mr=typeof window=="object"?window:self,yr=Object.keys(mr).length,gr=navigator.mimeTypes?navigator.mimeTypes.length:0,br=hr((gr+navigator.userAgent.length).toString(36)+yr.toString(36),4);ai.exports=function(){return br}});var fi=$e((Ts,ui)=>{var xn,li=typeof window<"u"&&(window.crypto||window.msCrypto)||typeof self<"u"&&self.crypto;li?(di=Math.pow(2,32)-1,xn=function(){return Math.abs(li.getRandomValues(new Uint32Array(1))[0]/di)}):xn=Math.random;var di;ui.exports=xn});var pt=$e((As,yi)=>{var ut=ci(),pi=Sn(),wr=fi(),qe=0,In=4,ft=36,hi=Math.pow(ft,In);function On(){return pi((wr()*hi<<0).toString(ft),In)}function mi(){return qe=qe<hi?qe:0,qe++,qe-1}function We(){var i="c",t=new Date().getTime().toString(ft),e=pi(mi().toString(ft),In),n=ut(),r=On()+On();return i+t+e+n+r}We.slug=function(){var t=new Date().getTime().toString(36),e=mi().toString(36).slice(-4),n=ut().slice(0,1)+ut().slice(-1),r=On().slice(-2);return t.slice(-2)+e+n+r};We.isCuid=function(t){return typeof t!="string"?!1:!!t.startsWith("c")};We.isSlug=function(t){if(typeof t!="string")return!1;var e=t.length;return e>=7&&e<=10};We.fingerprint=ut;yi.exports=We});var Ti=$e((Pi,_i)=>{(function(i){var t;typeof Pi=="object"?_i.exports=i():typeof define=="function"&&define.amd?define(i):(typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"&&(t=self),t.objectHash=i())})(function(){return function i(t,e,n){function r(l,p){if(!e[l]){if(!t[l]){var h=typeof require=="function"&&require;if(!p&&h)return h(l,!0);if(s)return s(l,!0);throw new Error("Cannot find module '"+l+"'")}p=e[l]={exports:{}},t[l][0].call(p.exports,function(v){var E=t[l][1][v];return r(E||v)},p,p.exports,i,t,e,n)}return e[l].exports}for(var s=typeof require=="function"&&require,a=0;a<n.length;a++)r(n[a]);return r}({1:[function(i,t,e){(function(n,r,s,a,l,p,h,v,E){"use strict";var b=i("crypto");function P(y,I){I=C(y,I);var d;return(d=I.algorithm!=="passthrough"?b.createHash(I.algorithm):new A).write===void 0&&(d.write=d.update,d.end=d.update),S(I,d).dispatch(y),d.update||d.end(""),d.digest?d.digest(I.encoding==="buffer"?void 0:I.encoding):(y=d.read(),I.encoding!=="buffer"?y.toString(I.encoding):y)}(e=t.exports=P).sha1=function(y){return P(y)},e.keys=function(y){return P(y,{excludeValues:!0,algorithm:"sha1",encoding:"hex"})},e.MD5=function(y){return P(y,{algorithm:"md5",encoding:"hex"})},e.keysMD5=function(y){return P(y,{algorithm:"md5",encoding:"hex",excludeValues:!0})};var g=b.getHashes?b.getHashes().slice():["sha1","md5"],O=(g.push("passthrough"),["buffer","hex","binary","base64"]);function C(y,I){var d={};if(d.algorithm=(I=I||{}).algorithm||"sha1",d.encoding=I.encoding||"hex",d.excludeValues=!!I.excludeValues,d.algorithm=d.algorithm.toLowerCase(),d.encoding=d.encoding.toLowerCase(),d.ignoreUnknown=I.ignoreUnknown===!0,d.respectType=I.respectType!==!1,d.respectFunctionNames=I.respectFunctionNames!==!1,d.respectFunctionProperties=I.respectFunctionProperties!==!1,d.unorderedArrays=I.unorderedArrays===!0,d.unorderedSets=I.unorderedSets!==!1,d.unorderedObjects=I.unorderedObjects!==!1,d.replacer=I.replacer||void 0,d.excludeKeys=I.excludeKeys||void 0,y===void 0)throw new Error("Object argument required.");for(var f=0;f<g.length;++f)g[f].toLowerCase()===d.algorithm.toLowerCase()&&(d.algorithm=g[f]);if(g.indexOf(d.algorithm)===-1)throw new Error('Algorithm "'+d.algorithm+'" not supported. supported values: '+g.join(", "));if(O.indexOf(d.encoding)===-1&&d.algorithm!=="passthrough")throw new Error('Encoding "'+d.encoding+'" not supported. supported values: '+O.join(", "));return d}function x(y){if(typeof y=="function")return/^function\s+\w*\s*\(\s*\)\s*{\s+\[native code\]\s+}$/i.exec(Function.prototype.toString.call(y))!=null}function S(y,I,d){d=d||[];function f(c){return I.update?I.update(c,"utf8"):I.write(c,"utf8")}return{dispatch:function(c){return this["_"+((c=y.replacer?y.replacer(c):c)===null?"null":typeof c)](c)},_object:function(c){var w,D=Object.prototype.toString.call(c),F=/\[object (.*)\]/i.exec(D);if(F=(F=F?F[1]:"unknown:["+D+"]").toLowerCase(),0<=(D=d.indexOf(c)))return this.dispatch("[CIRCULAR:"+D+"]");if(d.push(c),s!==void 0&&s.isBuffer&&s.isBuffer(c))return f("buffer:"),f(c);if(F==="object"||F==="function"||F==="asyncfunction")return D=Object.keys(c),y.unorderedObjects&&(D=D.sort()),y.respectType===!1||x(c)||D.splice(0,0,"prototype","__proto__","constructor"),y.excludeKeys&&(D=D.filter(function(B){return!y.excludeKeys(B)})),f("object:"+D.length+":"),w=this,D.forEach(function(B){w.dispatch(B),f(":"),y.excludeValues||w.dispatch(c[B]),f(",")});if(!this["_"+F]){if(y.ignoreUnknown)return f("["+F+"]");throw new Error('Unknown object type "'+F+'"')}this["_"+F](c)},_array:function(c,B){B=B!==void 0?B:y.unorderedArrays!==!1;var D=this;if(f("array:"+c.length+":"),!B||c.length<=1)return c.forEach(function(j){return D.dispatch(j)});var F=[],B=c.map(function(j){var M=new A,q=d.slice();return S(y,M,q).dispatch(j),F=F.concat(q.slice(d.length)),M.read().toString()});return d=d.concat(F),B.sort(),this._array(B,!1)},_date:function(c){return f("date:"+c.toJSON())},_symbol:function(c){return f("symbol:"+c.toString())},_error:function(c){return f("error:"+c.toString())},_boolean:function(c){return f("bool:"+c.toString())},_string:function(c){f("string:"+c.length+":"),f(c.toString())},_function:function(c){f("fn:"),x(c)?this.dispatch("[native]"):this.dispatch(c.toString()),y.respectFunctionNames!==!1&&this.dispatch("function-name:"+String(c.name)),y.respectFunctionProperties&&this._object(c)},_number:function(c){return f("number:"+c.toString())},_xml:function(c){return f("xml:"+c.toString())},_null:function(){return f("Null")},_undefined:function(){return f("Undefined")},_regexp:function(c){return f("regex:"+c.toString())},_uint8array:function(c){return f("uint8array:"),this.dispatch(Array.prototype.slice.call(c))},_uint8clampedarray:function(c){return f("uint8clampedarray:"),this.dispatch(Array.prototype.slice.call(c))},_int8array:function(c){return f("int8array:"),this.dispatch(Array.prototype.slice.call(c))},_uint16array:function(c){return f("uint16array:"),this.dispatch(Array.prototype.slice.call(c))},_int16array:function(c){return f("int16array:"),this.dispatch(Array.prototype.slice.call(c))},_uint32array:function(c){return f("uint32array:"),this.dispatch(Array.prototype.slice.call(c))},_int32array:function(c){return f("int32array:"),this.dispatch(Array.prototype.slice.call(c))},_float32array:function(c){return f("float32array:"),this.dispatch(Array.prototype.slice.call(c))},_float64array:function(c){return f("float64array:"),this.dispatch(Array.prototype.slice.call(c))},_arraybuffer:function(c){return f("arraybuffer:"),this.dispatch(new Uint8Array(c))},_url:function(c){return f("url:"+c.toString())},_map:function(c){return f("map:"),c=Array.from(c),this._array(c,y.unorderedSets!==!1)},_set:function(c){return f("set:"),c=Array.from(c),this._array(c,y.unorderedSets!==!1)},_file:function(c){return f("file:"),this.dispatch([c.name,c.size,c.type,c.lastModfied])},_blob:function(){if(y.ignoreUnknown)return f("[blob]");throw Error(`Hashing Blob objects is currently not supported
1
+ "use strict";var lr=Object.create;var vn=Object.defineProperty;var dr=Object.getOwnPropertyDescriptor;var ur=Object.getOwnPropertyNames;var pr=Object.getPrototypeOf,fr=Object.prototype.hasOwnProperty;var $e=(i,t)=>()=>(t||i((t={exports:{}}).exports,t),t.exports),hr=(i,t)=>{for(var e in t)vn(i,e,{get:t[e],enumerable:!0})},mr=(i,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ur(t))!fr.call(i,r)&&r!==e&&vn(i,r,{get:()=>t[r],enumerable:!(n=dr(t,r))||n.enumerable});return i};var dt=(i,t,e)=>(e=i!=null?lr(pr(i)):{},mr(t||!i||!i.__esModule?vn(e,"default",{value:i,enumerable:!0}):e,i));var Sn=$e((Ms,ai)=>{ai.exports=function(t,e){var n="000000000"+t;return n.substr(n.length-e)}});var li=$e((Bs,ci)=>{var yr=Sn(),gr=typeof window=="object"?window:self,br=Object.keys(gr).length,wr=navigator.mimeTypes?navigator.mimeTypes.length:0,vr=yr((wr+navigator.userAgent.length).toString(36)+br.toString(36),4);ci.exports=function(){return vr}});var fi=$e((Fs,pi)=>{var xn,di=typeof window<"u"&&(window.crypto||window.msCrypto)||typeof self<"u"&&self.crypto;di?(ui=Math.pow(2,32)-1,xn=function(){return Math.abs(di.getRandomValues(new Uint32Array(1))[0]/ui)}):xn=Math.random;var ui;pi.exports=xn});var ft=$e((js,gi)=>{var ut=li(),hi=Sn(),Sr=fi(),qe=0,In=4,pt=36,mi=Math.pow(pt,In);function On(){return hi((Sr()*mi<<0).toString(pt),In)}function yi(){return qe=qe<mi?qe:0,qe++,qe-1}function We(){var i="c",t=new Date().getTime().toString(pt),e=hi(yi().toString(pt),In),n=ut(),r=On()+On();return i+t+e+n+r}We.slug=function(){var t=new Date().getTime().toString(36),e=yi().toString(36).slice(-4),n=ut().slice(0,1)+ut().slice(-1),r=On().slice(-2);return t.slice(-2)+e+n+r};We.isCuid=function(t){return typeof t!="string"?!1:!!t.startsWith("c")};We.isSlug=function(t){if(typeof t!="string")return!1;var e=t.length;return e>=7&&e<=10};We.fingerprint=ut;gi.exports=We});var Ai=$e((_i,Ti)=>{(function(i){var t;typeof _i=="object"?Ti.exports=i():typeof define=="function"&&define.amd?define(i):(typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"&&(t=self),t.objectHash=i())})(function(){return function i(t,e,n){function r(c,f){if(!e[c]){if(!t[c]){var h=typeof require=="function"&&require;if(!f&&h)return h(c,!0);if(s)return s(c,!0);throw new Error("Cannot find module '"+c+"'")}f=e[c]={exports:{}},t[c][0].call(f.exports,function(x){var E=t[c][1][x];return r(E||x)},f,f.exports,i,t,e,n)}return e[c].exports}for(var s=typeof require=="function"&&require,o=0;o<n.length;o++)r(n[o]);return r}({1:[function(i,t,e){(function(n,r,s,o,c,f,h,x,E){"use strict";var g=i("crypto");function P(y,I){I=C(y,I);var d;return(d=I.algorithm!=="passthrough"?g.createHash(I.algorithm):new A).write===void 0&&(d.write=d.update,d.end=d.update),O(I,d).dispatch(y),d.update||d.end(""),d.digest?d.digest(I.encoding==="buffer"?void 0:I.encoding):(y=d.read(),I.encoding!=="buffer"?y.toString(I.encoding):y)}(e=t.exports=P).sha1=function(y){return P(y)},e.keys=function(y){return P(y,{excludeValues:!0,algorithm:"sha1",encoding:"hex"})},e.MD5=function(y){return P(y,{algorithm:"md5",encoding:"hex"})},e.keysMD5=function(y){return P(y,{algorithm:"md5",encoding:"hex",excludeValues:!0})};var b=g.getHashes?g.getHashes().slice():["sha1","md5"],v=(b.push("passthrough"),["buffer","hex","binary","base64"]);function C(y,I){var d={};if(d.algorithm=(I=I||{}).algorithm||"sha1",d.encoding=I.encoding||"hex",d.excludeValues=!!I.excludeValues,d.algorithm=d.algorithm.toLowerCase(),d.encoding=d.encoding.toLowerCase(),d.ignoreUnknown=I.ignoreUnknown===!0,d.respectType=I.respectType!==!1,d.respectFunctionNames=I.respectFunctionNames!==!1,d.respectFunctionProperties=I.respectFunctionProperties!==!1,d.unorderedArrays=I.unorderedArrays===!0,d.unorderedSets=I.unorderedSets!==!1,d.unorderedObjects=I.unorderedObjects!==!1,d.replacer=I.replacer||void 0,d.excludeKeys=I.excludeKeys||void 0,y===void 0)throw new Error("Object argument required.");for(var p=0;p<b.length;++p)b[p].toLowerCase()===d.algorithm.toLowerCase()&&(d.algorithm=b[p]);if(b.indexOf(d.algorithm)===-1)throw new Error('Algorithm "'+d.algorithm+'" not supported. supported values: '+b.join(", "));if(v.indexOf(d.encoding)===-1&&d.algorithm!=="passthrough")throw new Error('Encoding "'+d.encoding+'" not supported. supported values: '+v.join(", "));return d}function S(y){if(typeof y=="function")return/^function\s+\w*\s*\(\s*\)\s*{\s+\[native code\]\s+}$/i.exec(Function.prototype.toString.call(y))!=null}function O(y,I,d){d=d||[];function p(l){return I.update?I.update(l,"utf8"):I.write(l,"utf8")}return{dispatch:function(l){return this["_"+((l=y.replacer?y.replacer(l):l)===null?"null":typeof l)](l)},_object:function(l){var w,D=Object.prototype.toString.call(l),F=/\[object (.*)\]/i.exec(D);if(F=(F=F?F[1]:"unknown:["+D+"]").toLowerCase(),0<=(D=d.indexOf(l)))return this.dispatch("[CIRCULAR:"+D+"]");if(d.push(l),s!==void 0&&s.isBuffer&&s.isBuffer(l))return p("buffer:"),p(l);if(F==="object"||F==="function"||F==="asyncfunction")return D=Object.keys(l),y.unorderedObjects&&(D=D.sort()),y.respectType===!1||S(l)||D.splice(0,0,"prototype","__proto__","constructor"),y.excludeKeys&&(D=D.filter(function(B){return!y.excludeKeys(B)})),p("object:"+D.length+":"),w=this,D.forEach(function(B){w.dispatch(B),p(":"),y.excludeValues||w.dispatch(l[B]),p(",")});if(!this["_"+F]){if(y.ignoreUnknown)return p("["+F+"]");throw new Error('Unknown object type "'+F+'"')}this["_"+F](l)},_array:function(l,B){B=B!==void 0?B:y.unorderedArrays!==!1;var D=this;if(p("array:"+l.length+":"),!B||l.length<=1)return l.forEach(function(j){return D.dispatch(j)});var F=[],B=l.map(function(j){var M=new A,q=d.slice();return O(y,M,q).dispatch(j),F=F.concat(q.slice(d.length)),M.read().toString()});return d=d.concat(F),B.sort(),this._array(B,!1)},_date:function(l){return p("date:"+l.toJSON())},_symbol:function(l){return p("symbol:"+l.toString())},_error:function(l){return p("error:"+l.toString())},_boolean:function(l){return p("bool:"+l.toString())},_string:function(l){p("string:"+l.length+":"),p(l.toString())},_function:function(l){p("fn:"),S(l)?this.dispatch("[native]"):this.dispatch(l.toString()),y.respectFunctionNames!==!1&&this.dispatch("function-name:"+String(l.name)),y.respectFunctionProperties&&this._object(l)},_number:function(l){return p("number:"+l.toString())},_xml:function(l){return p("xml:"+l.toString())},_null:function(){return p("Null")},_undefined:function(){return p("Undefined")},_regexp:function(l){return p("regex:"+l.toString())},_uint8array:function(l){return p("uint8array:"),this.dispatch(Array.prototype.slice.call(l))},_uint8clampedarray:function(l){return p("uint8clampedarray:"),this.dispatch(Array.prototype.slice.call(l))},_int8array:function(l){return p("int8array:"),this.dispatch(Array.prototype.slice.call(l))},_uint16array:function(l){return p("uint16array:"),this.dispatch(Array.prototype.slice.call(l))},_int16array:function(l){return p("int16array:"),this.dispatch(Array.prototype.slice.call(l))},_uint32array:function(l){return p("uint32array:"),this.dispatch(Array.prototype.slice.call(l))},_int32array:function(l){return p("int32array:"),this.dispatch(Array.prototype.slice.call(l))},_float32array:function(l){return p("float32array:"),this.dispatch(Array.prototype.slice.call(l))},_float64array:function(l){return p("float64array:"),this.dispatch(Array.prototype.slice.call(l))},_arraybuffer:function(l){return p("arraybuffer:"),this.dispatch(new Uint8Array(l))},_url:function(l){return p("url:"+l.toString())},_map:function(l){return p("map:"),l=Array.from(l),this._array(l,y.unorderedSets!==!1)},_set:function(l){return p("set:"),l=Array.from(l),this._array(l,y.unorderedSets!==!1)},_file:function(l){return p("file:"),this.dispatch([l.name,l.size,l.type,l.lastModfied])},_blob:function(){if(y.ignoreUnknown)return p("[blob]");throw Error(`Hashing Blob objects is currently not supported
2
2
  (see https://github.com/puleos/object-hash/issues/26)
3
3
  Use "options.replacer" or "options.ignoreUnknown"
4
- `)},_domwindow:function(){return f("domwindow")},_bigint:function(c){return f("bigint:"+c.toString())},_process:function(){return f("process")},_timer:function(){return f("timer")},_pipe:function(){return f("pipe")},_tcp:function(){return f("tcp")},_udp:function(){return f("udp")},_tty:function(){return f("tty")},_statwatcher:function(){return f("statwatcher")},_securecontext:function(){return f("securecontext")},_connection:function(){return f("connection")},_zlib:function(){return f("zlib")},_context:function(){return f("context")},_nodescript:function(){return f("nodescript")},_httpparser:function(){return f("httpparser")},_dataview:function(){return f("dataview")},_signal:function(){return f("signal")},_fsevent:function(){return f("fsevent")},_tlswrap:function(){return f("tlswrap")}}}function A(){return{buf:"",write:function(y){this.buf+=y},end:function(y){this.buf+=y},read:function(){return this.buf}}}e.writeToStream=function(y,I,d){return d===void 0&&(d=I,I={}),S(I=C(y,I),d).dispatch(y)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_9a5aa49d.js","/")},{buffer:3,crypto:5,lYpoI2:11}],2:[function(i,t,e){(function(n,r,s,a,l,p,h,v,E){(function(b){"use strict";var P=typeof Uint8Array<"u"?Uint8Array:Array,g="+".charCodeAt(0),O="/".charCodeAt(0),C="0".charCodeAt(0),x="a".charCodeAt(0),S="A".charCodeAt(0),A="-".charCodeAt(0),y="_".charCodeAt(0);function I(d){return d=d.charCodeAt(0),d===g||d===A?62:d===O||d===y?63:d<C?-1:d<C+10?d-C+26+26:d<S+26?d-S:d<x+26?d-x+26:void 0}b.toByteArray=function(d){var f,c;if(0<d.length%4)throw new Error("Invalid string. Length must be a multiple of 4");var w=d.length,w=d.charAt(w-2)==="="?2:d.charAt(w-1)==="="?1:0,D=new P(3*d.length/4-w),F=0<w?d.length-4:d.length,B=0;function j(M){D[B++]=M}for(f=0;f<F;f+=4,0)j((16711680&(c=I(d.charAt(f))<<18|I(d.charAt(f+1))<<12|I(d.charAt(f+2))<<6|I(d.charAt(f+3))))>>16),j((65280&c)>>8),j(255&c);return w==2?j(255&(c=I(d.charAt(f))<<2|I(d.charAt(f+1))>>4)):w==1&&(j((c=I(d.charAt(f))<<10|I(d.charAt(f+1))<<4|I(d.charAt(f+2))>>2)>>8&255),j(255&c)),D},b.fromByteArray=function(d){var f,c,w,D,F=d.length%3,B="";function j(M){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(M)}for(f=0,w=d.length-F;f<w;f+=3)c=(d[f]<<16)+(d[f+1]<<8)+d[f+2],B+=j((D=c)>>18&63)+j(D>>12&63)+j(D>>6&63)+j(63&D);switch(F){case 1:B=(B+=j((c=d[d.length-1])>>2))+j(c<<4&63)+"==";break;case 2:B=(B=(B+=j((c=(d[d.length-2]<<8)+d[d.length-1])>>10))+j(c>>4&63))+j(c<<2&63)+"="}return B}})(e===void 0?this.base64js={}:e)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(i,t,e){(function(n,r,g,a,l,p,h,v,E){var b=i("base64-js"),P=i("ieee754");function g(o,u,m){if(!(this instanceof g))return new g(o,u,m);var T,_,R,L,Q=typeof o;if(u==="base64"&&Q=="string")for(o=(L=o).trim?L.trim():L.replace(/^\s+|\s+$/g,"");o.length%4!=0;)o+="=";if(Q=="number")T=ee(o);else if(Q=="string")T=g.byteLength(o,u);else{if(Q!="object")throw new Error("First argument needs to be a number, array or string.");T=ee(o.length)}if(g._useTypedArrays?_=g._augment(new Uint8Array(T)):((_=this).length=T,_._isBuffer=!0),g._useTypedArrays&&typeof o.byteLength=="number")_._set(o);else if(H(L=o)||g.isBuffer(L)||L&&typeof L=="object"&&typeof L.length=="number")for(R=0;R<T;R++)g.isBuffer(o)?_[R]=o.readUInt8(R):_[R]=o[R];else if(Q=="string")_.write(o,0,u);else if(Q=="number"&&!g._useTypedArrays&&!m)for(R=0;R<T;R++)_[R]=0;return _}function O(o,u,m,T){return g._charsWritten=lt(function(_){for(var R=[],L=0;L<_.length;L++)R.push(255&_.charCodeAt(L));return R}(u),o,m,T)}function C(o,u,m,T){return g._charsWritten=lt(function(_){for(var R,L,Q=[],Y=0;Y<_.length;Y++)L=_.charCodeAt(Y),R=L>>8,L=L%256,Q.push(L),Q.push(R);return Q}(u),o,m,T)}function x(o,u,m){var T="";m=Math.min(o.length,m);for(var _=u;_<m;_++)T+=String.fromCharCode(o[_]);return T}function S(o,u,m,R){R||(k(typeof m=="boolean","missing or invalid endian"),k(u!=null,"missing offset"),k(u+1<o.length,"Trying to read beyond buffer length"));var _,R=o.length;if(!(R<=u))return m?(_=o[u],u+1<R&&(_|=o[u+1]<<8)):(_=o[u]<<8,u+1<R&&(_|=o[u+1])),_}function A(o,u,m,R){R||(k(typeof m=="boolean","missing or invalid endian"),k(u!=null,"missing offset"),k(u+3<o.length,"Trying to read beyond buffer length"));var _,R=o.length;if(!(R<=u))return m?(u+2<R&&(_=o[u+2]<<16),u+1<R&&(_|=o[u+1]<<8),_|=o[u],u+3<R&&(_+=o[u+3]<<24>>>0)):(u+1<R&&(_=o[u+1]<<16),u+2<R&&(_|=o[u+2]<<8),u+3<R&&(_|=o[u+3]),_+=o[u]<<24>>>0),_}function y(o,u,m,T){if(T||(k(typeof m=="boolean","missing or invalid endian"),k(u!=null,"missing offset"),k(u+1<o.length,"Trying to read beyond buffer length")),!(o.length<=u))return T=S(o,u,m,!0),32768&T?-1*(65535-T+1):T}function I(o,u,m,T){if(T||(k(typeof m=="boolean","missing or invalid endian"),k(u!=null,"missing offset"),k(u+3<o.length,"Trying to read beyond buffer length")),!(o.length<=u))return T=A(o,u,m,!0),2147483648&T?-1*(4294967295-T+1):T}function d(o,u,m,T){return T||(k(typeof m=="boolean","missing or invalid endian"),k(u+3<o.length,"Trying to read beyond buffer length")),P.read(o,u,m,23,4)}function f(o,u,m,T){return T||(k(typeof m=="boolean","missing or invalid endian"),k(u+7<o.length,"Trying to read beyond buffer length")),P.read(o,u,m,52,8)}function c(o,u,m,T,_){if(_||(k(u!=null,"missing value"),k(typeof T=="boolean","missing or invalid endian"),k(m!=null,"missing offset"),k(m+1<o.length,"trying to write beyond buffer length"),bn(u,65535)),_=o.length,!(_<=m))for(var R=0,L=Math.min(_-m,2);R<L;R++)o[m+R]=(u&255<<8*(T?R:1-R))>>>8*(T?R:1-R)}function w(o,u,m,T,_){if(_||(k(u!=null,"missing value"),k(typeof T=="boolean","missing or invalid endian"),k(m!=null,"missing offset"),k(m+3<o.length,"trying to write beyond buffer length"),bn(u,4294967295)),_=o.length,!(_<=m))for(var R=0,L=Math.min(_-m,4);R<L;R++)o[m+R]=u>>>8*(T?R:3-R)&255}function D(o,u,m,T,_){_||(k(u!=null,"missing value"),k(typeof T=="boolean","missing or invalid endian"),k(m!=null,"missing offset"),k(m+1<o.length,"Trying to write beyond buffer length"),wn(u,32767,-32768)),o.length<=m||c(o,0<=u?u:65535+u+1,m,T,_)}function F(o,u,m,T,_){_||(k(u!=null,"missing value"),k(typeof T=="boolean","missing or invalid endian"),k(m!=null,"missing offset"),k(m+3<o.length,"Trying to write beyond buffer length"),wn(u,2147483647,-2147483648)),o.length<=m||w(o,0<=u?u:4294967295+u+1,m,T,_)}function B(o,u,m,T,_){_||(k(u!=null,"missing value"),k(typeof T=="boolean","missing or invalid endian"),k(m!=null,"missing offset"),k(m+3<o.length,"Trying to write beyond buffer length"),ri(u,34028234663852886e22,-34028234663852886e22)),o.length<=m||P.write(o,u,m,T,23,4)}function j(o,u,m,T,_){_||(k(u!=null,"missing value"),k(typeof T=="boolean","missing or invalid endian"),k(m!=null,"missing offset"),k(m+7<o.length,"Trying to write beyond buffer length"),ri(u,17976931348623157e292,-17976931348623157e292)),o.length<=m||P.write(o,u,m,T,52,8)}e.Buffer=g,e.SlowBuffer=g,e.INSPECT_MAX_BYTES=50,g.poolSize=8192,g._useTypedArrays=function(){try{var o=new ArrayBuffer(0),u=new Uint8Array(o);return u.foo=function(){return 42},u.foo()===42&&typeof u.subarray=="function"}catch{return!1}}(),g.isEncoding=function(o){switch(String(o).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},g.isBuffer=function(o){return!(o==null||!o._isBuffer)},g.byteLength=function(o,u){var m;switch(o+="",u||"utf8"){case"hex":m=o.length/2;break;case"utf8":case"utf-8":m=be(o).length;break;case"ascii":case"binary":case"raw":m=o.length;break;case"base64":m=ni(o).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=2*o.length;break;default:throw new Error("Unknown encoding")}return m},g.concat=function(o,u){if(k(H(o),`Usage: Buffer.concat(list, [totalLength])
5
- list should be an Array.`),o.length===0)return new g(0);if(o.length===1)return o[0];if(typeof u!="number")for(_=u=0;_<o.length;_++)u+=o[_].length;for(var m=new g(u),T=0,_=0;_<o.length;_++){var R=o[_];R.copy(m,T),T+=R.length}return m},g.prototype.write=function(o,u,m,T){isFinite(u)?isFinite(m)||(T=m,m=void 0):(Y=T,T=u,u=m,m=Y),u=Number(u)||0;var _,R,L,Q,Y=this.length-u;switch((!m||Y<(m=Number(m)))&&(m=Y),T=String(T||"utf8").toLowerCase()){case"hex":_=function(he,ie,re,G){re=Number(re)||0;var J=he.length-re;(!G||J<(G=Number(G)))&&(G=J),k((J=ie.length)%2==0,"Invalid hex string"),J/2<G&&(G=J/2);for(var Fe=0;Fe<G;Fe++){var si=parseInt(ie.substr(2*Fe,2),16);k(!isNaN(si),"Invalid hex string"),he[re+Fe]=si}return g._charsWritten=2*Fe,Fe}(this,o,u,m);break;case"utf8":case"utf-8":R=this,L=u,Q=m,_=g._charsWritten=lt(be(o),R,L,Q);break;case"ascii":case"binary":_=O(this,o,u,m);break;case"base64":R=this,L=u,Q=m,_=g._charsWritten=lt(ni(o),R,L,Q);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":_=C(this,o,u,m);break;default:throw new Error("Unknown encoding")}return _},g.prototype.toString=function(o,u,m){var T,_,R,L,Q=this;if(o=String(o||"utf8").toLowerCase(),u=Number(u)||0,(m=m!==void 0?Number(m):Q.length)===u)return"";switch(o){case"hex":T=function(Y,he,ie){var re=Y.length;(!he||he<0)&&(he=0),(!ie||ie<0||re<ie)&&(ie=re);for(var G="",J=he;J<ie;J++)G+=$(Y[J]);return G}(Q,u,m);break;case"utf8":case"utf-8":T=function(Y,he,ie){var re="",G="";ie=Math.min(Y.length,ie);for(var J=he;J<ie;J++)Y[J]<=127?(re+=ii(G)+String.fromCharCode(Y[J]),G=""):G+="%"+Y[J].toString(16);return re+ii(G)}(Q,u,m);break;case"ascii":case"binary":T=x(Q,u,m);break;case"base64":_=Q,L=m,T=(R=u)===0&&L===_.length?b.fromByteArray(_):b.fromByteArray(_.slice(R,L));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":T=function(Y,he,ie){for(var re=Y.slice(he,ie),G="",J=0;J<re.length;J+=2)G+=String.fromCharCode(re[J]+256*re[J+1]);return G}(Q,u,m);break;default:throw new Error("Unknown encoding")}return T},g.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},g.prototype.copy=function(o,u,m,T){if(u=u||0,(T=T||T===0?T:this.length)!==(m=m||0)&&o.length!==0&&this.length!==0){k(m<=T,"sourceEnd < sourceStart"),k(0<=u&&u<o.length,"targetStart out of bounds"),k(0<=m&&m<this.length,"sourceStart out of bounds"),k(0<=T&&T<=this.length,"sourceEnd out of bounds"),T>this.length&&(T=this.length);var _=(T=o.length-u<T-m?o.length-u+m:T)-m;if(_<100||!g._useTypedArrays)for(var R=0;R<_;R++)o[R+u]=this[R+m];else o._set(this.subarray(m,m+_),u)}},g.prototype.slice=function(o,u){var m=this.length;if(o=q(o,m,0),u=q(u,m,m),g._useTypedArrays)return g._augment(this.subarray(o,u));for(var T=u-o,_=new g(T,void 0,!0),R=0;R<T;R++)_[R]=this[R+o];return _},g.prototype.get=function(o){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(o)},g.prototype.set=function(o,u){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(o,u)},g.prototype.readUInt8=function(o,u){if(u||(k(o!=null,"missing offset"),k(o<this.length,"Trying to read beyond buffer length")),!(o>=this.length))return this[o]},g.prototype.readUInt16LE=function(o,u){return S(this,o,!0,u)},g.prototype.readUInt16BE=function(o,u){return S(this,o,!1,u)},g.prototype.readUInt32LE=function(o,u){return A(this,o,!0,u)},g.prototype.readUInt32BE=function(o,u){return A(this,o,!1,u)},g.prototype.readInt8=function(o,u){if(u||(k(o!=null,"missing offset"),k(o<this.length,"Trying to read beyond buffer length")),!(o>=this.length))return 128&this[o]?-1*(255-this[o]+1):this[o]},g.prototype.readInt16LE=function(o,u){return y(this,o,!0,u)},g.prototype.readInt16BE=function(o,u){return y(this,o,!1,u)},g.prototype.readInt32LE=function(o,u){return I(this,o,!0,u)},g.prototype.readInt32BE=function(o,u){return I(this,o,!1,u)},g.prototype.readFloatLE=function(o,u){return d(this,o,!0,u)},g.prototype.readFloatBE=function(o,u){return d(this,o,!1,u)},g.prototype.readDoubleLE=function(o,u){return f(this,o,!0,u)},g.prototype.readDoubleBE=function(o,u){return f(this,o,!1,u)},g.prototype.writeUInt8=function(o,u,m){m||(k(o!=null,"missing value"),k(u!=null,"missing offset"),k(u<this.length,"trying to write beyond buffer length"),bn(o,255)),u>=this.length||(this[u]=o)},g.prototype.writeUInt16LE=function(o,u,m){c(this,o,u,!0,m)},g.prototype.writeUInt16BE=function(o,u,m){c(this,o,u,!1,m)},g.prototype.writeUInt32LE=function(o,u,m){w(this,o,u,!0,m)},g.prototype.writeUInt32BE=function(o,u,m){w(this,o,u,!1,m)},g.prototype.writeInt8=function(o,u,m){m||(k(o!=null,"missing value"),k(u!=null,"missing offset"),k(u<this.length,"Trying to write beyond buffer length"),wn(o,127,-128)),u>=this.length||(0<=o?this.writeUInt8(o,u,m):this.writeUInt8(255+o+1,u,m))},g.prototype.writeInt16LE=function(o,u,m){D(this,o,u,!0,m)},g.prototype.writeInt16BE=function(o,u,m){D(this,o,u,!1,m)},g.prototype.writeInt32LE=function(o,u,m){F(this,o,u,!0,m)},g.prototype.writeInt32BE=function(o,u,m){F(this,o,u,!1,m)},g.prototype.writeFloatLE=function(o,u,m){B(this,o,u,!0,m)},g.prototype.writeFloatBE=function(o,u,m){B(this,o,u,!1,m)},g.prototype.writeDoubleLE=function(o,u,m){j(this,o,u,!0,m)},g.prototype.writeDoubleBE=function(o,u,m){j(this,o,u,!1,m)},g.prototype.fill=function(o,u,m){if(u=u||0,m=m||this.length,k(typeof(o=typeof(o=o||0)=="string"?o.charCodeAt(0):o)=="number"&&!isNaN(o),"value is not a number"),k(u<=m,"end < start"),m!==u&&this.length!==0){k(0<=u&&u<this.length,"start out of bounds"),k(0<=m&&m<=this.length,"end out of bounds");for(var T=u;T<m;T++)this[T]=o}},g.prototype.inspect=function(){for(var o=[],u=this.length,m=0;m<u;m++)if(o[m]=$(this[m]),m===e.INSPECT_MAX_BYTES){o[m+1]="...";break}return"<Buffer "+o.join(" ")+">"},g.prototype.toArrayBuffer=function(){if(typeof Uint8Array>"u")throw new Error("Buffer.toArrayBuffer not supported in this browser");if(g._useTypedArrays)return new g(this).buffer;for(var o=new Uint8Array(this.length),u=0,m=o.length;u<m;u+=1)o[u]=this[u];return o.buffer};var M=g.prototype;function q(o,u,m){return typeof o!="number"?m:u<=(o=~~o)?u:0<=o||0<=(o+=u)?o:0}function ee(o){return(o=~~Math.ceil(+o))<0?0:o}function H(o){return(Array.isArray||function(u){return Object.prototype.toString.call(u)==="[object Array]"})(o)}function $(o){return o<16?"0"+o.toString(16):o.toString(16)}function be(o){for(var u=[],m=0;m<o.length;m++){var T=o.charCodeAt(m);if(T<=127)u.push(o.charCodeAt(m));else for(var _=m,R=(55296<=T&&T<=57343&&m++,encodeURIComponent(o.slice(_,m+1)).substr(1).split("%")),L=0;L<R.length;L++)u.push(parseInt(R[L],16))}return u}function ni(o){return b.toByteArray(o)}function lt(o,u,m,T){for(var _=0;_<T&&!(_+m>=u.length||_>=o.length);_++)u[_+m]=o[_];return _}function ii(o){try{return decodeURIComponent(o)}catch{return String.fromCharCode(65533)}}function bn(o,u){k(typeof o=="number","cannot write a non-number as a number"),k(0<=o,"specified a negative value for writing an unsigned value"),k(o<=u,"value is larger than maximum value for type"),k(Math.floor(o)===o,"value has a fractional component")}function wn(o,u,m){k(typeof o=="number","cannot write a non-number as a number"),k(o<=u,"value larger than maximum allowed value"),k(m<=o,"value smaller than minimum allowed value"),k(Math.floor(o)===o,"value has a fractional component")}function ri(o,u,m){k(typeof o=="number","cannot write a non-number as a number"),k(o<=u,"value larger than maximum allowed value"),k(m<=o,"value smaller than minimum allowed value")}function k(o,u){if(!o)throw new Error(u||"Failed assertion")}g._augment=function(o){return o._isBuffer=!0,o._get=o.get,o._set=o.set,o.get=M.get,o.set=M.set,o.write=M.write,o.toString=M.toString,o.toLocaleString=M.toString,o.toJSON=M.toJSON,o.copy=M.copy,o.slice=M.slice,o.readUInt8=M.readUInt8,o.readUInt16LE=M.readUInt16LE,o.readUInt16BE=M.readUInt16BE,o.readUInt32LE=M.readUInt32LE,o.readUInt32BE=M.readUInt32BE,o.readInt8=M.readInt8,o.readInt16LE=M.readInt16LE,o.readInt16BE=M.readInt16BE,o.readInt32LE=M.readInt32LE,o.readInt32BE=M.readInt32BE,o.readFloatLE=M.readFloatLE,o.readFloatBE=M.readFloatBE,o.readDoubleLE=M.readDoubleLE,o.readDoubleBE=M.readDoubleBE,o.writeUInt8=M.writeUInt8,o.writeUInt16LE=M.writeUInt16LE,o.writeUInt16BE=M.writeUInt16BE,o.writeUInt32LE=M.writeUInt32LE,o.writeUInt32BE=M.writeUInt32BE,o.writeInt8=M.writeInt8,o.writeInt16LE=M.writeInt16LE,o.writeInt16BE=M.writeInt16BE,o.writeInt32LE=M.writeInt32LE,o.writeInt32BE=M.writeInt32BE,o.writeFloatLE=M.writeFloatLE,o.writeFloatBE=M.writeFloatBE,o.writeDoubleLE=M.writeDoubleLE,o.writeDoubleBE=M.writeDoubleBE,o.fill=M.fill,o.inspect=M.inspect,o.toArrayBuffer=M.toArrayBuffer,o}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(i,t,e){(function(n,r,b,a,l,p,h,v,E){var b=i("buffer").Buffer,P=4,g=new b(P);g.fill(0),t.exports={hash:function(O,C,x,S){for(var A=C(function(c,w){c.length%P!=0&&(D=c.length+(P-c.length%P),c=b.concat([c,g],D));for(var D,F=[],B=w?c.readInt32BE:c.readInt32LE,j=0;j<c.length;j+=P)F.push(B.call(c,j));return F}(O=b.isBuffer(O)?O:new b(O),S),8*O.length),C=S,y=new b(x),I=C?y.writeInt32BE:y.writeInt32LE,d=0;d<A.length;d++)I.call(y,A[d],4*d,!0);return y}}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],5:[function(i,t,e){(function(n,r,b,a,l,p,h,v,E){var b=i("buffer").Buffer,P=i("./sha"),g=i("./sha256"),O=i("./rng"),C={sha1:P,sha256:g,md5:i("./md5")},x=64,S=new b(x);function A(c,w){var D=C[c=c||"sha1"],F=[];return D||y("algorithm:",c,"is not yet supported"),{update:function(B){return b.isBuffer(B)||(B=new b(B)),F.push(B),B.length,this},digest:function(B){var j=b.concat(F),j=w?function(M,q,ee){b.isBuffer(q)||(q=new b(q)),b.isBuffer(ee)||(ee=new b(ee)),q.length>x?q=M(q):q.length<x&&(q=b.concat([q,S],x));for(var H=new b(x),$=new b(x),be=0;be<x;be++)H[be]=54^q[be],$[be]=92^q[be];return ee=M(b.concat([H,ee])),M(b.concat([$,ee]))}(D,w,j):D(j);return F=null,B?j.toString(B):j}}}function y(){var c=[].slice.call(arguments).join(" ");throw new Error([c,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
6
- `))}S.fill(0),e.createHash=function(c){return A(c)},e.createHmac=A,e.randomBytes=function(c,w){if(!w||!w.call)return new b(O(c));try{w.call(this,void 0,new b(O(c)))}catch(D){w(D)}};var I,d=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],f=function(c){e[c]=function(){y("sorry,",c,"is not implemented yet")}};for(I in d)f(d[I],I)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./md5":6,"./rng":7,"./sha":8,"./sha256":9,buffer:3,lYpoI2:11}],6:[function(i,t,e){(function(n,r,s,a,l,p,h,v,E){var b=i("./helpers");function P(y,I){y[I>>5]|=128<<I%32,y[14+(I+64>>>9<<4)]=I;for(var d=1732584193,f=-271733879,c=-1732584194,w=271733878,D=0;D<y.length;D+=16){var F=d,B=f,j=c,M=w,d=O(d,f,c,w,y[D+0],7,-680876936),w=O(w,d,f,c,y[D+1],12,-389564586),c=O(c,w,d,f,y[D+2],17,606105819),f=O(f,c,w,d,y[D+3],22,-1044525330);d=O(d,f,c,w,y[D+4],7,-176418897),w=O(w,d,f,c,y[D+5],12,1200080426),c=O(c,w,d,f,y[D+6],17,-1473231341),f=O(f,c,w,d,y[D+7],22,-45705983),d=O(d,f,c,w,y[D+8],7,1770035416),w=O(w,d,f,c,y[D+9],12,-1958414417),c=O(c,w,d,f,y[D+10],17,-42063),f=O(f,c,w,d,y[D+11],22,-1990404162),d=O(d,f,c,w,y[D+12],7,1804603682),w=O(w,d,f,c,y[D+13],12,-40341101),c=O(c,w,d,f,y[D+14],17,-1502002290),d=C(d,f=O(f,c,w,d,y[D+15],22,1236535329),c,w,y[D+1],5,-165796510),w=C(w,d,f,c,y[D+6],9,-1069501632),c=C(c,w,d,f,y[D+11],14,643717713),f=C(f,c,w,d,y[D+0],20,-373897302),d=C(d,f,c,w,y[D+5],5,-701558691),w=C(w,d,f,c,y[D+10],9,38016083),c=C(c,w,d,f,y[D+15],14,-660478335),f=C(f,c,w,d,y[D+4],20,-405537848),d=C(d,f,c,w,y[D+9],5,568446438),w=C(w,d,f,c,y[D+14],9,-1019803690),c=C(c,w,d,f,y[D+3],14,-187363961),f=C(f,c,w,d,y[D+8],20,1163531501),d=C(d,f,c,w,y[D+13],5,-1444681467),w=C(w,d,f,c,y[D+2],9,-51403784),c=C(c,w,d,f,y[D+7],14,1735328473),d=x(d,f=C(f,c,w,d,y[D+12],20,-1926607734),c,w,y[D+5],4,-378558),w=x(w,d,f,c,y[D+8],11,-2022574463),c=x(c,w,d,f,y[D+11],16,1839030562),f=x(f,c,w,d,y[D+14],23,-35309556),d=x(d,f,c,w,y[D+1],4,-1530992060),w=x(w,d,f,c,y[D+4],11,1272893353),c=x(c,w,d,f,y[D+7],16,-155497632),f=x(f,c,w,d,y[D+10],23,-1094730640),d=x(d,f,c,w,y[D+13],4,681279174),w=x(w,d,f,c,y[D+0],11,-358537222),c=x(c,w,d,f,y[D+3],16,-722521979),f=x(f,c,w,d,y[D+6],23,76029189),d=x(d,f,c,w,y[D+9],4,-640364487),w=x(w,d,f,c,y[D+12],11,-421815835),c=x(c,w,d,f,y[D+15],16,530742520),d=S(d,f=x(f,c,w,d,y[D+2],23,-995338651),c,w,y[D+0],6,-198630844),w=S(w,d,f,c,y[D+7],10,1126891415),c=S(c,w,d,f,y[D+14],15,-1416354905),f=S(f,c,w,d,y[D+5],21,-57434055),d=S(d,f,c,w,y[D+12],6,1700485571),w=S(w,d,f,c,y[D+3],10,-1894986606),c=S(c,w,d,f,y[D+10],15,-1051523),f=S(f,c,w,d,y[D+1],21,-2054922799),d=S(d,f,c,w,y[D+8],6,1873313359),w=S(w,d,f,c,y[D+15],10,-30611744),c=S(c,w,d,f,y[D+6],15,-1560198380),f=S(f,c,w,d,y[D+13],21,1309151649),d=S(d,f,c,w,y[D+4],6,-145523070),w=S(w,d,f,c,y[D+11],10,-1120210379),c=S(c,w,d,f,y[D+2],15,718787259),f=S(f,c,w,d,y[D+9],21,-343485551),d=A(d,F),f=A(f,B),c=A(c,j),w=A(w,M)}return Array(d,f,c,w)}function g(y,I,d,f,c,w){return A((I=A(A(I,y),A(f,w)))<<c|I>>>32-c,d)}function O(y,I,d,f,c,w,D){return g(I&d|~I&f,y,I,c,w,D)}function C(y,I,d,f,c,w,D){return g(I&f|d&~f,y,I,c,w,D)}function x(y,I,d,f,c,w,D){return g(I^d^f,y,I,c,w,D)}function S(y,I,d,f,c,w,D){return g(d^(I|~f),y,I,c,w,D)}function A(y,I){var d=(65535&y)+(65535&I);return(y>>16)+(I>>16)+(d>>16)<<16|65535&d}t.exports=function(y){return b.hash(y,P,16)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(i,t,e){(function(n,r,s,a,l,p,h,v,E){var b;t.exports=b||function(P){for(var g,O=new Array(P),C=0;C<P;C++)!(3&C)&&(g=4294967296*Math.random()),O[C]=g>>>((3&C)<<3)&255;return O}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(i,t,e){(function(n,r,s,a,l,p,h,v,E){var b=i("./helpers");function P(C,x){C[x>>5]|=128<<24-x%32,C[15+(x+64>>9<<4)]=x;for(var S,A,y,I=Array(80),d=1732584193,f=-271733879,c=-1732584194,w=271733878,D=-1009589776,F=0;F<C.length;F+=16){for(var B=d,j=f,M=c,q=w,ee=D,H=0;H<80;H++){I[H]=H<16?C[F+H]:O(I[H-3]^I[H-8]^I[H-14]^I[H-16],1);var $=g(g(O(d,5),($=f,A=c,y=w,(S=H)<20?$&A|~$&y:!(S<40)&&S<60?$&A|$&y|A&y:$^A^y)),g(g(D,I[H]),(S=H)<20?1518500249:S<40?1859775393:S<60?-1894007588:-899497514)),D=w,w=c,c=O(f,30),f=d,d=$}d=g(d,B),f=g(f,j),c=g(c,M),w=g(w,q),D=g(D,ee)}return Array(d,f,c,w,D)}function g(C,x){var S=(65535&C)+(65535&x);return(C>>16)+(x>>16)+(S>>16)<<16|65535&S}function O(C,x){return C<<x|C>>>32-x}t.exports=function(C){return b.hash(C,P,20,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(i,t,e){(function(n,r,s,a,l,p,h,v,E){function b(x,S){var A=(65535&x)+(65535&S);return(x>>16)+(S>>16)+(A>>16)<<16|65535&A}function P(x,S){var A,y=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),I=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),d=new Array(64);x[S>>5]|=128<<24-S%32,x[15+(S+64>>9<<4)]=S;for(var f,c,w=0;w<x.length;w+=16){for(var D=I[0],F=I[1],B=I[2],j=I[3],M=I[4],q=I[5],ee=I[6],H=I[7],$=0;$<64;$++)d[$]=$<16?x[$+w]:b(b(b((c=d[$-2],O(c,17)^O(c,19)^C(c,10)),d[$-7]),(c=d[$-15],O(c,7)^O(c,18)^C(c,3))),d[$-16]),A=b(b(b(b(H,O(c=M,6)^O(c,11)^O(c,25)),M&q^~M&ee),y[$]),d[$]),f=b(O(f=D,2)^O(f,13)^O(f,22),D&F^D&B^F&B),H=ee,ee=q,q=M,M=b(j,A),j=B,B=F,F=D,D=b(A,f);I[0]=b(D,I[0]),I[1]=b(F,I[1]),I[2]=b(B,I[2]),I[3]=b(j,I[3]),I[4]=b(M,I[4]),I[5]=b(q,I[5]),I[6]=b(ee,I[6]),I[7]=b(H,I[7])}return I}var g=i("./helpers"),O=function(x,S){return x>>>S|x<<32-S},C=function(x,S){return x>>>S};t.exports=function(x){return g.hash(x,P,32,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(i,t,e){(function(n,r,s,a,l,p,h,v,E){e.read=function(b,P,g,O,w){var x,S,A=8*w-O-1,y=(1<<A)-1,I=y>>1,d=-7,f=g?w-1:0,c=g?-1:1,w=b[P+f];for(f+=c,x=w&(1<<-d)-1,w>>=-d,d+=A;0<d;x=256*x+b[P+f],f+=c,d-=8);for(S=x&(1<<-d)-1,x>>=-d,d+=O;0<d;S=256*S+b[P+f],f+=c,d-=8);if(x===0)x=1-I;else{if(x===y)return S?NaN:1/0*(w?-1:1);S+=Math.pow(2,O),x-=I}return(w?-1:1)*S*Math.pow(2,x-O)},e.write=function(b,P,g,O,C,D){var S,A,y=8*D-C-1,I=(1<<y)-1,d=I>>1,f=C===23?Math.pow(2,-24)-Math.pow(2,-77):0,c=O?0:D-1,w=O?1:-1,D=P<0||P===0&&1/P<0?1:0;for(P=Math.abs(P),isNaN(P)||P===1/0?(A=isNaN(P)?1:0,S=I):(S=Math.floor(Math.log(P)/Math.LN2),P*(O=Math.pow(2,-S))<1&&(S--,O*=2),2<=(P+=1<=S+d?f/O:f*Math.pow(2,1-d))*O&&(S++,O/=2),I<=S+d?(A=0,S=I):1<=S+d?(A=(P*O-1)*Math.pow(2,C),S+=d):(A=P*Math.pow(2,d-1)*Math.pow(2,C),S=0));8<=C;b[g+c]=255&A,c+=w,A/=256,C-=8);for(S=S<<C|A,y+=C;0<y;b[g+c]=255&S,c+=w,S/=256,y-=8);b[g+c-w]|=128*D}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/ieee754/index.js","/node_modules/gulp-browserify/node_modules/ieee754")},{buffer:3,lYpoI2:11}],11:[function(i,t,e){(function(n,r,s,a,l,p,h,v,E){var b,P,g;function O(){}(n=t.exports={}).nextTick=(P=typeof window<"u"&&window.setImmediate,g=typeof window<"u"&&window.postMessage&&window.addEventListener,P?function(C){return window.setImmediate(C)}:g?(b=[],window.addEventListener("message",function(C){var x=C.source;x!==window&&x!==null||C.data!=="process-tick"||(C.stopPropagation(),0<b.length&&b.shift()())},!0),function(C){b.push(C),window.postMessage("process-tick","*")}):function(C){setTimeout(C,0)}),n.title="browser",n.browser=!0,n.env={},n.argv=[],n.on=O,n.addListener=O,n.once=O,n.off=O,n.removeListener=O,n.removeAllListeners=O,n.emit=O,n.binding=function(C){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(C){throw new Error("process.chdir is not supported")}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/process/browser.js","/node_modules/gulp-browserify/node_modules/process")},{buffer:3,lYpoI2:11}]},{},[1])(1)})});var ti={};fr(ti,{Client:()=>Be,ClientDescriptor:()=>gn,Entity:()=>ye,EntityFile:()=>Re,MigrationPathError:()=>Ve,ServerSync:()=>Ke,Storage:()=>Be,StorageDescriptor:()=>gn,collection:()=>Ki,createDefaultMigration:()=>$n,createMigration:()=>qn,migrate:()=>kt,schema:()=>zi});var xi=dt(pt(),1),ht=4,Qe=36;function gi(i){return i.toString(Qe).padStart(ht,"0")}function vr(i){return i.toString().padStart(6,"0")}var mt=class{constructor(){this.latest={time:Date.now(),counter:0,node:Sr()};this.zeroCounter=0;this.now=t=>(this.latest=wi(this.latest),this.get(t,this.latest));this.OLD_now=t=>(this.latest=wi(this.latest),vr(t)+Or(this.latest));this.timerState=()=>this.latest;this.update=t=>{let e=t.slice(ht);this.latest=xr(this.latest,vi(e))};this.get=(t,e)=>gi(t)+bi(e);this.zero=t=>gi(t)+bi({time:0,counter:this.zeroCounter++,node:this.latest.node});this.getWallClockTime=t=>vi(t.slice(ht)).time}},yt=class extends Error{constructor(...e){super();this.type="ClockDriftError",this.message=["maximum clock drift exceeded"].concat(e).join(" ")}},gt=class extends Error{constructor(){super();this.type="OverflowError",this.message="timestamp counter overflow"}},Dn=4,Cn=7,bt=60*1e3,He=9;function Sr(){return xi.default.slug().padStart(Cn,"0").slice(0,Cn)}function bi(i){let t=new Date(i.time).getTime().toString(Qe).padStart(He,"0"),e=i.counter.toString(Qe).padStart(Dn,"0"),n=i.node.padStart(Cn,"0");return`${t}${e}${n}`}function wi(i){let t=Date.now(),e=Math.max(i.time,t),n=i.time===e?i.counter+1:0;if(e-t>bt)throw new yt(e,t,bt);if(n>65535)throw new gt;return{time:e,counter:n,node:i.node}}function xr(i,t){let e=Date.now(),n=Math.max(e,Math.max(i.time,t.time)),r=Math.max(i.counter,t.counter),s;if(i.time===n&&t.time===n?s=r+1:i.time===n?s=i.counter+1:t.time===n?s=t.counter+1:s=0,n-e>bt)throw new yt(n,e,bt);if(s>65535)throw new gt;return{time:n,counter:s,node:i.node}}function vi(i){let t=i.slice(0,He),e=i.slice(He,He+Dn),n=i.slice(He+Dn),r=parseInt(t,Qe),s=parseInt(e,Qe);if(isNaN(r)||isNaN(s))throw new Error("invalid clock format");return{time:r,counter:s,node:n}}function Or(i){let t=new Date(i.time).toISOString(),e=i.counter.toString(16).toUpperCase().padStart(4,"0"),n=i.node.padStart(16,"0");return`${t}-${e}-${n}`}function Si(i){return parseInt(i.slice(0,ht),36)}function Oi(i,t){return Si(i)-Si(t)}function se(i){return i&&i["@@type"]==="file"}function Ii(i){return{"@@type":"file",id:i}}var wt,Ir=new Uint8Array(16);function En(){if(!wt&&(wt=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!wt))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return wt(Ir)}var Di=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Dr(i){return typeof i=="string"&&Di.test(i)}var Ci=Dr;var X=[];for(vt=0;vt<256;++vt)X.push((vt+256).toString(16).substr(1));var vt;function Cr(i){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,e=(X[i[t+0]]+X[i[t+1]]+X[i[t+2]]+X[i[t+3]]+"-"+X[i[t+4]]+X[i[t+5]]+"-"+X[i[t+6]]+X[i[t+7]]+"-"+X[i[t+8]]+X[i[t+9]]+"-"+X[i[t+10]]+X[i[t+11]]+X[i[t+12]]+X[i[t+13]]+X[i[t+14]]+X[i[t+15]]).toLowerCase();if(!Ci(e))throw TypeError("Stringified UUID is invalid");return e}var Ei=Cr;function Er(i,t,e){i=i||{};var n=i.random||(i.rng||En)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){e=e||0;for(var r=0;r<16;++r)t[e+r]=n[r];return t}return Ei(n)}var Je=Er;function te(i){return ne(i)||se(i)}function Pn(i,t){return i===t?!0:!(!te(i)||!te(t)||i["@@type"]!==t["@@type"]||i.id!==t.id)}var Ai=dt(Ti(),1);function Pr(i,t){return typeof t!="object"||t===null||Array.isArray(t)?t:Object.fromEntries(Object.entries(t).sort(([e],[n])=>e<n?-1:e>n?1:0))}function Ye(i){return JSON.stringify(i,Pr)}function oe(i,t=!0){if(z(i)||Array.isArray(i)){let e=ae(i),n;if(Array.isArray(i))n=i.map(r=>oe(r,t));else{n={};for(let[r,s]of Object.entries(i))n[r]=oe(s,t)}return t&&e&&K(n,e),n}return i}function Se(i){return(0,Ai.default)(i)}function z(i){return i&&typeof i=="object"}function ki(i){for(var t=[],e=[i],n=0;e.length;){var r=e.pop();if(typeof r=="boolean")n+=4;else if(typeof r=="string")n+=r.length*2;else if(typeof r=="number")n+=8;else if(typeof r=="object"&&t.indexOf(r)===-1){t.push(r);for(var s in r)e.push(r[s])}}return n}function V(i,t="assertion failed"){if(!i)throw new Error(t)}function St(i=16){return Je().replace("-","").slice(0,i)}function Ri(i,t){for(let e=i.length-1;e>=0;e--)if(t(i[e]))return e;return-1}function Mi(i,t){let e;return function(...n){let r=this;clearTimeout(e),e=setTimeout(()=>i.apply(r,n),t)}}var Ie="__@@oid_do_not_use",De="@@id",_r="/",It=":",Tn=new WeakMap;function ce(i){let t=ae(i);return V(!!t,`Object ${JSON.stringify(i)} does not have an OID assigned to it`),t}function ae(i){if(z(i))return Tn.get(i)??i[De]??i[Ie]}function K(i,t){return V(z(i),`Only objects can be assigned OIDs, received ${JSON.stringify(i)}`),Xe(i)&&Dt(i),Tn.set(i,t),i}function Xe(i){return!!ae(i)}function Dt(i){return Tn.delete(i),i}function An(i){return i===De||i===Ie}function kn(i,t,e){if(Xe(i))return ce(i);{let n=ge(t,e);return K(i,n),n}}function Bi(i,t,e){if(Xe(i)){let n=ce(i);if(Ct(n,t))return ce(i);{let r=ge(t,e);return K(i,r),r}}else{let n=ge(t,e);return K(i,n),n}}var _n={".":"&dot;","/":"&slash;",":":"&colon;"};function Fi(i){return i.replace(/[/]/g,_n["/"]).replace(/[:]/g,_n[":"]).replace(/[.]/g,_n["."])}function ji(i){return i.replace(/&slash;/g,"/").replace(/&colon;/g,":").replace(/&dot;/g,".")}function Z(i,t,e){let n=Fi(i)+_r+Fi(t);return e&&(n+=It+e),n}function ge(i,t=Rr){let{collection:e,id:n}=le(i);return Z(e,n,t())}function le(i){let[t,e]=i.split(It),[n,r]=t.split("/"),s;return r.includes(".")?s=r.slice(0,r.indexOf(".")):s=r,{collection:ji(n),id:ji(s),subId:e}}function je(i,t){let e=ce(i);if(Array.isArray(i)){let n;for(let r=0;r<i.length;r++)n=i[r],z(n)&&!te(n)&&(Bi(n,e,t),je(n,t))}else if(z(i)&&!te(i))for(let n of Object.keys(i))z(i[n])&&!te(i[n])&&(Bi(i[n],e,t),je(i[n],t))}function Tr(i){if(z(i))return i[De]||i[Ie]}function Ar(i){return z(i)&&(delete i[Ie],delete i[De]),i}function kr(i){let t=Tr(i);t&&K(i,t)}function Ge(i){if(kr(i),Ar(i),Array.isArray(i))for(let t=0;t<i.length;t++)Ge(i[t]);else if(z(i))for(let t of Object.keys(i))Ge(i[t])}function xt(i){if(Dt(i),Array.isArray(i))for(let t=0;t<i.length;t++)xt(i[t]);else if(z(i))for(let t of Object.keys(i))xt(i[t])}function Rr(){return Je().slice(0,8)}function we(i){return{"@@type":"ref",id:i}}function Ot(i,t=new Map){if(Array.isArray(i)){let e=ce(i),n=K([],e);for(let r=0;r<i.length;r++){let s=i[r];if(z(s)){if(ne(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(se(s)){n[r]=s;continue}else{let a=ce(s);n[r]=we(a),Ot(s,t)}}else n[r]=s}t.set(e,n)}else if(z(i)&&!te(i)){let e=ce(i),n=K({},e);for(let r of Object.keys(i)){let s=i[r];if(z(s)){if(ne(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(se(s))n[r]=s;else{let a=ce(s);n[r]=we(a),Ot(s,t)}}else n[r]=s}t.set(e,n)}else te(i);return t}function U(i){return i.split(".")[0].split(It)[0]}function Rn(i){let t=U(i),e=ge(t,()=>"\uFFFF");return[`${t}${It}`,e]}function Mn(i){let t=U(i);return[`${t}.`,`${t}.\uFFFF`]}function Ct(i,t){return U(i)===U(t)}function ne(i){return i&&typeof i=="object"&&i["@@type"]==="ref"}function Bn(i){return z(i)&&!te(i)}function Mr(i,t){return i===t?!0:te(i)&&te(t)?Pn(i,t):!1}function Ze(i,t,e,n,r=[],s={}){let a=ce(i);function l(p,h,v){if(!Bn(h))Mr(h,v)||r.push({oid:a,timestamp:e(),data:{op:"set",name:p,value:h}});else{let E=ae(v),b=ae(h);b&&!Ct(a,b)?(h=oe(h,!1),b=ge(a,n),K(h,b)):s.mergeUnknownObjects?!b&&E?(K(h,E),b=E):b=kn(h,a,n):b=kn(h,a,n),V(!!b,"Error: no value OID was resolved during diff. This is a bug in Verdant."),V(Ct(a,b),`Error: value OID ${b} is not related to parent OID ${a}. This is a bug in Verdant.`),v===void 0||b!==E?(xe(h,b,e,n,r),r.push({oid:a,timestamp:e(),data:{op:"set",name:p,value:we(b)}}),E!==void 0&&r.push({oid:E,timestamp:e(),data:{op:"delete"}})):Ze(v,h,e,n,r,s)}}if(Array.isArray(i)&&Array.isArray(t)){for(let h=0;h<t.length;h++){let v=t[h],E=i[h];l(h,v,E)}let p=i.length-t.length;if(p>0){for(let h=t.length;h<i.length;h++){let v=i[h],E=ae(v);E&&r.push({oid:E,timestamp:e(),data:{op:"delete"}})}r.push({oid:a,timestamp:e(),data:{op:"list-delete",index:t.length,count:p}})}}else{if(Array.isArray(i)||Array.isArray(t))throw new Error("Cannot diff an array with an object");if(Bn(i)&&Bn(t)){let p=new Set(Object.keys(i));for(let[h,v]of Object.entries(t)){if(v===void 0&&s.defaultUndefined||(p.delete(h),An(h)))continue;let E=i[h];l(h,v,E)}if(!s.defaultUndefined)for(let h of p)An(h)||r.push({oid:a,timestamp:e(),data:{op:"remove",name:h}})}}return r}function xe(i,t,e,n,r=[]){K(i,t),je(i,n);let s=Ot(i);for(let a of s.keys()){let l=s.get(a);r.push({oid:a,timestamp:e(),data:{op:"initialize",value:Dt(l)}})}return r}function Vi(i){let t={};for(let e of i)e.oid in t?t[e.oid].push(e):t[e.oid]=[e];return t}function Fn(i){let t={};for(let e of i){let n=U(e.oid);n in t?t[n].push(e):t[n]=[e]}return t}function jn(i){let t={};for(let e of i){let n=U(e.oid);n in t?t[n].push(e):t[n]=[e]}return t}function Ce(i){return Array.isArray(i)?!0:(console.error(`Cannot apply list patch; expected array, received ${JSON.stringify(i)}. This suggests your data is changing from a list to an object over time. (OID: ${ae(i)})`),!1)}function Ee(i,t,e){if(i==null&&t.op!=="initialize")return i;let n=i,r,s;function a(l){e&&te(l)&&e.push(l)}switch(t.op){case"set":a(n[t.name]),n[t.name]=t.value;break;case"remove":a(n[t.name]),delete n[t.name];break;case"list-push":Ce(i)&&i.push(t.value);break;case"list-delete":Ce(i)&&(a(i[t.index]),i.splice(t.index,t.count));break;case"list-move-by-index":Ce(i)&&(s=i.splice(t.from,1),i.splice(t.to,0,s[0]));break;case"list-remove":if(Ce(i))do{let l=t.value;t.only==="last"?ne(l)?r=Ri(i,p=>p.id===l.id):r=i.lastIndexOf(l):ne(l)?r=i.findIndex(p=>p.id===l.id):r=i.indexOf(l),r!==-1&&(a(i[r]),i.splice(r,1))}while(!t.only&&r!==-1);break;case"list-add":Ce(i)&&(i.some(p=>ne(p)&&ne(t.value)?p.id===t.value.id:p===t.value)||i.push(t.value));break;case"list-move-by-ref":Ce(i)&&(r=i.indexOf(t.value),s=i.splice(r,1),i.splice(t.index,0,s[0]));break;case"list-insert":if(Ce(i)){if(!t.value&&!t.values)throw new Error(`Cannot apply list insert patch; expected value or values, received ${JSON.stringify(t)}`);t.value?i.splice(t.index,0,t.value):i.splice(t.index,0,...t.values)}break;case"delete":Array.isArray(i)?i.forEach(a):z(i)&&Object.values(i||{}).forEach(a);return;case"initialize":return oe(t.value);default:throw new Error(`Unsupported patch operation: ${t.op}`)}return i}function Et(i,t,e=[]){if(Array.isArray(i))for(let n=0;n<i.length;n++){let r=i[n];i[n]=Li(r,t,e),z(i[n])&&Et(i[n],t,e)}else if(!se(i)){if(z(i)){V(ae(i),`Object ${JSON.stringify(i)} must have an oid`);for(let n of Object.keys(i))i[n]=Li(i[n],t,e),z(i[n])&&Et(i[n],t,e)}}return e}function Li(i,t,e){if(ne(i)){e.push(i.id);let n=t.get(i.id);return V(!!n,`No value was found in object map for ${i.id}`),K(n,i.id)}else return i}function Br(i){return i.type==="any"?!0:i.type==="map"?!1:i.nullable}function Vn(i){return i?i.type==="map"||i.type==="array"?!0:i.type==="file"?!1:i.type==="object"?!0:i.default!==void 0:!1}function Pt(i){return i.type==="map"||i.type==="object"||i.type==="array"||i.type==="file"||i.type==="any"?!1:i.indexed}function ve(i,t){for(let[e,n]of Object.entries(i.fields)){let r=Ni(n);(r!==void 0&&t[e]===void 0||!Br(n)&&t[e]===null)&&(t[e]=r),t[e]&&Pe(t[e],n)}return t}function Pe(i,t){if(i==null)return i;if(t.type==="object")for(let[e,n]of Object.entries(t.properties)){if(i[e]===void 0){let r=Ni(n);r!==void 0&&(i[e]=r)}Pe(i[e],n)}else if(t.type==="array")for(let e of i)Pe(e,t.items);else if(t.type==="map")for(let[e,n]of Object.entries(i))e===De||e===Ie||Pe(n,t.values)}function Ni(i){if(i.type==="string"||i.type==="number"||i.type==="boolean"||i.type==="any"){if(i.default&&typeof i.default=="function")return i.default();if(i.default!==void 0)return JSON.parse(JSON.stringify(i.default))}if(i.type==="array")return[];if(i.type==="map")return{};if(i.type!=="any"&&i.nullable)return null}function Nn(i,t){for(let[e,n]of Object.entries(t))e===De||e===Ie||(i.fields[e]?Ln(n,i.fields[e]):delete t[e]);return t}function Ln(i,t){if(z(i)&&t.type==="object")for(let[e,n]of Object.entries(i))t.properties[e]?Ln(n,t.properties[e]):delete i[e];else if(Array.isArray(i)&&t.type==="array")for(let e of i)Ln(e,t.items)}function Un(i){return i.equals!==void 0}function Kn(i){return i.gte!==void 0||i.lte!==void 0||i.gt!==void 0||i.lt!==void 0}function Fr(i){return!!i.match}function zn(i){return i.startsWith!==void 0}function Ui(i){return!Kn(i)&&!Un(i)&&!Fr(i)&&!zn(i)&&i.order}function Ki({synthetics:i,indexes:t,...e}){let n={...i,...t};for(let[r,s]of Object.entries(e.fields))Pt(s)&&(n[r]={field:r});return{...e,indexes:n}}function zi(i){return i}var _t="\uFFFFFE",jr="\0",Lr="\uFFFFFF";function de(...i){let t=Vr(i);return t.length===1?t[0]:t}function _e(...i){return i.join(_t)+`${Lr}`}function Te(...i){return i.join(_t)+`${_t}${jr}`}function Vr(i){let t=[[]];for(let e of i)if(Array.isArray(e)){let n=[];for(let r of t)for(let s of e)n.push(r.concat(s));t=n}else for(let n of t)n.push(`${e}`);return Array.from(new Set(t.map(e=>e.join(_t))))}function Nr(i){return!!i.field}function Ur(i,t){let e={};for(let[n,r]of Object.entries(i.indexes||{})){let s=r;Nr(s)?e[n]=me(t[s.field]):e[n]=me(s.compute(t))}return e}function Kr(i,t){return Object.entries(i.compounds||{}).reduce((e,[n,r])=>(e[n]=de(...r.of.map(s=>t[s])),e),{})}function zr(i,t){return Object.entries(i.fields).reduce((e,[n,r])=>(Pt(r)&&(e[n]=me(t[n])),e),{})}function Tt(i,t){return{[i.primaryKey]:t[i.primaryKey],...zr(i,t),...Ur(i,t),...Kr(i,t),"@@@snapshot":t}}var $r="null";function me(i){if(i===null)return $r;if(typeof i=="string"||typeof i=="number")return i;if(typeof i=="boolean"||i===null)return`${i}`;if(i===void 0)return"undefined";if(Array.isArray(i))return i.map(me);throw new Error(`Unsupported index value: ${i}`)}var $i={version:0,collections:{}};function kt(i,t,e){let n=typeof t=="function",r=n?$i:i,s=n?i:t,a=n?t:e,l=Object.keys(s.collections).filter(O=>r.collections[O]&&Ye(r.collections[O])!==Ye(s.collections[O])),p=Object.keys(r.collections).filter(O=>!s.collections[O]),h=Object.keys(s.collections).filter(O=>!r.collections[O]),v=new Set;for(let O of l){let C=r.collections[O].fields,x=s.collections[O].fields;Object.keys(x).some(S=>!C[S]?.default&&x[S]?.default)&&v.add(O),Object.keys(C).some(S=>!x[S])&&v.add(O)}let E={},b={};for(let O of[...l,...h]){let C=At(r.collections[O]),x=At(s.collections[O]),S=x.filter(y=>!C.find(I=>I.name===y.name)),A=C.filter(y=>!x.find(I=>I.name===y.name));S.length>0&&(E[O]=S,l.includes(O)&&v.add(O)),A.length>0&&(b[O]=A,l.includes(O)&&v.add(O))}let P=(O,C)=>ve(s.collections[O],C),g=O=>C=>{let x=s.collections[O];return ve(x,Nn(x,C))};return{version:s.version,migrate:async O=>{let C=[];if(await a({migrate:async(x,S)=>{let A=g(x),y=async I=>{let d=await S(I);return K(d,ce(I)),A(d)};await O.migrate(x,y),C.push(x),v.delete(x)},identity:x=>x,withDefaults:P,info:{changedCollections:l,addedCollections:h,removedCollections:p},queries:O.queries,mutations:O.mutations}),s.version>1){O.log("debug","auto-migrating collections with new defaults",v);for(let S of v)await O.migrate(S,g(S)),C.push(S);let x=l.filter(S=>!C.includes(S));x.length>0&&console.error(`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,x)}},removedCollections:p,addedIndexes:E,removedIndexes:b,allCollections:Object.keys(s.collections),changedCollections:l,addedCollections:h,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function At(i){return i?[...Object.keys(i.indexes||{}).map(t=>({name:t,multiEntry:["array","string[]","number[]","boolean[]"].includes(i.indexes[t].type),synthetic:!0,compound:!1})),...Object.keys(i.compounds||{}).map(t=>({name:t,multiEntry:i.compounds[t].of.some(e=>(i.fields[e]||i.indexes[e]).type==="array"),synthetic:!1,compound:!0}))]:[]}function $n(i,t){return kt(t?i:{version:0,collections:{}},t||i,async({migrate:n,info:r})=>{if((t||i).version!==1)for(let s of r.changedCollections)await n(s,a=>a)})}function qn(i,t,e){let n=typeof t=="function"||t===void 0,r=n?$i:i,s=n?i:t,a=n?t:e;V(r,"Invalid arguments to createMigration"),V(s,"Invalid arguments to createMigration");let{changedCollections:l,addedCollections:p,removedCollections:h,addedIndexes:v,removedIndexes:E,autoMigratedCollections:b,autoMigration:P}=qr(r,s);return{version:s.version,migrate:async g=>{let O=[];if(await a?.({migrate:async(x,S)=>{let A=P(x),y=async I=>{let d=await S(I);return K(d,ce(I)),A(d)};await g.migrate(x,y),O.push(x),b.delete(x)},info:{changedCollections:l,addedCollections:p,removedCollections:h},queries:g.queries,mutations:g.mutations}),s.version>1){g.log("debug","auto-migrating collections with new defaults",b);for(let S of b)await g.migrate(S,P(S)),O.push(S);let x=l.filter(S=>!O.includes(S));x.length>0&&console.error(`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,x)}},removedCollections:h,addedIndexes:v,removedIndexes:E,allCollections:Object.keys(s.collections),changedCollections:l,addedCollections:p,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function qr(i,t){let e=Object.keys(t.collections).filter(v=>i.collections[v]&&Ye(i.collections[v])!==Ye(t.collections[v])),n=Object.keys(i.collections).filter(v=>!t.collections[v]),r=Object.keys(t.collections).filter(v=>!i.collections[v]),s=new Set;for(let v of e){let E=i.collections[v].fields,b=t.collections[v].fields;Object.keys(b).some(P=>!Vn(E[P])&&Vn(b[P]))&&s.add(v),Object.keys(E).some(P=>!b[P])&&s.add(v)}let a={},l={};for(let v of[...e,...r]){let E=At(i.collections[v]),b=At(t.collections[v]),P=b.filter(O=>!E.find(C=>C.name===O.name)),g=E.filter(O=>!b.find(C=>C.name===O.name));P.length>0&&(a[v]=P,e.includes(v)&&s.add(v)),g.length>0&&(l[v]=g,e.includes(v)&&s.add(v))}return{changedCollections:e,addedCollections:r,removedCollections:n,addedIndexes:a,removedIndexes:l,autoMigratedCollections:s,withDefaults:(v,E)=>ve(t.collections[v],E),autoMigration:v=>E=>{let b=t.collections[v];return ve(b,Nn(b,E))}}}var Rt=class{constructor(t,e){this.getNow=t;this.createSubId=e;this.createDiff=(t,e,n={})=>Ze(t,e,this.getNow,this.createSubId,[],n);this.createInitialize=(t,e)=>xe(t,e,this.getNow,this.createSubId);this.createSet=(t,e,n)=>{if(!z(n)||te(n))return[{oid:t,timestamp:this.getNow(),data:{op:"set",name:e,value:n}}];{let r=ge(t,this.createSubId);return[...xe(n,r,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"set",value:we(r),name:e}}]}};this.createRemove=(t,e)=>[{oid:t,timestamp:this.getNow(),data:{op:"remove",name:e}}];this.createListPush=(t,e)=>{if(z(e)){let n=ge(t,this.createSubId);return[...xe(e,n,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:we(n)}}]}else return[{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:e}}]};this.createListAdd=(t,e)=>z(e)?[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:we(e)}}]:[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:e}}];this.createListInsert=(t,e,n)=>{if(z(n)){let r=ge(t,this.createSubId);return[...xe(n,r,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:we(r),index:e}}]}else return[{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:n,index:e}}]};this.createListRemove=(t,e,n)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-remove",value:e,only:n}}];this.createListDelete=(t,e,n=1)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-delete",index:e,count:n}}];this.createListMoveByRef=(t,e,n)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-ref",value:e,index:n}}];this.createListMoveByIndex=(t,e,n)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-index",from:e,to:n}}];this.createDelete=t=>[{oid:t,timestamp:this.getNow(),data:{op:"delete"}}];this.createDeleteAll=t=>t.map(e=>({oid:e,timestamp:this.getNow(),data:{op:"delete"}}))}};var N=class{constructor(t){this._onAllUnsubscribed=t;this.subscribers={};this.counts={};this._disabled=!1;this.subscriberCount=t=>this.counts[t]??0;this.totalSubscriberCount=()=>Object.values(this.counts).reduce((t,e)=>t+e,0);this.subscribe=(t,e)=>{let n=St(),r=this.subscribers[t];return r||(r=this.subscribers[t]={}),r[n]=e,this.counts[t]=(this.counts[t]||0)+1,()=>{this.subscribers[t]&&(delete this.subscribers[t][n],this.counts[t]--,this.counts[t]===0&&(delete this.subscribers[t],delete this.counts[t],this._onAllUnsubscribed&&this._onAllUnsubscribed(t)))}};this.emit=(t,...e)=>{this._disabled||this.subscribers[t]&&Object.values(this.subscribers[t]).forEach(n=>n(...e))};this.dispose=()=>{let t=Object.keys(this.subscribers);this.subscribers={},this.counts={},t.forEach(e=>{this._onAllUnsubscribed&&this._onAllUnsubscribed(e)})};this.disable=()=>{this._disabled=!0}}get disabled(){return this._disabled}};function qi(i,t,e,n){if(t===void 0)return[{oid:i,timestamp:n(),data:{op:"delete"}}];let r=oe(t),s=[];for(let a of e){let l=Wr(i,r,a,n);s.unshift(...l),Ee(r,a.data)}return s}function Wr(i,t,e,n){let r=e.data;switch(r.op){case"set":case"remove":return[{oid:i,timestamp:n(),data:{op:"set",name:r.name,value:t[r.name]}}];case"list-insert":return[{oid:i,timestamp:n(),data:{op:"list-delete",index:r.index,count:1}}];case"list-delete":return[{oid:i,timestamp:n(),data:{op:"list-insert",index:r.index,values:t.slice(r.index,r.count)}}];case"list-move-by-ref":return[{oid:i,timestamp:n(),data:{op:"list-move-by-ref",value:r.value,index:t.indexOf(r.value)}}];case"list-move-by-index":return[{oid:i,timestamp:n(),data:{op:"list-move-by-index",from:r.to,to:r.from}}];case"delete":return[{oid:i,timestamp:n(),data:{op:"initialize",value:t}}];case"list-push":return[{oid:i,timestamp:n(),data:{op:"list-remove",value:r.value,only:"last"}}];case"list-remove":if(r.only==="last"){let s=t.lastIndexOf(r.value);return[{oid:i,timestamp:n(),data:{op:"list-insert",index:s,values:[r.value]}}]}else if(r.only==="first"){let s=t.indexOf(r.value);return[{oid:i,timestamp:n(),data:{op:"list-insert",index:s,values:[r.value]}}]}else{let s=[],a=t.indexOf(r.value);for(;a!==-1;)s.push(a),a=t.indexOf(r.value,a+1);return s.map(l=>({oid:i,timestamp:n(),data:{op:"list-insert",index:l,value:r.value}}))}case"list-add":return[{oid:i,timestamp:n(),data:{op:"list-remove",value:r.value,only:"last"}}];case"initialize":return[{oid:i,timestamp:n(),data:{op:"delete"}}];default:throw new Error(`Cannot undo operation type: ${r.op}`)}}var Le=class{constructor(t){this.flusher=t;this.batches=new Map;this.flush=t=>{let e=this.batches.get(t);if(e)return e.flush()};this.discard=t=>{let e=this.batches.get(t);e&&(e.discard(),this.batches.delete(t))};this.flushAll=()=>[...this.batches.values()].map(t=>t.flush())}add({key:t,userData:e,items:n,max:r,timeout:s}){let a=this.batches.get(t);return a||(a=new Wn({max:r||null,startedAt:Date.now(),userData:e,timeout:s||null,flusher:this.flusher,key:t}),this.batches.set(t,a)),a.update({items:n,max:r,timeout:s,userData:e}),a}},Wn=class{constructor({max:t,startedAt:e,timeout:n,userData:r,flusher:s,key:a}){this.items=[];this.update=({items:t,max:e,timeout:n,userData:r})=>{this.items.push(...t),e!==void 0&&(this.max=e),n!==void 0&&(this.timeout=n),r&&(this.userData=r);let s=this.items.length!==0&&this.timeout!==null&&!this.flushTimeout;this.max!==null&&this.items.length>=this.max?this.flush():s&&this.timeout!==null&&(this.flushTimeout=setTimeout(this.flush,this.timeout))};this.flush=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0;let t=this.items;return this.items=[],this.flusher(t,this.key,this.userData)};this.discard=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0,this.items=[]};this.max=t,this.startedAt=e,this.timeout=n,this.userData=r,this.flusher=s,this.key=a}};function W(i){return new Promise((t,e)=>{i.onsuccess=()=>{t(i.result)},i.onerror=()=>{e(i.error)}})}function et(i,t){return new Promise((e,n)=>{let r=i.transaction([t],"readonly"),a=r.objectStore(t).openCursor(),l=0,p=0;a.onsuccess=function(h){let v=a.result;v&&(l++,p=p+ki(v.value),v.continue())},a.onerror=function(h){n(h)},r.oncomplete=function(h){e({count:l,size:p})},r.onabort=function(h){n(h)},r.onerror=function(h){n(h)}})}function Wi(i,t){let e=i.transaction(t,"readonly"),n=t.map(r=>{let s=e.objectStore(r);return W(s.getAll())});return Promise.all(n)}async function Ae(i){i.close(),await new Promise((t,e)=>{t()})}async function Mt(i,t=window.indexedDB){let e=t.deleteDatabase([i,"meta"].join("_")),n=t.deleteDatabase([i,"collections"].join("_"));await Promise.all([new Promise((r,s)=>{e.onsuccess=r,e.onerror=s}),new Promise((r,s)=>{n.onsuccess=r,n.onerror=s})]),window.location.reload()}function Hi(i,t=window.indexedDB){return W(t.deleteDatabase(i))}async function Qi(i=window.indexedDB){return i.databases()}var fe=class{constructor(t){this.db=t;this.createTransaction=(t,e)=>this.db.transaction(t,e);this.run=async(t,e,n="readonly",r)=>{let a=(r||this.db.transaction(t,n)).objectStore(t),l=e(a);return W(l)};this.runAll=async(t,e,n="readonly",r)=>{let a=(r||this.db.transaction(t,n)).objectStore(t),l=e(a);return Promise.all(l.map(W))};this.iterate=async(t,e,n,r="readonly",s)=>{let l=(s||this.db.transaction(t,r)).objectStore(t),p=e(l);return Array.isArray(p)?Promise.all(p.map(h=>new Promise((v,E)=>{h.onsuccess=()=>{let b=h.result;b?(n(b.value,l),b.continue()):v()},h.onerror=E}))).then(()=>{}):new Promise((h,v)=>{p.onsuccess=()=>{let E=p.result;E?(n(E.value,l),E.continue()):h()},p.onerror=v})};this.clear=t=>this.run(t,e=>e.clear(),"readwrite")}};var Bt=class extends fe{constructor(){super(...arguments);this.getAckInfo=async()=>{let e=await this.run("info",n=>n.get("ack"));return e||{globalAckTimestamp:null,type:"ack"}};this.setGlobalAck=async e=>{await this.run("info",n=>n.put({type:"ack",globalAckTimestamp:e}),"readwrite")}}};var Ft=class extends fe{constructor(e){super(e);this.getAllForDocument=async(e,{mode:n="readonly",transaction:r}={})=>{let s=[];return await this.iterateOverAllForDocument(e,a=>{s.push(a)},{mode:n,transaction:r}),s};this.iterateOverAllForDocument=async(e,n,{mode:r="readonly",transaction:s}={})=>this.iterate("baselines",a=>{let l=U(e),[p,h]=Rn(e),[v,E]=Mn(e);return[a.openCursor(IDBKeyRange.only(l)),a.openCursor(IDBKeyRange.bound(p,h,!1,!1)),a.openCursor(IDBKeyRange.bound(v,E,!1,!1))]},n,r,s);this.getAllForMultipleDocuments=async(e,{mode:n="readonly"}={})=>(await this.runAll("baselines",s=>e.flatMap(a=>{let l=U(a),[p,h]=Rn(a),[v,E]=Mn(a);return[s.get(l),s.getAll(IDBKeyRange.bound(p,h,!1,!1)),s.getAll(IDBKeyRange.bound(v,E,!1,!1))]}),n)).flat();this.getAllSince=async(e,{mode:n="readonly"}={})=>this.run("baselines",r=>{let s=e?IDBKeyRange.lowerBound(e,!0):void 0;return r.index("timestamp").getAll(s)},n);this.get=async(e,{transaction:n,mode:r="readonly"}={})=>this.run("baselines",s=>s.get(e),r,n);this.set=async(e,{transaction:n}={})=>{await this.run("baselines",r=>r.put(e),"readwrite",n)};this.setAll=async(e,{transaction:n}={})=>{await this.runAll("baselines",r=>e.map(s=>r.put(s)),"readwrite",n)};this.reset=()=>this.clear("baselines");this.delete=async(e,{transaction:n})=>{await this.run("baselines",r=>r.delete(e),"readwrite",n)}}};var Ji=dt(pt(),1);var jt=class extends fe{constructor(){super(...arguments);this.get=async({transaction:e}={})=>{if(this.cached)return this.cached;let n=await this.run("info",r=>r.get("localReplicaInfo"),void 0,e);if(!n){let s={type:"localReplicaInfo",id:(0,Ji.default)(),ackedLogicalTime:null,lastSyncedLogicalTime:null};return await this.run("info",a=>a.put(s),"readwrite"),this.cached=s,s}return this.cached=n,n};this.update=async(e,{transaction:n}={})=>{let r=await this.get({transaction:n});Object.assign(r,e),await this.run("info",s=>s.put(r),"readwrite"),this.cached=r};this.reset=async()=>{let e=await this.get();e.ackedLogicalTime=null,e.lastSyncedLogicalTime=null,await this.run("info",n=>n.put(e),"readwrite")}}};var Lt=class{constructor(t){this.meta=t;this.createOperation=async t=>{let e=await this.meta.localReplica.get();return{type:"op",timestamp:this.meta.now,replicaId:e.id,operations:t.operations.map(n=>({data:n.data,oid:n.oid,timestamp:n.timestamp}))}};this.createMigrationOperation=async({targetVersion:t,...e})=>{let n=await this.meta.localReplica.get();return{type:"op",operations:e.operations.map(r=>({...r,timestamp:this.meta.time.zero(t)})),timestamp:this.meta.time.zero(t),replicaId:n.id}};this.createSyncStep1=async t=>{let e=await this.meta.localReplica.get(),n=t===null?null:e.lastSyncedLogicalTime,r=[],s=new Set;n?await this.meta.operations.iterateOverAllLocalOperations(l=>{r.push({data:l.data,oid:l.oid,timestamp:l.timestamp}),s.add(U(l.oid))},{after:n,mode:"readwrite"}):await this.meta.operations.iterateOverAllOperations(l=>{r.push({data:l.data,oid:l.oid,timestamp:l.timestamp}),s.add(U(l.oid))},{mode:"readwrite"});let a=[];return n||(a=await this.meta.baselines.getAllSince("")),{type:"sync",schemaVersion:this.meta.schema.currentVersion,timestamp:this.meta.now,replicaId:e.id,resyncAll:!e.lastSyncedLogicalTime,operations:r,baselines:a,since:n}};this.createPresenceUpdate=async t=>{let e=await this.meta.localReplica.get();return{type:"presence-update",presence:t,replicaId:e.id}};this.createHeartbeat=async()=>{let t=await this.meta.localReplica.get();return{type:"heartbeat",timestamp:this.meta.now,replicaId:t.id}};this.createAck=async t=>{let e=await this.meta.localReplica.get();return{type:"ack",timestamp:this.meta.now,replicaId:e.id,nonce:t}}}};var Vt=class extends fe{constructor(){super(...arguments);this.iterateOverAllOperationsForDocument=async(e,n,{to:r,from:s,after:a,mode:l="readonly",transaction:p}={})=>{let v=(p||this.db.transaction("operations",l)).objectStore("operations"),E=v.index("d_t"),b=s||a,P=b?de(e,b):Te(e),g=r?de(e,r):_e(e),O=IDBKeyRange.bound(P,g,!!a,!1),C=E.openCursor(O,"next");return new Promise((x,S)=>{let A;C.onsuccess=y=>{let I=C.result;if(I){let d=I.value;V(d.oid.startsWith(e)),V(A===void 0||A<=d.timestamp,`expected ${A} <= ${d.timestamp}`),n(d,v),A=d.timestamp,I.continue()}else x()},C.onerror=y=>{S(y)}})};this.iterateOverAllOperationsForEntity=async(e,n,{after:r,to:s,mode:a,transaction:l})=>{let h=(l||this.db.transaction("operations",a)).objectStore("operations"),v=r?de(e,r):Te(e),E=s?de(e,s):_e(e),b=IDBKeyRange.bound(v,E,!!r,!1),P=h.openCursor(b,"next");return new Promise((g,O)=>{let C;P.onsuccess=x=>{let S=P.result;if(S){let A=S.value;V(A.oid.startsWith(e)),V(C===void 0||C<=A.timestamp,`expected ${C} <= ${A.timestamp}`),n(A,h),C=A.timestamp,S.continue()}else g()},P.onerror=x=>{O(x)}})};this.iterateOverAllLocalOperations=async(e,{before:n,after:r,mode:s="readonly",transaction:a})=>{let p=(a||this.db.transaction("operations",s)).objectStore("operations"),h=p.index("l_t"),v=r?de(!0,r):Te(!0),E=n?de(!0,n):_e(!0),b=IDBKeyRange.bound(v,E,!!r,!0),P=h.openCursor(b,"next");return new Promise((g,O)=>{let C;P.onsuccess=x=>{let S=P.result;if(S){let A=S.value;V(C===void 0||C<=A.timestamp,`expected ${C} <= ${A.timestamp}`),e(A,p),C=A.timestamp,S.continue()}else g()},P.onerror=x=>{O(x)}})};this.iterateOverAllOperations=async(e,{before:n,transaction:r,mode:s,from:a})=>{await this.iterate("operations",l=>{let p=a?Te(a):void 0,h=n?_e(n):void 0,v=p&&h?IDBKeyRange.bound(p,h,!1,!0):p?IDBKeyRange.lowerBound(p,!1):h?IDBKeyRange.upperBound(h,!0):void 0;return l.index("timestamp").openCursor(v,"next")},e,s,r)};this.addOperations=async(e,{transaction:n}={})=>this.insert(e.map(this.addCompoundIndexes),{transaction:n});this.addCompoundIndexes=e=>({...e,oid_timestamp:de(e.oid,e.timestamp),l_t:de(e.isLocal,e.timestamp),d_t:de(U(e.oid),e.timestamp)});this.insert=async(e,{transaction:n})=>{let r=new Set;return await this.runAll("operations",s=>e.map(a=>(r.add(U(a.oid)),s.put(a))),"readwrite",n),Array.from(r)};this.reset=()=>this.clear("operations")}};var Nt=class{constructor(t,e){this.db=t;this.currentVersion=e;this.cached=null;this.get=async()=>{if(this.cached)return this.cached;let r=this.db.transaction("info","readonly").objectStore("info").get("schema"),s=await W(r);return s?(this.cached=JSON.parse(s.schema),this.cached):null};this.set=async t=>{let s=this.db.transaction("info","readwrite").objectStore("info").put({type:"schema",schema:JSON.stringify(t)});this.cached=t,await W(s)}}};var tt=class extends N{constructor({disableRebasing:e,context:n}){super();this.time=new mt;this.disableRebasing=!1;this._closing=!1;this.setContext=e=>{this.context=e};this.close=()=>{this._closing=!0};this.createTransaction=e=>this.db.transaction(e,"readwrite");this.getAllDocumentRelatedOids=async e=>{let n=new Set,r=U(e);V(r===e,"Must be root document OID"),n.add(r);let s=this.db.transaction(["baselines","operations"],"readwrite");return await Promise.all([this.baselines.iterateOverAllForDocument(r,a=>{n.add(a.oid)},{transaction:s}),this.operations.iterateOverAllOperationsForDocument(r,a=>{n.add(a.oid)},{transaction:s})]),Array.from(n)};this.getDocumentSnapshot=async(e,n={})=>{let r=U(e);V(r===e,"Must be root document OID");let s=this.db.transaction(["baselines","operations"],"readwrite"),a=await this.baselines.getAllForDocument(r,{transaction:s}),l=new Map;for(let h of a)h.snapshot&&K(h.snapshot,h.oid),l.set(h.oid,h.snapshot);await this.operations.iterateOverAllOperationsForDocument(r,h=>{let v=l.get(h.oid)||void 0,E=Ee(v,h.data);E&&K(E,h.oid),l.set(h.oid,E)},{transaction:s,to:n.to||this.now});let p=l.get(r);return p&&Et(p,l),p};this.ack=async e=>{let n=await this.localReplica.get();e>this.now||(this.emit("message",{type:"ack",replicaId:n.id,timestamp:e}),!this._closing&&(!n.ackedLogicalTime||e>n.ackedLogicalTime)&&this.localReplica.update({ackedLogicalTime:e}))};this.insertLocalOperation=async e=>{if(e.length===0)return;this.log(`Inserting ${e.length} local operations`);for(let r of e)r.isLocal=!0;await this.operations.addOperations(e);let n=await this.messageCreator.createOperation({operations:e});this.emit("message",n),this.tryAutonomousRebase()};this.insertRemoteOperations=async e=>{if(e.length===0)return[];this.log(`Inserting ${e.length} remote operations`);let n=await this.operations.addOperations(e.map(r=>({...r,isLocal:!1})));return this.ack(e[e.length-1].timestamp),n};this.insertRemoteBaselines=async e=>{if(e.length===0)return[];this.log(`Inserting ${e.length} remote baselines`),await this.baselines.setAll(e);let n=new Set;return e.forEach(r=>{n.add(U(r.oid))}),Array.from(n)};this.updateLastSynced=async e=>{if(!this._closing)return this.localReplica.update({lastSyncedLogicalTime:e})};this.lastSyncedTimestamp=async()=>(await this.localReplica.get()).lastSyncedLogicalTime;this.tryAutonomousRebase=async()=>{this.disableRebasing||(await this.localReplica.get()).lastSyncedLogicalTime||await this.runRebase(this.now)};this.runRebase=async e=>{if(this._closing)return;let n,r=new Set,s=this.db.transaction(["baselines","operations"],"readwrite"),a=0;if(await this.operations.iterateOverAllOperations(p=>{r.add(p.oid),n=p.timestamp,a++},{before:e,transaction:s}),!r.size){this.log("Cannot rebase, no operations prior to",e);return}if(this._closing)return;let l=[];for(let p of r)l.push(await this.rebase(p,n||e,s));this.emit("rebase",l)};this.rebase=async(e,n,r)=>{let s=(await this.localReplica.get()).id;this.log("[",s,"]","Rebasing",e,"up to",n);let a=r||this.db.transaction(["operations","baselines"],"readwrite"),l=await this.baselines.get(e,{transaction:a}),p=l?.snapshot||void 0,h=0,v=[];await this.operations.iterateOverAllOperationsForEntity(e,(b,P)=>{(!l||b.timestamp>l.timestamp)&&(p=Ee(p,b.data,v)),h++,P.delete(b.oid_timestamp)},{to:n,transaction:a}),p&&K(p,e);let E={oid:e,snapshot:p,timestamp:n};if(E.snapshot?await this.baselines.set(E,{transaction:a}):await this.baselines.delete(e,{transaction:a}),this.log("successfully rebased",e,"up to",n,":",p,"and deleted",h,"operations"),v.length){let b=v.filter(se);b.length&&this.emit("filesDeleted",b)}return E};this.reset=async()=>{await this.operations.reset(),await this.baselines.reset(),await this.localReplica.reset()};this.updateSchema=async(e,n)=>{let r=await this.schema.get();if(r&&n===r.version&&r.version===e.version&&JSON.stringify(r)!==JSON.stringify(e))throw console.error(`Schema mismatch for version ${e.version}
4
+ `)},_domwindow:function(){return p("domwindow")},_bigint:function(l){return p("bigint:"+l.toString())},_process:function(){return p("process")},_timer:function(){return p("timer")},_pipe:function(){return p("pipe")},_tcp:function(){return p("tcp")},_udp:function(){return p("udp")},_tty:function(){return p("tty")},_statwatcher:function(){return p("statwatcher")},_securecontext:function(){return p("securecontext")},_connection:function(){return p("connection")},_zlib:function(){return p("zlib")},_context:function(){return p("context")},_nodescript:function(){return p("nodescript")},_httpparser:function(){return p("httpparser")},_dataview:function(){return p("dataview")},_signal:function(){return p("signal")},_fsevent:function(){return p("fsevent")},_tlswrap:function(){return p("tlswrap")}}}function A(){return{buf:"",write:function(y){this.buf+=y},end:function(y){this.buf+=y},read:function(){return this.buf}}}e.writeToStream=function(y,I,d){return d===void 0&&(d=I,I={}),O(I=C(y,I),d).dispatch(y)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_9a5aa49d.js","/")},{buffer:3,crypto:5,lYpoI2:11}],2:[function(i,t,e){(function(n,r,s,o,c,f,h,x,E){(function(g){"use strict";var P=typeof Uint8Array<"u"?Uint8Array:Array,b="+".charCodeAt(0),v="/".charCodeAt(0),C="0".charCodeAt(0),S="a".charCodeAt(0),O="A".charCodeAt(0),A="-".charCodeAt(0),y="_".charCodeAt(0);function I(d){return d=d.charCodeAt(0),d===b||d===A?62:d===v||d===y?63:d<C?-1:d<C+10?d-C+26+26:d<O+26?d-O:d<S+26?d-S+26:void 0}g.toByteArray=function(d){var p,l;if(0<d.length%4)throw new Error("Invalid string. Length must be a multiple of 4");var w=d.length,w=d.charAt(w-2)==="="?2:d.charAt(w-1)==="="?1:0,D=new P(3*d.length/4-w),F=0<w?d.length-4:d.length,B=0;function j(M){D[B++]=M}for(p=0;p<F;p+=4,0)j((16711680&(l=I(d.charAt(p))<<18|I(d.charAt(p+1))<<12|I(d.charAt(p+2))<<6|I(d.charAt(p+3))))>>16),j((65280&l)>>8),j(255&l);return w==2?j(255&(l=I(d.charAt(p))<<2|I(d.charAt(p+1))>>4)):w==1&&(j((l=I(d.charAt(p))<<10|I(d.charAt(p+1))<<4|I(d.charAt(p+2))>>2)>>8&255),j(255&l)),D},g.fromByteArray=function(d){var p,l,w,D,F=d.length%3,B="";function j(M){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(M)}for(p=0,w=d.length-F;p<w;p+=3)l=(d[p]<<16)+(d[p+1]<<8)+d[p+2],B+=j((D=l)>>18&63)+j(D>>12&63)+j(D>>6&63)+j(63&D);switch(F){case 1:B=(B+=j((l=d[d.length-1])>>2))+j(l<<4&63)+"==";break;case 2:B=(B=(B+=j((l=(d[d.length-2]<<8)+d[d.length-1])>>10))+j(l>>4&63))+j(l<<2&63)+"="}return B}})(e===void 0?this.base64js={}:e)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(i,t,e){(function(n,r,b,o,c,f,h,x,E){var g=i("base64-js"),P=i("ieee754");function b(a,u,m){if(!(this instanceof b))return new b(a,u,m);var T,_,k,L,Q=typeof a;if(u==="base64"&&Q=="string")for(a=(L=a).trim?L.trim():L.replace(/^\s+|\s+$/g,"");a.length%4!=0;)a+="=";if(Q=="number")T=ee(a);else if(Q=="string")T=b.byteLength(a,u);else{if(Q!="object")throw new Error("First argument needs to be a number, array or string.");T=ee(a.length)}if(b._useTypedArrays?_=b._augment(new Uint8Array(T)):((_=this).length=T,_._isBuffer=!0),b._useTypedArrays&&typeof a.byteLength=="number")_._set(a);else if(H(L=a)||b.isBuffer(L)||L&&typeof L=="object"&&typeof L.length=="number")for(k=0;k<T;k++)b.isBuffer(a)?_[k]=a.readUInt8(k):_[k]=a[k];else if(Q=="string")_.write(a,0,u);else if(Q=="number"&&!b._useTypedArrays&&!m)for(k=0;k<T;k++)_[k]=0;return _}function v(a,u,m,T){return b._charsWritten=lt(function(_){for(var k=[],L=0;L<_.length;L++)k.push(255&_.charCodeAt(L));return k}(u),a,m,T)}function C(a,u,m,T){return b._charsWritten=lt(function(_){for(var k,L,Q=[],Y=0;Y<_.length;Y++)L=_.charCodeAt(Y),k=L>>8,L=L%256,Q.push(L),Q.push(k);return Q}(u),a,m,T)}function S(a,u,m){var T="";m=Math.min(a.length,m);for(var _=u;_<m;_++)T+=String.fromCharCode(a[_]);return T}function O(a,u,m,k){k||(R(typeof m=="boolean","missing or invalid endian"),R(u!=null,"missing offset"),R(u+1<a.length,"Trying to read beyond buffer length"));var _,k=a.length;if(!(k<=u))return m?(_=a[u],u+1<k&&(_|=a[u+1]<<8)):(_=a[u]<<8,u+1<k&&(_|=a[u+1])),_}function A(a,u,m,k){k||(R(typeof m=="boolean","missing or invalid endian"),R(u!=null,"missing offset"),R(u+3<a.length,"Trying to read beyond buffer length"));var _,k=a.length;if(!(k<=u))return m?(u+2<k&&(_=a[u+2]<<16),u+1<k&&(_|=a[u+1]<<8),_|=a[u],u+3<k&&(_+=a[u+3]<<24>>>0)):(u+1<k&&(_=a[u+1]<<16),u+2<k&&(_|=a[u+2]<<8),u+3<k&&(_|=a[u+3]),_+=a[u]<<24>>>0),_}function y(a,u,m,T){if(T||(R(typeof m=="boolean","missing or invalid endian"),R(u!=null,"missing offset"),R(u+1<a.length,"Trying to read beyond buffer length")),!(a.length<=u))return T=O(a,u,m,!0),32768&T?-1*(65535-T+1):T}function I(a,u,m,T){if(T||(R(typeof m=="boolean","missing or invalid endian"),R(u!=null,"missing offset"),R(u+3<a.length,"Trying to read beyond buffer length")),!(a.length<=u))return T=A(a,u,m,!0),2147483648&T?-1*(4294967295-T+1):T}function d(a,u,m,T){return T||(R(typeof m=="boolean","missing or invalid endian"),R(u+3<a.length,"Trying to read beyond buffer length")),P.read(a,u,m,23,4)}function p(a,u,m,T){return T||(R(typeof m=="boolean","missing or invalid endian"),R(u+7<a.length,"Trying to read beyond buffer length")),P.read(a,u,m,52,8)}function l(a,u,m,T,_){if(_||(R(u!=null,"missing value"),R(typeof T=="boolean","missing or invalid endian"),R(m!=null,"missing offset"),R(m+1<a.length,"trying to write beyond buffer length"),bn(u,65535)),_=a.length,!(_<=m))for(var k=0,L=Math.min(_-m,2);k<L;k++)a[m+k]=(u&255<<8*(T?k:1-k))>>>8*(T?k:1-k)}function w(a,u,m,T,_){if(_||(R(u!=null,"missing value"),R(typeof T=="boolean","missing or invalid endian"),R(m!=null,"missing offset"),R(m+3<a.length,"trying to write beyond buffer length"),bn(u,4294967295)),_=a.length,!(_<=m))for(var k=0,L=Math.min(_-m,4);k<L;k++)a[m+k]=u>>>8*(T?k:3-k)&255}function D(a,u,m,T,_){_||(R(u!=null,"missing value"),R(typeof T=="boolean","missing or invalid endian"),R(m!=null,"missing offset"),R(m+1<a.length,"Trying to write beyond buffer length"),wn(u,32767,-32768)),a.length<=m||l(a,0<=u?u:65535+u+1,m,T,_)}function F(a,u,m,T,_){_||(R(u!=null,"missing value"),R(typeof T=="boolean","missing or invalid endian"),R(m!=null,"missing offset"),R(m+3<a.length,"Trying to write beyond buffer length"),wn(u,2147483647,-2147483648)),a.length<=m||w(a,0<=u?u:4294967295+u+1,m,T,_)}function B(a,u,m,T,_){_||(R(u!=null,"missing value"),R(typeof T=="boolean","missing or invalid endian"),R(m!=null,"missing offset"),R(m+3<a.length,"Trying to write beyond buffer length"),si(u,34028234663852886e22,-34028234663852886e22)),a.length<=m||P.write(a,u,m,T,23,4)}function j(a,u,m,T,_){_||(R(u!=null,"missing value"),R(typeof T=="boolean","missing or invalid endian"),R(m!=null,"missing offset"),R(m+7<a.length,"Trying to write beyond buffer length"),si(u,17976931348623157e292,-17976931348623157e292)),a.length<=m||P.write(a,u,m,T,52,8)}e.Buffer=b,e.SlowBuffer=b,e.INSPECT_MAX_BYTES=50,b.poolSize=8192,b._useTypedArrays=function(){try{var a=new ArrayBuffer(0),u=new Uint8Array(a);return u.foo=function(){return 42},u.foo()===42&&typeof u.subarray=="function"}catch{return!1}}(),b.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},b.isBuffer=function(a){return!(a==null||!a._isBuffer)},b.byteLength=function(a,u){var m;switch(a+="",u||"utf8"){case"hex":m=a.length/2;break;case"utf8":case"utf-8":m=be(a).length;break;case"ascii":case"binary":case"raw":m=a.length;break;case"base64":m=ii(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=2*a.length;break;default:throw new Error("Unknown encoding")}return m},b.concat=function(a,u){if(R(H(a),`Usage: Buffer.concat(list, [totalLength])
5
+ list should be an Array.`),a.length===0)return new b(0);if(a.length===1)return a[0];if(typeof u!="number")for(_=u=0;_<a.length;_++)u+=a[_].length;for(var m=new b(u),T=0,_=0;_<a.length;_++){var k=a[_];k.copy(m,T),T+=k.length}return m},b.prototype.write=function(a,u,m,T){isFinite(u)?isFinite(m)||(T=m,m=void 0):(Y=T,T=u,u=m,m=Y),u=Number(u)||0;var _,k,L,Q,Y=this.length-u;switch((!m||Y<(m=Number(m)))&&(m=Y),T=String(T||"utf8").toLowerCase()){case"hex":_=function(he,ie,re,G){re=Number(re)||0;var J=he.length-re;(!G||J<(G=Number(G)))&&(G=J),R((J=ie.length)%2==0,"Invalid hex string"),J/2<G&&(G=J/2);for(var Fe=0;Fe<G;Fe++){var oi=parseInt(ie.substr(2*Fe,2),16);R(!isNaN(oi),"Invalid hex string"),he[re+Fe]=oi}return b._charsWritten=2*Fe,Fe}(this,a,u,m);break;case"utf8":case"utf-8":k=this,L=u,Q=m,_=b._charsWritten=lt(be(a),k,L,Q);break;case"ascii":case"binary":_=v(this,a,u,m);break;case"base64":k=this,L=u,Q=m,_=b._charsWritten=lt(ii(a),k,L,Q);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":_=C(this,a,u,m);break;default:throw new Error("Unknown encoding")}return _},b.prototype.toString=function(a,u,m){var T,_,k,L,Q=this;if(a=String(a||"utf8").toLowerCase(),u=Number(u)||0,(m=m!==void 0?Number(m):Q.length)===u)return"";switch(a){case"hex":T=function(Y,he,ie){var re=Y.length;(!he||he<0)&&(he=0),(!ie||ie<0||re<ie)&&(ie=re);for(var G="",J=he;J<ie;J++)G+=$(Y[J]);return G}(Q,u,m);break;case"utf8":case"utf-8":T=function(Y,he,ie){var re="",G="";ie=Math.min(Y.length,ie);for(var J=he;J<ie;J++)Y[J]<=127?(re+=ri(G)+String.fromCharCode(Y[J]),G=""):G+="%"+Y[J].toString(16);return re+ri(G)}(Q,u,m);break;case"ascii":case"binary":T=S(Q,u,m);break;case"base64":_=Q,L=m,T=(k=u)===0&&L===_.length?g.fromByteArray(_):g.fromByteArray(_.slice(k,L));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":T=function(Y,he,ie){for(var re=Y.slice(he,ie),G="",J=0;J<re.length;J+=2)G+=String.fromCharCode(re[J]+256*re[J+1]);return G}(Q,u,m);break;default:throw new Error("Unknown encoding")}return T},b.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},b.prototype.copy=function(a,u,m,T){if(u=u||0,(T=T||T===0?T:this.length)!==(m=m||0)&&a.length!==0&&this.length!==0){R(m<=T,"sourceEnd < sourceStart"),R(0<=u&&u<a.length,"targetStart out of bounds"),R(0<=m&&m<this.length,"sourceStart out of bounds"),R(0<=T&&T<=this.length,"sourceEnd out of bounds"),T>this.length&&(T=this.length);var _=(T=a.length-u<T-m?a.length-u+m:T)-m;if(_<100||!b._useTypedArrays)for(var k=0;k<_;k++)a[k+u]=this[k+m];else a._set(this.subarray(m,m+_),u)}},b.prototype.slice=function(a,u){var m=this.length;if(a=q(a,m,0),u=q(u,m,m),b._useTypedArrays)return b._augment(this.subarray(a,u));for(var T=u-a,_=new b(T,void 0,!0),k=0;k<T;k++)_[k]=this[k+a];return _},b.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},b.prototype.set=function(a,u){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,u)},b.prototype.readUInt8=function(a,u){if(u||(R(a!=null,"missing offset"),R(a<this.length,"Trying to read beyond buffer length")),!(a>=this.length))return this[a]},b.prototype.readUInt16LE=function(a,u){return O(this,a,!0,u)},b.prototype.readUInt16BE=function(a,u){return O(this,a,!1,u)},b.prototype.readUInt32LE=function(a,u){return A(this,a,!0,u)},b.prototype.readUInt32BE=function(a,u){return A(this,a,!1,u)},b.prototype.readInt8=function(a,u){if(u||(R(a!=null,"missing offset"),R(a<this.length,"Trying to read beyond buffer length")),!(a>=this.length))return 128&this[a]?-1*(255-this[a]+1):this[a]},b.prototype.readInt16LE=function(a,u){return y(this,a,!0,u)},b.prototype.readInt16BE=function(a,u){return y(this,a,!1,u)},b.prototype.readInt32LE=function(a,u){return I(this,a,!0,u)},b.prototype.readInt32BE=function(a,u){return I(this,a,!1,u)},b.prototype.readFloatLE=function(a,u){return d(this,a,!0,u)},b.prototype.readFloatBE=function(a,u){return d(this,a,!1,u)},b.prototype.readDoubleLE=function(a,u){return p(this,a,!0,u)},b.prototype.readDoubleBE=function(a,u){return p(this,a,!1,u)},b.prototype.writeUInt8=function(a,u,m){m||(R(a!=null,"missing value"),R(u!=null,"missing offset"),R(u<this.length,"trying to write beyond buffer length"),bn(a,255)),u>=this.length||(this[u]=a)},b.prototype.writeUInt16LE=function(a,u,m){l(this,a,u,!0,m)},b.prototype.writeUInt16BE=function(a,u,m){l(this,a,u,!1,m)},b.prototype.writeUInt32LE=function(a,u,m){w(this,a,u,!0,m)},b.prototype.writeUInt32BE=function(a,u,m){w(this,a,u,!1,m)},b.prototype.writeInt8=function(a,u,m){m||(R(a!=null,"missing value"),R(u!=null,"missing offset"),R(u<this.length,"Trying to write beyond buffer length"),wn(a,127,-128)),u>=this.length||(0<=a?this.writeUInt8(a,u,m):this.writeUInt8(255+a+1,u,m))},b.prototype.writeInt16LE=function(a,u,m){D(this,a,u,!0,m)},b.prototype.writeInt16BE=function(a,u,m){D(this,a,u,!1,m)},b.prototype.writeInt32LE=function(a,u,m){F(this,a,u,!0,m)},b.prototype.writeInt32BE=function(a,u,m){F(this,a,u,!1,m)},b.prototype.writeFloatLE=function(a,u,m){B(this,a,u,!0,m)},b.prototype.writeFloatBE=function(a,u,m){B(this,a,u,!1,m)},b.prototype.writeDoubleLE=function(a,u,m){j(this,a,u,!0,m)},b.prototype.writeDoubleBE=function(a,u,m){j(this,a,u,!1,m)},b.prototype.fill=function(a,u,m){if(u=u||0,m=m||this.length,R(typeof(a=typeof(a=a||0)=="string"?a.charCodeAt(0):a)=="number"&&!isNaN(a),"value is not a number"),R(u<=m,"end < start"),m!==u&&this.length!==0){R(0<=u&&u<this.length,"start out of bounds"),R(0<=m&&m<=this.length,"end out of bounds");for(var T=u;T<m;T++)this[T]=a}},b.prototype.inspect=function(){for(var a=[],u=this.length,m=0;m<u;m++)if(a[m]=$(this[m]),m===e.INSPECT_MAX_BYTES){a[m+1]="...";break}return"<Buffer "+a.join(" ")+">"},b.prototype.toArrayBuffer=function(){if(typeof Uint8Array>"u")throw new Error("Buffer.toArrayBuffer not supported in this browser");if(b._useTypedArrays)return new b(this).buffer;for(var a=new Uint8Array(this.length),u=0,m=a.length;u<m;u+=1)a[u]=this[u];return a.buffer};var M=b.prototype;function q(a,u,m){return typeof a!="number"?m:u<=(a=~~a)?u:0<=a||0<=(a+=u)?a:0}function ee(a){return(a=~~Math.ceil(+a))<0?0:a}function H(a){return(Array.isArray||function(u){return Object.prototype.toString.call(u)==="[object Array]"})(a)}function $(a){return a<16?"0"+a.toString(16):a.toString(16)}function be(a){for(var u=[],m=0;m<a.length;m++){var T=a.charCodeAt(m);if(T<=127)u.push(a.charCodeAt(m));else for(var _=m,k=(55296<=T&&T<=57343&&m++,encodeURIComponent(a.slice(_,m+1)).substr(1).split("%")),L=0;L<k.length;L++)u.push(parseInt(k[L],16))}return u}function ii(a){return g.toByteArray(a)}function lt(a,u,m,T){for(var _=0;_<T&&!(_+m>=u.length||_>=a.length);_++)u[_+m]=a[_];return _}function ri(a){try{return decodeURIComponent(a)}catch{return String.fromCharCode(65533)}}function bn(a,u){R(typeof a=="number","cannot write a non-number as a number"),R(0<=a,"specified a negative value for writing an unsigned value"),R(a<=u,"value is larger than maximum value for type"),R(Math.floor(a)===a,"value has a fractional component")}function wn(a,u,m){R(typeof a=="number","cannot write a non-number as a number"),R(a<=u,"value larger than maximum allowed value"),R(m<=a,"value smaller than minimum allowed value"),R(Math.floor(a)===a,"value has a fractional component")}function si(a,u,m){R(typeof a=="number","cannot write a non-number as a number"),R(a<=u,"value larger than maximum allowed value"),R(m<=a,"value smaller than minimum allowed value")}function R(a,u){if(!a)throw new Error(u||"Failed assertion")}b._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=M.get,a.set=M.set,a.write=M.write,a.toString=M.toString,a.toLocaleString=M.toString,a.toJSON=M.toJSON,a.copy=M.copy,a.slice=M.slice,a.readUInt8=M.readUInt8,a.readUInt16LE=M.readUInt16LE,a.readUInt16BE=M.readUInt16BE,a.readUInt32LE=M.readUInt32LE,a.readUInt32BE=M.readUInt32BE,a.readInt8=M.readInt8,a.readInt16LE=M.readInt16LE,a.readInt16BE=M.readInt16BE,a.readInt32LE=M.readInt32LE,a.readInt32BE=M.readInt32BE,a.readFloatLE=M.readFloatLE,a.readFloatBE=M.readFloatBE,a.readDoubleLE=M.readDoubleLE,a.readDoubleBE=M.readDoubleBE,a.writeUInt8=M.writeUInt8,a.writeUInt16LE=M.writeUInt16LE,a.writeUInt16BE=M.writeUInt16BE,a.writeUInt32LE=M.writeUInt32LE,a.writeUInt32BE=M.writeUInt32BE,a.writeInt8=M.writeInt8,a.writeInt16LE=M.writeInt16LE,a.writeInt16BE=M.writeInt16BE,a.writeInt32LE=M.writeInt32LE,a.writeInt32BE=M.writeInt32BE,a.writeFloatLE=M.writeFloatLE,a.writeFloatBE=M.writeFloatBE,a.writeDoubleLE=M.writeDoubleLE,a.writeDoubleBE=M.writeDoubleBE,a.fill=M.fill,a.inspect=M.inspect,a.toArrayBuffer=M.toArrayBuffer,a}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(i,t,e){(function(n,r,g,o,c,f,h,x,E){var g=i("buffer").Buffer,P=4,b=new g(P);b.fill(0),t.exports={hash:function(v,C,S,O){for(var A=C(function(l,w){l.length%P!=0&&(D=l.length+(P-l.length%P),l=g.concat([l,b],D));for(var D,F=[],B=w?l.readInt32BE:l.readInt32LE,j=0;j<l.length;j+=P)F.push(B.call(l,j));return F}(v=g.isBuffer(v)?v:new g(v),O),8*v.length),C=O,y=new g(S),I=C?y.writeInt32BE:y.writeInt32LE,d=0;d<A.length;d++)I.call(y,A[d],4*d,!0);return y}}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],5:[function(i,t,e){(function(n,r,g,o,c,f,h,x,E){var g=i("buffer").Buffer,P=i("./sha"),b=i("./sha256"),v=i("./rng"),C={sha1:P,sha256:b,md5:i("./md5")},S=64,O=new g(S);function A(l,w){var D=C[l=l||"sha1"],F=[];return D||y("algorithm:",l,"is not yet supported"),{update:function(B){return g.isBuffer(B)||(B=new g(B)),F.push(B),B.length,this},digest:function(B){var j=g.concat(F),j=w?function(M,q,ee){g.isBuffer(q)||(q=new g(q)),g.isBuffer(ee)||(ee=new g(ee)),q.length>S?q=M(q):q.length<S&&(q=g.concat([q,O],S));for(var H=new g(S),$=new g(S),be=0;be<S;be++)H[be]=54^q[be],$[be]=92^q[be];return ee=M(g.concat([H,ee])),M(g.concat([$,ee]))}(D,w,j):D(j);return F=null,B?j.toString(B):j}}}function y(){var l=[].slice.call(arguments).join(" ");throw new Error([l,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
6
+ `))}O.fill(0),e.createHash=function(l){return A(l)},e.createHmac=A,e.randomBytes=function(l,w){if(!w||!w.call)return new g(v(l));try{w.call(this,void 0,new g(v(l)))}catch(D){w(D)}};var I,d=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],p=function(l){e[l]=function(){y("sorry,",l,"is not implemented yet")}};for(I in d)p(d[I],I)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./md5":6,"./rng":7,"./sha":8,"./sha256":9,buffer:3,lYpoI2:11}],6:[function(i,t,e){(function(n,r,s,o,c,f,h,x,E){var g=i("./helpers");function P(y,I){y[I>>5]|=128<<I%32,y[14+(I+64>>>9<<4)]=I;for(var d=1732584193,p=-271733879,l=-1732584194,w=271733878,D=0;D<y.length;D+=16){var F=d,B=p,j=l,M=w,d=v(d,p,l,w,y[D+0],7,-680876936),w=v(w,d,p,l,y[D+1],12,-389564586),l=v(l,w,d,p,y[D+2],17,606105819),p=v(p,l,w,d,y[D+3],22,-1044525330);d=v(d,p,l,w,y[D+4],7,-176418897),w=v(w,d,p,l,y[D+5],12,1200080426),l=v(l,w,d,p,y[D+6],17,-1473231341),p=v(p,l,w,d,y[D+7],22,-45705983),d=v(d,p,l,w,y[D+8],7,1770035416),w=v(w,d,p,l,y[D+9],12,-1958414417),l=v(l,w,d,p,y[D+10],17,-42063),p=v(p,l,w,d,y[D+11],22,-1990404162),d=v(d,p,l,w,y[D+12],7,1804603682),w=v(w,d,p,l,y[D+13],12,-40341101),l=v(l,w,d,p,y[D+14],17,-1502002290),d=C(d,p=v(p,l,w,d,y[D+15],22,1236535329),l,w,y[D+1],5,-165796510),w=C(w,d,p,l,y[D+6],9,-1069501632),l=C(l,w,d,p,y[D+11],14,643717713),p=C(p,l,w,d,y[D+0],20,-373897302),d=C(d,p,l,w,y[D+5],5,-701558691),w=C(w,d,p,l,y[D+10],9,38016083),l=C(l,w,d,p,y[D+15],14,-660478335),p=C(p,l,w,d,y[D+4],20,-405537848),d=C(d,p,l,w,y[D+9],5,568446438),w=C(w,d,p,l,y[D+14],9,-1019803690),l=C(l,w,d,p,y[D+3],14,-187363961),p=C(p,l,w,d,y[D+8],20,1163531501),d=C(d,p,l,w,y[D+13],5,-1444681467),w=C(w,d,p,l,y[D+2],9,-51403784),l=C(l,w,d,p,y[D+7],14,1735328473),d=S(d,p=C(p,l,w,d,y[D+12],20,-1926607734),l,w,y[D+5],4,-378558),w=S(w,d,p,l,y[D+8],11,-2022574463),l=S(l,w,d,p,y[D+11],16,1839030562),p=S(p,l,w,d,y[D+14],23,-35309556),d=S(d,p,l,w,y[D+1],4,-1530992060),w=S(w,d,p,l,y[D+4],11,1272893353),l=S(l,w,d,p,y[D+7],16,-155497632),p=S(p,l,w,d,y[D+10],23,-1094730640),d=S(d,p,l,w,y[D+13],4,681279174),w=S(w,d,p,l,y[D+0],11,-358537222),l=S(l,w,d,p,y[D+3],16,-722521979),p=S(p,l,w,d,y[D+6],23,76029189),d=S(d,p,l,w,y[D+9],4,-640364487),w=S(w,d,p,l,y[D+12],11,-421815835),l=S(l,w,d,p,y[D+15],16,530742520),d=O(d,p=S(p,l,w,d,y[D+2],23,-995338651),l,w,y[D+0],6,-198630844),w=O(w,d,p,l,y[D+7],10,1126891415),l=O(l,w,d,p,y[D+14],15,-1416354905),p=O(p,l,w,d,y[D+5],21,-57434055),d=O(d,p,l,w,y[D+12],6,1700485571),w=O(w,d,p,l,y[D+3],10,-1894986606),l=O(l,w,d,p,y[D+10],15,-1051523),p=O(p,l,w,d,y[D+1],21,-2054922799),d=O(d,p,l,w,y[D+8],6,1873313359),w=O(w,d,p,l,y[D+15],10,-30611744),l=O(l,w,d,p,y[D+6],15,-1560198380),p=O(p,l,w,d,y[D+13],21,1309151649),d=O(d,p,l,w,y[D+4],6,-145523070),w=O(w,d,p,l,y[D+11],10,-1120210379),l=O(l,w,d,p,y[D+2],15,718787259),p=O(p,l,w,d,y[D+9],21,-343485551),d=A(d,F),p=A(p,B),l=A(l,j),w=A(w,M)}return Array(d,p,l,w)}function b(y,I,d,p,l,w){return A((I=A(A(I,y),A(p,w)))<<l|I>>>32-l,d)}function v(y,I,d,p,l,w,D){return b(I&d|~I&p,y,I,l,w,D)}function C(y,I,d,p,l,w,D){return b(I&p|d&~p,y,I,l,w,D)}function S(y,I,d,p,l,w,D){return b(I^d^p,y,I,l,w,D)}function O(y,I,d,p,l,w,D){return b(d^(I|~p),y,I,l,w,D)}function A(y,I){var d=(65535&y)+(65535&I);return(y>>16)+(I>>16)+(d>>16)<<16|65535&d}t.exports=function(y){return g.hash(y,P,16)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(i,t,e){(function(n,r,s,o,c,f,h,x,E){var g;t.exports=g||function(P){for(var b,v=new Array(P),C=0;C<P;C++)!(3&C)&&(b=4294967296*Math.random()),v[C]=b>>>((3&C)<<3)&255;return v}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(i,t,e){(function(n,r,s,o,c,f,h,x,E){var g=i("./helpers");function P(C,S){C[S>>5]|=128<<24-S%32,C[15+(S+64>>9<<4)]=S;for(var O,A,y,I=Array(80),d=1732584193,p=-271733879,l=-1732584194,w=271733878,D=-1009589776,F=0;F<C.length;F+=16){for(var B=d,j=p,M=l,q=w,ee=D,H=0;H<80;H++){I[H]=H<16?C[F+H]:v(I[H-3]^I[H-8]^I[H-14]^I[H-16],1);var $=b(b(v(d,5),($=p,A=l,y=w,(O=H)<20?$&A|~$&y:!(O<40)&&O<60?$&A|$&y|A&y:$^A^y)),b(b(D,I[H]),(O=H)<20?1518500249:O<40?1859775393:O<60?-1894007588:-899497514)),D=w,w=l,l=v(p,30),p=d,d=$}d=b(d,B),p=b(p,j),l=b(l,M),w=b(w,q),D=b(D,ee)}return Array(d,p,l,w,D)}function b(C,S){var O=(65535&C)+(65535&S);return(C>>16)+(S>>16)+(O>>16)<<16|65535&O}function v(C,S){return C<<S|C>>>32-S}t.exports=function(C){return g.hash(C,P,20,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(i,t,e){(function(n,r,s,o,c,f,h,x,E){function g(S,O){var A=(65535&S)+(65535&O);return(S>>16)+(O>>16)+(A>>16)<<16|65535&A}function P(S,O){var A,y=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),I=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),d=new Array(64);S[O>>5]|=128<<24-O%32,S[15+(O+64>>9<<4)]=O;for(var p,l,w=0;w<S.length;w+=16){for(var D=I[0],F=I[1],B=I[2],j=I[3],M=I[4],q=I[5],ee=I[6],H=I[7],$=0;$<64;$++)d[$]=$<16?S[$+w]:g(g(g((l=d[$-2],v(l,17)^v(l,19)^C(l,10)),d[$-7]),(l=d[$-15],v(l,7)^v(l,18)^C(l,3))),d[$-16]),A=g(g(g(g(H,v(l=M,6)^v(l,11)^v(l,25)),M&q^~M&ee),y[$]),d[$]),p=g(v(p=D,2)^v(p,13)^v(p,22),D&F^D&B^F&B),H=ee,ee=q,q=M,M=g(j,A),j=B,B=F,F=D,D=g(A,p);I[0]=g(D,I[0]),I[1]=g(F,I[1]),I[2]=g(B,I[2]),I[3]=g(j,I[3]),I[4]=g(M,I[4]),I[5]=g(q,I[5]),I[6]=g(ee,I[6]),I[7]=g(H,I[7])}return I}var b=i("./helpers"),v=function(S,O){return S>>>O|S<<32-O},C=function(S,O){return S>>>O};t.exports=function(S){return b.hash(S,P,32,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(i,t,e){(function(n,r,s,o,c,f,h,x,E){e.read=function(g,P,b,v,w){var S,O,A=8*w-v-1,y=(1<<A)-1,I=y>>1,d=-7,p=b?w-1:0,l=b?-1:1,w=g[P+p];for(p+=l,S=w&(1<<-d)-1,w>>=-d,d+=A;0<d;S=256*S+g[P+p],p+=l,d-=8);for(O=S&(1<<-d)-1,S>>=-d,d+=v;0<d;O=256*O+g[P+p],p+=l,d-=8);if(S===0)S=1-I;else{if(S===y)return O?NaN:1/0*(w?-1:1);O+=Math.pow(2,v),S-=I}return(w?-1:1)*O*Math.pow(2,S-v)},e.write=function(g,P,b,v,C,D){var O,A,y=8*D-C-1,I=(1<<y)-1,d=I>>1,p=C===23?Math.pow(2,-24)-Math.pow(2,-77):0,l=v?0:D-1,w=v?1:-1,D=P<0||P===0&&1/P<0?1:0;for(P=Math.abs(P),isNaN(P)||P===1/0?(A=isNaN(P)?1:0,O=I):(O=Math.floor(Math.log(P)/Math.LN2),P*(v=Math.pow(2,-O))<1&&(O--,v*=2),2<=(P+=1<=O+d?p/v:p*Math.pow(2,1-d))*v&&(O++,v/=2),I<=O+d?(A=0,O=I):1<=O+d?(A=(P*v-1)*Math.pow(2,C),O+=d):(A=P*Math.pow(2,d-1)*Math.pow(2,C),O=0));8<=C;g[b+l]=255&A,l+=w,A/=256,C-=8);for(O=O<<C|A,y+=C;0<y;g[b+l]=255&O,l+=w,O/=256,y-=8);g[b+l-w]|=128*D}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/ieee754/index.js","/node_modules/gulp-browserify/node_modules/ieee754")},{buffer:3,lYpoI2:11}],11:[function(i,t,e){(function(n,r,s,o,c,f,h,x,E){var g,P,b;function v(){}(n=t.exports={}).nextTick=(P=typeof window<"u"&&window.setImmediate,b=typeof window<"u"&&window.postMessage&&window.addEventListener,P?function(C){return window.setImmediate(C)}:b?(g=[],window.addEventListener("message",function(C){var S=C.source;S!==window&&S!==null||C.data!=="process-tick"||(C.stopPropagation(),0<g.length&&g.shift()())},!0),function(C){g.push(C),window.postMessage("process-tick","*")}):function(C){setTimeout(C,0)}),n.title="browser",n.browser=!0,n.env={},n.argv=[],n.on=v,n.addListener=v,n.once=v,n.off=v,n.removeListener=v,n.removeAllListeners=v,n.emit=v,n.binding=function(C){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(C){throw new Error("process.chdir is not supported")}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/process/browser.js","/node_modules/gulp-browserify/node_modules/process")},{buffer:3,lYpoI2:11}]},{},[1])(1)})});var ni={};hr(ni,{Client:()=>Be,ClientDescriptor:()=>gn,Entity:()=>ye,EntityFile:()=>ke,MigrationPathError:()=>Ve,ServerSync:()=>Ke,Storage:()=>Be,StorageDescriptor:()=>gn,collection:()=>zi,createDefaultMigration:()=>qn,createMigration:()=>Wn,migrate:()=>Rt,schema:()=>$i});var Oi=dt(ft(),1),ht=4,Qe=36;function bi(i){return i.toString(Qe).padStart(ht,"0")}function xr(i){return i.toString().padStart(6,"0")}var mt=class{constructor(){this.latest={time:Date.now(),counter:0,node:Or()};this.zeroCounter=0;this.now=t=>(this.latest=vi(this.latest),this.get(t,this.latest));this.OLD_now=t=>(this.latest=vi(this.latest),xr(t)+Dr(this.latest));this.timerState=()=>this.latest;this.update=t=>{let e=t.slice(ht);this.latest=Ir(this.latest,Si(e))};this.get=(t,e)=>bi(t)+wi(e);this.zero=t=>bi(t)+wi({time:0,counter:this.zeroCounter++,node:this.latest.node});this.getWallClockTime=t=>Si(t.slice(ht)).time}},yt=class extends Error{constructor(...e){super();this.type="ClockDriftError",this.message=["maximum clock drift exceeded"].concat(e).join(" ")}},gt=class extends Error{constructor(){super();this.type="OverflowError",this.message="timestamp counter overflow"}},Dn=4,Cn=7,bt=60*1e3,He=9;function Or(){return Oi.default.slug().padStart(Cn,"0").slice(0,Cn)}function wi(i){let t=new Date(i.time).getTime().toString(Qe).padStart(He,"0"),e=i.counter.toString(Qe).padStart(Dn,"0"),n=i.node.padStart(Cn,"0");return`${t}${e}${n}`}function vi(i){let t=Date.now(),e=Math.max(i.time,t),n=i.time===e?i.counter+1:0;if(e-t>bt)throw new yt(e,t,bt);if(n>65535)throw new gt;return{time:e,counter:n,node:i.node}}function Ir(i,t){let e=Date.now(),n=Math.max(e,Math.max(i.time,t.time)),r=Math.max(i.counter,t.counter),s;if(i.time===n&&t.time===n?s=r+1:i.time===n?s=i.counter+1:t.time===n?s=t.counter+1:s=0,n-e>bt)throw new yt(n,e,bt);if(s>65535)throw new gt;return{time:n,counter:s,node:i.node}}function Si(i){let t=i.slice(0,He),e=i.slice(He,He+Dn),n=i.slice(He+Dn),r=parseInt(t,Qe),s=parseInt(e,Qe);if(isNaN(r)||isNaN(s))throw new Error("invalid clock format");return{time:r,counter:s,node:n}}function Dr(i){let t=new Date(i.time).toISOString(),e=i.counter.toString(16).toUpperCase().padStart(4,"0"),n=i.node.padStart(16,"0");return`${t}-${e}-${n}`}function xi(i){return parseInt(i.slice(0,ht),36)}function Ii(i,t){return xi(i)-xi(t)}function se(i){return i&&i["@@type"]==="file"}function Di(i){return{"@@type":"file",id:i}}var wt,Cr=new Uint8Array(16);function En(){if(!wt&&(wt=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!wt))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return wt(Cr)}var Ci=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Er(i){return typeof i=="string"&&Ci.test(i)}var Ei=Er;var Z=[];for(vt=0;vt<256;++vt)Z.push((vt+256).toString(16).substr(1));var vt;function Pr(i){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,e=(Z[i[t+0]]+Z[i[t+1]]+Z[i[t+2]]+Z[i[t+3]]+"-"+Z[i[t+4]]+Z[i[t+5]]+"-"+Z[i[t+6]]+Z[i[t+7]]+"-"+Z[i[t+8]]+Z[i[t+9]]+"-"+Z[i[t+10]]+Z[i[t+11]]+Z[i[t+12]]+Z[i[t+13]]+Z[i[t+14]]+Z[i[t+15]]).toLowerCase();if(!Ei(e))throw TypeError("Stringified UUID is invalid");return e}var Pi=Pr;function _r(i,t,e){i=i||{};var n=i.random||(i.rng||En)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){e=e||0;for(var r=0;r<16;++r)t[e+r]=n[r];return t}return Pi(n)}var Je=_r;function te(i){return ne(i)||se(i)}function Pn(i,t){return i===t?!0:!(!te(i)||!te(t)||i["@@type"]!==t["@@type"]||i.id!==t.id)}var Ri=dt(Ai(),1);function Tr(i,t){return typeof t!="object"||t===null||Array.isArray(t)?t:Object.fromEntries(Object.entries(t).sort(([e],[n])=>e<n?-1:e>n?1:0))}function Ye(i){return JSON.stringify(i,Tr)}function oe(i,t=!0){if(z(i)||Array.isArray(i)){let e=ce(i),n;if(Array.isArray(i))n=i.map(r=>oe(r,t));else{n={};for(let[r,s]of Object.entries(i))n[r]=oe(s,t)}return t&&e&&K(n,e),n}return i}function Se(i){return(0,Ri.default)(i)}function z(i){return i&&typeof i=="object"}function ki(i){for(var t=[],e=[i],n=0;e.length;){var r=e.pop();if(typeof r=="boolean")n+=4;else if(typeof r=="string")n+=r.length*2;else if(typeof r=="number")n+=8;else if(typeof r=="object"&&t.indexOf(r)===-1){t.push(r);for(var s in r)e.push(r[s])}}return n}function V(i,t="assertion failed"){if(!i)throw new Error(t)}function St(i=16){return Je().replace("-","").slice(0,i)}function Mi(i,t){for(let e=i.length-1;e>=0;e--)if(t(i[e]))return e;return-1}function Bi(i,t){let e;return function(...n){let r=this;clearTimeout(e),e=setTimeout(()=>i.apply(r,n),t)}}var Ie="__@@oid_do_not_use",De="@@id",Ar="/",It=":",Tn=new WeakMap;function le(i){let t=ce(i);return V(!!t,`Object ${JSON.stringify(i)} does not have an OID assigned to it`),t}function ce(i){if(z(i))return Tn.get(i)??i[De]??i[Ie]}function K(i,t){return V(z(i),`Only objects can be assigned OIDs, received ${JSON.stringify(i)}`),Xe(i)&&Dt(i),Tn.set(i,t),i}function Xe(i){return!!ce(i)}function Dt(i){return Tn.delete(i),i}function An(i){return i===De||i===Ie}function Rn(i,t,e){if(Xe(i))return le(i);{let n=ge(t,e);return K(i,n),n}}function Fi(i,t,e){if(Xe(i)){let n=le(i);if(Ct(n,t))return le(i);{let r=ge(t,e);return K(i,r),r}}else{let n=ge(t,e);return K(i,n),n}}var _n={".":"&dot;","/":"&slash;",":":"&colon;"};function ji(i){return i.replace(/[/]/g,_n["/"]).replace(/[:]/g,_n[":"]).replace(/[.]/g,_n["."])}function Li(i){return i.replace(/&slash;/g,"/").replace(/&colon;/g,":").replace(/&dot;/g,".")}function X(i,t,e){let n=ji(i)+Ar+ji(t);return e&&(n+=It+e),n}function ge(i,t=Br){let{collection:e,id:n}=ae(i);return X(e,n,t())}function ae(i){let[t,e]=i.split(It),[n,r]=t.split("/"),s;return r.includes(".")?s=r.slice(0,r.indexOf(".")):s=r,{collection:Li(n),id:Li(s),subId:e}}function je(i,t){let e=le(i);if(Array.isArray(i)){let n;for(let r=0;r<i.length;r++)n=i[r],z(n)&&!te(n)&&(Fi(n,e,t),je(n,t))}else if(z(i)&&!te(i))for(let n of Object.keys(i))z(i[n])&&!te(i[n])&&(Fi(i[n],e,t),je(i[n],t))}function Rr(i){if(z(i))return i[De]||i[Ie]}function kr(i){return z(i)&&(delete i[Ie],delete i[De]),i}function Mr(i){let t=Rr(i);t&&K(i,t)}function Ge(i){if(Mr(i),kr(i),Array.isArray(i))for(let t=0;t<i.length;t++)Ge(i[t]);else if(z(i))for(let t of Object.keys(i))Ge(i[t])}function xt(i){if(Dt(i),Array.isArray(i))for(let t=0;t<i.length;t++)xt(i[t]);else if(z(i))for(let t of Object.keys(i))xt(i[t])}function Br(){return Je().slice(0,8)}function we(i){return{"@@type":"ref",id:i}}function Ot(i,t=new Map){if(Array.isArray(i)){let e=le(i),n=K([],e);for(let r=0;r<i.length;r++){let s=i[r];if(z(s)){if(ne(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(se(s)){n[r]=s;continue}else{let o=le(s);n[r]=we(o),Ot(s,t)}}else n[r]=s}t.set(e,n)}else if(z(i)&&!te(i)){let e=le(i),n=K({},e);for(let r of Object.keys(i)){let s=i[r];if(z(s)){if(ne(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(se(s))n[r]=s;else{let o=le(s);n[r]=we(o),Ot(s,t)}}else n[r]=s}t.set(e,n)}else te(i);return t}function U(i){return i.split(".")[0].split(It)[0]}function kn(i){let t=U(i),e=ge(t,()=>"\uFFFF");return[`${t}${It}`,e]}function Mn(i){let t=U(i);return[`${t}.`,`${t}.\uFFFF`]}function Ct(i,t){return U(i)===U(t)}function Fr(i){let{collection:t,id:e,subId:n}=ae(i);return X(t,e,n)}var jr=/"[^"]+\/[^"]+?(\.[^"]+)+\:[^"]+"/g;function Lr(i){return i.replaceAll(jr,t=>{let e=t.slice(1,t.length-1);return`"${Fr(e)}"`})}function Bn(i){return JSON.parse(Lr(JSON.stringify(i)))}function ne(i){return i&&typeof i=="object"&&i["@@type"]==="ref"}function Fn(i){return z(i)&&!te(i)}function Vr(i,t){return i===t?!0:te(i)&&te(t)?Pn(i,t):!1}function Ze(i,t,e,n,r=[],s={}){let o=le(i);function c(f,h,x){if(!Fn(h))Vr(h,x)||r.push({oid:o,timestamp:e(),data:{op:"set",name:f,value:h}});else{let E=ce(x),g=ce(h);g&&!Ct(o,g)?(h=oe(h,!1),g=ge(o,n),K(h,g)):s.mergeUnknownObjects?!g&&E?(K(h,E),g=E):g=Rn(h,o,n):g=Rn(h,o,n),V(!!g,"Error: no value OID was resolved during diff. This is a bug in Verdant."),V(Ct(o,g),`Error: value OID ${g} is not related to parent OID ${o}. This is a bug in Verdant.`),x===void 0||g!==E?(xe(h,g,e,n,r),r.push({oid:o,timestamp:e(),data:{op:"set",name:f,value:we(g)}}),E!==void 0&&r.push({oid:E,timestamp:e(),data:{op:"delete"}})):Ze(x,h,e,n,r,s)}}if(Array.isArray(i)&&Array.isArray(t)){for(let h=0;h<t.length;h++){let x=t[h],E=i[h];c(h,x,E)}let f=i.length-t.length;if(f>0){for(let h=t.length;h<i.length;h++){let x=i[h],E=ce(x);E&&r.push({oid:E,timestamp:e(),data:{op:"delete"}})}r.push({oid:o,timestamp:e(),data:{op:"list-delete",index:t.length,count:f}})}}else{if(Array.isArray(i)||Array.isArray(t))throw new Error("Cannot diff an array with an object");if(Fn(i)&&Fn(t)){let f=new Set(Object.keys(i));for(let[h,x]of Object.entries(t)){if(x===void 0&&s.defaultUndefined||(f.delete(h),An(h)))continue;let E=i[h];c(h,x,E)}if(!s.defaultUndefined)for(let h of f)An(h)||r.push({oid:o,timestamp:e(),data:{op:"remove",name:h}})}}return r}function xe(i,t,e,n,r=[]){K(i,t),je(i,n);let s=Ot(i);for(let o of s.keys()){let c=s.get(o);r.push({oid:o,timestamp:e(),data:{op:"initialize",value:Dt(c)}})}return r}function Ni(i){let t={};for(let e of i)e.oid in t?t[e.oid].push(e):t[e.oid]=[e];return t}function jn(i){let t={};for(let e of i){let n=U(e.oid);n in t?t[n].push(e):t[n]=[e]}return t}function Ln(i){let t={};for(let e of i){let n=U(e.oid);n in t?t[n].push(e):t[n]=[e]}return t}function Ce(i){return Array.isArray(i)?!0:(console.error(`Cannot apply list patch; expected array, received ${JSON.stringify(i)}. This suggests your data is changing from a list to an object over time. (OID: ${ce(i)})`),!1)}function Ee(i,t,e){if(i==null&&t.op!=="initialize")return i;let n=i,r,s;function o(c){e&&te(c)&&e.push(c)}switch(t.op){case"set":o(n[t.name]),n[t.name]=t.value;break;case"remove":o(n[t.name]),delete n[t.name];break;case"list-push":Ce(i)&&i.push(t.value);break;case"list-delete":Ce(i)&&(o(i[t.index]),i.splice(t.index,t.count));break;case"list-move-by-index":Ce(i)&&(s=i.splice(t.from,1),i.splice(t.to,0,s[0]));break;case"list-remove":if(Ce(i))do{let c=t.value;t.only==="last"?ne(c)?r=Mi(i,f=>f.id===c.id):r=i.lastIndexOf(c):ne(c)?r=i.findIndex(f=>f.id===c.id):r=i.indexOf(c),r!==-1&&(o(i[r]),i.splice(r,1))}while(!t.only&&r!==-1);break;case"list-add":Ce(i)&&(i.some(f=>ne(f)&&ne(t.value)?f.id===t.value.id:f===t.value)||i.push(t.value));break;case"list-move-by-ref":Ce(i)&&(r=i.indexOf(t.value),s=i.splice(r,1),i.splice(t.index,0,s[0]));break;case"list-insert":if(Ce(i)){if(!t.value&&!t.values)throw new Error(`Cannot apply list insert patch; expected value or values, received ${JSON.stringify(t)}`);t.value?i.splice(t.index,0,t.value):i.splice(t.index,0,...t.values)}break;case"delete":Array.isArray(i)?i.forEach(o):z(i)&&Object.values(i||{}).forEach(o);return;case"initialize":return oe(t.value);default:throw new Error(`Unsupported patch operation: ${t.op}`)}return i}function Et(i,t,e=[]){if(Array.isArray(i))for(let n=0;n<i.length;n++){let r=i[n];i[n]=Vi(r,t,e),z(i[n])&&Et(i[n],t,e)}else if(!se(i)){if(z(i)){V(ce(i),`Object ${JSON.stringify(i)} must have an oid`);for(let n of Object.keys(i))i[n]=Vi(i[n],t,e),z(i[n])&&Et(i[n],t,e)}}return e}function Vi(i,t,e){if(ne(i)){e.push(i.id);let n=t.get(i.id);return V(!!n,`No value was found in object map for ${i.id}`),K(n,i.id)}else return i}function Nr(i){return i.type==="any"?!0:i.type==="map"?!1:i.nullable}function Nn(i){return i?i.type==="map"||i.type==="array"?!0:i.type==="file"?!1:i.type==="object"?!0:i.default!==void 0:!1}function Pt(i){return i.type==="map"||i.type==="object"||i.type==="array"||i.type==="file"||i.type==="any"?!1:i.indexed}function ve(i,t){for(let[e,n]of Object.entries(i.fields)){let r=Ui(n);(r!==void 0&&t[e]===void 0||!Nr(n)&&t[e]===null)&&(t[e]=r),t[e]&&Pe(t[e],n)}return t}function Pe(i,t){if(i==null)return i;if(t.type==="object")for(let[e,n]of Object.entries(t.properties)){if(i[e]===void 0){let r=Ui(n);r!==void 0&&(i[e]=r)}Pe(i[e],n)}else if(t.type==="array")for(let e of i)Pe(e,t.items);else if(t.type==="map")for(let[e,n]of Object.entries(i))e===De||e===Ie||Pe(n,t.values)}function Ui(i){if(i.type==="string"||i.type==="number"||i.type==="boolean"||i.type==="any"){if(i.default&&typeof i.default=="function")return i.default();if(i.default!==void 0)return JSON.parse(JSON.stringify(i.default))}if(i.type==="array")return[];if(i.type==="map")return{};if(i.type!=="any"&&i.nullable)return null}function Un(i,t){for(let[e,n]of Object.entries(t))e===De||e===Ie||(i.fields[e]?Vn(n,i.fields[e]):delete t[e]);return t}function Vn(i,t){if(z(i)&&t.type==="object")for(let[e,n]of Object.entries(i))t.properties[e]?Vn(n,t.properties[e]):delete i[e];else if(Array.isArray(i)&&t.type==="array")for(let e of i)Vn(e,t.items)}function Kn(i){return i.equals!==void 0}function zn(i){return i.gte!==void 0||i.lte!==void 0||i.gt!==void 0||i.lt!==void 0}function Ur(i){return!!i.match}function $n(i){return i.startsWith!==void 0}function Ki(i){return!zn(i)&&!Kn(i)&&!Ur(i)&&!$n(i)&&i.order}function zi({synthetics:i,indexes:t,...e}){let n={...i,...t};for(let[r,s]of Object.entries(e.fields))Pt(s)&&(n[r]={field:r});return{...e,indexes:n}}function $i(i){return i}var _t="\uFFFFFE",Kr="\0",zr="\uFFFFFF";function de(...i){let t=$r(i);return t.length===1?t[0]:t}function _e(...i){return i.join(_t)+`${zr}`}function Te(...i){return i.join(_t)+`${_t}${Kr}`}function $r(i){let t=[[]];for(let e of i)if(Array.isArray(e)){let n=[];for(let r of t)for(let s of e)n.push(r.concat(s));t=n}else for(let n of t)n.push(`${e}`);return Array.from(new Set(t.map(e=>e.join(_t))))}function qr(i){return!!i.field}function Wr(i,t){let e={};for(let[n,r]of Object.entries(i.indexes||{})){let s=r;qr(s)?e[n]=me(t[s.field]):e[n]=me(s.compute(t))}return e}function Hr(i,t){return Object.entries(i.compounds||{}).reduce((e,[n,r])=>(e[n]=de(...r.of.map(s=>t[s])),e),{})}function Qr(i,t){return Object.entries(i.fields).reduce((e,[n,r])=>(Pt(r)&&(e[n]=me(t[n])),e),{})}function Tt(i,t){return{[i.primaryKey]:t[i.primaryKey],...Qr(i,t),...Wr(i,t),...Hr(i,t),"@@@snapshot":t}}var Jr="null";function me(i){if(i===null)return Jr;if(typeof i=="string"||typeof i=="number")return i;if(typeof i=="boolean"||i===null)return`${i}`;if(i===void 0)return"undefined";if(Array.isArray(i))return i.map(me);throw new Error(`Unsupported index value: ${i}`)}var qi={version:0,collections:{}};function Rt(i,t,e){let n=typeof t=="function",r=n?qi:i,s=n?i:t,o=n?t:e,c=Object.keys(s.collections).filter(v=>r.collections[v]&&Ye(r.collections[v])!==Ye(s.collections[v])),f=Object.keys(r.collections).filter(v=>!s.collections[v]),h=Object.keys(s.collections).filter(v=>!r.collections[v]),x=new Set;for(let v of c){let C=r.collections[v].fields,S=s.collections[v].fields;Object.keys(S).some(O=>!C[O]?.default&&S[O]?.default)&&x.add(v),Object.keys(C).some(O=>!S[O])&&x.add(v)}let E={},g={};for(let v of[...c,...h]){let C=At(r.collections[v]),S=At(s.collections[v]),O=S.filter(y=>!C.find(I=>I.name===y.name)),A=C.filter(y=>!S.find(I=>I.name===y.name));O.length>0&&(E[v]=O,c.includes(v)&&x.add(v)),A.length>0&&(g[v]=A,c.includes(v)&&x.add(v))}let P=(v,C)=>ve(s.collections[v],C),b=v=>C=>{let S=s.collections[v];return ve(S,Un(S,C))};return{version:s.version,migrate:async v=>{let C=[];if(await o({migrate:async(S,O)=>{let A=b(S),y=async I=>{let d=await O(I);return K(d,le(I)),A(d)};await v.migrate(S,y),C.push(S),x.delete(S)},identity:S=>S,withDefaults:P,info:{changedCollections:c,addedCollections:h,removedCollections:f},queries:v.queries,mutations:v.mutations}),s.version>1){v.log("debug","auto-migrating collections with new defaults",x);for(let O of x)await v.migrate(O,b(O)),C.push(O);let S=c.filter(O=>!C.includes(O));S.length>0&&console.error(`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,S)}},removedCollections:f,addedIndexes:E,removedIndexes:g,allCollections:Object.keys(s.collections),changedCollections:c,addedCollections:h,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function At(i){return i?[...Object.keys(i.indexes||{}).map(t=>({name:t,multiEntry:["array","string[]","number[]","boolean[]"].includes(i.indexes[t].type),synthetic:!0,compound:!1})),...Object.keys(i.compounds||{}).map(t=>({name:t,multiEntry:i.compounds[t].of.some(e=>(i.fields[e]||i.indexes[e]).type==="array"),synthetic:!1,compound:!0}))]:[]}function qn(i,t){return Rt(t?i:{version:0,collections:{}},t||i,async({migrate:n,info:r})=>{if((t||i).version!==1)for(let s of r.changedCollections)await n(s,o=>o)})}function Wn(i,t,e){let n=typeof t=="function"||t===void 0,r=n?qi:i,s=n?i:t,o=n?t:e;V(r,"Invalid arguments to createMigration"),V(s,"Invalid arguments to createMigration");let{changedCollections:c,addedCollections:f,removedCollections:h,addedIndexes:x,removedIndexes:E,autoMigratedCollections:g,autoMigration:P}=Yr(r,s);return{version:s.version,migrate:async b=>{let v=[];if(await o?.({migrate:async(S,O)=>{let A=P(S),y=async I=>{let d=await O(I);return K(d,le(I)),A(d)};await b.migrate(S,y),v.push(S),g.delete(S)},info:{changedCollections:c,addedCollections:f,removedCollections:h},queries:b.queries,mutations:b.mutations}),s.version>1){b.log("debug","auto-migrating collections with new defaults",g);for(let O of g)await b.migrate(O,P(O)),v.push(O);let S=c.filter(O=>!v.includes(O));S.length>0&&console.error(`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,S)}},removedCollections:h,addedIndexes:x,removedIndexes:E,allCollections:Object.keys(s.collections),changedCollections:c,addedCollections:f,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function Yr(i,t){let e=Object.keys(t.collections).filter(x=>i.collections[x]&&Ye(i.collections[x])!==Ye(t.collections[x])),n=Object.keys(i.collections).filter(x=>!t.collections[x]),r=Object.keys(t.collections).filter(x=>!i.collections[x]),s=new Set;for(let x of e){let E=i.collections[x].fields,g=t.collections[x].fields;Object.keys(g).some(P=>!Nn(E[P])&&Nn(g[P]))&&s.add(x),Object.keys(E).some(P=>!g[P])&&s.add(x)}let o={},c={};for(let x of[...e,...r]){let E=At(i.collections[x]),g=At(t.collections[x]),P=g.filter(v=>!E.find(C=>C.name===v.name)),b=E.filter(v=>!g.find(C=>C.name===v.name));P.length>0&&(o[x]=P,e.includes(x)&&s.add(x)),b.length>0&&(c[x]=b,e.includes(x)&&s.add(x))}return{changedCollections:e,addedCollections:r,removedCollections:n,addedIndexes:o,removedIndexes:c,autoMigratedCollections:s,withDefaults:(x,E)=>ve(t.collections[x],E),autoMigration:x=>E=>{let g=t.collections[x];return ve(g,Un(g,E))}}}var kt=class{constructor(t,e){this.getNow=t;this.createSubId=e;this.createDiff=(t,e,n={})=>Ze(t,e,this.getNow,this.createSubId,[],n);this.createInitialize=(t,e)=>xe(t,e,this.getNow,this.createSubId);this.createSet=(t,e,n)=>{if(!z(n)||te(n))return[{oid:t,timestamp:this.getNow(),data:{op:"set",name:e,value:n}}];{let r=ge(t,this.createSubId);return[...xe(n,r,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"set",value:we(r),name:e}}]}};this.createRemove=(t,e)=>[{oid:t,timestamp:this.getNow(),data:{op:"remove",name:e}}];this.createListPush=(t,e)=>{if(z(e)){let n=ge(t,this.createSubId);return[...xe(e,n,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:we(n)}}]}else return[{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:e}}]};this.createListAdd=(t,e)=>z(e)?[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:we(e)}}]:[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:e}}];this.createListInsert=(t,e,n)=>{if(z(n)){let r=ge(t,this.createSubId);return[...xe(n,r,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:we(r),index:e}}]}else return[{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:n,index:e}}]};this.createListRemove=(t,e,n)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-remove",value:e,only:n}}];this.createListDelete=(t,e,n=1)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-delete",index:e,count:n}}];this.createListMoveByRef=(t,e,n)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-ref",value:e,index:n}}];this.createListMoveByIndex=(t,e,n)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-index",from:e,to:n}}];this.createDelete=t=>[{oid:t,timestamp:this.getNow(),data:{op:"delete"}}];this.createDeleteAll=t=>t.map(e=>({oid:e,timestamp:this.getNow(),data:{op:"delete"}}))}};var N=class{constructor(t){this._onAllUnsubscribed=t;this.subscribers={};this.counts={};this._disabled=!1;this.subscriberCount=t=>this.counts[t]??0;this.totalSubscriberCount=()=>Object.values(this.counts).reduce((t,e)=>t+e,0);this.subscribe=(t,e)=>{let n=St(),r=this.subscribers[t];return r||(r=this.subscribers[t]={}),r[n]=e,this.counts[t]=(this.counts[t]||0)+1,()=>{this.subscribers[t]&&(delete this.subscribers[t][n],this.counts[t]--,this.counts[t]===0&&(delete this.subscribers[t],delete this.counts[t],this._onAllUnsubscribed&&this._onAllUnsubscribed(t)))}};this.emit=(t,...e)=>{this._disabled||this.subscribers[t]&&Object.values(this.subscribers[t]).forEach(n=>n(...e))};this.dispose=()=>{let t=Object.keys(this.subscribers);this.subscribers={},this.counts={},t.forEach(e=>{this._onAllUnsubscribed&&this._onAllUnsubscribed(e)})};this.disable=()=>{this._disabled=!0}}get disabled(){return this._disabled}};function Wi(i,t,e,n){if(t===void 0)return[{oid:i,timestamp:n(),data:{op:"delete"}}];let r=oe(t),s=[];for(let o of e){let c=Gr(i,r,o,n);s.unshift(...c),Ee(r,o.data)}return s}function Gr(i,t,e,n){let r=e.data;switch(r.op){case"set":case"remove":return[{oid:i,timestamp:n(),data:{op:"set",name:r.name,value:t[r.name]}}];case"list-insert":return[{oid:i,timestamp:n(),data:{op:"list-delete",index:r.index,count:1}}];case"list-delete":return[{oid:i,timestamp:n(),data:{op:"list-insert",index:r.index,values:t.slice(r.index,r.count)}}];case"list-move-by-ref":return[{oid:i,timestamp:n(),data:{op:"list-move-by-ref",value:r.value,index:t.indexOf(r.value)}}];case"list-move-by-index":return[{oid:i,timestamp:n(),data:{op:"list-move-by-index",from:r.to,to:r.from}}];case"delete":return[{oid:i,timestamp:n(),data:{op:"initialize",value:t}}];case"list-push":return[{oid:i,timestamp:n(),data:{op:"list-remove",value:r.value,only:"last"}}];case"list-remove":if(r.only==="last"){let s=t.lastIndexOf(r.value);return[{oid:i,timestamp:n(),data:{op:"list-insert",index:s,values:[r.value]}}]}else if(r.only==="first"){let s=t.indexOf(r.value);return[{oid:i,timestamp:n(),data:{op:"list-insert",index:s,values:[r.value]}}]}else{let s=[],o=t.indexOf(r.value);for(;o!==-1;)s.push(o),o=t.indexOf(r.value,o+1);return s.map(c=>({oid:i,timestamp:n(),data:{op:"list-insert",index:c,value:r.value}}))}case"list-add":return[{oid:i,timestamp:n(),data:{op:"list-remove",value:r.value,only:"last"}}];case"initialize":return[{oid:i,timestamp:n(),data:{op:"delete"}}];default:throw new Error(`Cannot undo operation type: ${r.op}`)}}var Le=class{constructor(t){this.flusher=t;this.batches=new Map;this.flush=t=>{let e=this.batches.get(t);if(e)return e.flush()};this.discard=t=>{let e=this.batches.get(t);e&&(e.discard(),this.batches.delete(t))};this.flushAll=()=>[...this.batches.values()].map(t=>t.flush())}add({key:t,userData:e,items:n,max:r,timeout:s}){let o=this.batches.get(t);return o||(o=new Hn({max:r||null,startedAt:Date.now(),userData:e,timeout:s||null,flusher:this.flusher,key:t}),this.batches.set(t,o)),o.update({items:n,max:r,timeout:s,userData:e}),o}},Hn=class{constructor({max:t,startedAt:e,timeout:n,userData:r,flusher:s,key:o}){this.items=[];this.update=({items:t,max:e,timeout:n,userData:r})=>{this.items.push(...t),e!==void 0&&(this.max=e),n!==void 0&&(this.timeout=n),r&&(this.userData=r);let s=this.items.length!==0&&this.timeout!==null&&!this.flushTimeout;this.max!==null&&this.items.length>=this.max?this.flush():s&&this.timeout!==null&&(this.flushTimeout=setTimeout(this.flush,this.timeout))};this.flush=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0;let t=this.items;return this.items=[],this.flusher(t,this.key,this.userData)};this.discard=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0,this.items=[]};this.max=t,this.startedAt=e,this.timeout=n,this.userData=r,this.flusher=s,this.key=o}};function W(i){return new Promise((t,e)=>{i.onsuccess=()=>{t(i.result)},i.onerror=()=>{e(i.error)}})}function et(i,t){return new Promise((e,n)=>{let r=i.transaction([t],"readonly"),o=r.objectStore(t).openCursor(),c=0,f=0;o.onsuccess=function(h){let x=o.result;x&&(c++,f=f+ki(x.value),x.continue())},o.onerror=function(h){n(h)},r.oncomplete=function(h){e({count:c,size:f})},r.onabort=function(h){n(h)},r.onerror=function(h){n(h)}})}function Hi(i,t){let e=i.transaction(t,"readonly"),n=t.map(r=>{let s=e.objectStore(r);return W(s.getAll())});return Promise.all(n)}async function Ae(i){i.close(),await new Promise((t,e)=>{t()})}async function Mt(i,t=window.indexedDB){let e=t.deleteDatabase([i,"meta"].join("_")),n=t.deleteDatabase([i,"collections"].join("_"));await Promise.all([new Promise((r,s)=>{e.onsuccess=r,e.onerror=s}),new Promise((r,s)=>{n.onsuccess=r,n.onerror=s})]),window.location.reload()}function Qi(i,t=window.indexedDB){return W(t.deleteDatabase(i))}async function Ji(i=window.indexedDB){return i.databases()}var pe=class{constructor(t){this.db=t;this.createTransaction=(t,e)=>this.db.transaction(t,e);this.run=async(t,e,n="readonly",r)=>{let o=(r||this.db.transaction(t,n)).objectStore(t),c=e(o);return W(c)};this.runAll=async(t,e,n="readonly",r)=>{let o=(r||this.db.transaction(t,n)).objectStore(t),c=e(o);return Promise.all(c.map(W))};this.iterate=async(t,e,n,r="readonly",s)=>{let c=(s||this.db.transaction(t,r)).objectStore(t),f=e(c);return Array.isArray(f)?Promise.all(f.map(h=>new Promise((x,E)=>{h.onsuccess=()=>{let g=h.result;g?(n(g.value,c),g.continue()):x()},h.onerror=E}))).then(()=>{}):new Promise((h,x)=>{f.onsuccess=()=>{let E=f.result;E?(n(E.value,c),E.continue()):h()},f.onerror=x})};this.clear=t=>this.run(t,e=>e.clear(),"readwrite")}};var Bt=class extends pe{constructor(){super(...arguments);this.getAckInfo=async()=>{let e=await this.run("info",n=>n.get("ack"));return e||{globalAckTimestamp:null,type:"ack"}};this.setGlobalAck=async e=>{await this.run("info",n=>n.put({type:"ack",globalAckTimestamp:e}),"readwrite")}}};var Ft=class extends pe{constructor(e){super(e);this.getAllForDocument=async(e,{mode:n="readonly",transaction:r}={})=>{let s=[];return await this.iterateOverAllForDocument(e,o=>{s.push(o)},{mode:n,transaction:r}),s};this.iterateOverAllForDocument=async(e,n,{mode:r="readonly",transaction:s}={})=>this.iterate("baselines",o=>{let c=U(e),[f,h]=kn(e),[x,E]=Mn(e);return[o.openCursor(IDBKeyRange.only(c)),o.openCursor(IDBKeyRange.bound(f,h,!1,!1)),o.openCursor(IDBKeyRange.bound(x,E,!1,!1))]},n,r,s);this.getAllForMultipleDocuments=async(e,{mode:n="readonly"}={})=>(await this.runAll("baselines",s=>e.flatMap(o=>{let c=U(o),[f,h]=kn(o),[x,E]=Mn(o);return[s.get(c),s.getAll(IDBKeyRange.bound(f,h,!1,!1)),s.getAll(IDBKeyRange.bound(x,E,!1,!1))]}),n)).flat();this.getAllSince=async(e,{mode:n="readonly"}={})=>this.run("baselines",r=>{let s=e?IDBKeyRange.lowerBound(e,!0):void 0;return r.index("timestamp").getAll(s)},n);this.get=async(e,{transaction:n,mode:r="readonly"}={})=>this.run("baselines",s=>s.get(e),r,n);this.set=async(e,{transaction:n}={})=>{await this.run("baselines",r=>r.put(e),"readwrite",n)};this.setAll=async(e,{transaction:n}={})=>{await this.runAll("baselines",r=>e.map(s=>r.put(s)),"readwrite",n)};this.reset=()=>this.clear("baselines");this.delete=async(e,{transaction:n})=>{await this.run("baselines",r=>r.delete(e),"readwrite",n)}}};var Yi=dt(ft(),1);var jt=class extends pe{constructor(){super(...arguments);this.get=async({transaction:e}={})=>{if(this.cached)return this.cached;let n=await this.run("info",r=>r.get("localReplicaInfo"),void 0,e);if(!n){let s={type:"localReplicaInfo",id:(0,Yi.default)(),ackedLogicalTime:null,lastSyncedLogicalTime:null};return await this.run("info",o=>o.put(s),"readwrite"),this.cached=s,s}return this.cached=n,n};this.update=async(e,{transaction:n}={})=>{let r=await this.get({transaction:n});Object.assign(r,e),await this.run("info",s=>s.put(r),"readwrite"),this.cached=r};this.reset=async()=>{let e=await this.get();e.ackedLogicalTime=null,e.lastSyncedLogicalTime=null,await this.run("info",n=>n.put(e),"readwrite")}}};var Lt=class{constructor(t){this.meta=t;this.createOperation=async t=>{let e=await this.meta.localReplica.get();return{type:"op",timestamp:this.meta.now,replicaId:e.id,operations:t.operations.map(n=>({data:n.data,oid:n.oid,timestamp:n.timestamp}))}};this.createMigrationOperation=async({targetVersion:t,...e})=>{let n=await this.meta.localReplica.get();return{type:"op",operations:e.operations.map(r=>({...r,timestamp:this.meta.time.zero(t)})),timestamp:this.meta.time.zero(t),replicaId:n.id}};this.createSyncStep1=async t=>{let e=await this.meta.localReplica.get(),n=t===null?null:e.lastSyncedLogicalTime,r=[],s=new Set;n?await this.meta.operations.iterateOverAllLocalOperations(c=>{r.push({data:c.data,oid:c.oid,timestamp:c.timestamp}),s.add(U(c.oid))},{after:n,mode:"readwrite"}):await this.meta.operations.iterateOverAllOperations(c=>{r.push({data:c.data,oid:c.oid,timestamp:c.timestamp}),s.add(U(c.oid))},{mode:"readwrite"});let o=[];return n||(o=await this.meta.baselines.getAllSince("")),{type:"sync",schemaVersion:this.meta.schema.currentVersion,timestamp:this.meta.now,replicaId:e.id,resyncAll:!e.lastSyncedLogicalTime,operations:r,baselines:o,since:n}};this.createPresenceUpdate=async t=>{let e=await this.meta.localReplica.get();return{type:"presence-update",presence:t,replicaId:e.id}};this.createHeartbeat=async()=>{let t=await this.meta.localReplica.get();return{type:"heartbeat",timestamp:this.meta.now,replicaId:t.id}};this.createAck=async t=>{let e=await this.meta.localReplica.get();return{type:"ack",timestamp:this.meta.now,replicaId:e.id,nonce:t}}}};var Vt=class extends pe{constructor(){super(...arguments);this.iterateOverAllOperationsForDocument=async(e,n,{to:r,from:s,after:o,mode:c="readonly",transaction:f}={})=>{let x=(f||this.db.transaction("operations",c)).objectStore("operations"),E=x.index("d_t"),g=s||o,P=g?de(e,g):Te(e),b=r?de(e,r):_e(e),v=IDBKeyRange.bound(P,b,!!o,!1),C=E.openCursor(v,"next");return new Promise((S,O)=>{let A;C.onsuccess=y=>{let I=C.result;if(I){let d=I.value;V(d.oid.startsWith(e)),V(A===void 0||A<=d.timestamp,`expected ${A} <= ${d.timestamp}`),n(d,x),A=d.timestamp,I.continue()}else S()},C.onerror=y=>{O(y)}})};this.iterateOverAllOperationsForEntity=async(e,n,{after:r,to:s,mode:o,transaction:c})=>{let h=(c||this.db.transaction("operations",o)).objectStore("operations"),x=r?de(e,r):Te(e),E=s?de(e,s):_e(e),g=IDBKeyRange.bound(x,E,!!r,!1),P=h.openCursor(g,"next");return new Promise((b,v)=>{let C;P.onsuccess=S=>{let O=P.result;if(O){let A=O.value;V(A.oid.startsWith(e)),V(C===void 0||C<=A.timestamp,`expected ${C} <= ${A.timestamp}`),n(A,h),C=A.timestamp,O.continue()}else b()},P.onerror=S=>{v(S)}})};this.iterateOverAllLocalOperations=async(e,{before:n,after:r,mode:s="readonly",transaction:o})=>{let f=(o||this.db.transaction("operations",s)).objectStore("operations"),h=f.index("l_t"),x=r?de(!0,r):Te(!0),E=n?de(!0,n):_e(!0),g=IDBKeyRange.bound(x,E,!!r,!0),P=h.openCursor(g,"next");return new Promise((b,v)=>{let C;P.onsuccess=S=>{let O=P.result;if(O){let A=O.value;V(C===void 0||C<=A.timestamp,`expected ${C} <= ${A.timestamp}`),e(A,f),C=A.timestamp,O.continue()}else b()},P.onerror=S=>{v(S)}})};this.iterateOverAllOperations=async(e,{before:n,transaction:r,mode:s,from:o})=>{await this.iterate("operations",c=>{let f=o?Te(o):void 0,h=n?_e(n):void 0,x=f&&h?IDBKeyRange.bound(f,h,!1,!0):f?IDBKeyRange.lowerBound(f,!1):h?IDBKeyRange.upperBound(h,!0):void 0;return c.index("timestamp").openCursor(x,"next")},e,s,r)};this.addOperations=async(e,{transaction:n}={})=>this.insert(e.map(this.addCompoundIndexes),{transaction:n});this.addCompoundIndexes=e=>({...e,oid_timestamp:de(e.oid,e.timestamp),l_t:de(e.isLocal,e.timestamp),d_t:de(U(e.oid),e.timestamp)});this.insert=async(e,{transaction:n})=>{let r=new Set;return await this.runAll("operations",s=>e.map(o=>(r.add(U(o.oid)),s.put(o))),"readwrite",n),Array.from(r)};this.reset=()=>this.clear("operations")}};var Nt=class{constructor(t,e){this.db=t;this.currentVersion=e;this.cached=null;this.get=async()=>{if(this.cached)return this.cached;let r=this.db.transaction("info","readonly").objectStore("info").get("schema"),s=await W(r);return s?(this.cached=JSON.parse(s.schema),this.cached):null};this.set=async t=>{let s=this.db.transaction("info","readwrite").objectStore("info").put({type:"schema",schema:JSON.stringify(t)});this.cached=t,await W(s)}}};var tt=class extends N{constructor({disableRebasing:e,context:n}){super();this.time=new mt;this.disableRebasing=!1;this._closing=!1;this.setContext=e=>{this.context=e};this.close=()=>{this._closing=!0};this.createTransaction=e=>this.db.transaction(e,"readwrite");this.getAllDocumentRelatedOids=async e=>{let n=new Set,r=U(e);V(r===e,"Must be root document OID"),n.add(r);let s=this.db.transaction(["baselines","operations"],"readwrite");return await Promise.all([this.baselines.iterateOverAllForDocument(r,o=>{n.add(o.oid)},{transaction:s}),this.operations.iterateOverAllOperationsForDocument(r,o=>{n.add(o.oid)},{transaction:s})]),Array.from(n)};this.getDocumentSnapshot=async(e,n={})=>{let r=U(e);V(r===e,"Must be root document OID");let s=this.db.transaction(["baselines","operations"],"readwrite"),o=await this.baselines.getAllForDocument(r,{transaction:s}),c=new Map;for(let h of o)h.snapshot&&K(h.snapshot,h.oid),c.set(h.oid,h.snapshot);await this.operations.iterateOverAllOperationsForDocument(r,h=>{let x=c.get(h.oid)||void 0,E=Ee(x,h.data);E&&K(E,h.oid),c.set(h.oid,E)},{transaction:s,to:n.to||this.now});let f=c.get(r);return f&&Et(f,c),f};this.ack=async e=>{let n=await this.localReplica.get();e>this.now||(this.emit("message",{type:"ack",replicaId:n.id,timestamp:e}),!this._closing&&(!n.ackedLogicalTime||e>n.ackedLogicalTime)&&this.localReplica.update({ackedLogicalTime:e}))};this.insertLocalOperation=async e=>{if(e.length===0)return;this.log(`Inserting ${e.length} local operations`);for(let r of e)r.isLocal=!0;await this.operations.addOperations(e);let n=await this.messageCreator.createOperation({operations:e});this.emit("message",n),this.tryAutonomousRebase()};this.insertRemoteOperations=async e=>{if(e.length===0)return[];this.log(`Inserting ${e.length} remote operations`);let n=await this.operations.addOperations(e.map(r=>({...r,isLocal:!1})));return this.ack(e[e.length-1].timestamp),n};this.insertRemoteBaselines=async e=>{if(e.length===0)return[];this.log(`Inserting ${e.length} remote baselines`),await this.baselines.setAll(e);let n=new Set;return e.forEach(r=>{n.add(U(r.oid))}),Array.from(n)};this.updateLastSynced=async e=>{if(!this._closing)return this.localReplica.update({lastSyncedLogicalTime:e})};this.lastSyncedTimestamp=async()=>(await this.localReplica.get()).lastSyncedLogicalTime;this.tryAutonomousRebase=async()=>{this.disableRebasing||(await this.localReplica.get()).lastSyncedLogicalTime||await this.runRebase(this.now)};this.runRebase=async e=>{if(this._closing)return;let n,r=new Set,s=this.db.transaction(["baselines","operations"],"readwrite"),o=0;if(await this.operations.iterateOverAllOperations(f=>{r.add(f.oid),n=f.timestamp,o++},{before:e,transaction:s}),!r.size){this.log("Cannot rebase, no operations prior to",e);return}if(this._closing)return;let c=[];for(let f of r)c.push(await this.rebase(f,n||e,s));this.emit("rebase",c)};this.rebase=async(e,n,r)=>{let s=(await this.localReplica.get()).id;this.log("[",s,"]","Rebasing",e,"up to",n);let o=r||this.db.transaction(["operations","baselines"],"readwrite"),c=await this.baselines.get(e,{transaction:o}),f=c?.snapshot||void 0,h=0,x=[];await this.operations.iterateOverAllOperationsForEntity(e,(g,P)=>{(!c||g.timestamp>c.timestamp)&&(f=Ee(f,g.data,x)),h++,P.delete(g.oid_timestamp)},{to:n,transaction:o}),f&&K(f,e);let E={oid:e,snapshot:f,timestamp:n};if(E.snapshot?await this.baselines.set(E,{transaction:o}):await this.baselines.delete(e,{transaction:o}),this.log("successfully rebased",e,"up to",n,":",f,"and deleted",h,"operations"),x.length){let g=x.filter(se);g.length&&this.emit("filesDeleted",g)}return E};this.reset=async()=>{await this.operations.reset(),await this.baselines.reset(),await this.localReplica.reset()};this.updateSchema=async(e,n)=>{let r=await this.schema.get();if(r&&n===r.version&&r.version===e.version&&JSON.stringify(r)!==JSON.stringify(e))throw console.error(`Schema mismatch for version ${e.version}
7
7
  ${JSON.stringify(r)}
8
- ${JSON.stringify(e)}`),new Error("Schema has changed without a version change! Any changes to your schema must be accompanied by a change in schema version and a migration routine.");await this.schema.set(e)};this.setGlobalAck=async e=>{this._closing||(await this.ackInfo.setGlobalAck(e),this.disableRebasing||await this.runRebase(e))};this.export=async()=>{let e=this.db,[n,r]=await Wi(e,["baselines","operations"]),s=await this.localReplica.get(),a=await this.schema.get();if(!a)throw new Error("Cannot export Client data before initializing");return{operations:r,baselines:n,localReplica:s,schema:a}};this.resetFrom=async e=>{let r=this.db.transaction(["baselines","operations","info"],"readwrite");await W(r.objectStore("baselines").clear()),await W(r.objectStore("operations").clear()),await W(r.objectStore("info").clear()),await this.localReplica.update({ackedLogicalTime:e.localReplica.ackedLogicalTime,lastSyncedLogicalTime:e.localReplica.lastSyncedLogicalTime},{transaction:r})};this.stats=async()=>{let e=this.db,n=await et(e,"operations"),r=await et(e,"baselines");return{operationsSize:n,baselinesSize:r}};this.context=n,this.schema=new Nt(n.metaDb,n.schema.version),this.operations=new Vt(this.db),this.baselines=new Ft(this.db),this.localReplica=new jt(this.db),this.ackInfo=new Bt(this.db),this.messageCreator=new Lt(this),this.patchCreator=new Rt(()=>this.now),e&&(this.disableRebasing=e)}get db(){return this.context.metaDb}get log(){return this.context.log}get now(){return this.time.now(this.schema.currentVersion)}};var Hr=[Qr,Jr,Yr,Gr];function Ut({indexedDB:i=window.indexedDB,namespace:t,log:e}){return new Promise((n,r)=>{let s=i.open(`${t}_meta`,4),a=!1;s.onupgradeneeded=async l=>{let p=s.result,h=s.transaction,v=Hr.slice(l.oldVersion);for(let E of v)await E(p,h);l.oldVersion||(a=!0)},s.onerror=()=>{console.error("Error opening database",s.error),r(s.error)},s.onsuccess=()=>{n({db:s.result,wasInitialized:a})}})}async function Yi({wipNamespace:i,namespace:t,indexedDB:e,log:n}){let r=await Ut({namespace:i,indexedDB:e,log:n});if(!r.wasInitialized)return r;n?.("debug","Beginning copy of production metadata database to WIP");let{db:s}=await Ut({namespace:t,indexedDB:e,log:n}),a=s.transaction(["baselines","operations","info"],"readonly"),[l,p,h]=await Promise.all([W(a.objectStore("baselines").getAll()),W(a.objectStore("operations").getAll()),W(a.objectStore("info").getAll())]),v=r.db.transaction(["baselines","operations","info"],"readwrite"),E=v.objectStore("baselines"),b=v.objectStore("operations"),P=v.objectStore("info");for(let g of l)E.put(g);for(let g of p)b.put(g);for(let g of h)P.put(g);return await new Promise((g,O)=>{v.oncomplete=()=>{g()},v.onerror=C=>{O(C)},v.onabort=C=>{O(C)}}),await Ae(s),n?.("debug","Finished copy of production metadata database to WIP. Copied:",l.length,"baselines,",p.length,"operations"),r}async function Qr(i,t){let e=i.createObjectStore("baselines",{keyPath:"oid"}),n=i.createObjectStore("operations",{keyPath:"oid_timestamp"}),r=i.createObjectStore("info",{keyPath:"type"});e.createIndex("timestamp","timestamp"),n.createIndex("isLocal_timestamp","isLocal_timestamp"),n.createIndex("documentOid_timestamp","documentOid_timestamp")}async function Jr(i,t){let e=t.objectStore("operations");await new Promise((n,r)=>{let s=e.openCursor();s.onsuccess=()=>{let a=s.result;if(a){let{isLocal_timestamp:l,documentOid_timestamp:p,...h}=a.value;a.update({...h,l_t:l,d_t:p}),a.continue()}else n()},s.onerror=a=>{r(s.error)}}),e.deleteIndex("isLocal_timestamp"),e.deleteIndex("documentOid_timestamp"),e.createIndex("l_t","l_t",{unique:!1}),e.createIndex("o_t","o_t",{unique:!1}),e.createIndex("d_t","d_t",{unique:!1})}async function Yr(i,t){t.objectStore("operations").createIndex("timestamp","timestamp")}async function Gr(i,t){let e=i.createObjectStore("files",{keyPath:"id"});e.createIndex("remote","remote"),e.createIndex("deletedAt","deletedAt")}var Xr=i=>IDBKeyRange.only(me(i.equals)),Zr=i=>{},es=i=>{let t=i.gte||i.gt,e=i.lte||i.lt;return t===e?IDBKeyRange.only(me(t)):t?e?IDBKeyRange.bound(me(t),me(e),!!i.gt,!!i.lt):IDBKeyRange.lowerBound(me(t),!!i.gt):IDBKeyRange.upperBound(me(e),!!i.lt)},ts=(i,t,e)=>{let n=i.collections[t].compounds[e.where];V(n,`Index ${e.where} does not exist on collection ${t}`);let r=Object.keys(e.match).sort((p,h)=>n.of.indexOf(p)-n.of.indexOf(h));for(let p of r)if(n.of.indexOf(p)!==r.indexOf(p))throw new Error(`Compound index ${e.where} does not have ${p} at the start of its order`);let s=r.map(p=>e.match[p]);if(r.length===n.of.length)return IDBKeyRange.only(de(...s));let a=Te(...s),l=_e(...s);return IDBKeyRange.bound(a,l)};function ns(i){let t=i.startsWith,e=i.startsWith+"\uFFFF";return IDBKeyRange.bound(t,e)}function Kt(i,t,e){if(e)return Kn(e)?es(e):Un(e)?Xr(e):Ui(e)?Zr(e):zn(e)?ns(e):ts(i,t,e)}function Hn(i,t,e){return i.transaction(t,e?"readwrite":"readonly").objectStore(t)}async function zt({collection:i,index:t,context:e}){let n=Hn(e.documentDb,i),r=t?n.index(t.where):n,s=Kt(e.schema,i,t),a=t?.order==="desc"?"prev":"next",l=r.openCursor(s,a);return await new Promise((h,v)=>{l.onsuccess=()=>{let E=l.result;h(E?Z(i,E.primaryKey.toString()):null)},l.onerror=()=>{l.error?.name==="InvalidStateError"?(e.log("error","findOne query failed with InvalidStateError",l.error),h(null)):v(l.error)}})}async function $t({collection:i,index:t,context:e}){let n=Hn(e.documentDb,i),r=t?n.index(t.where):n,s=Kt(e.schema,i,t),a=t?.order==="desc"?"prev":"next",l=r.openCursor(s,a);return await new Promise((h,v)=>{let E=new Set;l.onsuccess=()=>{let b=l.result;b?(E.add(Z(i,b.primaryKey.toString())),b.continue()):h(Array.from(E))},l.onerror=()=>{l.error?.name==="InvalidStateError"?(e.log("error","findAll query failed with InvalidStateError",l.error),h([])):v(l.error)}})}async function nt({collection:i,index:t,context:e,limit:n,offset:r}){let s=Hn(e.documentDb,i),a=t?s.index(t.where):s,l=Kt(e.schema,i,t),p=t?.order==="desc"?"prev":"next",h=a.openCursor(l,p),v=!r,E=!1,b=0;return{result:await new Promise((g,O)=>{let C=new Set;h.onsuccess=()=>{b++;let x=h.result;x?r&&!v?(x.advance(r),v=!0):(n&&C.size<n&&C.add(Z(i,x.primaryKey.toString())),n&&b>n?(E=!0,g(Array.from(C))):x.continue()):g(Array.from(C))},h.onerror=()=>{h.error?.name==="InvalidStateError"?(e.log("error","find query failed with InvalidStateError",h.error),g([])):O(h.error)}}),hasNextPage:E}}async function Qn(i,t,e,n){function r(l,p){let h,v,E=i.open([t,"collections"].join("_"),e);E.onupgradeneeded=async b=>{h=b.oldVersion;let P=E.transaction;v=E.result,P.abort()},E.onsuccess=b=>{l([E.result.version,E.result])},E.onblocked=b=>{n?.("Database blocked, waiting...")},E.onerror=b=>{l([h,v])}}let[s,a]=await new Promise(r);return await qt(a),s}async function qt(i){i.close(),await new Promise(t=>t())}async function Gi(i,t,e,n,r){function s(a,l){let p=i.open([t,"collections"].join("_"),e),h=!1;p.onupgradeneeded=v=>{let E=p.transaction;n(E,p.result,v),h=!0},p.onsuccess=v=>{p.result.close(),h?a():l(new Error("Database was not upgraded when a version change was expected"))},p.onerror=v=>{l(p.error||new Error("Unknown error"))},p.onblocked=v=>{r?.("Database upgrade blocked, waiting...")}}return new Promise(s)}async function Xi(i,t){typeof navigator<"u"&&navigator.locks?await navigator.locks.request(`verdant_migration_${i}`,t):await t()}async function ke(i,t,e,n){n?.("debug","Opening database",t,"at version",e);let r=await new Promise((s,a)=>{let l=i.open([t,"collections"].join("_"),e);l.onupgradeneeded=async p=>{l.transaction.abort(),n?.("error","Database upgrade needed, but not expected","Expected",e,"Got",l.result.version),a(l.error||new Error(`Migration error: database version changed unexpectedly when reading current data. Expected ${e}, got ${l.result.version}`))},l.onsuccess=p=>{s(l.result)},l.onblocked=p=>{a(new Error("Migration error: database blocked"))},l.onerror=p=>{a(new Error("Migration error: database error"))}});return r.addEventListener("versionchange",s=>{r.close()}),r}var Ve=class extends Error{constructor(e){super(e);this.message=e;this.name="MigrationPathError"}};function Wt({currentVersion:i,targetVersion:t,migrations:e}){let n=Zi({currentVersion:i,targetVersion:t,migrations:e});if(!n)throw new Ve(`No migration path found from ${i} to ${t}! This is a bug. If you're seeing this, contact the developer and provide them with the full contents of this message.`);return n}function Zi({currentVersion:i,targetVersion:t,migrations:e}){if(i===t)return[];let n=e.filter(r=>r.oldSchema.version===i).sort((r,s)=>s.newSchema.version-r.newSchema.version);for(;n.length>0;){let r=n.shift();if(r.newSchema.version>t)return null;if(r.newSchema.version===t)return[r];let s=Zi({currentVersion:r.newSchema.version,targetVersion:t,migrations:e});if(s)return[r,...s]}return null}var Yn=typeof window<"u"?window.indexedDB:void 0;async function it({version:i,indexedDB:t=Yn,migrations:e,meta:n,context:r}){if(r.schema.wip)throw new Error("Cannot open a production client with a WIP schema!");let s=await Qn(t,r.namespace,i,r.log);r.log("debug","Current database version:",s,"target version:",i);let a=Wt({currentVersion:s,targetVersion:i,migrations:e});return a.length>0&&(r.log("debug","Migrations to run:",a.map(l=>l.version)),await Jn({context:r,toRun:a,meta:n,indexedDB:t})),ke(t,r.namespace,i,r.log)}async function er({version:i,indexedDB:t=Yn,migrations:e,meta:n,context:r,wipNamespace:s}){r.log("debug","Opening WIP database",s);let a=await Qn(t,s,i,r.log);if(a===i)r.log("info","WIP schema is up-to-date; not refreshing database");else{r.log("info","WIP schema is out-of-date; refreshing database");let l=Wt({currentVersion:a,targetVersion:i-1,migrations:e});if(l.length>0){await Jn({context:r,toRun:l,meta:n,indexedDB:t,namespace:s});let h=await ke(t,r.namespace,i-1,r.log),v=await ke(t,s,i-1,r.log),E=new Array;for(let x=0;x<h.objectStoreNames.length;x++)E.push(h.objectStoreNames[x]);let b=h.transaction(E,"readonly"),P=E.map(x=>b.objectStore(x)),g=await Promise.all(P.map(x=>W(x.getAll()))),O=v.transaction(E,"readwrite"),C=E.map(x=>O.objectStore(x));for(let x=0;x<C.length;x++)await Promise.all(g[x].map(S=>W(C[x].put(S))))}let p=Wt({currentVersion:i-1,targetVersion:i,migrations:e});p.length>0&&await Jn({context:r,toRun:p,meta:n,indexedDB:t,namespace:s})}return ke(t,s,i,r.log)}async function Jn({context:i,toRun:t,meta:e,indexedDB:n=Yn,namespace:r=i.namespace}){await Xi(r,async()=>{for(let s of t){let a;if(s.oldSchema.version===0)a=ss({meta:e,migration:s,context:i}),await s.migrate(a);else{let h=await ke(n,r,s.oldSchema.version,i.log);a=rs({meta:e,migration:s,context:{...i,documentDb:h}});try{await s.migrate(a),await Promise.all(a.awaitables)}catch(v){throw i.log("critical",`Migration failed (${s.oldSchema.version} -> ${s.newSchema.version})`,v),v}await qt(h)}i.log("debug","Upgrading database",r,"to version",s.newSchema.version),await Gi(n,r,s.newSchema.version,(h,v)=>{for(let E of s.addedCollections)v.createObjectStore(E,{keyPath:s.newSchema.collections[E].primaryKey,autoIncrement:!1});for(let E of s.allCollections){let b=h.objectStore(E);for(let P of s.addedIndexes[E]||[])b.createIndex(P.name,P.name,{multiEntry:P.multiEntry});for(let P of s.removedIndexes[E]||[])b.deleteIndex(P.name)}for(let E of s.removedCollections)h.objectStore(E).clear()},i.log);let l=await ls({meta:e,currentVersion:s.oldSchema.version,newVersion:s.newSchema.version}),p=await ke(n,r,s.newSchema.version,i.log);for(let h of s.allCollections){let E=p.transaction(h,"readwrite").objectStore(h),P=(await os(E)).map(S=>Z(h,`${S}`));P.push(...a.newOids.filter(S=>le(S).collection===h),...l.filter(S=>le(S).collection===h));let O=(await Promise.all(P.map(async S=>{try{let A=await e.getDocumentSnapshot(S);return[S,A]}catch(A){return i.log("error","Could not regenerate snapshot during migration for oid",S,"this document will not be preserved",A),null}}))).filter(S=>!!S).map(([S,A])=>{if(!A)return[S,void 0];let y=Tt(s.newSchema.collections[h],A);return[S,y]}),x=p.transaction(h,"readwrite").objectStore(h);await Promise.all(O.map(([S,A])=>{if(A)return cs(x,A).catch(y=>{throw y});{let{id:y}=le(S);return as(x,y)}}))}await qt(p),i.log("debug",`Migration of ${r} complete.`),i.log(`
8
+ ${JSON.stringify(e)}`),new Error("Schema has changed without a version change! Any changes to your schema must be accompanied by a change in schema version and a migration routine.");await this.schema.set(e)};this.setGlobalAck=async e=>{this._closing||(await this.ackInfo.setGlobalAck(e),this.disableRebasing||await this.runRebase(e))};this.export=async()=>{let e=this.db,[n,r]=await Hi(e,["baselines","operations"]),s=await this.localReplica.get(),o=await this.schema.get();if(!o)throw new Error("Cannot export Client data before initializing");return{operations:r,baselines:n,localReplica:s,schema:o}};this.resetFrom=async e=>{let r=this.db.transaction(["baselines","operations","info"],"readwrite");await W(r.objectStore("baselines").clear()),await W(r.objectStore("operations").clear()),await W(r.objectStore("info").clear()),await this.localReplica.update({ackedLogicalTime:e.localReplica.ackedLogicalTime,lastSyncedLogicalTime:e.localReplica.lastSyncedLogicalTime},{transaction:r})};this.stats=async()=>{let e=this.db,n=await et(e,"operations"),r=await et(e,"baselines");return{operationsSize:n,baselinesSize:r}};this.context=n,this.schema=new Nt(n.metaDb,n.schema.version),this.operations=new Vt(this.db),this.baselines=new Ft(this.db),this.localReplica=new jt(this.db),this.ackInfo=new Bt(this.db),this.messageCreator=new Lt(this),this.patchCreator=new kt(()=>this.now),e&&(this.disableRebasing=e)}get db(){return this.context.metaDb}get log(){return this.context.log}get now(){return this.time.now(this.schema.currentVersion)}};var Xr=[Zr,es,ts,ns,is];function Ut({indexedDB:i=window.indexedDB,namespace:t,log:e,metadataVersion:n=5}){return new Promise((r,s)=>{let o=i.open(`${t}_meta`,n),c=!1;o.onupgradeneeded=async f=>{let h=o.result,x=o.transaction,E=Xr.slice(f.oldVersion);for(let g of E)await g(h,x);await new Promise((g,P)=>{x.addEventListener("complete",g),x.addEventListener("error",P)}),f.oldVersion||(c=!0)},o.onerror=()=>{console.error("Error opening database",o.error),s(o.error)},o.onsuccess=()=>{r({db:o.result,wasInitialized:c})}})}async function Gi({wipNamespace:i,namespace:t,indexedDB:e,log:n,metadataVersion:r}){let s=await Ut({namespace:i,indexedDB:e,log:n,metadataVersion:r});if(!s.wasInitialized)return s;n?.("debug","Beginning copy of production metadata database to WIP");let{db:o}=await Ut({namespace:t,indexedDB:e,log:n,metadataVersion:r}),c=o.transaction(["baselines","operations","info"],"readonly"),[f,h,x]=await Promise.all([W(c.objectStore("baselines").getAll()),W(c.objectStore("operations").getAll()),W(c.objectStore("info").getAll())]),E=s.db.transaction(["baselines","operations","info"],"readwrite"),g=E.objectStore("baselines"),P=E.objectStore("operations"),b=E.objectStore("info");for(let v of f)g.put(v);for(let v of h)P.put(v);for(let v of x)b.put(v);return await new Promise((v,C)=>{E.oncomplete=()=>{v()},E.onerror=S=>{C(S)},E.onabort=S=>{C(S)}}),await Ae(o),n?.("debug","Finished copy of production metadata database to WIP. Copied:",f.length,"baselines,",h.length,"operations"),s}async function Zr(i,t){let e=i.createObjectStore("baselines",{keyPath:"oid"}),n=i.createObjectStore("operations",{keyPath:"oid_timestamp"}),r=i.createObjectStore("info",{keyPath:"type"});e.createIndex("timestamp","timestamp"),n.createIndex("isLocal_timestamp","isLocal_timestamp"),n.createIndex("documentOid_timestamp","documentOid_timestamp")}async function es(i,t){let e=t.objectStore("operations");await new Promise((n,r)=>{let s=e.openCursor();s.onsuccess=()=>{let o=s.result;if(o){let{isLocal_timestamp:c,documentOid_timestamp:f,...h}=o.value;o.update({...h,l_t:c,d_t:f}),o.continue()}else n()},s.onerror=o=>{r(s.error)}}),e.deleteIndex("isLocal_timestamp"),e.deleteIndex("documentOid_timestamp"),e.createIndex("l_t","l_t",{unique:!1}),e.createIndex("o_t","o_t",{unique:!1}),e.createIndex("d_t","d_t",{unique:!1})}async function ts(i,t){t.objectStore("operations").createIndex("timestamp","timestamp")}async function ns(i,t){let e=i.createObjectStore("files",{keyPath:"id"});e.createIndex("remote","remote"),e.createIndex("deletedAt","deletedAt")}async function is(i,t){let e=t.objectStore("operations");await new Promise((r,s)=>{let o=e.openCursor();o.onsuccess=()=>{let c=o.result;if(c){let f=Bn(c.value);f.oid_timestamp!==c.primaryKey?(c.delete(),e.put(f)):c.update(f),c.continue()}else r()},o.onerror=c=>{s(o.error)}});let n=t.objectStore("baselines");await new Promise((r,s)=>{let o=n.openCursor();o.onsuccess=()=>{let c=o.result;if(c){let f=Bn(c.value);f.oid!==c.primaryKey?(c.delete(),n.put(f)):c.update(f),c.continue()}else r()},o.onerror=c=>{s(o.error)}})}var rs=i=>IDBKeyRange.only(me(i.equals)),ss=i=>{},os=i=>{let t=i.gte||i.gt,e=i.lte||i.lt;return t===e?IDBKeyRange.only(me(t)):t?e?IDBKeyRange.bound(me(t),me(e),!!i.gt,!!i.lt):IDBKeyRange.lowerBound(me(t),!!i.gt):IDBKeyRange.upperBound(me(e),!!i.lt)},as=(i,t,e)=>{let n=i.collections[t].compounds[e.where];V(n,`Index ${e.where} does not exist on collection ${t}`);let r=Object.keys(e.match).sort((f,h)=>n.of.indexOf(f)-n.of.indexOf(h));for(let f of r)if(n.of.indexOf(f)!==r.indexOf(f))throw new Error(`Compound index ${e.where} does not have ${f} at the start of its order`);let s=r.map(f=>e.match[f]);if(r.length===n.of.length)return IDBKeyRange.only(de(...s));let o=Te(...s),c=_e(...s);return IDBKeyRange.bound(o,c)};function cs(i){let t=i.startsWith,e=i.startsWith+"\uFFFF";return IDBKeyRange.bound(t,e)}function Kt(i,t,e){if(e)return zn(e)?os(e):Kn(e)?rs(e):Ki(e)?ss(e):$n(e)?cs(e):as(i,t,e)}function Qn(i,t,e){return i.transaction(t,e?"readwrite":"readonly").objectStore(t)}async function zt({collection:i,index:t,context:e}){let n=Qn(e.documentDb,i),r=t?n.index(t.where):n,s=Kt(e.schema,i,t),o=t?.order==="desc"?"prev":"next",c=r.openCursor(s,o);return await new Promise((h,x)=>{c.onsuccess=()=>{let E=c.result;h(E?X(i,E.primaryKey.toString()):null)},c.onerror=()=>{c.error?.name==="InvalidStateError"?(e.log("error","findOne query failed with InvalidStateError",c.error),h(null)):x(c.error)}})}async function $t({collection:i,index:t,context:e}){let n=Qn(e.documentDb,i),r=t?n.index(t.where):n,s=Kt(e.schema,i,t),o=t?.order==="desc"?"prev":"next",c=r.openCursor(s,o);return await new Promise((h,x)=>{let E=new Set;c.onsuccess=()=>{let g=c.result;g?(E.add(X(i,g.primaryKey.toString())),g.continue()):h(Array.from(E))},c.onerror=()=>{c.error?.name==="InvalidStateError"?(e.log("error","findAll query failed with InvalidStateError",c.error),h([])):x(c.error)}})}async function nt({collection:i,index:t,context:e,limit:n,offset:r}){let s=Qn(e.documentDb,i),o=t?s.index(t.where):s,c=Kt(e.schema,i,t),f=t?.order==="desc"?"prev":"next",h=o.openCursor(c,f),x=!r,E=!1,g=0;return{result:await new Promise((b,v)=>{let C=new Set;h.onsuccess=()=>{g++;let S=h.result;S?r&&!x?(S.advance(r),x=!0):(n&&C.size<n&&C.add(X(i,S.primaryKey.toString())),n&&g>n?(E=!0,b(Array.from(C))):S.continue()):b(Array.from(C))},h.onerror=()=>{h.error?.name==="InvalidStateError"?(e.log("error","find query failed with InvalidStateError",h.error),b([])):v(h.error)}}),hasNextPage:E}}async function Jn(i,t,e,n){function r(c,f){let h,x,E=i.open([t,"collections"].join("_"),e);E.onupgradeneeded=async g=>{h=g.oldVersion;let P=E.transaction;x=E.result,P.abort()},E.onsuccess=g=>{c([E.result.version,E.result])},E.onblocked=g=>{n?.("Database blocked, waiting...")},E.onerror=g=>{c([h,x])}}let[s,o]=await new Promise(r);return await qt(o),s}async function qt(i){i.close(),await new Promise(t=>t())}async function Xi(i,t,e,n,r){function s(o,c){let f=i.open([t,"collections"].join("_"),e),h=!1;f.onupgradeneeded=x=>{let E=f.transaction;n(E,f.result,x),h=!0},f.onsuccess=x=>{f.result.close(),h?o():c(new Error("Database was not upgraded when a version change was expected"))},f.onerror=x=>{c(f.error||new Error("Unknown error"))},f.onblocked=x=>{r?.("Database upgrade blocked, waiting...")}}return new Promise(s)}async function Zi(i,t){typeof navigator<"u"&&navigator.locks?await navigator.locks.request(`verdant_migration_${i}`,t):await t()}async function Re(i,t,e,n){n?.("debug","Opening database",t,"at version",e);let r=await new Promise((s,o)=>{let c=i.open([t,"collections"].join("_"),e);c.onupgradeneeded=async f=>{c.transaction.abort(),n?.("error","Database upgrade needed, but not expected","Expected",e,"Got",c.result.version),o(c.error||new Error(`Migration error: database version changed unexpectedly when reading current data. Expected ${e}, got ${c.result.version}`))},c.onsuccess=f=>{s(c.result)},c.onblocked=f=>{o(new Error("Migration error: database blocked"))},c.onerror=f=>{o(new Error("Migration error: database error"))}});return r.addEventListener("versionchange",s=>{r.close()}),r}var Ve=class extends Error{constructor(e){super(e);this.message=e;this.name="MigrationPathError"}};function Wt({currentVersion:i,targetVersion:t,migrations:e}){let n=er({currentVersion:i,targetVersion:t,migrations:e});if(!n)throw new Ve(`No migration path found from ${i} to ${t}! This is a bug. If you're seeing this, contact the developer and provide them with the full contents of this message.`);return n}function er({currentVersion:i,targetVersion:t,migrations:e}){if(i===t)return[];let n=e.filter(r=>r.oldSchema.version===i).sort((r,s)=>s.newSchema.version-r.newSchema.version);for(;n.length>0;){let r=n.shift();if(r.newSchema.version>t)return null;if(r.newSchema.version===t)return[r];let s=er({currentVersion:r.newSchema.version,targetVersion:t,migrations:e});if(s)return[r,...s]}return null}var Gn=typeof window<"u"?window.indexedDB:void 0;async function it({version:i,indexedDB:t=Gn,migrations:e,meta:n,context:r}){if(r.schema.wip)throw new Error("Cannot open a production client with a WIP schema!");let s=await Jn(t,r.namespace,i,r.log);r.log("debug","Current database version:",s,"target version:",i);let o=Wt({currentVersion:s,targetVersion:i,migrations:e});return o.length>0&&(r.log("debug","Migrations to run:",o.map(c=>c.version)),await Yn({context:r,toRun:o,meta:n,indexedDB:t})),Re(t,r.namespace,i,r.log)}async function tr({version:i,indexedDB:t=Gn,migrations:e,meta:n,context:r,wipNamespace:s}){r.log("debug","Opening WIP database",s);let o=await Jn(t,s,i,r.log);if(o===i)r.log("info","WIP schema is up-to-date; not refreshing database");else{r.log("info","WIP schema is out-of-date; refreshing database");let c=Wt({currentVersion:o,targetVersion:i-1,migrations:e});if(c.length>0){await Yn({context:r,toRun:c,meta:n,indexedDB:t,namespace:s});let h=await Re(t,r.namespace,i-1,r.log),x=await Re(t,s,i-1,r.log),E=new Array;for(let S=0;S<h.objectStoreNames.length;S++)E.push(h.objectStoreNames[S]);let g=h.transaction(E,"readonly"),P=E.map(S=>g.objectStore(S)),b=await Promise.all(P.map(S=>W(S.getAll()))),v=x.transaction(E,"readwrite"),C=E.map(S=>v.objectStore(S));for(let S=0;S<C.length;S++)await Promise.all(b[S].map(O=>W(C[S].put(O))))}let f=Wt({currentVersion:i-1,targetVersion:i,migrations:e});f.length>0&&await Yn({context:r,toRun:f,meta:n,indexedDB:t,namespace:s})}return Re(t,s,i,r.log)}async function Yn({context:i,toRun:t,meta:e,indexedDB:n=Gn,namespace:r=i.namespace}){await Zi(r,async()=>{for(let s of t){let o;if(s.oldSchema.version===0)o=us({meta:e,migration:s,context:i}),await s.migrate(o);else{let h=await Re(n,r,s.oldSchema.version,i.log);o=ds({meta:e,migration:s,context:{...i,documentDb:h}});try{await s.migrate(o),await Promise.all(o.awaitables)}catch(x){throw i.log("critical",`Migration failed (${s.oldSchema.version} -> ${s.newSchema.version})`,x),x}await qt(h)}i.log("debug","Upgrading database",r,"to version",s.newSchema.version),await Xi(n,r,s.newSchema.version,(h,x)=>{for(let E of s.addedCollections)x.createObjectStore(E,{keyPath:s.newSchema.collections[E].primaryKey,autoIncrement:!1});for(let E of s.allCollections){let g=h.objectStore(E);for(let P of s.addedIndexes[E]||[])g.createIndex(P.name,P.name,{multiEntry:P.multiEntry});for(let P of s.removedIndexes[E]||[])g.deleteIndex(P.name)}for(let E of s.removedCollections)h.objectStore(E).clear()},i.log);let c=await ms({meta:e,currentVersion:s.oldSchema.version,newVersion:s.newSchema.version}),f=await Re(n,r,s.newSchema.version,i.log);for(let h of s.allCollections){let E=f.transaction(h,"readwrite").objectStore(h),P=(await ps(E)).map(O=>X(h,`${O}`));P.push(...o.newOids.filter(O=>ae(O).collection===h),...c.filter(O=>ae(O).collection===h));let v=(await Promise.all(P.map(async O=>{try{let A=await e.getDocumentSnapshot(O);return[O,A]}catch(A){return i.log("error","Could not regenerate snapshot during migration for oid",O,"this document will not be preserved",A),null}}))).filter(O=>!!O).map(([O,A])=>{if(!A)return[O,void 0];let y=Tt(s.newSchema.collections[h],A);return[O,y]}),S=f.transaction(h,"readwrite").objectStore(h);await Promise.all(v.map(([O,A])=>{if(A)return hs(S,A).catch(y=>{throw y});{let{id:y}=ae(O);return fs(S,y)}}))}await qt(f),i.log("debug",`Migration of ${r} complete.`),i.log(`
9
9
  \u2B06\uFE0F v${s.newSchema.version} Migration complete. Here's the rundown:
10
10
  - Added collections: ${s.addedCollections.join(", ")}
11
11
  - Removed collections: ${s.removedCollections.join(", ")}
12
12
  - Changed collections: ${s.changedCollections.join(", ")}
13
- - New indexes: ${Object.keys(s.addedIndexes).map(h=>s.addedIndexes[h].map(v=>`${h}.${v.name}`)).flatMap(h=>h).join(", ")}
14
- - Removed indexes: ${Object.keys(s.removedIndexes).map(h=>s.removedIndexes[h].map(v=>`${h}.${v.name}`)).flatMap(h=>h).join(", ")}
15
- `)}})}function tr({migration:i,meta:t,getMigrationNow:e,newOids:n}){return i.allCollections.reduce((r,s)=>(r[s]={put:async a=>{ve(i.newSchema.collections[s],a);let l=a[i.newSchema.collections[s].primaryKey],p=Z(s,l);return n.push(p),await t.insertLocalOperation(xe(a,p,e)),a},delete:a=>{let l=Z(s,a);return t.insertLocalOperation([{oid:l,timestamp:e(),data:{op:"delete"}}])}},r),{})}function is({migration:i,context:t,meta:e}){return i.oldCollections.reduce((n,r)=>(n[r]={get:async s=>{let a=Z(r,s);return await e.getDocumentSnapshot(a,{to:e.time.now(i.oldSchema.version)})},findOne:async s=>{let a=await zt({collection:r,index:s,context:t});return a?await e.getDocumentSnapshot(a,{to:e.time.now(i.oldSchema.version)}):null},findAll:async s=>{let a=await $t({collection:r,index:s,context:t});return await Promise.all(a.map(p=>e.getDocumentSnapshot(p,{to:e.time.now(i.oldSchema.version)})))}},n),{})}function rs({meta:i,migration:t,context:e}){function n(){return i.time.zero(t.version)}let r=new Array,s=is({migration:t,context:e,meta:i}),a=tr({migration:t,getMigrationNow:n,newOids:r,meta:i}),l=new Array;return{log:e.log,newOids:r,migrate:async(h,v)=>{let E=await s[h].findAll();await Promise.all(E.filter(Boolean).map(async b=>{V(Xe(b),`Document is missing an OID: ${JSON.stringify(b)}`);let P=oe(b),g=await v(b);if(g){Ge(P),Ge(g),je(g);let O=Ze(P,g,n,void 0,[],{mergeUnknownObjects:!0});O.length>0&&await i.insertLocalOperation(O)}}))},queries:s,mutations:a,awaitables:l}}function ss({meta:i,migration:t,context:e}){function n(){return i.time.zero(t.version)}let r=new Array,s=new Proxy({},{get(){throw new Error("Queries are not available in initial migrations; there is no database yet!")}}),a=tr({migration:t,getMigrationNow:n,newOids:r,meta:i});return{log:e.log,newOids:r,migrate:()=>{throw new Error("Calling migrate() in initial migrations is not supported! Use initial migrations to seed initial data using mutations.")},queries:s,mutations:a,awaitables:[]}}async function os(i){return new Promise((t,e)=>{let n=i.getAllKeys();n.onsuccess=r=>{t(n.result)},n.onerror=r=>{e(n.error)}})}async function as(i,t){let e=i.delete(t);return new Promise((n,r)=>{e.onsuccess=s=>{n()},e.onerror=s=>{r(e.error)}})}async function cs(i,t){let e=i.put(t);return new Promise((n,r)=>{e.onsuccess=s=>{n()},e.onerror=s=>{r(e.error)}})}async function ls({meta:i,currentVersion:t,newVersion:e}){let n=[];return await i.operations.iterateOverAllOperations(r=>n.push(r),{from:i.time.zero(t+1)}),Array.from(new Set(n.map(r=>U(r.oid))))}var rt=class extends N{constructor(){super(...arguments);this._undoable=[];this._undone=[];this.undo=async()=>{let e=this._undoable.pop();return e?(this._undone.push(await e()),this.emit("change"),!0):!1};this.redo=async()=>{let e=this._undone.pop();return e?(this._undoable.push(await e()),this.emit("change"),!0):!1};this.addUndo=e=>{this._undoable.push(e),this._undone=[],this.emit("change")};this.addRedo=e=>{this._undone.push(e),this.emit("change")};this.clear=()=>{this._undoable=[],this._undone=[],this.emit("change")}}get canUndo(){return this._undoable.length>0}get canRedo(){return this._undone.length>0}};var Ht=class{constructor(t,e,n){this.meta=t;this.schema=e;this.entities=n;this.getOid=(t,e)=>{let n=this.schema.collections[t].primaryKey,r=e[n];return V(r,`Document must have a primary key: ${n.toString()} (got: ${JSON.stringify(e)})`),Z(t,r)};this.addDefaults=(t,e)=>{let n=this.schema.collections[t];return ve(n,e)};this.create=async(t,e,n={})=>{let r=this.addDefaults(t,e),s=this.getOid(t,r);return this.entities.create(r,s,n)};this.delete=async(t,e,n={})=>{let r=Z(t,e);return this.entities.delete(r,n)};this.deleteAll=async(t,e={})=>this.entities.deleteAll(t.map(([n,r])=>Z(n,r)),e);this.deleteAllFromCollection=async(t,e,n={})=>this.entities.deleteAll(e.map(r=>Z(t,r)),n)}};var Ne=Symbol("entity-file-update"),st=Symbol("entity-file-mark-failed"),ds,us,Re=class extends N{constructor(e,{downloadRemote:n=!1}={}){super();this.id=e;this._objectUrl=null;this._fileData=null;this._loading=!0;this._failed=!1;this._disposed=!1;this._downloadRemote=!1;this[ds]=e=>{this._loading=!1,this._failed=!1,this._disposed=!1,this._fileData=e,e.file&&(this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this._objectUrl=URL.createObjectURL(e.file)),this.emit("change")};this[us]=()=>{this._failed=!0,this._loading=!1,this.emit("change")};this.dispose=()=>{this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this._disposed=!0};this._downloadRemote=n}static{ds=Ne,us=st}get downloadRemote(){return this._downloadRemote}get url(){return this.loading?null:this._objectUrl?this._objectUrl:this._fileData?.url??null}get name(){return this._fileData?.name??null}get type(){return this._fileData?.type??null}get loading(){return this._loading}get failed(){return this._failed}};var nr=dt(pt(),1);function fs(i){return{id:(0,nr.default)(),file:i,url:void 0,remote:!1,name:i.name,type:i.type}}function Me(i,t){if(typeof window<"u"&&i instanceof File){let e=fs(i);return t(e),Ii(e.id)}if(Array.isArray(i)){for(let e=0;e<i.length;e++)i[e]=Me(i[e],t);return i}if(typeof i=="object"){for(let e in i)i[e]=Me(i[e],t);return i}return i}function ir(i){return new Promise((t,e)=>{let n=new FileReader;n.onload=()=>{t(n.result)},n.onerror=e,n.readAsArrayBuffer(i)})}var Qt=class extends fe{constructor(){super(...arguments);this.addFile=async(e,{transaction:n,downloadRemote:r=!1}={})=>{let s=e.file?await ir(e.file):void 0;if(!s&&r&&e.url)try{s=await fetch(e.url,{method:"GET",credentials:"include"}).then(a=>a.arrayBuffer())}catch(a){console.error("Failed to download file to cache it locally. The file will still be available using its URL. Check the file server's CORS configuration.",a)}return this.run("files",a=>a.put({id:e.id,remote:e.remote?"true":"false",deletedAt:null,name:e.name,type:e.type,url:e.url,buffer:s}),"readwrite",n)};this.hydrateFileData=e=>{e.remote=e.remote==="true";let n=e.buffer;return delete e.buffer,e.file=n?ps(n,e.type):void 0,e};this.markUploaded=async(e,{transaction:n}={})=>{let r=await this.getFileRaw(e,{transaction:n});if(!r)throw new Error("File is not in local database");return this.run("files",s=>s.put({...r,remote:"true"}),"readwrite",n)};this.getFileRaw=async(e,{transaction:n}={})=>{let r=await this.run("files",s=>s.get(e),"readonly",n);if(r)return r};this.getFile=async(e,{transaction:n}={})=>{let r=await this.getFileRaw(e,{transaction:n});if(r)return this.hydrateFileData(r)};this.markPendingDelete=async(e,{transaction:n}={})=>{let r=await this.getFileRaw(e,{transaction:n});if(!r)throw new Error("File is not in local database");return this.run("files",s=>s.put({...r,deletedAt:Date.now()}),"readwrite",n)};this.listUnsynced=async()=>(await this.run("files",n=>n.index("remote").getAll("false"),"readonly")).map(this.hydrateFileData);this.iterateOverPendingDelete=(e,n)=>this.iterate("files",r=>r.index("deletedAt").openCursor(IDBKeyRange.lowerBound(0,!0)),(r,s)=>{e(this.hydrateFileData(r),s)},"readwrite",n)}deleteFile(e,{transaction:n}={}){return this.run("files",r=>r.delete(e),"readwrite",n)}};function ps(i,t){return new Blob([i],{type:t})}function hs(i){return i.deletedAt!==null&&i.deletedAt<Date.now()-1e3*60*24*3}var Jt=class{constructor({db:t,sync:e,context:n,meta:r,config:s={}}){this.files=new Map;this.add=async t=>{let e=t;if(e.remote=!1,this.files.has(e.id))this.files.get(e.id)[Ne](e);else{let n=new Re(e.id);n[Ne](e),this.files.set(e.id,n)}await this.storage.addFile(e),e.file&&((await this.sync.uploadFile(e)).success?await this.storage.markUploaded(e.id):this.context.log("error","Failed to upload file"))};this.uploadFile=async(t,e=0)=>{let n=await this.sync.uploadFile(t);n.success?await this.storage.markUploaded(t.id):n.retry&&e<5?(this.context.log("error","Error uploading file, retrying..."),setTimeout(this.uploadFile,1e3,t,e+1)):this.context.log("error","Failed to upload file. Not retrying until next sync.")};this.get=t=>{if(this.files.has(t))return this.files.get(t);let e=new Re(t);return this.files.set(t,e),this.load(e),e};this.load=async(t,e=0)=>{if(e>5){t[st]();return}let n=await this.storage.getFile(t.id);if(n)t[Ne](n);else try{let r=await this.sync.getFile(t.id);r.success?(t[Ne](r.data),await this.storage.addFile(r.data,{downloadRemote:t.downloadRemote})):(t[st](),r.retry&&setTimeout(this.load,1e3,t,e+1))}catch(r){this.context.log("error","Failed to load file",r),t[st](),setTimeout(this.load,1e3,t,e+1)}};this.listUnsynced=async()=>this.storage.listUnsynced();this.onOnlineChange=async t=>{if(t){let e=await this.listUnsynced();await Promise.all(e.map(this.uploadFile))}};this.tryCleanupDeletedFiles=async()=>{let t=0,e=0;await this.storage.iterateOverPendingDelete((n,r)=>{this.config.canCleanupDeletedFile(n)?(t++,r.delete(n.id)):e++}),this.context.log("info",`Cleaned up ${t} files, skipped ${e} files`)};this.handleFileRefsDeleted=async t=>{let e=this.storage.createTransaction(["files"],"readwrite");await Promise.all(t.map(async n=>{try{await this.storage.markPendingDelete(n.id,{transaction:e})}catch(r){this.context.log("error","Failed to mark file for deletion",r)}})),this.context.log("info",`Marked ${t.length} files as pending delete`)};this.storage=new Qt(t),this.sync=e,this.context=n,this.meta=r,this.config={canCleanupDeletedFile:hs,...s},this.sync.subscribe("onlineChange",this.onOnlineChange),this.meta.subscribe("filesDeleted",this.handleFileRefsDeleted),this.tryCleanupDeletedFiles()}};var rr="@@refresh",Yt="@@deepChange";function ot(i,t){return i[rr](t)}var ms,ys,ye=class i{constructor({oid:t,store:e,fieldSchema:n,cache:r,parent:s,onAllUnsubscribed:a,readonlyKeys:l=[]}){this._current=null;this._deleted=!1;this.cachedSnapshot=null;this.cachedDestructure=null;this.cachedDeepUpdatedAt=null;this._updatedAt=null;this[ms]=t=>{let{view:e,deleted:n,lastTimestamp:r}=this.cache.computeView(this.oid);this._current=e;let s=this._deleted&&!n;this._deleted=n,this.cachedDestructure=null,this._updatedAt=r||null,this.cachedDeepUpdatedAt=null,this._deleted?this.events.emit("delete",t):(this.events.emit("change",t),this[Yt](this,t)),s&&(this.cachedSnapshot=null,this.events.emit("restore",t))};this[ys]=(t,e)=>{this.cachedSnapshot=null,this.cachedDeepUpdatedAt=null,this.events.emit("changeDeep",t,e);let n=this.parent?.deref();n&&n[Yt](t,e)};this.getChildFieldSchema=t=>{if(this.fieldSchema.type==="object")return this.fieldSchema.properties[t];if(this.fieldSchema.type==="array")return this.fieldSchema.items;if(this.fieldSchema.type==="map")return this.fieldSchema.values;if(this.fieldSchema.type==="any")return this.fieldSchema;throw new Error("Invalid field schema")};this.dispose=()=>{this.events.dispose()};this.subscribe=(t,e)=>this.events.subscribe(t,e);this.addPatches=t=>{this.store.addLocalOperations(t)};this.cloneCurrent=()=>{if(this._current!==void 0)return oe(this._current)};this.getSubObject=(t,e)=>{let n=this.getChildFieldSchema(e);return this.cache.getEntity(t,n,this)};this.wrapValue=(t,e)=>{if(ne(t)){let n=t.id,r=this.getSubObject(n,e);if(r)return r;throw new Error(`CACHE MISS: Subobject ${n} does not exist on ${this.oid}`)}else if(se(t)){let n=this.store.getFile(t.id);if(n)return n.subscribe("change",()=>{this[Yt](this,{isLocal:!1})}),n}return t};this.processInputValue=(t,e)=>{t instanceof File||(t=oe(t,!1));let n=this.getChildFieldSchema(e);return n&&Pe(t,n),Me(t,this.store.addFile)};this.get=t=>{if(this.value===void 0||this.value===null)throw new Error("Cannot access deleted entity");let e=this.value[t];return this.wrapValue(e,t)};this.getAll=()=>{if(this.value===void 0||this.value===null)throw new Error("Cannot access deleted entity");if(this.cachedDestructure)return this.cachedDestructure;let t;if(Array.isArray(this.value))t=this.value.map((e,n)=>this.wrapValue(e,n));else{t={};for(let e in this.value)t[e]=this.get(e)}return this.cachedDestructure=t,t};this.getSnapshot=()=>{if(!this.value||this.deleted)return null;if(this.cachedSnapshot)return this.cachedSnapshot;let t;if(Array.isArray(this.value))t=this.value.map((e,n)=>ne(e)?this.getSubObject(e.id,n)?.getSnapshot():se(e)?this.getFileSnapshot(e):e);else{t={...this.value};for(let[e,n]of Object.entries(t))ne(n)?t[e]=this.getSubObject(n.id,e)?.getSnapshot():se(n)&&(t[e]=this.getFileSnapshot(n))}return K(t,this.oid),this.cachedSnapshot=t,t};this.keys=()=>Object.keys(this.value||{});this.entries=()=>Object.entries(this.getAll());this.values=()=>Object.values(this.getAll());this.set=(t,e)=>{if(this.readonlyKeys.includes(t))throw new Error(`Cannot set readonly key ${t.toString()}`);this.addPatches(this.store.patchCreator.createSet(this.oid,t,this.processInputValue(e,t)))};this.delete=t=>{if(Array.isArray(this.value))this.addPatches(this.store.patchCreator.createListDelete(this.oid,t,1));else{let e=this.getDeleteMode(t);if(!e)throw new Error(`Cannot delete key ${t} - the property is not marked as optional in the schema`);e==="delete"?this.addPatches(this.store.patchCreator.createRemove(this.oid,t)):this.addPatches(this.store.patchCreator.createSet(this.oid,t,null))}};this.getDeleteMode=t=>{if(this.readonlyKeys.includes(t))return!1;if(this.fieldSchema.type==="any"||this.fieldSchema.type==="map")return"delete";if(this.fieldSchema.type==="object"){let e=this.fieldSchema.properties[t];if(!e||e.type==="any")return"delete";if(e.type==="map")return!1;if(e.nullable)return"null"}return!1};this.remove=this.delete.bind(this);this.update=(t,{replaceSubObjects:e=!1,merge:n=!0}={replaceSubObjects:!1,merge:!0})=>{if(!n&&this.fieldSchema.type!=="any"&&this.fieldSchema.type!=="map")throw new Error('Cannot use .update without merge if the field has a strict schema type. merge: false is only available on "any" or "map" types.');for(let[s,a]of Object.entries(t)){if(this.readonlyKeys.includes(s))throw new Error(`Cannot set readonly key ${s.toString()}`);let l=this.getChildFieldSchema(s);l&&Pe(a,l)}let r=Me(t,this.store.addFile);this.addPatches(this.store.patchCreator.createDiff(this.getSnapshot(),K(r,this.oid),{mergeUnknownObjects:!e,defaultUndefined:n}))};this.getItemRefValue=t=>{if(typeof t=="object"){let e=ae(t);if(!e||!this.cache.hasOid(e))throw new Error(`Cannot move object ${JSON.stringify(t)} which does not exist in this list`);return e}else return t};this.push=t=>{this.addPatches(this.store.patchCreator.createListPush(this.oid,this.processInputValue(t,this.value.length)))};this.insert=(t,e)=>{this.addPatches(this.store.patchCreator.createListInsert(this.oid,t,this.processInputValue(e,t)))};this.move=(t,e)=>{this.addPatches(this.store.patchCreator.createListMoveByIndex(this.oid,t,e))};this.moveItem=(t,e)=>{let n=this.getItemRefValue(t);if(ne(n))this.addPatches(this.store.patchCreator.createListMoveByRef(this.oid,n,e));else{let r=this.value.indexOf(n);this.addPatches(this.store.patchCreator.createListMoveByIndex(this.oid,r,e))}};this.removeAll=t=>{this.addPatches(this.store.patchCreator.createListRemove(this.oid,this.getItemRefValue(t)))};this.removeFirst=t=>{this.addPatches(this.store.patchCreator.createListRemove(this.oid,this.getItemRefValue(t),"first"))};this.removeLast=t=>{this.addPatches(this.store.patchCreator.createListRemove(this.oid,this.getItemRefValue(t),"last"))};this.add=t=>{this.addPatches(this.store.patchCreator.createListAdd(this.oid,this.processInputValue(t,this.value.length)))};this.has=t=>typeof t=="object"?this.value.some(e=>ne(e)?e.id===ae(t):(se(e),!1)):this.value.includes(t);this.getAsWrapped=()=>{if(!this.isList)throw new Error("Cannot map items of a non-list");return this.value.map(this.wrapValue)};this.map=t=>this.getAsWrapped().map(t);this.filter=t=>this.getAsWrapped().filter((e,n)=>t(e,n));this.forEach=t=>{this.getAsWrapped().forEach(t)};this.some=t=>this.getAsWrapped().some(t);this.every=t=>this.getAsWrapped().every(t);this.find=t=>this.getAsWrapped().find(t);this.includes=t=>this.has(t);this.oid=t;let{collection:p}=le(t);this.collection=p,this.store=e,this.fieldSchema=n,this.readonlyKeys=l,this.cache=r,this.parent=s&&this.cache.weakRef(s);let{view:h,deleted:v,lastTimestamp:E}=this.cache.computeView(t);if(this._current=h,this._deleted=v,this._updatedAt=E||null,this.cachedDeepUpdatedAt=null,this.events=new N(()=>{this.hasSubscribers||a?.()}),this.oid.includes(".")&&!this.parent)throw new Error("Parent must be provided for sub entities");V(!!n,"Field schema must be provided")}hasSubscribersToDeepChanges(){return this.events.subscriberCount("changeDeep")>0}get hasSubscribers(){if(this.events.totalSubscriberCount()>0)return!0;let t=this.parent?.deref();for(;t;){if(t.hasSubscribersToDeepChanges())return!0;t=t.parent?.deref()}return!1}get deleted(){return this._deleted}get value(){return this._current}get isList(){return Array.isArray(this._current)}get updatedAt(){return this._updatedAt}get deepUpdatedAt(){if(this.cachedDeepUpdatedAt)return this.cachedDeepUpdatedAt;let t=this._updatedAt;return this.isList?this.forEach(e=>{if(e instanceof i){let n=e.deepUpdatedAt;n&&(!t||n>t)&&(t=n)}}):this.values().forEach(e=>{if(e instanceof i){let n=e.deepUpdatedAt;n&&(!t||n>t)&&(t=n)}}),this.cachedDeepUpdatedAt=t,t}get uid(){return this.oid}getFileSnapshot(t){let e=this.store.getFile(t.id);return e.url?{id:t.id,url:e.url}:e.loading||e.failed?{id:t.id,url:void 0}:{id:t.id,url:null}}get length(){return this.value.length}[(ms=rr,ys=Yt,Symbol.iterator)](){let t=0;return{next:()=>t<this.value.length?{value:this.get(t++),done:!1}:{value:void 0,done:!0}}}};var Gt=class{constructor(){let t,e;this.promise=new Promise((n,r)=>{t=n,e=r}),this._resolve=t,this._reject=e}resolve(t){this._resolve(t)}reject(t){this._reject(t)}};var Xt=class extends N{constructor({oid:e,store:n,context:r}){super();this.entities=new Map;this._initialized=new Gt;this.setInitialized=()=>{this._initialized.resolve(!0)};this.insertLocalOperations=e=>{let n=new Set;for(let r of e){let{oid:s}=r;n.add(s);let a=this.localOperationsMap.get(s)||[];a.push(r),this.localOperationsMap.set(s,a)}for(let r of n){let a=this.entities.get(r)?.deref();a&&(ot(a,{isLocal:!0}),this.emit(`change:${r}`),this.emit("change:*",r))}};this.insertOperations=(e,n)=>{for(let r of e){let{oid:s}=r;n.affectedOids?.add(s);let a=this.operationsMap.get(s)||[],l=a.findIndex(h=>h.timestamp>=r.timestamp);if(l!==-1){if(a[l].timestamp===r.timestamp)continue;a.splice(l,0,r)}else a.push(r);this.operationsMap.set(s,a);let p=this.localOperationsMap.get(s);p&&this.localOperationsMap.set(s,p.filter(h=>h.timestamp!==r.timestamp))}};this.insertBaselines=(e,{affectedOids:n})=>{for(let r of e){let{oid:s}=r,a=this.baselinesMap.get(s);if(a?.timestamp&&a.timestamp>=r.timestamp)continue;n?.add(s),this.baselinesMap.set(s,r);let l=this.operationsMap.get(s)||[];for(;l[0]?.timestamp<r.timestamp;)l.shift()}};this.addData=({operations:e,baselines:n,reset:r,isLocal:s})=>{r&&(this.operationsMap.clear(),this.baselinesMap.clear());let a={isLocal:s||!1,affectedOids:new Set};if(this.insertBaselines(n,a),this.insertOperations(e,a),r)for(let l of this.entities.values()){let p=l.deref();p&&ot(p,a)}else for(let l of a.affectedOids){let h=this.entities.get(l)?.deref();h&&(ot(h,a),this.emit(`change:${l}`),this.emit("change:*",l))}};this.applyOperations=(e,n,r,s)=>{let a,l=this.storeTools.now;for(let p of r)if(!(s&&p.timestamp<=s)){if(Oi(p.timestamp,l)>0){a=p.timestamp;continue}p.data.op==="delete"?n=!0:(e=Ee(e,p.data),p.data.op==="initialize"&&(n=!1))}return a&&this.context.globalEvents.emit("futureSeen",a),{view:e,deleted:n,empty:!e&&!r.length}};this.computeView=e=>{if(this.baselinesMap.size===0&&this.operationsMap.size===0&&this.localOperationsMap.size===0)return this.context.log("debug",`Entity ${e} accessed with no data at all`),{view:null,deleted:!0,lastTimestamp:null};let n=this.computeConfirmedView(e),r=this.localOperationsMap.get(e)||[];if(n.empty&&!r.length)return this.context.log("debug",`Entity ${e} accessed with no local data at all`),{view:null,deleted:!0,lastTimestamp:null};let{view:s,deleted:a}=this.applyOperations(n.view,n.deleted,r);return s&&K(s,e),{view:s,deleted:a,lastTimestamp:this.getLastTimestamp(e)}};this.computeConfirmedView=e=>{let n=this.baselinesMap.get(e),r=this.operationsMap.get(e)||[],s=oe(n?.snapshot||void 0),a=this.applyOperations(s,!s,r,n?.timestamp);return a.view&&K(a.view,e),a.empty&&this.context.log("debug",`Entity ${e} accessed with no confirmed data`),a};this.getLastTimestamp=e=>{let n=this.localOperationsMap.get(e);n?.length||(n=this.operationsMap.get(e)||[]);let r=null;return n.length?r=n[n.length-1]?.timestamp:r=this.baselinesMap.get(e)?.timestamp??null,r?this.storeTools.time.getWallClockTime(r):null};this.getEntity=(e,n,r,s)=>{let l=this.entities.get(e)?.deref();return l||(l=new ye({oid:e,cache:this,fieldSchema:n,store:this.storeTools,parent:r,readonlyKeys:s}),this.entities.set(e,this.context.weakRef(l))),l};this.hasOid=e=>this.operationsMap.has(e)||this.baselinesMap.has(e);this.dispose=()=>{this.entities.forEach(e=>e.deref()?.dispose()),this.entities.clear()};this.reset=({operations:e,baselines:n,dropExistingUnconfirmed:r=!1,unconfirmedOperations:s,dropAll:a})=>{this.context.log("debug",`Resetting cache for ${this.oid} with ${e.length} ops and ${n.length} baselines, dropUnconfirmed=${r}`);let l={isLocal:!1,affectedOids:new Set};a&&this.baselinesMap.clear(),this.insertBaselines(n,l),a&&this.operationsMap.clear(),this.insertOperations(e,l),(s||r)&&(this.localOperationsMap.clear(),s&&this.insertLocalOperations(s));for(let p of this.entities.keys()){let v=this.entities.get(p)?.deref();v&&(ot(v,l),this.emit(`change:${p}`),this.emit("change:*",p))}};this.oid=e,this.operationsMap=new Map,this.localOperationsMap=new Map,this.baselinesMap=new Map,this.storeTools={addLocalOperations:n.addLocalOperations,patchCreator:n.meta.patchCreator,addFile:n.files.add,getFile:n.files.get,time:n.meta.time,now:n.meta.now},this.context=r}get initializedPromise(){return this._initialized.promise}get weakRef(){return this.context.weakRef}};var Zt="@@default",en=class{constructor({context:t,meta:e,batchTimeout:n=200,files:r}){this.documentFamilyCaches=new Map;this.unsubscribes=[];this._disposed=!1;this.currentBatchKey=Zt;this.setContext=t=>{this.context=t};this.getDocumentSchema=t=>{let{collection:e}=le(t);if(!this.schema.collections[e])return this.log("warn",`Missing schema for collection: ${e}`),{schema:null,readonlyKeys:[]};let n=this.schema.collections[e];return{readonlyKeys:[n.primaryKey],schema:{type:"object",properties:n.fields}}};this.refreshFamilyCache=async(t,e=!1,n=!1)=>{if(this._disposed){this.context.log("debug",`EntityStore is disposed, not refreshing ${t.oid} cache`);return}let r=this.meta.createTransaction(["baselines","operations"]),s=[],a=[];await Promise.all([this.meta.baselines.iterateOverAllForDocument(t.oid,l=>{s.push(l)},{transaction:r,mode:"readwrite"}),this.meta.operations.iterateOverAllOperationsForDocument(t.oid,l=>{l.confirmed=!0,a.push(l)},{transaction:r,mode:"readwrite"})]),t.reset({operations:a,baselines:s,dropExistingUnconfirmed:e,dropAll:n})};this.openFamilyCache=async t=>{let e=U(t),n=this.documentFamilyCaches.get(e);return n||(this.context.log("debug","opening family cache for",e),n=new Xt({oid:e,store:this,context:this.context}),this.documentFamilyCaches.set(e,n),await this.refreshFamilyCache(n),n.setInitialized()),await n.initializedPromise,n};this.onEntityChange=async t=>{};this.writeDocumentToStorage=async t=>{if(this._disposed){this.log("warn","EntityStore is disposed, not writing to storage");return}let e=U(t),{id:n,collection:r}=le(e),s=await this.get(e);if(this._disposed){this.log("warn","EntityStore is disposed, not writing to storage");return}let a=s?.getSnapshot();if(a){let l=Tt(this.schema.collections[r],a);try{let h=this.db.transaction(r,"readwrite").objectStore(r);await W(h.put(l)),this.log("info","\u{1F4DD}","wrote",r,n,"to storage",l)}catch{this.log("\u26A0\uFE0F CRITICAL: possibly corrupt data couldn't be written to queryable storage. This is probably a bug in verdant! Please report at https://github.com/a-type/verdant/issues",`
16
- `,"Invalid data:",JSON.stringify(l))}}else{let p=this.db.transaction(r,"readwrite").objectStore(r);await W(p.delete(n)),this.log("info","\u274C","deleted",r,n,"from storage")}};this.get=async t=>{let e=await this.openFamilyCache(t),{schema:n,readonlyKeys:r}=this.getDocumentSchema(t);return n?e.getEntity(t,n,void 0,r):null};this.getCached=t=>{let e=this.documentFamilyCaches.get(t);if(e){let{schema:n,readonlyKeys:r}=this.getDocumentSchema(t);return n?e.getEntity(t,n,void 0,r):null}return null};this.create=async(t,e,n)=>{xt(t);let r=Me(t,this.files.add);K(r,e);let s=this.meta.patchCreator.createInitialize(r,e),a=await this.openFamilyCache(e);a.insertLocalOperations(s),await this.submitOperations(s,n);let{schema:l,readonlyKeys:p}=this.getDocumentSchema(e);if(!l)throw new Error(`Cannot create a document in the ${le(e).collection} collection; it is not defined in the current schema version.`);return a.getEntity(e,l,void 0,p)};this.addOperationsToOpenCaches=async(t,e)=>{let n=Fn(t);Object.keys(n).forEach(s=>{let a=this.documentFamilyCaches.get(s);a&&(this.log("adding",e.confirmed?"confirmed":"unconfirmed","operations to cache",s,n[s].length),e.isLocal?a.insertLocalOperations(n[s]):a.insertOperations(n[s],e))})};this.addBaselinesToOpenCaches=async(t,e)=>{let n=jn(t);Object.keys(n).forEach(s=>{let a=this.documentFamilyCaches.get(s);a&&(this.log("adding","baselines to cache",s,n[s].length),a.insertBaselines(n[s],e))})};this.addDataToOpenCaches=({baselines:t,operations:e,reset:n,isLocal:r})=>{let s=jn(t),a=Fn(e),l=Array.from(new Set(Object.keys(s).concat(Object.keys(a))));for(let p of l){let h=this.documentFamilyCaches.get(p);h?(h.addData({operations:a[p]||[],baselines:s[p]||[],reset:n,isLocal:r}),this.log("debug","Added data to cache for",p,a[p]?.length??0,"operations",s[p]?.length??0,"baselines")):this.log("debug","Could not add data to cache for",p,"because it is not open")}return l};this.addData=async({operations:t,baselines:e,reset:n})=>{if(this._disposed){this.log("warn","EntityStore is disposed, not adding data");return}let r=t;for(let l of r)l.confirmed=!1;let s=[];n?(this.log("Resetting local store to replicate remote synced data",e.length,"baselines, and",t.length,"operations"),await this.meta.reset(),await this.resetStoredDocuments(),s=Array.from(new Set(e.map(l=>U(l.oid)).concat(t.map(l=>U(l.oid)))))):s=this.addDataToOpenCaches({operations:r,baselines:e,reset:n}),await this.meta.insertRemoteBaselines(e),await this.meta.insertRemoteOperations(t),n&&await this.refreshAllCaches(!0,!0);for(let l of s)await this.writeDocumentToStorage(l);let a=Array.from(new Set(s.map(l=>le(l).collection)));this.context.log("changes to collections",a),this.context.entityEvents.emit("collectionsChanged",a)};this.addLocalOperations=async t=>{this.log("Adding local operations",t.length),this.addOperationsToOpenCaches(t,{isLocal:!0,confirmed:!1}),this.operationBatcher.add({key:this.currentBatchKey,items:t})};this.batch=({undoable:t=!0,batchName:e=St(),max:n=null,timeout:r=this.defaultBatchTimeout}={})=>{let s=this.operationBatcher.add({key:e,max:n,timeout:r,items:[],userData:{undoable:t}}),a={run:l=>(this.currentBatchKey=e,l(),this.currentBatchKey=Zt,a),flush:async()=>(await this.operationBatcher.flush(Zt),s.flush()),discard:()=>{this.operationBatcher.discard(e)}};return a};this.flushPatches=async()=>{await this.operationBatcher.flush(this.currentBatchKey)};this.flushAllBatches=async()=>{await Promise.all(this.operationBatcher.flushAll())};this.flushOperations=async(t,e,n)=>{if(t.length){this.log("Flushing operations",t.length,"to storage / sync");for(let r of t)r.timestamp=this.meta.now;await this.submitOperations(t,n)}};this.submitOperations=async(t,{undoable:e=!0}={})=>{e&&this.undoHistory.addUndo(await this.createUndo(t)),await this.meta.insertLocalOperation(t),this.addDataToOpenCaches({operations:t,baselines:[]});let n=Array.from(new Set(t.map(s=>U(s.oid))));for(let s of n)await this.writeDocumentToStorage(s);let r=new Set(t.map(({oid:s})=>le(s).collection));this.context.log("changes to collections",r),this.context.entityEvents.emit("collectionsChanged",Array.from(r))};this.getInverseOperations=async t=>{let e=Vi(t),n=[],r=()=>this.meta.now;for(let[s,a]of Object.entries(e)){let l=await this.openFamilyCache(s),{view:p,deleted:h}=l.computeConfirmedView(s),v=qi(s,p,a,r);n.unshift(...v)}return n};this.createUndo=async t=>{let e=await this.getInverseOperations(t);return async()=>{let n=await this.createUndo(e);return await this.submitOperations(e.map(r=>(r.timestamp=this.meta.now,r)),{undoable:!1}),n}};this.delete=async(t,e)=>{V(t===U(t),"Only root documents may be deleted via client methods");let n=await this.meta.getAllDocumentRelatedOids(t),r=this.meta.patchCreator.createDeleteAll(n);await this.submitOperations(r,e)};this.deleteAll=async(t,e)=>{let n=await Promise.all(t.map(s=>this.meta.getAllDocumentRelatedOids(s))),r=this.meta.patchCreator.createDeleteAll(n.flat());await this.submitOperations(r,e)};this.reset=async()=>{this.context.log("warn","Resetting local database"),await this.resetStoredDocuments(),await this.refreshAllCaches(!0)};this.destroy=async()=>{this._disposed=!0;for(let t of this.unsubscribes)t();for(let t of this.documentFamilyCaches.values())t.dispose();this.documentFamilyCaches.clear(),await this.flushAllBatches()};this.handleRebase=t=>{this.log("debug","Reacting to rebases",t.length),this.addBaselinesToOpenCaches(t,{isLocal:!0})};this.resetStoredDocuments=async()=>{let t=this.db.transaction(Object.keys(this.schema.collections),"readwrite");for(let e of Object.keys(this.schema.collections)){let n=t.objectStore(e);await W(n.clear())}};this.refreshAllCaches=async(t=!1,e=!1)=>{for(let[n,r]of this.documentFamilyCaches)await this.refreshFamilyCache(r,t,e)};this.context=t,this.defaultBatchTimeout=n,this.meta=e,this.files=r,this.operationBatcher=new Le(this.flushOperations),this.operationBatcher.add({key:Zt,items:[],max:100,timeout:n,userData:{undoable:!0}}),this.unsubscribes.push(this.meta.subscribe("rebase",this.handleRebase))}get log(){return this.context.log}get db(){return this.context.documentDb}get undoHistory(){return this.context.undoHistory}get schema(){return this.context.schema}};var Gn=Symbol("handleMessage"),gs,at=class extends N{constructor({initialPresence:e,updateBatchTimeout:n=200,defaultProfile:r}){super();this._peers={};this._self={profile:{}};this._selfReplicaIds=new Set;this._peerIds=new Array;this.isSelf=(e,n)=>e.id===n.replicaId||this._selfReplicaIds.has(n.replicaId)||this._self.id===n.id;this[gs]=async(e,n)=>{let r=!1,s=new Set(this.peerIds);if(n.type==="presence-changed")this.isSelf(e,n.userInfo)?(this._self=n.userInfo,this._selfReplicaIds.add(n.userInfo.replicaId),this.emit("selfChanged",n.userInfo)):(s.add(n.userInfo.id),this._peers[n.userInfo.id]=n.userInfo,r=!0,this.emit("peerChanged",n.userInfo.id,n.userInfo));else if(n.type==="sync-resp"){this._peers={},s.clear();for(let[a,l]of Object.entries(n.peerPresence))this.isSelf(e,l)?(this._self=l,this._selfReplicaIds.add(l.replicaId),this.emit("selfChanged",l)):(r=!0,s.add(a),this._peers[a]=l,this.emit("peerChanged",a,l))}else if(n.type==="presence-offline"){s.delete(n.userId),this._selfReplicaIds.delete(n.replicaId);let a=this._peers[n.userId];delete this._peers[n.userId],r=!0,this.emit("peerLeft",n.userId,a)}r&&(this._peerIds=Array.from(s),this.emit("peersChanged",this._peers))};this.update=async e=>{this._updateBatch.update({items:[e]}),this.self.presence={...this.self.presence,...e},this.emit("selfChanged",this.self)};this.flushPresenceUpdates=e=>{let n=e.reduce((r,s)=>({...r,...s}),this.self.presence);this.emit("update",n)};this.self.presence=e,this.self.profile=r,this._updateBatcher=new Le(this.flushPresenceUpdates),this._updateBatch=this._updateBatcher.add({max:25,timeout:n,items:[],key:"default"})}static{gs=Gn}get self(){return this._self}get peers(){return this._peers}get peerIds(){return this._peerIds}get everyone(){let e={...this._peers};return e[this.self.id]=this.self,e}get selfReplicaIds(){return this._selfReplicaIds}};var tn=class{constructor({endpointProvider:t,log:e}){this.uploadFile=async t=>{let e=t.file;if(!e)throw new Error("Cannot upload a non-local file");let{files:n,token:r}=await this.endpointProvider.getEndpoints(),s=new window.FormData;s.append("file",e);try{let a=await fetch(n+`/${t.id}`,{method:"POST",body:s,credentials:"include",headers:{Authorization:`Bearer ${r}`}});return a.ok?{success:!0,retry:!1}:(this.log("error","File upload failed",a.status,await a.text()),{success:!1,retry:a.status>=500})}catch(a){return this.log("error","File upload failed",a),{success:!1,retry:!0}}};this.getFile=async t=>{let{files:e,token:n}=await this.endpointProvider.getEndpoints();try{let r=await fetch(e+`/${t}`,{method:"GET",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`}});return r.ok?{success:!0,data:await r.json()}:(this.log("error","File information fetch failed",r.status,await r.text()),{success:!1,retry:r.status>=500||r.status===404})}catch(r){return this.log("error","File information fetch failed",r),{success:!1,retry:!0}}};this.endpointProvider=t,this.log=e}};var Ue=class extends N{constructor({interval:e=15*1e3,deadlineLength:n=3*1e3,restartOnTabFocus:r=!0}={}){super();this.nextBeat=null;this.deadline=null;this.keepAlive=()=>{this.deadline&&(clearTimeout(this.deadline),this.deadline=null,this.start())};this.start=(e=!1)=>{this.stop(),e?this.beat():this.nextBeat=setTimeout(this.beat,this._interval)};this.stop=()=>{this.nextBeat&&clearTimeout(this.nextBeat),this.deadline&&clearTimeout(this.deadline)};this.beat=async()=>{this.emit("beat"),this.deadline=setTimeout(this.onDeadline,this.deadlineLength)};this.onDeadline=()=>{this.deadline=null,this.emit("missed")};this.setInterval=e=>{this._interval=e};this._interval=e,this.deadlineLength=n,typeof window<"u"&&r&&(window.addEventListener("pageshow",()=>this.start(!0)),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&this.start(!0)}))}get interval(){return this._interval}};var nn=class extends N{constructor({endpointProvider:e,meta:n,presence:r,interval:s=15*1e3,log:a=()=>{}}){super();this.mode="pull";this._isConnected=!1;this._status="paused";this._hasSynced=!1;this.setInterval=e=>{this.heartbeat.setInterval(e)};this.sendRequest=async e=>{this.log("Sending sync request",e);try{let{http:n,token:r}=await this.endpointProvider.getEndpoints(),s=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({messages:e}),credentials:"include"});if(s.ok){this.heartbeat.keepAlive();let a=await s.json();for(let l of a.messages)this.handleServerMessage(l);this._isConnected||(this._isConnected=!0,this.emit("onlineChange",!0))}else this.log("Sync request failed",s.status,await s.text()),this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1)),s.status>=500&&this.heartbeat.keepAlive()}catch(n){this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1)),this.log(n),this.heartbeat.keepAlive()}};this.handleServerMessage=async e=>{e.type==="sync-resp"&&(e.ackThisNonce&&(this.log("Sending sync ack",e.ackThisNonce),this.sendRequest([await this.meta.messageCreator.createAck(e.ackThisNonce)])),this._hasSynced=!0),this.emit("message",e)};this.send=e=>{switch(e.type){case"presence-update":case"sync":case"heartbeat":return this.sendRequest([e]);case"op":if(this._hasSynced)return this.sendRequest([e]);break}};this.dispose=()=>{};this.onHeartbeat=async()=>{this.sendRequest([await this.meta.messageCreator.createPresenceUpdate(this.presence.self.presence),await this.meta.messageCreator.createSyncStep1()])};this.onHeartbeatMissed=async()=>{this.emit("onlineChange",!1),this.log("Missed heartbeat"),this._isConnected=!1};this.log=a,this.meta=n,this.presence=r,this.endpointProvider=e,this.heartbeat=new Ue({interval:s}),this.heartbeat.subscribe("beat",this.onHeartbeat),this.heartbeat.subscribe("missed",this.onHeartbeatMissed)}get interval(){return this.heartbeat.interval}start(){this.status!=="active"&&(this.heartbeat.start(!0),this._status="active")}stop(){this.heartbeat.stop(),this._status="paused"}reconnect(){this.heartbeat.start(!0)}get isConnected(){return this._isConnected}get status(){return this._status}};function Xn(i){this.message=i}Xn.prototype=new Error,Xn.prototype.name="InvalidCharacterError";var sr=typeof window<"u"&&window.atob&&window.atob.bind(window)||function(i){var t=String(i).replace(/=+$/,"");if(t.length%4==1)throw new Xn("'atob' failed: The string to be decoded is not correctly encoded.");for(var e,n,r=0,s=0,a="";n=t.charAt(s++);~n&&(e=r%4?64*e+n:n,r++%4)?a+=String.fromCharCode(255&e>>(-2*r&6)):0)n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(n);return a};function bs(i){var t=i.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(sr(e).replace(/(.)/g,function(n,r){var s=r.charCodeAt(0).toString(16).toUpperCase();return s.length<2&&(s="0"+s),"%"+s}))}(t)}catch{return sr(t)}}function rn(i){this.message=i}function ws(i,t){if(typeof i!="string")throw new rn("Invalid token specified");var e=(t=t||{}).header===!0?0:1;try{return JSON.parse(bs(i.split(".")[e]))}catch(n){throw new rn("Invalid token specified: "+n.message)}}rn.prototype=new Error,rn.prototype.name="InvalidTokenError";var or=ws;var sn=class{constructor(t){this.config=t;this.cached=null;this.type=0;this.getEndpoints=async()=>{if(this.cached)return this.cached;let t;this.config.fetchAuth?t=await this.config.fetchAuth():t=await fetch(this.config.authEndpoint,{credentials:"include"}).then(l=>{if(l.ok)return l.json();throw new Error(`Auth endpoint returned non-200 response: ${l.status}`)}),V(t.accessToken,"No access token provided from auth endpoint");let e=or(t.accessToken);V(e.url,"No sync endpoint provided from auth endpoint"),V(e.type!==void 0,"No replica type provided from auth endpoint"),this.type=parseInt(e.type+"");let n=new URL(e.url);n.protocol=n.protocol.replace("ws","http");let r=n.toString();n.protocol=n.protocol.replace("http","ws");let s=n.toString(),a=e.file;if(!a){let l=new URL(r);l.pathname=l.pathname+"/files",a=l.toString()}return this.cached={http:r,websocket:s,files:a,token:t.accessToken},this.cached};if(!t.authEndpoint&&!t.fetchAuth)throw new Error("Either authEndpoint or fetchAuth must be provided to ServerSyncEndpointProvider")}};var on=class extends N{constructor(e){super();this.timer=null;this.isScheduled=!1;this.next=()=>{this.isScheduled||(this.isScheduled=!0,this.timer=setTimeout(()=>{this.emit("trigger"),this.isScheduled=!1,this.backoff.next()},this.backoff.current))};this.reset=()=>{this.backoff.reset(),this.timer&&(clearTimeout(this.timer),this.timer=null)};this.backoff=e}},an=class{constructor(t,e){this.current=0;this.next=()=>{this.current=Math.min(this.max,this.current*this.factor)};this.reset=()=>{this.current=0};this.max=t,this.factor=e}};var cn=class extends N{constructor({endpointProvider:e,meta:n,presence:r,log:s}){super();this.socket=null;this.connectQueue=[];this.syncQueue=[];this._status="paused";this.synced=!1;this.hasStartedSync=!1;this.mode="realtime";this.log=(...e)=>{};this.heartbeat=new Ue;this.reconnectScheduler=new on(new an(60*1e3,1.5));this.onOpen=()=>{if(!this.socket)throw new Error("Invalid sync state: online but socket is null");if(this.synced=!1,this.connectQueue.length){for(let e of this.connectQueue)this.log("Sending queued message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e));this.connectQueue=[]}this.log("Sync connected"),this.onOnlineChange(!0),this.reconnectScheduler.reset()};this.onOnlineChange=async e=>{this.log("Socket online change",e),e?(this.log("Starting sync"),this.hasStartedSync=!0,this.synced=!1,this.send(await this.meta.messageCreator.createPresenceUpdate(this.presence.self.presence)),this.send(await this.meta.messageCreator.createSyncStep1()),this.heartbeat.start()):(this.hasStartedSync=!1,this.synced=!1,this.heartbeat.stop()),this.emit("onlineChange",e)};this.onMessage=async e=>{let n=JSON.parse(e.data);switch(n.type){case"sync-resp":if(n.ackThisNonce&&this.send(await this.meta.messageCreator.createAck(n.ackThisNonce)),this.hasStartedSync=!0,this.synced=!0,this.syncQueue.length){for(let r of this.syncQueue)this.send(r);this.syncQueue=[]}case"need-since":case"presence-changed":case"presence-offline":this.emit("message",n);break;case"op-re":if(!this.hasStartedSync){this.log("Skipping op-re message because sync hasn't started yet",n);break}this.emit("message",n);break;case"heartbeat-response":this.heartbeat.keepAlive(),this.emit("message",n);break;default:this.synced&&this.emit("message",n);break}};this.onError=e=>{this.log(e),this.reconnectScheduler.next(),this.log("Attempting reconnect to websocket sync")};this.onClose=e=>{this.log("Sync disconnected"),this.onOnlineChange(!1),this.onError(e)};this.initializeSocket=async()=>{let e=await this.endpointProvider.getEndpoints();return this.socket=new WebSocket(e.websocket,["Bearer",e.token]),this.socket.addEventListener("message",this.onMessage),this.socket.addEventListener("open",this.onOpen),this.socket.addEventListener("error",this.onError),this.socket.addEventListener("close",this.onClose),this.socket};this.sendHeartbeat=async()=>{this.send(await this.meta.messageCreator.createHeartbeat())};this.reconnect=()=>{this.stop(),this.start()};this.canSkipSyncWait=e=>e.type==="sync"||e.type==="presence-update"||e.type==="sync-ack"||e.type==="heartbeat";this.send=e=>{this.status==="active"&&(!this.hasStartedSync&&!this.canSkipSyncWait(e)||(this.canSkipSyncWait(e)?this.socket?.readyState===WebSocket.OPEN?(this.log("Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):(this.log("Enqueueing message until socket is open",JSON.stringify(e,null,2)),this.connectQueue.push(e)):this.synced?this.socket?.readyState===WebSocket.OPEN&&(this.log("Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):this.hasStartedSync&&(this.log("Enqueueing message until synced",JSON.stringify(e,null,2)),this.syncQueue.push(e))))};this.dispose=()=>{this.socket?.removeEventListener("message",this.onMessage),this.socket?.removeEventListener("close",this.onClose),this.socket?.close()};this.start=()=>{this.socket||(this.initializeSocket(),this._status="active")};this.stop=()=>{this.dispose(),this.socket=null,this._status="paused"};this.log=s||this.log,this.endpointProvider=e,this.meta=n,this.presence=r,this.reconnectScheduler.subscribe("trigger",this.initializeSocket),this.heartbeat.subscribe("beat",this.sendHeartbeat)}get isConnected(){return this.socket?.readyState===WebSocket.OPEN}get status(){return this._status}};var ln=class extends N{constructor(){super(...arguments);this.mode="pull";this.dispose=()=>{};this.isConnected=!1;this.status="paused";this.pullInterval=0;this.presence=new at({initialPresence:{},defaultProfile:{}});this.uploadFile=async()=>({success:!1,retry:!1});this.getFile=async()=>({success:!1,retry:!1})}send(){}start(){}stop(){}reconnect(){}setMode(){}setPullInterval(){}},Ke=class extends N{constructor({authEndpoint:e,fetchAuth:n,initialPresence:r,automaticTransportSelection:s=!0,autoStart:a,initialTransport:l,pullInterval:p,presenceUpdateBatchTimeout:h,defaultProfile:v,useBroadcastChannel:E},{meta:b,log:P,onData:g}){super();this.broadcastChannel=null;this._activelySyncing=!1;this.handleBroadcastChannelMessage=e=>{e.data.type==="sync"&&this.handleMessage(e.data.message)};this.handleMessage=async e=>{if(e.type==="op-re"||e.type==="sync-resp")for(let n of e.operations)this.meta.time.update(n.timestamp);switch(this.log("sync message",JSON.stringify(e,null,2)),e.type){case"op-re":await this.onData({operations:e.operations,baselines:e.baselines}),e.globalAckTimestamp&&await this.meta.setGlobalAck(e.globalAckTimestamp);break;case"global-ack":await this.meta.setGlobalAck(e.timestamp);break;case"sync-resp":this._activelySyncing=!0,this.emit("syncingChange",!0),await this.onData({operations:e.operations,baselines:e.baselines,reset:e.overwriteLocalData}),e.globalAckTimestamp&&await this.meta.setGlobalAck(e.globalAckTimestamp),await this.meta.updateLastSynced(e.ackedTimestamp),this._activelySyncing=!1,this.emit("syncingChange",!1);break;case"need-since":this.activeSync.send(await this.meta.messageCreator.createSyncStep1(e.since));break;case"server-ack":await this.meta.updateLastSynced(e.timestamp)}this.broadcastChannel?.postMessage({type:"sync",message:e}),this.presence[Gn](await this.meta.localReplica.get(),e)};this.handleOnlineChange=e=>{this.emit("onlineChange",e)};this.handlePresenceUpdate=async e=>{this.send(await this.meta.messageCreator.createPresenceUpdate(e))};this.setMode=e=>{if(e==="realtime"&&!this.canDoRealtime)throw new Error("Cannot switch to realtime mode, because the current auth token does not allow it");let n;e==="realtime"?n=this.webSocketSync:n=this.pushPullSync,n!==this.activeSync&&(this.log("switching to",e,"mode"),this.activeSync.status==="active"&&n.start(),this.activeSync.stop(),this.activeSync=n)};this.setPullInterval=e=>{this.pushPullSync.setInterval(e)};this.send=e=>{if(this.activeSync.status==="active")return this.activeSync.send(e)};this.uploadFile=async e=>this.activeSync.status==="active"?this.fileSync.uploadFile(e):{success:!1,retry:!1};this.getFile=async e=>{if(this.activeSync.status==="active")return this.fileSync.getFile(e);throw new Error("Offline, cannot retrieve remote file details")};this.start=()=>this.activeSync.start();this.stop=()=>this.activeSync.stop();this.dispose=()=>{this.webSocketSync.dispose(),this.pushPullSync.dispose()};this.reconnect=()=>this.activeSync.reconnect();if(this.meta=b,this.onData=g,this.log=P||(()=>{}),this.presence=new at({initialPresence:r,defaultProfile:v,updateBatchTimeout:h}),this.endpointProvider=new sn({authEndpoint:e,fetchAuth:n}),this.webSocketSync=new cn({endpointProvider:this.endpointProvider,meta:b,presence:this.presence,log:this.log}),this.pushPullSync=new nn({endpointProvider:this.endpointProvider,meta:b,presence:this.presence,log:this.log,interval:p}),this.fileSync=new tn({endpointProvider:this.endpointProvider,log:this.log}),E&&"BroadcastChannel"in window&&(this.broadcastChannel=new BroadcastChannel("verdant"),this.broadcastChannel.addEventListener("message",this.handleBroadcastChannelMessage)),l==="realtime"?this.activeSync=this.webSocketSync:this.activeSync=this.pushPullSync,this.presence.subscribe("update",this.handlePresenceUpdate),this.meta.subscribe("message",this.send),this.webSocketSync.subscribe("message",this.handleMessage),this.webSocketSync.subscribe("onlineChange",this.handleOnlineChange),this.pushPullSync.subscribe("message",this.handleMessage),this.pushPullSync.subscribe("onlineChange",this.handleOnlineChange),s&&this.canDoRealtime){let O=()=>{C&&clearTimeout(C);let S=Object.keys(this.presence.peers).length>0||s!=="peers-only"&&this.presence.selfReplicaIds.size>1;S&&this.mode==="pull"?this.setMode("realtime"):!S&&this.mode==="realtime"&&(C=setTimeout(()=>{Object.keys(this.presence.peers).length===0&&this.setMode("pull")},1e3))},C;this.presence.subscribe("peersChanged",O),s!=="peers-only"&&this.presence.subscribe("selfChanged",O)}a&&this.start()}get canDoRealtime(){return this.endpointProvider.type===0||this.endpointProvider.type===2||this.endpointProvider.type===5}get syncing(){return this._activelySyncing}get pullInterval(){return this.pushPullSync.interval}get isConnected(){return this.activeSync.isConnected}get status(){return this.activeSync.status}get mode(){return this.activeSync.mode}};var ze=class{constructor(){this._disposes=[];this.disposed=!1;this.dispose=()=>{this.disposed=!0,this._disposes.forEach(t=>t()),this._disposes=[]};this.addDispose=t=>{this._disposes.push(t)}}};function Ss(i){return i!==null}function Zn(i){return Array.isArray(i)?i.map(Zn).filter(Ss):i instanceof ye&&i.deleted?null:i}function Oe(i,t){return!i&&!t||i&&t&&Se(i)===Se(t)}var ei=Symbol("ON_ALL_UNSUBSCRIBED"),ue=Symbol("UPDATE"),xs,pe=class extends ze{constructor({initial:e,context:n,collection:r,key:s,shouldUpdate:a}){super();this._internalUnsubscribes=[];this._status="initial";this._executionPromise=null;this.setValue=e=>{this._rawValue=e,this.subscribeToDeleteAndRestore(this._rawValue),this._value=Zn(e),this._status="ready",this._events.emit("change",this._value)};this.refreshValue=()=>{this.setValue(this._rawValue)};this.subscribeToDeleteAndRestore=e=>{for(;this._internalUnsubscribes.length;)this._internalUnsubscribes.pop()?.();Array.isArray(e)?e.forEach(n=>{n instanceof ye&&(this._internalUnsubscribes.push(n.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(n.subscribe("restore",this.refreshValue)))}):e instanceof ye&&(this._internalUnsubscribes.push(e.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(e.subscribe("restore",()=>{this.refreshValue()})))};this.execute=()=>(this.context.log("debug","Executing query",this.key),this._status==="initial"?this._status="initializing":this._status==="ready"&&(this._status="revalidating"),this._executionPromise=this.run().then(()=>this._value).catch(e=>{if(e instanceof Error&&(e.name==="InvalidStateError"||e.name==="InvalidAccessError"))return this._value;throw e}),this._executionPromise);this[xs]=e=>{this._allUnsubscribedHandler=e};this._rawValue=e,this._value=e,this._events=new N(p=>{p==="change"&&this._allUnsubscribedHandler?.(this)}),this.context=n,this.key=s,this.collection=r;let l=a||(p=>p.includes(r));this.addDispose(this.context.entityEvents.subscribe("collectionsChanged",p=>{l(p)&&(this.context.log("info","Updating query",this.key),this.execute())}))}static{xs=ei}get current(){return this._value}get resolved(){return this.status==="ready"?Promise.resolve(this._value):this._executionPromise??this.execute()}get subscribed(){return this._events.totalSubscriberCount()>0}get status(){return this._status}subscribe(e,n){if(n===void 0&&typeof e=="function")return this.resolved,this._events.subscribe("change",e);if(e==="change"&&n!==void 0)return this.resolved,this._events.subscribe("change",n);if(e==="statusChange"&&typeof n=="function")return this._events.subscribe(e,n);throw new Error("Invalid invocation of Query.subscribe")}};var dn=class extends pe{constructor({id:e,hydrate:n,...r}){super({initial:null,...r});this.run=async()=>{let e=await this.hydrate(this.oid);this.setValue(e)};this.oid=Z(r.collection,e),this.hydrate=n}};var Os,un=class extends pe{constructor({index:e,hydrate:n,...r}){super({initial:null,...r});this.run=async()=>{let e=await zt({collection:this.collection,index:this.index,context:this.context});this.setValue(e?await this.hydrate(e):null)};this[Os]=e=>{Oe(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=n}static{Os=ue}};var Is,fn=class extends pe{constructor({index:e,hydrate:n,pageSize:r,page:s,...a}){super({initial:[],...a});this._hasNextPage=!1;this.run=async()=>{let{result:e,hasNextPage:n}=await nt({collection:this.collection,index:this.index,context:this.context,limit:this._pageSize,offset:this._page*this._pageSize});this._hasNextPage=n,this.setValue(await Promise.all(e.map(this.hydrate)))};this.nextPage=async()=>{this.hasNextPage&&(this._page++,await this.run())};this.previousPage=async()=>{this._page!==0&&(this._page--,await this.run())};this.setPage=async e=>{this._page=e,await this.run()};this[Is]=e=>{Oe(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=n,this._pageSize=r,this._page=s}static{Is=ue}get pageSize(){return this._pageSize}get page(){return this._page}get hasNextPage(){return this._hasNextPage}get hasPreviousPage(){return this._page>0}};var Ds,pn=class extends pe{constructor({hydrate:e,pageSize:n,index:r,...s}){super({initial:[],...s});this._upToPage=1;this._hasNextPage=!1;this.run=async()=>{let{result:e,hasNextPage:n}=await nt({collection:this.collection,context:this.context,limit:this._pageSize*this._upToPage,offset:0,index:this.index});this._hasNextPage=n,this.setValue(await Promise.all(e.map(this.hydrate)))};this.loadMore=async()=>{let{result:e,hasNextPage:n}=await nt({collection:this.collection,context:this.context,limit:this._pageSize,offset:this._pageSize*this._upToPage,index:this.index});this._hasNextPage=n,this._upToPage++,this.setValue([...this.current,...await Promise.all(e.map(this.hydrate))])};this[Ds]=e=>{Oe(this.index,e)||(this.index=e,this.execute())};this.index=r,this.hydrate=e,this._pageSize=n}static{Ds=ue}get pageSize(){return this._pageSize}get hasMore(){return this._hasNextPage}};var Cs,hn=class extends pe{constructor({index:e,hydrate:n,...r}){super({initial:[],...r});this.run=async()=>{let e=await $t({collection:this.collection,index:this.index,context:this.context});this.setValue(await Promise.all(e.map(this.hydrate)))};this[Cs]=e=>{Oe(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=n}static{Cs=ue}};var mn=class{constructor({collection:t,cache:e,entities:n,context:r,documentManager:s}){this.serializeIndex=t=>t?Se(t):"";this.get=t=>{let e=`get:${this.collection}:${t}`;return this.cache.getOrSet(e,()=>new dn({id:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:e}))};this.findOne=({index:t,key:e}={})=>{let n=e||`findOne:${this.collection}:${this.serializeIndex(t)}`;return this.cache.getOrSet(n,()=>new un({index:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:n}),r=>{r[ue](t)})};this.findAll=({index:t,key:e}={})=>{let n=e||`findAll:${this.collection}:${this.serializeIndex(t)}`;return this.cache.getOrSet(n,()=>new hn({index:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:n}),r=>{r[ue](t)})};this.findPage=({index:t,pageSize:e,page:n,key:r})=>{let s=r||`findPage:${this.collection}:${this.serializeIndex(t)}:${e}`;return this.cache.getOrSet(s,()=>new fn({index:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:s,pageSize:e,page:n}),a=>{a[ue](t)})};this.findAllInfinite=({index:t,pageSize:e,key:n})=>{let r=n||`findAllInfinite:${this.collection}:${this.serializeIndex(t)}:${e}`;return this.cache.getOrSet(r,()=>new pn({index:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:r,pageSize:e}),s=>{s[ue](t)})};this.cache=e,this.collection=t,this.hydrate=n.get,this.context=r,this.documentManager=s,this.put=this.documentManager.create.bind(this.documentManager,this.collection),this.delete=this.documentManager.delete.bind(this.documentManager,this.collection),this.deleteAll=this.documentManager.deleteAllFromCollection.bind(this.documentManager,this.collection)}};var yn=class extends ze{constructor({evictionTime:e=5*1e3,context:n}){super();this._cache=new Map;this.onQueryUnsubscribed=e=>{setTimeout(()=>{e.subscribed||this._cache.get(e.key)===e&&this._cache.delete(e.key)},this._evictionTime)};this._evictionTime=e,this.context=n}get(e){return this._cache.get(e)||null}set(e){return this._cache.set(e.key,e),e[ei](this.onQueryUnsubscribed),e}getOrSet(e,n,r){let s=this.get(e);return s?(r?.(s),s):this.set(n())}};var Be=class extends N{constructor(e,n,r){super();this.config=e;this.context=n;this.addData=e=>this._entities.addData(e);this.stats=async()=>{let e=Object.keys(this.schema.collections),n={};for(let h of e)n[h]=await et(this.documentDb,h);let r=await this.meta.stats(),s=typeof navigator<"u"&&typeof navigator.storage<"u"&&"estimate"in navigator.storage?await navigator.storage.estimate():void 0,a=Object.values(n).reduce((h,{size:v})=>h+v,0),l=r.baselinesSize.size+r.operationsSize.size,p=l/a;return{collections:n,meta:r,storage:s,totalMetaSize:l,totalCollectionsSize:a,metaToDataRatio:p,quotaUsage:s?.usage&&s?.quota?s.usage/s.quota:void 0}};this.close=async()=>{this.sync.stop(),this.sync.dispose(),await this._entities.destroy(),this.meta.close(),await new Promise(async e=>{await Ae(this.documentDb),await Ae(this.metaDb),e()}),this.context.log?.("Client closed")};this.__dangerous__resetLocal=async()=>{this.sync.stop(),await Mt(this.namespace,indexedDB)};this.export=async()=>{let e=await this.meta.export();return Buffer.from(JSON.stringify(e))};this.import=async e=>{this.context.log("Importing data..."),await Ae(this.context.documentDb);let n=JSON.parse(e.toString());await this.meta.resetFrom(n);let r=n.schema.version,s=indexedDB.deleteDatabase([this.namespace,"collections"].join("_"));await new Promise((l,p)=>{s.onsuccess=l,s.onerror=p});let a=this.context.schema;this.context.schema=n.schema,this.context.documentDb=await it({meta:this.meta,migrations:this.config.migrations,context:this.context,version:r}),this.context.log("Re-initializing data from imported data..."),await this._entities.addData({operations:n.operations,baselines:n.baselines,reset:!0}),await Ae(this.context.documentDb),this.context.log("Migrating up to latest schema..."),this.context.schema=a,this.context.documentDb=await it({meta:this.meta,migrations:this.config.migrations,context:this.context,version:a.version})};this.meta=r.meta,this.collectionNames=Object.keys(n.schema.collections),this._sync=this.config.syncConfig&&!n.schema.wip?new Ke(this.config.syncConfig,{meta:this.meta,onData:this.addData,log:this.context.log}):new ln,n.schema.wip&&this.config.syncConfig&&n.log("warn","\u26A0\uFE0F\u26A0\uFE0F Sync is disabled for WIP schemas. Commit your schema changes to start syncing again. \u26A0\uFE0F\u26A0\uFE0F"),this._fileManager=new Jt({db:this.metaDb,sync:this.sync,context:this.context,config:this.config.files,meta:this.meta}),this._entities=new en({context:this.context,meta:this.meta,files:this._fileManager}),this._queryCache=new yn({context:n}),this._documentManager=new Ht(this.meta,this.schema,this._entities);let s=Mi(()=>{this.emit("futureSeen")},300);this.context.globalEvents.subscribe("futureSeen",s),this.documentDb.addEventListener("versionchange",()=>{this.context.log?.(`Another tab has requested a version change for ${this.namespace}`),this.documentDb.close(),typeof window<"u"&&window.location.reload()}),this.metaDb.addEventListener("versionchange",()=>{this.context.log?.(`Another tab has requested a version change for ${this.namespace}`),this.metaDb.close(),typeof window<"u"&&window.location.reload()});for(let[a,l]of Object.entries(n.schema.collections)){let p=a;this[p]=new mn({collection:p,cache:this._queryCache,context:this.context,entities:this.entities,documentManager:this.documentManager})}}get sync(){return this._sync}get entities(){return this._entities}get documentManager(){return this._documentManager}get documentDb(){return this.context.documentDb}get metaDb(){return this.context.metaDb}get schema(){return this.context.schema}get namespace(){return this.context.namespace}get undoHistory(){return this.context.undoHistory}get presence(){return this.sync.presence}get batch(){return this.entities.batch}};var ct=class{constructor(t){this.value=t}deref(){return this.value}};var gn=class{constructor(t){this.init=t;this._initializing=!1;this.initialize=async t=>{if(typeof window>"u"&&!t.indexedDb)throw new Error("A verdant client was initialized in an environment without IndexedDB. If you are using verdant in a server-rendered framework, you must enforce that all clients are initialized on the client-side, or you must provide some mock interface of IDBFactory to the ClientDescriptor options.");if(this._initializing||this._resolvedValue)return this._readyPromise;this._initializing=!0;try{let e;return t.schema.wip?e=await this.initializeWIPDatabases(t):(e=await this.initializeDatabases(t),this.cleanupWIPDatabases(t)),this.resolveReady(e),this._resolvedValue=e,e}catch(e){throw this.rejectReady(e),e}finally{this._initializing=!1}};this.initializeDatabases=async t=>{let{db:e}=await Ut({indexedDB:t.indexedDb,log:t.log,namespace:t.namespace}),n={namespace:this._namespace,metaDb:e,schema:t.schema,log:t.log||(()=>{}),undoHistory:t.undoHistory||new rt,entityEvents:new N,globalEvents:new N,weakRef:p=>t.EXPERIMENTAL_weakRefs?new WeakRef(p):new ct(p)},r=new tt({context:n,disableRebasing:t.disableRebasing});await r.updateSchema(t.schema,t.overrideSchemaConflict);let s=await it({context:n,version:t.schema.version,meta:r,migrations:t.migrations,indexedDB:t.indexedDb}),a=Object.assign(n,{documentDb:s});return new Be({syncConfig:t.sync,migrations:t.migrations,files:t.files},a,{meta:r})};this.initializeWIPDatabases=async t=>{let e=Se(t.schema);console.info(`WIP schema in use. Opening database with hash ${e}`);let n=`@@wip_${t.namespace}_${e}`,{db:r}=await Yi({indexedDB:t.indexedDb,log:t.log,namespace:t.namespace,wipNamespace:n}),s={namespace:this._namespace,metaDb:r,schema:t.schema,log:t.log||(()=>{}),undoHistory:t.undoHistory||new rt,entityEvents:new N,globalEvents:new N,weakRef:v=>t.EXPERIMENTAL_weakRefs?new WeakRef(v):new ct(v)},a=new tt({context:s,disableRebasing:t.disableRebasing});await a.updateSchema(t.schema,t.overrideSchemaConflict);let l=await er({context:s,version:t.schema.version,meta:a,migrations:t.migrations,indexedDB:t.indexedDb,wipNamespace:n}),p=Object.assign(s,{documentDb:l});return new Be({syncConfig:t.sync,migrations:t.migrations,files:t.files},p,{meta:a})};this.cleanupWIPDatabases=async t=>{let r=(await Qi(t.indexedDb)).filter(s=>s.name?.startsWith("@@wip_")).map(s=>s.name).filter(s=>!s.startsWith(`@@wip_${t.namespace}_${Se(t.schema)}`));for(let s of r)await Hi(s,t.indexedDb)};this.open=()=>this.initialize(this.init);this.close=async()=>{this._resolvedValue&&this._resolvedValue.close(),this._initializing&&(await this._readyPromise).close()};this.__dangerous__resetLocal=async()=>{await Mt(this.namespace)};this._readyPromise=new Promise((e,n)=>{this.resolveReady=e,this.rejectReady=n}),this._namespace=t.namespace}get namespace(){return this._namespace}get current(){return this._resolvedValue}get readyPromise(){return this._readyPromise}get schema(){return this.init.schema}};window.Verdant=ti;
13
+ - New indexes: ${Object.keys(s.addedIndexes).map(h=>s.addedIndexes[h].map(x=>`${h}.${x.name}`)).flatMap(h=>h).join(", ")}
14
+ - Removed indexes: ${Object.keys(s.removedIndexes).map(h=>s.removedIndexes[h].map(x=>`${h}.${x.name}`)).flatMap(h=>h).join(", ")}
15
+ `)}})}function nr({migration:i,meta:t,getMigrationNow:e,newOids:n}){return i.allCollections.reduce((r,s)=>(r[s]={put:async o=>{ve(i.newSchema.collections[s],o);let c=o[i.newSchema.collections[s].primaryKey],f=X(s,c);return n.push(f),await t.insertLocalOperation(xe(o,f,e)),o},delete:o=>{let c=X(s,o);return t.insertLocalOperation([{oid:c,timestamp:e(),data:{op:"delete"}}])}},r),{})}function ls({migration:i,context:t,meta:e}){return i.oldCollections.reduce((n,r)=>(n[r]={get:async s=>{let o=X(r,s);return await e.getDocumentSnapshot(o,{to:e.time.now(i.oldSchema.version)})},findOne:async s=>{let o=await zt({collection:r,index:s,context:t});return o?await e.getDocumentSnapshot(o,{to:e.time.now(i.oldSchema.version)}):null},findAll:async s=>{let o=await $t({collection:r,index:s,context:t});return await Promise.all(o.map(f=>e.getDocumentSnapshot(f,{to:e.time.now(i.oldSchema.version)})))}},n),{})}function ds({meta:i,migration:t,context:e}){function n(){return i.time.zero(t.version)}let r=new Array,s=ls({migration:t,context:e,meta:i}),o=nr({migration:t,getMigrationNow:n,newOids:r,meta:i}),c=new Array;return{log:e.log,newOids:r,migrate:async(h,x)=>{let E=await s[h].findAll();await Promise.all(E.filter(Boolean).map(async g=>{V(Xe(g),`Document is missing an OID: ${JSON.stringify(g)}`);let P=oe(g),b=await x(g);if(b){Ge(P),Ge(b),je(b);let v=Ze(P,b,n,void 0,[],{mergeUnknownObjects:!0});v.length>0&&await i.insertLocalOperation(v)}}))},queries:s,mutations:o,awaitables:c}}function us({meta:i,migration:t,context:e}){function n(){return i.time.zero(t.version)}let r=new Array,s=new Proxy({},{get(){throw new Error("Queries are not available in initial migrations; there is no database yet!")}}),o=nr({migration:t,getMigrationNow:n,newOids:r,meta:i});return{log:e.log,newOids:r,migrate:()=>{throw new Error("Calling migrate() in initial migrations is not supported! Use initial migrations to seed initial data using mutations.")},queries:s,mutations:o,awaitables:[]}}async function ps(i){return new Promise((t,e)=>{let n=i.getAllKeys();n.onsuccess=r=>{t(n.result)},n.onerror=r=>{e(n.error)}})}async function fs(i,t){let e=i.delete(t);return new Promise((n,r)=>{e.onsuccess=s=>{n()},e.onerror=s=>{r(e.error)}})}async function hs(i,t){let e=i.put(t);return new Promise((n,r)=>{e.onsuccess=s=>{n()},e.onerror=s=>{r(e.error)}})}async function ms({meta:i,currentVersion:t,newVersion:e}){let n=[];return await i.operations.iterateOverAllOperations(r=>n.push(r),{from:i.time.zero(t+1)}),Array.from(new Set(n.map(r=>U(r.oid))))}var rt=class extends N{constructor(){super(...arguments);this._undoable=[];this._undone=[];this.undo=async()=>{let e=this._undoable.pop();return e?(this._undone.push(await e()),this.emit("change"),!0):!1};this.redo=async()=>{let e=this._undone.pop();return e?(this._undoable.push(await e()),this.emit("change"),!0):!1};this.addUndo=e=>{this._undoable.push(e),this._undone=[],this.emit("change")};this.addRedo=e=>{this._undone.push(e),this.emit("change")};this.clear=()=>{this._undoable=[],this._undone=[],this.emit("change")}}get canUndo(){return this._undoable.length>0}get canRedo(){return this._undone.length>0}};var Ht=class{constructor(t,e,n){this.meta=t;this.schema=e;this.entities=n;this.getOid=(t,e)=>{let n=this.schema.collections[t].primaryKey,r=e[n];return V(r,`Document must have a primary key: ${n.toString()} (got: ${JSON.stringify(e)})`),X(t,r)};this.addDefaults=(t,e)=>{let n=this.schema.collections[t];return ve(n,e)};this.create=async(t,e,n={})=>{let r=this.addDefaults(t,e),s=this.getOid(t,r);return this.entities.create(r,s,n)};this.delete=async(t,e,n={})=>{let r=X(t,e);return this.entities.delete(r,n)};this.deleteAll=async(t,e={})=>this.entities.deleteAll(t.map(([n,r])=>X(n,r)),e);this.deleteAllFromCollection=async(t,e,n={})=>this.entities.deleteAll(e.map(r=>X(t,r)),n)}};var Ne=Symbol("entity-file-update"),st=Symbol("entity-file-mark-failed"),ys,gs,ke=class extends N{constructor(e,{downloadRemote:n=!1}={}){super();this.id=e;this._objectUrl=null;this._fileData=null;this._loading=!0;this._failed=!1;this._disposed=!1;this._downloadRemote=!1;this[ys]=e=>{this._loading=!1,this._failed=!1,this._disposed=!1,this._fileData=e,e.file&&(this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this._objectUrl=URL.createObjectURL(e.file)),this.emit("change")};this[gs]=()=>{this._failed=!0,this._loading=!1,this.emit("change")};this.dispose=()=>{this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this._disposed=!0};this._downloadRemote=n}static{ys=Ne,gs=st}get downloadRemote(){return this._downloadRemote}get url(){return this.loading?null:this._objectUrl?this._objectUrl:this._fileData?.url??null}get name(){return this._fileData?.name??null}get type(){return this._fileData?.type??null}get loading(){return this._loading}get failed(){return this._failed}};var ir=dt(ft(),1);function bs(i){return{id:(0,ir.default)(),file:i,url:void 0,remote:!1,name:i.name,type:i.type}}function Me(i,t){if(typeof window<"u"&&i instanceof File){let e=bs(i);return t(e),Di(e.id)}if(Array.isArray(i)){for(let e=0;e<i.length;e++)i[e]=Me(i[e],t);return i}if(typeof i=="object"){for(let e in i)i[e]=Me(i[e],t);return i}return i}function rr(i){return new Promise((t,e)=>{let n=new FileReader;n.onload=()=>{t(n.result)},n.onerror=e,n.readAsArrayBuffer(i)})}var Qt=class extends pe{constructor(){super(...arguments);this.addFile=async(e,{transaction:n,downloadRemote:r=!1}={})=>{let s=e.file?await rr(e.file):void 0;if(!s&&r&&e.url)try{s=await fetch(e.url,{method:"GET",credentials:"include"}).then(o=>o.arrayBuffer())}catch(o){console.error("Failed to download file to cache it locally. The file will still be available using its URL. Check the file server's CORS configuration.",o)}return this.run("files",o=>o.put({id:e.id,remote:e.remote?"true":"false",deletedAt:null,name:e.name,type:e.type,url:e.url,buffer:s}),"readwrite",n)};this.hydrateFileData=e=>{e.remote=e.remote==="true";let n=e.buffer;return delete e.buffer,e.file=n?ws(n,e.type):void 0,e};this.markUploaded=async(e,{transaction:n}={})=>{let r=await this.getFileRaw(e,{transaction:n});if(!r)throw new Error("File is not in local database");return this.run("files",s=>s.put({...r,remote:"true"}),"readwrite",n)};this.getFileRaw=async(e,{transaction:n}={})=>{let r=await this.run("files",s=>s.get(e),"readonly",n);if(r)return r};this.getFile=async(e,{transaction:n}={})=>{let r=await this.getFileRaw(e,{transaction:n});if(r)return this.hydrateFileData(r)};this.markPendingDelete=async(e,{transaction:n}={})=>{let r=await this.getFileRaw(e,{transaction:n});if(!r)throw new Error("File is not in local database");return this.run("files",s=>s.put({...r,deletedAt:Date.now()}),"readwrite",n)};this.listUnsynced=async()=>(await this.run("files",n=>n.index("remote").getAll("false"),"readonly")).map(this.hydrateFileData);this.iterateOverPendingDelete=(e,n)=>this.iterate("files",r=>r.index("deletedAt").openCursor(IDBKeyRange.lowerBound(0,!0)),(r,s)=>{e(this.hydrateFileData(r),s)},"readwrite",n)}deleteFile(e,{transaction:n}={}){return this.run("files",r=>r.delete(e),"readwrite",n)}};function ws(i,t){return new Blob([i],{type:t})}function vs(i){return i.deletedAt!==null&&i.deletedAt<Date.now()-1e3*60*24*3}var Jt=class{constructor({db:t,sync:e,context:n,meta:r,config:s={}}){this.files=new Map;this.add=async t=>{let e=t;if(e.remote=!1,this.files.has(e.id))this.files.get(e.id)[Ne](e);else{let n=new ke(e.id);n[Ne](e),this.files.set(e.id,n)}await this.storage.addFile(e),e.file&&((await this.sync.uploadFile(e)).success?await this.storage.markUploaded(e.id):this.context.log("error","Failed to upload file"))};this.uploadFile=async(t,e=0)=>{let n=await this.sync.uploadFile(t);n.success?await this.storage.markUploaded(t.id):n.retry&&e<5?(this.context.log("error","Error uploading file, retrying..."),setTimeout(this.uploadFile,1e3,t,e+1)):this.context.log("error","Failed to upload file. Not retrying until next sync.")};this.get=t=>{if(this.files.has(t))return this.files.get(t);let e=new ke(t);return this.files.set(t,e),this.load(e),e};this.load=async(t,e=0)=>{if(e>5){t[st]();return}let n=await this.storage.getFile(t.id);if(n)t[Ne](n);else try{let r=await this.sync.getFile(t.id);r.success?(t[Ne](r.data),await this.storage.addFile(r.data,{downloadRemote:t.downloadRemote})):(t[st](),r.retry&&setTimeout(this.load,1e3,t,e+1))}catch(r){this.context.log("error","Failed to load file",r),t[st](),setTimeout(this.load,1e3,t,e+1)}};this.listUnsynced=async()=>this.storage.listUnsynced();this.onOnlineChange=async t=>{if(t){let e=await this.listUnsynced();await Promise.all(e.map(this.uploadFile))}};this.tryCleanupDeletedFiles=async()=>{let t=0,e=0;await this.storage.iterateOverPendingDelete((n,r)=>{this.config.canCleanupDeletedFile(n)?(t++,r.delete(n.id)):e++}),this.context.log("info",`Cleaned up ${t} files, skipped ${e} files`)};this.handleFileRefsDeleted=async t=>{let e=this.storage.createTransaction(["files"],"readwrite");await Promise.all(t.map(async n=>{try{await this.storage.markPendingDelete(n.id,{transaction:e})}catch(r){this.context.log("error","Failed to mark file for deletion",r)}})),this.context.log("info",`Marked ${t.length} files as pending delete`)};this.storage=new Qt(t),this.sync=e,this.context=n,this.meta=r,this.config={canCleanupDeletedFile:vs,...s},this.sync.subscribe("onlineChange",this.onOnlineChange),this.meta.subscribe("filesDeleted",this.handleFileRefsDeleted),this.tryCleanupDeletedFiles()}};var sr="@@refresh",Yt="@@deepChange";function ot(i,t){return i[sr](t)}var Ss,xs,ye=class i{constructor({oid:t,store:e,fieldSchema:n,cache:r,parent:s,onAllUnsubscribed:o,readonlyKeys:c=[]}){this._current=null;this._deleted=!1;this.cachedSnapshot=null;this.cachedDestructure=null;this.cachedDeepUpdatedAt=null;this._updatedAt=null;this[Ss]=t=>{let{view:e,deleted:n,lastTimestamp:r}=this.cache.computeView(this.oid);this._current=e;let s=this._deleted&&!n;this._deleted=n,this.cachedDestructure=null,this._updatedAt=r||null,this.cachedDeepUpdatedAt=null,this._deleted?this.events.emit("delete",t):(this.events.emit("change",t),this[Yt](this,t)),s&&(this.cachedSnapshot=null,this.events.emit("restore",t))};this[xs]=(t,e)=>{this.cachedSnapshot=null,this.cachedDeepUpdatedAt=null,this.events.emit("changeDeep",t,e);let n=this.parent?.deref();n&&n[Yt](t,e)};this.getChildFieldSchema=t=>{if(this.fieldSchema.type==="object")return this.fieldSchema.properties[t];if(this.fieldSchema.type==="array")return this.fieldSchema.items;if(this.fieldSchema.type==="map")return this.fieldSchema.values;if(this.fieldSchema.type==="any")return this.fieldSchema;throw new Error("Invalid field schema")};this.dispose=()=>{this.events.dispose()};this.subscribe=(t,e)=>this.events.subscribe(t,e);this.addPatches=t=>{this.store.addLocalOperations(t)};this.cloneCurrent=()=>{if(this._current!==void 0)return oe(this._current)};this.getSubObject=(t,e)=>{let n=this.getChildFieldSchema(e);return this.cache.getEntity(t,n,this)};this.wrapValue=(t,e)=>{if(ne(t)){let n=t.id,r=this.getSubObject(n,e);if(r)return r;throw new Error(`CACHE MISS: Subobject ${n} does not exist on ${this.oid}`)}else if(se(t)){let n=this.store.getFile(t.id);if(n)return n.subscribe("change",()=>{this[Yt](this,{isLocal:!1})}),n}return t};this.processInputValue=(t,e)=>{t instanceof File||(t=oe(t,!1));let n=this.getChildFieldSchema(e);return n&&Pe(t,n),Me(t,this.store.addFile)};this.get=t=>{if(this.value===void 0||this.value===null)throw new Error("Cannot access deleted entity");let e=this.value[t];return this.wrapValue(e,t)};this.getAll=()=>{if(this.value===void 0||this.value===null)throw new Error("Cannot access deleted entity");if(this.cachedDestructure)return this.cachedDestructure;let t;if(Array.isArray(this.value))t=this.value.map((e,n)=>this.wrapValue(e,n));else{t={};for(let e in this.value)t[e]=this.get(e)}return this.cachedDestructure=t,t};this.getSnapshot=()=>{if(!this.value||this.deleted)return null;if(this.cachedSnapshot)return this.cachedSnapshot;let t;if(Array.isArray(this.value))t=this.value.map((e,n)=>ne(e)?this.getSubObject(e.id,n)?.getSnapshot():se(e)?this.getFileSnapshot(e):e);else{t={...this.value};for(let[e,n]of Object.entries(t))ne(n)?t[e]=this.getSubObject(n.id,e)?.getSnapshot():se(n)&&(t[e]=this.getFileSnapshot(n))}return K(t,this.oid),this.cachedSnapshot=t,t};this.keys=()=>Object.keys(this.value||{});this.entries=()=>Object.entries(this.getAll());this.values=()=>Object.values(this.getAll());this.set=(t,e)=>{if(this.readonlyKeys.includes(t))throw new Error(`Cannot set readonly key ${t.toString()}`);this.addPatches(this.store.patchCreator.createSet(this.oid,t,this.processInputValue(e,t)))};this.delete=t=>{if(Array.isArray(this.value))this.addPatches(this.store.patchCreator.createListDelete(this.oid,t,1));else{let e=this.getDeleteMode(t);if(!e)throw new Error(`Cannot delete key ${t} - the property is not marked as optional in the schema`);e==="delete"?this.addPatches(this.store.patchCreator.createRemove(this.oid,t)):this.addPatches(this.store.patchCreator.createSet(this.oid,t,null))}};this.getDeleteMode=t=>{if(this.readonlyKeys.includes(t))return!1;if(this.fieldSchema.type==="any"||this.fieldSchema.type==="map")return"delete";if(this.fieldSchema.type==="object"){let e=this.fieldSchema.properties[t];if(!e||e.type==="any")return"delete";if(e.type==="map")return!1;if(e.nullable)return"null"}return!1};this.remove=this.delete.bind(this);this.update=(t,{replaceSubObjects:e=!1,merge:n=!0}={replaceSubObjects:!1,merge:!0})=>{if(!n&&this.fieldSchema.type!=="any"&&this.fieldSchema.type!=="map")throw new Error('Cannot use .update without merge if the field has a strict schema type. merge: false is only available on "any" or "map" types.');for(let[s,o]of Object.entries(t)){if(this.readonlyKeys.includes(s))throw new Error(`Cannot set readonly key ${s.toString()}`);let c=this.getChildFieldSchema(s);c&&Pe(o,c)}let r=Me(t,this.store.addFile);this.addPatches(this.store.patchCreator.createDiff(this.getSnapshot(),K(r,this.oid),{mergeUnknownObjects:!e,defaultUndefined:n}))};this.getItemRefValue=t=>{if(typeof t=="object"){let e=ce(t);if(!e||!this.cache.hasOid(e))throw new Error(`Cannot move object ${JSON.stringify(t)} which does not exist in this list`);return e}else return t};this.push=t=>{this.addPatches(this.store.patchCreator.createListPush(this.oid,this.processInputValue(t,this.value.length)))};this.insert=(t,e)=>{this.addPatches(this.store.patchCreator.createListInsert(this.oid,t,this.processInputValue(e,t)))};this.move=(t,e)=>{this.addPatches(this.store.patchCreator.createListMoveByIndex(this.oid,t,e))};this.moveItem=(t,e)=>{let n=this.getItemRefValue(t);if(ne(n))this.addPatches(this.store.patchCreator.createListMoveByRef(this.oid,n,e));else{let r=this.value.indexOf(n);this.addPatches(this.store.patchCreator.createListMoveByIndex(this.oid,r,e))}};this.removeAll=t=>{this.addPatches(this.store.patchCreator.createListRemove(this.oid,this.getItemRefValue(t)))};this.removeFirst=t=>{this.addPatches(this.store.patchCreator.createListRemove(this.oid,this.getItemRefValue(t),"first"))};this.removeLast=t=>{this.addPatches(this.store.patchCreator.createListRemove(this.oid,this.getItemRefValue(t),"last"))};this.add=t=>{this.addPatches(this.store.patchCreator.createListAdd(this.oid,this.processInputValue(t,this.value.length)))};this.has=t=>typeof t=="object"?this.value.some(e=>ne(e)?e.id===ce(t):(se(e),!1)):this.value.includes(t);this.getAsWrapped=()=>{if(!this.isList)throw new Error("Cannot map items of a non-list");return this.value.map(this.wrapValue)};this.map=t=>this.getAsWrapped().map(t);this.filter=t=>this.getAsWrapped().filter((e,n)=>t(e,n));this.forEach=t=>{this.getAsWrapped().forEach(t)};this.some=t=>this.getAsWrapped().some(t);this.every=t=>this.getAsWrapped().every(t);this.find=t=>this.getAsWrapped().find(t);this.includes=t=>this.has(t);this.oid=t;let{collection:f}=ae(t);this.collection=f,this.store=e,this.fieldSchema=n,this.readonlyKeys=c,this.cache=r,this.parent=s&&this.cache.weakRef(s);let{view:h,deleted:x,lastTimestamp:E}=this.cache.computeView(t);if(this._current=h,this._deleted=x,this._updatedAt=E||null,this.cachedDeepUpdatedAt=null,this.events=new N(()=>{this.hasSubscribers||o?.()}),this.oid.includes(".")&&!this.parent)throw new Error("Parent must be provided for sub entities");V(!!n,"Field schema must be provided")}hasSubscribersToDeepChanges(){return this.events.subscriberCount("changeDeep")>0}get hasSubscribers(){if(this.events.totalSubscriberCount()>0)return!0;let t=this.parent?.deref();for(;t;){if(t.hasSubscribersToDeepChanges())return!0;t=t.parent?.deref()}return!1}get deleted(){return this._deleted}get value(){return this._current}get isList(){return Array.isArray(this._current)}get updatedAt(){return this._updatedAt}get deepUpdatedAt(){if(this.cachedDeepUpdatedAt)return this.cachedDeepUpdatedAt;let t=this._updatedAt;return this.isList?this.forEach(e=>{if(e instanceof i){let n=e.deepUpdatedAt;n&&(!t||n>t)&&(t=n)}}):this.values().forEach(e=>{if(e instanceof i){let n=e.deepUpdatedAt;n&&(!t||n>t)&&(t=n)}}),this.cachedDeepUpdatedAt=t,t}get uid(){return this.oid}getFileSnapshot(t){let e=this.store.getFile(t.id);return e.url?{id:t.id,url:e.url}:e.loading||e.failed?{id:t.id,url:void 0}:{id:t.id,url:null}}get length(){return this.value.length}[(Ss=sr,xs=Yt,Symbol.iterator)](){let t=0;return{next:()=>t<this.value.length?{value:this.get(t++),done:!1}:{value:void 0,done:!0}}}};var Gt=class{constructor(){let t,e;this.promise=new Promise((n,r)=>{t=n,e=r}),this._resolve=t,this._reject=e}resolve(t){this._resolve(t)}reject(t){this._reject(t)}};var Xt=class extends N{constructor({oid:e,store:n,context:r}){super();this.entities=new Map;this._initialized=new Gt;this.setInitialized=()=>{this._initialized.resolve(!0)};this.insertLocalOperations=e=>{let n=new Set;for(let r of e){let{oid:s}=r;n.add(s);let o=this.localOperationsMap.get(s)||[];o.push(r),this.localOperationsMap.set(s,o)}for(let r of n){let o=this.entities.get(r)?.deref();o&&(ot(o,{isLocal:!0}),this.emit(`change:${r}`),this.emit("change:*",r))}};this.insertOperations=(e,n)=>{for(let r of e){let{oid:s}=r;n.affectedOids?.add(s);let o=this.operationsMap.get(s)||[],c=o.findIndex(h=>h.timestamp>=r.timestamp);if(c!==-1){if(o[c].timestamp===r.timestamp)continue;o.splice(c,0,r)}else o.push(r);this.operationsMap.set(s,o);let f=this.localOperationsMap.get(s);f&&this.localOperationsMap.set(s,f.filter(h=>h.timestamp!==r.timestamp))}};this.insertBaselines=(e,{affectedOids:n})=>{for(let r of e){let{oid:s}=r,o=this.baselinesMap.get(s);if(o?.timestamp&&o.timestamp>=r.timestamp)continue;n?.add(s),this.baselinesMap.set(s,r);let c=this.operationsMap.get(s)||[];for(;c[0]?.timestamp<r.timestamp;)c.shift()}};this.addData=({operations:e,baselines:n,reset:r,isLocal:s})=>{r&&(this.operationsMap.clear(),this.baselinesMap.clear());let o={isLocal:s||!1,affectedOids:new Set};if(this.insertBaselines(n,o),this.insertOperations(e,o),r)for(let c of this.entities.values()){let f=c.deref();f&&ot(f,o)}else for(let c of o.affectedOids){let h=this.entities.get(c)?.deref();h&&(ot(h,o),this.emit(`change:${c}`),this.emit("change:*",c))}};this.applyOperations=(e,n,r,s)=>{let o,c=this.storeTools.now;for(let f of r)if(!(s&&f.timestamp<=s)){if(Ii(f.timestamp,c)>0){o=f.timestamp;continue}f.data.op==="delete"?n=!0:(e=Ee(e,f.data),f.data.op==="initialize"&&(n=!1))}return o&&this.context.globalEvents.emit("futureSeen",o),{view:e,deleted:n,empty:!e&&!r.length}};this.computeView=e=>{if(this.baselinesMap.size===0&&this.operationsMap.size===0&&this.localOperationsMap.size===0)return this.context.log("debug",`Entity ${e} accessed with no data at all`),{view:null,deleted:!0,lastTimestamp:null};let n=this.computeConfirmedView(e),r=this.localOperationsMap.get(e)||[];if(n.empty&&!r.length)return this.context.log("debug",`Entity ${e} accessed with no local data at all`),{view:null,deleted:!0,lastTimestamp:null};let{view:s,deleted:o}=this.applyOperations(n.view,n.deleted,r);return s&&K(s,e),{view:s,deleted:o,lastTimestamp:this.getLastTimestamp(e)}};this.computeConfirmedView=e=>{let n=this.baselinesMap.get(e),r=this.operationsMap.get(e)||[],s=oe(n?.snapshot||void 0),o=this.applyOperations(s,!s,r,n?.timestamp);return o.view&&K(o.view,e),o.empty&&this.context.log("debug",`Entity ${e} accessed with no confirmed data`),o};this.getLastTimestamp=e=>{let n=this.localOperationsMap.get(e);n?.length||(n=this.operationsMap.get(e)||[]);let r=null;return n.length?r=n[n.length-1]?.timestamp:r=this.baselinesMap.get(e)?.timestamp??null,r?this.storeTools.time.getWallClockTime(r):null};this.getEntity=(e,n,r,s)=>{let c=this.entities.get(e)?.deref();return c||(c=new ye({oid:e,cache:this,fieldSchema:n,store:this.storeTools,parent:r,readonlyKeys:s}),this.entities.set(e,this.context.weakRef(c))),c};this.hasOid=e=>this.operationsMap.has(e)||this.baselinesMap.has(e);this.dispose=()=>{this.entities.forEach(e=>e.deref()?.dispose()),this.entities.clear()};this.reset=({operations:e,baselines:n,dropExistingUnconfirmed:r=!1,unconfirmedOperations:s,dropAll:o})=>{this.context.log("debug",`Resetting cache for ${this.oid} with ${e.length} ops and ${n.length} baselines, dropUnconfirmed=${r}`);let c={isLocal:!1,affectedOids:new Set};o&&this.baselinesMap.clear(),this.insertBaselines(n,c),o&&this.operationsMap.clear(),this.insertOperations(e,c),(s||r)&&(this.localOperationsMap.clear(),s&&this.insertLocalOperations(s));for(let f of this.entities.keys()){let x=this.entities.get(f)?.deref();x&&(ot(x,c),this.emit(`change:${f}`),this.emit("change:*",f))}};this.oid=e,this.operationsMap=new Map,this.localOperationsMap=new Map,this.baselinesMap=new Map,this.storeTools={addLocalOperations:n.addLocalOperations,patchCreator:n.meta.patchCreator,addFile:n.files.add,getFile:n.files.get,time:n.meta.time,now:n.meta.now},this.context=r}get initializedPromise(){return this._initialized.promise}get weakRef(){return this.context.weakRef}};var Zt="@@default",en=class{constructor({context:t,meta:e,batchTimeout:n=200,files:r}){this.documentFamilyCaches=new Map;this.unsubscribes=[];this._disposed=!1;this.currentBatchKey=Zt;this.setContext=t=>{this.context=t};this.getDocumentSchema=t=>{let{collection:e}=ae(t);if(!this.schema.collections[e])return this.log("warn",`Missing schema for collection: ${e}`),{schema:null,readonlyKeys:[]};let n=this.schema.collections[e];return{readonlyKeys:[n.primaryKey],schema:{type:"object",properties:n.fields}}};this.refreshFamilyCache=async(t,e=!1,n=!1)=>{if(this._disposed){this.context.log("debug",`EntityStore is disposed, not refreshing ${t.oid} cache`);return}let r=this.meta.createTransaction(["baselines","operations"]),s=[],o=[];await Promise.all([this.meta.baselines.iterateOverAllForDocument(t.oid,c=>{s.push(c)},{transaction:r,mode:"readwrite"}),this.meta.operations.iterateOverAllOperationsForDocument(t.oid,c=>{c.confirmed=!0,o.push(c)},{transaction:r,mode:"readwrite"})]),t.reset({operations:o,baselines:s,dropExistingUnconfirmed:e,dropAll:n})};this.openFamilyCache=async t=>{let e=U(t),n=this.documentFamilyCaches.get(e);return n||(this.context.log("debug","opening family cache for",e),n=new Xt({oid:e,store:this,context:this.context}),this.documentFamilyCaches.set(e,n),await this.refreshFamilyCache(n),n.setInitialized()),await n.initializedPromise,n};this.onEntityChange=async t=>{};this.writeDocumentToStorage=async t=>{if(this._disposed){this.log("warn","EntityStore is disposed, not writing to storage");return}let e=U(t),{id:n,collection:r}=ae(e),s=await this.get(e);if(this._disposed){this.log("warn","EntityStore is disposed, not writing to storage");return}let o=s?.getSnapshot();if(o){let c=Tt(this.schema.collections[r],o);try{let h=this.db.transaction(r,"readwrite").objectStore(r);await W(h.put(c)),this.log("info","\u{1F4DD}","wrote",r,n,"to storage",c)}catch{this.log("\u26A0\uFE0F CRITICAL: possibly corrupt data couldn't be written to queryable storage. This is probably a bug in verdant! Please report at https://github.com/a-type/verdant/issues",`
16
+ `,"Invalid data:",JSON.stringify(c))}}else{let f=this.db.transaction(r,"readwrite").objectStore(r);await W(f.delete(n)),this.log("info","\u274C","deleted",r,n,"from storage")}};this.get=async t=>{let e=await this.openFamilyCache(t),{schema:n,readonlyKeys:r}=this.getDocumentSchema(t);return n?e.getEntity(t,n,void 0,r):null};this.getCached=t=>{let e=this.documentFamilyCaches.get(t);if(e){let{schema:n,readonlyKeys:r}=this.getDocumentSchema(t);return n?e.getEntity(t,n,void 0,r):null}return null};this.create=async(t,e,n)=>{xt(t);let r=Me(t,this.files.add);K(r,e);let s=this.meta.patchCreator.createInitialize(r,e),o=await this.openFamilyCache(e);o.insertLocalOperations(s),await this.submitOperations(s,n);let{schema:c,readonlyKeys:f}=this.getDocumentSchema(e);if(!c)throw new Error(`Cannot create a document in the ${ae(e).collection} collection; it is not defined in the current schema version.`);return o.getEntity(e,c,void 0,f)};this.addOperationsToOpenCaches=async(t,e)=>{let n=jn(t);Object.keys(n).forEach(s=>{let o=this.documentFamilyCaches.get(s);o&&(this.log("adding",e.confirmed?"confirmed":"unconfirmed","operations to cache",s,n[s].length),e.isLocal?o.insertLocalOperations(n[s]):o.insertOperations(n[s],e))})};this.addBaselinesToOpenCaches=async(t,e)=>{let n=Ln(t);Object.keys(n).forEach(s=>{let o=this.documentFamilyCaches.get(s);o&&(this.log("adding","baselines to cache",s,n[s].length),o.insertBaselines(n[s],e))})};this.addDataToOpenCaches=({baselines:t,operations:e,reset:n,isLocal:r})=>{let s=Ln(t),o=jn(e),c=Array.from(new Set(Object.keys(s).concat(Object.keys(o))));for(let f of c){let h=this.documentFamilyCaches.get(f);h?(h.addData({operations:o[f]||[],baselines:s[f]||[],reset:n,isLocal:r}),this.log("debug","Added data to cache for",f,o[f]?.length??0,"operations",s[f]?.length??0,"baselines")):this.log("debug","Could not add data to cache for",f,"because it is not open")}return c};this.addData=async({operations:t,baselines:e,reset:n})=>{if(this._disposed){this.log("warn","EntityStore is disposed, not adding data");return}let r=t;for(let c of r)c.confirmed=!1;let s=[];n?(this.log("Resetting local store to replicate remote synced data",e.length,"baselines, and",t.length,"operations"),await this.meta.reset(),await this.resetStoredDocuments(),s=Array.from(new Set(e.map(c=>U(c.oid)).concat(t.map(c=>U(c.oid)))))):s=this.addDataToOpenCaches({operations:r,baselines:e,reset:n}),await this.meta.insertRemoteBaselines(e),await this.meta.insertRemoteOperations(t),n&&await this.refreshAllCaches(!0,!0);for(let c of s)await this.writeDocumentToStorage(c);let o=Array.from(new Set(s.map(c=>ae(c).collection)));this.context.log("changes to collections",o),this.context.entityEvents.emit("collectionsChanged",o)};this.addLocalOperations=async t=>{this.log("Adding local operations",t.length),this.addOperationsToOpenCaches(t,{isLocal:!0,confirmed:!1}),this.operationBatcher.add({key:this.currentBatchKey,items:t})};this.batch=({undoable:t=!0,batchName:e=St(),max:n=null,timeout:r=this.defaultBatchTimeout}={})=>{let s=this.operationBatcher.add({key:e,max:n,timeout:r,items:[],userData:{undoable:t}}),o={run:c=>(this.currentBatchKey=e,c(),this.currentBatchKey=Zt,o),flush:async()=>(await this.operationBatcher.flush(Zt),s.flush()),discard:()=>{this.operationBatcher.discard(e)}};return o};this.flushPatches=async()=>{await this.operationBatcher.flush(this.currentBatchKey)};this.flushAllBatches=async()=>{await Promise.all(this.operationBatcher.flushAll())};this.flushOperations=async(t,e,n)=>{if(t.length){this.log("Flushing operations",t.length,"to storage / sync");for(let r of t)r.timestamp=this.meta.now;await this.submitOperations(t,n)}};this.submitOperations=async(t,{undoable:e=!0}={})=>{e&&this.undoHistory.addUndo(await this.createUndo(t)),await this.meta.insertLocalOperation(t),this.addDataToOpenCaches({operations:t,baselines:[]});let n=Array.from(new Set(t.map(s=>U(s.oid))));for(let s of n)await this.writeDocumentToStorage(s);let r=new Set(t.map(({oid:s})=>ae(s).collection));this.context.log("changes to collections",r),this.context.entityEvents.emit("collectionsChanged",Array.from(r))};this.getInverseOperations=async t=>{let e=Ni(t),n=[],r=()=>this.meta.now;for(let[s,o]of Object.entries(e)){let c=await this.openFamilyCache(s),{view:f,deleted:h}=c.computeConfirmedView(s),x=Wi(s,f,o,r);n.unshift(...x)}return n};this.createUndo=async t=>{let e=await this.getInverseOperations(t);return async()=>{let n=await this.createUndo(e);return await this.submitOperations(e.map(r=>(r.timestamp=this.meta.now,r)),{undoable:!1}),n}};this.delete=async(t,e)=>{V(t===U(t),"Only root documents may be deleted via client methods");let n=await this.meta.getAllDocumentRelatedOids(t),r=this.meta.patchCreator.createDeleteAll(n);await this.submitOperations(r,e)};this.deleteAll=async(t,e)=>{let n=await Promise.all(t.map(s=>this.meta.getAllDocumentRelatedOids(s))),r=this.meta.patchCreator.createDeleteAll(n.flat());await this.submitOperations(r,e)};this.reset=async()=>{this.context.log("warn","Resetting local database"),await this.resetStoredDocuments(),await this.refreshAllCaches(!0)};this.destroy=async()=>{this._disposed=!0;for(let t of this.unsubscribes)t();for(let t of this.documentFamilyCaches.values())t.dispose();this.documentFamilyCaches.clear(),await this.flushAllBatches()};this.handleRebase=t=>{this.log("debug","Reacting to rebases",t.length),this.addBaselinesToOpenCaches(t,{isLocal:!0})};this.resetStoredDocuments=async()=>{let t=this.db.transaction(Object.keys(this.schema.collections),"readwrite");for(let e of Object.keys(this.schema.collections)){let n=t.objectStore(e);await W(n.clear())}};this.refreshAllCaches=async(t=!1,e=!1)=>{for(let[n,r]of this.documentFamilyCaches)await this.refreshFamilyCache(r,t,e)};this.context=t,this.defaultBatchTimeout=n,this.meta=e,this.files=r,this.operationBatcher=new Le(this.flushOperations),this.operationBatcher.add({key:Zt,items:[],max:100,timeout:n,userData:{undoable:!0}}),this.unsubscribes.push(this.meta.subscribe("rebase",this.handleRebase))}get log(){return this.context.log}get db(){return this.context.documentDb}get undoHistory(){return this.context.undoHistory}get schema(){return this.context.schema}};var Xn=Symbol("handleMessage"),Os,at=class extends N{constructor({initialPresence:e,updateBatchTimeout:n=200,defaultProfile:r}){super();this._peers={};this._self={profile:{}};this._selfReplicaIds=new Set;this._peerIds=new Array;this.isSelf=(e,n)=>e.id===n.replicaId||this._selfReplicaIds.has(n.replicaId)||this._self.id===n.id;this[Os]=async(e,n)=>{let r=!1,s=new Set(this.peerIds);if(n.type==="presence-changed")this.isSelf(e,n.userInfo)?(this._self=n.userInfo,this._selfReplicaIds.add(n.userInfo.replicaId),this.emit("selfChanged",n.userInfo)):(s.add(n.userInfo.id),this._peers[n.userInfo.id]=n.userInfo,r=!0,this.emit("peerChanged",n.userInfo.id,n.userInfo));else if(n.type==="sync-resp"){this._peers={},s.clear();for(let[o,c]of Object.entries(n.peerPresence))this.isSelf(e,c)?(this._self=c,this._selfReplicaIds.add(c.replicaId),this.emit("selfChanged",c)):(r=!0,s.add(o),this._peers[o]=c,this.emit("peerChanged",o,c))}else if(n.type==="presence-offline"){s.delete(n.userId),this._selfReplicaIds.delete(n.replicaId);let o=this._peers[n.userId];delete this._peers[n.userId],r=!0,this.emit("peerLeft",n.userId,o)}r&&(this._peerIds=Array.from(s),this.emit("peersChanged",this._peers))};this.update=async e=>{this._updateBatch.update({items:[e]}),this.self.presence={...this.self.presence,...e},this.emit("selfChanged",this.self)};this.flushPresenceUpdates=e=>{let n=e.reduce((r,s)=>({...r,...s}),this.self.presence);this.emit("update",n)};this.self.presence=e,this.self.profile=r,this._updateBatcher=new Le(this.flushPresenceUpdates),this._updateBatch=this._updateBatcher.add({max:25,timeout:n,items:[],key:"default"})}static{Os=Xn}get self(){return this._self}get peers(){return this._peers}get peerIds(){return this._peerIds}get everyone(){let e={...this._peers};return e[this.self.id]=this.self,e}get selfReplicaIds(){return this._selfReplicaIds}};var tn=class{constructor({endpointProvider:t,log:e}){this.uploadFile=async t=>{let e=t.file;if(!e)throw new Error("Cannot upload a non-local file");let{files:n,token:r}=await this.endpointProvider.getEndpoints(),s=new window.FormData;s.append("file",e);try{let o=await fetch(n+`/${t.id}`,{method:"POST",body:s,credentials:"include",headers:{Authorization:`Bearer ${r}`}});return o.ok?{success:!0,retry:!1}:(this.log("error","File upload failed",o.status,await o.text()),{success:!1,retry:o.status>=500})}catch(o){return this.log("error","File upload failed",o),{success:!1,retry:!0}}};this.getFile=async t=>{let{files:e,token:n}=await this.endpointProvider.getEndpoints();try{let r=await fetch(e+`/${t}`,{method:"GET",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`}});return r.ok?{success:!0,data:await r.json()}:(this.log("error","File information fetch failed",r.status,await r.text()),{success:!1,retry:r.status>=500||r.status===404})}catch(r){return this.log("error","File information fetch failed",r),{success:!1,retry:!0}}};this.endpointProvider=t,this.log=e}};var Ue=class extends N{constructor({interval:e=15*1e3,deadlineLength:n=3*1e3,restartOnTabFocus:r=!0}={}){super();this.nextBeat=null;this.deadline=null;this.keepAlive=()=>{this.deadline&&(clearTimeout(this.deadline),this.deadline=null,this.start())};this.start=(e=!1)=>{this.stop(),e?this.beat():this.nextBeat=setTimeout(this.beat,this._interval)};this.stop=()=>{this.nextBeat&&clearTimeout(this.nextBeat),this.deadline&&clearTimeout(this.deadline)};this.beat=async()=>{this.emit("beat"),this.deadline=setTimeout(this.onDeadline,this.deadlineLength)};this.onDeadline=()=>{this.deadline=null,this.emit("missed")};this.setInterval=e=>{this._interval=e};this._interval=e,this.deadlineLength=n,typeof window<"u"&&r&&(window.addEventListener("pageshow",()=>this.start(!0)),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&this.start(!0)}))}get interval(){return this._interval}};var nn=class extends N{constructor({endpointProvider:e,meta:n,presence:r,interval:s=15*1e3,log:o=()=>{}}){super();this.mode="pull";this._isConnected=!1;this._status="paused";this._hasSynced=!1;this.setInterval=e=>{this.heartbeat.setInterval(e)};this.sendRequest=async e=>{this.log("Sending sync request",e);try{let{http:n,token:r}=await this.endpointProvider.getEndpoints(),s=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({messages:e}),credentials:"include"});if(s.ok){this.heartbeat.keepAlive();let o=await s.json();for(let c of o.messages)this.handleServerMessage(c);this._isConnected||(this._isConnected=!0,this.emit("onlineChange",!0))}else this.log("Sync request failed",s.status,await s.text()),this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1)),s.status>=500&&this.heartbeat.keepAlive()}catch(n){this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1)),this.log(n),this.heartbeat.keepAlive()}};this.handleServerMessage=async e=>{e.type==="sync-resp"&&(e.ackThisNonce&&(this.log("Sending sync ack",e.ackThisNonce),this.sendRequest([await this.meta.messageCreator.createAck(e.ackThisNonce)])),this._hasSynced=!0),this.emit("message",e)};this.send=e=>{switch(e.type){case"presence-update":case"sync":case"heartbeat":return this.sendRequest([e]);case"op":if(this._hasSynced)return this.sendRequest([e]);break}};this.dispose=()=>{};this.onHeartbeat=async()=>{this.sendRequest([await this.meta.messageCreator.createPresenceUpdate(this.presence.self.presence),await this.meta.messageCreator.createSyncStep1()])};this.onHeartbeatMissed=async()=>{this.emit("onlineChange",!1),this.log("Missed heartbeat"),this._isConnected=!1};this.log=o,this.meta=n,this.presence=r,this.endpointProvider=e,this.heartbeat=new Ue({interval:s}),this.heartbeat.subscribe("beat",this.onHeartbeat),this.heartbeat.subscribe("missed",this.onHeartbeatMissed)}get interval(){return this.heartbeat.interval}start(){this.status!=="active"&&(this.heartbeat.start(!0),this._status="active")}stop(){this.heartbeat.stop(),this._status="paused"}reconnect(){this.heartbeat.start(!0)}get isConnected(){return this._isConnected}get status(){return this._status}};function Zn(i){this.message=i}Zn.prototype=new Error,Zn.prototype.name="InvalidCharacterError";var or=typeof window<"u"&&window.atob&&window.atob.bind(window)||function(i){var t=String(i).replace(/=+$/,"");if(t.length%4==1)throw new Zn("'atob' failed: The string to be decoded is not correctly encoded.");for(var e,n,r=0,s=0,o="";n=t.charAt(s++);~n&&(e=r%4?64*e+n:n,r++%4)?o+=String.fromCharCode(255&e>>(-2*r&6)):0)n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(n);return o};function Is(i){var t=i.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(or(e).replace(/(.)/g,function(n,r){var s=r.charCodeAt(0).toString(16).toUpperCase();return s.length<2&&(s="0"+s),"%"+s}))}(t)}catch{return or(t)}}function rn(i){this.message=i}function Ds(i,t){if(typeof i!="string")throw new rn("Invalid token specified");var e=(t=t||{}).header===!0?0:1;try{return JSON.parse(Is(i.split(".")[e]))}catch(n){throw new rn("Invalid token specified: "+n.message)}}rn.prototype=new Error,rn.prototype.name="InvalidTokenError";var ar=Ds;var sn=class{constructor(t){this.config=t;this.cached=null;this.type=0;this.getEndpoints=async()=>{if(this.cached)return this.cached;let t;this.config.fetchAuth?t=await this.config.fetchAuth():t=await fetch(this.config.authEndpoint,{credentials:"include"}).then(c=>{if(c.ok)return c.json();throw new Error(`Auth endpoint returned non-200 response: ${c.status}`)}),V(t.accessToken,"No access token provided from auth endpoint");let e=ar(t.accessToken);V(e.url,"No sync endpoint provided from auth endpoint"),V(e.type!==void 0,"No replica type provided from auth endpoint"),this.type=parseInt(e.type+"");let n=new URL(e.url);n.protocol=n.protocol.replace("ws","http");let r=n.toString();n.protocol=n.protocol.replace("http","ws");let s=n.toString(),o=e.file;if(!o){let c=new URL(r);c.pathname=c.pathname+"/files",o=c.toString()}return this.cached={http:r,websocket:s,files:o,token:t.accessToken},this.cached};if(!t.authEndpoint&&!t.fetchAuth)throw new Error("Either authEndpoint or fetchAuth must be provided to ServerSyncEndpointProvider")}};var on=class extends N{constructor(e){super();this.timer=null;this.isScheduled=!1;this.next=()=>{this.isScheduled||(this.isScheduled=!0,this.timer=setTimeout(()=>{this.emit("trigger"),this.isScheduled=!1,this.backoff.next()},this.backoff.current))};this.reset=()=>{this.backoff.reset(),this.timer&&(clearTimeout(this.timer),this.timer=null)};this.backoff=e}},an=class{constructor(t,e){this.current=0;this.next=()=>{this.current=Math.min(this.max,this.current*this.factor)};this.reset=()=>{this.current=0};this.max=t,this.factor=e}};var cn=class extends N{constructor({endpointProvider:e,meta:n,presence:r,log:s}){super();this.socket=null;this.connectQueue=[];this.syncQueue=[];this._status="paused";this.synced=!1;this.hasStartedSync=!1;this.mode="realtime";this.log=(...e)=>{};this.heartbeat=new Ue;this.reconnectScheduler=new on(new an(60*1e3,1.5));this.onOpen=()=>{if(!this.socket)throw new Error("Invalid sync state: online but socket is null");if(this.synced=!1,this.connectQueue.length){for(let e of this.connectQueue)this.log("Sending queued message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e));this.connectQueue=[]}this.log("Sync connected"),this.onOnlineChange(!0),this.reconnectScheduler.reset()};this.onOnlineChange=async e=>{this.log("Socket online change",e),e?(this.log("Starting sync"),this.hasStartedSync=!0,this.synced=!1,this.send(await this.meta.messageCreator.createPresenceUpdate(this.presence.self.presence)),this.send(await this.meta.messageCreator.createSyncStep1()),this.heartbeat.start()):(this.hasStartedSync=!1,this.synced=!1,this.heartbeat.stop()),this.emit("onlineChange",e)};this.onMessage=async e=>{let n=JSON.parse(e.data);switch(n.type){case"sync-resp":if(n.ackThisNonce&&this.send(await this.meta.messageCreator.createAck(n.ackThisNonce)),this.hasStartedSync=!0,this.synced=!0,this.syncQueue.length){for(let r of this.syncQueue)this.send(r);this.syncQueue=[]}case"need-since":case"presence-changed":case"presence-offline":this.emit("message",n);break;case"op-re":if(!this.hasStartedSync){this.log("Skipping op-re message because sync hasn't started yet",n);break}this.emit("message",n);break;case"heartbeat-response":this.heartbeat.keepAlive(),this.emit("message",n);break;default:this.synced&&this.emit("message",n);break}};this.onError=e=>{this.log(e),this.reconnectScheduler.next(),this.log("Attempting reconnect to websocket sync")};this.onClose=e=>{this.log("Sync disconnected"),this.onOnlineChange(!1),this.onError(e)};this.initializeSocket=async()=>{let e=await this.endpointProvider.getEndpoints();return this.socket=new WebSocket(e.websocket,["Bearer",e.token]),this.socket.addEventListener("message",this.onMessage),this.socket.addEventListener("open",this.onOpen),this.socket.addEventListener("error",this.onError),this.socket.addEventListener("close",this.onClose),this.socket};this.sendHeartbeat=async()=>{this.send(await this.meta.messageCreator.createHeartbeat())};this.reconnect=()=>{this.stop(),this.start()};this.canSkipSyncWait=e=>e.type==="sync"||e.type==="presence-update"||e.type==="sync-ack"||e.type==="heartbeat";this.send=e=>{this.status==="active"&&(!this.hasStartedSync&&!this.canSkipSyncWait(e)||(this.canSkipSyncWait(e)?this.socket?.readyState===WebSocket.OPEN?(this.log("Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):(this.log("Enqueueing message until socket is open",JSON.stringify(e,null,2)),this.connectQueue.push(e)):this.synced?this.socket?.readyState===WebSocket.OPEN&&(this.log("Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):this.hasStartedSync&&(this.log("Enqueueing message until synced",JSON.stringify(e,null,2)),this.syncQueue.push(e))))};this.dispose=()=>{this.socket?.removeEventListener("message",this.onMessage),this.socket?.removeEventListener("close",this.onClose),this.socket?.close()};this.start=()=>{this.socket||(this.initializeSocket(),this._status="active")};this.stop=()=>{this.dispose(),this.socket=null,this._status="paused"};this.log=s||this.log,this.endpointProvider=e,this.meta=n,this.presence=r,this.reconnectScheduler.subscribe("trigger",this.initializeSocket),this.heartbeat.subscribe("beat",this.sendHeartbeat)}get isConnected(){return this.socket?.readyState===WebSocket.OPEN}get status(){return this._status}};var ln=class extends N{constructor(){super(...arguments);this.mode="pull";this.dispose=()=>{};this.isConnected=!1;this.status="paused";this.pullInterval=0;this.presence=new at({initialPresence:{},defaultProfile:{}});this.uploadFile=async()=>({success:!1,retry:!1});this.getFile=async()=>({success:!1,retry:!1})}send(){}start(){}stop(){}reconnect(){}setMode(){}setPullInterval(){}},Ke=class extends N{constructor({authEndpoint:e,fetchAuth:n,initialPresence:r,automaticTransportSelection:s=!0,autoStart:o,initialTransport:c,pullInterval:f,presenceUpdateBatchTimeout:h,defaultProfile:x,useBroadcastChannel:E},{meta:g,log:P,onData:b}){super();this.broadcastChannel=null;this._activelySyncing=!1;this.handleBroadcastChannelMessage=e=>{e.data.type==="sync"&&this.handleMessage(e.data.message)};this.handleMessage=async e=>{if(e.type==="op-re"||e.type==="sync-resp")for(let n of e.operations)this.meta.time.update(n.timestamp);switch(this.log("sync message",JSON.stringify(e,null,2)),e.type){case"op-re":await this.onData({operations:e.operations,baselines:e.baselines}),e.globalAckTimestamp&&await this.meta.setGlobalAck(e.globalAckTimestamp);break;case"global-ack":await this.meta.setGlobalAck(e.timestamp);break;case"sync-resp":this._activelySyncing=!0,this.emit("syncingChange",!0),await this.onData({operations:e.operations,baselines:e.baselines,reset:e.overwriteLocalData}),e.globalAckTimestamp&&await this.meta.setGlobalAck(e.globalAckTimestamp),await this.meta.updateLastSynced(e.ackedTimestamp),this._activelySyncing=!1,this.emit("syncingChange",!1);break;case"need-since":this.activeSync.send(await this.meta.messageCreator.createSyncStep1(e.since));break;case"server-ack":await this.meta.updateLastSynced(e.timestamp)}this.broadcastChannel?.postMessage({type:"sync",message:e}),this.presence[Xn](await this.meta.localReplica.get(),e)};this.handleOnlineChange=e=>{this.emit("onlineChange",e)};this.handlePresenceUpdate=async e=>{this.send(await this.meta.messageCreator.createPresenceUpdate(e))};this.setMode=e=>{if(e==="realtime"&&!this.canDoRealtime)throw new Error("Cannot switch to realtime mode, because the current auth token does not allow it");let n;e==="realtime"?n=this.webSocketSync:n=this.pushPullSync,n!==this.activeSync&&(this.log("switching to",e,"mode"),this.activeSync.status==="active"&&n.start(),this.activeSync.stop(),this.activeSync=n)};this.setPullInterval=e=>{this.pushPullSync.setInterval(e)};this.send=e=>{if(this.activeSync.status==="active")return this.activeSync.send(e)};this.uploadFile=async e=>this.activeSync.status==="active"?this.fileSync.uploadFile(e):{success:!1,retry:!1};this.getFile=async e=>{if(this.activeSync.status==="active")return this.fileSync.getFile(e);throw new Error("Offline, cannot retrieve remote file details")};this.start=()=>this.activeSync.start();this.stop=()=>this.activeSync.stop();this.dispose=()=>{this.webSocketSync.dispose(),this.pushPullSync.dispose()};this.reconnect=()=>this.activeSync.reconnect();if(this.meta=g,this.onData=b,this.log=P||(()=>{}),this.presence=new at({initialPresence:r,defaultProfile:x,updateBatchTimeout:h}),this.endpointProvider=new sn({authEndpoint:e,fetchAuth:n}),this.webSocketSync=new cn({endpointProvider:this.endpointProvider,meta:g,presence:this.presence,log:this.log}),this.pushPullSync=new nn({endpointProvider:this.endpointProvider,meta:g,presence:this.presence,log:this.log,interval:f}),this.fileSync=new tn({endpointProvider:this.endpointProvider,log:this.log}),E&&"BroadcastChannel"in window&&(this.broadcastChannel=new BroadcastChannel("verdant"),this.broadcastChannel.addEventListener("message",this.handleBroadcastChannelMessage)),c==="realtime"?this.activeSync=this.webSocketSync:this.activeSync=this.pushPullSync,this.presence.subscribe("update",this.handlePresenceUpdate),this.meta.subscribe("message",this.send),this.webSocketSync.subscribe("message",this.handleMessage),this.webSocketSync.subscribe("onlineChange",this.handleOnlineChange),this.pushPullSync.subscribe("message",this.handleMessage),this.pushPullSync.subscribe("onlineChange",this.handleOnlineChange),s&&this.canDoRealtime){let v=()=>{C&&clearTimeout(C);let O=Object.keys(this.presence.peers).length>0||s!=="peers-only"&&this.presence.selfReplicaIds.size>1;O&&this.mode==="pull"?this.setMode("realtime"):!O&&this.mode==="realtime"&&(C=setTimeout(()=>{Object.keys(this.presence.peers).length===0&&this.setMode("pull")},1e3))},C;this.presence.subscribe("peersChanged",v),s!=="peers-only"&&this.presence.subscribe("selfChanged",v)}o&&this.start()}get canDoRealtime(){return this.endpointProvider.type===0||this.endpointProvider.type===2||this.endpointProvider.type===5}get syncing(){return this._activelySyncing}get pullInterval(){return this.pushPullSync.interval}get isConnected(){return this.activeSync.isConnected}get status(){return this.activeSync.status}get mode(){return this.activeSync.mode}};var ze=class{constructor(){this._disposes=[];this.disposed=!1;this.dispose=()=>{this.disposed=!0,this._disposes.forEach(t=>t()),this._disposes=[]};this.addDispose=t=>{this._disposes.push(t)}}};function Es(i){return i!==null}function ei(i){return Array.isArray(i)?i.map(ei).filter(Es):i instanceof ye&&i.deleted?null:i}function Oe(i,t){return!i&&!t||i&&t&&Se(i)===Se(t)}var ti=Symbol("ON_ALL_UNSUBSCRIBED"),ue=Symbol("UPDATE"),Ps,fe=class extends ze{constructor({initial:e,context:n,collection:r,key:s,shouldUpdate:o}){super();this._internalUnsubscribes=[];this._status="initial";this._executionPromise=null;this.setValue=e=>{this._rawValue=e,this.subscribeToDeleteAndRestore(this._rawValue),this._value=ei(e),this._status="ready",this._events.emit("change",this._value)};this.refreshValue=()=>{this.setValue(this._rawValue)};this.subscribeToDeleteAndRestore=e=>{for(;this._internalUnsubscribes.length;)this._internalUnsubscribes.pop()?.();Array.isArray(e)?e.forEach(n=>{n instanceof ye&&(this._internalUnsubscribes.push(n.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(n.subscribe("restore",this.refreshValue)))}):e instanceof ye&&(this._internalUnsubscribes.push(e.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(e.subscribe("restore",()=>{this.refreshValue()})))};this.execute=()=>(this.context.log("debug","Executing query",this.key),this._status==="initial"?this._status="initializing":this._status==="ready"&&(this._status="revalidating"),this._executionPromise=this.run().then(()=>this._value).catch(e=>{if(e instanceof Error&&(e.name==="InvalidStateError"||e.name==="InvalidAccessError"))return this._value;throw e}),this._executionPromise);this[Ps]=e=>{this._allUnsubscribedHandler=e};this._rawValue=e,this._value=e,this._events=new N(f=>{f==="change"&&this._allUnsubscribedHandler?.(this)}),this.context=n,this.key=s,this.collection=r;let c=o||(f=>f.includes(r));this.addDispose(this.context.entityEvents.subscribe("collectionsChanged",f=>{c(f)&&(this.context.log("info","Updating query",this.key),this.execute())}))}static{Ps=ti}get current(){return this._value}get resolved(){return this.status==="ready"?Promise.resolve(this._value):this._executionPromise??this.execute()}get subscribed(){return this._events.totalSubscriberCount()>0}get status(){return this._status}subscribe(e,n){if(n===void 0&&typeof e=="function")return this.resolved,this._events.subscribe("change",e);if(e==="change"&&n!==void 0)return this.resolved,this._events.subscribe("change",n);if(e==="statusChange"&&typeof n=="function")return this._events.subscribe(e,n);throw new Error("Invalid invocation of Query.subscribe")}};var dn=class extends fe{constructor({id:e,hydrate:n,...r}){super({initial:null,...r});this.run=async()=>{let e=await this.hydrate(this.oid);this.setValue(e)};this.oid=X(r.collection,e),this.hydrate=n}};var _s,un=class extends fe{constructor({index:e,hydrate:n,...r}){super({initial:null,...r});this.run=async()=>{let e=await zt({collection:this.collection,index:this.index,context:this.context});this.setValue(e?await this.hydrate(e):null)};this[_s]=e=>{Oe(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=n}static{_s=ue}};var Ts,pn=class extends fe{constructor({index:e,hydrate:n,pageSize:r,page:s,...o}){super({initial:[],...o});this._hasNextPage=!1;this.run=async()=>{let{result:e,hasNextPage:n}=await nt({collection:this.collection,index:this.index,context:this.context,limit:this._pageSize,offset:this._page*this._pageSize});this._hasNextPage=n,this.setValue(await Promise.all(e.map(this.hydrate)))};this.nextPage=async()=>{this.hasNextPage&&(this._page++,await this.run())};this.previousPage=async()=>{this._page!==0&&(this._page--,await this.run())};this.setPage=async e=>{this._page=e,await this.run()};this[Ts]=e=>{Oe(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=n,this._pageSize=r,this._page=s}static{Ts=ue}get pageSize(){return this._pageSize}get page(){return this._page}get hasNextPage(){return this._hasNextPage}get hasPreviousPage(){return this._page>0}};var As,fn=class extends fe{constructor({hydrate:e,pageSize:n,index:r,...s}){super({initial:[],...s});this._upToPage=1;this._hasNextPage=!1;this.run=async()=>{let{result:e,hasNextPage:n}=await nt({collection:this.collection,context:this.context,limit:this._pageSize*this._upToPage,offset:0,index:this.index});this._hasNextPage=n,this.setValue(await Promise.all(e.map(this.hydrate)))};this.loadMore=async()=>{let{result:e,hasNextPage:n}=await nt({collection:this.collection,context:this.context,limit:this._pageSize,offset:this._pageSize*this._upToPage,index:this.index});this._hasNextPage=n,this._upToPage++,this.setValue([...this.current,...await Promise.all(e.map(this.hydrate))])};this[As]=e=>{Oe(this.index,e)||(this.index=e,this.execute())};this.index=r,this.hydrate=e,this._pageSize=n}static{As=ue}get pageSize(){return this._pageSize}get hasMore(){return this._hasNextPage}};var Rs,hn=class extends fe{constructor({index:e,hydrate:n,...r}){super({initial:[],...r});this.run=async()=>{let e=await $t({collection:this.collection,index:this.index,context:this.context});this.setValue(await Promise.all(e.map(this.hydrate)))};this[Rs]=e=>{Oe(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=n}static{Rs=ue}};var mn=class{constructor({collection:t,cache:e,entities:n,context:r,documentManager:s}){this.serializeIndex=t=>t?Se(t):"";this.get=t=>{let e=`get:${this.collection}:${t}`;return this.cache.getOrSet(e,()=>new dn({id:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:e}))};this.findOne=({index:t,key:e}={})=>{let n=e||`findOne:${this.collection}:${this.serializeIndex(t)}`;return this.cache.getOrSet(n,()=>new un({index:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:n}),r=>{r[ue](t)})};this.findAll=({index:t,key:e}={})=>{let n=e||`findAll:${this.collection}:${this.serializeIndex(t)}`;return this.cache.getOrSet(n,()=>new hn({index:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:n}),r=>{r[ue](t)})};this.findPage=({index:t,pageSize:e,page:n,key:r})=>{let s=r||`findPage:${this.collection}:${this.serializeIndex(t)}:${e}`;return this.cache.getOrSet(s,()=>new pn({index:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:s,pageSize:e,page:n}),o=>{o[ue](t)})};this.findAllInfinite=({index:t,pageSize:e,key:n})=>{let r=n||`findAllInfinite:${this.collection}:${this.serializeIndex(t)}:${e}`;return this.cache.getOrSet(r,()=>new fn({index:t,collection:this.collection,hydrate:this.hydrate,context:this.context,key:r,pageSize:e}),s=>{s[ue](t)})};this.cache=e,this.collection=t,this.hydrate=n.get,this.context=r,this.documentManager=s,this.put=this.documentManager.create.bind(this.documentManager,this.collection),this.delete=this.documentManager.delete.bind(this.documentManager,this.collection),this.deleteAll=this.documentManager.deleteAllFromCollection.bind(this.documentManager,this.collection)}};var yn=class extends ze{constructor({evictionTime:e=5*1e3,context:n}){super();this._cache=new Map;this.onQueryUnsubscribed=e=>{setTimeout(()=>{e.subscribed||this._cache.get(e.key)===e&&this._cache.delete(e.key)},this._evictionTime)};this._evictionTime=e,this.context=n}get(e){return this._cache.get(e)||null}set(e){return this._cache.set(e.key,e),e[ti](this.onQueryUnsubscribed),e}getOrSet(e,n,r){let s=this.get(e);return s?(r?.(s),s):this.set(n())}};var Be=class extends N{constructor(e,n,r){super();this.config=e;this.context=n;this.addData=e=>this._entities.addData(e);this.stats=async()=>{let e=Object.keys(this.schema.collections),n={};for(let h of e)n[h]=await et(this.documentDb,h);let r=await this.meta.stats(),s=typeof navigator<"u"&&typeof navigator.storage<"u"&&"estimate"in navigator.storage?await navigator.storage.estimate():void 0,o=Object.values(n).reduce((h,{size:x})=>h+x,0),c=r.baselinesSize.size+r.operationsSize.size,f=c/o;return{collections:n,meta:r,storage:s,totalMetaSize:c,totalCollectionsSize:o,metaToDataRatio:f,quotaUsage:s?.usage&&s?.quota?s.usage/s.quota:void 0}};this.close=async()=>{this.sync.stop(),this.sync.dispose(),await this._entities.destroy(),this.meta.close(),await new Promise(async e=>{await Ae(this.documentDb),await Ae(this.metaDb),e()}),this.context.log?.("Client closed")};this.__dangerous__resetLocal=async()=>{this.sync.stop(),await Mt(this.namespace,indexedDB)};this.export=async()=>{let e=await this.meta.export();return Buffer.from(JSON.stringify(e))};this.import=async e=>{this.context.log("Importing data..."),await Ae(this.context.documentDb);let n=JSON.parse(e.toString());await this.meta.resetFrom(n);let r=n.schema.version,s=indexedDB.deleteDatabase([this.namespace,"collections"].join("_"));await new Promise((c,f)=>{s.onsuccess=c,s.onerror=f});let o=this.context.schema;this.context.schema=n.schema,this.context.documentDb=await it({meta:this.meta,migrations:this.config.migrations,context:this.context,version:r}),this.context.log("Re-initializing data from imported data..."),await this._entities.addData({operations:n.operations,baselines:n.baselines,reset:!0}),await Ae(this.context.documentDb),this.context.log("Migrating up to latest schema..."),this.context.schema=o,this.context.documentDb=await it({meta:this.meta,migrations:this.config.migrations,context:this.context,version:o.version})};this.meta=r.meta,this.collectionNames=Object.keys(n.schema.collections),this._sync=this.config.syncConfig&&!n.schema.wip?new Ke(this.config.syncConfig,{meta:this.meta,onData:this.addData,log:this.context.log}):new ln,n.schema.wip&&this.config.syncConfig&&n.log("warn","\u26A0\uFE0F\u26A0\uFE0F Sync is disabled for WIP schemas. Commit your schema changes to start syncing again. \u26A0\uFE0F\u26A0\uFE0F"),this._fileManager=new Jt({db:this.metaDb,sync:this.sync,context:this.context,config:this.config.files,meta:this.meta}),this._entities=new en({context:this.context,meta:this.meta,files:this._fileManager}),this._queryCache=new yn({context:n}),this._documentManager=new Ht(this.meta,this.schema,this._entities);let s=Bi(()=>{this.emit("futureSeen")},300);this.context.globalEvents.subscribe("futureSeen",s),this.documentDb.addEventListener("versionchange",()=>{this.context.log?.(`Another tab has requested a version change for ${this.namespace}`),this.documentDb.close(),typeof window<"u"&&window.location.reload()}),this.metaDb.addEventListener("versionchange",()=>{this.context.log?.(`Another tab has requested a version change for ${this.namespace}`),this.metaDb.close(),typeof window<"u"&&window.location.reload()});for(let[o,c]of Object.entries(n.schema.collections)){let f=o;this[f]=new mn({collection:f,cache:this._queryCache,context:this.context,entities:this.entities,documentManager:this.documentManager})}}get sync(){return this._sync}get entities(){return this._entities}get documentManager(){return this._documentManager}get documentDb(){return this.context.documentDb}get metaDb(){return this.context.metaDb}get schema(){return this.context.schema}get namespace(){return this.context.namespace}get undoHistory(){return this.context.undoHistory}get presence(){return this.sync.presence}get batch(){return this.entities.batch}};var ct=class{constructor(t){this.value=t}deref(){return this.value}};var cr=Symbol("metadataVersion");var gn=class{constructor(t){this.init=t;this._initializing=!1;this.initialize=async t=>{if(typeof window>"u"&&!t.indexedDb)throw new Error("A verdant client was initialized in an environment without IndexedDB. If you are using verdant in a server-rendered framework, you must enforce that all clients are initialized on the client-side, or you must provide some mock interface of IDBFactory to the ClientDescriptor options.");if(this._initializing||this._resolvedValue)return this._readyPromise;this._initializing=!0;try{let e;return t.schema.wip?e=await this.initializeWIPDatabases(t):(e=await this.initializeDatabases(t),this.cleanupWIPDatabases(t)),this.resolveReady(e),this._resolvedValue=e,e}catch(e){throw this.rejectReady(e),e}finally{this._initializing=!1}};this.initializeDatabases=async t=>{let e=t[cr],{db:n}=await Ut({indexedDB:t.indexedDb,log:t.log,namespace:t.namespace,metadataVersion:e}),r={namespace:this._namespace,metaDb:n,schema:t.schema,log:t.log||(()=>{}),undoHistory:t.undoHistory||new rt,entityEvents:new N,globalEvents:new N,weakRef:h=>t.EXPERIMENTAL_weakRefs?new WeakRef(h):new ct(h)},s=new tt({context:r,disableRebasing:t.disableRebasing});await s.updateSchema(t.schema,t.overrideSchemaConflict);let o=await it({context:r,version:t.schema.version,meta:s,migrations:t.migrations,indexedDB:t.indexedDb}),c=Object.assign(r,{documentDb:o});return new Be({syncConfig:t.sync,migrations:t.migrations,files:t.files},c,{meta:s})};this.initializeWIPDatabases=async t=>{let e=Se(t.schema);console.info(`WIP schema in use. Opening database with hash ${e}`);let n=`@@wip_${t.namespace}_${e}`,{db:r}=await Gi({indexedDB:t.indexedDb,log:t.log,namespace:t.namespace,wipNamespace:n}),s={namespace:this._namespace,metaDb:r,schema:t.schema,log:t.log||(()=>{}),undoHistory:t.undoHistory||new rt,entityEvents:new N,globalEvents:new N,weakRef:x=>t.EXPERIMENTAL_weakRefs?new WeakRef(x):new ct(x)},o=new tt({context:s,disableRebasing:t.disableRebasing});await o.updateSchema(t.schema,t.overrideSchemaConflict);let c=await tr({context:s,version:t.schema.version,meta:o,migrations:t.migrations,indexedDB:t.indexedDb,wipNamespace:n}),f=Object.assign(s,{documentDb:c});return new Be({syncConfig:t.sync,migrations:t.migrations,files:t.files},f,{meta:o})};this.cleanupWIPDatabases=async t=>{let r=(await Ji(t.indexedDb)).filter(s=>s.name?.startsWith("@@wip_")).map(s=>s.name).filter(s=>!s.startsWith(`@@wip_${t.namespace}_${Se(t.schema)}`));for(let s of r)await Qi(s,t.indexedDb)};this.open=()=>this.initialize(this.init);this.close=async()=>{this._resolvedValue&&this._resolvedValue.close(),this._initializing&&(await this._readyPromise).close()};this.__dangerous__resetLocal=async()=>{await Mt(this.namespace)};this._readyPromise=new Promise((e,n)=>{this.resolveReady=e,this.rejectReady=n}),this._namespace=t.namespace}get namespace(){return this._namespace}get current(){return this._resolvedValue}get readyPromise(){return this._readyPromise}get schema(){return this.init.schema}};window.Verdant=ni;
17
17
  //# sourceMappingURL=index.js.map