@dxos/echo 0.8.4-main.ef1bc66f44 → 0.8.4-main.f466a3d56e

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 (565) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +5 -5
  3. package/dist/lib/neutral/Annotation.mjs +7 -3
  4. package/dist/lib/neutral/Database.mjs +8 -4
  5. package/dist/lib/neutral/Entity.mjs +24 -14
  6. package/dist/lib/neutral/Err.mjs +3 -1
  7. package/dist/lib/neutral/Extension.mjs +18 -0
  8. package/dist/lib/neutral/Extension.mjs.map +7 -0
  9. package/dist/lib/neutral/Feed.mjs +52 -0
  10. package/dist/lib/neutral/Feed.mjs.map +7 -0
  11. package/dist/lib/neutral/Filter.mjs +23 -10
  12. package/dist/lib/neutral/Format.mjs +3 -3
  13. package/dist/lib/neutral/JsonSchema.mjs +9 -9
  14. package/dist/lib/neutral/Key.mjs +1 -1
  15. package/dist/lib/neutral/Migration.mjs +17 -0
  16. package/dist/lib/neutral/Migration.mjs.map +7 -0
  17. package/dist/lib/neutral/Obj.mjs +34 -17
  18. package/dist/lib/neutral/Order.mjs +1 -1
  19. package/dist/lib/neutral/Query.mjs +21 -9
  20. package/dist/lib/neutral/QueryResult.mjs +1 -1
  21. package/dist/lib/neutral/Ref.mjs +11 -7
  22. package/dist/lib/neutral/Relation.mjs +23 -13
  23. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  24. package/dist/lib/neutral/Tag.mjs +14 -10
  25. package/dist/lib/neutral/Type.mjs +13 -23
  26. package/dist/lib/neutral/{chunk-N2QNHMT5.mjs → chunk-44HT3MEC.mjs} +2 -2
  27. package/dist/lib/neutral/{chunk-N2QNHMT5.mjs.map → chunk-44HT3MEC.mjs.map} +1 -1
  28. package/dist/lib/neutral/{chunk-XAJMXQ4H.mjs → chunk-5SL5LDLD.mjs} +6 -2
  29. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
  30. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
  31. package/dist/lib/neutral/chunk-APHSOTIX.mjs +34 -0
  32. package/dist/lib/neutral/chunk-APHSOTIX.mjs.map +7 -0
  33. package/dist/lib/neutral/{chunk-ZAHWXGK4.mjs → chunk-APJKDGFL.mjs} +85 -7
  34. package/dist/lib/neutral/chunk-APJKDGFL.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs → chunk-BICZKPQG.mjs} +1 -1
  36. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs.map → chunk-BICZKPQG.mjs.map} +1 -1
  37. package/dist/lib/neutral/chunk-BMB7IHGB.mjs +346 -0
  38. package/dist/lib/neutral/chunk-BMB7IHGB.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-FIWO2FZK.mjs +36 -0
  40. package/dist/lib/neutral/chunk-FIWO2FZK.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-G54OX4IX.mjs +2452 -0
  42. package/dist/lib/neutral/chunk-G54OX4IX.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  44. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-LKFNEFHF.mjs → chunk-I2DARWPX.mjs} +18 -20
  46. package/dist/lib/neutral/chunk-I2DARWPX.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-J54QMAKF.mjs +421 -0
  48. package/dist/lib/neutral/chunk-J54QMAKF.mjs.map +7 -0
  49. package/dist/lib/neutral/chunk-MGSQGHOD.mjs +206 -0
  50. package/dist/lib/neutral/chunk-MGSQGHOD.mjs.map +7 -0
  51. package/dist/lib/neutral/chunk-MLS7U7AT.mjs +734 -0
  52. package/dist/lib/neutral/chunk-MLS7U7AT.mjs.map +7 -0
  53. package/dist/lib/neutral/{chunk-KB7RIVLK.mjs → chunk-N4B7FHQT.mjs} +4 -4
  54. package/dist/lib/neutral/{chunk-KB7RIVLK.mjs.map → chunk-N4B7FHQT.mjs.map} +2 -2
  55. package/dist/lib/neutral/{chunk-K5K3Z62A.mjs → chunk-N7VOEPSV.mjs} +11 -3
  56. package/dist/lib/neutral/chunk-N7VOEPSV.mjs.map +7 -0
  57. package/dist/lib/neutral/chunk-PSZBLH53.mjs +81 -0
  58. package/dist/lib/neutral/chunk-PSZBLH53.mjs.map +7 -0
  59. package/dist/lib/neutral/{chunk-MTEHHY62.mjs → chunk-PT37DG2F.mjs} +77 -58
  60. package/dist/lib/neutral/chunk-PT37DG2F.mjs.map +7 -0
  61. package/dist/lib/neutral/{chunk-DLPC7DHQ.mjs → chunk-Q2KKKJSV.mjs} +5 -5
  62. package/dist/lib/neutral/chunk-Q2KKKJSV.mjs.map +7 -0
  63. package/dist/lib/neutral/chunk-Q7ZL2P5H.mjs +320 -0
  64. package/dist/lib/neutral/chunk-Q7ZL2P5H.mjs.map +7 -0
  65. package/dist/lib/neutral/{chunk-QARLJVDB.mjs → chunk-QRZ2I3ZM.mjs} +8 -4
  66. package/dist/lib/neutral/chunk-QRZ2I3ZM.mjs.map +7 -0
  67. package/dist/lib/neutral/{chunk-VUQGRDRI.mjs → chunk-SCPFDS2E.mjs} +40 -12
  68. package/dist/lib/neutral/chunk-SCPFDS2E.mjs.map +7 -0
  69. package/dist/lib/neutral/{chunk-RIMHNJ3E.mjs → chunk-TNBK56IN.mjs} +98 -44
  70. package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
  71. package/dist/lib/neutral/{chunk-7WE7SBA2.mjs → chunk-TRPZU2HV.mjs} +13 -13
  72. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
  73. package/dist/lib/neutral/{chunk-ROKO4RKJ.mjs → chunk-TTCSATUD.mjs} +2 -2
  74. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  75. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  76. package/dist/lib/neutral/chunk-ZFACXBY6.mjs +136 -0
  77. package/dist/lib/neutral/chunk-ZFACXBY6.mjs.map +7 -0
  78. package/dist/lib/neutral/{chunk-RPB6V4BE.mjs → chunk-ZISMEVKD.mjs} +14 -1
  79. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
  80. package/dist/lib/neutral/index.mjs +51 -28
  81. package/dist/lib/neutral/internal/index.mjs +52 -38
  82. package/dist/lib/neutral/meta.json +1 -1
  83. package/dist/lib/neutral/testing/index.mjs +199 -136
  84. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  85. package/dist/types/src/Annotation.d.ts +3 -3
  86. package/dist/types/src/Annotation.d.ts.map +1 -1
  87. package/dist/types/src/Collection.d.ts +16 -0
  88. package/dist/types/src/Collection.d.ts.map +1 -0
  89. package/dist/types/src/Database.d.ts +21 -36
  90. package/dist/types/src/Database.d.ts.map +1 -1
  91. package/dist/types/src/Dataset.d.ts +19 -0
  92. package/dist/types/src/Dataset.d.ts.map +1 -0
  93. package/dist/types/src/Entity.d.ts +54 -22
  94. package/dist/types/src/Entity.d.ts.map +1 -1
  95. package/dist/types/src/Err.d.ts +55 -12
  96. package/dist/types/src/Err.d.ts.map +1 -1
  97. package/dist/types/src/Extension.d.ts +80 -0
  98. package/dist/types/src/Extension.d.ts.map +1 -0
  99. package/dist/types/src/Extension.test.d.ts +2 -0
  100. package/dist/types/src/Extension.test.d.ts.map +1 -0
  101. package/dist/types/src/Feed.d.ts +206 -0
  102. package/dist/types/src/Feed.d.ts.map +1 -0
  103. package/dist/types/src/Filter.d.ts +55 -5
  104. package/dist/types/src/Filter.d.ts.map +1 -1
  105. package/dist/types/src/Filter.test.d.ts +2 -0
  106. package/dist/types/src/Filter.test.d.ts.map +1 -0
  107. package/dist/types/src/Format.d.ts +3 -3
  108. package/dist/types/src/Format.d.ts.map +1 -1
  109. package/dist/types/src/Hypergraph.d.ts +11 -6
  110. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  111. package/dist/types/src/Json.d.ts +33 -0
  112. package/dist/types/src/Json.d.ts.map +1 -0
  113. package/dist/types/src/Json.test.d.ts +2 -0
  114. package/dist/types/src/Json.test.d.ts.map +1 -0
  115. package/dist/types/src/JsonSchema.d.ts +11 -4
  116. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  117. package/dist/types/src/Migration.d.ts +69 -0
  118. package/dist/types/src/Migration.d.ts.map +1 -0
  119. package/dist/types/src/Obj.d.ts +163 -59
  120. package/dist/types/src/Obj.d.ts.map +1 -1
  121. package/dist/types/src/Order.d.ts.map +1 -1
  122. package/dist/types/src/Query.d.ts +105 -17
  123. package/dist/types/src/Query.d.ts.map +1 -1
  124. package/dist/types/src/Ref.d.ts +59 -10
  125. package/dist/types/src/Ref.d.ts.map +1 -1
  126. package/dist/types/src/Relation.d.ts +86 -40
  127. package/dist/types/src/Relation.d.ts.map +1 -1
  128. package/dist/types/src/SchemaRegistry.d.ts +4 -4
  129. package/dist/types/src/SchemaRegistry.d.ts.map +1 -1
  130. package/dist/types/src/Tag.d.ts +2 -1
  131. package/dist/types/src/Tag.d.ts.map +1 -1
  132. package/dist/types/src/Type.d.ts +51 -180
  133. package/dist/types/src/Type.d.ts.map +1 -1
  134. package/dist/types/src/View.d.ts +68 -0
  135. package/dist/types/src/View.d.ts.map +1 -0
  136. package/dist/types/src/exemplars.test.d.ts +2 -0
  137. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  138. package/dist/types/src/index.d.ts +7 -0
  139. package/dist/types/src/index.d.ts.map +1 -1
  140. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +65 -2
  141. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  142. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  143. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  144. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  145. package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
  146. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  147. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +2 -2
  148. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  149. package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
  150. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  151. package/dist/types/src/internal/{entities → Entity}/entity.d.ts +3 -3
  152. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  153. package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
  154. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  155. package/dist/types/src/internal/{entities → Entity}/model.d.ts +4 -26
  156. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  157. package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
  158. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  159. package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
  160. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  161. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  162. package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
  163. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  164. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  165. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  166. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  167. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  168. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  169. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  170. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  171. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  172. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  173. package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
  174. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  175. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  176. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  177. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  178. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  179. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  180. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +37 -37
  181. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  182. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +1 -1
  183. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  184. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  185. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  186. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  187. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
  188. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  189. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  190. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  191. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  192. package/dist/types/src/internal/{object → Obj}/ids.d.ts +1 -1
  193. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  194. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  195. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  196. package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +13 -5
  197. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  198. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  199. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  200. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  201. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  202. package/dist/types/src/internal/{object → Obj}/set-value.d.ts +2 -2
  203. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  204. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  205. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  206. package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +4 -4
  207. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  208. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  209. package/dist/types/src/internal/Query.d.ts +10 -0
  210. package/dist/types/src/internal/Query.d.ts.map +1 -0
  211. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  212. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
  213. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  214. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +15 -2
  215. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  216. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  217. package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
  218. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  219. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  220. package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +7 -7
  221. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  222. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  223. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  224. package/dist/types/src/internal/{schema → Type}/persistent-schema.d.ts +2 -2
  225. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  226. package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
  227. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  228. package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
  229. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  230. package/dist/types/src/internal/common/index.d.ts +4 -0
  231. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  232. package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +1 -1
  233. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  234. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  235. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  236. package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
  237. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  238. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  239. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  240. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  241. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  242. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  243. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  244. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  245. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  246. package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
  247. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  248. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
  249. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
  250. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  251. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  252. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  253. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  254. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  255. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  256. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  257. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  258. package/dist/types/src/internal/{types → common/types}/base.d.ts +1 -0
  259. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  260. package/dist/types/src/internal/{types → common/types}/entity.d.ts +5 -5
  261. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  262. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  263. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  264. package/dist/types/src/internal/{types → common/types}/meta.d.ts +12 -1
  265. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  266. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  267. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  268. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  269. package/dist/types/src/internal/{types → common/types}/version.d.ts +2 -2
  270. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  271. package/dist/types/src/internal/index.d.ts +9 -10
  272. package/dist/types/src/internal/index.d.ts.map +1 -1
  273. package/dist/types/src/testing/test-data.d.ts +8 -8
  274. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  275. package/dist/types/src/testing/test-schema.d.ts +47 -46
  276. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  277. package/dist/types/src/testing/util.d.ts.map +1 -1
  278. package/dist/types/tsconfig.tsbuildinfo +1 -1
  279. package/package.json +30 -15
  280. package/src/Annotation.ts +7 -3
  281. package/src/Collection.ts +37 -0
  282. package/src/Database.ts +64 -65
  283. package/src/Dataset.ts +26 -0
  284. package/src/Entity.ts +87 -61
  285. package/src/Err.ts +22 -0
  286. package/src/Extension.test.ts +235 -0
  287. package/src/Extension.ts +122 -0
  288. package/src/Feed.ts +335 -0
  289. package/src/Filter.test.ts +90 -0
  290. package/src/Filter.ts +116 -7
  291. package/src/Format.ts +3 -3
  292. package/src/Hypergraph.ts +12 -7
  293. package/src/Json.test.ts +175 -0
  294. package/src/Json.ts +102 -0
  295. package/src/JsonSchema.ts +14 -4
  296. package/src/Migration.ts +106 -0
  297. package/src/Obj.test.ts +142 -15
  298. package/src/Obj.ts +382 -161
  299. package/src/Order.ts +3 -1
  300. package/src/Query.test.ts +372 -15
  301. package/src/Query.ts +274 -26
  302. package/src/Ref.ts +66 -11
  303. package/src/Relation.test.ts +8 -2
  304. package/src/Relation.ts +183 -147
  305. package/src/SchemaRegistry.ts +5 -4
  306. package/src/Tag.ts +6 -5
  307. package/src/Type.test.ts +10 -10
  308. package/src/Type.ts +70 -303
  309. package/src/View.ts +107 -0
  310. package/src/exemplars.test.ts +21 -0
  311. package/src/index.ts +8 -0
  312. package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -7
  313. package/src/internal/{annotations → Annotation}/annotations.ts +122 -19
  314. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  315. package/src/internal/{api → Annotation}/sorting.ts +2 -4
  316. package/src/internal/{annotations → Annotation}/util.ts +1 -1
  317. package/src/internal/{api/entity.ts → Entity/api.ts} +3 -2
  318. package/src/internal/{entities → Entity}/entity.ts +6 -4
  319. package/src/internal/{entities → Entity}/index.ts +2 -0
  320. package/src/internal/{entities → Entity}/model.ts +15 -42
  321. package/src/internal/{entities → Entity}/object.ts +2 -3
  322. package/src/internal/{entities → Entity}/relation.ts +19 -36
  323. package/src/internal/{api → Entity}/version.ts +2 -2
  324. package/src/internal/{formats → Format}/date.test.ts +1 -2
  325. package/src/internal/{formats → Format}/format.test.ts +1 -2
  326. package/src/internal/{formats → Format}/types.ts +2 -2
  327. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  328. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
  329. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -49
  330. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +6 -5
  331. package/src/internal/{object → Obj}/clone.ts +3 -3
  332. package/src/internal/{object → Obj}/common.ts +2 -2
  333. package/src/internal/{object → Obj}/create-object.test.ts +5 -7
  334. package/src/internal/{object → Obj}/create-object.ts +5 -6
  335. package/src/internal/{object → Obj}/deleted.ts +2 -2
  336. package/src/internal/{object → Obj}/ids.ts +1 -1
  337. package/src/internal/{object → Obj}/inspect.ts +2 -2
  338. package/src/internal/{object → Obj}/json-serializer.test.ts +31 -9
  339. package/src/internal/{object → Obj}/json-serializer.ts +60 -35
  340. package/src/internal/{object → Obj}/schema-validator.ts +1 -1
  341. package/src/internal/{object → Obj}/set-value.test.ts +24 -24
  342. package/src/internal/{object → Obj}/set-value.ts +3 -3
  343. package/src/internal/{object → Obj}/snapshot.ts +35 -23
  344. package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
  345. package/src/internal/{object → Obj}/typed-object.ts +4 -4
  346. package/src/internal/Query.ts +156 -0
  347. package/src/internal/{ref → Ref}/ref-array.ts +1 -2
  348. package/src/internal/{ref → Ref}/ref.test.ts +4 -5
  349. package/src/internal/{ref → Ref}/ref.ts +20 -3
  350. package/src/internal/{schema → Type}/compose.test.ts +5 -6
  351. package/src/internal/{schema → Type}/compose.ts +1 -1
  352. package/src/internal/{schema → Type}/echo-schema.ts +9 -10
  353. package/src/internal/{schema → Type}/manipulation.ts +1 -1
  354. package/src/internal/{schema → Type}/persistent-schema.ts +9 -4
  355. package/src/internal/{README.md → common/README.md} +2 -2
  356. package/src/internal/{api → common/api}/index.ts +0 -4
  357. package/src/internal/{api → common/api}/meta.ts +3 -3
  358. package/src/internal/common/index.ts +7 -0
  359. package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
  360. package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
  361. package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
  362. package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
  363. package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
  364. package/src/internal/{proxy → common/proxy}/make-object.ts +1 -2
  365. package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
  366. package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
  367. package/src/internal/common/proxy/reactive.test.ts +54 -0
  368. package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
  369. package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
  370. package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -7
  371. package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -13
  372. package/src/internal/{proxy → common/proxy}/typed-object.test.ts +5 -6
  373. package/src/internal/{types → common/types}/base.ts +1 -1
  374. package/src/internal/{types → common/types}/entity.ts +2 -2
  375. package/src/internal/{types → common/types}/index.ts +1 -0
  376. package/src/internal/{types → common/types}/meta.ts +15 -1
  377. package/src/internal/common/types/model-symbols.ts +69 -0
  378. package/src/internal/{types → common/types}/version.ts +2 -3
  379. package/src/internal/index.ts +9 -31
  380. package/src/testing/api.test.ts +4 -5
  381. package/src/testing/test-data.ts +157 -98
  382. package/src/testing/test-schema.ts +20 -18
  383. package/dist/lib/neutral/chunk-2AF5GMG6.mjs +0 -171
  384. package/dist/lib/neutral/chunk-2AF5GMG6.mjs.map +0 -7
  385. package/dist/lib/neutral/chunk-7WE7SBA2.mjs.map +0 -7
  386. package/dist/lib/neutral/chunk-DLPC7DHQ.mjs.map +0 -7
  387. package/dist/lib/neutral/chunk-EBUAT5ID.mjs +0 -229
  388. package/dist/lib/neutral/chunk-EBUAT5ID.mjs.map +0 -7
  389. package/dist/lib/neutral/chunk-K5K3Z62A.mjs.map +0 -7
  390. package/dist/lib/neutral/chunk-LKFNEFHF.mjs.map +0 -7
  391. package/dist/lib/neutral/chunk-MTEHHY62.mjs.map +0 -7
  392. package/dist/lib/neutral/chunk-QARLJVDB.mjs.map +0 -7
  393. package/dist/lib/neutral/chunk-RIMHNJ3E.mjs.map +0 -7
  394. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +0 -7
  395. package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +0 -7
  396. package/dist/lib/neutral/chunk-TLGNKUUG.mjs +0 -3905
  397. package/dist/lib/neutral/chunk-TLGNKUUG.mjs.map +0 -7
  398. package/dist/lib/neutral/chunk-TQT6WTIJ.mjs +0 -142
  399. package/dist/lib/neutral/chunk-TQT6WTIJ.mjs.map +0 -7
  400. package/dist/lib/neutral/chunk-VUQGRDRI.mjs.map +0 -7
  401. package/dist/lib/neutral/chunk-X2MPMYYN.mjs +0 -13
  402. package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +0 -7
  403. package/dist/lib/neutral/chunk-XAJMXQ4H.mjs.map +0 -7
  404. package/dist/lib/neutral/chunk-ZAHWXGK4.mjs.map +0 -7
  405. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  406. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  407. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  408. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  409. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  410. package/dist/types/src/internal/api/annotations.d.ts +0 -23
  411. package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
  412. package/dist/types/src/internal/api/entity.d.ts.map +0 -1
  413. package/dist/types/src/internal/api/index.d.ts.map +0 -1
  414. package/dist/types/src/internal/api/meta.d.ts.map +0 -1
  415. package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
  416. package/dist/types/src/internal/api/version.d.ts.map +0 -1
  417. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  418. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  419. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  420. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  421. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  422. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  423. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  424. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  425. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  426. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  427. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  428. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  429. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  430. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  431. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  432. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  433. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  434. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  435. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  436. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  437. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  438. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  439. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  440. package/dist/types/src/internal/object/clone.d.ts.map +0 -1
  441. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  442. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  443. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  444. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  445. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  446. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  447. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  448. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  449. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  450. package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
  451. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  452. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  453. package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
  454. package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
  455. package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
  456. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  457. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  458. package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
  459. package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
  460. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
  461. package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
  462. package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
  463. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  464. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  465. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
  466. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  467. package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
  468. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
  469. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
  470. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
  471. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
  472. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  473. package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
  474. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  475. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  476. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  477. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  478. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  479. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  480. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  481. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  482. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  483. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  484. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  485. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  486. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  487. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  488. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  489. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  490. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  491. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  492. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  493. package/src/internal/api/annotations.ts +0 -60
  494. /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
  495. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
  496. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  497. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  498. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  499. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  500. /package/dist/types/src/internal/{formats → Format}/format.d.ts +0 -0
  501. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  502. /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
  503. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  504. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  505. /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
  506. /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
  507. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  508. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  509. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  510. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  511. /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
  512. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  513. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  514. /package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -0
  515. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  516. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  517. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  518. /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
  519. /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
  520. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  521. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  522. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  523. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  524. /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
  525. /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
  526. /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
  527. /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
  528. /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
  529. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  530. /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
  531. /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
  532. /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
  533. /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
  534. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
  535. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
  536. /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
  537. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  538. /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
  539. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +0 -0
  540. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  541. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  542. /package/dist/types/src/internal/{types → common/types}/typename.d.ts +0 -0
  543. /package/src/internal/{entities → Entity}/util.ts +0 -0
  544. /package/src/internal/{formats → Format}/date.ts +0 -0
  545. /package/src/internal/{formats → Format}/format.ts +0 -0
  546. /package/src/internal/{formats → Format}/index.ts +0 -0
  547. /package/src/internal/{formats → Format}/number.ts +0 -0
  548. /package/src/internal/{formats → Format}/object.ts +0 -0
  549. /package/src/internal/{formats → Format}/select.ts +0 -0
  550. /package/src/internal/{formats → Format}/string.ts +0 -0
  551. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  552. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  553. /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
  554. /package/src/internal/{object → Obj}/index.ts +0 -0
  555. /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
  556. /package/src/internal/{ref → Ref}/index.ts +0 -0
  557. /package/src/internal/{schema → Type}/index.ts +0 -0
  558. /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
  559. /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
  560. /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
  561. /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
  562. /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
  563. /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
  564. /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
  565. /package/src/internal/{types → common/types}/typename.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/echo",
