@earendil-works/chord 1.4.0 → 1.5.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 (820) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +79 -14
  3. package/dist/cell.d.ts +7 -7
  4. package/dist/cell.d.ts.map +1 -1
  5. package/dist/cell.js.map +1 -1
  6. package/dist/context/index.d.ts +1 -1
  7. package/dist/context/index.d.ts.map +1 -1
  8. package/dist/context/index.js +1 -1
  9. package/dist/context/index.js.map +1 -1
  10. package/dist/contract.d.ts +51 -52
  11. package/dist/contract.d.ts.map +1 -1
  12. package/dist/contract.js +19 -24
  13. package/dist/contract.js.map +1 -1
  14. package/dist/delta/apply-immutable-trusted.js +3 -4
  15. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  16. package/dist/delta/diff.d.ts.map +1 -1
  17. package/dist/delta/diff.js +5 -3
  18. package/dist/delta/diff.js.map +1 -1
  19. package/dist/delta/index.d.ts +9 -1
  20. package/dist/delta/index.d.ts.map +1 -1
  21. package/dist/delta/index.js +15 -11
  22. package/dist/delta/index.js.map +1 -1
  23. package/dist/delta/pending.d.ts +36 -0
  24. package/dist/delta/pending.d.ts.map +1 -0
  25. package/dist/delta/pending.js +143 -0
  26. package/dist/delta/pending.js.map +1 -0
  27. package/dist/delta/tracker.d.ts +12 -0
  28. package/dist/delta/tracker.d.ts.map +1 -1
  29. package/dist/delta/tracker.js +109 -39
  30. package/dist/delta/tracker.js.map +1 -1
  31. package/dist/host.d.ts.map +1 -1
  32. package/dist/host.js +9 -7
  33. package/dist/host.js.map +1 -1
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/next/contracts/accepts.d.ts +81 -0
  39. package/dist/next/contracts/accepts.d.ts.map +1 -0
  40. package/dist/next/contracts/accepts.js +123 -0
  41. package/dist/next/contracts/accepts.js.map +1 -0
  42. package/dist/next/contracts/contract.d.ts +121 -0
  43. package/dist/next/contracts/contract.d.ts.map +1 -0
  44. package/dist/next/contracts/contract.js +50 -0
  45. package/dist/next/contracts/contract.js.map +1 -0
  46. package/dist/next/contracts/declare.d.ts +107 -0
  47. package/dist/next/contracts/declare.d.ts.map +1 -0
  48. package/dist/next/contracts/declare.js +136 -0
  49. package/dist/next/contracts/declare.js.map +1 -0
  50. package/dist/next/contracts/evolve.d.ts +92 -0
  51. package/dist/next/contracts/evolve.d.ts.map +1 -0
  52. package/dist/next/contracts/evolve.js +179 -0
  53. package/dist/next/contracts/evolve.js.map +1 -0
  54. package/dist/next/contracts/fingerprint.d.ts +16 -0
  55. package/dist/next/contracts/fingerprint.d.ts.map +1 -0
  56. package/dist/next/contracts/fingerprint.js +50 -0
  57. package/dist/next/contracts/fingerprint.js.map +1 -0
  58. package/dist/next/contracts/history.d.ts +71 -0
  59. package/dist/next/contracts/history.d.ts.map +1 -0
  60. package/dist/next/contracts/history.js +3 -0
  61. package/dist/next/contracts/history.js.map +1 -0
  62. package/dist/next/contracts/host-kind.d.ts +40 -0
  63. package/dist/next/contracts/host-kind.d.ts.map +1 -0
  64. package/dist/next/contracts/host-kind.js +37 -0
  65. package/dist/next/contracts/host-kind.js.map +1 -0
  66. package/dist/next/contracts/index.d.ts +7 -0
  67. package/dist/next/contracts/index.d.ts.map +1 -0
  68. package/dist/next/contracts/index.js +6 -0
  69. package/dist/next/contracts/index.js.map +1 -0
  70. package/dist/next/contracts/internal.d.ts +10 -0
  71. package/dist/next/contracts/internal.d.ts.map +1 -0
  72. package/dist/next/contracts/internal.js +9 -0
  73. package/dist/next/contracts/internal.js.map +1 -0
  74. package/dist/next/contracts/names.d.ts +3 -0
  75. package/dist/next/contracts/names.d.ts.map +1 -0
  76. package/dist/next/contracts/names.js +13 -0
  77. package/dist/next/contracts/names.js.map +1 -0
  78. package/dist/next/contracts/params.d.ts +28 -0
  79. package/dist/next/contracts/params.d.ts.map +1 -0
  80. package/dist/next/contracts/params.js +50 -0
  81. package/dist/next/contracts/params.js.map +1 -0
  82. package/dist/next/contracts/schema.d.ts +102 -0
  83. package/dist/next/contracts/schema.d.ts.map +1 -0
  84. package/dist/next/contracts/schema.js +103 -0
  85. package/dist/next/contracts/schema.js.map +1 -0
  86. package/dist/next/contracts/snapshot.d.ts +16 -0
  87. package/dist/next/contracts/snapshot.d.ts.map +1 -0
  88. package/dist/next/contracts/snapshot.js +167 -0
  89. package/dist/next/contracts/snapshot.js.map +1 -0
  90. package/dist/next/data/args.d.ts +50 -0
  91. package/dist/next/data/args.d.ts.map +1 -0
  92. package/dist/next/data/args.js +83 -0
  93. package/dist/next/data/args.js.map +1 -0
  94. package/dist/next/data/errors.d.ts +73 -0
  95. package/dist/next/data/errors.d.ts.map +1 -0
  96. package/dist/next/data/errors.js +107 -0
  97. package/dist/next/data/errors.js.map +1 -0
  98. package/dist/next/data/failure.d.ts +26 -0
  99. package/dist/next/data/failure.d.ts.map +1 -0
  100. package/dist/next/data/failure.js +72 -0
  101. package/dist/next/data/failure.js.map +1 -0
  102. package/dist/next/data/index.d.ts +4 -0
  103. package/dist/next/data/index.d.ts.map +1 -0
  104. package/dist/next/data/index.js +4 -0
  105. package/dist/next/data/index.js.map +1 -0
  106. package/dist/next/data/internal.d.ts +7 -0
  107. package/dist/next/data/internal.d.ts.map +1 -0
  108. package/dist/next/data/internal.js +8 -0
  109. package/dist/next/data/internal.js.map +1 -0
  110. package/dist/next/data/params.d.ts +20 -0
  111. package/dist/next/data/params.d.ts.map +1 -0
  112. package/dist/next/data/params.js +31 -0
  113. package/dist/next/data/params.js.map +1 -0
  114. package/dist/next/data/principal.d.ts +17 -0
  115. package/dist/next/data/principal.d.ts.map +1 -0
  116. package/dist/next/data/principal.js +41 -0
  117. package/dist/next/data/principal.js.map +1 -0
  118. package/dist/next/data/validator.d.ts +12 -0
  119. package/dist/next/data/validator.d.ts.map +1 -0
  120. package/dist/next/data/validator.js +34 -0
  121. package/dist/next/data/validator.js.map +1 -0
  122. package/dist/next/documents/address-source.d.ts +20 -0
  123. package/dist/next/documents/address-source.d.ts.map +1 -0
  124. package/dist/next/documents/address-source.js +44 -0
  125. package/dist/next/documents/address-source.js.map +1 -0
  126. package/dist/next/documents/definition.d.ts +84 -0
  127. package/dist/next/documents/definition.d.ts.map +1 -0
  128. package/dist/next/documents/definition.js +73 -0
  129. package/dist/next/documents/definition.js.map +1 -0
  130. package/dist/next/documents/documents.d.ts +106 -0
  131. package/dist/next/documents/documents.d.ts.map +1 -0
  132. package/dist/next/documents/documents.js +224 -0
  133. package/dist/next/documents/documents.js.map +1 -0
  134. package/dist/next/documents/fence.d.ts +9 -0
  135. package/dist/next/documents/fence.d.ts.map +1 -0
  136. package/dist/next/documents/fence.js +15 -0
  137. package/dist/next/documents/fence.js.map +1 -0
  138. package/dist/next/documents/handles.d.ts +76 -0
  139. package/dist/next/documents/handles.d.ts.map +1 -0
  140. package/dist/next/documents/handles.js +66 -0
  141. package/dist/next/documents/handles.js.map +1 -0
  142. package/dist/next/documents/index.d.ts +4 -0
  143. package/dist/next/documents/index.d.ts.map +1 -0
  144. package/dist/next/documents/index.js +3 -0
  145. package/dist/next/documents/index.js.map +1 -0
  146. package/dist/next/documents/internal.d.ts +9 -0
  147. package/dist/next/documents/internal.d.ts.map +1 -0
  148. package/dist/next/documents/internal.js +9 -0
  149. package/dist/next/documents/internal.js.map +1 -0
  150. package/dist/next/documents/keyed-slot.d.ts +103 -0
  151. package/dist/next/documents/keyed-slot.d.ts.map +1 -0
  152. package/dist/next/documents/keyed-slot.js +395 -0
  153. package/dist/next/documents/keyed-slot.js.map +1 -0
  154. package/dist/next/documents/line.d.ts +7 -0
  155. package/dist/next/documents/line.d.ts.map +1 -0
  156. package/dist/next/documents/line.js +14 -0
  157. package/dist/next/documents/line.js.map +1 -0
  158. package/dist/next/documents/persistence.d.ts +104 -0
  159. package/dist/next/documents/persistence.d.ts.map +1 -0
  160. package/dist/next/documents/persistence.js +128 -0
  161. package/dist/next/documents/persistence.js.map +1 -0
  162. package/dist/next/documents/residency.d.ts +31 -0
  163. package/dist/next/documents/residency.d.ts.map +1 -0
  164. package/dist/next/documents/residency.js +93 -0
  165. package/dist/next/documents/residency.js.map +1 -0
  166. package/dist/next/documents/slot.d.ts +109 -0
  167. package/dist/next/documents/slot.d.ts.map +1 -0
  168. package/dist/next/documents/slot.js +181 -0
  169. package/dist/next/documents/slot.js.map +1 -0
  170. package/dist/next/documents/transaction.d.ts +133 -0
  171. package/dist/next/documents/transaction.d.ts.map +1 -0
  172. package/dist/next/documents/transaction.js +409 -0
  173. package/dist/next/documents/transaction.js.map +1 -0
  174. package/dist/next/host/activity.d.ts +31 -0
  175. package/dist/next/host/activity.d.ts.map +1 -0
  176. package/dist/next/host/activity.js +40 -0
  177. package/dist/next/host/activity.js.map +1 -0
  178. package/dist/next/host/adapted.d.ts +49 -0
  179. package/dist/next/host/adapted.d.ts.map +1 -0
  180. package/dist/next/host/adapted.js +214 -0
  181. package/dist/next/host/adapted.js.map +1 -0
  182. package/dist/next/host/attempt.d.ts +278 -0
  183. package/dist/next/host/attempt.d.ts.map +1 -0
  184. package/dist/next/host/attempt.js +1072 -0
  185. package/dist/next/host/attempt.js.map +1 -0
  186. package/dist/next/host/backoff.d.ts +29 -0
  187. package/dist/next/host/backoff.d.ts.map +1 -0
  188. package/dist/next/host/backoff.js +69 -0
  189. package/dist/next/host/backoff.js.map +1 -0
  190. package/dist/next/host/ctx.d.ts +47 -0
  191. package/dist/next/host/ctx.d.ts.map +1 -0
  192. package/dist/next/host/ctx.js +108 -0
  193. package/dist/next/host/ctx.js.map +1 -0
  194. package/dist/next/host/deadline.d.ts +12 -0
  195. package/dist/next/host/deadline.d.ts.map +1 -0
  196. package/dist/next/host/deadline.js +40 -0
  197. package/dist/next/host/deadline.js.map +1 -0
  198. package/dist/next/host/dependencies.d.ts +65 -0
  199. package/dist/next/host/dependencies.d.ts.map +1 -0
  200. package/dist/next/host/dependencies.js +115 -0
  201. package/dist/next/host/dependencies.js.map +1 -0
  202. package/dist/next/host/destination.d.ts +48 -0
  203. package/dist/next/host/destination.d.ts.map +1 -0
  204. package/dist/next/host/destination.js +101 -0
  205. package/dist/next/host/destination.js.map +1 -0
  206. package/dist/next/host/facet.d.ts +79 -0
  207. package/dist/next/host/facet.d.ts.map +1 -0
  208. package/dist/next/host/facet.js +55 -0
  209. package/dist/next/host/facet.js.map +1 -0
  210. package/dist/next/host/follow.d.ts +52 -0
  211. package/dist/next/host/follow.d.ts.map +1 -0
  212. package/dist/next/host/follow.js +207 -0
  213. package/dist/next/host/follow.js.map +1 -0
  214. package/dist/next/host/host.d.ts +495 -0
  215. package/dist/next/host/host.d.ts.map +1 -0
  216. package/dist/next/host/host.js +1075 -0
  217. package/dist/next/host/host.js.map +1 -0
  218. package/dist/next/host/index.d.ts +17 -0
  219. package/dist/next/host/index.d.ts.map +1 -0
  220. package/dist/next/host/index.js +6 -0
  221. package/dist/next/host/index.js.map +1 -0
  222. package/dist/next/host/internal.d.ts +10 -0
  223. package/dist/next/host/internal.d.ts.map +1 -0
  224. package/dist/next/host/internal.js +8 -0
  225. package/dist/next/host/internal.js.map +1 -0
  226. package/dist/next/host/members.d.ts +50 -0
  227. package/dist/next/host/members.d.ts.map +1 -0
  228. package/dist/next/host/members.js +107 -0
  229. package/dist/next/host/members.js.map +1 -0
  230. package/dist/next/host/native.d.ts +55 -0
  231. package/dist/next/host/native.d.ts.map +1 -0
  232. package/dist/next/host/native.js +92 -0
  233. package/dist/next/host/native.js.map +1 -0
  234. package/dist/next/host/object.d.ts +290 -0
  235. package/dist/next/host/object.d.ts.map +1 -0
  236. package/dist/next/host/object.js +1127 -0
  237. package/dist/next/host/object.js.map +1 -0
  238. package/dist/next/host/parked.d.ts +23 -0
  239. package/dist/next/host/parked.d.ts.map +1 -0
  240. package/dist/next/host/parked.js +79 -0
  241. package/dist/next/host/parked.js.map +1 -0
  242. package/dist/next/host/presence.d.ts +34 -0
  243. package/dist/next/host/presence.d.ts.map +1 -0
  244. package/dist/next/host/presence.js +117 -0
  245. package/dist/next/host/presence.js.map +1 -0
  246. package/dist/next/host/ref-state.d.ts +53 -0
  247. package/dist/next/host/ref-state.d.ts.map +1 -0
  248. package/dist/next/host/ref-state.js +83 -0
  249. package/dist/next/host/ref-state.js.map +1 -0
  250. package/dist/next/host/reference-keys.d.ts +36 -0
  251. package/dist/next/host/reference-keys.d.ts.map +1 -0
  252. package/dist/next/host/reference-keys.js +168 -0
  253. package/dist/next/host/reference-keys.js.map +1 -0
  254. package/dist/next/host/reference-source.d.ts +65 -0
  255. package/dist/next/host/reference-source.d.ts.map +1 -0
  256. package/dist/next/host/reference-source.js +285 -0
  257. package/dist/next/host/reference-source.js.map +1 -0
  258. package/dist/next/host/reference.d.ts +308 -0
  259. package/dist/next/host/reference.d.ts.map +1 -0
  260. package/dist/next/host/reference.js +775 -0
  261. package/dist/next/host/reference.js.map +1 -0
  262. package/dist/next/host/retry-on.d.ts +28 -0
  263. package/dist/next/host/retry-on.d.ts.map +1 -0
  264. package/dist/next/host/retry-on.js +52 -0
  265. package/dist/next/host/retry-on.js.map +1 -0
  266. package/dist/next/host/revocation.d.ts +16 -0
  267. package/dist/next/host/revocation.d.ts.map +1 -0
  268. package/dist/next/host/revocation.js +27 -0
  269. package/dist/next/host/revocation.js.map +1 -0
  270. package/dist/next/host/root.d.ts +27 -0
  271. package/dist/next/host/root.d.ts.map +1 -0
  272. package/dist/next/host/root.js +68 -0
  273. package/dist/next/host/root.js.map +1 -0
  274. package/dist/next/host/route.d.ts +64 -0
  275. package/dist/next/host/route.d.ts.map +1 -0
  276. package/dist/next/host/route.js +190 -0
  277. package/dist/next/host/route.js.map +1 -0
  278. package/dist/next/host/routines.d.ts +76 -0
  279. package/dist/next/host/routines.d.ts.map +1 -0
  280. package/dist/next/host/routines.js +350 -0
  281. package/dist/next/host/routines.js.map +1 -0
  282. package/dist/next/host/sleep.d.ts +9 -0
  283. package/dist/next/host/sleep.d.ts.map +1 -0
  284. package/dist/next/host/sleep.js +40 -0
  285. package/dist/next/host/sleep.js.map +1 -0
  286. package/dist/next/host/staging.d.ts +94 -0
  287. package/dist/next/host/staging.d.ts.map +1 -0
  288. package/dist/next/host/staging.js +302 -0
  289. package/dist/next/host/staging.js.map +1 -0
  290. package/dist/next/host/unbound.d.ts +30 -0
  291. package/dist/next/host/unbound.d.ts.map +1 -0
  292. package/dist/next/host/unbound.js +67 -0
  293. package/dist/next/host/unbound.js.map +1 -0
  294. package/dist/next/host/uuid.d.ts +3 -0
  295. package/dist/next/host/uuid.d.ts.map +1 -0
  296. package/dist/next/host/uuid.js +38 -0
  297. package/dist/next/host/uuid.js.map +1 -0
  298. package/dist/next/index.d.ts +28 -0
  299. package/dist/next/index.d.ts.map +1 -0
  300. package/dist/next/index.js +18 -0
  301. package/dist/next/index.js.map +1 -0
  302. package/dist/next/jobs/definition.d.ts +96 -0
  303. package/dist/next/jobs/definition.d.ts.map +1 -0
  304. package/dist/next/jobs/definition.js +83 -0
  305. package/dist/next/jobs/definition.js.map +1 -0
  306. package/dist/next/jobs/index.d.ts +5 -0
  307. package/dist/next/jobs/index.d.ts.map +1 -0
  308. package/dist/next/jobs/index.js +3 -0
  309. package/dist/next/jobs/index.js.map +1 -0
  310. package/dist/next/jobs/internal.d.ts +3 -0
  311. package/dist/next/jobs/internal.d.ts.map +1 -0
  312. package/dist/next/jobs/internal.js +4 -0
  313. package/dist/next/jobs/internal.js.map +1 -0
  314. package/dist/next/jobs/job.d.ts +152 -0
  315. package/dist/next/jobs/job.d.ts.map +1 -0
  316. package/dist/next/jobs/job.js +320 -0
  317. package/dist/next/jobs/job.js.map +1 -0
  318. package/dist/next/jobs/persisted.d.ts +38 -0
  319. package/dist/next/jobs/persisted.d.ts.map +1 -0
  320. package/dist/next/jobs/persisted.js +95 -0
  321. package/dist/next/jobs/persisted.js.map +1 -0
  322. package/dist/next/jobs/records.d.ts +231 -0
  323. package/dist/next/jobs/records.d.ts.map +1 -0
  324. package/dist/next/jobs/records.js +869 -0
  325. package/dist/next/jobs/records.js.map +1 -0
  326. package/dist/next/jobs/run-states.d.ts +69 -0
  327. package/dist/next/jobs/run-states.d.ts.map +1 -0
  328. package/dist/next/jobs/run-states.js +228 -0
  329. package/dist/next/jobs/run-states.js.map +1 -0
  330. package/dist/next/jobs/run.d.ts +113 -0
  331. package/dist/next/jobs/run.d.ts.map +1 -0
  332. package/dist/next/jobs/run.js +200 -0
  333. package/dist/next/jobs/run.js.map +1 -0
  334. package/dist/next/jobs/running.d.ts +44 -0
  335. package/dist/next/jobs/running.d.ts.map +1 -0
  336. package/dist/next/jobs/running.js +117 -0
  337. package/dist/next/jobs/running.js.map +1 -0
  338. package/dist/next/jobs/stored.d.ts +63 -0
  339. package/dist/next/jobs/stored.d.ts.map +1 -0
  340. package/dist/next/jobs/stored.js +55 -0
  341. package/dist/next/jobs/stored.js.map +1 -0
  342. package/dist/next/link/binary.d.ts +4 -0
  343. package/dist/next/link/binary.d.ts.map +1 -0
  344. package/dist/next/link/binary.js +534 -0
  345. package/dist/next/link/binary.js.map +1 -0
  346. package/dist/next/link/channel.d.ts +63 -0
  347. package/dist/next/link/channel.d.ts.map +1 -0
  348. package/dist/next/link/channel.js +202 -0
  349. package/dist/next/link/channel.js.map +1 -0
  350. package/dist/next/link/errors.d.ts +7 -0
  351. package/dist/next/link/errors.d.ts.map +1 -0
  352. package/dist/next/link/errors.js +21 -0
  353. package/dist/next/link/errors.js.map +1 -0
  354. package/dist/next/link/index.d.ts +8 -0
  355. package/dist/next/link/index.d.ts.map +1 -0
  356. package/dist/next/link/index.js +8 -0
  357. package/dist/next/link/index.js.map +1 -0
  358. package/dist/next/link/internal.d.ts +9 -0
  359. package/dist/next/link/internal.d.ts.map +1 -0
  360. package/dist/next/link/internal.js +10 -0
  361. package/dist/next/link/internal.js.map +1 -0
  362. package/dist/next/link/ipc.d.ts +22 -0
  363. package/dist/next/link/ipc.d.ts.map +1 -0
  364. package/dist/next/link/ipc.js +64 -0
  365. package/dist/next/link/ipc.js.map +1 -0
  366. package/dist/next/link/link.d.ts +34 -0
  367. package/dist/next/link/link.d.ts.map +1 -0
  368. package/dist/next/link/link.js +87 -0
  369. package/dist/next/link/link.js.map +1 -0
  370. package/dist/next/link/message.d.ts +249 -0
  371. package/dist/next/link/message.d.ts.map +1 -0
  372. package/dist/next/link/message.js +123 -0
  373. package/dist/next/link/message.js.map +1 -0
  374. package/dist/next/link/part.d.ts +80 -0
  375. package/dist/next/link/part.d.ts.map +1 -0
  376. package/dist/next/link/part.js +164 -0
  377. package/dist/next/link/part.js.map +1 -0
  378. package/dist/next/link/text.d.ts +6 -0
  379. package/dist/next/link/text.d.ts.map +1 -0
  380. package/dist/next/link/text.js +335 -0
  381. package/dist/next/link/text.js.map +1 -0
  382. package/dist/next/link/values.d.ts +40 -0
  383. package/dist/next/link/values.d.ts.map +1 -0
  384. package/dist/next/link/values.js +117 -0
  385. package/dist/next/link/values.js.map +1 -0
  386. package/dist/next/link/websocket.d.ts +26 -0
  387. package/dist/next/link/websocket.d.ts.map +1 -0
  388. package/dist/next/link/websocket.js +91 -0
  389. package/dist/next/link/websocket.js.map +1 -0
  390. package/dist/next/registries/contribution.d.ts +50 -0
  391. package/dist/next/registries/contribution.d.ts.map +1 -0
  392. package/dist/next/registries/contribution.js +129 -0
  393. package/dist/next/registries/contribution.js.map +1 -0
  394. package/dist/next/registries/entries.d.ts +18 -0
  395. package/dist/next/registries/entries.d.ts.map +1 -0
  396. package/dist/next/registries/entries.js +42 -0
  397. package/dist/next/registries/entries.js.map +1 -0
  398. package/dist/next/registries/index.d.ts +3 -0
  399. package/dist/next/registries/index.d.ts.map +1 -0
  400. package/dist/next/registries/index.js +5 -0
  401. package/dist/next/registries/index.js.map +1 -0
  402. package/dist/next/registries/internal.d.ts +4 -0
  403. package/dist/next/registries/internal.d.ts.map +1 -0
  404. package/dist/next/registries/internal.js +5 -0
  405. package/dist/next/registries/internal.js.map +1 -0
  406. package/dist/next/registries/record.d.ts +94 -0
  407. package/dist/next/registries/record.d.ts.map +1 -0
  408. package/dist/next/registries/record.js +253 -0
  409. package/dist/next/registries/record.js.map +1 -0
  410. package/dist/next/registries/registry.d.ts +74 -0
  411. package/dist/next/registries/registry.d.ts.map +1 -0
  412. package/dist/next/registries/registry.js +14 -0
  413. package/dist/next/registries/registry.js.map +1 -0
  414. package/dist/next/registries/value.d.ts +48 -0
  415. package/dist/next/registries/value.d.ts.map +1 -0
  416. package/dist/next/registries/value.js +199 -0
  417. package/dist/next/registries/value.js.map +1 -0
  418. package/dist/next/remote/calls.d.ts +25 -0
  419. package/dist/next/remote/calls.d.ts.map +1 -0
  420. package/dist/next/remote/calls.js +62 -0
  421. package/dist/next/remote/calls.js.map +1 -0
  422. package/dist/next/remote/consumer.d.ts +42 -0
  423. package/dist/next/remote/consumer.d.ts.map +1 -0
  424. package/dist/next/remote/consumer.js +343 -0
  425. package/dist/next/remote/consumer.js.map +1 -0
  426. package/dist/next/remote/hold.d.ts +130 -0
  427. package/dist/next/remote/hold.d.ts.map +1 -0
  428. package/dist/next/remote/hold.js +537 -0
  429. package/dist/next/remote/hold.js.map +1 -0
  430. package/dist/next/remote/host-link.d.ts +77 -0
  431. package/dist/next/remote/host-link.d.ts.map +1 -0
  432. package/dist/next/remote/host-link.js +182 -0
  433. package/dist/next/remote/host-link.js.map +1 -0
  434. package/dist/next/remote/internal.d.ts +6 -0
  435. package/dist/next/remote/internal.d.ts.map +1 -0
  436. package/dist/next/remote/internal.js +6 -0
  437. package/dist/next/remote/internal.js.map +1 -0
  438. package/dist/next/remote/path.d.ts +46 -0
  439. package/dist/next/remote/path.d.ts.map +1 -0
  440. package/dist/next/remote/path.js +73 -0
  441. package/dist/next/remote/path.js.map +1 -0
  442. package/dist/next/remote/provider.d.ts +76 -0
  443. package/dist/next/remote/provider.d.ts.map +1 -0
  444. package/dist/next/remote/provider.js +506 -0
  445. package/dist/next/remote/provider.js.map +1 -0
  446. package/dist/next/remote/relay.d.ts +58 -0
  447. package/dist/next/remote/relay.d.ts.map +1 -0
  448. package/dist/next/remote/relay.js +117 -0
  449. package/dist/next/remote/relay.js.map +1 -0
  450. package/dist/next/remote/remote-object.d.ts +133 -0
  451. package/dist/next/remote/remote-object.d.ts.map +1 -0
  452. package/dist/next/remote/remote-object.js +411 -0
  453. package/dist/next/remote/remote-object.js.map +1 -0
  454. package/dist/next/remote/replica.d.ts +59 -0
  455. package/dist/next/remote/replica.d.ts.map +1 -0
  456. package/dist/next/remote/replica.js +125 -0
  457. package/dist/next/remote/replica.js.map +1 -0
  458. package/dist/next/state/batch.d.ts +64 -0
  459. package/dist/next/state/batch.d.ts.map +1 -0
  460. package/dist/next/state/batch.js +163 -0
  461. package/dist/next/state/batch.js.map +1 -0
  462. package/dist/next/state/derive.d.ts +52 -0
  463. package/dist/next/state/derive.d.ts.map +1 -0
  464. package/dist/next/state/derive.js +182 -0
  465. package/dist/next/state/derive.js.map +1 -0
  466. package/dist/next/state/index.d.ts +6 -0
  467. package/dist/next/state/index.d.ts.map +1 -0
  468. package/dist/next/state/index.js +4 -0
  469. package/dist/next/state/index.js.map +1 -0
  470. package/dist/next/state/internal.d.ts +6 -0
  471. package/dist/next/state/internal.d.ts.map +1 -0
  472. package/dist/next/state/internal.js +8 -0
  473. package/dist/next/state/internal.js.map +1 -0
  474. package/dist/next/state/native-source.d.ts +106 -0
  475. package/dist/next/state/native-source.d.ts.map +1 -0
  476. package/dist/next/state/native-source.js +240 -0
  477. package/dist/next/state/native-source.js.map +1 -0
  478. package/dist/next/state/watchable.d.ts +114 -0
  479. package/dist/next/state/watchable.d.ts.map +1 -0
  480. package/dist/next/state/watchable.js +156 -0
  481. package/dist/next/state/watchable.js.map +1 -0
  482. package/dist/next/state/writable.d.ts +32 -0
  483. package/dist/next/state/writable.d.ts.map +1 -0
  484. package/dist/next/state/writable.js +49 -0
  485. package/dist/next/state/writable.js.map +1 -0
  486. package/dist/next/store/adapter.d.ts +67 -0
  487. package/dist/next/store/adapter.d.ts.map +1 -0
  488. package/dist/next/store/adapter.js +118 -0
  489. package/dist/next/store/adapter.js.map +1 -0
  490. package/dist/next/store/allocator.d.ts +17 -0
  491. package/dist/next/store/allocator.d.ts.map +1 -0
  492. package/dist/next/store/allocator.js +30 -0
  493. package/dist/next/store/allocator.js.map +1 -0
  494. package/dist/next/store/applier.d.ts +8 -0
  495. package/dist/next/store/applier.d.ts.map +1 -0
  496. package/dist/next/store/applier.js +375 -0
  497. package/dist/next/store/applier.js.map +1 -0
  498. package/dist/next/store/apply-batch.d.ts +12 -0
  499. package/dist/next/store/apply-batch.d.ts.map +1 -0
  500. package/dist/next/store/apply-batch.js +83 -0
  501. package/dist/next/store/apply-batch.js.map +1 -0
  502. package/dist/next/store/archive.d.ts +32 -0
  503. package/dist/next/store/archive.d.ts.map +1 -0
  504. package/dist/next/store/archive.js +129 -0
  505. package/dist/next/store/archive.js.map +1 -0
  506. package/dist/next/store/backend.d.ts +10 -0
  507. package/dist/next/store/backend.d.ts.map +1 -0
  508. package/dist/next/store/backend.js +15 -0
  509. package/dist/next/store/backend.js.map +1 -0
  510. package/dist/next/store/catalog.d.ts +24 -0
  511. package/dist/next/store/catalog.d.ts.map +1 -0
  512. package/dist/next/store/catalog.js +17 -0
  513. package/dist/next/store/catalog.js.map +1 -0
  514. package/dist/next/store/claims.d.ts +23 -0
  515. package/dist/next/store/claims.d.ts.map +1 -0
  516. package/dist/next/store/claims.js +65 -0
  517. package/dist/next/store/claims.js.map +1 -0
  518. package/dist/next/store/columns.d.ts +77 -0
  519. package/dist/next/store/columns.d.ts.map +1 -0
  520. package/dist/next/store/columns.js +77 -0
  521. package/dist/next/store/columns.js.map +1 -0
  522. package/dist/next/store/engine.d.ts +176 -0
  523. package/dist/next/store/engine.d.ts.map +1 -0
  524. package/dist/next/store/engine.js +283 -0
  525. package/dist/next/store/engine.js.map +1 -0
  526. package/dist/next/store/evaluate.d.ts +17 -0
  527. package/dist/next/store/evaluate.d.ts.map +1 -0
  528. package/dist/next/store/evaluate.js +128 -0
  529. package/dist/next/store/evaluate.js.map +1 -0
  530. package/dist/next/store/export.d.ts +17 -0
  531. package/dist/next/store/export.d.ts.map +1 -0
  532. package/dist/next/store/export.js +200 -0
  533. package/dist/next/store/export.js.map +1 -0
  534. package/dist/next/store/expression.d.ts +150 -0
  535. package/dist/next/store/expression.d.ts.map +1 -0
  536. package/dist/next/store/expression.js +268 -0
  537. package/dist/next/store/expression.js.map +1 -0
  538. package/dist/next/store/import.d.ts +10 -0
  539. package/dist/next/store/import.d.ts.map +1 -0
  540. package/dist/next/store/import.js +276 -0
  541. package/dist/next/store/import.js.map +1 -0
  542. package/dist/next/store/index.d.ts +16 -0
  543. package/dist/next/store/index.d.ts.map +1 -0
  544. package/dist/next/store/index.js +13 -0
  545. package/dist/next/store/index.js.map +1 -0
  546. package/dist/next/store/json-column.d.ts +33 -0
  547. package/dist/next/store/json-column.d.ts.map +1 -0
  548. package/dist/next/store/json-column.js +61 -0
  549. package/dist/next/store/json-column.js.map +1 -0
  550. package/dist/next/store/jsonl.d.ts +9 -0
  551. package/dist/next/store/jsonl.d.ts.map +1 -0
  552. package/dist/next/store/jsonl.js +61 -0
  553. package/dist/next/store/jsonl.js.map +1 -0
  554. package/dist/next/store/outbox.d.ts +26 -0
  555. package/dist/next/store/outbox.d.ts.map +1 -0
  556. package/dist/next/store/outbox.js +80 -0
  557. package/dist/next/store/outbox.js.map +1 -0
  558. package/dist/next/store/query.d.ts +39 -0
  559. package/dist/next/store/query.d.ts.map +1 -0
  560. package/dist/next/store/query.js +97 -0
  561. package/dist/next/store/query.js.map +1 -0
  562. package/dist/next/store/refusal.d.ts +15 -0
  563. package/dist/next/store/refusal.d.ts.map +1 -0
  564. package/dist/next/store/refusal.js +36 -0
  565. package/dist/next/store/refusal.js.map +1 -0
  566. package/dist/next/store/rows.d.ts +80 -0
  567. package/dist/next/store/rows.d.ts.map +1 -0
  568. package/dist/next/store/rows.js +183 -0
  569. package/dist/next/store/rows.js.map +1 -0
  570. package/dist/next/store/schema.d.ts +25 -0
  571. package/dist/next/store/schema.d.ts.map +1 -0
  572. package/dist/next/store/schema.js +115 -0
  573. package/dist/next/store/schema.js.map +1 -0
  574. package/dist/next/store/sql.d.ts +73 -0
  575. package/dist/next/store/sql.d.ts.map +1 -0
  576. package/dist/next/store/sql.js +234 -0
  577. package/dist/next/store/sql.js.map +1 -0
  578. package/dist/next/store/step.d.ts +48 -0
  579. package/dist/next/store/step.d.ts.map +1 -0
  580. package/dist/next/store/step.js +50 -0
  581. package/dist/next/store/step.js.map +1 -0
  582. package/dist/next/store/store.d.ts +161 -0
  583. package/dist/next/store/store.d.ts.map +1 -0
  584. package/dist/next/store/store.js +627 -0
  585. package/dist/next/store/store.js.map +1 -0
  586. package/dist/next/store/table-changes.d.ts +29 -0
  587. package/dist/next/store/table-changes.d.ts.map +1 -0
  588. package/dist/next/store/table-changes.js +102 -0
  589. package/dist/next/store/table-changes.js.map +1 -0
  590. package/dist/next/store/table-evolve.d.ts +74 -0
  591. package/dist/next/store/table-evolve.d.ts.map +1 -0
  592. package/dist/next/store/table-evolve.js +201 -0
  593. package/dist/next/store/table-evolve.js.map +1 -0
  594. package/dist/next/store/table-handle.d.ts +67 -0
  595. package/dist/next/store/table-handle.d.ts.map +1 -0
  596. package/dist/next/store/table-handle.js +101 -0
  597. package/dist/next/store/table-handle.js.map +1 -0
  598. package/dist/next/store/table-history.d.ts +75 -0
  599. package/dist/next/store/table-history.d.ts.map +1 -0
  600. package/dist/next/store/table-history.js +42 -0
  601. package/dist/next/store/table-history.js.map +1 -0
  602. package/dist/next/store/table-migration.d.ts +16 -0
  603. package/dist/next/store/table-migration.d.ts.map +1 -0
  604. package/dist/next/store/table-migration.js +202 -0
  605. package/dist/next/store/table-migration.js.map +1 -0
  606. package/dist/next/store/table-writes.d.ts +125 -0
  607. package/dist/next/store/table-writes.d.ts.map +1 -0
  608. package/dist/next/store/table-writes.js +165 -0
  609. package/dist/next/store/table-writes.js.map +1 -0
  610. package/dist/next/store/table.d.ts +80 -0
  611. package/dist/next/store/table.d.ts.map +1 -0
  612. package/dist/next/store/table.js +103 -0
  613. package/dist/next/store/table.js.map +1 -0
  614. package/dist/next/store/text.d.ts +14 -0
  615. package/dist/next/store/text.d.ts.map +1 -0
  616. package/dist/next/store/text.js +51 -0
  617. package/dist/next/store/text.js.map +1 -0
  618. package/dist/next/store/writes.d.ts +5 -0
  619. package/dist/next/store/writes.d.ts.map +1 -0
  620. package/dist/next/store/writes.js +4 -0
  621. package/dist/next/store/writes.js.map +1 -0
  622. package/dist/next-node/compression.d.ts +7 -0
  623. package/dist/next-node/compression.d.ts.map +1 -0
  624. package/dist/next-node/compression.js +24 -0
  625. package/dist/next-node/compression.js.map +1 -0
  626. package/dist/next-node/http/admission.d.ts +63 -0
  627. package/dist/next-node/http/admission.d.ts.map +1 -0
  628. package/dist/next-node/http/admission.js +134 -0
  629. package/dist/next-node/http/admission.js.map +1 -0
  630. package/dist/next-node/http/authenticate.d.ts +21 -0
  631. package/dist/next-node/http/authenticate.d.ts.map +1 -0
  632. package/dist/next-node/http/authenticate.js +34 -0
  633. package/dist/next-node/http/authenticate.js.map +1 -0
  634. package/dist/next-node/http/cookies.d.ts +24 -0
  635. package/dist/next-node/http/cookies.d.ts.map +1 -0
  636. package/dist/next-node/http/cookies.js +62 -0
  637. package/dist/next-node/http/cookies.js.map +1 -0
  638. package/dist/next-node/http/file.d.ts +23 -0
  639. package/dist/next-node/http/file.d.ts.map +1 -0
  640. package/dist/next-node/http/file.js +94 -0
  641. package/dist/next-node/http/file.js.map +1 -0
  642. package/dist/next-node/http/headers.d.ts +37 -0
  643. package/dist/next-node/http/headers.d.ts.map +1 -0
  644. package/dist/next-node/http/headers.js +129 -0
  645. package/dist/next-node/http/headers.js.map +1 -0
  646. package/dist/next-node/http/http.d.ts +100 -0
  647. package/dist/next-node/http/http.d.ts.map +1 -0
  648. package/dist/next-node/http/http.js +462 -0
  649. package/dist/next-node/http/http.js.map +1 -0
  650. package/dist/next-node/http/incoming.d.ts +19 -0
  651. package/dist/next-node/http/incoming.d.ts.map +1 -0
  652. package/dist/next-node/http/incoming.js +31 -0
  653. package/dist/next-node/http/incoming.js.map +1 -0
  654. package/dist/next-node/http/index.d.ts +11 -0
  655. package/dist/next-node/http/index.d.ts.map +1 -0
  656. package/dist/next-node/http/index.js +12 -0
  657. package/dist/next-node/http/index.js.map +1 -0
  658. package/dist/next-node/http/node.d.ts +78 -0
  659. package/dist/next-node/http/node.d.ts.map +1 -0
  660. package/dist/next-node/http/node.js +291 -0
  661. package/dist/next-node/http/node.js.map +1 -0
  662. package/dist/next-node/http/request.d.ts +54 -0
  663. package/dist/next-node/http/request.d.ts.map +1 -0
  664. package/dist/next-node/http/request.js +116 -0
  665. package/dist/next-node/http/request.js.map +1 -0
  666. package/dist/next-node/http/response.d.ts +63 -0
  667. package/dist/next-node/http/response.d.ts.map +1 -0
  668. package/dist/next-node/http/response.js +202 -0
  669. package/dist/next-node/http/response.js.map +1 -0
  670. package/dist/next-node/http/router.d.ts +114 -0
  671. package/dist/next-node/http/router.d.ts.map +1 -0
  672. package/dist/next-node/http/router.js +261 -0
  673. package/dist/next-node/http/router.js.map +1 -0
  674. package/dist/next-node/http/upgrades.d.ts +58 -0
  675. package/dist/next-node/http/upgrades.d.ts.map +1 -0
  676. package/dist/next-node/http/upgrades.js +184 -0
  677. package/dist/next-node/http/upgrades.js.map +1 -0
  678. package/dist/next-node/plugins/build.d.ts +57 -0
  679. package/dist/next-node/plugins/build.d.ts.map +1 -0
  680. package/dist/next-node/plugins/build.js +334 -0
  681. package/dist/next-node/plugins/build.js.map +1 -0
  682. package/dist/next-node/plugins/discover.d.ts +36 -0
  683. package/dist/next-node/plugins/discover.d.ts.map +1 -0
  684. package/dist/next-node/plugins/discover.js +91 -0
  685. package/dist/next-node/plugins/discover.js.map +1 -0
  686. package/dist/next-node/plugins/evaluate.d.ts +33 -0
  687. package/dist/next-node/plugins/evaluate.d.ts.map +1 -0
  688. package/dist/next-node/plugins/evaluate.js +98 -0
  689. package/dist/next-node/plugins/evaluate.js.map +1 -0
  690. package/dist/next-node/plugins/index.d.ts +9 -0
  691. package/dist/next-node/plugins/index.d.ts.map +1 -0
  692. package/dist/next-node/plugins/index.js +11 -0
  693. package/dist/next-node/plugins/index.js.map +1 -0
  694. package/dist/next-node/plugins/install.d.ts +13 -0
  695. package/dist/next-node/plugins/install.d.ts.map +1 -0
  696. package/dist/next-node/plugins/install.js +37 -0
  697. package/dist/next-node/plugins/install.js.map +1 -0
  698. package/dist/next-node/plugins/plugins.d.ts +135 -0
  699. package/dist/next-node/plugins/plugins.d.ts.map +1 -0
  700. package/dist/next-node/plugins/plugins.js +206 -0
  701. package/dist/next-node/plugins/plugins.js.map +1 -0
  702. package/dist/next-node/plugins/runtime.d.ts +41 -0
  703. package/dist/next-node/plugins/runtime.d.ts.map +1 -0
  704. package/dist/next-node/plugins/runtime.js +136 -0
  705. package/dist/next-node/plugins/runtime.js.map +1 -0
  706. package/dist/next-node/plugins/stack.d.ts +16 -0
  707. package/dist/next-node/plugins/stack.d.ts.map +1 -0
  708. package/dist/next-node/plugins/stack.js +61 -0
  709. package/dist/next-node/plugins/stack.js.map +1 -0
  710. package/dist/next-node/plugins/watcher.d.ts +58 -0
  711. package/dist/next-node/plugins/watcher.d.ts.map +1 -0
  712. package/dist/next-node/plugins/watcher.js +281 -0
  713. package/dist/next-node/plugins/watcher.js.map +1 -0
  714. package/dist/next-node/workers/control.d.ts +83 -0
  715. package/dist/next-node/workers/control.d.ts.map +1 -0
  716. package/dist/next-node/workers/control.js +77 -0
  717. package/dist/next-node/workers/control.js.map +1 -0
  718. package/dist/next-node/workers/index.d.ts +5 -0
  719. package/dist/next-node/workers/index.d.ts.map +1 -0
  720. package/dist/next-node/workers/index.js +7 -0
  721. package/dist/next-node/workers/index.js.map +1 -0
  722. package/dist/next-node/workers/lock.d.ts +21 -0
  723. package/dist/next-node/workers/lock.d.ts.map +1 -0
  724. package/dist/next-node/workers/lock.js +137 -0
  725. package/dist/next-node/workers/lock.js.map +1 -0
  726. package/dist/next-node/workers/main.d.ts +46 -0
  727. package/dist/next-node/workers/main.d.ts.map +1 -0
  728. package/dist/next-node/workers/main.js +230 -0
  729. package/dist/next-node/workers/main.js.map +1 -0
  730. package/dist/next-node/workers/process.d.ts +42 -0
  731. package/dist/next-node/workers/process.d.ts.map +1 -0
  732. package/dist/next-node/workers/process.js +125 -0
  733. package/dist/next-node/workers/process.js.map +1 -0
  734. package/dist/next-node/workers/workers.d.ts +80 -0
  735. package/dist/next-node/workers/workers.d.ts.map +1 -0
  736. package/dist/next-node/workers/workers.js +572 -0
  737. package/dist/next-node/workers/workers.js.map +1 -0
  738. package/dist/object.d.ts +4 -4
  739. package/dist/object.d.ts.map +1 -1
  740. package/dist/object.js +3 -4
  741. package/dist/object.js.map +1 -1
  742. package/dist/output.d.ts +1 -1
  743. package/dist/output.d.ts.map +1 -1
  744. package/dist/output.js +4 -2
  745. package/dist/output.js.map +1 -1
  746. package/dist/remote.d.ts.map +1 -1
  747. package/dist/remote.js +2 -2
  748. package/dist/remote.js.map +1 -1
  749. package/dist/schema.d.ts +8 -4
  750. package/dist/schema.d.ts.map +1 -1
  751. package/dist/schema.js +180 -5
  752. package/dist/schema.js.map +1 -1
  753. package/dist/sqlite/cloudflare.d.ts +2 -0
  754. package/dist/sqlite/cloudflare.d.ts.map +1 -1
  755. package/dist/sqlite/cloudflare.js +10 -0
  756. package/dist/sqlite/cloudflare.js.map +1 -1
  757. package/dist/sqlite/database.d.ts +5 -2
  758. package/dist/sqlite/database.d.ts.map +1 -1
  759. package/dist/sqlite/database.js.map +1 -1
  760. package/dist/sqlite/node.d.ts +4 -1
  761. package/dist/sqlite/node.d.ts.map +1 -1
  762. package/dist/sqlite/node.js +22 -5
  763. package/dist/sqlite/node.js.map +1 -1
  764. package/dist/watch.d.ts +194 -0
  765. package/dist/watch.d.ts.map +1 -0
  766. package/dist/watch.js +383 -0
  767. package/dist/watch.js.map +1 -0
  768. package/dist/wire.d.ts +174 -193
  769. package/dist/wire.d.ts.map +1 -1
  770. package/dist/wire.js +81 -80
  771. package/dist/wire.js.map +1 -1
  772. package/docs/guide.md +15 -15
  773. package/docs/next/benchmarks.md +959 -0
  774. package/docs/next/decisions.md +2957 -0
  775. package/docs/next/dependencies/book.md +1671 -0
  776. package/docs/next/dependencies/index.html +2641 -0
  777. package/docs/next/dependencies/model.md +330 -0
  778. package/docs/next/design.md +2554 -0
  779. package/docs/next/durable-observers/book.md +432 -0
  780. package/docs/next/durable-observers/index.html +517 -0
  781. package/docs/next/flow-control/book.md +333 -0
  782. package/docs/next/flow-control/fold/index.html +265 -0
  783. package/docs/next/flow-control/index.html +548 -0
  784. package/docs/next/flow-control/window/index.html +228 -0
  785. package/docs/next/guide-plugins-hosts/book.md +607 -0
  786. package/docs/next/guide-plugins-hosts/index.html +652 -0
  787. package/docs/next/http-workers/book.md +378 -0
  788. package/docs/next/http-workers/index.html +515 -0
  789. package/docs/next/layer-1.md +311 -0
  790. package/docs/next/layer-2.md +216 -0
  791. package/docs/next/plugin-model/book.md +186 -0
  792. package/docs/next/plugin-model/index.html +310 -0
  793. package/docs/next/plugin-primer/book.md +273 -0
  794. package/docs/next/plugin-primer/index.html +430 -0
  795. package/docs/next/slice-1.md +236 -0
  796. package/docs/next/slice-10.md +285 -0
  797. package/docs/next/slice-11.md +93 -0
  798. package/docs/next/slice-2.md +174 -0
  799. package/docs/next/slice-3a.md +296 -0
  800. package/docs/next/slice-3b.md +197 -0
  801. package/docs/next/slice-4.md +146 -0
  802. package/docs/next/slice-4a.md +418 -0
  803. package/docs/next/slice-4b.md +208 -0
  804. package/docs/next/slice-5.md +281 -0
  805. package/docs/next/slice-6a.md +676 -0
  806. package/docs/next/slice-6b.md +332 -0
  807. package/docs/next/slice-7a.md +130 -0
  808. package/docs/next/slice-7b/book.md +608 -0
  809. package/docs/next/slice-7b/index.html +842 -0
  810. package/docs/next/slice-7b.md +255 -0
  811. package/docs/next/slice-7c.md +165 -0
  812. package/docs/next/slice-8.md +194 -0
  813. package/docs/next/slices.md +230 -0
  814. package/docs/next/store/book.md +665 -0
  815. package/docs/next/store/index.html +861 -0
  816. package/docs/next/store/walkthrough.md +193 -0
  817. package/docs/spec.md +9 -9
  818. package/docs/tutorial.md +26 -25
  819. package/package.json +22 -6
  820. package/src/delta/README.md +69 -0
