@dxos/echo 0.8.4-staging.ac66bdf99f → 0.9.0

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 (437) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +7 -7
  3. package/dist/lib/neutral/Annotation.mjs +37 -6
  4. package/dist/lib/neutral/Database.mjs +6 -17
  5. package/dist/lib/neutral/Entity.mjs +31 -20
  6. package/dist/lib/neutral/Err.mjs +3 -3
  7. package/dist/lib/neutral/Feed.mjs +23 -19
  8. package/dist/lib/neutral/Filter.mjs +13 -15
  9. package/dist/lib/neutral/Format.mjs +23 -3
  10. package/dist/lib/neutral/JsonSchema.mjs +7 -8
  11. package/dist/lib/neutral/Key.mjs +9 -5
  12. package/dist/lib/neutral/Migration.mjs +11 -10
  13. package/dist/lib/neutral/Obj.mjs +29 -20
  14. package/dist/lib/neutral/Order.mjs +7 -3
  15. package/dist/lib/neutral/Query.mjs +17 -17
  16. package/dist/lib/neutral/QueryResult.mjs +1 -1
  17. package/dist/lib/neutral/Ref.mjs +10 -9
  18. package/dist/lib/neutral/Registry.mjs +14 -0
  19. package/dist/lib/neutral/Relation.mjs +28 -25
  20. package/dist/lib/neutral/Scope.mjs +12 -0
  21. package/dist/lib/neutral/Tag.mjs +17 -14
  22. package/dist/lib/neutral/Type.mjs +54 -26
  23. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-35INCYOE.mjs} +1 -1
  24. package/dist/lib/neutral/chunk-35INCYOE.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-3PBP4V4O.mjs +101 -0
  26. package/dist/lib/neutral/chunk-3PBP4V4O.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs +184 -0
  28. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-5SMDBFVB.mjs +108 -0
  30. package/dist/lib/neutral/chunk-5SMDBFVB.mjs.map +7 -0
  31. package/dist/lib/neutral/{chunk-OS35K56T.mjs → chunk-5SUJPHAE.mjs} +3 -3
  32. package/dist/lib/neutral/{chunk-OS35K56T.mjs.map → chunk-5SUJPHAE.mjs.map} +2 -2
  33. package/dist/lib/neutral/{chunk-GZQTCRJB.mjs → chunk-6M2Z6WBH.mjs} +22 -2
  34. package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-V36VO5SS.mjs → chunk-6YDI3J37.mjs} +32 -40
  36. package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
  37. package/dist/lib/neutral/{chunk-MOR5ERFM.mjs → chunk-7FPIAJIV.mjs} +701 -1256
  38. package/dist/lib/neutral/chunk-7FPIAJIV.mjs.map +7 -0
  39. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7LOUAPYZ.mjs} +9 -5
  40. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
  41. package/dist/lib/neutral/{chunk-JUXPFOEI.mjs → chunk-7PI7C4EF.mjs} +48 -88
  42. package/dist/lib/neutral/chunk-7PI7C4EF.mjs.map +7 -0
  43. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-BBFJWWAV.mjs} +6 -6
  44. package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-EVK6XBXO.mjs} +16 -2
  46. package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
  47. package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs → chunk-IGK6FN65.mjs} +2 -2
  48. package/dist/lib/neutral/{chunk-HBUZJNZO.mjs → chunk-LWXVKPPW.mjs} +94 -99
  49. package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
  50. package/dist/lib/neutral/{chunk-BVOFLCVF.mjs → chunk-MZ7K3MLL.mjs} +9 -6
  51. package/dist/lib/neutral/chunk-MZ7K3MLL.mjs.map +7 -0
  52. package/dist/lib/neutral/{chunk-TBKX6JQO.mjs → chunk-O6BH7EPN.mjs} +30 -3
  53. package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
  54. package/dist/lib/neutral/{chunk-EAMSSLZC.mjs → chunk-QQIYS74I.mjs} +83 -46
  55. package/dist/lib/neutral/chunk-QQIYS74I.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-R5W6DXR4.mjs +678 -0
  57. package/dist/lib/neutral/chunk-R5W6DXR4.mjs.map +7 -0
  58. package/dist/lib/neutral/{chunk-WAK4DMFV.mjs → chunk-RIVWNMSF.mjs} +12 -7
  59. package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
  60. package/dist/lib/neutral/{chunk-T6W2LEZU.mjs → chunk-SBVFRTST.mjs} +73 -38
  61. package/dist/lib/neutral/chunk-SBVFRTST.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-T6E37YIP.mjs +251 -0
  63. package/dist/lib/neutral/chunk-T6E37YIP.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-DQYLD2RB.mjs → chunk-TFEWTY5A.mjs} +155 -129
  65. package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-B4BASU6W.mjs → chunk-TYGKCRMK.mjs} +85 -76
  67. package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-4OIBYSXE.mjs → chunk-UUP46KUQ.mjs} +78 -32
  69. package/dist/lib/neutral/chunk-UUP46KUQ.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-WISOH2XH.mjs +36 -0
  71. package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +7 -0
  72. package/dist/lib/neutral/{chunk-G3IQMKF7.mjs → chunk-WTQJHC75.mjs} +111 -112
  73. package/dist/lib/neutral/chunk-WTQJHC75.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-WU3GIANS.mjs +31 -0
  75. package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +7 -0
  76. package/dist/lib/neutral/{chunk-TU3GW67D.mjs → chunk-ZGNNFYHS.mjs} +40 -40
  77. package/dist/lib/neutral/chunk-ZGNNFYHS.mjs.map +7 -0
  78. package/dist/lib/neutral/index.mjs +47 -41
  79. package/dist/lib/neutral/internal/index.mjs +137 -72
  80. package/dist/lib/neutral/meta.json +1 -1
  81. package/dist/lib/neutral/testing/index.mjs +261 -178
  82. package/dist/lib/neutral/testing/index.mjs.map +4 -4
  83. package/dist/types/src/Annotation.d.ts +108 -4
  84. package/dist/types/src/Annotation.d.ts.map +1 -1
  85. package/dist/types/src/Annotation.test.d.ts +2 -0
  86. package/dist/types/src/Annotation.test.d.ts.map +1 -0
  87. package/dist/types/src/Collection.d.ts +2 -3
  88. package/dist/types/src/Collection.d.ts.map +1 -1
  89. package/dist/types/src/Database.d.ts +56 -49
  90. package/dist/types/src/Database.d.ts.map +1 -1
  91. package/dist/types/src/Dataset.d.ts +16 -6
  92. package/dist/types/src/Dataset.d.ts.map +1 -1
  93. package/dist/types/src/Entity.d.ts +101 -28
  94. package/dist/types/src/Entity.d.ts.map +1 -1
  95. package/dist/types/src/Err.d.ts +27 -27
  96. package/dist/types/src/Err.d.ts.map +1 -1
  97. package/dist/types/src/Feed.d.ts +66 -19
  98. package/dist/types/src/Feed.d.ts.map +1 -1
  99. package/dist/types/src/Filter.d.ts +38 -12
  100. package/dist/types/src/Filter.d.ts.map +1 -1
  101. package/dist/types/src/Format.d.ts +0 -2
  102. package/dist/types/src/Format.d.ts.map +1 -1
  103. package/dist/types/src/Hypergraph.d.ts +14 -9
  104. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  105. package/dist/types/src/Json.d.ts +33 -0
  106. package/dist/types/src/Json.d.ts.map +1 -0
  107. package/dist/types/src/Json.test.d.ts +2 -0
  108. package/dist/types/src/Json.test.d.ts.map +1 -0
  109. package/dist/types/src/JsonSchema.d.ts +2 -2
  110. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  111. package/dist/types/src/Key.d.ts +1 -1
  112. package/dist/types/src/Key.d.ts.map +1 -1
  113. package/dist/types/src/Migration.d.ts +26 -11
  114. package/dist/types/src/Migration.d.ts.map +1 -1
  115. package/dist/types/src/Obj.d.ts +104 -61
  116. package/dist/types/src/Obj.d.ts.map +1 -1
  117. package/dist/types/src/Order.d.ts +10 -0
  118. package/dist/types/src/Order.d.ts.map +1 -1
  119. package/dist/types/src/Query.d.ts +34 -12
  120. package/dist/types/src/Query.d.ts.map +1 -1
  121. package/dist/types/src/QueryResult.d.ts +21 -0
  122. package/dist/types/src/QueryResult.d.ts.map +1 -1
  123. package/dist/types/src/Ref.d.ts +15 -7
  124. package/dist/types/src/Ref.d.ts.map +1 -1
  125. package/dist/types/src/Registry.d.ts +131 -0
  126. package/dist/types/src/Registry.d.ts.map +1 -0
  127. package/dist/types/src/Relation.d.ts +73 -41
  128. package/dist/types/src/Relation.d.ts.map +1 -1
  129. package/dist/types/src/Scope.d.ts +35 -0
  130. package/dist/types/src/Scope.d.ts.map +1 -0
  131. package/dist/types/src/Tag.d.ts +21 -5
  132. package/dist/types/src/Tag.d.ts.map +1 -1
  133. package/dist/types/src/Type.d.ts +362 -95
  134. package/dist/types/src/Type.d.ts.map +1 -1
  135. package/dist/types/src/View.d.ts +9 -12
  136. package/dist/types/src/View.d.ts.map +1 -1
  137. package/dist/types/src/exemplars.test.d.ts +2 -0
  138. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  139. package/dist/types/src/index.d.ts +4 -3
  140. package/dist/types/src/index.d.ts.map +1 -1
  141. package/dist/types/src/internal/Annotation/annotations.d.ts +79 -38
  142. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
  143. package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
  144. package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
  145. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
  146. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
  147. package/dist/types/src/internal/Annotation/index.d.ts +4 -2
  148. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -1
  149. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
  150. package/dist/types/src/internal/Annotation/util.d.ts +14 -5
  151. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
  152. package/dist/types/src/internal/Entity/api.d.ts +17 -3
  153. package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
  154. package/dist/types/src/internal/Entity/entity.d.ts +72 -8
  155. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -1
  156. package/dist/types/src/internal/Entity/guard.d.ts +10 -0
  157. package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
  158. package/dist/types/src/internal/Entity/index.d.ts +2 -0
  159. package/dist/types/src/internal/Entity/index.d.ts.map +1 -1
  160. package/dist/types/src/internal/Entity/model.d.ts +21 -17
  161. package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
  162. package/dist/types/src/internal/Entity/object.d.ts +3 -3
  163. package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
  164. package/dist/types/src/internal/Entity/relation.d.ts +30 -7
  165. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
  166. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  167. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  168. package/dist/types/src/internal/Entity/type-uri.d.ts +24 -0
  169. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  170. package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
  171. package/dist/types/src/internal/Format/date.d.ts.map +1 -1
  172. package/dist/types/src/internal/Format/format.d.ts +3 -2
  173. package/dist/types/src/internal/Format/format.d.ts.map +1 -1
  174. package/dist/types/src/internal/Format/index.d.ts +2 -2
  175. package/dist/types/src/internal/Format/index.d.ts.map +1 -1
  176. package/dist/types/src/internal/Format/number.d.ts.map +1 -1
  177. package/dist/types/src/internal/Format/object.d.ts +3 -1
  178. package/dist/types/src/internal/Format/object.d.ts.map +1 -1
  179. package/dist/types/src/internal/Format/types.d.ts.map +1 -1
  180. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
  181. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +34 -34
  182. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
  183. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +3 -2
  184. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
  185. package/dist/types/src/internal/Obj/atoms.d.ts +38 -0
  186. package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -0
  187. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
  188. package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
  189. package/dist/types/src/internal/Obj/create-object.d.ts +12 -12
  190. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
  191. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
  192. package/dist/types/src/internal/Obj/index.d.ts +1 -1
  193. package/dist/types/src/internal/Obj/index.d.ts.map +1 -1
  194. package/dist/types/src/internal/Obj/json-serializer.d.ts +8 -8
  195. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
  196. package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
  197. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
  198. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
  199. package/dist/types/src/internal/Obj/typed-object.d.ts +1 -1
  200. package/dist/types/src/internal/Query/index.d.ts +2 -0
  201. package/dist/types/src/internal/Query/index.d.ts.map +1 -0
  202. package/dist/types/src/internal/{Query.d.ts → Query/pretty.d.ts} +1 -1
  203. package/dist/types/src/internal/Query/pretty.d.ts.map +1 -0
  204. package/dist/types/src/internal/Ref/atoms.d.ts +10 -0
  205. package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -0
  206. package/dist/types/src/internal/Ref/ref-array.d.ts +2 -2
  207. package/dist/types/src/internal/Ref/ref.d.ts +50 -19
  208. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
  209. package/dist/types/src/internal/Ref/utils.d.ts +8 -0
  210. package/dist/types/src/internal/Ref/utils.d.ts.map +1 -0
  211. package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
  212. package/dist/types/src/internal/Type/index.d.ts +1 -2
  213. package/dist/types/src/internal/Type/index.d.ts.map +1 -1
  214. package/dist/types/src/internal/Type/manipulation.d.ts +0 -1
  215. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
  216. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  217. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  218. package/dist/types/src/internal/common/api/meta.d.ts +14 -11
  219. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
  220. package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
  221. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
  222. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
  223. package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
  224. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
  225. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
  226. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
  227. package/dist/types/src/internal/common/proxy/make-object.d.ts +11 -5
  228. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
  229. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
  230. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
  231. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
  232. package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
  233. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
  234. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  235. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  236. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -1
  237. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +18 -2
  238. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
  239. package/dist/types/src/internal/common/types/base.d.ts +4 -4
  240. package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
  241. package/dist/types/src/internal/common/types/entity.d.ts +62 -5
  242. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
  243. package/dist/types/src/internal/common/types/index.d.ts +1 -1
  244. package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
  245. package/dist/types/src/internal/common/types/meta.d.ts +33 -12
  246. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
  247. package/dist/types/src/internal/common/types/model-symbols.d.ts +15 -4
  248. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
  249. package/dist/types/src/internal/common/types/typename.d.ts +7 -0
  250. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -1
  251. package/dist/types/src/internal/common/types/version.d.ts +1 -1
  252. package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
  253. package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
  254. package/dist/types/src/internal/index.d.ts +2 -2
  255. package/dist/types/src/internal/index.d.ts.map +1 -1
  256. package/dist/types/src/testing/index.d.ts +1 -0
  257. package/dist/types/src/testing/index.d.ts.map +1 -1
  258. package/dist/types/src/testing/registry.d.ts +9 -0
  259. package/dist/types/src/testing/registry.d.ts.map +1 -0
  260. package/dist/types/src/testing/test-data.d.ts +8 -8
  261. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  262. package/dist/types/src/testing/test-schema.d.ts +83 -89
  263. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  264. package/dist/types/src/testing/util.d.ts +5 -3
  265. package/dist/types/src/testing/util.d.ts.map +1 -1
  266. package/dist/types/tsconfig.tsbuildinfo +1 -1
  267. package/package.json +26 -24
  268. package/src/Annotation.test.ts +439 -0
  269. package/src/Annotation.ts +158 -4
  270. package/src/Collection.ts +5 -9
  271. package/src/Database.ts +93 -100
  272. package/src/Dataset.ts +10 -2
  273. package/src/Entity.test.ts +116 -6
  274. package/src/Entity.ts +134 -32
  275. package/src/Err.ts +4 -4
  276. package/src/Feed.ts +92 -44
  277. package/src/Filter.ts +70 -40
  278. package/src/Format.ts +0 -4
  279. package/src/Hypergraph.ts +14 -9
  280. package/src/Json.test.ts +175 -0
  281. package/src/Json.ts +103 -0
  282. package/src/Key.ts +1 -1
  283. package/src/Migration.ts +39 -19
  284. package/src/Obj.test.ts +122 -20
  285. package/src/Obj.ts +168 -91
  286. package/src/Order.ts +22 -0
  287. package/src/Query.test.ts +183 -154
  288. package/src/Query.ts +172 -85
  289. package/src/QueryResult.ts +26 -0
  290. package/src/Ref.ts +22 -4
  291. package/src/Registry.ts +155 -0
  292. package/src/Relation.test.ts +10 -10
  293. package/src/Relation.ts +116 -69
  294. package/src/Scope.ts +50 -0
  295. package/src/Tag.md +88 -0
  296. package/src/Tag.ts +49 -6
  297. package/src/Type.test.ts +223 -18
  298. package/src/Type.ts +609 -131
  299. package/src/View.ts +14 -23
  300. package/src/exemplars.test.ts +21 -0
  301. package/src/index.ts +4 -4
  302. package/src/internal/Annotation/annotations.test.ts +31 -11
  303. package/src/internal/Annotation/annotations.ts +143 -111
  304. package/src/internal/Annotation/dictionary.ts +47 -0
  305. package/src/internal/Annotation/entity-dictionary.ts +74 -0
  306. package/src/internal/Annotation/index.ts +4 -2
  307. package/src/internal/Annotation/util.ts +17 -8
  308. package/src/internal/Entity/api.ts +54 -7
  309. package/src/internal/Entity/entity.ts +196 -47
  310. package/src/internal/Entity/guard.ts +26 -0
  311. package/src/internal/Entity/index.ts +2 -0
  312. package/src/internal/Entity/model.ts +38 -28
  313. package/src/internal/Entity/object.ts +21 -5
  314. package/src/internal/Entity/relation.ts +68 -34
  315. package/src/internal/Entity/type-kind.ts +75 -0
  316. package/src/internal/Entity/type-uri.ts +92 -0
  317. package/src/internal/Entity/util.ts +9 -9
  318. package/src/internal/Format/date.ts +0 -4
  319. package/src/internal/Format/format.test.ts +21 -0
  320. package/src/internal/Format/index.ts +2 -3
  321. package/src/internal/Format/object.ts +21 -4
  322. package/src/internal/Format/types.ts +1 -1
  323. package/src/internal/JsonSchema/annotations.ts +1 -1
  324. package/src/internal/JsonSchema/json-schema-type.ts +4 -4
  325. package/src/internal/JsonSchema/json-schema.test.ts +71 -145
  326. package/src/internal/JsonSchema/json-schema.ts +49 -35
  327. package/src/internal/Obj/atoms.ts +244 -0
  328. package/src/internal/Obj/clone.ts +9 -4
  329. package/src/internal/Obj/create-object.test.ts +12 -10
  330. package/src/internal/Obj/create-object.ts +68 -22
  331. package/src/internal/Obj/index.ts +1 -1
  332. package/src/internal/Obj/inspect.ts +5 -3
  333. package/src/internal/Obj/json-serializer.test.ts +101 -22
  334. package/src/internal/Obj/json-serializer.ts +89 -33
  335. package/src/internal/Obj/set-value.test.ts +22 -45
  336. package/src/internal/Obj/set-value.ts +12 -19
  337. package/src/internal/Obj/snapshot.ts +13 -4
  338. package/src/internal/Obj/typed-object.test.ts +9 -11
  339. package/src/internal/Obj/typed-object.ts +1 -1
  340. package/src/internal/Query/index.ts +5 -0
  341. package/src/internal/{Query.ts → Query/pretty.ts} +40 -12
  342. package/src/internal/Ref/atoms.ts +20 -0
  343. package/src/internal/Ref/ref-array.ts +3 -3
  344. package/src/internal/Ref/ref.test.ts +18 -27
  345. package/src/internal/Ref/ref.ts +137 -59
  346. package/src/internal/Ref/utils.ts +45 -0
  347. package/src/internal/Type/compose.test.ts +3 -1
  348. package/src/internal/Type/index.ts +1 -2
  349. package/src/internal/Type/manipulation.ts +0 -25
  350. package/src/internal/Type/type-schema.ts +60 -0
  351. package/src/internal/common/README.md +2 -2
  352. package/src/internal/common/api/meta.ts +19 -17
  353. package/src/internal/common/proxy/change-context.ts +1 -1
  354. package/src/internal/common/proxy/change.test.ts +91 -83
  355. package/src/internal/common/proxy/errors.ts +2 -2
  356. package/src/internal/common/proxy/handler.test.ts +1 -1
  357. package/src/internal/common/proxy/json-serializer.ts +27 -16
  358. package/src/internal/common/proxy/make-object.ts +44 -20
  359. package/src/internal/common/proxy/ownership.ts +2 -2
  360. package/src/internal/common/proxy/reactive-array.ts +1 -1
  361. package/src/internal/common/proxy/reactive.test.ts +54 -0
  362. package/src/internal/common/proxy/reactive.ts +11 -2
  363. package/src/internal/common/proxy/schema.test.ts +48 -86
  364. package/src/internal/common/proxy/typed-handler.test.ts +12 -11
  365. package/src/internal/common/proxy/typed-handler.ts +78 -16
  366. package/src/internal/common/proxy/typed-object.test.ts +16 -28
  367. package/src/internal/common/types/base.ts +4 -4
  368. package/src/internal/common/types/entity.ts +80 -1
  369. package/src/internal/common/types/index.ts +6 -1
  370. package/src/internal/common/types/meta.ts +62 -20
  371. package/src/internal/common/types/model-symbols.ts +24 -4
  372. package/src/internal/common/types/typename.ts +39 -3
  373. package/src/internal/common/types/well-known-types.ts +15 -0
  374. package/src/internal/index.ts +6 -4
  375. package/src/testing/api.test.ts +15 -9
  376. package/src/testing/index.ts +1 -0
  377. package/src/testing/registry.ts +44 -0
  378. package/src/testing/test-data.ts +159 -99
  379. package/src/testing/test-schema.ts +22 -58
  380. package/src/testing/util.ts +14 -11
  381. package/dist/lib/neutral/Extension.mjs +0 -18
  382. package/dist/lib/neutral/SchemaRegistry.mjs +0 -2
  383. package/dist/lib/neutral/chunk-2KHZ36F5.mjs +0 -361
  384. package/dist/lib/neutral/chunk-2KHZ36F5.mjs.map +0 -7
  385. package/dist/lib/neutral/chunk-4OIBYSXE.mjs.map +0 -7
  386. package/dist/lib/neutral/chunk-4P3IXBLT.mjs +0 -45
  387. package/dist/lib/neutral/chunk-4P3IXBLT.mjs.map +0 -7
  388. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
  389. package/dist/lib/neutral/chunk-B4BASU6W.mjs.map +0 -7
  390. package/dist/lib/neutral/chunk-BNCCGLJN.mjs +0 -7
  391. package/dist/lib/neutral/chunk-BNCCGLJN.mjs.map +0 -7
  392. package/dist/lib/neutral/chunk-BVOFLCVF.mjs.map +0 -7
  393. package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +0 -7
  394. package/dist/lib/neutral/chunk-EAMSSLZC.mjs.map +0 -7
  395. package/dist/lib/neutral/chunk-G3IQMKF7.mjs.map +0 -7
  396. package/dist/lib/neutral/chunk-GZQTCRJB.mjs.map +0 -7
  397. package/dist/lib/neutral/chunk-HBUZJNZO.mjs.map +0 -7
  398. package/dist/lib/neutral/chunk-JUXPFOEI.mjs.map +0 -7
  399. package/dist/lib/neutral/chunk-MOR5ERFM.mjs.map +0 -7
  400. package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +0 -7
  401. package/dist/lib/neutral/chunk-PHU22NLC.mjs +0 -136
  402. package/dist/lib/neutral/chunk-PHU22NLC.mjs.map +0 -7
  403. package/dist/lib/neutral/chunk-ROG4RXXL.mjs +0 -97
  404. package/dist/lib/neutral/chunk-ROG4RXXL.mjs.map +0 -7
  405. package/dist/lib/neutral/chunk-T6W2LEZU.mjs.map +0 -7
  406. package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +0 -7
  407. package/dist/lib/neutral/chunk-TU3GW67D.mjs.map +0 -7
  408. package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +0 -7
  409. package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +0 -7
  410. package/dist/lib/neutral/chunk-V36VO5SS.mjs.map +0 -7
  411. package/dist/lib/neutral/chunk-WAK4DMFV.mjs.map +0 -7
  412. package/dist/lib/neutral/chunk-YAHXAYOW.mjs +0 -56
  413. package/dist/lib/neutral/chunk-YAHXAYOW.mjs.map +0 -7
  414. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +0 -50
  415. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +0 -7
  416. package/dist/types/src/Extension.d.ts +0 -80
  417. package/dist/types/src/Extension.d.ts.map +0 -1
  418. package/dist/types/src/Extension.test.d.ts +0 -2
  419. package/dist/types/src/Extension.test.d.ts.map +0 -1
  420. package/dist/types/src/SchemaRegistry.d.ts +0 -84
  421. package/dist/types/src/SchemaRegistry.d.ts.map +0 -1
  422. package/dist/types/src/internal/Obj/ids.d.ts +0 -6
  423. package/dist/types/src/internal/Obj/ids.d.ts.map +0 -1
  424. package/dist/types/src/internal/Query.d.ts.map +0 -1
  425. package/dist/types/src/internal/Type/echo-schema.d.ts +0 -181
  426. package/dist/types/src/internal/Type/echo-schema.d.ts.map +0 -1
  427. package/dist/types/src/internal/Type/persistent-schema.d.ts +0 -20
  428. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +0 -1
  429. package/src/Extension.test.ts +0 -235
  430. package/src/Extension.ts +0 -122
  431. package/src/SchemaRegistry.ts +0 -106
  432. package/src/internal/Obj/ids.ts +0 -12
  433. package/src/internal/Type/echo-schema.ts +0 -423
  434. package/src/internal/Type/persistent-schema.ts +0 -33
  435. /package/dist/lib/neutral/{Extension.mjs.map → Registry.mjs.map} +0 -0
  436. /package/dist/lib/neutral/{SchemaRegistry.mjs.map → Scope.mjs.map} +0 -0
  437. /package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs.map → chunk-IGK6FN65.mjs.map} +0 -0
