@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,113 @@
1
+ import { ontologySubset } from "../tanstack/subset.js";
2
+ import { persistedCollectionOptions, scopedCollection } from "../tanstack/collections.js";
3
+ import { BackendError } from "@party-stack/ontology-backend";
4
+ import { Runtime } from "@party-stack/runtime";
5
+ import { Effect, Fiber, Schema, Scope, Stream } from "effect";
6
+ import { BasicIndex, and, createLiveQueryCollection, eq } from "@tanstack/db";
7
+ import { makeReplica, pinDefinitionKey, pinMutators, pinOntology, pinRecordKey } from "@party-stack/ontology-replica";
8
+ import { QueryDocumentSchema } from "@party-stack/ontology-spec/effect";
9
+ //#region src/live/pins.ts
10
+ /** Pure metadata; binding it does not request or replace a download. */
11
+ function definePin(name, options) {
12
+ return {
13
+ name: Schema.decodeUnknownSync(Schema.NonEmptyString)(name),
14
+ query: Schema.decodeUnknownSync(QueryDocumentSchema)(options.query),
15
+ attachments: options.attachments ?? "none"
16
+ };
17
+ }
18
+ const makeOntologyPins = Effect.fnUntraced(function* (options) {
19
+ const runtime = yield* Runtime;
20
+ const owner = yield* Effect.scope;
21
+ const captured = yield* Effect.context();
22
+ const control = yield* Effect.cached(Scope.provide(Effect.gen(function* () {
23
+ const backend = yield* options.backend;
24
+ return yield* makeReplica({
25
+ id: JSON.stringify([runtime.namespace, "pin-view"]),
26
+ ir: pinOntology,
27
+ backend,
28
+ context: {},
29
+ mutators: pinMutators
30
+ });
31
+ }).pipe(Effect.provideService(Runtime, runtime)), owner));
32
+ const collection = yield* scopedCollection(yield* persistedCollectionOptions({
33
+ id: JSON.stringify([runtime.namespace, "pins"]),
34
+ getKey: (row) => row.id,
35
+ primaryKey: "id",
36
+ changes: Stream.empty,
37
+ load: (subset) => Effect.flatMap(control, (replica) => replica.readSubset(ontologySubset(subset, pinOntology, "Pin"))).pipe(Effect.map((rows) => rows.map((row) => ({
38
+ key: row.key,
39
+ value: row.value
40
+ })))),
41
+ observe: (subset) => Stream.unwrap(Effect.map(control, (replica) => replica.observeSubset(ontologySubset(subset, pinOntology, "Pin")))).pipe(Stream.map((batch) => ({
42
+ ...batch,
43
+ rows: batch.rows.map((row) => ({
44
+ key: row.key,
45
+ value: row.value
46
+ }))
47
+ }))),
48
+ acquireDemand: (subset) => Effect.flatMap(control, (replica) => replica.demand.acquire(ontologySubset(subset, pinOntology, "Pin")))
49
+ }), options.dbClient);
50
+ const update = (change) => Effect.runPromiseWith(captured)(Effect.suspend(() => owner.state._tag === "Closed" ? Effect.fail(new BackendError({
51
+ operation: "pins",
52
+ kind: "Unavailable",
53
+ retryable: false,
54
+ message: "Ontology view is closed."
55
+ })) : Effect.flatMap(Effect.forkIn(control.pipe(Effect.flatMap((replica) => replica.actions.apply({
56
+ id: crypto.randomUUID(),
57
+ name: "updatePins",
58
+ parameters: { change }
59
+ })), Effect.asVoid), owner, { startImmediately: true }), Fiber.join)));
60
+ const families = /* @__PURE__ */ new Map();
61
+ yield* Effect.addFinalizer(() => Effect.promise(async () => {
62
+ for (const family of families.values()) await family.collection.cleanup({ dependents: true });
63
+ families.clear();
64
+ }));
65
+ const bind = (descriptor) => {
66
+ const definition = pinDefinitionKey(descriptor);
67
+ const key = JSON.stringify([descriptor.name, definition]);
68
+ const previous = families.get(key);
69
+ if (previous) return previous;
70
+ const write = (inputs) => ({
71
+ ...descriptor,
72
+ inputs: inputs ?? {}
73
+ });
74
+ const family = {
75
+ collection: createLiveQueryCollection({
76
+ id: `${collection.id}:${key}`,
77
+ autoIndex: "eager",
78
+ defaultIndexType: BasicIndex,
79
+ query: (q) => q.from({ pin: collection }).where(({ pin }) => and(eq(pin.name, descriptor.name), eq(pin.definition, definition))).select(({ pin }) => ({
80
+ id: pin.id,
81
+ name: pin.name,
82
+ definition: pin.definition,
83
+ query: pin.query,
84
+ inputs: pin.inputs,
85
+ attachments: pin.attachments,
86
+ generation: pin.generation,
87
+ ready: pin.ready,
88
+ error: pin.error
89
+ })),
90
+ getKey: (pin) => pin.id
91
+ }),
92
+ id: (inputs) => pinRecordKey(write(inputs)),
93
+ set: (inputs) => update({ set: [write(inputs)] }),
94
+ remove: (inputs) => update({ remove: [pinRecordKey(write(inputs))] }),
95
+ update: (change) => update({
96
+ set: change.set?.map(write),
97
+ remove: change.remove?.map((input) => pinRecordKey(write(input)))
98
+ }),
99
+ clear: () => update({ clearName: descriptor.name })
100
+ };
101
+ families.set(key, family);
102
+ return family;
103
+ };
104
+ return Object.assign(bind, {
105
+ collection,
106
+ remove: (id) => update({ remove: [id] }),
107
+ clear: (name) => update({ clearName: name })
108
+ });
109
+ });
110
+ //#endregion
111
+ export { definePin, makeOntologyPins };
112
+
113
+ //# sourceMappingURL=pins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pins.js","names":[],"sources":["../../src/live/pins.ts"],"sourcesContent":["import { BackendError } from \"@party-stack/ontology-backend\";\nimport {\n makeReplica,\n pinOntology,\n pinMutators,\n pinRecordKey,\n pinDefinitionKey,\n type PinRecord,\n type PinWrite,\n} from \"@party-stack/ontology-replica\";\nimport { QueryDocumentSchema } from \"@party-stack/ontology-spec/effect\";\nimport { Runtime } from \"@party-stack/runtime\";\nimport { BasicIndex, createLiveQueryCollection, eq, and, type Collection } from \"@tanstack/db\";\nimport { Effect, Fiber, Scope, Stream, Schema } from \"effect\";\nimport { persistedCollectionOptions, scopedCollection } from \"../tanstack/collections.js\";\nimport { ontologySubset } from \"../tanstack/subset.js\";\nimport type { OntologyBackendService } from \"@party-stack/ontology-backend\";\nimport type { QueryDocument } from \"@party-stack/ontology-spec\";\nimport type { DbClient } from \"@tanstack/db\";\n\nexport type PinInputs = Readonly<Record<string, unknown>>;\nexport type NoPinInputs = Record<string, never>;\ndeclare const pinInputType: unique symbol;\nexport interface PinDescriptor<Inputs extends PinInputs = NoPinInputs> {\n readonly name: string;\n readonly query: QueryDocument;\n readonly attachments: \"none\" | \"all\";\n readonly [pinInputType]?: Inputs;\n}\n/** Pure metadata; binding it does not request or replace a download. */\nexport function definePin<Inputs extends PinInputs = NoPinInputs>(\n name: string,\n options: { readonly query: QueryDocument; readonly attachments?: \"none\" | \"all\" }\n): PinDescriptor<Inputs> {\n return {\n name: Schema.decodeUnknownSync(Schema.NonEmptyString)(name),\n query: Schema.decodeUnknownSync(QueryDocumentSchema)(options.query),\n attachments: options.attachments ?? \"none\",\n };\n}\nexport type PinInputArgs<Inputs extends PinInputs> = {} extends Inputs ? [inputs?: Inputs] : [inputs: Inputs];\nexport interface BoundPins<Inputs extends PinInputs> {\n readonly collection: Collection<PinRecord<Inputs>>;\n readonly id: (...args: PinInputArgs<Inputs>) => string;\n readonly set: (...args: PinInputArgs<Inputs>) => Promise<void>;\n readonly remove: (...args: PinInputArgs<Inputs>) => Promise<void>;\n readonly update: (change: {\n readonly set?: readonly Inputs[];\n readonly remove?: readonly Inputs[];\n }) => Promise<void>;\n /** Remove this named family across all query revisions. */\n readonly clear: () => Promise<void>;\n}\nexport interface OntologyPins {\n <Inputs extends PinInputs>(definition: PinDescriptor<Inputs>): BoundPins<Inputs>;\n readonly collection: Collection<PinRecord, string>;\n readonly remove: (id: string) => Promise<void>;\n readonly clear: (name: string) => Promise<void>;\n}\n\nexport const makeOntologyPins = Effect.fnUntraced(function* (options: {\n readonly backend: Effect.Effect<OntologyBackendService, BackendError, Scope.Scope>;\n readonly dbClient: DbClient;\n}) {\n const runtime = yield* Runtime;\n const owner = yield* Effect.scope;\n const captured = yield* Effect.context<Runtime>();\n // This is a scoped replica resource, not a result cache. Merely opening an\n // application view does not open the administrative transport or acquire pins.\n const control = yield* Effect.cached(\n Scope.provide(\n Effect.gen(function* () {\n const backend = yield* options.backend;\n return yield* makeReplica({\n id: JSON.stringify([runtime.namespace, \"pin-view\"]),\n ir: pinOntology,\n backend,\n context: {},\n mutators: pinMutators,\n });\n }).pipe(Effect.provideService(Runtime, runtime)),\n owner\n )\n );\n const collection = yield* scopedCollection(\n yield* persistedCollectionOptions<PinRecord, string>({\n id: JSON.stringify([runtime.namespace, \"pins\"]),\n getKey: (row) => row.id,\n primaryKey: \"id\",\n changes: Stream.empty,\n load: (subset) =>\n Effect.flatMap(control, (replica) =>\n replica.readSubset(ontologySubset(subset, pinOntology, \"Pin\"))\n ).pipe(\n Effect.map((rows) =>\n rows.map((row) => ({ key: row.key, value: row.value as unknown as PinRecord }))\n )\n ),\n observe: (subset) =>\n Stream.unwrap(\n Effect.map(control, (replica) =>\n replica.observeSubset(ontologySubset(subset, pinOntology, \"Pin\"))\n )\n ).pipe(\n Stream.map((batch) => ({\n ...batch,\n rows: batch.rows.map((row) => ({\n key: row.key,\n value: row.value as unknown as PinRecord,\n })),\n }))\n ),\n acquireDemand: (subset) =>\n Effect.flatMap(control, (replica) =>\n replica.demand.acquire(ontologySubset(subset, pinOntology, \"Pin\"))\n ),\n }),\n options.dbClient\n );\n const update = (change: { set?: readonly PinWrite[]; remove?: readonly string[]; clearName?: string }) =>\n Effect.runPromiseWith(captured)(\n Effect.suspend(() =>\n owner.state._tag === \"Closed\"\n ? Effect.fail(\n new BackendError({\n operation: \"pins\",\n kind: \"Unavailable\",\n retryable: false,\n message: \"Ontology view is closed.\",\n })\n )\n : Effect.flatMap(\n Effect.forkIn(\n control.pipe(\n Effect.flatMap((replica) =>\n replica.actions.apply({\n id: crypto.randomUUID(),\n name: \"updatePins\",\n parameters: { change },\n })\n ),\n Effect.asVoid\n ),\n owner,\n { startImmediately: true }\n ),\n Fiber.join\n )\n )\n );\n const families = new Map<string, BoundPins<PinInputs>>();\n yield* Effect.addFinalizer(() =>\n Effect.promise(async () => {\n for (const family of families.values()) await family.collection.cleanup({ dependents: true });\n families.clear();\n })\n );\n const bind = <Inputs extends PinInputs>(descriptor: PinDescriptor<Inputs>): BoundPins<Inputs> => {\n const definition = pinDefinitionKey(descriptor);\n const key = JSON.stringify([descriptor.name, definition]);\n const previous = families.get(key);\n if (previous) return previous as BoundPins<Inputs>;\n const write = (inputs?: PinInputs): PinWrite => ({ ...descriptor, inputs: inputs ?? {} });\n const family: BoundPins<PinInputs> = {\n collection: createLiveQueryCollection({\n id: `${collection.id}:${key}`,\n autoIndex: \"eager\",\n defaultIndexType: BasicIndex,\n query: (q) =>\n q\n .from({ pin: collection })\n .where(({ pin }) =>\n and(eq(pin.name, descriptor.name), eq(pin.definition, definition))\n )\n .select(({ pin }) => ({\n id: pin.id,\n name: pin.name,\n definition: pin.definition,\n query: pin.query,\n inputs: pin.inputs,\n attachments: pin.attachments,\n generation: pin.generation,\n ready: pin.ready,\n error: pin.error,\n })),\n getKey: (pin) => pin.id,\n // DB adds virtual columns to live-query rows. The public view keeps\n // the validated Pin shape, narrowed to this descriptor's inputs.\n }) as unknown as BoundPins<PinInputs>[\"collection\"],\n id: (inputs) => pinRecordKey(write(inputs)),\n set: (inputs) => update({ set: [write(inputs)] }),\n remove: (inputs) => update({ remove: [pinRecordKey(write(inputs))] }),\n update: (change) =>\n update({\n set: change.set?.map(write),\n remove: change.remove?.map((input) => pinRecordKey(write(input))),\n }),\n clear: () => update({ clearName: descriptor.name }),\n };\n families.set(key, family);\n return family as BoundPins<Inputs>;\n };\n return Object.assign(bind, {\n collection,\n remove: (id: string) => update({ remove: [id] }),\n clear: (name: string) => update({ clearName: name }),\n }) satisfies OntologyPins;\n});\n\nexport type { PinRecord } from \"@party-stack/ontology-replica\";\n"],"mappings":";;;;;;;;;;AA8BA,SAAgB,UACZ,MACA,SACqB;CACrB,OAAO;EACH,MAAM,OAAO,kBAAkB,OAAO,cAAc,CAAC,CAAC,IAAI;EAC1D,OAAO,OAAO,kBAAkB,mBAAmB,CAAC,CAAC,QAAQ,KAAK;EAClE,aAAa,QAAQ,eAAe;CACxC;AACJ;AAqBA,MAAa,mBAAmB,OAAO,WAAW,WAAW,SAG1D;CACC,MAAM,UAAU,OAAO;CACvB,MAAM,QAAQ,OAAO,OAAO;CAC5B,MAAM,WAAW,OAAO,OAAO,QAAiB;CAGhD,MAAM,UAAU,OAAO,OAAO,OAC1B,MAAM,QACF,OAAO,IAAI,aAAa;EACpB,MAAM,UAAU,OAAO,QAAQ;EAC/B,OAAO,OAAO,YAAY;GACtB,IAAI,KAAK,UAAU,CAAC,QAAQ,WAAW,UAAU,CAAC;GAClD,IAAI;GACJ;GACA,SAAS,CAAC;GACV,UAAU;EACd,CAAC;CACL,CAAC,CAAC,CAAC,KAAK,OAAO,eAAe,SAAS,OAAO,CAAC,GAC/C,KACJ,CACJ;CACA,MAAM,aAAa,OAAO,iBACtB,OAAO,2BAA8C;EACjD,IAAI,KAAK,UAAU,CAAC,QAAQ,WAAW,MAAM,CAAC;EAC9C,SAAS,QAAQ,IAAI;EACrB,YAAY;EACZ,SAAS,OAAO;EAChB,OAAO,WACH,OAAO,QAAQ,UAAU,YACrB,QAAQ,WAAW,eAAe,QAAQ,aAAa,KAAK,CAAC,CACjE,CAAC,CAAC,KACE,OAAO,KAAK,SACR,KAAK,KAAK,SAAS;GAAE,KAAK,IAAI;GAAK,OAAO,IAAI;EAA8B,EAAE,CAClF,CACJ;EACJ,UAAU,WACN,OAAO,OACH,OAAO,IAAI,UAAU,YACjB,QAAQ,cAAc,eAAe,QAAQ,aAAa,KAAK,CAAC,CACpE,CACJ,CAAC,CAAC,KACE,OAAO,KAAK,WAAW;GACnB,GAAG;GACH,MAAM,MAAM,KAAK,KAAK,SAAS;IAC3B,KAAK,IAAI;IACT,OAAO,IAAI;GACf,EAAE;EACN,EAAE,CACN;EACJ,gBAAgB,WACZ,OAAO,QAAQ,UAAU,YACrB,QAAQ,OAAO,QAAQ,eAAe,QAAQ,aAAa,KAAK,CAAC,CACrE;CACR,CAAC,GACD,QAAQ,QACZ;CACA,MAAM,UAAU,WACZ,OAAO,eAAe,QAAQ,CAAC,CAC3B,OAAO,cACH,MAAM,MAAM,SAAS,WACf,OAAO,KACH,IAAI,aAAa;EACb,WAAW;EACX,MAAM;EACN,WAAW;EACX,SAAS;CACb,CAAC,CACL,IACA,OAAO,QACH,OAAO,OACH,QAAQ,KACJ,OAAO,SAAS,YACZ,QAAQ,QAAQ,MAAM;EAClB,IAAI,OAAO,WAAW;EACtB,MAAM;EACN,YAAY,EAAE,OAAO;CACzB,CAAC,CACL,GACA,OAAO,MACX,GACA,OACA,EAAE,kBAAkB,KAAK,CAC7B,GACA,MAAM,IACV,CACV,CACJ;CACJ,MAAM,2BAAW,IAAI,IAAkC;CACvD,OAAO,OAAO,mBACV,OAAO,QAAQ,YAAY;EACvB,KAAK,MAAM,UAAU,SAAS,OAAO,GAAG,MAAM,OAAO,WAAW,QAAQ,EAAE,YAAY,KAAK,CAAC;EAC5F,SAAS,MAAM;CACnB,CAAC,CACL;CACA,MAAM,QAAkC,eAAyD;EAC7F,MAAM,aAAa,iBAAiB,UAAU;EAC9C,MAAM,MAAM,KAAK,UAAU,CAAC,WAAW,MAAM,UAAU,CAAC;EACxD,MAAM,WAAW,SAAS,IAAI,GAAG;EACjC,IAAI,UAAU,OAAO;EACrB,MAAM,SAAS,YAAkC;GAAE,GAAG;GAAY,QAAQ,UAAU,CAAC;EAAE;EACvF,MAAM,SAA+B;GACjC,YAAY,0BAA0B;IAClC,IAAI,GAAG,WAAW,GAAG,GAAG;IACxB,WAAW;IACX,kBAAkB;IAClB,QAAQ,MACJ,EACK,KAAK,EAAE,KAAK,WAAW,CAAC,CAAC,CACzB,OAAO,EAAE,UACN,IAAI,GAAG,IAAI,MAAM,WAAW,IAAI,GAAG,GAAG,IAAI,YAAY,UAAU,CAAC,CACrE,CAAC,CACA,QAAQ,EAAE,WAAW;KAClB,IAAI,IAAI;KACR,MAAM,IAAI;KACV,YAAY,IAAI;KAChB,OAAO,IAAI;KACX,QAAQ,IAAI;KACZ,aAAa,IAAI;KACjB,YAAY,IAAI;KAChB,OAAO,IAAI;KACX,OAAO,IAAI;IACf,EAAE;IACV,SAAS,QAAQ,IAAI;GAGzB,CAAC;GACD,KAAK,WAAW,aAAa,MAAM,MAAM,CAAC;GAC1C,MAAM,WAAW,OAAO,EAAE,KAAK,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC;GAChD,SAAS,WAAW,OAAO,EAAE,QAAQ,CAAC,aAAa,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC;GACpE,SAAS,WACL,OAAO;IACH,KAAK,OAAO,KAAK,IAAI,KAAK;IAC1B,QAAQ,OAAO,QAAQ,KAAK,UAAU,aAAa,MAAM,KAAK,CAAC,CAAC;GACpE,CAAC;GACL,aAAa,OAAO,EAAE,WAAW,WAAW,KAAK,CAAC;EACtD;EACA,SAAS,IAAI,KAAK,MAAM;EACxB,OAAO;CACX;CACA,OAAO,OAAO,OAAO,MAAM;EACvB;EACA,SAAS,OAAe,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;EAC/C,QAAQ,SAAiB,OAAO,EAAE,WAAW,KAAK,CAAC;CACvD,CAAC;AACL,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { OntologyMutatorRegistry, OntologyQueryFunctionRegistry } from "./mutators/types.js";
2
+ import { BackendError } from "@party-stack/ontology-backend";
3
+ import { Effect } from "effect";
4
+ import { StorageBackendOptions } from "@party-stack/ontology-backend/storage";
5
+ //#region src/live/storageBackend.d.ts
6
+ export interface StorageOntologyBackendOptions extends Omit<StorageBackendOptions, "mutators" | "queryFunctions"> {
7
+ readonly mutators?: OntologyMutatorRegistry;
8
+ readonly queryFunctions?: OntologyQueryFunctionRegistry;
9
+ }
10
+ /** SDK authoring adapter only; authoritative bytes, encryption and storage stay native. */
11
+ export declare const makeStorageOntologyBackend: (options: StorageOntologyBackendOptions) => Effect.Effect<{
12
+ name: string;
13
+ sourceId: string;
14
+ supportsIdempotency: boolean;
15
+ loadSubset: (subset: import("@party-stack/ontology-spec/query").ObjectSubset) => Effect.Effect<import("@party-stack/ontology-backend").BackendSnapshot, BackendError>;
16
+ subscribeSelection?: (selection: import("@party-stack/ontology-backend").ObjectSelection, policy?: import("@party-stack/ontology-backend/delivery").DeliveryPolicy, resume?: import("@party-stack/ontology-backend/delivery").DeliveryPosition) => Effect.Effect<import("@party-stack/ontology-backend/delivery").DeliverySubscription, BackendError, import("effect/Scope").Scope>;
17
+ acknowledgeDelivery?: (position: import("@party-stack/ontology-backend/delivery").DeliveryPosition) => Effect.Effect<void, BackendError>;
18
+ watchSubset?: (subset: import("@party-stack/ontology-spec/query").ObjectSubset) => Effect.Effect<import("effect/Stream").Stream<import("@party-stack/ontology-backend").SubsetWatchEvent, BackendError>, BackendError, import("effect/Scope").Scope> | undefined;
19
+ refresh?: (subset: import("@party-stack/ontology-spec/query").ObjectSubset) => {
20
+ readonly pollIntervalMs?: number | false;
21
+ readonly maxCoverageAgeMs?: number;
22
+ } | undefined;
23
+ validateAction?: (name: string, parameters: Record<string, unknown>, options?: {
24
+ readonly knownParameters?: readonly string[];
25
+ }) => Effect.Effect<import("@party-stack/ontology-backend").ValidationReport, BackendError>;
26
+ queryFunction: (name: string, parameters: Record<string, unknown>) => Effect.Effect<unknown, BackendError>;
27
+ changes?: {
28
+ readonly pull: (options: {
29
+ readonly cursor?: string;
30
+ readonly limit?: number;
31
+ }) => Effect.Effect<import("@party-stack/ontology-backend").BackendChangePage, BackendError>;
32
+ readonly watch?: Effect.Effect<import("effect/Stream").Stream<void, BackendError>, BackendError, import("effect/Scope").Scope>;
33
+ };
34
+ attachments?: import("@party-stack/ontology-backend").BackendAttachments;
35
+ encrypted?: import("@party-stack/ontology-backend").BackendEncryptedValues;
36
+ storage: import("@party-stack/ontology-backend/owned").OwnedStorageService;
37
+ maintenance: Effect.Effect<void, BackendError<"Conflict" | "Forbidden" | "HistoryExpired" | "Internal" | "InvalidConfiguration" | "InvalidRequest" | "InvalidResponse" | "NotFound" | "NotImplemented" | "RateLimited" | "ResultExpired" | "SchemaMismatch" | "SessionExpired" | "SessionReplaced" | "SourceMismatch" | "Unauthenticated" | "Unavailable" | "ValidationFailed" | "ViewReplaced">, never>;
38
+ query: (document: import("@party-stack/ontology-spec").QueryDocument, options?: {
39
+ readonly inputs?: Record<string, unknown>;
40
+ }) => Effect.Effect<Record<string, unknown>, BackendError>;
41
+ applyAction: (invocation: import("@party-stack/ontology-backend").ActionRequest) => Effect.Effect<import("@party-stack/ontology-backend").ActionReceipt, BackendError<"Conflict" | "Forbidden" | "HistoryExpired" | "Internal" | "InvalidConfiguration" | "InvalidRequest" | "InvalidResponse" | "NotFound" | "NotImplemented" | "RateLimited" | "ResultExpired" | "SchemaMismatch" | "SessionExpired" | "SessionReplaced" | "SourceMismatch" | "Unauthenticated" | "Unavailable" | "ValidationFailed" | "ViewReplaced">, never>;
42
+ blobs: import("@party-stack/ontology-storage/blobs").BlobStorageService;
43
+ resolveActionParameters: (name: string, parameters: Record<string, unknown>) => Effect.Effect<Record<string, unknown>, BackendError<any>, never>;
44
+ collectGarbage: (options?: {
45
+ readonly orphanGraceMs?: number;
46
+ readonly limit?: number;
47
+ }) => Effect.Effect<number, BackendError<"Conflict" | "Forbidden" | "HistoryExpired" | "Internal" | "InvalidConfiguration" | "InvalidRequest" | "InvalidResponse" | "NotFound" | "NotImplemented" | "RateLimited" | "ResultExpired" | "SchemaMismatch" | "SessionExpired" | "SessionReplaced" | "SourceMismatch" | "Unauthenticated" | "Unavailable" | "ValidationFailed" | "ViewReplaced">, never>;
48
+ }, BackendError<"Conflict" | "Forbidden" | "HistoryExpired" | "Internal" | "InvalidConfiguration" | "InvalidRequest" | "InvalidResponse" | "NotFound" | "NotImplemented" | "RateLimited" | "ResultExpired" | "SchemaMismatch" | "SessionExpired" | "SessionReplaced" | "SourceMismatch" | "Unauthenticated" | "Unavailable" | "ValidationFailed" | "ViewReplaced">, import("effect/Scope").Scope>;
49
+ //#endregion
50
+ //# sourceMappingURL=storageBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageBackend.d.ts","names":[],"sources":["../../src/live/storageBackend.ts"],"mappings":";;;;;iBAQiB,sCAAsC,KACnD;WAGS,WAAW;WACX,iBAAiB;;;qBAiBjB,6BAA0B,SAAA,kCAAA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CrC,wXAAA"}
@@ -0,0 +1,42 @@
1
+ import { createReadTx } from "./mutators/createReadTx.js";
2
+ import { executeTransactionMutator, withTransactionCollections } from "../runtime/transactions.js";
3
+ import { BackendError } from "@party-stack/ontology-backend";
4
+ import { Effect } from "effect";
5
+ import { CurrentExecutionContext } from "@party-stack/ontology-backend/policy";
6
+ import { makeStorageBackend } from "@party-stack/ontology-backend/storage";
7
+ //#region src/live/storageBackend.ts
8
+ const promise = (body) => Effect.tryPromise({
9
+ try: body,
10
+ catch: (cause) => cause instanceof BackendError ? cause : new BackendError({
11
+ operation: "queryFunction",
12
+ kind: "Internal",
13
+ message: "Query function failed.",
14
+ retryable: false,
15
+ cause
16
+ })
17
+ });
18
+ /** SDK authoring adapter only; authoritative bytes, encryption and storage stay native. */
19
+ const makeStorageOntologyBackend = Effect.fn("StorageOntology.make")(function* (options) {
20
+ return yield* makeStorageBackend({
21
+ ...options,
22
+ mutators: Object.fromEntries(options.ir.actionTypes.filter((action) => action.logic.length || options.mutators?.[action.name]).map((action) => [action.name, (tx, invocation) => Effect.flatMap(CurrentExecutionContext, (context) => executeTransactionMutator({
23
+ ir: options.ir,
24
+ tx,
25
+ name: invocation.name,
26
+ parameters: invocation.parameters,
27
+ operationId: invocation.id,
28
+ replay: invocation.replay,
29
+ context: context ?? options.context,
30
+ mutators: options.mutators
31
+ }))])),
32
+ queryFunctions: Object.fromEntries(Object.entries(options.queryFunctions ?? {}).map(([name, handler]) => [name, (tx, parameters) => Effect.flatMap(CurrentExecutionContext, (context) => withTransactionCollections(options.ir, tx, (objects, ensureLoaded) => promise(async () => handler({
33
+ tx: createReadTx(objects, ensureLoaded),
34
+ args: parameters,
35
+ context: context ?? options.context ?? {}
36
+ }))))]))
37
+ });
38
+ });
39
+ //#endregion
40
+ export { makeStorageOntologyBackend };
41
+
42
+ //# sourceMappingURL=storageBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageBackend.js","names":[],"sources":["../../src/live/storageBackend.ts"],"sourcesContent":["import { BackendError } from \"@party-stack/ontology-backend\";\nimport { CurrentExecutionContext } from \"@party-stack/ontology-backend/policy\";\nimport { makeStorageBackend } from \"@party-stack/ontology-backend/storage\";\nimport { Effect } from \"effect\";\nimport { executeTransactionMutator, withTransactionCollections } from \"../runtime/transactions.js\";\nimport { createReadTx } from \"./mutators/createReadTx.js\";\nimport type { OntologyMutatorRegistry, OntologyQueryFunctionRegistry } from \"./mutators/types.js\";\nimport type { StorageBackendOptions } from \"@party-stack/ontology-backend/storage\";\nexport interface StorageOntologyBackendOptions extends Omit<\n StorageBackendOptions,\n \"mutators\" | \"queryFunctions\"\n> {\n readonly mutators?: OntologyMutatorRegistry;\n readonly queryFunctions?: OntologyQueryFunctionRegistry;\n}\nconst promise = <A>(body: () => Promise<A>) =>\n Effect.tryPromise({\n try: body,\n catch: (cause) =>\n cause instanceof BackendError\n ? cause\n : new BackendError({\n operation: \"queryFunction\",\n kind: \"Internal\",\n message: \"Query function failed.\",\n retryable: false,\n cause,\n }),\n });\n/** SDK authoring adapter only; authoritative bytes, encryption and storage stay native. */\nexport const makeStorageOntologyBackend = Effect.fn(\"StorageOntology.make\")(function* (\n options: StorageOntologyBackendOptions\n) {\n return yield* makeStorageBackend({\n ...options,\n mutators: Object.fromEntries(\n options.ir.actionTypes\n .filter((action) => action.logic.length || options.mutators?.[action.name])\n .map((action) => [\n action.name,\n (tx, invocation) =>\n Effect.flatMap(CurrentExecutionContext, (context) =>\n executeTransactionMutator({\n ir: options.ir,\n tx,\n name: invocation.name,\n parameters: invocation.parameters,\n operationId: invocation.id,\n replay: invocation.replay,\n context: context ?? options.context,\n mutators: options.mutators,\n })\n ),\n ])\n ),\n queryFunctions: Object.fromEntries(\n Object.entries(options.queryFunctions ?? {}).map(([name, handler]) => [\n name,\n (tx, parameters) =>\n Effect.flatMap(CurrentExecutionContext, (context) =>\n withTransactionCollections(options.ir, tx, (objects, ensureLoaded) =>\n promise(async () =>\n handler({\n tx: createReadTx(objects, ensureLoaded),\n args: parameters,\n context: context ?? options.context ?? {},\n })\n )\n )\n ),\n ])\n ),\n });\n});\n"],"mappings":";;;;;;;AAeA,MAAM,WAAc,SAChB,OAAO,WAAW;CACd,KAAK;CACL,QAAQ,UACJ,iBAAiB,eACX,QACA,IAAI,aAAa;EACb,WAAW;EACX,MAAM;EACN,SAAS;EACT,WAAW;EACX;CACJ,CAAC;AACf,CAAC;;AAEL,MAAa,6BAA6B,OAAO,GAAG,sBAAsB,CAAC,CAAC,WACxE,SACF;CACE,OAAO,OAAO,mBAAmB;EAC7B,GAAG;EACH,UAAU,OAAO,YACb,QAAQ,GAAG,YACN,QAAQ,WAAW,OAAO,MAAM,UAAU,QAAQ,WAAW,OAAO,KAAK,CAAC,CAC1E,KAAK,WAAW,CACb,OAAO,OACN,IAAI,eACD,OAAO,QAAQ,0BAA0B,YACrC,0BAA0B;GACtB,IAAI,QAAQ;GACZ;GACA,MAAM,WAAW;GACjB,YAAY,WAAW;GACvB,aAAa,WAAW;GACxB,QAAQ,WAAW;GACnB,SAAS,WAAW,QAAQ;GAC5B,UAAU,QAAQ;EACtB,CAAC,CACL,CACR,CAAC,CACT;EACA,gBAAgB,OAAO,YACnB,OAAO,QAAQ,QAAQ,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,aAAa,CAClE,OACC,IAAI,eACD,OAAO,QAAQ,0BAA0B,YACrC,2BAA2B,QAAQ,IAAI,KAAK,SAAS,iBACjD,QAAQ,YACJ,QAAQ;GACJ,IAAI,aAAa,SAAS,YAAY;GACtC,MAAM;GACN,SAAS,WAAW,QAAQ,WAAW,CAAC;EAC5C,CAAC,CACL,CACJ,CACJ,CACR,CAAC,CACL;CACJ,CAAC;AACL,CAAC"}
package/lib/local.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { BackendError } from "@party-stack/ontology-backend";
2
+ import { Effect, Scope } from "effect";
3
+ import { OntologyServer } from "@party-stack/ontology-server";
4
+ import { OntologyServerClient } from "@party-stack/ontology-server/rpc";
5
+ //#region src/local.d.ts
6
+ export interface LocalClientOptions {
7
+ readonly ontology?: string;
8
+ }
9
+ /** Same-process client over the normal server routes and RPC handlers.
10
+ * An Effect factory is acquired with the client and closed with its scope.
11
+ * An already acquired server is borrowed and keeps its existing lifetime.
12
+ */
13
+ export declare const localClient: <R = never, E = never, ROpen = never>(server: Effect.Effect<OntologyServer<R>, E, ROpen> | OntologyServer<R>, options?: LocalClientOptions | undefined) => Effect.Effect<OntologyServerClient, BackendError<"Conflict" | "Forbidden" | "HistoryExpired" | "Internal" | "InvalidConfiguration" | "InvalidRequest" | "InvalidResponse" | "NotFound" | "NotImplemented" | "RateLimited" | "ResultExpired" | "SchemaMismatch" | "SessionExpired" | "SessionReplaced" | "SourceMismatch" | "Unauthenticated" | "Unavailable" | "ValidationFailed" | "ViewReplaced">, R | ROpen | Scope.Scope>;
14
+ //#endregion
15
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","names":[],"sources":["../src/local.ts"],"mappings":";;;;;iBAOiB;WACJ;;;;;;qBAOA,cAA2C,WAAW,WAAW,eAAK,QAAA,OAAA,OAAA,eAAA,IAAA,GAAA,SAAA,eAAA,IAAA,UAAA,mCAAA,OAAA,OAAA,sBAAA,iWAAA,IAAA,QAAA,MAAA"}
package/lib/local.js ADDED
@@ -0,0 +1,19 @@
1
+ import { classifyBackendFailure } from "@party-stack/ontology-backend";
2
+ import { Effect, Exit, Scope } from "effect";
3
+ import { makeOntologyLocalClient } from "@party-stack/ontology-server/rpc/local";
4
+ //#region src/local.ts
5
+ /** Same-process client over the normal server routes and RPC handlers.
6
+ * An Effect factory is acquired with the client and closed with its scope.
7
+ * An already acquired server is borrowed and keeps its existing lifetime.
8
+ */
9
+ const localClient = Effect.fnUntraced(function* (server, options) {
10
+ const scope = yield* Scope.fork(yield* Effect.scope);
11
+ return yield* Scope.provide(Effect.gen(function* () {
12
+ const opened = yield* Effect.isEffect(server) ? server : Effect.succeed(server);
13
+ return yield* makeOntologyLocalClient(opened, options);
14
+ }).pipe(Effect.mapError((cause) => classifyBackendFailure("ontology.local", cause))), scope).pipe(Effect.onExit((exit) => Exit.isFailure(exit) ? Scope.close(scope, exit) : Effect.void));
15
+ });
16
+ //#endregion
17
+ export { localClient };
18
+
19
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","names":[],"sources":["../src/local.ts"],"sourcesContent":["import { classifyBackendFailure } from \"@party-stack/ontology-backend\";\nimport { makeOntologyLocalClient } from \"@party-stack/ontology-server/rpc/local\";\nimport { Effect, Exit, Scope } from \"effect\";\nimport type { BackendError } from \"@party-stack/ontology-backend\";\nimport type { OntologyServer } from \"@party-stack/ontology-server\";\nimport type { OntologyServerClient } from \"@party-stack/ontology-server/rpc\";\n\nexport interface LocalClientOptions {\n readonly ontology?: string;\n}\n\n/** Same-process client over the normal server routes and RPC handlers.\n * An Effect factory is acquired with the client and closed with its scope.\n * An already acquired server is borrowed and keeps its existing lifetime.\n */\nexport const localClient = Effect.fnUntraced(function* <R = never, E = never, ROpen = never>(\n server: OntologyServer<R> | Effect.Effect<OntologyServer<R>, E, ROpen>,\n options?: LocalClientOptions\n): Effect.fn.Return<OntologyServerClient, BackendError, R | ROpen | Scope.Scope> {\n const scope = yield* Scope.fork(yield* Effect.scope);\n return yield* Scope.provide(\n Effect.gen(function* () {\n const opened = yield* Effect.isEffect(server) ? server : Effect.succeed(server);\n return yield* makeOntologyLocalClient(opened, options);\n }).pipe(Effect.mapError((cause) => classifyBackendFailure(\"ontology.local\", cause))),\n scope\n ).pipe(Effect.onExit((exit) => (Exit.isFailure(exit) ? Scope.close(scope, exit) : Effect.void)));\n});\n"],"mappings":";;;;;;;;AAeA,MAAa,cAAc,OAAO,WAAW,WACzC,QACA,SAC6E;CAC7E,MAAM,QAAQ,OAAO,MAAM,KAAK,OAAO,OAAO,KAAK;CACnD,OAAO,OAAO,MAAM,QAChB,OAAO,IAAI,aAAa;EACpB,MAAM,SAAS,OAAO,OAAO,SAAS,MAAM,IAAI,SAAS,OAAO,QAAQ,MAAM;EAC9E,OAAO,OAAO,wBAAwB,QAAQ,OAAO;CACzD,CAAC,CAAC,CAAC,KAAK,OAAO,UAAU,UAAU,uBAAuB,kBAAkB,KAAK,CAAC,CAAC,GACnF,KACJ,CAAC,CAAC,KAAK,OAAO,QAAQ,SAAU,KAAK,UAAU,IAAI,IAAI,MAAM,MAAM,OAAO,IAAI,IAAI,OAAO,IAAK,CAAC;AACnG,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { OntologyCollectionDescriptors } from "../../tanstack/descriptors.js";
2
+ import "../../index.js";
3
+ import { MetaOntology } from "@party-stack/ontology-spec/meta";
4
+ //#region src/meta/generated/collections.d.ts
5
+ export declare const objects: OntologyCollectionDescriptors<MetaOntology, Record<never, never>>, cachedObjects: OntologyCollectionDescriptors<MetaOntology, Record<never, never>>;
6
+ //#endregion
7
+ //# sourceMappingURL=collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.d.ts","names":["_$______index_js0.OntologyCollectionDescriptors"],"sources":["../../../src/meta/generated/collections.ts"],"mappings":";;;;qBAKe,SAAOA,8BAAA,cAAA,uBAAE,eAAaA,8BAAA,cAAA"}
@@ -0,0 +1,15 @@
1
+ import { ontologyCollections } from "../../tanstack/descriptors.js";
2
+ import "../../index.js";
3
+ //#region src/meta/generated/collections.ts
4
+ const { objects, cachedObjects } = ontologyCollections({
5
+ Ontology: "id",
6
+ ValueType: "name",
7
+ ObjectType: "name",
8
+ LinkType: "id",
9
+ ActionType: "name",
10
+ QueryFunctionType: "name"
11
+ });
12
+ //#endregion
13
+ export { cachedObjects, objects };
14
+
15
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","names":[],"sources":["../../../src/meta/generated/collections.ts"],"sourcesContent":["// Auto-generated file - do not edit manually\n\nimport { ontologyCollections } from \"../../index.js\";\nimport type { MetaOntology } from \"@party-stack/ontology-spec/meta\";\n\nexport const { objects, cachedObjects } = ontologyCollections<MetaOntology>({\n Ontology: \"id\",\n ValueType: \"name\",\n ObjectType: \"name\",\n LinkType: \"id\",\n ActionType: \"name\",\n QueryFunctionType: \"name\",\n});\n"],"mappings":";;;AAKA,MAAa,EAAE,SAAS,kBAAkB,oBAAkC;CACxE,UAAU;CACV,WAAW;CACX,YAAY;CACZ,UAAU;CACV,YAAY;CACZ,mBAAmB;AACvB,CAAC"}
@@ -1,7 +1,7 @@
1
- import { CreateLiveOntologyOpts, LiveOntology } from "../../live/LiveOntology.js";
2
- import { MetaOntology, MetaOntologyContext } from "./types.js";
1
+ import { LiveOntology, LiveOntologyFactoryOptions } from "../../live/LiveOntology.js";
3
2
  import "../../index.js";
