@dxos/echo 0.8.4-main.fd6878d → 0.8.4-staging.60fe92afc8

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