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

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 (602) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +9 -9
  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 +35 -18
  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 +54 -0
  10. package/dist/lib/neutral/Feed.mjs.map +7 -0
  11. package/dist/lib/neutral/Filter.mjs +25 -12
  12. package/dist/lib/neutral/Format.mjs +23 -3
  13. package/dist/lib/neutral/JsonSchema.mjs +9 -9
  14. package/dist/lib/neutral/Key.mjs +7 -3
  15. package/dist/lib/neutral/Migration.mjs +18 -0
  16. package/dist/lib/neutral/Migration.mjs.map +7 -0
  17. package/dist/lib/neutral/Obj.mjs +41 -23
  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 +13 -9
  22. package/dist/lib/neutral/Relation.mjs +34 -23
  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 +52 -36
  26. package/dist/lib/neutral/{chunk-K5K3Z62A.mjs → chunk-4SYHDOQA.mjs} +14 -6
  27. package/dist/lib/neutral/chunk-4SYHDOQA.mjs.map +7 -0
  28. package/dist/lib/neutral/{chunk-XAJMXQ4H.mjs → chunk-4U7OD55H.mjs} +6 -2
  29. package/dist/lib/neutral/chunk-4U7OD55H.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-52NG2XEE.mjs +34 -0
  31. package/dist/lib/neutral/chunk-52NG2XEE.mjs.map +7 -0
  32. package/dist/lib/neutral/{chunk-KB7RIVLK.mjs → chunk-A5HDDVKS.mjs} +33 -6
  33. package/dist/lib/neutral/chunk-A5HDDVKS.mjs.map +7 -0
  34. package/dist/lib/neutral/{chunk-DLPC7DHQ.mjs → chunk-EZ4XJFHJ.mjs} +9 -11
  35. package/dist/lib/neutral/chunk-EZ4XJFHJ.mjs.map +7 -0
  36. package/dist/lib/neutral/{chunk-ZAHWXGK4.mjs → chunk-F625JEZB.mjs} +97 -19
  37. package/dist/lib/neutral/chunk-F625JEZB.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-FFCN66OF.mjs +420 -0
  39. package/dist/lib/neutral/chunk-FFCN66OF.mjs.map +7 -0
  40. package/dist/lib/neutral/{chunk-RPB6V4BE.mjs → chunk-GOHDOJE3.mjs} +16 -3
  41. package/dist/lib/neutral/chunk-GOHDOJE3.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  43. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-J7QWJQQV.mjs +318 -0
  45. package/dist/lib/neutral/chunk-J7QWJQQV.mjs.map +7 -0
  46. package/dist/lib/neutral/{chunk-QARLJVDB.mjs → chunk-JTHNDGAR.mjs} +8 -4
  47. package/dist/lib/neutral/chunk-JTHNDGAR.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-K5RH2PBH.mjs +361 -0
  49. package/dist/lib/neutral/chunk-K5RH2PBH.mjs.map +7 -0
  50. package/dist/lib/neutral/{chunk-RIMHNJ3E.mjs → chunk-KHRAQDYX.mjs} +138 -91
  51. package/dist/lib/neutral/chunk-KHRAQDYX.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-L65CW5EI.mjs +156 -0
  53. package/dist/lib/neutral/chunk-L65CW5EI.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-LNZIPZX6.mjs +2186 -0
  55. package/dist/lib/neutral/chunk-LNZIPZX6.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-MPXUNTME.mjs +41 -0
  57. package/dist/lib/neutral/chunk-MPXUNTME.mjs.map +7 -0
  58. package/dist/lib/neutral/{chunk-7WE7SBA2.mjs → chunk-O2EOH7XQ.mjs} +152 -134
  59. package/dist/lib/neutral/chunk-O2EOH7XQ.mjs.map +7 -0
  60. package/dist/lib/neutral/{chunk-MTEHHY62.mjs → chunk-Q7ID37KF.mjs} +121 -94
  61. package/dist/lib/neutral/chunk-Q7ID37KF.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-QLYEQ5VA.mjs +205 -0
  63. package/dist/lib/neutral/chunk-QLYEQ5VA.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-SSDGRJ3A.mjs +747 -0
  65. package/dist/lib/neutral/chunk-SSDGRJ3A.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-ROKO4RKJ.mjs → chunk-TTCSATUD.mjs} +2 -2
  67. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-UEFRFUYC.mjs} +8 -4
  69. package/dist/lib/neutral/chunk-UEFRFUYC.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-UN7K472Q.mjs +132 -0
  71. package/dist/lib/neutral/chunk-UN7K472Q.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-UQAMAXDU.mjs +243 -0
  73. package/dist/lib/neutral/chunk-UQAMAXDU.mjs.map +7 -0
  74. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs → chunk-V5NE2X7Y.mjs} +1 -1
  75. package/dist/lib/neutral/chunk-V5NE2X7Y.mjs.map +7 -0
  76. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  77. package/dist/lib/neutral/chunk-ZII2BGPM.mjs +269 -0
  78. package/dist/lib/neutral/chunk-ZII2BGPM.mjs.map +7 -0
  79. package/dist/lib/neutral/{chunk-N2QNHMT5.mjs → chunk-ZM7VFIS2.mjs} +22 -2
  80. package/dist/lib/neutral/chunk-ZM7VFIS2.mjs.map +7 -0
  81. package/dist/lib/neutral/index.mjs +56 -29
  82. package/dist/lib/neutral/internal/index.mjs +128 -77
  83. package/dist/lib/neutral/meta.json +1 -1
  84. package/dist/lib/neutral/testing/index.mjs +226 -174
  85. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  86. package/dist/types/src/Annotation.d.ts +3 -3
  87. package/dist/types/src/Annotation.d.ts.map +1 -1
  88. package/dist/types/src/Collection.d.ts +15 -0
  89. package/dist/types/src/Collection.d.ts.map +1 -0
  90. package/dist/types/src/Database.d.ts +27 -42
  91. package/dist/types/src/Database.d.ts.map +1 -1
  92. package/dist/types/src/Dataset.d.ts +29 -0
  93. package/dist/types/src/Dataset.d.ts.map +1 -0
  94. package/dist/types/src/Entity.d.ts +123 -29
  95. package/dist/types/src/Entity.d.ts.map +1 -1
  96. package/dist/types/src/Err.d.ts +56 -13
  97. package/dist/types/src/Err.d.ts.map +1 -1
  98. package/dist/types/src/Extension.d.ts +80 -0
  99. package/dist/types/src/Extension.d.ts.map +1 -0
  100. package/dist/types/src/Extension.test.d.ts +2 -0
  101. package/dist/types/src/Extension.test.d.ts.map +1 -0
  102. package/dist/types/src/Feed.d.ts +229 -0
  103. package/dist/types/src/Feed.d.ts.map +1 -0
  104. package/dist/types/src/Filter.d.ts +74 -11
  105. package/dist/types/src/Filter.d.ts.map +1 -1
  106. package/dist/types/src/Filter.test.d.ts +2 -0
  107. package/dist/types/src/Filter.test.d.ts.map +1 -0
  108. package/dist/types/src/Format.d.ts +3 -3
  109. package/dist/types/src/Format.d.ts.map +1 -1
  110. package/dist/types/src/Hypergraph.d.ts +15 -10
  111. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  112. package/dist/types/src/Json.d.ts +33 -0
  113. package/dist/types/src/Json.d.ts.map +1 -0
  114. package/dist/types/src/Json.test.d.ts +2 -0
  115. package/dist/types/src/Json.test.d.ts.map +1 -0
  116. package/dist/types/src/JsonSchema.d.ts +11 -4
  117. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  118. package/dist/types/src/Key.d.ts +1 -1
  119. package/dist/types/src/Key.d.ts.map +1 -1
  120. package/dist/types/src/Migration.d.ts +72 -0
  121. package/dist/types/src/Migration.d.ts.map +1 -0
  122. package/dist/types/src/Obj.d.ts +201 -77
  123. package/dist/types/src/Obj.d.ts.map +1 -1
  124. package/dist/types/src/Order.d.ts.map +1 -1
  125. package/dist/types/src/Query.d.ts +117 -17
  126. package/dist/types/src/Query.d.ts.map +1 -1
  127. package/dist/types/src/Ref.d.ts +66 -10
  128. package/dist/types/src/Ref.d.ts.map +1 -1
  129. package/dist/types/src/Relation.d.ts +127 -54
  130. package/dist/types/src/Relation.d.ts.map +1 -1
  131. package/dist/types/src/SchemaRegistry.d.ts +12 -13
  132. package/dist/types/src/SchemaRegistry.d.ts.map +1 -1
  133. package/dist/types/src/Tag.d.ts +4 -3
  134. package/dist/types/src/Tag.d.ts.map +1 -1
  135. package/dist/types/src/Type.d.ts +337 -218
  136. package/dist/types/src/Type.d.ts.map +1 -1
  137. package/dist/types/src/View.d.ts +65 -0
  138. package/dist/types/src/View.d.ts.map +1 -0
  139. package/dist/types/src/exemplars.test.d.ts +2 -0
  140. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  141. package/dist/types/src/index.d.ts +8 -1
  142. package/dist/types/src/index.d.ts.map +1 -1
  143. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +98 -24
  144. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  145. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  146. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  147. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  148. package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
  149. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  150. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +15 -6
  151. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  152. package/dist/types/src/internal/Entity/api.d.ts +13 -0
  153. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  154. package/dist/types/src/internal/Entity/entity.d.ts +67 -0
  155. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  156. package/dist/types/src/internal/Entity/index.d.ts +10 -0
  157. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  158. package/dist/types/src/internal/Entity/model.d.ts +57 -0
  159. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  160. package/dist/types/src/internal/{entities → Entity}/object.d.ts +3 -3
  161. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  162. package/dist/types/src/internal/Entity/relation.d.ts +51 -0
  163. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  164. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  165. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  166. package/dist/types/src/internal/Entity/type-uri.d.ts +25 -0
  167. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  168. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  169. package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
  170. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  171. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  172. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  173. package/dist/types/src/internal/{formats → Format}/format.d.ts +2 -1
  174. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  175. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  176. package/dist/types/src/internal/{formats → Format}/index.d.ts +2 -2
  177. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  178. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  179. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  180. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  181. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  182. package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
  183. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  184. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  185. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  186. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  187. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  188. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  189. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +37 -37
  190. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  191. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +3 -2
  192. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  193. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  194. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  195. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  196. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +10 -12
  197. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  198. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  199. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  200. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  201. package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -1
  202. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  203. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  204. package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +16 -8
  205. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  206. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  207. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  208. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  209. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  210. package/dist/types/src/internal/{object → Obj}/set-value.d.ts +2 -2
  211. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  212. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  213. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  214. package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +5 -5
  215. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  216. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  217. package/dist/types/src/internal/Query.d.ts +10 -0
  218. package/dist/types/src/internal/Query.d.ts.map +1 -0
  219. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  220. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
  221. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  222. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +42 -19
  223. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  224. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  225. package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
  226. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  227. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  228. package/dist/types/src/internal/Type/index.d.ts +3 -0
  229. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  230. package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -1
  231. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  232. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  233. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  234. package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
  235. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  236. package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
  237. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  238. package/dist/types/src/internal/common/index.d.ts +4 -0
  239. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  240. package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +1 -1
  241. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  242. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  243. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  244. package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
  245. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  246. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  247. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  248. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  249. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  250. package/dist/types/src/internal/common/proxy/make-object.d.ts +19 -0
  251. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  252. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  253. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  254. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  255. package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
  256. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  257. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
  258. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
  259. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  260. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  261. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  262. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  263. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  264. package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +18 -2
  265. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  266. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  267. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  268. package/dist/types/src/internal/{types → common/types}/base.d.ts +1 -0
  269. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  270. package/dist/types/src/internal/common/types/entity.d.ts +94 -0
  271. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  272. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  273. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  274. package/dist/types/src/internal/{types → common/types}/meta.d.ts +12 -1
  275. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  276. package/dist/types/src/internal/common/types/model-symbols.d.ts +58 -0
  277. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  278. package/dist/types/src/internal/{types → common/types}/typename.d.ts +7 -0
  279. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  280. package/dist/types/src/internal/{types → common/types}/version.d.ts +2 -2
  281. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  282. package/dist/types/src/internal/index.d.ts +9 -10
  283. package/dist/types/src/internal/index.d.ts.map +1 -1
  284. package/dist/types/src/testing/test-data.d.ts +8 -8
  285. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  286. package/dist/types/src/testing/test-schema.d.ts +77 -82
  287. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  288. package/dist/types/src/testing/util.d.ts +5 -3
  289. package/dist/types/src/testing/util.d.ts.map +1 -1
  290. package/dist/types/tsconfig.tsbuildinfo +1 -1
  291. package/package.json +30 -15
  292. package/src/Annotation.ts +7 -3
  293. package/src/Collection.ts +36 -0
  294. package/src/Database.ts +80 -77
  295. package/src/Dataset.ts +34 -0
  296. package/src/Entity.test.ts +116 -6
  297. package/src/Entity.ts +181 -66
  298. package/src/Err.ts +25 -3
  299. package/src/Extension.test.ts +235 -0
  300. package/src/Extension.ts +122 -0
  301. package/src/Feed.ts +356 -0
  302. package/src/Filter.test.ts +90 -0
  303. package/src/Filter.ts +152 -21
  304. package/src/Format.ts +3 -3
  305. package/src/Hypergraph.ts +16 -11
  306. package/src/Json.test.ts +175 -0
  307. package/src/Json.ts +103 -0
  308. package/src/JsonSchema.ts +14 -4
  309. package/src/Key.ts +1 -1
  310. package/src/Migration.ts +114 -0
  311. package/src/Obj.test.ts +158 -20
  312. package/src/Obj.ts +451 -183
  313. package/src/Order.ts +3 -1
  314. package/src/Query.test.ts +446 -89
  315. package/src/Query.ts +300 -35
  316. package/src/Ref.ts +83 -12
  317. package/src/Relation.test.ts +16 -10
  318. package/src/Relation.ts +236 -165
  319. package/src/SchemaRegistry.ts +13 -17
  320. package/src/Tag.ts +9 -9
  321. package/src/Type.test.ts +169 -24
  322. package/src/Type.ts +561 -354
  323. package/src/View.ts +101 -0
  324. package/src/exemplars.test.ts +21 -0
  325. package/src/index.ts +9 -2
  326. package/src/internal/Annotation/annotations.test.ts +165 -0
  327. package/src/internal/{annotations → Annotation}/annotations.ts +181 -101
  328. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  329. package/src/internal/{api → Annotation}/sorting.ts +2 -4
  330. package/src/internal/{annotations → Annotation}/util.ts +17 -9
  331. package/src/internal/{api/entity.ts → Entity/api.ts} +9 -8
  332. package/src/internal/Entity/entity.ts +246 -0
  333. package/src/internal/{entities → Entity}/index.ts +4 -0
  334. package/src/internal/{entities → Entity}/model.ts +42 -60
  335. package/src/internal/{entities → Entity}/object.ts +13 -6
  336. package/src/internal/Entity/relation.ts +179 -0
  337. package/src/internal/Entity/type-kind.ts +67 -0
  338. package/src/internal/Entity/type-uri.ts +87 -0
  339. package/src/internal/Entity/util.ts +34 -0
  340. package/src/internal/{api → Entity}/version.ts +2 -2
  341. package/src/internal/{formats → Format}/date.test.ts +1 -2
  342. package/src/internal/{formats → Format}/date.ts +0 -4
  343. package/src/internal/{formats → Format}/format.test.ts +1 -2
  344. package/src/internal/{formats → Format}/index.ts +2 -3
  345. package/src/internal/{formats → Format}/types.ts +2 -2
  346. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  347. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
  348. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +64 -151
  349. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +47 -28
  350. package/src/internal/{object → Obj}/clone.ts +10 -6
  351. package/src/internal/{object → Obj}/common.ts +2 -2
  352. package/src/internal/{object → Obj}/create-object.test.ts +13 -14
  353. package/src/internal/Obj/create-object.ts +135 -0
  354. package/src/internal/{object → Obj}/deleted.ts +2 -2
  355. package/src/internal/{object → Obj}/index.ts +0 -1
  356. package/src/internal/{object → Obj}/inspect.ts +3 -3
  357. package/src/internal/Obj/json-serializer.test.ts +185 -0
  358. package/src/internal/{object → Obj}/json-serializer.ts +108 -45
  359. package/src/internal/{object → Obj}/schema-validator.ts +1 -1
  360. package/src/internal/{object → Obj}/set-value.test.ts +31 -54
  361. package/src/internal/{object → Obj}/set-value.ts +3 -3
  362. package/src/internal/{object → Obj}/snapshot.ts +41 -23
  363. package/src/internal/Obj/typed-object.test.ts +32 -0
  364. package/src/internal/{object → Obj}/typed-object.ts +5 -5
  365. package/src/internal/Query.ts +156 -0
  366. package/src/internal/{ref → Ref}/ref-array.ts +1 -2
  367. package/src/internal/{ref → Ref}/ref.test.ts +16 -26
  368. package/src/internal/{ref → Ref}/ref.ts +117 -57
  369. package/src/internal/{schema → Type}/compose.test.ts +6 -5
  370. package/src/internal/{schema → Type}/compose.ts +1 -1
  371. package/src/internal/Type/index.ts +6 -0
  372. package/src/internal/{schema → Type}/manipulation.ts +0 -25
  373. package/src/internal/Type/type-schema.ts +60 -0
  374. package/src/internal/{README.md → common/README.md} +2 -2
  375. package/src/internal/{api → common/api}/index.ts +0 -4
  376. package/src/internal/{api → common/api}/meta.ts +3 -3
  377. package/src/internal/common/index.ts +7 -0
  378. package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
  379. package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
  380. package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
  381. package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
  382. package/src/internal/{proxy → common/proxy}/json-serializer.ts +20 -14
  383. package/src/internal/{proxy → common/proxy}/make-object.ts +37 -15
  384. package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
  385. package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
  386. package/src/internal/common/proxy/reactive.test.ts +54 -0
  387. package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
  388. package/src/internal/common/proxy/schema.test.ts +107 -0
  389. package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +15 -15
  390. package/src/internal/{proxy → common/proxy}/typed-handler.ts +75 -18
  391. package/src/internal/{proxy → common/proxy}/typed-object.test.ts +17 -30
  392. package/src/internal/{types → common/types}/base.ts +1 -1
  393. package/src/internal/common/types/entity.ts +133 -0
  394. package/src/internal/{types → common/types}/index.ts +1 -0
  395. package/src/internal/{types → common/types}/meta.ts +15 -1
  396. package/src/internal/common/types/model-symbols.ts +74 -0
  397. package/src/internal/common/types/typename.ts +91 -0
  398. package/src/internal/{types → common/types}/version.ts +2 -3
  399. package/src/internal/index.ts +9 -31
  400. package/src/testing/api.test.ts +15 -12
  401. package/src/testing/test-data.ts +158 -99
  402. package/src/testing/test-schema.ts +33 -67
  403. package/src/testing/util.ts +14 -11
  404. package/dist/lib/neutral/chunk-2AF5GMG6.mjs +0 -171
  405. package/dist/lib/neutral/chunk-2AF5GMG6.mjs.map +0 -7
  406. package/dist/lib/neutral/chunk-4L6DOFXP.mjs.map +0 -7
  407. package/dist/lib/neutral/chunk-7WE7SBA2.mjs.map +0 -7
  408. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
  409. package/dist/lib/neutral/chunk-DLPC7DHQ.mjs.map +0 -7
  410. package/dist/lib/neutral/chunk-EBUAT5ID.mjs +0 -229
  411. package/dist/lib/neutral/chunk-EBUAT5ID.mjs.map +0 -7
  412. package/dist/lib/neutral/chunk-K5K3Z62A.mjs.map +0 -7
  413. package/dist/lib/neutral/chunk-KB7RIVLK.mjs.map +0 -7
  414. package/dist/lib/neutral/chunk-LKFNEFHF.mjs +0 -130
  415. package/dist/lib/neutral/chunk-LKFNEFHF.mjs.map +0 -7
  416. package/dist/lib/neutral/chunk-MTEHHY62.mjs.map +0 -7
  417. package/dist/lib/neutral/chunk-N2QNHMT5.mjs.map +0 -7
  418. package/dist/lib/neutral/chunk-QARLJVDB.mjs.map +0 -7
  419. package/dist/lib/neutral/chunk-RIMHNJ3E.mjs.map +0 -7
  420. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +0 -7
  421. package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +0 -7
  422. package/dist/lib/neutral/chunk-TLGNKUUG.mjs +0 -3905
  423. package/dist/lib/neutral/chunk-TLGNKUUG.mjs.map +0 -7
  424. package/dist/lib/neutral/chunk-TQT6WTIJ.mjs +0 -142
  425. package/dist/lib/neutral/chunk-TQT6WTIJ.mjs.map +0 -7
  426. package/dist/lib/neutral/chunk-VUQGRDRI.mjs +0 -97
  427. package/dist/lib/neutral/chunk-VUQGRDRI.mjs.map +0 -7
  428. package/dist/lib/neutral/chunk-X2MPMYYN.mjs +0 -13
  429. package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +0 -7
  430. package/dist/lib/neutral/chunk-XAJMXQ4H.mjs.map +0 -7
  431. package/dist/lib/neutral/chunk-ZAHWXGK4.mjs.map +0 -7
  432. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  433. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  434. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  435. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  436. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  437. package/dist/types/src/internal/api/annotations.d.ts +0 -23
  438. package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
  439. package/dist/types/src/internal/api/entity.d.ts +0 -13
  440. package/dist/types/src/internal/api/entity.d.ts.map +0 -1
  441. package/dist/types/src/internal/api/index.d.ts.map +0 -1
  442. package/dist/types/src/internal/api/meta.d.ts.map +0 -1
  443. package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
  444. package/dist/types/src/internal/api/version.d.ts.map +0 -1
  445. package/dist/types/src/internal/entities/entity.d.ts +0 -20
  446. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  447. package/dist/types/src/internal/entities/index.d.ts +0 -6
  448. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  449. package/dist/types/src/internal/entities/model.d.ts +0 -79
  450. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  451. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  452. package/dist/types/src/internal/entities/relation.d.ts +0 -62
  453. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  454. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  455. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  456. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  457. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  458. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  459. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  460. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  461. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  462. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  463. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  464. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  465. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  466. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  467. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  468. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  469. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  470. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  471. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  472. package/dist/types/src/internal/object/clone.d.ts.map +0 -1
  473. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  474. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  475. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  476. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  477. package/dist/types/src/internal/object/ids.d.ts +0 -6
  478. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  479. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  480. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  481. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  482. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  483. package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
  484. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  485. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  486. package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
  487. package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
  488. package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
  489. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  490. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  491. package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
  492. package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
  493. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
  494. package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
  495. package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
  496. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  497. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  498. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
  499. package/dist/types/src/internal/proxy/make-object.d.ts +0 -14
  500. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  501. package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
  502. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
  503. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
  504. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
  505. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
  506. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  507. package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
  508. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  509. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  510. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  511. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  512. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  513. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  514. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  515. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  516. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  517. package/dist/types/src/internal/schema/echo-schema.d.ts +0 -181
  518. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  519. package/dist/types/src/internal/schema/index.d.ts +0 -4
  520. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  521. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  522. package/dist/types/src/internal/schema/persistent-schema.d.ts +0 -20
  523. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  524. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  525. package/dist/types/src/internal/types/entity.d.ts +0 -37
  526. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  527. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  528. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  529. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  530. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  531. package/src/internal/annotations/annotations.test.ts +0 -96
  532. package/src/internal/api/annotations.ts +0 -60
  533. package/src/internal/entities/entity.ts +0 -126
  534. package/src/internal/entities/relation.ts +0 -171
  535. package/src/internal/entities/util.ts +0 -33
  536. package/src/internal/object/create-object.ts +0 -95
  537. package/src/internal/object/ids.ts +0 -12
  538. package/src/internal/object/json-serializer.test.ts +0 -98
  539. package/src/internal/object/typed-object.test.ts +0 -34
  540. package/src/internal/proxy/schema.test.ts +0 -145
  541. package/src/internal/schema/echo-schema.ts +0 -424
  542. package/src/internal/schema/index.ts +0 -7
  543. package/src/internal/schema/persistent-schema.ts +0 -28
  544. package/src/internal/types/entity.ts +0 -54
  545. package/src/internal/types/typename.ts +0 -55
  546. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
  547. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  548. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  549. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  550. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  551. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  552. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  553. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  554. /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
  555. /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
  556. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  557. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  558. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  559. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  560. /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
  561. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  562. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  563. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  564. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  565. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  566. /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
  567. /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
  568. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  569. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  570. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  571. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  572. /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
  573. /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
  574. /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
  575. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  576. /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
  577. /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
  578. /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
  579. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
  580. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
  581. /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
  582. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  583. /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
  584. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  585. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  586. /package/src/internal/{formats → Format}/format.ts +0 -0
  587. /package/src/internal/{formats → Format}/number.ts +0 -0
  588. /package/src/internal/{formats → Format}/object.ts +0 -0
  589. /package/src/internal/{formats → Format}/select.ts +0 -0
  590. /package/src/internal/{formats → Format}/string.ts +0 -0
  591. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  592. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  593. /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
  594. /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
  595. /package/src/internal/{ref → Ref}/index.ts +0 -0
  596. /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
  597. /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
  598. /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
  599. /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
  600. /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
  601. /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
  602. /package/src/internal/{proxy → common/proxy}/symbols.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