@@ -0,0 +1,143 @@
1
+ /** Pending ops past which only "replace with the current value" stays pending. */
2
+ export const MAX_PENDING_OPS = 10_000;
3
+ const EMPTY = { kind: "empty" };
4
+ const REPLACE = { kind: "replace" };
5
+ const NO_OPS = { kind: "ops", ops: [] };
6
+ const REPLACE_TAKE = { kind: "replace" };
7
+ /**
8
+ * Pending ops of one state for one consumer, in order and raw (never encoded while they wait). `r` drops everything
9
+ * before it. A leaf op merges into the last pending leaf op on the same path (`a` + `a` joined, `s` replaces `s` or `a`,
10
+ * `a` after a string `s` appends into it); any other op clears the leaf index. Leaf ops on different paths commute,
11
+ * except after an ancestor primitive `s`, after which the descendant cannot be written until a structural op clears the
12
+ * index. Past `MAX_PENDING_OPS` only "replace with the current value" stays pending.
13
+ *
14
+ * Ops are only those of Delta's tracker, `diffRevisions()` and `appendText()`; received op arrays and tuples are never
15
+ * mutated (they feed other consumers too), a merge makes a new tuple.
16
+ */
17
+ export class PendingOps {
18
+ #state = EMPTY;
19
+ /** Queue the ops of one commit. */
20
+ push(ops) {
21
+ if (ops.length === 0)
22
+ return;
23
+ const state = this.#state;
24
+ // A batch that starts with `r` (the tracker's and `diffRevisions()`'s only place for it) drops everything
25
+ // pending, also an overflow, and is kept as received.
26
+ if (ops[0][0] === "r") {
27
+ this.#state = { kind: "batch", ops };
28
+ return;
29
+ }
30
+ switch (state.kind) {
31
+ case "empty":
32
+ this.#state = { kind: "batch", ops };
33
+ return;
34
+ case "batch": {
35
+ const folding = { kind: "folding", ops: [], leaves: new Map() };
36
+ this.#state = folding;
37
+ if (this.#fold(state.ops, folding))
38
+ this.#fold(ops, folding);
39
+ return;
40
+ }
41
+ case "folding":
42
+ this.#fold(ops, state);
43
+ return;
44
+ case "replace":
45
+ return;
46
+ }
47
+ }
48
+ /**
49
+ * Pending ops after folding; 1 once overflowed (the replacement the owner sends). One batch is counted as received,
50
+ * so a single commit larger than `MAX_PENDING_OPS` counts in full until a second one arrives and overflows.
51
+ */
52
+ get size() {
53
+ const state = this.#state;
54
+ if (state.kind === "empty")
55
+ return 0;
56
+ return state.kind === "replace" ? 1 : state.ops.length;
57
+ }
58
+ /** Hand over everything pending and start empty. */
59
+ take() {
60
+ const state = this.#state;
61
+ this.#state = EMPTY;
62
+ switch (state.kind) {
63
+ case "empty":
64
+ return NO_OPS;
65
+ case "batch":
66
+ case "folding":
67
+ return { kind: "ops", ops: state.ops };
68
+ case "replace":
69
+ return REPLACE_TAKE;
70
+ }
71
+ }
72
+ /** Fold `ops` into `folding`; false once the queue overflowed into `replace`. */
73
+ #fold(ops, folding) {
74
+ for (const op of ops) {
75
+ switch (op[0]) {
76
+ case "r":
77
+ folding.ops.length = 0;
78
+ folding.leaves.clear();
79
+ break;
80
+ case "a":
81
+ if (mergeLeaf(op, folding))
82
+ continue;
83
+ break;
84
+ case "s":
85
+ if (isPrimitive(op[2])) {
86
+ if (mergeLeaf(op, folding))
87
+ continue;
88
+ }
89
+ else if (folding.leaves.size > 0)
90
+ folding.leaves.clear();
91
+ break;
92
+ default:
93
+ if (folding.leaves.size > 0)
94
+ folding.leaves.clear();
95
+ }
96
+ folding.ops.push(op);
97
+ if (folding.ops.length > MAX_PENDING_OPS) {
98
+ this.#state = REPLACE;
99
+ return false;
100
+ }
101
+ }
102
+ return true;
103
+ }
104
+ }
105
+ const isPrimitive = (value) => value === null || typeof value !== "object";
106
+ /**
107
+ * Merge the leaf op `op` into the last pending leaf op on its path, or index it as that op at the position it is about
108
+ * to be pushed to. True when merged.
109
+ */
110
+ function mergeLeaf(op, folding) {
111
+ const key = pathKey(op[1]);
112
+ const at = folding.leaves.get(key);
113
+ if (at !== undefined) {
114
+ // The index points at leaf ops only.
115
+ const merged = merge(folding.ops[at], op);
116
+ if (merged !== undefined) {
117
+ folding.ops[at] = merged;
118
+ return true;
119
+ }
120
+ }
121
+ folding.leaves.set(key, folding.ops.length);
122
+ return false;
123
+ }
124
+ /**
125
+ * The key of a path in the leaf index. Injective, as merging two distinct paths would lose a write: `["a.b"]` and
126
+ * `["a", "b"]` are different keys. A number and its string (`1`, `"1"`) may share one: within one index lifetime a
127
+ * parent is either an array or an object, as changing it is a structural op that clears the index.
128
+ */
129
+ function pathKey(path) {
130
+ return JSON.stringify(path);
131
+ }
132
+ /** `next` folded into `previous` (same path), or undefined when they do not fold. */
133
+ function merge(previous, next) {
134
+ if (next[0] === "s")
135
+ return next;
136
+ if (previous[0] === "a")
137
+ return ["a", previous[1], previous[2] + next[2]];
138
+ // Only a string set takes an append; the tracker never appends to another primitive.
139
+ if (typeof previous[2] === "string")
140
+ return ["s", previous[1], previous[2] + next[2]];
141
+ return undefined;
142
+ }
143
+ //# sourceMappingURL=pending.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending.js","sourceRoot":"","sources":["../../src/delta/pending.ts"],"names":[],"mappings":"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","sourcesContent":["// The pending queue: the ops a slow consumer of one state has not taken yet, folded while they wait.\nimport type { JsonValue } from \"../json.ts\";\nimport type { NonEmptyPath, Op, Path } from \"./index.ts\";\n\n/**\n * What `PendingOps.take()` hands over: the pending ops, folded, or `replace` after an overflow, which the owner of the\n * queue turns into a root replacement with the current value.\n */\nexport type PendingTake = { readonly kind: \"ops\"; readonly ops: readonly Op[] } | { readonly kind: \"replace\" };\n\n/** Pending ops past which only \"replace with the current value\" stays pending. */\nexport const MAX_PENDING_OPS = 10_000;\n\n/** A leaf op: an append, or a set of a primitive. The leaf index points at these only. */\ntype LeafOp = readonly [\"a\", NonEmptyPath, string] | readonly [\"s\", NonEmptyPath, JsonValue];\n\ntype Folding = {\n\treadonly kind: \"folding\";\n\t/** Owned by the queue until `take()` hands it over; never one of the received op arrays. */\n\treadonly ops: Op[];\n\t/** Path key to the position of the last pending leaf op on that path. */\n\treadonly leaves: Map<string, number>;\n};\n\ntype State =\n\t| { readonly kind: \"empty\" }\n\t/** One batch, kept by reference: a consumer that keeps up never pays for folding. */\n\t| { readonly kind: \"batch\"; readonly ops: readonly Op[] }\n\t| Folding\n\t/** Overflowed: nothing more accumulates until `take()` or a batch that starts with `r`. */\n\t| { readonly kind: \"replace\" };\n\nconst EMPTY: State = { kind: \"empty\" };\n\nconst REPLACE: State = { kind: \"replace\" };\n\nconst NO_OPS: PendingTake = { kind: \"ops\", ops: [] };\n\nconst REPLACE_TAKE: PendingTake = { kind: \"replace\" };\n\n/**\n * Pending ops of one state for one consumer, in order and raw (never encoded while they wait). `r` drops everything\n * before it. A leaf op merges into the last pending leaf op on the same path (`a` + `a` joined, `s` replaces `s` or `a`,\n * `a` after a string `s` appends into it); any other op clears the leaf index. Leaf ops on different paths commute,\n * except after an ancestor primitive `s`, after which the descendant cannot be written until a structural op clears the\n * index. Past `MAX_PENDING_OPS` only \"replace with the current value\" stays pending.\n *\n * Ops are only those of Delta's tracker, `diffRevisions()` and `appendText()`; received op arrays and tuples are never\n * mutated (they feed other consumers too), a merge makes a new tuple.\n */\nexport class PendingOps {\n\t#state: State = EMPTY;\n\n\t/** Queue the ops of one commit. */\n\tpush(ops: readonly Op[]): void {\n\t\tif (ops.length === 0) return;\n\t\tconst state = this.#state;\n\t\t// A batch that starts with `r` (the tracker's and `diffRevisions()`'s only place for it) drops everything\n\t\t// pending, also an overflow, and is kept as received.\n\t\tif (ops[0]![0] === \"r\") {\n\t\t\tthis.#state = { kind: \"batch\", ops };\n\t\t\treturn;\n\t\t}\n\t\tswitch (state.kind) {\n\t\t\tcase \"empty\":\n\t\t\t\tthis.#state = { kind: \"batch\", ops };\n\t\t\t\treturn;\n\t\t\tcase \"batch\": {\n\t\t\t\tconst folding: Folding = { kind: \"folding\", ops: [], leaves: new Map() };\n\t\t\t\tthis.#state = folding;\n\t\t\t\tif (this.#fold(state.ops, folding)) this.#fold(ops, folding);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"folding\":\n\t\t\t\tthis.#fold(ops, state);\n\t\t\t\treturn;\n\t\t\tcase \"replace\":\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Pending ops after folding; 1 once overflowed (the replacement the owner sends). One batch is counted as received,\n\t * so a single commit larger than `MAX_PENDING_OPS` counts in full until a second one arrives and overflows.\n\t */\n\tget size(): number {\n\t\tconst state = this.#state;\n\t\tif (state.kind === \"empty\") return 0;\n\t\treturn state.kind === \"replace\" ? 1 : state.ops.length;\n\t}\n\n\t/** Hand over everything pending and start empty. */\n\ttake(): PendingTake {\n\t\tconst state = this.#state;\n\t\tthis.#state = EMPTY;\n\t\tswitch (state.kind) {\n\t\t\tcase \"empty\":\n\t\t\t\treturn NO_OPS;\n\t\t\tcase \"batch\":\n\t\t\tcase \"folding\":\n\t\t\t\treturn { kind: \"ops\", ops: state.ops };\n\t\t\tcase \"replace\":\n\t\t\t\treturn REPLACE_TAKE;\n\t\t}\n\t}\n\n\t/** Fold `ops` into `folding`; false once the queue overflowed into `replace`. */\n\t#fold(ops: readonly Op[], folding: Folding): boolean {\n\t\tfor (const op of ops) {\n\t\t\tswitch (op[0]) {\n\t\t\t\tcase \"r\":\n\t\t\t\t\tfolding.ops.length = 0;\n\t\t\t\t\tfolding.leaves.clear();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"a\":\n\t\t\t\t\tif (mergeLeaf(op, folding)) continue;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"s\":\n\t\t\t\t\tif (isPrimitive(op[2])) {\n\t\t\t\t\t\tif (mergeLeaf(op, folding)) continue;\n\t\t\t\t\t} else if (folding.leaves.size > 0) folding.leaves.clear();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (folding.leaves.size > 0) folding.leaves.clear();\n\t\t\t}\n\t\t\tfolding.ops.push(op);\n\t\t\tif (folding.ops.length > MAX_PENDING_OPS) {\n\t\t\t\tthis.#state = REPLACE;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n\nconst isPrimitive = (value: JsonValue): boolean => value === null || typeof value !== \"object\";\n\n/**\n * Merge the leaf op `op` into the last pending leaf op on its path, or index it as that op at the position it is about\n * to be pushed to. True when merged.\n */\nfunction mergeLeaf(op: LeafOp, folding: Folding): boolean {\n\tconst key = pathKey(op[1]);\n\tconst at = folding.leaves.get(key);\n\tif (at !== undefined) {\n\t\t// The index points at leaf ops only.\n\t\tconst merged = merge(folding.ops[at] as LeafOp, op);\n\t\tif (merged !== undefined) {\n\t\t\tfolding.ops[at] = merged;\n\t\t\treturn true;\n\t\t}\n\t}\n\tfolding.leaves.set(key, folding.ops.length);\n\treturn false;\n}\n\n/**\n * The key of a path in the leaf index. Injective, as merging two distinct paths would lose a write: `[\"a.b\"]` and\n * `[\"a\", \"b\"]` are different keys. A number and its string (`1`, `\"1\"`) may share one: within one index lifetime a\n * parent is either an array or an object, as changing it is a structural op that clears the index.\n */\nfunction pathKey(path: Path): string {\n\treturn JSON.stringify(path);\n}\n\n/** `next` folded into `previous` (same path), or undefined when they do not fold. */\nfunction merge(previous: LeafOp, next: LeafOp): LeafOp | undefined {\n\tif (next[0] === \"s\") return next;\n\tif (previous[0] === \"a\") return [\"a\", previous[1], previous[2] + next[2]];\n\t// Only a string set takes an append; the tracker never appends to another primitive.\n\tif (typeof previous[2] === \"string\") return [\"s\", previous[1], previous[2] + next[2]];\n\treturn undefined;\n}\n"]}
@@ -2,6 +2,10 @@ import type { JsonValue } from "../json.ts";
2
2
  import type { Draft } from "./draft.ts";