3
- "version": "0.8.4-main.ef1bc66f44",
3
+ "version": "0.8.4-main.f466a3d56e",
4
4
  "description": "ECHO API",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -8,7 +8,7 @@
8
8
  "type": "git",
9
9
  "url": "https://github.com/dxos/dxos"
10
10
  },
11
- "license": "MIT",
11
+ "license": "FSL-1.1-Apache-2.0",
12
12
  "author": "info@dxos.org",
13
13
  "sideEffects": false,
14
14
  "type": "module",
@@ -48,6 +48,11 @@
48
48
  "types": "./dist/types/src/Err.d.ts",
49
49
  "default": "./dist/lib/neutral/Err.mjs"
50
50
  },
51
+ "./Feed": {
52
+ "source": "./src/Feed.ts",
53
+ "types": "./dist/types/src/Feed.d.ts",
54
+ "default": "./dist/lib/neutral/Feed.mjs"
55
+ },
51
56
  "./Filter": {
52
57
  "source": "./src/Filter.ts",
53
58
  "types": "./dist/types/src/Filter.d.ts",
@@ -68,6 +73,11 @@
68
73
  "types": "./dist/types/src/Key.d.ts",
69
74
  "default": "./dist/lib/neutral/Key.mjs"
70
75
  },
76
+ "./Migration": {
77
+ "source": "./src/Migration.ts",
78
+ "types": "./dist/types/src/Migration.d.ts",
79
+ "default": "./dist/lib/neutral/Migration.mjs"
80
+ },
71
81
  "./Obj": {
72
82
  "source": "./src/Obj.ts",
73
83
  "types": "./dist/types/src/Obj.d.ts",
@@ -112,6 +122,11 @@
112
122
  "source": "./src/Type.ts",
113
123
  "types": "./dist/types/src/Type.d.ts",
114
124
  "default": "./dist/lib/neutral/Type.mjs"
125
+ },
126
+ "./Extension": {
127
+ "source": "./src/Extension.ts",
128
+ "types": "./dist/types/src/Extension.d.ts",
129
+ "default": "./dist/lib/neutral/Extension.mjs"
115
130
  }