- import { DXN, type ObjectId } from '@dxos/keys';
13
+ import { EchoURI, type ObjectId, type URI, DXN } 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';
69
- import type * as Type from './Type';
18
+ import * as internal from './internal';
19
+ import * as entityInternal from './internal/Entity';
20
+ import * as Obj from './Obj';
21
+ import * as Type from './Type';
22
+
23
+ export type Endpoints<Source, Target> = {
24
+ [Source]: Source;
25
+ [Target]: Target;
26
+ };
70
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,104 @@ 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: internal.UnknownTypeSchema<Unknown, typeof Entity.Kind.Relation> = Schema.Struct({
63
+ id: Schema.String,
64
+ }).pipe(
65
+ Schema.extend(Schema.Record({ key: Schema.String, value: Schema.Unknown })),
66
+ Schema.annotations({
67
+ [internal.TypeAnnotationId]: {
68
+ kind: Entity.Kind.Relation,
69
+ typename: 'org.dxos.schema.anyRelation',
70
+ version: '0.0.0',
71
+ sourceSchema: DXN.make(internal.ANY_OBJECT_TYPENAME, internal.ANY_OBJECT_VERSION),
72
+ targetSchema: DXN.make(internal.ANY_OBJECT_TYPENAME, internal.ANY_OBJECT_VERSION),
73
+ },
74
+ }),
75
+ ) as unknown as internal.UnknownTypeSchema<Unknown, typeof Entity.Kind.Relation>;
76
+
89
77
  /**
90
78
  * Relation type with specific source and target types.
91
79
  */