3
3
  import { type Op } from "./index.ts";
4
4
  export type { Draft, JsonValue, Op };
5
+ /** Keys of `T` whose value type is exactly `string`: required, and not a string literal type. */
6
+ export type StringKeys<T> = T extends readonly unknown[] ? never : {
7
+ [Key in keyof T]: string extends T[Key] ? (T[Key] extends string ? Key : never) : never;
8
+ }[keyof T];
5
9
  export interface Prepared<T extends object> {
6
10
  readonly base: T;
7
11
  readonly value: T;
@@ -23,4 +27,12 @@ export interface Tracker<T extends object> {
23
27
  }
24
28
  /** Take immutable ownership of an alias-free strict-JSON root in O(1). */
25
29
  export declare function track<T extends object>(initial: T): Tracker<T>;
30
+ /**
31
+ * Append `text` to the string at `draft[key]`, costing O(text.length). The change is recorded as one append op
32
+ * (several appends to the same key in one change join into one op) without comparing the old and new strings. A plain
33
+ * assignment such as `draft[key] += text` gives the same op, but `prepare()` then has to check that the new string
34
+ * extends the old one, which reads the whole string: O(length) per change. A plain assignment or deletion of the key in
35
+ * the same change falls back to that check.
36
+ */
37
+ export declare function appendText<T extends object>(draft: Draft<T>, key: StringKeys<T>, text: string): void;
26
38
  //# sourceMappingURL=tracker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/delta/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAqC,KAAK,EAAE,EAAyC,MAAM,YAAY,CAAC;AAE/G,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAkHrC,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM;IACzC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,KAAK,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM;IACvC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM;IACxC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,WAAW,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IACzB,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACnC;AAmLD,0EAA0E;AAC1E,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE9D"}
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/delta/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAGN,KAAK,EAAE,EAKP,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAErC,iGAAiG;AACjG,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,OAAO,EAAE,GACrD,KAAK,GACL;KAAG,GAAG,IAAI,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK;CAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAuHxG,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM;IACzC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,KAAK,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM;IACvC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM;IACxC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,WAAW,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IACzB,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACnC;AAuMD,0EAA0E;AAC1E,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE9D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAkBpG"}
@@ -1,6 +1,6 @@
1
1
  import { copyJson } from "../json.js";
2
2
  import { applyImmutableTrusted } from "./apply-immutable-trusted.js";
3
- import { applyImmutable, overlap, RESERVED_SEGMENTS } from "./index.js";
3
+ import { applyImmutable, overlap, ownedSlice, RESERVED_SEGMENTS, } from "./index.js";
4
4
  const NODE = Symbol("chord.delta.overlay.node");
5
5
  const PREPARED = new WeakMap();
6
6
  const RELEASED = {};
@@ -91,9 +91,20 @@ class ChangeImpl {
91
91
  this.#context = undefined;
92
92
  }
93
93
  }
