@agentshouse/mdruntime 0.1.0-cc294e382554d → 0.1.0-cc2e934017fb1

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 (385) hide show
  1. package/README.md +19 -16
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +308 -0
  5. package/dist/actions.d.ts +20 -0
  6. package/dist/actions.d.ts.map +1 -0
  7. package/dist/actions.js +251 -0
  8. package/dist/adapter.d.ts +148 -122
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +7 -10
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +40 -41
  13. package/dist/binary.d.ts +0 -5
  14. package/dist/binary.d.ts.map +1 -1
  15. package/dist/binary.js +1 -1
  16. package/dist/bootstrap.d.ts +30 -11
  17. package/dist/bootstrap.d.ts.map +1 -1
  18. package/dist/bootstrap.js +309 -113
  19. package/dist/cell.d.ts +6 -0
  20. package/dist/cell.d.ts.map +1 -0
  21. package/dist/cell.js +9 -0
  22. package/dist/chain.d.ts +12 -0
  23. package/dist/chain.d.ts.map +1 -0
  24. package/dist/chain.js +64 -0
  25. package/dist/change-set.d.ts +10 -16
  26. package/dist/change-set.d.ts.map +1 -1
  27. package/dist/change-set.js +17 -94
  28. package/dist/change.d.ts +32 -1
  29. package/dist/change.d.ts.map +1 -1
  30. package/dist/change.js +14 -3
  31. package/dist/chat-types.d.ts +5 -0
  32. package/dist/chat-types.d.ts.map +1 -0
  33. package/dist/chat-types.js +13 -0
  34. package/dist/client.d.ts +33 -19
  35. package/dist/client.d.ts.map +1 -1
  36. package/dist/client.js +108 -17
  37. package/dist/collection.d.ts +29 -22
  38. package/dist/collection.d.ts.map +1 -1
  39. package/dist/collection.js +47 -354
  40. package/dist/compile.d.ts +16 -0
  41. package/dist/compile.d.ts.map +1 -0
  42. package/dist/compile.js +711 -0
  43. package/dist/connection.d.ts +7 -137
  44. package/dist/connection.d.ts.map +1 -1
  45. package/dist/connection.js +105 -3623
  46. package/dist/context.d.ts +2 -0
  47. package/dist/context.d.ts.map +1 -0
  48. package/dist/{chat/context.js → context.js} +1 -4
  49. package/dist/conversation-live.d.ts +136 -0
  50. package/dist/conversation-live.d.ts.map +1 -0
  51. package/dist/conversation-live.js +249 -0
  52. package/dist/conversation-row.d.ts +33 -0
  53. package/dist/conversation-row.d.ts.map +1 -0
  54. package/dist/conversation-row.js +53 -0
  55. package/dist/conversation.d.ts +56 -46
  56. package/dist/conversation.d.ts.map +1 -1
  57. package/dist/conversation.js +964 -828
  58. package/dist/declaration.d.ts +10 -0
  59. package/dist/declaration.d.ts.map +1 -0
  60. package/dist/declaration.js +24 -0
  61. package/dist/digest.d.ts +7 -0
  62. package/dist/digest.d.ts.map +1 -0
  63. package/dist/digest.js +113 -0
  64. package/dist/discovery.d.ts +10 -0
  65. package/dist/discovery.d.ts.map +1 -0
  66. package/dist/discovery.js +148 -0
  67. package/dist/durability.d.ts +16 -4
  68. package/dist/durability.d.ts.map +1 -1
  69. package/dist/durability.js +5 -0
  70. package/dist/entry.d.ts +5 -2
  71. package/dist/entry.d.ts.map +1 -1
  72. package/dist/entry.js +33 -29
  73. package/dist/expectation.d.ts +4 -2
  74. package/dist/expectation.d.ts.map +1 -1
  75. package/dist/expectation.js +33 -11
  76. package/dist/failure.d.ts +1 -0
  77. package/dist/failure.d.ts.map +1 -1
  78. package/dist/failure.js +3 -0
  79. package/dist/figures.d.ts +49 -0
  80. package/dist/figures.d.ts.map +1 -0
  81. package/dist/figures.js +197 -0
  82. package/dist/file.d.ts +2 -19
  83. package/dist/file.d.ts.map +1 -1
  84. package/dist/file.js +7 -122
  85. package/dist/holdings.d.ts +29 -0
  86. package/dist/holdings.d.ts.map +1 -0
  87. package/dist/holdings.js +95 -0
  88. package/dist/host.d.ts +20 -8
  89. package/dist/host.d.ts.map +1 -1
  90. package/dist/host.js +99 -41
  91. package/dist/identity.d.ts +0 -2
  92. package/dist/identity.d.ts.map +1 -1
  93. package/dist/identity.js +0 -6
  94. package/dist/index.d.ts +35 -13
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +14 -2
  97. package/dist/install.d.ts +54 -0
  98. package/dist/install.d.ts.map +1 -0
  99. package/dist/install.js +538 -0
  100. package/dist/lifecycle.d.ts +7 -0
  101. package/dist/lifecycle.d.ts.map +1 -0
  102. package/dist/lifecycle.js +272 -0
  103. package/dist/listing.d.ts +48 -0
  104. package/dist/listing.d.ts.map +1 -0
  105. package/dist/listing.js +139 -0
  106. package/dist/live.d.ts +23 -0
  107. package/dist/live.d.ts.map +1 -0
  108. package/dist/live.js +165 -0
  109. package/dist/locks.d.ts +7 -0
  110. package/dist/locks.d.ts.map +1 -0
  111. package/dist/locks.js +33 -0
  112. package/dist/log.d.ts +1 -0
  113. package/dist/log.d.ts.map +1 -1
  114. package/dist/lost.d.ts +5 -0
  115. package/dist/lost.d.ts.map +1 -0
  116. package/dist/lost.js +50 -0
  117. package/dist/media.d.ts +8 -0
  118. package/dist/media.d.ts.map +1 -0
  119. package/dist/media.js +218 -0
  120. package/dist/memory.d.ts +17 -7
  121. package/dist/memory.d.ts.map +1 -1
  122. package/dist/memory.js +257 -111
  123. package/dist/messages.d.ts +49 -0
  124. package/dist/messages.d.ts.map +1 -0
  125. package/dist/messages.js +150 -0
  126. package/dist/model.d.ts +8 -11
  127. package/dist/model.d.ts.map +1 -1
  128. package/dist/model.js +6 -23
  129. package/dist/models.d.ts +10 -0
  130. package/dist/models.d.ts.map +1 -0
  131. package/dist/models.js +156 -0
  132. package/dist/name.d.ts +4 -0
  133. package/dist/name.d.ts.map +1 -0
  134. package/dist/name.js +122 -0
  135. package/dist/observation.d.ts +15 -2
  136. package/dist/observation.d.ts.map +1 -1
  137. package/dist/observation.js +98 -14
  138. package/dist/opened.d.ts +22 -0
  139. package/dist/opened.d.ts.map +1 -0
  140. package/dist/opened.js +107 -0
  141. package/dist/opening.d.ts +4 -0
  142. package/dist/opening.d.ts.map +1 -0
  143. package/dist/opening.js +59 -0
  144. package/dist/outcome.d.ts +44 -9
  145. package/dist/outcome.d.ts.map +1 -1
  146. package/dist/outcome.js +41 -2
  147. package/dist/overlay.d.ts +4 -5
  148. package/dist/overlay.d.ts.map +1 -1
  149. package/dist/overlay.js +65 -169
  150. package/dist/page-metadata.d.ts +8 -0
  151. package/dist/page-metadata.d.ts.map +1 -0
  152. package/dist/page-metadata.js +19 -0
  153. package/dist/parts.d.ts +11 -0
  154. package/dist/parts.d.ts.map +1 -0
  155. package/dist/parts.js +21 -0
  156. package/dist/paths.d.ts +2 -0
  157. package/dist/paths.d.ts.map +1 -1
  158. package/dist/paths.js +26 -0
  159. package/dist/preparation.d.ts +20 -0
  160. package/dist/preparation.d.ts.map +1 -0
  161. package/dist/preparation.js +233 -0
  162. package/dist/presence.d.ts +52 -0
  163. package/dist/presence.d.ts.map +1 -0
  164. package/dist/presence.js +220 -0
  165. package/dist/queries.d.ts +16 -0
  166. package/dist/queries.d.ts.map +1 -0
  167. package/dist/queries.js +270 -0
  168. package/dist/query.d.ts +21 -207
  169. package/dist/query.d.ts.map +1 -1
  170. package/dist/query.js +3 -493
  171. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  172. package/dist/questions.d.ts.map +1 -0
  173. package/dist/{chat/questions.js → questions.js} +13 -2
  174. package/dist/queue.d.ts +40 -0
  175. package/dist/queue.d.ts.map +1 -0
  176. package/dist/queue.js +455 -0
  177. package/dist/reach.d.ts +20 -9
  178. package/dist/reach.d.ts.map +1 -1
  179. package/dist/reach.js +300 -106
  180. package/dist/react.d.ts +14 -2
  181. package/dist/react.d.ts.map +1 -1
  182. package/dist/react.js +10 -1
  183. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  184. package/dist/read.d.ts.map +1 -0
  185. package/dist/{chat/read.js → read.js} +4 -0
  186. package/dist/readiness.d.ts +13 -17
  187. package/dist/readiness.d.ts.map +1 -1
  188. package/dist/readiness.js +2 -8
  189. package/dist/reads.d.ts +36 -10
  190. package/dist/reads.d.ts.map +1 -1
  191. package/dist/reads.js +159 -83
  192. package/dist/recovery.d.ts +3 -2
  193. package/dist/recovery.d.ts.map +1 -1
  194. package/dist/recovery.js +43 -8
  195. package/dist/refresh.d.ts +18 -15
  196. package/dist/refresh.d.ts.map +1 -1
  197. package/dist/refresh.js +145 -79
  198. package/dist/refusal.d.ts +5 -0
  199. package/dist/refusal.d.ts.map +1 -0
  200. package/dist/refusal.js +57 -0
  201. package/dist/replica.d.ts +50 -39
  202. package/dist/replica.d.ts.map +1 -1
  203. package/dist/replica.js +319 -208
  204. package/dist/room-draft.d.ts +28 -11
  205. package/dist/room-draft.d.ts.map +1 -1
  206. package/dist/room-draft.js +185 -113
  207. package/dist/room-drafts.d.ts +24 -0
  208. package/dist/room-drafts.d.ts.map +1 -0
  209. package/dist/room-drafts.js +217 -0
  210. package/dist/rows.d.ts +31 -31
  211. package/dist/rows.d.ts.map +1 -1
  212. package/dist/rows.js +60 -125
  213. package/dist/runtime.d.ts +34 -0
  214. package/dist/runtime.d.ts.map +1 -0
  215. package/dist/runtime.js +1 -0
  216. package/dist/save.d.ts +42 -50
  217. package/dist/save.d.ts.map +1 -1
  218. package/dist/save.js +571 -188
  219. package/dist/saves.d.ts +32 -0
  220. package/dist/saves.d.ts.map +1 -0
  221. package/dist/saves.js +413 -0
  222. package/dist/search.d.ts +12 -95
  223. package/dist/search.d.ts.map +1 -1
  224. package/dist/search.js +10 -266
  225. package/dist/seed.d.ts +11 -2
  226. package/dist/seed.d.ts.map +1 -1
  227. package/dist/seed.js +71 -1
  228. package/dist/shared.d.ts +4 -9
  229. package/dist/shared.d.ts.map +1 -1
  230. package/dist/shared.js +61 -120
  231. package/dist/shown.d.ts +32 -0
  232. package/dist/shown.d.ts.map +1 -0
  233. package/dist/shown.js +290 -0
  234. package/dist/socket/admission.d.ts +7 -0
  235. package/dist/socket/admission.d.ts.map +1 -0
  236. package/dist/socket/admission.js +39 -0
  237. package/dist/socket/answers.d.ts +6 -0
  238. package/dist/socket/answers.d.ts.map +1 -0
  239. package/dist/socket/answers.js +20 -0
  240. package/dist/socket/lanes.d.ts +20 -0
  241. package/dist/socket/lanes.d.ts.map +1 -0
  242. package/dist/socket/lanes.js +77 -0
  243. package/dist/socket/reads.d.ts +10 -0
  244. package/dist/socket/reads.d.ts.map +1 -0
  245. package/dist/socket/reads.js +31 -0
  246. package/dist/socket/session.d.ts +38 -0
  247. package/dist/socket/session.d.ts.map +1 -0
  248. package/dist/socket/session.js +23 -0
  249. package/dist/socket.d.ts +67 -0
  250. package/dist/socket.d.ts.map +1 -0
  251. package/dist/socket.js +170 -0
  252. package/dist/source.d.ts +61 -0
  253. package/dist/source.d.ts.map +1 -0
  254. package/dist/source.js +82 -0
  255. package/dist/status.d.ts +4 -5
  256. package/dist/status.d.ts.map +1 -1
  257. package/dist/status.js +3 -7
  258. package/dist/store/installs.d.ts +30 -0
  259. package/dist/store/installs.d.ts.map +1 -0
  260. package/dist/store/installs.js +34 -0
  261. package/dist/store/readiness.d.ts +10 -0
  262. package/dist/store/readiness.d.ts.map +1 -0
  263. package/dist/store/readiness.js +52 -0
  264. package/dist/store/records.d.ts +212 -0
  265. package/dist/store/records.d.ts.map +1 -0
  266. package/dist/store/records.js +430 -0
  267. package/dist/store/room-held.d.ts +8 -0
  268. package/dist/store/room-held.d.ts.map +1 -0
  269. package/dist/store/room-held.js +17 -0
  270. package/dist/store/space.d.ts +11 -0
  271. package/dist/store/space.d.ts.map +1 -0
  272. package/dist/store/space.js +41 -0
  273. package/dist/store/watchers.d.ts +17 -0
  274. package/dist/store/watchers.d.ts.map +1 -0
  275. package/dist/store/watchers.js +56 -0
  276. package/dist/store/writes.d.ts +24 -0
  277. package/dist/store/writes.d.ts.map +1 -0
  278. package/dist/store/writes.js +125 -0
  279. package/dist/store.d.ts +109 -166
  280. package/dist/store.d.ts.map +1 -1
  281. package/dist/store.js +153 -797
  282. package/dist/stored.d.ts +156 -0
  283. package/dist/stored.d.ts.map +1 -0
  284. package/dist/stored.js +649 -0
  285. package/dist/surface.d.ts +88 -0
  286. package/dist/surface.d.ts.map +1 -0
  287. package/dist/surface.js +223 -0
  288. package/dist/sync.d.ts +19 -0
  289. package/dist/sync.d.ts.map +1 -0
  290. package/dist/sync.js +521 -0
  291. package/dist/tables.d.ts +412 -0
  292. package/dist/tables.d.ts.map +1 -0
  293. package/dist/tables.js +737 -0
  294. package/dist/tallies.d.ts +18 -0
  295. package/dist/tallies.d.ts.map +1 -0
  296. package/dist/tallies.js +129 -0
  297. package/dist/transfer.d.ts +0 -5
  298. package/dist/transfer.d.ts.map +1 -1
  299. package/dist/turn.d.ts +1 -1
  300. package/dist/turn.d.ts.map +1 -1
  301. package/dist/turn.js +31 -20
  302. package/dist/validation.d.ts +29 -0
  303. package/dist/validation.d.ts.map +1 -0
  304. package/dist/validation.js +104 -0
  305. package/dist/windows.d.ts +1 -16
  306. package/dist/windows.d.ts.map +1 -1
  307. package/dist/windows.js +2 -79
  308. package/dist/wire.d.ts +72 -8
  309. package/dist/wire.d.ts.map +1 -1
  310. package/dist/wire.js +24 -5
  311. package/package.json +19 -19
  312. package/AGENTS.md +0 -299
  313. package/dist/chat/acts.d.ts +0 -33
  314. package/dist/chat/acts.d.ts.map +0 -1
  315. package/dist/chat/acts.js +0 -36
  316. package/dist/chat/context.d.ts +0 -3
  317. package/dist/chat/context.d.ts.map +0 -1
  318. package/dist/chat/earlier.d.ts +0 -10
  319. package/dist/chat/earlier.d.ts.map +0 -1
  320. package/dist/chat/earlier.js +0 -54
  321. package/dist/chat/input.d.ts +0 -9
  322. package/dist/chat/input.d.ts.map +0 -1
  323. package/dist/chat/input.js +0 -99
  324. package/dist/chat/kit.d.ts +0 -61
  325. package/dist/chat/kit.d.ts.map +0 -1
  326. package/dist/chat/kit.js +0 -123
  327. package/dist/chat/lasting.d.ts +0 -6
  328. package/dist/chat/lasting.d.ts.map +0 -1
  329. package/dist/chat/lasting.js +0 -19
  330. package/dist/chat/list.d.ts +0 -28
  331. package/dist/chat/list.d.ts.map +0 -1
  332. package/dist/chat/list.js +0 -103
  333. package/dist/chat/markdown.d.ts +0 -21
  334. package/dist/chat/markdown.d.ts.map +0 -1
  335. package/dist/chat/markdown.js +0 -246
  336. package/dist/chat/message.d.ts +0 -7
  337. package/dist/chat/message.d.ts.map +0 -1
  338. package/dist/chat/message.js +0 -202
  339. package/dist/chat/messages.d.ts +0 -24
  340. package/dist/chat/messages.d.ts.map +0 -1
  341. package/dist/chat/messages.js +0 -187
  342. package/dist/chat/name.d.ts +0 -6
  343. package/dist/chat/name.d.ts.map +0 -1
  344. package/dist/chat/name.js +0 -37
  345. package/dist/chat/opened.d.ts +0 -11
  346. package/dist/chat/opened.d.ts.map +0 -1
  347. package/dist/chat/opened.js +0 -17
  348. package/dist/chat/overlay.d.ts +0 -32
  349. package/dist/chat/overlay.d.ts.map +0 -1
  350. package/dist/chat/overlay.js +0 -107
  351. package/dist/chat/parts.d.ts +0 -57
  352. package/dist/chat/parts.d.ts.map +0 -1
  353. package/dist/chat/parts.js +0 -119
  354. package/dist/chat/pieces.d.ts +0 -62
  355. package/dist/chat/pieces.d.ts.map +0 -1
  356. package/dist/chat/pieces.js +0 -1110
  357. package/dist/chat/process.d.ts +0 -20
  358. package/dist/chat/process.d.ts.map +0 -1
  359. package/dist/chat/process.js +0 -32
  360. package/dist/chat/provider.d.ts +0 -64
  361. package/dist/chat/provider.d.ts.map +0 -1
  362. package/dist/chat/provider.js +0 -638
  363. package/dist/chat/question.d.ts +0 -9
  364. package/dist/chat/question.d.ts.map +0 -1
  365. package/dist/chat/question.js +0 -69
  366. package/dist/chat/questions.d.ts.map +0 -1
  367. package/dist/chat/read.d.ts.map +0 -1
  368. package/dist/chat/ready.d.ts +0 -34
  369. package/dist/chat/ready.d.ts.map +0 -1
  370. package/dist/chat/ready.js +0 -91
  371. package/dist/chat/steady.d.ts +0 -3
  372. package/dist/chat/steady.d.ts.map +0 -1
  373. package/dist/chat/steady.js +0 -26
  374. package/dist/chat/style.d.ts +0 -4
  375. package/dist/chat/style.d.ts.map +0 -1
  376. package/dist/chat/style.js +0 -302
  377. package/dist/chat.d.ts +0 -14
  378. package/dist/chat.d.ts.map +0 -1
  379. package/dist/chat.js +0 -8
  380. package/dist/fence.d.ts +0 -6
  381. package/dist/fence.d.ts.map +0 -1
  382. package/dist/fence.js +0 -10
  383. package/dist/read-side.d.ts +0 -27
  384. package/dist/read-side.d.ts.map +0 -1
  385. package/dist/read-side.js +0 -826