92
- export type Relation<Source extends Obj.Unknown, Target extends Obj.Unknown, Props> = BaseRelation<Source, Target> &
80
+ export type OfShape<Source extends Obj.Unknown, Target extends Obj.Unknown, Props> = BaseRelation<Source, Target> &
93
81
  Props;
94
82
 
95
83
  /**
96
84
  * Base type for snapshot relations (has SnapshotKindId instead of KindId).
97
85
  */
98
- interface BaseRelationSnapshot<Source, Target> extends AnyEntity, Type.Relation.Endpoints<Source, Target> {
99
- readonly [SnapshotKindId]: EntityKind.Relation;
86
+ interface BaseRelationSnapshot<Source, Target> extends internal.AnyEntity, Endpoints<Source, Target> {
87
+ readonly [Entity.SnapshotKindId]: internal.EntityKind.Relation;
100
88
  readonly id: ObjectId;
101
89
  }
102
90
 
91
+ /**
92
+ * JSON-encoded properties for relations.
93
+ */
94
+ export interface BaseRelationJson {
95
+ id: string;
96
+ [internal.ATTR_RELATION_SOURCE]: string;
97
+ [internal.ATTR_RELATION_TARGET]: string;
98
+ }
99
+
103
100
  /**
104
101
  * Immutable snapshot of an ECHO relation.
105
102
  * Branded with SnapshotKindId (not KindId).
106
103
  * Property values are frozen at the time the snapshot was created.
107
104
  * Returned by getSnapshot() and hooks.
108
105
  */
109
- export type Snapshot<T extends Unknown = Unknown> = Omit<T, KindId> & BaseRelationSnapshot<Obj.Unknown, Obj.Unknown>;
106
+ export type Snapshot<T extends Unknown = Unknown> = Omit<T, Entity.KindId> &
107
+ BaseRelationSnapshot<Obj.Unknown, Obj.Unknown>;
110
108
 
111
- export const Source: unique symbol = RelationSourceId as any;
109
+ export const Source: unique symbol = entityInternal.RelationSourceId as any;
112
110
  export type Source = typeof Source;
113
111
 
114
- export const Target: unique symbol = RelationTargetId as any;
112
+ export const Target: unique symbol = entityInternal.RelationTargetId as any;
115
113
  export type Target = typeof Target;
116
114
 
115
+ /**
116
+ * Get relation source type.
117
+ */
118
+ export type SourceOf<A> = A extends Endpoints<infer S, infer _T> ? S : never;
119
+
120
+ /**
121
+ * Get relation target type.
122
+ */
123
+ export type TargetOf<A> = A extends Endpoints<infer _S, infer T> ? T : never;
124
+
117
125
  /**
118
126
  * Internal props type for relation instance creation.
119
127
  */
120
- type RelationMakeProps<T extends Unknown> = {
128
+ type MakePropsInternal<T extends Endpoints<any, any>> = {
121
129
  id?: ObjectId;
122
- [MetaId]?: ObjectMeta;
130
+ [Meta]?: internal.ObjectMeta;
123
131
  [Source]: T[Source];
124
132
  [Target]: T[Target];
125
- } & Type.Properties<T>;
133
+ } & Entity.Properties<T>;
126
134
 
127
135
  /**
128
- * Props type for relation creation with a given schema.
129
- * Takes a schema type (created with Type.Relation) and extracts the props type.
136
+ * Props type for relation creation with a given schema. Accepts a `Type.AnyRelation`
137
+ * entity (created with `Type.makeRelation`) and derives the props shape via
138
+ * `Type.InstanceType`. Object-kind entities are rejected at the type level —
139
+ * use `Obj.MakeProps` for those.
130
140
  */
131
- export type MakeProps<S extends Type.Relation.Any> = RelationMakeProps<Schema.Schema.Type<S>>;
141
+ export type MakeProps<S extends Type.AnyRelation> = MakePropsInternal<Type.InstanceType<S>>;
132
142
 
133
143
  /**
134
144
  * Creates new relation.
@@ -139,28 +149,60 @@ export type MakeProps<S extends Type.Relation.Any> = RelationMakeProps<Schema.Sc
139
149
  */
140
150
  // 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
151
  // TODO(dmaretskyi): Move meta into props.
142
- export const make = <S extends Type.Relation.Any>(
143
- schema: S,
144
- props: NoInfer<RelationMakeProps<Schema.Schema.Type<S>>>,
145
- meta?: ObjectMeta,
146
- ): 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];
152
+ export const make = <T extends Type.AnyRelation>(
153
+ type: T,
154
+ props: NoInfer<MakeProps<T>>,
155
+ ): Type.InstanceType<T> & Entity.OfKind<typeof Entity.Kind.Relation> => {
156
+ const schema = Type.getSchema(type);
157
+ assertArgument(
158
+ internal.getTypeAnnotation(schema)?.kind === internal.EntityKind.Relation,
159
+ 'schema',
160
+ 'Expected a relation schema',
161
+ );
162
+ assertArgument(props[internal.ParentId] === undefined, 'props', 'Parent is not allowed for relations');
163
+
164
+ let meta: internal.ObjectMeta | undefined = undefined;
165
+
166
+ if (props[internal.MetaId] != null) {
167
+ meta = props[internal.MetaId] as any;
168
+ delete props[internal.MetaId];
153
169
  }
154
170
 
155
- const sourceDXN = getObjectDXN(props[Source]) ?? raise(new Error('Unresolved relation source'));
156
- const targetDXN = getObjectDXN(props[Target]) ?? raise(new Error('Unresolved relation target'));
171
+ const sourceDXN = internal.getObjectEchoUri(props[Source]) ?? raise(new Error('Unresolved relation source'));
172
+ const targetDXN = internal.getObjectEchoUri(props[Target]) ?? raise(new Error('Unresolved relation target'));
157
173
 
158
- (props as any)[RelationSourceDXNId] = sourceDXN;
159
- (props as any)[RelationTargetDXNId] = targetDXN;
174
+ (props as any)[internal.RelationSourceDXNId] = sourceDXN;
175
+ (props as any)[internal.RelationTargetDXNId] = targetDXN;
160
176
 
161
- return makeObject<Schema.Schema.Type<S>>(schema, props as any, meta);
177
+ // Pass the type entity through as `typeSource` so the resulting instance
178
+ // carries a back-reference resolvable via `Relation.getType` / `Entity.getType`.
179
+ return internal.makeObject(schema as any, props as any, meta, type as any) as any;
162
180
  };
