@dxos/echo 0.8.4-main.3eb6e50203 → 0.8.4-main.3fbcb4aa9b

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 (563) hide show
  1. package/README.md +4 -4
  2. package/dist/lib/neutral/Annotation.mjs +7 -3
  3. package/dist/lib/neutral/Database.mjs +8 -4
  4. package/dist/lib/neutral/Entity.mjs +24 -14
  5. package/dist/lib/neutral/Err.mjs +1 -1
  6. package/dist/lib/neutral/Extension.mjs +18 -0
  7. package/dist/lib/neutral/Extension.mjs.map +7 -0
  8. package/dist/lib/neutral/Feed.mjs +50 -0
  9. package/dist/lib/neutral/Feed.mjs.map +7 -0
  10. package/dist/lib/neutral/Filter.mjs +21 -10
  11. package/dist/lib/neutral/Format.mjs +3 -3
  12. package/dist/lib/neutral/JsonSchema.mjs +9 -9
  13. package/dist/lib/neutral/Key.mjs +1 -1
  14. package/dist/lib/neutral/Migration.mjs +17 -0
  15. package/dist/lib/neutral/Migration.mjs.map +7 -0
  16. package/dist/lib/neutral/Obj.mjs +26 -17
  17. package/dist/lib/neutral/Order.mjs +1 -1
  18. package/dist/lib/neutral/Query.mjs +21 -9
  19. package/dist/lib/neutral/QueryResult.mjs +1 -1
  20. package/dist/lib/neutral/Ref.mjs +9 -7
  21. package/dist/lib/neutral/Relation.mjs +23 -13
  22. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  23. package/dist/lib/neutral/Tag.mjs +14 -10
  24. package/dist/lib/neutral/Type.mjs +13 -23
  25. package/dist/lib/neutral/{chunk-N2QNHMT5.mjs → chunk-44HT3MEC.mjs} +2 -2
  26. package/dist/lib/neutral/{chunk-N2QNHMT5.mjs.map → chunk-44HT3MEC.mjs.map} +1 -1
  27. package/dist/lib/neutral/{chunk-XAJMXQ4H.mjs → chunk-5SL5LDLD.mjs} +6 -2
  28. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-6VIJV543.mjs +34 -0
  30. package/dist/lib/neutral/chunk-6VIJV543.mjs.map +7 -0
  31. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
  32. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs → chunk-BICZKPQG.mjs} +1 -1
  33. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs.map → chunk-BICZKPQG.mjs.map} +1 -1
  34. package/dist/lib/neutral/{chunk-B4FLOYG7.mjs → chunk-FHYIM4RD.mjs} +18 -20
  35. package/dist/lib/neutral/chunk-FHYIM4RD.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-FZHVQEHN.mjs +81 -0
  37. package/dist/lib/neutral/chunk-FZHVQEHN.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  39. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  40. package/dist/lib/neutral/{chunk-EXAYCLIM.mjs → chunk-HPNQTEEQ.mjs} +5 -5
  41. package/dist/lib/neutral/chunk-HPNQTEEQ.mjs.map +7 -0
  42. package/dist/lib/neutral/{chunk-YPIP3WGI.mjs → chunk-LVGOVFDV.mjs} +40 -12
  43. package/dist/lib/neutral/chunk-LVGOVFDV.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-MPAI2MHO.mjs +346 -0
  45. package/dist/lib/neutral/chunk-MPAI2MHO.mjs.map +7 -0
  46. package/dist/lib/neutral/{chunk-KB7RIVLK.mjs → chunk-N4B7FHQT.mjs} +4 -4
  47. package/dist/lib/neutral/{chunk-KB7RIVLK.mjs.map → chunk-N4B7FHQT.mjs.map} +2 -2
  48. package/dist/lib/neutral/chunk-O5LRY6CO.mjs +734 -0
  49. package/dist/lib/neutral/chunk-O5LRY6CO.mjs.map +7 -0
  50. package/dist/lib/neutral/{chunk-VYEWMV5U.mjs → chunk-QGMIH2SN.mjs} +8 -4
  51. package/dist/lib/neutral/chunk-QGMIH2SN.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-QXIANHKU.mjs +206 -0
  53. package/dist/lib/neutral/chunk-QXIANHKU.mjs.map +7 -0
  54. package/dist/lib/neutral/{chunk-UMECVTXM.mjs → chunk-RF7ZBZ4A.mjs} +72 -5
  55. package/dist/lib/neutral/chunk-RF7ZBZ4A.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-S7IMFVTB.mjs +132 -0
  57. package/dist/lib/neutral/chunk-S7IMFVTB.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-SJKBWMJY.mjs +2436 -0
  59. package/dist/lib/neutral/chunk-SJKBWMJY.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-SUZMWP3Y.mjs +36 -0
  61. package/dist/lib/neutral/chunk-SUZMWP3Y.mjs.map +7 -0
  62. package/dist/lib/neutral/{chunk-HQXQWXLH.mjs → chunk-SW5CUSBY.mjs} +183 -32
  63. package/dist/lib/neutral/chunk-SW5CUSBY.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-RIMHNJ3E.mjs → chunk-TNBK56IN.mjs} +98 -44
  65. package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-7WE7SBA2.mjs → chunk-TRPZU2HV.mjs} +13 -13
  67. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-ROKO4RKJ.mjs → chunk-TTCSATUD.mjs} +2 -2
  69. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  70. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  71. package/dist/lib/neutral/chunk-VGKLHHRT.mjs +318 -0
  72. package/dist/lib/neutral/chunk-VGKLHHRT.mjs.map +7 -0
  73. package/dist/lib/neutral/{chunk-TMLVKIMX.mjs → chunk-VYAGNFSJ.mjs} +8 -3
  74. package/dist/lib/neutral/chunk-VYAGNFSJ.mjs.map +7 -0
  75. package/dist/lib/neutral/{chunk-7YWDDFPH.mjs → chunk-WRVRDZDA.mjs} +77 -58
  76. package/dist/lib/neutral/chunk-WRVRDZDA.mjs.map +7 -0
  77. package/dist/lib/neutral/{chunk-MXQJZCPY.mjs → chunk-ZISMEVKD.mjs} +1 -1
  78. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
  79. package/dist/lib/neutral/index.mjs +51 -28
  80. package/dist/lib/neutral/internal/index.mjs +52 -38
  81. package/dist/lib/neutral/meta.json +1 -1
  82. package/dist/lib/neutral/testing/index.mjs +199 -136
  83. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  84. package/dist/types/src/Annotation.d.ts +3 -3
  85. package/dist/types/src/Annotation.d.ts.map +1 -1
  86. package/dist/types/src/Collection.d.ts +16 -0
  87. package/dist/types/src/Collection.d.ts.map +1 -0
  88. package/dist/types/src/Database.d.ts +20 -35
  89. package/dist/types/src/Database.d.ts.map +1 -1
  90. package/dist/types/src/Dataset.d.ts +19 -0
  91. package/dist/types/src/Dataset.d.ts.map +1 -0
  92. package/dist/types/src/Entity.d.ts +54 -22
  93. package/dist/types/src/Entity.d.ts.map +1 -1
  94. package/dist/types/src/Err.d.ts +18 -18
  95. package/dist/types/src/Err.d.ts.map +1 -1
  96. package/dist/types/src/Extension.d.ts +80 -0
  97. package/dist/types/src/Extension.d.ts.map +1 -0
  98. package/dist/types/src/Extension.test.d.ts +2 -0
  99. package/dist/types/src/Extension.test.d.ts.map +1 -0
  100. package/dist/types/src/Feed.d.ts +182 -0
  101. package/dist/types/src/Feed.d.ts.map +1 -0
  102. package/dist/types/src/Filter.d.ts +34 -5
  103. package/dist/types/src/Filter.d.ts.map +1 -1
  104. package/dist/types/src/Filter.test.d.ts +2 -0
  105. package/dist/types/src/Filter.test.d.ts.map +1 -0
  106. package/dist/types/src/Format.d.ts +3 -3
  107. package/dist/types/src/Format.d.ts.map +1 -1
  108. package/dist/types/src/Hypergraph.d.ts +8 -3
  109. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  110. package/dist/types/src/Json.d.ts +33 -0
  111. package/dist/types/src/Json.d.ts.map +1 -0
  112. package/dist/types/src/Json.test.d.ts +2 -0
  113. package/dist/types/src/Json.test.d.ts.map +1 -0
  114. package/dist/types/src/JsonSchema.d.ts +11 -4
  115. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  116. package/dist/types/src/Migration.d.ts +57 -0
  117. package/dist/types/src/Migration.d.ts.map +1 -0
  118. package/dist/types/src/Obj.d.ts +109 -60
  119. package/dist/types/src/Obj.d.ts.map +1 -1
  120. package/dist/types/src/Order.d.ts.map +1 -1
  121. package/dist/types/src/Query.d.ts +105 -17
  122. package/dist/types/src/Query.d.ts.map +1 -1
  123. package/dist/types/src/Ref.d.ts +58 -10
  124. package/dist/types/src/Ref.d.ts.map +1 -1
  125. package/dist/types/src/Relation.d.ts +86 -40
  126. package/dist/types/src/Relation.d.ts.map +1 -1
  127. package/dist/types/src/SchemaRegistry.d.ts +4 -4
  128. package/dist/types/src/SchemaRegistry.d.ts.map +1 -1
  129. package/dist/types/src/Tag.d.ts +2 -1
  130. package/dist/types/src/Tag.d.ts.map +1 -1
  131. package/dist/types/src/Type.d.ts +51 -180
  132. package/dist/types/src/Type.d.ts.map +1 -1
  133. package/dist/types/src/View.d.ts +68 -0
  134. package/dist/types/src/View.d.ts.map +1 -0
  135. package/dist/types/src/exemplars.test.d.ts +2 -0
  136. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  137. package/dist/types/src/index.d.ts +7 -0
  138. package/dist/types/src/index.d.ts.map +1 -1
  139. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +65 -2
  140. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  141. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  142. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  143. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  144. package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
  145. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  146. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +2 -2
  147. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  148. package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
  149. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  150. package/dist/types/src/internal/{entities → Entity}/entity.d.ts +3 -3
  151. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  152. package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
  153. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  154. package/dist/types/src/internal/{entities → Entity}/model.d.ts +2 -26
  155. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  156. package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
  157. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  158. package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
  159. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  160. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  161. package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
  162. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  163. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  164. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  165. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  166. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  167. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  168. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  169. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  170. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  171. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  172. package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
  173. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  174. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  175. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  176. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  177. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  178. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  179. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +37 -37
  180. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  181. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +1 -1
  182. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  183. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  184. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  185. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  186. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
  187. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  188. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  189. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  190. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  191. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  192. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  193. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  194. package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +13 -5
  195. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  196. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  197. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  198. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  199. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  200. package/dist/types/src/internal/{object → Obj}/set-value.d.ts +2 -2
  201. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  202. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  203. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  204. package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +4 -4
  205. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  206. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  207. package/dist/types/src/internal/Query.d.ts +10 -0
  208. package/dist/types/src/internal/Query.d.ts.map +1 -0
  209. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  210. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
  211. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  212. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +15 -2
  213. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  214. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  215. package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
  216. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  217. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  218. package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +7 -7
  219. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  220. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  221. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  222. package/dist/types/src/internal/{schema → Type}/persistent-schema.d.ts +2 -2
  223. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  224. package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
  225. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  226. package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
  227. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  228. package/dist/types/src/internal/common/index.d.ts +4 -0
  229. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  230. package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +1 -1
  231. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  232. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  233. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  234. package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
  235. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  236. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  237. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  238. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  239. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  240. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  241. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  242. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  243. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  244. package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
  245. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  246. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
  247. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
  248. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  249. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  250. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  251. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  252. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  253. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  254. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  255. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  256. package/dist/types/src/internal/{types → common/types}/base.d.ts +1 -0
  257. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  258. package/dist/types/src/internal/{types → common/types}/entity.d.ts +5 -5
  259. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  260. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  261. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  262. package/dist/types/src/internal/{types → common/types}/meta.d.ts +2 -1
  263. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  264. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  265. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  266. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  267. package/dist/types/src/internal/{types → common/types}/version.d.ts +2 -2
  268. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  269. package/dist/types/src/internal/index.d.ts +9 -10
  270. package/dist/types/src/internal/index.d.ts.map +1 -1
  271. package/dist/types/src/testing/test-data.d.ts +8 -8
  272. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  273. package/dist/types/src/testing/test-schema.d.ts +47 -46
  274. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  275. package/dist/types/src/testing/util.d.ts.map +1 -1
  276. package/dist/types/tsconfig.tsbuildinfo +1 -1
  277. package/package.json +29 -14
  278. package/src/Annotation.ts +7 -3
  279. package/src/Collection.ts +37 -0
  280. package/src/Database.ts +63 -64
  281. package/src/Dataset.ts +26 -0
  282. package/src/Entity.ts +87 -61
  283. package/src/Err.ts +2 -0
  284. package/src/Extension.test.ts +235 -0
  285. package/src/Extension.ts +122 -0
  286. package/src/Feed.ts +304 -0
  287. package/src/Filter.test.ts +90 -0
  288. package/src/Filter.ts +85 -7
  289. package/src/Format.ts +3 -3
  290. package/src/Hypergraph.ts +9 -4
  291. package/src/Json.test.ts +175 -0
  292. package/src/Json.ts +102 -0
  293. package/src/JsonSchema.ts +14 -4
  294. package/src/Migration.ts +94 -0
  295. package/src/Obj.test.ts +112 -15
  296. package/src/Obj.ts +302 -166
  297. package/src/Order.ts +3 -1
  298. package/src/Query.test.ts +372 -15
  299. package/src/Query.ts +269 -26
  300. package/src/Ref.ts +64 -11
  301. package/src/Relation.test.ts +8 -2
  302. package/src/Relation.ts +183 -147
  303. package/src/SchemaRegistry.ts +5 -4
  304. package/src/Tag.ts +6 -5
  305. package/src/Type.test.ts +10 -10
  306. package/src/Type.ts +70 -303
  307. package/src/View.ts +107 -0
  308. package/src/exemplars.test.ts +21 -0
  309. package/src/index.ts +8 -0
  310. package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -7
  311. package/src/internal/{annotations → Annotation}/annotations.ts +122 -19
  312. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  313. package/src/internal/{api → Annotation}/sorting.ts +2 -4
  314. package/src/internal/{annotations → Annotation}/util.ts +1 -1
  315. package/src/internal/{api/entity.ts → Entity/api.ts} +3 -2
  316. package/src/internal/{entities → Entity}/entity.ts +6 -4
  317. package/src/internal/{entities → Entity}/index.ts +2 -0
  318. package/src/internal/{entities → Entity}/model.ts +13 -42
  319. package/src/internal/{entities → Entity}/object.ts +2 -3
  320. package/src/internal/{entities → Entity}/relation.ts +19 -36
  321. package/src/internal/{api → Entity}/version.ts +2 -2
  322. package/src/internal/{formats → Format}/date.test.ts +1 -2
  323. package/src/internal/{formats → Format}/format.test.ts +1 -2
  324. package/src/internal/{formats → Format}/types.ts +2 -2
  325. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  326. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
  327. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -49
  328. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +6 -5
  329. package/src/internal/{object → Obj}/clone.ts +3 -3
  330. package/src/internal/{object → Obj}/common.ts +2 -2
  331. package/src/internal/{object → Obj}/create-object.test.ts +5 -7
  332. package/src/internal/{object → Obj}/create-object.ts +5 -6
  333. package/src/internal/{object → Obj}/deleted.ts +2 -2
  334. package/src/internal/{object → Obj}/inspect.ts +2 -2
  335. package/src/internal/{object → Obj}/json-serializer.test.ts +31 -9
  336. package/src/internal/{object → Obj}/json-serializer.ts +52 -27
  337. package/src/internal/{object → Obj}/schema-validator.ts +1 -1
  338. package/src/internal/{object → Obj}/set-value.test.ts +24 -24
  339. package/src/internal/{object → Obj}/set-value.ts +3 -3
  340. package/src/internal/{object → Obj}/snapshot.ts +35 -23
  341. package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
  342. package/src/internal/{object → Obj}/typed-object.ts +4 -4
  343. package/src/internal/Query.ts +137 -0
  344. package/src/internal/{ref → Ref}/ref-array.ts +1 -2
  345. package/src/internal/{ref → Ref}/ref.test.ts +4 -5
  346. package/src/internal/{ref → Ref}/ref.ts +20 -3
  347. package/src/internal/{schema → Type}/compose.test.ts +5 -6
  348. package/src/internal/{schema → Type}/compose.ts +1 -1
  349. package/src/internal/{schema → Type}/echo-schema.ts +9 -10
  350. package/src/internal/{schema → Type}/manipulation.ts +1 -1
  351. package/src/internal/{schema → Type}/persistent-schema.ts +9 -4
  352. package/src/internal/{README.md → common/README.md} +2 -2
  353. package/src/internal/{api → common/api}/index.ts +0 -4
  354. package/src/internal/{api → common/api}/meta.ts +3 -3
  355. package/src/internal/common/index.ts +7 -0
  356. package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
  357. package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
  358. package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
  359. package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
  360. package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
  361. package/src/internal/{proxy → common/proxy}/make-object.ts +1 -2
  362. package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
  363. package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
  364. package/src/internal/common/proxy/reactive.test.ts +54 -0
  365. package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
  366. package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
  367. package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -7
  368. package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -13
  369. package/src/internal/{proxy → common/proxy}/typed-object.test.ts +5 -6
  370. package/src/internal/{types → common/types}/base.ts +1 -1
  371. package/src/internal/{types → common/types}/entity.ts +2 -2
  372. package/src/internal/{types → common/types}/index.ts +1 -0
  373. package/src/internal/{types → common/types}/meta.ts +3 -1
  374. package/src/internal/common/types/model-symbols.ts +69 -0
  375. package/src/internal/{types → common/types}/version.ts +2 -3
  376. package/src/internal/index.ts +9 -31
  377. package/src/testing/api.test.ts +4 -5
  378. package/src/testing/test-data.ts +157 -98
  379. package/src/testing/test-schema.ts +20 -18
  380. package/dist/lib/neutral/chunk-7WE7SBA2.mjs.map +0 -7
  381. package/dist/lib/neutral/chunk-7YWDDFPH.mjs.map +0 -7
  382. package/dist/lib/neutral/chunk-B4FLOYG7.mjs.map +0 -7
  383. package/dist/lib/neutral/chunk-EXAYCLIM.mjs.map +0 -7
  384. package/dist/lib/neutral/chunk-F6BTBXL7.mjs +0 -171
  385. package/dist/lib/neutral/chunk-F6BTBXL7.mjs.map +0 -7
  386. package/dist/lib/neutral/chunk-HQXQWXLH.mjs.map +0 -7
  387. package/dist/lib/neutral/chunk-MXQJZCPY.mjs.map +0 -7
  388. package/dist/lib/neutral/chunk-RCBBZLVM.mjs +0 -142
  389. package/dist/lib/neutral/chunk-RCBBZLVM.mjs.map +0 -7
  390. package/dist/lib/neutral/chunk-RIMHNJ3E.mjs.map +0 -7
  391. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +0 -7
  392. package/dist/lib/neutral/chunk-TMLVKIMX.mjs.map +0 -7
  393. package/dist/lib/neutral/chunk-UMECVTXM.mjs.map +0 -7
  394. package/dist/lib/neutral/chunk-VJ2H5MOJ.mjs +0 -3905
  395. package/dist/lib/neutral/chunk-VJ2H5MOJ.mjs.map +0 -7
  396. package/dist/lib/neutral/chunk-VYEWMV5U.mjs.map +0 -7
  397. package/dist/lib/neutral/chunk-X2MPMYYN.mjs +0 -13
  398. package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +0 -7
  399. package/dist/lib/neutral/chunk-XAJMXQ4H.mjs.map +0 -7
  400. package/dist/lib/neutral/chunk-YPIP3WGI.mjs.map +0 -7
  401. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  402. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  403. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  404. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  405. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  406. package/dist/types/src/internal/api/annotations.d.ts +0 -23
  407. package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
  408. package/dist/types/src/internal/api/entity.d.ts.map +0 -1
  409. package/dist/types/src/internal/api/index.d.ts.map +0 -1
  410. package/dist/types/src/internal/api/meta.d.ts.map +0 -1
  411. package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
  412. package/dist/types/src/internal/api/version.d.ts.map +0 -1
  413. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  414. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  415. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  416. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  417. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  418. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  419. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  420. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  421. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  422. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  423. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  424. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  425. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  426. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  427. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  428. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  429. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  430. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  431. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  432. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  433. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  434. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  435. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  436. package/dist/types/src/internal/object/clone.d.ts.map +0 -1
  437. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  438. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  439. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  440. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  441. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  442. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  443. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  444. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  445. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  446. package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
  447. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  448. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  449. package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
  450. package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
  451. package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
  452. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  453. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  454. package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
  455. package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
  456. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
  457. package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
  458. package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
  459. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  460. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  461. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
  462. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  463. package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
  464. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
  465. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
  466. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
  467. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
  468. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  469. package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
  470. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  471. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  472. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  473. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  474. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  475. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  476. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  477. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  478. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  479. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  480. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  481. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  482. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  483. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  484. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  485. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  486. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  487. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  488. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  489. package/src/internal/api/annotations.ts +0 -60
  490. /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
  491. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
  492. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  493. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  494. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  495. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  496. /package/dist/types/src/internal/{formats → Format}/format.d.ts +0 -0
  497. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  498. /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
  499. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  500. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  501. /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
  502. /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
  503. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  504. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  505. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  506. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  507. /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
  508. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  509. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  510. /package/dist/types/src/internal/{object → Obj}/ids.d.ts +0 -0
  511. /package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -0
  512. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  513. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  514. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  515. /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
  516. /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
  517. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  518. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  519. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  520. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  521. /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
  522. /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
  523. /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
  524. /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
  525. /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
  526. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  527. /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
  528. /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
  529. /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
  530. /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
  531. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
  532. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
  533. /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
  534. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  535. /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
  536. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +0 -0
  537. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  538. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  539. /package/dist/types/src/internal/{types → common/types}/typename.d.ts +0 -0
  540. /package/src/internal/{entities → Entity}/util.ts +0 -0
  541. /package/src/internal/{formats → Format}/date.ts +0 -0
  542. /package/src/internal/{formats → Format}/format.ts +0 -0
  543. /package/src/internal/{formats → Format}/index.ts +0 -0
  544. /package/src/internal/{formats → Format}/number.ts +0 -0
  545. /package/src/internal/{formats → Format}/object.ts +0 -0
  546. /package/src/internal/{formats → Format}/select.ts +0 -0
  547. /package/src/internal/{formats → Format}/string.ts +0 -0
  548. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  549. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  550. /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
  551. /package/src/internal/{object → Obj}/ids.ts +0 -0
  552. /package/src/internal/{object → Obj}/index.ts +0 -0
  553. /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
  554. /package/src/internal/{ref → Ref}/index.ts +0 -0
  555. /package/src/internal/{schema → Type}/index.ts +0 -0
  556. /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
  557. /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
  558. /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
  559. /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
  560. /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
  561. /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
  562. /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
  563. /package/src/internal/{types → common/types}/typename.ts +0 -0
