@dxos/echo 0.8.4-main.7ace549 → 0.8.4-main.937b3ca

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 (450) hide show
  1. package/README.md +1 -2
  2. package/dist/lib/browser/Annotation.mjs +33 -0
  3. package/dist/lib/browser/Annotation.mjs.map +7 -0
  4. package/dist/lib/browser/Database.mjs +18 -0
  5. package/dist/lib/browser/Database.mjs.map +7 -0
  6. package/dist/lib/browser/Entity.mjs +52 -0
  7. package/dist/lib/browser/Entity.mjs.map +7 -0
  8. package/dist/lib/browser/Err.mjs +11 -0
  9. package/dist/lib/browser/Err.mjs.map +7 -0
  10. package/dist/lib/browser/Filter.mjs +62 -0
  11. package/dist/lib/browser/Filter.mjs.map +7 -0
  12. package/dist/lib/browser/Format.mjs +67 -0
  13. package/dist/lib/browser/Format.mjs.map +7 -0
  14. package/dist/lib/browser/JsonSchema.mjs +20 -0
  15. package/dist/lib/browser/JsonSchema.mjs.map +7 -0
  16. package/dist/lib/browser/Key.mjs +13 -0
  17. package/dist/lib/browser/Key.mjs.map +7 -0
  18. package/dist/lib/browser/Obj.mjs +91 -0
  19. package/dist/lib/browser/Obj.mjs.map +7 -0
  20. package/dist/lib/browser/Order.mjs +13 -0
  21. package/dist/lib/browser/Order.mjs.map +7 -0
  22. package/dist/lib/browser/Query.mjs +27 -0
  23. package/dist/lib/browser/Query.mjs.map +7 -0
  24. package/dist/lib/browser/QueryResult.mjs +3 -0
  25. package/dist/lib/browser/QueryResult.mjs.map +7 -0
  26. package/dist/lib/browser/Ref.mjs +23 -0
  27. package/dist/lib/browser/Ref.mjs.map +7 -0
  28. package/dist/lib/browser/Relation.mjs +85 -0
  29. package/dist/lib/browser/Relation.mjs.map +7 -0
  30. package/dist/lib/browser/SchemaRegistry.mjs +3 -0
  31. package/dist/lib/browser/SchemaRegistry.mjs.map +7 -0
  32. package/dist/lib/browser/Tag.mjs +26 -0
  33. package/dist/lib/browser/Tag.mjs.map +7 -0
  34. package/dist/lib/browser/Type.mjs +48 -0
  35. package/dist/lib/browser/Type.mjs.map +7 -0
  36. package/dist/lib/browser/chunk-22JMFST2.mjs +24 -0
  37. package/dist/lib/browser/chunk-22JMFST2.mjs.map +7 -0
  38. package/dist/lib/browser/chunk-2SBB7OWV.mjs +250 -0
  39. package/dist/lib/browser/chunk-2SBB7OWV.mjs.map +7 -0
  40. package/dist/lib/browser/chunk-6L5HHUVU.mjs +158 -0
  41. package/dist/lib/browser/chunk-6L5HHUVU.mjs.map +7 -0
  42. package/dist/lib/browser/chunk-7STIBCP7.mjs +133 -0
  43. package/dist/lib/browser/chunk-7STIBCP7.mjs.map +7 -0
  44. package/dist/lib/browser/{chunk-7GH6RXJ3.mjs → chunk-BJPE6CIC.mjs} +1999 -1835
  45. package/dist/lib/browser/chunk-BJPE6CIC.mjs.map +7 -0
  46. package/dist/lib/browser/chunk-CGS2ULMK.mjs +11 -0
  47. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +7 -0
  48. package/dist/lib/browser/chunk-CJ5YELTO.mjs +39 -0
  49. package/dist/lib/browser/chunk-CJ5YELTO.mjs.map +7 -0
  50. package/dist/lib/browser/chunk-FPOISFQK.mjs +40 -0
  51. package/dist/lib/browser/chunk-FPOISFQK.mjs.map +7 -0
  52. package/dist/lib/browser/chunk-FRDT7RA4.mjs +403 -0
  53. package/dist/lib/browser/chunk-FRDT7RA4.mjs.map +7 -0
  54. package/dist/lib/browser/chunk-INHXFXY5.mjs +22 -0
  55. package/dist/lib/browser/chunk-INHXFXY5.mjs.map +7 -0
  56. package/dist/lib/browser/chunk-IXVWLTG7.mjs +9 -0
  57. package/dist/lib/browser/chunk-IXVWLTG7.mjs.map +7 -0
  58. package/dist/lib/browser/chunk-JMKVF2YQ.mjs +43 -0
  59. package/dist/lib/browser/chunk-JMKVF2YQ.mjs.map +7 -0
  60. package/dist/lib/browser/chunk-KQQGVHFN.mjs +143 -0
  61. package/dist/lib/browser/chunk-KQQGVHFN.mjs.map +7 -0
  62. package/dist/lib/browser/chunk-MYCCGG2T.mjs +15 -0
  63. package/dist/lib/browser/chunk-MYCCGG2T.mjs.map +7 -0
  64. package/dist/lib/browser/chunk-NOPVNWPT.mjs +204 -0
  65. package/dist/lib/browser/chunk-NOPVNWPT.mjs.map +7 -0
  66. package/dist/lib/browser/chunk-PQZW3S6L.mjs +74 -0
  67. package/dist/lib/browser/chunk-PQZW3S6L.mjs.map +7 -0
  68. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs +283 -0
  69. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs.map +7 -0
  70. package/dist/lib/browser/chunk-U2J7TA7K.mjs +57 -0
  71. package/dist/lib/browser/chunk-U2J7TA7K.mjs.map +7 -0
  72. package/dist/lib/browser/chunk-W5D2GWAW.mjs +98 -0
  73. package/dist/lib/browser/chunk-W5D2GWAW.mjs.map +7 -0
  74. package/dist/lib/browser/chunk-XDIUHAAX.mjs +41 -0
  75. package/dist/lib/browser/chunk-XDIUHAAX.mjs.map +7 -0
  76. package/dist/lib/browser/chunk-YKTSSMDS.mjs +69 -0
  77. package/dist/lib/browser/chunk-YKTSSMDS.mjs.map +7 -0
  78. package/dist/lib/browser/chunk-ZAGAOZVY.mjs +288 -0
  79. package/dist/lib/browser/chunk-ZAGAOZVY.mjs.map +7 -0
  80. package/dist/lib/browser/chunk-ZHXZGIXD.mjs +9 -0
  81. package/dist/lib/browser/chunk-ZHXZGIXD.mjs.map +7 -0
  82. package/dist/lib/browser/index.mjs +65 -25
  83. package/dist/lib/browser/internal/index.mjs +213 -92
  84. package/dist/lib/browser/meta.json +1 -1
  85. package/dist/lib/browser/testing/index.mjs +80 -41
  86. package/dist/lib/browser/testing/index.mjs.map +3 -3
  87. package/dist/lib/node-esm/Annotation.mjs +33 -0
  88. package/dist/lib/node-esm/Annotation.mjs.map +7 -0
  89. package/dist/lib/node-esm/Database.mjs +18 -0
  90. package/dist/lib/node-esm/Database.mjs.map +7 -0
  91. package/dist/lib/node-esm/Entity.mjs +52 -0
  92. package/dist/lib/node-esm/Entity.mjs.map +7 -0
  93. package/dist/lib/node-esm/Err.mjs +11 -0
  94. package/dist/lib/node-esm/Err.mjs.map +7 -0
  95. package/dist/lib/node-esm/Filter.mjs +62 -0
  96. package/dist/lib/node-esm/Filter.mjs.map +7 -0
  97. package/dist/lib/node-esm/Format.mjs +67 -0
  98. package/dist/lib/node-esm/Format.mjs.map +7 -0
  99. package/dist/lib/node-esm/JsonSchema.mjs +20 -0
  100. package/dist/lib/node-esm/JsonSchema.mjs.map +7 -0
  101. package/dist/lib/node-esm/Key.mjs +13 -0
  102. package/dist/lib/node-esm/Key.mjs.map +7 -0
  103. package/dist/lib/node-esm/Obj.mjs +91 -0
  104. package/dist/lib/node-esm/Obj.mjs.map +7 -0
  105. package/dist/lib/node-esm/Order.mjs +13 -0
  106. package/dist/lib/node-esm/Order.mjs.map +7 -0
  107. package/dist/lib/node-esm/Query.mjs +27 -0
  108. package/dist/lib/node-esm/Query.mjs.map +7 -0
  109. package/dist/lib/node-esm/QueryResult.mjs +3 -0
  110. package/dist/lib/node-esm/QueryResult.mjs.map +7 -0
  111. package/dist/lib/node-esm/Ref.mjs +23 -0
  112. package/dist/lib/node-esm/Ref.mjs.map +7 -0
  113. package/dist/lib/node-esm/Relation.mjs +85 -0
  114. package/dist/lib/node-esm/Relation.mjs.map +7 -0
  115. package/dist/lib/node-esm/SchemaRegistry.mjs +3 -0
  116. package/dist/lib/node-esm/SchemaRegistry.mjs.map +7 -0
  117. package/dist/lib/node-esm/Tag.mjs +26 -0
  118. package/dist/lib/node-esm/Tag.mjs.map +7 -0
  119. package/dist/lib/node-esm/Type.mjs +48 -0
  120. package/dist/lib/node-esm/Type.mjs.map +7 -0
  121. package/dist/lib/node-esm/chunk-4PNXQA64.mjs +250 -0
  122. package/dist/lib/node-esm/chunk-4PNXQA64.mjs.map +7 -0
  123. package/dist/lib/node-esm/chunk-5OBN7GZW.mjs +158 -0
  124. package/dist/lib/node-esm/chunk-5OBN7GZW.mjs.map +7 -0
  125. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs +22 -0
  126. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs.map +7 -0
  127. package/dist/lib/node-esm/chunk-ANLVLWME.mjs +98 -0
  128. package/dist/lib/node-esm/chunk-ANLVLWME.mjs.map +7 -0
  129. package/dist/lib/node-esm/chunk-DMR7OAFK.mjs +57 -0
  130. package/dist/lib/node-esm/chunk-DMR7OAFK.mjs.map +7 -0
  131. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs +133 -0
  132. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs.map +7 -0
  133. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  134. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  135. package/dist/lib/node-esm/chunk-ILMLLM4R.mjs +204 -0
  136. package/dist/lib/node-esm/chunk-ILMLLM4R.mjs.map +7 -0
  137. package/dist/lib/node-esm/chunk-K37NA7PO.mjs +43 -0
  138. package/dist/lib/node-esm/chunk-K37NA7PO.mjs.map +7 -0
  139. package/dist/lib/node-esm/{chunk-M4B6BMD2.mjs → chunk-LT3H4JOX.mjs} +1999 -1835
  140. package/dist/lib/node-esm/chunk-LT3H4JOX.mjs.map +7 -0
  141. package/dist/lib/node-esm/chunk-MOLNWFNL.mjs +9 -0
  142. package/dist/lib/node-esm/chunk-MOLNWFNL.mjs.map +7 -0
  143. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs +15 -0
  144. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs.map +7 -0
  145. package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs +40 -0
  146. package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs.map +7 -0
  147. package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs +143 -0
  148. package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs.map +7 -0
  149. package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs +41 -0
  150. package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs.map +7 -0
  151. package/dist/lib/node-esm/chunk-QYR67VBV.mjs +288 -0
  152. package/dist/lib/node-esm/chunk-QYR67VBV.mjs.map +7 -0
  153. package/dist/lib/node-esm/chunk-UKGVOINP.mjs +9 -0
  154. package/dist/lib/node-esm/chunk-UKGVOINP.mjs.map +7 -0
  155. package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs +403 -0
  156. package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs.map +7 -0
  157. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs +69 -0
  158. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs.map +7 -0
  159. package/dist/lib/node-esm/chunk-Y75VU7LB.mjs +74 -0
  160. package/dist/lib/node-esm/chunk-Y75VU7LB.mjs.map +7 -0
  161. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs +283 -0
  162. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs.map +7 -0
  163. package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs +39 -0
  164. package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs.map +7 -0
  165. package/dist/lib/node-esm/chunk-ZBB67AKD.mjs +24 -0
  166. package/dist/lib/node-esm/chunk-ZBB67AKD.mjs.map +7 -0
  167. package/dist/lib/node-esm/index.mjs +65 -25
  168. package/dist/lib/node-esm/internal/index.mjs +213 -92
  169. package/dist/lib/node-esm/meta.json +1 -1
  170. package/dist/lib/node-esm/testing/index.mjs +80 -41
  171. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  172. package/dist/types/src/Annotation.d.ts +1 -1
  173. package/dist/types/src/Annotation.d.ts.map +1 -1
  174. package/dist/types/src/Database.d.ts +117 -60
  175. package/dist/types/src/Database.d.ts.map +1 -1
  176. package/dist/types/src/Entity.d.ts +111 -5
  177. package/dist/types/src/Entity.d.ts.map +1 -1
  178. package/dist/types/src/Entity.test.d.ts +2 -0
  179. package/dist/types/src/Entity.test.d.ts.map +1 -0
  180. package/dist/types/src/{errors.d.ts → Err.d.ts} +13 -17
  181. package/dist/types/src/Err.d.ts.map +1 -0
  182. package/dist/types/src/Filter.d.ts +120 -0
  183. package/dist/types/src/Filter.d.ts.map +1 -0
  184. package/dist/types/src/Format.d.ts.map +1 -1
  185. package/dist/types/src/Hypergraph.d.ts +60 -0
  186. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  187. package/dist/types/src/Obj.d.ts +268 -76
  188. package/dist/types/src/Obj.d.ts.map +1 -1
  189. package/dist/types/src/Obj.test.d.ts +2 -0
  190. package/dist/types/src/Obj.test.d.ts.map +1 -0
  191. package/dist/types/src/Order.d.ts +16 -0
  192. package/dist/types/src/Order.d.ts.map +1 -0
  193. package/dist/types/src/{query/query.d.ts → Query.d.ts} +53 -50
  194. package/dist/types/src/Query.d.ts.map +1 -0
  195. package/dist/types/src/Query.test.d.ts +2 -0
  196. package/dist/types/src/Query.test.d.ts.map +1 -0
  197. package/dist/types/src/QueryResult.d.ts +80 -0
  198. package/dist/types/src/QueryResult.d.ts.map +1 -0
  199. package/dist/types/src/Ref.d.ts +9 -7
  200. package/dist/types/src/Ref.d.ts.map +1 -1
  201. package/dist/types/src/Relation.d.ts +235 -18
  202. package/dist/types/src/Relation.d.ts.map +1 -1
  203. package/dist/types/src/Relation.test.d.ts +2 -0
  204. package/dist/types/src/Relation.test.d.ts.map +1 -0
  205. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  206. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  207. package/dist/types/src/Tag.d.ts +6 -6
  208. package/dist/types/src/Tag.d.ts.map +1 -1
  209. package/dist/types/src/Type.d.ts +213 -50
  210. package/dist/types/src/Type.d.ts.map +1 -1
  211. package/dist/types/src/Type.test.d.ts +2 -0
  212. package/dist/types/src/Type.test.d.ts.map +1 -0
  213. package/dist/types/src/index.d.ts +8 -2
  214. package/dist/types/src/index.d.ts.map +1 -1
  215. package/dist/types/src/internal/annotations/annotations.d.ts +23 -27
  216. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -1
  217. package/dist/types/src/internal/annotations/util.d.ts +1 -0
  218. package/dist/types/src/internal/annotations/util.d.ts.map +1 -1
  219. package/dist/types/src/internal/api/annotations.d.ts +23 -0
  220. package/dist/types/src/internal/api/annotations.d.ts.map +1 -0
  221. package/dist/types/src/internal/api/entity.d.ts +13 -0
  222. package/dist/types/src/internal/api/entity.d.ts.map +1 -0
  223. package/dist/types/src/internal/api/index.d.ts +15 -0
  224. package/dist/types/src/internal/api/index.d.ts.map +1 -0
  225. package/dist/types/src/internal/api/meta.d.ts +42 -0
  226. package/dist/types/src/internal/api/meta.d.ts.map +1 -0
  227. package/dist/types/src/internal/api/sorting.d.ts +24 -0
  228. package/dist/types/src/internal/api/sorting.d.ts.map +1 -0
  229. package/dist/types/src/internal/api/version.d.ts +42 -0
  230. package/dist/types/src/internal/api/version.d.ts.map +1 -0
  231. package/dist/types/src/internal/entities/entity.d.ts +13 -3
  232. package/dist/types/src/internal/entities/entity.d.ts.map +1 -1
  233. package/dist/types/src/internal/entities/index.d.ts +1 -1
  234. package/dist/types/src/internal/entities/index.d.ts.map +1 -1
  235. package/dist/types/src/internal/entities/model.d.ts +14 -7
  236. package/dist/types/src/internal/entities/model.d.ts.map +1 -1
  237. package/dist/types/src/internal/entities/object.d.ts +8 -1
  238. package/dist/types/src/internal/entities/object.d.ts.map +1 -1
  239. package/dist/types/src/internal/entities/relation.d.ts +8 -1
  240. package/dist/types/src/internal/entities/relation.d.ts.map +1 -1
  241. package/dist/types/src/internal/formats/format.d.ts +4 -4
  242. package/dist/types/src/internal/formats/format.d.ts.map +1 -1
  243. package/dist/types/src/internal/formats/select.d.ts +5 -3
  244. package/dist/types/src/internal/formats/select.d.ts.map +1 -1
  245. package/dist/types/src/internal/formats/string.d.ts +4 -0
  246. package/dist/types/src/internal/formats/string.d.ts.map +1 -1
  247. package/dist/types/src/internal/formats/types.d.ts +6 -2
  248. package/dist/types/src/internal/formats/types.d.ts.map +1 -1
  249. package/dist/types/src/internal/index.d.ts +2 -1
  250. package/dist/types/src/internal/index.d.ts.map +1 -1
  251. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -1
  252. package/dist/types/src/internal/object/clone.d.ts +8 -0
  253. package/dist/types/src/internal/object/clone.d.ts.map +1 -0
  254. package/dist/types/src/internal/object/create-object.d.ts +1 -1
  255. package/dist/types/src/internal/object/index.d.ts +3 -0
  256. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  257. package/dist/types/src/internal/object/json-serializer.d.ts +13 -7
  258. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  259. package/dist/types/src/internal/object/schema-validator.d.ts +1 -14
  260. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  261. package/dist/types/src/internal/object/set-value.d.ts +7 -0
  262. package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
  263. package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
  264. package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
  265. package/dist/types/src/internal/object/snapshot.d.ts +6 -0
  266. package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
  267. package/dist/types/src/internal/object/typed-object.d.ts +7 -13
  268. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  269. package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
  270. package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
  271. package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
  272. package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
  273. package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
  274. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
  275. package/dist/types/src/internal/proxy/errors.d.ts +19 -0
  276. package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
  277. package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
  278. package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
  279. package/dist/types/src/internal/proxy/index.d.ts +11 -0
  280. package/dist/types/src/internal/proxy/index.d.ts.map +1 -1
  281. package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
  282. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
  283. package/dist/types/src/internal/proxy/make-object.d.ts +2 -4
  284. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -1
  285. package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
  286. package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
  287. package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
  288. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
  289. package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
  290. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
  291. package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
  292. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
  293. package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
  294. package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
  295. package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
  296. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
  297. package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
  298. package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
  299. package/dist/types/src/internal/proxy/typed-handler.d.ts +14 -11
  300. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  301. package/dist/types/src/internal/ref/ref-array.d.ts +4 -4
  302. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -1
  303. package/dist/types/src/internal/ref/ref.d.ts +14 -6
  304. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  305. package/dist/types/src/internal/schema/compose.d.ts.map +1 -1
  306. package/dist/types/src/internal/schema/echo-schema.d.ts +15 -3
  307. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  308. package/dist/types/src/internal/schema/index.d.ts +0 -2
  309. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  310. package/dist/types/src/internal/schema/persistent-schema.d.ts +9 -7
  311. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -1
  312. package/dist/types/src/internal/types/base.d.ts +5 -16
  313. package/dist/types/src/internal/types/base.d.ts.map +1 -1
  314. package/dist/types/src/internal/types/entity.d.ts +27 -2
  315. package/dist/types/src/internal/types/entity.d.ts.map +1 -1
  316. package/dist/types/src/internal/types/meta.d.ts +1 -9
  317. package/dist/types/src/internal/types/meta.d.ts.map +1 -1
  318. package/dist/types/src/testing/test-schema.d.ts +141 -175
  319. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  320. package/dist/types/src/testing/util.d.ts +6 -1
  321. package/dist/types/src/testing/util.d.ts.map +1 -1
  322. package/dist/types/tsconfig.tsbuildinfo +1 -1
  323. package/package.json +130 -23
  324. package/src/Annotation.ts +5 -4
  325. package/src/Database.ts +229 -82
  326. package/src/Entity.test.ts +22 -0
  327. package/src/Entity.ts +173 -7
  328. package/src/{errors.ts → Err.ts} +2 -2
  329. package/src/Filter.ts +376 -0
  330. package/src/Format.ts +0 -2
  331. package/src/Hypergraph.ts +74 -0
  332. package/src/Obj.test.ts +386 -0
  333. package/src/Obj.ts +338 -250
  334. package/src/{query/order.ts → Order.ts} +19 -9
  335. package/src/{query/query.test.ts → Query.test.ts} +180 -49
  336. package/src/{query/query.ts → Query.ts} +115 -122
  337. package/src/QueryResult.ts +106 -0
  338. package/src/Ref.ts +20 -3
  339. package/src/Relation.test.ts +82 -0
  340. package/src/Relation.ts +364 -27
  341. package/src/SchemaRegistry.ts +105 -0
  342. package/src/Tag.ts +1 -1
  343. package/src/Type.test.ts +52 -0
  344. package/src/Type.ts +322 -88
  345. package/src/index.ts +9 -5
  346. package/src/internal/README.md +36 -17
  347. package/src/internal/annotations/annotations.test.ts +6 -6
  348. package/src/internal/annotations/annotations.ts +73 -76
  349. package/src/internal/annotations/util.ts +2 -0
  350. package/src/internal/api/annotations.ts +60 -0
  351. package/src/internal/api/entity.ts +29 -0
  352. package/src/internal/api/index.ts +19 -0
  353. package/src/internal/api/meta.ts +88 -0
  354. package/src/internal/api/sorting.ts +53 -0
  355. package/src/internal/api/version.ts +96 -0
  356. package/src/internal/entities/entity.ts +36 -19
  357. package/src/internal/entities/index.ts +1 -1
  358. package/src/internal/entities/model.ts +17 -12
  359. package/src/internal/entities/object.ts +20 -5
  360. package/src/internal/entities/relation.ts +22 -4
  361. package/src/internal/formats/format.ts +7 -8
  362. package/src/internal/formats/object.ts +2 -2
  363. package/src/internal/formats/select.ts +5 -3
  364. package/src/internal/formats/string.ts +5 -0
  365. package/src/internal/formats/types.ts +9 -3
  366. package/src/internal/index.ts +2 -1
  367. package/src/internal/json-schema/json-schema-type.ts +1 -1
  368. package/src/internal/json-schema/json-schema.test.ts +19 -17
  369. package/src/internal/json-schema/json-schema.ts +4 -4
  370. package/src/internal/object/clone.ts +48 -0
  371. package/src/internal/object/create-object.ts +2 -2
  372. package/src/internal/object/index.ts +3 -0
  373. package/src/internal/object/inspect.ts +3 -3
  374. package/src/internal/object/json-serializer.test.ts +4 -1
  375. package/src/internal/object/json-serializer.ts +28 -70
  376. package/src/internal/object/schema-validator.ts +2 -238
  377. package/src/internal/object/set-value.test.ts +281 -0
  378. package/src/internal/object/set-value.ts +165 -0
  379. package/src/internal/object/snapshot.ts +70 -0
  380. package/src/internal/object/typed-object.test.ts +11 -11
  381. package/src/internal/object/typed-object.ts +8 -72
  382. package/src/internal/proxy/change-context.ts +138 -0
  383. package/src/internal/proxy/change.test.ts +519 -0
  384. package/src/internal/proxy/define-hidden-property.ts +14 -0
  385. package/src/internal/proxy/errors.ts +42 -0
  386. package/src/internal/proxy/event-batch.ts +44 -0
  387. package/src/internal/proxy/handler.test.ts +30 -80
  388. package/src/internal/proxy/index.ts +11 -0
  389. package/src/internal/proxy/json-serializer.ts +87 -0
  390. package/src/internal/proxy/make-object.ts +33 -50
  391. package/src/internal/proxy/ownership.ts +253 -0
  392. package/src/internal/proxy/proxy-types.ts +23 -0
  393. package/src/internal/proxy/proxy-utils.ts +150 -0
  394. package/src/internal/proxy/reactive-array.ts +71 -0
  395. package/src/internal/proxy/reactive.ts +69 -0
  396. package/src/internal/proxy/schema-validator.ts +244 -0
  397. package/src/internal/proxy/schema.test.ts +23 -15
  398. package/src/internal/proxy/symbols.ts +7 -0
  399. package/src/internal/proxy/typed-handler.test.ts +251 -35
  400. package/src/internal/proxy/typed-handler.ts +265 -56
  401. package/src/internal/proxy/typed-object.test.ts +26 -15
  402. package/src/internal/ref/ref-array.ts +4 -4
  403. package/src/internal/ref/ref.ts +62 -39
  404. package/src/internal/schema/compose.test.ts +3 -3
  405. package/src/internal/schema/compose.ts +1 -2
  406. package/src/internal/schema/echo-schema.ts +49 -11
  407. package/src/internal/schema/index.ts +0 -2
  408. package/src/internal/schema/persistent-schema.ts +3 -4
  409. package/src/internal/types/base.ts +6 -21
  410. package/src/internal/types/entity.ts +35 -4
  411. package/src/internal/types/meta.ts +1 -11
  412. package/src/testing/api.test.ts +31 -5
  413. package/src/testing/test-schema.ts +55 -30
  414. package/src/testing/util.ts +22 -15
  415. package/dist/lib/browser/chunk-7GH6RXJ3.mjs.map +0 -7
  416. package/dist/lib/browser/chunk-E4UTVJNF.mjs +0 -1111
  417. package/dist/lib/browser/chunk-E4UTVJNF.mjs.map +0 -7
  418. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +0 -1111
  419. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +0 -7
  420. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +0 -7
  421. package/dist/types/src/errors.d.ts.map +0 -1
  422. package/dist/types/src/internal/entities/expando.d.ts +0 -16
  423. package/dist/types/src/internal/entities/expando.d.ts.map +0 -1
  424. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  425. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  426. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  427. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  428. package/dist/types/src/query/filter.d.ts +0 -167
  429. package/dist/types/src/query/filter.d.ts.map +0 -1
  430. package/dist/types/src/query/index.d.ts +0 -5
  431. package/dist/types/src/query/index.d.ts.map +0 -1
  432. package/dist/types/src/query/order.d.ts +0 -12
  433. package/dist/types/src/query/order.d.ts.map +0 -1
  434. package/dist/types/src/query/query.d.ts.map +0 -1
  435. package/dist/types/src/query/query.test.d.ts +0 -2
  436. package/dist/types/src/query/query.test.d.ts.map +0 -1
  437. package/dist/types/src/query/testing.d.ts +0 -51
  438. package/dist/types/src/query/testing.d.ts.map +0 -1
  439. package/dist/types/src/query/types.d.ts +0 -17
  440. package/dist/types/src/query/types.d.ts.map +0 -1
  441. package/dist/types/src/query/util.d.ts +0 -8
  442. package/dist/types/src/query/util.d.ts.map +0 -1
  443. package/src/internal/entities/expando.ts +0 -23
  444. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  445. package/src/internal/schema/snapshot.ts +0 -25
  446. package/src/query/filter.ts +0 -455
  447. package/src/query/index.ts +0 -9
  448. package/src/query/testing.ts +0 -64
  449. package/src/query/types.ts +0 -23
  450. package/src/query/util.ts +0 -25
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/index.ts", "../../../src/internal/types/base.ts", "../../../src/internal/types/meta.ts", "../../../src/internal/types/version.ts", "../../../src/internal/api/annotations.ts", "../../../src/internal/api/entity.ts", "../../../src/internal/entities/entity.ts", "../../../src/internal/entities/model.ts", "../../../src/internal/entities/relation.ts", "../../../src/internal/entities/object.ts", "../../../src/internal/entities/util.ts", "../../../src/internal/api/meta.ts", "../../../src/internal/api/sorting.ts", "../../../src/internal/api/version.ts", "../../../src/internal/json-schema/annotations.ts", "../../../src/internal/json-schema/json-schema-type.ts", "../../../src/internal/json-schema/json-schema-normalize.ts", "../../../src/internal/json-schema/json-schema.ts", "../../../src/internal/ref/ref.ts", "../../../src/internal/ref/ref-array.ts", "../../../src/internal/object/common.ts", "../../../src/internal/object/create-object.ts", "../../../src/internal/proxy/symbols.ts", "../../../src/internal/proxy/event-batch.ts", "../../../src/internal/proxy/change-context.ts", "../../../src/internal/proxy/define-hidden-property.ts", "../../../src/internal/proxy/errors.ts", "../../../src/internal/proxy/json-serializer.ts", "../../../src/internal/proxy/make-object.ts", "../../../src/internal/proxy/proxy-utils.ts", "../../../src/internal/proxy/typed-handler.ts", "../../../src/internal/proxy/ownership.ts", "../../../src/internal/proxy/proxy-types.ts", "../../../src/internal/proxy/reactive-array.ts", "../../../src/internal/proxy/schema-validator.ts", "../../../src/internal/proxy/reactive.ts", "../../../src/internal/object/inspect.ts", "../../../src/internal/object/json-serializer.ts", "../../../src/internal/object/deleted.ts", "../../../src/internal/object/ids.ts", "../../../src/internal/object/set-value.ts", "../../../src/internal/object/snapshot.ts", "../../../src/internal/object/clone.ts", "../../../src/internal/schema/echo-schema.ts", "../../../src/internal/schema/manipulation.ts", "../../../src/internal/schema/persistent-schema.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): Import directly (not part of ECHO API).\nexport { JsonPath, JsonProp, getValue, splitJsonPath } from '@dxos/effect';\n\nexport * from './annotations';\nexport * from './api';\nexport * from './entities';\nexport * from './formats';\nexport * from './json-schema';\nexport * from './ref';\nexport * from './types';\n\n// TODO(wittjosiah): Required to ensure types are portable (need to export all types required for downstream inference).\nexport * from './object';\nexport * from './proxy';\nexport * from './schema';\n\n// export {\n// createObject,\n// createQueueDXN,\n// isDeleted,\n// objectFromJSON,\n// objectToJSON,\n// setRefResolverOnData,\n// SchemaValidator,\n// TypedObject,\n// } from './object';\n// export { makeObject } from './proxy';\n// export {\n// type BaseSchema,\n// EchoSchema,\n// ImmutableSchema,\n// RuntimeSchemaRegistry,\n// PersistentSchema,\n// isMutable,\n// } from './schema';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { type ObjectId } from '@dxos/keys';\n\nimport { type ATTR_META, type ObjectMeta } from './meta';\n\n/**\n * Base type for all data objects (reactive, ECHO, and other raw objects).\n * NOTE: This describes the base type for all database objects.\n * It is stricter than `T extends {}` or `T extends object`.\n */\n// TODO(burdon): Make internal.\n// TODO(burdon): Prefer Record<string, unknown>.\nexport type AnyProperties = Record<string, any>;\n\n/**\n * Canonical type for all ECHO entities (objects and relations).\n */\n// TODO(wittjosiah): Remove. Prefer higher level types (e.g. Entity.Unknown).\nexport interface AnyEntity {\n readonly id: ObjectId;\n}\n\nexport type ExcludeId<T extends AnyProperties> = Omit<T, 'id'>;\n\nexport type PropertyKey<T extends AnyProperties> = Extract<keyof ExcludeId<T>, string>;\n\n// TODO(dmaretskyi): Remove. This should be using the symbol type.\ntype WithMeta = { [ATTR_META]?: ObjectMeta };\n\n/**\n * The raw object should not include the ECHO id, but may include metadata.\n */\nexport const RawObject = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n): Schema.Schema<ExcludeId<Schema.Schema.Type<S>> & WithMeta, Schema.Schema.Encoded<S>> => {\n return Schema.make(SchemaAST.omit(schema.ast, ['id']));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { ForeignKey } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type Comparator, intersection } from '@dxos/util';\n\nimport { type AnyProperties } from './base';\n\n/**\n * Property name for meta when object is serialized to JSON.\n */\nexport const ATTR_META = '@meta';\n\n/**\n * Metadata section.\n */\nexport const MetaId = Symbol.for('@dxos/echo/Meta');\n\n//\n// ObjectMeta\n//\n\n// TODO(dmaretskyi): Rename to ObjectMeta\nexport const ObjectMetaSchema = Schema.mutable(\n Schema.Struct({\n keys: Schema.mutable(Schema.Array(ForeignKey)),\n\n /**\n * A set of tags.\n * Tags are arbitrary application-defined strings.\n * ECHO makes no assumptions about the tag structure.\n */\n // TODO(dmaretskyi): Has to be optional for compatibility with old data.\n // Defaulting to an empty array is possible but requires a bit more work.\n tags: Schema.optional(Schema.mutable(Schema.Array(Schema.String))),\n }),\n);\nexport type ObjectMeta = Schema.Schema.Type<typeof ObjectMetaSchema>;\n\n/*\n * Get metadata from object.\n * Only callable on the object root.\n *\n * @internal (use Obj.getMeta or Relation.getMeta)\n */\n// TODO(burdon): Refine type to BaseObj.\nexport const getMeta = (obj: AnyProperties): ObjectMeta => {\n const metadata = (obj as any)[MetaId];\n invariant(metadata, 'ObjectMeta not found.');\n return metadata;\n};\n\n//\n// Foreign keys\n//\n\nexport const foreignKey = (source: string, id: string): ForeignKey => ({ source, id });\nexport const foreignKeyEquals = (a: ForeignKey, b: ForeignKey) => a.source === b.source && a.id === b.id;\n\n// TODO(dmaretskyi): Move to echo-schema.\nexport const compareForeignKeys: Comparator<AnyProperties> = (a: AnyProperties, b: AnyProperties) =>\n intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Version type symbol.\n */\nexport const VersionTypeId: unique symbol = Symbol.for('@dxos/echo/VersionTypeId');\n\nexport type VersionTypeId = typeof VersionTypeId;\n\n/**\n * Represents the object version.\n * May be backed by Automerge.\n * Objects with no history are not versioned.\n */\nexport interface Version {\n [VersionTypeId]: {};\n automergeHeads?: string[];\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Common annotation helpers shared by Obj and Relation modules.\n */\n\nimport {\n getDescriptionWithSchema,\n getLabelWithSchema,\n setDescriptionWithSchema,\n setLabelWithSchema,\n} from '../annotations';\nimport { type Mutable } from '../proxy';\nimport { type AnyProperties, getSchema as getSchema$ } from '../types';\n\n/**\n * Get the label of an entity.\n * Accepts both reactive entities and snapshots.\n */\nexport const getLabel = (entity: AnyProperties): string | undefined => {\n const schema = getSchema$(entity);\n if (schema != null) {\n return getLabelWithSchema(schema, entity);\n }\n};\n\n/**\n * Set the label of an entity.\n * Must be called within an Obj.change or Relation.change callback.\n */\nexport const setLabel = (entity: Mutable<AnyProperties>, label: string) => {\n const schema = getSchema$(entity);\n if (schema != null) {\n setLabelWithSchema(schema, entity, label);\n }\n};\n\n/**\n * Get the description of an entity.\n * Accepts both reactive entities and snapshots.\n */\nexport const getDescription = (entity: AnyProperties): string | undefined => {\n const schema = getSchema$(entity);\n if (schema != null) {\n return getDescriptionWithSchema(schema, entity);\n }\n};\n\n/**\n * Set the description of an entity.\n * Must be called within an Obj.change or Relation.change callback.\n */\nexport const setDescription = (entity: Mutable<AnyProperties>, description: string) => {\n const schema = getSchema$(entity);\n if (schema != null) {\n setDescriptionWithSchema(schema, entity, description);\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type DXN } from '@dxos/keys';\nimport { assumeType } from '@dxos/util';\n\nimport { type InternalObjectProps, ObjectDatabaseId, getObjectDXN } from '../entities';\nimport type { AnyEntity } from '../types';\n\n/**\n * Get the DXN of an entity.\n * Accepts both reactive entities and snapshots.\n */\nexport const getDXN = (entity: AnyEntity): DXN => {\n const dxn = getObjectDXN(entity);\n invariant(dxn != null, 'Invalid entity.');\n return dxn;\n};\n\n/**\n * Get the database the entity belongs to.\n * Accepts both reactive entities and snapshots.\n */\nexport const getDatabase = (entity: AnyEntity): any | undefined => {\n assumeType<InternalObjectProps>(entity);\n return entity[ObjectDatabaseId];\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { type ToMutable } from '@dxos/util';\n\nimport { type TypeMeta } from '../annotations';\nimport { type AnyEntity, type EntityKind, SchemaKindId } from '../types';\n\n// TODO(burdon): Define Schema type for `typename` and use consistently for all DXN-like properties.\n\n// type RequiredKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? never : K }[keyof T];\nexport type EchoTypeSchemaProps<T, ExtraFields = {}> = Types.Simplify<AnyEntity & ToMutable<T> & ExtraFields>;\n\n// TODO(burdon): Rename EchoEntitySchema.\nexport interface EchoTypeSchema<\n Self extends Schema.Schema.Any,\n ExtraFields = {},\n K extends EntityKind = EntityKind,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> extends TypeMeta,\n Schema.AnnotableClass<\n EchoTypeSchema<Self, ExtraFields, K, Fields>,\n EchoTypeSchemaProps<Schema.Schema.Type<Self>, ExtraFields>,\n EchoTypeSchemaProps<Schema.Schema.Encoded<Self>, ExtraFields>,\n Schema.Schema.Context<Self>\n > {\n /**\n * Schema kind key that marks this as an ECHO schema and indicates its kind.\n * Makes EchoTypeSchema satisfy the Type.Obj.Any or Type.Relation.Any type.\n */\n readonly [SchemaKindId]: K;\n\n /**\n * The fields defined in the original struct schema.\n * Allows accessing field definitions for introspection.\n */\n readonly fields: Fields;\n\n instanceOf(value: unknown): boolean;\n}\n\n// type MakeProps =\n// | boolean\n// | {\n// readonly disableValidation?: boolean;\n// };\n\n// NOTE: Utils copied from Effect `Schema.ts`.\n// const _ownKeys = (o: object): Array<PropertyKey> =>\n// (Object.keys(o) as Array<PropertyKey>).concat(Object.getOwnPropertySymbols(o));\n\n// const _lazilyMergeDefaults = (\n// fields: Schema.Struct.Fields,\n// out: Record<PropertyKey, unknown>,\n// ): { [x: string | symbol]: unknown } => {\n// const ownKeys = _ownKeys(fields);\n// for (const key of ownKeys) {\n// const field = fields[key];\n// if (out[key] === undefined && Schema.isPropertySignature(field)) {\n// const ast = field.ast;\n// const defaultValue = ast._tag === 'PropertySignatureDeclaration' ? ast.defaultValue : ast.to.defaultValue;\n// if (defaultValue !== undefined) {\n// out[key] = defaultValue();\n// }\n// }\n// }\n// return out;\n// };\n\n// const _getDisableValidationMakeOption = (options: MakeProps | undefined): boolean =>\n// Predicate.isBoolean(options) ? options : options?.disableValidation ?? false;\n\n/**\n * @internal\n */\nexport const makeEchoTypeSchema = <\n Self extends Schema.Schema.Any,\n K extends EntityKind = EntityKind,\n // TODO(wittjosiah): Can this be inferred from the schema?\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n>(\n fields: Fields,\n ast: SchemaAST.AST,\n typename: string,\n version: string,\n kind: K,\n): EchoTypeSchema<Self, {}, K, Fields> => {\n return class EchoObjectSchemaClass extends Schema.make<\n EchoTypeSchemaProps<Schema.Schema.Type<Self>>,\n EchoTypeSchemaProps<Schema.Schema.Encoded<Self>>,\n Schema.Schema.Context<Self>\n >(ast) {\n static readonly typename = typename;\n static readonly version = version;\n static readonly [SchemaKindId] = kind;\n static readonly fields = fields;\n\n static override annotations(\n annotations: Schema.Annotations.GenericSchema<EchoTypeSchemaProps<Schema.Schema.Type<Self>>>,\n ): EchoTypeSchema<Self, {}, K, Fields> {\n const schema = Schema.make<EchoTypeSchemaProps<Schema.Schema.Type<Self>>>(ast).annotations(annotations);\n return makeEchoTypeSchema<Self, K, Fields>(fields, schema.ast, typename, version, kind);\n }\n\n // static make(\n // props: RequiredKeys<Schema.TypeLiteral.Constructor<Fields, []>> extends never\n // ? void | Simplify<Schema.TypeLiteral.Constructor<Fields, []>>\n // : Simplify<Schema.TypeLiteral.Constructor<Fields, []>>,\n // options?: MakeProps,\n // ): Simplify<Schema.TypeLiteral.Type<Fields, []>> {\n // const propsWithDefaults: any = _lazilyMergeDefaults(fields, { ...(props as any) });\n // return _getDisableValidationMakeOption(options)\n // ? propsWithDefaults\n // : ParseResult.validateSync(this)(propsWithDefaults);\n // }\n\n static instanceOf(value: unknown): boolean {\n return Schema.is(this)(value);\n }\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { type ForeignKey } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { assumeType } from '@dxos/util';\n\nimport type * as Database from '../../Database';\nimport {\n type ATTR_META,\n type ATTR_TYPE,\n EntityKind,\n KindId,\n type MetaId,\n type ObjectMeta,\n type SchemaId,\n TypeId,\n type Version,\n} from '../types';\n\nimport {\n type ATTR_RELATION_SOURCE,\n type ATTR_RELATION_TARGET,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n} from './relation';\n\n//\n// Defines the internal model of the echo object.\n//\n\n/**\n * Property name for self DXN when object is serialized to JSON.\n */\nexport const ATTR_SELF_DXN = '@dxn';\n\n/**\n * DXN to the object itself.\n */\nexport const SelfDXNId = Symbol.for('@dxos/echo/DXN');\n\n/**\n * Property name for deleted when object is serialized to JSON.\n */\nexport const ATTR_DELETED = '@deleted';\n\n/**\n * Deletion marker.\n */\nexport const ObjectDeletedId = Symbol.for('@dxos/echo/Deleted');\n\n/**\n * Object version accessor symbol.\n */\nexport const ObjectVersionId: unique symbol = Symbol.for('@dxos/echo/Version');\n\n/**\n * Object database accessor symbol.\n */\nexport const ObjectDatabaseId = Symbol.for('@dxos/echo/Database');\n\n/**\n * Internal runtime representation of an object.\n * The fields are accessed through getter functions.\n */\n// NOTE: Each symbol has a jsdoc describing its purpose.\nexport interface InternalObjectProps {\n readonly id: ObjectId;\n readonly [SelfDXNId]: DXN;\n readonly [KindId]: EntityKind;\n readonly [SchemaId]: Schema.Schema.AnyNoContext;\n readonly [TypeId]: DXN;\n readonly [MetaId]?: ObjectMeta;\n readonly [ObjectDatabaseId]?: Database.Database;\n readonly [ObjectDeletedId]?: boolean;\n readonly [ObjectVersionId]?: Version;\n readonly [RelationSourceDXNId]?: DXN;\n readonly [RelationTargetDXNId]?: DXN;\n readonly [RelationSourceId]?: InternalObjectProps;\n readonly [RelationTargetId]?: InternalObjectProps;\n}\n\n/**\n * Entity metadata.\n */\nexport interface ObjectMetaJSON {\n keys: ForeignKey[];\n tags?: string[];\n}\n\n/**\n * JSON representation of an object or relation metadata.\n */\nexport interface ObjectJSON {\n id: string;\n [ATTR_TYPE]: DXN.String;\n [ATTR_SELF_DXN]?: DXN.String;\n [ATTR_DELETED]?: boolean;\n [ATTR_META]?: ObjectMetaJSON;\n [ATTR_RELATION_SOURCE]?: DXN.String;\n [ATTR_RELATION_TARGET]?: DXN.String;\n\n /**\n * Application-specific properties.\n */\n [key: string]: unknown;\n}\n\n/**\n * NOTE: Keep as `function` to avoid type inference issues.\n */\nexport function assertObjectModel(obj: unknown): asserts obj is InternalObjectProps {\n invariant(typeof obj === 'object' && obj !== null, 'Invalid object model: not an object');\n assumeType<InternalObjectProps>(obj);\n invariant(ObjectId.isValid(obj.id), 'Invalid object model: invalid id');\n invariant(obj[TypeId] === undefined || obj[TypeId] instanceof DXN, 'Invalid object model: invalid type');\n invariant(\n obj[KindId] === EntityKind.Object || obj[KindId] === EntityKind.Relation,\n 'Invalid object model: invalid entity kind',\n );\n\n if (obj[KindId] === EntityKind.Relation) {\n invariant(obj[RelationSourceDXNId] instanceof DXN, 'Invalid object model: invalid relation source');\n invariant(obj[RelationTargetDXNId] instanceof DXN, 'Invalid object model: invalid relation target');\n invariant(!(obj[RelationSourceId] instanceof DXN), 'Invalid object model: source pointer is a DXN');\n invariant(!(obj[RelationTargetId] instanceof DXN), 'Invalid object model: target pointer is a DXN');\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport {\n type TypeAnnotation,\n TypeAnnotationId,\n type TypeMeta,\n getEntityKind,\n getSchemaTypename,\n getTypeIdentifierAnnotation,\n makeTypeJsonSchemaAnnotation,\n} from '../annotations';\nimport { EntityKind } from '../types';\n\nimport { type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Property name for relation source when object is serialized to JSON.\n */\nexport const ATTR_RELATION_SOURCE = '@relationSource';\n\n/**\n * Used to access relation source ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.\n */\nexport const RelationSourceId: unique symbol = Symbol.for('@dxos/echo/RelationSource');\n\n/**\n * Used to access relation source ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.\n */\nexport const RelationSourceDXNId: unique symbol = Symbol.for('@dxos/echo/RelationSourceDXN');\n\n/**\n * Property name for relation target when object is serialized to JSON.\n */\nexport const ATTR_RELATION_TARGET = '@relationTarget';\n\n/**\n * Used to access relation target ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.\n */\nexport const RelationTargetId: unique symbol = Symbol.for('@dxos/echo/RelationTarget');\n\n/**\n * Used to access relation target ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.\n */\nexport const RelationTargetDXNId: unique symbol = Symbol.for('@dxos/echo/RelationTargetDXN');\n\n/**\n * Source and target props on relations.\n */\n// TODO(burdon): any?\nexport type RelationSourceTargetRefs<Source = any, Target = any> = {\n /**\n * Source ECHO live object.\n */\n [RelationSourceId]: Source;\n\n /**\n * Target ECHO live object.\n */\n [RelationTargetId]: Target;\n};\n\nexport type RelationSource<R> = R extends RelationSourceTargetRefs<infer Source, infer _Target> ? Source : never;\nexport type RelationTarget<R> = R extends RelationSourceTargetRefs<infer _Source, infer Target> ? Target : never;\n\nexport type EchoRelationSchemaOptions<\n TSource extends Schema.Schema.AnyNoContext,\n TTarget extends Schema.Schema.AnyNoContext,\n> = TypeMeta & {\n source: TSource;\n target: TTarget;\n};\n\n/**\n * Relation schema type with kind marker.\n */\nexport type EchoRelationSchema<\n Self extends Schema.Schema.Any,\n Source extends Schema.Schema.AnyNoContext,\n Target extends Schema.Schema.AnyNoContext,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> = EchoTypeSchema<\n Self,\n RelationSourceTargetRefs<Schema.Schema.Type<Source>, Schema.Schema.Type<Target>>,\n EntityKind.Relation,\n Fields\n>;\n\n/**\n * Schema for Relation entity types.\n */\nexport const EchoRelationSchema = <\n Source extends Schema.Schema.AnyNoContext,\n Target extends Schema.Schema.AnyNoContext,\n>({\n source,\n target,\n typename,\n version,\n}: EchoRelationSchemaOptions<Source, Target>) => {\n assertArgument(Schema.isSchema(source), 'source');\n assertArgument(Schema.isSchema(target), 'target');\n const sourceDXN = getDXNForRelationSchemaRef(source);\n const targetDXN = getDXNForRelationSchemaRef(target);\n if (getEntityKind(source) !== EntityKind.Object) {\n raise(new Error('Source schema must be an echo object schema.'));\n }\n if (getEntityKind(target) !== EntityKind.Object) {\n raise(new Error('Target schema must be an echo object schema.'));\n }\n\n return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ): EchoRelationSchema<Self, Source, Target, Fields> => {\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // Extract fields from the schema if available (Struct schemas have .fields).\n const fields = ((self as any).fields ?? {}) as Fields;\n\n // TODO(dmaretskyi): Does `Schema.mutable` work for deep mutability here?\n // TODO(dmaretskyi): Do not do mutable here.\n const schemaWithId = Schema.extend(Schema.mutable(self), Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: {\n kind: EntityKind.Relation,\n typename,\n version,\n sourceSchema: sourceDXN,\n targetSchema: targetDXN,\n } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Relation,\n typename,\n version,\n relationSource: sourceDXN,\n relationTarget: targetDXN,\n }),\n });\n\n return makeEchoTypeSchema<Self, EntityKind.Relation, Fields>(fields, ast, typename, version, EntityKind.Relation);\n };\n};\n\nconst getDXNForRelationSchemaRef = (schema: Schema.Schema.Any): string => {\n assertArgument(Schema.isSchema(schema), 'schema');\n const identifier = getTypeIdentifierAnnotation(schema);\n if (identifier) {\n return identifier;\n }\n\n const typename = getSchemaTypename(schema);\n if (!typename) {\n throw new Error('Schema must have a typename');\n }\n\n return DXN.fromTypename(typename).toString();\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type TypeAnnotation, TypeAnnotationId, type TypeMeta, makeTypeJsonSchemaAnnotation } from '../annotations';\nimport { EntityKind } from '../types';\n\nimport { type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Object schema type with kind marker.\n */\nexport type EchoObjectSchema<\n Self extends Schema.Schema.Any,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> = EchoTypeSchema<Self, {}, EntityKind.Object, Fields>;\n\n/**\n * Schema for Obj entity types.\n * Pipeable function to add ECHO object annotations to a schema.\n */\nexport const EchoObjectSchema: {\n (\n meta: TypeMeta,\n ): <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ) => EchoObjectSchema<Self, Fields>;\n} = ({ typename, version }) => {\n return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ): EchoObjectSchema<Self, Fields> => {\n invariant(typeof TypeAnnotationId === 'symbol', 'Sanity.');\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // Extract fields from the schema if available (Struct schemas have .fields).\n const fields = ((self as any).fields ?? {}) as Fields;\n\n // TODO(dmaretskyi): Does `Schema.mutable` work for deep mutability here?\n // TODO(dmaretskyi): Do not do mutable here.\n const schemaWithId = Schema.extend(Schema.mutable(self), Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: { kind: EntityKind.Object, typename, version } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Object,\n typename,\n version,\n }),\n });\n\n return makeEchoTypeSchema<Self, EntityKind.Object, Fields>(fields, ast, typename, version, EntityKind.Object);\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { assumeType } from '@dxos/util';\n\nimport { type InternalObjectProps, SelfDXNId } from './model';\n\n/**\n * Returns a DXN for an object or schema.\n *\n * @internal\n */\nexport const getObjectDXN = (object: any): DXN | undefined => {\n invariant(!Schema.isSchema(object), 'schema not allowed in this function');\n assertArgument(typeof object === 'object' && object != null, 'object', 'expected object');\n assumeType<InternalObjectProps>(object);\n\n if (object[SelfDXNId]) {\n invariant(object[SelfDXNId] instanceof DXN, 'Invalid object model: invalid self dxn');\n return object[SelfDXNId];\n }\n\n if (!ObjectId.isValid(object.id)) {\n throw new TypeError('Object id is not valid.');\n }\n\n return DXN.fromLocalObjectId(object.id);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { ForeignKey } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport type { DeepReadonly } from '@dxos/util';\n\nimport { type Mutable } from '../proxy';\nimport { type AnyProperties, type ObjectMeta, getMeta as getMeta$ } from '../types';\n\n/**\n * Deeply read-only version of ObjectMeta.\n */\nexport type ReadonlyMeta = DeepReadonly<ObjectMeta>;\n\n/**\n * Mutable meta type received in meta mutation callbacks.\n */\nexport type Meta = ObjectMeta;\n\n/**\n * Get the metadata for an entity with validation.\n * Returns mutable meta when passed a mutable entity (inside change callback).\n * Returns read-only meta when passed a regular entity or snapshot.\n *\n * TODO(burdon): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.\n */\nexport function getMetaChecked(entity: Mutable<AnyProperties>): ObjectMeta;\nexport function getMetaChecked(entity: AnyProperties): ReadonlyMeta;\nexport function getMetaChecked(entity: AnyProperties): ObjectMeta | ReadonlyMeta {\n assertArgument(entity, 'entity', 'Should be an entity.');\n const meta = getMeta$(entity);\n invariant(meta != null, 'Invalid entity.');\n return meta;\n}\n\n/**\n * @returns Foreign keys for the entity from the specified source.\n * Accepts both reactive entities and snapshots.\n */\nexport const getKeys = (entity: AnyProperties, source: string): ForeignKey[] => {\n assertArgument(entity, 'entity', 'Should be an entity.');\n const meta = getMetaChecked(entity);\n invariant(meta != null, 'Invalid entity.');\n return meta.keys.filter((key) => key.source === source);\n};\n\n/**\n * Delete all keys from the entity for the specified source.\n * Must be called within an Obj.change or Relation.change callback.\n */\nexport const deleteKeys = (entity: Mutable<AnyProperties>, source: string) => {\n const meta = getMetaChecked(entity);\n for (let i = 0; i < meta.keys.length; i++) {\n if (meta.keys[i].source === source) {\n meta.keys.splice(i, 1);\n i--;\n }\n }\n};\n\n/**\n * Add a tag to the entity.\n * Must be called within an Obj.change or Relation.change callback.\n */\nexport const addTag = (entity: Mutable<AnyProperties>, tag: string) => {\n const meta = getMetaChecked(entity);\n meta.tags ??= [];\n meta.tags.push(tag);\n};\n\n/**\n * Remove a tag from the entity.\n * Must be called within an Obj.change or Relation.change callback.\n */\nexport const removeTag = (entity: Mutable<AnyProperties>, tag: string) => {\n const meta = getMetaChecked(entity);\n if (!meta.tags) {\n return;\n }\n for (let i = 0; i < meta.tags.length; i++) {\n if (meta.tags[i] === tag) {\n meta.tags.splice(i, 1);\n i--;\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { getTypename } from '../annotations';\nimport type { AnyEntity } from '../types';\n\nimport { getLabel } from './annotations';\n\n/**\n * String comparison helper for sorting.\n */\nexport const compare = (a?: string, b?: string): number => {\n if (a == null) {\n return b == null ? 0 : 1;\n }\n if (b == null) {\n return -1;\n }\n return a.localeCompare(b);\n};\n\n/**\n * Comparator function type for sorting entities.\n * Accepts both reactive entities and snapshots.\n */\nexport type Comparator<T extends AnyEntity = AnyEntity> = (a: T, b: T) => number;\n\n/**\n * Sort entities by label.\n */\nexport const sortByLabel: Comparator = (a: AnyEntity, b: AnyEntity) => compare(getLabel(a), getLabel(b));\n\n/**\n * Sort entities by typename.\n */\nexport const sortByTypename: Comparator = (a: AnyEntity, b: AnyEntity) => compare(getTypename(a), getTypename(b));\n\n/**\n * Compose multiple comparators into one.\n * Applies comparators in order until one returns non-zero.\n */\nexport const sort = <T extends AnyEntity>(...comparators: Comparator<T>[]): Comparator<T> => {\n return (a: T, b: T) => {\n for (const comparator of comparators) {\n const result = comparator(a, b);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { assertArgument } from '@dxos/invariant';\n\nimport { ObjectVersionId } from '../entities';\nimport { type AnyEntity, VersionTypeId } from '../types';\n\n/**\n * Represent entity version.\n * May be backed by Automerge.\n * Entities with no history are not versioned.\n * Named EntityVersion to avoid conflict with types/version.ts.\n */\nexport interface EntityVersion {\n [VersionTypeId]: {};\n\n /**\n * Whether the entity is versioned.\n */\n versioned: boolean;\n\n /**\n * Automerge heads.\n */\n automergeHeads?: string[];\n}\n\nconst unversioned: EntityVersion = {\n [VersionTypeId]: {},\n versioned: false,\n};\n\n/**\n * Checks that `obj` is a version object.\n */\nexport const isVersion = (entity: unknown): entity is EntityVersion => {\n return entity != null && typeof entity === 'object' && VersionTypeId in entity;\n};\n\n/**\n * Returns the version of an entity.\n * Accepts both reactive entities and snapshots.\n */\nexport const version = (entity: AnyEntity): EntityVersion => {\n const ver = (entity as any)[ObjectVersionId];\n if (ver === undefined) {\n return unversioned;\n }\n return ver;\n};\n\n/**\n * Checks that `version` is a valid version object.\n */\nexport const versionValid = (ver: EntityVersion): boolean => {\n assertArgument(isVersion(ver), 'version', 'Invalid version object');\n return !!ver.versioned;\n};\n\nexport type VersionCompareResult = 'unversioned' | 'equal' | 'different';\n\n/**\n * Compares two versions.\n * @param version1\n * @param version2\n * @returns 'unversioned' if either entity is unversioned, 'equal' if the versions are equal, 'different' if the versions are different.\n */\nexport const compareVersions = (version1: EntityVersion, version2: EntityVersion): VersionCompareResult => {\n assertArgument(isVersion(version1), 'version1', 'Invalid version object');\n assertArgument(isVersion(version2), 'version2', 'Invalid version object');\n\n if (!versionValid(version1) || !versionValid(version2)) {\n return 'unversioned';\n }\n\n if (version1.automergeHeads?.length !== version2.automergeHeads?.length) {\n return 'different';\n }\n if (version1.automergeHeads?.some((head) => !version2.automergeHeads?.includes(head))) {\n return 'different';\n }\n\n return 'equal';\n};\n\nexport const encodeVersion = (ver: EntityVersion): string => {\n return JSON.stringify(ver);\n};\n\nexport const decodeVersion = (ver: string): EntityVersion => {\n const parsed = JSON.parse(ver);\n parsed[VersionTypeId] = {};\n return parsed;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { GeneratorAnnotationId, LabelAnnotationId, PropertyMetaAnnotationId } from '../annotations';\nimport { CurrencyAnnotationId, FormatAnnotationId } from '../formats';\nimport { type JsonSchemaEchoAnnotations, type JsonSchemaType } from '../json-schema';\n\n//\n// This file configures annotations for JSON encoding/decoding.\n//\n\n// Go on the root level.\ntype RootJsonSchemaProperty = keyof JsonSchemaType;\n\n// Go on the namespaced `annotations` property.\ntype NamespacedJsonSchemaProperty = keyof JsonSchemaEchoAnnotations;\n\n/**\n * List of annotations for JSON encoding/decoding.\n * Omits default effect-schema annotations since they are encoded with default serializer.\n */\n// TODO(burdon): Reconcile with `EchoAnnotations`.\nexport const CustomAnnotations: Partial<Record<RootJsonSchemaProperty, symbol>> = {\n format: FormatAnnotationId,\n currency: CurrencyAnnotationId,\n};\n\n/**\n * List of annotations for JSON decoding only.\n * Includes default effect annotations.\n */\nexport const DecodedAnnotations: Partial<Record<RootJsonSchemaProperty, symbol>> = {\n title: SchemaAST.TitleAnnotationId,\n description: SchemaAST.DescriptionAnnotationId,\n};\n\n/**\n * Annotations that go into ECHO namespace in json-schema.\n */\n// TODO(dmaretskyi): Consider removing ECHO namespace and putting them at the top level.\n// TODO(dmaretskyi): Move to format.ts when circular imports are solved\nexport const EchoAnnotations: Partial<Record<NamespacedJsonSchemaProperty, symbol>> = {\n // TODO(dmaretskyi): `FieldLookupAnnotationId` might go here, but lets remove it entirely and use LabelAnnotation instead.\n meta: PropertyMetaAnnotationId,\n generator: GeneratorAnnotationId,\n labelProp: LabelAnnotationId,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { JsonPath, type JsonProp } from '@dxos/effect';\n\nimport { FormatAnnotation, TypeFormat } from '../formats';\nimport { EntityKindSchema } from '../types';\n\n//\n// JSON Schema\n//\n\n// TODO(burdon): Reuse/reconcile with ScalarTypeEnum (handle arrays).\nconst SimpleTypes = Schema.Literal('array', 'boolean', 'integer', 'null', 'number', 'object', 'string');\n\nconst NonNegativeInteger = Schema.Number.pipe(Schema.greaterThanOrEqualTo(0));\n\nconst StringArray = Schema.Array(Schema.String).pipe(Schema.mutable);\n\nconst JsonSchemaOrBoolean = Schema.Union(\n Schema.suspend(() => JsonSchemaType),\n Schema.Boolean,\n);\n\n/**\n * Go under the `annotations` property.\n */\nexport const JsonSchemaEchoAnnotations = Schema.Struct({\n /**\n * Label for this schema.\n * Mapped from {@link LabelAnnotationId}.\n */\n labelProp: Schema.optional(Schema.Union(JsonPath, Schema.Array(JsonPath))),\n\n /**\n * Generator function for this schema.\n * Mapped from {@link GeneratorAnnotationId}.\n */\n generator: Schema.optional(Schema.Union(Schema.String, Schema.Tuple(Schema.String, Schema.Number))),\n\n /**\n * {@link PropertyMeta} annotations get serialized here.\n */\n meta: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.Any,\n }).pipe(Schema.mutable),\n ),\n\n /**\n * @deprecated\n */\n // TODO(dmaretskyi): We risk old schema not passing validation due to the extra fields. Remove when we are sure this is safe.\n type: Schema.optional(\n Schema.Struct({\n typename: Schema.String,\n version: Schema.String,\n\n // Not used.\n schemaId: Schema.optional(Schema.String),\n }).pipe(Schema.mutable),\n ),\n\n /**\n * @deprecated Superseded by `meta`.\n */\n annotations: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.Any,\n }).pipe(Schema.mutable),\n ),\n}).pipe(Schema.mutable);\nexport type JsonSchemaEchoAnnotations = Schema.Schema.Type<typeof JsonSchemaEchoAnnotations>;\n\n/**\n * Describes a schema for the JSON-schema objects stored in ECHO.\n * Contains extensions for ECHO (e.g., references).\n * Ref: https://json-schema.org/draft-07/schema\n */\n// TODO(burdon): Integrate with Effect Serializable?\n// TODO(dmaretskyi): Update to latest draft: https://json-schema.org/draft/2020-12\nconst _JsonSchemaType = Schema.Struct({\n /**\n * Identifier for this schema.\n * This schema might be referenced by $ref clause in other schemas.\n */\n // TODO(dmaretskyi): Specify how the ids are generated.\n // TODO(dmaretskyi): For type dxns, should this include the version?\n $id: Schema.optional(Schema.String),\n\n /**\n * Schema of this schema.\n * Set to \"https://json-schema.org/draft-07/schema\".\n */\n $schema: Schema.optional(Schema.String),\n\n /**\n * Reference to another schema.\n */\n $ref: Schema.optional(Schema.String),\n\n /**\n * Comments are ignored when interpreting the schema.\n */\n $comment: Schema.optional(Schema.String),\n\n /**\n * Defines whether this schema is an object schema or a relation schema.\n */\n entityKind: Schema.optional(EntityKindSchema),\n\n /**\n * Typename of this schema.\n * Only on schema representing an ECHO object.\n *\n * @example 'example.com/type/MyType'\n */\n typename: Schema.optional(Schema.String),\n\n /**\n * Version of this schema.\n * Custom dialect for ECHO.\n */\n version: Schema.optional(Schema.String),\n\n /**\n * Target of this relation.\n * Only for relation schemas.\n * The referenced schema must be an object schema.\n */\n relationTarget: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n /**\n * Source of this relation.\n * Only for relation schemas.\n * The referenced schema must be an object schema.\n */\n relationSource: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n /**\n * Title of this schema.\n */\n title: Schema.optional(Schema.String),\n\n /**\n * Description of this schema.\n */\n description: Schema.optional(Schema.String),\n\n /**\n * Whether this schema is read-only.\n */\n readOnly: Schema.optional(Schema.Boolean),\n\n /**\n * Whether this schema is write-only.\n */\n writeOnly: Schema.optional(Schema.Boolean),\n\n /**\n * Examples of instances of this schema.\n */\n examples: Schema.optional(Schema.Array(Schema.Any)),\n\n /**\n * Default value for this schema.\n */\n default: Schema.optional(Schema.Any),\n\n /**\n * This schema only matches values that are equal to this value.\n */\n const: Schema.optional(Schema.Any),\n\n /**\n * This schema only matches one of the values in this array.\n */\n enum: Schema.optional(Schema.Array(Schema.Any)),\n\n /**\n * Base type of the schema.\n */\n type: Schema.optional(Schema.Union(SimpleTypes, Schema.Array(SimpleTypes))),\n\n //\n // Numbers.\n //\n\n multipleOf: Schema.optional(Schema.Number.pipe(Schema.greaterThan(0))),\n maximum: Schema.optional(Schema.Number),\n exclusiveMaximum: Schema.optional(Schema.Number),\n minimum: Schema.optional(Schema.Number),\n exclusiveMinimum: Schema.optional(Schema.Number),\n\n //\n // Strings.\n //\n\n maxLength: Schema.optional(NonNegativeInteger),\n\n /**\n * Regex pattern for strings.\n */\n pattern: Schema.optional(Schema.String.pipe(FormatAnnotation.set(TypeFormat.Regex))),\n\n /**\n * Serialized from {@link FormatAnnotationId}.\n */\n format: Schema.optional(Schema.String),\n\n //\n // Arrays\n //\n\n minLength: Schema.optional(NonNegativeInteger),\n items: Schema.optional(\n Schema.Union(\n Schema.suspend(() => JsonSchemaType),\n Schema.Array(Schema.suspend(() => JsonSchemaType)),\n ),\n ),\n additionalItems: Schema.optional(\n Schema.Union(\n Schema.suspend(() => JsonSchemaType),\n Schema.Boolean,\n ),\n ),\n maxItems: Schema.optional(NonNegativeInteger),\n minItems: Schema.optional(NonNegativeInteger),\n uniqueItems: Schema.optional(Schema.Boolean),\n contains: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n //\n // Objects\n //\n\n maxProperties: Schema.optional(NonNegativeInteger),\n minProperties: Schema.optional(NonNegativeInteger),\n required: Schema.optional(StringArray),\n\n /**\n * Non-standard JSON Schema extension.\n * Defines the order of properties in the object.\n * The unmentioned properties are placed at the end.\n *\n * Related: https://github.com/json-schema/json-schema/issues/119\n */\n propertyOrder: Schema.optional(StringArray),\n\n additionalProperties: Schema.optional(JsonSchemaOrBoolean),\n properties: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }).pipe(Schema.mutable),\n ),\n patternProperties: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }).pipe(Schema.mutable),\n ),\n propertyNames: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n definitions: Schema.optional(\n Schema.mutable(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }),\n ),\n ),\n dependencies: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => Schema.Union(Schema.String, StringArray, JsonSchemaType)).annotations({\n identifier: 'dependency',\n description: 'Dependency',\n }),\n }),\n ),\n\n contentMediaType: Schema.optional(Schema.String),\n contentEncoding: Schema.optional(Schema.String),\n\n if: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n then: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n else: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n allOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),\n anyOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),\n oneOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),\n not: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n $defs: Schema.optional(\n Schema.mutable(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }),\n ),\n ),\n\n //\n // ECHO extensions.\n //\n\n currency: Schema.optional(Schema.String),\n\n reference: Schema.optional(\n Schema.mutable(\n Schema.Struct({\n schema: Schema.suspend(() => JsonSchemaType),\n schemaVersion: Schema.optional(Schema.String),\n schemaObject: Schema.optional(Schema.String),\n }),\n ),\n ),\n\n /**\n * ECHO-specific annotations.\n */\n // TODO(dmaretskyi): Since we are adding a lot of new extensions to the JSON Schema, it is safer to namespace them here.\n annotations: Schema.optional(Schema.mutable(JsonSchemaEchoAnnotations)),\n\n /**\n * @deprecated Use `annotations` instead.\n */\n echo: Schema.optional(Schema.mutable(JsonSchemaEchoAnnotations)),\n}).annotations({ identifier: 'jsonSchema', description: 'JSON Schema' });\n\nexport const JsonSchemaFields = Object.keys(_JsonSchemaType.fields);\n\n/**\n * https://json-schema.org/draft-07/schema\n */\n// TODO(burdon): Reconcile with @effect/Schema/JSONSchema\nexport interface JsonSchemaType extends Schema.Schema.Type<Schema.mutable<typeof _JsonSchemaType>> {}\n\nexport const JsonSchemaType: Schema.Schema<JsonSchemaType> = _JsonSchemaType.pipe(Schema.mutable);\n\n// TODO(burdon): Factor out JSON schema utils.\n\nexport const getSchemaProperty = (schema: JsonSchemaType, property: JsonProp): JsonSchemaType | undefined => {\n return schema.properties?.[property];\n};\n\n// TODO(burdon): Properties should be ordered.\nexport const setSchemaProperty = (schema: JsonSchemaType, property: JsonProp, value: JsonSchemaType) => {\n schema.properties ??= {};\n schema.properties[property] = value;\n return schema;\n};\n\n/**\n * @internal\n */\nexport const ECHO_ANNOTATIONS_NS_DEPRECATED_KEY: keyof JsonSchemaType = 'echo';\n\n/**\n * @internal\n */\nexport const ECHO_ANNOTATIONS_NS_KEY = 'annotations';\n\n/**\n * @internal\n * @returns ECHO annotations namespace object in its normalized form.\n *\n * `meta` holds PropertyMeta annotations.\n * `annotations` holds other annotations.\n */\nexport const getNormalizedEchoAnnotations = (obj: JsonSchemaType): JsonSchemaEchoAnnotations | undefined => {\n if (obj[ECHO_ANNOTATIONS_NS_KEY] != null && obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY] != null) {\n return normalizeEchoAnnotations({\n ...obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY],\n ...obj[ECHO_ANNOTATIONS_NS_KEY],\n });\n } else if (obj[ECHO_ANNOTATIONS_NS_KEY] != null) {\n return normalizeEchoAnnotations(obj[ECHO_ANNOTATIONS_NS_KEY]!);\n } else if (obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY] != null) {\n return normalizeEchoAnnotations(obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY]!);\n } else {\n return undefined;\n }\n};\n\nconst normalizeEchoAnnotations = (obj: JsonSchemaEchoAnnotations): JsonSchemaEchoAnnotations => {\n if (!obj.annotations) {\n return obj;\n } else {\n const res = {\n ...obj,\n meta: {\n ...obj.annotations,\n ...(obj.meta ?? {}),\n },\n };\n delete res.annotations;\n return res;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { JsonSchemaFields, type JsonSchemaType } from './json-schema-type';\n\n/**\n * Normalize schema to to draft-07 format.\n * Note: the input type does not necessarily match the {@link JsonSchemaType} type.\n */\nexport const normalizeSchema = (schema: JsonSchemaType): JsonSchemaType => {\n const copy = structuredClone(schema);\n go(copy);\n return copy;\n};\n\nconst go = (schema: JsonSchemaType) => {\n if (typeof schema !== 'object' || schema === null) {\n return;\n }\n\n if ((schema as any).exclusiveMaximum === true) {\n schema.exclusiveMaximum = schema.maximum;\n delete (schema as any).exclusiveMaximum;\n } else if ((schema as any).exclusiveMaximum === false) {\n delete (schema as any).exclusiveMaximum;\n }\n\n if ((schema as any).exclusiveMinimum === true) {\n schema.exclusiveMinimum = schema.minimum;\n delete (schema as any).exclusiveMinimum;\n } else if ((schema as any).exclusiveMinimum === false) {\n delete (schema as any).exclusiveMinimum;\n }\n\n // Delete all properties that are not in the JsonSchemaFields.\n for (const key of Object.keys(schema)) {\n if (!JsonSchemaFields.includes(key)) {\n delete (schema as any)[key];\n }\n }\n\n // Recursively normalize the schema.\n // Recursively normalize the schema.\n if (schema.properties) {\n goOnRecord(schema.properties);\n }\n if (schema.patternProperties) {\n goOnRecord(schema.patternProperties);\n }\n if (schema.propertyNames) {\n go(schema.propertyNames);\n }\n if (schema.definitions) {\n goOnRecord(schema.definitions);\n }\n if (schema.items) {\n maybeGoOnArray(schema.items);\n }\n if (schema.additionalItems) {\n maybeGoOnArray(schema.additionalItems);\n }\n if (schema.contains) {\n go(schema.contains);\n }\n if (schema.if) {\n go(schema.if);\n }\n if (schema.then) {\n go(schema.then);\n }\n if (schema.else) {\n go(schema.else);\n }\n if (schema.allOf) {\n maybeGoOnArray(schema.allOf);\n }\n if (schema.anyOf) {\n maybeGoOnArray(schema.anyOf);\n }\n if (schema.oneOf) {\n maybeGoOnArray(schema.oneOf);\n }\n if (schema.not) {\n go(schema.not);\n }\n if (schema.$defs) {\n goOnRecord(schema.$defs);\n }\n if (schema.reference) {\n go(schema.reference.schema);\n }\n};\n\nconst maybeGoOnArray = (value: any) => {\n if (Array.isArray(value)) {\n for (const item of value) {\n go(item);\n }\n } else if (typeof value === 'object' && value !== null) {\n go(value);\n }\n};\n\nconst goOnRecord = (record: Record<string, any>) => {\n for (const key of Object.keys(record)) {\n go(record[key]);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as Function from 'effect/Function';\nimport * as JSONSchema from 'effect/JSONSchema';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { raise } from '@dxos/debug';\nimport { mapAst } from '@dxos/effect';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { clearUndefined, orderKeys, removeProperties } from '@dxos/util';\n\nimport {\n type TypeAnnotation,\n TypeAnnotationId,\n TypeIdentifierAnnotationId,\n makeTypeJsonSchemaAnnotation,\n} from '../annotations';\nimport { type JsonSchemaReferenceInfo, createEchoReferenceSchema } from '../ref';\nimport { ANY_OBJECT_TYPENAME, ANY_OBJECT_VERSION, EntityKind, EntityKindSchema } from '../types';\n\nimport { CustomAnnotations, DecodedAnnotations, EchoAnnotations } from './annotations';\nimport {\n ECHO_ANNOTATIONS_NS_DEPRECATED_KEY,\n ECHO_ANNOTATIONS_NS_KEY,\n type JsonSchemaEchoAnnotations,\n type JsonSchemaType,\n getNormalizedEchoAnnotations,\n} from './json-schema-type';\n\n// TODO(burdon): Are these values stored (can they be changed?)\nexport enum PropType {\n NONE = 0,\n STRING = 1, // TODO(burdon): vs TEXT?\n NUMBER = 2,\n BOOLEAN = 3,\n DATE = 4,\n REF = 5,\n RECORD = 6,\n ENUM = 7,\n}\n\n// TODO(burdon): Reconcile with @dxos/schema.\nexport const toPropType = (type?: PropType): string => {\n switch (type) {\n case PropType.STRING:\n return 'string';\n case PropType.NUMBER:\n return 'number';\n case PropType.BOOLEAN:\n return 'boolean';\n case PropType.DATE:\n return 'date';\n case PropType.REF:\n return 'ref';\n case PropType.RECORD:\n return 'object';\n default:\n throw new Error(`Invalid type: ${type}`);\n }\n};\n\nconst JSON_SCHEMA_URL = 'http://json-schema.org/draft-07/schema#';\n\nexport type JsonSchemaOptions = {\n strict?: boolean;\n};\n\n/**\n * Convert effect schema to JSON Schema.\n * NOTE: This handles custom annotations.\n * @param schema\n */\n// TODO(burdon): Reconcile with possibly extending @effect/Schema/JSONSchema\n// We add additional propertyOrder (but the object properties ARE ordered); and type \"string\" for literals.\nexport const toJsonSchema = (schema: Schema.Schema.All, options: JsonSchemaOptions = {}): JsonSchemaType => {\n assertArgument(Schema.isSchema(schema), 'schema');\n let jsonSchema = _toJsonSchemaAST(schema.ast);\n if (options.strict) {\n // TOOD(burdon): Workaround to ensure JSON schema is valid (for agv parsing).\n jsonSchema = removeProperties(jsonSchema, (key, value) => {\n if (key === '$id' && value === '/schemas/any') {\n return true;\n }\n if (key === '$ref' && value === '#/$defs/dependency') {\n return true;\n }\n if (key === '$ref' && value === '#/$defs/jsonSchema') {\n return true;\n }\n\n return false;\n });\n }\n\n return jsonSchema;\n};\n\nconst _toJsonSchemaAST = (ast: SchemaAST.AST): JsonSchemaType => {\n const withRefinements = withEchoRefinements(ast, '#');\n const jsonSchema = JSONSchema.fromAST(withRefinements, {\n definitions: {},\n }) as JsonSchemaType;\n\n return normalizeJsonSchema(jsonSchema);\n};\n\nconst withEchoRefinements = (\n ast: SchemaAST.AST,\n path: string | undefined,\n suspendCache = new Map<SchemaAST.AST, string>(),\n): SchemaAST.AST => {\n if (path) {\n suspendCache.set(ast, path);\n }\n\n let recursiveResult: SchemaAST.AST;\n if (SchemaAST.isSuspend(ast)) {\n // Precompute JSON schema for suspended AST since effect serializer does not support it.\n const suspendedAst = ast.f();\n const cachedPath = suspendCache.get(suspendedAst);\n if (cachedPath) {\n recursiveResult = new SchemaAST.Suspend(() => withEchoRefinements(suspendedAst, path, suspendCache), {\n [SchemaAST.JSONSchemaAnnotationId]: {\n $ref: cachedPath,\n },\n });\n } else {\n const jsonSchema = _toJsonSchemaAST(suspendedAst);\n recursiveResult = new SchemaAST.Suspend(() => withEchoRefinements(suspendedAst, path, suspendCache), {\n [SchemaAST.JSONSchemaAnnotationId]: jsonSchema,\n });\n }\n } else if (SchemaAST.isTypeLiteral(ast)) {\n // Add property order annotations\n recursiveResult = mapAst(ast, (ast, key) =>\n withEchoRefinements(ast, path && typeof key === 'string' ? `${path}/${key}` : undefined, suspendCache),\n );\n recursiveResult = addJsonSchemaFields(recursiveResult, {\n propertyOrder: [...ast.propertySignatures.map((p) => p.name)] as string[],\n });\n } else if (SchemaAST.isUndefinedKeyword(ast)) {\n // Ignore undefined keyword that appears in the optional fields.\n return ast;\n } else {\n recursiveResult = mapAst(ast, (ast, key) =>\n withEchoRefinements(\n ast,\n path && (typeof key === 'string' || typeof key === 'number') ? `${path}/${key}` : undefined,\n suspendCache,\n ),\n );\n }\n\n const annotationFields = annotations_toJsonSchemaFields(ast.annotations);\n if (Object.keys(annotationFields).length === 0) {\n return recursiveResult;\n } else {\n return addJsonSchemaFields(recursiveResult, annotationFields);\n }\n};\n\n/**\n * Convert JSON schema to effect schema.\n * @param root\n * @param definitions\n */\nexport const toEffectSchema = (root: JsonSchemaType, _defs?: JsonSchemaType['$defs']): Schema.Schema.AnyNoContext => {\n const defs = root.$defs ? { ..._defs, ...root.$defs } : (_defs ?? {});\n if ('type' in root && root.type === 'object') {\n return objectToEffectSchema(root, defs);\n }\n\n let result: Schema.Schema.AnyNoContext = Schema.Unknown;\n if ('$ref' in root) {\n switch (root.$ref) {\n case '/schemas/echo/ref': {\n result = refToEffectSchema(root);\n break;\n }\n }\n } else if ('$id' in root) {\n switch (root.$id as string) {\n case '/schemas/any': {\n result = anyToEffectSchema(root as JSONSchema.JsonSchema7Any);\n break;\n }\n case '/schemas/unknown': {\n result = Schema.Unknown;\n break;\n }\n case '/schemas/{}':\n case '/schemas/object': {\n result = Schema.Object;\n break;\n }\n // Custom ECHO object reference.\n case '/schemas/echo/ref': {\n result = refToEffectSchema(root);\n break;\n }\n }\n } else if ('enum' in root) {\n result = Schema.Union(...root.enum!.map((e) => Schema.Literal(e)));\n } else if ('oneOf' in root) {\n result = Schema.Union(...root.oneOf!.map((v) => toEffectSchema(v, defs)));\n } else if ('anyOf' in root) {\n result = Schema.Union(...root.anyOf!.map((v) => toEffectSchema(v, defs)));\n } else if ('allOf' in root) {\n if (root.allOf!.length === 1) {\n result = toEffectSchema(root.allOf![0], defs);\n } else {\n log.warn('allOf with multiple schemas is not supported');\n result = Schema.Unknown;\n }\n } else if ('type' in root) {\n switch (root.type) {\n case 'string': {\n result = Schema.String;\n if (root.pattern) {\n result = result.pipe(Schema.pattern(new RegExp(root.pattern)));\n }\n break;\n }\n case 'number': {\n result = Schema.Number;\n break;\n }\n case 'integer': {\n result = Schema.Number.pipe(Schema.int());\n break;\n }\n case 'boolean': {\n result = Schema.Boolean;\n break;\n }\n case 'array': {\n if (Array.isArray(root.items)) {\n const [required, optional] = Function.pipe(\n root.items,\n Array.map((v) => toEffectSchema(v as JsonSchemaType, defs)),\n Array.splitAt(root.minItems ?? root.items.length),\n );\n result = Schema.Tuple(...required, ...optional.map(Schema.optionalElement));\n } else {\n invariant(root.items);\n const items = root.items;\n result = Array.isArray(items)\n ? Schema.Tuple(...items.map((v) => toEffectSchema(v as JsonSchemaType, defs)))\n : Schema.Array(toEffectSchema(items as JsonSchemaType, defs));\n }\n break;\n }\n case 'null': {\n result = Schema.Null;\n break;\n }\n }\n } else if ('$ref' in root) {\n const refSegments = root.$ref!.split('/');\n const jsonSchema = defs[refSegments[refSegments.length - 1]];\n invariant(jsonSchema, `missing definition for ${root.$ref}`);\n result = toEffectSchema(jsonSchema, defs).pipe(\n Schema.annotations({ identifier: refSegments[refSegments.length - 1] }),\n );\n }\n\n const annotations = jsonSchemaFieldsToAnnotations(root);\n\n // log.info('toEffectSchema', { root, annotations });\n result = result.annotations(annotations);\n\n return result;\n};\n\nconst objectToEffectSchema = (root: JsonSchemaType, defs: JsonSchemaType['$defs']): Schema.Schema.AnyNoContext => {\n invariant('type' in root && root.type === 'object', `not an object: ${root}`);\n\n const echoRefinement: JsonSchemaEchoAnnotations = (root as any)[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY];\n const isEchoObject =\n echoRefinement != null || ('$id' in root && typeof root.$id === 'string' && root.$id.startsWith('dxn:'));\n\n let fields: Schema.Struct.Fields = {};\n const propertyList = Object.entries(root.properties ?? {});\n let immutableIdField: Schema.Schema.AnyNoContext | undefined;\n for (const [key, value] of propertyList) {\n if (isEchoObject && key === 'id') {\n immutableIdField = toEffectSchema(value, defs);\n } else {\n // TODO(burdon): Mutable cast.\n (fields as any)[key] = root.required?.includes(key)\n ? toEffectSchema(value, defs)\n : Schema.optional(toEffectSchema(value, defs));\n }\n }\n\n if (root.propertyOrder) {\n fields = orderKeys(fields, root.propertyOrder as any);\n }\n\n let schema: Schema.Schema<any, any, unknown>;\n if (root.patternProperties) {\n invariant(propertyList.length === 0, 'pattern properties mixed with regular properties are not supported');\n invariant(\n Object.keys(root.patternProperties).length === 1 && Object.keys(root.patternProperties)[0] === '',\n 'only one pattern property is supported',\n );\n\n schema = Schema.Record({ key: Schema.String, value: toEffectSchema(root.patternProperties[''], defs) });\n } else if (typeof root.additionalProperties !== 'object') {\n schema = Schema.Struct(fields);\n } else {\n const indexValue = toEffectSchema(root.additionalProperties, defs);\n if (propertyList.length > 0) {\n schema = Schema.Struct(fields, { key: Schema.String, value: indexValue });\n } else {\n schema = Schema.Record({ key: Schema.String, value: indexValue });\n }\n }\n\n if (immutableIdField) {\n schema = Schema.extend(Schema.mutable(schema), Schema.Struct({ id: immutableIdField }));\n }\n\n const annotations = jsonSchemaFieldsToAnnotations(root);\n return schema.annotations(annotations) as any;\n};\n\nconst anyToEffectSchema = (root: JSONSchema.JsonSchema7Any): Schema.Schema.AnyNoContext => {\n const echoRefinement: JsonSchemaEchoAnnotations = (root as any)[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY];\n // TODO(dmaretskyi): Is this branch still taken?\n if ((echoRefinement as any)?.reference != null) {\n const echoId = root.$id.startsWith('dxn:echo:') ? root.$id : undefined;\n return createEchoReferenceSchema(\n echoId,\n (echoRefinement as any).reference.typename,\n (echoRefinement as any).reference.version,\n );\n }\n\n return Schema.Any;\n};\n\n// TODO(dmaretskyi): Types.\nconst refToEffectSchema = (root: any): Schema.Schema.AnyNoContext => {\n if (!('reference' in root)) {\n // Fallback to generic object ref when no reference info is provided.\n return createEchoReferenceSchema(undefined, ANY_OBJECT_TYPENAME, ANY_OBJECT_VERSION);\n }\n\n const reference: JsonSchemaReferenceInfo = root.reference;\n if (typeof reference !== 'object') {\n throw new Error('Invalid reference field in ref schema');\n }\n\n const targetSchemaDXN = DXN.parse(reference.schema.$ref);\n invariant(targetSchemaDXN.kind === DXN.kind.TYPE);\n\n return createEchoReferenceSchema(\n targetSchemaDXN.toString(),\n targetSchemaDXN.kind === DXN.kind.TYPE ? targetSchemaDXN.parts[0] : undefined,\n reference.schemaVersion,\n );\n};\n\n//\n// Annotations\n//\n\nconst annotations_toJsonSchemaFields = (annotations: SchemaAST.Annotations): Record<symbol, any> => {\n const schemaFields: Record<string, any> = {};\n\n const echoAnnotations: JsonSchemaEchoAnnotations = {};\n for (const [key, annotationId] of Object.entries(EchoAnnotations)) {\n if (annotations[annotationId] != null) {\n echoAnnotations[key as keyof JsonSchemaEchoAnnotations] = annotations[annotationId] as any;\n }\n }\n if (Object.keys(echoAnnotations).length > 0) {\n // TODO(dmaretskyi): use new namespace.\n schemaFields[ECHO_ANNOTATIONS_NS_KEY] = echoAnnotations;\n }\n\n const echoIdentifier = annotations[TypeIdentifierAnnotationId];\n if (echoIdentifier) {\n schemaFields[ECHO_ANNOTATIONS_NS_KEY] ??= {};\n schemaFields[ECHO_ANNOTATIONS_NS_KEY].schemaId = echoIdentifier;\n }\n\n // Custom (at end).\n for (const [key, annotationId] of Object.entries(CustomAnnotations)) {\n const value = annotations[annotationId];\n if (value != null) {\n schemaFields[key] = value;\n }\n }\n\n return schemaFields;\n};\n\nconst decodeTypeIdentifierAnnotation = (schema: JsonSchemaType): string | undefined => {\n // Limit to dxn:echo: URIs.\n if (schema.$id && schema.$id.startsWith('dxn:echo:')) {\n return schema.$id;\n } else if (schema.$id && schema.$id.startsWith('dxn:type:') && schema?.echo?.type?.schemaId) {\n const id = schema?.echo?.type?.schemaId;\n if (ObjectId.isValid(id)) {\n return DXN.fromLocalObjectId(id).toString();\n }\n }\n return undefined;\n};\n\nconst decodeTypeAnnotation = (schema: JsonSchemaType): TypeAnnotation | undefined => {\n if (schema.typename) {\n const annotation: Types.Mutable<TypeAnnotation> = {\n // TODO(dmaretskyi): Decoding default.\n kind: schema.entityKind ? Schema.decodeSync(EntityKindSchema)(schema.entityKind) : EntityKind.Object,\n typename: schema.typename,\n version: schema.version ?? '0.1.0',\n };\n\n if (annotation.kind === EntityKind.Relation) {\n const source = schema.relationSource?.$ref ?? raise(new Error('Relation source not set'));\n const target = schema.relationTarget?.$ref ?? raise(new Error('Relation target not set'));\n annotation.sourceSchema = DXN.parse(source).toString();\n annotation.targetSchema = DXN.parse(target).toString();\n }\n\n return annotation;\n }\n\n // Decode legacy schema.\n if (!schema.typename && schema?.echo?.type) {\n return {\n kind: EntityKind.Object,\n typename: schema.echo.type.typename,\n version: schema.echo.type.version,\n };\n }\n\n return undefined;\n};\n\nconst jsonSchemaFieldsToAnnotations = (schema: JsonSchemaType): SchemaAST.Annotations => {\n const annotations: Types.Mutable<Schema.Annotations.Schema<any>> = {};\n\n const echoAnnotations: JsonSchemaEchoAnnotations = getNormalizedEchoAnnotations(schema) ?? {};\n if (echoAnnotations) {\n for (const [key, annotationId] of Object.entries(EchoAnnotations)) {\n if (echoAnnotations[key as keyof JsonSchemaEchoAnnotations]) {\n annotations[annotationId] = echoAnnotations[key as keyof JsonSchemaEchoAnnotations];\n }\n }\n }\n\n annotations[TypeIdentifierAnnotationId] = decodeTypeIdentifierAnnotation(schema);\n const typeAnnotation = decodeTypeAnnotation(schema);\n if (typeAnnotation) {\n annotations[TypeAnnotationId] = typeAnnotation;\n annotations[SchemaAST.JSONSchemaAnnotationId] = makeTypeJsonSchemaAnnotation({\n kind: typeAnnotation.kind,\n typename: typeAnnotation.typename,\n version: typeAnnotation.version,\n relationSource: typeAnnotation.sourceSchema,\n relationTarget: typeAnnotation.targetSchema,\n });\n }\n\n // Custom (at end).\n for (const [key, annotationId] of Object.entries({ ...CustomAnnotations, ...DecodedAnnotations })) {\n if (key in schema) {\n annotations[annotationId] = (schema as any)[key];\n }\n }\n\n return clearUndefined(annotations);\n};\n\nconst makeAnnotatedRefinement = (ast: SchemaAST.AST, annotations: SchemaAST.Annotations): SchemaAST.Refinement => {\n return new SchemaAST.Refinement(ast, () => Option.none(), annotations);\n};\n\nconst addJsonSchemaFields = (ast: SchemaAST.AST, schema: JsonSchemaType): SchemaAST.AST =>\n makeAnnotatedRefinement(ast, { [SchemaAST.JSONSchemaAnnotationId]: schema });\n\n/**\n * Fixes field order.\n * Sets `$schema` prop.\n */\nconst normalizeJsonSchema = (jsonSchema: JsonSchemaType): JsonSchemaType => {\n if (jsonSchema.properties && 'id' in jsonSchema.properties) {\n jsonSchema.properties = orderKeys(jsonSchema.properties, ['id']); // Put id first.\n }\n\n // TODO(dmaretskyi): Makes sure undefined is not left on optional fields for the resulting object.\n jsonSchema.$schema = JSON_SCHEMA_URL;\n jsonSchema = orderKeys(jsonSchema, [\n '$schema',\n '$id',\n\n 'entityKind',\n 'typename',\n 'version',\n 'relationTarget',\n 'relationSource',\n\n 'type',\n 'enum',\n\n 'properties',\n 'required',\n 'propertyOrder', // Custom.\n 'items',\n 'additionalProperties',\n\n 'anyOf',\n 'oneOf',\n ]);\n return jsonSchema;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as ParseResult from 'effect/ParseResult';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { Event } from '@dxos/async';\nimport { type CustomInspectFunction, inspectCustom } from '@dxos/debug';\nimport { EncodedReference } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\n\nimport * as Database from '../../Database';\nimport { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../annotations';\nimport { type JsonSchemaType } from '../json-schema';\nimport type { AnyEntity, AnyProperties } from '../types';\n\n/**\n * The `$id` and `$ref` fields for an ECHO reference schema.\n */\nexport const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';\n\nexport const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {\n const { $id, reference: { schema: { $ref } = {} } = {} } = property;\n if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {\n return { typename: DXN.parse($ref).typename };\n }\n};\n\nexport const createSchemaReference = (typename: string): JsonSchemaType => {\n return {\n $id: JSON_SCHEMA_ECHO_REF_ID,\n reference: {\n schema: {\n $ref: DXN.fromTypename(typename).toString(),\n },\n },\n };\n};\n\n/**\n * Runtime type-info for a reference extracted from effect AST.\n */\nexport type RefereneAST = {\n /**\n * Typename of linked schema.\n */\n typename: string;\n\n /**\n * Version of linked schema.\n */\n version: string;\n};\n\nexport const getReferenceAst = (ast: SchemaAST.AST): RefereneAST | undefined => {\n if (ast._tag !== 'Declaration' || !ast.annotations[ReferenceAnnotationId]) {\n return undefined;\n }\n return {\n typename: (ast.annotations[ReferenceAnnotationId] as any).typename,\n version: (ast.annotations[ReferenceAnnotationId] as any).version,\n };\n};\n\nexport const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');\n\n/**\n * Reference Schema.\n */\nexport interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}\n\n/**\n * Type of the `Ref` function and extra methods attached to it.\n */\nexport interface RefFn {\n <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>>;\n\n /**\n * @returns True if the object is a reference.\n */\n isRef: (obj: unknown) => obj is Ref<any>;\n\n /**\n * @returns True if the reference points to the given object id.\n */\n hasObjectId: (id: ObjectId) => (ref: Ref<any>) => boolean;\n\n /**\n * @returns True if the schema is a reference schema.\n */\n isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;\n\n /**\n * @returns True if the schema AST is a reference schema.\n */\n isRefSchemaAST: (ast: SchemaAST.AST) => boolean;\n\n /**\n * Constructs a reference that points to the given object.\n */\n // TODO(burdon): Narrow to Obj.Unknown?\n make: <T extends AnyEntity>(object: T) => Ref<T>;\n\n /**\n * Constructs a reference that points to the object specified by the provided DXN.\n */\n fromDXN: (dxn: DXN) => Ref<any>;\n}\n\n/**\n * Schema builder for references.\n */\nexport const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {\n assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');\n const annotation = getTypeAnnotation(schema);\n if (annotation == null) {\n throw new Error('Reference target must be an ECHO schema.');\n }\n\n return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);\n};\n\n/**\n * Represents materialized reference to a target.\n * This is the data type for the fields marked as ref.\n */\nexport interface Ref<T> {\n /**\n * Target object DXN.\n */\n get dxn(): DXN;\n\n /**\n * Returns true if the reference has a target available (inlined or resolver set).\n */\n get isAvailable(): boolean;\n\n /**\n * @returns The reference target.\n * May return `undefined` if the object is not loaded in the working set.\n * Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.\n */\n get target(): T | undefined;\n\n /**\n * @returns Promise that will resolves with the target object.\n * Will load the object from disk if it is not present in the working set.\n * @throws If the object is not available locally.\n */\n load(): Promise<T>;\n\n /**\n * @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.\n */\n\n tryLoad(): Promise<T | undefined>;\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n *\n * When serialized with toJSON, the difference is between:\n * `{ \"/\": \"dxn:...\" }`\n * and\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n *\n * Clones the reference object.\n */\n noInline(): Ref<T>;\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n *\n * Examples:\n * `{ \"/\": \"dxn:...\" }`\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n */\n encode(): EncodedReference;\n\n [RefTypeId]: {\n _T: T;\n };\n}\n\nexport declare namespace Ref {\n /**\n * Target of the reference.\n */\n export type Target<R> = R extends Ref<infer U> ? U : never;\n}\n\nRef.isRef = (obj: any): obj is Ref<any> => {\n return obj && typeof obj === 'object' && RefTypeId in obj;\n};\n\nRef.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;\n\nRef.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {\n return Ref.isRefSchemaAST(schema.ast);\n};\n\nRef.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {\n return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);\n};\n\nRef.make = <T extends AnyProperties>(obj: T): Ref<T> => {\n if (typeof obj !== 'object' || obj === null) {\n throw new TypeError('Expected: ECHO object.');\n }\n\n // TODO(dmaretskyi): Extract to `getObjectDXN` function.\n const id = obj.id;\n invariant(ObjectId.isValid(id), 'Invalid object ID');\n const dxn = DXN.fromLocalObjectId(id);\n return new RefImpl(dxn, obj);\n};\n\nRef.fromDXN = (dxn: DXN): Ref<any> => {\n assertArgument(dxn instanceof DXN, 'dxn', 'Expected DXN');\n return new RefImpl(dxn);\n};\n\n/**\n * `reference` field on the schema object.\n */\nexport type JsonSchemaReferenceInfo = {\n schema: { $ref: string };\n schemaVersion?: string;\n};\n\n/**\n * @internal\n */\n// TODO(burdon): Move to json schema and make private?\nexport const createEchoReferenceSchema = (\n echoId: string | undefined,\n typename: string | undefined,\n version: string | undefined,\n): Schema.SchemaClass<Ref<any>, EncodedReference> => {\n if (!echoId && !typename) {\n throw new TypeError('Either echoId or typename must be provided.');\n }\n\n const referenceInfo: JsonSchemaReferenceInfo = {\n schema: {\n // TODO(dmaretskyi): Include version?\n $ref: echoId ?? DXN.fromTypename(typename!).toString(),\n },\n schemaVersion: version,\n };\n\n // TODO(dmaretskyi): Add name and description.\n const refSchema = Schema.declare<Ref<any>, EncodedReference, []>(\n [],\n {\n encode: () => {\n return (value) =>\n Effect.gen(function* () {\n if (Ref.isRef(value)) {\n return EncodedReference.fromDXN((value as Ref<any>).dxn);\n } else if (EncodedReference.isEncodedReference(value)) {\n return value;\n }\n throw new Error('Invalid reference');\n });\n },\n decode: () => {\n return (value) =>\n Effect.gen(function* () {\n const dbService = yield* Effect.serviceOption(Database.Service);\n\n // TODO(dmaretskyi): This branch seems to be taken by Schema.is\n if (Ref.isRef(value)) {\n if (Option.isSome(dbService)) {\n return dbService.value.db.makeRef(value.dxn);\n } else {\n return value;\n }\n }\n\n if (!EncodedReference.isEncodedReference(value)) {\n return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));\n }\n if (Option.isSome(dbService)) {\n return dbService.value.db.makeRef(EncodedReference.toDXN(value));\n } else {\n return Ref.fromDXN(EncodedReference.toDXN(value));\n }\n });\n },\n },\n {\n jsonSchema: {\n // TODO(dmaretskyi): We should remove `$id` and keep `$ref` with a fully qualified name.\n $id: JSON_SCHEMA_ECHO_REF_ID,\n $ref: JSON_SCHEMA_ECHO_REF_ID,\n reference: referenceInfo,\n },\n [ReferenceAnnotationId]: {\n typename: typename ?? '',\n version,\n },\n },\n );\n\n return refSchema;\n};\n\nconst getSchemaExpectedName = (ast: SchemaAST.Annotated): string | undefined => {\n return SchemaAST.getIdentifierAnnotation(ast).pipe(\n Option.orElse(() => SchemaAST.getTitleAnnotation(ast)),\n Option.orElse(() => SchemaAST.getDescriptionAnnotation(ast)),\n Option.getOrElse(() => undefined),\n );\n};\n\nexport interface RefResolver {\n /**\n * Resolve ref synchronously from the objects in the working set.\n *\n * @param dxn\n * @param load If true the resolver should attempt to load the object from disk.\n * @param onLoad Callback to call when the object is loaded.\n */\n resolveSync(dxn: DXN, load: boolean, onLoad?: () => void): AnyProperties | undefined;\n\n /**\n * Resolver ref asynchronously.\n */\n resolve(dxn: DXN): Promise<AnyProperties | undefined>;\n\n // TODO(dmaretskyi): Combine with `resolve`.\n resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined>;\n}\n\nexport class RefImpl<T> implements Ref<T> {\n #dxn: DXN;\n #resolver?: RefResolver = undefined;\n #resolved = new Event<void>();\n\n /**\n * Target is set when the reference is created from a specific object.\n * In this case, the target might not be in the database.\n */\n #target: T | undefined = undefined;\n\n /**\n * Callback to issue a reactive notification when object is resolved.\n */\n #resolverCallback = () => {\n this.#resolved.emit();\n };\n\n constructor(dxn: DXN, target?: T) {\n this.#dxn = dxn;\n this.#target = target;\n }\n\n /**\n * @inheritdoc\n */\n get dxn(): DXN {\n return this.#dxn;\n }\n\n /**\n * @inheritdoc\n */\n get isAvailable(): boolean {\n return this.#target !== undefined || this.#resolver !== undefined;\n }\n\n /**\n * @inheritdoc\n */\n get target(): T | undefined {\n if (this.#target) {\n return this.#target;\n }\n\n invariant(this.#resolver, 'Resolver is not set');\n return this.#resolver.resolveSync(this.#dxn, true, this.#resolverCallback) as T | undefined;\n }\n\n /**\n * @inheritdoc\n */\n async load(): Promise<T> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n const obj = await this.#resolver.resolve(this.#dxn);\n if (obj == null) {\n throw new Error('Object not found');\n }\n return obj as T;\n }\n\n /**\n * @inheritdoc\n */\n async tryLoad(): Promise<T | undefined> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n return (await this.#resolver.resolve(this.#dxn)) as T | undefined;\n }\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n * Clones the reference object.\n */\n noInline(): RefImpl<T> {\n const ref = new RefImpl<T>(this.#dxn, undefined);\n ref.#resolver = this.#resolver;\n return ref;\n }\n\n encode(): EncodedReference {\n return {\n '/': this.#dxn.toString(),\n ...(this.#target ? { target: this.#target } : {}),\n };\n }\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n */\n toJSON(): EncodedReference {\n return this.encode();\n }\n\n toString(): string {\n if (this.#target) {\n return `Ref(${this.#target.toString()})`;\n }\n\n return `Ref(${this.#dxn.toString()})`;\n }\n\n [inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {\n return this.toString();\n };\n\n [RefTypeId] = refVariance;\n\n /**\n * Internal method to set the resolver.\n *\n * @internal\n */\n _setResolver(resolver: RefResolver): void {\n this.#resolver = resolver;\n }\n\n /**\n * @internal\n */\n _getSavedTarget(): T | undefined {\n return this.#target;\n }\n}\n\n/**\n * Internal API for setting the reference resolver.\n */\nexport const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n ref._setResolver(resolver);\n};\n\n/**\n * Internal API for getting the saved target on a reference.\n */\nexport const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n return ref._getSavedTarget();\n};\n\n// Used to validate reference target type.\nconst refVariance: Ref<any>[typeof RefTypeId] = {\n _T: null as any,\n};\n\nexport const refFromEncodedReference = (encodedReference: EncodedReference, resolver?: RefResolver): Ref<any> => {\n const dxn = DXN.parse(encodedReference['/']);\n const ref = new RefImpl(dxn);\n\n // TODO(dmaretskyi): Handle inline target in the encoded reference.\n\n if (resolver) {\n setRefResolver(ref, resolver);\n }\n return ref;\n};\n\nexport class StaticRefResolver implements RefResolver {\n public objects = new Map<ObjectId, AnyProperties>();\n public schemas = new Map<DXN.String, Schema.Schema.AnyNoContext>();\n\n addObject(obj: AnyProperties): this {\n this.objects.set(obj.id, obj);\n return this;\n }\n\n addSchema(schema: Schema.Schema.AnyNoContext): this {\n const dxn = getSchemaDXN(schema);\n invariant(dxn, 'Schema has no DXN');\n this.schemas.set(dxn.toString(), schema);\n return this;\n }\n\n resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolve(dxn: DXN): Promise<AnyProperties | undefined> {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined> {\n return this.schemas.get(dxn.toString());\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ObjectId } from '@dxos/keys';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type AnyEntity } from '../types';\n\nimport { Ref } from './ref';\n\n/**\n * Helper functions for working with arrays of refs.\n */\nexport const RefArray = Object.freeze({\n /**\n * @returns all resolved targets.\n */\n targets: <T extends AnyEntity>(refs: readonly Ref<T>[]): T[] => {\n return refs.map((ref) => ref.target).filter(isNonNullable);\n },\n\n /**\n * Load all referenced objects.\n */\n loadAll: <T extends AnyEntity>(refs: readonly Ref<T>[]): Promise<T[]> => {\n return Promise.all(refs.map((ref) => ref.load()));\n },\n\n /**\n * Removes the ref with the given id.\n */\n removeById: (refs: Ref<AnyEntity>[], id: ObjectId) => {\n const index = refs.findIndex(Ref.hasObjectId(id));\n if (index >= 0) {\n refs.splice(index, 1);\n }\n },\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { getTypename } from '../annotations';\nimport { type AnyProperties } from '../types';\n\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectOptions = {\n // TODO(burdon): Document.\n partial?: true;\n // TODO(burdon): Document.\n record?: true;\n};\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\ntype SimplifiedSchemaFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = Options['partial'] extends boolean\n ? Schema.SimplifyMutable<Partial<Schema.Struct.Type<SchemaFields>>>\n : Schema.SimplifyMutable<Schema.Struct.Type<SchemaFields>>;\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = SimplifiedSchemaFields<SchemaFields, Options> & { id: string } & (Options['record'] extends boolean\n ? Schema.SimplifyMutable<Schema.IndexSignature.Type<Schema.IndexSignature.Records>>\n : {});\n\nexport const makeTypedEntityClass = (\n typename: string,\n version: string,\n baseSchema: Schema.Schema.AnyNoContext,\n): Schema.SchemaClass<any> => {\n return class {\n // Implement TypedObject properties.\n static readonly typename = typename;\n static readonly version = version;\n\n // Implement Schema.Schema properties.\n // TODO(burdon): Comment required.\n static readonly [Schema.TypeId] = schemaVariance;\n static readonly ast = baseSchema.ast;\n static readonly annotations = baseSchema.annotations.bind(baseSchema);\n static readonly pipe = baseSchema.pipe.bind(baseSchema);\n\n // TODO(burdon): Comment required.\n static [Symbol.hasInstance](obj: AnyProperties) {\n return obj != null && getTypename(obj) === typename;\n }\n\n // TODO(burdon): Throw APIError.\n private constructor() {\n throw new Error('Use live(Typename, { ...fields }) to instantiate an object.');\n }\n } as any;\n};\n\nconst schemaVariance = {\n _A: (_: any) => _,\n _I: (_: any) => _,\n _R: (_: never) => _,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, failedInvariant } from '@dxos/invariant';\nimport { ObjectId } from '@dxos/keys';\n\nimport { getSchemaDXN, getTypeAnnotation, setTypename } from '../annotations';\nimport {\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n assertObjectModel,\n getObjectDXN,\n} from '../entities';\nimport { defineHiddenProperty } from '../proxy';\nimport { EntityKind, KindId, MetaId, setSchema } from '../types';\n\nimport { attachedTypedObjectInspector } from './inspect';\nimport { attachTypedJsonSerializer } from './json-serializer';\n\nexport type CreateObjectProps<T> = T extends { id: string } ? Omit<T, 'id' | KindId> & { id?: string } : T;\n\n/**\n * Creates a new object instance from a schema and data, without signal reactivity.\n * This static version creates plain JavaScript objects that are not reactive/observable.\n * For reactive objects that automatically update UI when changed, use the regular live() function.\n *\n * @param schema - The Effect schema that defines the object's structure and type, piped into EchoObjectSchema\n * @param data - The data to initialize the object with. The id and @type fields are handled automatically.\n * @returns A new non-reactive object instance conforming to the schema\n * @throws {Error} If the schema is not an object schema\n * @throws {TypeError} If data contains an @type field\n *\n * @example\n * ```ts\n * const Contact = Schema.Struct({\n * name: Schema.String,\n * email: Schema.String,\n * }).pipe(Type.object({\n * typename: 'example.com/type/Person',\n * version: '0.1.0',\n * }))\n *\n * const contact = createObject(Contact, {\n * name: \"John\",\n * email: \"john@example.com\",\n * })\n * ```\n */\n// TODO(burdon): Make internal.\nexport const createObject = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n props: CreateObjectProps<Schema.Schema.Type<S>>,\n): CreateObjectProps<Schema.Schema.Type<S>> & { id: string; [KindId]: EntityKind } => {\n const annotation = getTypeAnnotation(schema);\n if (!annotation) {\n throw new Error('Schema is not an ECHO schema');\n }\n assertArgument(!('@type' in props), 'data', '@type is not allowed');\n assertArgument(!(RelationSourceDXNId in props), 'data', 'Relation source DXN is not allowed in the constructor');\n assertArgument(!(RelationTargetDXNId in props), 'data', 'Relation target DXN is not allowed in the constructor');\n assertArgument(\n RelationSourceId in props === RelationTargetId in props,\n 'data',\n 'Relation source and target must be provided together',\n );\n\n // Raw object.\n const obj = { ...props, id: props.id ?? ObjectId.random() };\n\n // Metadata.\n const kind = RelationSourceId in props ? EntityKind.Relation : EntityKind.Object;\n defineHiddenProperty(obj, KindId, kind);\n defineHiddenProperty(obj, MetaId, { keys: [] });\n setSchema(obj, schema);\n setTypename(obj, getSchemaDXN(schema) ?? failedInvariant('Missing schema DXN'));\n attachTypedJsonSerializer(obj);\n attachedTypedObjectInspector(obj);\n\n // Relation.\n if (kind === EntityKind.Relation) {\n const sourceDXN = getObjectDXN(props[RelationSourceId]) ?? raise(new Error('Unresolved relation source'));\n const targetDXN = getObjectDXN(props[RelationTargetId]) ?? raise(new Error('Unresolved relation target'));\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);\n }\n\n assertObjectModel(obj);\n return obj;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(dmaretskyi): Rename all symbols that are props to end with *Key.\nexport const EventId = Symbol.for('@dxos/live-object/EventId');\nexport const ChangeId = Symbol.for('@dxos/live-object/ChangeId');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EventId } from './symbols';\n\n/**\n * Simple batching mechanism for EventId emissions.\n * When batch depth > 0, events are collected instead of emitted immediately.\n * When batch depth returns to 0, pending events are emitted.\n */\nlet eventBatchDepth = 0;\nconst pendingEventTargets = new Set<object>();\n\n/**\n * Run a callback in a batched context for EventId emissions.\n * Multiple mutations within the batch will only emit one event per target.\n */\nexport const batchEvents = (callback: () => void): void => {\n eventBatchDepth++;\n try {\n callback();\n } finally {\n eventBatchDepth--;\n if (eventBatchDepth === 0) {\n // Emit pending events.\n for (const target of pendingEventTargets) {\n (target as any)[EventId]?.emit();\n }\n pendingEventTargets.clear();\n }\n }\n};\n\n/**\n * Emit an event on a target, respecting batching.\n */\nexport const emitEvent = (target: object): void => {\n if (eventBatchDepth > 0) {\n pendingEventTargets.add(target);\n } else {\n (target as any)[EventId]?.emit();\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { batchEvents } from './event-batch';\nimport { EventId } from './symbols';\n\n/**\n * Generic change context tracking.\n * Only one object can be in a change context at a time (synchronous changes).\n *\n * This module provides a unified change context mechanism used by both:\n * - TypedReactiveHandler (for non-database objects, using target as key)\n * - EchoReactiveHandler (for database objects, using ObjectCore as key)\n */\n\n/**\n * The object currently in a change context.\n * Can be a target object (for typed reactive) or ObjectCore (for database objects).\n */\nlet currentChangeContext: object | null = null;\n\n/**\n * The primary object that has pending notifications, if any.\n * This uses the contextKey (target or ObjectCore).\n */\nlet pendingNotificationKey: object | null = null;\n\n/**\n * Additional objects (owner chain) that need notifications.\n * These are separate from the primary notification because they use EventId directly.\n */\nconst pendingOwnerNotifications = new Set<object>();\n\n/**\n * Enter a change context for the given key.\n * While in a change context, mutations are allowed on the associated object.\n * Nested Obj.change calls are not supported.\n *\n * @param key - The key to enter the change context for (target object or ObjectCore).\n * @returns A cleanup function that exits the change context.\n */\nexport const enterChangeContext = (key: object): (() => void) => {\n currentChangeContext = key;\n return () => {\n currentChangeContext = null;\n };\n};\n\n/**\n * Check if the given key is currently in a change context.\n *\n * @param key - The key to check (target object or ObjectCore).\n * @returns True if the key is in a change context, false otherwise.\n */\nexport const isInChangeContext = (key: object): boolean => {\n return currentChangeContext === key;\n};\n\n/**\n * Queue a notification for the given key to be fired when the change context exits.\n *\n * @param key - The key to queue a notification for.\n */\nexport const queueNotification = (key: object): void => {\n if (currentChangeContext === key) {\n pendingNotificationKey = key;\n }\n};\n\n/**\n * Queue an owner notification. Owner notifications are for objects in the ownership\n * chain that should be notified when a nested object changes.\n * These objects have EventId and emit directly.\n * Skip if the target is already the current change context (to avoid duplicate notifications).\n *\n * @param target - The owner target that has EventId.\n */\nexport const queueOwnerNotification = (target: object): void => {\n // Skip if this is the object already being changed (primary notification handles it).\n if (currentChangeContext !== null && target !== currentChangeContext) {\n pendingOwnerNotifications.add(target);\n }\n};\n\n/**\n * Check if there are any pending notifications for the given key.\n *\n * @param key - The key to check.\n * @returns True if there are pending notifications, false otherwise.\n */\nexport const hasPendingNotifications = (key: object): boolean => {\n return pendingNotificationKey === key;\n};\n\n/**\n * Clear any pending notifications for the given key.\n *\n * @param key - The key to clear notifications for.\n */\nexport const clearPendingNotifications = (key: object): void => {\n if (pendingNotificationKey === key) {\n pendingNotificationKey = null;\n }\n};\n\n/**\n * Execute a callback within a change context.\n * This is the shared implementation used by both TypedReactiveHandler and EchoReactiveHandler.\n *\n * @param contextKey - The key for the change context (target for typed, ObjectCore for db).\n * @param eventTarget - The object that has the EventId for notifications.\n * @param proxy - The proxy object to pass to the callback.\n * @param callback - The callback to execute with mutations allowed.\n */\nexport const executeChange = (\n contextKey: object,\n eventTarget: object,\n proxy: any,\n callback: (proxy: any) => void,\n): void => {\n const exitContext = enterChangeContext(contextKey);\n try {\n batchEvents(() => callback(proxy));\n } finally {\n exitContext();\n // Fire primary notification.\n if (hasPendingNotifications(contextKey)) {\n clearPendingNotifications(contextKey);\n (eventTarget as any)[EventId]?.emit();\n }\n // Fire owner chain notifications.\n for (const ownerTarget of pendingOwnerNotifications) {\n (ownerTarget as any)[EventId]?.emit();\n }\n pendingOwnerNotifications.clear();\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Define a non-enumerable property on an object.\n */\nexport const defineHiddenProperty = (object: any, key: string | symbol, value: any) => {\n Object.defineProperty(object, key, {\n enumerable: false,\n configurable: true,\n value,\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Error thrown when attempting to mutate an object outside of an Obj.change() context.\n */\nexport class MutationOutsideChangeContextError extends Error {\n constructor(operation: string, suggestion: string) {\n super(\n `Cannot ${operation} outside of Obj.change(). Use Obj.change(obj, (mutableObj) => { ${suggestion} }) instead.`,\n );\n this.name = 'MutationOutsideChangeContextError';\n }\n}\n\n/**\n * Create an error for attempting to set a property outside of a change context.\n */\nexport const createPropertySetError = (prop: string | symbol): MutationOutsideChangeContextError => {\n return new MutationOutsideChangeContextError(\n `modify object property \"${String(prop)}\"`,\n `mutableObj.${String(prop)} = value;`,\n );\n};\n\n/**\n * Create an error for attempting to delete a property outside of a change context.\n */\nexport const createPropertyDeleteError = (prop: string | symbol): MutationOutsideChangeContextError => {\n return new MutationOutsideChangeContextError(\n `delete object property \"${String(prop)}\"`,\n `delete mutableObj.${String(prop)};`,\n );\n};\n\n/**\n * Create an error for attempting to call an array method outside of a change context.\n */\nexport const createArrayMethodError = (method: string): MutationOutsideChangeContextError => {\n return new MutationOutsideChangeContextError(`call array.${method}()`, `mutableObj.array.${method}(...);`);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ObjectMeta } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\nimport { deepMapValues } from '@dxos/util';\n\nimport {\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n ATTR_SELF_DXN,\n RelationSourceDXNId,\n RelationTargetDXNId,\n SelfDXNId,\n} from '../entities';\nimport { Ref } from '../ref';\nimport { ATTR_META, ATTR_TYPE, MetaId, TypeId } from '../types';\n\n/**\n * Attaches a toJSON method to the object for typed serialization.\n */\nexport const attachTypedJsonSerializer = (obj: any) => {\n const descriptor = Object.getOwnPropertyDescriptor(obj, 'toJSON');\n if (descriptor) {\n return;\n }\n\n Object.defineProperty(obj, 'toJSON', {\n value: typedJsonSerializer,\n writable: false,\n enumerable: false,\n // Setting `configurable` to false breaks proxy invariants, should be fixable.\n configurable: true,\n });\n};\n\n// NOTE: KEEP as function.\n// Exported for use in objectToJSON.\nexport const typedJsonSerializer = function (this: any) {\n const { id, ...rest } = this;\n const result: any = {\n id,\n };\n\n if (this[TypeId]) {\n result[ATTR_TYPE] = this[TypeId].toString();\n }\n\n if (this[MetaId]) {\n result[ATTR_META] = serializeMeta(this[MetaId]);\n }\n\n if (this[SelfDXNId]) {\n result[ATTR_SELF_DXN] = this[SelfDXNId].toString();\n }\n\n if (this[RelationSourceDXNId]) {\n const sourceDXN = this[RelationSourceDXNId];\n invariant(sourceDXN instanceof DXN);\n result[ATTR_RELATION_SOURCE] = sourceDXN.toString();\n }\n if (this[RelationTargetDXNId]) {\n const targetDXN = this[RelationTargetDXNId];\n invariant(targetDXN instanceof DXN);\n result[ATTR_RELATION_TARGET] = targetDXN.toString();\n }\n\n Object.assign(result, serializeData(rest));\n return result;\n};\n\nconst serializeData = (data: unknown) => {\n return deepMapValues(data, (value, recurse) => {\n if (Ref.isRef(value)) {\n // TODO(dmaretskyi): Should this be configurable?\n return value.noInline().encode();\n }\n\n return recurse(value);\n });\n};\n\nconst serializeMeta = (meta: ObjectMeta) => {\n return deepMapValues(meta, (value, recurse) => recurse(value));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { ObjectId } from '@dxos/keys';\n\nimport { getTypeAnnotation } from '../annotations';\nimport { type AnyProperties, KindId, MetaId, type ObjectMeta, ObjectMetaSchema } from '../types';\n\nimport { defineHiddenProperty } from './define-hidden-property';\nimport { attachTypedJsonSerializer } from './json-serializer';\nimport { createProxy, getProxyTarget, isValidProxyTarget } from './proxy-utils';\nimport { TypedReactiveHandler, prepareTypedTarget, setMetaOwner } from './typed-handler';\n\n/**\n *\n */\n// TODO(burdon): Make internal\nexport type MakeObjectProps<T extends AnyProperties> = Omit<T, 'id' | KindId>;\n\n/**\n * Creates a reactive object from a plain Javascript object.\n * Requires a TS-effect schema.\n */\n// TODO(burdon): Make internal\n// TODO(dmaretskyi): Deep mutability.\n// TODO(dmaretskyi): Invert generics (generic over schema) to have better error messages.\n// TODO(dmaretskyi): Could mutate original object making it unusable.\nexport const makeObject: {\n <T extends AnyProperties>(\n schema: Schema.Schema<T, any, never>,\n obj: NoInfer<MakeObjectProps<T>>,\n meta?: ObjectMeta,\n ): T;\n} = <T extends AnyProperties>(schema: Schema.Schema<T, any>, obj: MakeObjectProps<T>, meta?: ObjectMeta): T => {\n return createReactiveObject<T>({ ...obj } as T, meta, schema);\n};\n\nconst createReactiveObject = <T extends AnyProperties>(obj: T, meta?: ObjectMeta, schema?: Schema.Schema<T>): T => {\n if (!isValidProxyTarget(obj)) {\n throw new Error('Value cannot be made into a reactive object.');\n }\n\n if (!schema) {\n throw new Error('Schema is required for reactive objects. Use Atom for untyped reactive state.');\n }\n\n const annotation = getTypeAnnotation(schema);\n if (annotation) {\n setIdOnTarget(obj);\n defineHiddenProperty(obj, KindId, annotation.kind);\n }\n initMeta(obj, meta);\n prepareTypedTarget(obj, schema);\n attachTypedJsonSerializer(obj);\n const proxy = createProxy<T>(obj, TypedReactiveHandler.instance);\n\n // Set meta's owner to the main object so meta mutations respect the parent's change context.\n // For non-database objects using TypedReactiveHandler, this links the meta to the main object's\n // change context. For database objects, meta is handled by EchoReactiveHandler.getMeta().\n const metaProxy = (obj as any)[MetaId];\n if (metaProxy) {\n const metaTarget = getProxyTarget(metaProxy);\n if (metaTarget) {\n setMetaOwner(metaTarget, obj);\n }\n }\n\n return proxy;\n};\n\n/**\n * Set ID on ECHO object targets during creation.\n * Used for objects with schema and the ones explicitly marked as Expando.\n */\nconst setIdOnTarget = (target: any) => {\n // invariant(!('id' in target), 'Object already has an `id` field, which is reserved.');\n if ('id' in target && target.id !== undefined && target.id !== null) {\n if (!ObjectId.isValid(target.id)) {\n throw new Error('Invalid object id format.');\n }\n } else {\n target.id = ObjectId.random();\n }\n};\n\n/**\n * Set metadata on object.\n */\n// TODO(dmaretskyi): Move to echo-schema.\nconst initMeta = <T>(obj: T, meta: ObjectMeta = { keys: [] }) => {\n prepareTypedTarget(meta, ObjectMetaSchema);\n defineHiddenProperty(obj, MetaId, createProxy(meta, TypedReactiveHandler.instance as any));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type ReactiveHandler } from './proxy-types';\n\nexport const symbolIsProxy = Symbol.for('@dxos/schema/Proxy');\n\n/**\n * Internal api.\n */\nexport const isProxy = (value: unknown) => !!(value as any)?.[symbolIsProxy];\n\nexport const isValidProxyTarget = (value: any): value is object => {\n if (value == null || value[symbolIsProxy]) {\n return false;\n }\n if (Array.isArray(value)) {\n return true;\n }\n\n return typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype;\n};\n\n/**\n * @deprecated\n */\nexport const getProxySlot = <T extends object>(proxy: any): ProxyHandlerSlot<T> => {\n const value = (proxy as any)[symbolIsProxy];\n invariant(value instanceof ProxyHandlerSlot);\n return value;\n};\n\nexport const getProxyTarget = <T extends object>(proxy: any): T => {\n return getProxySlot<T>(proxy).target;\n};\n\nexport const getProxyHandler = <T extends object>(proxy: any): ReactiveHandler<T> => {\n return getProxySlot<T>(proxy).handler;\n};\n\n/**\n * Unsafe method to override id for debugging/testing and migration purposes.\n * @deprecated\n */\nexport const dangerouslySetProxyId = <T>(obj: T, id: string) => {\n (getProxySlot(obj).target as any).id = id;\n};\n\n/**\n * Create a reactive proxy object.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n *\n * @param target Object or array. Passing in array will enable array methods.\n * @param handler ReactiveHandler instance.\n */\n// TODO(burdon): Document.\n// TODO(burdon): Tests for low-level functions.\nexport const createProxy = <T extends object>(target: T, handler: ReactiveHandler<T>): T => {\n const existingProxy = handler._proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n\n // TODO(dmaretskyi): In the future this should be mutable to allow replacing the handler on-the-fly while maintaining the proxy identity.\n const proxy = new Proxy(target, new ProxyHandlerSlot<T>(target, handler));\n handler.init(target);\n\n // TODO(dmaretskyi): Check if this will actually work; maybe a global WeakMap is better?\n handler._proxyMap.set(target, proxy);\n return proxy;\n};\n\n/**\n * Passed as the handler to the Proxy constructor.\n * Maintains a mutable slot for the actual handler.\n */\nclass ProxyHandlerSlot<T extends object> implements ProxyHandler<T> {\n /**\n * @param target Original object.\n * @param _handler Handles intercepted operations.\n */\n constructor(\n readonly target: T,\n private _handler: ReactiveHandler<T>,\n ) {}\n\n get handler() {\n invariant(this._handler);\n return this._handler;\n }\n\n // TODO(burdon): Requires comment.\n setHandler(handler: ReactiveHandler<T>): void {\n this._handler = handler;\n }\n\n /**\n * Get value.\n */\n get(target: T, prop: string | symbol, receiver: any): any {\n if (prop === symbolIsProxy) {\n return this;\n }\n\n if (!this._handler || !this._handler.get) {\n return Reflect.get(target, prop, receiver);\n }\n\n return this._handler.get(target, prop, receiver);\n }\n\n static {\n const TRAPS: (keyof ProxyHandler<any>)[] = [\n 'apply',\n 'construct',\n 'defineProperty',\n 'deleteProperty',\n 'get',\n 'getOwnPropertyDescriptor',\n 'getPrototypeOf',\n 'has',\n 'isExtensible',\n 'ownKeys',\n 'preventExtensions',\n 'set',\n 'setPrototypeOf',\n ];\n\n for (const trap of TRAPS) {\n if (trap === 'get') {\n continue;\n }\n\n Object.defineProperty(this.prototype, trap, {\n enumerable: false,\n value: function (this: ProxyHandlerSlot<any>, ...args: any[]) {\n // log.info('trap', { trap, args });\n if (!this._handler || !this._handler[trap]) {\n return (Reflect[trap] as Function)(...args);\n }\n\n return (this._handler[trap] as Function).apply(this._handler, args);\n },\n });\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type InspectOptionsStylized } from 'node:util';\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { Event } from '@dxos/async';\nimport { inspectCustom } from '@dxos/debug';\nimport { invariant } from '@dxos/invariant';\n\nimport { getSchemaDXN } from '../annotations';\nimport { ObjectDeletedId } from '../entities';\nimport { SchemaId, TypeId } from '../types';\n\nimport { executeChange, isInChangeContext, queueNotification } from './change-context';\nimport { defineHiddenProperty } from './define-hidden-property';\nimport { createPropertyDeleteError } from './errors';\nimport { batchEvents } from './event-batch';\nimport {\n getEchoRoot,\n getOwner,\n getRawTarget,\n hasForeignOwner,\n notifyOwnerChain,\n setOwnerRecursive,\n wouldCreateCycle,\n} from './ownership';\nimport { type ReactiveHandler, objectData } from './proxy-types';\nimport { createProxy, isProxy, isValidProxyTarget, symbolIsProxy } from './proxy-utils';\nimport { ReactiveArray } from './reactive-array';\nimport { SchemaValidator } from './schema-validator';\nimport { ChangeId, EventId } from './symbols';\n\n// Re-export for external consumers.\nexport { getEchoRoot, setMetaOwner } from './ownership';\n\ntype ProxyTarget = {\n /**\n * Typename or type DXN.\n */\n [TypeId]: string;\n\n /**\n * Schema for the root.\n */\n [SchemaId]: Schema.Schema.AnyNoContext;\n\n /**\n * For modifications.\n */\n [EventId]: Event<void>;\n} & ({ [key: keyof any]: any } | any[]);\n\n/**\n * Deep copy a value, handling arrays and nested objects.\n * Preserves ReactiveArray type and hidden properties (SchemaId, TypeId).\n * Does not copy class instances or functions (except ReactiveArray).\n *\n * Note: Cannot use structuredClone because we need to:\n * - Unwrap proxies\n * - Preserve ReactiveArray instances\n * - Copy Symbol-keyed hidden properties (SchemaId, TypeId)\n * - Convert plain arrays to ReactiveArray\n *\n * Performance: O(n) where n is the total number of nested objects/arrays.\n * For large structures, consider using Refs for frequently reassigned subtrees.\n */\nconst deepCopy = <T>(value: T, visited = new Map<object, object>()): T => {\n if (value == null || typeof value !== 'object') {\n return value;\n }\n\n // Handle proxies - get the underlying target.\n const actualValue = getRawTarget(value);\n\n // Check for circular references in the copy.\n if (visited.has(actualValue)) {\n return visited.get(actualValue) as T;\n }\n\n // Handle ReactiveArray specially to preserve reactivity.\n if (actualValue instanceof ReactiveArray) {\n const copy = new ReactiveArray<any>();\n visited.set(actualValue, copy);\n for (const item of actualValue) {\n copy.push(deepCopy(item, visited));\n }\n // Copy hidden properties.\n copyHiddenProperties(actualValue, copy);\n return copy as T;\n }\n\n // Don't copy other class instances (objects with non-Object prototype).\n const proto = Object.getPrototypeOf(actualValue);\n if (proto !== Object.prototype && proto !== Array.prototype && proto !== null) {\n return value; // Return as-is, don't copy class instances.\n }\n\n if (Array.isArray(actualValue)) {\n // Plain arrays become ReactiveArrays.\n const copy = new ReactiveArray<any>();\n visited.set(actualValue, copy);\n for (const item of actualValue) {\n copy.push(deepCopy(item, visited));\n }\n return copy as T;\n }\n\n const copy: Record<string, any> = {};\n visited.set(actualValue, copy);\n for (const key of Object.keys(actualValue)) {\n copy[key] = deepCopy((actualValue as any)[key], visited);\n }\n // Copy hidden properties (SchemaId, TypeId).\n copyHiddenProperties(actualValue, copy);\n return copy as T;\n};\n\n/**\n * Copy hidden properties (SchemaId, TypeId) from source to target.\n */\nconst copyHiddenProperties = (source: any, target: any): void => {\n if (SchemaId in source) {\n defineHiddenProperty(target, SchemaId, source[SchemaId]);\n }\n if (TypeId in source) {\n defineHiddenProperty(target, TypeId, source[TypeId]);\n }\n};\n\n/**\n * Typed in-memory reactive store (with Schema).\n * Reactivity is based on Event subscriptions, not signals.\n */\nexport class TypedReactiveHandler implements ReactiveHandler<ProxyTarget> {\n public static readonly instance: ReactiveHandler<any> = new TypedReactiveHandler();\n\n readonly _proxyMap = new WeakMap<object, any>();\n private _inSet = false;\n\n private constructor() {}\n\n init(target: ProxyTarget): void {\n invariant(typeof target === 'object' && target !== null);\n invariant(SchemaId in target, 'Schema is not defined for the target');\n\n // Only set EventId on root objects (those without an owner).\n // Nested objects share their root's EventId for centralized reactivity.\n const hasOwner = !!getOwner(target);\n if (!(EventId in target) && !hasOwner) {\n defineHiddenProperty(target, EventId, new Event());\n }\n\n defineHiddenProperty(target, ObjectDeletedId, false);\n\n // Mark root objects as having a change handler.\n // The actual handler is returned dynamically in get() to have access to the proxy.\n if (!hasOwner && !(ChangeId in target)) {\n defineHiddenProperty(target, ChangeId, true);\n }\n\n // Only set owners if this is a root object (no existing owner).\n // Nested objects already have owners set by their root's initialization.\n // If we re-set owners here for nested objects, we'd incorrectly point\n // array elements to the array instead of the true root ECHO object.\n if (!hasOwner) {\n // Set owner on all nested objects to this root ECHO object.\n // All nested records point directly to this root for centralized reactivity.\n for (const key in target) {\n if ((target as any)[symbolIsProxy]) {\n continue;\n }\n let value = (target as any)[key];\n if (isValidProxyTarget(value) || isProxy(value)) {\n // Deep copy values that have foreign owners (owned by a different object,\n // or are root ECHO objects whose nested structures would be owned by them).\n // This recursively checks all nested objects.\n if (hasForeignOwner(value, target)) {\n value = deepCopy(value);\n (target as any)[key] = value;\n }\n setOwnerRecursive(value, target);\n }\n }\n }\n\n // Maybe have been set by `create`.\n Object.defineProperty(target, inspectCustom, {\n enumerable: false,\n configurable: true,\n value: this._inspect.bind(target),\n });\n }\n\n get(target: ProxyTarget, prop: string | symbol, receiver: any): any {\n switch (prop) {\n // TODO(burdon): Remove?\n case objectData: {\n return toJSON(target);\n }\n case ChangeId: {\n // Return change handler only for root objects that have been marked with ChangeId.\n if ((target as any)[ChangeId] !== true) {\n return undefined;\n }\n // Return a function that allows mutations within a controlled context.\n // Uses target as both the context key and event target for non-database objects.\n return (callback: (obj: any) => void) => executeChange(target, target, receiver, callback);\n }\n }\n\n // Handle getter properties.\n if (Object.getOwnPropertyDescriptor(target, prop)?.get) {\n return Reflect.get(target, prop, receiver);\n }\n\n const value = Reflect.get(target, prop, receiver);\n if (isValidProxyTarget(value)) {\n return createProxy(value, this);\n }\n\n return value;\n }\n\n set(target: ProxyTarget, prop: string | symbol, value: any, receiver: any): boolean {\n const echoRoot = getEchoRoot(target);\n\n // Check readonly enforcement - mutations only allowed within Obj.change().\n // Skip check if the object is still being initialized (no ChangeId handler yet).\n // Also skip for non-initialized root objects (those without EventId).\n // Skip for symbol properties (internal infrastructure, not user data).\n const isInitialized = ChangeId in echoRoot || EventId in echoRoot;\n const isSymbolProp = typeof prop === 'symbol';\n if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {\n throw new Error(\n `Cannot modify object property \"${String(prop)}\" outside of Obj.change(). ` +\n 'Use Obj.change(obj, (mutableObj) => { mutableObj.property = value; }) instead.',\n );\n }\n\n let result: boolean = false;\n this._inSet = true;\n try {\n batchEvents(() => {\n const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, prop, value);\n result = Reflect.set(target, prop, preparedValue, receiver);\n // Queue notification instead of emitting immediately (batched).\n if (isInitialized) {\n queueNotification(echoRoot);\n // Also notify the owner chain so parent objects are updated when nested objects change.\n notifyOwnerChain(target);\n }\n });\n } finally {\n this._inSet = false;\n }\n return result;\n }\n\n ownKeys(target: ProxyTarget): ArrayLike<string | symbol> {\n return Reflect.ownKeys(target);\n }\n\n deleteProperty(target: ProxyTarget, property: string | symbol): boolean {\n const echoRoot = getEchoRoot(target);\n\n // Check readonly enforcement - mutations only allowed within Obj.change().\n // Skip for symbol properties (internal infrastructure, not user data).\n const isInitialized = (echoRoot as any)[ChangeId] === true || EventId in echoRoot;\n const isSymbolProp = typeof property === 'symbol';\n if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {\n throw createPropertyDeleteError(property);\n }\n\n const result = Reflect.deleteProperty(target, property);\n if (isInitialized) {\n queueNotification(echoRoot);\n }\n return result;\n }\n\n defineProperty(target: ProxyTarget, property: string | symbol, attributes: PropertyDescriptor): boolean {\n const echoRoot = getEchoRoot(target);\n\n // Check readonly enforcement - mutations only allowed within Obj.change().\n // Skip check if the object is still being initialized (no ChangeId handler yet).\n // Skip for symbol properties (internal infrastructure, not user data).\n const isInitialized = ChangeId in echoRoot || EventId in echoRoot;\n const isSymbolProp = typeof property === 'symbol';\n if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {\n throw new Error(\n `Cannot modify object property \"${String(property)}\" outside of Obj.change(). ` +\n 'Use Obj.change(obj, (mutableObj) => { mutableObj.property = value; }) instead.',\n );\n }\n\n const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, property, attributes.value);\n const result = Reflect.defineProperty(target, property, {\n ...attributes,\n value: preparedValue,\n });\n if (!this._inSet && isInitialized) {\n // Queue notification instead of emitting immediately (batched).\n queueNotification(echoRoot);\n }\n return result;\n }\n\n /**\n * Prepare a value for assignment to a typed object property.\n * Handles cycle detection, copy-on-assign, array conversion, validation, and ownership.\n */\n private _prepareValueForAssignment(\n target: ProxyTarget,\n prop: string | symbol,\n value: any,\n ): { echoRoot: object; preparedValue: any } {\n const echoRoot = getEchoRoot(target);\n\n // Check for cycles before assignment.\n if (isValidProxyTarget(value) || isProxy(value)) {\n if (wouldCreateCycle(echoRoot, value)) {\n throw new Error('Cannot create cycles in typed object graph. Consider using Ref for circular references.');\n }\n }\n\n // Prevent direct assignment of root ECHO objects (those created with Obj.make/Relation.make).\n // These must be wrapped with Ref.make for proper reference handling.\n // This matches database object behavior for consistency.\n if (isValidProxyTarget(value) || isProxy(value)) {\n const actualValue = getRawTarget(value);\n const isRootEchoObject = EventId in actualValue;\n if (isRootEchoObject) {\n throw new Error('Object references must be wrapped with `Ref.make`');\n }\n }\n\n // Copy-on-assign: If the value is a nested record owned by a different ECHO object, deep copy it.\n if (isValidProxyTarget(value) || isProxy(value)) {\n const actualValue = getRawTarget(value);\n const existingOwner = getOwner(actualValue);\n if (existingOwner != null && existingOwner !== echoRoot) {\n value = deepCopy(value);\n }\n }\n\n // Convert arrays to reactive arrays.\n if (Array.isArray(value) && !(value instanceof ReactiveArray)) {\n value = ReactiveArray.from(value);\n }\n\n const validatedValue = this._validateValue(target, prop, value);\n\n // Set owner on new value to the root ECHO object.\n if (isValidProxyTarget(validatedValue) || isProxy(validatedValue)) {\n setOwnerRecursive(validatedValue, echoRoot);\n }\n\n return { echoRoot, preparedValue: validatedValue };\n }\n\n private _validateValue(target: any, prop: string | symbol, value: any) {\n const schema = SchemaValidator.getTargetPropertySchema(target, prop);\n const _ = Schema.asserts(schema)(value);\n if (isValidProxyTarget(value)) {\n setSchemaProperties(value, schema);\n }\n\n return value;\n }\n\n private _inspect(\n _: number,\n options: InspectOptionsStylized,\n inspectFn: (value: any, options?: InspectOptionsStylized) => string,\n ): string {\n const inspected = inspectFn(this, {\n ...options,\n showHidden: false,\n customInspect: false,\n });\n\n return `Typed ${inspected}`;\n }\n}\n\n/**\n * @deprecated Use `Obj.toJSON` instead.\n */\n// TODO(burdon): Remove?\nconst toJSON = (target: ProxyTarget): any => {\n return { '@type': 'TypedReactiveObject', ...target };\n};\n\n/**\n * Recursively set AST on all potential proxy targets.\n */\nconst setSchemaProperties = (obj: any, schema: Schema.Schema.AnyNoContext) => {\n const schemaType = getSchemaDXN(schema);\n if (schemaType != null) {\n defineHiddenProperty(obj, TypeId, schemaType);\n }\n\n defineHiddenProperty(obj, SchemaId, schema);\n for (const key in obj) {\n if (isValidProxyTarget(obj[key])) {\n const elementSchema = SchemaValidator.getTargetPropertySchema(obj, key);\n if (elementSchema != null) {\n setSchemaProperties(obj[key], elementSchema);\n }\n }\n }\n};\n\nexport const prepareTypedTarget = <T>(target: T, schema: Schema.Schema<T>) => {\n // log.info('prepareTypedTarget', { target, schema });\n if (!SchemaAST.isTypeLiteral(schema.ast)) {\n throw new Error('schema has to describe an object type');\n }\n\n SchemaValidator.validateSchema(schema);\n const _ = Schema.asserts(schema)(target);\n makeArraysReactive(target);\n setSchemaProperties(target, schema);\n};\n\nconst makeArraysReactive = (target: any) => {\n for (const key in target) {\n if (target[symbolIsProxy]) {\n continue;\n }\n if (Array.isArray(target[key])) {\n target[key] = ReactiveArray.from(target[key]);\n }\n if (typeof target[key] === 'object') {\n makeArraysReactive(target[key]);\n }\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { KindId } from '../types';\n\nimport { queueOwnerNotification } from './change-context';\nimport { defineHiddenProperty } from './define-hidden-property';\nimport { getProxyTarget, isProxy, isValidProxyTarget } from './proxy-utils';\nimport { EventId } from './symbols';\n\n/**\n * Symbol to store the owning ECHO object reference on nested JS objects (records).\n * Every nested record is attributed to exactly one ECHO object.\n * This achieves:\n * - No cycles in the object graph (cyclical Refs are still allowed).\n * - No multiple inbound pointers to one record.\n * - Centralized reactivity for entire ECHO object.\n */\nconst EchoOwner = Symbol.for('@dxos/echo/Owner');\n\n/**\n * Get the raw target from a value, unwrapping proxy if needed.\n */\nexport const getRawTarget = (value: any): any => {\n return isProxy(value) ? getProxyTarget(value) : value;\n};\n\n/**\n * Get the ECHO object that owns this nested record.\n *\n * The owner is always the raw target object (not a proxy) of the root ECHO object.\n * For example, if you have `echoObject.nested.deep`, both `nested` and `deep`\n * will have their owner set to the raw target of `echoObject`.\n *\n * @param value - The nested record to check (can be a proxy or raw target).\n * @returns The raw target of the owning root ECHO object, or undefined if not owned.\n */\nexport const getOwner = (value: object | null | undefined): object | undefined => {\n return (value as any)?.[EchoOwner];\n};\n\n/**\n * Set the owner of a meta object to its parent.\n * This allows meta mutations to respect the parent's change context.\n * @internal\n */\nexport const setMetaOwner = (metaTarget: object, parent: object): void => {\n defineHiddenProperty(metaTarget, EchoOwner, parent);\n};\n\n/**\n * Set the ECHO object owner on a value and all its nested records.\n * All nested JS objects point directly to the root ECHO object.\n *\n * @param value - The value to set ownership on (can be a proxy or raw target).\n * @param owner - The raw target of the root ECHO object that will own this value.\n * @param options.visited - Set of already-visited objects to avoid infinite loops.\n * @param options.depth - Current recursion depth (unused, kept for debugging).\n * @param options.allowedPreviousOwner - When reassigning a root ECHO object, its nested structures\n * are allowed to have this as their previous owner without triggering the invariant.\n */\nexport const setOwnerRecursive = (\n value: any,\n owner: object,\n options: {\n visited?: Set<object>;\n depth?: number;\n allowedPreviousOwner?: object;\n } = {},\n): void => {\n const { visited = new Set<object>(), depth = 0, allowedPreviousOwner } = options;\n if (value == null || typeof value !== 'object') {\n return;\n }\n\n const actualValue = getRawTarget(value);\n if (visited.has(actualValue)) {\n return;\n }\n visited.add(actualValue);\n\n // Check that we're not stealing a nested record owned by a different ECHO object.\n // Root ECHO objects (those with EventId) can be reassigned - they maintain their own\n // identity and choosing to embed them in another object is a valid operation.\n // When reassigning a root, its nested records (owned by that root) are also allowed.\n const existingOwner = getOwner(actualValue);\n const isRootEchoObject = EventId in actualValue;\n\n // Track if this is a root being assigned - its nested structures are allowed to transfer.\n let newAllowedPreviousOwner = allowedPreviousOwner;\n if (isRootEchoObject && depth === 0) {\n // This is the top-level root being assigned; allow its nested structures to transfer.\n newAllowedPreviousOwner = actualValue;\n }\n\n if (!isRootEchoObject) {\n const ownershipAllowed =\n existingOwner == null || existingOwner === owner || existingOwner === newAllowedPreviousOwner;\n invariant(\n ownershipAllowed,\n 'Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.',\n );\n }\n\n // Set owner directly to the root ECHO object.\n defineHiddenProperty(actualValue, EchoOwner, owner);\n\n // Recursively set owner on nested objects and array elements.\n const recursiveOptions = {\n visited,\n depth: depth + 1,\n allowedPreviousOwner: newAllowedPreviousOwner,\n };\n if (Array.isArray(actualValue)) {\n for (const item of actualValue) {\n if (isValidProxyTarget(item) || isProxy(item)) {\n setOwnerRecursive(item, owner, recursiveOptions);\n }\n }\n } else {\n for (const key in actualValue) {\n if (Object.prototype.hasOwnProperty.call(actualValue, key)) {\n const nested = actualValue[key];\n if (isValidProxyTarget(nested) || isProxy(nested)) {\n setOwnerRecursive(nested, owner, recursiveOptions);\n }\n }\n }\n }\n};\n\n/**\n * Traverse an object graph, calling the visitor on each object.\n * Handles proxy unwrapping and cycle detection.\n *\n * @param value - The value to traverse (can be a proxy or raw target).\n * @param visitor - Called for each object. Return true to stop traversal (early exit).\n * @returns true if the visitor returns true for any object.\n */\nexport const traverseObjectGraph = (\n value: any,\n visitor: (actualValue: any) => boolean,\n visited = new Set<object>(),\n): boolean => {\n if (value == null || typeof value !== 'object') {\n return false;\n }\n\n const actualValue = getRawTarget(value);\n\n if (visited.has(actualValue)) {\n return false;\n }\n visited.add(actualValue);\n\n if (visitor(actualValue)) {\n return true;\n }\n\n if (Array.isArray(actualValue)) {\n for (const item of actualValue) {\n if (traverseObjectGraph(item, visitor, visited)) {\n return true;\n }\n }\n } else {\n for (const key in actualValue) {\n if (Object.prototype.hasOwnProperty.call(actualValue, key)) {\n if (traverseObjectGraph(actualValue[key], visitor, visited)) {\n return true;\n }\n }\n }\n }\n\n return false;\n};\n\n/**\n * Check if a value would create a cycle when assigned to a target ECHO object.\n * Returns true if the value (or any nested object) IS the target root.\n */\nexport const wouldCreateCycle = (targetRoot: object, value: any): boolean =>\n traverseObjectGraph(value, (v) => v === targetRoot);\n\n/**\n * Check if a value or any of its nested objects has an owner different from the target.\n * Used to determine if deep copy is needed during init.\n */\nexport const hasForeignOwner = (value: any, target: object): boolean =>\n traverseObjectGraph(value, (v) => {\n const owner = getOwner(v);\n if (owner != null && owner !== target) {\n return true;\n }\n // Root ECHO objects (with EventId) have their nested structures owned by them.\n if (EventId in v && v !== target) {\n return true;\n }\n return false;\n });\n\n/**\n * Maximum depth for owner chain traversal.\n * This is a defensive measure against malformed circular ownership.\n * Primary cycle detection is handled by wouldCreateCycle() before assignment.\n */\nconst MAX_OWNER_DEPTH = 100;\n\n/**\n * Get the root ECHO object for a target.\n * Follows the owner chain to find the ultimate root.\n * An object may have EventId (from being created standalone) but if it now\n * has an owner, it's nested and we should use its owner's root instead.\n * @internal\n */\nexport const getEchoRoot = (target: object, depth = 0): object => {\n invariant(depth < MAX_OWNER_DEPTH, 'Owner chain too deep - possible circular ownership');\n\n // Root ECHO objects (those created with Obj.make or Relation.make) have KindId set.\n // They maintain their own change context identity even when nested inside another object.\n // Nested helper objects like ObjectMeta don't have KindId and should follow their owner.\n if (KindId in target) {\n return target;\n }\n\n // For non-root objects (nested records, ObjectMeta, etc.), follow the owner chain.\n const owner = getOwner(target);\n if (owner) {\n return getEchoRoot(owner, depth + 1);\n }\n\n // No owner means this is an unowned object (e.g., during initialization).\n return target;\n};\n\n/**\n * Notify all owners in the ownership chain.\n * When a nested object changes, its parent should also be notified.\n * This handles the case where a root ECHO object is nested inside another object.\n */\nexport const notifyOwnerChain = (target: object): void => {\n const owner = getOwner(target);\n if (owner) {\n // Queue notification for the owner's root (which has EventId).\n queueOwnerNotification(getEchoRoot(owner));\n // Continue up the chain (owner might also be nested).\n notifyOwnerChain(owner);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Reactive object proxy.\n */\nexport interface ReactiveHandler<T extends object> extends ProxyHandler<T> {\n /**\n * Target to Proxy mapping.\n */\n readonly _proxyMap: WeakMap<object, any>;\n\n /**\n * Called when a proxy is created for this target.\n */\n init(target: T): void;\n}\n\n/**\n * For debug-dumping the data of the object.\n */\nexport const objectData = Symbol.for('@dxos/live-object/objectData');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { isInChangeContext } from './change-context';\nimport { createArrayMethodError } from './errors';\nimport { batchEvents } from './event-batch';\nimport { getEchoRoot } from './ownership';\nimport { getProxyTarget, isProxy } from './proxy-utils';\nimport { ChangeId, EventId } from './symbols';\n\n/**\n * Check if array mutation is allowed (inside a change context).\n * Throws a descriptive error if not.\n */\nconst checkArrayMutationAllowed = (arr: any, method: string): void => {\n // Get the raw target - if arr is a proxy, get its underlying target.\n const target = isProxy(arr) ? getProxyTarget(arr) : arr;\n\n // Find the root ECHO object.\n const echoRoot = getEchoRoot(target);\n\n // Check if initialized (has ChangeId marker or EventId).\n const isInitialized = (echoRoot as any)[ChangeId] === true || EventId in echoRoot;\n if (!isInitialized) {\n // Array is still being initialized, allow mutations.\n return;\n }\n\n if (!isInChangeContext(echoRoot)) {\n throw createArrayMethodError(method);\n }\n};\n\n/**\n * Extends the native array to make sure that arrays methods are correctly reactive.\n * Enforces that mutations only happen within Obj.change() context.\n */\nexport class ReactiveArray<T> extends Array<T> {\n static override get [Symbol.species]() {\n return Array;\n }\n\n static {\n /**\n * These methods will trigger proxy traps like `set` and `defineProperty` and emit event notifications.\n * We wrap them in a batch to avoid unnecessary event notifications.\n * Change context is checked before allowing mutations.\n *\n * Note: When called on a proxy, `this` will be the proxy, so array mutations\n * go through the proxy's set trap which handles event emission.\n */\n const BATCHED_METHODS = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'] as const;\n\n for (const method of BATCHED_METHODS) {\n Object.defineProperty(this.prototype, method, {\n enumerable: false,\n value: function (this: ReactiveArray<any>, ...args: any[]) {\n // Check change context before allowing mutation.\n checkArrayMutationAllowed(this, method);\n\n let result!: any;\n batchEvents(() => {\n result = Array.prototype[method].apply(this, args);\n });\n return result;\n },\n });\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { SchemaId } from '../types';\n\n// TODO(burdon): Reconcile with @dxos/effect visit().\n\nexport class SchemaValidator {\n /**\n * Recursively check that schema specifies constructions we can handle.\n * Validates there are no ambiguous discriminated union types.\n */\n public static validateSchema(schema: Schema.Schema.AnyNoContext): void {\n const visitAll = (nodes: SchemaAST.AST[]) => nodes.forEach((node) => this.validateSchema(Schema.make(node)));\n if (SchemaAST.isUnion(schema.ast)) {\n const typeAstList = schema.ast.types.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n // Check we can handle a discriminated union.\n if (typeAstList.length > 1) {\n getTypeDiscriminators(typeAstList);\n }\n visitAll(typeAstList);\n } else if (SchemaAST.isTupleType(schema.ast)) {\n const positionalTypes = schema.ast.elements.map((t) => t.type);\n const allTypes = positionalTypes.concat(schema.ast.rest.map((t) => t.type));\n visitAll(allTypes);\n } else if (SchemaAST.isTypeLiteral(schema.ast)) {\n visitAll(SchemaAST.getPropertySignatures(schema.ast).map((p) => p.type));\n }\n }\n\n public static hasTypeAnnotation(\n rootObjectSchema: Schema.Schema.AnyNoContext,\n property: string,\n annotation: symbol,\n ): boolean {\n try {\n let type = this.getPropertySchema(rootObjectSchema, [property]);\n if (SchemaAST.isTupleType(type.ast)) {\n type = this.getPropertySchema(rootObjectSchema, [property, '0']);\n }\n\n return type.ast.annotations[annotation] != null;\n } catch {\n return false;\n }\n }\n\n public static getPropertySchema(\n rootObjectSchema: Schema.Schema.AnyNoContext,\n propertyPath: KeyPath,\n getProperty: (path: KeyPath) => any = () => null,\n ): Schema.Schema.AnyNoContext {\n let schema: Schema.Schema.AnyNoContext = rootObjectSchema;\n for (let i = 0; i < propertyPath.length; i++) {\n const propertyName = propertyPath[i];\n const tupleAst = unwrapArray(schema.ast);\n if (tupleAst != null) {\n schema = getArrayElementSchema(tupleAst, propertyName);\n } else {\n const propertyType = getPropertyType(schema.ast, propertyName.toString(), (propertyName) =>\n getProperty([...propertyPath.slice(0, i), propertyName]),\n );\n if (propertyType == null) {\n log.warn('unknown property', { path: propertyPath, property: propertyName });\n continue;\n }\n\n schema = Schema.make(propertyType).annotations(propertyType.annotations);\n }\n }\n\n return schema;\n }\n\n public static getTargetPropertySchema(target: any, prop: string | symbol): Schema.Schema.AnyNoContext {\n const schema: Schema.Schema.AnyNoContext | undefined = (target as any)[SchemaId];\n invariant(schema, 'target has no schema');\n const arrayAst = unwrapArray(schema.ast);\n if (arrayAst != null) {\n return getArrayElementSchema(arrayAst, prop);\n }\n\n const propertyType = getPropertyType(schema.ast, prop.toString(), (prop) => target[prop]);\n if (propertyType == null) {\n return Schema.Any; // TODO(burdon): HACK.\n }\n\n invariant(propertyType, `invalid property: ${prop.toString()}`);\n return Schema.make(propertyType);\n }\n}\n\n/**\n * Tuple AST is used both for:\n * fixed-length tuples ([string, number]) in which case AST will be { elements: [Schema.String, Schema.Number] }\n * variable-length arrays (Array<string | number>) in which case AST will be { rest: [Schema.Union(Schema.String, Schema.Number)] }\n */\nconst getArrayElementSchema = (\n tupleAst: SchemaAST.TupleType,\n property: string | symbol | number,\n): Schema.Schema.AnyNoContext => {\n const elementIndex = typeof property === 'string' ? parseInt(property, 10) : Number.NaN;\n if (Number.isNaN(elementIndex)) {\n invariant(property === 'length', `invalid array property: ${String(property)}`);\n return Schema.Number;\n }\n if (elementIndex < tupleAst.elements.length) {\n const elementType = tupleAst.elements[elementIndex].type;\n return Schema.make(elementType).annotations(elementType.annotations);\n }\n\n const restType = tupleAst.rest;\n return Schema.make(restType[0].type).annotations(restType[0].annotations);\n};\n\nconst flattenUnion = (typeAst: SchemaAST.AST): SchemaAST.AST[] =>\n SchemaAST.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [typeAst];\n\nconst getProperties = (\n typeAst: SchemaAST.AST,\n getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.PropertySignature[] => {\n const astCandidates = flattenUnion(typeAst);\n const typeAstList = astCandidates.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n if (typeAstList.length === 0) {\n return [];\n }\n if (typeAstList.length === 1) {\n return SchemaAST.getPropertySignatures(typeAstList[0]);\n }\n\n const typeDiscriminators = getTypeDiscriminators(typeAstList);\n const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));\n const typeIndex = typeDiscriminators.findIndex((p) => targetPropertyValue === (p.type as SchemaAST.Literal).literal);\n invariant(typeIndex !== -1, 'discriminator field not set on target');\n return SchemaAST.getPropertySignatures(typeAstList[typeIndex]);\n};\n\nconst getPropertyType = (\n ast: SchemaAST.AST,\n propertyName: string,\n getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.AST | null => {\n const anyOrObject = unwrapAst(\n ast,\n (candidate) => SchemaAST.isAnyKeyword(candidate) || SchemaAST.isObjectKeyword(candidate),\n );\n if (anyOrObject != null) {\n return ast;\n }\n\n const typeOrDiscriminatedUnion = unwrapAst(ast, (t) => {\n return SchemaAST.isTypeLiteral(t) || (SchemaAST.isUnion(t) && t.types.some((t) => SchemaAST.isTypeLiteral(t)));\n });\n if (typeOrDiscriminatedUnion == null) {\n return null;\n }\n\n const targetProperty = getProperties(typeOrDiscriminatedUnion, getTargetPropertyFn).find(\n (p) => p.name === propertyName,\n );\n if (targetProperty != null) {\n return unwrapAst(targetProperty.type);\n }\n\n const indexSignatureType = unwrapAst(ast, SchemaAST.isTypeLiteral);\n if (\n indexSignatureType &&\n SchemaAST.isTypeLiteral(indexSignatureType) &&\n indexSignatureType.indexSignatures.length > 0\n ) {\n return unwrapAst(indexSignatureType.indexSignatures[0].type);\n }\n\n return null;\n};\n\nconst getTypeDiscriminators = (typeAstList: SchemaAST.TypeLiteral[]): SchemaAST.PropertySignature[] => {\n const discriminatorPropCandidates = typeAstList\n .flatMap(SchemaAST.getPropertySignatures)\n .filter((p) => SchemaAST.isLiteral(p.type));\n const propertyName = discriminatorPropCandidates[0].name;\n const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);\n const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;\n const isDiscriminatedUnion = isValidDiscriminator && everyTypeHasDiscriminator;\n invariant(isDiscriminatedUnion, 'type ambiguity: every type in a union must have a single unique-literal field');\n return discriminatorPropCandidates;\n};\n\n/**\n * Used to check that rootAst is for a type matching the provided predicate.\n * That's not always straightforward because types of optionality and recursive types.\n * const Task = Schema.Struct({\n * ...,\n * previous?: Schema.optional(Schema.suspend(() => Task)),\n * });\n * Here the AST for `previous` field is going to be Union(Suspend(Type), Undefined).\n * SchemaAST.isTypeLiteral(field) will return false, but unwrapAst(field, (ast) => SchemaAST.isTypeLiteral(ast))\n * will return true.\n */\nconst unwrapAst = (rootAst: SchemaAST.AST, predicate?: (ast: SchemaAST.AST) => boolean): SchemaAST.AST | null => {\n let ast: SchemaAST.AST | undefined = rootAst;\n while (ast != null) {\n if (predicate?.(ast)) {\n return ast;\n }\n\n if (SchemaAST.isUnion(ast)) {\n const next: any = ast.types.find((t) => (predicate != null && predicate(t)) || SchemaAST.isSuspend(t));\n if (next != null) {\n ast = next;\n continue;\n }\n }\n\n if (SchemaAST.isSuspend(ast)) {\n ast = ast.f();\n } else {\n return predicate == null ? ast : null;\n }\n }\n\n return null;\n};\n\nconst unwrapArray = (ast: SchemaAST.AST) => unwrapAst(ast, SchemaAST.isTupleType) as SchemaAST.TupleType | null;\n\nexport const checkIdNotPresentOnSchema = (schema: Schema.Schema<any, any, any>) => {\n invariant(SchemaAST.isTypeLiteral(schema.ast));\n const idProperty = SchemaAST.getPropertySignatures(schema.ast).find((prop) => prop.name === 'id');\n if (idProperty != null) {\n throw new Error('\"id\" property name is reserved');\n }\n};\n\n// TODO(burdon): Reconcile with JsonPath.\ntype KeyPath = readonly (string | number)[];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type RefTypeId } from '../ref/ref';\n\nimport { getProxyTarget } from './proxy-utils';\nimport { ChangeId, EventId } from './symbols';\n\n/**\n * Subscribe to changes on a reactive object.\n * @param obj - The reactive object to subscribe to.\n * @param callback - Called when the object changes.\n * @returns Unsubscribe function.\n */\n// TODO(wittjosiah): Consider throwing if obj doesn't have EventId instead of returning no-op.\nexport const subscribe = (obj: unknown, callback: () => void): (() => void) => {\n const target = getProxyTarget(obj as any);\n if (target && EventId in target) {\n return (target as any)[EventId].on(callback);\n }\n return () => {};\n};\n\n/**\n * Deeply removes readonly modifiers from all properties of T.\n * Inside Obj.change, all properties are fully mutable regardless of schema definition.\n * Ref types are preserved as-is since they are value-like objects that are replaced, not mutated.\n * Primitive types (including branded primitives) are preserved as-is.\n */\nexport type Mutable<T> = T extends string | number | boolean | bigint | symbol | null | undefined\n ? T // Primitives (including branded primitives like JsonPath) stay as-is.\n : T extends { [RefTypeId]: any }\n ? T // Keep Ref types as-is (they're value-like, not mutated in place).\n : T extends object\n ? T extends readonly (infer U)[]\n ? Mutable<U>[]\n : { -readonly [K in keyof T]: Mutable<T[K]> }\n : T;\n\n/**\n * Callback type for the change function.\n */\nexport type ChangeCallback<T> = (mutableObj: Mutable<T>) => void;\n\n/**\n * Perform mutations on a reactive object within a change context.\n *\n * If the object has a change handler (via ChangeId), it will be called with the callback.\n * This allows handlers to implement features like:\n * - Readonly enforcement (mutations only allowed within change context)\n * - Batched notifications (single notification for all mutations in the callback)\n * - Transaction semantics\n *\n * If the object doesn't have a change handler, the callback is called directly.\n *\n * @param obj - The reactive object to mutate.\n * @param callback - Callback that receives a mutable view of the object.\n */\nexport const change = <T>(obj: T, callback: ChangeCallback<T>): void => {\n // Check proxy first (allows handler to intercept), then fall back to target.\n // This order is important for EchoReactiveHandler which handles ChangeId in the proxy trap.\n const changeFn = (obj as any)[ChangeId];\n if (changeFn) {\n changeFn(callback);\n } else {\n callback(obj as Mutable<T>);\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { InspectOptionsStylized, inspect as inspectFn } from 'node:util';\n\nimport { type CustomInspectFunction, inspectCustom } from '@dxos/debug';\n\nimport { getTypeDXN } from '../annotations';\nimport { ATTR_META, ATTR_TYPE, type AnyEntity, MetaId } from '../types';\n\n/*\n * @internal\n */\nexport const attachedTypedObjectInspector = (obj: any) => {\n const descriptor = Object.getOwnPropertyDescriptor(obj, inspectCustom);\n if (descriptor) {\n return;\n }\n\n Object.defineProperty(obj, inspectCustom, {\n value: typedObjectInspectFunction,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n};\n\n// NOTE: KEEP as function.\nconst typedObjectInspectFunction: CustomInspectFunction<AnyEntity> = function (\n this: AnyEntity,\n depth: number,\n options: InspectOptionsStylized,\n inspect: typeof inspectFn,\n) {\n const { id, ...props } = this;\n return inspect(\n {\n id,\n [ATTR_TYPE]: getTypeDXN(this),\n ...props,\n [ATTR_META]: (this as any)[MetaId], // TODO(dmaretskyi): Couldn't use getMeta since that throw's if the object has no meta.\n },\n options,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { type EncodedReference, ObjectStructure, isEncodedReference } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { assumeType, deepMapValues, visitValues } from '@dxos/util';\n\nimport type * as Obj from '../../Obj';\nimport { getTypeDXN, setTypename } from '../annotations';\nimport {\n ATTR_DELETED,\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n ATTR_SELF_DXN,\n type ObjectJSON,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n SelfDXNId,\n assertObjectModel,\n} from '../entities';\nimport { attachTypedJsonSerializer, defineHiddenProperty, typedJsonSerializer } from '../proxy';\nimport { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../ref';\nimport {\n ATTR_META,\n ATTR_TYPE,\n type AnyEntity,\n EntityKind,\n KindId,\n MetaId,\n ObjectMetaSchema,\n setSchema,\n} from '../types';\n\n// Re-export for backward compatibility.\nexport { attachTypedJsonSerializer };\n\ntype DeepReplaceRef<T> =\n T extends Ref<any>\n ? EncodedReference\n : T extends object\n ? {\n [K in keyof T]: DeepReplaceRef<T[K]>;\n }\n : T;\n\ntype SerializedObject<T extends { id: string }> = {\n [K in keyof T]: DeepReplaceRef<T[K]>;\n} & ObjectJSON;\n\n/**\n * Converts object to it's JSON representation.\n */\nexport const objectToJSON = <T extends AnyEntity>(obj: T): SerializedObject<T> => {\n const typename = getTypeDXN(obj)?.toString();\n invariant(typename && typeof typename === 'string');\n return typedJsonSerializer.call(obj);\n};\n\n/**\n * Creates an object from it's json representation.\n * Performs schema validation.\n * References and schema will be resolvable if the `refResolver` is provided.\n * The function need to be async to support resolving the schema as well as the relation endpoints.\n */\nexport const objectFromJSON = async (\n jsonData: unknown,\n { refResolver, dxn }: { refResolver?: RefResolver; dxn?: DXN } = {},\n): Promise<AnyEntity> => {\n assumeType<ObjectJSON>(jsonData);\n assertArgument(typeof jsonData === 'object' && jsonData !== null, 'jsonData', 'expect object');\n assertArgument(typeof jsonData[ATTR_TYPE] === 'string', 'jsonData[ATTR_TYPE]', 'expected object to have a type');\n assertArgument(typeof jsonData.id === 'string', 'jsonData.id', 'expected object to have an id');\n\n const type = DXN.parse(jsonData[ATTR_TYPE]);\n const schema = await refResolver?.resolveSchema(type);\n invariant(schema === undefined || Schema.isSchema(schema));\n\n let obj: any;\n if (schema != null) {\n obj = await schema.pipe(Schema.decodeUnknownPromise)(jsonData);\n if (refResolver) {\n setRefResolverOnData(obj, refResolver);\n }\n } else {\n obj = decodeGeneric(jsonData, { refResolver });\n }\n\n invariant(ObjectId.isValid(obj.id), 'Invalid object id');\n setTypename(obj, type);\n if (schema) {\n setSchema(obj, schema);\n }\n\n const isRelation =\n typeof jsonData[ATTR_RELATION_SOURCE] === 'string' || typeof jsonData[ATTR_RELATION_TARGET] === 'string';\n if (isRelation) {\n const sourceDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source')));\n const targetDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target')));\n\n const source = (await refResolver?.resolve(sourceDxn)) as AnyEntity | undefined;\n const target = (await refResolver?.resolve(targetDxn)) as AnyEntity | undefined;\n\n defineHiddenProperty(obj, KindId, EntityKind.Relation);\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);\n defineHiddenProperty(obj, RelationSourceId, source);\n defineHiddenProperty(obj, RelationTargetId, target);\n } else {\n defineHiddenProperty(obj, KindId, EntityKind.Object);\n }\n\n if (typeof jsonData[ATTR_META] === 'object') {\n const meta = await ObjectMetaSchema.pipe(Schema.decodeUnknownPromise)(jsonData[ATTR_META]);\n invariant(Array.isArray(meta.keys));\n defineHiddenProperty(obj, MetaId, meta);\n } else {\n defineHiddenProperty(obj, MetaId, {\n keys: [],\n });\n }\n\n if (dxn) {\n defineHiddenProperty(obj, SelfDXNId, dxn);\n }\n\n assertObjectModel(obj);\n invariant((obj as any)[ATTR_TYPE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_DELETED] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_SELF_DXN] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_SOURCE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_TARGET] === undefined, 'Invalid object model');\n return obj;\n};\n\nconst decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }) => {\n const {\n [ATTR_TYPE]: _type,\n [ATTR_META]: _meta,\n [ATTR_DELETED]: _deleted,\n [ATTR_SELF_DXN]: _selfDxn,\n [ATTR_RELATION_SOURCE]: _relationSource,\n [ATTR_RELATION_TARGET]: _relationTarget,\n ...props\n } = jsonData as any;\n\n return deepMapValues(props, (value, visitor) => {\n if (isEncodedReference(value)) {\n return refFromEncodedReference(value, options.refResolver);\n }\n\n return visitor(value);\n });\n};\n\nexport const setRefResolverOnData = (obj: AnyEntity, refResolver: RefResolver) => {\n const visitor = (value: unknown) => {\n if (Ref.isRef(value)) {\n setRefResolver(value, refResolver);\n } else {\n visitValues(value, visitor);\n }\n };\n\n visitor(obj);\n};\n\n/**\n * Convert ObjectStructure to JSON data for indexing.\n * Different from {@link objectToJSON} as it takes the internal {@link ObjectStructure} representation directly\n */\nexport const objectStructureToJson = (objectId: string, structure: ObjectStructure): Obj.JSON => {\n return {\n ...structure.data,\n id: objectId,\n [ATTR_TYPE]: (ObjectStructure.getTypeReference(structure)?.['/'] ?? '') as DXN.String,\n [ATTR_DELETED]: ObjectStructure.isDeleted(structure),\n [ATTR_RELATION_SOURCE]: ObjectStructure.getRelationSource(structure)?.['/'] as DXN.String | undefined,\n [ATTR_RELATION_TARGET]: ObjectStructure.getRelationTarget(structure)?.['/'] as DXN.String | undefined,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ObjectDeletedId } from '../entities';\nimport { type AnyProperties } from '../types';\n\n/**\n * @returns `true` if the object has been marked as deleted.\n */\nexport const isDeleted = (obj: AnyProperties): boolean => {\n if ((obj as any)[ObjectDeletedId] === undefined) {\n // TODO(dmaretskyi): Return to prior behavior of throwing.\n // throw new Error('Object does not support deletion marker');\n return false;\n }\n\n return (obj as any)[ObjectDeletedId] ?? false;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { DXN, ObjectId, QueueSubspaceTags, SpaceId } from '@dxos/keys';\n\n/**\n * @deprecated Use `db.queues.create()`\n */\n// TODO(burdon): Move to @dxos/keys.\nexport const createQueueDXN = (spaceId = SpaceId.random(), queueId = ObjectId.random()) =>\n new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, spaceId, queueId]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport {\n type SchemaProperty,\n getArrayElementType,\n getBaseType,\n getProperties,\n isArrayType,\n isNestedType,\n} from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\n\nimport { type Mutable } from '../proxy';\nimport { getSchema } from '../types';\n\n/**\n * Set a deeply nested property on an object.\n * Must be called within an Obj.change or Relation.change callback.\n */\nexport const setValue = (obj: Mutable<any>, path: readonly (string | number)[], value: any): void => {\n invariant(path.length > 0, 'Path must not be empty');\n\n const schema = getSchema(obj);\n invariant(schema != null, 'Object must have a schema');\n\n let parent = obj;\n let currentAST: SchemaAST.AST | undefined = schema.ast;\n\n // Navigate to the parent of the target property.\n for (let i = 0; i < path.length - 1; i++) {\n const part = path[i];\n const key = typeof part === 'number' ? part : String(part);\n if (parent[key] === undefined) {\n const propertyAST = getPropertyAST(currentAST, String(part));\n const shouldBeArray = propertyAST ? isArrayType(propertyAST) : false;\n\n if (shouldBeArray) {\n // Create array.\n parent[key] = [];\n } else {\n // TODO(wittjosiah): Is there a better way to handle this than creating an object with defaults?\n // Perhaps properties on objects should be optional by default?\n // Create object with defaults for required fields.\n const objWithDefaults = createObjectWithDefaults(propertyAST);\n parent[key] = objWithDefaults;\n }\n }\n\n parent = parent[key];\n currentAST = getPropertyAST(currentAST, String(part));\n }\n\n const finalKey = path[path.length - 1];\n parent[finalKey] = value;\n\n return value;\n};\n\n/**\n * Helper to get the AST of a nested property.\n * @param ast - Current schema AST.\n * @param propertyName - Name of the property to get.\n * @returns The AST of the nested property, or undefined if not found.\n */\nconst getPropertyAST = (ast: SchemaAST.AST | undefined, propertyName: string): SchemaAST.AST | undefined => {\n if (!ast) {\n return undefined;\n }\n\n if (isNestedType(ast)) {\n const properties = getProperties(ast);\n const property = properties.find((p) => p.name.toString() === propertyName);\n if (property) {\n return getBaseType(property).type;\n }\n }\n\n if (isArrayType(ast)) {\n const elementType = getArrayElementType(ast);\n return elementType;\n }\n\n return undefined;\n};\n\n/**\n * Get all required properties from a schema AST.\n * A property is required if it's not optional.\n *\n * @param ast - Schema AST to inspect.\n * @returns Array of required properties with their types.\n */\nconst getRequiredProperties = (ast: SchemaAST.AST | undefined): SchemaProperty[] => {\n if (!ast) {\n return [];\n }\n\n // Only objects/structs have properties with optional/required distinction.\n if (!isNestedType(ast)) {\n return [];\n }\n\n const properties = getProperties(ast);\n\n // Filter to only required properties (where isOptional === false).\n return properties.filter((p) => !p.isOptional);\n};\n\n/**\n * Get the default value for a primitive type.\n * Returns undefined for non-primitive or unsupported types.\n *\n * @param ast - Type AST.\n * @returns Default value for the type, or undefined.\n */\nconst getDefaultValueForType = (ast: SchemaAST.AST | undefined): any => {\n if (!ast) {\n return undefined;\n }\n\n const defaultValue = SchemaAST.getDefaultAnnotation(ast);\n if (Option.isSome(defaultValue)) {\n return defaultValue.value;\n }\n\n return Match.value(ast).pipe(\n Match.when({ _tag: 'StringKeyword' }, () => ''),\n Match.when({ _tag: 'NumberKeyword' }, () => 0),\n Match.when({ _tag: 'BooleanKeyword' }, () => false),\n Match.orElse(() => undefined),\n );\n};\n\n/**\n * Create an object with default values for all required properties.\n * Handles primitive types (String, Number, Boolean) and recursively initializes required nested objects.\n *\n * @param ast - Schema AST describing the object structure.\n * @returns Object with required fields populated with defaults.\n */\nconst createObjectWithDefaults = (ast: SchemaAST.AST | undefined): any => {\n if (!ast) {\n return {};\n }\n\n const requiredProps = getRequiredProperties(ast);\n const obj: any = {};\n\n for (const prop of requiredProps) {\n const defaultValue = getDefaultValueForType(prop.type);\n if (defaultValue !== undefined) {\n obj[prop.name] = defaultValue;\n } else if (isNestedType(prop.type)) {\n obj[prop.name] = createObjectWithDefaults(prop.type);\n }\n }\n\n return obj;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { deepMapValues } from '@dxos/util';\n\nimport { RelationSourceDXNId, RelationSourceId, RelationTargetDXNId, RelationTargetId } from '../entities/relation';\nimport { KindId, SnapshotKindId } from '../types/entity';\nimport { MetaId } from '../types/meta';\nimport { SchemaId, TypeId } from '../types/typename';\n\n/**\n * Copy a Symbol-keyed property from source to target if it exists.\n */\nconst copySymbolProperty = (source: any, target: any, symbol: symbol): void => {\n if (symbol in source) {\n Object.defineProperty(target, symbol, {\n value: source[symbol],\n writable: false,\n enumerable: false,\n configurable: false,\n });\n }\n};\n\n/**\n * Returns an immutable snapshot of the reactive object.\n * The snapshot is branded with SnapshotKindId (not KindId).\n */\nexport const getSnapshot = <T extends object>(obj: T): T => {\n const snapshot = deepMapValues(obj, (value, recurse) => {\n // Do not recurse on references (but do recurse on arrays).\n if (\n typeof value === 'object' &&\n value !== null &&\n Object.getPrototypeOf(value) !== Object.prototype &&\n !Array.isArray(value)\n ) {\n return value;\n }\n\n return recurse(value);\n }) as any;\n\n // Add SnapshotKindId brand based on original KindId.\n if (obj != null && typeof obj === 'object' && KindId in obj) {\n snapshot[SnapshotKindId] = (obj as any)[KindId];\n }\n\n // Preserve Symbol-keyed properties that are important for type introspection.\n // These are not copied by deepMapValues since Object.keys() doesn't include symbols.\n if (obj != null && typeof obj === 'object') {\n const source = obj as any;\n\n // Type introspection symbols.\n copySymbolProperty(source, snapshot, TypeId);\n copySymbolProperty(source, snapshot, SchemaId);\n\n // Metadata symbol.\n copySymbolProperty(source, snapshot, MetaId);\n\n // Relation endpoint symbols.\n copySymbolProperty(source, snapshot, RelationSourceDXNId);\n copySymbolProperty(source, snapshot, RelationTargetDXNId);\n copySymbolProperty(source, snapshot, RelationSourceId);\n copySymbolProperty(source, snapshot, RelationTargetId);\n }\n\n return Object.freeze(snapshot) as T;\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { deepMapValues } from '@dxos/util';\n\nimport type * as Obj from '../../Obj';\nimport { makeObject } from '../proxy';\nimport { Ref } from '../ref';\nimport { getMeta, getSchema } from '../types';\n\n/**\n * Clones an object or relation.\n * This does not clone referenced objects, only the properties in the object.\n * @returns A new object with the same schema and properties.\n */\nexport const clone = <T extends Obj.Any>(obj: T, opts?: Obj.CloneOptions): T => {\n const { id, ...data } = obj;\n const schema = getSchema(obj);\n invariant(schema != null, 'Object should have a schema');\n const props: any = deepMapValues(data, (value, recurse) => {\n if (Ref.isRef(value)) {\n if (opts?.deep) {\n // TODO(dmaretskyi): Will break on circular references.\n return Ref.make(clone(value.target!, opts));\n }\n return value;\n }\n return recurse(value);\n });\n\n if (opts?.retainId) {\n props.id = id;\n }\n const meta = deepMapValues(getMeta(obj), (value, recurse) => {\n if (Ref.isRef(value)) {\n if (opts?.deep) {\n // TODO(dmaretskyi): Will break on circular references.\n return Ref.make(clone(value.target!, opts));\n }\n return value;\n }\n return recurse(value);\n });\n\n return makeObject(schema, props, meta);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { type ObjectId } from '@dxos/keys';\n\nimport { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../annotations';\nimport { type JsonSchemaType, toEffectSchema, toJsonSchema } from '../json-schema';\nimport { type TypedObject, type TypedObjectPrototype, getSnapshot } from '../object';\nimport { ChangeId } from '../proxy';\nimport { EntityKind, SchemaKindId } from '../types';\n\nimport {\n addFieldsToSchema,\n removeFieldsFromSchema,\n setTypenameInSchema,\n updateFieldNameInSchema,\n updateFieldsInSchema,\n} from './manipulation';\nimport { PersistentSchema } from './persistent-schema';\n\n/**\n * Base schema type.\n */\n// TODO(burdon): Merge with ImmutableSchema.\nexport interface BaseSchema<A = any, I = any> extends TypedObject<A, I> {\n // TODO(burdon): Different from mutable?\n get readonly(): boolean;\n // TODO(burdon): Change to external function.\n get mutable(): EchoSchema<A, I>;\n get snapshot(): Schema.Schema<A, I>;\n get jsonSchema(): JsonSchemaType;\n}\n\n/**\n * Immutable schema type.\n * @deprecated Use `Schema.Schema.AnyNoContext` instead.\n */\n// TODO(burdon): Common abstract base class?\nexport class ImmutableSchema<A = any, I = any> implements BaseSchema<A, I> {\n private readonly _objectAnnotation: TypeAnnotation;\n constructor(private readonly _schema: Schema.Schema<A, I>) {\n this._objectAnnotation = getTypeAnnotation(this._schema)!;\n invariant(this._objectAnnotation);\n }\n\n //\n // Effect Schema (push to abstract base class).\n //\n\n public get [Schema.TypeId]() {\n return schemaVariance;\n }\n\n public get Type() {\n return this._schema.Type;\n }\n\n public get Encoded() {\n return this._schema.Encoded;\n }\n\n public get Context() {\n return this._schema.Context;\n }\n\n public get ast(): SchemaAST.AST {\n return this._schema.ast;\n }\n\n public get annotations() {\n return this._schema.annotations;\n }\n\n public get pipe() {\n return this._schema.pipe;\n }\n\n //\n // TypedObject\n //\n\n get kind(): EntityKind {\n return this._objectAnnotation.kind;\n }\n\n get typename(): string {\n return this._objectAnnotation.typename;\n }\n\n get version(): string {\n return this._objectAnnotation.version;\n }\n\n //\n // BaseSchema\n //\n\n get readonly(): boolean {\n return true;\n }\n\n get snapshot(): Schema.Schema.AnyNoContext {\n return this._schema;\n }\n\n // TODO(burdon): Change from getter since this is expensive.\n get jsonSchema(): JsonSchemaType {\n return toJsonSchema(this._schema);\n }\n\n get mutable(): EchoSchema {\n throw new Error('Schema is readonly.');\n }\n}\n\n/**\n * Defines an effect-schema for the `EchoSchema` type.\n *\n * This is here so that `EchoSchema` class can be used as a part of another schema definition (e.g., `ref(EchoSchema)`).\n */\nconst EchoSchemaConstructor = (): TypedObjectPrototype => {\n /**\n * Return class definition satisfying Schema.Schema.\n */\n return class {\n private static get _schema() {\n // The field is DynamicEchoSchema in runtime, but is serialized as PersisentSchema in automerge.\n return Schema.Union(PersistentSchema, Schema.instanceOf(EchoSchema)).annotations(\n PersistentSchema.ast.annotations,\n );\n }\n\n static readonly [Schema.TypeId] = schemaVariance;\n\n static get ast() {\n const schema = this._schema;\n return schema.ast;\n }\n\n static get annotations() {\n const schema = this._schema;\n return schema.annotations.bind(schema);\n }\n\n static get pipe() {\n const schema = this._schema;\n return schema.pipe.bind(schema);\n }\n } as any;\n};\n\nexport const isMutable = (schema: Schema.Schema.AnyNoContext): schema is EchoSchema => {\n return schema instanceof EchoSchema;\n};\n\n// NOTE: Keep in this file.\nconst schemaVariance = {\n _A: (_: any) => _,\n _I: (_: any) => _,\n _R: (_: never) => _,\n};\n\n/**\n * Represents a schema that is persisted in the ECHO database.\n * Schema can me mutable or readonly (specified by the {@link EchoSchema.readonly} field).\n *\n * Schema that can be modified at runtime via the API.\n * Is an instance of effect-schema (`Schema.Schema.AnyNoContext`) so it can be used in the same way as a regular schema.\n * IMPORTANT: The schema AST will change reactively when the schema is updated, including synced updates from remote peers.\n *\n * The class constructor is a schema instance itself, and can be used in the echo object definitions:\n *\n * @example\n * ```ts\n * export class TableType extends Schema.Struct({...}).pipe(Type.object({ typename: 'example.org/type/Table', version: '0.1.0' })){\n * title: Schema.String,\n * schema: Schema.optional(ref(EchoSchema)),\n * props: Schema.mutable(S.Array(TablePropSchema)),\n * }) {}\n * ```\n *\n * The ECHO API will translate any references to PersistentSchema objects to be resolved as EchoSchema objects.\n */\nexport class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implements BaseSchema<A, I> {\n private _schema: Schema.Schema.AnyNoContext | undefined;\n private _isDirty = true;\n\n /**\n * Schema kind key that marks this as an ECHO schema.\n * Makes EchoSchema satisfy the Type.Obj.Any type.\n */\n readonly [SchemaKindId]: EntityKind.Object = EntityKind.Object;\n\n constructor(private readonly _persistentSchema: PersistentSchema) {\n super();\n }\n\n //\n // Effect Schema (push to abstract base class).\n //\n\n public get [Schema.TypeId]() {\n return schemaVariance;\n }\n\n public get Type() {\n return this._persistentSchema as A;\n }\n\n public get Encoded() {\n return this._persistentSchema as I;\n }\n\n public get Context() {\n const schema = this._getSchema();\n return schema.Context;\n }\n\n public get ast() {\n const schema = this._getSchema();\n return schema.ast;\n }\n\n public get annotations() {\n const schema = this._getSchema();\n return schema.annotations.bind(schema);\n }\n\n public get pipe(): Schema.Schema.AnyNoContext['pipe'] {\n const schema = this._getSchema();\n return schema.pipe.bind(schema);\n }\n\n //\n // BaseSchema\n //\n\n public get kind(): EntityKind.Object {\n // Dynamic schemas are always object schemas.\n return EntityKind.Object;\n }\n\n public get typename(): string {\n return this._persistentSchema.typename;\n }\n\n public get version(): string {\n return this._persistentSchema.version;\n }\n\n public get readonly(): boolean {\n return false;\n }\n\n /**\n * Returns an immutable schema snapshot of the current state of the schema.\n */\n public get snapshot(): Schema.Schema.AnyNoContext {\n return this._getSchema();\n }\n\n /**\n * Returns the JSON schema for the schema.\n */\n public get jsonSchema(): JsonSchemaType {\n return this._persistentSchema.jsonSchema;\n }\n\n /**\n * Returns a mutable schema.\n */\n public get mutable(): EchoSchema {\n invariant(!this.readonly, 'Schema is not mutable');\n return this;\n }\n\n //\n // Mutable Schema\n //\n\n /**\n * Id of the ECHO object containing the schema.\n */\n public get id(): ObjectId {\n return this._persistentSchema.id;\n }\n\n /**\n * Short name of the schema.\n */\n public get name(): string | undefined {\n return this._persistentSchema.name;\n }\n\n public get [SchemaMetaSymbol](): SchemaMeta {\n return { id: this.id, typename: this.typename, version: this._persistentSchema.version };\n }\n\n /**\n * Reference to the underlying persistent schema object.\n */\n public get persistentSchema(): PersistentSchema {\n return this._persistentSchema;\n }\n\n public getProperties(): SchemaAST.PropertySignature[] {\n const ast = this._getSchema().ast;\n invariant(SchemaAST.isTypeLiteral(ast));\n return [...ast.propertySignatures].filter((p) => p.name !== 'id').map(unwrapOptionality);\n }\n\n //\n // Mutation methods.\n // TODO(burdon): Create separate interface for dynamic schema.\n // TODO(burdon): Deprecate direct manipulation? Use JSONSchema directly.\n //\n\n /**\n * @throws Error if the schema is readonly.\n */\n public updateTypename(typename: string): void {\n const updated = setTypenameInSchema(this._getSchema(), typename);\n this._change((schema) => {\n schema.typename = typename;\n schema.jsonSchema = toJsonSchema(updated);\n });\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public addFields(fields: Schema.Struct.Fields): void {\n const extended = addFieldsToSchema(this._getSchema(), fields);\n this._change((schema) => {\n schema.jsonSchema = toJsonSchema(extended);\n });\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public updateFields(fields: Schema.Struct.Fields): void {\n const updated = updateFieldsInSchema(this._getSchema(), fields);\n this._change((schema) => {\n schema.jsonSchema = toJsonSchema(updated);\n });\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public updateFieldPropertyName({ before, after }: { before: PropertyKey; after: PropertyKey }): void {\n const renamed = updateFieldNameInSchema(this._getSchema(), { before, after });\n this._change((schema) => {\n schema.jsonSchema = toJsonSchema(renamed);\n });\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public removeFields(fieldNames: string[]): void {\n const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);\n this._change((schema) => {\n schema.jsonSchema = toJsonSchema(removed);\n });\n }\n\n /**\n * Wrapper for Obj.change that handles the change context for the persistent schema.\n */\n private _change(callback: (schema: PersistentSchema) => void): void {\n const changeFn = (this._persistentSchema as any)[ChangeId];\n if (changeFn) {\n changeFn(callback);\n } else {\n callback(this._persistentSchema);\n }\n }\n\n //\n // Internals\n //\n\n /**\n * Called by DatabaseSchemaRegistry on update.\n */\n _invalidate(): void {\n this._isDirty = true;\n }\n\n /**\n * Rebuilds this schema if it is dirty.\n */\n _rebuild(): void {\n if (this._isDirty || this._schema == null) {\n this._schema = toEffectSchema(getSnapshot(this._persistentSchema.jsonSchema));\n this._isDirty = false;\n }\n }\n\n _getSchema(): Schema.Schema.AnyNoContext {\n this._rebuild();\n return this._schema!;\n }\n}\n\n// TODO(burdon): Move to effect.\nconst unwrapOptionality = (property: SchemaAST.PropertySignature): SchemaAST.PropertySignature => {\n if (!SchemaAST.isUnion(property.type)) {\n return property;\n }\n\n return {\n ...property,\n type: property.type.types.find((type) => !SchemaAST.isUndefinedKeyword(type))!,\n } as any;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../annotations';\n\n// TODO(ZaymonFC): Do this one at a time. This might be dangerous.\nexport const addFieldsToSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const schemaExtension = Schema.partial(Schema.Struct(fields));\n return Schema.extend(schema, schemaExtension).annotations(\n schema.ast.annotations,\n ) as any as Schema.Schema.AnyNoContext;\n};\n\nexport const updateFieldsInSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n const updatedProperties = [...ast.propertySignatures];\n const propertiesToUpdate = (Schema.partial(Schema.Struct(fields)).ast as SchemaAST.TypeLiteral).propertySignatures;\n for (const property of propertiesToUpdate) {\n const index = updatedProperties.findIndex((p) => p.name === property.name);\n if (index !== -1) {\n updatedProperties[index] = property;\n } else {\n updatedProperties.push(property);\n }\n }\n\n return Schema.make(new SchemaAST.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));\n};\n\nexport const removeFieldsFromSchema = (\n schema: Schema.Schema.AnyNoContext,\n fieldNames: string[],\n): Schema.Schema.AnyNoContext => {\n return Schema.make(SchemaAST.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);\n};\n\nexport const updateFieldNameInSchema = (\n schema: Schema.Schema.AnyNoContext,\n { before, after }: { before: PropertyKey; after: PropertyKey },\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n return Schema.make(\n new SchemaAST.TypeLiteral(\n ast.propertySignatures.map((p) =>\n p.name === before\n ? new SchemaAST.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations)\n : p,\n ),\n ast.indexSignatures,\n ast.annotations,\n ),\n );\n};\n\nexport const setTypenameInSchema = (\n schema: Schema.Schema.AnyNoContext,\n typename: string,\n): Schema.Schema.AnyNoContext => {\n const existingAnnotation = schema.ast.annotations[TypeAnnotationId] as TypeAnnotation;\n invariant(existingAnnotation, `Missing ${String(TypeAnnotationId)}`);\n\n return schema.annotations({\n ...schema.ast.annotations,\n [TypeAnnotationId]: {\n kind: existingAnnotation.kind,\n typename,\n version: existingAnnotation.version,\n } satisfies TypeAnnotation,\n [SchemaAST.JSONSchemaAnnotationId]: {\n ...(schema.ast.annotations[SchemaAST.JSONSchemaAnnotationId] ?? {}),\n $id: schema.ast.annotations[TypeIdentifierAnnotationId] ?? DXN.fromTypename(typename).toString(),\n typename,\n },\n });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { TypenameSchema, VersionSchema } from '../annotations';\nimport { EchoObjectSchema } from '../entities';\nimport { JsonSchemaType } from '../json-schema';\n\n/**\n * Persistent representation of a schema.\n */\n// TODO(burdon): Move.\nexport const PersistentSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n typename: TypenameSchema,\n version: VersionSchema,\n jsonSchema: JsonSchemaType,\n}).pipe(\n EchoObjectSchema({\n typename: 'dxos.org/type/Schema',\n version: '0.1.0',\n }),\n);\n\nexport interface PersistentSchema extends Schema.Schema.Type<typeof PersistentSchema> {}\n"],
5
+ "mappings": "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",
6
+ "names": ["JsonPath", "JsonProp", "getValue", "splitJsonPath", "Schema", "SchemaAST", "RawObject", "schema", "make", "omit", "ast", "Schema", "ForeignKey", "invariant", "intersection", "ATTR_META", "MetaId", "Symbol", "for", "ObjectMetaSchema", "mutable", "Struct", "keys", "Array", "tags", "optional", "String", "getMeta", "obj", "metadata", "foreignKey", "source", "id", "foreignKeyEquals", "a", "b", "compareForeignKeys", "length", "VersionTypeId", "Symbol", "for", "getLabel", "entity", "schema", "getSchema$", "getLabelWithSchema", "setLabel", "label", "setLabelWithSchema", "getDescription", "getDescriptionWithSchema", "setDescription", "description", "setDescriptionWithSchema", "invariant", "assumeType", "Schema", "makeEchoTypeSchema", "fields", "ast", "typename", "version", "kind", "EchoObjectSchemaClass", "make", "SchemaKindId", "annotations", "schema", "instanceOf", "value", "is", "invariant", "DXN", "ObjectId", "assumeType", "Schema", "SchemaAST", "raise", "assertArgument", "invariant", "DXN", "ATTR_RELATION_SOURCE", "RelationSourceId", "Symbol", "for", "RelationSourceDXNId", "ATTR_RELATION_TARGET", "RelationTargetId", "RelationTargetDXNId", "EchoRelationSchema", "source", "target", "typename", "version", "assertArgument", "isSchema", "sourceDXN", "getDXNForRelationSchemaRef", "targetDXN", "getEntityKind", "EntityKind", "Object", "raise", "Error", "self", "invariant", "isTypeLiteral", "ast", "fields", "schemaWithId", "extend", "mutable", "Struct", "id", "String", "annotations", "TypeAnnotationId", "kind", "Relation", "sourceSchema", "targetSchema", "JSONSchemaAnnotationId", "makeTypeJsonSchemaAnnotation", "relationSource", "relationTarget", "makeEchoTypeSchema", "schema", "identifier", "getTypeIdentifierAnnotation", "getSchemaTypename", "DXN", "fromTypename", "toString", "ATTR_SELF_DXN", "SelfDXNId", "Symbol", "for", "ATTR_DELETED", "ObjectDeletedId", "ObjectVersionId", "ObjectDatabaseId", "assertObjectModel", "obj", "invariant", "assumeType", "ObjectId", "isValid", "id", "TypeId", "undefined", "DXN", "KindId", "EntityKind", "Object", "Relation", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "Schema", "SchemaAST", "invariant", "EchoObjectSchema", "typename", "version", "self", "invariant", "TypeAnnotationId", "isTypeLiteral", "ast", "fields", "schemaWithId", "extend", "mutable", "Struct", "id", "String", "annotations", "kind", "EntityKind", "Object", "JSONSchemaAnnotationId", "makeTypeJsonSchemaAnnotation", "makeEchoTypeSchema", "Schema", "assertArgument", "invariant", "DXN", "ObjectId", "assumeType", "getObjectDXN", "object", "invariant", "isSchema", "assertArgument", "assumeType", "SelfDXNId", "DXN", "ObjectId", "isValid", "id", "TypeError", "fromLocalObjectId", "getDXN", "entity", "dxn", "getObjectDXN", "invariant", "getDatabase", "assumeType", "ObjectDatabaseId", "assertArgument", "invariant", "getMetaChecked", "entity", "assertArgument", "meta", "getMeta$", "invariant", "getKeys", "source", "keys", "filter", "key", "deleteKeys", "i", "length", "splice", "addTag", "tag", "tags", "push", "removeTag", "compare", "a", "b", "localeCompare", "sortByLabel", "getLabel", "sortByTypename", "getTypename", "sort", "comparators", "comparator", "result", "assertArgument", "unversioned", "VersionTypeId", "versioned", "isVersion", "entity", "version", "ver", "ObjectVersionId", "undefined", "versionValid", "assertArgument", "compareVersions", "version1", "version2", "automergeHeads", "length", "some", "head", "includes", "encodeVersion", "JSON", "stringify", "decodeVersion", "parsed", "parse", "SchemaAST", "CustomAnnotations", "format", "FormatAnnotationId", "currency", "CurrencyAnnotationId", "DecodedAnnotations", "title", "TitleAnnotationId", "description", "DescriptionAnnotationId", "EchoAnnotations", "meta", "PropertyMetaAnnotationId", "generator", "GeneratorAnnotationId", "labelProp", "LabelAnnotationId", "Schema", "JsonPath", "SimpleTypes", "Literal", "NonNegativeInteger", "Number", "pipe", "greaterThanOrEqualTo", "StringArray", "Array", "String", "mutable", "JsonSchemaOrBoolean", "Union", "suspend", "JsonSchemaType", "Boolean", "JsonSchemaEchoAnnotations", "Struct", "labelProp", "optional", "JsonPath", "generator", "Tuple", "meta", "Record", "key", "value", "Any", "type", "typename", "version", "schemaId", "annotations", "_JsonSchemaType", "$id", "$schema", "$ref", "$comment", "entityKind", "EntityKindSchema", "relationTarget", "relationSource", "title", "description", "readOnly", "writeOnly", "examples", "default", "const", "enum", "multipleOf", "greaterThan", "maximum", "exclusiveMaximum", "minimum", "exclusiveMinimum", "maxLength", "pattern", "FormatAnnotation", "set", "TypeFormat", "Regex", "format", "minLength", "items", "additionalItems", "maxItems", "minItems", "uniqueItems", "contains", "maxProperties", "minProperties", "required", "propertyOrder", "additionalProperties", "properties", "patternProperties", "propertyNames", "definitions", "dependencies", "identifier", "contentMediaType", "contentEncoding", "if", "then", "else", "allOf", "anyOf", "oneOf", "not", "$defs", "currency", "reference", "schema", "schemaVersion", "schemaObject", "echo", "JsonSchemaFields", "Object", "keys", "fields", "getSchemaProperty", "property", "setSchemaProperty", "ECHO_ANNOTATIONS_NS_DEPRECATED_KEY", "ECHO_ANNOTATIONS_NS_KEY", "getNormalizedEchoAnnotations", "obj", "normalizeEchoAnnotations", "undefined", "res", "normalizeSchema", "schema", "copy", "structuredClone", "go", "exclusiveMaximum", "maximum", "exclusiveMinimum", "minimum", "key", "Object", "keys", "JsonSchemaFields", "includes", "properties", "goOnRecord", "patternProperties", "propertyNames", "definitions", "items", "maybeGoOnArray", "additionalItems", "contains", "if", "then", "else", "allOf", "anyOf", "oneOf", "not", "$defs", "reference", "value", "Array", "isArray", "item", "record", "Array", "Function", "JSONSchema", "Option", "Schema", "SchemaAST", "raise", "mapAst", "assertArgument", "invariant", "DXN", "ObjectId", "log", "clearUndefined", "orderKeys", "removeProperties", "Effect", "Option", "ParseResult", "Schema", "SchemaAST", "Event", "inspectCustom", "EncodedReference", "assertArgument", "invariant", "DXN", "ObjectId", "JSON_SCHEMA_ECHO_REF_ID", "getSchemaReference", "property", "$id", "reference", "schema", "$ref", "typename", "DXN", "parse", "createSchemaReference", "fromTypename", "toString", "getReferenceAst", "ast", "_tag", "annotations", "ReferenceAnnotationId", "undefined", "version", "RefTypeId", "Symbol", "Ref", "assertArgument", "isSchema", "annotation", "getTypeAnnotation", "Error", "createEchoReferenceSchema", "getTypeIdentifierAnnotation", "isRef", "obj", "hasObjectId", "id", "ref", "dxn", "isLocalObjectId", "parts", "isRefSchema", "isRefSchemaAST", "getAnnotation", "pipe", "isSome", "make", "TypeError", "invariant", "ObjectId", "isValid", "fromLocalObjectId", "RefImpl", "fromDXN", "echoId", "referenceInfo", "schemaVersion", "refSchema", "declare", "encode", "value", "gen", "EncodedReference", "isEncodedReference", "decode", "dbService", "serviceOption", "Service", "db", "makeRef", "fail", "Unexpected", "toDXN", "jsonSchema", "RefImpl", "undefined", "Event", "emit", "dxn", "target", "isAvailable", "invariant", "resolveSync", "load", "obj", "resolve", "Error", "tryLoad", "noInline", "ref", "encode", "toString", "toJSON", "inspectCustom", "depth", "options", "inspect", "RefTypeId", "refVariance", "_setResolver", "resolver", "_getSavedTarget", "setRefResolver", "getRefSavedTarget", "_T", "refFromEncodedReference", "encodedReference", "DXN", "parse", "StaticRefResolver", "objects", "Map", "schemas", "addObject", "set", "id", "addSchema", "schema", "getSchemaDXN", "_load", "_onLoad", "asEchoDXN", "echoId", "get", "resolveSchema", "isNonNullable", "RefArray", "Object", "freeze", "targets", "refs", "map", "ref", "target", "filter", "isNonNullable", "loadAll", "Promise", "all", "load", "removeById", "id", "index", "findIndex", "Ref", "hasObjectId", "splice", "PropType", "toPropType", "type", "Error", "JSON_SCHEMA_URL", "toJsonSchema", "schema", "options", "assertArgument", "isSchema", "jsonSchema", "_toJsonSchemaAST", "ast", "strict", "removeProperties", "key", "value", "withRefinements", "withEchoRefinements", "fromAST", "definitions", "normalizeJsonSchema", "path", "suspendCache", "Map", "set", "recursiveResult", "isSuspend", "suspendedAst", "f", "cachedPath", "get", "Suspend", "JSONSchemaAnnotationId", "$ref", "isTypeLiteral", "mapAst", "undefined", "addJsonSchemaFields", "propertyOrder", "propertySignatures", "map", "p", "name", "isUndefinedKeyword", "annotationFields", "annotations_toJsonSchemaFields", "annotations", "Object", "keys", "length", "toEffectSchema", "root", "_defs", "defs", "$defs", "objectToEffectSchema", "result", "Unknown", "refToEffectSchema", "$id", "anyToEffectSchema", "Union", "enum", "e", "Literal", "oneOf", "v", "anyOf", "allOf", "log", "warn", "String", "pattern", "pipe", "RegExp", "Number", "int", "Boolean", "isArray", "items", "required", "optional", "splitAt", "minItems", "Tuple", "optionalElement", "invariant", "Array", "Null", "refSegments", "split", "identifier", "jsonSchemaFieldsToAnnotations", "echoRefinement", "ECHO_ANNOTATIONS_NS_DEPRECATED_KEY", "isEchoObject", "startsWith", "fields", "propertyList", "entries", "properties", "immutableIdField", "includes", "orderKeys", "patternProperties", "Record", "additionalProperties", "Struct", "indexValue", "extend", "mutable", "id", "reference", "echoId", "createEchoReferenceSchema", "typename", "version", "Any", "ANY_OBJECT_TYPENAME", "ANY_OBJECT_VERSION", "targetSchemaDXN", "DXN", "parse", "kind", "TYPE", "toString", "parts", "schemaVersion", "schemaFields", "echoAnnotations", "annotationId", "EchoAnnotations", "ECHO_ANNOTATIONS_NS_KEY", "echoIdentifier", "TypeIdentifierAnnotationId", "schemaId", "CustomAnnotations", "decodeTypeIdentifierAnnotation", "echo", "ObjectId", "isValid", "fromLocalObjectId", "decodeTypeAnnotation", "annotation", "entityKind", "decodeSync", "EntityKindSchema", "EntityKind", "Relation", "source", "relationSource", "raise", "target", "relationTarget", "sourceSchema", "targetSchema", "getNormalizedEchoAnnotations", "typeAnnotation", "TypeAnnotationId", "makeTypeJsonSchemaAnnotation", "DecodedAnnotations", "clearUndefined", "makeAnnotatedRefinement", "Refinement", "none", "$schema", "Schema", "makeTypedEntityClass", "typename", "version", "baseSchema", "TypeId", "schemaVariance", "ast", "annotations", "bind", "pipe", "Symbol", "hasInstance", "obj", "getTypename", "Error", "_A", "_", "_I", "_R", "raise", "assertArgument", "failedInvariant", "ObjectId", "EventId", "Symbol", "for", "ChangeId", "eventBatchDepth", "pendingEventTargets", "Set", "batchEvents", "callback", "target", "EventId", "emit", "clear", "emitEvent", "add", "currentChangeContext", "pendingNotificationKey", "pendingOwnerNotifications", "Set", "enterChangeContext", "key", "isInChangeContext", "queueNotification", "queueOwnerNotification", "target", "add", "hasPendingNotifications", "clearPendingNotifications", "executeChange", "contextKey", "eventTarget", "proxy", "callback", "exitContext", "batchEvents", "EventId", "emit", "ownerTarget", "clear", "defineHiddenProperty", "object", "key", "value", "Object", "defineProperty", "enumerable", "configurable", "MutationOutsideChangeContextError", "Error", "operation", "suggestion", "name", "createPropertySetError", "prop", "String", "createPropertyDeleteError", "createArrayMethodError", "method", "invariant", "DXN", "deepMapValues", "attachTypedJsonSerializer", "obj", "descriptor", "Object", "getOwnPropertyDescriptor", "defineProperty", "value", "typedJsonSerializer", "writable", "enumerable", "configurable", "id", "rest", "result", "TypeId", "ATTR_TYPE", "toString", "MetaId", "ATTR_META", "serializeMeta", "SelfDXNId", "ATTR_SELF_DXN", "RelationSourceDXNId", "sourceDXN", "invariant", "DXN", "ATTR_RELATION_SOURCE", "RelationTargetDXNId", "targetDXN", "ATTR_RELATION_TARGET", "assign", "serializeData", "data", "deepMapValues", "recurse", "Ref", "isRef", "noInline", "encode", "meta", "ObjectId", "invariant", "symbolIsProxy", "Symbol", "for", "isProxy", "value", "isValidProxyTarget", "Array", "isArray", "Object", "getPrototypeOf", "prototype", "getProxySlot", "proxy", "ProxyHandlerSlot", "getProxyTarget", "target", "getProxyHandler", "handler", "dangerouslySetProxyId", "obj", "id", "createProxy", "existingProxy", "_proxyMap", "get", "Proxy", "init", "set", "_handler", "setHandler", "prop", "receiver", "Reflect", "TRAPS", "trap", "defineProperty", "enumerable", "args", "apply", "Schema", "SchemaAST", "Event", "inspectCustom", "invariant", "invariant", "EchoOwner", "Symbol", "for", "getRawTarget", "value", "isProxy", "getProxyTarget", "getOwner", "setMetaOwner", "metaTarget", "parent", "defineHiddenProperty", "setOwnerRecursive", "owner", "options", "visited", "Set", "depth", "allowedPreviousOwner", "actualValue", "has", "add", "existingOwner", "isRootEchoObject", "EventId", "newAllowedPreviousOwner", "ownershipAllowed", "invariant", "recursiveOptions", "Array", "isArray", "item", "isValidProxyTarget", "key", "Object", "prototype", "hasOwnProperty", "call", "nested", "traverseObjectGraph", "visitor", "wouldCreateCycle", "targetRoot", "v", "hasForeignOwner", "target", "MAX_OWNER_DEPTH", "getEchoRoot", "KindId", "notifyOwnerChain", "queueOwnerNotification", "objectData", "Symbol", "for", "checkArrayMutationAllowed", "arr", "method", "target", "isProxy", "getProxyTarget", "echoRoot", "getEchoRoot", "isInitialized", "ChangeId", "EventId", "isInChangeContext", "createArrayMethodError", "ReactiveArray", "Array", "Symbol", "species", "BATCHED_METHODS", "Object", "defineProperty", "prototype", "enumerable", "value", "args", "result", "batchEvents", "apply", "Schema", "SchemaAST", "invariant", "log", "SchemaValidator", "validateSchema", "schema", "visitAll", "nodes", "forEach", "node", "make", "isUnion", "ast", "typeAstList", "types", "filter", "type", "isTypeLiteral", "length", "getTypeDiscriminators", "isTupleType", "positionalTypes", "elements", "map", "t", "allTypes", "concat", "rest", "getPropertySignatures", "p", "hasTypeAnnotation", "rootObjectSchema", "property", "annotation", "getPropertySchema", "annotations", "propertyPath", "getProperty", "i", "propertyName", "tupleAst", "unwrapArray", "getArrayElementSchema", "propertyType", "getPropertyType", "toString", "slice", "log", "warn", "path", "getTargetPropertySchema", "target", "prop", "SchemaId", "invariant", "arrayAst", "Any", "elementIndex", "parseInt", "Number", "NaN", "isNaN", "String", "elementType", "restType", "flattenUnion", "typeAst", "flatMap", "getProperties", "getTargetPropertyFn", "astCandidates", "typeDiscriminators", "targetPropertyValue", "name", "typeIndex", "findIndex", "literal", "anyOrObject", "unwrapAst", "candidate", "isAnyKeyword", "isObjectKeyword", "typeOrDiscriminatedUnion", "some", "targetProperty", "find", "indexSignatureType", "indexSignatures", "discriminatorPropCandidates", "isLiteral", "isValidDiscriminator", "every", "isOptional", "everyTypeHasDiscriminator", "isDiscriminatedUnion", "rootAst", "predicate", "next", "isSuspend", "f", "checkIdNotPresentOnSchema", "idProperty", "Error", "deepCopy", "value", "visited", "Map", "actualValue", "getRawTarget", "has", "get", "ReactiveArray", "copy", "set", "item", "push", "copyHiddenProperties", "proto", "Object", "getPrototypeOf", "prototype", "Array", "isArray", "key", "keys", "source", "target", "SchemaId", "defineHiddenProperty", "TypeId", "TypedReactiveHandler", "instance", "_proxyMap", "WeakMap", "_inSet", "init", "invariant", "hasOwner", "getOwner", "EventId", "Event", "ObjectDeletedId", "ChangeId", "symbolIsProxy", "isValidProxyTarget", "isProxy", "hasForeignOwner", "setOwnerRecursive", "defineProperty", "inspectCustom", "enumerable", "configurable", "_inspect", "bind", "prop", "receiver", "objectData", "toJSON", "undefined", "callback", "executeChange", "getOwnPropertyDescriptor", "Reflect", "createProxy", "echoRoot", "getEchoRoot", "isInitialized", "isSymbolProp", "isInChangeContext", "Error", "String", "result", "batchEvents", "_", "preparedValue", "_prepareValueForAssignment", "queueNotification", "notifyOwnerChain", "ownKeys", "deleteProperty", "property", "createPropertyDeleteError", "attributes", "wouldCreateCycle", "isRootEchoObject", "existingOwner", "from", "validatedValue", "_validateValue", "schema", "SchemaValidator", "getTargetPropertySchema", "asserts", "setSchemaProperties", "options", "inspectFn", "inspected", "showHidden", "customInspect", "obj", "schemaType", "getSchemaDXN", "elementSchema", "prepareTypedTarget", "isTypeLiteral", "ast", "validateSchema", "makeArraysReactive", "makeObject", "schema", "obj", "meta", "createReactiveObject", "isValidProxyTarget", "Error", "annotation", "getTypeAnnotation", "setIdOnTarget", "defineHiddenProperty", "KindId", "kind", "initMeta", "prepareTypedTarget", "attachTypedJsonSerializer", "proxy", "createProxy", "TypedReactiveHandler", "instance", "metaProxy", "MetaId", "metaTarget", "getProxyTarget", "setMetaOwner", "target", "id", "undefined", "ObjectId", "isValid", "random", "keys", "ObjectMetaSchema", "subscribe", "obj", "callback", "target", "getProxyTarget", "EventId", "on", "change", "changeFn", "ChangeId", "inspectCustom", "attachedTypedObjectInspector", "obj", "descriptor", "Object", "getOwnPropertyDescriptor", "inspectCustom", "defineProperty", "value", "typedObjectInspectFunction", "writable", "enumerable", "configurable", "depth", "options", "inspect", "id", "props", "ATTR_TYPE", "getTypeDXN", "ATTR_META", "MetaId", "Schema", "raise", "ObjectStructure", "isEncodedReference", "assertArgument", "invariant", "DXN", "ObjectId", "assumeType", "deepMapValues", "visitValues", "objectToJSON", "obj", "typename", "getTypeDXN", "toString", "invariant", "typedJsonSerializer", "call", "objectFromJSON", "jsonData", "refResolver", "dxn", "assumeType", "assertArgument", "ATTR_TYPE", "id", "type", "DXN", "parse", "schema", "resolveSchema", "undefined", "isSchema", "pipe", "decodeUnknownPromise", "setRefResolverOnData", "decodeGeneric", "ObjectId", "isValid", "setTypename", "setSchema", "isRelation", "ATTR_RELATION_SOURCE", "ATTR_RELATION_TARGET", "sourceDxn", "raise", "TypeError", "targetDxn", "source", "resolve", "target", "defineHiddenProperty", "KindId", "EntityKind", "Relation", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "Object", "ATTR_META", "meta", "ObjectMetaSchema", "Array", "isArray", "keys", "MetaId", "SelfDXNId", "assertObjectModel", "ATTR_DELETED", "ATTR_SELF_DXN", "options", "_type", "_meta", "_deleted", "_selfDxn", "_relationSource", "_relationTarget", "props", "deepMapValues", "value", "visitor", "isEncodedReference", "refFromEncodedReference", "Ref", "isRef", "setRefResolver", "visitValues", "objectStructureToJson", "objectId", "structure", "data", "ObjectStructure", "getTypeReference", "isDeleted", "getRelationSource", "getRelationTarget", "createObject", "schema", "props", "annotation", "getTypeAnnotation", "Error", "assertArgument", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "obj", "id", "ObjectId", "random", "kind", "EntityKind", "Relation", "Object", "defineHiddenProperty", "KindId", "MetaId", "keys", "setSchema", "setTypename", "getSchemaDXN", "failedInvariant", "attachTypedJsonSerializer", "attachedTypedObjectInspector", "sourceDXN", "getObjectDXN", "raise", "targetDXN", "assertObjectModel", "isDeleted", "obj", "ObjectDeletedId", "undefined", "DXN", "ObjectId", "QueueSubspaceTags", "SpaceId", "createQueueDXN", "spaceId", "SpaceId", "random", "queueId", "ObjectId", "DXN", "kind", "QUEUE", "QueueSubspaceTags", "DATA", "Match", "Option", "SchemaAST", "getArrayElementType", "getBaseType", "getProperties", "isArrayType", "isNestedType", "invariant", "setValue", "obj", "path", "value", "invariant", "length", "schema", "getSchema", "parent", "currentAST", "ast", "i", "part", "key", "String", "undefined", "propertyAST", "getPropertyAST", "shouldBeArray", "isArrayType", "objWithDefaults", "createObjectWithDefaults", "finalKey", "propertyName", "isNestedType", "properties", "getProperties", "property", "find", "p", "name", "toString", "getBaseType", "type", "elementType", "getArrayElementType", "getRequiredProperties", "filter", "isOptional", "getDefaultValueForType", "defaultValue", "getDefaultAnnotation", "isSome", "pipe", "when", "_tag", "orElse", "requiredProps", "prop", "deepMapValues", "copySymbolProperty", "source", "target", "symbol", "Object", "defineProperty", "value", "writable", "enumerable", "configurable", "getSnapshot", "obj", "snapshot", "deepMapValues", "recurse", "getPrototypeOf", "prototype", "Array", "isArray", "KindId", "SnapshotKindId", "TypeId", "SchemaId", "MetaId", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "freeze", "invariant", "deepMapValues", "clone", "obj", "opts", "id", "data", "schema", "getSchema", "invariant", "props", "deepMapValues", "value", "recurse", "Ref", "isRef", "deep", "make", "target", "retainId", "meta", "getMeta", "makeObject", "Schema", "SchemaAST", "invariant", "Schema", "SchemaAST", "invariant", "DXN", "addFieldsToSchema", "schema", "fields", "schemaExtension", "partial", "Struct", "extend", "annotations", "ast", "updateFieldsInSchema", "invariant", "isTypeLiteral", "updatedProperties", "propertySignatures", "propertiesToUpdate", "property", "index", "findIndex", "p", "name", "push", "make", "TypeLiteral", "indexSignatures", "removeFieldsFromSchema", "fieldNames", "omit", "updateFieldNameInSchema", "before", "after", "map", "PropertySignature", "type", "isOptional", "isReadonly", "setTypenameInSchema", "typename", "existingAnnotation", "TypeAnnotationId", "String", "kind", "version", "JSONSchemaAnnotationId", "$id", "TypeIdentifierAnnotationId", "DXN", "fromTypename", "toString", "Schema", "PersistentSchema", "Struct", "name", "optional", "String", "typename", "TypenameSchema", "version", "VersionSchema", "jsonSchema", "JsonSchemaType", "pipe", "EchoObjectSchema", "ImmutableSchema", "_objectAnnotation", "_schema", "getTypeAnnotation", "invariant", "TypeId", "schemaVariance", "Type", "Encoded", "Context", "ast", "annotations", "pipe", "kind", "typename", "version", "readonly", "snapshot", "jsonSchema", "toJsonSchema", "mutable", "Error", "EchoSchemaConstructor", "Union", "PersistentSchema", "instanceOf", "EchoSchema", "schema", "bind", "isMutable", "_A", "_", "_I", "_R", "_isDirty", "SchemaKindId", "EntityKind", "Object", "_persistentSchema", "_getSchema", "id", "name", "SchemaMetaSymbol", "persistentSchema", "getProperties", "isTypeLiteral", "propertySignatures", "filter", "p", "map", "unwrapOptionality", "updateTypename", "updated", "setTypenameInSchema", "_change", "addFields", "fields", "extended", "addFieldsToSchema", "updateFields", "updateFieldsInSchema", "updateFieldPropertyName", "before", "after", "renamed", "updateFieldNameInSchema", "removeFields", "fieldNames", "removed", "removeFieldsFromSchema", "callback", "changeFn", "ChangeId", "_invalidate", "_rebuild", "toEffectSchema", "getSnapshot", "property", "isUnion", "type", "types", "find", "isUndefinedKeyword"]
7
+ }