163
181
 
182
+ /**
183
+ * Test if a value is an instance of a given relation type.
184
+ *
185
+ * Mirrors `Obj.instanceOf` but only accepts `Type.AnyRelation` — use
186
+ * `Obj.instanceOf` for objects and `Type.isType` for `Type.Type` entities.
187
+ *
188
+ * @example
189
+ * ```ts
190
+ * const isEmployedBy = Relation.instanceOf(EmployedBy);
191
+ * if (isEmployedBy(relation)) {
192
+ * // relation is EmployedBy
193
+ * }
194
+ * ```
195
+ */
196
+ export const instanceOf: {
197
+ <S extends Type.AnyRelation>(schema: S): (value: unknown) => value is Type.InstanceType<S>;
198
+ <S extends Type.AnyRelation>(schema: S, value: unknown): value is Type.InstanceType<S>;
199
+ } = ((...args: [schema: Type.AnyRelation, value?: unknown]) => {
200
+ if (args.length === 1) {
201
+ return (entity: unknown) => internal.isInstanceOf(args[0], entity);
202
+ }
203
+ return internal.isInstanceOf(args[0], args[1]);
204
+ }) as any;
205
+
164
206
  /**
165
207
  * Type guard for relations.
166
208
  * Returns true for both reactive relations and relation snapshots.
@@ -169,39 +211,46 @@ export const isRelation = (value: unknown): value is Unknown => {
169
211
  if (typeof value !== 'object' || value === null) {
170
212
  return false;
171
213
  }
172
- if (ATTR_RELATION_SOURCE in value || ATTR_RELATION_TARGET in value) {
214
+ if (internal.ATTR_RELATION_SOURCE in value || internal.ATTR_RELATION_TARGET in value) {
173
215
  return true;
174
216
  }
175
217
 
176
218
  // 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;
219
+ const kind = (value as any)[Entity.KindId] ?? (value as any)[Entity.SnapshotKindId];
220
+ return kind === internal.EntityKind.Relation;
221
+ };
222
+
223
+ export const isSnapshot = (value: unknown): value is Snapshot => {
224
+ if (typeof value !== 'object' || value === null) {
225
+ return false;
226
+ }
227
+ return (value as any)[Entity.SnapshotKindId] === internal.EntityKind.Relation;
179
228
  };
180
229
 
181
230
  /**
182
- * @returns Relation source DXN.
231
+ * @returns Relation source URI.
183
232
  * Accepts both reactive relations and snapshots.
184
233
  * @throws If the object is not a relation.
185
234
  */
