@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
@@ -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, OntologyCollectionUtils } 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, string | number, OntologyCollectionUtils>;
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,WACvD,oBAEA;wBAkCY,mCAAmC;EAC/C,IAAI;EACJ,YAAY;EACZ,gBAAgB;EAChB,SAAS;EACT;IACA,mBAAmB"}
@@ -1,69 +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 collectionOptions = decorateCollectionSync({
34
- ir: opts.ir,
35
- objectType: opts.objectType,
36
- collectionOptions: opts.backendAdapter.getCollectionOptions(opts.objectType.name)
37
- });
38
- let collection;
39
- const sourceRefresh = collectionOptions.utils?.refresh;
40
- const options = {
41
- ...collectionOptions,
42
- utils: {
43
- ...collectionOptions.utils,
44
- ...sourceRefresh ? { refresh: async () => {
45
- await collection.preload();
46
- await sourceRefresh();
47
- } } : {}
48
- },
49
- id: ontologyObjectCollectionId(opts.runtime.owner, opts.runtime.namespace, opts.objectType.name),
50
- defaultIndexType: BasicIndex,
51
- autoIndex: "eager",
52
- getKey: (object) => object[opts.objectType.primaryKey]
53
- };
54
- if (!opts.persistObjects) {
55
- collection = createCollection(options);
56
- return collection;
57
- }
58
- if (!opts.runtime.persistence) throw new Error(`Live ontology object persistence requires a runtime persistence adapter (${opts.objectType.name}).`);
59
- collection = createCollection(persistedCollectionOptions({
60
- ...options,
61
- schemaVersion: 1,
62
- persistence: createCollectionPersistence(opts.runtime.coordination, opts.runtime.persistence)
63
- }));
64
- return collection;
65
- }
66
- //#endregion
67
- export { createLiveOntologyObjectCollection };
68
-
69
- //# 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, OntologyCollectionUtils } from \"../OntologyBackendAdapter.js\";\nimport type { OntologyObject } from \"./OntologyObject.js\";\n\nexport type OntologyCollection<T extends OntologyObject> = Collection<\n T,\n string | number,\n OntologyCollectionUtils\n>;\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 let collection: OntologyCollection<OntologyObject>;\n const sourceRefresh = collectionOptions.utils?.refresh;\n const options = {\n ...collectionOptions,\n utils: {\n ...collectionOptions.utils,\n ...(sourceRefresh\n ? {\n refresh: async () => {\n await collection.preload();\n await sourceRefresh();\n },\n }\n : {}),\n },\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 collection = createCollection(options);\n return collection;\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 collection = createCollection(\n persistedCollectionOptions<OntologyObject, string | number, never, OntologyCollectionUtils>({\n ...options,\n schemaVersion: 1,\n persistence: createCollectionPersistence(opts.runtime.coordination, opts.runtime.persistence),\n })\n );\n return collection;\n}\n"],"mappings":";;;;;;AAeA,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;CACnC,MAAM,oBAAoB,uBAAuB;EAC7C,IAAI,KAAK;EACT,YAAY,KAAK;EACjB,mBAAmB,KAAK,eAAe,qBAAqB,KAAK,WAAW,IAAI;CACpF,CAAC;CACD,IAAI;CACJ,MAAM,gBAAgB,kBAAkB,OAAO;CAC/C,MAAM,UAAU;EACZ,GAAG;EACH,OAAO;GACH,GAAG,kBAAkB;GACrB,GAAI,gBACE,EACI,SAAS,YAAY;IACjB,MAAM,WAAW,QAAQ;IACzB,MAAM,cAAc;GACxB,EACJ,IACA,CAAC;EACX;EACA,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,gBAAgB;EACtB,aAAa,iBAAiB,OAAO;EACrC,OAAO;CACX;CACA,IAAI,CAAC,KAAK,QAAQ,aACd,MAAM,IAAI,MACN,4EAA4E,KAAK,WAAW,KAAK,GACrG;CAGJ,aAAa,iBACT,2BAA4F;EACxF,GAAG;EACH,eAAe;EACf,aAAa,4BAA4B,KAAK,QAAQ,cAAc,KAAK,QAAQ,WAAW;CAChG,CAAC,CACL;CACA,OAAO;AACX"}
@@ -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"}