@powerhousedao/reactor 6.0.0-dev.7 → 6.0.0-dev.78

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 (376) hide show
  1. package/dist/src/cache/collection-membership-cache.d.ts +13 -0
  2. package/dist/src/cache/collection-membership-cache.d.ts.map +1 -0
  3. package/dist/src/cache/document-meta-cache.d.ts.map +1 -1
  4. package/dist/src/cache/kysely-operation-index.d.ts +6 -1
  5. package/dist/src/cache/kysely-operation-index.d.ts.map +1 -1
  6. package/dist/src/cache/kysely-write-cache.d.ts +9 -2
  7. package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
  8. package/dist/src/cache/operation-index-types.d.ts +16 -2
  9. package/dist/src/cache/operation-index-types.d.ts.map +1 -1
  10. package/dist/src/cache/write/interfaces.d.ts +7 -2
  11. package/dist/src/cache/write/interfaces.d.ts.map +1 -1
  12. package/dist/src/client/reactor-client.d.ts +13 -10
  13. package/dist/src/client/reactor-client.d.ts.map +1 -1
  14. package/dist/src/client/types.d.ts +25 -6
  15. package/dist/src/client/types.d.ts.map +1 -1
  16. package/dist/src/core/reactor-builder.d.ts +23 -10
  17. package/dist/src/core/reactor-builder.d.ts.map +1 -1
  18. package/dist/src/core/reactor-client-builder.d.ts +5 -4
  19. package/dist/src/core/reactor-client-builder.d.ts.map +1 -1
  20. package/dist/src/core/reactor.d.ts +20 -80
  21. package/dist/src/core/reactor.d.ts.map +1 -1
  22. package/dist/src/core/types.d.ts +64 -28
  23. package/dist/src/core/types.d.ts.map +1 -1
  24. package/dist/src/core/utils.d.ts +39 -3
  25. package/dist/src/core/utils.d.ts.map +1 -1
  26. package/dist/src/events/types.d.ts +35 -10
  27. package/dist/src/events/types.d.ts.map +1 -1
  28. package/dist/src/executor/document-action-handler.d.ts +37 -0
  29. package/dist/src/executor/document-action-handler.d.ts.map +1 -0
  30. package/dist/src/executor/signature-verifier.d.ts +9 -0
  31. package/dist/src/executor/signature-verifier.d.ts.map +1 -0
  32. package/dist/src/executor/simple-job-executor-manager.d.ts +6 -1
  33. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
  34. package/dist/src/executor/simple-job-executor.d.ts +6 -46
  35. package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
  36. package/dist/src/executor/types.d.ts +1 -3
  37. package/dist/src/executor/types.d.ts.map +1 -1
  38. package/dist/src/executor/util.d.ts +12 -2
  39. package/dist/src/executor/util.d.ts.map +1 -1
  40. package/dist/src/index.d.ts +11 -9
  41. package/dist/src/index.d.ts.map +1 -1
  42. package/dist/src/index.js +20208 -61
  43. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +4 -3
  44. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -1
  45. package/dist/src/job-tracker/interfaces.d.ts +3 -1
  46. package/dist/src/job-tracker/interfaces.d.ts.map +1 -1
  47. package/dist/src/logging/console.d.ts +1 -22
  48. package/dist/src/logging/console.d.ts.map +1 -1
  49. package/dist/src/logging/types.d.ts +1 -11
  50. package/dist/src/logging/types.d.ts.map +1 -1
  51. package/dist/src/processors/index.d.ts +1 -1
  52. package/dist/src/processors/index.d.ts.map +1 -1
  53. package/dist/src/processors/processor-manager.d.ts +19 -6
  54. package/dist/src/processors/processor-manager.d.ts.map +1 -1
  55. package/dist/src/processors/relational/types.d.ts +2 -0
  56. package/dist/src/processors/relational/types.d.ts.map +1 -0
  57. package/dist/src/processors/relational/utils.d.ts +2 -0
  58. package/dist/src/processors/relational/utils.d.ts.map +1 -0
  59. package/dist/src/processors/utils.d.ts +3 -2
  60. package/dist/src/processors/utils.d.ts.map +1 -1
  61. package/dist/src/queue/job-execution-handle.d.ts +3 -0
  62. package/dist/src/queue/job-execution-handle.d.ts.map +1 -1
  63. package/dist/src/queue/queue.d.ts +30 -1
  64. package/dist/src/queue/queue.d.ts.map +1 -1
  65. package/dist/src/queue/types.d.ts +4 -3
  66. package/dist/src/queue/types.d.ts.map +1 -1
  67. package/dist/src/read-models/base-read-model.d.ts +11 -9
  68. package/dist/src/read-models/base-read-model.d.ts.map +1 -1
  69. package/dist/src/read-models/coordinator.d.ts +2 -2
  70. package/dist/src/read-models/coordinator.d.ts.map +1 -1
  71. package/dist/src/read-models/document-view.d.ts +7 -4
  72. package/dist/src/read-models/document-view.d.ts.map +1 -1
  73. package/dist/src/read-models/interfaces.d.ts +1 -1
  74. package/dist/src/read-models/interfaces.d.ts.map +1 -1
  75. package/dist/src/read-models/types.d.ts +16 -0
  76. package/dist/src/read-models/types.d.ts.map +1 -1
  77. package/dist/src/registry/document-model-resolver.d.ts +29 -0
  78. package/dist/src/registry/document-model-resolver.d.ts.map +1 -0
  79. package/dist/src/registry/implementation.d.ts +4 -0
  80. package/dist/src/registry/implementation.d.ts.map +1 -1
  81. package/dist/src/registry/index.d.ts +3 -1
  82. package/dist/src/registry/index.d.ts.map +1 -1
  83. package/dist/src/registry/interfaces.d.ts +8 -0
  84. package/dist/src/registry/interfaces.d.ts.map +1 -1
  85. package/dist/src/shared/awaiter.d.ts +2 -2
  86. package/dist/src/shared/awaiter.d.ts.map +1 -1
  87. package/dist/src/shared/collect-all-pages.d.ts +7 -0
  88. package/dist/src/shared/collect-all-pages.d.ts.map +1 -0
  89. package/dist/src/shared/drive-url.d.ts +15 -0
  90. package/dist/src/shared/drive-url.d.ts.map +1 -0
  91. package/dist/src/shared/errors.d.ts +9 -0
  92. package/dist/src/shared/errors.d.ts.map +1 -1
  93. package/dist/src/shared/factories.d.ts +6 -2
  94. package/dist/src/shared/factories.d.ts.map +1 -1
  95. package/dist/src/shared/types.d.ts +32 -6
  96. package/dist/src/shared/types.d.ts.map +1 -1
  97. package/dist/src/signer/passthrough-signer.d.ts +1 -1
  98. package/dist/src/signer/passthrough-signer.d.ts.map +1 -1
  99. package/dist/src/storage/interfaces.d.ts +238 -124
  100. package/dist/src/storage/interfaces.d.ts.map +1 -1
  101. package/dist/src/storage/kysely/document-indexer.d.ts +17 -18
  102. package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -1
  103. package/dist/src/storage/kysely/store.d.ts +5 -4
  104. package/dist/src/storage/kysely/store.d.ts.map +1 -1
  105. package/dist/src/storage/kysely/sync-cursor-storage.d.ts +1 -1
  106. package/dist/src/storage/kysely/sync-cursor-storage.d.ts.map +1 -1
  107. package/dist/src/storage/kysely/sync-dead-letter-storage.d.ts +17 -0
  108. package/dist/src/storage/kysely/sync-dead-letter-storage.d.ts.map +1 -0
  109. package/dist/src/storage/kysely/types.d.ts +22 -0
  110. package/dist/src/storage/kysely/types.d.ts.map +1 -1
  111. package/dist/src/storage/migrations/011_add_cursor_type_column.d.ts +3 -0
  112. package/dist/src/storage/migrations/011_add_cursor_type_column.d.ts.map +1 -0
  113. package/dist/src/storage/migrations/012_add_source_remote_column.d.ts +3 -0
  114. package/dist/src/storage/migrations/012_add_source_remote_column.d.ts.map +1 -0
  115. package/dist/src/storage/migrations/013_create_sync_dead_letters_table.d.ts +3 -0
  116. package/dist/src/storage/migrations/013_create_sync_dead_letters_table.d.ts.map +1 -0
  117. package/dist/src/storage/migrations/014_create_processor_cursor_table.d.ts +3 -0
  118. package/dist/src/storage/migrations/014_create_processor_cursor_table.d.ts.map +1 -0
  119. package/dist/src/storage/migrations/migrator.d.ts.map +1 -1
  120. package/dist/src/subs/default-error-handler.d.ts.map +1 -1
  121. package/dist/src/subs/subscription-notification-read-model.d.ts +3 -2
  122. package/dist/src/subs/subscription-notification-read-model.d.ts.map +1 -1
  123. package/dist/src/sync/batch-aggregator.d.ts +25 -0
  124. package/dist/src/sync/batch-aggregator.d.ts.map +1 -0
  125. package/dist/src/sync/buffered-mailbox.d.ts +36 -0
  126. package/dist/src/sync/buffered-mailbox.d.ts.map +1 -0
  127. package/dist/src/sync/channels/gql-req-channel.d.ts +121 -0
  128. package/dist/src/sync/channels/gql-req-channel.d.ts.map +1 -0
  129. package/dist/src/sync/channels/gql-request-channel-factory.d.ts +32 -0
  130. package/dist/src/sync/channels/gql-request-channel-factory.d.ts.map +1 -0
  131. package/dist/src/sync/channels/gql-res-channel.d.ts +31 -0
  132. package/dist/src/sync/channels/gql-res-channel.d.ts.map +1 -0
  133. package/dist/src/sync/channels/gql-response-channel-factory.d.ts +13 -0
  134. package/dist/src/sync/channels/gql-response-channel-factory.d.ts.map +1 -0
  135. package/dist/src/sync/channels/index.d.ts +6 -4
  136. package/dist/src/sync/channels/index.d.ts.map +1 -1
  137. package/dist/src/sync/channels/interval-poll-timer.d.ts +40 -0
  138. package/dist/src/sync/channels/interval-poll-timer.d.ts.map +1 -0
  139. package/dist/src/sync/channels/poll-timer.d.ts +14 -0
  140. package/dist/src/sync/channels/poll-timer.d.ts.map +1 -0
  141. package/dist/src/sync/channels/utils.d.ts +15 -1
  142. package/dist/src/sync/channels/utils.d.ts.map +1 -1
  143. package/dist/src/sync/index.d.ts +11 -7
  144. package/dist/src/sync/index.d.ts.map +1 -1
  145. package/dist/src/sync/interfaces.d.ts +42 -19
  146. package/dist/src/sync/interfaces.d.ts.map +1 -1
  147. package/dist/src/sync/mailbox.d.ts +51 -12
  148. package/dist/src/sync/mailbox.d.ts.map +1 -1
  149. package/dist/src/sync/sync-awaiter.d.ts +34 -0
  150. package/dist/src/sync/sync-awaiter.d.ts.map +1 -0
  151. package/dist/src/sync/sync-builder.d.ts +5 -1
  152. package/dist/src/sync/sync-builder.d.ts.map +1 -1
  153. package/dist/src/sync/sync-manager.d.ts +22 -8
  154. package/dist/src/sync/sync-manager.d.ts.map +1 -1
  155. package/dist/src/sync/sync-operation.d.ts +4 -2
  156. package/dist/src/sync/sync-operation.d.ts.map +1 -1
  157. package/dist/src/sync/sync-status-tracker.d.ts +31 -0
  158. package/dist/src/sync/sync-status-tracker.d.ts.map +1 -0
  159. package/dist/src/sync/types.d.ts +107 -2
  160. package/dist/src/sync/types.d.ts.map +1 -1
  161. package/dist/src/sync/utils.d.ts +37 -2
  162. package/dist/src/sync/utils.d.ts.map +1 -1
  163. package/dist/src/utils/reshuffle.d.ts +22 -5
  164. package/dist/src/utils/reshuffle.d.ts.map +1 -1
  165. package/package.json +24 -20
  166. package/dist/src/actions/index.js +0 -76
  167. package/dist/src/actions/index.js.map +0 -1
  168. package/dist/src/cache/buffer/ring-buffer.js +0 -69
  169. package/dist/src/cache/buffer/ring-buffer.js.map +0 -1
  170. package/dist/src/cache/document-meta-cache-types.js +0 -2
  171. package/dist/src/cache/document-meta-cache-types.js.map +0 -1
  172. package/dist/src/cache/document-meta-cache.js +0 -128
  173. package/dist/src/cache/document-meta-cache.js.map +0 -1
  174. package/dist/src/cache/index.js +0 -2
  175. package/dist/src/cache/index.js.map +0 -1
  176. package/dist/src/cache/kysely-operation-index.js +0 -250
  177. package/dist/src/cache/kysely-operation-index.js.map +0 -1
  178. package/dist/src/cache/kysely-write-cache.js +0 -388
  179. package/dist/src/cache/kysely-write-cache.js.map +0 -1
  180. package/dist/src/cache/lru/lru-tracker.js +0 -96
  181. package/dist/src/cache/lru/lru-tracker.js.map +0 -1
  182. package/dist/src/cache/operation-index-types.js +0 -4
  183. package/dist/src/cache/operation-index-types.js.map +0 -1
  184. package/dist/src/cache/write/interfaces.js +0 -2
  185. package/dist/src/cache/write/interfaces.js.map +0 -1
  186. package/dist/src/cache/write-cache-types.js +0 -2
  187. package/dist/src/cache/write-cache-types.js.map +0 -1
  188. package/dist/src/client/reactor-client.js +0 -406
  189. package/dist/src/client/reactor-client.js.map +0 -1
  190. package/dist/src/client/types.js +0 -14
  191. package/dist/src/client/types.js.map +0 -1
  192. package/dist/src/core/reactor-builder.js +0 -231
  193. package/dist/src/core/reactor-builder.js.map +0 -1
  194. package/dist/src/core/reactor-client-builder.js +0 -123
  195. package/dist/src/core/reactor-client-builder.js.map +0 -1
  196. package/dist/src/core/reactor.js +0 -981
  197. package/dist/src/core/reactor.js.map +0 -1
  198. package/dist/src/core/types.js +0 -2
  199. package/dist/src/core/types.js.map +0 -1
  200. package/dist/src/core/utils.js +0 -171
  201. package/dist/src/core/utils.js.map +0 -1
  202. package/dist/src/events/event-bus.js +0 -53
  203. package/dist/src/events/event-bus.js.map +0 -1
  204. package/dist/src/events/interfaces.js +0 -2
  205. package/dist/src/events/interfaces.js.map +0 -1
  206. package/dist/src/events/types.js +0 -28
  207. package/dist/src/events/types.js.map +0 -1
  208. package/dist/src/executor/interfaces.js +0 -2
  209. package/dist/src/executor/interfaces.js.map +0 -1
  210. package/dist/src/executor/simple-job-executor-manager.js +0 -233
  211. package/dist/src/executor/simple-job-executor-manager.js.map +0 -1
  212. package/dist/src/executor/simple-job-executor.js +0 -898
  213. package/dist/src/executor/simple-job-executor.js.map +0 -1
  214. package/dist/src/executor/types.js +0 -11
  215. package/dist/src/executor/types.js.map +0 -1
  216. package/dist/src/executor/util.js +0 -184
  217. package/dist/src/executor/util.js.map +0 -1
  218. package/dist/src/index.js.map +0 -1
  219. package/dist/src/job-tracker/in-memory-job-tracker.js +0 -112
  220. package/dist/src/job-tracker/in-memory-job-tracker.js.map +0 -1
  221. package/dist/src/job-tracker/index.js +0 -2
  222. package/dist/src/job-tracker/index.js.map +0 -1
  223. package/dist/src/job-tracker/interfaces.js +0 -2
  224. package/dist/src/job-tracker/interfaces.js.map +0 -1
  225. package/dist/src/logging/console.js +0 -108
  226. package/dist/src/logging/console.js.map +0 -1
  227. package/dist/src/logging/types.js +0 -2
  228. package/dist/src/logging/types.js.map +0 -1
  229. package/dist/src/processors/index.js +0 -2
  230. package/dist/src/processors/index.js.map +0 -1
  231. package/dist/src/processors/processor-manager.js +0 -165
  232. package/dist/src/processors/processor-manager.js.map +0 -1
  233. package/dist/src/processors/types.d.ts +0 -63
  234. package/dist/src/processors/types.d.ts.map +0 -1
  235. package/dist/src/processors/types.js +0 -2
  236. package/dist/src/processors/types.js.map +0 -1
  237. package/dist/src/processors/utils.js +0 -58
  238. package/dist/src/processors/utils.js.map +0 -1
  239. package/dist/src/queue/interfaces.js +0 -2
  240. package/dist/src/queue/interfaces.js.map +0 -1
  241. package/dist/src/queue/job-execution-handle.js +0 -62
  242. package/dist/src/queue/job-execution-handle.js.map +0 -1
  243. package/dist/src/queue/queue.js +0 -384
  244. package/dist/src/queue/queue.js.map +0 -1
  245. package/dist/src/queue/types.js +0 -19
  246. package/dist/src/queue/types.js.map +0 -1
  247. package/dist/src/read-models/base-read-model.js +0 -143
  248. package/dist/src/read-models/base-read-model.js.map +0 -1
  249. package/dist/src/read-models/coordinator.js +0 -72
  250. package/dist/src/read-models/coordinator.js.map +0 -1
  251. package/dist/src/read-models/document-view.js +0 -375
  252. package/dist/src/read-models/document-view.js.map +0 -1
  253. package/dist/src/read-models/interfaces.js +0 -2
  254. package/dist/src/read-models/interfaces.js.map +0 -1
  255. package/dist/src/read-models/types.js +0 -2
  256. package/dist/src/read-models/types.js.map +0 -1
  257. package/dist/src/registry/implementation.js +0 -216
  258. package/dist/src/registry/implementation.js.map +0 -1
  259. package/dist/src/registry/index.js +0 -2
  260. package/dist/src/registry/index.js.map +0 -1
  261. package/dist/src/registry/interfaces.js +0 -2
  262. package/dist/src/registry/interfaces.js.map +0 -1
  263. package/dist/src/shared/awaiter.js +0 -123
  264. package/dist/src/shared/awaiter.js.map +0 -1
  265. package/dist/src/shared/consistency-tracker.js +0 -123
  266. package/dist/src/shared/consistency-tracker.js.map +0 -1
  267. package/dist/src/shared/errors.js +0 -75
  268. package/dist/src/shared/errors.js.map +0 -1
  269. package/dist/src/shared/factories.js +0 -33
  270. package/dist/src/shared/factories.js.map +0 -1
  271. package/dist/src/shared/types.js +0 -38
  272. package/dist/src/shared/types.js.map +0 -1
  273. package/dist/src/shared/utils.js +0 -8
  274. package/dist/src/shared/utils.js.map +0 -1
  275. package/dist/src/signer/passthrough-signer.js +0 -19
  276. package/dist/src/signer/passthrough-signer.js.map +0 -1
  277. package/dist/src/signer/types.js +0 -2
  278. package/dist/src/signer/types.js.map +0 -1
  279. package/dist/src/storage/consistency-aware-legacy-storage.d.ts +0 -33
  280. package/dist/src/storage/consistency-aware-legacy-storage.d.ts.map +0 -1
  281. package/dist/src/storage/consistency-aware-legacy-storage.js +0 -65
  282. package/dist/src/storage/consistency-aware-legacy-storage.js.map +0 -1
  283. package/dist/src/storage/index.js +0 -3
  284. package/dist/src/storage/index.js.map +0 -1
  285. package/dist/src/storage/interfaces.js +0 -19
  286. package/dist/src/storage/interfaces.js.map +0 -1
  287. package/dist/src/storage/kysely/document-indexer.js +0 -350
  288. package/dist/src/storage/kysely/document-indexer.js.map +0 -1
  289. package/dist/src/storage/kysely/keyframe-store.js +0 -64
  290. package/dist/src/storage/kysely/keyframe-store.js.map +0 -1
  291. package/dist/src/storage/kysely/store.js +0 -233
  292. package/dist/src/storage/kysely/store.js.map +0 -1
  293. package/dist/src/storage/kysely/sync-cursor-storage.js +0 -93
  294. package/dist/src/storage/kysely/sync-cursor-storage.js.map +0 -1
  295. package/dist/src/storage/kysely/sync-remote-storage.js +0 -133
  296. package/dist/src/storage/kysely/sync-remote-storage.js.map +0 -1
  297. package/dist/src/storage/kysely/types.js +0 -2
  298. package/dist/src/storage/kysely/types.js.map +0 -1
  299. package/dist/src/storage/migrations/001_create_operation_table.js +0 -41
  300. package/dist/src/storage/migrations/001_create_operation_table.js.map +0 -1
  301. package/dist/src/storage/migrations/002_create_keyframe_table.js +0 -27
  302. package/dist/src/storage/migrations/002_create_keyframe_table.js.map +0 -1
  303. package/dist/src/storage/migrations/003_create_document_table.js +0 -10
  304. package/dist/src/storage/migrations/003_create_document_table.js.map +0 -1
  305. package/dist/src/storage/migrations/004_create_document_relationship_table.js +0 -35
  306. package/dist/src/storage/migrations/004_create_document_relationship_table.js.map +0 -1
  307. package/dist/src/storage/migrations/005_create_indexer_state_table.js +0 -10
  308. package/dist/src/storage/migrations/005_create_indexer_state_table.js.map +0 -1
  309. package/dist/src/storage/migrations/006_create_document_snapshot_table.js +0 -49
  310. package/dist/src/storage/migrations/006_create_document_snapshot_table.js.map +0 -1
  311. package/dist/src/storage/migrations/007_create_slug_mapping_table.js +0 -24
  312. package/dist/src/storage/migrations/007_create_slug_mapping_table.js.map +0 -1
  313. package/dist/src/storage/migrations/008_create_view_state_table.js +0 -10
  314. package/dist/src/storage/migrations/008_create_view_state_table.js.map +0 -1
  315. package/dist/src/storage/migrations/009_create_operation_index_tables.js +0 -50
  316. package/dist/src/storage/migrations/009_create_operation_index_tables.js.map +0 -1
  317. package/dist/src/storage/migrations/010_create_sync_tables.js +0 -43
  318. package/dist/src/storage/migrations/010_create_sync_tables.js.map +0 -1
  319. package/dist/src/storage/migrations/index.js +0 -3
  320. package/dist/src/storage/migrations/index.js.map +0 -1
  321. package/dist/src/storage/migrations/migrator.js +0 -78
  322. package/dist/src/storage/migrations/migrator.js.map +0 -1
  323. package/dist/src/storage/migrations/run-migrations.js +0 -58
  324. package/dist/src/storage/migrations/run-migrations.js.map +0 -1
  325. package/dist/src/storage/migrations/types.js +0 -2
  326. package/dist/src/storage/migrations/types.js.map +0 -1
  327. package/dist/src/storage/txn.js +0 -42
  328. package/dist/src/storage/txn.js.map +0 -1
  329. package/dist/src/subs/default-error-handler.js +0 -27
  330. package/dist/src/subs/default-error-handler.js.map +0 -1
  331. package/dist/src/subs/react-subscription-manager.js +0 -185
  332. package/dist/src/subs/react-subscription-manager.js.map +0 -1
  333. package/dist/src/subs/subscription-notification-read-model.js +0 -62
  334. package/dist/src/subs/subscription-notification-read-model.js.map +0 -1
  335. package/dist/src/subs/types.js +0 -2
  336. package/dist/src/subs/types.js.map +0 -1
  337. package/dist/src/sync/channels/composite-channel-factory.d.ts +0 -30
  338. package/dist/src/sync/channels/composite-channel-factory.d.ts.map +0 -1
  339. package/dist/src/sync/channels/composite-channel-factory.js +0 -87
  340. package/dist/src/sync/channels/composite-channel-factory.js.map +0 -1
  341. package/dist/src/sync/channels/gql-channel-factory.d.ts +0 -25
  342. package/dist/src/sync/channels/gql-channel-factory.d.ts.map +0 -1
  343. package/dist/src/sync/channels/gql-channel-factory.js +0 -76
  344. package/dist/src/sync/channels/gql-channel-factory.js.map +0 -1
  345. package/dist/src/sync/channels/gql-channel.d.ts +0 -118
  346. package/dist/src/sync/channels/gql-channel.d.ts.map +0 -1
  347. package/dist/src/sync/channels/gql-channel.js +0 -423
  348. package/dist/src/sync/channels/gql-channel.js.map +0 -1
  349. package/dist/src/sync/channels/index.js +0 -6
  350. package/dist/src/sync/channels/index.js.map +0 -1
  351. package/dist/src/sync/channels/polling-channel.d.ts +0 -39
  352. package/dist/src/sync/channels/polling-channel.d.ts.map +0 -1
  353. package/dist/src/sync/channels/polling-channel.js +0 -72
  354. package/dist/src/sync/channels/polling-channel.js.map +0 -1
  355. package/dist/src/sync/channels/utils.js +0 -96
  356. package/dist/src/sync/channels/utils.js.map +0 -1
  357. package/dist/src/sync/errors.js +0 -17
  358. package/dist/src/sync/errors.js.map +0 -1
  359. package/dist/src/sync/index.js +0 -9
  360. package/dist/src/sync/index.js.map +0 -1
  361. package/dist/src/sync/interfaces.js +0 -2
  362. package/dist/src/sync/interfaces.js.map +0 -1
  363. package/dist/src/sync/mailbox.js +0 -59
  364. package/dist/src/sync/mailbox.js.map +0 -1
  365. package/dist/src/sync/sync-builder.js +0 -39
  366. package/dist/src/sync/sync-builder.js.map +0 -1
  367. package/dist/src/sync/sync-manager.js +0 -266
  368. package/dist/src/sync/sync-manager.js.map +0 -1
  369. package/dist/src/sync/sync-operation.js +0 -63
  370. package/dist/src/sync/sync-operation.js.map +0 -1
  371. package/dist/src/sync/types.js +0 -16
  372. package/dist/src/sync/types.js.map +0 -1
  373. package/dist/src/sync/utils.js +0 -78
  374. package/dist/src/sync/utils.js.map +0 -1
  375. package/dist/src/utils/reshuffle.js +0 -47
  376. package/dist/src/utils/reshuffle.js.map +0 -1