186
- export const getSourceDXN = (value: Unknown | Snapshot): DXN => {
235
+ export const getSourceURI = (value: Unknown | Snapshot): EchoURI.EchoURI => {
187
236
  assertArgument(isRelation(value), 'Expected a relation');
188
- assumeType<InternalObjectProps>(value);
189
- const dxn = (value as InternalObjectProps)[RelationSourceDXNId];
190
- invariant(dxn instanceof DXN);
191
- return dxn;
237
+ assumeType<internal.InternalObjectProps>(value);
238
+ const uri = (value as internal.InternalObjectProps)[internal.RelationSourceDXNId];
239
+ invariant(EchoURI.isEchoURI(uri));
240
+ return uri;
192
241
  };
193
242
 
194
243
  /**
195
- * @returns Relation target DXN.
244
+ * @returns Relation target URI.
196
245
  * Accepts both reactive relations and snapshots.
197
246
  * @throws If the object is not a relation.
198
247
  */
199
- export const getTargetDXN = (value: Unknown | Snapshot): DXN => {
248
+ export const getTargetURI = (value: Unknown | Snapshot): EchoURI.EchoURI => {
200
249
  assertArgument(isRelation(value), 'Expected a relation');
201
- assumeType<InternalObjectProps>(value);
202
- const dxn = (value as InternalObjectProps)[RelationTargetDXNId];
203
- invariant(dxn instanceof DXN);
204
- return dxn;
250
+ assumeType<internal.InternalObjectProps>(value);
251
+ const uri = (value as internal.InternalObjectProps)[internal.RelationTargetDXNId];
252
+ invariant(EchoURI.isEchoURI(uri));
253
+ return uri;
205
254
  };
206
255
 
207
256
  /**
@@ -209,12 +258,14 @@ export const getTargetDXN = (value: Unknown | Snapshot): DXN => {
209
258
  * Accepts both reactive relations and snapshots.
210
259
  * @throws If the object is not a relation.
211
260
  */
212
- export const getSource = <T extends Unknown | Snapshot>(relation: T): Type.Relation.Source<T> => {
261
+ export const getSource = <T extends Unknown | Snapshot>(relation: T): SourceOf<T> => {
213
262
  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>;
263
+ assumeType<internal.InternalObjectProps>(relation);
264
+ const obj = (relation as internal.InternalObjectProps)[internal.RelationSourceId];
265
+ if (obj === undefined) {
266
+ throw new Error(`Relation source could not be resolved.`);
267
+ }
268
+ return obj as SourceOf<T>;
218
269
  };
219
270
 
220
271
  /**
@@ -222,12 +273,14 @@ export const getSource = <T extends Unknown | Snapshot>(relation: T): Type.Relat
222
273
  * Accepts both reactive relations and snapshots.
223
274
  * @throws If the object is not a relation.
224
275
  */
225
- export const getTarget = <T extends Unknown | Snapshot>(relation: T): Type.Relation.Target<T> => {
276
+ export const getTarget = <T extends Unknown | Snapshot>(relation: T): TargetOf<T> => {
226
277
  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>;
278
+ assumeType<internal.InternalObjectProps>(relation);
279
+ const obj = (relation as internal.InternalObjectProps)[internal.RelationTargetId];
280
+ if (obj === undefined) {
281
+ throw new Error(`Relation target could not be resolved.`);
282
+ }
283
+ return obj as TargetOf<T>;
231
284
  };
232
285
 
233
286
  //
@@ -236,18 +289,18 @@ export const getTarget = <T extends Unknown | Snapshot>(relation: T): Type.Relat
236
289
 
237
290
  /**
238
291
  * Makes all properties mutable recursively.
239
- * Used to provide a mutable view of a relation within `Relation.change`.
292
+ * Used to provide a mutable view of a relation within `Relation.update`.
240
293
  */
241
- export type { Mutable };
294
+ export type Mutable<T> = internal.Mutable<T>;
242
295
 
243
296
  /**
244
297
  * Perform mutations on an echo relation within a controlled context.
245
298
  *
246
299
  * 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
300
+ * when the callback completes. Direct mutations outside of `Relation.update` will throw
248
301
  * an error for echo relations.
249
302
  *
250
- * @param relation - The echo relation to mutate. Use `Obj.change` for objects.
303
+ * @param relation - The echo relation to mutate. Use `Obj.update` for objects.
251
304
  * @param callback - The callback that performs mutations on the relation.
252
305
  *
253
306
  * @example
@@ -258,16 +311,16 @@ export type { Mutable };
258
311
  * role: 'Engineer',
259
312
  * });
260
313
  *
261
- * // Mutate within Relation.change
262
- * Relation.change(worksFor, (r) => {
263
- * r.role = 'Senior Engineer';
314
+ * // Mutate within Relation.update
315
+ * Relation.update(worksFor, (obj) => {
316
+ * obj.role = 'Senior Engineer';
264
317
  * });
265
318
  * ```
266
319
  *
267
- * Note: Only accepts relations. Use `Obj.change` for objects.
320
+ * Note: Only accepts relations. Use `Obj.update` for objects.
268
321
  */
269
- export const change = <T extends Unknown>(relation: T, callback: ChangeCallback<T>): void => {
270
- change$(relation, callback);
322
+ export const update = <T extends Unknown>(relation: T, callback: internal.ChangeCallback<T>): void => {
323
+ internal.change(relation, callback);
271
324
  };
272
325
 
273
326
  //
@@ -279,7 +332,7 @@ export const change = <T extends Unknown>(relation: T, callback: ChangeCallback<
279
332
  * The snapshot is branded with SnapshotKindId instead of KindId,
280
333
  * making it distinguishable from the reactive relation at the type level.
281
334
  */
282
- export const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = getSnapshot$ as any;
335
+ export const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = internal.getSnapshot as any;
283
336
 
284
337
  //
285
338
  // Subscribe
@@ -292,7 +345,7 @@ export const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = getSnapsh
292
345
  * @returns Unsubscribe function.
293
346
  */
294
347
  export const subscribe = (rel: Unknown, callback: () => void): (() => void) => {
295
- return subscribe$(rel, callback);
348
+ return internal.subscribe(rel, callback);
296
349
  };
297
350
 
298
351
  //
@@ -304,45 +357,51 @@ export const subscribe = (rel: Unknown, callback: () => void): (() => void) => {
304
357
  * Accepts both reactive relations and snapshots.
305
358
  */
306
359
  export const getValue = (rel: Unknown | Snapshot, path: readonly (string | number)[]): any => {
307
- return getValue$(rel, createJsonPath(path));
360
+ return internal.getValue(rel, createJsonPath(path));
308
361
  };
309
362
 
310
363
  /**
311
364
  * Set a deeply nested property on a relation.
312
- * Must be called within a `Relation.change` callback.
365
+ * Must be called within a `Relation.update` callback.
313
366
  *
314
367
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
315
368
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
316
369
  */
317
370
  export const setValue: (rel: Mutable<Unknown>, path: readonly (string | number)[], value: any) => void =
318
- setValue$ as any;
371
+ internal.setValue as any;
319
372
 
320
373
  //
321
374
  // Type
322
375
  //
323
376
 
324
377
  /**
325
- * Get the DXN of the relation.
326
- * Accepts both reactive relations and snapshots.
378
+ * Get the canonical URI of the relation. Returns `URI.URI` — today always an EchoURI,
379
+ * but future entity kinds may surface other URI schemes; narrow with `EchoURI.parse(uri)`
380
+ * or `DXN.tryMake(uri)` at the point of use. Accepts both reactive relations and snapshots.
327
381
  */
328
- export const getDXN = (entity: Unknown | Snapshot): DXN => getDXN$(entity);
382
+ export const getURI = (entity: Unknown | Snapshot): URI.URI => internal.getUri(entity);
329
383
 
330
384
  /**
331
385
  * @returns The DXN of the relation's type.
332
386
  */
333
- export const getTypeDXN = getTypeDXN$;
387
+ export const getTypeURI: (obj: internal.AnyProperties) => URI.URI | undefined = internal.getTypeURI;
334
388
 
335
389
  /**
336
- * Get the schema of the relation.
337
- * Returns the branded ECHO schema used to create the relation.
390
+ * Get the type entity (`Type.AnyRelation`) the relation was created from.
391
+ *
392
+ * Returns `undefined` when the relation's type isn't registered in this
393
+ * runtime (e.g. a freshly deserialized snapshot whose type entity hasn't been
394
+ * wired up yet, or a relation loaded from storage before its schema is known).
395
+ * To get the Effect Schema from the returned entity, use `Type.getSchema(...)`.
338
396
  */
339
- export const getSchema: (rel: unknown | undefined) => Type.Entity.Any | undefined = getSchema$ as any;
397
+ export const getType = (relation: Unknown | Snapshot): Type.AnyRelation | undefined =>
398
+ internal.getType(relation) as Type.AnyRelation | undefined;
340
399
 
341
400
  /**
342
401
  * @returns The typename of the relation's type.
343
402
  * Accepts both reactive relations and snapshots.
344
403
  */
345
- export const getTypename = (entity: Unknown | Snapshot): string | undefined => getTypename$(entity);
404
+ export const getTypename = (entity: Unknown | Snapshot): string | undefined => internal.getTypename(entity);
346
405
 
347
406
  //
348
407
  // Database
@@ -352,72 +411,79 @@ export const getTypename = (entity: Unknown | Snapshot): string | undefined => g
352
411
  * Get the database the relation belongs to.
353
412
  * Accepts both reactive relations and snapshots.
354
413
  */
355
- export const getDatabase = (entity: Unknown | Snapshot): Database.Database | undefined => getDatabase$(entity);
414
+ export const getDatabase = (entity: Unknown | Snapshot): Database.Database | undefined => internal.getDatabase(entity);
356
415
 
357
416
  //
358
417
  // Meta
359
418
  //
360
419
 
420
+ /**
421
+ * Property that accesses metadata for an entity.
422
+ *
423
+ * Alias for `Entity.Meta`.
424
+ */
425
+ export const Meta = internal.MetaId;
426
+
361
427
  /**
362
428
  * Deeply read-only version of ObjectMeta.
363
429
  */
364
- export type ReadonlyMeta = ApiReadonlyMeta;
430
+ export type ReadonlyMeta = internal.ReadonlyMeta;
365
431
 
366
432
  /**
367
- * Mutable meta type returned by `Relation.getMeta` inside a `Relation.change` callback.
433
+ * Mutable meta type returned by `Relation.getMeta` inside a `Relation.update` callback.
368
434
  */
369
- export type Meta = ApiMeta;
435
+ export type Meta = internal.Meta;
370
436
 
371
437
  /**
372
438
  * Get the metadata for a relation.
373
- * Returns mutable meta when passed a mutable relation (inside `Relation.change` callback).
439
+ * Returns mutable meta when passed a mutable relation (inside `Relation.update` callback).
374
440
  * Returns read-only meta when passed a regular relation or snapshot.
375
441
  */
376
442
  // TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.
377
443
  export function getMeta(entity: Mutable<Unknown>): Meta;
378
444
  export function getMeta(entity: Unknown | Snapshot): ReadonlyMeta;
379
445
  export function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): Meta | ReadonlyMeta {
380
- return getMeta$(entity);
446
+ return internal.getMetaChecked(entity);
381
447
  }
382
448
 
383
449
  /**
384
450
  * @returns Foreign keys for the relation from the specified source.
385
451
  * Accepts both reactive relations and snapshots.
386
452
  */
387
- export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => getKeys$(entity, source);
453
+ export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => internal.getKeys(entity, source);
388
454
 
389
455
  /**
390
456
  * Delete all keys from the relation for the specified source.
391
- * Must be called within a `Relation.change` callback.
457
+ * Must be called within a `Relation.update` callback.
392
458
  *
393
459
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
394
460
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
395
461
  */
396
- export const deleteKeys = (entity: Mutable<Unknown>, source: string): void => deleteKeys$(entity, source);
462
+ export const deleteKeys = (entity: Mutable<Unknown>, source: string): void => internal.deleteKeys(entity, source);
397
463
 
398
464
  /**
399
465
  * Add a tag to the relation.
400
- * Must be called within a `Relation.change` callback.
466
+ * Must be called within a `Relation.update` callback.
401
467
  *
402
468
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
403
469
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
404
470
  */
405
- export const addTag = (entity: Mutable<Unknown>, tag: string): void => addTag$(entity, tag);
471
+ export const addTag = (entity: Mutable<Unknown>, tag: string): void => internal.addTag(entity, tag);
406
472
 
407
473
  /**
408
474
  * Remove a tag from the relation.
409
- * Must be called within a `Relation.change` callback.
475
+ * Must be called within a `Relation.update` callback.
410
476
  *
411
477
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
412
478
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
413
479
  */
414
- export const removeTag = (entity: Mutable<Unknown>, tag: string): void => removeTag$(entity, tag);
480
+ export const removeTag = (entity: Mutable<Unknown>, tag: string): void => internal.removeTag(entity, tag);
415
481
 
416
482
  /**
417
483
  * Check if the relation is deleted.
418
484
  * Accepts both reactive relations and snapshots.
419
485
  */
420
- export const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(entity);
486
+ export const isDeleted = (entity: Unknown | Snapshot): boolean => internal.isDeleted(entity);
421
487
 
422
488
  //
423
489
  // Annotations
@@ -426,33 +492,37 @@ export const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(ent
426
492
  /**
427
493
  * Get the label of the relation.
428
494
  * Accepts both reactive relations and snapshots.
495
+ *
496
+ * @param options.fallback `'typename'` returns the relation's typename when no
497
+ * label is set (e.g. `org.dxos.type.table`).
429
498
  */
430
- export const getLabel = (entity: Unknown | Snapshot): string | undefined => getLabel$(entity);
499
+ export const getLabel = (entity: Unknown | Snapshot, options?: internal.GetLabelOptions): string | undefined =>
500
+ internal.getLabel(entity, options);
431
501
 
432
502
  /**
433
503
  * Set the label of the relation.
434
- * Must be called within a `Relation.change` callback.
504
+ * Must be called within a `Relation.update` callback.
435
505
  *
436
506
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
437
507
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
438
508
  */
439
- export const setLabel = (entity: Mutable<Unknown>, label: string): void => setLabel$(entity, label);
509
+ export const setLabel = (entity: Mutable<Unknown>, label: string): void => internal.setLabel(entity, label);
440
510
 
441
511
  /**
442
512
  * Get the description of the relation.
443
513
  * Accepts both reactive relations and snapshots.
444
514
  */
445
- export const getDescription = (entity: Unknown | Snapshot): string | undefined => getDescription$(entity);
515
+ export const getDescription = (entity: Unknown | Snapshot): string | undefined => internal.getDescription(entity);
446
516
 
447
517
  /**
448
518
  * Set the description of the relation.
449
- * Must be called within a `Relation.change` callback.
519
+ * Must be called within a `Relation.update` callback.
450
520
  *
451
521
  * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
452
522
  * parameters, so there is no compile-time error. Enforcement is runtime-only.
453
523
  */
454
524
  export const setDescription = (entity: Mutable<Unknown>, description: string): void =>
455
- setDescription$(entity, description);
525
+ internal.setDescription(entity, description);
456
526
 
457
527
  //
458
528
  // JSON
@@ -461,13 +531,13 @@ export const setDescription = (entity: Mutable<Unknown>, description: string): v
461
531
  /**
462
532
  * JSON representation of a relation.
463
533
  */
464
- export type JSON = APIJSON;
534
+ export type JSON = internal.ObjectJSON;
465
535
 
466
536
  /**
467
537
  * Converts relation to its JSON representation.
468
538
  * Accepts both reactive relations and snapshots.
469
539
  */
470
- export const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);
540
+ export const toJSON = (entity: Unknown | Snapshot): JSON => internal.objectToJSON(entity);
471
541
 
472
542
  //
473
543
  // Sorting
@@ -477,25 +547,26 @@ export const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);
477
547
  * Comparator function type for sorting relations.
478
548
  * Accepts both reactive relations and snapshots.
479
549
  */
480
- export type Comparator = ApiComparator<Unknown | Snapshot>;
550
+ export type Comparator = internal.Comparator<Unknown | Snapshot>;
481
551
 
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;
552
+ export const sortByLabel: Comparator = internal.sortByLabel as Comparator;
553
+ export const sortByTypename: Comparator = internal.sortByTypename as Comparator;
554
+ export const sort = (...comparators: Comparator[]): Comparator => internal.sort(...comparators) as Comparator;
485
555
 
486
556
  //
487
557
  // Version
488
558
  //
489
559
 
490
- export { VersionTypeId, isVersion };
560
+ export const VersionTypeId = internal.VersionTypeId;
561
+ export const isVersion = internal.isVersion;
491
562
 
492
563
  /**
493
564
  * Represent relation version.
494
565
  */
495
- export type Version = ApiVersion;
566
+ export type Version = internal.EntityVersion;
496
567
 
497
568
  /**
498
569
  * Returns the version of the relation.
499
570
  * Accepts both reactive relations and snapshots.
500
571
  */
501
- export const version = (entity: Unknown | Snapshot): Version => version$(entity);
572
+ export const version = (entity: Unknown | Snapshot): Version => internal.version(entity);