@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,42 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * Error thrown when attempting to mutate an object outside of an Obj.change() context.
7
+ */
8
+ export class MutationOutsideChangeContextError extends Error {
9
+ constructor(operation: string, suggestion: string) {
10
+ super(
11
+ `Cannot ${operation} outside of Obj.change(). Use Obj.change(obj, (mutableObj) => { ${suggestion} }) instead.`,
12
+ );
13
+ this.name = 'MutationOutsideChangeContextError';
14
+ }
15
+ }
16
+
17
+ /**
18
+ * Create an error for attempting to set a property outside of a change context.
19
+ */
20
+ export const createPropertySetError = (prop: string | symbol): MutationOutsideChangeContextError => {
21
+ return new MutationOutsideChangeContextError(
22
+ `modify object property "${String(prop)}"`,
23
+ `mutableObj.${String(prop)} = value;`,
24
+ );
25
+ };
26
+
27
+ /**
28
+ * Create an error for attempting to delete a property outside of a change context.
29
+ */
30
+ export const createPropertyDeleteError = (prop: string | symbol): MutationOutsideChangeContextError => {
31
+ return new MutationOutsideChangeContextError(
32
+ `delete object property "${String(prop)}"`,
33
+ `delete mutableObj.${String(prop)};`,
34
+ );
35
+ };
36
+
37
+ /**
38
+ * Create an error for attempting to call an array method outside of a change context.
39
+ */
40
+ export const createArrayMethodError = (method: string): MutationOutsideChangeContextError => {
41
+ return new MutationOutsideChangeContextError(`call array.${method}()`, `mutableObj.array.${method}(...);`);
42
+ };
@@ -0,0 +1,44 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { EventId } from './symbols';
6
+
7
+ /**
8
+ * Simple batching mechanism for EventId emissions.
9
+ * When batch depth > 0, events are collected instead of emitted immediately.
10
+ * When batch depth returns to 0, pending events are emitted.
11
+ */
12
+ let eventBatchDepth = 0;
13
+ const pendingEventTargets = new Set<object>();
14
+
15
+ /**
16
+ * Run a callback in a batched context for EventId emissions.
17
+ * Multiple mutations within the batch will only emit one event per target.
18
+ */
19
+ export const batchEvents = (callback: () => void): void => {
20
+ eventBatchDepth++;
21
+ try {
22
+ callback();
23
+ } finally {
24
+ eventBatchDepth--;
25
+ if (eventBatchDepth === 0) {
26
+ // Emit pending events.
27
+ for (const target of pendingEventTargets) {
28
+ (target as any)[EventId]?.emit();
29
+ }
30
+ pendingEventTargets.clear();
31
+ }
32
+ }
33
+ };
34
+
35
+ /**
36
+ * Emit an event on a target, respecting batching.
37
+ */
38
+ export const emitEvent = (target: object): void => {
39
+ if (eventBatchDepth > 0) {
40
+ pendingEventTargets.add(target);
41
+ } else {
42
+ (target as any)[EventId]?.emit();
43
+ }
44
+ };
@@ -6,8 +6,6 @@ import { inspect } from 'node:util';
6
6
 
7
7
  import { describe, expect, test } from 'vitest';
8
8
 
9
- import { registerSignalsRuntime } from '@dxos/echo-signals';
10
- import { type Live, objectData } from '@dxos/live-object';
11
9
  import { isNode } from '@dxos/util';
12
10
 
13
11
  import { TestSchema, updateCounter } from '../../testing';
@@ -15,8 +13,8 @@ import { createObject } from '../object';
15
13
  import { ATTR_META } from '../types';
16
14
 
17
15
  import { makeObject } from './make-object';
18
-
19
- registerSignalsRuntime();
16
+ import { objectData } from './proxy-types';
17
+ import { change } from './reactive';
20
18
 