3
+ import { MetaOntology, MetaOntologyContext } from "@party-stack/ontology-spec/meta";
4
4
  //#region src/meta/generated/live.d.ts
5
- export declare function createMetaLiveOntology(opts: Omit<CreateLiveOntologyOpts<MetaOntologyContext>, "ir">): Promise<LiveOntology<MetaOntology>>;
5
+ export declare function createMetaLiveOntology(opts: LiveOntologyFactoryOptions<MetaOntologyContext>): Promise<LiveOntology<MetaOntology>>;
6
6
  //#endregion
7
7
  //# sourceMappingURL=live.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"live.d.ts","names":[],"sources":["../../../src/meta/generated/live.ts"],"mappings":";;;;wBAMsB,uBAClB,MAAM,KAAK,uBAAuB,8BACnC,QAAQ,aAAa"}
1
+ {"version":3,"file":"live.d.ts","names":[],"sources":["../../../src/meta/generated/live.ts"],"mappings":";;;;wBAMsB,uBAClB,MAAM,2BAA2B,uBAClC,QAAQ,aAAa"}
@@ -1,11 +1,11 @@
1
1
  import { createLiveOntology } from "../../live/LiveOntology.js";
2
- import ontology_default from "../ontology.js";
3
2
  import "../../index.js";
