@party-stack/ontology 0.20.0 → 0.21.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 (355) hide show
  1. package/README.md +31 -0
  2. package/lib/OntologyPullConfig.d.ts +4 -17
  3. package/lib/OntologyPullConfig.d.ts.map +1 -1
  4. package/lib/authentication.d.ts +1068 -0
  5. package/lib/authentication.d.ts.map +1 -0
  6. package/lib/authentication.js +55 -0
  7. package/lib/authentication.js.map +1 -0
  8. package/lib/cli/index.js +19 -45
  9. package/lib/cli/index.js.map +1 -1
  10. package/lib/cli/pull.d.ts.map +1 -1
  11. package/lib/cli/pull.js +16 -29
  12. package/lib/cli/pull.js.map +1 -1
  13. package/lib/client.d.ts +11 -0
  14. package/lib/client.d.ts.map +1 -0
  15. package/lib/client.js +21 -0
  16. package/lib/client.js.map +1 -0
  17. package/lib/examples/blog.d.ts +2 -387
  18. package/lib/examples/blog.js +1 -353
  19. package/lib/examples/blog.live-queries.d.ts +1 -1
  20. package/lib/examples/blog.live-queries.d.ts.map +1 -1
  21. package/lib/examples/blog.live-queries.js +1 -1
  22. package/lib/examples/blog.live-queries.js.map +1 -1
  23. package/lib/examples/generated/collections.d.ts +7 -0
  24. package/lib/examples/generated/collections.d.ts.map +1 -0
  25. package/lib/examples/generated/collections.js +12 -0
  26. package/lib/examples/generated/collections.js.map +1 -0
  27. package/lib/examples/generated/live.d.ts +2 -2
  28. package/lib/examples/generated/live.d.ts.map +1 -1
  29. package/lib/examples/generated/live.js.map +1 -1
  30. package/lib/http.d.ts +13 -0
  31. package/lib/http.d.ts.map +1 -0
  32. package/lib/http.js +29 -0
  33. package/lib/http.js.map +1 -0
  34. package/lib/index.d.ts +19 -25
  35. package/lib/index.js +9 -15
  36. package/lib/json/index.d.ts +1 -16
  37. package/lib/json/index.js +2 -132
  38. package/lib/live/LiveOntology.d.ts +114 -50
  39. package/lib/live/LiveOntology.d.ts.map +1 -1
  40. package/lib/live/LiveOntology.js +23 -103
  41. package/lib/live/LiveOntology.js.map +1 -1
  42. package/lib/live/actions/createLiveOntologyAction.d.ts +15 -16
  43. package/lib/live/actions/createLiveOntologyAction.d.ts.map +1 -1
  44. package/lib/live/actions/createLiveOntologyAction.js +3 -11
  45. package/lib/live/actions/createLiveOntologyAction.js.map +1 -1
  46. package/lib/live/actions/types.d.ts +21 -0
  47. package/lib/live/actions/types.d.ts.map +1 -0
  48. package/lib/live/attachments/createLiveOntologyAttachments.d.ts +29 -19
  49. package/lib/live/attachments/createLiveOntologyAttachments.d.ts.map +1 -1
  50. package/lib/live/attachments/createLiveOntologyAttachments.js +43 -60
  51. package/lib/live/attachments/createLiveOntologyAttachments.js.map +1 -1
  52. package/lib/live/attachments/types.d.ts +3 -3
  53. package/lib/live/index.d.ts +10 -10
  54. package/lib/live/index.js +5 -6
  55. package/lib/live/mutators/createReadTx.d.ts +5 -0
  56. package/lib/live/mutators/createReadTx.d.ts.map +1 -0
  57. package/lib/live/mutators/createReadTx.js +19 -0
  58. package/lib/live/mutators/createReadTx.js.map +1 -0
  59. package/lib/live/mutators/types.d.ts +7 -2
  60. package/lib/live/mutators/types.d.ts.map +1 -1
  61. package/lib/live/objects/types.d.ts +6 -0
  62. package/lib/live/objects/types.d.ts.map +1 -0
  63. package/lib/live/outbox/types.d.ts +24 -15
  64. package/lib/live/outbox/types.d.ts.map +1 -1
  65. package/lib/live/outbox/types.js +1 -11
  66. package/lib/live/pins.d.ts +51 -0
  67. package/lib/live/pins.d.ts.map +1 -0
  68. package/lib/live/pins.js +113 -0
  69. package/lib/live/pins.js.map +1 -0
  70. package/lib/live/storageBackend.d.ts +50 -0
  71. package/lib/live/storageBackend.d.ts.map +1 -0
  72. package/lib/live/storageBackend.js +42 -0
  73. package/lib/live/storageBackend.js.map +1 -0
  74. package/lib/local.d.ts +15 -0
  75. package/lib/local.d.ts.map +1 -0
  76. package/lib/local.js +19 -0
  77. package/lib/local.js.map +1 -0
  78. package/lib/meta/generated/collections.d.ts +7 -0
  79. package/lib/meta/generated/collections.d.ts.map +1 -0
  80. package/lib/meta/generated/collections.js +15 -0
  81. package/lib/meta/generated/collections.js.map +1 -0
  82. package/lib/meta/generated/live.d.ts +3 -3
  83. package/lib/meta/generated/live.d.ts.map +1 -1
  84. package/lib/meta/generated/live.js +2 -2
  85. package/lib/meta/generated/live.js.map +1 -1
  86. package/lib/meta/pull.d.ts +5 -9
  87. package/lib/meta/pull.d.ts.map +1 -1
  88. package/lib/meta/pull.js +5 -43
  89. package/lib/meta/pull.js.map +1 -1
  90. package/lib/query.d.ts +1 -0
  91. package/lib/query.js +2 -0
  92. package/lib/runtime/host.d.ts +35 -0
  93. package/lib/runtime/host.d.ts.map +1 -0
  94. package/lib/runtime/host.js +39 -0
  95. package/lib/runtime/host.js.map +1 -0
  96. package/lib/runtime/index.d.ts +2 -0
  97. package/lib/runtime/index.js +1 -0
  98. package/lib/runtime/live.d.ts +25 -0
  99. package/lib/runtime/live.d.ts.map +1 -0
  100. package/lib/runtime/live.js +31 -0
  101. package/lib/runtime/live.js.map +1 -0
  102. package/lib/runtime/resource.d.ts +24 -0
  103. package/lib/runtime/resource.d.ts.map +1 -0
  104. package/lib/runtime/resource.js +127 -0
  105. package/lib/runtime/resource.js.map +1 -0
  106. package/lib/runtime/transactions.d.ts +27 -0
  107. package/lib/runtime/transactions.d.ts.map +1 -0
  108. package/lib/runtime/transactions.js +188 -0
  109. package/lib/runtime/transactions.js.map +1 -0
  110. package/lib/runtime/view.d.ts +25 -0
  111. package/lib/runtime/view.d.ts.map +1 -0
  112. package/lib/runtime/view.js +256 -0
  113. package/lib/runtime/view.js.map +1 -0
  114. package/lib/tanstack/collections.d.ts +73 -0
  115. package/lib/tanstack/collections.d.ts.map +1 -0
  116. package/lib/tanstack/collections.js +495 -0
  117. package/lib/tanstack/collections.js.map +1 -0
  118. package/lib/tanstack/createLocalCollection.d.ts +14 -0
  119. package/lib/tanstack/createLocalCollection.d.ts.map +1 -0
  120. package/lib/tanstack/createLocalCollection.js +9 -0
  121. package/lib/tanstack/createLocalCollection.js.map +1 -0
  122. package/lib/tanstack/descriptors.d.ts +33 -0
  123. package/lib/tanstack/descriptors.d.ts.map +1 -0
  124. package/lib/tanstack/descriptors.js +38 -0
  125. package/lib/tanstack/descriptors.js.map +1 -0
  126. package/lib/tanstack/diagnostics.d.ts +23 -0
  127. package/lib/tanstack/diagnostics.d.ts.map +1 -0
  128. package/lib/tanstack/diagnostics.js +14 -0
  129. package/lib/tanstack/diagnostics.js.map +1 -0
  130. package/lib/tanstack/index.d.ts +6 -0
  131. package/lib/tanstack/index.js +6 -0
  132. package/lib/tanstack/localCollection.d.ts +14 -0
  133. package/lib/tanstack/localCollection.d.ts.map +1 -0
  134. package/lib/tanstack/localCollection.js +73 -0
  135. package/lib/tanstack/localCollection.js.map +1 -0
  136. package/lib/tanstack/subset.d.ts +28 -0
  137. package/lib/tanstack/subset.d.ts.map +1 -0
  138. package/lib/tanstack/subset.js +290 -0
  139. package/lib/tanstack/subset.js.map +1 -0
  140. package/lib/testing/sqlite.d.ts +40 -0
  141. package/lib/testing/sqlite.d.ts.map +1 -0
  142. package/lib/testing/sqlite.js +409 -0
  143. package/lib/testing/sqlite.js.map +1 -0
  144. package/lib/testing/sqliteBackend.d.ts +68 -0
  145. package/lib/testing/sqliteBackend.d.ts.map +1 -0
  146. package/lib/testing/sqliteBackend.js +34 -0
  147. package/lib/testing/sqliteBackend.js.map +1 -0
  148. package/lib/utils/index.d.ts +1 -8
  149. package/lib/utils/index.js +2 -5
  150. package/lib/utils/values.d.ts +1 -30
  151. package/lib/worker.d.ts +19 -0
  152. package/lib/worker.d.ts.map +1 -0
  153. package/lib/worker.js +46 -0
  154. package/lib/worker.js.map +1 -0
  155. package/package.json +53 -18
  156. package/lib/cli/format.d.ts +0 -4
  157. package/lib/cli/format.d.ts.map +0 -1
  158. package/lib/cli/format.js +0 -19
  159. package/lib/cli/format.js.map +0 -1
  160. package/lib/cli/generate.d.ts +0 -10
  161. package/lib/cli/generate.d.ts.map +0 -1
  162. package/lib/cli/generate.js +0 -108
  163. package/lib/cli/generate.js.map +0 -1
  164. package/lib/examples/blog.d.ts.map +0 -1
  165. package/lib/examples/blog.js.map +0 -1
  166. package/lib/generate/builders.d.ts +0 -12
  167. package/lib/generate/builders.d.ts.map +0 -1
  168. package/lib/generate/builders.js +0 -58
  169. package/lib/generate/builders.js.map +0 -1
  170. package/lib/generate/constants.d.ts +0 -5
  171. package/lib/generate/constants.d.ts.map +0 -1
  172. package/lib/generate/constants.js +0 -28
  173. package/lib/generate/constants.js.map +0 -1
  174. package/lib/generate/index.d.ts +0 -6
  175. package/lib/generate/index.js +0 -6
  176. package/lib/generate/live.d.ts +0 -12
  177. package/lib/generate/live.d.ts.map +0 -1
  178. package/lib/generate/live.js +0 -48
  179. package/lib/generate/live.js.map +0 -1
  180. package/lib/generate/ontology.d.ts +0 -8
  181. package/lib/generate/ontology.d.ts.map +0 -1
  182. package/lib/generate/ontology.js +0 -501
  183. package/lib/generate/ontology.js.map +0 -1
  184. package/lib/generate/types.d.ts +0 -18
  185. package/lib/generate/types.d.ts.map +0 -1
  186. package/lib/generate/types.js +0 -216
  187. package/lib/generate/types.js.map +0 -1
  188. package/lib/generate/utils/buildJsDocs.d.ts +0 -10
  189. package/lib/generate/utils/buildJsDocs.d.ts.map +0 -1
  190. package/lib/generate/utils/buildJsDocs.js +0 -16
  191. package/lib/generate/utils/buildJsDocs.js.map +0 -1
  192. package/lib/infer.d.ts +0 -223
  193. package/lib/infer.d.ts.map +0 -1
  194. package/lib/infer.js +0 -14
  195. package/lib/infer.js.map +0 -1
  196. package/lib/installation/createMetaOntologyConfiguration.d.ts +0 -10
  197. package/lib/installation/createMetaOntologyConfiguration.d.ts.map +0 -1
  198. package/lib/installation/createMetaOntologyConfiguration.js +0 -16
  199. package/lib/installation/createMetaOntologyConfiguration.js.map +0 -1
  200. package/lib/installation/createOntologyBackendInstallation.d.ts +0 -5
  201. package/lib/installation/createOntologyBackendInstallation.d.ts.map +0 -1
  202. package/lib/installation/createOntologyBackendInstallation.js +0 -221
  203. package/lib/installation/createOntologyBackendInstallation.js.map +0 -1
  204. package/lib/installation/index.d.ts +0 -4
  205. package/lib/installation/index.js +0 -3
  206. package/lib/installation/types.d.ts +0 -94
  207. package/lib/installation/types.d.ts.map +0 -1
  208. package/lib/ir/generated/builders.d.ts +0 -380
  209. package/lib/ir/generated/builders.d.ts.map +0 -1
  210. package/lib/ir/generated/builders.js +0 -186
  211. package/lib/ir/generated/builders.js.map +0 -1
  212. package/lib/ir/generated/constants.d.ts +0 -265
  213. package/lib/ir/generated/constants.d.ts.map +0 -1
  214. package/lib/ir/generated/constants.js +0 -165
  215. package/lib/ir/generated/constants.js.map +0 -1
  216. package/lib/ir/generated/types.d.ts +0 -413
  217. package/lib/ir/generated/types.d.ts.map +0 -1
  218. package/lib/ir/index.d.ts +0 -4
  219. package/lib/ir/index.js +0 -3
  220. package/lib/ir/schema.d.ts +0 -2246
  221. package/lib/ir/schema.d.ts.map +0 -1
  222. package/lib/ir/schema.js +0 -1187
  223. package/lib/ir/schema.js.map +0 -1
  224. package/lib/ir/validate.d.ts +0 -8
  225. package/lib/ir/validate.d.ts.map +0 -1
  226. package/lib/ir/validate.js +0 -623
  227. package/lib/ir/validate.js.map +0 -1
  228. package/lib/json/index.d.ts.map +0 -1
  229. package/lib/json/index.js.map +0 -1
  230. package/lib/lenses.d.ts +0 -21
  231. package/lib/lenses.d.ts.map +0 -1
  232. package/lib/lenses.js +0 -110
  233. package/lib/lenses.js.map +0 -1
  234. package/lib/live/OntologyBackendAdapter.d.ts +0 -104
  235. package/lib/live/OntologyBackendAdapter.d.ts.map +0 -1
  236. package/lib/live/OntologyBackendAdapter.js +0 -1
  237. package/lib/live/actions/createLiveOntologyActions.d.ts +0 -28
  238. package/lib/live/actions/createLiveOntologyActions.d.ts.map +0 -1
  239. package/lib/live/actions/createLiveOntologyActions.js +0 -139
  240. package/lib/live/actions/createLiveOntologyActions.js.map +0 -1
  241. package/lib/live/actions/prepareActionParameters.d.ts +0 -19
  242. package/lib/live/actions/prepareActionParameters.d.ts.map +0 -1
  243. package/lib/live/actions/prepareActionParameters.js +0 -213
  244. package/lib/live/actions/prepareActionParameters.js.map +0 -1
  245. package/lib/live/attachments/attachmentSources.d.ts +0 -10
  246. package/lib/live/attachments/attachmentSources.d.ts.map +0 -1
  247. package/lib/live/attachments/attachmentSources.js +0 -64
  248. package/lib/live/attachments/attachmentSources.js.map +0 -1
  249. package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.d.ts +0 -5
  250. package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.d.ts.map +0 -1
  251. package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.js +0 -6
  252. package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.js.map +0 -1
  253. package/lib/live/expression.d.ts +0 -24
  254. package/lib/live/expression.d.ts.map +0 -1
  255. package/lib/live/expression.js +0 -160
  256. package/lib/live/expression.js.map +0 -1
  257. package/lib/live/mutators/OntologyEdits.d.ts +0 -15
  258. package/lib/live/mutators/OntologyEdits.d.ts.map +0 -1
  259. package/lib/live/mutators/OntologyEdits.js +0 -65
  260. package/lib/live/mutators/OntologyEdits.js.map +0 -1
  261. package/lib/live/mutators/createMutatorTx.d.ts +0 -11
  262. package/lib/live/mutators/createMutatorTx.d.ts.map +0 -1
  263. package/lib/live/mutators/createMutatorTx.js +0 -61
  264. package/lib/live/mutators/createMutatorTx.js.map +0 -1
  265. package/lib/live/mutators/runOptimisticAction.d.ts +0 -19
  266. package/lib/live/mutators/runOptimisticAction.d.ts.map +0 -1
  267. package/lib/live/mutators/runOptimisticAction.js +0 -30
  268. package/lib/live/mutators/runOptimisticAction.js.map +0 -1
  269. package/lib/live/objects/OntologyObject.d.ts +0 -4
  270. package/lib/live/objects/OntologyObject.d.ts.map +0 -1
  271. package/lib/live/objects/OntologyObject.js +0 -1
  272. package/lib/live/objects/createLiveOntologyObjectCollection.d.ts +0 -17
  273. package/lib/live/objects/createLiveOntologyObjectCollection.d.ts.map +0 -1
  274. package/lib/live/objects/createLiveOntologyObjectCollection.js +0 -69
  275. package/lib/live/objects/createLiveOntologyObjectCollection.js.map +0 -1
  276. package/lib/live/objects/ontologyObjectCollectionId.d.ts +0 -4
  277. package/lib/live/objects/ontologyObjectCollectionId.d.ts.map +0 -1
  278. package/lib/live/objects/ontologyObjectCollectionId.js +0 -8
  279. package/lib/live/objects/ontologyObjectCollectionId.js.map +0 -1
  280. package/lib/live/outbox/createOntologyOutbox.d.ts +0 -23
  281. package/lib/live/outbox/createOntologyOutbox.d.ts.map +0 -1
  282. package/lib/live/outbox/createOntologyOutbox.js +0 -292
  283. package/lib/live/outbox/createOntologyOutbox.js.map +0 -1
  284. package/lib/live/outbox/leaderExecutor.d.ts +0 -20
  285. package/lib/live/outbox/leaderExecutor.d.ts.map +0 -1
  286. package/lib/live/outbox/leaderExecutor.js +0 -130
  287. package/lib/live/outbox/leaderExecutor.js.map +0 -1
  288. package/lib/live/outbox/outboxService.d.ts +0 -7
  289. package/lib/live/outbox/outboxService.d.ts.map +0 -1
  290. package/lib/live/outbox/outboxService.js +0 -68
  291. package/lib/live/outbox/outboxService.js.map +0 -1
  292. package/lib/live/outbox/projectionManager.d.ts +0 -31
  293. package/lib/live/outbox/projectionManager.d.ts.map +0 -1
  294. package/lib/live/outbox/projectionManager.js +0 -127
  295. package/lib/live/outbox/projectionManager.js.map +0 -1
  296. package/lib/live/outbox/repository.d.ts +0 -31
  297. package/lib/live/outbox/repository.d.ts.map +0 -1
  298. package/lib/live/outbox/repository.js +0 -196
  299. package/lib/live/outbox/repository.js.map +0 -1
  300. package/lib/live/outbox/service.d.ts +0 -61
  301. package/lib/live/outbox/service.d.ts.map +0 -1
  302. package/lib/live/outbox/service.js +0 -6
  303. package/lib/live/outbox/service.js.map +0 -1
  304. package/lib/live/outbox/types.js.map +0 -1
  305. package/lib/live/waitForCollectionReady.d.ts +0 -5
  306. package/lib/live/waitForCollectionReady.d.ts.map +0 -1
  307. package/lib/live/waitForCollectionReady.js +0 -49
  308. package/lib/live/waitForCollectionReady.js.map +0 -1
  309. package/lib/meta/createLocalMetaOntologyBackendAdapter.d.ts +0 -7
  310. package/lib/meta/createLocalMetaOntologyBackendAdapter.d.ts.map +0 -1
  311. package/lib/meta/createLocalMetaOntologyBackendAdapter.js +0 -44
  312. package/lib/meta/createLocalMetaOntologyBackendAdapter.js.map +0 -1
  313. package/lib/meta/generated/constants.d.ts +0 -265
  314. package/lib/meta/generated/constants.d.ts.map +0 -1
  315. package/lib/meta/generated/constants.js +0 -165
  316. package/lib/meta/generated/constants.js.map +0 -1
  317. package/lib/meta/generated/types.d.ts +0 -417
  318. package/lib/meta/generated/types.d.ts.map +0 -1
  319. package/lib/meta/generated/types.js +0 -1
  320. package/lib/meta/ontology.d.ts +0 -26
  321. package/lib/meta/ontology.d.ts.map +0 -1
  322. package/lib/meta/ontology.js +0 -111
  323. package/lib/meta/ontology.js.map +0 -1
  324. package/lib/utils/links.d.ts +0 -50
  325. package/lib/utils/links.d.ts.map +0 -1
  326. package/lib/utils/links.js +0 -13
  327. package/lib/utils/links.js.map +0 -1
  328. package/lib/utils/paths.d.ts +0 -6
  329. package/lib/utils/paths.d.ts.map +0 -1
  330. package/lib/utils/paths.js +0 -42
  331. package/lib/utils/paths.js.map +0 -1
  332. package/lib/utils/provide.d.ts +0 -4
  333. package/lib/utils/provide.d.ts.map +0 -1
  334. package/lib/utils/provide.js +0 -9
  335. package/lib/utils/provide.js.map +0 -1
  336. package/lib/utils/targets.d.ts +0 -37
  337. package/lib/utils/targets.d.ts.map +0 -1
  338. package/lib/utils/targets.js +0 -1
  339. package/lib/utils/typeNames.d.ts +0 -28
  340. package/lib/utils/typeNames.d.ts.map +0 -1
  341. package/lib/utils/typeNames.js +0 -1
  342. package/lib/utils/types.d.ts +0 -12
  343. package/lib/utils/types.d.ts.map +0 -1
  344. package/lib/utils/types.js +0 -48
  345. package/lib/utils/types.js.map +0 -1
  346. package/lib/utils/uncertain.d.ts +0 -11
  347. package/lib/utils/uncertain.d.ts.map +0 -1
  348. package/lib/utils/uncertain.js +0 -14
  349. package/lib/utils/uncertain.js.map +0 -1
  350. package/lib/utils/validation.d.ts +0 -7
  351. package/lib/utils/validation.d.ts.map +0 -1
  352. package/lib/utils/validation.js +0 -1
  353. package/lib/utils/values.d.ts.map +0 -1
  354. /package/lib/{installation → live/actions}/types.js +0 -0
  355. /package/lib/{ir/generated → live/objects}/types.js +0 -0
