@dxos/echo 0.8.4-main.f9ba587 → 0.8.4-main.fcfe5033a5

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