116
131
  },
117
132
  "files": [
@@ -119,19 +134,19 @@
119
134
  "src"
120
135
  ],
121
136
  "dependencies": {
122
- "effect": "3.19.16",
123
- "@dxos/async": "0.8.4-main.ef1bc66f44",
124
- "@dxos/debug": "0.8.4-main.ef1bc66f44",
125
- "@dxos/context": "0.8.4-main.ef1bc66f44",
126
- "@dxos/effect": "0.8.4-main.ef1bc66f44",
127
- "@dxos/echo-protocol": "0.8.4-main.ef1bc66f44",
128
- "@dxos/errors": "0.8.4-main.ef1bc66f44",
129
- "@dxos/invariant": "0.8.4-main.ef1bc66f44",
130
- "@dxos/log": "0.8.4-main.ef1bc66f44",
131
- "@dxos/protocols": "0.8.4-main.ef1bc66f44",
132
- "@dxos/keys": "0.8.4-main.ef1bc66f44",
133
- "@dxos/node-std": "0.8.4-main.ef1bc66f44",
134
- "@dxos/util": "0.8.4-main.ef1bc66f44"
137
+ "effect": "3.20.0",
138
+ "@dxos/context": "0.8.4-main.f466a3d56e",
139
+ "@dxos/debug": "0.8.4-main.f466a3d56e",
140
+ "@dxos/echo-protocol": "0.8.4-main.f466a3d56e",
141
+ "@dxos/effect": "0.8.4-main.f466a3d56e",
142
+ "@dxos/errors": "0.8.4-main.f466a3d56e",
143
+ "@dxos/invariant": "0.8.4-main.f466a3d56e",
144
+ "@dxos/keys": "0.8.4-main.f466a3d56e",
145
+ "@dxos/log": "0.8.4-main.f466a3d56e",
146
+ "@dxos/node-std": "0.8.4-main.f466a3d56e",
147
+ "@dxos/protocols": "0.8.4-main.f466a3d56e",
148
+ "@dxos/util": "0.8.4-main.f466a3d56e",
149
+ "@dxos/async": "0.8.4-main.f466a3d56e"
135
150
  },