3
+ import ontology from "@party-stack/ontology-spec/meta";
4
4
  //#region src/meta/generated/live.ts
5
5
  async function createMetaLiveOntology(opts) {
6
6
  return createLiveOntology({
7
7
  ...opts,
8
- ir: ontology_default
8
+ ir: ontology
9
9
  });
10
10
  }
11
11
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"live.js","names":["ontology"],"sources":["../../../src/meta/generated/live.ts"],"sourcesContent":["// Auto-generated file - do not edit manually\n\nimport { createLiveOntology, type CreateLiveOntologyOpts, type LiveOntology } from \"../../index.js\";\nimport ontology from \"../ontology.js\";\nimport type { MetaOntology, MetaOntologyContext } from \"./types.js\";\n\nexport async function createMetaLiveOntology(\n opts: Omit<CreateLiveOntologyOpts<MetaOntologyContext>, \"ir\">\n): Promise<LiveOntology<MetaOntology>> {\n return createLiveOntology<MetaOntology, MetaOntologyContext>({\n ...opts,\n ir: ontology,\n });\n}\n"],"mappings":";;;;AAMA,eAAsB,uBAClB,MACmC;CACnC,OAAO,mBAAsD;EACzD,GAAG;EACH,IAAIA;CACR,CAAC;AACL"}
1
+ {"version":3,"file":"live.js","names":[],"sources":["../../../src/meta/generated/live.ts"],"sourcesContent":["// Auto-generated file - do not edit manually\n\nimport ontology from \"@party-stack/ontology-spec/meta\";\nimport { createLiveOntology, type LiveOntologyFactoryOptions, type LiveOntology } from \"../../index.js\";\nimport type { MetaOntology, MetaOntologyContext } from \"@party-stack/ontology-spec/meta\";\n\nexport async function createMetaLiveOntology(\n opts: LiveOntologyFactoryOptions<MetaOntologyContext>\n): Promise<LiveOntology<MetaOntology>> {\n return createLiveOntology<MetaOntology, MetaOntologyContext>({\n ...opts,\n ir: ontology,\n });\n}\n"],"mappings":";;;;AAMA,eAAsB,uBAClB,MACmC;CACnC,OAAO,mBAAsD;EACzD,GAAG;EACH,IAAI;CACR,CAAC;AACL"}
@@ -1,12 +1,8 @@
1
- import { OntologyIR } from "../ir/generated/types.js";
2
- import { LiveOntology } from "../live/LiveOntology.js";
3
- import { MetaOntology } from "./generated/types.js";
1
+ import { OntologyBackendService } from "@party-stack/ontology-backend";
2
+ import { PullOptions, PullOptions as PullOptions$1 } from "@party-stack/ontology-backend/meta";
4
3
  //#region src/meta/pull.d.ts