package/src/Relation.ts CHANGED
@@ -2,80 +2,35 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import type * as Schema from 'effect/Schema';
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
6
8
 
7
9
  import { raise } from '@dxos/debug';
8
10
  import type { ForeignKey } from '@dxos/echo-protocol';
9
- import { createJsonPath, getValue as getValue$ } from '@dxos/effect';
11
+ import { createJsonPath } from '@dxos/effect';
10
12
  import { assertArgument, invariant } from '@dxos/invariant';
11
13
  import { DXN, type ObjectId } from '@dxos/keys';
12
14
  import { assumeType } from '@dxos/util';
13
15
 
14
16
  import type * as Database from './Database';
15
17
  import * as Entity from './Entity';
16
- import {
17
- type ObjectJSON as APIJSON,
18
- ATTR_RELATION_SOURCE,
19
- ATTR_RELATION_TARGET,
20
- type AnyEntity,
21
- type Comparator as ApiComparator,
22
- type Meta as ApiMeta,
23
- type ReadonlyMeta as ApiReadonlyMeta,
24
- type EntityVersion as ApiVersion,
25
- type ChangeCallback,
26
- EntityKind,
27
- type InternalObjectProps,
28
- type KindId,
29
- MetaId,
30
- type Mutable,
31
- type ObjectMeta,
32
- ParentId,
33
- RelationSourceDXNId,
34
- RelationSourceId,
35
- RelationTargetDXNId,
36
- RelationTargetId,
37
- SnapshotKindId,
38
- VersionTypeId,
39
- addTag as addTag$,
40
- change as change$,
41
- deleteKeys as deleteKeys$,
42
- getDXN as getDXN$,
43
- getDatabase as getDatabase$,
44
- getDescription as getDescription$,
45
- getKeys as getKeys$,
46
- getLabel as getLabel$,
47
- getMetaChecked as getMeta$,
48
- getObjectDXN,
49
- getSchema as getSchema$,
50
- getSnapshot as getSnapshot$,
51
- getTypeAnnotation,
52
- getTypeDXN as getTypeDXN$,
53
- getTypename as getTypename$,
54
- isDeleted as isDeleted$,
55
- isVersion,
56
- makeObject,
57
- removeTag as removeTag$,
58
- setDescription as setDescription$,
59
- setLabel as setLabel$,
60
- setValue as setValue$,
61
- sort as sort$,
62
- sortByLabel as sortByLabel$,
63
- sortByTypename as sortByTypename$,
64
- subscribe as subscribe$,
65
- objectToJSON as toJSON$,
66
- version as version$,
67
- } from './internal';
68
- import type * as Obj from './Obj';
18
+ import * as internal from './internal';
19
+ import * as entityInternal from './internal/Entity';
20
+ import * as Obj from './Obj';
69
21
  import type * as Type from './Type';