94
+ /**
95
+ * Open drafts are tracked so that adopting one change makes its open competitors stale at once. Prepared contexts need
96
+ * no tracking: `prepare()` releases their overlay, and `adopt()` rejects them by revision.
97
+ *
98
+ * The most recent open context is held strongly in `#open`: with one transaction at a time per tracker, the common case,
99
+ * that is the only one, and it costs no `WeakRef` (each `WeakRef` target survives the scavenges of the current job, and
100
+ * V8 then pretenures the context allocation site). A second `beginChange()` while one is open moves the older context
101
+ * into `#competitors` through a `WeakRef`, so a draft the caller drops can be collected. A dropped draft that was never
102
+ * settled stays held by `#open` until the tracker's next `beginChange()` or `adopt()`: at most one per tracker.
103
+ */
94
104
  class TrackerImpl {
95
105
  #owner = {};
96
- #contexts = new Set();
106
+ #open;
107
+ #competitors;
97
108
  #selfRef;
98
109
  #value;
99
110
  #revision = 0;
@@ -110,13 +121,15 @@ class TrackerImpl {
110
121
  }
111
122
  beginChange() {
112
123
  const context = createContext(this.#selfRef, this.#owner, this.#revision, this.#value, false, this.#value);
113
- this.#register(context);
124
+ if (this.#open !== undefined)
125
+ this.#demote(this.#open);
126
+ this.#open = context;
114
127
  return new ChangeImpl(context);
115
128
  }
116
129
  prepareReplace(value) {
130
+ // Not tracked: materialization below releases the context before this returns, as `prepare()` does.
117
131
  const context = createContext(this.#selfRef, this.#owner, this.#revision, value, true, this.#value);
118
132
  context.status.value = "prepared";
119
- this.#register(context);
120
133
  try {
121
134
  return materializePrepared(context);
122
135
  }
@@ -155,49 +168,90 @@ class TrackerImpl {
155
168
  this.#invalidate(context);
156
169
  }
157
170
  releaseContext(context) {
158
- if (context.registryRef !== undefined)
159
- this.#contexts.delete(context.registryRef);
171
+ if (this.#open === context)
172
+ this.#open = undefined;
173
+ else if (context.registryRef !== undefined)
174
+ this.#competitors?.delete(context.registryRef);
160
175
  context.registryRef = undefined;
161
176
  }
162
- #register(context) {
177
+ #demote(context) {
163
178
  const reference = new WeakRef(context);
164
179
  context.registryRef = reference;
165
- this.#contexts.add(reference);
180
+ this.#competitors ??= new Set();
181
+ this.#competitors.add(reference);
166
182
  this.#pruneBudget -= 1;
167
183
  if (this.#pruneBudget === 0) {
168
- this.#prune();
169
- this.#pruneBudget = Math.max(256, this.#contexts.size);
170
- }
171
- }
172
- #prune() {
173
- for (const reference of this.#contexts) {
174
- if (reference.deref() === undefined)
175
- this.#contexts.delete(reference);
184
+ for (const entry of this.#competitors) {
185
+ if (entry.deref() === undefined)
186
+ this.#competitors.delete(entry);
187
+ }
188
+ this.#pruneBudget = Math.max(256, this.#competitors.size);
176
189
  }
177
190
  }
178
191
  #invalidate(winner) {
179
- for (const reference of this.#contexts) {
192
+ const open = this.#open;
193
+ const competitors = this.#competitors;
194
+ this.#open = undefined;
195
+ this.#competitors = undefined;
196
+ this.#pruneBudget = 256;
197
+ if (open !== undefined)
198
+ staleCompetitor(open, winner);
199
+ if (competitors === undefined)
200
+ return;
201
+ for (const reference of competitors) {
180
202
  const context = reference.deref();
181
- if (context === undefined || context === winner)
182
- continue;
183
- if (context.status.value === "open" || context.status.value === "prepared")
184
- context.status.value = "stale";
185
- // Adoption must not walk every node touched by a competing draft. Drop the
186
- // context's strong overlay references in O(1); externally retained proxies
187
- // still see the stale status and are reclaimed with their holders.
188
- releaseOverlayReferences(context);
203
+ if (context !== undefined)
204
+ staleCompetitor(context, winner);
189
205
  }
190
- this.#contexts.clear();
191
- this.#pruneBudget = 256;
192
206
  }
193
207
  replacementBase(context) {
194
208
  return context.baseRevision === this.#revision ? this.#value : undefined;
195
209
  }
196
210
  }
211
+ function staleCompetitor(context, winner) {
212
+ if (context === winner)
213
+ return;
214
+ if (context.status.value === "open" || context.status.value === "prepared")
215
+ context.status.value = "stale";
216
+ // Adoption must not walk every node touched by a competing draft. Drop the
217
+ // context's strong overlay references in O(1); externally retained proxies
218
+ // still see the stale status and are reclaimed with their holders.
219
+ context.registryRef = undefined;
220
+ releaseOverlayReferences(context);
221
+ }
197
222
  /** Take immutable ownership of an alias-free strict-JSON root in O(1). */
198
223
  export function track(initial) {
199
224
  return new TrackerImpl(initial);
200
225
  }
226
+ /**
227
+ * Append `text` to the string at `draft[key]`, costing O(text.length). The change is recorded as one append op
228
+ * (several appends to the same key in one change join into one op) without comparing the old and new strings. A plain
229
+ * assignment such as `draft[key] += text` gives the same op, but `prepare()` then has to check that the new string
230
+ * extends the old one, which reads the whole string: O(length) per change. A plain assignment or deletion of the key in
231
+ * the same change falls back to that check.
232
+ */
233
+ export function appendText(draft, key, text) {
234
+ // Trust boundary: JavaScript callers can pass any object and key; the types cover TypeScript callers.
235
+ const node = draft[NODE];
236
+ if (node === undefined)
237
+ throw new TypeError("appendText() needs a draft");
238
+ assertWritable(node.context);
239
+ const name = String(key);
240
+ const current = Array.isArray(nodeBase(node)) || !objectHas(node, name) ? undefined : objectValue(node, name);
241
+ if (typeof current !== "string")
242
+ throw new TypeError(`appendText() needs a string at ${JSON.stringify(name)}`);
243
+ if (text.length === 0)
244
+ return;
245
+ // The op and the new value keep the text; a copy, so they never keep a larger string the caller cut it from alive.
246
+ const owned = ownedSlice(text, 0);
247
+ const appended = node.appends?.get(name) ?? (hasObjectWrite(node, name) ? undefined : "");
248
+ setObjectWrite(node, name, current + owned);
249
+ markDirty(node);
250
+ if (appended !== undefined) {
251
+ node.appends ??= new Map();
252
+ node.appends.set(name, appended + owned);
253
+ }
254
+ }
201
255
  function materializePrepared(context) {
202
256
  const operations = ensureOperations(context);
203
257
  const base = context.baseValue;
@@ -232,10 +286,10 @@ function createContext(tracker, owner, baseRevision, root, replacement, base) {
232
286
  status: { value: "open" },
233
287
  root: undefined,
234
288
  bases: [],
235
- stored: [],
289
+ stored: undefined,
236
290
  dirty: [],
237
291
  nodes: [],
238
- rawNodes: new WeakMap(),
292
+ rawNodes: undefined,
239
293
  ops: undefined,
240
294
  replacement,
241
295
  replacementNoop: false,
@@ -298,7 +352,7 @@ const sharedObjectHandler = {
298
352
  };
299
353
  const sharedArrayHandler = sharedObjectHandler;
300
354
  function createNode(context, base, parent, parentKind = 0, parentKey = "", parentSource = undefined, parentPlacement = false) {
301
- const existing = context.rawNodes.get(base);
355
+ const existing = context.rawNodes?.get(base);
302
356
  if (existing !== undefined)
303
357
  return existing;
304
358
  const target = Array.isArray(base) ? [] : {};
@@ -319,7 +373,12 @@ function createNode(context, base, parent, parentKind = 0, parentKey = "", paren
319
373
  node.parentSource = parentSource;
320
374
  target[NODE] = node;
321
375
  node.proxy = new Proxy(target, Array.isArray(base) ? sharedArrayHandler : sharedObjectHandler);
322
- context.rawNodes.set(base, node);
376
+ // The root is never reached again through a child value (tracked values are alias-free), so a change that touches
377
+ // only the root needs no map.
378
+ if (parent !== undefined) {
379
+ context.rawNodes ??= new WeakMap();
380
+ context.rawNodes.set(base, node);
381
+ }
323
382
  context.nodes.push(node);
324
383
  return node;
325
384
  }
@@ -332,6 +391,8 @@ function nodeParent(node) {
332
391
  function storeValue(context, value) {
333
392
  if (!isContainer(value))
334
393
  return value;
394
+ // Created on the first container write: primitive writes never store.
395
+ context.stored ??= [];
335
396
  const index = context.stored.length;
336
397
  context.stored.push(value);
337
398
  return { index };
@@ -438,6 +499,7 @@ function setProperty(node, property, supplied) {
438
499
  const wasDeleted = isObjectDeleted(node, key);
439
500
  if (!wasDeleted && !isContainer(stored) && current === stored)
440
501
  return true;
502
+ node.appends?.delete(key);
441
503
  setObjectWrite(node, key, stored);
442
504
  if (wasDeleted && Object.hasOwn(nodeBase(node), key)) {
443
505
  if (node.readded === undefined)
@@ -457,6 +519,7 @@ function deleteProperty(node, property) {
457
519
  const key = String(property);
458
520
  if (!objectHas(node, key))
459
521
  return true;
522
+ node.appends?.delete(key);
460
523
  deleteObjectWrite(node, key);
461
524
  node.readded?.delete(key);
462
525
  setObjectDeletion(node, key);
@@ -930,13 +993,14 @@ function insertPiece(node, items, start = 0) {
930
993
  function insertPlacementPiece(node, values, start = 0) {
931
994
  if (values.length === start)
932
995
  return [];
933
- const storedLength = node.context.stored.length;
996
+ const storedLength = node.context.stored?.length ?? 0;
934
997
  try {
935
998
  for (let index = start; index < values.length; index++)
936
999
  values[index] = storeValue(node.context, clonePlacement(values[index]));
937
1000
  }
938
1001
  catch (error) {
939
- node.context.stored.length = storedLength;
1002
+ if (node.context.stored !== undefined)
1003
+ node.context.stored.length = storedLength;
940
1004
  throw error;
941
1005
  }
942
1006
  return [
@@ -1396,7 +1460,7 @@ function cloneNode(node) {
1396
1460
  function cloneStored(value, context) {
1397
1461
  if (!isContainer(value))
1398
1462
  return value;
1399
- const node = context.rawNodes.get(value);
1463
+ const node = context.rawNodes?.get(value);
1400
1464
  return node === undefined || (!node.dirty && !node.subtreeDirty) ? value : cloneNode(node);
1401
1465
  }
1402
1466
  function clonePlacementNode(node) {
@@ -1420,7 +1484,7 @@ function clonePlacementNode(node) {
1420
1484
  function clonePlacementStored(value, context) {
1421
1485
  if (!isContainer(value))
1422
1486
  return copyJson(value);
1423
- const node = context.rawNodes.get(value);
1487
+ const node = context.rawNodes?.get(value);
1424
1488
  return node === undefined ? copyJson(value) : clonePlacementNode(node);
1425
1489
  }
1426
1490
  function defineData(target, key, value) {
@@ -1696,6 +1760,11 @@ function hasPlacementAncestor(node) {
1696
1760
  }
1697
1761
  function emitObjectWrite(node, path, operations, key, value) {
1698
1762
  const nextPath = [...path, key];
1763
+ const appended = node.appends?.get(key);
1764
+ if (appended !== undefined) {
1765
+ operations.push(["a", nextPath, appended]);
1766
+ return false;
1767
+ }
1699
1768
  const before = node.readded?.has(key) || !Object.hasOwn(nodeBase(node), key)
1700
1769
  ? undefined
1701
1770
  : nodeBase(node)[key];
@@ -1895,17 +1964,18 @@ function emitChangedValue(operations, path, before, after) {
1895
1964
  if (isContainer(before) && isContainer(after) && equalTrustedJson(before, after))
1896
1965
  return false;
1897
1966
  if (typeof before === "string" && typeof after === "string") {
1898
- // Slice/equality stays on V8's rope fast path; startsWith scans the entire
1899
- // accumulated prefix on every append.
1967
+ // O(length): any slice of a rope makes V8 flatten all of it, so this prefix check copies the whole string once per
1968
+ // change, even when the writer only appended. Streaming writers use appendText(), which skips it. The op text gets
1969
+ // a copy of its own, so it does not keep the whole of `after` alive.
1900
1970
  if (after.length > before.length && after.slice(0, before.length) === before) {
1901
- operations.push(["a", path, after.slice(before.length)]);
1971
+ operations.push(["a", path, ownedSlice(after, before.length)]);
1902
1972
  return true;
1903
1973
  }
1904
1974
  const shared = overlap(before, after, 65_536);
1905
1975
  if (shared > 0) {
1906
1976
  operations.push(["t", path, before.length - shared]);
1907
1977
  if (after.length > shared)
1908
- operations.push(["a", path, after.slice(shared)]);
1978
+ operations.push(["a", path, ownedSlice(after, shared)]);
1909
1979
  return true;
1910
1980
  }
1911
1981
  }