@@ -0,0 +1,256 @@
1
+ import { ontologyCollectionDependency, ontologyCollections } from "../tanstack/descriptors.js";
2
+ import { persistedCollectionOptions, replicatedCollectionOptions, scopedCollection } from "../tanstack/collections.js";
3
+ import "../tanstack/index.js";
4
+ import { createLiveOntologyAction } from "../live/actions/createLiveOntologyAction.js";
5
+ import { makeOntologyPins } from "../live/pins.js";
6
+ import { BackendError } from "@party-stack/ontology-backend";
7
+ import { Runtime } from "@party-stack/runtime";
8
+ import { Cause, Effect, Fiber, Schema, Scope, Stream } from "effect";
9
+ import { DbClient } from "@tanstack/db";
10
+ import { makeReplicaMonitor } from "@party-stack/ontology-replica";
11
+ import { compileEffectSchemas } from "@party-stack/ontology-spec/effect";
12
+ //#region src/runtime/view.ts
13
+ const toEntry = (entry, forwarding = false) => ({
14
+ id: entry.invocation.id,
15
+ sequence: entry.sequence,
16
+ request: {
17
+ actionTypeName: entry.invocation.name,
18
+ parameters: entry.invocation.parameters,
19
+ idempotencyKey: entry.invocation.id,
20
+ replay: entry.invocation.replay
21
+ },
22
+ visibility: entry.optimistic ? "optimistic" : "confirmed",
23
+ status: entry.state,
24
+ createdAt: entry.createdAt,
25
+ attempts: entry.attempts,
26
+ attemptStage: forwarding ? "forwarding" : "execution",
27
+ retryable: entry.failureRetryable ?? true,
28
+ retryRequiresAcknowledgement: entry.retryRequiresAcknowledgement,
29
+ nextAttemptAt: entry.nextAttemptAt ?? 0,
30
+ lastError: entry.failure ? new BackendError({
31
+ operation: "applyAction",
32
+ kind: entry.failure,
33
+ message: entry.failureMessage ?? "Action is blocked; resolve its cause and retry or discard it.",
34
+ retryable: entry.failureRetryable ?? false,
35
+ actionOutcome: entry.failureOutcome,
36
+ issues: entry.failureIssues
37
+ }) : void 0
38
+ });
39
+ const actionResult = (receipt) => ({
40
+ receipt,
41
+ attachmentIdMappings: receipt.attachmentIdMappings ? [...receipt.attachmentIdMappings] : void 0
42
+ });
43
+ /** Materialize a scoped UI view over an existing replica; engine ownership is independent. */
44
+ const makeReplicaOntologyView = Effect.fn("Ontology.view")(function* (options) {
45
+ const runtime = yield* Runtime;
46
+ const { ir, context, replica } = options;
47
+ const actionReturns = compileEffectSchemas(ir).actionReturnSchemas;
48
+ const visiblePending = replica.outbox.entries;
49
+ const replicaMonitor = yield* makeReplicaMonitor(replica.status.changes);
50
+ const outboxEntries = Effect.map(visiblePending, (entries) => entries.map((entry) => toEntry(entry, entry.forwarding)));
51
+ const owner = yield* Effect.scope;
52
+ const captured = yield* Effect.context();
53
+ const dbClient = yield* Effect.acquireRelease(Effect.sync(() => new DbClient({ [ontologyCollectionDependency]: (id, objectType, localOnly) => {
54
+ if (owner.state._tag === "Closed") throw new BackendError({
55
+ operation: "ontology.collection",
56
+ kind: "InvalidRequest",
57
+ retryable: false,
58
+ message: "Ontology view is closed."
59
+ });
60
+ const object = ir.objectTypes.find((object) => object.name === objectType);
61
+ if (!object) throw new BackendError({
62
+ operation: "ontology.collection",
63
+ kind: "InvalidRequest",
64
+ retryable: false,
65
+ message: `Unknown object type: ${objectType}.`
66
+ });
67
+ return Effect.runSyncWith(captured)(Scope.provide(replicatedCollectionOptions({
68
+ id,
69
+ replica,
70
+ objectType,
71
+ localOnly,
72
+ getKey: (row) => row[object.primaryKey]
73
+ }), owner));
74
+ } })), (client) => Effect.promise(() => client.cleanup()));
75
+ const pendingCollection = yield* scopedCollection(yield* persistedCollectionOptions({
76
+ id: `${runtime.namespace}:outbox`,
77
+ getKey: (entry) => entry.id,
78
+ changes: Stream.empty,
79
+ observe: () => replica.outbox.observe().pipe(Stream.map((entries) => ({
80
+ reset: true,
81
+ rows: entries.map((entry) => ({
82
+ key: entry.invocation.id,
83
+ value: toEntry(entry, entry.forwarding)
84
+ })),
85
+ removed: []
86
+ }))),
87
+ load: Effect.map(outboxEntries, (entries) => entries.map((entry) => ({
88
+ key: entry.id,
89
+ value: entry
90
+ })))
91
+ }), dbClient);
92
+ const run = (work, signal) => Effect.runPromiseWith(captured)(Effect.suspend(() => owner.state._tag === "Closed" ? Effect.interrupt : Effect.flatMap(Effect.forkIn(Scope.provide(work, owner), owner, { startImmediately: true }), (fiber) => Fiber.join(fiber).pipe(Effect.ensuring(Fiber.interrupt(fiber))))), { signal });
93
+ const wait = (id, until = "confirmed") => replica.outbox.wait(id, { until }).pipe(Effect.map((receipt) => receipt ? actionResult(receipt) : void 0));
94
+ const descriptors = ontologyCollections(Object.fromEntries(ir.objectTypes.map((type) => [type.name, type.primaryKey])));
95
+ const objectCollections = (localOnly) => {
96
+ const collections = {};
97
+ for (const object of ir.objectTypes) {
98
+ let collection;
99
+ Object.defineProperty(collections, object.name, {
100
+ enumerable: true,
101
+ get: () => {
102
+ if (collection) return collection;
103
+ if (owner.state._tag === "Closed") throw new BackendError({
104
+ operation: "ontology.collection",
105
+ kind: "InvalidRequest",
106
+ retryable: false,
107
+ message: "Ontology view is closed."
108
+ });
109
+ collection = dbClient.collection((localOnly ? descriptors.cachedObjects : descriptors.objects)[object.name]);
110
+ return collection;
111
+ }
112
+ });
113
+ }
114
+ return collections;
115
+ };
116
+ const objects = objectCollections(false);
117
+ const cachedObjects = objectCollections(true);
118
+ const enqueue = async (request, visibility) => {
119
+ const invocation = {
120
+ id: request.idempotencyKey ?? crypto.randomUUID(),
121
+ name: request.actionTypeName,
122
+ parameters: request.parameters,
123
+ replay: request.replay
124
+ };
125
+ const entry = await run(replica.outbox.enqueue(invocation, { optimistic: (visibility ?? options.writes?.defaultVisibility) === "optimistic" }));
126
+ const accepted = run(wait(entry.invocation.id, "accepted")).then(() => void 0);
127
+ accepted.catch(() => void 0);
128
+ const completed = run(wait(entry.invocation.id)).then((result) => {
129
+ if (!result) throw new BackendError({
130
+ operation: "applyAction",
131
+ kind: "ResultExpired",
132
+ message: "Action result is unavailable.",
133
+ retryable: false,
134
+ actionOutcome: "unknown"
135
+ });
136
+ return result;
137
+ });
138
+ completed.catch(() => void 0);
139
+ if (replica.upstreamKind === "speculative") await accepted;
140
+ return {
141
+ entry: toEntry(entry, replica.upstreamKind === "speculative"),
142
+ accepted,
143
+ completed
144
+ };
145
+ };
146
+ const outbox = {
147
+ collection: pendingCollection,
148
+ enqueue: async (request, settings) => {
149
+ const result = await enqueue(request, settings?.visibility);
150
+ return {
151
+ ...result,
152
+ completed: result.completed
153
+ };
154
+ },
155
+ remove: (id, settings) => run(replica.outbox.remove(id, settings)),
156
+ retry: (id, settings) => run(replica.outbox.retry(id, settings)),
157
+ wait: (id, settings) => run(wait(id, settings?.until), settings?.signal),
158
+ edit: async (id, update) => {
159
+ const entry = (await run(visiblePending)).find((entry) => entry.invocation.id === id);
160
+ if (!entry) throw new BackendError({
161
+ operation: "outbox.edit",
162
+ kind: "NotFound",
163
+ retryable: false,
164
+ message: "Outbox entry is unavailable."
165
+ });
166
+ const request = toEntry(entry).request;
167
+ update(request);
168
+ const invocation = {
169
+ id,
170
+ name: request.actionTypeName,
171
+ parameters: request.parameters,
172
+ replay: request.replay
173
+ };
174
+ await run(replica.outbox.edit(id, invocation));
175
+ }
176
+ };
177
+ const actions = Object.fromEntries(ir.actionTypes.map((action) => [action.name, createLiveOntologyAction({
178
+ action,
179
+ resolveParameters: (name, parameters) => run(replica.actions.resolveParameters(name, parameters)),
180
+ submit: async (request, settings) => {
181
+ const visibility = settings?.visibility ?? options.writes?.defaultVisibility ?? "confirmed";
182
+ const receipt = await run(replica.actions.apply({
183
+ id: request.idempotencyKey ?? crypto.randomUUID(),
184
+ name: request.actionTypeName,
185
+ parameters: request.parameters,
186
+ replay: request.replay
187
+ }, { optimistic: visibility === "optimistic" }));
188
+ const schema = actionReturns[action.name];
189
+ const result = schema ? await run(Schema.decodeUnknownEffect(Schema.toCodecJson(schema))(receipt.result).pipe(Effect.mapError((cause) => new BackendError({
190
+ operation: "applyAction.result",
191
+ kind: "InvalidResponse",
192
+ retryable: false,
193
+ message: "Committed action result does not match its definition.",
194
+ cause
195
+ })))) : void 0;
196
+ return {
197
+ ...actionResult(receipt),
198
+ result
199
+ };
200
+ },
201
+ validate: (name, parameters) => run(replica.actions.validate(name, parameters)),
202
+ validateDraft: (name, parameters, settings) => run(replica.actions.validate(name, parameters, { knownParameters: settings?.knownParameters ?? [] }))
203
+ })]));
204
+ const downloadPins = yield* makeOntologyPins({
205
+ backend: options.pinBackend ?? replica.demand.pins.backend,
206
+ dbClient
207
+ });
208
+ const clearFamily = downloadPins.clear;
209
+ return {
210
+ dbClient,
211
+ ir,
212
+ context,
213
+ objects,
214
+ cachedObjects,
215
+ actions,
216
+ outbox,
217
+ pins: Object.assign(downloadPins, {
218
+ get: () => run((options.pins ?? replica.demand).pinStatus),
219
+ set: (query, settings) => run((options.pins ?? replica.demand).setPin(query, settings)),
220
+ clear: (name) => name === void 0 ? run((options.pins ?? replica.demand).clearPin) : clearFamily(name),
221
+ subscribe: (listener, onError) => {
222
+ if (owner.state._tag === "Closed") throw new BackendError({
223
+ operation: "pins.subscribe",
224
+ kind: "InvalidRequest",
225
+ retryable: false,
226
+ message: "Ontology view is closed."
227
+ });
228
+ const watch = Stream.runForEach((options.pins ?? replica.demand).pinStatusChanges, (status) => Effect.sync(() => listener(status))).pipe(Effect.catchCause((cause) => Cause.hasInterruptsOnly(cause) ? Effect.void : Effect.sync(() => {
229
+ if (onError) onError(Cause.squash(cause));
230
+ else console.error("Pin subscription failed.", Cause.pretty(cause));
231
+ })));
232
+ const fiber = Effect.runSyncWith(captured)(Effect.forkIn(watch, owner));
233
+ return () => {
234
+ Effect.runFork(Fiber.interrupt(fiber));
235
+ };
236
+ }
237
+ }),
238
+ attachments: options.attachments,
239
+ decrypt: async (value, settings) => (await run(replica.decrypt(value, settings), settings?.signal)).value,
240
+ queryFunctions: Object.fromEntries(ir.queryFunctionTypes.map((query) => [query.name, (parameters) => run(replica.queryFunction(query.name, parameters))])),
241
+ traces: options.traces,
242
+ diagnostics: {
243
+ label: options.diagnosticLabel,
244
+ role: replica.upstreamKind === "committed" ? "host" : "replica",
245
+ location: "In process",
246
+ replica: replicaMonitor,
247
+ traces: options.traces,
248
+ parent: options.parentDiagnostics
249
+ },
250
+ replica
251
+ };
252
+ });
253
+ //#endregion
254
+ export { makeReplicaOntologyView };
255
+
256
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","names":[],"sources":["../../src/runtime/view.ts"],"sourcesContent":["import { BackendError } from \"@party-stack/ontology-backend\";\nimport { makeReplicaMonitor } from \"@party-stack/ontology-replica\";\nimport { compileEffectSchemas } from \"@party-stack/ontology-spec/effect\";\nimport { Runtime } from \"@party-stack/runtime\";\nimport { DbClient } from \"@tanstack/db\";\nimport { Schema } from \"effect\";\nimport { Effect, Scope, Fiber, Stream, Cause } from \"effect\";\nimport { createLiveOntologyAction } from \"../live/actions/createLiveOntologyAction.js\";\nimport { makeOntologyPins } from \"../live/pins.js\";\nimport { ontologyCollections, ontologyCollectionDependency } from \"../tanstack/descriptors.js\";\nimport {\n replicatedCollectionOptions,\n persistedCollectionOptions,\n scopedCollection,\n} from \"../tanstack/index.js\";\nimport type { OntologyApplyActionResult } from \"../live/actions/types.js\";\nimport type { LiveOntologyAttachments } from \"../live/attachments/createLiveOntologyAttachments.js\";\nimport type { LiveOntology, LiveOntologyWrites } from \"../live/LiveOntology.js\";\nimport type { OntologyOutbox, OntologyOutboxEntry, OntologyActionRequest } from \"../live/outbox/types.js\";\nimport type { ActionRequest, ActionReceipt } from \"@party-stack/ontology-backend\";\nimport type { PendingAction, ReplicaService, ReplicaPinControls } from \"@party-stack/ontology-replica\";\nimport type { OntologyIR, OntologyObject } from \"@party-stack/ontology-spec\";\nimport type { TraceStore } from \"@party-stack/runtime/tracing\";\nimport type { Collection } from \"@tanstack/db\";\nconst toEntry = (entry: PendingAction, forwarding = false): OntologyOutboxEntry => ({\n id: entry.invocation.id,\n sequence: entry.sequence,\n request: {\n actionTypeName: entry.invocation.name,\n parameters: entry.invocation.parameters,\n idempotencyKey: entry.invocation.id,\n replay: entry.invocation.replay,\n },\n visibility: entry.optimistic ? \"optimistic\" : \"confirmed\",\n status: entry.state,\n createdAt: entry.createdAt,\n attempts: entry.attempts,\n attemptStage: forwarding ? \"forwarding\" : \"execution\",\n retryable: entry.failureRetryable ?? true,\n retryRequiresAcknowledgement: entry.retryRequiresAcknowledgement,\n nextAttemptAt: entry.nextAttemptAt ?? 0,\n lastError: entry.failure\n ? new BackendError({\n operation: \"applyAction\",\n kind: entry.failure,\n message:\n entry.failureMessage ?? \"Action is blocked; resolve its cause and retry or discard it.\",\n retryable: entry.failureRetryable ?? false,\n actionOutcome: entry.failureOutcome,\n issues: entry.failureIssues,\n })\n : undefined,\n});\nconst actionResult = (receipt: ActionReceipt): OntologyApplyActionResult => ({\n receipt,\n attachmentIdMappings: receipt.attachmentIdMappings ? [...receipt.attachmentIdMappings] : undefined,\n});\n\nexport interface ReplicaViewOptions {\n readonly ir: OntologyIR;\n readonly context: Record<string, unknown>;\n readonly writes?: LiveOntologyWrites;\n readonly replica: ReplicaService;\n readonly attachments: LiveOntologyAttachments;\n readonly pins?: ReplicaPinControls;\n readonly pinBackend?: Effect.Effect<\n import(\"@party-stack/ontology-backend\").OntologyBackendService,\n BackendError,\n Scope.Scope\n >;\n readonly traces?: TraceStore;\n readonly parentDiagnostics?: LiveOntology[\"diagnostics\"];\n readonly diagnosticLabel?: string;\n}\n\n/** Materialize a scoped UI view over an existing replica; engine ownership is independent. */\nexport const makeReplicaOntologyView = Effect.fn(\"Ontology.view\")(function* (\n options: ReplicaViewOptions\n): Effect.fn.Return<Omit<LiveOntology, \"cleanup\">, BackendError, Runtime | Scope.Scope> {\n const services = yield* Runtime;\n const runtime = services;\n const { ir, context, replica } = options;\n const schemas = compileEffectSchemas(ir);\n const actionReturns = schemas.actionReturnSchemas;\n const visiblePending = replica.outbox.entries;\n const replicaMonitor = yield* makeReplicaMonitor(replica.status.changes);\n const outboxEntries = Effect.map(visiblePending, (entries) =>\n entries.map((entry) => toEntry(entry, entry.forwarding))\n );\n const owner = yield* Effect.scope;\n const captured = yield* Effect.context<Runtime>();\n const dbClient = yield* Effect.acquireRelease(\n Effect.sync(\n () =>\n new DbClient({\n [ontologyCollectionDependency]: (id: string, objectType: string, localOnly: boolean) => {\n if (owner.state._tag === \"Closed\")\n throw new BackendError({\n operation: \"ontology.collection\",\n kind: \"InvalidRequest\",\n retryable: false,\n message: \"Ontology view is closed.\",\n });\n const object = ir.objectTypes.find((object) => object.name === objectType);\n if (!object)\n throw new BackendError({\n operation: \"ontology.collection\",\n kind: \"InvalidRequest\",\n retryable: false,\n message: `Unknown object type: ${objectType}.`,\n });\n return Effect.runSyncWith(captured)(\n Scope.provide(\n replicatedCollectionOptions({\n id,\n replica,\n objectType,\n localOnly,\n getKey: (row: OntologyObject) =>\n row[object.primaryKey] as string | number,\n }),\n owner\n )\n );\n },\n })\n ),\n (client) => Effect.promise(() => client.cleanup())\n );\n const pendingCollection = yield* scopedCollection(\n yield* persistedCollectionOptions<OntologyOutboxEntry, string>({\n id: `${runtime.namespace}:outbox`,\n getKey: (entry) => entry.id,\n changes: Stream.empty,\n observe: () =>\n replica.outbox.observe().pipe(\n Stream.map((entries) => ({\n reset: true,\n rows: entries.map((entry) => ({\n key: entry.invocation.id,\n value: toEntry(entry, entry.forwarding),\n })),\n removed: [],\n }))\n ),\n load: Effect.map(outboxEntries, (entries) =>\n entries.map((entry) => ({ key: entry.id, value: entry }))\n ),\n }),\n dbClient\n );\n const run = <A, E>(work: Effect.Effect<A, E, Scope.Scope>, signal?: AbortSignal) =>\n Effect.runPromiseWith(captured)(\n Effect.suspend(() =>\n owner.state._tag === \"Closed\"\n ? Effect.interrupt\n : Effect.flatMap(\n Effect.forkIn(Scope.provide(work, owner), owner, { startImmediately: true }),\n (fiber) => Fiber.join(fiber).pipe(Effect.ensuring(Fiber.interrupt(fiber)))\n )\n ),\n { signal }\n );\n const wait = (id: string, until: \"accepted\" | \"confirmed\" = \"confirmed\") =>\n replica.outbox\n .wait(id, { until })\n .pipe(Effect.map((receipt) => (receipt ? actionResult(receipt) : undefined)));\n const descriptors = ontologyCollections(\n Object.fromEntries(ir.objectTypes.map((type) => [type.name, type.primaryKey]))\n );\n const objectCollections = (localOnly: boolean) => {\n const collections: Record<string, Collection<OntologyObject>> = {};\n for (const object of ir.objectTypes) {\n let collection: Collection<OntologyObject> | undefined;\n Object.defineProperty(collections, object.name, {\n enumerable: true,\n get: () => {\n if (collection) return collection;\n if (owner.state._tag === \"Closed\")\n throw new BackendError({\n operation: \"ontology.collection\",\n kind: \"InvalidRequest\",\n retryable: false,\n message: \"Ontology view is closed.\",\n });\n // Descriptors and SDK getters share the same client-owned instance.\n collection = dbClient.collection(\n (localOnly ? descriptors.cachedObjects : descriptors.objects)[object.name]!\n );\n return collection;\n },\n });\n }\n return collections;\n };\n const objects = objectCollections(false);\n const cachedObjects = objectCollections(true);\n const enqueue = async (\n request: Omit<OntologyActionRequest, \"idempotencyKey\"> & { idempotencyKey?: string },\n visibility?: \"confirmed\" | \"optimistic\"\n ) => {\n const invocation: ActionRequest = {\n id: request.idempotencyKey ?? crypto.randomUUID(),\n name: request.actionTypeName,\n parameters: request.parameters,\n replay: request.replay,\n };\n const entry = await run(\n replica.outbox.enqueue(invocation, {\n optimistic: (visibility ?? options.writes?.defaultVisibility) === \"optimistic\",\n })\n );\n const accepted = run(wait(entry.invocation.id, \"accepted\")).then(() => undefined);\n void accepted.catch(() => undefined);\n const completed = run(wait(entry.invocation.id)).then((result) => {\n if (!result)\n throw new BackendError({\n operation: \"applyAction\",\n kind: \"ResultExpired\",\n message: \"Action result is unavailable.\",\n retryable: false,\n actionOutcome: \"unknown\",\n });\n return result;\n });\n void completed.catch(() => undefined);\n if (replica.upstreamKind === \"speculative\") await accepted;\n return { entry: toEntry(entry, replica.upstreamKind === \"speculative\"), accepted, completed };\n };\n const outbox: OntologyOutbox = {\n collection: pendingCollection,\n enqueue: async <A>(\n request: Omit<OntologyActionRequest, \"idempotencyKey\"> & { idempotencyKey?: string },\n settings?: { visibility?: \"confirmed\" | \"optimistic\" }\n ) => {\n const result = await enqueue(request, settings?.visibility);\n return { ...result, completed: result.completed as Promise<A> };\n },\n remove: (id, settings) => run(replica.outbox.remove(id, settings)),\n retry: (id, settings) => run(replica.outbox.retry(id, settings)),\n wait: <A>(id: string, settings?: { until?: \"accepted\" | \"confirmed\"; signal?: AbortSignal }) =>\n run(wait(id, settings?.until), settings?.signal) as Promise<A | void>,\n edit: async (id, update) => {\n const entry = (await run(visiblePending)).find((entry) => entry.invocation.id === id);\n if (!entry)\n throw new BackendError({\n operation: \"outbox.edit\",\n kind: \"NotFound\",\n retryable: false,\n message: \"Outbox entry is unavailable.\",\n });\n const request = toEntry(entry).request;\n update(request);\n const invocation = {\n id,\n name: request.actionTypeName,\n parameters: request.parameters,\n replay: request.replay,\n };\n await run(replica.outbox.edit(id, invocation));\n },\n };\n const actions = Object.fromEntries(\n ir.actionTypes.map((action) => [\n action.name,\n createLiveOntologyAction({\n action,\n resolveParameters: (name, parameters) =>\n run(replica.actions.resolveParameters(name, parameters)),\n submit: async (request, settings) => {\n const visibility =\n settings?.visibility ?? options.writes?.defaultVisibility ?? \"confirmed\";\n const receipt = await run(\n replica.actions.apply(\n {\n id: request.idempotencyKey ?? crypto.randomUUID(),\n name: request.actionTypeName,\n parameters: request.parameters,\n replay: request.replay,\n },\n { optimistic: visibility === \"optimistic\" }\n )\n );\n const schema = actionReturns[action.name];\n const result = schema\n ? await run(\n Schema.decodeUnknownEffect(Schema.toCodecJson(schema))(receipt.result).pipe(\n Effect.mapError(\n (cause) =>\n new BackendError({\n operation: \"applyAction.result\",\n kind: \"InvalidResponse\",\n retryable: false,\n message:\n \"Committed action result does not match its definition.\",\n cause,\n })\n )\n )\n )\n : undefined;\n return { ...actionResult(receipt), result };\n },\n validate: (name, parameters) => run(replica.actions.validate(name, parameters)),\n validateDraft: (name, parameters, settings) =>\n run(\n replica.actions.validate(name, parameters, {\n knownParameters: settings?.knownParameters ?? [],\n })\n ),\n }),\n ])\n );\n const downloadPins = yield* makeOntologyPins({\n backend: options.pinBackend ?? replica.demand.pins.backend,\n dbClient,\n });\n const clearFamily = downloadPins.clear;\n return {\n dbClient,\n ir,\n context,\n objects,\n cachedObjects,\n actions,\n outbox,\n pins: Object.assign(downloadPins, {\n get: () => run((options.pins ?? replica.demand).pinStatus),\n set: (\n query: import(\"@party-stack/ontology-spec\").QueryDocument,\n settings?: import(\"@party-stack/ontology-replica\").PinOptions\n ) => run((options.pins ?? replica.demand).setPin(query, settings)),\n clear: (name?: string) =>\n name === undefined ? run((options.pins ?? replica.demand).clearPin) : clearFamily(name),\n subscribe: (\n listener: (status: import(\"@party-stack/ontology-replica\").PinStatus | undefined) => void,\n onError?: (error: unknown) => void\n ) => {\n if (owner.state._tag === \"Closed\")\n throw new BackendError({\n operation: \"pins.subscribe\",\n kind: \"InvalidRequest\",\n retryable: false,\n message: \"Ontology view is closed.\",\n });\n const watch = Stream.runForEach((options.pins ?? replica.demand).pinStatusChanges, (status) =>\n Effect.sync(() => listener(status))\n ).pipe(\n Effect.catchCause((cause) =>\n Cause.hasInterruptsOnly(cause)\n ? Effect.void\n : Effect.sync(() => {\n if (onError) onError(Cause.squash(cause));\n else console.error(\"Pin subscription failed.\", Cause.pretty(cause));\n })\n )\n );\n const fiber = Effect.runSyncWith(captured)(Effect.forkIn(watch, owner));\n return () => {\n Effect.runFork(Fiber.interrupt(fiber));\n };\n },\n }),\n attachments: options.attachments,\n decrypt: async (value, settings) =>\n (await run(replica.decrypt(value, settings), settings?.signal)).value as never,\n queryFunctions: Object.fromEntries(\n ir.queryFunctionTypes.map((query) => [\n query.name,\n (parameters: Record<string, unknown>) => run(replica.queryFunction(query.name, parameters)),\n ])\n ),\n traces: options.traces,\n diagnostics: {\n label: options.diagnosticLabel,\n role: replica.upstreamKind === \"committed\" ? \"host\" : \"replica\",\n location: \"In process\",\n replica: replicaMonitor,\n traces: options.traces,\n parent: options.parentDiagnostics,\n },\n replica,\n };\n});\n"],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { CollectionDemandDiagnostic } from "./diagnostics.js";
2
+ import { Runtime } from "@party-stack/runtime";
3
+ import { Effect, Scope, Stream } from "effect";
4
+ import { CollectionConfig, DbClient, LoadSubsetOptions } from "@tanstack/db";
5
+ import { Key } from "@party-stack/ontology-storage";
6
+ import { ReplicaService } from "@party-stack/ontology-replica";
7
+ //#region src/tanstack/collections.d.ts
8
+ interface Change<A> {
9
+ readonly key: Key;
10
+ readonly type: "insert" | "update" | "delete";
11
+ readonly modified: A;
12
+ }
13
+ interface PersistedCollectionOptions<A extends object, K extends Key> {
14
+ readonly id: string;
15
+ readonly getKey: (value: A) => K;
16
+ readonly primaryKey?: string;
17
+ readonly load: Effect.Effect<readonly {
18
+ key: Key;
19
+ value: A;
20
+ }[], unknown> | ((subset: LoadSubsetOptions) => Effect.Effect<readonly {
21
+ key: Key;
22
+ value: A;
23
+ }[], unknown>);
24
+ readonly changes: Stream.Stream<void>;
25
+ readonly observe?: (subset: LoadSubsetOptions) => Stream.Stream<{
26
+ readonly reset: boolean;
27
+ readonly rows: readonly {
28
+ key: Key;
29
+ value: A;
30
+ }[];
31
+ readonly removed: readonly Key[];
32
+ }, unknown>;
33
+ readonly persist?: (mutations: readonly Change<A>[]) => Effect.Effect<void, unknown>;
34
+ readonly acquireDemand?: Effect.Effect<void, unknown, Scope.Scope> | ((subset: LoadSubsetOptions) => Effect.Effect<void, unknown, Scope.Scope>);
35
+ readonly describeSubset?: (subset: LoadSubsetOptions) => Omit<CollectionDemandDiagnostic, "subscription">;
36
+ /** Compare the regions actually acquired by this source, after residual
37
+ * filters/order have widened them. No inference from cached row contents.
38
+ */
39
+ readonly covers?: (requested: LoadSubsetOptions, held: LoadSubsetOptions) => boolean;
40
+ readonly supportsOrderedWindow?: (subset: LoadSubsetOptions) => boolean;
41
+ }
42
+ /** Options creators are Effects: their callback fibers and subscriptions belong to the caller's scope. */
43
+ export declare const persistedCollectionOptions: <A extends object, K extends Key>(options: PersistedCollectionOptions<A, K>) => Effect.Effect<CollectionConfig<A, K, never, import("@tanstack/db").UtilsRecord>, never, Scope.Scope>;
44
+ export declare const localCollectionOptions: <A extends object, K extends Key>(options: {
45
+ readonly name: string;
46
+ readonly getKey: (value: A) => K;
47
+ readonly schemaVersion?: number;
48
+ }) => Effect.Effect<CollectionConfig<A, K, never, import("@tanstack/db").UtilsRecord>, never, Runtime | Scope.Scope>;
49
+ export declare const replicatedCollectionOptions: <A extends object>(options: {
50
+ readonly replica: ReplicaService;
51
+ readonly objectType: string;
52
+ readonly getKey: (value: A) => Key;
53
+ readonly id: string;
54
+ /** Observe and retain local cache only; never acquire upstream demand. */
55
+ readonly localOnly?: boolean;
56
+ }) => Effect.Effect<CollectionConfig<A, Key, never, import("@tanstack/db").UtilsRecord>, never, Scope.Scope>;
57
+ export declare const scopedCollection: <A extends object, K extends Key>(options: CollectionConfig<A, K>, client?: DbClient) => Effect.Effect<import("@tanstack/db").Collection<A, K, import("@tanstack/db").UtilsRecord, never, A> & import("@tanstack/db").NonSingleResult, never, Scope.Scope>;
58
+ export declare const makeLocalCollection: <A extends object, K extends Key>(options: {
59
+ readonly name: string;
60
+ readonly getKey: (value: A) => K;
61
+ readonly schemaVersion?: number;
62
+ }) => Effect.Effect<import("@tanstack/db").Collection<A, K, import("@tanstack/db").UtilsRecord, never, A> & import("@tanstack/db").NonSingleResult, never, Runtime | Scope.Scope>;
63
+ export declare const makeReplicatedCollection: <A extends object>(options: {
64
+ readonly replica: ReplicaService;
65
+ readonly objectType: string;
66
+ readonly getKey: (value: A) => Key;
67
+ readonly id: string;
68
+ /** Observe and retain local cache only; never acquire upstream demand. */
69
+ readonly localOnly?: boolean;
70
+ }, client?: DbClient | undefined) => Effect.Effect<import("@tanstack/db").Collection<A, Key, import("@tanstack/db").UtilsRecord, never, A> & import("@tanstack/db").NonSingleResult, never, Scope.Scope>;
71
+ //#endregion
72
+ export {};
73
+ //# sourceMappingURL=collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.d.ts","names":[],"sources":["../../src/tanstack/collections.ts"],"mappings":";;;;;;;UAaU,OAAO;WACJ,KAAK;WACL;WACA,UAAU;;UAmCb,2BAA2B,kBAAkB,UAAU;WACpD;WACA,SAAS,OAAO,MAAM;WACtB;WACA,MACH,OAAO;IAAkB,KAAK;IAAK,OAAO;oBACxC,QAAQ,sBAAsB,OAAO;IAAkB,KAAK;IAAK,OAAO;;WACvE,SAAS,OAAO;WAChB,WAAW,QAAQ,sBAAsB,OAAO;aAExC;aACA;MAAiB,KAAK;MAAK,OAAO;;aAClC,kBAAkB;;WAI1B,WAAW,oBAAoB,OAAO,SAAS,OAAO;WACtD,gBACH,OAAO,sBAAsB,MAAM,WACjC,QAAQ,sBAAsB,OAAO,sBAAsB,MAAM;WAChE,kBAAkB,QAAQ,sBAAsB,KAAK;;;;WAIrD,UAAU,WAAW,mBAAmB,MAAM;WAC9C,yBAAyB,QAAQ;;;qBAGjC,6BAA8B,kBAAkB,UAAU,KAAG,SAC7D,2BAA2B,GAAG,OAAE,OAAA,OAAA,iBAAA,GAAA,iCAAA,qBAAA,MAAA;qBA6lBhC,yBAAsD,kBAAkB,UAAU,KAAG;WAC/E;WACE,SAAC,OAAO,MAAM;WACN;MA0B3B,OAAA,OAAA,iBAAA,GAAA,iCAAA,qBAAA,UAAA,MAAA;qBACW,8BAA2D,kBAAgB;WAClE,SAAA;WACG;WACJ,SAAC,OAAO,MAAM;WAClB;;WAEQ;MAyEvB,OAAA,OAAA,iBAAA,GAAA,mCAAA,qBAAA,MAAA;qBACW,mBAAoB,kBAAkB,UAAU,KAAG,SACnD,iBAAiB,GAAG,IAAE,SACtB,aAAQ,OAAA,8BAAA,WAAA,GAAA,0BAAA,oBAAA,4BAAA,wBAAA,MAAA;qBAWR,sBACT,kBACA,UAAU,KAAG;WA5HE;;WAEU;MA6H3B,OAAA,8BAAA,WAAA,GAAA,0BAAA,oBAAA,4BAAA,wBAAA,UAAA,MAAA;qBACW,2BACT,kBAAgB;WAnGE,SAAA;WACG;WACU,SAAA,OAAA,MAAA;WAClB;;WAEQ;GAiGvB,SAAA,yBAAA,OAAA,8BAAA,WAAA,GAAA,4BAAA,oBAAA,4BAAA,wBAAA,MAAA"}