5
- export interface PullOptions {
6
- objectTypeNames: string[];
7
- actionTypeNames: string[];
8
- queryFunctionTypeNames: string[];
9
- }
10
- export declare function pull(ontology: LiveOntology<MetaOntology>, options: PullOptions): Promise<OntologyIR>;
4
+ /** Promise facade over native metadata queries; no replica or UI collections are acquired. */
5
+ export declare function pull(backend: Pick<OntologyBackendService, "query">, options: PullOptions$1): Promise<import("@party-stack/ontology-spec").OntologyIR>;
11
6
  //#endregion
7
+ export type { PullOptions };
12
8
  //# sourceMappingURL=pull.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","names":[],"sources":["../../src/meta/pull.ts"],"mappings":";;;;iBAyCiB;EACb;EACA;EACA;;wBAGkB,KAAK,UAAU,aAAa,eAAe,SAAS,cAAc,QAAQ"}
1
+ {"version":3,"file":"pull.d.ts","names":["PullOptions"],"sources":["../../src/meta/pull.ts"],"mappings":";;;;wBAOsB,KAAK,SAAS,KAAK,kCAAkC,SAASA,gBAAW,6CAAA"}
package/lib/meta/pull.js CHANGED
@@ -1,47 +1,9 @@
1
- import { Query, and, inArray, queryOnce } from "@tanstack/db";
1
+ import { Effect } from "effect";
2
+ import { pull as pull$1 } from "@party-stack/ontology-backend/meta";
2
3
  //#region src/meta/pull.ts