@@ -0,0 +1,17 @@
1
+ export function createRoomHeld() {
2
+ const rooms = new Map();
3
+ return {
4
+ of: (locator, key) => rooms.get(locator)?.get(key),
5
+ hold(locator, key, value) {
6
+ const room = rooms.get(locator) ?? new Map();
7
+ room.set(key, value);
8
+ rooms.set(locator, room);
9
+ },
10
+ drop(locator, key) {
11
+ rooms.get(locator)?.delete(key);
12
+ },
13
+ forget(locator) {
14
+ rooms.delete(locator);
15
+ },
16
+ };
17
+ }
@@ -0,0 +1,11 @@
1
+ import type { RuntimeDatabase } from '../tables.js';
2
+ export type Space = {
3
+ full(): boolean;
4
+ fill(): boolean;
5
+ probing(): boolean;
6
+ probeEachMinute(): void;
7
+ probe(): Promise<void>;
8
+ stop(): void;
9
+ };
10
+ export declare function createSpace(database: RuntimeDatabase, freed: () => void): Space;
11
+ //# sourceMappingURL=space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../src/store/space.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,IAAI,OAAO,CAAC;IAChB,IAAI,IAAI,OAAO,CAAC;IAChB,OAAO,IAAI,OAAO,CAAC;IACnB,eAAe,IAAI,IAAI,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,CAAC;CACd,CAAC;AAEF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,KAAK,CA0C/E"}
@@ -0,0 +1,41 @@
1
+ export function createSpace(database, freed) {
2
+ let full = false;
3
+ let probing = null;
4
+ let testing = null;
5
+ function probe() {
6
+ testing ??= database.ask({ kind: 'space.probe' }).then(() => {
7
+ testing = null;
8
+ if (full) {
9
+ full = false;
10
+ if (probing !== null)
11
+ clearInterval(probing);
12
+ probing = null;
13
+ freed();
14
+ }
15
+ }, () => {
16
+ testing = null;
17
+ });
18
+ return testing;
19
+ }
20
+ return {
21
+ full: () => full,
22
+ fill() {
23
+ if (full)
24
+ return false;
25
+ full = true;
26
+ return true;
27
+ },
28
+ probing: () => probing !== null,
29
+ probeEachMinute() {
30
+ // A device whose storage filled after its install tries a write each minute, so space freed elsewhere ends its read-only mode without a Retry.
31
+ probing = setInterval(() => {
32
+ void probe();
33
+ }, 60_000);
34
+ },
35
+ probe,
36
+ stop() {
37
+ if (probing !== null)
38
+ clearInterval(probing);
39
+ },
40
+ };
41
+ }
@@ -0,0 +1,17 @@
1
+ export type Watcher = {
2
+ held(): boolean;
3
+ stop(): void;
4
+ answer(value: unknown): void;
5
+ };
6
+ export type Watching = 'all' | 'waiting' | 'ready';
7
+ type Watchers = {
8
+ publication(work: () => Promise<void>): Promise<void>;
9
+ owing<T>(topic: string, add: (owed: T | undefined) => T, work: (owed: T) => Promise<void>): Promise<void>;
10
+ watch(topic: string, notify: (value: unknown) => void): Watcher;
11
+ watching(topic: string, which?: Watching): readonly Watcher[];
12
+ tell(topic: string, value: unknown): void;
13
+ close(): void;
14
+ };
15
+ export declare function createWatchers(unpublished: (error: unknown) => void): Watchers;
16
+ export {};
17
+ //# sourceMappingURL=watchers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchers.d.ts","sourceRoot":"","sources":["../../src/store/watchers.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,IAAI,OAAO,CAAC;IAChB,IAAI,IAAI,IAAI,CAAC;IACb,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;AAMnD,KAAK,QAAQ,GAAG;IACd,WAAW,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,CAAC,CAAC,EACL,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,EAC/B,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,OAAO,EAAE,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,wBAAgB,cAAc,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,QAAQ,CA6D9E"}
@@ -0,0 +1,56 @@
1
+ export function createWatchers(unpublished) {
2
+ let published = Promise.resolve();
3
+ const topics = new Map();
4
+ const owed = new Map();
5
+ function publication(work) {
6
+ published = published.then(work).catch(unpublished);
7
+ return published;
8
+ }
9
+ return {
10
+ publication,
11
+ owing(topic, add, work) {
12
+ const held = owed.get(topic);
13
+ if (held !== undefined) {
14
+ held.value = add(held.value);
15
+ return held.shown;
16
+ }
17
+ const owing = { value: add(undefined), shown: Promise.resolve() };
18
+ owed.set(topic, owing);
19
+ owing.shown = publication(async () => {
20
+ owed.delete(topic);
21
+ await work(owing.value);
22
+ });
23
+ return owing.shown;
24
+ },
25
+ watch(topic, notify) {
26
+ const held = topics.get(topic) ?? new Set();
27
+ topics.set(topic, held);
28
+ const watcher = {
29
+ ready: false,
30
+ held: () => topics.get(topic)?.has(watcher) === true,
31
+ stop() {
32
+ const on = topics.get(topic);
33
+ on?.delete(watcher);
34
+ if (on?.size === 0)
35
+ topics.delete(topic);
36
+ },
37
+ answer(value) {
38
+ watcher.ready = true;
39
+ notify(value);
40
+ },
41
+ };
42
+ held.add(watcher);
43
+ return watcher;
44
+ },
45
+ watching(topic, which = 'all') {
46
+ return [...(topics.get(topic) ?? [])].filter(({ ready }) => which === 'all' || ready === (which === 'ready'));
47
+ },
48
+ tell(topic, value) {
49
+ for (const watcher of topics.get(topic) ?? [])
50
+ watcher.answer(value);
51
+ },
52
+ close() {
53
+ topics.clear();
54
+ },
55
+ };
56
+ }
@@ -0,0 +1,24 @@
1
+ import type { Composition } from '../collection.js';
2
+ import type { RefreshedPage, RuntimeStore } from './records.js';
3
+ export type InstallHold = {
4
+ take(): void;
5
+ release(): void;
6
+ };
7
+ type Writes = {
8
+ exclusive<T>(work: () => Promise<T>): Promise<T>;
9
+ gathered<I, T>(key: string, input: I, merge: (earlier: I, later: I) => I | null, work: (input: I) => Promise<T>): Promise<T>;
10
+ written(): Promise<unknown>;
11
+ startingWrite<T>(work: () => Promise<T>): Promise<T>;
12
+ finishingWrite<T>(work: () => Promise<T>): Promise<T>;
13
+ ahead<T>(work: (hold: InstallHold) => Promise<T>): Promise<T>;
14
+ rederive(local: RuntimeStore, key: number, composition: Composition): Promise<{
15
+ readonly done: boolean;
16
+ readonly text: number;
17
+ }>;
18
+ refreshPage(local: RuntimeStore, key: number, composition: Composition, page: RefreshedPage): Promise<void>;
19
+ stageBytes(): number;
20
+ deriveBytes(): number;
21
+ };
22
+ export declare function createWrites(): Writes;
23
+ export {};
24
+ //# sourceMappingURL=writes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes.d.ts","sourceRoot":"","sources":["../../src/store/writes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA8BhE,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,IAAI,IAAI,CAAC;IAAC,OAAO,IAAI,IAAI,CAAA;CAAE,CAAC;AAE5D,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,CAAC,EAAE,CAAC,EACX,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,EACzC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrD,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,QAAQ,CACN,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,WAAW,CACT,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,UAAU,IAAI,MAAM,CAAC;IACrB,WAAW,IAAI,MAAM,CAAC;CACvB,CAAC;AAcF,wBAAgB,YAAY,IAAI,MAAM,CAqHrC"}
@@ -0,0 +1,125 @@
1
+ import { yielded } from '../turn.js';
2
+ const DERIVE_BYTES = 1 << 23;
3
+ const DERIVE_FLOOR = 1 << 18;
4
+ // An index build aims at this much database work, so a Save, a query or the next part's progress waits behind at most one short build.
5
+ const DERIVE_AIM_MS = 250;
6
+ // A build past its floor of text stops after a second and a half of work, its full-text writes included, so a Room whose text costs ten times the usual holds a Save, a query or the next part's progress behind no longer build.
7
+ const DERIVE_LONGEST_MS = 1_500;
8
+ const STAGE_BYTES = 1 << 20;
9
+ const STAGE_FLOOR = 1 << 16;
10
+ // A batch aims at this much database work, so a Save or a query waits behind at most one short write.
11
+ const STAGE_AIM_MS = 50;
12
+ async function timed(budget, work) {
13
+ const started = performance.now();
14
+ const done = await work();
15
+ const spent = performance.now() - started;
16
+ if (spent < budget.aim / 2)
17
+ budget.bytes = Math.min(budget.ceiling, Math.round(budget.bytes * 1.5));
18
+ else if (spent > budget.aim * 2) {
19
+ budget.bytes = Math.max(budget.floor, Math.round(budget.bytes / 1.5));
20
+ }
21
+ return done;
22
+ }
23
+ export function createWrites() {
24
+ let mutations = Promise.resolve();
25
+ let gathering = null;
26
+ const stageBudget = {
27
+ bytes: STAGE_FLOOR * 4,
28
+ floor: STAGE_FLOOR,
29
+ ceiling: STAGE_BYTES,
30
+ aim: STAGE_AIM_MS,
31
+ };
32
+ const deriveBudget = {
33
+ bytes: DERIVE_FLOOR * 4,
34
+ floor: DERIVE_FLOOR,
35
+ ceiling: DERIVE_BYTES,
36
+ aim: DERIVE_AIM_MS,
37
+ };
38
+ const installTurns = { busy: false, ahead: 0, finishing: [], starting: [] };
39
+ function exclusive(work) {
40
+ gathering = null;
41
+ const next = mutations.then(work, work);
42
+ mutations = next.then(() => undefined, () => undefined);
43
+ return next;
44
+ }
45
+ function gathered(key, input, merge, work) {
46
+ const tail = gathering;
47
+ if (tail !== null && tail.key === key) {
48
+ const merged = merge(tail.input, input);
49
+ if (merged !== null) {
50
+ tail.input = merged;
51
+ return tail.done;
52
+ }
53
+ }
54
+ const entry = { key, input, done: Promise.resolve() };
55
+ entry.done = exclusive(() => {
56
+ if (gathering === entry)
57
+ gathering = null;
58
+ return work(entry.input);
59
+ });
60
+ gathering = entry;
61
+ return entry.done;
62
+ }
63
+ function nextInstallTurn() {
64
+ if (installTurns.busy || installTurns.ahead > 0)
65
+ return;
66
+ const turn = installTurns.finishing.shift() ?? installTurns.starting.shift();
67
+ if (turn === undefined)
68
+ return;
69
+ installTurns.busy = true;
70
+ turn();
71
+ }
72
+ function installTurn(queue, work) {
73
+ return new Promise((resolve, reject) => {
74
+ queue.push(() => void exclusive(work)
75
+ .then(resolve, reject)
76
+ .finally(() => {
77
+ installTurns.busy = false;
78
+ nextInstallTurn();
79
+ }));
80
+ nextInstallTurn();
81
+ });
82
+ }
83
+ function resumeInstall() {
84
+ if (installTurns.ahead > 0)
85
+ return;
86
+ void yielded().then(nextInstallTurn);
87
+ }
88
+ async function ahead(work) {
89
+ let taken = false;
90
+ const hold = {
91
+ take() {
92
+ if (taken)
93
+ return;
94
+ taken = true;
95
+ installTurns.ahead += 1;
96
+ },
97
+ release() {
98
+ if (!taken)
99
+ return;
100
+ taken = false;
101
+ installTurns.ahead -= 1;
102
+ resumeInstall();
103
+ },
104
+ };
105
+ hold.take();
106
+ try {
107
+ return await work(hold);
108
+ }
109
+ finally {
110
+ hold.release();
111
+ }
112
+ }
113
+ return {
114
+ exclusive,
115
+ gathered,
116
+ written: () => mutations,
117
+ startingWrite: (work) => installTurn(installTurns.starting, work),
118
+ finishingWrite: (work) => installTurn(installTurns.finishing, work),
119
+ ahead,
120
+ rederive: (local, key, composition) => timed(deriveBudget, () => local.rederive(key, composition, deriveBudget.bytes, DERIVE_LONGEST_MS, DERIVE_FLOOR)),
121
+ refreshPage: (local, key, composition, page) => timed(stageBudget, () => local.refresh(key, composition, page)),
122
+ stageBytes: () => stageBudget.bytes,
123
+ deriveBytes: () => deriveBudget.bytes,
124
+ };
125
+ }
package/dist/store.d.ts CHANGED
@@ -1,177 +1,120 @@
1
- import type { ModelState } from './model.js';
2
- import type { Capability, HeadChange, Member, OperationScopes, ProviderLimit, ReplicaAdmission, TypedSelection } from './adapter.js';
3
- import type { AcceptedMessage, KeptReceipt } from './adapter.js';
1
+ import type { TypedPath } from './adapter.js';
2
+ import { schemaTypes } from './attached-model.js';
3
+ import { type Cell } from './cell.js';
4
4
  import type { ChangeBatch } from './change.js';