70
22
 
23
+ export type Endpoints<Source, Target> = {
24
+ [Source]: Source;
25
+ [Target]: Target;
26
+ };
27
+
71
28
  /**
72
29
  * Base type for all ECHO relations.
73
30
  * @private
74
31
  */
75
32
  interface BaseRelation<Source, Target>
76
- extends AnyEntity,
77
- Type.Relation.Endpoints<Source, Target>,
78
- Entity.OfKind<EntityKind.Relation> {}
33
+ extends internal.AnyEntity, Endpoints<Source, Target>, Entity.OfKind<internal.EntityKind.Relation> {}
79
34
 
80
35
  /**
81
36
  * Relation with no known properties beyond id, kind, source, and target.
@@ -86,49 +41,106 @@ interface BaseRelation<Source, Target>
86
41
  */
87
42
  export interface Unknown extends BaseRelation<Obj.Unknown, Obj.Unknown> {}
88
43
 
44
+ /**
45
+ * Runtime Effect schema for any ECHO relation.
46
+ * Use for validation, parsing, or as a reference target for collections.
47
+ * A relation has `id`, source, and target fields plus any additional properties.
48
+ *
49
+ * NOTE: `Schema.is(Type.Relation)` does STRUCTURAL validation only (checks for `id` field).
50
+ * Use `Relation.isRelation()` for proper ECHO instance type guards that check the KindId brand.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * // Structural type guard (accepts any object with id field)
55
+ * if (Schema.is(Type.Relation)(unknownValue)) { ... }
56
+ *
57
+ * // ECHO instance type guard (checks KindId brand)
58
+ * if (Relation.isRelation(unknownValue)) { ... }
59
+ * ```
60
+ */
61
+ // TODO(dmaretskyi): Change ObjModule.Any to ObjModule.Unknown to have stricter types.
62
+ export const Unknown: Type.Relation<Unknown, Obj.Any, Obj.Any> = Schema.Struct({
63
+ id: Schema.String,
64
+ }).pipe(
65
+ Schema.extend(Schema.Record({ key: Schema.String, value: Schema.Unknown })),
66
+ // TODO(dmaretskyi): Clean this up.
67
+ // NOTE: The EchoRelationSchema annotation is required for Ref.Ref(Relation.Unknown) to work.
68
+ // The typename/version/source/target only satisfy ECHO schema machinery for reference targets.
69
+ internal.EchoRelationSchema({
70
+ typename: 'org.dxos.schema.anyRelation',
71
+ version: '0.0.0',
72
+ source: Obj.Unknown,
73
+ target: Obj.Unknown,
74
+ }),
75
+ (schema) =>
76
+ Object.assign(schema, {
77
+ [internal.SchemaKindId]: (schema as any)[internal.SchemaKindId],
78
+ }) as unknown as Type.Relation<Unknown, Obj.Any, Obj.Any>,
79
+ );
80
+
89
81
  /**
90
82
  * Relation type with specific source and target types.
91
83
  */