136
151
  "publishConfig": {
137
152
  "access": "public"
package/src/Annotation.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  export {
6
8
  DescriptionAnnotation,
7
9
  FormInputAnnotation,
@@ -15,11 +17,13 @@ export {
15
17
  getTypeAnnotation,
16
18
  setDescriptionWithSchema,
17
19
  setLabelWithSchema,
18
- } from './internal/annotations';
20
+ IconAnnotation,
21
+ IconFromRefAnnotation,
22
+ } from './internal/Annotation';
19
23
 
20
24
  import type * as Schema from 'effect/Schema';
21
25
 
22
- import * as internalAnnotations from './internal/annotations';
26
+ import * as internalAnnotations from './internal/Annotation';
23
27
 
24
28
  interface MakeProps<T> {
25
29
  id: string;
@@ -34,7 +38,7 @@ interface MakeProps<T> {
34
38
  * @example
35
39
  * ```ts
36
40
  * const ColorAnnotation = Annotation.make({
37
- * id: 'dxos.org/annotation/Color',
41
+ * id: 'org.dxos.annotation.color',
38
42
  * schema: Schema.String,
39
43
  * });
40
44
  *
@@ -0,0 +1,37 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import * as Annotation from './Annotation';
10
+ import * as internal from './internal';
11
+ import * as Obj from './Obj';
12
+ import * as Ref from './Ref';
13
+ import * as Type from './Type';
14
+
15
+ /**
16
+ * A an ordered set of objects.
17
+ */
18
+ export const Collection = Schema.Struct({
19
+ name: Schema.String.pipe(Schema.optional),
20
+ objects: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(internal.FormInputAnnotation.set(false)),
21
+ }).pipe(
22
+ Type.object({
23
+ typename: 'org.dxos.type.collection',
24
+ version: '0.1.0',
25
+ }),
26
+ Annotation.IconAnnotation.set({
27
+ icon: 'ph--folder--regular',
28
+ hue: 'amber',
29
+ }),
30
+ );
31
+
32
+ export interface Collection extends Schema.Schema.Type<typeof Collection> {}
33
+
34
+ export const make = (props: Partial<Obj.MakeProps<typeof Collection>> = {}): Collection =>
35
+ Obj.make(Collection, { objects: [], ...props });
36
+
37
+ export const isCollection: (value: unknown) => value is Collection = Obj.instanceOf(Collection);
package/src/Database.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import * as Context from 'effect/Context';
6
8
  import * as Effect from 'effect/Effect';
7
9
  import * as Layer from 'effect/Layer';
@@ -9,75 +11,34 @@ import * as Option from 'effect/Option';
9
11
  import * as Schema from 'effect/Schema';
10
12
  import type * as Types from 'effect/Types';
11
13
 
12
- import { type QueryAST } from '@dxos/echo-protocol';
13
14
  import { promiseWithCauseCapture } from '@dxos/effect';
14
15
  import { invariant } from '@dxos/invariant';
15
- import { DXN, type PublicKey, type SpaceId } from '@dxos/keys';
16
- import { type QueryOptions as QueryOptionsProto } from '@dxos/protocols/proto/dxos/echo/filter';
16
+ import { DXN, type SpaceId } from '@dxos/keys';
17
17
 
18
18
  import type * as Entity from './Entity';
19
19
  import * as Err from './Err';
20
20
  import type * as Filter from './Filter';
21
21
  import type * as Hypergraph from './Hypergraph';
22
- import { isInstanceOf } from './internal/annotations';
23
- import type { Ref } from './internal/ref/ref';
24
- import { type AnyProperties } from './internal/types';
22
+ import { isInstanceOf } from './internal/Annotation';
23
+ import { type AnyProperties } from './internal/common/types';
24
+ import type { Ref } from './internal/Ref/ref';
25
25
  import type * as Obj from './Obj';
26
26
  import type * as Query from './Query';
27
27
  import type * as QueryResult from './QueryResult';
28
28
  import type * as SchemaRegistry from './SchemaRegistry';
29
29
  import type * as Type from './Type';
30
30
 
31
- /**
32
- * @deprecated Use `QueryAST.QueryOptions` instead.
33
- */
34
- export type QueryOptions = {
35
- /**
36
- * @deprecated Use `spaceIds` instead.
37
- */
38
- spaces?: PublicKey[];
39
-
40
- /**
41
- * Query only in specific spaces.
42
- */
43
- // TODO(dmaretskyi): Change this to SpaceId.
44
- spaceIds?: string[];
45
-
46
- /**
47
- * Return only the first `limit` results.
48
- */
49
- limit?: number;
50
-
51
- /**
52
- * Query only local spaces, or remote on agent.
53
- * @default `QueryOptions.DataLocation.LOCAL`
54
- *
55
- * Options:
56
- * - proto3_optional = true
57
- */
58
- // TODO(burdon): Remove?
59
- dataLocation?: QueryOptionsProto.DataLocation;
60
- };
61
-
62
31
  /**
63
32
  * `query` API function declaration.
64
33
  */
65
34
  // TODO(burdon): Reconcile Query and Filter (should only have one root type).
66
- // TODO(dmaretskyi): Remove query options.
67
35
  export interface QueryFn {
68
- <Q extends Query.Any>(
69
- query: Q,
70
- options?: (QueryAST.QueryOptions & QueryOptions) | undefined,
71
- ): QueryResult.QueryResult<Query.Type<Q>>;
72
-
73
- <F extends Filter.Any>(
74
- filter: F,
75
- options?: (QueryAST.QueryOptions & QueryOptions) | undefined,
76
- ): QueryResult.QueryResult<Filter.Type<F>>;
36
+ <Q extends Query.Any>(query: Q): QueryResult.QueryResult<Query.Type<Q>>;
37
+ <F extends Filter.Any>(filter: F): QueryResult.QueryResult<Filter.Type<F>>;
77
38
  }
78
39
 
79
40
  /**
80
- * Common interface for Database and Queue.
41
+ * Common interface for Database, Feed, and Hypergraph.
81
42
  */
82
43
  export interface Queryable {
83
44
  query: QueryFn;
@@ -110,7 +71,7 @@ export type FlushOptions = {
110
71
 
111
72
  /**
112
73
  * Wait for pending index updates.
113
- * @default false
74
+ * @default true
114
75
  */
115
76
  indexes?: boolean;
116
77
 
@@ -145,7 +106,10 @@ export interface Database extends Queryable {
145
106
  /**
146
107
  * Return object by local ID.
147
108
  */
148
- getObjectById<T extends Obj.Unknown = Obj.Obj<AnyProperties>>(id: string, opts?: GetObjectByIdOptions): T | undefined;
109
+ getObjectById<T extends Obj.Unknown = Obj.OfShape<AnyProperties>>(
110
+ id: string,
111
+ opts?: GetObjectByIdOptions,
112
+ ): T | undefined;
149
113
 
150
114
  /**
151
115
  * Query objects.
@@ -239,11 +203,11 @@ export const resolve: {
239
203
  // No type check.
240
204
  (ref: DXN | Ref<any>): Effect.Effect<Entity.Unknown, never, Service>;
241
205
  // Check matches schema.
242
- <S extends Type.Entity.Any>(
206
+ <S extends Type.AnyEntity>(
243
207
  ref: DXN | Ref<any>,
244
208
  schema: S,
245
209
  ): Effect.Effect<Schema.Schema.Type<S>, Err.ObjectNotFoundError, Service>;
246
- } = (<S extends Type.Entity.Any>(
210
+ } = (<S extends Type.AnyEntity>(
247
211
  ref: DXN | Ref<any>,
248
212
  schema?: S,
249
213
  ): Effect.Effect<Schema.Schema.Type<S>, Err.ObjectNotFoundError, Service> =>
@@ -265,24 +229,28 @@ export const resolve: {
265
229
  }
266
230
  invariant(!schema || isInstanceOf(schema, object), 'Object type mismatch.');
267
231
  return object as any;
268
- })) as any;
232
+ }).pipe(Effect.withSpan('Database.resolve'))) as any;
269
233
 
270
234
  /**
271
235
  * Loads an object reference.
272
236
  */
273
- export const load: <T>(ref: Ref<T>) => Effect.Effect<T, Err.ObjectNotFoundError, never> = Effect.fn(function* (ref) {
274
- const object = yield* promiseWithCauseCapture(() => ref.tryLoad());
275
- if (!object) {
276
- return yield* Effect.fail(new Err.ObjectNotFoundError(ref.dxn));
277
- }
278
- return object;
279
- });
237
+ export const load: <T>(ref: Ref<T>) => Effect.Effect<T, Err.ObjectNotFoundError, never> = Effect.fn('Database.load')(
238
+ function* (ref) {
239
+ const object = yield* promiseWithCauseCapture(() => ref.tryLoad());
240
+ if (!object) {
241
+ return yield* Effect.fail(new Err.ObjectNotFoundError(ref.dxn));
242
+ }
243
+ return object;
244
+ },
245
+ );
280
246
 
281
247
  /**
282
248
  * Loads an object reference option.
283
249
  */
284
250
  // TODO(dmaretskyi): Do we need this -- you can just use `Effect.catchTag` in calling code instead.
285
- export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, never, never> = Effect.fn(function* (ref) {
251
+ export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, never, never> = Effect.fn(
252
+ 'Database.loadOption',
253
+ )(function* (ref) {
286
254
  const object = yield* load(ref).pipe(Effect.catchTag('ObjectNotFoundError', () => Effect.succeed(undefined)));
287
255
 
288
256
  return Option.fromNullable(object);
@@ -293,21 +261,23 @@ export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, nev
293
261
  * @see {@link Database.add}
294
262
  */
295
263
  export const add = <T extends Entity.Unknown>(obj: T): Effect.Effect<T, never, Service> =>
296
- Service.pipe(Effect.map(({ db }) => db.add(obj)));
264
+ Service.pipe(Effect.map(({ db }) => db.add(obj))).pipe(Effect.withSpan('Database.add'));
297
265
 
298
266
  /**
299
267
  * Removes an object from the database.
300
268
  * @see {@link Database.remove}
301
269
  */
302
270
  export const remove = <T extends Entity.Unknown>(obj: T): Effect.Effect<void, never, Service> =>
303
- Service.pipe(Effect.map(({ db }) => db.remove(obj)));
271
+ Service.pipe(Effect.map(({ db }) => db.remove(obj))).pipe(Effect.withSpan('Database.remove'));
304
272
 
305
273
  /**
306
274
  * Flushes pending changes to disk.
307
275
  * @see {@link Database.flush}
308
276
  */
309
277
  export const flush = (opts?: FlushOptions) =>
310
- Service.pipe(Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.flush(opts))));
278
+ Service.pipe(Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.flush(opts)))).pipe(
279
+ Effect.withSpan('Database.flush'),
280
+ );
311
281
 
312
282
  /**
313
283
  * Creates a `QueryResult` object that can be subscribed to.
@@ -328,7 +298,36 @@ export const runQuery: {
328
298
  <Q extends Query.Any>(query: Q): Effect.Effect<Query.Type<Q>[], never, Service>;
329
299
  <F extends Filter.Any>(filter: F): Effect.Effect<Filter.Type<F>[], never, Service>;
330
300
  } = (queryOrFilter: Query.Any | Filter.Any) =>
331
- query(queryOrFilter as any).pipe(Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())));
301
+ query(queryOrFilter as any).pipe(
302
+ Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())),
303
+ Effect.withSpan('Database.runQuery'),
304
+ );
305
+
306
+ /**
307
+ * Executes the query once and returns the first result as or None.
308
+ */
309
+ export const runQueryFirst: {
310
+ <Q extends Query.Any>(query: Q): Effect.Effect<Option.Option<Query.Type<Q>>, never, Service>;
311
+ <F extends Filter.Any>(filter: F): Effect.Effect<Option.Option<Filter.Type<F>>, never, Service>;
312
+ } = (queryOrFilter: Query.Any | Filter.Any) =>
313
+ query(queryOrFilter as any).pipe(
314
+ Effect.flatMap((queryResult) =>
315
+ promiseWithCauseCapture(async () => Option.fromNullable(await queryResult.firstOrUndefined())),
316
+ ),
317
+ Effect.withSpan('Database.runQueryFirst'),
318
+ );
319
+
320
+ /**
321
+ * Persists schemas in the database so they replicate to other clients.
322
+ * @see {@link SchemaRegistry.SchemaRegistry.register}
323
+ */
324
+ export const registerSchema = (
325
+ input: SchemaRegistry.RegisterSchemaInput[],
326
+ ): Effect.Effect<Type.RuntimeType[], never, Service> =>
327
+ Service.pipe(
328
+ Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.schemaRegistry.register(input))),
329
+ Effect.withSpan('Database.registerSchema'),
330
+ );
332
331
 
333
332
  /**
334
333
  * Creates a schema query result that can be subscribed to.
package/src/Dataset.ts ADDED
@@ -0,0 +1,26 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import { pipe } from 'effect/Function';
8
+ import * as Predicate from 'effect/Predicate';
9
+ import * as Schema from 'effect/Schema';
10
+
11
+ import * as Collection from './Collection';
12
+ import * as Feed from './Feed';
13
+ import * as Obj from './Obj';
14
+ import * as View from './View';
15
+
16
+ /**
17
+ * Abstart set of objects, represented by a view, feed, or collection.
18
+ */
19
+ export const Dataset = Schema.Union(Feed.Feed, Collection.Collection, View.View);
20
+ export type Dataset = Feed.Feed | Collection.Collection | View.View;
21
+
22
+ export const isDataset: (value: unknown) => value is Dataset = pipe(
23
+ Obj.instanceOf(Feed.Feed),
24
+ Predicate.or(Obj.instanceOf(Collection.Collection)),
25
+ Predicate.or(Obj.instanceOf(View.View)),
26
+ );
package/src/Entity.ts CHANGED
@@ -2,46 +2,28 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import type { ForeignKey } from '@dxos/echo-protocol';
6
8
  import type { DXN, ObjectId } from '@dxos/keys';
7
9
 
8
- import {
9
- type ChangeCallback,
10
- EntityKind,
11
- EntityKindSchema,
12
- KindId,
13
- type Mutable,
14
- type ObjectJSON,
15
- type ObjectMeta,
16
- type ReadonlyMeta,
17
- SnapshotKindId,
18
- addTag as addTag$,
19
- change as change$,
20
- getDXN as getDXN$,
21
- getDatabase as getDatabase$,
22
- getDescription as getDescription$,
23
- getEntityKind,
24
- getKeys as getKeys$,
25
- getLabel as getLabel$,
26
- getMetaChecked as getMeta$,
27
- getTypeDXN as getTypeDXN$,
28
- getTypename as getTypename$,
29
- isDeleted as isDeleted$,
30
- removeTag as removeTag$,
31
- subscribe as subscribe$,
32
- objectToJSON as toJSON$,
33
- } from './internal';
10
+ import * as internal from './internal';
11
+ import type * as Relation from './Relation';
12
+ import type * as Type from './Type';
34
13
 
35
14
  // Re-export KindId and SnapshotKindId from internal.
36
- export { KindId, SnapshotKindId };
15
+ export const KindId = internal.KindId;
16
+ export type KindId = typeof internal.KindId;
17
+ export const SnapshotKindId = internal.SnapshotKindId;
18
+ export type SnapshotKindId = typeof internal.SnapshotKindId;
37
19
 
38
20
  // NOTE: Relation does not extend Obj so that, for example, we can prevent Relations from being used as source and target objects.
39
21
  // However, we generally refer to Obj and Relation instances as "objects",
40
22
  // and many API methods accept both Obj.Unknown and Relation.Unknown (i.e., Entity.Unknown) instances.
41
23
 
42
- export const Kind = EntityKind;
43
- export type Kind = EntityKind;
44
- export const KindSchema = EntityKindSchema;
24
+ export const Kind = internal.EntityKind;
25
+ export type Kind = internal.EntityKind;
26
+ export const KindSchema = internal.EntityKindSchema;
45
27
 
46
28
  /**
47
29
  * Assigns a kind to an Object or Relation instance.
@@ -89,7 +71,45 @@ export interface Any extends OfKind<Kind> {
89
71
  [key: string]: unknown;
90
72
  }
91
73
 
92
- export const getKind = getEntityKind;
74
+ /**
75
+ * Returns all properties of an object or relation except for the id and kind.
76
+ */
77
+ export type Properties<T> = Omit<T, 'id' | KindId | Relation.Source | Relation.Target>;
78
+
79
+ /**
80
+ * Check if a value is an ECHO entity (object or relation).
81
+ * Returns `false` for snapshots.
82
+ */
83
+ export const isEntity = (value: unknown): value is Unknown => {
84
+ if (typeof value !== 'object' || value === null) {
85
+ return false;
86
+ }
87
+ return (value as any)[KindId] !== undefined;
88
+ };
89
+
90
+ /**
91
+ * Check if a value is an ECHO entity snapshot.
92
+ * Returns `false` for entities.
93
+ */
94
+ export const isSnapshot = (value: unknown): value is Snapshot => {
95
+ if (typeof value !== 'object' || value === null) {
96
+ return false;
97
+ }
98
+ return (value as any)[SnapshotKindId] !== undefined;
99
+ };
100
+
101
+ // TODO(dmaretskyi): Type introspection -- move to kind.
102
+ export const getKind = internal.getEntityKind;
103
+
104
+ /**
105
+ * Property that accesses metadata for an entity.
106
+ */
107
+ export const Meta: unique symbol = internal.MetaId as any;
108
+
109
+ /**
110
+ * Property that accesses metadata for an entity.
111
+ */
112
+ export type Meta = typeof Meta;
93
113
 
94
114
  //
95
115
  // Entity-level functions that work on any entity (object or relation).
@@ -100,27 +120,33 @@ export const getKind = getEntityKind;
100
120
  /**
101
121
  * JSON representation of an entity.
102
122
  */
103
- export type JSON = ObjectJSON;
123
+ export type JSON = internal.ObjectJSON;
104
124
 
105
125
  /**
106
126
  * Get the DXN of an entity (object or relation).
107
127
  */
108
- export const getDXN = (entity: Unknown | Snapshot): DXN => getDXN$(entity);
128
+ export const getDXN = (entity: Unknown | Snapshot): DXN => internal.getDXN(entity);
109
129
 
110
130
  /**
111
131
  * Get the DXN of an entity's type.
112
132
  */
113
- export const getTypeDXN = getTypeDXN$;
133
+ export const getTypeDXN = internal.getTypeDXN;
134
+
135
+ /**
136
+ * Get the schema of an entity.
137
+ * Returns the branded ECHO schema used to create the entity.
138
+ */
139
+ export const getSchema: (entity: Unknown | Snapshot) => Type.AnyEntity | undefined = internal.getSchema as any;
114
140
 
115
141
  /**
116
142
  * Get the typename of an entity's type.
117
143
  */
118
- export const getTypename = (entity: Unknown | Snapshot): string | undefined => getTypename$(entity);
144
+ export const getTypename = (entity: Unknown | Snapshot): string | undefined => internal.getTypename(entity);
119
145
 
120
146
  /**
121
147
  * Get the database an entity belongs to.
122
148
  */
123
- export const getDatabase = (entity: Unknown | Snapshot): any | undefined => getDatabase$(entity);
149
+ export const getDatabase = (entity: Unknown | Snapshot): any | undefined => internal.getDatabase(entity);
124
150
 
125
151
  /**
126
152
  * Get the metadata for an entity.
@@ -128,43 +154,43 @@ export const getDatabase = (entity: Unknown | Snapshot): any | undefined => getD
128
154
  * Returns read-only meta when passed a regular entity or snapshot.
129
155
  */
130
156
  // TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.
131
- export function getMeta(entity: Mutable<Unknown>): ObjectMeta;
132
- export function getMeta(entity: Unknown | Snapshot): ReadonlyMeta;
133
- export function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): ObjectMeta | ReadonlyMeta {
134
- return getMeta$(entity);
157
+ export function getMeta(entity: Mutable<Unknown>): internal.ObjectMeta;
158
+ export function getMeta(entity: Unknown | Snapshot): internal.ReadonlyMeta;
159
+ export function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): internal.ObjectMeta | internal.ReadonlyMeta {
160
+ return internal.getMetaChecked(entity);
135
161
  }
136
162
 
137
163
  /**
138
164
  * Get foreign keys for an entity from the specified source.
139
165
  */
140
- export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => getKeys$(entity, source);
166
+ export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => internal.getKeys(entity, source);
141
167
 
142
168
  /**
143
169
  * Check if an entity is deleted.
144
170
  */
145
- export const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(entity);
171
+ export const isDeleted = (entity: Unknown | Snapshot): boolean => internal.isDeleted(entity);
146
172
 
147
173
  /**
148
174
  * Get the label of an entity.
149
175
  */
150
- export const getLabel = (entity: Unknown | Snapshot): string | undefined => getLabel$(entity);
176
+ export const getLabel = (entity: Unknown | Snapshot): string | undefined => internal.getLabel(entity);
151
177
 
152
178
  /**
153
179
  * Get the description of an entity.
154
180
  */
155
- export const getDescription = (entity: Unknown | Snapshot): string | undefined => getDescription$(entity);
181
+ export const getDescription = (entity: Unknown | Snapshot): string | undefined => internal.getDescription(entity);
156
182
 
157
183
  /**
158
184
  * Convert an entity to its JSON representation.
159
185
  */
160
- export const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);
186
+ export const toJSON = (entity: Unknown | Snapshot): JSON => internal.objectToJSON(entity);
161
187
 
162
188
  /**
163
189
  * Subscribe to changes on an entity (object or relation).
164
190
  * @returns Unsubscribe function.
165
191
  */
166
192
  export const subscribe = (entity: Unknown, callback: () => void): (() => void) => {
167
- return subscribe$(entity, callback);
193
+ return internal.subscribe(entity, callback);
168
194
  };
169
195
 
170
196
  //
@@ -172,15 +198,15 @@ export const subscribe = (entity: Unknown, callback: () => void): (() => void) =
172
198
  //
173
199
 
174
200
  /**
175
- * Used to provide a mutable view of an entity within `Entity.change`.
201
+ * Used to provide a mutable view of an entity within `Entity.update`.
176
202
  */
177
- export type { Mutable };
203
+ export type Mutable<T> = internal.Mutable<T>;
178
204
 
179
205
  /**
180
206
  * Perform mutations on an entity (object or relation) within a change context.
181
207
  *
182
208
  * Entities are read-only by default. Mutations are batched and notifications fire
183
- * when the callback completes. Direct mutations outside of `Entity.change` will throw
209
+ * when the callback completes. Direct mutations outside of `Entity.update` will throw
184
210
  * at runtime.
185
211
  *
186
212
  * @param entity - The echo entity (object or relation) to mutate.
@@ -188,30 +214,30 @@ export type { Mutable };
188
214
  *
189
215
  * @example
190
216
  * ```typescript
191
- * // Mutate within Entity.change
192
- * Entity.change(entity, (e) => {
193
- * e.name = 'Updated';
194
- * e.count = 42;
217
+ * // Mutate within Entity.update
218
+ * Entity.update(entity, (obj) => {
219
+ * obj.name = 'Updated';
220
+ * obj.count = 42;
195
221
  * });
196
222
  *
197
223
  * // Direct mutation throws
198
- * entity.name = 'Bob'; // Error: Cannot modify outside Entity.change()
224
+ * entity.name = 'Bob'; // Error: Cannot modify outside Entity.update()
199
225
  * ```
200
226
  *
201
- * Note: For type-specific operations, prefer `Obj.change` or `Relation.change`.
227
+ * Note: For type-specific operations, prefer `Obj.update` or `Relation.update`.
202
228
  */
203
- export const change = <T extends Unknown>(entity: T, callback: ChangeCallback<T>): void => {
204
- change$(entity, callback);
229
+ export const update = <T extends Unknown>(entity: T, callback: internal.ChangeCallback<T>): void => {
230
+ internal.change(entity, callback);
205
231
  };
206
232
 
207
233
  /**
208
234
  * Add a tag to an entity.
209
- * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.
235
+ * Must be called within an `Entity.update`, `Obj.update`, or `Relation.update` callback.
210
236
  */
211
- export const addTag = (entity: Mutable<Unknown>, tag: string): void => addTag$(entity, tag);
237
+ export const addTag = (entity: Mutable<Unknown>, tag: string): void => internal.addTag(entity, tag);
212
238
 
213
239
  /**
214
240
  * Remove a tag from an entity.
215
- * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.
241
+ * Must be called within an `Entity.update`, `Obj.update`, or `Relation.update` callback.
216
242
  */
217
- export const removeTag = (entity: Mutable<Unknown>, tag: string): void => removeTag$(entity, tag);
243
+ export const removeTag = (entity: Mutable<Unknown>, tag: string): void => internal.removeTag(entity, tag);