5
- import { type HeldBinary } from './overlay.js';
6
- import { type Later } from './turn.js';
7
- import type { ChatDraftFile } from './file.js';
8
- import type { Submission } from './outcome.js';
9
- import type { RoomDraftRecord, SavedDraft } from './room-draft.js';
10
- export declare const STORE_SCHEMA = 25;
11
- export declare const AUTHORED_SCHEMA = 3;
12
- export type ReplicaRecord = {
13
- locator: string;
14
- name: string;
15
- handle: string;
16
- operations: OperationScopes;
17
- replica: ReplicaAdmission;
18
- model: ModelState;
19
- typedSelection: TypedSelection | null;
20
- selectionModel: ModelState;
21
- providerOwnedPaths: readonly string[];
22
- roomVersion: string;
23
- transfer: string;
24
- documents: Readonly<Record<string, string>>;
25
- binaries: Readonly<Record<string, HeldBinary>>;
26
- revisions: Readonly<Record<string, string>>;
27
- fileIds: Readonly<Record<string, string>>;
28
- changes: Readonly<Record<string, HeadChange>>;
29
- written: Readonly<Record<string, string>>;
30
- };
31
- export type StagedLayer = Pick<ReplicaRecord, 'documents' | 'binaries' | 'revisions' | 'fileIds' | 'changes' | 'written'>;
32
- export type TransferRecord = {
33
- locator: string;
34
- transfer: string;
35
- selection: string;
36
- from: string;
37
- last: string;
38
- pageToken: string | null;
39
- models: {
40
- collection: ModelState;
41
- selection: ModelState;
42
- };
43
- };
44
- export type PendingState = {
45
- readonly drafts: readonly SavedDraft[];
46
- readonly submission: Submission;
47
- readonly lost: boolean;
48
- readonly upload?: unknown;
49
- readonly accepted?: string;
50
- };
51
- export type TargetRecord = {
52
- established: boolean;
53
- };
54
- export type QueueRecord = {
55
- locator: string;
56
- pending: readonly {
57
- batch: ChangeBatch;
58
- state: PendingState;
59
- }[];
60
- };
61
- export type PresentationRecord = {
62
- app: string;
63
- value: unknown;
64
- };
65
- export type HeldConversation = {
66
- conversation: string;
67
- read: string | null | undefined;
68
- partial: boolean;
69
- };
70
- export type MessageWindow = {
71
- messages: AcceptedMessage[];
72
- more: boolean;
5
+ import type { ChangeSet } from './change-set.js';
6
+ import type { Composition } from './collection.js';
7
+ import type { ReadinessWatch } from './preparation.js';
8
+ import type { Persistence } from './readiness.js';
9
+ import type { Listing } from './listing.js';
10
+ import type { Seeded } from './seed.js';
11
+ import type { ModelState } from './model.js';
12
+ import { type OpenedFiles } from './opened.js';
13
+ import { type HeldReplica, type ReplicaRecord } from './replica.js';
14
+ import type { RoomDraftRecord } from './room-draft.js';
15
+ import { type SyncStatus } from './status.js';
16
+ import type { RuntimeDatabase } from './tables.js';
17
+ import { type Installs } from './store/installs.js';
18
+ import { type HeldCover, type HeldStatus, type PendingState, type RuntimeStore } from './store/records.js';
19
+ import { type ReadinessQueue } from './store/readiness.js';
20
+ import { type RoomHeld } from './store/room-held.js';
21
+ import { type Space } from './store/space.js';
22
+ import { type Watcher, type Watching } from './store/watchers.js';
23
+ import { createWrites, type InstallHold } from './store/writes.js';
24
+ export type { RoomInstall } from './store/installs.js';
25
+ export type { AuthoredWrite, ChatDraftRecord, ChatSubmission, CoveredRoom, Facts, HeldConversation, HeldCover, PendingState, RefreshedPage, RuntimeStore, StagedPage, TransferRecord, } from './store/records.js';
26
+ export type { InstallHold } from './store/writes.js';
27
+ export type { CommittedWrite, QueryRoom, RoomCommit, RuntimeDatabase, StoredEntry, StoredFile, View, } from './tables.js';
28
+ export type Stored = {
29
+ readonly record: ReplicaRecord;
30
+ readonly indexed: boolean;
31
+ readonly documents: number;
73
32
  };
74
- export type ConversationWrite = {
75
- conversation: string;
76
- messages: readonly AcceptedMessage[];
77
- read?: {
78
- at: string | null;
79
- partial: boolean;
80
- };
33
+ export type Held = HeldReplica & {
34
+ readonly states: ReadonlyMap<string, PendingState>;
81
35
  };
82
- export type ChatSubmission = {
83
- readonly operation: string;
84
- readonly text: string;
85
- readonly files: readonly ChatDraftFile[];
86
- readonly turn: string | null;
36
+ export type Work = {
37
+ readonly replica: Held | undefined;
38
+ readonly queue: readonly ChangeBatch[];
39
+ readonly states: ReadonlyMap<string, PendingState>;
87
40
  };
88
- export type ChatDraftRecord = {
89
- conversation: string;
90
- text: string;
91
- files: readonly ChatDraftFile[];
92
- revision: string;
93
- submitted?: readonly ChatSubmission[];
94
- moves?: readonly string[];
41
+ type LandedAhead = Readonly<Record<string, string | undefined>>;
42
+ type AttachedFile = {
43
+ readonly revision: string;
44
+ readonly mediaType: string;
95
45
  };
96
- export type CallRecord = {
97
- readonly operation: string;
98
- readonly name: string;
99
- readonly input: unknown;
46
+ type Seeds = {
47
+ of(key: string): Seeded | undefined;
48
+ keep(key: string, seed: Seeded): void;
49
+ drop(key: string): void;
100
50
  };
101
- export type RecordWrite = {
102
- next: ReplicaRecord;
103
- previous: ReplicaRecord | null;
104
- stored?: StagedLayer;
51
+ type Device = {
52
+ readonly persistence: Persistence;
53
+ readonly storageLoss: string | null;
54
+ readonly heldWhenOpened: boolean;
55
+ readonly preparing: boolean;
56
+ readonly sweeping: boolean;
57
+ readonly unpreparedDemand: ReadonlySet<string>;
58
+ readonly unpreparable: ReadonlySet<string>;
59
+ readonly establishing: ReadonlySet<string>;
60
+ readonly status: SyncStatus;
61
+ readonly roomsShown: Listing | null;
105
62
  };
106
- export type AuthoredWrite = {
107
- locator: string;
108
- queue: readonly ChangeBatch[];
109
- founded?: readonly ChangeBatch[];
110
- saved?: ReadonlyMap<string, readonly SavedDraft[]>;
111
- roomDrafts?: readonly RoomDraftRecord[];
112
- consumedRoomDrafts?: readonly string[];
63
+ type StoreOptions = {
64
+ readonly database: RuntimeDatabase;
65
+ readonly roomTypes: Parameters<typeof schemaTypes>[1];
66
+ readonly builtIn: ModelState;
67
+ readonly typedPaths: readonly TypedPath[];
68
+ readonly persistence: Persistence;
69
+ lost(locator: string): boolean;
70
+ opening(records: RuntimeStore): Promise<RuntimeStore>;
71
+ unpublished(error: unknown): void;
72
+ changed(set: ChangeSet): Promise<void>;
73
+ deliverReadiness(owed: readonly ReadinessWatch[]): Promise<void>;
74
+ spaceFreed(): void;
113
75
  };
114
- export type RuntimeStore = {
115
- all(): Promise<readonly ReplicaRecord[]>;
116
- keepAuthored(input: AuthoredWrite): Promise<void>;
117
- write(input: RecordWrite): Promise<void>;
118
- revokeModels(records: readonly ReplicaRecord[]): Promise<void>;
119
- lastCompleted(): Promise<string | null>;
120
- complete(at: string): Promise<void>;
121
- providerLimits(): Promise<readonly ProviderLimit[]>;
122
- capabilities(): Promise<readonly Capability[]>;
123
- declare(limits: readonly ProviderLimit[], capabilities: readonly Capability[]): Promise<void>;
124
- member(): Promise<Member | null>;
125
- keepMember(member: Member | null): Promise<void>;
126
- targets(): Promise<Readonly<Record<string, TargetRecord>>>;
127
- keepTargets(targets: Readonly<Record<string, TargetRecord>>): Promise<void>;
128
- queues(): Promise<readonly QueueRecord[]>;
129
- submit(locator: string, id: string, submission: Submission, lost: boolean): Promise<void>;
130
- accept(locator: string, id: string, roomVersion: string): Promise<void>;
131
- keepUpload(locator: string, id: string, upload: unknown): Promise<void>;
132
- roomDrafts(): Promise<readonly RoomDraftRecord[]>;
133
- presentation(): Promise<readonly PresentationRecord[]>;
134
- present(record: PresentationRecord): Promise<void>;
135
- conversations(): Promise<readonly HeldConversation[]>;
136
- keepMessages(write: ConversationWrite): Promise<void>;
137
- messageWindow(conversation: string, limit: number, before: readonly [string, string] | null): Promise<MessageWindow>;
138
- messageCount(conversation: string): Promise<number>;
139
- messagesAfter(conversation: string, identity: string | null): Promise<AcceptedMessage[]>;
140
- messageIdentities(conversation: string): Promise<readonly string[]>;
141
- turnArrived(conversation: string, turn: string): Promise<boolean>;
142
- dropConversations(conversations: readonly string[]): Promise<void>;
143
- chatDrafts(): Promise<readonly ChatDraftRecord[]>;
144
- keepChatDrafts(records: readonly ChatDraftRecord[]): Promise<void>;
145
- dropChatDraft(conversation: string): Promise<void>;
146
- calls(): Promise<readonly CallRecord[]>;
147
- keepCall(record: CallRecord): Promise<void>;
148
- dropCall(operation: string): Promise<void>;
149
- keepRoomDraft(record: RoomDraftRecord): Promise<void>;
150
- discardRoomDraft(locator: string, path: string): Promise<void>;
151
- fences(): Promise<readonly string[]>;
152
- erase(locators: readonly string[]): Promise<void>;
153
- discard(locator: string): Promise<void>;
154
- transfers(): Promise<readonly TransferRecord[]>;
155
- staged(record: TransferRecord): Promise<StagedLayer>;
156
- stage(record: TransferRecord, page: StagedLayer): Promise<void>;
157
- abandon(locator: string): Promise<void>;
158
- receivedHeads(): Promise<readonly KeptReceipt[]>;
159
- receivedParts(key: string, count: number): Promise<readonly unknown[]>;
160
- keepReceived(key: string, head: unknown, part?: {
161
- index: number;
162
- value: unknown;
163
- }): Promise<void>;
164
- dropReceived(keys: readonly string[]): Promise<void>;
165
- generation(): Promise<string | null>;
166
- rememberGeneration(value: string): Promise<void>;
76
+ export type Store = {
77
+ readonly device: Cell<Device>;
78
+ readonly space: Space;
79
+ readonly readiness: ReadinessQueue<ReadinessWatch>;
80
+ ask: RuntimeDatabase['ask'];
81
+ changed(set: ChangeSet): Promise<void>;
82
+ open(): Promise<RuntimeStore>;
83
+ durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;
84
+ exclusive<T>(work: () => Promise<T>): Promise<T>;
85
+ gathered<I, T>(key: string, input: I, merge: (earlier: I, later: I) => I | null, work: (input: I) => Promise<T>): Promise<T>;
86
+ written(): Promise<unknown>;
87
+ startingWrite<T>(work: () => Promise<T>): Promise<T>;
88
+ finishingWrite<T>(work: () => Promise<T>): Promise<T>;
89
+ ahead<T>(work: (hold: InstallHold) => Promise<T>): Promise<T>;
90
+ rederive: ReturnType<typeof createWrites>['rederive'];
91
+ refreshPage: ReturnType<typeof createWrites>['refreshPage'];
92
+ stageBytes(): number;
93
+ deriveBytes(): number;
94
+ rooms(locators?: readonly string[]): Promise<ReadonlyMap<string, Stored>>;
95
+ record(locator: string): Promise<ReplicaRecord | undefined>;
96
+ work(locator: string): Promise<Work>;
97
+ replica(locator: string): Promise<Held | undefined>;
98
+ covering(): Promise<HeldCover>;
99
+ status(): Promise<HeldStatus>;
100
+ queued(): Promise<readonly string[]>;
101
+ drafts(locator?: string, paths?: readonly string[]): Promise<readonly RoomDraftRecord[]>;
102
+ draft(locator: string, path: string): Promise<RoomDraftRecord | undefined>;
103
+ composed(record: Pick<ReplicaRecord, 'model' | 'declaration'>): Composition;
104
+ publication(work: () => Promise<void>): Promise<void>;
105
+ owing<T>(topic: string, add: (owed: T | undefined) => T, work: (owed: T) => Promise<void>): Promise<void>;
106
+ watch(topic: string, notify: (value: unknown) => void): Watcher;
107
+ watching(topic: string, which?: Watching): readonly Watcher[];
108
+ tell(topic: string, value: unknown): void;
109
+ readonly installs: Installs;
110
+ readonly seeds: Seeds;
111
+ readonly landed: RoomHeld<LandedAhead>;
112
+ readonly attached: RoomHeld<AttachedFile>;
113
+ readonly opened: OpenedFiles;
114
+ part(file: string, part: number): Promise<Uint8Array | null>;
115
+ prepareAgain(locator?: string): void;
116
+ forget(locator: string): void;
167
117
  close(): void;
168
118
  };
169
- export declare function transacted<T>(database: IDBDatabase, stores: string | readonly string[], mode: IDBTransactionMode, work: (transaction: IDBTransaction) => Later<T>): Promise<T>;
170
- export declare function authoredHolder(): Promise<string | null>;
171
- export declare function authoredBy(holder: string): Promise<boolean>;
172
- export declare function authoredBinding(): Promise<string | null>;
173
- export declare function bindAuthored(binding: string): Promise<void>;
174
- export declare function removeRuntimeStore(holder?: string): Promise<boolean>;
175
- export declare function openDatabase(name: string, version: number, upgrade: (opening: IDBOpenDBRequest, oldVersion: number) => void): Promise<IDBDatabase>;
176
- export declare function openRuntimeStore(fenced: (locator: string) => boolean): Promise<RuntimeStore>;
119
+ export declare function createStore(options: StoreOptions): Store;
177
120
  //# sourceMappingURL=store.d.ts.map