@dxos/echo 0.8.4-main.66e292d → 0.8.4-main.69d29f4

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 (459) 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-2RMVRVOB.mjs +250 -0
  37. package/dist/lib/browser/chunk-2RMVRVOB.mjs.map +7 -0
  38. package/dist/lib/browser/chunk-5RDNDPMX.mjs +74 -0
  39. package/dist/lib/browser/chunk-5RDNDPMX.mjs.map +7 -0
  40. package/dist/lib/browser/chunk-73M2G455.mjs +98 -0
  41. package/dist/lib/browser/chunk-73M2G455.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-AFGYYVVQ.mjs +57 -0
  45. package/dist/lib/browser/chunk-AFGYYVVQ.mjs.map +7 -0
  46. package/dist/lib/browser/chunk-BC6R4CAF.mjs +24 -0
  47. package/dist/lib/browser/chunk-BC6R4CAF.mjs.map +7 -0
  48. package/dist/lib/browser/chunk-BPYFLHWO.mjs +158 -0
  49. package/dist/lib/browser/chunk-BPYFLHWO.mjs.map +7 -0
  50. package/dist/lib/browser/chunk-CBPFF3ZO.mjs +204 -0
  51. package/dist/lib/browser/chunk-CBPFF3ZO.mjs.map +7 -0
  52. package/dist/lib/browser/chunk-CGS2ULMK.mjs +11 -0
  53. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +7 -0
  54. package/dist/lib/browser/chunk-CJ5YELTO.mjs +39 -0
  55. package/dist/lib/browser/chunk-CJ5YELTO.mjs.map +7 -0
  56. package/dist/lib/browser/chunk-FPOISFQK.mjs +40 -0
  57. package/dist/lib/browser/chunk-FPOISFQK.mjs.map +7 -0
  58. package/dist/lib/browser/chunk-INHXFXY5.mjs +22 -0
  59. package/dist/lib/browser/chunk-INHXFXY5.mjs.map +7 -0
  60. package/dist/lib/browser/chunk-IXVWLTG7.mjs +9 -0
  61. package/dist/lib/browser/chunk-IXVWLTG7.mjs.map +7 -0
  62. package/dist/lib/browser/chunk-JMKVF2YQ.mjs +43 -0
  63. package/dist/lib/browser/chunk-JMKVF2YQ.mjs.map +7 -0
  64. package/dist/lib/browser/chunk-L4RXUJHJ.mjs +143 -0
  65. package/dist/lib/browser/chunk-L4RXUJHJ.mjs.map +7 -0
  66. package/dist/lib/browser/chunk-MYCCGG2T.mjs +15 -0
  67. package/dist/lib/browser/chunk-MYCCGG2T.mjs.map +7 -0
  68. package/dist/lib/browser/{chunk-7GH6RXJ3.mjs → chunk-PAM4KEXE.mjs} +2005 -1841
  69. package/dist/lib/browser/chunk-PAM4KEXE.mjs.map +7 -0
  70. package/dist/lib/browser/chunk-QIWDIPLR.mjs +41 -0
  71. package/dist/lib/browser/chunk-QIWDIPLR.mjs.map +7 -0
  72. package/dist/lib/browser/chunk-R3S54KRI.mjs +403 -0
  73. package/dist/lib/browser/chunk-R3S54KRI.mjs.map +7 -0
  74. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs +283 -0
  75. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs.map +7 -0
  76. package/dist/lib/browser/chunk-TPIL3G6Y.mjs +288 -0
  77. package/dist/lib/browser/chunk-TPIL3G6Y.mjs.map +7 -0
  78. package/dist/lib/browser/chunk-YKTSSMDS.mjs +69 -0
  79. package/dist/lib/browser/chunk-YKTSSMDS.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-2RIFBW3A.mjs +250 -0
  122. package/dist/lib/node-esm/chunk-2RIFBW3A.mjs.map +7 -0
  123. package/dist/lib/node-esm/chunk-5CB2ZW74.mjs +57 -0
  124. package/dist/lib/node-esm/chunk-5CB2ZW74.mjs.map +7 -0
  125. package/dist/lib/node-esm/{chunk-M4B6BMD2.mjs → chunk-5U5F4AWK.mjs} +2005 -1841
  126. package/dist/lib/node-esm/chunk-5U5F4AWK.mjs.map +7 -0
  127. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs +22 -0
  128. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs.map +7 -0
  129. package/dist/lib/node-esm/chunk-BKYE5IW6.mjs +158 -0
  130. package/dist/lib/node-esm/chunk-BKYE5IW6.mjs.map +7 -0
  131. package/dist/lib/node-esm/chunk-BYOD7EVP.mjs +98 -0
  132. package/dist/lib/node-esm/chunk-BYOD7EVP.mjs.map +7 -0
  133. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs +133 -0
  134. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs.map +7 -0
  135. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  136. package/dist/lib/node-esm/chunk-HSLMI22Q.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-LIXUCQJM.mjs +41 -0
  140. package/dist/lib/node-esm/chunk-LIXUCQJM.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-OZEDKT4R.mjs +204 -0
  148. package/dist/lib/node-esm/chunk-OZEDKT4R.mjs.map +7 -0
  149. package/dist/lib/node-esm/chunk-PW3VCWL5.mjs +24 -0
  150. package/dist/lib/node-esm/chunk-PW3VCWL5.mjs.map +7 -0
  151. package/dist/lib/node-esm/chunk-TSTKBFST.mjs +403 -0
  152. package/dist/lib/node-esm/chunk-TSTKBFST.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-UV63HEHQ.mjs +143 -0
  156. package/dist/lib/node-esm/chunk-UV63HEHQ.mjs.map +7 -0
  157. package/dist/lib/node-esm/chunk-WXLVPCRJ.mjs +288 -0
  158. package/dist/lib/node-esm/chunk-WXLVPCRJ.mjs.map +7 -0
  159. package/dist/lib/node-esm/chunk-WZ6YBELW.mjs +74 -0
  160. package/dist/lib/node-esm/chunk-WZ6YBELW.mjs.map +7 -0
  161. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs +69 -0
  162. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs.map +7 -0
  163. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs +283 -0
  164. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs.map +7 -0
  165. package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs +39 -0
  166. package/dist/lib/node-esm/chunk-YQ2NWGL5.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 +6 -4
  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-normalize.d.ts.map +1 -1
  252. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +130 -29
  253. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
  254. package/dist/types/src/internal/json-schema/json-schema.d.ts +2 -1
  255. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -1
  256. package/dist/types/src/internal/object/clone.d.ts +8 -0
  257. package/dist/types/src/internal/object/clone.d.ts.map +1 -0
  258. package/dist/types/src/internal/object/create-object.d.ts +1 -1
  259. package/dist/types/src/internal/object/index.d.ts +3 -0
  260. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  261. package/dist/types/src/internal/object/json-serializer.d.ts +13 -7
  262. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  263. package/dist/types/src/internal/object/schema-validator.d.ts +1 -14
  264. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  265. package/dist/types/src/internal/object/set-value.d.ts +7 -0
  266. package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
  267. package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
  268. package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
  269. package/dist/types/src/internal/object/snapshot.d.ts +6 -0
  270. package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
  271. package/dist/types/src/internal/object/typed-object.d.ts +7 -13
  272. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  273. package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
  274. package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
  275. package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
  276. package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
  277. package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
  278. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
  279. package/dist/types/src/internal/proxy/errors.d.ts +19 -0
  280. package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
  281. package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
  282. package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
  283. package/dist/types/src/internal/proxy/index.d.ts +11 -0
  284. package/dist/types/src/internal/proxy/index.d.ts.map +1 -1
  285. package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
  286. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
  287. package/dist/types/src/internal/proxy/make-object.d.ts +2 -4
  288. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -1
  289. package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
  290. package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
  291. package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
  292. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
  293. package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
  294. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
  295. package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
  296. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
  297. package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
  298. package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
  299. package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
  300. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
  301. package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
  302. package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
  303. package/dist/types/src/internal/proxy/typed-handler.d.ts +14 -11
  304. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  305. package/dist/types/src/internal/ref/ref-array.d.ts +4 -4
  306. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -1
  307. package/dist/types/src/internal/ref/ref.d.ts +16 -7
  308. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  309. package/dist/types/src/internal/schema/compose.d.ts +2 -1
  310. package/dist/types/src/internal/schema/compose.d.ts.map +1 -1
  311. package/dist/types/src/internal/schema/echo-schema.d.ts +15 -3
  312. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  313. package/dist/types/src/internal/schema/index.d.ts +0 -2
  314. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  315. package/dist/types/src/internal/schema/persistent-schema.d.ts +9 -7
  316. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -1
  317. package/dist/types/src/internal/types/base.d.ts +5 -16
  318. package/dist/types/src/internal/types/base.d.ts.map +1 -1
  319. package/dist/types/src/internal/types/entity.d.ts +27 -2
  320. package/dist/types/src/internal/types/entity.d.ts.map +1 -1
  321. package/dist/types/src/internal/types/meta.d.ts +6 -14
  322. package/dist/types/src/internal/types/meta.d.ts.map +1 -1
  323. package/dist/types/src/testing/test-schema.d.ts +141 -175
  324. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  325. package/dist/types/src/testing/util.d.ts +6 -1
  326. package/dist/types/src/testing/util.d.ts.map +1 -1
  327. package/dist/types/tsconfig.tsbuildinfo +1 -1
  328. package/package.json +130 -23
  329. package/src/Annotation.ts +5 -4
  330. package/src/Database.ts +229 -82
  331. package/src/Entity.test.ts +22 -0
  332. package/src/Entity.ts +173 -7
  333. package/src/{errors.ts → Err.ts} +2 -2
  334. package/src/Filter.ts +376 -0
  335. package/src/Format.ts +0 -2
  336. package/src/Hypergraph.ts +74 -0
  337. package/src/Obj.test.ts +386 -0
  338. package/src/Obj.ts +338 -250
  339. package/src/{query/order.ts → Order.ts} +19 -9
  340. package/src/{query/query.test.ts → Query.test.ts} +180 -49
  341. package/src/{query/query.ts → Query.ts} +115 -122
  342. package/src/QueryResult.ts +106 -0
  343. package/src/Ref.ts +20 -3
  344. package/src/Relation.test.ts +82 -0
  345. package/src/Relation.ts +364 -27
  346. package/src/SchemaRegistry.ts +105 -0
  347. package/src/Tag.ts +1 -1
  348. package/src/Type.test.ts +52 -0
  349. package/src/Type.ts +322 -88
  350. package/src/index.ts +9 -5
  351. package/src/internal/README.md +36 -17
  352. package/src/internal/annotations/annotations.test.ts +6 -6
  353. package/src/internal/annotations/annotations.ts +73 -76
  354. package/src/internal/annotations/util.ts +2 -0
  355. package/src/internal/api/annotations.ts +60 -0
  356. package/src/internal/api/entity.ts +29 -0
  357. package/src/internal/api/index.ts +19 -0
  358. package/src/internal/api/meta.ts +88 -0
  359. package/src/internal/api/sorting.ts +53 -0
  360. package/src/internal/api/version.ts +96 -0
  361. package/src/internal/entities/entity.ts +36 -19
  362. package/src/internal/entities/index.ts +1 -1
  363. package/src/internal/entities/model.ts +17 -12
  364. package/src/internal/entities/object.ts +21 -8
  365. package/src/internal/entities/relation.ts +23 -7
  366. package/src/internal/formats/format.test.ts +1 -1
  367. package/src/internal/formats/format.ts +7 -8
  368. package/src/internal/formats/object.ts +2 -2
  369. package/src/internal/formats/select.ts +6 -4
  370. package/src/internal/formats/string.ts +5 -0
  371. package/src/internal/formats/types.ts +9 -3
  372. package/src/internal/index.ts +2 -1
  373. package/src/internal/json-schema/json-schema-normalize.ts +4 -2
  374. package/src/internal/json-schema/json-schema-type.ts +31 -32
  375. package/src/internal/json-schema/json-schema.test.ts +19 -17
  376. package/src/internal/json-schema/json-schema.ts +14 -10
  377. package/src/internal/object/clone.ts +48 -0
  378. package/src/internal/object/create-object.ts +2 -2
  379. package/src/internal/object/index.ts +3 -0
  380. package/src/internal/object/inspect.ts +3 -3
  381. package/src/internal/object/json-serializer.test.ts +6 -2
  382. package/src/internal/object/json-serializer.ts +28 -70
  383. package/src/internal/object/schema-validator.test.ts +3 -7
  384. package/src/internal/object/schema-validator.ts +2 -238
  385. package/src/internal/object/set-value.test.ts +281 -0
  386. package/src/internal/object/set-value.ts +165 -0
  387. package/src/internal/object/snapshot.ts +70 -0
  388. package/src/internal/object/typed-object.test.ts +11 -11
  389. package/src/internal/object/typed-object.ts +8 -72
  390. package/src/internal/proxy/change-context.ts +138 -0
  391. package/src/internal/proxy/change.test.ts +519 -0
  392. package/src/internal/proxy/define-hidden-property.ts +14 -0
  393. package/src/internal/proxy/errors.ts +42 -0
  394. package/src/internal/proxy/event-batch.ts +44 -0
  395. package/src/internal/proxy/handler.test.ts +30 -80
  396. package/src/internal/proxy/index.ts +11 -0
  397. package/src/internal/proxy/json-serializer.ts +87 -0
  398. package/src/internal/proxy/make-object.ts +33 -50
  399. package/src/internal/proxy/ownership.ts +253 -0
  400. package/src/internal/proxy/proxy-types.ts +23 -0
  401. package/src/internal/proxy/proxy-utils.ts +150 -0
  402. package/src/internal/proxy/reactive-array.ts +71 -0
  403. package/src/internal/proxy/reactive.ts +69 -0
  404. package/src/internal/proxy/schema-validator.ts +244 -0
  405. package/src/internal/proxy/schema.test.ts +23 -15
  406. package/src/internal/proxy/symbols.ts +7 -0
  407. package/src/internal/proxy/typed-handler.test.ts +247 -35
  408. package/src/internal/proxy/typed-handler.ts +265 -56
  409. package/src/internal/proxy/typed-object.test.ts +37 -26
  410. package/src/internal/ref/ref-array.ts +4 -4
  411. package/src/internal/ref/ref.test.ts +1 -1
  412. package/src/internal/ref/ref.ts +64 -40
  413. package/src/internal/schema/compose.test.ts +3 -3
  414. package/src/internal/schema/compose.ts +13 -9
  415. package/src/internal/schema/echo-schema.ts +49 -11
  416. package/src/internal/schema/index.ts +0 -2
  417. package/src/internal/schema/persistent-schema.ts +3 -4
  418. package/src/internal/types/base.ts +6 -21
  419. package/src/internal/types/entity.ts +35 -4
  420. package/src/internal/types/meta.ts +13 -24
  421. package/src/testing/api.test.ts +31 -5
  422. package/src/testing/test-schema.ts +55 -30
  423. package/src/testing/util.ts +22 -15
  424. package/dist/lib/browser/chunk-7GH6RXJ3.mjs.map +0 -7
  425. package/dist/lib/browser/chunk-E4UTVJNF.mjs +0 -1111
  426. package/dist/lib/browser/chunk-E4UTVJNF.mjs.map +0 -7
  427. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +0 -1111
  428. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +0 -7
  429. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +0 -7
  430. package/dist/types/src/errors.d.ts.map +0 -1
  431. package/dist/types/src/internal/entities/expando.d.ts +0 -16
  432. package/dist/types/src/internal/entities/expando.d.ts.map +0 -1
  433. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  434. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  435. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  436. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  437. package/dist/types/src/query/filter.d.ts +0 -167
  438. package/dist/types/src/query/filter.d.ts.map +0 -1
  439. package/dist/types/src/query/index.d.ts +0 -5
  440. package/dist/types/src/query/index.d.ts.map +0 -1
  441. package/dist/types/src/query/order.d.ts +0 -12
  442. package/dist/types/src/query/order.d.ts.map +0 -1
  443. package/dist/types/src/query/query.d.ts.map +0 -1
  444. package/dist/types/src/query/query.test.d.ts +0 -2
  445. package/dist/types/src/query/query.test.d.ts.map +0 -1
  446. package/dist/types/src/query/testing.d.ts +0 -51
  447. package/dist/types/src/query/testing.d.ts.map +0 -1
  448. package/dist/types/src/query/types.d.ts +0 -17
  449. package/dist/types/src/query/types.d.ts.map +0 -1
  450. package/dist/types/src/query/util.d.ts +0 -8
  451. package/dist/types/src/query/util.d.ts.map +0 -1
  452. package/src/internal/entities/expando.ts +0 -23
  453. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  454. package/src/internal/schema/snapshot.ts +0 -25
  455. package/src/query/filter.ts +0 -455
  456. package/src/query/index.ts +0 -9
  457. package/src/query/testing.ts +0 -64
  458. package/src/query/types.ts +0 -23
  459. package/src/query/util.ts +0 -25