@@ -1,250 +0,0 @@
1
- import { sql } from "kysely";
2
- class KyselyOperationIndexTxn {
3
- collections = [];
4
- collectionMemberships = [];
5
- collectionRemovals = [];
6
- operations = [];
7
- createCollection(collectionId) {
8
- this.collections.push(collectionId);
9
- }
10
- addToCollection(collectionId, documentId) {
11
- const lastOpIndex = this.operations.length - 1;
12
- if (lastOpIndex < 0) {
13
- throw new Error("addToCollection must be called after write() - no operations in transaction");
14
- }
15
- this.collectionMemberships.push({
16
- collectionId,
17
- documentId,
18
- operationIndex: lastOpIndex,
19
- });
20
- }
21
- removeFromCollection(collectionId, documentId) {
22
- const lastOpIndex = this.operations.length - 1;
23
- if (lastOpIndex < 0) {
24
- throw new Error("removeFromCollection must be called after write() - no operations in transaction");
25
- }
26
- this.collectionRemovals.push({
27
- collectionId,
28
- documentId,
29
- operationIndex: lastOpIndex,
30
- });
31
- }
32
- write(operations) {
33
- this.operations.push(...operations);
34
- }
35
- getCollections() {
36
- return this.collections;
37
- }
38
- getCollectionMemberships() {
39
- return this.collectionMemberships;
40
- }
41
- getCollectionRemovals() {
42
- return this.collectionRemovals;
43
- }
44
- getOperations() {
45
- return this.operations;
46
- }
47
- }
48
- export class KyselyOperationIndex {
49
- db;
50
- constructor(db) {
51
- this.db = db;
52
- }
53
- start() {
54
- return new KyselyOperationIndexTxn();
55
- }
56
- async commit(txn, signal) {
57
- if (signal?.aborted) {
58
- throw new Error("Operation aborted");
59
- }
60
- const kyselyTxn = txn;
61
- const collections = kyselyTxn.getCollections();
62
- const memberships = kyselyTxn.getCollectionMemberships();
63
- const removals = kyselyTxn.getCollectionRemovals();
64
- const operations = kyselyTxn.getOperations();
65
- let resultOrdinals = [];
66
- await this.db.transaction().execute(async (trx) => {
67
- if (collections.length > 0) {
68
- const collectionRows = collections.map((collectionId) => ({
69
- documentId: collectionId,
70
- collectionId,
71
- joinedOrdinal: BigInt(0),
72
- leftOrdinal: null,
73
- }));
74
- await trx
75
- .insertInto("document_collections")
76
- .values(collectionRows)
77
- .onConflict((oc) => oc.doNothing())
78
- .execute();
79
- }
80
- let operationOrdinals = [];
81
- if (operations.length > 0) {
82
- const operationRows = operations.map((op) => ({
83
- opId: op.id || "",
84
- documentId: op.documentId,
85
- documentType: op.documentType,
86
- scope: op.scope,
87
- branch: op.branch,
88
- timestampUtcMs: op.timestampUtcMs,
89
- index: op.index,
90
- skip: op.skip,
91
- hash: op.hash,
92
- action: op.action,
93
- }));
94
- const insertedOps = await trx
95
- .insertInto("operation_index_operations")
96
- .values(operationRows)
97
- .returning("ordinal")
98
- .execute();
99
- operationOrdinals = insertedOps.map((row) => row.ordinal);
100
- resultOrdinals = operationOrdinals;
101
- }
102
- if (memberships.length > 0) {
103
- for (const m of memberships) {
104
- // this is guaranteed to be defined because we enforce in KyselyOperationIndexTxn
105
- const ordinal = operationOrdinals[m.operationIndex];
106
- await trx
107
- .insertInto("document_collections")
108
- .values({
109
- documentId: m.documentId,
110
- collectionId: m.collectionId,
111
- joinedOrdinal: BigInt(ordinal),
112
- leftOrdinal: null,
113
- })
114
- .onConflict((oc) => oc.columns(["documentId", "collectionId"]).doUpdateSet({
115
- joinedOrdinal: BigInt(ordinal),
116
- leftOrdinal: null,
117
- }))
118
- .execute();
119
- }
120
- }
121
- if (removals.length > 0) {
122
- for (const r of removals) {
123
- // this is guaranteed to be defined because we enforce in KyselyOperationIndexTxn
124
- const ordinal = operationOrdinals[r.operationIndex];
125
- await trx
126
- .updateTable("document_collections")
127
- .set({
128
- leftOrdinal: BigInt(ordinal),
129
- })
130
- .where("collectionId", "=", r.collectionId)
131
- .where("documentId", "=", r.documentId)
132
- .where("leftOrdinal", "is", null)
133
- .execute();
134
- }
135
- }
136
- });
137
- return resultOrdinals;
138
- }
139
- async find(collectionId, cursor, view, paging, signal) {
140
- if (signal?.aborted) {
141
- throw new Error("Operation aborted");
142
- }
143
- let query = this.db
144
- .selectFrom("operation_index_operations as oi")
145
- .innerJoin("document_collections as dc", "oi.documentId", "dc.documentId")
146
- .selectAll("oi")
147
- .select(["dc.documentId", "dc.collectionId"])
148
- .where("dc.collectionId", "=", collectionId)
149
- .where(sql `dc."leftOrdinal" IS NULL OR oi.ordinal < dc."leftOrdinal"`)
150
- .orderBy("oi.ordinal", "asc");
151
- if (cursor !== undefined) {
152
- query = query.where("oi.ordinal", ">", cursor);
153
- }
154
- if (view?.branch) {
155
- query = query.where("oi.branch", "=", view.branch);
156
- }
157
- if (view?.scopes && view.scopes.length > 0) {
158
- query = query.where("oi.scope", "in", view.scopes);
159
- }
160
- if (paging?.cursor) {
161
- const cursorOrdinal = Number.parseInt(paging.cursor, 10);
162
- query = query.where("oi.ordinal", ">", cursorOrdinal);
163
- }
164
- if (paging?.limit) {
165
- query = query.limit(paging.limit + 1);
166
- }
167
- const rows = await query.execute();
168
- let hasMore = false;
169
- let items = rows;
170
- if (paging?.limit && rows.length > paging.limit) {
171
- hasMore = true;
172
- items = rows.slice(0, paging.limit);
173
- }
174
- const nextCursor = hasMore && items.length > 0
175
- ? items[items.length - 1].ordinal.toString()
176
- : undefined;
177
- return {
178
- items: items.map((row) => this.rowToOperationIndexEntry(row)),
179
- nextCursor,
180
- hasMore,
181
- };
182
- }
183
- async getSinceOrdinal(ordinal, paging, signal) {
184
- if (signal?.aborted) {
185
- throw new Error("Operation aborted");
186
- }
187
- let query = this.db
188
- .selectFrom("operation_index_operations")
189
- .selectAll()
190
- .where("ordinal", ">", ordinal)
191
- .orderBy("ordinal", "asc");
192
- if (paging?.cursor) {
193
- const cursorOrdinal = Number.parseInt(paging.cursor, 10);
194
- query = query.where("ordinal", ">", cursorOrdinal);
195
- }
196
- if (paging?.limit) {
197
- query = query.limit(paging.limit + 1);
198
- }
199
- const rows = await query.execute();
200
- let hasMore = false;
201
- let items = rows;
202
- if (paging?.limit && rows.length > paging.limit) {
203
- hasMore = true;
204
- items = rows.slice(0, paging.limit);
205
- }
206
- const nextCursor = hasMore && items.length > 0
207
- ? items[items.length - 1].ordinal.toString()
208
- : undefined;
209
- return {
210
- items: items.map((row) => this.rowToOperationWithContext(row)),
211
- nextCursor,
212
- hasMore,
213
- };
214
- }
215
- rowToOperationWithContext(row) {
216
- return {
217
- operation: {
218
- index: row.index,
219
- timestampUtcMs: row.timestampUtcMs,
220
- hash: row.hash,
221
- skip: row.skip,
222
- action: row.action,
223
- id: row.opId,
224
- },
225
- context: {
226
- documentId: row.documentId,
227
- documentType: row.documentType,
228
- scope: row.scope,
229
- branch: row.branch,
230
- ordinal: row.ordinal,
231
- },
232
- };
233
- }
234
- rowToOperationIndexEntry(row) {
235
- return {
236
- ordinal: row.ordinal,
237
- documentId: row.documentId,
238
- documentType: row.documentType,
239
- branch: row.branch,
240
- scope: row.scope,
241
- index: row.index,
242
- timestampUtcMs: row.timestampUtcMs,
243
- hash: row.hash,
244
- skip: row.skip,
245
- action: row.action,
246
- id: row.opId,
247
- };
248
- }
249
- }
250
- //# sourceMappingURL=kysely-operation-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kysely-operation-index.js","sourceRoot":"","sources":["../../../src/cache/kysely-operation-index.ts"],"names":[],"mappings":"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"}
@@ -1,388 +0,0 @@
1
- import { applyDeleteDocumentAction, applyUpgradeDocumentAction, createDocumentFromAction, } from "../executor/util.js";
2
- import { RingBuffer } from "./buffer/ring-buffer.js";
3
- import { LRUTracker } from "./lru/lru-tracker.js";
4
- /**
5
- * In-memory write cache with keyframe persistence for PHDocuments.
6
- *
7
- * Caches document snapshots in ring buffers with LRU eviction. On cache miss,
8
- * rebuilds documents from nearest keyframe or full operation history.
9
- *
10
- * **Performance Characteristics:**
11
- * - Cache hit: O(1) lookup in ring buffer
12
- * - Cold miss: O(n) where n is total operation count, or O(k) where k is operations since keyframe
13
- * - Warm miss: O(m) where m is operations since cached revision
14
- * - Eviction: O(1) for LRU tracking and removal
15
- *
16
- * **Thread Safety:**
17
- * Not thread-safe. Designed for single-threaded job executor environment.
18
- * External synchronization required for concurrent access across multiple executors.
19
- *
20
- * **Example:**
21
- * ```typescript
22
- * const cache = new KyselyWriteCache(
23
- * keyframeStore,
24
- * operationStore,
25
- * registry,
26
- * { maxDocuments: 1000, ringBufferSize: 10, keyframeInterval: 10 }
27
- * );
28
- *
29
- * await cache.startup();
30
- *
31
- * // Retrieve or rebuild document
32
- * const doc = await cache.getState(docId, docType, scope, branch, revision);
33
- *
34
- * // Cache result after job execution
35
- * cache.putState(docId, docType, scope, branch, newRevision, updatedDoc);
36
- *
37
- * await cache.shutdown();
38
- * ```
39
- */
40
- export class KyselyWriteCache {
41
- streams;
42
- lruTracker;
43
- keyframeStore;
44
- operationStore;
45
- registry;
46
- config;
47
- constructor(keyframeStore, operationStore, registry, config) {
48
- this.keyframeStore = keyframeStore;
49
- this.operationStore = operationStore;
50
- this.registry = registry;
51
- this.config = {
52
- maxDocuments: config.maxDocuments,
53
- ringBufferSize: config.ringBufferSize,
54
- keyframeInterval: config.keyframeInterval,
55
- };
56
- this.streams = new Map();
57
- this.lruTracker = new LRUTracker();
58
- }
59
- /**
60
- * Initializes the write cache.
61
- * Currently a no-op as keyframe store lifecycle is managed externally.
62
- */
63
- async startup() {
64
- return Promise.resolve();
65
- }
66
- /**
67
- * Shuts down the write cache.
68
- * Currently a no-op as keyframe store lifecycle is managed externally.
69
- */
70
- async shutdown() {
71
- return Promise.resolve();
72
- }
73
- /**
74
- * Retrieves document state at a specific revision from cache or rebuilds it.
75
- *
76
- * Cache hit path: Returns cached snapshot if available (O(1))
77
- * Warm miss path: Rebuilds from cached base revision + incremental ops
78
- * Cold miss path: Rebuilds from keyframe or from scratch using all operations
79
- *
80
- * @param documentId - The document identifier
81
- * @param scope - The operation scope
82
- * @param branch - The operation branch
83
- * @param targetRevision - The target revision, or undefined for newest
84
- * @param signal - Optional abort signal to cancel the operation
85
- * @returns The document at the target revision
86
- * @throws {Error} "Operation aborted" if signal is aborted
87
- * @throws {ModuleNotFoundError} If document type not registered in registry
88
- * @throws {Error} "Failed to rebuild document" if operation store fails
89
- * @throws {Error} If reducer throws during operation application
90
- * @throws {Error} If document serialization fails
91
- */
92
- async getState(documentId, scope, branch, targetRevision, signal) {
93
- if (signal?.aborted) {
94
- throw new Error("Operation aborted");
95
- }
96
- const streamKey = this.makeStreamKey(documentId, scope, branch);
97
- const stream = this.streams.get(streamKey);
98
- if (stream) {
99
- const snapshots = stream.ringBuffer.getAll();
100
- if (targetRevision === undefined) {
101
- if (snapshots.length > 0) {
102
- const newest = snapshots[snapshots.length - 1];
103
- this.lruTracker.touch(streamKey);
104
- return newest.document;
105
- }
106
- }
107
- else {
108
- const exactMatch = snapshots.find((s) => s.revision === targetRevision);
109
- if (exactMatch) {
110
- this.lruTracker.touch(streamKey);
111
- return exactMatch.document;
112
- }
113
- const newestOlder = this.findNearestOlderSnapshot(snapshots, targetRevision);
114
- if (newestOlder) {
115
- const document = await this.warmMissRebuild(newestOlder.document, newestOlder.revision, documentId, scope, branch, targetRevision, signal);
116
- this.putState(documentId, scope, branch, targetRevision, document);
117
- this.lruTracker.touch(streamKey);
118
- return document;
119
- }
120
- }
121
- }
122
- const document = await this.coldMissRebuild(documentId, scope, branch, targetRevision, signal);
123
- let revision = targetRevision;
124
- if (revision === undefined) {
125
- revision = document.header.revision[scope] || 0;
126
- }
127
- this.putState(documentId, scope, branch, revision, document);
128
- return document;
129
- }
130
- /**
131
- * Stores a document snapshot in the cache at a specific revision.
132
- *
133
- * Stores the document reference as-is. Callers must avoid mutating cached
134
- * snapshots if they need to preserve historical revisions.
135
- * Updates LRU tracker and may evict least recently used stream if at capacity.
136
- * Asynchronously persists keyframes at configured intervals (fire-and-forget).
137
- *
138
- * @param documentId - The document identifier
139
- * @param scope - The operation scope
140
- * @param branch - The operation branch
141
- * @param revision - The revision number
142
- * @param document - The document to cache
143
- * @throws {Error} If document serialization fails
144
- */
145
- putState(documentId, scope, branch, revision, document) {
146
- const streamKey = this.makeStreamKey(documentId, scope, branch);
147
- const stream = this.getOrCreateStream(streamKey);
148
- const snapshot = {
149
- revision,
150
- document,
151
- };
152
- stream.ringBuffer.push(snapshot);
153
- if (this.isKeyframeRevision(revision)) {
154
- this.keyframeStore
155
- .putKeyframe(documentId, scope, branch, revision, document)
156
- .catch((err) => {
157
- console.error(`Failed to persist keyframe ${documentId}@${revision}:`, err);
158
- });
159
- }
160
- }
161
- /**
162
- * Invalidates cached document streams.
163
- *
164
- * Supports three invalidation scopes:
165
- * - Document-level: invalidate(documentId) - removes all streams for document
166
- * - Scope-level: invalidate(documentId, scope) - removes all branches for scope
167
- * - Stream-level: invalidate(documentId, scope, branch) - removes specific stream
168
- *
169
- * @param documentId - The document identifier
170
- * @param scope - Optional scope to narrow invalidation
171
- * @param branch - Optional branch to narrow invalidation (requires scope)
172
- * @returns The number of streams evicted
173
- */
174
- invalidate(documentId, scope, branch) {
175
- let evicted = 0;
176
- if (scope === undefined && branch === undefined) {
177
- for (const [key] of this.streams.entries()) {
178
- if (key.startsWith(`${documentId}:`)) {
179
- this.streams.delete(key);
180
- this.lruTracker.remove(key);
181
- evicted++;
182
- }
183
- }
184
- }
185
- else if (scope !== undefined && branch === undefined) {
186
- for (const [key] of this.streams.entries()) {
187
- if (key.startsWith(`${documentId}:${scope}:`)) {
188
- this.streams.delete(key);
189
- this.lruTracker.remove(key);
190
- evicted++;
191
- }
192
- }
193
- }
194
- else if (scope !== undefined && branch !== undefined) {
195
- const key = this.makeStreamKey(documentId, scope, branch);
196
- if (this.streams.has(key)) {
197
- this.streams.delete(key);
198
- this.lruTracker.remove(key);
199
- evicted = 1;
200
- }
201
- }
202
- return evicted;
203
- }
204
- /**
205
- * Clears the entire cache, removing all cached document streams.
206
- * Resets LRU tracking state. This operation always succeeds.
207
- */
208
- clear() {
209
- this.streams.clear();
210
- this.lruTracker.clear();
211
- }
212
- /**
213
- * Retrieves a specific stream for a document. Exposed on the implementation
214
- * for testing, but not on the interface.
215
- */
216
- getStream(documentId, scope, branch) {
217
- const key = this.makeStreamKey(documentId, scope, branch);
218
- return this.streams.get(key);
219
- }
220
- async findNearestKeyframe(documentId, scope, branch, targetRevision, signal) {
221
- if (targetRevision === Number.MAX_SAFE_INTEGER || targetRevision <= 0) {
222
- return undefined;
223
- }
224
- return this.keyframeStore.findNearestKeyframe(documentId, scope, branch, targetRevision, signal);
225
- }
226
- async coldMissRebuild(documentId, scope, branch, targetRevision, signal) {
227
- const effectiveTargetRevision = targetRevision || Number.MAX_SAFE_INTEGER;
228
- const keyframe = await this.findNearestKeyframe(documentId, scope, branch, effectiveTargetRevision, signal);
229
- let document;
230
- let startRevision;
231
- let documentType;
232
- if (keyframe) {
233
- document = keyframe.document;
234
- startRevision = keyframe.revision;
235
- documentType = keyframe.document.header.documentType;
236
- }
237
- else {
238
- document = undefined;
239
- startRevision = -1;
240
- const createOpResult = await this.operationStore.getSince(documentId, "document", branch, -1, { limit: 1 }, signal);
241
- if (createOpResult.items.length === 0) {
242
- throw new Error(`Failed to rebuild document ${documentId}: no CREATE_DOCUMENT operation found in document scope`);
243
- }
244
- const createOp = createOpResult.items[0];
245
- if (createOp.action.type !== "CREATE_DOCUMENT") {
246
- throw new Error(`Failed to rebuild document ${documentId}: first operation in document scope must be CREATE_DOCUMENT, found ${createOp.action.type}`);
247
- }
248
- const documentCreateAction = createOp.action;
249
- documentType = documentCreateAction.input.model;
250
- if (!documentType) {
251
- throw new Error(`Failed to rebuild document ${documentId}: CREATE_DOCUMENT action missing model in input`);
252
- }
253
- document = createDocumentFromAction(documentCreateAction);
254
- const docModule = this.registry.getModule(documentType);
255
- const docScopeOps = await this.operationStore.getSince(documentId, "document", branch, 0, undefined, signal);
256
- for (const operation of docScopeOps.items) {
257
- if (operation.index === 0) {
258
- continue;
259
- }
260
- if (operation.action.type === "UPGRADE_DOCUMENT") {
261
- const upgradeAction = operation.action;
262
- document = applyUpgradeDocumentAction(document, upgradeAction);
263
- }
264
- else if (operation.action.type === "DELETE_DOCUMENT") {
265
- applyDeleteDocumentAction(document, operation.action);
266
- }
267
- else {
268
- const protocolVersion = document.header.protocolVersions?.["base-reducer"] ?? 1;
269
- document = docModule.reducer(document, operation.action, undefined, {
270
- skip: operation.skip,
271
- protocolVersion,
272
- });
273
- }
274
- }
275
- }
276
- const module = this.registry.getModule(documentType);
277
- let cursor = undefined;
278
- const pageSize = 100;
279
- let hasMorePages;
280
- do {
281
- if (signal?.aborted) {
282
- throw new Error("Operation aborted");
283
- }
284
- const paging = cursor ? { cursor, pageSize } : { pageSize };
285
- try {
286
- const result = await this.operationStore.getSince(documentId, scope, branch, startRevision, paging, signal);
287
- for (const operation of result.items) {
288
- if (targetRevision !== undefined &&
289
- operation.index > targetRevision) {
290
- break;
291
- }
292
- // Fail-fast: if reducer throws, error propagates immediately without caching partial state
293
- const protocolVersion = document.header.protocolVersions?.["base-reducer"] ?? 1;
294
- document = module.reducer(document, operation.action, undefined, {
295
- skip: operation.skip,
296
- protocolVersion,
297
- });
298
- }
299
- const reachedTarget = targetRevision !== undefined &&
300
- result.items.some((op) => op.index >= targetRevision);
301
- hasMorePages = Boolean(result.nextCursor) && !reachedTarget;
302
- if (hasMorePages) {
303
- cursor = result.nextCursor;
304
- }
305
- }
306
- catch (err) {
307
- // Wrap errors with context to include document ID for debugging
308
- throw new Error(`Failed to rebuild document ${documentId}: ${err instanceof Error ? err.message : String(err)}`);
309
- }
310
- } while (hasMorePages);
311
- // we let these errors bubble up to jobs
312
- const revisions = await this.operationStore.getRevisions(documentId, branch, signal);
313
- document.header.revision = revisions.revision;
314
- document.header.lastModifiedAtUtcIso = revisions.latestTimestamp;
315
- return document;
316
- }
317
- async warmMissRebuild(baseDocument, baseRevision, documentId, scope, branch, targetRevision, signal) {
318
- const documentType = baseDocument.header.documentType;
319
- const module = this.registry.getModule(documentType);
320
- let document = baseDocument;
321
- try {
322
- const pagedResults = await this.operationStore.getSince(documentId, scope, branch, baseRevision, undefined, signal);
323
- for (const operation of pagedResults.items) {
324
- if (signal?.aborted) {
325
- throw new Error("Operation aborted");
326
- }
327
- if (targetRevision !== undefined && operation.index > targetRevision) {
328
- break;
329
- }
330
- // Fail-fast: if reducer throws, error propagates immediately without caching partial state
331
- const protocolVersion = document.header.protocolVersions?.["base-reducer"] ?? 1;
332
- document = module.reducer(document, operation.action, undefined, {
333
- skip: operation.skip,
334
- protocolVersion,
335
- });
336
- if (targetRevision !== undefined &&
337
- operation.index === targetRevision) {
338
- break;
339
- }
340
- }
341
- }
342
- catch (err) {
343
- // Wrap errors with context to include document ID for debugging
344
- throw new Error(`Failed to rebuild document ${documentId}: ${err instanceof Error ? err.message : String(err)}`);
345
- }
346
- // we let these errors bubble up to jobs
347
- const revisions = await this.operationStore.getRevisions(documentId, branch, signal);
348
- document.header.revision = revisions.revision;
349
- document.header.lastModifiedAtUtcIso = revisions.latestTimestamp;
350
- return document;
351
- }
352
- findNearestOlderSnapshot(snapshots, targetRevision) {
353
- let nearest = undefined;
354
- for (const snapshot of snapshots) {
355
- if (snapshot.revision < targetRevision) {
356
- if (!nearest || snapshot.revision > nearest.revision) {
357
- nearest = snapshot;
358
- }
359
- }
360
- }
361
- return nearest;
362
- }
363
- makeStreamKey(documentId, scope, branch) {
364
- return `${documentId}:${scope}:${branch}`;
365
- }
366
- getOrCreateStream(key) {
367
- let stream = this.streams.get(key);
368
- if (!stream) {
369
- if (this.streams.size >= this.config.maxDocuments) {
370
- const evictKey = this.lruTracker.evict();
371
- if (evictKey) {
372
- this.streams.delete(evictKey);
373
- }
374
- }
375
- stream = {
376
- key,
377
- ringBuffer: new RingBuffer(this.config.ringBufferSize),
378
- };
379
- this.streams.set(key, stream);
380
- }
381
- this.lruTracker.touch(key);
382
- return stream;
383
- }
384
- isKeyframeRevision(revision) {
385
- return revision > 0 && revision % this.config.keyframeInterval === 0;
386
- }
387
- }
388
- //# sourceMappingURL=kysely-write-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kysely-write-cache.js","sourceRoot":"","sources":["../../../src/cache/kysely-write-cache.ts"],"names":[],"mappings":"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"}