@party-stack/ontology 0.19.1 → 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 (356) 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 +30 -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 +4 -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 -33
  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 +54 -19
  156. package/lib/_virtual/_rolldown/runtime.js +0 -13
  157. package/lib/cli/format.d.ts +0 -4
  158. package/lib/cli/format.d.ts.map +0 -1
  159. package/lib/cli/format.js +0 -19
  160. package/lib/cli/format.js.map +0 -1
  161. package/lib/cli/generate.d.ts +0 -10
  162. package/lib/cli/generate.d.ts.map +0 -1
  163. package/lib/cli/generate.js +0 -108
  164. package/lib/cli/generate.js.map +0 -1
  165. package/lib/examples/blog.d.ts.map +0 -1
  166. package/lib/examples/blog.js.map +0 -1
  167. package/lib/generate/builders.d.ts +0 -12
  168. package/lib/generate/builders.d.ts.map +0 -1
  169. package/lib/generate/builders.js +0 -58
  170. package/lib/generate/builders.js.map +0 -1
  171. package/lib/generate/constants.d.ts +0 -5
  172. package/lib/generate/constants.d.ts.map +0 -1
  173. package/lib/generate/constants.js +0 -28
  174. package/lib/generate/constants.js.map +0 -1
  175. package/lib/generate/index.d.ts +0 -6
  176. package/lib/generate/index.js +0 -6
  177. package/lib/generate/live.d.ts +0 -12
  178. package/lib/generate/live.d.ts.map +0 -1
  179. package/lib/generate/live.js +0 -48
  180. package/lib/generate/live.js.map +0 -1
  181. package/lib/generate/ontology.d.ts +0 -8
  182. package/lib/generate/ontology.d.ts.map +0 -1
  183. package/lib/generate/ontology.js +0 -501
  184. package/lib/generate/ontology.js.map +0 -1
  185. package/lib/generate/types.d.ts +0 -17
  186. package/lib/generate/types.d.ts.map +0 -1
  187. package/lib/generate/types.js +0 -216
  188. package/lib/generate/types.js.map +0 -1
  189. package/lib/generate/utils/buildJsDocs.d.ts +0 -10
  190. package/lib/generate/utils/buildJsDocs.d.ts.map +0 -1
  191. package/lib/generate/utils/buildJsDocs.js +0 -16
  192. package/lib/generate/utils/buildJsDocs.js.map +0 -1
  193. package/lib/infer.d.ts +0 -222
  194. package/lib/infer.d.ts.map +0 -1
  195. package/lib/infer.js +0 -14
  196. package/lib/infer.js.map +0 -1
  197. package/lib/installation/createMetaOntologyConfiguration.d.ts +0 -10
  198. package/lib/installation/createMetaOntologyConfiguration.d.ts.map +0 -1
  199. package/lib/installation/createMetaOntologyConfiguration.js +0 -16
  200. package/lib/installation/createMetaOntologyConfiguration.js.map +0 -1
  201. package/lib/installation/createOntologyBackendInstallation.d.ts +0 -5
  202. package/lib/installation/createOntologyBackendInstallation.d.ts.map +0 -1
  203. package/lib/installation/createOntologyBackendInstallation.js +0 -221
  204. package/lib/installation/createOntologyBackendInstallation.js.map +0 -1
  205. package/lib/installation/index.d.ts +0 -4
  206. package/lib/installation/index.js +0 -3
  207. package/lib/installation/types.d.ts +0 -94
  208. package/lib/installation/types.d.ts.map +0 -1
  209. package/lib/ir/generated/builders.d.ts +0 -380
  210. package/lib/ir/generated/builders.d.ts.map +0 -1
  211. package/lib/ir/generated/builders.js +0 -186
  212. package/lib/ir/generated/builders.js.map +0 -1
  213. package/lib/ir/generated/constants.d.ts +0 -265
  214. package/lib/ir/generated/constants.d.ts.map +0 -1
  215. package/lib/ir/generated/constants.js +0 -165
  216. package/lib/ir/generated/constants.js.map +0 -1
  217. package/lib/ir/generated/types.d.ts +0 -416
  218. package/lib/ir/generated/types.d.ts.map +0 -1
  219. package/lib/ir/index.d.ts +0 -4
  220. package/lib/ir/index.js +0 -3
  221. package/lib/ir/schema.d.ts +0 -2246
  222. package/lib/ir/schema.d.ts.map +0 -1
  223. package/lib/ir/schema.js +0 -1187
  224. package/lib/ir/schema.js.map +0 -1
  225. package/lib/ir/validate.d.ts +0 -8
  226. package/lib/ir/validate.d.ts.map +0 -1
  227. package/lib/ir/validate.js +0 -623
  228. package/lib/ir/validate.js.map +0 -1
  229. package/lib/json/index.d.ts.map +0 -1
  230. package/lib/json/index.js.map +0 -1
  231. package/lib/lenses.d.ts +0 -21
  232. package/lib/lenses.d.ts.map +0 -1
  233. package/lib/lenses.js +0 -110
  234. package/lib/lenses.js.map +0 -1
  235. package/lib/live/OntologyBackendAdapter.d.ts +0 -100
  236. package/lib/live/OntologyBackendAdapter.d.ts.map +0 -1
  237. package/lib/live/OntologyBackendAdapter.js +0 -1
  238. package/lib/live/actions/createLiveOntologyActions.d.ts +0 -28
  239. package/lib/live/actions/createLiveOntologyActions.d.ts.map +0 -1
  240. package/lib/live/actions/createLiveOntologyActions.js +0 -139
  241. package/lib/live/actions/createLiveOntologyActions.js.map +0 -1
  242. package/lib/live/actions/prepareActionParameters.d.ts +0 -19
  243. package/lib/live/actions/prepareActionParameters.d.ts.map +0 -1
  244. package/lib/live/actions/prepareActionParameters.js +0 -213
  245. package/lib/live/actions/prepareActionParameters.js.map +0 -1
  246. package/lib/live/attachments/attachmentSources.d.ts +0 -10
  247. package/lib/live/attachments/attachmentSources.d.ts.map +0 -1
  248. package/lib/live/attachments/attachmentSources.js +0 -64
  249. package/lib/live/attachments/attachmentSources.js.map +0 -1
  250. package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.d.ts +0 -5
  251. package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.d.ts.map +0 -1
  252. package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.js +0 -6
  253. package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.js.map +0 -1
  254. package/lib/live/expression.d.ts +0 -23
  255. package/lib/live/expression.d.ts.map +0 -1
  256. package/lib/live/expression.js +0 -160
  257. package/lib/live/expression.js.map +0 -1
  258. package/lib/live/mutators/OntologyEdits.d.ts +0 -15
  259. package/lib/live/mutators/OntologyEdits.d.ts.map +0 -1
  260. package/lib/live/mutators/OntologyEdits.js +0 -65
  261. package/lib/live/mutators/OntologyEdits.js.map +0 -1
  262. package/lib/live/mutators/createMutatorTx.d.ts +0 -11
  263. package/lib/live/mutators/createMutatorTx.d.ts.map +0 -1
  264. package/lib/live/mutators/createMutatorTx.js +0 -61
  265. package/lib/live/mutators/createMutatorTx.js.map +0 -1
  266. package/lib/live/mutators/runOptimisticAction.d.ts +0 -19
  267. package/lib/live/mutators/runOptimisticAction.d.ts.map +0 -1
  268. package/lib/live/mutators/runOptimisticAction.js +0 -30
  269. package/lib/live/mutators/runOptimisticAction.js.map +0 -1
  270. package/lib/live/objects/OntologyObject.d.ts +0 -4
  271. package/lib/live/objects/OntologyObject.d.ts.map +0 -1
  272. package/lib/live/objects/OntologyObject.js +0 -1
  273. package/lib/live/objects/createLiveOntologyObjectCollection.d.ts +0 -17
  274. package/lib/live/objects/createLiveOntologyObjectCollection.d.ts.map +0 -1
  275. package/lib/live/objects/createLiveOntologyObjectCollection.js +0 -55
  276. package/lib/live/objects/createLiveOntologyObjectCollection.js.map +0 -1
  277. package/lib/live/objects/ontologyObjectCollectionId.d.ts +0 -4
  278. package/lib/live/objects/ontologyObjectCollectionId.d.ts.map +0 -1
  279. package/lib/live/objects/ontologyObjectCollectionId.js +0 -8
  280. package/lib/live/objects/ontologyObjectCollectionId.js.map +0 -1
  281. package/lib/live/outbox/createOntologyOutbox.d.ts +0 -23
  282. package/lib/live/outbox/createOntologyOutbox.d.ts.map +0 -1
  283. package/lib/live/outbox/createOntologyOutbox.js +0 -292
  284. package/lib/live/outbox/createOntologyOutbox.js.map +0 -1
  285. package/lib/live/outbox/leaderExecutor.d.ts +0 -20
  286. package/lib/live/outbox/leaderExecutor.d.ts.map +0 -1
  287. package/lib/live/outbox/leaderExecutor.js +0 -130
  288. package/lib/live/outbox/leaderExecutor.js.map +0 -1
  289. package/lib/live/outbox/outboxService.d.ts +0 -7
  290. package/lib/live/outbox/outboxService.d.ts.map +0 -1
  291. package/lib/live/outbox/outboxService.js +0 -68
  292. package/lib/live/outbox/outboxService.js.map +0 -1
  293. package/lib/live/outbox/projectionManager.d.ts +0 -31
  294. package/lib/live/outbox/projectionManager.d.ts.map +0 -1
  295. package/lib/live/outbox/projectionManager.js +0 -127
  296. package/lib/live/outbox/projectionManager.js.map +0 -1
  297. package/lib/live/outbox/repository.d.ts +0 -31
  298. package/lib/live/outbox/repository.d.ts.map +0 -1
  299. package/lib/live/outbox/repository.js +0 -196
  300. package/lib/live/outbox/repository.js.map +0 -1
  301. package/lib/live/outbox/service.d.ts +0 -61
  302. package/lib/live/outbox/service.d.ts.map +0 -1
  303. package/lib/live/outbox/service.js +0 -6
  304. package/lib/live/outbox/service.js.map +0 -1
  305. package/lib/live/outbox/types.js.map +0 -1
  306. package/lib/live/waitForCollectionReady.d.ts +0 -5
  307. package/lib/live/waitForCollectionReady.d.ts.map +0 -1
  308. package/lib/live/waitForCollectionReady.js +0 -49
  309. package/lib/live/waitForCollectionReady.js.map +0 -1
  310. package/lib/meta/createLocalMetaOntologyBackendAdapter.d.ts +0 -7
  311. package/lib/meta/createLocalMetaOntologyBackendAdapter.d.ts.map +0 -1
  312. package/lib/meta/createLocalMetaOntologyBackendAdapter.js +0 -44
  313. package/lib/meta/createLocalMetaOntologyBackendAdapter.js.map +0 -1
  314. package/lib/meta/generated/constants.d.ts +0 -265
  315. package/lib/meta/generated/constants.d.ts.map +0 -1
  316. package/lib/meta/generated/constants.js +0 -165
  317. package/lib/meta/generated/constants.js.map +0 -1
  318. package/lib/meta/generated/types.d.ts +0 -417
  319. package/lib/meta/generated/types.d.ts.map +0 -1
  320. package/lib/meta/generated/types.js +0 -1
  321. package/lib/meta/ontology.d.ts +0 -26
  322. package/lib/meta/ontology.d.ts.map +0 -1
  323. package/lib/meta/ontology.js +0 -111
  324. package/lib/meta/ontology.js.map +0 -1
  325. package/lib/utils/links.d.ts +0 -49
  326. package/lib/utils/links.d.ts.map +0 -1
  327. package/lib/utils/links.js +0 -13
  328. package/lib/utils/links.js.map +0 -1
  329. package/lib/utils/paths.d.ts +0 -6
  330. package/lib/utils/paths.d.ts.map +0 -1
  331. package/lib/utils/paths.js +0 -42
  332. package/lib/utils/paths.js.map +0 -1
  333. package/lib/utils/provide.d.ts +0 -4
  334. package/lib/utils/provide.d.ts.map +0 -1
  335. package/lib/utils/provide.js +0 -9
  336. package/lib/utils/provide.js.map +0 -1
  337. package/lib/utils/targets.d.ts +0 -37
  338. package/lib/utils/targets.d.ts.map +0 -1
  339. package/lib/utils/targets.js +0 -1
  340. package/lib/utils/typeNames.d.ts +0 -28
  341. package/lib/utils/typeNames.d.ts.map +0 -1
  342. package/lib/utils/typeNames.js +0 -1
  343. package/lib/utils/types.d.ts +0 -12
  344. package/lib/utils/types.d.ts.map +0 -1
  345. package/lib/utils/types.js +0 -48
  346. package/lib/utils/types.js.map +0 -1
  347. package/lib/utils/uncertain.d.ts +0 -11
  348. package/lib/utils/uncertain.d.ts.map +0 -1
  349. package/lib/utils/uncertain.js +0 -14
  350. package/lib/utils/uncertain.js.map +0 -1
  351. package/lib/utils/validation.d.ts +0 -7
  352. package/lib/utils/validation.d.ts.map +0 -1
  353. package/lib/utils/validation.js +0 -1
  354. package/lib/utils/values.d.ts.map +0 -1
  355. /package/lib/{installation → live/actions}/types.js +0 -0
  356. /package/lib/{ir/generated → live/objects}/types.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"expression.js","names":[],"sources":["../../src/live/expression.ts"],"sourcesContent":["import { eq } from \"@tanstack/db\";\nimport { Temporal } from \"temporal-polyfill\";\nimport { isLinkHopFromForeignKeySource, resolveLinkHop } from \"../utils/links.js\";\nimport { getAtPath } from \"../utils/paths.js\";\nimport { resolveType, unwrapType } from \"../utils/types.js\";\nimport type {\n Expression,\n ObjectTypeDef,\n OntologyIR,\n TypeDef,\n InputReferenceExpression,\n} from \"../ir/index.js\";\nimport type { OntologyReadTx } from \"./mutators/types.js\";\nimport type { OntologyObject } from \"./objects/OntologyObject.js\";\n\nfunction getActionType(ir: OntologyIR, actionTypeName: string) {\n return ir.actionTypes.find((actionType) => actionType.name === actionTypeName)!;\n}\n\ninterface EvaluateExpressionOptions {\n ir: OntologyIR;\n actionTypeName: string;\n expression: Expression;\n resolveParameter: (parameterName: string) => Promise<unknown>;\n context: Record<string, unknown>;\n tx: OntologyReadTx;\n}\n\nconst ontologyReference = Symbol(\"ontologyReference\");\nconst ontologyObject = Symbol(\"ontologyObject\");\n\ninterface EvaluatedObjectReference {\n [ontologyReference]: true;\n objectType: string;\n key: unknown;\n optional: boolean;\n}\n\ninterface EvaluatedOntologyObject {\n [ontologyObject]: true;\n objectType: string;\n value: OntologyObject;\n}\n\nfunction isEvaluatedObjectReference(value: unknown): value is EvaluatedObjectReference {\n return typeof value === \"object\" && value !== null && ontologyReference in value;\n}\n\nfunction isEvaluatedOntologyObject(value: unknown): value is EvaluatedOntologyObject {\n return typeof value === \"object\" && value !== null && ontologyObject in value;\n}\n\nfunction unwrapEvaluatedValue(value: unknown): unknown {\n if (isEvaluatedObjectReference(value)) return value.key;\n if (isEvaluatedOntologyObject(value)) return value.value;\n if (Array.isArray(value)) return value.map(unwrapEvaluatedValue);\n if (value !== null && typeof value === \"object\" && Object.getPrototypeOf(value) === Object.prototype) {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, unwrapEvaluatedValue(entry)])\n );\n }\n return value;\n}\n\nexport async function evaluateExpression(options: EvaluateExpressionOptions): Promise<unknown> {\n return unwrapEvaluatedValue(await evaluateExpressionWithLocals(options, new Map()));\n}\n\nasync function evaluateExpressionWithLocals(\n options: EvaluateExpressionOptions,\n locals: ReadonlyMap<string, unknown>\n): Promise<unknown> {\n const { ir, actionTypeName, expression, resolveParameter, context, tx } = options;\n\n switch (expression.kind) {\n case \"inputReference\": {\n const parameterValue = await resolveParameter(expression.value.name);\n const actionType = getActionType(ir, actionTypeName);\n const parameter = actionType.parameters.find(\n (candidate) => candidate.name === expression.value.name\n )!;\n const { type: parameterType, isOptional } = unwrapType(resolveType(ir, parameter.type));\n if (parameterType.kind === \"objectReference\") {\n return {\n [ontologyReference]: true,\n objectType: parameterType.value.objectType,\n key: parameterValue,\n optional: isOptional,\n };\n }\n return parameterValue;\n }\n case \"localReference\": {\n const { name } = expression.value;\n if (!locals.has(name)) {\n throw new Error(`Unknown expression binding \"${name}\".`);\n }\n return locals.get(name);\n }\n case \"contextReference\":\n return context[expression.value.name];\n case \"getAt\": {\n const source = await evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.source,\n },\n locals\n );\n if (isEvaluatedObjectReference(source)) {\n throw new Error(\n `Cannot access field \"${expression.value.path.join(\".\")}\" on an object reference without an object lookup.`\n );\n }\n return getAtPath(\n isEvaluatedOntologyObject(source) ? source.value : source,\n expression.value.path\n );\n }\n case \"objectLookup\": {\n const reference = await evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.reference,\n },\n locals\n );\n if (!isEvaluatedObjectReference(reference)) {\n throw new Error(\"Object lookup source must resolve to an object reference.\");\n }\n if (reference.key === undefined || reference.key === null) {\n return undefined;\n }\n const referencedType = ir.objectTypes.find(\n (candidate) => candidate.name === reference.objectType\n )!;\n const referencedObject = await tx.query<OntologyObject | undefined>((query, objects) =>\n query\n .from({\n object: objects[referencedType.name]!,\n })\n .where(({ object }) => eq(object[referencedType.primaryKey], reference.key))\n .select(({ object }) => object)\n .findOne()\n );\n if (!referencedObject && !reference.optional) {\n throw new Error(`Missing loaded \"${referencedType.name}\" object.`);\n }\n return referencedObject\n ? {\n [ontologyObject]: true,\n objectType: referencedType.name,\n value: referencedObject,\n }\n : undefined;\n }\n case \"linkHop\": {\n const source = await evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.source,\n },\n locals\n );\n if (!isEvaluatedOntologyObject(source)) {\n throw new Error(\"Link hop source must resolve to an ontology object.\");\n }\n const link = resolveLinkHop(ir, source.objectType, expression.value.link);\n if (!link) {\n throw new Error(\n `Unknown link \"${expression.value.link}\" on object type \"${source.objectType}\".`\n );\n }\n const foreignKeyOnSource = isLinkHopFromForeignKeySource(\n link,\n source.objectType,\n expression.value.link\n );\n const cardinality = foreignKeyOnSource ? \"one\" : link.cardinality;\n if (cardinality === \"many\") {\n throw new Error(\n `Link \"${expression.value.link}\" on object type \"${source.objectType}\" is to-many.`\n );\n }\n const sourceType = ir.objectTypes.find((candidate) => candidate.name === source.objectType)!;\n const targetType = ir.objectTypes.find(\n (candidate) =>\n candidate.name === (foreignKeyOnSource ? link.target.objectType : link.source.objectType)\n )!;\n const foreignKeyPath = link.foreignKey.split(\".\");\n const sourceKey = foreignKeyOnSource\n ? getAtPath(source.value, foreignKeyPath)\n : source.value[sourceType.primaryKey];\n if (sourceKey === undefined || sourceKey === null) {\n return undefined;\n }\n const targetProperty = foreignKeyOnSource ? targetType.primaryKey : link.foreignKey;\n const linkedObject = await tx.query<OntologyObject | undefined>((query, objects) =>\n query\n .from({\n object: objects[targetType.name]!,\n })\n .where(({ object }) => eq(object[targetProperty], sourceKey))\n .select(({ object }) => object)\n .findOne()\n );\n return linkedObject\n ? {\n [ontologyObject]: true,\n objectType: targetType.name,\n value: linkedObject,\n }\n : undefined;\n }\n case \"struct\": {\n const fields = await Promise.all(\n expression.value.fields.map(\n async (field) =>\n [\n field.name,\n await evaluateExpressionWithLocals(\n {\n ...options,\n expression: field.value,\n },\n locals\n ),\n ] as const\n )\n );\n return Object.fromEntries(fields);\n }\n case \"map\": {\n const source = await evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.source,\n },\n locals\n );\n if (source === undefined) {\n return undefined;\n }\n if (!Array.isArray(source)) {\n throw new Error(\"Map expression source must resolve to a list.\");\n }\n return Promise.all(\n source.map((item) => {\n const itemLocals = new Map(locals);\n itemLocals.set(expression.value.binding, item);\n return evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.body,\n },\n itemLocals\n );\n })\n );\n }\n case \"literal\":\n return expression.value.value;\n case \"uuid\":\n return globalThis.crypto.randomUUID();\n case \"now\":\n return Temporal.Now.instant();\n }\n}\n\nexport async function resolveActionParameters(options: {\n ir: OntologyIR;\n actionTypeName: string;\n initialParameters: Record<string, unknown>;\n context: Record<string, unknown>;\n tx: OntologyReadTx;\n}): Promise<Record<string, unknown>> {\n const action = getActionType(options.ir, options.actionTypeName);\n const resolvedParameters = {\n ...options.initialParameters,\n };\n const parametersByName = new Map(action.parameters.map((parameter) => [parameter.name, parameter]));\n const resolving = new Set<string>();\n\n const resolveParameter = async (parameterName: string): Promise<unknown> => {\n if (resolvedParameters[parameterName] !== undefined) {\n return resolvedParameters[parameterName];\n }\n const parameter = parametersByName.get(parameterName);\n if (!parameter?.defaultValue) return undefined;\n if (resolving.has(parameterName)) {\n throw new Error(`Circular action parameter default for \"${parameterName}\".`);\n }\n\n resolving.add(parameterName);\n try {\n resolvedParameters[parameterName] = await evaluateExpression({\n ir: options.ir,\n actionTypeName: options.actionTypeName,\n expression: parameter.defaultValue,\n resolveParameter,\n context: options.context,\n tx: options.tx,\n });\n return resolvedParameters[parameterName];\n } finally {\n resolving.delete(parameterName);\n }\n };\n\n for (const parameter of action.parameters) {\n await resolveParameter(parameter.name);\n }\n return resolvedParameters;\n}\n\nexport function getObjectReferenceObjectType(\n ir: OntologyIR,\n actionTypeName: string,\n reference: InputReferenceExpression\n): ObjectTypeDef {\n const actionType = getActionType(ir, actionTypeName);\n const parameter = actionType.parameters.find((candidate) => candidate.name === reference.name)!;\n const resolvedType = unwrapType(resolveType(ir, parameter.type)).type as Extract<\n TypeDef,\n { kind: \"objectReference\" }\n >;\n return ir.objectTypes.find((candidate) => candidate.name === resolvedType.value.objectType)!;\n}\n"],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { OntologyIR } from "../../ir/generated/types.js";