@@ -6,14 +6,7 @@ import * as Match from 'effect/Match';
6
6
  import * as Option from 'effect/Option';
7
7
  import * as SchemaAST from 'effect/SchemaAST';
8
8
 
9
- import {
10
- type SchemaProperty,
11
- getArrayElementType,
12
- getBaseType,
13
- getProperties,
14
- isArrayType,
15
- isNestedType,
16
- } from '@dxos/effect';
9
+ import { SchemaEx } from '@dxos/effect';
17
10
  import { invariant } from '@dxos/invariant';
18
11
 
19
12
  import { type Mutable } from '../common/proxy';
@@ -21,7 +14,7 @@ import { getSchema } from '../common/types';
21
14
 
22
15
  /**
23
16
  * Set a deeply nested property on an object.
24
- * Must be called within an Obj.change or Relation.change callback.
17
+ * Must be called within an Obj.update or Relation.update callback.
25
18
  */
26
19
  export const setValue = (obj: Mutable<any>, path: readonly (string | number)[], value: any): void => {
27
20
  invariant(path.length > 0, 'Path must not be empty');
@@ -38,7 +31,7 @@ export const setValue = (obj: Mutable<any>, path: readonly (string | number)[],
38
31
  const key = typeof part === 'number' ? part : String(part);
39
32
  if (parent[key] === undefined) {
40
33
  const propertyAST = getPropertyAST(currentAST, String(part));
41
- const shouldBeArray = propertyAST ? isArrayType(propertyAST) : false;
34
+ const shouldBeArray = propertyAST ? SchemaEx.isArrayType(propertyAST) : false;
42
35
 
43
36
  if (shouldBeArray) {
44
37
  // Create array.
@@ -73,16 +66,16 @@ const getPropertyAST = (ast: SchemaAST.AST | undefined, propertyName: string): S
73
66
  return undefined;
74
67
  }
75
68
 
76
- if (isNestedType(ast)) {
77
- const properties = getProperties(ast);
69
+ if (SchemaEx.isNestedType(ast)) {
70
+ const properties = SchemaEx.getProperties(ast);
78
71
  const property = properties.find((p) => p.name.toString() === propertyName);
79
72
  if (property) {
80
- return getBaseType(property).type;
73
+ return SchemaEx.getBaseType(property).type;
81
74
  }
82
75
  }
83
76
 
84
- if (isArrayType(ast)) {
85
- const elementType = getArrayElementType(ast);
77
+ if (SchemaEx.isArrayType(ast)) {
78
+ const elementType = SchemaEx.getArrayElementType(ast);
86
79
  return elementType;
87
80
  }
88
81
 
@@ -96,17 +89,17 @@ const getPropertyAST = (ast: SchemaAST.AST | undefined, propertyName: string): S
96
89
  * @param ast - Schema AST to inspect.
97
90
  * @returns Array of required properties with their types.
98
91
  */
99
- const getRequiredProperties = (ast: SchemaAST.AST | undefined): SchemaProperty[] => {
92
+ const getRequiredProperties = (ast: SchemaAST.AST | undefined): SchemaEx.SchemaProperty[] => {
100
93
  if (!ast) {
101
94
  return [];
102
95
  }
103
96
 
104
97
  // Only objects/structs have properties with optional/required distinction.
105
- if (!isNestedType(ast)) {
98
+ if (!SchemaEx.isNestedType(ast)) {
106
99
  return [];
107
100
  }
108
101
 
109
- const properties = getProperties(ast);
102
+ const properties = SchemaEx.getProperties(ast);
110
103
 
111
104
  // Filter to only required properties (where isOptional === false).
112
105
  return properties.filter((p) => !p.isOptional);
@@ -156,7 +149,7 @@ const createObjectWithDefaults = (ast: SchemaAST.AST | undefined): any => {
156
149
  const defaultValue = getDefaultValueForType(prop.type);
157
150
  if (defaultValue !== undefined) {
158
151
  obj[prop.name] = defaultValue;
159
- } else if (isNestedType(prop.type)) {
152
+ } else if (SchemaEx.isNestedType(prop.type)) {
160
153
  obj[prop.name] = createObjectWithDefaults(prop.type);
161
154
  }
162
155
  }
@@ -7,18 +7,20 @@ import { deepMapValues } from '@dxos/util';
7
7
 
8
8
  import {
9
9
  KindId,
10
- MetaId,
11
10
  ObjectDatabaseId,
12
11
  ObjectDeletedId,
12
+ ParentId,
13
13
  RelationSourceDXNId,
14
14
  RelationSourceId,
15
15
  RelationTargetDXNId,
16
16
  RelationTargetId,
17
17
  SchemaId,
18
- SelfDXNId,
18
+ SelfURIId,
19
19
  SnapshotKindId,
20
+ TypeEntityId,
20
21
  TypeId,
21
22
  } from '../common/types';
23
+ import { MetaId } from '../common/types/model-symbols';
22
24
 
23
25
  /**
24
26
  * Copy a Symbol-keyed property from source to target if it has a defined value.
@@ -83,16 +85,23 @@ export const getSnapshot = <T extends object>(obj: T): T => {
83
85
  // Type introspection symbols.
84
86
  copySymbolProperty(source, snapshot, TypeId);
85
87
  copySymbolProperty(source, snapshot, SchemaId);
86
- copySymbolProperty(source, snapshot, SelfDXNId);
88
+ copySymbolProperty(source, snapshot, TypeEntityId);
89
+ copySymbolProperty(source, snapshot, SelfURIId);
87
90
 
88
91
  // Database reference (required for Obj.getDatabase to work on snapshots).
89
92
  copySymbolProperty(source, snapshot, ObjectDatabaseId);
90
93
  copySymbolProperty(source, snapshot, ObjectDeletedId);
91
94
 
92
- // Metadata symbol. Copy arrays so the snapshot is not affected by mutations to the live meta's keys/tags.
95
+ // Parent reference (required for Obj.getParent to work on snapshots).
96
+ copySymbolProperty(source, snapshot, ParentId);
97
+
98
+ // Metadata symbol. Copy arrays/objects so the snapshot is not affected by mutations to the live meta.
93
99
  copySymbolProperty(source, snapshot, MetaId, (meta: any) => ({
94
100
  keys: [...(meta?.keys ?? [])],
95
101
  tags: [...(meta?.tags ?? [])],
102
+ ...(meta?.key != null ? { key: meta.key } : {}),
103
+ ...(meta?.version != null ? { version: meta.version } : {}),
104
+ ...(meta?.annotations ? { annotations: { ...meta.annotations } } : {}),
96
105
  }));
97
106
 
98
107
  // Relation endpoint symbols.
@@ -6,29 +6,27 @@ import * as Schema from 'effect/Schema';
6
6
  import * as SchemaAST from 'effect/SchemaAST';
7
7
  import { describe, expect, test } from 'vitest';
8
8
 
9
+ import { DXN } from '@dxos/keys';
10
+
11
+ import * as Type from '../../Type';
9
12
  import { EchoObjectSchema } from '../Entity';
10
13
 
11
14
  const Organization = Schema.Struct({
12
15
  name: Schema.String,
13
- }).pipe(
14
- EchoObjectSchema({
15
- typename: 'com.example.type.organization',
16
- version: '0.1.0',
17
- }),
18
- );
16
+ }).pipe(EchoObjectSchema(DXN.make('com.example.type.organization', '0.1.0')));
19
17
 
20
- interface Organization extends Schema.Schema.Type<typeof Organization> {}
18
+ type Organization = Type.InstanceType<typeof Organization>;
21
19
 
22
20
  describe('EchoObjectSchema DSL', () => {
23
- test('type is a valid schema', async () => {
24
- expect(Schema.isSchema(Organization)).to.be.true;
21
+ test('type is a Type.Type entity', async () => {
22
+ expect(Schema.isSchema(Type.getSchema(Organization))).to.be.true;
25
23
  });
26
24
 
27
25
  test('static typename accessor', async () => {
28
- expect(Organization.typename).to.eq('com.example.type.organization');
26
+ expect(Type.getTypename(Organization)).to.eq('com.example.type.organization');
29
27
  });
30
28
 
31
29
  test('expect schema', async () => {
32
- expect(SchemaAST.isTypeLiteral(Organization.ast)).to.be.true;
30
+ expect(SchemaAST.isTypeLiteral(Type.getSchema(Organization).ast)).to.be.true;
33
31
  });
34
32
  });
@@ -12,7 +12,7 @@ import { type AnyEntity } from '../common/types';
12
12
  * Implements effect schema to define object properties.
13
13
  * Has a typename and version.
14
14
  *
15
- * In contrast to {@link EchoSchema} this definition is not recorded in the database.
15
+ * In contrast to a stored `Type.Type` entity, this definition is not recorded in the database.
16
16
  *
17
17
  * @deprecated Use `Type.AnyObj` from `@dxos/echo` instead.
18
18
  */
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './pretty';
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2025 DXOS.org
2
+ // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
5
  import { type QueryAST } from '@dxos/echo-protocol';
@@ -10,6 +10,18 @@ import { type QueryAST } from '@dxos/echo-protocol';
10
10
  export const prettyFilter = (filter: QueryAST.Filter): string => {
11
11
  switch (filter.type) {
12
12
  case 'object': {
13
+ // A type-less object filter with only a meta-key constraint is `Filter.key(...)`.
14
+ if (
15
+ filter.typename === null &&
16
+ (filter.id === undefined || filter.id.length === 0) &&
17
+ Object.keys(filter.props).length === 0 &&
18
+ (filter.foreignKeys === undefined || filter.foreignKeys.length === 0) &&
19
+ filter.metaKey !== undefined
20
+ ) {
21
+ return filter.metaVersion !== undefined
22
+ ? `Filter.key(${JSON.stringify(filter.metaKey)}, { version: ${JSON.stringify(filter.metaVersion)} })`
23
+ : `Filter.key(${JSON.stringify(filter.metaKey)})`;
24
+ }
13
25
  const parts: string[] = [];
14
26
  if (filter.typename !== null) {
15
27
  parts.push(String(filter.typename));
@@ -25,6 +37,13 @@ export const prettyFilter = (filter: QueryAST.Filter): string => {
25
37
  if (filter.foreignKeys !== undefined && filter.foreignKeys.length > 0) {
26
38
  parts.push(`foreignKeys: [${filter.foreignKeys.map((fk) => JSON.stringify(fk)).join(', ')}]`);
27
39
  }
40
+ if (filter.metaKey !== undefined) {
41
+ parts.push(
42
+ filter.metaVersion !== undefined
43
+ ? `metaKey: ${JSON.stringify(filter.metaKey)} (${filter.metaVersion})`
44
+ : `metaKey: ${JSON.stringify(filter.metaKey)}`,
45
+ );
46
+ }
28
47
  return parts.length > 0 ? `Filter.type(${parts.join(', ')})` : 'Filter.everything()';
29
48
  }
30
49
  case 'compare':
@@ -97,6 +116,9 @@ export const prettyQuery = (query: QueryAST.Query): string => {
97
116
  return 'Order.natural()';
98
117
  } else if (o.kind === 'rank') {
99
118
  return `Order.rank(${JSON.stringify(o.direction)})`;
119
+ } else if (o.kind === 'timestamp') {
120
+ const fn = o.field === 'updatedAt' ? 'updated' : 'created';
121
+ return `Order.${fn}(${JSON.stringify(o.direction)})`;
100
122
  } else {
101
123
  return `Order.property(${JSON.stringify(o.property)}, ${JSON.stringify(o.direction)})`;
102
124
  }
@@ -109,22 +131,28 @@ export const prettyQuery = (query: QueryAST.Query): string => {
109
131
  if (opts.deleted !== undefined) {
110
132
  parts.push(`deleted: ${JSON.stringify(opts.deleted)}`);
111
133
  }
134
+ if (opts.debugLabel !== undefined) {
135
+ parts.push(`debugLabel: ${JSON.stringify(opts.debugLabel)}`);
136
+ }
112
137
  return `${prettyQuery(query.query)}.options({ ${parts.join(', ')} })`;
113
138
  }
114
139
  case 'from': {
115
140
  if (query.from._tag === 'scope') {
116
- const scope = query.from.scope;
117
- const parts: string[] = [];
118
- if (scope.spaceIds !== undefined) {
119
- parts.push(`spaceIds: [${scope.spaceIds.map((s) => JSON.stringify(s)).join(', ')}]`);
120
- }
121
- if (scope.queues !== undefined) {
122
- parts.push(`queues: [${scope.queues.map(String).join(', ')}]`);
123
- }
124
- if (scope.allQueuesFromSpaces !== undefined) {
125
- parts.push(`allQueuesFromSpaces: ${scope.allQueuesFromSpaces}`);
141
+ if (query.from.scopes.length === 0) {
142
+ return `${prettyQuery(query.query)}.from('all-accessible-spaces')`;
126
143
  }
127
- return `${prettyQuery(query.query)}.from({ ${parts.join(', ')} })`;
144
+ const scopeStrs = query.from.scopes.map((scope) => {
145
+ if (scope._tag === 'space') {
146
+ return scope.includeAllFeeds
147
+ ? `{ space: ${JSON.stringify(scope.spaceId)}, includeAllFeeds: true }`
148
+ : `{ space: ${JSON.stringify(scope.spaceId)} }`;
149
+ }
150
+ if (scope._tag === 'feed') {
151
+ return `{ feed: ${JSON.stringify(String(scope.feedUri))} }`;
152
+ }
153
+ return `{ registry: ${JSON.stringify(scope.location)} }`;
154
+ });
155
+ return `${prettyQuery(query.query)}.from([${scopeStrs.join(', ')}])`;
128
156
  }
129
157
  return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;
130
158
  }
@@ -0,0 +1,20 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Atom from '@effect-atom/atom/Atom';
6
+
7
+ import type { Ref } from './ref';
8
+ import { loadRefTarget } from './utils';
9
+
10
+ /**
11
+ * Atom family for ECHO refs.
12
+ * Uses ref reference as key — same ref returns same atom.
13
+ * This atom only updates once when the ref loads — it does not subscribe to target object changes.
14
+ * Use `Obj.atom(ref)` if you need reactive snapshots of ECHO objects via a ref.
15
+ */
16
+ export const refSimpleFamily = Atom.family(<T>(ref: Ref<T>): Atom.Atom<T | undefined> => {
17
+ return Atom.make<T | undefined>((get) => {
18
+ return loadRefTarget(ref, get, (target) => target);
19
+ });
20
+ });
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { type ObjectId } from '@dxos/keys';
5
+ import { type EntityId } from '@dxos/keys';
6
6
  import { isNonNullable } from '@dxos/util';
7
7
 
8
8
  import { type AnyEntity } from '../common/types';
@@ -29,8 +29,8 @@ export const RefArray = Object.freeze({
29
29
  /**
30
30
  * Removes the ref with the given id.
31
31
  */
32
- removeById: (refs: Ref<AnyEntity>[], id: ObjectId) => {
33
- const index = refs.findIndex(Ref.hasObjectId(id));
32
+ removeById: (refs: Ref<AnyEntity>[], id: EntityId) => {
33
+ const index = refs.findIndex(Ref.hasEntityId(id));
34
34
  if (index >= 0) {
35
35
  refs.splice(index, 1);
36
36
  }
@@ -5,46 +5,37 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import { describe, expect, test } from 'vitest';
7
7
 
8
- import { DXN, ObjectId } from '@dxos/keys';
8
+ import { EID, EntityId, DXN } from '@dxos/keys';
9
9
 
10
- import { EchoObjectSchema, getObjectDXN } from '../Entity';
10
+ import * as Type from '../../Type';
11
+ import { EchoObjectSchema, getObjectEchoUri } from '../Entity';
11
12
  import { createObject } from '../Obj';
12
13
  import { Ref, getReferenceAst } from './ref';
13
14
 
14
15
  const Task = Schema.Struct({
15
16
  title: Schema.optional(Schema.String),
16
- }).pipe(
17
- EchoObjectSchema({
18
- typename: 'com.example.type.task',
19
- version: '0.1.0',
20
- }),
21
- );
17
+ }).pipe(EchoObjectSchema(DXN.make('com.example.type.task', '0.1.0')));
22
18
 
23
- type Task = Schema.Schema.Type<typeof Task>;
19
+ type Task = Type.InstanceType<typeof Task>;
24
20
 
25
21
  const Contact = Schema.Struct({
26
22
  name: Schema.String,
27
23
  email: Schema.optional(Schema.String),
28
24
  tasks: Schema.Array(Ref(Task)),
29
- }).pipe(
30
- EchoObjectSchema({
31
- typename: 'com.example.type.person',
32
- version: '0.1.0',
33
- }),
34
- );
25
+ }).pipe(EchoObjectSchema(DXN.make('com.example.type.person', '0.1.0')));
35
26
 
36
- type Contact = Schema.Schema.Type<typeof Contact>;
27
+ type Contact = Type.InstanceType<typeof Contact>;
37
28
 
38
29
  describe('Ref', () => {
39
30
  test('Schema is', () => {
40
- Ref(Contact).pipe(Schema.is)(Ref.fromDXN(DXN.parse(`dxn:echo:@:${ObjectId.random()}`)));
31
+ Ref(Contact).pipe(Schema.is)(Ref.fromURI(EID.make({ entityId: EntityId.random() })));
41
32
  });
42
33
 
43
34
  test('ref ast', () => {
44
35
  const ref = Ref(Task);
45
36
  expect(ref.ast._tag).toEqual('Declaration');
46
37
  const refAst = getReferenceAst(ref.ast);
47
- expect(refAst).toEqual({ typename: Task.typename, version: Task.version });
38
+ expect(refAst).toEqual({ typename: Type.getTypename(Task), version: Type.getVersion(Task) });
48
39
  });
49
40
 
50
41
  // TODO(dmaretskyi): Figure out how to expose this in the API.
@@ -55,14 +46,14 @@ describe('Ref', () => {
55
46
  const json = JSON.parse(JSON.stringify(contact));
56
47
  expect(json).toEqual({
57
48
  id: contact.id,
58
- '@type': `dxn:type:${Contact.typename}:${Contact.version}`,
49
+ '@type': `dxn:${Type.getTypename(Contact)}:${Type.getVersion(Contact)}`,
59
50
  '@meta': {
60
51
  keys: [],
61
52
  },
62
53
  name: 'John Doe',
63
54
  tasks: [
64
55
  {
65
- '/': getObjectDXN(task as any)!.toString(),
56
+ '/': getObjectEchoUri(task)!.toString(),
66
57
  target: JSON.parse(JSON.stringify(task)),
67
58
  },
68
59
  ],
@@ -76,25 +67,25 @@ describe('Ref', () => {
76
67
  const json = JSON.parse(JSON.stringify(contact));
77
68
  expect(json).toEqual({
78
69
  id: contact.id,
79
- '@type': `dxn:type:${Contact.typename}:${Contact.version}`,
70
+ '@type': `dxn:${Type.getTypename(Contact)}:${Type.getVersion(Contact)}`,
80
71
  '@meta': {
81
72
  keys: [],
82
73
  },
83
74
  name: 'John Doe',
84
- tasks: [{ '/': getObjectDXN(task)!.toString() }],
75
+ tasks: [{ '/': getObjectEchoUri(task)!.toString() }],
85
76
  });
86
77
  });
87
78
 
88
79
  test('decode object', () => {
89
- const id = ObjectId.random();
80
+ const id = EntityId.random();
90
81
  const contactData = {
91
- id: ObjectId.random(),
82
+ id: EntityId.random(),
92
83
  name: 'John Doe',
93
- tasks: [{ '/': `dxn:echo:@:${id}` }],
84
+ tasks: [{ '/': `echo:/${id}` }],
94
85
  };
95
86
 
96
- const contact = Contact.pipe(Schema.decodeUnknownSync)(contactData);
87
+ const contact = Type.getSchema(Contact).pipe(Schema.decodeUnknownSync)(contactData);
97
88
  expect(Ref.isRef(contact.tasks[0])).toEqual(true);
98
- expect(contact.tasks[0].dxn.toString()).toEqual(`dxn:echo:@:${id}`);
89
+ expect(contact.tasks[0].uri.toString()).toEqual(`echo:/${id}`);
99
90
  });
100
91
  });