3
- function getValueTypes(type) {
4
- switch (type.kind) {
5
- case "list": return getValueTypes(type.value.elementType);
6
- case "map": return [...getValueTypes(type.value.keyType), ...getValueTypes(type.value.valueType)];
7
- case "optional": return getValueTypes(type.value.type);
8
- case "result": return [...getValueTypes(type.value.okType), ...getValueTypes(type.value.errType)];
9
- case "struct": return type.value.fields.flatMap((field) => getValueTypes(field.type));
10
- case "ref": return [type.value.name];
11
- default: return [];
12
- }
13
- }
14
- function getObjectTypeValueTypes(objectType) {
15
- return Array.from(new Set(objectType.properties.flatMap((p) => getValueTypes(p.type))));
16
- }
17
- function getActionTypeValueTypes(actionType) {
18
- return actionType.parameters.flatMap((parameter) => getValueTypes(parameter.type));
19
- }
20
- function getQueryFunctionTypeValueTypes(queryFunctionType) {
21
- return [...queryFunctionType.parameters.flatMap((parameter) => getValueTypes(parameter.type)), ...getValueTypes(queryFunctionType.returnType)];
22
- }
23
- async function pull(ontology, options) {
24
- const { ValueType, ObjectType, LinkType, ActionType, QueryFunctionType } = ontology.objects;
25
- const { objectTypeNames, actionTypeNames, queryFunctionTypeNames } = options;
26
- const objectTypesQuery = new Query().from({ ObjectType }).where(({ ObjectType }) => inArray(ObjectType.name, objectTypeNames));
27
- const objectTypes = await queryOnce(() => objectTypesQuery);
28
- const [linkTypes, actionTypes, queryFunctionTypes] = await Promise.all([
29
- queryOnce((q) => q.from({ LinkType }).where(({ LinkType }) => and(inArray(LinkType.source.objectType, objectTypeNames), inArray(LinkType.target.objectType, objectTypeNames)))),
30
- queryOnce((q) => q.from({ ActionType }).where(({ ActionType }) => inArray(ActionType.name, actionTypeNames))),
31
- queryOnce((q) => q.from({ QueryFunctionType }).where(({ QueryFunctionType }) => inArray(QueryFunctionType.name, queryFunctionTypeNames)))
32
- ]);
33
- const valueTypeNames = Array.from(/* @__PURE__ */ new Set([
34
- ...objectTypes.flatMap(getObjectTypeValueTypes),
35
- ...actionTypes.flatMap(getActionTypeValueTypes),
36
- ...queryFunctionTypes.flatMap(getQueryFunctionTypeValueTypes)
37
- ]));
38
- return {
39
- types: await queryOnce((q) => q.from({ ValueType }).where(({ ValueType }) => inArray(ValueType.name, valueTypeNames))),
40
- objectTypes,
41
- linkTypes,
42
- actionTypes,
43
- queryFunctionTypes
44
- };
4
+ /** Promise facade over native metadata queries; no replica or UI collections are acquired. */
5
+ async function pull(backend, options) {
6
+ return Effect.runPromise(pull$1(backend, options));
45
7
  }
46
8
  //#endregion
47
9
  export { pull };
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","names":[],"sources":["../../src/meta/pull.ts"],"sourcesContent":["import { and, inArray, Query, queryOnce } from \"@tanstack/db\";\nimport type { OntologyIR } from \"../ir/generated/types.js\";\nimport type { LiveOntology } from \"../live/LiveOntology.js\";\nimport type { ActionType, MetaOntology, ObjectType, QueryFunctionType, TypeDef } from \"./generated/types.js\";\n\nfunction getValueTypes(type: TypeDef): string[] {\n switch (type.kind) {\n case \"list\":\n return getValueTypes(type.value.elementType);\n case \"map\":\n return [...getValueTypes(type.value.keyType), ...getValueTypes(type.value.valueType)];\n case \"optional\":\n return getValueTypes(type.value.type);\n case \"result\":\n return [...getValueTypes(type.value.okType), ...getValueTypes(type.value.errType)];\n case \"struct\":\n return type.value.fields.flatMap((field) => getValueTypes(field.type));\n case \"ref\":\n return [type.value.name];\n default:\n return [];\n }\n}\n\nfunction getObjectTypeValueTypes(objectType: ObjectType): string[] {\n return Array.from(new Set(objectType.properties.flatMap((p) => getValueTypes(p.type))));\n}\n\nfunction getActionTypeValueTypes(actionType: ActionType): string[] {\n return actionType.parameters.flatMap((parameter) => getValueTypes(parameter.type));\n}\n\nfunction getQueryFunctionTypeValueTypes(queryFunctionType: QueryFunctionType): string[] {\n return [\n ...queryFunctionType.parameters.flatMap((parameter) => getValueTypes(parameter.type)),\n ...getValueTypes(queryFunctionType.returnType),\n ];\n}\n\n// TODO: port this to pure queries once we can do some sort of explode operation.\n\nexport interface PullOptions {\n objectTypeNames: string[];\n actionTypeNames: string[];\n queryFunctionTypeNames: string[];\n}\n\nexport async function pull(ontology: LiveOntology<MetaOntology>, options: PullOptions): Promise<OntologyIR> {\n const { ValueType, ObjectType, LinkType, ActionType, QueryFunctionType } = ontology.objects;\n const { objectTypeNames, actionTypeNames, queryFunctionTypeNames } = options;\n\n const objectTypesQuery = new Query()\n .from({ ObjectType })\n .where(({ ObjectType }) => inArray(ObjectType.name, objectTypeNames));\n\n const objectTypes = await queryOnce(() => objectTypesQuery);\n\n const [linkTypes, actionTypes, queryFunctionTypes] = await Promise.all([\n queryOnce((q) =>\n q\n .from({ LinkType })\n .where(({ LinkType }) =>\n and(\n inArray(LinkType.source.objectType, objectTypeNames),\n inArray(LinkType.target.objectType, objectTypeNames)\n )\n )\n ),\n queryOnce((q) =>\n q.from({ ActionType }).where(({ ActionType }) => inArray(ActionType.name, actionTypeNames))\n ),\n queryOnce((q) =>\n q\n .from({ QueryFunctionType })\n .where(({ QueryFunctionType }) => inArray(QueryFunctionType.name, queryFunctionTypeNames))\n ),\n ]);\n\n const valueTypeNames = Array.from(\n new Set([\n ...objectTypes.flatMap(getObjectTypeValueTypes),\n ...actionTypes.flatMap(getActionTypeValueTypes),\n ...queryFunctionTypes.flatMap(getQueryFunctionTypeValueTypes),\n ])\n );\n\n const types = await queryOnce((q) =>\n q.from({ ValueType }).where(({ ValueType }) => inArray(ValueType.name, valueTypeNames))\n );\n\n return {\n types,\n objectTypes,\n linkTypes,\n actionTypes,\n queryFunctionTypes,\n };\n}\n"],"mappings":";;AAKA,SAAS,cAAc,MAAyB;CAC5C,QAAQ,KAAK,MAAb;EACI,KAAK,QACD,OAAO,cAAc,KAAK,MAAM,WAAW;EAC/C,KAAK,OACD,OAAO,CAAC,GAAG,cAAc,KAAK,MAAM,OAAO,GAAG,GAAG,cAAc,KAAK,MAAM,SAAS,CAAC;EACxF,KAAK,YACD,OAAO,cAAc,KAAK,MAAM,IAAI;EACxC,KAAK,UACD,OAAO,CAAC,GAAG,cAAc,KAAK,MAAM,MAAM,GAAG,GAAG,cAAc,KAAK,MAAM,OAAO,CAAC;EACrF,KAAK,UACD,OAAO,KAAK,MAAM,OAAO,SAAS,UAAU,cAAc,MAAM,IAAI,CAAC;EACzE,KAAK,OACD,OAAO,CAAC,KAAK,MAAM,IAAI;EAC3B,SACI,OAAO,CAAC;CAChB;AACJ;AAEA,SAAS,wBAAwB,YAAkC;CAC/D,OAAO,MAAM,KAAK,IAAI,IAAI,WAAW,WAAW,SAAS,MAAM,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1F;AAEA,SAAS,wBAAwB,YAAkC;CAC/D,OAAO,WAAW,WAAW,SAAS,cAAc,cAAc,UAAU,IAAI,CAAC;AACrF;AAEA,SAAS,+BAA+B,mBAAgD;CACpF,OAAO,CACH,GAAG,kBAAkB,WAAW,SAAS,cAAc,cAAc,UAAU,IAAI,CAAC,GACpF,GAAG,cAAc,kBAAkB,UAAU,CACjD;AACJ;AAUA,eAAsB,KAAK,UAAsC,SAA2C;CACxG,MAAM,EAAE,WAAW,YAAY,UAAU,YAAY,sBAAsB,SAAS;CACpF,MAAM,EAAE,iBAAiB,iBAAiB,2BAA2B;CAErE,MAAM,mBAAmB,IAAI,MAAM,CAAC,CAC/B,KAAK,EAAE,WAAW,CAAC,CAAC,CACpB,OAAO,EAAE,iBAAiB,QAAQ,WAAW,MAAM,eAAe,CAAC;CAExE,MAAM,cAAc,MAAM,gBAAgB,gBAAgB;CAE1D,MAAM,CAAC,WAAW,aAAa,sBAAsB,MAAM,QAAQ,IAAI;EACnE,WAAW,MACP,EACK,KAAK,EAAE,SAAS,CAAC,CAAC,CAClB,OAAO,EAAE,eACN,IACI,QAAQ,SAAS,OAAO,YAAY,eAAe,GACnD,QAAQ,SAAS,OAAO,YAAY,eAAe,CACvD,CACJ,CACR;EACA,WAAW,MACP,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,iBAAiB,QAAQ,WAAW,MAAM,eAAe,CAAC,CAC9F;EACA,WAAW,MACP,EACK,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAC3B,OAAO,EAAE,wBAAwB,QAAQ,kBAAkB,MAAM,sBAAsB,CAAC,CACjG;CACJ,CAAC;CAED,MAAM,iBAAiB,MAAM,qBACzB,IAAI,IAAI;EACJ,GAAG,YAAY,QAAQ,uBAAuB;EAC9C,GAAG,YAAY,QAAQ,uBAAuB;EAC9C,GAAG,mBAAmB,QAAQ,8BAA8B;CAChE,CAAC,CACL;CAMA,OAAO;EACH,OAAA,MALgB,WAAW,MAC3B,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,gBAAgB,QAAQ,UAAU,MAAM,cAAc,CAAC,CAC1F;EAII;EACA;EACA;EACA;CACJ;AACJ"}
1
+ {"version":3,"file":"pull.js","names":["pullNative"],"sources":["../../src/meta/pull.ts"],"sourcesContent":["import { pull as pullNative } from \"@party-stack/ontology-backend/meta\";\nimport { Effect } from \"effect\";\nimport type { OntologyBackendService } from \"@party-stack/ontology-backend\";\nimport type { PullOptions } from \"@party-stack/ontology-backend/meta\";\nexport type { PullOptions } from \"@party-stack/ontology-backend/meta\";\n\n/** Promise facade over native metadata queries; no replica or UI collections are acquired. */\nexport async function pull(backend: Pick<OntologyBackendService, \"query\">, options: PullOptions) {\n return Effect.runPromise(pullNative(backend, options));\n}\n"],"mappings":";;;;AAOA,eAAsB,KAAK,SAAgD,SAAsB;CAC7F,OAAO,OAAO,WAAWA,OAAW,SAAS,OAAO,CAAC;AACzD"}
package/lib/query.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "@party-stack/ontology-spec/query";
package/lib/query.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "@party-stack/ontology-spec/query";
2
+ export {};
@@ -0,0 +1,35 @@
1
+ import { LiveOntology, LiveOntologyWrites } from "../live/LiveOntology.js";
2
+ import { ConnectionMonitor } from "@party-stack/connect";
3
+ import { BackendError, OntologyBackendService } from "@party-stack/ontology-backend";
4
+ import { Runtime } from "@party-stack/runtime";
5
+ import { Effect, Scope } from "effect";
6
+ import { OntologyIR } from "@party-stack/ontology-spec";
7
+ import { ReplicaOptions, ReplicaService } from "@party-stack/ontology-replica";
8
+ import { OntologySource } from "@party-stack/ontology-backend/protocol";
9
+ //#region src/runtime/host.d.ts
10
+ interface ReplicaHostCommonOptions {
11
+ readonly id?: string;
12
+ readonly live?: boolean;
13
+ readonly ir: OntologyIR;
14
+ readonly context: Record<string, unknown>;
15
+ readonly writes?: LiveOntologyWrites;
16
+ readonly authentication?: ConnectionMonitor;
17
+ readonly cache?: ReplicaOptions["cache"];
18
+ readonly demand?: ReplicaOptions["demand"];
19
+ readonly clientSessions?: ReplicaOptions["clientSessions"];
20
+ }
21
+ /** A native connection can additionally publish speculative parent state. */
22
+ export type ReplicaHostOptions = ReplicaHostCommonOptions & {
23
+ readonly backend: OntologyBackendService;
24
+ readonly source?: OntologySource;
25
+ };
26
+ export interface ReplicaHostService {
27
+ readonly replica: ReplicaService;
28
+ readonly backend: OntologyBackendService;
29
+ readonly attachments: LiveOntology["attachments"];
30
+ }
31
+ /** Application facade: adapt authoring types and SDK promises around the native scoped host. */
32
+ export declare const makeReplicaHost: (options: ReplicaHostOptions) => Effect.Effect<ReplicaHostService, BackendError<"Conflict" | "Forbidden" | "HistoryExpired" | "Internal" | "InvalidConfiguration" | "InvalidRequest" | "InvalidResponse" | "NotFound" | "NotImplemented" | "RateLimited" | "ResultExpired" | "SchemaMismatch" | "SessionExpired" | "SessionReplaced" | "SourceMismatch" | "Unauthenticated" | "Unavailable" | "ValidationFailed" | "ViewReplaced">, Runtime | Scope.Scope>;
33
+ //#endregion
34
+ export {};
35
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","names":[],"sources":["../../src/runtime/host.ts"],"mappings":";;;;;;;;;UAYU;WACG;WACA;WACA,IAAI;WACJ,SAAS;WACT,SAAS;WACT,iBAAiB;WACjB,QAAQ;WACR,SAAS;WACT,iBAAiB;;;YAGlB,qBAAqB;WACpB,SAAS;WACT,SAAS;;iBAEL;WACJ,SAAS;WACT,SAAS;WACT,aAAa;;;qBAIb,kBAAe,SAAA,uBAAA,OAAA,OAAA,oBAAA,iWAAA,UAAA,MAAA"}
@@ -0,0 +1,39 @@
1
+ import { createLiveOntologyAttachments } from "../live/attachments/createLiveOntologyAttachments.js";
2
+ import { actionMutators } from "./transactions.js";
3
+ import { Effect, Fiber } from "effect";
4
+ import { makeReplica } from "@party-stack/ontology-replica";
5
+ //#region src/runtime/host.ts
6
+ /** Application facade: adapt authoring types and SDK promises around the native scoped host. */
7
+ const makeReplicaHost = Effect.fn("OntologyHost.open")(function* (options) {
8
+ const backend = options.backend;
9
+ const replica = yield* makeReplica({
10
+ id: options.id,
11
+ live: options.live,
12
+ ir: options.ir,
13
+ context: options.context,
14
+ backend,
15
+ source: options.source,
16
+ mutators: actionMutators(options.ir, options.writes?.mutators),
17
+ outbox: options.writes?.outbox,
18
+ authentication: options.authentication,
19
+ cache: options.cache,
20
+ demand: options.demand,
21
+ clientSessions: options.clientSessions
22
+ });
23
+ const captured = yield* Effect.context();
24
+ const scope = yield* Effect.scope;
25
+ const run = (effect, signal) => Effect.runPromiseWith(captured)(Effect.flatMap(Effect.forkIn(effect, scope), (fiber) => Fiber.join(fiber).pipe(Effect.ensuring(Fiber.interrupt(fiber)))), { signal });
26
+ return {
27
+ replica,
28
+ backend,
29
+ attachments: createLiveOntologyAttachments({
30
+ attachments: replica.attachments,
31
+ run,
32
+ scope
33
+ })
34
+ };
35
+ });
36
+ //#endregion
37
+ export { makeReplicaHost };
38
+
39
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","names":[],"sources":["../../src/runtime/host.ts"],"sourcesContent":["import { makeReplica } from \"@party-stack/ontology-replica\";\nimport { Effect, Fiber } from \"effect\";\nimport { createLiveOntologyAttachments } from \"../live/attachments/createLiveOntologyAttachments.js\";\nimport { actionMutators } from \"./transactions.js\";\nimport type { LiveOntology, LiveOntologyWrites } from \"../live/LiveOntology.js\";\nimport type { ConnectionMonitor } from \"@party-stack/connect\";\nimport type { BackendError, OntologyBackendService } from \"@party-stack/ontology-backend\";\nimport type { OntologySource } from \"@party-stack/ontology-backend/protocol\";\nimport type { ReplicaOptions, ReplicaService } from \"@party-stack/ontology-replica\";\nimport type { OntologyIR } from \"@party-stack/ontology-spec\";\nimport type { Runtime } from \"@party-stack/runtime\";\nimport type { Scope } from \"effect\";\ninterface ReplicaHostCommonOptions {\n readonly id?: string;\n readonly live?: boolean;\n readonly ir: OntologyIR;\n readonly context: Record<string, unknown>;\n readonly writes?: LiveOntologyWrites;\n readonly authentication?: ConnectionMonitor;\n readonly cache?: ReplicaOptions[\"cache\"];\n readonly demand?: ReplicaOptions[\"demand\"];\n readonly clientSessions?: ReplicaOptions[\"clientSessions\"];\n}\n/** A native connection can additionally publish speculative parent state. */\nexport type ReplicaHostOptions = ReplicaHostCommonOptions & {\n readonly backend: OntologyBackendService;\n readonly source?: OntologySource;\n};\nexport interface ReplicaHostService {\n readonly replica: ReplicaService;\n readonly backend: OntologyBackendService;\n readonly attachments: LiveOntology[\"attachments\"];\n}\n\n/** Application facade: adapt authoring types and SDK promises around the native scoped host. */\nexport const makeReplicaHost = Effect.fn(\"OntologyHost.open\")(function* (\n options: ReplicaHostOptions\n): Effect.fn.Return<ReplicaHostService, BackendError, Runtime | Scope.Scope> {\n const backend = options.backend;\n const replica = yield* makeReplica({\n id: options.id,\n live: options.live,\n ir: options.ir,\n context: options.context,\n backend,\n source: options.source,\n mutators: actionMutators(options.ir, options.writes?.mutators),\n outbox: options.writes?.outbox,\n authentication: options.authentication,\n cache: options.cache,\n demand: options.demand,\n clientSessions: options.clientSessions,\n });\n const captured = yield* Effect.context<never>();\n const scope = yield* Effect.scope;\n const run = <A>(effect: Effect.Effect<A, BackendError>, signal?: AbortSignal) =>\n Effect.runPromiseWith(captured)(\n Effect.flatMap(Effect.forkIn(effect, scope), (fiber) =>\n Fiber.join(fiber).pipe(Effect.ensuring(Fiber.interrupt(fiber)))\n ),\n { signal }\n );\n return {\n replica,\n backend,\n attachments: createLiveOntologyAttachments({ attachments: replica.attachments, run, scope }),\n };\n});\n"],"mappings":";;;;;;AAmCA,MAAa,kBAAkB,OAAO,GAAG,mBAAmB,CAAC,CAAC,WAC1D,SACyE;CACzE,MAAM,UAAU,QAAQ;CACxB,MAAM,UAAU,OAAO,YAAY;EAC/B,IAAI,QAAQ;EACZ,MAAM,QAAQ;EACd,IAAI,QAAQ;EACZ,SAAS,QAAQ;EACjB;EACA,QAAQ,QAAQ;EAChB,UAAU,eAAe,QAAQ,IAAI,QAAQ,QAAQ,QAAQ;EAC7D,QAAQ,QAAQ,QAAQ;EACxB,gBAAgB,QAAQ;EACxB,OAAO,QAAQ;EACf,QAAQ,QAAQ;EAChB,gBAAgB,QAAQ;CAC5B,CAAC;CACD,MAAM,WAAW,OAAO,OAAO,QAAe;CAC9C,MAAM,QAAQ,OAAO,OAAO;CAC5B,MAAM,OAAU,QAAwC,WACpD,OAAO,eAAe,QAAQ,CAAC,CAC3B,OAAO,QAAQ,OAAO,OAAO,QAAQ,KAAK,IAAI,UAC1C,MAAM,KAAK,KAAK,CAAC,CAAC,KAAK,OAAO,SAAS,MAAM,UAAU,KAAK,CAAC,CAAC,CAClE,GACA,EAAE,OAAO,CACb;CACJ,OAAO;EACH;EACA;EACA,aAAa,8BAA8B;GAAE,aAAa,QAAQ;GAAa;GAAK;EAAM,CAAC;CAC/F;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { makeLiveOntology } from "../live/LiveOntology.js";
2
+ export { makeLiveOntology };
@@ -0,0 +1 @@
1
+ export { makeLiveOntology } from "../live/LiveOntology.js";
@@ -0,0 +1,25 @@
1
+ import { LiveOntology } from "../live/LiveOntology.js";
2
+ import "../index.js";
3
+ import { ReplicaHostOptions } from "./host.js";
4
+ import { Effect, Tracer } from "effect";
5
+ import { TraceRecordingMode } from "@party-stack/runtime/tracing";
6
+ //#region src/runtime/live.d.ts
7
+ export type ReplicaLiveOptions = ReplicaHostOptions & {
8
+ readonly traceRecording?: TraceRecordingMode;
9
+ };
10
+ /** Native host acquisition with an independently configured tracer. No UI collections. */
11
+ export declare const makeReplicaResource: (options: ReplicaLiveOptions) => Effect.Effect<{
12
+ replica: import("@party-stack/ontology-replica").ReplicaService;
13
+ backend: import("@party-stack/ontology-backend").OntologyBackendService;
14
+ attachments: LiveOntology["attachments"];
15
+ traces: {
16
+ tracer: Tracer.Tracer;
17
+ getSnapshot: () => readonly import("@party-stack/runtime/tracing").TraceRecord[];
18
+ subscribe: (listener: (record?: import("@party-stack/runtime/tracing").TraceRecord) => void) => () => void;
19
+ clear: () => void;
20
+ } | undefined;
21
+ }, import("@party-stack/ontology-backend").BackendError<"Conflict" | "Forbidden" | "HistoryExpired" | "Internal" | "InvalidConfiguration" | "InvalidRequest" | "InvalidResponse" | "NotFound" | "NotImplemented" | "RateLimited" | "ResultExpired" | "SchemaMismatch" | "SessionExpired" | "SessionReplaced" | "SourceMismatch" | "Unauthenticated" | "Unavailable" | "ValidationFailed" | "ViewReplaced">, import("@party-stack/runtime").Runtime | import("effect/Scope").Scope>;
22
+ /** SDK view over a scoped native host. */
23
+ export declare const makeReplicaLiveOntology: (options: ReplicaLiveOptions) => Effect.Effect<Omit<LiveOntology<import("@party-stack/ontology-spec").OntologyDefinition>, "cleanup">, import("@party-stack/ontology-backend").BackendError<"Conflict" | "Forbidden" | "HistoryExpired" | "Internal" | "InvalidConfiguration" | "InvalidRequest" | "InvalidResponse" | "NotFound" | "NotImplemented" | "RateLimited" | "ResultExpired" | "SchemaMismatch" | "SessionExpired" | "SessionReplaced" | "SourceMismatch" | "Unauthenticated" | "Unavailable" | "ValidationFailed" | "ViewReplaced">, import("@party-stack/runtime").Runtime | import("effect/Scope").Scope>;
24
+ //#endregion
25
+ //# sourceMappingURL=live.d.ts.map