92
- export type Relation<Source extends Obj.Unknown, Target extends Obj.Unknown, Props> = BaseRelation<Source, Target> &
84
+ export type OfShape<Source extends Obj.Unknown, Target extends Obj.Unknown, Props> = BaseRelation<Source, Target> &
93
85
  Props;
94
86
 
95
87
  /**
96
88
  * Base type for snapshot relations (has SnapshotKindId instead of KindId).
97
89
  */
98
- interface BaseRelationSnapshot<Source, Target> extends AnyEntity, Type.Relation.Endpoints<Source, Target> {
99
- readonly [SnapshotKindId]: EntityKind.Relation;
90
+ interface BaseRelationSnapshot<Source, Target> extends internal.AnyEntity, Endpoints<Source, Target> {
91
+ readonly [Entity.SnapshotKindId]: internal.EntityKind.Relation;
100
92
  readonly id: ObjectId;
101
93
  }
102
94
 
95
+ /**
96
+ * JSON-encoded properties for relations.
97
+ */
98
+ export interface BaseRelationJson {
99
+ id: string;
100
+ [internal.ATTR_RELATION_SOURCE]: string;
101
+ [internal.ATTR_RELATION_TARGET]: string;
102
+ }
103
+
103
104
  /**
104
105
  * Immutable snapshot of an ECHO relation.
105
106
  * Branded with SnapshotKindId (not KindId).
106
107
  * Property values are frozen at the time the snapshot was created.
107
108
  * Returned by getSnapshot() and hooks.
108
109
  */
109
- export type Snapshot<T extends Unknown = Unknown> = Omit<T, KindId> & BaseRelationSnapshot<Obj.Unknown, Obj.Unknown>;
110
+ export type Snapshot<T extends Unknown = Unknown> = Omit<T, Entity.KindId> &
111
+ BaseRelationSnapshot<Obj.Unknown, Obj.Unknown>;
110
112
 
111
- export const Source: unique symbol = RelationSourceId as any;
113
+ export const Source: unique symbol = entityInternal.RelationSourceId as any;
112
114
  export type Source = typeof Source;
113
115
 
114
- export const Target: unique symbol = RelationTargetId as any;
116
+ export const Target: unique symbol = entityInternal.RelationTargetId as any;
115
117
  export type Target = typeof Target;
116
118
 
119
+ /**
120
+ * Get relation source type.
121
+ */
122
+ export type SourceOf<A> = A extends Endpoints<infer S, infer _T> ? S : never;
123
+
124
+ /**
125
+ * Get relation target type.
126
+ */
127
+ export type TargetOf<A> = A extends Endpoints<infer _S, infer T> ? T : never;
128
+
117
129
  /**
118
130
  * Internal props type for relation instance creation.
119
131
  */
120
- type RelationMakeProps<T extends Unknown> = {
132
+ type MakePropsInternal<T extends Unknown> = {
121
133
  id?: ObjectId;
122
- [MetaId]?: ObjectMeta;
134
+ [Meta]?: internal.ObjectMeta;
123
135
  [Source]: T[Source];
124
136
  [Target]: T[Target];
125
- } & Type.Properties<T>;
137
+ } & Entity.Properties<T>;
126
138
 
127
139
  /**
128
140
  * Props type for relation creation with a given schema.
129
141
  * Takes a schema type (created with Type.Relation) and extracts the props type.
130
142
  */
131
- export type MakeProps<S extends Type.Relation.Any> = RelationMakeProps<Schema.Schema.Type<S>>;
143
+ export type MakeProps<S extends Type.AnyRelation> = MakePropsInternal<Schema.Schema.Type<S>>;
132
144
 
133
145
  /**
134
146
  * Creates new relation.
@@ -139,26 +151,31 @@ export type MakeProps<S extends Type.Relation.Any> = RelationMakeProps<Schema.Sc
139
151
  */
140
152
  // NOTE: Writing the definition this way (with generic over schema) makes typescript perfer to infer the type from the first param (this schema) rather than the second param (the props).
141
153
  // TODO(dmaretskyi): Move meta into props.
142
- export const make = <S extends Type.Relation.Any>(
154
+ export const make = <S extends Type.AnyRelation>(
143
155
  schema: S,
144
- props: NoInfer<RelationMakeProps<Schema.Schema.Type<S>>>,
145
- meta?: ObjectMeta,
156
+ props: NoInfer<MakeProps<S>>,
146
157
  ): Schema.Schema.Type<S> & Entity.OfKind<typeof Entity.Kind.Relation> => {
147
- assertArgument(getTypeAnnotation(schema)?.kind === EntityKind.Relation, 'schema', 'Expected a relation schema');
148
- assertArgument(props[ParentId] === undefined, 'props', 'Parent is not allowed for relations');
149
-
150
- if (props[MetaId] != null) {
151
- meta = props[MetaId] as any;
152
- delete props[MetaId];
158
+ assertArgument(
159
+ internal.getTypeAnnotation(schema)?.kind === internal.EntityKind.Relation,
160
+ 'schema',
161
+ 'Expected a relation schema',
162
+ );
163
+ assertArgument(props[internal.ParentId] === undefined, 'props', 'Parent is not allowed for relations');
164
+
165
+ let meta: internal.ObjectMeta | undefined = undefined;
166
+
167
+ if (props[internal.MetaId] != null) {
168
+ meta = props[internal.MetaId] as any;
169
+ delete props[internal.MetaId];
153
170
  }
154
171
 
155
- const sourceDXN = getObjectDXN(props[Source]) ?? raise(new Error('Unresolved relation source'));
156
- const targetDXN = getObjectDXN(props[Target]) ?? raise(new Error('Unresolved relation target'));
172
+ const sourceDXN = internal.getObjectDXN(props[Source]) ?? raise(new Error('Unresolved relation source'));
173
+ const targetDXN = internal.getObjectDXN(props[Target]) ?? raise(new Error('Unresolved relation target'));
157
174
 
158
- (props as any)[RelationSourceDXNId] = sourceDXN;
159
- (props as any)[RelationTargetDXNId] = targetDXN;
175
+ (props as any)[internal.RelationSourceDXNId] = sourceDXN;
176
+ (props as any)[internal.RelationTargetDXNId] = targetDXN;
160
177
 
161
- return makeObject<Schema.Schema.Type<S>>(schema, props as any, meta);
178
+ return internal.makeObject<Schema.Schema.Type<S>>(schema, props as any, meta);
162
179
  };
163
180
 
164
181
  /**
@@ -169,13 +186,20 @@ export const isRelation = (value: unknown): value is Unknown => {
169
186
  if (typeof value !== 'object' || value === null) {
170
187
  return false;
171
188
  }
172
- if (ATTR_RELATION_SOURCE in value || ATTR_RELATION_TARGET in value) {
189
+ if (internal.ATTR_RELATION_SOURCE in value || internal.ATTR_RELATION_TARGET in value) {
173
190
  return true;
174
191
  }
175
192
 
176
193
  // Check for reactive relation (KindId) or snapshot (SnapshotKindId).
177
- const kind = (value as any)[Entity.KindId] ?? (value as any)[SnapshotKindId];
178
- return kind === EntityKind.Relation;
194
+ const kind = (value as any)[Entity.KindId] ?? (value as any)[Entity.SnapshotKindId];
195
+ return kind === internal.EntityKind.Relation;
196
+ };
197
+
198
+ export const isSnapshot = (value: unknown): value is Snapshot => {
199
+ if (typeof value !== 'object' || value === null) {
200
+ return false;
201
+ }
202
+ return (value as any)[Entity.SnapshotKindId] === internal.EntityKind.Relation;
179
203
  };
180
204
 
181
205
  /**
@@ -185,8 +209,8 @@ export const isRelation = (value: unknown): value is Unknown => {
185
209
  */
186
210
  export const getSourceDXN = (value: Unknown | Snapshot): DXN => {
187
211
  assertArgument(isRelation(value), 'Expected a relation');
188
- assumeType<InternalObjectProps>(value);
189
- const dxn = (value as InternalObjectProps)[RelationSourceDXNId];
212
+ assumeType<internal.InternalObjectProps>(value);
213
+ const dxn = (value as internal.InternalObjectProps)[internal.RelationSourceDXNId];
190
214
  invariant(dxn instanceof DXN);
191
215
  return dxn;
192
216
  };
@@ -198,8 +222,8 @@ export const getSourceDXN = (value: Unknown | Snapshot): DXN => {
198
222
  */
199
223
  export const getTargetDXN = (value: Unknown | Snapshot): DXN => {
200
224
  assertArgument(isRelation(value), 'Expected a relation');
201
- assumeType<InternalObjectProps>(value);
202
- const dxn = (value as InternalObjectProps)[RelationTargetDXNId];
225
+ assumeType<internal.InternalObjectProps>(value);
226
+ const dxn = (value as internal.InternalObjectProps)[internal.RelationTargetDXNId];
203
227
  invariant(dxn instanceof DXN);
204
228
  return dxn;
205
229
  };
@@ -209,12 +233,14 @@ export const getTargetDXN = (value: Unknown | Snapshot): DXN => {
209
233
  * Accepts both reactive relations and snapshots.
210
234
  * @throws If the object is not a relation.
211
235
  */
212
- export const getSource = <T extends Unknown | Snapshot>(relation: T): Type.Relation.Source<T> => {
236
+ export const getSource = <T extends Unknown | Snapshot>(relation: T): SourceOf<T> => {
213
237
  assertArgument(isRelation(relation), 'Expected a relation');
214
- assumeType<InternalObjectProps>(relation);
215
- const obj = (relation as InternalObjectProps)[RelationSourceId];
216
- invariant(obj !== undefined, `Invalid source: ${relation.id}`);
217
- return obj as Type.Relation.Source<T>;
238
+ assumeType<internal.InternalObjectProps>(relation);
239
+ const obj = (relation as internal.InternalObjectProps)[internal.RelationSourceId];
240
+ if (obj === undefined) {
241
+ throw new Error(`Relation source could not be resolved.`);
242
+ }
243
+ return obj as SourceOf<T>;
218
244
  };
219
245
 
220
246
  /**
@@ -222,12 +248,14 @@ export const getSource = <T extends Unknown | Snapshot>(relation: T): Type.Relat
222
248
  * Accepts both reactive relations and snapshots.
223
249
  * @throws If the object is not a relation.
224
250
  */
225
- export const getTarget = <T extends Unknown | Snapshot>(relation: T): Type.Relation.Target<T> => {
251
+ export const getTarget = <T extends Unknown | Snapshot>(relation: T): TargetOf<T> => {
226
252
  assertArgument(isRelation(relation), 'Expected a relation');
227
- assumeType<InternalObjectProps>(relation);
228
- const obj = (relation as InternalObjectProps)[RelationTargetId];
229
- invariant(obj !== undefined, `Invalid target: ${relation.id}`);
230
- return obj as Type.Relation.Target<T>;
253
+ assumeType<internal.InternalObjectProps>(relation);
254
+ const obj = (relation as internal.InternalObjectProps)[internal.RelationTargetId];
255
+ if (obj === undefined) {
256
+ throw new Error(`Relation target could not be resolved.`);
257
+ }
258
+ return obj as TargetOf<T>;
231
259
  };
232
260
 
233
261
  //
@@ -236,18 +264,18 @@ export const getTarget = <T extends Unknown | Snapshot>(relation: T): Type.Relat
236
264
 
237
265
  /**
238
266
  * Makes all properties mutable recursively.
239
- * Used to provide a mutable view of a relation within `Relation.change`.
267
+ * Used to provide a mutable view of a relation within `Relation.update`.
240
268
  */
241
- export type { Mutable };
269
+ export type Mutable<T> = internal.Mutable<T>;
242
270
 
243
271
  /**
244
272
  * Perform mutations on an echo relation within a controlled context.
245
273
  *
246
274
  * All mutations within the callback are batched and trigger a single notification
247
- * when the callback completes. Direct mutations outside of `Relation.change` will throw
275
+ * when the callback completes. Direct mutations outside of `Relation.update` will throw
248
276
  * an error for echo relations.
249
277
  *
250
- * @param relation - The echo relation to mutate. Use `Obj.change` for objects.
278
+ * @param relation - The echo relation to mutate. Use `Obj.update` for objects.
251
279
  * @param callback - The callback that performs mutations on the relation.
252
280
  *
253
281
  * @example
@@ -258,16 +286,16 @@ export type { Mutable };
258
286
  * role: 'Engineer',
259
287
  * });
260
288
  *
261
- * // Mutate within Relation.change
262
- * Relation.change(worksFor, (r) => {
263
- * r.role = 'Senior Engineer';
289
+ * // Mutate within Relation.update
290
+ * Relation.update(worksFor, (obj) => {
291
+ * obj.role = 'Senior Engineer';
264
292
  * });
265
293
  * ```
266
294
  *
267
- * Note: Only accepts relations. Use `Obj.change` for objects.
295
+ * Note: Only accepts relations. Use `Obj.update` for objects.
268
296
  */
269
- export const change = <T extends Unknown>(relation: T, callback: ChangeCallback<T>): void => {
270
- change$(relation, callback);
297
+ export const update = <T extends Unknown>(relation: T, callback: internal.ChangeCallback<T>): void => {
298
+ internal.change(relation, callback);
271
299
  };
272
300
 
273
301
  //
@@ -279,7 +307,7 @@ export const change = <T extends Unknown>(relation: T, callback: ChangeCallback<
279
307
  * The snapshot is branded with SnapshotKindId instead of KindId,
280
308
  * making it distinguishable from the reactive relation at the type level.
281
309
  */
282
- export const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = getSnapshot$ as any;
310
+ export const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = internal.getSnapshot as any;
283
311
 
284
312
  //
285
313
  // Subscribe
@@ -292,7 +320,7 @@ export const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = getSnapsh
292
320
  * @returns Unsubscribe function.
293
321
  */
294
322
  export const subscribe = (rel: Unknown, callback: () => void): (() => void) => {
295
- return subscribe$(rel, callback);
323
+ return internal.subscribe(rel, callback);
296
324
  };
297
325
 
298
326
  //
@@ -304,18 +332,18 @@ export const subscribe = (rel: Unknown, callback: () => void): (() => void) => {
304
332
  * Accepts both reactive relations and snapshots.
305
333
  */
306
334
  export const getValue = (rel: Unknown | Snapshot, path: readonly (string | number)[]): any => {
307
- return getValue$(rel, createJsonPath(path));
335
+ return internal.getValue(rel, createJsonPath(path));
308
336
  };
309
337
 
310
338
  /**
311
339
  * Set a deeply nested property on a relation.
312
- * Must be called within a `Relation.change` callback.
340
+ * Must be called within a `Relation.update` callback.
313
341
  *
314
342
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
315
343
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
316
344
  */
317
345
  export const setValue: (rel: Mutable<Unknown>, path: readonly (string | number)[], value: any) => void =
318
- setValue$ as any;
346
+ internal.setValue as any;
319
347
 
320
348
  //
321
349
  // Type
@@ -325,24 +353,24 @@ export const setValue: (rel: Mutable<Unknown>, path: readonly (string | number)[
325
353
  * Get the DXN of the relation.
326
354
  * Accepts both reactive relations and snapshots.
327
355
  */
328
- export const getDXN = (entity: Unknown | Snapshot): DXN => getDXN$(entity);
356
+ export const getDXN = (entity: Unknown | Snapshot): DXN => internal.getDXN(entity);
329
357
 
330
358
  /**
331
359
  * @returns The DXN of the relation's type.
332
360
  */
333
- export const getTypeDXN = getTypeDXN$;
361
+ export const getTypeDXN = internal.getTypeDXN;
334
362
 
335
363
  /**
336
364
  * Get the schema of the relation.
337
365
  * Returns the branded ECHO schema used to create the relation.
338
366
  */
339
- export const getSchema: (rel: unknown | undefined) => Type.Entity.Any | undefined = getSchema$ as any;
367
+ export const getSchema: (rel: unknown | undefined) => Type.AnyEntity | undefined = internal.getSchema as any;
340
368
 
341
369
  /**
342
370
  * @returns The typename of the relation's type.
343
371
  * Accepts both reactive relations and snapshots.
344
372
  */
345
- export const getTypename = (entity: Unknown | Snapshot): string | undefined => getTypename$(entity);
373
+ export const getTypename = (entity: Unknown | Snapshot): string | undefined => internal.getTypename(entity);
346
374
 
347
375
  //
348
376
  // Database
@@ -352,72 +380,79 @@ export const getTypename = (entity: Unknown | Snapshot): string | undefined => g
352
380
  * Get the database the relation belongs to.
353
381
  * Accepts both reactive relations and snapshots.
354
382
  */
355
- export const getDatabase = (entity: Unknown | Snapshot): Database.Database | undefined => getDatabase$(entity);
383
+ export const getDatabase = (entity: Unknown | Snapshot): Database.Database | undefined => internal.getDatabase(entity);
356
384
 
357
385
  //
358
386
  // Meta
359
387
  //
360
388
 
389
+ /**
390
+ * Property that accesses metadata for an entity.
391
+ *
392
+ * Alias for `Entity.Meta`.
393
+ */
394
+ export const Meta = internal.MetaId;
395
+
361
396
  /**
362
397
  * Deeply read-only version of ObjectMeta.
363
398
  */
364
- export type ReadonlyMeta = ApiReadonlyMeta;
399
+ export type ReadonlyMeta = internal.ReadonlyMeta;
365
400
 
366
401
  /**
367
- * Mutable meta type returned by `Relation.getMeta` inside a `Relation.change` callback.
402
+ * Mutable meta type returned by `Relation.getMeta` inside a `Relation.update` callback.
368
403
  */
369
- export type Meta = ApiMeta;
404
+ export type Meta = internal.Meta;
370
405
 
371
406
  /**
372
407
  * Get the metadata for a relation.
373
- * Returns mutable meta when passed a mutable relation (inside `Relation.change` callback).
408
+ * Returns mutable meta when passed a mutable relation (inside `Relation.update` callback).
374
409
  * Returns read-only meta when passed a regular relation or snapshot.
375
410
  */
376
411
  // TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.
377
412
  export function getMeta(entity: Mutable<Unknown>): Meta;
378
413
  export function getMeta(entity: Unknown | Snapshot): ReadonlyMeta;
379
414
  export function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): Meta | ReadonlyMeta {
380
- return getMeta$(entity);
415
+ return internal.getMetaChecked(entity);
381
416
  }
382
417
 
383
418
  /**
384
419
  * @returns Foreign keys for the relation from the specified source.
385
420
  * Accepts both reactive relations and snapshots.
386
421
  */
387
- export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => getKeys$(entity, source);
422
+ export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => internal.getKeys(entity, source);
388
423
 
389
424
  /**
390
425
  * Delete all keys from the relation for the specified source.
391
- * Must be called within a `Relation.change` callback.
426
+ * Must be called within a `Relation.update` callback.
392
427
  *
393
428
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
394
429
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
395
430
  */
396
- export const deleteKeys = (entity: Mutable<Unknown>, source: string): void => deleteKeys$(entity, source);
431
+ export const deleteKeys = (entity: Mutable<Unknown>, source: string): void => internal.deleteKeys(entity, source);
397
432
 
398
433
  /**
399
434
  * Add a tag to the relation.
400
- * Must be called within a `Relation.change` callback.
435
+ * Must be called within a `Relation.update` callback.
401
436
  *
402
437
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
403
438
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
404
439
  */
405
- export const addTag = (entity: Mutable<Unknown>, tag: string): void => addTag$(entity, tag);
440
+ export const addTag = (entity: Mutable<Unknown>, tag: string): void => internal.addTag(entity, tag);
406
441
 
407
442
  /**
408
443
  * Remove a tag from the relation.
409
- * Must be called within a `Relation.change` callback.
444
+ * Must be called within a `Relation.update` callback.
410
445
  *
411
446
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
412
447
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
413
448
  */
414
- export const removeTag = (entity: Mutable<Unknown>, tag: string): void => removeTag$(entity, tag);
449
+ export const removeTag = (entity: Mutable<Unknown>, tag: string): void => internal.removeTag(entity, tag);
415
450
 
416
451
  /**
417
452
  * Check if the relation is deleted.
418
453
  * Accepts both reactive relations and snapshots.
419
454
  */
420
- export const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(entity);
455
+ export const isDeleted = (entity: Unknown | Snapshot): boolean => internal.isDeleted(entity);
421
456
 
422
457
  //
423
458
  // Annotations
@@ -427,32 +462,32 @@ export const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(ent
427
462
  * Get the label of the relation.
428
463
  * Accepts both reactive relations and snapshots.
429
464
  */
430
- export const getLabel = (entity: Unknown | Snapshot): string | undefined => getLabel$(entity);
465
+ export const getLabel = (entity: Unknown | Snapshot): string | undefined => internal.getLabel(entity);
431
466
 
432
467
  /**
433
468
  * Set the label of the relation.
434
- * Must be called within a `Relation.change` callback.
469
+ * Must be called within a `Relation.update` callback.
435
470
  *
436
471
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
437
472
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
438
473
  */
439
- export const setLabel = (entity: Mutable<Unknown>, label: string): void => setLabel$(entity, label);
474
+ export const setLabel = (entity: Mutable<Unknown>, label: string): void => internal.setLabel(entity, label);
440
475
 
441
476
  /**
442
477
  * Get the description of the relation.
443
478
  * Accepts both reactive relations and snapshots.
444
479
  */
445
- export const getDescription = (entity: Unknown | Snapshot): string | undefined => getDescription$(entity);
480
+ export const getDescription = (entity: Unknown | Snapshot): string | undefined => internal.getDescription(entity);
446
481
 
447
482
  /**
448
483
  * Set the description of the relation.
449
- * Must be called within a `Relation.change` callback.
484
+ * Must be called within a `Relation.update` callback.
450
485
  *
451
486
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
452
487
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
453
488
  */
454
489
  export const setDescription = (entity: Mutable<Unknown>, description: string): void =>
455
- setDescription$(entity, description);
490
+ internal.setDescription(entity, description);
456
491
 
457
492
  //
458
493
  // JSON
@@ -461,13 +496,13 @@ export const setDescription = (entity: Mutable<Unknown>, description: string): v
461
496
  /**
462
497
  * JSON representation of a relation.
463
498
  */
464
- export type JSON = APIJSON;
499
+ export type JSON = internal.ObjectJSON;
465
500
 
466
501
  /**
467
502
  * Converts relation to its JSON representation.
468
503
  * Accepts both reactive relations and snapshots.
469
504
  */
470
- export const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);
505
+ export const toJSON = (entity: Unknown | Snapshot): JSON => internal.objectToJSON(entity);
471
506
 
472
507
  //
473
508
  // Sorting
@@ -477,25 +512,26 @@ export const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);
477
512
  * Comparator function type for sorting relations.
478
513
  * Accepts both reactive relations and snapshots.
479
514
  */
480
- export type Comparator = ApiComparator<Unknown | Snapshot>;
515
+ export type Comparator = internal.Comparator<Unknown | Snapshot>;
481
516
 
482
- export const sortByLabel: Comparator = sortByLabel$ as Comparator;
483
- export const sortByTypename: Comparator = sortByTypename$ as Comparator;
484
- export const sort = (...comparators: Comparator[]): Comparator => sort$(...comparators) as Comparator;
517
+ export const sortByLabel: Comparator = internal.sortByLabel as Comparator;
518
+ export const sortByTypename: Comparator = internal.sortByTypename as Comparator;
519
+ export const sort = (...comparators: Comparator[]): Comparator => internal.sort(...comparators) as Comparator;
485
520
 
486
521
  //
487
522
  // Version
488
523
  //
489
524
 
490
- export { VersionTypeId, isVersion };
525
+ export const VersionTypeId = internal.VersionTypeId;
526
+ export const isVersion = internal.isVersion;
491
527
 
492
528
  /**
493
529
  * Represent relation version.
494
530
  */
495
- export type Version = ApiVersion;
531
+ export type Version = internal.EntityVersion;
496
532
 
497
533
  /**
498
534
  * Returns the version of the relation.
499
535
  * Accepts both reactive relations and snapshots.
500
536
  */
501
- export const version = (entity: Unknown | Snapshot): Version => version$(entity);
537
+ export const version = (entity: Unknown | Snapshot): Version => internal.version(entity);
@@ -47,7 +47,7 @@ export type Query = {
47
47
  * @default false
48
48
  *
49
49
  * The system schema include but are not limited to:
50
- * - dxos.org/type/Schema
50
+ * - org.dxos.type.schema
51
51
  */
52
52
  includeSystem?: boolean;
53
53
  };
@@ -61,7 +61,7 @@ export type Query = {
61
61
  * - JSON schema with typename and version
62
62
  */
63
63
  export type RegisterSchemaInput =
64
- | Type.Entity.Any
64
+ | Type.AnyEntity
65
65
  | {
66
66
  typename: string;
67
67
  version: string;
@@ -73,15 +73,16 @@ export type RegisterSchemaInput =
73
73
  };
74
74
 
75
75
  export type ExtractQueryResult<Query> = Query extends { location: ('database' | 'runtime')[] }
76
- ? Type.Entity.Any
76
+ ? Type.AnyEntity
77
77
  : Type.RuntimeType;
78
78
 
79
+ // TODO(dmaretskyi): Rename TypeRegistry
79
80
  export interface SchemaRegistry {
80
81
  /**
81
82
  * Checks if the provided schema is registered.
82
83
  */
83
84
  // TODO(burdon): Type?
84
- hasSchema(schema: Type.Entity.Any): boolean;
85
+ hasSchema(schema: Type.AnyEntity): boolean;
85
86
 
86
87
  /**
87
88
  * Registers the provided schema.