2
- import "../../ir/index.js";
3
- import { OntologyMutatorObjects, OntologyMutatorTx } from "./types.js";
4
- //#region src/live/mutators/OntologyEdits.d.ts
5
- export declare function applyActionLogicToMutatorTx(options: {
6
- ir: OntologyIR;
7
- actionTypeName: string;
8
- parameters: Record<string, unknown>;
9
- context: Record<string, unknown>;
10
- idempotencyKey?: string;
11
- objects: OntologyMutatorObjects;
12
- tx: OntologyMutatorTx;
13
- }): Promise<void>;
14
- //#endregion
15
- //# sourceMappingURL=OntologyEdits.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OntologyEdits.d.ts","names":[],"sources":["../../../src/live/mutators/OntologyEdits.ts"],"mappings":";;;;wBA8CsB,4BAA4B;EAC9C,IAAI;EACJ;EACA,YAAY;EACZ,SAAS;EACT;EACA,SAAS;EACT,IAAI;IACJ"}
@@ -1,65 +0,0 @@
1
- import { unwrapValueType } from "../../utils/types.js";
2
- import { setAtPath } from "../../utils/paths.js";
3
- import { evaluateExpression, getObjectReferenceObjectType } from "../expression.js";
4
- import { decorateObjectAttachmentSources } from "../attachments/attachmentSources.js";
5
- //#region src/live/mutators/OntologyEdits.ts
6
- function objectType(ir, name) {
7
- const type = ir.objectTypes.find((candidate) => candidate.name === name);
8
- if (!type) throw new Error(`Unknown object type "${name}".`);
9
- return type;
10
- }
11
- async function propertyChanges(options) {
12
- const changes = [];
13
- for (const assignment of options.assignments) {
14
- const value = await evaluateExpression({
15
- ir: options.ir,
16
- actionTypeName: options.actionTypeName,
17
- expression: assignment.value,
18
- resolveParameter: (name) => Promise.resolve(options.parameters[name]),
19
- context: options.context,
20
- tx: options.tx
21
- });
22
- if (value !== void 0) changes.push({
23
- path: assignment.property,
24
- value
25
- });
26
- }
27
- return changes;
28
- }
29
- async function applyActionLogicToMutatorTx(options) {
30
- const action = options.ir.actionTypes.find((candidate) => candidate.name === options.actionTypeName);
31
- if (!action) throw new Error(`Unknown action "${options.actionTypeName}".`);
32
- for (const [stepIndex, step] of action.logic.entries()) {
33
- if (step.kind === "createObject") {
34
- const type = objectType(options.ir, step.value.objectType);
35
- let object = {};
36
- for (const change of await propertyChanges({
37
- ...options,
38
- assignments: step.value.values
39
- })) object = setAtPath(object, change.path, change.value);
40
- decorateObjectAttachmentSources({
41
- ir: options.ir,
42
- objectType: type,
43
- object
44
- });
45
- if (object[type.primaryKey] === void 0) {
46
- const primaryKey = type.properties.find((property) => property.name === type.primaryKey);
47
- if (!options.idempotencyKey || !primaryKey || unwrapValueType(options.ir, primaryKey.type).kind !== "string") continue;
48
- object[type.primaryKey] = `optimistic:${options.idempotencyKey}:${type.name}:${stepIndex}`;
49
- }
50
- await options.tx.mutate[type.name].create(object);
51
- continue;
52
- }
53
- const type = getObjectReferenceObjectType(options.ir, options.actionTypeName, step.value.object);
54
- const key = options.parameters[step.value.object.name];
55
- if (step.kind === "updateObject") await options.tx.mutate[type.name].update(key, await propertyChanges({
56
- ...options,
57
- assignments: step.value.values
58
- }));
59
- else await options.tx.mutate[type.name].delete(key);
60
- }
61
- }
62
- //#endregion
63
- export { applyActionLogicToMutatorTx };
64
-
65
- //# sourceMappingURL=OntologyEdits.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OntologyEdits.js","names":[],"sources":["../../../src/live/mutators/OntologyEdits.ts"],"sourcesContent":["import { setAtPath } from \"../../utils/paths.js\";\nimport { unwrapValueType } from \"../../utils/types.js\";\nimport { decorateObjectAttachmentSources } from \"../attachments/attachmentSources.js\";\nimport { evaluateExpression, getObjectReferenceObjectType } from \"../expression.js\";\nimport type { ObjectTypeDef, OntologyIR, PropertyAssignment } from \"../../ir/index.js\";\nimport type {\n OntologyMutatorObjects,\n OntologyMutatorTx,\n OntologyPropertyChange,\n OntologyReadTx,\n} from \"./types.js\";\n\nfunction objectType(ir: OntologyIR, name: string): ObjectTypeDef {\n const type = ir.objectTypes.find((candidate) => candidate.name === name);\n if (!type) throw new Error(`Unknown object type \"${name}\".`);\n return type;\n}\n\nasync function propertyChanges(options: {\n ir: OntologyIR;\n actionTypeName: string;\n assignments: PropertyAssignment[];\n parameters: Record<string, unknown>;\n context: Record<string, unknown>;\n tx: OntologyReadTx;\n}): Promise<OntologyPropertyChange[]> {\n const changes: OntologyPropertyChange[] = [];\n for (const assignment of options.assignments) {\n const value = await evaluateExpression({\n ir: options.ir,\n actionTypeName: options.actionTypeName,\n expression: assignment.value,\n resolveParameter: (name) => Promise.resolve(options.parameters[name]),\n context: options.context,\n tx: options.tx,\n });\n if (value !== undefined) {\n changes.push({\n path: assignment.property,\n value,\n });\n }\n }\n return changes;\n}\n\nexport async function applyActionLogicToMutatorTx(options: {\n ir: OntologyIR;\n actionTypeName: string;\n parameters: Record<string, unknown>;\n context: Record<string, unknown>;\n idempotencyKey?: string;\n objects: OntologyMutatorObjects;\n tx: OntologyMutatorTx;\n}): Promise<void> {\n const action = options.ir.actionTypes.find((candidate) => candidate.name === options.actionTypeName);\n if (!action) {\n throw new Error(`Unknown action \"${options.actionTypeName}\".`);\n }\n\n for (const [stepIndex, step] of action.logic.entries()) {\n if (step.kind === \"createObject\") {\n const type = objectType(options.ir, step.value.objectType);\n let object: Record<string, unknown> = {};\n for (const change of await propertyChanges({\n ...options,\n assignments: step.value.values,\n })) {\n object = setAtPath(object, change.path, change.value);\n }\n decorateObjectAttachmentSources({\n ir: options.ir,\n objectType: type,\n object,\n });\n if (object[type.primaryKey] === undefined) {\n const primaryKey = type.properties.find((property) => property.name === type.primaryKey);\n if (\n !options.idempotencyKey ||\n !primaryKey ||\n unwrapValueType(options.ir, primaryKey.type).kind !== \"string\"\n ) {\n continue;\n }\n // Temporary view key for backend-assigned IDs. This is stable\n // across outbox projection replay, but it cannot support\n // dependent edits until local-to-remote view-key mapping exists.\n object[type.primaryKey] = `optimistic:${options.idempotencyKey}:${type.name}:${stepIndex}`;\n }\n await options.tx.mutate[type.name]!.create(object);\n continue;\n }\n\n const type = getObjectReferenceObjectType(options.ir, options.actionTypeName, step.value.object);\n const key = options.parameters[step.value.object.name] as string | number;\n if (step.kind === \"updateObject\") {\n await options.tx.mutate[type.name]!.update(\n key,\n await propertyChanges({\n ...options,\n assignments: step.value.values,\n })\n );\n } else {\n await options.tx.mutate[type.name]!.delete(key);\n }\n }\n}\n"],"mappings":";;;;;AAYA,SAAS,WAAW,IAAgB,MAA6B;CAC7D,MAAM,OAAO,GAAG,YAAY,MAAM,cAAc,UAAU,SAAS,IAAI;CACvE,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,wBAAwB,KAAK,GAAG;CAC3D,OAAO;AACX;AAEA,eAAe,gBAAgB,SAOO;CAClC,MAAM,UAAoC,CAAC;CAC3C,KAAK,MAAM,cAAc,QAAQ,aAAa;EAC1C,MAAM,QAAQ,MAAM,mBAAmB;GACnC,IAAI,QAAQ;GACZ,gBAAgB,QAAQ;GACxB,YAAY,WAAW;GACvB,mBAAmB,SAAS,QAAQ,QAAQ,QAAQ,WAAW,KAAK;GACpE,SAAS,QAAQ;GACjB,IAAI,QAAQ;EAChB,CAAC;EACD,IAAI,UAAU,KAAA,GACV,QAAQ,KAAK;GACT,MAAM,WAAW;GACjB;EACJ,CAAC;CAET;CACA,OAAO;AACX;AAEA,eAAsB,4BAA4B,SAQhC;CACd,MAAM,SAAS,QAAQ,GAAG,YAAY,MAAM,cAAc,UAAU,SAAS,QAAQ,cAAc;CACnG,IAAI,CAAC,QACD,MAAM,IAAI,MAAM,mBAAmB,QAAQ,eAAe,GAAG;CAGjE,KAAK,MAAM,CAAC,WAAW,SAAS,OAAO,MAAM,QAAQ,GAAG;EACpD,IAAI,KAAK,SAAS,gBAAgB;GAC9B,MAAM,OAAO,WAAW,QAAQ,IAAI,KAAK,MAAM,UAAU;GACzD,IAAI,SAAkC,CAAC;GACvC,KAAK,MAAM,UAAU,MAAM,gBAAgB;IACvC,GAAG;IACH,aAAa,KAAK,MAAM;GAC5B,CAAC,GACG,SAAS,UAAU,QAAQ,OAAO,MAAM,OAAO,KAAK;GAExD,gCAAgC;IAC5B,IAAI,QAAQ;IACZ,YAAY;IACZ;GACJ,CAAC;GACD,IAAI,OAAO,KAAK,gBAAgB,KAAA,GAAW;IACvC,MAAM,aAAa,KAAK,WAAW,MAAM,aAAa,SAAS,SAAS,KAAK,UAAU;IACvF,IACI,CAAC,QAAQ,kBACT,CAAC,cACD,gBAAgB,QAAQ,IAAI,WAAW,IAAI,CAAC,CAAC,SAAS,UAEtD;IAKJ,OAAO,KAAK,cAAc,cAAc,QAAQ,eAAe,GAAG,KAAK,KAAK,GAAG;GACnF;GACA,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,CAAE,OAAO,MAAM;GACjD;EACJ;EAEA,MAAM,OAAO,6BAA6B,QAAQ,IAAI,QAAQ,gBAAgB,KAAK,MAAM,MAAM;EAC/F,MAAM,MAAM,QAAQ,WAAW,KAAK,MAAM,OAAO;EACjD,IAAI,KAAK,SAAS,gBACd,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,CAAE,OAChC,KACA,MAAM,gBAAgB;GAClB,GAAG;GACH,aAAa,KAAK,MAAM;EAC5B,CAAC,CACL;OAEA,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,CAAE,OAAO,GAAG;CAEtD;AACJ"}
@@ -1,11 +0,0 @@
1
- import { OntologyMutatorObjects, OntologyMutatorTx, OntologyReadTx } from "./types.js";
2
- import { Transaction } from "@tanstack/db";
3
- //#region src/live/mutators/createMutatorTx.d.ts
4
- export declare function createReadTx(objects: OntologyMutatorObjects): OntologyReadTx;
5
- export declare function createMutatorTx(options: {
6
- transaction: Transaction;
7
- objects: OntologyMutatorObjects;
8
- primaryKeys?: Record<string, string>;
9
- }): OntologyMutatorTx;
10
- //#endregion
11
- //# sourceMappingURL=createMutatorTx.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createMutatorTx.d.ts","names":[],"sources":["../../../src/live/mutators/createMutatorTx.ts"],"mappings":";;;wBASgB,aAAa,SAAS,yBAAyB;wBAM/C,gBAAgB;EAC5B,aAAa;EACb,SAAS;EACT,cAAc;IACd"}
@@ -1,61 +0,0 @@
1
- import { setAtPath } from "../../utils/paths.js";
2
- import { eq, queryOnce } from "@tanstack/db";
3
- //#region src/live/mutators/createMutatorTx.ts
4
- function createReadTx(objects) {
5
- return { query: (build) => queryOnce((query) => build(query, objects)) };
6
- }
7
- function createMutatorTx(options) {
8
- return {
9
- ...createReadTx(options.objects),
10
- mutate: new Proxy({}, { get: (_target, objectType) => {
11
- if (typeof objectType !== "string") return;
12
- const collection = options.objects[objectType];
13
- if (!collection) throw new Error(`Unknown object type "${objectType}".`);
14
- return {
15
- create: (object) => {
16
- options.transaction.mutate(() => {
17
- collection.insert(object);
18
- });
19
- return Promise.resolve();
20
- },
21
- update: async (key, changes) => {
22
- await ensureObjectLoaded(collection, objectType, options.primaryKeys, key);
23
- options.transaction.mutate(() => {
24
- collection.update(key, (draft) => {
25
- applyChanges(draft, changes);
26
- });
27
- });
28
- },
29
- delete: async (key) => {
30
- await ensureObjectLoaded(collection, objectType, options.primaryKeys, key);
31
- options.transaction.mutate(() => {
32
- collection.delete(key);
33
- });
34
- }
35
- };
36
- } })
37
- };
38
- }
39
- async function ensureObjectLoaded(collection, objectType, primaryKeys, key) {
40
- if (collection.has(key)) return;
41
- const primaryKey = primaryKeys?.[objectType];
42
- if (!primaryKey) return;
43
- await queryOnce((query) => query.from({ object: collection }).where(({ object }) => eq(object[primaryKey], key)).findOne());
44
- }
45
- function applyChanges(object, changes) {
46
- if (Array.isArray(changes)) {
47
- let updated = { ...object };
48
- const changedProperties = /* @__PURE__ */ new Set();
49
- for (const change of changes) {
50
- const [property] = change.path;
51
- if (property === void 0) throw new Error("Ontology property change paths must not be empty.");
52
- updated = setAtPath(updated, change.path, change.value);
53
- changedProperties.add(property);
54
- }
55
- for (const property of changedProperties) object[property] = updated[property];
56
- } else Object.assign(object, changes);
57
- }
58
- //#endregion
59
- export { createMutatorTx, createReadTx };
60
-
61
- //# sourceMappingURL=createMutatorTx.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createMutatorTx.js","names":[],"sources":["../../../src/live/mutators/createMutatorTx.ts"],"sourcesContent":["import { eq, queryOnce, type Collection, type Transaction } from \"@tanstack/db\";\nimport { setAtPath } from \"../../utils/paths.js\";\nimport type {\n OntologyMutatorObjects,\n OntologyMutatorTx,\n OntologyPropertyChange,\n OntologyReadTx,\n} from \"./types.js\";\n\nexport function createReadTx(objects: OntologyMutatorObjects): OntologyReadTx {\n return {\n query: (build) => queryOnce((query) => build(query, objects) as never),\n };\n}\n\nexport function createMutatorTx(options: {\n transaction: Transaction;\n objects: OntologyMutatorObjects;\n primaryKeys?: Record<string, string>;\n}): OntologyMutatorTx {\n return {\n ...createReadTx(options.objects),\n mutate: new Proxy(\n {},\n {\n get: (_target, objectType) => {\n if (typeof objectType !== \"string\") {\n return undefined;\n }\n const collection = options.objects[objectType];\n if (!collection) {\n throw new Error(`Unknown object type \"${objectType}\".`);\n }\n return {\n create: (object: Record<string, unknown>) => {\n options.transaction.mutate(() => {\n collection.insert(object);\n });\n return Promise.resolve();\n },\n update: async (\n key: string | number,\n changes: Record<string, unknown> | OntologyPropertyChange[]\n ) => {\n await ensureObjectLoaded(collection, objectType, options.primaryKeys, key);\n options.transaction.mutate(() => {\n collection.update(key, (draft) => {\n applyChanges(draft, changes);\n });\n });\n },\n delete: async (key: string | number) => {\n await ensureObjectLoaded(collection, objectType, options.primaryKeys, key);\n options.transaction.mutate(() => {\n collection.delete(key);\n });\n },\n };\n },\n }\n ),\n };\n}\n\nasync function ensureObjectLoaded(\n collection: Collection<Record<string, unknown>, string | number>,\n objectType: string,\n primaryKeys: Record<string, string> | undefined,\n key: string | number\n): Promise<void> {\n if (collection.has(key)) return;\n const primaryKey = primaryKeys?.[objectType];\n if (!primaryKey) return;\n\n await queryOnce((query) =>\n query\n .from({ object: collection })\n .where(({ object }) => eq(object[primaryKey], key))\n .findOne()\n );\n}\n\nfunction applyChanges(\n object: Record<string, unknown>,\n changes: Record<string, unknown> | OntologyPropertyChange[]\n): void {\n if (Array.isArray(changes)) {\n let updated = { ...object };\n const changedProperties = new Set<string>();\n for (const change of changes) {\n const [property] = change.path;\n if (property === undefined) {\n throw new Error(\"Ontology property change paths must not be empty.\");\n }\n updated = setAtPath(updated, change.path, change.value);\n changedProperties.add(property);\n }\n for (const property of changedProperties) {\n object[property] = updated[property];\n }\n } else {\n Object.assign(object, changes);\n }\n}\n"],"mappings":";;;AASA,SAAgB,aAAa,SAAiD;CAC1E,OAAO,EACH,QAAQ,UAAU,WAAW,UAAU,MAAM,OAAO,OAAO,CAAU,EACzE;AACJ;AAEA,SAAgB,gBAAgB,SAIV;CAClB,OAAO;EACH,GAAG,aAAa,QAAQ,OAAO;EAC/B,QAAQ,IAAI,MACR,CAAC,GACD,EACI,MAAM,SAAS,eAAe;GAC1B,IAAI,OAAO,eAAe,UACtB;GAEJ,MAAM,aAAa,QAAQ,QAAQ;GACnC,IAAI,CAAC,YACD,MAAM,IAAI,MAAM,wBAAwB,WAAW,GAAG;GAE1D,OAAO;IACH,SAAS,WAAoC;KACzC,QAAQ,YAAY,aAAa;MAC7B,WAAW,OAAO,MAAM;KAC5B,CAAC;KACD,OAAO,QAAQ,QAAQ;IAC3B;IACA,QAAQ,OACJ,KACA,YACC;KACD,MAAM,mBAAmB,YAAY,YAAY,QAAQ,aAAa,GAAG;KACzE,QAAQ,YAAY,aAAa;MAC7B,WAAW,OAAO,MAAM,UAAU;OAC9B,aAAa,OAAO,OAAO;MAC/B,CAAC;KACL,CAAC;IACL;IACA,QAAQ,OAAO,QAAyB;KACpC,MAAM,mBAAmB,YAAY,YAAY,QAAQ,aAAa,GAAG;KACzE,QAAQ,YAAY,aAAa;MAC7B,WAAW,OAAO,GAAG;KACzB,CAAC;IACL;GACJ;EACJ,EACJ,CACJ;CACJ;AACJ;AAEA,eAAe,mBACX,YACA,YACA,aACA,KACa;CACb,IAAI,WAAW,IAAI,GAAG,GAAG;CACzB,MAAM,aAAa,cAAc;CACjC,IAAI,CAAC,YAAY;CAEjB,MAAM,WAAW,UACb,MACK,KAAK,EAAE,QAAQ,WAAW,CAAC,CAAC,CAC5B,OAAO,EAAE,aAAa,GAAG,OAAO,aAAa,GAAG,CAAC,CAAC,CAClD,QAAQ,CACjB;AACJ;AAEA,SAAS,aACL,QACA,SACI;CACJ,IAAI,MAAM,QAAQ,OAAO,GAAG;EACxB,IAAI,UAAU,EAAE,GAAG,OAAO;EAC1B,MAAM,oCAAoB,IAAI,IAAY;EAC1C,KAAK,MAAM,UAAU,SAAS;GAC1B,MAAM,CAAC,YAAY,OAAO;GAC1B,IAAI,aAAa,KAAA,GACb,MAAM,IAAI,MAAM,mDAAmD;GAEvE,UAAU,UAAU,SAAS,OAAO,MAAM,OAAO,KAAK;GACtD,kBAAkB,IAAI,QAAQ;EAClC;EACA,KAAK,MAAM,YAAY,mBACnB,OAAO,YAAY,QAAQ;CAEnC,OACI,OAAO,OAAO,QAAQ,OAAO;AAErC"}
@@ -1,19 +0,0 @@
1
- import { OntologyIR } from "../../ir/generated/types.js";
2
- import "../../ir/index.js";
3
- import { OntologyObject } from "../objects/OntologyObject.js";
4
- import { OntologyCollection } from "../objects/createLiveOntologyObjectCollection.js";
5
- import { OntologyMutatorRegistry } from "./types.js";
6
- import { Transaction } from "@tanstack/db";
7
- //#region src/live/mutators/runOptimisticAction.d.ts
8
- export declare function runOptimisticAction(options: {
9
- transaction: Transaction;
10
- ir: OntologyIR;
11
- actionTypeName: string;
12
- parameters: Record<string, unknown>;
13
- context: Record<string, unknown>;
14
- idempotencyKey: string;
15
- objects: Record<string, OntologyCollection<OntologyObject>>;
16
- mutators?: OntologyMutatorRegistry;
17
- }): Promise<void>;
18
- //#endregion
19
- //# sourceMappingURL=runOptimisticAction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runOptimisticAction.d.ts","names":[],"sources":["../../../src/live/mutators/runOptimisticAction.ts"],"mappings":";;;;;;;wBAQsB,oBAAoB;EACtC,aAAa;EACb,IAAI;EACJ;EACA,YAAY;EACZ,SAAS;EACT;EACA,SAAS,eAAe,mBAAmB;EAC3C,WAAW;IACX"}
@@ -1,30 +0,0 @@
1
- import { createMutatorTx } from "./createMutatorTx.js";
2
- import { applyActionLogicToMutatorTx } from "./OntologyEdits.js";
3
- //#region src/live/mutators/runOptimisticAction.ts
4
- async function runOptimisticAction(options) {
5
- const tx = createMutatorTx({
6
- transaction: options.transaction,
7
- objects: options.objects,
8
- primaryKeys: Object.fromEntries(options.ir.objectTypes.map((objectType) => [objectType.name, objectType.primaryKey]))
9
- });
10
- await applyActionLogicToMutatorTx({
11
- ir: options.ir,
12
- actionTypeName: options.actionTypeName,
13
- parameters: options.parameters,
14
- context: options.context,
15
- idempotencyKey: options.idempotencyKey,
16
- objects: options.objects,
17
- tx
18
- });
19
- const mutator = options.mutators?.[options.actionTypeName];
20
- if (!mutator) return;
21
- await mutator({
22
- tx,
23
- args: options.parameters,
24
- context: options.context
25
- });
26
- }
27
- //#endregion
28
- export { runOptimisticAction };
29
-
30
- //# sourceMappingURL=runOptimisticAction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runOptimisticAction.js","names":[],"sources":["../../../src/live/mutators/runOptimisticAction.ts"],"sourcesContent":["import { createMutatorTx } from \"./createMutatorTx.js\";\nimport { applyActionLogicToMutatorTx } from \"./OntologyEdits.js\";\nimport type { OntologyIR } from \"../../ir/index.js\";\nimport type { OntologyCollection } from \"../objects/createLiveOntologyObjectCollection.js\";\nimport type { OntologyObject } from \"../objects/OntologyObject.js\";\nimport type { OntologyMutatorRegistry } from \"./types.js\";\nimport type { Transaction } from \"@tanstack/db\";\n\nexport async function runOptimisticAction(options: {\n transaction: Transaction;\n ir: OntologyIR;\n actionTypeName: string;\n parameters: Record<string, unknown>;\n context: Record<string, unknown>;\n idempotencyKey: string;\n objects: Record<string, OntologyCollection<OntologyObject>>;\n mutators?: OntologyMutatorRegistry;\n}): Promise<void> {\n const tx = createMutatorTx({\n transaction: options.transaction,\n objects: options.objects,\n primaryKeys: Object.fromEntries(\n options.ir.objectTypes.map((objectType) => [objectType.name, objectType.primaryKey])\n ),\n });\n await applyActionLogicToMutatorTx({\n ir: options.ir,\n actionTypeName: options.actionTypeName,\n parameters: options.parameters,\n context: options.context,\n idempotencyKey: options.idempotencyKey,\n objects: options.objects,\n tx,\n });\n\n const mutator = options.mutators?.[options.actionTypeName];\n if (!mutator) return;\n\n await mutator({\n tx,\n args: options.parameters,\n context: options.context,\n });\n}\n"],"mappings":";;;AAQA,eAAsB,oBAAoB,SASxB;CACd,MAAM,KAAK,gBAAgB;EACvB,aAAa,QAAQ;EACrB,SAAS,QAAQ;EACjB,aAAa,OAAO,YAChB,QAAQ,GAAG,YAAY,KAAK,eAAe,CAAC,WAAW,MAAM,WAAW,UAAU,CAAC,CACvF;CACJ,CAAC;CACD,MAAM,4BAA4B;EAC9B,IAAI,QAAQ;EACZ,gBAAgB,QAAQ;EACxB,YAAY,QAAQ;EACpB,SAAS,QAAQ;EACjB,gBAAgB,QAAQ;EACxB,SAAS,QAAQ;EACjB;CACJ,CAAC;CAED,MAAM,UAAU,QAAQ,WAAW,QAAQ;CAC3C,IAAI,CAAC,SAAS;CAEd,MAAM,QAAQ;EACV;EACA,MAAM,QAAQ;EACd,SAAS,QAAQ;CACrB,CAAC;AACL"}
@@ -1,4 +0,0 @@
1
- //#region src/live/objects/OntologyObject.d.ts
2
- export type OntologyObject = Record<string, unknown>;
3
- //#endregion
4
- //# sourceMappingURL=OntologyObject.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OntologyObject.d.ts","names":[],"sources":["../../../src/live/objects/OntologyObject.ts"],"mappings":";YAAY,iBAAiB"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,17 +0,0 @@
1
- import { OntologyIR } from "../../ir/generated/types.js";
2
- import "../../ir/index.js";
3
- import { OntologyBackendAdapter } from "../OntologyBackendAdapter.js";
4
- import { OntologyObject } from "./OntologyObject.js";
5
- import { RuntimeAdapter } from "@party-stack/runtime";
6
- import { Collection } from "@tanstack/db";
7
- //#region src/live/objects/createLiveOntologyObjectCollection.d.ts
8
- export type OntologyCollection<T extends OntologyObject> = Collection<T>;
9
- export declare function createLiveOntologyObjectCollection(opts: {
10
- ir: OntologyIR;
11
- objectType: OntologyIR["objectTypes"][number];
12
- backendAdapter: OntologyBackendAdapter;
13
- runtime: RuntimeAdapter;
14
- persistObjects: boolean;
15
- }): OntologyCollection<OntologyObject>;
16
- //#endregion
17
- //# sourceMappingURL=createLiveOntologyObjectCollection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createLiveOntologyObjectCollection.d.ts","names":[],"sources":["../../../src/live/objects/createLiveOntologyObjectCollection.ts"],"mappings":";;;;;;;YASY,mBAAmB,UAAU,kBAAkB,WAAW;wBAiCtD,mCAAmC;EAC/C,IAAI;EACJ,YAAY;EACZ,gBAAgB;EAChB,SAAS;EACT;IACA,mBAAmB"}
@@ -1,55 +0,0 @@
1
- import { decorateObjectAttachmentSources } from "../attachments/attachmentSources.js";
2
- import { ontologyObjectCollectionId } from "./ontologyObjectCollectionId.js";
3
- import { createCollectionPersistence } from "@party-stack/runtime";
4
- import { BasicIndex, createCollection } from "@tanstack/db";
5
- import { persistedCollectionOptions } from "@tanstack/db-sqlite-persistence-core";
6
- //#region src/live/objects/createLiveOntologyObjectCollection.ts
7
- function decorateCollectionSync(opts) {
8
- return {
9
- ...opts.collectionOptions,
10
- sync: {
11
- ...opts.collectionOptions.sync,
12
- sync: (syncParams) => opts.collectionOptions.sync.sync({
13
- ...syncParams,
14
- write: (message) => {
15
- if (message.type === "delete") {
16
- syncParams.write(message);
17
- return;
18
- }
19
- syncParams.write({
20
- ...message,
21
- value: decorateObjectAttachmentSources({
22
- ir: opts.ir,
23
- objectType: opts.objectType,
24
- object: message.value
25
- })
26
- });
27
- }
28
- })
29
- }
30
- };
31
- }
32
- function createLiveOntologyObjectCollection(opts) {
33
- const options = {
34
- ...decorateCollectionSync({
35
- ir: opts.ir,
36
- objectType: opts.objectType,
37
- collectionOptions: opts.backendAdapter.getCollectionOptions(opts.objectType.name)
38
- }),
39
- id: ontologyObjectCollectionId(opts.runtime.owner, opts.runtime.namespace, opts.objectType.name),
40
- defaultIndexType: BasicIndex,
41
- autoIndex: "eager",
42
- getKey: (object) => object[opts.objectType.primaryKey]
43
- };
44
- if (!opts.persistObjects) return createCollection(options);
45
- if (!opts.runtime.persistence) throw new Error(`Live ontology object persistence requires a runtime persistence adapter (${opts.objectType.name}).`);
46
- return createCollection(persistedCollectionOptions({
47
- ...options,
48
- schemaVersion: 1,
49
- persistence: createCollectionPersistence(opts.runtime.coordination, opts.runtime.persistence)
50
- }));
51
- }
52
- //#endregion
53
- export { createLiveOntologyObjectCollection };
54
-
55
- //# sourceMappingURL=createLiveOntologyObjectCollection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createLiveOntologyObjectCollection.js","names":[],"sources":["../../../src/live/objects/createLiveOntologyObjectCollection.ts"],"sourcesContent":["import { createCollectionPersistence, type RuntimeAdapter } from \"@party-stack/runtime\";\nimport { BasicIndex, createCollection, type Collection } from \"@tanstack/db\";\nimport { persistedCollectionOptions } from \"@tanstack/db-sqlite-persistence-core\";\nimport { decorateObjectAttachmentSources } from \"../attachments/attachmentSources.js\";\nimport { ontologyObjectCollectionId } from \"./ontologyObjectCollectionId.js\";\nimport type { OntologyIR } from \"../../ir/index.js\";\nimport type { OntologyBackendAdapter } from \"../OntologyBackendAdapter.js\";\nimport type { OntologyObject } from \"./OntologyObject.js\";\n\nexport type OntologyCollection<T extends OntologyObject> = Collection<T>;\n\nfunction decorateCollectionSync(opts: {\n ir: OntologyIR;\n objectType: OntologyIR[\"objectTypes\"][number];\n collectionOptions: ReturnType<OntologyBackendAdapter[\"getCollectionOptions\"]>;\n}): ReturnType<OntologyBackendAdapter[\"getCollectionOptions\"]> {\n return {\n ...opts.collectionOptions,\n sync: {\n ...opts.collectionOptions.sync,\n sync: (syncParams) =>\n opts.collectionOptions.sync.sync({\n ...syncParams,\n write: (message) => {\n if (message.type === \"delete\") {\n syncParams.write(message);\n return;\n }\n syncParams.write({\n ...message,\n value: decorateObjectAttachmentSources({\n ir: opts.ir,\n objectType: opts.objectType,\n object: message.value,\n }),\n });\n },\n }),\n },\n };\n}\n\nexport function createLiveOntologyObjectCollection(opts: {\n ir: OntologyIR;\n objectType: OntologyIR[\"objectTypes\"][number];\n backendAdapter: OntologyBackendAdapter;\n runtime: RuntimeAdapter;\n persistObjects: boolean;\n}): OntologyCollection<OntologyObject> {\n const collectionOptions = decorateCollectionSync({\n ir: opts.ir,\n objectType: opts.objectType,\n collectionOptions: opts.backendAdapter.getCollectionOptions(opts.objectType.name),\n });\n const options = {\n ...collectionOptions,\n id: ontologyObjectCollectionId(opts.runtime.owner, opts.runtime.namespace, opts.objectType.name),\n defaultIndexType: BasicIndex,\n autoIndex: \"eager\" as const,\n getKey: (object: OntologyObject) =>\n (object as Record<string, string | number>)[opts.objectType.primaryKey] as string | number,\n };\n if (!opts.persistObjects) {\n return createCollection(options);\n }\n if (!opts.runtime.persistence) {\n throw new Error(\n `Live ontology object persistence requires a runtime persistence adapter (${opts.objectType.name}).`\n );\n }\n\n return createCollection(\n persistedCollectionOptions<OntologyObject, string | number>({\n ...options,\n schemaVersion: 1,\n persistence: createCollectionPersistence(opts.runtime.coordination, opts.runtime.persistence),\n })\n );\n}\n"],"mappings":";;;;;;AAWA,SAAS,uBAAuB,MAI+B;CAC3D,OAAO;EACH,GAAG,KAAK;EACR,MAAM;GACF,GAAG,KAAK,kBAAkB;GAC1B,OAAO,eACH,KAAK,kBAAkB,KAAK,KAAK;IAC7B,GAAG;IACH,QAAQ,YAAY;KAChB,IAAI,QAAQ,SAAS,UAAU;MAC3B,WAAW,MAAM,OAAO;MACxB;KACJ;KACA,WAAW,MAAM;MACb,GAAG;MACH,OAAO,gCAAgC;OACnC,IAAI,KAAK;OACT,YAAY,KAAK;OACjB,QAAQ,QAAQ;MACpB,CAAC;KACL,CAAC;IACL;GACJ,CAAC;EACT;CACJ;AACJ;AAEA,SAAgB,mCAAmC,MAMZ;CAMnC,MAAM,UAAU;EACZ,GANsB,uBAAuB;GAC7C,IAAI,KAAK;GACT,YAAY,KAAK;GACjB,mBAAmB,KAAK,eAAe,qBAAqB,KAAK,WAAW,IAAI;EACpF,CAEuB;EACnB,IAAI,2BAA2B,KAAK,QAAQ,OAAO,KAAK,QAAQ,WAAW,KAAK,WAAW,IAAI;EAC/F,kBAAkB;EAClB,WAAW;EACX,SAAS,WACJ,OAA2C,KAAK,WAAW;CACpE;CACA,IAAI,CAAC,KAAK,gBACN,OAAO,iBAAiB,OAAO;CAEnC,IAAI,CAAC,KAAK,QAAQ,aACd,MAAM,IAAI,MACN,4EAA4E,KAAK,WAAW,KAAK,GACrG;CAGJ,OAAO,iBACH,2BAA4D;EACxD,GAAG;EACH,eAAe;EACf,aAAa,4BAA4B,KAAK,QAAQ,cAAc,KAAK,QAAQ,WAAW;CAChG,CAAC,CACL;AACJ"}
@@ -1,4 +0,0 @@
1
- //#region src/live/objects/ontologyObjectCollectionId.d.ts
2
- export declare function ontologyObjectCollectionId(owner: string, ontologyId: string, objectType: string): string;
3
- //#endregion
4
- //# sourceMappingURL=ontologyObjectCollectionId.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ontologyObjectCollectionId.d.ts","names":[],"sources":["../../../src/live/objects/ontologyObjectCollectionId.ts"],"mappings":";wBAAgB,2BAA2B,eAAe,oBAAoB"}
@@ -1,8 +0,0 @@
1
- //#region src/live/objects/ontologyObjectCollectionId.ts
2
- function ontologyObjectCollectionId(owner, ontologyId, objectType) {
3
- return `party-stack:${owner}:${ontologyId}:objects:${objectType}`;
4
- }
5
- //#endregion
6
- export { ontologyObjectCollectionId };
7
-
8
- //# sourceMappingURL=ontologyObjectCollectionId.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ontologyObjectCollectionId.js","names":[],"sources":["../../../src/live/objects/ontologyObjectCollectionId.ts"],"sourcesContent":["export function ontologyObjectCollectionId(owner: string, ontologyId: string, objectType: string): string {\n return `party-stack:${owner}:${ontologyId}:objects:${objectType}`;\n}\n"],"mappings":";AAAA,SAAgB,2BAA2B,OAAe,YAAoB,YAA4B;CACtG,OAAO,eAAe,MAAM,GAAG,WAAW,WAAW;AACzD"}
@@ -1,23 +0,0 @@
1
- import { OntologyOutbox, OntologyOutboxEntry } from "./types.js";
2
- import { OutboxProjection } from "./projectionManager.js";
3
- import { RuntimeAdapter } from "@party-stack/runtime";
4
- import { Collection } from "@tanstack/db";
5
- import { Operation, Task } from "effection";
6
- import { ConnectionMonitor } from "@party-stack/connections";
7
- //#region src/live/outbox/createOntologyOutbox.d.ts
8
- export interface CreateOntologyOutboxOptions {
9
- runtime: RuntimeAdapter;
10
- execute(entry: OntologyOutboxEntry): Promise<unknown>;
11
- project?(entry: OntologyOutboxEntry): Promise<OutboxProjection | undefined>;
12
- failureStrategy?: "pause" | "discard-all";
13
- maxRetries?: number;
14
- connection?: ConnectionMonitor;
15
- }
16
- export declare function useOntologyOutbox(options: CreateOntologyOutboxOptions, collection?: Collection<OntologyOutboxEntry, string>): Operation<OntologyOutbox>;
17
- export interface StartedOntologyOutbox extends OntologyOutbox {
18
- readonly task: Task<void>;
19
- }
20
- export declare function createOntologyOutbox(options: CreateOntologyOutboxOptions): StartedOntologyOutbox;
21
- //#endregion
22
- export type { OutboxProjection };
23
- //# sourceMappingURL=createOntologyOutbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createOntologyOutbox.d.ts","names":[],"sources":["../../../src/live/outbox/createOntologyOutbox.ts"],"mappings":";;;;;;;iBA4CiB;EACb,SAAS;EACT,QAAQ,OAAO,sBAAsB;EACrC,SAAS,OAAO,sBAAsB,QAAQ;EAC9C;EACA;EACA,aAAa;;wBA+DD,kBACZ,SAAS,6BACT,aAAY,WAAW,+BACxB,UAAU;iBAuQI,8BAA8B;WAClC,MAAM;;wBAGH,qBAAqB,SAAS,8BAA8B"}