@@ -35,7 +35,7 @@ const EXAMPLE_NAMESPACE = '@example';
35
35
  describe('effect-to-json', () => {
36
36
  test('type annotation', () => {
37
37
  const Test = Schema.Struct({ name: Schema.String }).pipe(
38
- Type.Obj({
38
+ Type.object({
39
39
  typename: 'example.com/type/Test',
40
40
  version: '0.1.0',
41
41
  }),
@@ -50,7 +50,7 @@ describe('effect-to-json', () => {
50
50
  const Test = Schema.Struct({
51
51
  name: Schema.String.pipe(PropertyMeta(EXAMPLE_NAMESPACE, meta)),
52
52
  }).pipe(
53
- Type.Obj({
53
+ Type.object({
54
54
  typename: 'example.com/type/Test',
55
55
  version: '0.1.0',
56
56
  }),
@@ -63,7 +63,7 @@ describe('effect-to-json', () => {
63
63
  const Nested = Schema.Struct({
64
64
  name: Schema.String,
65
65
  }).pipe(
66
- Type.Obj({
66
+ Type.object({
67
67
  typename: 'example.com/type/TestNested',
68
68
  version: '0.1.0',
69
69
  }),
@@ -71,7 +71,7 @@ describe('effect-to-json', () => {
71
71
  const Test = Schema.Struct({
72
72
  name: Ref(Nested),
73
73
  }).pipe(
74
- Type.Obj({
74
+ Type.object({
75
75
  typename: 'example.com/type/Test',
76
76
  version: '0.1.0',
77
77
  }),
@@ -88,7 +88,7 @@ describe('effect-to-json', () => {
88
88
  const Nested = Schema.Struct({
89
89
  name: Schema.String,
90
90
  }).pipe(
91
- Type.Obj({
91
+ Type.object({
92
92
  typename: 'example.com/type/TestNested',
93
93
  version: '0.1.0',
94
94
  }),
@@ -96,7 +96,7 @@ describe('effect-to-json', () => {
96
96
  const Test = Schema.Struct({
97
97
  name: Ref(Nested).annotations({ [FieldLookupAnnotationId]: 'name' }),
98
98
  }).pipe(
99
- Type.Obj({
99
+ Type.object({
100
100
  typename: 'example.com/type/Test',
101
101
  version: '0.1.0',
102
102
  }),
@@ -112,7 +112,7 @@ describe('effect-to-json', () => {
112
112
  const Nested = Schema.Struct({
113
113
  name: Schema.String,
114
114
  }).pipe(
115
- Type.Obj({
115
+ Type.object({
116
116
  typename: 'example.com/type/TestNested',
117
117
  version: '0.1.0',
118
118
  }),
@@ -120,7 +120,7 @@ describe('effect-to-json', () => {
120
120
  const Test = Schema.Struct({
121
121
  name: Schema.Array(Ref(Nested)),
122
122
  }).pipe(
123
- Type.Obj({
123
+ Type.object({
124
124
  typename: 'example.com/type/Test',
125
125
  version: '0.1.0',
126
126
  }),
@@ -134,7 +134,7 @@ describe('effect-to-json', () => {
134
134
  const Nested = Schema.Struct({
135
135
  name: Schema.String,
136
136
  }).pipe(
137
- Type.Obj({
137
+ Type.object({
138
138
  typename: 'example.com/type/TestNested',
139
139
  version: '0.1.0',
140
140
  }),
@@ -142,7 +142,7 @@ describe('effect-to-json', () => {
142
142
  const Test = Schema.Struct({
143
143
  name: Schema.optional(Ref(Nested)),
144
144
  }).pipe(
145
- Type.Obj({
145
+ Type.object({
146
146
  typename: 'example.com/type/Test',
147
147
  version: '0.1.0',
148
148
  }),
@@ -165,7 +165,7 @@ describe('effect-to-json', () => {
165
165
  description: 'Email address',
166
166
  }),
167
167
  }).pipe(
168
- Type.Obj({
168
+ Type.object({
169
169
  typename: 'example.com/type/Person',
170
170
  version: '0.1.0',
171
171
  }),
@@ -204,9 +204,11 @@ describe('effect-to-json', () => {
204
204
  'name',
205
205
  'username',
206
206
  'email',
207
+ 'age',
207
208
  'tasks',
208
209
  'employer',
209
210
  'address',
211
+ 'fields',
210
212
  ]);
211
213
  });
212
214
 
@@ -214,7 +216,7 @@ describe('effect-to-json', () => {
214
216
  const Organization = Schema.Struct({
215
217
  field: Schema.String,
216
218
  }).pipe(
217
- Type.Obj({
219
+ Type.object({
218
220
  typename: 'example.com/type/Organization',
219
221
  version: '0.1.0',
220
222
  }),
@@ -224,7 +226,7 @@ describe('effect-to-json', () => {
224
226
  name: Schema.String,
225
227
  organization: Ref(Organization).annotations({ description: 'Contact organization' }),
226
228
  }).pipe(
227
- Type.Obj({
229
+ Type.object({
228
230
  typename: 'example.com/type/Person',
229
231
  version: '0.1.0',
230
232
  }),
@@ -276,7 +278,7 @@ describe('effect-to-json', () => {
276
278
  const Organization = Schema.Struct({
277
279
  field: Schema.String,
278
280
  }).pipe(
279
- Type.Obj({
281
+ Type.object({
280
282
  typename: 'example.com/type/Organization',
281
283
  version: '0.1.0',
282
284
  }),
@@ -286,7 +288,7 @@ describe('effect-to-json', () => {
286
288
  name: Schema.String,
287
289
  organization: Ref(Organization).annotations({ description: 'Contact organization' }),
288
290
  }).pipe(
289
- Type.Obj({
291
+ Type.object({
290
292
  typename: 'example.com/type/Person',
291
293
  version: '0.1.0',
292
294
  }),
@@ -494,7 +496,7 @@ describe('json-to-effect', () => {
494
496
  const Organization = Schema.Struct({
495
497
  field: Schema.String,
496
498
  }).pipe(
497
- Type.Obj({
499
+ Type.object({
498
500
  typename: 'example.com/type/Organization',
499
501
  version: '0.1.0',
500
502
  }),
@@ -515,7 +517,7 @@ describe('json-to-effect', () => {
515
517
  } as const;
516
518
 
517
519
  const Test = (partial ? Schema.partial(Schema.Struct(fields)) : Schema.Struct(fields)).pipe(
518
- Type.Obj({
520
+ Type.object({
519
521
  typename: 'example.com/type/Test',
520
522
  version: '0.1.0',
521
523
  }),
@@ -23,9 +23,8 @@ import {
23
23
  TypeIdentifierAnnotationId,
24
24
  makeTypeJsonSchemaAnnotation,
25
25
  } from '../annotations';
26
- import { Expando } from '../entities';
27
- import { type JsonSchemaReferenceInfo, Ref, createEchoReferenceSchema } from '../ref';
28
- import { EntityKind, EntityKindSchema } from '../types';
26
+ import { type JsonSchemaReferenceInfo, createEchoReferenceSchema } from '../ref';
27
+ import { ANY_OBJECT_TYPENAME, ANY_OBJECT_VERSION, EntityKind, EntityKindSchema } from '../types';
29
28
 
30
29
  import { CustomAnnotations, DecodedAnnotations, EchoAnnotations } from './annotations';
31
30
  import {
@@ -81,7 +80,11 @@ export type JsonSchemaOptions = {
81
80
  */
82
81
  // TODO(burdon): Reconcile with possibly extending @effect/Schema/JSONSchema
83
82
  // We add additional propertyOrder (but the object properties ARE ordered); and type "string" for literals.
84
- export const toJsonSchema = (schema: Schema.Schema.All, options: JsonSchemaOptions = {}): JsonSchemaType => {
83
+ // TODO(wittjosiah): This is mutable because its a pojo, perhaps should be left as readonly at type level though?
84
+ export const toJsonSchema = (
85
+ schema: Schema.Schema.All,
86
+ options: JsonSchemaOptions = {},
87
+ ): Types.DeepMutable<JsonSchemaType> => {
85
88
  assertArgument(Schema.isSchema(schema), 'schema');
86
89
  let jsonSchema = _toJsonSchemaAST(schema.ast);
87
90
  if (options.strict) {
@@ -104,11 +107,11 @@ export const toJsonSchema = (schema: Schema.Schema.All, options: JsonSchemaOptio
104
107
  return jsonSchema;
105
108
  };
106
109
 
107
- const _toJsonSchemaAST = (ast: SchemaAST.AST): JsonSchemaType => {
110
+ const _toJsonSchemaAST = (ast: SchemaAST.AST): Types.DeepMutable<JsonSchemaType> => {
108
111
  const withRefinements = withEchoRefinements(ast, '#');
109
112
  const jsonSchema = JSONSchema.fromAST(withRefinements, {
110
113
  definitions: {},
111
- }) as JsonSchemaType;
114
+ }) as Types.DeepMutable<JsonSchemaType>;
112
115
 
113
116
  return normalizeJsonSchema(jsonSchema);
114
117
  };
@@ -327,7 +330,7 @@ const objectToEffectSchema = (root: JsonSchemaType, defs: JsonSchemaType['$defs'
327
330
  }
328
331
 
329
332
  if (immutableIdField) {
330
- schema = Schema.extend(Schema.mutable(schema), Schema.Struct({ id: immutableIdField }));
333
+ schema = Schema.extend(schema, Schema.Struct({ id: immutableIdField }));
331
334
  }
332
335
 
333
336
  const annotations = jsonSchemaFieldsToAnnotations(root);
@@ -352,7 +355,8 @@ const anyToEffectSchema = (root: JSONSchema.JsonSchema7Any): Schema.Schema.AnyNo
352
355
  // TODO(dmaretskyi): Types.
353
356
  const refToEffectSchema = (root: any): Schema.Schema.AnyNoContext => {
354
357
  if (!('reference' in root)) {
355
- return Ref(Expando);
358
+ // Fallback to generic object ref when no reference info is provided.
359
+ return createEchoReferenceSchema(undefined, ANY_OBJECT_TYPENAME, ANY_OBJECT_VERSION);
356
360
  }
357
361
 
358
362
  const reference: JsonSchemaReferenceInfo = root.reference;
@@ -377,7 +381,7 @@ const refToEffectSchema = (root: any): Schema.Schema.AnyNoContext => {
377
381
  const annotations_toJsonSchemaFields = (annotations: SchemaAST.Annotations): Record<symbol, any> => {
378
382
  const schemaFields: Record<string, any> = {};
379
383
 
380
- const echoAnnotations: JsonSchemaEchoAnnotations = {};
384
+ const echoAnnotations: Types.Mutable<JsonSchemaEchoAnnotations> = {};
381
385
  for (const [key, annotationId] of Object.entries(EchoAnnotations)) {
382
386
  if (annotations[annotationId] != null) {
383
387
  echoAnnotations[key as keyof JsonSchemaEchoAnnotations] = annotations[annotationId] as any;
@@ -495,7 +499,7 @@ const addJsonSchemaFields = (ast: SchemaAST.AST, schema: JsonSchemaType): Schema
495
499
  * Fixes field order.
496
500
  * Sets `$schema` prop.
497
501
  */
498
- const normalizeJsonSchema = (jsonSchema: JsonSchemaType): JsonSchemaType => {
502
+ const normalizeJsonSchema = (jsonSchema: Types.DeepMutable<JsonSchemaType>): Types.DeepMutable<JsonSchemaType> => {
499
503
  if (jsonSchema.properties && 'id' in jsonSchema.properties) {
500
504
  jsonSchema.properties = orderKeys(jsonSchema.properties, ['id']); // Put id first.
501
505
  }
@@ -0,0 +1,48 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { invariant } from '@dxos/invariant';
6
+ import { deepMapValues } from '@dxos/util';
7
+
8
+ import type * as Obj from '../../Obj';
9
+ import { makeObject } from '../proxy';
10
+ import { Ref } from '../ref';
11
+ import { getMeta, getSchema } from '../types';
12
+
13
+ /**
14
+ * Clones an object or relation.
15
+ * This does not clone referenced objects, only the properties in the object.
16
+ * @returns A new object with the same schema and properties.
17
+ */
18
+ export const clone = <T extends Obj.Any>(obj: T, opts?: Obj.CloneOptions): T => {
19
+ const { id, ...data } = obj;
20
+ const schema = getSchema(obj);
21
+ invariant(schema != null, 'Object should have a schema');
22
+ const props: any = deepMapValues(data, (value, recurse) => {
23
+ if (Ref.isRef(value)) {
24
+ if (opts?.deep) {
25
+ // TODO(dmaretskyi): Will break on circular references.
26
+ return Ref.make(clone(value.target!, opts));
27
+ }
28
+ return value;
29
+ }
30
+ return recurse(value);
31
+ });
32
+
33
+ if (opts?.retainId) {
34
+ props.id = id;
35
+ }
36
+ const meta = deepMapValues(getMeta(obj), (value, recurse) => {
37
+ if (Ref.isRef(value)) {
38
+ if (opts?.deep) {
39
+ // TODO(dmaretskyi): Will break on circular references.
40
+ return Ref.make(clone(value.target!, opts));
41
+ }
42
+ return value;
43
+ }
44
+ return recurse(value);
45
+ });
46
+
47
+ return makeObject(schema, props, meta);
48
+ };
@@ -7,7 +7,6 @@ import type * as Schema from 'effect/Schema';
7
7
  import { raise } from '@dxos/debug';
8
8
  import { assertArgument, failedInvariant } from '@dxos/invariant';
9
9
  import { ObjectId } from '@dxos/keys';
10
- import { defineHiddenProperty } from '@dxos/live-object';
11
10
 
12
11
  import { getSchemaDXN, getTypeAnnotation, setTypename } from '../annotations';
13
12
  import {
@@ -18,6 +17,7 @@ import {
18
17
  assertObjectModel,
19
18
  getObjectDXN,
20
19
  } from '../entities';
20
+ import { defineHiddenProperty } from '../proxy';
21
21
  import { EntityKind, KindId, MetaId, setSchema } from '../types';
22
22
 
23
23
  import { attachedTypedObjectInspector } from './inspect';
@@ -41,7 +41,7 @@ export type CreateObjectProps<T> = T extends { id: string } ? Omit<T, 'id' | Kin
41
41
  * const Contact = Schema.Struct({
42
42
  * name: Schema.String,
43
43
  * email: Schema.String,
44
- * }).pipe(Type.Obj({
44
+ * }).pipe(Type.object({
45
45
  * typename: 'example.com/type/Person',
46
46
  * version: '0.1.0',
47
47
  * }))
@@ -8,4 +8,7 @@ export * from './deleted';
8
8
  export * from './ids';
9
9
  export * from './json-serializer';
10
10
  export * from './schema-validator';
11
+ export * from './set-value';
12
+ export * from './snapshot';
11
13
  export * from './typed-object';
14
+ export * from './clone';
@@ -7,7 +7,7 @@ import type { InspectOptionsStylized, inspect as inspectFn } from 'node:util';
7
7
  import { type CustomInspectFunction, inspectCustom } from '@dxos/debug';
8
8
 
9
9
  import { getTypeDXN } from '../annotations';
10
- import { ATTR_META, ATTR_TYPE, type AnyEchoObject, MetaId } from '../types';
10
+ import { ATTR_META, ATTR_TYPE, type AnyEntity, MetaId } from '../types';
11
11
 
12
12
  /*
13
13
  * @internal
@@ -27,8 +27,8 @@ export const attachedTypedObjectInspector = (obj: any) => {
27
27
  };
28
28
 
29
29
  // NOTE: KEEP as function.
30
- const typedObjectInspectFunction: CustomInspectFunction<AnyEchoObject> = function (
31
- this: AnyEchoObject,
30
+ const typedObjectInspectFunction: CustomInspectFunction<AnyEntity> = function (
31
+ this: AnyEntity,
32
32
  depth: number,
33
33
  options: InspectOptionsStylized,
34
34
  inspect: typeof inspectFn,
@@ -6,12 +6,14 @@ import { describe, expect, test } from 'vitest';
6
6
 
7
7
  import { DXN } from '@dxos/keys';
8
8
 
9
+ import * as Obj from '../../Obj';
9
10
  import { TestSchema } from '../../testing';
10
11
  import { getSchemaDXN, getSchemaTypename, getTypeDXN, getTypename } from '../annotations';
12
+ import { getMetaChecked } from '../api';
11
13
  import { RelationSourceId, RelationTargetId, getObjectDXN } from '../entities';
12
14
  import { makeObject } from '../proxy';
13
15
  import { Ref, StaticRefResolver } from '../ref';
14
- import { ATTR_TYPE, EntityKind, KindId, MetaId, TypeId, getMeta, getSchema } from '../types';
16
+ import { ATTR_TYPE, EntityKind, KindId, MetaId, TypeId, getSchema } from '../types';
15
17
 
16
18
  import { createObject } from './create-object';
17
19
  import { objectFromJSON, objectToJSON } from './json-serializer';
@@ -19,7 +21,9 @@ import { objectFromJSON, objectToJSON } from './json-serializer';
19
21
  describe('Object JSON serializer', () => {
20
22
  test('should serialize and deserialize object', async () => {
21
23
  const contact = makeObject(TestSchema.Person, { name: 'Alice' });
22
- getMeta(contact).keys.push({ id: '12345', source: 'example.com' });
24
+ Obj.change(contact, (c) => {
25
+ getMetaChecked(c).keys.push({ id: '12345', source: 'example.com' });
26
+ });
23
27
 
24
28
  const task = createObject(TestSchema.Task, {
25
29
  title: 'Fix the tests',
@@ -5,12 +5,12 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { raise } from '@dxos/debug';
8
- import { type EncodedReference, type ObjectMeta, isEncodedReference } from '@dxos/echo-protocol';
8
+ import { type EncodedReference, ObjectStructure, isEncodedReference } from '@dxos/echo-protocol';
9
9
  import { assertArgument, invariant } from '@dxos/invariant';
10
10
  import { DXN, ObjectId } from '@dxos/keys';
11
- import { defineHiddenProperty } from '@dxos/live-object';
12
11
  import { assumeType, deepMapValues, visitValues } from '@dxos/util';
13
12
 
13
+ import type * as Obj from '../../Obj';
14
14
  import { getTypeDXN, setTypename } from '../annotations';
15
15
  import {
16
16
  ATTR_DELETED,
@@ -25,19 +25,22 @@ import {
25
25
  SelfDXNId,
26
26
  assertObjectModel,
27
27
  } from '../entities';
28
+ import { attachTypedJsonSerializer, defineHiddenProperty, typedJsonSerializer } from '../proxy';
28
29
  import { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../ref';
29
30
  import {
30
31
  ATTR_META,
31
32
  ATTR_TYPE,
32
- type AnyEchoObject,
33
+ type AnyEntity,
33
34
  EntityKind,
34
35
  KindId,
35
36
  MetaId,
36
37
  ObjectMetaSchema,
37
- TypeId,
38
38
  setSchema,
39
39
  } from '../types';
40
40
 
41
+ // Re-export for backward compatibility.
42
+ export { attachTypedJsonSerializer };
43
+
41
44
  type DeepReplaceRef<T> =
42
45
  T extends Ref<any>
43
46
  ? EncodedReference
@@ -54,7 +57,7 @@ type SerializedObject<T extends { id: string }> = {
54
57
  /**
55
58
  * Converts object to it's JSON representation.
56
59
  */
57
- export const objectToJSON = <T extends AnyEchoObject>(obj: T): SerializedObject<T> => {
60
+ export const objectToJSON = <T extends AnyEntity>(obj: T): SerializedObject<T> => {
58
61
  const typename = getTypeDXN(obj)?.toString();
59
62
  invariant(typename && typeof typename === 'string');
60
63
  return typedJsonSerializer.call(obj);
@@ -69,7 +72,7 @@ export const objectToJSON = <T extends AnyEchoObject>(obj: T): SerializedObject<
69
72
  export const objectFromJSON = async (
70
73
  jsonData: unknown,
71
74
  { refResolver, dxn }: { refResolver?: RefResolver; dxn?: DXN } = {},
72
- ): Promise<AnyEchoObject> => {
75
+ ): Promise<AnyEntity> => {
73
76
  assumeType<ObjectJSON>(jsonData);
74
77
  assertArgument(typeof jsonData === 'object' && jsonData !== null, 'jsonData', 'expect object');
75
78
  assertArgument(typeof jsonData[ATTR_TYPE] === 'string', 'jsonData[ATTR_TYPE]', 'expected object to have a type');
@@ -101,8 +104,8 @@ export const objectFromJSON = async (
101
104
  const sourceDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source')));
102
105
  const targetDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target')));
103
106
 
104
- const source = (await refResolver?.resolve(sourceDxn)) as AnyEchoObject | undefined;
105
- const target = (await refResolver?.resolve(targetDxn)) as AnyEchoObject | undefined;
107
+ const source = (await refResolver?.resolve(sourceDxn)) as AnyEntity | undefined;
108
+ const target = (await refResolver?.resolve(targetDxn)) as AnyEntity | undefined;
106
109
 
107
110
  defineHiddenProperty(obj, KindId, EntityKind.Relation);
108
111
  defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);
@@ -117,6 +120,10 @@ export const objectFromJSON = async (
117
120
  const meta = await ObjectMetaSchema.pipe(Schema.decodeUnknownPromise)(jsonData[ATTR_META]);
118
121
  invariant(Array.isArray(meta.keys));
119
122
  defineHiddenProperty(obj, MetaId, meta);
123
+ } else {
124
+ defineHiddenProperty(obj, MetaId, {
125
+ keys: [],
126
+ });
120
127
  }
121
128
 
122
129
  if (dxn) {
@@ -153,7 +160,7 @@ const decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }
153
160
  });
154
161
  };
155
162
 
156
- export const setRefResolverOnData = (obj: AnyEchoObject, refResolver: RefResolver) => {
163
+ export const setRefResolverOnData = (obj: AnyEntity, refResolver: RefResolver) => {
157
164
  const visitor = (value: unknown) => {
158
165
  if (Ref.isRef(value)) {
159
166
  setRefResolver(value, refResolver);
@@ -165,66 +172,17 @@ export const setRefResolverOnData = (obj: AnyEchoObject, refResolver: RefResolve
165
172
  visitor(obj);
166
173
  };
167
174
 
168
- export const attachTypedJsonSerializer = (obj: any) => {
169
- const descriptor = Object.getOwnPropertyDescriptor(obj, 'toJSON');
170
- if (descriptor) {
171
- return;
172
- }
173
-
174
- Object.defineProperty(obj, 'toJSON', {
175
- value: typedJsonSerializer,
176
- writable: false,
177
- enumerable: false,
178
- // Setting `configurable` to false breaks proxy invariants, should be fixable.
179
- configurable: true,
180
- });
181
- };
182
-
183
- // NOTE: KEEP as function.
184
- const typedJsonSerializer = function (this: any) {
185
- const { id, ...rest } = this;
186
- const result: any = {
187
- id,
175
+ /**
176
+ * Convert ObjectStructure to JSON data for indexing.
177
+ * Different from {@link objectToJSON} as it takes the internal {@link ObjectStructure} representation directly
178
+ */
179
+ export const objectStructureToJson = (objectId: string, structure: ObjectStructure): Obj.JSON => {
180
+ return {
181
+ ...structure.data,
182
+ id: objectId,
183
+ [ATTR_TYPE]: (ObjectStructure.getTypeReference(structure)?.['/'] ?? '') as DXN.String,
184
+ [ATTR_DELETED]: ObjectStructure.isDeleted(structure),
185
+ [ATTR_RELATION_SOURCE]: ObjectStructure.getRelationSource(structure)?.['/'] as DXN.String | undefined,
186
+ [ATTR_RELATION_TARGET]: ObjectStructure.getRelationTarget(structure)?.['/'] as DXN.String | undefined,
188
187
  };
189
-
190
- if (this[TypeId]) {
191
- result[ATTR_TYPE] = this[TypeId].toString();
192
- }
193
-
194
- if (this[MetaId]) {
195
- result[ATTR_META] = serializeMeta(this[MetaId]);
196
- }
197
-
198
- if (this[SelfDXNId]) {
199
- result[ATTR_SELF_DXN] = this[SelfDXNId].toString();
200
- }
201
-
202
- if (this[RelationSourceDXNId]) {
203
- const sourceDXN = this[RelationSourceDXNId];
204
- invariant(sourceDXN instanceof DXN);
205
- result[ATTR_RELATION_SOURCE] = sourceDXN.toString();
206
- }
207
- if (this[RelationTargetDXNId]) {
208
- const targetDXN = this[RelationTargetDXNId];
209
- invariant(targetDXN instanceof DXN);
210
- result[ATTR_RELATION_TARGET] = targetDXN.toString();
211
- }
212
-
213
- Object.assign(result, serializeData(rest));
214
- return result;
215
- };
216
-
217
- const serializeData = (data: unknown) => {
218
- return deepMapValues(data, (value, recurse) => {
219
- if (Ref.isRef(value)) {
220
- // TODO(dmaretskyi): Should this be configurable?
221
- return value.noInline().encode();
222
- }
223
-
224
- return recurse(value);
225
- });
226
- };
227
-
228
- const serializeMeta = (meta: ObjectMeta) => {
229
- return deepMapValues(meta, (value, recurse) => recurse(value));
230
188
  };
@@ -27,9 +27,7 @@ describe('schema-validator', () => {
27
27
  const TestSchema: Schema.Schema.AnyNoContext = Schema.Struct({
28
28
  name: Schema.String.annotations({ [annotationId]: annotationValue }),
29
29
  parent: Schema.optional(Schema.suspend(() => TestSchema.annotations({ [annotationId]: annotationValue }))),
30
- friends: Schema.suspend(() =>
31
- Schema.mutable(Schema.Array(TestSchema.annotations({ [annotationId]: annotationValue }))),
32
- ),
30
+ friends: Schema.suspend(() => Schema.Array(TestSchema.annotations({ [annotationId]: annotationValue }))),
33
31
  });
34
32
  expect(SchemaValidator.hasTypeAnnotation(TestSchema, 'name', annotationId)).to.be.true;
35
33
  expect(SchemaValidator.hasTypeAnnotation(TestSchema, 'parent', annotationId)).to.be.true;
@@ -41,7 +39,7 @@ describe('schema-validator', () => {
41
39
  const Person: Schema.Schema.AnyNoContext = Schema.Struct({
42
40
  name: Schema.String,
43
41
  parent: Schema.optional(Schema.suspend(() => Person)),
44
- friends: Schema.suspend(() => Schema.mutable(Schema.Array(Person))),
42
+ friends: Schema.suspend(() => Schema.Array(Person)),
45
43
  });
46
44
  expect(SchemaValidator.hasTypeAnnotation(Person, 'name', annotationId)).to.be.false;
47
45
  expect(SchemaValidator.hasTypeAnnotation(Person, 'parent', annotationId)).to.be.false;
@@ -87,9 +85,7 @@ describe('schema-validator', () => {
87
85
  const annotationValue = 'bar';
88
86
  const Person: Schema.Schema.AnyNoContext = Schema.Struct({
89
87
  parent: Schema.optional(Schema.suspend(() => Person.annotations({ [annotationId]: annotationValue }))),
90
- friends: Schema.suspend(() =>
91
- Schema.mutable(Schema.Array(Person.annotations({ [annotationId]: annotationValue }))),
92
- ),
88
+ friends: Schema.suspend(() => Schema.Array(Person.annotations({ [annotationId]: annotationValue }))),
93
89
  });
94
90
  expect(SchemaValidator.getPropertySchema(Person, ['parent']).ast.annotations[annotationId]).to.eq(
95
91
  annotationValue,