21
19
  describe('proxy', () => {
22
20
  test.skipIf(!isNode())('inspect', ({ expect }) => {
@@ -37,36 +35,41 @@ const TEST_OBJECT: TestSchema.ExampleSchema = {
37
35
  },
38
36
  };
39
37
 
40
- for (const schema of [undefined, TestSchema.ExampleSchema]) {
41
- const createObject = (props: Partial<TestSchema.ExampleSchema> = {}): Live<TestSchema.ExampleSchema> => {
42
- return schema == null ? (makeObject(props) as TestSchema.ExampleSchema) : makeObject(schema, props);
38
+ // Schema is now required for reactive objects.
39
+ {
40
+ const createObject = (props: Partial<TestSchema.ExampleSchema> = {}): TestSchema.ExampleSchema => {
41
+ return makeObject(TestSchema.ExampleSchema, props);
43
42
  };
44
43
 
45
- describe(`Non-echo specific proxy properties${schema == null ? '' : ' with schema'}`, () => {
44
+ describe('Non-echo specific proxy properties with schema', () => {
46
45
  test.skipIf(!isNode())('inspect', () => {
47
46
  const obj = createObject({ string: 'bar' });
48
47
  const str = inspect(obj, { colors: false });
49
- expect(str).to.eq(`${schema == null ? '' : 'Typed '}{ string: 'bar' }`);
48
+ expect(str).to.eq("Typed { string: 'bar' }");
50
49
  });
51
50
 
52
51
  test('data symbol', async () => {
53
52
  const obj = createObject({ ...TEST_OBJECT });
54
53
  const objData: any = (obj as any)[objectData];
55
54
  expect(objData).to.deep.contain({
56
- '@type': `${schema ? 'Typed' : ''}ReactiveObject`,
55
+ '@type': 'TypedReactiveObject',
57
56
  ...TEST_OBJECT,
58
57
  });
59
58
  });
60
59
 
60
+ // TODO(wittjosiah): Should we prevent this?
61
61
  test('can assign class instances', () => {
62
62
  const obj = createObject();
63
63
 
64
64
  const classInstance = new TestSchema.TestClass();
65
- obj.classInstance = classInstance;
65
+ change(obj, (o) => {
66
+ o.classInstance = classInstance;
67
+ });
66
68
  expect(obj.classInstance!.field).to.eq('value');
67
69
  expect(obj.classInstance instanceof TestSchema.TestClass).to.eq(true);
68
70
  expect(obj.classInstance === classInstance).to.be.true;
69
71
 
72
+ // Class instances are not wrapped in proxies, so direct mutation works.
70
73
  obj.classInstance!.field = 'baz';
71
74
  expect(obj.classInstance!.field).to.eq('baz');
72
75
  });
@@ -75,18 +78,14 @@ for (const schema of [undefined, TestSchema.ExampleSchema]) {
75
78
  test('toJSON', () => {
76
79
  const original = { classInstance: new TestSchema.TestClass() };
77
80
  const reactive = createObject(original);
78
- if (!schema) {
79
- expect(JSON.stringify(reactive)).to.eq(JSON.stringify(original));
80
- } else {
81
- expect(JSON.stringify(reactive)).to.eq(
82
- JSON.stringify({
83
- [ATTR_META]: {
84
- keys: [],
85
- },
86
- ...original,
87
- }),
88
- );
89
- }
81
+ expect(JSON.stringify(reactive)).to.eq(
82
+ JSON.stringify({
83
+ [ATTR_META]: {
84
+ keys: [],
85
+ },
86
+ ...original,
87
+ }),
88
+ );
90
89
  });
91
90
 
92
91
  test('chai deep equal works', () => {
@@ -104,14 +103,14 @@ for (const schema of [undefined, TestSchema.ExampleSchema]) {
104
103
  });
105
104
  });
106
105
 
107
- describe('signal updates', () => {
108
- test('not in nested class instances', () => {
106
+ describe('subscription updates', () => {
107
+ test('not triggered by nested class instance changes', () => {
109
108
  const obj = createObject({ classInstance: new TestSchema.TestClass() });
110
- using updates = updateCounter(() => {
111
- obj.classInstance!.field;
112
- });
109
+ using updates = updateCounter(obj);
113
110
  expect(updates.count, 'update count').to.eq(0);
114
111
 
112
+ // Changes to class instance fields don't trigger subscription updates
113
+ // because class instances aren't wrapped in live proxies.
115
114
  obj.classInstance!.field = 'baz';
116
115
  expect(updates.count, 'update count').to.eq(0);
117
116
  });
@@ -119,55 +118,6 @@ for (const schema of [undefined, TestSchema.ExampleSchema]) {
119
118
  });
120
119
  }
121
120
 
122
- describe('getters', () => {
123
- test('add getter to object', () => {
124
- let value = 'foo';
125
- const obj = makeObject({
126
- get getter() {
127
- return value;
128
- },
129
- });
130
- expect(obj.getter).to.eq('foo');
131
-
132
- value = 'bar';
133
- expect(obj.getter).to.eq('bar');
134
- });
135
-
136
- test('signal updates', () => {
137
- const innerObj = makeObject({
138
- string: 'bar',
139
- });
140
-
141
- const obj = makeObject({
142
- field: 1,
143
- get getter() {
144
- return innerObj.string;
145
- },
146
- });
147
-
148
- using updates = updateCounter(() => {
149
- const value = obj.getter;
150
- expect(value).to.exist;
151
- });
152
-
153
- innerObj.string = 'baz';
154
- expect(obj.getter).to.eq('baz');
155
- expect(updates.count, 'update count').to.eq(1);
156
-
157
- obj.field = 2;
158
- expect(updates.count, 'update count').to.eq(1);
159
- });
160
-
161
- test('getter for array', () => {
162
- const value = [1];
163
- const obj = makeObject({
164
- get getter() {
165
- return value;
166
- },
167
- });
168
- expect(obj.getter).to.have.length(1);
169
-
170
- value.push(2);
171
- expect(obj.getter).to.have.length(2);
172
- });
173
- });
121
+ // NOTE: Getter tests with external variable references were removed.
122
+ // These patterns only worked with untyped reactive objects, which are no longer supported.
123
+ // For typed schemas, getters should be defined in the schema itself.
@@ -2,5 +2,16 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ export * from './change-context';
6
+ export * from './define-hidden-property';
7
+ export * from './errors';
8
+ export * from './event-batch';
9
+ export * from './json-serializer';
5
10
  export * from './make-object';
11
+ export * from './proxy-types';
12
+ export * from './proxy-utils';
13
+ export * from './reactive';
14
+ export * from './reactive-array';
15
+ export * from './schema-validator';
16
+ export * from './symbols';
6
17
  export * from './typed-handler';
@@ -0,0 +1,87 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type ObjectMeta } from '@dxos/echo-protocol';
6
+ import { invariant } from '@dxos/invariant';
7
+ import { DXN } from '@dxos/keys';
8
+ import { deepMapValues } from '@dxos/util';
9
+
10
+ import {
11
+ ATTR_RELATION_SOURCE,
12
+ ATTR_RELATION_TARGET,
13
+ ATTR_SELF_DXN,
14
+ RelationSourceDXNId,
15
+ RelationTargetDXNId,
16
+ SelfDXNId,
17
+ } from '../entities';
18
+ import { Ref } from '../ref';
19
+ import { ATTR_META, ATTR_TYPE, MetaId, TypeId } from '../types';
20
+
21
+ /**
22
+ * Attaches a toJSON method to the object for typed serialization.
23
+ */
24
+ export const attachTypedJsonSerializer = (obj: any) => {
25
+ const descriptor = Object.getOwnPropertyDescriptor(obj, 'toJSON');
26
+ if (descriptor) {
27
+ return;
28
+ }
29
+
30
+ Object.defineProperty(obj, 'toJSON', {
31
+ value: typedJsonSerializer,
32
+ writable: false,
33
+ enumerable: false,
34
+ // Setting `configurable` to false breaks proxy invariants, should be fixable.
35
+ configurable: true,
36
+ });
37
+ };
38
+
39
+ // NOTE: KEEP as function.
40
+ // Exported for use in objectToJSON.
41
+ export const typedJsonSerializer = function (this: any) {
42
+ const { id, ...rest } = this;
43
+ const result: any = {
44
+ id,
45
+ };
46
+
47
+ if (this[TypeId]) {
48
+ result[ATTR_TYPE] = this[TypeId].toString();
49
+ }
50
+
51
+ if (this[MetaId]) {
52
+ result[ATTR_META] = serializeMeta(this[MetaId]);
53
+ }
54
+
55
+ if (this[SelfDXNId]) {
56
+ result[ATTR_SELF_DXN] = this[SelfDXNId].toString();
57
+ }
58
+
59
+ if (this[RelationSourceDXNId]) {
60
+ const sourceDXN = this[RelationSourceDXNId];
61
+ invariant(sourceDXN instanceof DXN);
62
+ result[ATTR_RELATION_SOURCE] = sourceDXN.toString();
63
+ }
64
+ if (this[RelationTargetDXNId]) {
65
+ const targetDXN = this[RelationTargetDXNId];
66
+ invariant(targetDXN instanceof DXN);
67
+ result[ATTR_RELATION_TARGET] = targetDXN.toString();
68
+ }
69
+
70
+ Object.assign(result, serializeData(rest));
71
+ return result;
72
+ };
73
+
74
+ const serializeData = (data: unknown) => {
75
+ return deepMapValues(data, (value, recurse) => {
76
+ if (Ref.isRef(value)) {
77
+ // TODO(dmaretskyi): Should this be configurable?
78
+ return value.noInline().encode();
79
+ }
80
+
81
+ return recurse(value);
82
+ });
83
+ };
84
+
85
+ const serializeMeta = (meta: ObjectMeta) => {
86
+ return deepMapValues(meta, (value, recurse) => recurse(value));
87
+ };
@@ -5,20 +5,14 @@
5
5
  import type * as Schema from 'effect/Schema';
6
6
 
7
7
  import { ObjectId } from '@dxos/keys';
8
- import {
9
- type Live,
10
- UntypedReactiveHandler,
11
- createProxy,
12
- defineHiddenProperty,
13
- isValidProxyTarget,
14
- } from '@dxos/live-object';
15
8
 
16
9
  import { getTypeAnnotation } from '../annotations';
17
- import { Expando } from '../entities';
18
- import { attachTypedJsonSerializer } from '../object';
19
10
  import { type AnyProperties, KindId, MetaId, type ObjectMeta, ObjectMetaSchema } from '../types';
20
11
 
21
- import { TypedReactiveHandler, prepareTypedTarget } from './typed-handler';
12
+ import { defineHiddenProperty } from './define-hidden-property';
13
+ import { attachTypedJsonSerializer } from './json-serializer';
14
+ import { createProxy, getProxyTarget, isValidProxyTarget } from './proxy-utils';
15
+ import { TypedReactiveHandler, prepareTypedTarget, setMetaOwner } from './typed-handler';
22
16
 
23
17
  /**
24
18
  *
@@ -28,64 +22,53 @@ export type MakeObjectProps<T extends AnyProperties> = Omit<T, 'id' | KindId>;
28
22
 
29
23
  /**
30
24
  * Creates a reactive object from a plain Javascript object.
31
- * Optionally provides a TS-effect schema.
25
+ * Requires a TS-effect schema.
32
26
  */
33
27
  // TODO(burdon): Make internal
34
28
  // TODO(dmaretskyi): Deep mutability.
35
29
  // TODO(dmaretskyi): Invert generics (generic over schema) to have better error messages.
36
30
  // TODO(dmaretskyi): Could mutate original object making it unusable.
37
31
  export const makeObject: {
38
- <T extends AnyProperties>(obj: T): Live<T>;
39
32
  <T extends AnyProperties>(
40
33
  schema: Schema.Schema<T, any, never>,
41
34
  obj: NoInfer<MakeObjectProps<T>>,
42
35
  meta?: ObjectMeta,
43
- ): Live<T>;
44
- } = <T extends AnyProperties>(
45
- objOrSchema: Schema.Schema<T, any> | T,
46
- obj?: MakeObjectProps<T>,
47
- meta?: ObjectMeta,
48
- ): Live<T> => {
49
- // TODO(dmaretskyi): Remove Expando special case.
50
- if (obj && (objOrSchema as any) !== Expando) {
51
- return createReactiveObject<T>({ ...obj } as T, meta, objOrSchema as Schema.Schema<T, any>);
52
- } else if (obj && (objOrSchema as any) === Expando) {
53
- return createReactiveObject<T>({ ...obj } as T, meta, undefined, { expando: true });
54
- } else {
55
- return createReactiveObject<T>(objOrSchema as T, meta);
56
- }
36
+ ): T;
37
+ } = <T extends AnyProperties>(schema: Schema.Schema<T, any>, obj: MakeObjectProps<T>, meta?: ObjectMeta): T => {
38
+ return createReactiveObject<T>({ ...obj } as T, meta, schema);
57
39
  };
58
40
 
59
- const createReactiveObject = <T extends AnyProperties>(
60
- obj: T,
61
- meta?: ObjectMeta,
62
- schema?: Schema.Schema<T>,
63
- options?: { expando?: boolean },
64
- ): Live<T> => {
41
+ const createReactiveObject = <T extends AnyProperties>(obj: T, meta?: ObjectMeta, schema?: Schema.Schema<T>): T => {
65
42
  if (!isValidProxyTarget(obj)) {
66
43
  throw new Error('Value cannot be made into a reactive object.');
67
44
  }
68
45
 
69
- if (schema) {
70
- const annotation = getTypeAnnotation(schema);
71
- const shouldGenerateId = options?.expando || !!annotation;
72
- if (shouldGenerateId) {
73
- setIdOnTarget(obj);
74
- }
75
- if (annotation) {
76
- defineHiddenProperty(obj, KindId, annotation.kind);
77
- }
78
- initMeta(obj, meta);
79
- prepareTypedTarget(obj, schema);
80
- attachTypedJsonSerializer(obj);
81
- return createProxy<T>(obj, TypedReactiveHandler.instance);
82
- } else {
83
- if (options?.expando) {
84
- setIdOnTarget(obj);
46
+ if (!schema) {
47
+ throw new Error('Schema is required for reactive objects. Use Atom for untyped reactive state.');
48
+ }
49
+
50
+ const annotation = getTypeAnnotation(schema);
51
+ if (annotation) {
52
+ setIdOnTarget(obj);
53
+ defineHiddenProperty(obj, KindId, annotation.kind);
54
+ }
55
+ initMeta(obj, meta);
56
+ prepareTypedTarget(obj, schema);
57
+ attachTypedJsonSerializer(obj);
58
+ const proxy = createProxy<T>(obj, TypedReactiveHandler.instance);
59
+
60
+ // Set meta's owner to the main object so meta mutations respect the parent's change context.
61
+ // For non-database objects using TypedReactiveHandler, this links the meta to the main object's
62
+ // change context. For database objects, meta is handled by EchoReactiveHandler.getMeta().
63
+ const metaProxy = (obj as any)[MetaId];
64
+ if (metaProxy) {
65
+ const metaTarget = getProxyTarget(metaProxy);
66
+ if (metaTarget) {
67
+ setMetaOwner(metaTarget, obj);
85
68
  }
86
- initMeta(obj, meta);
87
- return createProxy<T>(obj, UntypedReactiveHandler.instance);
88
69
  }
70
+
71
+ return proxy;
89
72
  };
90
73
 
91
74
  /**